'use strict'; var obsidian = require('obsidian'); function _mergeNamespaces(n, m) { m.forEach(function (e) { e && typeof e !== 'string' && !Array.isArray(e) && Object.keys(e).forEach(function (k) { if (k !== 'default' && !(k in n)) { var d = Object.getOwnPropertyDescriptor(e, k); Object.defineProperty(n, k, d.get ? d : { enumerable: true, get: function () { return e[k]; } }); } }); }); return Object.freeze(n); } /*! ***************************************************************************** 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 __()); } 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 }; } } var BetterPdfSettings = /** @class */ (function () { function BetterPdfSettings() { this.fit_by_default = true; this.link_by_default = true; } return BetterPdfSettings; }()); var BetterPdfSettingsTab = /** @class */ (function (_super) { __extends(BetterPdfSettingsTab, _super); function BetterPdfSettingsTab(app, plugin) { var _this = _super.call(this, app, plugin) || this; _this.plugin = plugin; return _this; } BetterPdfSettingsTab.prototype.display = function () { var _this = this; var containerEl = this.containerEl; containerEl.empty(); new obsidian.Setting(containerEl) .setName("Fit pages by default") .setDesc("When turned on, pages will be scaled to the view by default. Can be overridden using the 'fit' parameter") .addToggle(function (toggle) { return toggle.setValue(_this.plugin.settings.fit_by_default) .onChange(function (value) { _this.plugin.settings.fit_by_default = value; _this.plugin.saveData(_this.plugin.settings); }); }); new obsidian.Setting(containerEl) .setName("Link pages by default") .setDesc("When turned on, pages will be linked to their document by default. Can be overridden using the 'link' parameter") .addToggle(function (toggle) { return toggle.setValue(_this.plugin.settings.link_by_default) .onChange(function (value) { _this.plugin.settings.link_by_default = value; _this.plugin.saveData(_this.plugin.settings); }); }); }; return BetterPdfSettingsTab; }(obsidian.PluginSettingTab)); var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; function createCommonjsModule(fn, basedir, module) { return module = { path: basedir, exports: {}, require: function (path, base) { return commonjsRequire(path, (base === undefined || base === null) ? module.path : base); } }, fn(module, module.exports), module.exports; } function getAugmentedNamespace(n) { if (n.__esModule) return n; var a = Object.defineProperty({}, '__esModule', {value: true}); Object.keys(n).forEach(function (k) { var d = Object.getOwnPropertyDescriptor(n, k); Object.defineProperty(a, k, d.get ? d : { enumerable: true, get: function () { return n[k]; } }); }); return a; } function commonjsRequire () { throw new Error('Dynamic requires are not currently supported by @rollup/plugin-commonjs'); } var _nodeResolve_empty = {}; var _nodeResolve_empty$1 = /*#__PURE__*/Object.freeze({ __proto__: null, 'default': _nodeResolve_empty }); var require$$5 = /*@__PURE__*/getAugmentedNamespace(_nodeResolve_empty$1); var pdf = createCommonjsModule(function (module, exports) { /** * @licstart The following is the entire license notice for the * Javascript code in this page * * Copyright 2021 Mozilla Foundation * * 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 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * @licend The above is the entire license notice for the * Javascript code in this page */ (function webpackUniversalModuleDefinition(root, factory) { module.exports = factory(); })(commonjsGlobal, function() { return /******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = ([ /* 0 */, /* 1 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.StatTimer = exports.RenderingCancelledException = exports.PixelsPerInch = exports.PageViewport = exports.PDFDateString = exports.LinkTarget = exports.DOMStandardFontDataFactory = exports.DOMSVGFactory = exports.DOMCanvasFactory = exports.DOMCMapReaderFactory = void 0; exports.addLinkAttributes = addLinkAttributes; exports.deprecated = deprecated; exports.getFilenameFromUrl = getFilenameFromUrl; exports.getPdfFilenameFromUrl = getPdfFilenameFromUrl; exports.getXfaPageViewport = getXfaPageViewport; exports.isDataScheme = isDataScheme; exports.isPdfFile = isPdfFile; exports.isValidFetchUrl = isValidFetchUrl; exports.loadScript = loadScript; var _util = __w_pdfjs_require__(2); var _base_factory = __w_pdfjs_require__(5); const DEFAULT_LINK_REL = "noopener noreferrer nofollow"; const SVG_NS = "http://www.w3.org/2000/svg"; const PixelsPerInch = { CSS: 96.0, PDF: 72.0, get PDF_TO_CSS_UNITS() { return (0, _util.shadow)(this, "PDF_TO_CSS_UNITS", this.CSS / this.PDF); } }; exports.PixelsPerInch = PixelsPerInch; class DOMCanvasFactory extends _base_factory.BaseCanvasFactory { constructor({ ownerDocument = globalThis.document } = {}) { super(); this._document = ownerDocument; } _createCanvas(width, height) { const canvas = this._document.createElement("canvas"); canvas.width = width; canvas.height = height; return canvas; } } exports.DOMCanvasFactory = DOMCanvasFactory; async function fetchData(url, asTypedArray = false) { if (isValidFetchUrl(url, document.baseURI)) { const response = await fetch(url); if (!response.ok) { throw new Error(response.statusText); } return asTypedArray ? new Uint8Array(await response.arrayBuffer()) : (0, _util.stringToBytes)(await response.text()); } return new Promise((resolve, reject) => { const request = new XMLHttpRequest(); request.open("GET", url, true); if (asTypedArray) { request.responseType = "arraybuffer"; } request.onreadystatechange = () => { if (request.readyState !== XMLHttpRequest.DONE) { return; } if (request.status === 200 || request.status === 0) { let data; if (asTypedArray && request.response) { data = new Uint8Array(request.response); } else if (!asTypedArray && request.responseText) { data = (0, _util.stringToBytes)(request.responseText); } if (data) { resolve(data); return; } } reject(new Error(request.statusText)); }; request.send(null); }); } class DOMCMapReaderFactory extends _base_factory.BaseCMapReaderFactory { _fetchData(url, compressionType) { return fetchData(url, this.isCompressed).then(data => { return { cMapData: data, compressionType }; }); } } exports.DOMCMapReaderFactory = DOMCMapReaderFactory; class DOMStandardFontDataFactory extends _base_factory.BaseStandardFontDataFactory { _fetchData(url) { return fetchData(url, true); } } exports.DOMStandardFontDataFactory = DOMStandardFontDataFactory; class DOMSVGFactory extends _base_factory.BaseSVGFactory { _createSVG(type) { return document.createElementNS(SVG_NS, type); } } exports.DOMSVGFactory = DOMSVGFactory; class PageViewport { constructor({ viewBox, scale, rotation, offsetX = 0, offsetY = 0, dontFlip = false }) { this.viewBox = viewBox; this.scale = scale; this.rotation = rotation; this.offsetX = offsetX; this.offsetY = offsetY; const centerX = (viewBox[2] + viewBox[0]) / 2; const centerY = (viewBox[3] + viewBox[1]) / 2; let rotateA, rotateB, rotateC, rotateD; rotation %= 360; if (rotation < 0) { rotation += 360; } switch (rotation) { case 180: rotateA = -1; rotateB = 0; rotateC = 0; rotateD = 1; break; case 90: rotateA = 0; rotateB = 1; rotateC = 1; rotateD = 0; break; case 270: rotateA = 0; rotateB = -1; rotateC = -1; rotateD = 0; break; case 0: rotateA = 1; rotateB = 0; rotateC = 0; rotateD = -1; break; default: throw new Error("PageViewport: Invalid rotation, must be a multiple of 90 degrees."); } if (dontFlip) { rotateC = -rotateC; rotateD = -rotateD; } let offsetCanvasX, offsetCanvasY; let width, height; if (rotateA === 0) { offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX; offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY; width = Math.abs(viewBox[3] - viewBox[1]) * scale; height = Math.abs(viewBox[2] - viewBox[0]) * scale; } else { offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX; offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY; width = Math.abs(viewBox[2] - viewBox[0]) * scale; height = Math.abs(viewBox[3] - viewBox[1]) * scale; } this.transform = [rotateA * scale, rotateB * scale, rotateC * scale, rotateD * scale, offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY, offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY]; this.width = width; this.height = height; } clone({ scale = this.scale, rotation = this.rotation, offsetX = this.offsetX, offsetY = this.offsetY, dontFlip = false } = {}) { return new PageViewport({ viewBox: this.viewBox.slice(), scale, rotation, offsetX, offsetY, dontFlip }); } convertToViewportPoint(x, y) { return _util.Util.applyTransform([x, y], this.transform); } convertToViewportRectangle(rect) { const topLeft = _util.Util.applyTransform([rect[0], rect[1]], this.transform); const bottomRight = _util.Util.applyTransform([rect[2], rect[3]], this.transform); return [topLeft[0], topLeft[1], bottomRight[0], bottomRight[1]]; } convertToPdfPoint(x, y) { return _util.Util.applyInverseTransform([x, y], this.transform); } } exports.PageViewport = PageViewport; class RenderingCancelledException extends _util.BaseException { constructor(msg, type) { super(msg, "RenderingCancelledException"); this.type = type; } } exports.RenderingCancelledException = RenderingCancelledException; const LinkTarget = { NONE: 0, SELF: 1, BLANK: 2, PARENT: 3, TOP: 4 }; exports.LinkTarget = LinkTarget; function addLinkAttributes(link, { url, target, rel, enabled = true } = {}) { (0, _util.assert)(url && typeof url === "string", 'addLinkAttributes: A valid "url" parameter must provided.'); const urlNullRemoved = (0, _util.removeNullCharacters)(url); if (enabled) { link.href = link.title = urlNullRemoved; } else { link.href = ""; link.title = `Disabled: ${urlNullRemoved}`; link.onclick = () => { return false; }; } let targetStr = ""; switch (target) { case LinkTarget.NONE: break; case LinkTarget.SELF: targetStr = "_self"; break; case LinkTarget.BLANK: targetStr = "_blank"; break; case LinkTarget.PARENT: targetStr = "_parent"; break; case LinkTarget.TOP: targetStr = "_top"; break; } link.target = targetStr; link.rel = typeof rel === "string" ? rel : DEFAULT_LINK_REL; } function isDataScheme(url) { const ii = url.length; let i = 0; while (i < ii && url[i].trim() === "") { i++; } return url.substring(i, i + 5).toLowerCase() === "data:"; } function isPdfFile(filename) { return typeof filename === "string" && /\.pdf$/i.test(filename); } function getFilenameFromUrl(url) { const anchor = url.indexOf("#"); const query = url.indexOf("?"); const end = Math.min(anchor > 0 ? anchor : url.length, query > 0 ? query : url.length); return url.substring(url.lastIndexOf("/", end) + 1, end); } function getPdfFilenameFromUrl(url, defaultFilename = "document.pdf") { if (typeof url !== "string") { return defaultFilename; } if (isDataScheme(url)) { (0, _util.warn)('getPdfFilenameFromUrl: ignore "data:"-URL for performance reasons.'); return defaultFilename; } const reURI = /^(?:(?:[^:]+:)?\/\/[^/]+)?([^?#]*)(\?[^#]*)?(#.*)?$/; const reFilename = /[^/?#=]+\.pdf\b(?!.*\.pdf\b)/i; const splitURI = reURI.exec(url); let suggestedFilename = reFilename.exec(splitURI[1]) || reFilename.exec(splitURI[2]) || reFilename.exec(splitURI[3]); if (suggestedFilename) { suggestedFilename = suggestedFilename[0]; if (suggestedFilename.includes("%")) { try { suggestedFilename = reFilename.exec(decodeURIComponent(suggestedFilename))[0]; } catch (ex) {} } } return suggestedFilename || defaultFilename; } class StatTimer { constructor() { this.started = Object.create(null); this.times = []; } time(name) { if (name in this.started) { (0, _util.warn)(`Timer is already running for ${name}`); } this.started[name] = Date.now(); } timeEnd(name) { if (!(name in this.started)) { (0, _util.warn)(`Timer has not been started for ${name}`); } this.times.push({ name, start: this.started[name], end: Date.now() }); delete this.started[name]; } toString() { const outBuf = []; let longest = 0; for (const time of this.times) { const name = time.name; if (name.length > longest) { longest = name.length; } } for (const time of this.times) { const duration = time.end - time.start; outBuf.push(`${time.name.padEnd(longest)} ${duration}ms\n`); } return outBuf.join(""); } } exports.StatTimer = StatTimer; function isValidFetchUrl(url, baseUrl) { try { const { protocol } = baseUrl ? new URL(url, baseUrl) : new URL(url); return protocol === "http:" || protocol === "https:"; } catch (ex) { return false; } } function loadScript(src, removeScriptElement = false) { return new Promise((resolve, reject) => { const script = document.createElement("script"); script.src = src; script.onload = function (evt) { if (removeScriptElement) { script.remove(); } resolve(evt); }; script.onerror = function () { reject(new Error(`Cannot load script at: ${script.src}`)); }; (document.head || document.documentElement).appendChild(script); }); } function deprecated(details) { console.log("Deprecated API usage: " + details); } let pdfDateStringRegex; class PDFDateString { static toDateObject(input) { if (!input || !(0, _util.isString)(input)) { return null; } if (!pdfDateStringRegex) { pdfDateStringRegex = new RegExp("^D:" + "(\\d{4})" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "([Z|+|-])?" + "(\\d{2})?" + "'?" + "(\\d{2})?" + "'?"); } const matches = pdfDateStringRegex.exec(input); if (!matches) { return null; } const year = parseInt(matches[1], 10); let month = parseInt(matches[2], 10); month = month >= 1 && month <= 12 ? month - 1 : 0; let day = parseInt(matches[3], 10); day = day >= 1 && day <= 31 ? day : 1; let hour = parseInt(matches[4], 10); hour = hour >= 0 && hour <= 23 ? hour : 0; let minute = parseInt(matches[5], 10); minute = minute >= 0 && minute <= 59 ? minute : 0; let second = parseInt(matches[6], 10); second = second >= 0 && second <= 59 ? second : 0; const universalTimeRelation = matches[7] || "Z"; let offsetHour = parseInt(matches[8], 10); offsetHour = offsetHour >= 0 && offsetHour <= 23 ? offsetHour : 0; let offsetMinute = parseInt(matches[9], 10) || 0; offsetMinute = offsetMinute >= 0 && offsetMinute <= 59 ? offsetMinute : 0; if (universalTimeRelation === "-") { hour += offsetHour; minute += offsetMinute; } else if (universalTimeRelation === "+") { hour -= offsetHour; minute -= offsetMinute; } return new Date(Date.UTC(year, month, day, hour, minute, second)); } } exports.PDFDateString = PDFDateString; function getXfaPageViewport(xfaPage, { scale = 1, rotation = 0 }) { const { width, height } = xfaPage.attributes.style; const viewBox = [0, 0, parseInt(width), parseInt(height)]; return new PageViewport({ viewBox, scale, rotation }); } /***/ }), /* 2 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.VerbosityLevel = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.UNSUPPORTED_FEATURES = exports.TextRenderingMode = exports.StreamType = exports.RenderingIntentFlag = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.PageActionEventType = exports.OPS = exports.MissingPDFException = exports.IsLittleEndianCached = exports.IsEvalSupportedCached = exports.InvalidPDFException = exports.ImageKind = exports.IDENTITY_MATRIX = exports.FormatError = exports.FontType = exports.FONT_IDENTITY_MATRIX = exports.DocumentActionEventType = exports.CMapCompressionType = exports.BaseException = exports.AnnotationType = exports.AnnotationStateModelType = exports.AnnotationReviewState = exports.AnnotationReplyType = exports.AnnotationMode = exports.AnnotationMarkedState = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.AnnotationActionEventType = exports.AbortException = void 0; exports.arrayByteLength = arrayByteLength; exports.arraysToBytes = arraysToBytes; exports.assert = assert; exports.bytesToString = bytesToString; exports.createObjectURL = createObjectURL; exports.createPromiseCapability = createPromiseCapability; exports.createValidAbsoluteUrl = createValidAbsoluteUrl; exports.escapeString = escapeString; exports.getModificationDate = getModificationDate; exports.getVerbosityLevel = getVerbosityLevel; exports.info = info; exports.isArrayBuffer = isArrayBuffer; exports.isArrayEqual = isArrayEqual; exports.isAscii = isAscii; exports.isBool = isBool; exports.isNum = isNum; exports.isSameOrigin = isSameOrigin; exports.isString = isString; exports.objectFromMap = objectFromMap; exports.objectSize = objectSize; exports.removeNullCharacters = removeNullCharacters; exports.setVerbosityLevel = setVerbosityLevel; exports.shadow = shadow; exports.string32 = string32; exports.stringToBytes = stringToBytes; exports.stringToPDFString = stringToPDFString; exports.stringToUTF16BEString = stringToUTF16BEString; exports.stringToUTF8String = stringToUTF8String; exports.unreachable = unreachable; exports.utf8StringToString = utf8StringToString; exports.warn = warn; __w_pdfjs_require__(3); const IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0]; exports.IDENTITY_MATRIX = IDENTITY_MATRIX; const FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0]; exports.FONT_IDENTITY_MATRIX = FONT_IDENTITY_MATRIX; const RenderingIntentFlag = { ANY: 0x01, DISPLAY: 0x02, PRINT: 0x04, ANNOTATIONS_FORMS: 0x10, ANNOTATIONS_STORAGE: 0x20, ANNOTATIONS_DISABLE: 0x40, OPLIST: 0x100 }; exports.RenderingIntentFlag = RenderingIntentFlag; const AnnotationMode = { DISABLE: 0, ENABLE: 1, ENABLE_FORMS: 2, ENABLE_STORAGE: 3 }; exports.AnnotationMode = AnnotationMode; const PermissionFlag = { PRINT: 0x04, MODIFY_CONTENTS: 0x08, COPY: 0x10, MODIFY_ANNOTATIONS: 0x20, FILL_INTERACTIVE_FORMS: 0x100, COPY_FOR_ACCESSIBILITY: 0x200, ASSEMBLE: 0x400, PRINT_HIGH_QUALITY: 0x800 }; exports.PermissionFlag = PermissionFlag; const TextRenderingMode = { FILL: 0, STROKE: 1, FILL_STROKE: 2, INVISIBLE: 3, FILL_ADD_TO_PATH: 4, STROKE_ADD_TO_PATH: 5, FILL_STROKE_ADD_TO_PATH: 6, ADD_TO_PATH: 7, FILL_STROKE_MASK: 3, ADD_TO_PATH_FLAG: 4 }; exports.TextRenderingMode = TextRenderingMode; const ImageKind = { GRAYSCALE_1BPP: 1, RGB_24BPP: 2, RGBA_32BPP: 3 }; exports.ImageKind = ImageKind; const AnnotationType = { TEXT: 1, LINK: 2, FREETEXT: 3, LINE: 4, SQUARE: 5, CIRCLE: 6, POLYGON: 7, POLYLINE: 8, HIGHLIGHT: 9, UNDERLINE: 10, SQUIGGLY: 11, STRIKEOUT: 12, STAMP: 13, CARET: 14, INK: 15, POPUP: 16, FILEATTACHMENT: 17, SOUND: 18, MOVIE: 19, WIDGET: 20, SCREEN: 21, PRINTERMARK: 22, TRAPNET: 23, WATERMARK: 24, THREED: 25, REDACT: 26 }; exports.AnnotationType = AnnotationType; const AnnotationStateModelType = { MARKED: "Marked", REVIEW: "Review" }; exports.AnnotationStateModelType = AnnotationStateModelType; const AnnotationMarkedState = { MARKED: "Marked", UNMARKED: "Unmarked" }; exports.AnnotationMarkedState = AnnotationMarkedState; const AnnotationReviewState = { ACCEPTED: "Accepted", REJECTED: "Rejected", CANCELLED: "Cancelled", COMPLETED: "Completed", NONE: "None" }; exports.AnnotationReviewState = AnnotationReviewState; const AnnotationReplyType = { GROUP: "Group", REPLY: "R" }; exports.AnnotationReplyType = AnnotationReplyType; const AnnotationFlag = { INVISIBLE: 0x01, HIDDEN: 0x02, PRINT: 0x04, NOZOOM: 0x08, NOROTATE: 0x10, NOVIEW: 0x20, READONLY: 0x40, LOCKED: 0x80, TOGGLENOVIEW: 0x100, LOCKEDCONTENTS: 0x200 }; exports.AnnotationFlag = AnnotationFlag; const AnnotationFieldFlag = { READONLY: 0x0000001, REQUIRED: 0x0000002, NOEXPORT: 0x0000004, MULTILINE: 0x0001000, PASSWORD: 0x0002000, NOTOGGLETOOFF: 0x0004000, RADIO: 0x0008000, PUSHBUTTON: 0x0010000, COMBO: 0x0020000, EDIT: 0x0040000, SORT: 0x0080000, FILESELECT: 0x0100000, MULTISELECT: 0x0200000, DONOTSPELLCHECK: 0x0400000, DONOTSCROLL: 0x0800000, COMB: 0x1000000, RICHTEXT: 0x2000000, RADIOSINUNISON: 0x2000000, COMMITONSELCHANGE: 0x4000000 }; exports.AnnotationFieldFlag = AnnotationFieldFlag; const AnnotationBorderStyleType = { SOLID: 1, DASHED: 2, BEVELED: 3, INSET: 4, UNDERLINE: 5 }; exports.AnnotationBorderStyleType = AnnotationBorderStyleType; const AnnotationActionEventType = { E: "Mouse Enter", X: "Mouse Exit", D: "Mouse Down", U: "Mouse Up", Fo: "Focus", Bl: "Blur", PO: "PageOpen", PC: "PageClose", PV: "PageVisible", PI: "PageInvisible", K: "Keystroke", F: "Format", V: "Validate", C: "Calculate" }; exports.AnnotationActionEventType = AnnotationActionEventType; const DocumentActionEventType = { WC: "WillClose", WS: "WillSave", DS: "DidSave", WP: "WillPrint", DP: "DidPrint" }; exports.DocumentActionEventType = DocumentActionEventType; const PageActionEventType = { O: "PageOpen", C: "PageClose" }; exports.PageActionEventType = PageActionEventType; const StreamType = { UNKNOWN: "UNKNOWN", FLATE: "FLATE", LZW: "LZW", DCT: "DCT", JPX: "JPX", JBIG: "JBIG", A85: "A85", AHX: "AHX", CCF: "CCF", RLX: "RLX" }; exports.StreamType = StreamType; const FontType = { UNKNOWN: "UNKNOWN", TYPE1: "TYPE1", TYPE1STANDARD: "TYPE1STANDARD", TYPE1C: "TYPE1C", CIDFONTTYPE0: "CIDFONTTYPE0", CIDFONTTYPE0C: "CIDFONTTYPE0C", TRUETYPE: "TRUETYPE", CIDFONTTYPE2: "CIDFONTTYPE2", TYPE3: "TYPE3", OPENTYPE: "OPENTYPE", TYPE0: "TYPE0", MMTYPE1: "MMTYPE1" }; exports.FontType = FontType; const VerbosityLevel = { ERRORS: 0, WARNINGS: 1, INFOS: 5 }; exports.VerbosityLevel = VerbosityLevel; const CMapCompressionType = { NONE: 0, BINARY: 1, STREAM: 2 }; exports.CMapCompressionType = CMapCompressionType; const OPS = { dependency: 1, setLineWidth: 2, setLineCap: 3, setLineJoin: 4, setMiterLimit: 5, setDash: 6, setRenderingIntent: 7, setFlatness: 8, setGState: 9, save: 10, restore: 11, transform: 12, moveTo: 13, lineTo: 14, curveTo: 15, curveTo2: 16, curveTo3: 17, closePath: 18, rectangle: 19, stroke: 20, closeStroke: 21, fill: 22, eoFill: 23, fillStroke: 24, eoFillStroke: 25, closeFillStroke: 26, closeEOFillStroke: 27, endPath: 28, clip: 29, eoClip: 30, beginText: 31, endText: 32, setCharSpacing: 33, setWordSpacing: 34, setHScale: 35, setLeading: 36, setFont: 37, setTextRenderingMode: 38, setTextRise: 39, moveText: 40, setLeadingMoveText: 41, setTextMatrix: 42, nextLine: 43, showText: 44, showSpacedText: 45, nextLineShowText: 46, nextLineSetSpacingShowText: 47, setCharWidth: 48, setCharWidthAndBounds: 49, setStrokeColorSpace: 50, setFillColorSpace: 51, setStrokeColor: 52, setStrokeColorN: 53, setFillColor: 54, setFillColorN: 55, setStrokeGray: 56, setFillGray: 57, setStrokeRGBColor: 58, setFillRGBColor: 59, setStrokeCMYKColor: 60, setFillCMYKColor: 61, shadingFill: 62, beginInlineImage: 63, beginImageData: 64, endInlineImage: 65, paintXObject: 66, markPoint: 67, markPointProps: 68, beginMarkedContent: 69, beginMarkedContentProps: 70, endMarkedContent: 71, beginCompat: 72, endCompat: 73, paintFormXObjectBegin: 74, paintFormXObjectEnd: 75, beginGroup: 76, endGroup: 77, beginAnnotations: 78, endAnnotations: 79, beginAnnotation: 80, endAnnotation: 81, paintJpegXObject: 82, paintImageMaskXObject: 83, paintImageMaskXObjectGroup: 84, paintImageXObject: 85, paintInlineImageXObject: 86, paintInlineImageXObjectGroup: 87, paintImageXObjectRepeat: 88, paintImageMaskXObjectRepeat: 89, paintSolidColorImageMask: 90, constructPath: 91 }; exports.OPS = OPS; const UNSUPPORTED_FEATURES = { unknown: "unknown", forms: "forms", javaScript: "javaScript", signatures: "signatures", smask: "smask", shadingPattern: "shadingPattern", font: "font", errorTilingPattern: "errorTilingPattern", errorExtGState: "errorExtGState", errorXObject: "errorXObject", errorFontLoadType3: "errorFontLoadType3", errorFontState: "errorFontState", errorFontMissing: "errorFontMissing", errorFontTranslate: "errorFontTranslate", errorColorSpace: "errorColorSpace", errorOperatorList: "errorOperatorList", errorFontToUnicode: "errorFontToUnicode", errorFontLoadNative: "errorFontLoadNative", errorFontBuildPath: "errorFontBuildPath", errorFontGetPath: "errorFontGetPath", errorMarkedContent: "errorMarkedContent", errorContentSubStream: "errorContentSubStream" }; exports.UNSUPPORTED_FEATURES = UNSUPPORTED_FEATURES; const PasswordResponses = { NEED_PASSWORD: 1, INCORRECT_PASSWORD: 2 }; exports.PasswordResponses = PasswordResponses; let verbosity = VerbosityLevel.WARNINGS; function setVerbosityLevel(level) { if (Number.isInteger(level)) { verbosity = level; } } function getVerbosityLevel() { return verbosity; } function info(msg) { if (verbosity >= VerbosityLevel.INFOS) { console.log(`Info: ${msg}`); } } function warn(msg) { if (verbosity >= VerbosityLevel.WARNINGS) { console.log(`Warning: ${msg}`); } } function unreachable(msg) { throw new Error(msg); } function assert(cond, msg) { if (!cond) { unreachable(msg); } } function isSameOrigin(baseUrl, otherUrl) { let base; try { base = new URL(baseUrl); if (!base.origin || base.origin === "null") { return false; } } catch (e) { return false; } const other = new URL(otherUrl, base); return base.origin === other.origin; } function _isValidProtocol(url) { if (!url) { return false; } switch (url.protocol) { case "http:": case "https:": case "ftp:": case "mailto:": case "tel:": return true; default: return false; } } function createValidAbsoluteUrl(url, baseUrl = null, options = null) { if (!url) { return null; } try { if (options && typeof url === "string") { if (options.addDefaultProtocol && url.startsWith("www.")) { const dots = url.match(/\./g); if (dots && dots.length >= 2) { url = `http://${url}`; } } if (options.tryConvertEncoding) { try { url = stringToUTF8String(url); } catch (ex) {} } } const absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url); if (_isValidProtocol(absoluteUrl)) { return absoluteUrl; } } catch (ex) {} return null; } function shadow(obj, prop, value) { Object.defineProperty(obj, prop, { value, enumerable: true, configurable: true, writable: false }); return value; } const BaseException = function BaseExceptionClosure() { function BaseException(message, name) { if (this.constructor === BaseException) { unreachable("Cannot initialize BaseException."); } this.message = message; this.name = name; } BaseException.prototype = new Error(); BaseException.constructor = BaseException; return BaseException; }(); exports.BaseException = BaseException; class PasswordException extends BaseException { constructor(msg, code) { super(msg, "PasswordException"); this.code = code; } } exports.PasswordException = PasswordException; class UnknownErrorException extends BaseException { constructor(msg, details) { super(msg, "UnknownErrorException"); this.details = details; } } exports.UnknownErrorException = UnknownErrorException; class InvalidPDFException extends BaseException { constructor(msg) { super(msg, "InvalidPDFException"); } } exports.InvalidPDFException = InvalidPDFException; class MissingPDFException extends BaseException { constructor(msg) { super(msg, "MissingPDFException"); } } exports.MissingPDFException = MissingPDFException; class UnexpectedResponseException extends BaseException { constructor(msg, status) { super(msg, "UnexpectedResponseException"); this.status = status; } } exports.UnexpectedResponseException = UnexpectedResponseException; class FormatError extends BaseException { constructor(msg) { super(msg, "FormatError"); } } exports.FormatError = FormatError; class AbortException extends BaseException { constructor(msg) { super(msg, "AbortException"); } } exports.AbortException = AbortException; const NullCharactersRegExp = /\x00+/g; const InvisibleCharactersRegExp = /[\x01-\x1F]/g; function removeNullCharacters(str, replaceInvisible = false) { if (typeof str !== "string") { warn("The argument for removeNullCharacters must be a string."); return str; } if (replaceInvisible) { str = str.replace(InvisibleCharactersRegExp, " "); } return str.replace(NullCharactersRegExp, ""); } function bytesToString(bytes) { assert(bytes !== null && typeof bytes === "object" && bytes.length !== undefined, "Invalid argument for bytesToString"); const length = bytes.length; const MAX_ARGUMENT_COUNT = 8192; if (length < MAX_ARGUMENT_COUNT) { return String.fromCharCode.apply(null, bytes); } const strBuf = []; for (let i = 0; i < length; i += MAX_ARGUMENT_COUNT) { const chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length); const chunk = bytes.subarray(i, chunkEnd); strBuf.push(String.fromCharCode.apply(null, chunk)); } return strBuf.join(""); } function stringToBytes(str) { assert(typeof str === "string", "Invalid argument for stringToBytes"); const length = str.length; const bytes = new Uint8Array(length); for (let i = 0; i < length; ++i) { bytes[i] = str.charCodeAt(i) & 0xff; } return bytes; } function arrayByteLength(arr) { if (arr.length !== undefined) { return arr.length; } assert(arr.byteLength !== undefined, "arrayByteLength - invalid argument."); return arr.byteLength; } function arraysToBytes(arr) { const length = arr.length; if (length === 1 && arr[0] instanceof Uint8Array) { return arr[0]; } let resultLength = 0; for (let i = 0; i < length; i++) { resultLength += arrayByteLength(arr[i]); } let pos = 0; const data = new Uint8Array(resultLength); for (let i = 0; i < length; i++) { let item = arr[i]; if (!(item instanceof Uint8Array)) { if (typeof item === "string") { item = stringToBytes(item); } else { item = new Uint8Array(item); } } const itemLength = item.byteLength; data.set(item, pos); pos += itemLength; } return data; } function string32(value) { return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff); } function objectSize(obj) { return Object.keys(obj).length; } function objectFromMap(map) { const obj = Object.create(null); for (const [key, value] of map) { obj[key] = value; } return obj; } function isLittleEndian() { const buffer8 = new Uint8Array(4); buffer8[0] = 1; const view32 = new Uint32Array(buffer8.buffer, 0, 1); return view32[0] === 1; } const IsLittleEndianCached = { get value() { return shadow(this, "value", isLittleEndian()); } }; exports.IsLittleEndianCached = IsLittleEndianCached; function isEvalSupported() { try { new Function(""); return true; } catch (e) { return false; } } const IsEvalSupportedCached = { get value() { return shadow(this, "value", isEvalSupported()); } }; exports.IsEvalSupportedCached = IsEvalSupportedCached; const hexNumbers = [...Array(256).keys()].map(n => n.toString(16).padStart(2, "0")); class Util { static makeHexColor(r, g, b) { return `#${hexNumbers[r]}${hexNumbers[g]}${hexNumbers[b]}`; } static transform(m1, m2) { return [m1[0] * m2[0] + m1[2] * m2[1], m1[1] * m2[0] + m1[3] * m2[1], m1[0] * m2[2] + m1[2] * m2[3], m1[1] * m2[2] + m1[3] * m2[3], m1[0] * m2[4] + m1[2] * m2[5] + m1[4], m1[1] * m2[4] + m1[3] * m2[5] + m1[5]]; } static applyTransform(p, m) { const xt = p[0] * m[0] + p[1] * m[2] + m[4]; const yt = p[0] * m[1] + p[1] * m[3] + m[5]; return [xt, yt]; } static applyInverseTransform(p, m) { const d = m[0] * m[3] - m[1] * m[2]; const xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d; const yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d; return [xt, yt]; } static getAxialAlignedBoundingBox(r, m) { const p1 = Util.applyTransform(r, m); const p2 = Util.applyTransform(r.slice(2, 4), m); const p3 = Util.applyTransform([r[0], r[3]], m); const p4 = Util.applyTransform([r[2], r[1]], m); return [Math.min(p1[0], p2[0], p3[0], p4[0]), Math.min(p1[1], p2[1], p3[1], p4[1]), Math.max(p1[0], p2[0], p3[0], p4[0]), Math.max(p1[1], p2[1], p3[1], p4[1])]; } static inverseTransform(m) { const d = m[0] * m[3] - m[1] * m[2]; return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d, (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d]; } static apply3dTransform(m, v) { return [m[0] * v[0] + m[1] * v[1] + m[2] * v[2], m[3] * v[0] + m[4] * v[1] + m[5] * v[2], m[6] * v[0] + m[7] * v[1] + m[8] * v[2]]; } static singularValueDecompose2dScale(m) { const transpose = [m[0], m[2], m[1], m[3]]; const a = m[0] * transpose[0] + m[1] * transpose[2]; const b = m[0] * transpose[1] + m[1] * transpose[3]; const c = m[2] * transpose[0] + m[3] * transpose[2]; const d = m[2] * transpose[1] + m[3] * transpose[3]; const first = (a + d) / 2; const second = Math.sqrt((a + d) ** 2 - 4 * (a * d - c * b)) / 2; const sx = first + second || 1; const sy = first - second || 1; return [Math.sqrt(sx), Math.sqrt(sy)]; } static normalizeRect(rect) { const r = rect.slice(0); if (rect[0] > rect[2]) { r[0] = rect[2]; r[2] = rect[0]; } if (rect[1] > rect[3]) { r[1] = rect[3]; r[3] = rect[1]; } return r; } static intersect(rect1, rect2) { function compare(a, b) { return a - b; } const orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare); const orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare); const result = []; rect1 = Util.normalizeRect(rect1); rect2 = Util.normalizeRect(rect2); if (orderedX[0] === rect1[0] && orderedX[1] === rect2[0] || orderedX[0] === rect2[0] && orderedX[1] === rect1[0]) { result[0] = orderedX[1]; result[2] = orderedX[2]; } else { return null; } if (orderedY[0] === rect1[1] && orderedY[1] === rect2[1] || orderedY[0] === rect2[1] && orderedY[1] === rect1[1]) { result[1] = orderedY[1]; result[3] = orderedY[2]; } else { return null; } return result; } static bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3) { const tvalues = [], bounds = [[], []]; let a, b, c, t, t1, t2, b2ac, sqrtb2ac; for (let i = 0; i < 2; ++i) { if (i === 0) { b = 6 * x0 - 12 * x1 + 6 * x2; a = -3 * x0 + 9 * x1 - 9 * x2 + 3 * x3; c = 3 * x1 - 3 * x0; } else { b = 6 * y0 - 12 * y1 + 6 * y2; a = -3 * y0 + 9 * y1 - 9 * y2 + 3 * y3; c = 3 * y1 - 3 * y0; } if (Math.abs(a) < 1e-12) { if (Math.abs(b) < 1e-12) { continue; } t = -c / b; if (0 < t && t < 1) { tvalues.push(t); } continue; } b2ac = b * b - 4 * c * a; sqrtb2ac = Math.sqrt(b2ac); if (b2ac < 0) { continue; } t1 = (-b + sqrtb2ac) / (2 * a); if (0 < t1 && t1 < 1) { tvalues.push(t1); } t2 = (-b - sqrtb2ac) / (2 * a); if (0 < t2 && t2 < 1) { tvalues.push(t2); } } let j = tvalues.length, mt; const jlen = j; while (j--) { t = tvalues[j]; mt = 1 - t; bounds[0][j] = mt * mt * mt * x0 + 3 * mt * mt * t * x1 + 3 * mt * t * t * x2 + t * t * t * x3; bounds[1][j] = mt * mt * mt * y0 + 3 * mt * mt * t * y1 + 3 * mt * t * t * y2 + t * t * t * y3; } bounds[0][jlen] = x0; bounds[1][jlen] = y0; bounds[0][jlen + 1] = x3; bounds[1][jlen + 1] = y3; bounds[0].length = bounds[1].length = jlen + 2; return [Math.min(...bounds[0]), Math.min(...bounds[1]), Math.max(...bounds[0]), Math.max(...bounds[1])]; } } exports.Util = Util; const PDFStringTranslateTable = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2d8, 0x2c7, 0x2c6, 0x2d9, 0x2dd, 0x2db, 0x2da, 0x2dc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x192, 0x2044, 0x2039, 0x203a, 0x2212, 0x2030, 0x201e, 0x201c, 0x201d, 0x2018, 0x2019, 0x201a, 0x2122, 0xfb01, 0xfb02, 0x141, 0x152, 0x160, 0x178, 0x17d, 0x131, 0x142, 0x153, 0x161, 0x17e, 0, 0x20ac]; function stringToPDFString(str) { const length = str.length, strBuf = []; if (str[0] === "\xFE" && str[1] === "\xFF") { for (let i = 2; i < length; i += 2) { strBuf.push(String.fromCharCode(str.charCodeAt(i) << 8 | str.charCodeAt(i + 1))); } } else if (str[0] === "\xFF" && str[1] === "\xFE") { for (let i = 2; i < length; i += 2) { strBuf.push(String.fromCharCode(str.charCodeAt(i + 1) << 8 | str.charCodeAt(i))); } } else { for (let i = 0; i < length; ++i) { const code = PDFStringTranslateTable[str.charCodeAt(i)]; strBuf.push(code ? String.fromCharCode(code) : str.charAt(i)); } } return strBuf.join(""); } function escapeString(str) { return str.replace(/([()\\\n\r])/g, match => { if (match === "\n") { return "\\n"; } else if (match === "\r") { return "\\r"; } return `\\${match}`; }); } function isAscii(str) { return /^[\x00-\x7F]*$/.test(str); } function stringToUTF16BEString(str) { const buf = ["\xFE\xFF"]; for (let i = 0, ii = str.length; i < ii; i++) { const char = str.charCodeAt(i); buf.push(String.fromCharCode(char >> 8 & 0xff), String.fromCharCode(char & 0xff)); } return buf.join(""); } function stringToUTF8String(str) { return decodeURIComponent(escape(str)); } function utf8StringToString(str) { return unescape(encodeURIComponent(str)); } function isBool(v) { return typeof v === "boolean"; } function isNum(v) { return typeof v === "number"; } function isString(v) { return typeof v === "string"; } function isArrayBuffer(v) { return typeof v === "object" && v !== null && v.byteLength !== undefined; } function isArrayEqual(arr1, arr2) { if (arr1.length !== arr2.length) { return false; } for (let i = 0, ii = arr1.length; i < ii; i++) { if (arr1[i] !== arr2[i]) { return false; } } return true; } function getModificationDate(date = new Date()) { const buffer = [date.getUTCFullYear().toString(), (date.getUTCMonth() + 1).toString().padStart(2, "0"), date.getUTCDate().toString().padStart(2, "0"), date.getUTCHours().toString().padStart(2, "0"), date.getUTCMinutes().toString().padStart(2, "0"), date.getUTCSeconds().toString().padStart(2, "0")]; return buffer.join(""); } function createPromiseCapability() { const capability = Object.create(null); let isSettled = false; Object.defineProperty(capability, "settled", { get() { return isSettled; } }); capability.promise = new Promise(function (resolve, reject) { capability.resolve = function (data) { isSettled = true; resolve(data); }; capability.reject = function (reason) { isSettled = true; reject(reason); }; }); return capability; } function createObjectURL(data, contentType = "", forceDataSchema = false) { if (URL.createObjectURL && typeof Blob !== "undefined" && !forceDataSchema) { return URL.createObjectURL(new Blob([data], { type: contentType })); } const digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; let buffer = `data:${contentType};base64,`; for (let i = 0, ii = data.length; i < ii; i += 3) { const b1 = data[i] & 0xff; const b2 = data[i + 1] & 0xff; const b3 = data[i + 2] & 0xff; const d1 = b1 >> 2, d2 = (b1 & 3) << 4 | b2 >> 4; const d3 = i + 1 < ii ? (b2 & 0xf) << 2 | b3 >> 6 : 64; const d4 = i + 2 < ii ? b3 & 0x3f : 64; buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4]; } return buffer; } /***/ }), /* 3 */ /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { __w_pdfjs_require__(4); /***/ }), /* 4 */ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.isNodeJS = void 0; const isNodeJS = typeof process === "object" && process + "" === "[object process]" && !process.versions.nw && !(process.versions.electron && process.type && process.type !== "browser"); exports.isNodeJS = isNodeJS; /***/ }), /* 5 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.BaseStandardFontDataFactory = exports.BaseSVGFactory = exports.BaseCanvasFactory = exports.BaseCMapReaderFactory = void 0; var _util = __w_pdfjs_require__(2); class BaseCanvasFactory { constructor() { if (this.constructor === BaseCanvasFactory) { (0, _util.unreachable)("Cannot initialize BaseCanvasFactory."); } } create(width, height) { if (width <= 0 || height <= 0) { throw new Error("Invalid canvas size"); } const canvas = this._createCanvas(width, height); return { canvas, context: canvas.getContext("2d") }; } reset(canvasAndContext, width, height) { if (!canvasAndContext.canvas) { throw new Error("Canvas is not specified"); } if (width <= 0 || height <= 0) { throw new Error("Invalid canvas size"); } canvasAndContext.canvas.width = width; canvasAndContext.canvas.height = height; } destroy(canvasAndContext) { if (!canvasAndContext.canvas) { throw new Error("Canvas is not specified"); } canvasAndContext.canvas.width = 0; canvasAndContext.canvas.height = 0; canvasAndContext.canvas = null; canvasAndContext.context = null; } _createCanvas(width, height) { (0, _util.unreachable)("Abstract method `_createCanvas` called."); } } exports.BaseCanvasFactory = BaseCanvasFactory; class BaseCMapReaderFactory { constructor({ baseUrl = null, isCompressed = false }) { if (this.constructor === BaseCMapReaderFactory) { (0, _util.unreachable)("Cannot initialize BaseCMapReaderFactory."); } this.baseUrl = baseUrl; this.isCompressed = isCompressed; } async fetch({ name }) { if (!this.baseUrl) { throw new Error('The CMap "baseUrl" parameter must be specified, ensure that ' + 'the "cMapUrl" and "cMapPacked" API parameters are provided.'); } if (!name) { throw new Error("CMap name must be specified."); } const url = this.baseUrl + name + (this.isCompressed ? ".bcmap" : ""); const compressionType = this.isCompressed ? _util.CMapCompressionType.BINARY : _util.CMapCompressionType.NONE; return this._fetchData(url, compressionType).catch(reason => { throw new Error(`Unable to load ${this.isCompressed ? "binary " : ""}CMap at: ${url}`); }); } _fetchData(url, compressionType) { (0, _util.unreachable)("Abstract method `_fetchData` called."); } } exports.BaseCMapReaderFactory = BaseCMapReaderFactory; class BaseStandardFontDataFactory { constructor({ baseUrl = null }) { if (this.constructor === BaseStandardFontDataFactory) { (0, _util.unreachable)("Cannot initialize BaseStandardFontDataFactory."); } this.baseUrl = baseUrl; } async fetch({ filename }) { if (!this.baseUrl) { throw new Error('The standard font "baseUrl" parameter must be specified, ensure that ' + 'the "standardFontDataUrl" API parameter is provided.'); } if (!filename) { throw new Error("Font filename must be specified."); } const url = `${this.baseUrl}${filename}`; return this._fetchData(url).catch(reason => { throw new Error(`Unable to load font data at: ${url}`); }); } _fetchData(url) { (0, _util.unreachable)("Abstract method `_fetchData` called."); } } exports.BaseStandardFontDataFactory = BaseStandardFontDataFactory; class BaseSVGFactory { constructor() { if (this.constructor === BaseSVGFactory) { (0, _util.unreachable)("Cannot initialize BaseSVGFactory."); } } create(width, height) { if (width <= 0 || height <= 0) { throw new Error("Invalid SVG dimensions"); } const svg = this._createSVG("svg:svg"); svg.setAttribute("version", "1.1"); svg.setAttribute("width", `${width}px`); svg.setAttribute("height", `${height}px`); svg.setAttribute("preserveAspectRatio", "none"); svg.setAttribute("viewBox", `0 0 ${width} ${height}`); return svg; } createElement(type) { if (typeof type !== "string") { throw new Error("Invalid SVG element type"); } return this._createSVG(type); } _createSVG(type) { (0, _util.unreachable)("Abstract method `_createSVG` called."); } } exports.BaseSVGFactory = BaseSVGFactory; /***/ }), /* 6 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.build = exports.RenderTask = exports.PDFWorker = exports.PDFPageProxy = exports.PDFDocumentProxy = exports.PDFDocumentLoadingTask = exports.PDFDataRangeTransport = exports.LoopbackPort = exports.DefaultStandardFontDataFactory = exports.DefaultCanvasFactory = exports.DefaultCMapReaderFactory = void 0; exports.getDocument = getDocument; exports.setPDFNetworkStreamFactory = setPDFNetworkStreamFactory; exports.version = void 0; var _util = __w_pdfjs_require__(2); var _display_utils = __w_pdfjs_require__(1); var _font_loader = __w_pdfjs_require__(7); var _node_utils = __w_pdfjs_require__(8); var _annotation_storage = __w_pdfjs_require__(9); var _canvas = __w_pdfjs_require__(10); var _worker_options = __w_pdfjs_require__(12); var _is_node = __w_pdfjs_require__(4); var _message_handler = __w_pdfjs_require__(13); var _metadata = __w_pdfjs_require__(14); var _optional_content_config = __w_pdfjs_require__(15); var _transport_stream = __w_pdfjs_require__(16); var _xfa_text = __w_pdfjs_require__(17); const DEFAULT_RANGE_CHUNK_SIZE = 65536; const RENDERING_CANCELLED_TIMEOUT = 100; const DefaultCanvasFactory = _is_node.isNodeJS ? _node_utils.NodeCanvasFactory : _display_utils.DOMCanvasFactory; exports.DefaultCanvasFactory = DefaultCanvasFactory; const DefaultCMapReaderFactory = _is_node.isNodeJS ? _node_utils.NodeCMapReaderFactory : _display_utils.DOMCMapReaderFactory; exports.DefaultCMapReaderFactory = DefaultCMapReaderFactory; const DefaultStandardFontDataFactory = _is_node.isNodeJS ? _node_utils.NodeStandardFontDataFactory : _display_utils.DOMStandardFontDataFactory; exports.DefaultStandardFontDataFactory = DefaultStandardFontDataFactory; let createPDFNetworkStream; function setPDFNetworkStreamFactory(pdfNetworkStreamFactory) { createPDFNetworkStream = pdfNetworkStreamFactory; } function getDocument(src) { const task = new PDFDocumentLoadingTask(); let source; if (typeof src === "string" || src instanceof URL) { source = { url: src }; } else if ((0, _util.isArrayBuffer)(src)) { source = { data: src }; } else if (src instanceof PDFDataRangeTransport) { source = { range: src }; } else { if (typeof src !== "object") { throw new Error("Invalid parameter in getDocument, " + "need either string, URL, Uint8Array, or parameter object."); } if (!src.url && !src.data && !src.range) { throw new Error("Invalid parameter object: need either .data, .range or .url"); } source = src; } const params = Object.create(null); let rangeTransport = null, worker = null; for (const key in source) { const value = source[key]; switch (key) { case "url": if (typeof window !== "undefined") { try { params[key] = new URL(value, window.location).href; continue; } catch (ex) { (0, _util.warn)(`Cannot create valid URL: "${ex}".`); } } else if (typeof value === "string" || value instanceof URL) { params[key] = value.toString(); continue; } throw new Error("Invalid PDF url data: " + "either string or URL-object is expected in the url property."); case "range": rangeTransport = value; continue; case "worker": worker = value; continue; case "data": if (_is_node.isNodeJS && typeof Buffer !== "undefined" && value instanceof Buffer) { params[key] = new Uint8Array(value); } else if (value instanceof Uint8Array) { break; } else if (typeof value === "string") { params[key] = (0, _util.stringToBytes)(value); } else if (typeof value === "object" && value !== null && !isNaN(value.length)) { params[key] = new Uint8Array(value); } else if ((0, _util.isArrayBuffer)(value)) { params[key] = new Uint8Array(value); } else { throw new Error("Invalid PDF binary data: either typed array, " + "string, or array-like object is expected in the data property."); } continue; } params[key] = value; } params.rangeChunkSize = params.rangeChunkSize || DEFAULT_RANGE_CHUNK_SIZE; params.CMapReaderFactory = params.CMapReaderFactory || DefaultCMapReaderFactory; params.StandardFontDataFactory = params.StandardFontDataFactory || DefaultStandardFontDataFactory; params.ignoreErrors = params.stopAtErrors !== true; params.fontExtraProperties = params.fontExtraProperties === true; params.pdfBug = params.pdfBug === true; params.enableXfa = params.enableXfa === true; if (typeof params.docBaseUrl !== "string" || (0, _display_utils.isDataScheme)(params.docBaseUrl)) { params.docBaseUrl = null; } if (!Number.isInteger(params.maxImageSize)) { params.maxImageSize = -1; } if (typeof params.useWorkerFetch !== "boolean") { params.useWorkerFetch = params.CMapReaderFactory === _display_utils.DOMCMapReaderFactory && params.StandardFontDataFactory === _display_utils.DOMStandardFontDataFactory; } if (typeof params.isEvalSupported !== "boolean") { params.isEvalSupported = true; } if (typeof params.disableFontFace !== "boolean") { params.disableFontFace = _is_node.isNodeJS; } if (typeof params.useSystemFonts !== "boolean") { params.useSystemFonts = !_is_node.isNodeJS && !params.disableFontFace; } if (typeof params.ownerDocument === "undefined") { params.ownerDocument = globalThis.document; } if (typeof params.disableRange !== "boolean") { params.disableRange = false; } if (typeof params.disableStream !== "boolean") { params.disableStream = false; } if (typeof params.disableAutoFetch !== "boolean") { params.disableAutoFetch = false; } (0, _util.setVerbosityLevel)(params.verbosity); if (!worker) { const workerParams = { verbosity: params.verbosity, port: _worker_options.GlobalWorkerOptions.workerPort }; worker = workerParams.port ? PDFWorker.fromPort(workerParams) : new PDFWorker(workerParams); task._worker = worker; } const docId = task.docId; worker.promise.then(function () { if (task.destroyed) { throw new Error("Loading aborted"); } const workerIdPromise = _fetchDocument(worker, params, rangeTransport, docId); const networkStreamPromise = new Promise(function (resolve) { let networkStream; if (rangeTransport) { networkStream = new _transport_stream.PDFDataTransportStream({ length: params.length, initialData: params.initialData, progressiveDone: params.progressiveDone, contentDispositionFilename: params.contentDispositionFilename, disableRange: params.disableRange, disableStream: params.disableStream }, rangeTransport); } else if (!params.data) { networkStream = createPDFNetworkStream({ url: params.url, length: params.length, httpHeaders: params.httpHeaders, withCredentials: params.withCredentials, rangeChunkSize: params.rangeChunkSize, disableRange: params.disableRange, disableStream: params.disableStream }); } resolve(networkStream); }); return Promise.all([workerIdPromise, networkStreamPromise]).then(function ([workerId, networkStream]) { if (task.destroyed) { throw new Error("Loading aborted"); } const messageHandler = new _message_handler.MessageHandler(docId, workerId, worker.port); const transport = new WorkerTransport(messageHandler, task, networkStream, params); task._transport = transport; messageHandler.send("Ready", null); }); }).catch(task._capability.reject); return task; } async function _fetchDocument(worker, source, pdfDataRangeTransport, docId) { if (worker.destroyed) { throw new Error("Worker was destroyed"); } if (pdfDataRangeTransport) { source.length = pdfDataRangeTransport.length; source.initialData = pdfDataRangeTransport.initialData; source.progressiveDone = pdfDataRangeTransport.progressiveDone; source.contentDispositionFilename = pdfDataRangeTransport.contentDispositionFilename; } const workerId = await worker.messageHandler.sendWithPromise("GetDocRequest", { docId, apiVersion: '2.12.313', source: { data: source.data, url: source.url, password: source.password, disableAutoFetch: source.disableAutoFetch, rangeChunkSize: source.rangeChunkSize, length: source.length }, maxImageSize: source.maxImageSize, disableFontFace: source.disableFontFace, docBaseUrl: source.docBaseUrl, ignoreErrors: source.ignoreErrors, isEvalSupported: source.isEvalSupported, fontExtraProperties: source.fontExtraProperties, enableXfa: source.enableXfa, useSystemFonts: source.useSystemFonts, cMapUrl: source.useWorkerFetch ? source.cMapUrl : null, standardFontDataUrl: source.useWorkerFetch ? source.standardFontDataUrl : null }); if (worker.destroyed) { throw new Error("Worker was destroyed"); } return workerId; } class PDFDocumentLoadingTask { static get idCounters() { return (0, _util.shadow)(this, "idCounters", { doc: 0 }); } constructor() { this._capability = (0, _util.createPromiseCapability)(); this._transport = null; this._worker = null; this.docId = `d${PDFDocumentLoadingTask.idCounters.doc++}`; this.destroyed = false; this.onPassword = null; this.onProgress = null; this.onUnsupportedFeature = null; } get promise() { return this._capability.promise; } async destroy() { this.destroyed = true; await this._transport?.destroy(); this._transport = null; if (this._worker) { this._worker.destroy(); this._worker = null; } } } exports.PDFDocumentLoadingTask = PDFDocumentLoadingTask; class PDFDataRangeTransport { constructor(length, initialData, progressiveDone = false, contentDispositionFilename = null) { this.length = length; this.initialData = initialData; this.progressiveDone = progressiveDone; this.contentDispositionFilename = contentDispositionFilename; this._rangeListeners = []; this._progressListeners = []; this._progressiveReadListeners = []; this._progressiveDoneListeners = []; this._readyCapability = (0, _util.createPromiseCapability)(); } addRangeListener(listener) { this._rangeListeners.push(listener); } addProgressListener(listener) { this._progressListeners.push(listener); } addProgressiveReadListener(listener) { this._progressiveReadListeners.push(listener); } addProgressiveDoneListener(listener) { this._progressiveDoneListeners.push(listener); } onDataRange(begin, chunk) { for (const listener of this._rangeListeners) { listener(begin, chunk); } } onDataProgress(loaded, total) { this._readyCapability.promise.then(() => { for (const listener of this._progressListeners) { listener(loaded, total); } }); } onDataProgressiveRead(chunk) { this._readyCapability.promise.then(() => { for (const listener of this._progressiveReadListeners) { listener(chunk); } }); } onDataProgressiveDone() { this._readyCapability.promise.then(() => { for (const listener of this._progressiveDoneListeners) { listener(); } }); } transportReady() { this._readyCapability.resolve(); } requestDataRange(begin, end) { (0, _util.unreachable)("Abstract method PDFDataRangeTransport.requestDataRange"); } abort() {} } exports.PDFDataRangeTransport = PDFDataRangeTransport; class PDFDocumentProxy { constructor(pdfInfo, transport) { this._pdfInfo = pdfInfo; this._transport = transport; Object.defineProperty(this, "fingerprint", { get() { (0, _display_utils.deprecated)("`PDFDocumentProxy.fingerprint`, " + "please use `PDFDocumentProxy.fingerprints` instead."); return this.fingerprints[0]; } }); Object.defineProperty(this, "getStats", { value: async () => { (0, _display_utils.deprecated)("`PDFDocumentProxy.getStats`, " + "please use the `PDFDocumentProxy.stats`-getter instead."); return this.stats || { streamTypes: {}, fontTypes: {} }; } }); } get annotationStorage() { return this._transport.annotationStorage; } get numPages() { return this._pdfInfo.numPages; } get fingerprints() { return this._pdfInfo.fingerprints; } get stats() { return this._transport.stats; } get isPureXfa() { return !!this._transport._htmlForXfa; } get allXfaHtml() { return this._transport._htmlForXfa; } getPage(pageNumber) { return this._transport.getPage(pageNumber); } getPageIndex(ref) { return this._transport.getPageIndex(ref); } getDestinations() { return this._transport.getDestinations(); } getDestination(id) { return this._transport.getDestination(id); } getPageLabels() { return this._transport.getPageLabels(); } getPageLayout() { return this._transport.getPageLayout(); } getPageMode() { return this._transport.getPageMode(); } getViewerPreferences() { return this._transport.getViewerPreferences(); } getOpenAction() { return this._transport.getOpenAction(); } getAttachments() { return this._transport.getAttachments(); } getJavaScript() { return this._transport.getJavaScript(); } getJSActions() { return this._transport.getDocJSActions(); } getOutline() { return this._transport.getOutline(); } getOptionalContentConfig() { return this._transport.getOptionalContentConfig(); } getPermissions() { return this._transport.getPermissions(); } getMetadata() { return this._transport.getMetadata(); } getMarkInfo() { return this._transport.getMarkInfo(); } getData() { return this._transport.getData(); } getDownloadInfo() { return this._transport.downloadInfoCapability.promise; } cleanup(keepLoadedFonts = false) { return this._transport.startCleanup(keepLoadedFonts || this.isPureXfa); } destroy() { return this.loadingTask.destroy(); } get loadingParams() { return this._transport.loadingParams; } get loadingTask() { return this._transport.loadingTask; } saveDocument() { if (this._transport.annotationStorage.size <= 0) { (0, _display_utils.deprecated)("saveDocument called while `annotationStorage` is empty, " + "please use the getData-method instead."); } return this._transport.saveDocument(); } getFieldObjects() { return this._transport.getFieldObjects(); } hasJSActions() { return this._transport.hasJSActions(); } getCalculationOrderIds() { return this._transport.getCalculationOrderIds(); } } exports.PDFDocumentProxy = PDFDocumentProxy; class PDFPageProxy { constructor(pageIndex, pageInfo, transport, ownerDocument, pdfBug = false) { this._pageIndex = pageIndex; this._pageInfo = pageInfo; this._ownerDocument = ownerDocument; this._transport = transport; this._stats = pdfBug ? new _display_utils.StatTimer() : null; this._pdfBug = pdfBug; this.commonObjs = transport.commonObjs; this.objs = new PDFObjects(); this.cleanupAfterRender = false; this.pendingCleanup = false; this._intentStates = new Map(); this._annotationPromises = new Map(); this.destroyed = false; } get pageNumber() { return this._pageIndex + 1; } get rotate() { return this._pageInfo.rotate; } get ref() { return this._pageInfo.ref; } get userUnit() { return this._pageInfo.userUnit; } get view() { return this._pageInfo.view; } getViewport({ scale, rotation = this.rotate, offsetX = 0, offsetY = 0, dontFlip = false } = {}) { return new _display_utils.PageViewport({ viewBox: this.view, scale, rotation, offsetX, offsetY, dontFlip }); } getAnnotations({ intent = "display" } = {}) { const intentArgs = this._transport.getRenderingIntent(intent); let promise = this._annotationPromises.get(intentArgs.cacheKey); if (!promise) { promise = this._transport.getAnnotations(this._pageIndex, intentArgs.renderingIntent); this._annotationPromises.set(intentArgs.cacheKey, promise); promise = promise.then(annotations => { for (const annotation of annotations) { if (annotation.titleObj !== undefined) { Object.defineProperty(annotation, "title", { get() { (0, _display_utils.deprecated)("`title`-property on annotation, please use `titleObj` instead."); return annotation.titleObj.str; } }); } if (annotation.contentsObj !== undefined) { Object.defineProperty(annotation, "contents", { get() { (0, _display_utils.deprecated)("`contents`-property on annotation, please use `contentsObj` instead."); return annotation.contentsObj.str; } }); } } return annotations; }); } return promise; } getJSActions() { return this._jsActionsPromise ||= this._transport.getPageJSActions(this._pageIndex); } async getXfa() { return this._transport._htmlForXfa?.children[this._pageIndex] || null; } render({ canvasContext, viewport, intent = "display", annotationMode = _util.AnnotationMode.ENABLE, transform = null, imageLayer = null, canvasFactory = null, background = null, optionalContentConfigPromise = null, annotationCanvasMap = null }) { if (arguments[0]?.renderInteractiveForms !== undefined) { (0, _display_utils.deprecated)("render no longer accepts the `renderInteractiveForms`-option, " + "please use the `annotationMode`-option instead."); if (arguments[0].renderInteractiveForms === true && annotationMode === _util.AnnotationMode.ENABLE) { annotationMode = _util.AnnotationMode.ENABLE_FORMS; } } if (arguments[0]?.includeAnnotationStorage !== undefined) { (0, _display_utils.deprecated)("render no longer accepts the `includeAnnotationStorage`-option, " + "please use the `annotationMode`-option instead."); if (arguments[0].includeAnnotationStorage === true && annotationMode === _util.AnnotationMode.ENABLE) { annotationMode = _util.AnnotationMode.ENABLE_STORAGE; } } if (this._stats) { this._stats.time("Overall"); } const intentArgs = this._transport.getRenderingIntent(intent, annotationMode); this.pendingCleanup = false; if (!optionalContentConfigPromise) { optionalContentConfigPromise = this._transport.getOptionalContentConfig(); } let intentState = this._intentStates.get(intentArgs.cacheKey); if (!intentState) { intentState = Object.create(null); this._intentStates.set(intentArgs.cacheKey, intentState); } if (intentState.streamReaderCancelTimeout) { clearTimeout(intentState.streamReaderCancelTimeout); intentState.streamReaderCancelTimeout = null; } const canvasFactoryInstance = canvasFactory || new DefaultCanvasFactory({ ownerDocument: this._ownerDocument }); const intentPrint = !!(intentArgs.renderingIntent & _util.RenderingIntentFlag.PRINT); if (!intentState.displayReadyCapability) { intentState.displayReadyCapability = (0, _util.createPromiseCapability)(); intentState.operatorList = { fnArray: [], argsArray: [], lastChunk: false }; if (this._stats) { this._stats.time("Page Request"); } this._pumpOperatorList(intentArgs); } const complete = error => { intentState.renderTasks.delete(internalRenderTask); if (this.cleanupAfterRender || intentPrint) { this.pendingCleanup = true; } this._tryCleanup(); if (error) { internalRenderTask.capability.reject(error); this._abortOperatorList({ intentState, reason: error instanceof Error ? error : new Error(error) }); } else { internalRenderTask.capability.resolve(); } if (this._stats) { this._stats.timeEnd("Rendering"); this._stats.timeEnd("Overall"); } }; const internalRenderTask = new InternalRenderTask({ callback: complete, params: { canvasContext, viewport, transform, imageLayer, background }, objs: this.objs, commonObjs: this.commonObjs, annotationCanvasMap, operatorList: intentState.operatorList, pageIndex: this._pageIndex, canvasFactory: canvasFactoryInstance, useRequestAnimationFrame: !intentPrint, pdfBug: this._pdfBug }); (intentState.renderTasks ||= new Set()).add(internalRenderTask); const renderTask = internalRenderTask.task; Promise.all([intentState.displayReadyCapability.promise, optionalContentConfigPromise]).then(([transparency, optionalContentConfig]) => { if (this.pendingCleanup) { complete(); return; } if (this._stats) { this._stats.time("Rendering"); } internalRenderTask.initializeGraphics({ transparency, optionalContentConfig }); internalRenderTask.operatorListChanged(); }).catch(complete); return renderTask; } getOperatorList({ intent = "display", annotationMode = _util.AnnotationMode.ENABLE } = {}) { function operatorListChanged() { if (intentState.operatorList.lastChunk) { intentState.opListReadCapability.resolve(intentState.operatorList); intentState.renderTasks.delete(opListTask); } } const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, true); let intentState = this._intentStates.get(intentArgs.cacheKey); if (!intentState) { intentState = Object.create(null); this._intentStates.set(intentArgs.cacheKey, intentState); } let opListTask; if (!intentState.opListReadCapability) { opListTask = Object.create(null); opListTask.operatorListChanged = operatorListChanged; intentState.opListReadCapability = (0, _util.createPromiseCapability)(); (intentState.renderTasks ||= new Set()).add(opListTask); intentState.operatorList = { fnArray: [], argsArray: [], lastChunk: false }; if (this._stats) { this._stats.time("Page Request"); } this._pumpOperatorList(intentArgs); } return intentState.opListReadCapability.promise; } streamTextContent({ normalizeWhitespace = false, disableCombineTextItems = false, includeMarkedContent = false } = {}) { const TEXT_CONTENT_CHUNK_SIZE = 100; return this._transport.messageHandler.sendWithStream("GetTextContent", { pageIndex: this._pageIndex, normalizeWhitespace: normalizeWhitespace === true, combineTextItems: disableCombineTextItems !== true, includeMarkedContent: includeMarkedContent === true }, { highWaterMark: TEXT_CONTENT_CHUNK_SIZE, size(textContent) { return textContent.items.length; } }); } getTextContent(params = {}) { if (this._transport._htmlForXfa) { return this.getXfa().then(xfa => { return _xfa_text.XfaText.textContent(xfa); }); } const readableStream = this.streamTextContent(params); return new Promise(function (resolve, reject) { function pump() { reader.read().then(function ({ value, done }) { if (done) { resolve(textContent); return; } Object.assign(textContent.styles, value.styles); textContent.items.push(...value.items); pump(); }, reject); } const reader = readableStream.getReader(); const textContent = { items: [], styles: Object.create(null) }; pump(); }); } getStructTree() { return this._structTreePromise ||= this._transport.getStructTree(this._pageIndex); } _destroy() { this.destroyed = true; const waitOn = []; for (const intentState of this._intentStates.values()) { this._abortOperatorList({ intentState, reason: new Error("Page was destroyed."), force: true }); if (intentState.opListReadCapability) { continue; } for (const internalRenderTask of intentState.renderTasks) { waitOn.push(internalRenderTask.completed); internalRenderTask.cancel(); } } this.objs.clear(); this._annotationPromises.clear(); this._jsActionsPromise = null; this._structTreePromise = null; this.pendingCleanup = false; return Promise.all(waitOn); } cleanup(resetStats = false) { this.pendingCleanup = true; return this._tryCleanup(resetStats); } _tryCleanup(resetStats = false) { if (!this.pendingCleanup) { return false; } for (const { renderTasks, operatorList } of this._intentStates.values()) { if (renderTasks.size > 0 || !operatorList.lastChunk) { return false; } } this._intentStates.clear(); this.objs.clear(); this._annotationPromises.clear(); this._jsActionsPromise = null; this._structTreePromise = null; if (resetStats && this._stats) { this._stats = new _display_utils.StatTimer(); } this.pendingCleanup = false; return true; } _startRenderPage(transparency, cacheKey) { const intentState = this._intentStates.get(cacheKey); if (!intentState) { return; } if (this._stats) { this._stats.timeEnd("Page Request"); } if (intentState.displayReadyCapability) { intentState.displayReadyCapability.resolve(transparency); } } _renderPageChunk(operatorListChunk, intentState) { for (let i = 0, ii = operatorListChunk.length; i < ii; i++) { intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]); intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]); } intentState.operatorList.lastChunk = operatorListChunk.lastChunk; for (const internalRenderTask of intentState.renderTasks) { internalRenderTask.operatorListChanged(); } if (operatorListChunk.lastChunk) { this._tryCleanup(); } } _pumpOperatorList({ renderingIntent, cacheKey }) { const readableStream = this._transport.messageHandler.sendWithStream("GetOperatorList", { pageIndex: this._pageIndex, intent: renderingIntent, cacheKey, annotationStorage: renderingIntent & _util.RenderingIntentFlag.ANNOTATIONS_STORAGE ? this._transport.annotationStorage.serializable : null }); const reader = readableStream.getReader(); const intentState = this._intentStates.get(cacheKey); intentState.streamReader = reader; const pump = () => { reader.read().then(({ value, done }) => { if (done) { intentState.streamReader = null; return; } if (this._transport.destroyed) { return; } this._renderPageChunk(value, intentState); pump(); }, reason => { intentState.streamReader = null; if (this._transport.destroyed) { return; } if (intentState.operatorList) { intentState.operatorList.lastChunk = true; for (const internalRenderTask of intentState.renderTasks) { internalRenderTask.operatorListChanged(); } this._tryCleanup(); } if (intentState.displayReadyCapability) { intentState.displayReadyCapability.reject(reason); } else if (intentState.opListReadCapability) { intentState.opListReadCapability.reject(reason); } else { throw reason; } }); }; pump(); } _abortOperatorList({ intentState, reason, force = false }) { if (!intentState.streamReader) { return; } if (!force) { if (intentState.renderTasks.size > 0) { return; } if (reason instanceof _display_utils.RenderingCancelledException) { intentState.streamReaderCancelTimeout = setTimeout(() => { this._abortOperatorList({ intentState, reason, force: true }); intentState.streamReaderCancelTimeout = null; }, RENDERING_CANCELLED_TIMEOUT); return; } } intentState.streamReader.cancel(new _util.AbortException(reason.message)).catch(() => {}); intentState.streamReader = null; if (this._transport.destroyed) { return; } for (const [curCacheKey, curIntentState] of this._intentStates) { if (curIntentState === intentState) { this._intentStates.delete(curCacheKey); break; } } this.cleanup(); } get stats() { return this._stats; } } exports.PDFPageProxy = PDFPageProxy; class LoopbackPort { constructor() { this._listeners = []; this._deferred = Promise.resolve(); } postMessage(obj, transfers) { function cloneValue(object) { if (globalThis.structuredClone) { return globalThis.structuredClone(object, transfers); } function fallbackCloneValue(value) { if (typeof value === "function" || typeof value === "symbol" || value instanceof URL) { throw new Error(`LoopbackPort.postMessage - cannot clone: ${value?.toString()}`); } if (typeof value !== "object" || value === null) { return value; } if (cloned.has(value)) { return cloned.get(value); } let buffer, result; if ((buffer = value.buffer) && (0, _util.isArrayBuffer)(buffer)) { if (transfers?.includes(buffer)) { result = new value.constructor(buffer, value.byteOffset, value.byteLength); } else { result = new value.constructor(value); } cloned.set(value, result); return result; } if (value instanceof Map) { result = new Map(); cloned.set(value, result); for (const [key, val] of value) { result.set(key, fallbackCloneValue(val)); } return result; } if (value instanceof Set) { result = new Set(); cloned.set(value, result); for (const val of value) { result.add(fallbackCloneValue(val)); } return result; } result = Array.isArray(value) ? [] : Object.create(null); cloned.set(value, result); for (const i in value) { let desc, p = value; while (!(desc = Object.getOwnPropertyDescriptor(p, i))) { p = Object.getPrototypeOf(p); } if (typeof desc.value === "undefined") { continue; } if (typeof desc.value === "function" && !value.hasOwnProperty?.(i)) { continue; } result[i] = fallbackCloneValue(desc.value); } return result; } const cloned = new WeakMap(); return fallbackCloneValue(object); } const event = { data: cloneValue(obj) }; this._deferred.then(() => { for (const listener of this._listeners) { listener.call(this, event); } }); } addEventListener(name, listener) { this._listeners.push(listener); } removeEventListener(name, listener) { const i = this._listeners.indexOf(listener); this._listeners.splice(i, 1); } terminate() { this._listeners.length = 0; } } exports.LoopbackPort = LoopbackPort; const PDFWorkerUtil = { isWorkerDisabled: false, fallbackWorkerSrc: null, fakeWorkerId: 0 }; { if (_is_node.isNodeJS && typeof commonjsRequire === "function") { PDFWorkerUtil.isWorkerDisabled = true; PDFWorkerUtil.fallbackWorkerSrc = "./pdf.worker.js"; } else if (typeof document === "object") { const pdfjsFilePath = document?.currentScript?.src; if (pdfjsFilePath) { PDFWorkerUtil.fallbackWorkerSrc = pdfjsFilePath.replace(/(\.(?:min\.)?js)(\?.*)?$/i, ".worker$1$2"); } } PDFWorkerUtil.createCDNWrapper = function (url) { const wrapper = `importScripts("${url}");`; return URL.createObjectURL(new Blob([wrapper])); }; } class PDFWorker { static get _workerPorts() { return (0, _util.shadow)(this, "_workerPorts", new WeakMap()); } constructor({ name = null, port = null, verbosity = (0, _util.getVerbosityLevel)() } = {}) { if (port && PDFWorker._workerPorts.has(port)) { throw new Error("Cannot use more than one PDFWorker per port."); } this.name = name; this.destroyed = false; this.verbosity = verbosity; this._readyCapability = (0, _util.createPromiseCapability)(); this._port = null; this._webWorker = null; this._messageHandler = null; if (port) { PDFWorker._workerPorts.set(port, this); this._initializeFromPort(port); return; } this._initialize(); } get promise() { return this._readyCapability.promise; } get port() { return this._port; } get messageHandler() { return this._messageHandler; } _initializeFromPort(port) { this._port = port; this._messageHandler = new _message_handler.MessageHandler("main", "worker", port); this._messageHandler.on("ready", function () {}); this._readyCapability.resolve(); } _initialize() { if (typeof Worker !== "undefined" && !PDFWorkerUtil.isWorkerDisabled && !PDFWorker._mainThreadWorkerMessageHandler) { let workerSrc = PDFWorker.workerSrc; try { if (!(0, _util.isSameOrigin)(window.location.href, workerSrc)) { workerSrc = PDFWorkerUtil.createCDNWrapper(new URL(workerSrc, window.location).href); } const worker = new Worker(workerSrc); const messageHandler = new _message_handler.MessageHandler("main", "worker", worker); const terminateEarly = () => { worker.removeEventListener("error", onWorkerError); messageHandler.destroy(); worker.terminate(); if (this.destroyed) { this._readyCapability.reject(new Error("Worker was destroyed")); } else { this._setupFakeWorker(); } }; const onWorkerError = () => { if (!this._webWorker) { terminateEarly(); } }; worker.addEventListener("error", onWorkerError); messageHandler.on("test", data => { worker.removeEventListener("error", onWorkerError); if (this.destroyed) { terminateEarly(); return; } if (data) { this._messageHandler = messageHandler; this._port = worker; this._webWorker = worker; this._readyCapability.resolve(); messageHandler.send("configure", { verbosity: this.verbosity }); } else { this._setupFakeWorker(); messageHandler.destroy(); worker.terminate(); } }); messageHandler.on("ready", data => { worker.removeEventListener("error", onWorkerError); if (this.destroyed) { terminateEarly(); return; } try { sendTest(); } catch (e) { this._setupFakeWorker(); } }); const sendTest = () => { const testObj = new Uint8Array([255]); try { messageHandler.send("test", testObj, [testObj.buffer]); } catch (ex) { (0, _util.warn)("Cannot use postMessage transfers."); testObj[0] = 0; messageHandler.send("test", testObj); } }; sendTest(); return; } catch (e) { (0, _util.info)("The worker has been disabled."); } } this._setupFakeWorker(); } _setupFakeWorker() { if (!PDFWorkerUtil.isWorkerDisabled) { (0, _util.warn)("Setting up fake worker."); PDFWorkerUtil.isWorkerDisabled = true; } PDFWorker._setupFakeWorkerGlobal.then(WorkerMessageHandler => { if (this.destroyed) { this._readyCapability.reject(new Error("Worker was destroyed")); return; } const port = new LoopbackPort(); this._port = port; const id = `fake${PDFWorkerUtil.fakeWorkerId++}`; const workerHandler = new _message_handler.MessageHandler(id + "_worker", id, port); WorkerMessageHandler.setup(workerHandler, port); const messageHandler = new _message_handler.MessageHandler(id, id + "_worker", port); this._messageHandler = messageHandler; this._readyCapability.resolve(); messageHandler.send("configure", { verbosity: this.verbosity }); }).catch(reason => { this._readyCapability.reject(new Error(`Setting up fake worker failed: "${reason.message}".`)); }); } destroy() { this.destroyed = true; if (this._webWorker) { this._webWorker.terminate(); this._webWorker = null; } PDFWorker._workerPorts.delete(this._port); this._port = null; if (this._messageHandler) { this._messageHandler.destroy(); this._messageHandler = null; } } static fromPort(params) { if (!params?.port) { throw new Error("PDFWorker.fromPort - invalid method signature."); } if (this._workerPorts.has(params.port)) { return this._workerPorts.get(params.port); } return new PDFWorker(params); } static get workerSrc() { if (_worker_options.GlobalWorkerOptions.workerSrc) { return _worker_options.GlobalWorkerOptions.workerSrc; } if (PDFWorkerUtil.fallbackWorkerSrc !== null) { if (!_is_node.isNodeJS) { (0, _display_utils.deprecated)('No "GlobalWorkerOptions.workerSrc" specified.'); } return PDFWorkerUtil.fallbackWorkerSrc; } throw new Error('No "GlobalWorkerOptions.workerSrc" specified.'); } static get _mainThreadWorkerMessageHandler() { try { return globalThis.pdfjsWorker?.WorkerMessageHandler || null; } catch (ex) { return null; } } static get _setupFakeWorkerGlobal() { const loader = async () => { const mainWorkerMessageHandler = this._mainThreadWorkerMessageHandler; if (mainWorkerMessageHandler) { return mainWorkerMessageHandler; } if (_is_node.isNodeJS && typeof commonjsRequire === "function") { const worker = eval("require")(this.workerSrc); return worker.WorkerMessageHandler; } await (0, _display_utils.loadScript)(this.workerSrc); return window.pdfjsWorker.WorkerMessageHandler; }; return (0, _util.shadow)(this, "_setupFakeWorkerGlobal", loader()); } } exports.PDFWorker = PDFWorker; { PDFWorker.getWorkerSrc = function () { (0, _display_utils.deprecated)("`PDFWorker.getWorkerSrc()`, please use `PDFWorker.workerSrc` instead."); return this.workerSrc; }; } class WorkerTransport { #docStats = null; #pageCache = new Map(); #pagePromises = new Map(); #metadataPromise = null; constructor(messageHandler, loadingTask, networkStream, params) { this.messageHandler = messageHandler; this.loadingTask = loadingTask; this.commonObjs = new PDFObjects(); this.fontLoader = new _font_loader.FontLoader({ docId: loadingTask.docId, onUnsupportedFeature: this._onUnsupportedFeature.bind(this), ownerDocument: params.ownerDocument, styleElement: params.styleElement }); this._params = params; if (!params.useWorkerFetch) { this.CMapReaderFactory = new params.CMapReaderFactory({ baseUrl: params.cMapUrl, isCompressed: params.cMapPacked }); this.StandardFontDataFactory = new params.StandardFontDataFactory({ baseUrl: params.standardFontDataUrl }); } this.destroyed = false; this.destroyCapability = null; this._passwordCapability = null; this._networkStream = networkStream; this._fullReader = null; this._lastProgress = null; this.downloadInfoCapability = (0, _util.createPromiseCapability)(); this.setupMessageHandler(); } get annotationStorage() { return (0, _util.shadow)(this, "annotationStorage", new _annotation_storage.AnnotationStorage()); } get stats() { return this.#docStats; } getRenderingIntent(intent, annotationMode = _util.AnnotationMode.ENABLE, isOpList = false) { let renderingIntent = _util.RenderingIntentFlag.DISPLAY; let lastModified = ""; switch (intent) { case "any": renderingIntent = _util.RenderingIntentFlag.ANY; break; case "display": break; case "print": renderingIntent = _util.RenderingIntentFlag.PRINT; break; default: (0, _util.warn)(`getRenderingIntent - invalid intent: ${intent}`); } switch (annotationMode) { case _util.AnnotationMode.DISABLE: renderingIntent += _util.RenderingIntentFlag.ANNOTATIONS_DISABLE; break; case _util.AnnotationMode.ENABLE: break; case _util.AnnotationMode.ENABLE_FORMS: renderingIntent += _util.RenderingIntentFlag.ANNOTATIONS_FORMS; break; case _util.AnnotationMode.ENABLE_STORAGE: renderingIntent += _util.RenderingIntentFlag.ANNOTATIONS_STORAGE; lastModified = this.annotationStorage.lastModified; break; default: (0, _util.warn)(`getRenderingIntent - invalid annotationMode: ${annotationMode}`); } if (isOpList) { renderingIntent += _util.RenderingIntentFlag.OPLIST; } return { renderingIntent, cacheKey: `${renderingIntent}_${lastModified}` }; } destroy() { if (this.destroyCapability) { return this.destroyCapability.promise; } this.destroyed = true; this.destroyCapability = (0, _util.createPromiseCapability)(); if (this._passwordCapability) { this._passwordCapability.reject(new Error("Worker was destroyed during onPassword callback")); } const waitOn = []; for (const page of this.#pageCache.values()) { waitOn.push(page._destroy()); } this.#pageCache.clear(); this.#pagePromises.clear(); if (this.hasOwnProperty("annotationStorage")) { this.annotationStorage.resetModified(); } const terminated = this.messageHandler.sendWithPromise("Terminate", null); waitOn.push(terminated); Promise.all(waitOn).then(() => { this.commonObjs.clear(); this.fontLoader.clear(); this.#metadataPromise = null; this._getFieldObjectsPromise = null; this._hasJSActionsPromise = null; if (this._networkStream) { this._networkStream.cancelAllRequests(new _util.AbortException("Worker was terminated.")); } if (this.messageHandler) { this.messageHandler.destroy(); this.messageHandler = null; } this.destroyCapability.resolve(); }, this.destroyCapability.reject); return this.destroyCapability.promise; } setupMessageHandler() { const { messageHandler, loadingTask } = this; messageHandler.on("GetReader", (data, sink) => { (0, _util.assert)(this._networkStream, "GetReader - no `IPDFStream` instance available."); this._fullReader = this._networkStream.getFullReader(); this._fullReader.onProgress = evt => { this._lastProgress = { loaded: evt.loaded, total: evt.total }; }; sink.onPull = () => { this._fullReader.read().then(function ({ value, done }) { if (done) { sink.close(); return; } (0, _util.assert)((0, _util.isArrayBuffer)(value), "GetReader - expected an ArrayBuffer."); sink.enqueue(new Uint8Array(value), 1, [value]); }).catch(reason => { sink.error(reason); }); }; sink.onCancel = reason => { this._fullReader.cancel(reason); sink.ready.catch(readyReason => { if (this.destroyed) { return; } throw readyReason; }); }; }); messageHandler.on("ReaderHeadersReady", data => { const headersCapability = (0, _util.createPromiseCapability)(); const fullReader = this._fullReader; fullReader.headersReady.then(() => { if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) { if (this._lastProgress) { loadingTask.onProgress?.(this._lastProgress); } fullReader.onProgress = evt => { loadingTask.onProgress?.({ loaded: evt.loaded, total: evt.total }); }; } headersCapability.resolve({ isStreamingSupported: fullReader.isStreamingSupported, isRangeSupported: fullReader.isRangeSupported, contentLength: fullReader.contentLength }); }, headersCapability.reject); return headersCapability.promise; }); messageHandler.on("GetRangeReader", (data, sink) => { (0, _util.assert)(this._networkStream, "GetRangeReader - no `IPDFStream` instance available."); const rangeReader = this._networkStream.getRangeReader(data.begin, data.end); if (!rangeReader) { sink.close(); return; } sink.onPull = () => { rangeReader.read().then(function ({ value, done }) { if (done) { sink.close(); return; } (0, _util.assert)((0, _util.isArrayBuffer)(value), "GetRangeReader - expected an ArrayBuffer."); sink.enqueue(new Uint8Array(value), 1, [value]); }).catch(reason => { sink.error(reason); }); }; sink.onCancel = reason => { rangeReader.cancel(reason); sink.ready.catch(readyReason => { if (this.destroyed) { return; } throw readyReason; }); }; }); messageHandler.on("GetDoc", ({ pdfInfo }) => { this._numPages = pdfInfo.numPages; this._htmlForXfa = pdfInfo.htmlForXfa; delete pdfInfo.htmlForXfa; loadingTask._capability.resolve(new PDFDocumentProxy(pdfInfo, this)); }); messageHandler.on("DocException", function (ex) { let reason; switch (ex.name) { case "PasswordException": reason = new _util.PasswordException(ex.message, ex.code); break; case "InvalidPDFException": reason = new _util.InvalidPDFException(ex.message); break; case "MissingPDFException": reason = new _util.MissingPDFException(ex.message); break; case "UnexpectedResponseException": reason = new _util.UnexpectedResponseException(ex.message, ex.status); break; case "UnknownErrorException": reason = new _util.UnknownErrorException(ex.message, ex.details); break; default: (0, _util.unreachable)("DocException - expected a valid Error."); } loadingTask._capability.reject(reason); }); messageHandler.on("PasswordRequest", exception => { this._passwordCapability = (0, _util.createPromiseCapability)(); if (loadingTask.onPassword) { const updatePassword = password => { this._passwordCapability.resolve({ password }); }; try { loadingTask.onPassword(updatePassword, exception.code); } catch (ex) { this._passwordCapability.reject(ex); } } else { this._passwordCapability.reject(new _util.PasswordException(exception.message, exception.code)); } return this._passwordCapability.promise; }); messageHandler.on("DataLoaded", data => { loadingTask.onProgress?.({ loaded: data.length, total: data.length }); this.downloadInfoCapability.resolve(data); }); messageHandler.on("StartRenderPage", data => { if (this.destroyed) { return; } const page = this.#pageCache.get(data.pageIndex); page._startRenderPage(data.transparency, data.cacheKey); }); messageHandler.on("commonobj", ([id, type, exportedData]) => { if (this.destroyed) { return; } if (this.commonObjs.has(id)) { return; } switch (type) { case "Font": const params = this._params; if ("error" in exportedData) { const exportedError = exportedData.error; (0, _util.warn)(`Error during font loading: ${exportedError}`); this.commonObjs.resolve(id, exportedError); break; } let fontRegistry = null; if (params.pdfBug && globalThis.FontInspector?.enabled) { fontRegistry = { registerFont(font, url) { globalThis.FontInspector.fontAdded(font, url); } }; } const font = new _font_loader.FontFaceObject(exportedData, { isEvalSupported: params.isEvalSupported, disableFontFace: params.disableFontFace, ignoreErrors: params.ignoreErrors, onUnsupportedFeature: this._onUnsupportedFeature.bind(this), fontRegistry }); this.fontLoader.bind(font).catch(reason => { return messageHandler.sendWithPromise("FontFallback", { id }); }).finally(() => { if (!params.fontExtraProperties && font.data) { font.data = null; } this.commonObjs.resolve(id, font); }); break; case "FontPath": case "Image": this.commonObjs.resolve(id, exportedData); break; default: throw new Error(`Got unknown common object type ${type}`); } }); messageHandler.on("obj", ([id, pageIndex, type, imageData]) => { if (this.destroyed) { return; } const pageProxy = this.#pageCache.get(pageIndex); if (pageProxy.objs.has(id)) { return; } switch (type) { case "Image": pageProxy.objs.resolve(id, imageData); const MAX_IMAGE_SIZE_TO_STORE = 8000000; if (imageData?.data?.length > MAX_IMAGE_SIZE_TO_STORE) { pageProxy.cleanupAfterRender = true; } break; case "Pattern": pageProxy.objs.resolve(id, imageData); break; default: throw new Error(`Got unknown object type ${type}`); } }); messageHandler.on("DocProgress", data => { if (this.destroyed) { return; } loadingTask.onProgress?.({ loaded: data.loaded, total: data.total }); }); messageHandler.on("DocStats", data => { if (this.destroyed) { return; } this.#docStats = Object.freeze({ streamTypes: Object.freeze(data.streamTypes), fontTypes: Object.freeze(data.fontTypes) }); }); messageHandler.on("UnsupportedFeature", this._onUnsupportedFeature.bind(this)); messageHandler.on("FetchBuiltInCMap", data => { if (this.destroyed) { return Promise.reject(new Error("Worker was destroyed.")); } if (!this.CMapReaderFactory) { return Promise.reject(new Error("CMapReaderFactory not initialized, see the `useWorkerFetch` parameter.")); } return this.CMapReaderFactory.fetch(data); }); messageHandler.on("FetchStandardFontData", data => { if (this.destroyed) { return Promise.reject(new Error("Worker was destroyed.")); } if (!this.StandardFontDataFactory) { return Promise.reject(new Error("StandardFontDataFactory not initialized, see the `useWorkerFetch` parameter.")); } return this.StandardFontDataFactory.fetch(data); }); } _onUnsupportedFeature({ featureId }) { if (this.destroyed) { return; } this.loadingTask.onUnsupportedFeature?.(featureId); } getData() { return this.messageHandler.sendWithPromise("GetData", null); } getPage(pageNumber) { if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this._numPages) { return Promise.reject(new Error("Invalid page request")); } const pageIndex = pageNumber - 1, cachedPromise = this.#pagePromises.get(pageIndex); if (cachedPromise) { return cachedPromise; } const promise = this.messageHandler.sendWithPromise("GetPage", { pageIndex }).then(pageInfo => { if (this.destroyed) { throw new Error("Transport destroyed"); } const page = new PDFPageProxy(pageIndex, pageInfo, this, this._params.ownerDocument, this._params.pdfBug); this.#pageCache.set(pageIndex, page); return page; }); this.#pagePromises.set(pageIndex, promise); return promise; } getPageIndex(ref) { return this.messageHandler.sendWithPromise("GetPageIndex", { ref }); } getAnnotations(pageIndex, intent) { return this.messageHandler.sendWithPromise("GetAnnotations", { pageIndex, intent }); } saveDocument() { return this.messageHandler.sendWithPromise("SaveDocument", { isPureXfa: !!this._htmlForXfa, numPages: this._numPages, annotationStorage: this.annotationStorage.serializable, filename: this._fullReader?.filename ?? null }).finally(() => { this.annotationStorage.resetModified(); }); } getFieldObjects() { return this._getFieldObjectsPromise ||= this.messageHandler.sendWithPromise("GetFieldObjects", null); } hasJSActions() { return this._hasJSActionsPromise ||= this.messageHandler.sendWithPromise("HasJSActions", null); } getCalculationOrderIds() { return this.messageHandler.sendWithPromise("GetCalculationOrderIds", null); } getDestinations() { return this.messageHandler.sendWithPromise("GetDestinations", null); } getDestination(id) { if (typeof id !== "string") { return Promise.reject(new Error("Invalid destination request.")); } return this.messageHandler.sendWithPromise("GetDestination", { id }); } getPageLabels() { return this.messageHandler.sendWithPromise("GetPageLabels", null); } getPageLayout() { return this.messageHandler.sendWithPromise("GetPageLayout", null); } getPageMode() { return this.messageHandler.sendWithPromise("GetPageMode", null); } getViewerPreferences() { return this.messageHandler.sendWithPromise("GetViewerPreferences", null); } getOpenAction() { return this.messageHandler.sendWithPromise("GetOpenAction", null); } getAttachments() { return this.messageHandler.sendWithPromise("GetAttachments", null); } getJavaScript() { return this.messageHandler.sendWithPromise("GetJavaScript", null); } getDocJSActions() { return this.messageHandler.sendWithPromise("GetDocJSActions", null); } getPageJSActions(pageIndex) { return this.messageHandler.sendWithPromise("GetPageJSActions", { pageIndex }); } getStructTree(pageIndex) { return this.messageHandler.sendWithPromise("GetStructTree", { pageIndex }); } getOutline() { return this.messageHandler.sendWithPromise("GetOutline", null); } getOptionalContentConfig() { return this.messageHandler.sendWithPromise("GetOptionalContentConfig", null).then(results => { return new _optional_content_config.OptionalContentConfig(results); }); } getPermissions() { return this.messageHandler.sendWithPromise("GetPermissions", null); } getMetadata() { return this.#metadataPromise ||= this.messageHandler.sendWithPromise("GetMetadata", null).then(results => { return { info: results[0], metadata: results[1] ? new _metadata.Metadata(results[1]) : null, contentDispositionFilename: this._fullReader?.filename ?? null, contentLength: this._fullReader?.contentLength ?? null }; }); } getMarkInfo() { return this.messageHandler.sendWithPromise("GetMarkInfo", null); } async startCleanup(keepLoadedFonts = false) { await this.messageHandler.sendWithPromise("Cleanup", null); if (this.destroyed) { return; } for (const page of this.#pageCache.values()) { const cleanupSuccessful = page.cleanup(); if (!cleanupSuccessful) { throw new Error(`startCleanup: Page ${page.pageNumber} is currently rendering.`); } } this.commonObjs.clear(); if (!keepLoadedFonts) { this.fontLoader.clear(); } this.#metadataPromise = null; this._getFieldObjectsPromise = null; this._hasJSActionsPromise = null; } get loadingParams() { const params = this._params; return (0, _util.shadow)(this, "loadingParams", { disableAutoFetch: params.disableAutoFetch, enableXfa: params.enableXfa }); } } class PDFObjects { constructor() { this._objs = Object.create(null); } _ensureObj(objId) { if (this._objs[objId]) { return this._objs[objId]; } return this._objs[objId] = { capability: (0, _util.createPromiseCapability)(), data: null, resolved: false }; } get(objId, callback = null) { if (callback) { this._ensureObj(objId).capability.promise.then(callback); return null; } const obj = this._objs[objId]; if (!obj || !obj.resolved) { throw new Error(`Requesting object that isn't resolved yet ${objId}.`); } return obj.data; } has(objId) { const obj = this._objs[objId]; return obj?.resolved || false; } resolve(objId, data) { const obj = this._ensureObj(objId); obj.resolved = true; obj.data = data; obj.capability.resolve(data); } clear() { this._objs = Object.create(null); } } class RenderTask { constructor(internalRenderTask) { this._internalRenderTask = internalRenderTask; this.onContinue = null; } get promise() { return this._internalRenderTask.capability.promise; } cancel() { this._internalRenderTask.cancel(); } } exports.RenderTask = RenderTask; class InternalRenderTask { static get canvasInUse() { return (0, _util.shadow)(this, "canvasInUse", new WeakSet()); } constructor({ callback, params, objs, commonObjs, annotationCanvasMap, operatorList, pageIndex, canvasFactory, useRequestAnimationFrame = false, pdfBug = false }) { this.callback = callback; this.params = params; this.objs = objs; this.commonObjs = commonObjs; this.annotationCanvasMap = annotationCanvasMap; this.operatorListIdx = null; this.operatorList = operatorList; this._pageIndex = pageIndex; this.canvasFactory = canvasFactory; this._pdfBug = pdfBug; this.running = false; this.graphicsReadyCallback = null; this.graphicsReady = false; this._useRequestAnimationFrame = useRequestAnimationFrame === true && typeof window !== "undefined"; this.cancelled = false; this.capability = (0, _util.createPromiseCapability)(); this.task = new RenderTask(this); this._cancelBound = this.cancel.bind(this); this._continueBound = this._continue.bind(this); this._scheduleNextBound = this._scheduleNext.bind(this); this._nextBound = this._next.bind(this); this._canvas = params.canvasContext.canvas; } get completed() { return this.capability.promise.catch(function () {}); } initializeGraphics({ transparency = false, optionalContentConfig }) { if (this.cancelled) { return; } if (this._canvas) { if (InternalRenderTask.canvasInUse.has(this._canvas)) { throw new Error("Cannot use the same canvas during multiple render() operations. " + "Use different canvas or ensure previous operations were " + "cancelled or completed."); } InternalRenderTask.canvasInUse.add(this._canvas); } if (this._pdfBug && globalThis.StepperManager?.enabled) { this.stepper = globalThis.StepperManager.create(this._pageIndex); this.stepper.init(this.operatorList); this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint(); } const { canvasContext, viewport, transform, imageLayer, background } = this.params; this.gfx = new _canvas.CanvasGraphics(canvasContext, this.commonObjs, this.objs, this.canvasFactory, imageLayer, optionalContentConfig, this.annotationCanvasMap); this.gfx.beginDrawing({ transform, viewport, transparency, background }); this.operatorListIdx = 0; this.graphicsReady = true; if (this.graphicsReadyCallback) { this.graphicsReadyCallback(); } } cancel(error = null) { this.running = false; this.cancelled = true; if (this.gfx) { this.gfx.endDrawing(); } if (this._canvas) { InternalRenderTask.canvasInUse.delete(this._canvas); } this.callback(error || new _display_utils.RenderingCancelledException(`Rendering cancelled, page ${this._pageIndex + 1}`, "canvas")); } operatorListChanged() { if (!this.graphicsReady) { if (!this.graphicsReadyCallback) { this.graphicsReadyCallback = this._continueBound; } return; } if (this.stepper) { this.stepper.updateOperatorList(this.operatorList); } if (this.running) { return; } this._continue(); } _continue() { this.running = true; if (this.cancelled) { return; } if (this.task.onContinue) { this.task.onContinue(this._scheduleNextBound); } else { this._scheduleNext(); } } _scheduleNext() { if (this._useRequestAnimationFrame) { window.requestAnimationFrame(() => { this._nextBound().catch(this._cancelBound); }); } else { Promise.resolve().then(this._nextBound).catch(this._cancelBound); } } async _next() { if (this.cancelled) { return; } this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, this.operatorListIdx, this._continueBound, this.stepper); if (this.operatorListIdx === this.operatorList.argsArray.length) { this.running = false; if (this.operatorList.lastChunk) { this.gfx.endDrawing(); if (this._canvas) { InternalRenderTask.canvasInUse.delete(this._canvas); } this.callback(); } } } } const version = '2.12.313'; exports.version = version; const build = 'a2ae56f39'; exports.build = build; /***/ }), /* 7 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.FontLoader = exports.FontFaceObject = void 0; var _util = __w_pdfjs_require__(2); class BaseFontLoader { constructor({ docId, onUnsupportedFeature, ownerDocument = globalThis.document, styleElement = null }) { if (this.constructor === BaseFontLoader) { (0, _util.unreachable)("Cannot initialize BaseFontLoader."); } this.docId = docId; this._onUnsupportedFeature = onUnsupportedFeature; this._document = ownerDocument; this.nativeFontFaces = []; this.styleElement = null; } addNativeFontFace(nativeFontFace) { this.nativeFontFaces.push(nativeFontFace); this._document.fonts.add(nativeFontFace); } insertRule(rule) { let styleElement = this.styleElement; if (!styleElement) { styleElement = this.styleElement = this._document.createElement("style"); styleElement.id = `PDFJS_FONT_STYLE_TAG_${this.docId}`; this._document.documentElement.getElementsByTagName("head")[0].appendChild(styleElement); } const styleSheet = styleElement.sheet; styleSheet.insertRule(rule, styleSheet.cssRules.length); } clear() { for (const nativeFontFace of this.nativeFontFaces) { this._document.fonts.delete(nativeFontFace); } this.nativeFontFaces.length = 0; if (this.styleElement) { this.styleElement.remove(); this.styleElement = null; } } async bind(font) { if (font.attached || font.missingFile) { return; } font.attached = true; if (this.isFontLoadingAPISupported) { const nativeFontFace = font.createNativeFontFace(); if (nativeFontFace) { this.addNativeFontFace(nativeFontFace); try { await nativeFontFace.loaded; } catch (ex) { this._onUnsupportedFeature({ featureId: _util.UNSUPPORTED_FEATURES.errorFontLoadNative }); (0, _util.warn)(`Failed to load font '${nativeFontFace.family}': '${ex}'.`); font.disableFontFace = true; throw ex; } } return; } const rule = font.createFontFaceRule(); if (rule) { this.insertRule(rule); if (this.isSyncFontLoadingSupported) { return; } await new Promise(resolve => { const request = this._queueLoadingCallback(resolve); this._prepareFontLoadEvent([rule], [font], request); }); } } _queueLoadingCallback(callback) { (0, _util.unreachable)("Abstract method `_queueLoadingCallback`."); } get isFontLoadingAPISupported() { const hasFonts = !!this._document?.fonts; return (0, _util.shadow)(this, "isFontLoadingAPISupported", hasFonts); } get isSyncFontLoadingSupported() { (0, _util.unreachable)("Abstract method `isSyncFontLoadingSupported`."); } get _loadTestFont() { (0, _util.unreachable)("Abstract method `_loadTestFont`."); } _prepareFontLoadEvent(rules, fontsToLoad, request) { (0, _util.unreachable)("Abstract method `_prepareFontLoadEvent`."); } } let FontLoader; exports.FontLoader = FontLoader; { exports.FontLoader = FontLoader = class GenericFontLoader extends BaseFontLoader { constructor(params) { super(params); this.loadingContext = { requests: [], nextRequestId: 0 }; this.loadTestFontId = 0; } get isSyncFontLoadingSupported() { let supported = false; if (typeof navigator === "undefined") { supported = true; } else { const m = /Mozilla\/5.0.*?rv:(\d+).*? Gecko/.exec(navigator.userAgent); if (m?.[1] >= 14) { supported = true; } } return (0, _util.shadow)(this, "isSyncFontLoadingSupported", supported); } _queueLoadingCallback(callback) { function completeRequest() { (0, _util.assert)(!request.done, "completeRequest() cannot be called twice."); request.done = true; while (context.requests.length > 0 && context.requests[0].done) { const otherRequest = context.requests.shift(); setTimeout(otherRequest.callback, 0); } } const context = this.loadingContext; const request = { id: `pdfjs-font-loading-${context.nextRequestId++}`, done: false, complete: completeRequest, callback }; context.requests.push(request); return request; } get _loadTestFont() { const getLoadTestFont = function () { return atob("T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQA" + "FQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAA" + "ALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgA" + "AAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1" + "AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD" + "6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACM" + "AooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4D" + "IP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAA" + "AAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUA" + "AQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgAB" + "AAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABY" + "AAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAA" + "AC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAA" + "AAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQAC" + "AQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3" + "Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTj" + "FQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA=="); }; return (0, _util.shadow)(this, "_loadTestFont", getLoadTestFont()); } _prepareFontLoadEvent(rules, fonts, request) { function int32(data, offset) { return data.charCodeAt(offset) << 24 | data.charCodeAt(offset + 1) << 16 | data.charCodeAt(offset + 2) << 8 | data.charCodeAt(offset + 3) & 0xff; } function spliceString(s, offset, remove, insert) { const chunk1 = s.substring(0, offset); const chunk2 = s.substring(offset + remove); return chunk1 + insert + chunk2; } let i, ii; const canvas = this._document.createElement("canvas"); canvas.width = 1; canvas.height = 1; const ctx = canvas.getContext("2d"); let called = 0; function isFontReady(name, callback) { called++; if (called > 30) { (0, _util.warn)("Load test font never loaded."); callback(); return; } ctx.font = "30px " + name; ctx.fillText(".", 0, 20); const imageData = ctx.getImageData(0, 0, 1, 1); if (imageData.data[3] > 0) { callback(); return; } setTimeout(isFontReady.bind(null, name, callback)); } const loadTestFontId = `lt${Date.now()}${this.loadTestFontId++}`; let data = this._loadTestFont; const COMMENT_OFFSET = 976; data = spliceString(data, COMMENT_OFFSET, loadTestFontId.length, loadTestFontId); const CFF_CHECKSUM_OFFSET = 16; const XXXX_VALUE = 0x58585858; let checksum = int32(data, CFF_CHECKSUM_OFFSET); for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) { checksum = checksum - XXXX_VALUE + int32(loadTestFontId, i) | 0; } if (i < loadTestFontId.length) { checksum = checksum - XXXX_VALUE + int32(loadTestFontId + "XXX", i) | 0; } data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, (0, _util.string32)(checksum)); const url = `url(data:font/opentype;base64,${btoa(data)});`; const rule = `@font-face {font-family:"${loadTestFontId}";src:${url}}`; this.insertRule(rule); const names = []; for (const font of fonts) { names.push(font.loadedName); } names.push(loadTestFontId); const div = this._document.createElement("div"); div.style.visibility = "hidden"; div.style.width = div.style.height = "10px"; div.style.position = "absolute"; div.style.top = div.style.left = "0px"; for (const name of names) { const span = this._document.createElement("span"); span.textContent = "Hi"; span.style.fontFamily = name; div.appendChild(span); } this._document.body.appendChild(div); isFontReady(loadTestFontId, () => { div.remove(); request.complete(); }); } }; } class FontFaceObject { constructor(translatedData, { isEvalSupported = true, disableFontFace = false, ignoreErrors = false, onUnsupportedFeature, fontRegistry = null }) { this.compiledGlyphs = Object.create(null); for (const i in translatedData) { this[i] = translatedData[i]; } this.isEvalSupported = isEvalSupported !== false; this.disableFontFace = disableFontFace === true; this.ignoreErrors = ignoreErrors === true; this._onUnsupportedFeature = onUnsupportedFeature; this.fontRegistry = fontRegistry; } createNativeFontFace() { if (!this.data || this.disableFontFace) { return null; } let nativeFontFace; if (!this.cssFontInfo) { nativeFontFace = new FontFace(this.loadedName, this.data, {}); } else { const css = { weight: this.cssFontInfo.fontWeight }; if (this.cssFontInfo.italicAngle) { css.style = `oblique ${this.cssFontInfo.italicAngle}deg`; } nativeFontFace = new FontFace(this.cssFontInfo.fontFamily, this.data, css); } if (this.fontRegistry) { this.fontRegistry.registerFont(this); } return nativeFontFace; } createFontFaceRule() { if (!this.data || this.disableFontFace) { return null; } const data = (0, _util.bytesToString)(this.data); const url = `url(data:${this.mimetype};base64,${btoa(data)});`; let rule; if (!this.cssFontInfo) { rule = `@font-face {font-family:"${this.loadedName}";src:${url}}`; } else { let css = `font-weight: ${this.cssFontInfo.fontWeight};`; if (this.cssFontInfo.italicAngle) { css += `font-style: oblique ${this.cssFontInfo.italicAngle}deg;`; } rule = `@font-face {font-family:"${this.cssFontInfo.fontFamily}";${css}src:${url}}`; } if (this.fontRegistry) { this.fontRegistry.registerFont(this, url); } return rule; } getPathGenerator(objs, character) { if (this.compiledGlyphs[character] !== undefined) { return this.compiledGlyphs[character]; } let cmds; try { cmds = objs.get(this.loadedName + "_path_" + character); } catch (ex) { if (!this.ignoreErrors) { throw ex; } this._onUnsupportedFeature({ featureId: _util.UNSUPPORTED_FEATURES.errorFontGetPath }); (0, _util.warn)(`getPathGenerator - ignoring character: "${ex}".`); return this.compiledGlyphs[character] = function (c, size) {}; } if (this.isEvalSupported && _util.IsEvalSupportedCached.value) { const jsBuf = []; for (const current of cmds) { const args = current.args !== undefined ? current.args.join(",") : ""; jsBuf.push("c.", current.cmd, "(", args, ");\n"); } return this.compiledGlyphs[character] = new Function("c", "size", jsBuf.join("")); } return this.compiledGlyphs[character] = function (c, size) { for (const current of cmds) { if (current.cmd === "scale") { current.args = [size, -size]; } c[current.cmd].apply(c, current.args); } }; } } exports.FontFaceObject = FontFaceObject; /***/ }), /* 8 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.NodeStandardFontDataFactory = exports.NodeCanvasFactory = exports.NodeCMapReaderFactory = void 0; var _base_factory = __w_pdfjs_require__(5); var _is_node = __w_pdfjs_require__(4); var _util = __w_pdfjs_require__(2); let NodeCanvasFactory = class { constructor() { (0, _util.unreachable)("Not implemented: NodeCanvasFactory"); } }; exports.NodeCanvasFactory = NodeCanvasFactory; let NodeCMapReaderFactory = class { constructor() { (0, _util.unreachable)("Not implemented: NodeCMapReaderFactory"); } }; exports.NodeCMapReaderFactory = NodeCMapReaderFactory; let NodeStandardFontDataFactory = class { constructor() { (0, _util.unreachable)("Not implemented: NodeStandardFontDataFactory"); } }; exports.NodeStandardFontDataFactory = NodeStandardFontDataFactory; if (_is_node.isNodeJS) { const fetchData = function (url) { return new Promise((resolve, reject) => { const fs = require$$5; fs.readFile(url, (error, data) => { if (error || !data) { reject(new Error(error)); return; } resolve(new Uint8Array(data)); }); }); }; exports.NodeCanvasFactory = NodeCanvasFactory = class extends _base_factory.BaseCanvasFactory { _createCanvas(width, height) { const Canvas = require$$5; return Canvas.createCanvas(width, height); } }; exports.NodeCMapReaderFactory = NodeCMapReaderFactory = class extends _base_factory.BaseCMapReaderFactory { _fetchData(url, compressionType) { return fetchData(url).then(data => { return { cMapData: data, compressionType }; }); } }; exports.NodeStandardFontDataFactory = NodeStandardFontDataFactory = class extends _base_factory.BaseStandardFontDataFactory { _fetchData(url) { return fetchData(url); } }; } /***/ }), /* 9 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.AnnotationStorage = void 0; var _util = __w_pdfjs_require__(2); class AnnotationStorage { constructor() { this._storage = new Map(); this._timeStamp = Date.now(); this._modified = false; this.onSetModified = null; this.onResetModified = null; } getValue(key, defaultValue) { const value = this._storage.get(key); if (value === undefined) { return defaultValue; } return Object.assign(defaultValue, value); } setValue(key, value) { const obj = this._storage.get(key); let modified = false; if (obj !== undefined) { for (const [entry, val] of Object.entries(value)) { if (obj[entry] !== val) { modified = true; obj[entry] = val; } } } else { modified = true; this._storage.set(key, value); } if (modified) { this._timeStamp = Date.now(); this._setModified(); } } getAll() { return this._storage.size > 0 ? (0, _util.objectFromMap)(this._storage) : null; } get size() { return this._storage.size; } _setModified() { if (!this._modified) { this._modified = true; if (typeof this.onSetModified === "function") { this.onSetModified(); } } } resetModified() { if (this._modified) { this._modified = false; if (typeof this.onResetModified === "function") { this.onResetModified(); } } } get serializable() { return this._storage.size > 0 ? this._storage : null; } get lastModified() { return this._timeStamp.toString(); } } exports.AnnotationStorage = AnnotationStorage; /***/ }), /* 10 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.CanvasGraphics = void 0; var _util = __w_pdfjs_require__(2); var _pattern_helper = __w_pdfjs_require__(11); var _display_utils = __w_pdfjs_require__(1); const MIN_FONT_SIZE = 16; const MAX_FONT_SIZE = 100; const MAX_GROUP_SIZE = 4096; const EXECUTION_TIME = 15; const EXECUTION_STEPS = 10; const MAX_SIZE_TO_COMPILE = 1000; const FULL_CHUNK_HEIGHT = 16; const LINEWIDTH_SCALE_FACTOR = 1.000001; function mirrorContextOperations(ctx, destCtx) { if (ctx._removeMirroring) { throw new Error("Context is already forwarding operations."); } ctx.__originalSave = ctx.save; ctx.__originalRestore = ctx.restore; ctx.__originalRotate = ctx.rotate; ctx.__originalScale = ctx.scale; ctx.__originalTranslate = ctx.translate; ctx.__originalTransform = ctx.transform; ctx.__originalSetTransform = ctx.setTransform; ctx.__originalResetTransform = ctx.resetTransform; ctx.__originalClip = ctx.clip; ctx.__originalMoveTo = ctx.moveTo; ctx.__originalLineTo = ctx.lineTo; ctx.__originalBezierCurveTo = ctx.bezierCurveTo; ctx.__originalRect = ctx.rect; ctx.__originalClosePath = ctx.closePath; ctx.__originalBeginPath = ctx.beginPath; ctx._removeMirroring = () => { ctx.save = ctx.__originalSave; ctx.restore = ctx.__originalRestore; ctx.rotate = ctx.__originalRotate; ctx.scale = ctx.__originalScale; ctx.translate = ctx.__originalTranslate; ctx.transform = ctx.__originalTransform; ctx.setTransform = ctx.__originalSetTransform; ctx.resetTransform = ctx.__originalResetTransform; ctx.clip = ctx.__originalClip; ctx.moveTo = ctx.__originalMoveTo; ctx.lineTo = ctx.__originalLineTo; ctx.bezierCurveTo = ctx.__originalBezierCurveTo; ctx.rect = ctx.__originalRect; ctx.closePath = ctx.__originalClosePath; ctx.beginPath = ctx.__originalBeginPath; delete ctx._removeMirroring; }; ctx.save = function ctxSave() { destCtx.save(); this.__originalSave(); }; ctx.restore = function ctxRestore() { destCtx.restore(); this.__originalRestore(); }; ctx.translate = function ctxTranslate(x, y) { destCtx.translate(x, y); this.__originalTranslate(x, y); }; ctx.scale = function ctxScale(x, y) { destCtx.scale(x, y); this.__originalScale(x, y); }; ctx.transform = function ctxTransform(a, b, c, d, e, f) { destCtx.transform(a, b, c, d, e, f); this.__originalTransform(a, b, c, d, e, f); }; ctx.setTransform = function ctxSetTransform(a, b, c, d, e, f) { destCtx.setTransform(a, b, c, d, e, f); this.__originalSetTransform(a, b, c, d, e, f); }; ctx.resetTransform = function ctxResetTransform() { destCtx.resetTransform(); this.__originalResetTransform(); }; ctx.rotate = function ctxRotate(angle) { destCtx.rotate(angle); this.__originalRotate(angle); }; ctx.clip = function ctxRotate(rule) { destCtx.clip(rule); this.__originalClip(rule); }; ctx.moveTo = function (x, y) { destCtx.moveTo(x, y); this.__originalMoveTo(x, y); }; ctx.lineTo = function (x, y) { destCtx.lineTo(x, y); this.__originalLineTo(x, y); }; ctx.bezierCurveTo = function (cp1x, cp1y, cp2x, cp2y, x, y) { destCtx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); this.__originalBezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y); }; ctx.rect = function (x, y, width, height) { destCtx.rect(x, y, width, height); this.__originalRect(x, y, width, height); }; ctx.closePath = function () { destCtx.closePath(); this.__originalClosePath(); }; ctx.beginPath = function () { destCtx.beginPath(); this.__originalBeginPath(); }; } function addContextCurrentTransform(ctx) { if (ctx.mozCurrentTransform) { return; } ctx._originalSave = ctx.save; ctx._originalRestore = ctx.restore; ctx._originalRotate = ctx.rotate; ctx._originalScale = ctx.scale; ctx._originalTranslate = ctx.translate; ctx._originalTransform = ctx.transform; ctx._originalSetTransform = ctx.setTransform; ctx._originalResetTransform = ctx.resetTransform; ctx._transformMatrix = ctx._transformMatrix || [1, 0, 0, 1, 0, 0]; ctx._transformStack = []; try { const desc = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(ctx), "lineWidth"); ctx._setLineWidth = desc.set; ctx._getLineWidth = desc.get; Object.defineProperty(ctx, "lineWidth", { set: function setLineWidth(width) { this._setLineWidth(width * LINEWIDTH_SCALE_FACTOR); }, get: function getLineWidth() { return this._getLineWidth(); } }); } catch (_) {} Object.defineProperty(ctx, "mozCurrentTransform", { get: function getCurrentTransform() { return this._transformMatrix; } }); Object.defineProperty(ctx, "mozCurrentTransformInverse", { get: function getCurrentTransformInverse() { const [a, b, c, d, e, f] = this._transformMatrix; const ad_bc = a * d - b * c; const bc_ad = b * c - a * d; return [d / ad_bc, b / bc_ad, c / bc_ad, a / ad_bc, (d * e - c * f) / bc_ad, (b * e - a * f) / ad_bc]; } }); ctx.save = function ctxSave() { const old = this._transformMatrix; this._transformStack.push(old); this._transformMatrix = old.slice(0, 6); this._originalSave(); }; ctx.restore = function ctxRestore() { const prev = this._transformStack.pop(); if (prev) { this._transformMatrix = prev; this._originalRestore(); } }; ctx.translate = function ctxTranslate(x, y) { const m = this._transformMatrix; m[4] = m[0] * x + m[2] * y + m[4]; m[5] = m[1] * x + m[3] * y + m[5]; this._originalTranslate(x, y); }; ctx.scale = function ctxScale(x, y) { const m = this._transformMatrix; m[0] *= x; m[1] *= x; m[2] *= y; m[3] *= y; this._originalScale(x, y); }; ctx.transform = function ctxTransform(a, b, c, d, e, f) { const m = this._transformMatrix; this._transformMatrix = [m[0] * a + m[2] * b, m[1] * a + m[3] * b, m[0] * c + m[2] * d, m[1] * c + m[3] * d, m[0] * e + m[2] * f + m[4], m[1] * e + m[3] * f + m[5]]; ctx._originalTransform(a, b, c, d, e, f); }; ctx.setTransform = function ctxSetTransform(a, b, c, d, e, f) { this._transformMatrix = [a, b, c, d, e, f]; ctx._originalSetTransform(a, b, c, d, e, f); }; ctx.resetTransform = function ctxResetTransform() { this._transformMatrix = [1, 0, 0, 1, 0, 0]; ctx._originalResetTransform(); }; ctx.rotate = function ctxRotate(angle) { const cosValue = Math.cos(angle); const sinValue = Math.sin(angle); const m = this._transformMatrix; this._transformMatrix = [m[0] * cosValue + m[2] * sinValue, m[1] * cosValue + m[3] * sinValue, m[0] * -sinValue + m[2] * cosValue, m[1] * -sinValue + m[3] * cosValue, m[4], m[5]]; this._originalRotate(angle); }; } class CachedCanvases { constructor(canvasFactory) { this.canvasFactory = canvasFactory; this.cache = Object.create(null); } getCanvas(id, width, height, trackTransform) { let canvasEntry; if (this.cache[id] !== undefined) { canvasEntry = this.cache[id]; this.canvasFactory.reset(canvasEntry, width, height); canvasEntry.context.setTransform(1, 0, 0, 1, 0, 0); } else { canvasEntry = this.canvasFactory.create(width, height); this.cache[id] = canvasEntry; } if (trackTransform) { addContextCurrentTransform(canvasEntry.context); } return canvasEntry; } clear() { for (const id in this.cache) { const canvasEntry = this.cache[id]; this.canvasFactory.destroy(canvasEntry); delete this.cache[id]; } } } function compileType3Glyph(imgData) { const POINT_TO_PROCESS_LIMIT = 1000; const POINT_TYPES = new Uint8Array([0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0]); const width = imgData.width, height = imgData.height, width1 = width + 1; let i, ii, j, j0; const points = new Uint8Array(width1 * (height + 1)); const lineSize = width + 7 & ~7, data0 = imgData.data; const data = new Uint8Array(lineSize * height); let pos = 0; for (i = 0, ii = data0.length; i < ii; i++) { const elem = data0[i]; let mask = 128; while (mask > 0) { data[pos++] = elem & mask ? 0 : 255; mask >>= 1; } } let count = 0; pos = 0; if (data[pos] !== 0) { points[0] = 1; ++count; } for (j = 1; j < width; j++) { if (data[pos] !== data[pos + 1]) { points[j] = data[pos] ? 2 : 1; ++count; } pos++; } if (data[pos] !== 0) { points[j] = 2; ++count; } for (i = 1; i < height; i++) { pos = i * lineSize; j0 = i * width1; if (data[pos - lineSize] !== data[pos]) { points[j0] = data[pos] ? 1 : 8; ++count; } let sum = (data[pos] ? 4 : 0) + (data[pos - lineSize] ? 8 : 0); for (j = 1; j < width; j++) { sum = (sum >> 2) + (data[pos + 1] ? 4 : 0) + (data[pos - lineSize + 1] ? 8 : 0); if (POINT_TYPES[sum]) { points[j0 + j] = POINT_TYPES[sum]; ++count; } pos++; } if (data[pos - lineSize] !== data[pos]) { points[j0 + j] = data[pos] ? 2 : 4; ++count; } if (count > POINT_TO_PROCESS_LIMIT) { return null; } } pos = lineSize * (height - 1); j0 = i * width1; if (data[pos] !== 0) { points[j0] = 8; ++count; } for (j = 1; j < width; j++) { if (data[pos] !== data[pos + 1]) { points[j0 + j] = data[pos] ? 4 : 8; ++count; } pos++; } if (data[pos] !== 0) { points[j0 + j] = 4; ++count; } if (count > POINT_TO_PROCESS_LIMIT) { return null; } const steps = new Int32Array([0, width1, -1, 0, -width1, 0, 0, 0, 1]); const outlines = []; for (i = 0; count && i <= height; i++) { let p = i * width1; const end = p + width; while (p < end && !points[p]) { p++; } if (p === end) { continue; } const coords = [p % width1, i]; const p0 = p; let type = points[p]; do { const step = steps[type]; do { p += step; } while (!points[p]); const pp = points[p]; if (pp !== 5 && pp !== 10) { type = pp; points[p] = 0; } else { type = pp & 0x33 * type >> 4; points[p] &= type >> 2 | type << 2; } coords.push(p % width1, p / width1 | 0); if (!points[p]) { --count; } } while (p0 !== p); outlines.push(coords); --i; } const drawOutline = function (c) { c.save(); c.scale(1 / width, -1 / height); c.translate(0, -height); c.beginPath(); for (let k = 0, kk = outlines.length; k < kk; k++) { const o = outlines[k]; c.moveTo(o[0], o[1]); for (let l = 2, ll = o.length; l < ll; l += 2) { c.lineTo(o[l], o[l + 1]); } } c.fill(); c.beginPath(); c.restore(); }; return drawOutline; } class CanvasExtraState { constructor(width, height) { this.alphaIsShape = false; this.fontSize = 0; this.fontSizeScale = 1; this.textMatrix = _util.IDENTITY_MATRIX; this.textMatrixScale = 1; this.fontMatrix = _util.FONT_IDENTITY_MATRIX; this.leading = 0; this.x = 0; this.y = 0; this.lineX = 0; this.lineY = 0; this.charSpacing = 0; this.wordSpacing = 0; this.textHScale = 1; this.textRenderingMode = _util.TextRenderingMode.FILL; this.textRise = 0; this.fillColor = "#000000"; this.strokeColor = "#000000"; this.patternFill = false; this.fillAlpha = 1; this.strokeAlpha = 1; this.lineWidth = 1; this.activeSMask = null; this.transferMaps = null; this.startNewPathAndClipBox([0, 0, width, height]); } clone() { const clone = Object.create(this); clone.clipBox = this.clipBox.slice(); return clone; } setCurrentPoint(x, y) { this.x = x; this.y = y; } updatePathMinMax(transform, x, y) { [x, y] = _util.Util.applyTransform([x, y], transform); this.minX = Math.min(this.minX, x); this.minY = Math.min(this.minY, y); this.maxX = Math.max(this.maxX, x); this.maxY = Math.max(this.maxY, y); } updateCurvePathMinMax(transform, x0, y0, x1, y1, x2, y2, x3, y3) { const box = _util.Util.bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3); this.updatePathMinMax(transform, box[0], box[1]); this.updatePathMinMax(transform, box[2], box[3]); } getPathBoundingBox(pathType = _pattern_helper.PathType.FILL, transform = null) { const box = [this.minX, this.minY, this.maxX, this.maxY]; if (pathType === _pattern_helper.PathType.STROKE) { if (!transform) { (0, _util.unreachable)("Stroke bounding box must include transform."); } const scale = _util.Util.singularValueDecompose2dScale(transform); const xStrokePad = scale[0] * this.lineWidth / 2; const yStrokePad = scale[1] * this.lineWidth / 2; box[0] -= xStrokePad; box[1] -= yStrokePad; box[2] += xStrokePad; box[3] += yStrokePad; } return box; } updateClipFromPath() { const intersect = _util.Util.intersect(this.clipBox, this.getPathBoundingBox()); this.startNewPathAndClipBox(intersect || [0, 0, 0, 0]); } startNewPathAndClipBox(box) { this.clipBox = box; this.minX = Infinity; this.minY = Infinity; this.maxX = 0; this.maxY = 0; } getClippedPathBoundingBox(pathType = _pattern_helper.PathType.FILL, transform = null) { return _util.Util.intersect(this.clipBox, this.getPathBoundingBox(pathType, transform)); } } function putBinaryImageData(ctx, imgData, transferMaps = null) { if (typeof ImageData !== "undefined" && imgData instanceof ImageData) { ctx.putImageData(imgData, 0, 0); return; } const height = imgData.height, width = imgData.width; const partialChunkHeight = height % FULL_CHUNK_HEIGHT; const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); let srcPos = 0, destPos; const src = imgData.data; const dest = chunkImgData.data; let i, j, thisChunkHeight, elemsInThisChunk; let transferMapRed, transferMapGreen, transferMapBlue, transferMapGray; if (transferMaps) { switch (transferMaps.length) { case 1: transferMapRed = transferMaps[0]; transferMapGreen = transferMaps[0]; transferMapBlue = transferMaps[0]; transferMapGray = transferMaps[0]; break; case 4: transferMapRed = transferMaps[0]; transferMapGreen = transferMaps[1]; transferMapBlue = transferMaps[2]; transferMapGray = transferMaps[3]; break; } } if (imgData.kind === _util.ImageKind.GRAYSCALE_1BPP) { const srcLength = src.byteLength; const dest32 = new Uint32Array(dest.buffer, 0, dest.byteLength >> 2); const dest32DataLength = dest32.length; const fullSrcDiff = width + 7 >> 3; let white = 0xffffffff; let black = _util.IsLittleEndianCached.value ? 0xff000000 : 0x000000ff; if (transferMapGray) { if (transferMapGray[0] === 0xff && transferMapGray[0xff] === 0) { [white, black] = [black, white]; } } for (i = 0; i < totalChunks; i++) { thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight; destPos = 0; for (j = 0; j < thisChunkHeight; j++) { const srcDiff = srcLength - srcPos; let k = 0; const kEnd = srcDiff > fullSrcDiff ? width : srcDiff * 8 - 7; const kEndUnrolled = kEnd & ~7; let mask = 0; let srcByte = 0; for (; k < kEndUnrolled; k += 8) { srcByte = src[srcPos++]; dest32[destPos++] = srcByte & 128 ? white : black; dest32[destPos++] = srcByte & 64 ? white : black; dest32[destPos++] = srcByte & 32 ? white : black; dest32[destPos++] = srcByte & 16 ? white : black; dest32[destPos++] = srcByte & 8 ? white : black; dest32[destPos++] = srcByte & 4 ? white : black; dest32[destPos++] = srcByte & 2 ? white : black; dest32[destPos++] = srcByte & 1 ? white : black; } for (; k < kEnd; k++) { if (mask === 0) { srcByte = src[srcPos++]; mask = 128; } dest32[destPos++] = srcByte & mask ? white : black; mask >>= 1; } } while (destPos < dest32DataLength) { dest32[destPos++] = 0; } ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); } } else if (imgData.kind === _util.ImageKind.RGBA_32BPP) { const hasTransferMaps = !!(transferMapRed || transferMapGreen || transferMapBlue); j = 0; elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4; for (i = 0; i < fullChunks; i++) { dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); srcPos += elemsInThisChunk; if (hasTransferMaps) { for (let k = 0; k < elemsInThisChunk; k += 4) { if (transferMapRed) { dest[k + 0] = transferMapRed[dest[k + 0]]; } if (transferMapGreen) { dest[k + 1] = transferMapGreen[dest[k + 1]]; } if (transferMapBlue) { dest[k + 2] = transferMapBlue[dest[k + 2]]; } } } ctx.putImageData(chunkImgData, 0, j); j += FULL_CHUNK_HEIGHT; } if (i < totalChunks) { elemsInThisChunk = width * partialChunkHeight * 4; dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); if (hasTransferMaps) { for (let k = 0; k < elemsInThisChunk; k += 4) { if (transferMapRed) { dest[k + 0] = transferMapRed[dest[k + 0]]; } if (transferMapGreen) { dest[k + 1] = transferMapGreen[dest[k + 1]]; } if (transferMapBlue) { dest[k + 2] = transferMapBlue[dest[k + 2]]; } } } ctx.putImageData(chunkImgData, 0, j); } } else if (imgData.kind === _util.ImageKind.RGB_24BPP) { const hasTransferMaps = !!(transferMapRed || transferMapGreen || transferMapBlue); thisChunkHeight = FULL_CHUNK_HEIGHT; elemsInThisChunk = width * thisChunkHeight; for (i = 0; i < totalChunks; i++) { if (i >= fullChunks) { thisChunkHeight = partialChunkHeight; elemsInThisChunk = width * thisChunkHeight; } destPos = 0; for (j = elemsInThisChunk; j--;) { dest[destPos++] = src[srcPos++]; dest[destPos++] = src[srcPos++]; dest[destPos++] = src[srcPos++]; dest[destPos++] = 255; } if (hasTransferMaps) { for (let k = 0; k < destPos; k += 4) { if (transferMapRed) { dest[k + 0] = transferMapRed[dest[k + 0]]; } if (transferMapGreen) { dest[k + 1] = transferMapGreen[dest[k + 1]]; } if (transferMapBlue) { dest[k + 2] = transferMapBlue[dest[k + 2]]; } } } ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); } } else { throw new Error(`bad image kind: ${imgData.kind}`); } } function putBinaryImageMask(ctx, imgData) { const height = imgData.height, width = imgData.width; const partialChunkHeight = height % FULL_CHUNK_HEIGHT; const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); let srcPos = 0; const src = imgData.data; const dest = chunkImgData.data; for (let i = 0; i < totalChunks; i++) { const thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight; let destPos = 3; for (let j = 0; j < thisChunkHeight; j++) { let elem, mask = 0; for (let k = 0; k < width; k++) { if (!mask) { elem = src[srcPos++]; mask = 128; } dest[destPos] = elem & mask ? 0 : 255; destPos += 4; mask >>= 1; } } ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); } } function copyCtxState(sourceCtx, destCtx) { const properties = ["strokeStyle", "fillStyle", "fillRule", "globalAlpha", "lineWidth", "lineCap", "lineJoin", "miterLimit", "globalCompositeOperation", "font"]; for (let i = 0, ii = properties.length; i < ii; i++) { const property = properties[i]; if (sourceCtx[property] !== undefined) { destCtx[property] = sourceCtx[property]; } } if (sourceCtx.setLineDash !== undefined) { destCtx.setLineDash(sourceCtx.getLineDash()); destCtx.lineDashOffset = sourceCtx.lineDashOffset; } } function resetCtxToDefault(ctx) { ctx.strokeStyle = "#000000"; ctx.fillStyle = "#000000"; ctx.fillRule = "nonzero"; ctx.globalAlpha = 1; ctx.lineWidth = 1; ctx.lineCap = "butt"; ctx.lineJoin = "miter"; ctx.miterLimit = 10; ctx.globalCompositeOperation = "source-over"; ctx.font = "10px sans-serif"; if (ctx.setLineDash !== undefined) { ctx.setLineDash([]); ctx.lineDashOffset = 0; } } function composeSMaskBackdrop(bytes, r0, g0, b0) { const length = bytes.length; for (let i = 3; i < length; i += 4) { const alpha = bytes[i]; if (alpha === 0) { bytes[i - 3] = r0; bytes[i - 2] = g0; bytes[i - 1] = b0; } else if (alpha < 255) { const alpha_ = 255 - alpha; bytes[i - 3] = bytes[i - 3] * alpha + r0 * alpha_ >> 8; bytes[i - 2] = bytes[i - 2] * alpha + g0 * alpha_ >> 8; bytes[i - 1] = bytes[i - 1] * alpha + b0 * alpha_ >> 8; } } } function composeSMaskAlpha(maskData, layerData, transferMap) { const length = maskData.length; const scale = 1 / 255; for (let i = 3; i < length; i += 4) { const alpha = transferMap ? transferMap[maskData[i]] : maskData[i]; layerData[i] = layerData[i] * alpha * scale | 0; } } function composeSMaskLuminosity(maskData, layerData, transferMap) { const length = maskData.length; for (let i = 3; i < length; i += 4) { const y = maskData[i - 3] * 77 + maskData[i - 2] * 152 + maskData[i - 1] * 28; layerData[i] = transferMap ? layerData[i] * transferMap[y >> 8] >> 8 : layerData[i] * y >> 16; } } function genericComposeSMask(maskCtx, layerCtx, width, height, subtype, backdrop, transferMap, layerOffsetX, layerOffsetY, maskOffsetX, maskOffsetY) { const hasBackdrop = !!backdrop; const r0 = hasBackdrop ? backdrop[0] : 0; const g0 = hasBackdrop ? backdrop[1] : 0; const b0 = hasBackdrop ? backdrop[2] : 0; let composeFn; if (subtype === "Luminosity") { composeFn = composeSMaskLuminosity; } else { composeFn = composeSMaskAlpha; } const PIXELS_TO_PROCESS = 1048576; const chunkSize = Math.min(height, Math.ceil(PIXELS_TO_PROCESS / width)); for (let row = 0; row < height; row += chunkSize) { const chunkHeight = Math.min(chunkSize, height - row); const maskData = maskCtx.getImageData(layerOffsetX - maskOffsetX, row + (layerOffsetY - maskOffsetY), width, chunkHeight); const layerData = layerCtx.getImageData(layerOffsetX, row + layerOffsetY, width, chunkHeight); if (hasBackdrop) { composeSMaskBackdrop(maskData.data, r0, g0, b0); } composeFn(maskData.data, layerData.data, transferMap); layerCtx.putImageData(layerData, layerOffsetX, row + layerOffsetY); } } function composeSMask(ctx, smask, layerCtx, layerBox) { const layerOffsetX = layerBox[0]; const layerOffsetY = layerBox[1]; const layerWidth = layerBox[2] - layerOffsetX; const layerHeight = layerBox[3] - layerOffsetY; if (layerWidth === 0 || layerHeight === 0) { return; } genericComposeSMask(smask.context, layerCtx, layerWidth, layerHeight, smask.subtype, smask.backdrop, smask.transferMap, layerOffsetX, layerOffsetY, smask.offsetX, smask.offsetY); ctx.save(); ctx.globalAlpha = 1; ctx.globalCompositeOperation = "source-over"; ctx.setTransform(1, 0, 0, 1, 0, 0); ctx.drawImage(layerCtx.canvas, 0, 0); ctx.restore(); } function getImageSmoothingEnabled(transform, interpolate) { const scale = _util.Util.singularValueDecompose2dScale(transform); scale[0] = Math.fround(scale[0]); scale[1] = Math.fround(scale[1]); const actualScale = Math.fround((globalThis.devicePixelRatio || 1) * _display_utils.PixelsPerInch.PDF_TO_CSS_UNITS); if (interpolate !== undefined) { return interpolate; } else if (scale[0] <= actualScale || scale[1] <= actualScale) { return true; } return false; } const LINE_CAP_STYLES = ["butt", "round", "square"]; const LINE_JOIN_STYLES = ["miter", "round", "bevel"]; const NORMAL_CLIP = {}; const EO_CLIP = {}; class CanvasGraphics { constructor(canvasCtx, commonObjs, objs, canvasFactory, imageLayer, optionalContentConfig, annotationCanvasMap) { this.ctx = canvasCtx; this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height); this.stateStack = []; this.pendingClip = null; this.pendingEOFill = false; this.res = null; this.xobjs = null; this.commonObjs = commonObjs; this.objs = objs; this.canvasFactory = canvasFactory; this.imageLayer = imageLayer; this.groupStack = []; this.processingType3 = null; this.baseTransform = null; this.baseTransformStack = []; this.groupLevel = 0; this.smaskStack = []; this.smaskCounter = 0; this.tempSMask = null; this.suspendedCtx = null; this.contentVisible = true; this.markedContentStack = []; this.optionalContentConfig = optionalContentConfig; this.cachedCanvases = new CachedCanvases(this.canvasFactory); this.cachedPatterns = new Map(); this.annotationCanvasMap = annotationCanvasMap; this.viewportScale = 1; this.outputScaleX = 1; this.outputScaleY = 1; if (canvasCtx) { addContextCurrentTransform(canvasCtx); } this._cachedGetSinglePixelWidth = null; } beginDrawing({ transform, viewport, transparency = false, background = null }) { const width = this.ctx.canvas.width; const height = this.ctx.canvas.height; this.ctx.save(); this.ctx.fillStyle = background || "rgb(255, 255, 255)"; this.ctx.fillRect(0, 0, width, height); this.ctx.restore(); if (transparency) { const transparentCanvas = this.cachedCanvases.getCanvas("transparent", width, height, true); this.compositeCtx = this.ctx; this.transparentCanvas = transparentCanvas.canvas; this.ctx = transparentCanvas.context; this.ctx.save(); this.ctx.transform.apply(this.ctx, this.compositeCtx.mozCurrentTransform); } this.ctx.save(); resetCtxToDefault(this.ctx); if (transform) { this.ctx.transform.apply(this.ctx, transform); this.outputScaleX = transform[0]; this.outputScaleY = transform[0]; } this.ctx.transform.apply(this.ctx, viewport.transform); this.viewportScale = viewport.scale; this.baseTransform = this.ctx.mozCurrentTransform.slice(); this._combinedScaleFactor = Math.hypot(this.baseTransform[0], this.baseTransform[2]); if (this.imageLayer) { this.imageLayer.beginLayout(); } } executeOperatorList(operatorList, executionStartIdx, continueCallback, stepper) { const argsArray = operatorList.argsArray; const fnArray = operatorList.fnArray; let i = executionStartIdx || 0; const argsArrayLen = argsArray.length; if (argsArrayLen === i) { return i; } const chunkOperations = argsArrayLen - i > EXECUTION_STEPS && typeof continueCallback === "function"; const endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0; let steps = 0; const commonObjs = this.commonObjs; const objs = this.objs; let fnId; while (true) { if (stepper !== undefined && i === stepper.nextBreakPoint) { stepper.breakIt(i, continueCallback); return i; } fnId = fnArray[i]; if (fnId !== _util.OPS.dependency) { this[fnId].apply(this, argsArray[i]); } else { for (const depObjId of argsArray[i]) { const objsPool = depObjId.startsWith("g_") ? commonObjs : objs; if (!objsPool.has(depObjId)) { objsPool.get(depObjId, continueCallback); return i; } } } i++; if (i === argsArrayLen) { return i; } if (chunkOperations && ++steps > EXECUTION_STEPS) { if (Date.now() > endTime) { continueCallback(); return i; } steps = 0; } } } endDrawing() { while (this.stateStack.length || this.current.activeSMask !== null) { this.restore(); } this.ctx.restore(); if (this.transparentCanvas) { this.ctx = this.compositeCtx; this.ctx.save(); this.ctx.setTransform(1, 0, 0, 1, 0, 0); this.ctx.drawImage(this.transparentCanvas, 0, 0); this.ctx.restore(); this.transparentCanvas = null; } this.cachedCanvases.clear(); this.cachedPatterns.clear(); if (this.imageLayer) { this.imageLayer.endLayout(); } } _scaleImage(img, inverseTransform) { const width = img.width; const height = img.height; let widthScale = Math.max(Math.hypot(inverseTransform[0], inverseTransform[1]), 1); let heightScale = Math.max(Math.hypot(inverseTransform[2], inverseTransform[3]), 1); let paintWidth = width, paintHeight = height; let tmpCanvasId = "prescale1"; let tmpCanvas, tmpCtx; while (widthScale > 2 && paintWidth > 1 || heightScale > 2 && paintHeight > 1) { let newWidth = paintWidth, newHeight = paintHeight; if (widthScale > 2 && paintWidth > 1) { newWidth = Math.ceil(paintWidth / 2); widthScale /= paintWidth / newWidth; } if (heightScale > 2 && paintHeight > 1) { newHeight = Math.ceil(paintHeight / 2); heightScale /= paintHeight / newHeight; } tmpCanvas = this.cachedCanvases.getCanvas(tmpCanvasId, newWidth, newHeight); tmpCtx = tmpCanvas.context; tmpCtx.clearRect(0, 0, newWidth, newHeight); tmpCtx.drawImage(img, 0, 0, paintWidth, paintHeight, 0, 0, newWidth, newHeight); img = tmpCanvas.canvas; paintWidth = newWidth; paintHeight = newHeight; tmpCanvasId = tmpCanvasId === "prescale1" ? "prescale2" : "prescale1"; } return { img, paintWidth, paintHeight }; } _createMaskCanvas(img) { const ctx = this.ctx; const width = img.width, height = img.height; const fillColor = this.current.fillColor; const isPatternFill = this.current.patternFill; const maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height); const maskCtx = maskCanvas.context; putBinaryImageMask(maskCtx, img); const objToCanvas = ctx.mozCurrentTransform; let maskToCanvas = _util.Util.transform(objToCanvas, [1 / width, 0, 0, -1 / height, 0, 0]); maskToCanvas = _util.Util.transform(maskToCanvas, [1, 0, 0, 1, 0, -height]); const cord1 = _util.Util.applyTransform([0, 0], maskToCanvas); const cord2 = _util.Util.applyTransform([width, height], maskToCanvas); const rect = _util.Util.normalizeRect([cord1[0], cord1[1], cord2[0], cord2[1]]); const drawnWidth = Math.ceil(rect[2] - rect[0]); const drawnHeight = Math.ceil(rect[3] - rect[1]); const fillCanvas = this.cachedCanvases.getCanvas("fillCanvas", drawnWidth, drawnHeight, true); const fillCtx = fillCanvas.context; const offsetX = Math.min(cord1[0], cord2[0]); const offsetY = Math.min(cord1[1], cord2[1]); fillCtx.translate(-offsetX, -offsetY); fillCtx.transform.apply(fillCtx, maskToCanvas); const scaled = this._scaleImage(maskCanvas.canvas, fillCtx.mozCurrentTransformInverse); fillCtx.imageSmoothingEnabled = getImageSmoothingEnabled(fillCtx.mozCurrentTransform, img.interpolate); fillCtx.drawImage(scaled.img, 0, 0, scaled.img.width, scaled.img.height, 0, 0, width, height); fillCtx.globalCompositeOperation = "source-in"; const inverse = _util.Util.transform(fillCtx.mozCurrentTransformInverse, [1, 0, 0, 1, -offsetX, -offsetY]); fillCtx.fillStyle = isPatternFill ? fillColor.getPattern(ctx, this, inverse, _pattern_helper.PathType.FILL) : fillColor; fillCtx.fillRect(0, 0, width, height); return { canvas: fillCanvas.canvas, offsetX: Math.round(offsetX), offsetY: Math.round(offsetY) }; } setLineWidth(width) { this.current.lineWidth = width; this.ctx.lineWidth = width; } setLineCap(style) { this.ctx.lineCap = LINE_CAP_STYLES[style]; } setLineJoin(style) { this.ctx.lineJoin = LINE_JOIN_STYLES[style]; } setMiterLimit(limit) { this.ctx.miterLimit = limit; } setDash(dashArray, dashPhase) { const ctx = this.ctx; if (ctx.setLineDash !== undefined) { ctx.setLineDash(dashArray); ctx.lineDashOffset = dashPhase; } } setRenderingIntent(intent) {} setFlatness(flatness) {} setGState(states) { for (let i = 0, ii = states.length; i < ii; i++) { const state = states[i]; const key = state[0]; const value = state[1]; switch (key) { case "LW": this.setLineWidth(value); break; case "LC": this.setLineCap(value); break; case "LJ": this.setLineJoin(value); break; case "ML": this.setMiterLimit(value); break; case "D": this.setDash(value[0], value[1]); break; case "RI": this.setRenderingIntent(value); break; case "FL": this.setFlatness(value); break; case "Font": this.setFont(value[0], value[1]); break; case "CA": this.current.strokeAlpha = state[1]; break; case "ca": this.current.fillAlpha = state[1]; this.ctx.globalAlpha = state[1]; break; case "BM": this.ctx.globalCompositeOperation = value; break; case "SMask": this.current.activeSMask = value ? this.tempSMask : null; this.tempSMask = null; this.checkSMaskState(); break; case "TR": this.current.transferMaps = value; } } } checkSMaskState() { const inSMaskMode = !!this.suspendedCtx; if (this.current.activeSMask && !inSMaskMode) { this.beginSMaskMode(); } else if (!this.current.activeSMask && inSMaskMode) { this.endSMaskMode(); } } beginSMaskMode() { if (this.suspendedCtx) { throw new Error("beginSMaskMode called while already in smask mode"); } const drawnWidth = this.ctx.canvas.width; const drawnHeight = this.ctx.canvas.height; const cacheId = "smaskGroupAt" + this.groupLevel; const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true); this.suspendedCtx = this.ctx; this.ctx = scratchCanvas.context; const ctx = this.ctx; ctx.setTransform.apply(ctx, this.suspendedCtx.mozCurrentTransform); copyCtxState(this.suspendedCtx, ctx); mirrorContextOperations(ctx, this.suspendedCtx); this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]); } endSMaskMode() { if (!this.suspendedCtx) { throw new Error("endSMaskMode called while not in smask mode"); } this.ctx._removeMirroring(); copyCtxState(this.ctx, this.suspendedCtx); this.ctx = this.suspendedCtx; this.current.activeSMask = null; this.suspendedCtx = null; } compose(dirtyBox) { if (!this.current.activeSMask) { return; } if (!dirtyBox) { dirtyBox = [0, 0, this.ctx.canvas.width, this.ctx.canvas.height]; } else { dirtyBox[0] = Math.floor(dirtyBox[0]); dirtyBox[1] = Math.floor(dirtyBox[1]); dirtyBox[2] = Math.ceil(dirtyBox[2]); dirtyBox[3] = Math.ceil(dirtyBox[3]); } const smask = this.current.activeSMask; const suspendedCtx = this.suspendedCtx; composeSMask(suspendedCtx, smask, this.ctx, dirtyBox); this.ctx.save(); this.ctx.setTransform(1, 0, 0, 1, 0, 0); this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height); this.ctx.restore(); } save() { this.ctx.save(); const old = this.current; this.stateStack.push(old); this.current = old.clone(); } restore() { if (this.stateStack.length === 0 && this.current.activeSMask) { this.endSMaskMode(); } if (this.stateStack.length !== 0) { this.current = this.stateStack.pop(); this.ctx.restore(); this.checkSMaskState(); this.pendingClip = null; this._cachedGetSinglePixelWidth = null; } } transform(a, b, c, d, e, f) { this.ctx.transform(a, b, c, d, e, f); this._cachedGetSinglePixelWidth = null; } constructPath(ops, args) { const ctx = this.ctx; const current = this.current; let x = current.x, y = current.y; let startX, startY; for (let i = 0, j = 0, ii = ops.length; i < ii; i++) { switch (ops[i] | 0) { case _util.OPS.rectangle: x = args[j++]; y = args[j++]; const width = args[j++]; const height = args[j++]; const xw = x + width; const yh = y + height; ctx.moveTo(x, y); if (width === 0 || height === 0) { ctx.lineTo(xw, yh); } else { ctx.lineTo(xw, y); ctx.lineTo(xw, yh); ctx.lineTo(x, yh); } current.updatePathMinMax(ctx.mozCurrentTransform, x, y); current.updatePathMinMax(ctx.mozCurrentTransform, xw, yh); ctx.closePath(); break; case _util.OPS.moveTo: x = args[j++]; y = args[j++]; ctx.moveTo(x, y); current.updatePathMinMax(ctx.mozCurrentTransform, x, y); break; case _util.OPS.lineTo: x = args[j++]; y = args[j++]; ctx.lineTo(x, y); current.updatePathMinMax(ctx.mozCurrentTransform, x, y); break; case _util.OPS.curveTo: startX = x; startY = y; x = args[j + 4]; y = args[j + 5]; ctx.bezierCurveTo(args[j], args[j + 1], args[j + 2], args[j + 3], x, y); current.updateCurvePathMinMax(ctx.mozCurrentTransform, startX, startY, args[j], args[j + 1], args[j + 2], args[j + 3], x, y); j += 6; break; case _util.OPS.curveTo2: startX = x; startY = y; ctx.bezierCurveTo(x, y, args[j], args[j + 1], args[j + 2], args[j + 3]); current.updateCurvePathMinMax(ctx.mozCurrentTransform, startX, startY, x, y, args[j], args[j + 1], args[j + 2], args[j + 3]); x = args[j + 2]; y = args[j + 3]; j += 4; break; case _util.OPS.curveTo3: startX = x; startY = y; x = args[j + 2]; y = args[j + 3]; ctx.bezierCurveTo(args[j], args[j + 1], x, y, x, y); current.updateCurvePathMinMax(ctx.mozCurrentTransform, startX, startY, args[j], args[j + 1], x, y, x, y); j += 4; break; case _util.OPS.closePath: ctx.closePath(); break; } } current.setCurrentPoint(x, y); } closePath() { this.ctx.closePath(); } stroke(consumePath) { consumePath = typeof consumePath !== "undefined" ? consumePath : true; const ctx = this.ctx; const strokeColor = this.current.strokeColor; ctx.globalAlpha = this.current.strokeAlpha; if (this.contentVisible) { if (typeof strokeColor === "object" && strokeColor?.getPattern) { const lineWidth = this.getSinglePixelWidth(); ctx.save(); ctx.strokeStyle = strokeColor.getPattern(ctx, this, ctx.mozCurrentTransformInverse, _pattern_helper.PathType.STROKE); ctx.lineWidth = Math.max(lineWidth, this.current.lineWidth); ctx.stroke(); ctx.restore(); } else { const lineWidth = this.getSinglePixelWidth(); if (lineWidth < 0 && -lineWidth >= this.current.lineWidth) { ctx.save(); ctx.resetTransform(); ctx.lineWidth = Math.round(this._combinedScaleFactor); ctx.stroke(); ctx.restore(); } else { ctx.lineWidth = Math.max(lineWidth, this.current.lineWidth); ctx.stroke(); } } } if (consumePath) { this.consumePath(this.current.getClippedPathBoundingBox()); } ctx.globalAlpha = this.current.fillAlpha; } closeStroke() { this.closePath(); this.stroke(); } fill(consumePath) { consumePath = typeof consumePath !== "undefined" ? consumePath : true; const ctx = this.ctx; const fillColor = this.current.fillColor; const isPatternFill = this.current.patternFill; let needRestore = false; if (isPatternFill) { ctx.save(); ctx.fillStyle = fillColor.getPattern(ctx, this, ctx.mozCurrentTransformInverse, _pattern_helper.PathType.FILL); needRestore = true; } const intersect = this.current.getClippedPathBoundingBox(); if (this.contentVisible && intersect !== null) { if (this.pendingEOFill) { ctx.fill("evenodd"); this.pendingEOFill = false; } else { ctx.fill(); } } if (needRestore) { ctx.restore(); } if (consumePath) { this.consumePath(intersect); } } eoFill() { this.pendingEOFill = true; this.fill(); } fillStroke() { this.fill(false); this.stroke(false); this.consumePath(); } eoFillStroke() { this.pendingEOFill = true; this.fillStroke(); } closeFillStroke() { this.closePath(); this.fillStroke(); } closeEOFillStroke() { this.pendingEOFill = true; this.closePath(); this.fillStroke(); } endPath() { this.consumePath(); } clip() { this.pendingClip = NORMAL_CLIP; } eoClip() { this.pendingClip = EO_CLIP; } beginText() { this.current.textMatrix = _util.IDENTITY_MATRIX; this.current.textMatrixScale = 1; this.current.x = this.current.lineX = 0; this.current.y = this.current.lineY = 0; } endText() { const paths = this.pendingTextPaths; const ctx = this.ctx; if (paths === undefined) { ctx.beginPath(); return; } ctx.save(); ctx.beginPath(); for (let i = 0; i < paths.length; i++) { const path = paths[i]; ctx.setTransform.apply(ctx, path.transform); ctx.translate(path.x, path.y); path.addToPath(ctx, path.fontSize); } ctx.restore(); ctx.clip(); ctx.beginPath(); delete this.pendingTextPaths; } setCharSpacing(spacing) { this.current.charSpacing = spacing; } setWordSpacing(spacing) { this.current.wordSpacing = spacing; } setHScale(scale) { this.current.textHScale = scale / 100; } setLeading(leading) { this.current.leading = -leading; } setFont(fontRefName, size) { const fontObj = this.commonObjs.get(fontRefName); const current = this.current; if (!fontObj) { throw new Error(`Can't find font for ${fontRefName}`); } current.fontMatrix = fontObj.fontMatrix || _util.FONT_IDENTITY_MATRIX; if (current.fontMatrix[0] === 0 || current.fontMatrix[3] === 0) { (0, _util.warn)("Invalid font matrix for font " + fontRefName); } if (size < 0) { size = -size; current.fontDirection = -1; } else { current.fontDirection = 1; } this.current.font = fontObj; this.current.fontSize = size; if (fontObj.isType3Font) { return; } const name = fontObj.loadedName || "sans-serif"; let bold = "normal"; if (fontObj.black) { bold = "900"; } else if (fontObj.bold) { bold = "bold"; } const italic = fontObj.italic ? "italic" : "normal"; const typeface = `"${name}", ${fontObj.fallbackName}`; let browserFontSize = size; if (size < MIN_FONT_SIZE) { browserFontSize = MIN_FONT_SIZE; } else if (size > MAX_FONT_SIZE) { browserFontSize = MAX_FONT_SIZE; } this.current.fontSizeScale = size / browserFontSize; this.ctx.font = `${italic} ${bold} ${browserFontSize}px ${typeface}`; } setTextRenderingMode(mode) { this.current.textRenderingMode = mode; } setTextRise(rise) { this.current.textRise = rise; } moveText(x, y) { this.current.x = this.current.lineX += x; this.current.y = this.current.lineY += y; } setLeadingMoveText(x, y) { this.setLeading(-y); this.moveText(x, y); } setTextMatrix(a, b, c, d, e, f) { this.current.textMatrix = [a, b, c, d, e, f]; this.current.textMatrixScale = Math.hypot(a, b); this.current.x = this.current.lineX = 0; this.current.y = this.current.lineY = 0; } nextLine() { this.moveText(0, this.current.leading); } paintChar(character, x, y, patternTransform, resetLineWidthToOne) { const ctx = this.ctx; const current = this.current; const font = current.font; const textRenderingMode = current.textRenderingMode; const fontSize = current.fontSize / current.fontSizeScale; const fillStrokeMode = textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK; const isAddToPathSet = !!(textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG); const patternFill = current.patternFill && !font.missingFile; let addToPath; if (font.disableFontFace || isAddToPathSet || patternFill) { addToPath = font.getPathGenerator(this.commonObjs, character); } if (font.disableFontFace || patternFill) { ctx.save(); ctx.translate(x, y); ctx.beginPath(); addToPath(ctx, fontSize); if (patternTransform) { ctx.setTransform.apply(ctx, patternTransform); } if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { ctx.fill(); } if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { if (resetLineWidthToOne) { ctx.resetTransform(); ctx.lineWidth = Math.round(this._combinedScaleFactor); } ctx.stroke(); } ctx.restore(); } else { if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { ctx.fillText(character, x, y); } if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { if (resetLineWidthToOne) { ctx.save(); ctx.moveTo(x, y); ctx.resetTransform(); ctx.lineWidth = Math.round(this._combinedScaleFactor); ctx.strokeText(character, 0, 0); ctx.restore(); } else { ctx.strokeText(character, x, y); } } } if (isAddToPathSet) { const paths = this.pendingTextPaths || (this.pendingTextPaths = []); paths.push({ transform: ctx.mozCurrentTransform, x, y, fontSize, addToPath }); } } get isFontSubpixelAAEnabled() { const { context: ctx } = this.cachedCanvases.getCanvas("isFontSubpixelAAEnabled", 10, 10); ctx.scale(1.5, 1); ctx.fillText("I", 0, 10); const data = ctx.getImageData(0, 0, 10, 10).data; let enabled = false; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0 && data[i] < 255) { enabled = true; break; } } return (0, _util.shadow)(this, "isFontSubpixelAAEnabled", enabled); } showText(glyphs) { const current = this.current; const font = current.font; if (font.isType3Font) { return this.showType3Text(glyphs); } const fontSize = current.fontSize; if (fontSize === 0) { return undefined; } const ctx = this.ctx; const fontSizeScale = current.fontSizeScale; const charSpacing = current.charSpacing; const wordSpacing = current.wordSpacing; const fontDirection = current.fontDirection; const textHScale = current.textHScale * fontDirection; const glyphsLength = glyphs.length; const vertical = font.vertical; const spacingDir = vertical ? 1 : -1; const defaultVMetrics = font.defaultVMetrics; const widthAdvanceScale = fontSize * current.fontMatrix[0]; const simpleFillText = current.textRenderingMode === _util.TextRenderingMode.FILL && !font.disableFontFace && !current.patternFill; ctx.save(); ctx.transform.apply(ctx, current.textMatrix); ctx.translate(current.x, current.y + current.textRise); if (fontDirection > 0) { ctx.scale(textHScale, -1); } else { ctx.scale(textHScale, 1); } let patternTransform; if (current.patternFill) { ctx.save(); const pattern = current.fillColor.getPattern(ctx, this, ctx.mozCurrentTransformInverse, _pattern_helper.PathType.FILL); patternTransform = ctx.mozCurrentTransform; ctx.restore(); ctx.fillStyle = pattern; } let lineWidth = current.lineWidth; let resetLineWidthToOne = false; const scale = current.textMatrixScale; if (scale === 0 || lineWidth === 0) { const fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK; if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { this._cachedGetSinglePixelWidth = null; lineWidth = this.getSinglePixelWidth(); resetLineWidthToOne = lineWidth < 0; } } else { lineWidth /= scale; } if (fontSizeScale !== 1.0) { ctx.scale(fontSizeScale, fontSizeScale); lineWidth /= fontSizeScale; } ctx.lineWidth = lineWidth; let x = 0, i; for (i = 0; i < glyphsLength; ++i) { const glyph = glyphs[i]; if ((0, _util.isNum)(glyph)) { x += spacingDir * glyph * fontSize / 1000; continue; } let restoreNeeded = false; const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; const character = glyph.fontChar; const accent = glyph.accent; let scaledX, scaledY; let width = glyph.width; if (vertical) { const vmetric = glyph.vmetric || defaultVMetrics; const vx = -(glyph.vmetric ? vmetric[1] : width * 0.5) * widthAdvanceScale; const vy = vmetric[2] * widthAdvanceScale; width = vmetric ? -vmetric[0] : width; scaledX = vx / fontSizeScale; scaledY = (x + vy) / fontSizeScale; } else { scaledX = x / fontSizeScale; scaledY = 0; } if (font.remeasure && width > 0) { const measuredWidth = ctx.measureText(character).width * 1000 / fontSize * fontSizeScale; if (width < measuredWidth && this.isFontSubpixelAAEnabled) { const characterScaleX = width / measuredWidth; restoreNeeded = true; ctx.save(); ctx.scale(characterScaleX, 1); scaledX /= characterScaleX; } else if (width !== measuredWidth) { scaledX += (width - measuredWidth) / 2000 * fontSize / fontSizeScale; } } if (this.contentVisible && (glyph.isInFont || font.missingFile)) { if (simpleFillText && !accent) { ctx.fillText(character, scaledX, scaledY); } else { this.paintChar(character, scaledX, scaledY, patternTransform, resetLineWidthToOne); if (accent) { const scaledAccentX = scaledX + fontSize * accent.offset.x / fontSizeScale; const scaledAccentY = scaledY - fontSize * accent.offset.y / fontSizeScale; this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY, patternTransform, resetLineWidthToOne); } } } let charWidth; if (vertical) { charWidth = width * widthAdvanceScale - spacing * fontDirection; } else { charWidth = width * widthAdvanceScale + spacing * fontDirection; } x += charWidth; if (restoreNeeded) { ctx.restore(); } } if (vertical) { current.y -= x; } else { current.x += x * textHScale; } ctx.restore(); this.compose(); return undefined; } showType3Text(glyphs) { const ctx = this.ctx; const current = this.current; const font = current.font; const fontSize = current.fontSize; const fontDirection = current.fontDirection; const spacingDir = font.vertical ? 1 : -1; const charSpacing = current.charSpacing; const wordSpacing = current.wordSpacing; const textHScale = current.textHScale * fontDirection; const fontMatrix = current.fontMatrix || _util.FONT_IDENTITY_MATRIX; const glyphsLength = glyphs.length; const isTextInvisible = current.textRenderingMode === _util.TextRenderingMode.INVISIBLE; let i, glyph, width, spacingLength; if (isTextInvisible || fontSize === 0) { return; } this._cachedGetSinglePixelWidth = null; ctx.save(); ctx.transform.apply(ctx, current.textMatrix); ctx.translate(current.x, current.y); ctx.scale(textHScale, fontDirection); for (i = 0; i < glyphsLength; ++i) { glyph = glyphs[i]; if ((0, _util.isNum)(glyph)) { spacingLength = spacingDir * glyph * fontSize / 1000; this.ctx.translate(spacingLength, 0); current.x += spacingLength * textHScale; continue; } const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; const operatorList = font.charProcOperatorList[glyph.operatorListId]; if (!operatorList) { (0, _util.warn)(`Type3 character "${glyph.operatorListId}" is not available.`); continue; } if (this.contentVisible) { this.processingType3 = glyph; this.save(); ctx.scale(fontSize, fontSize); ctx.transform.apply(ctx, fontMatrix); this.executeOperatorList(operatorList); this.restore(); } const transformed = _util.Util.applyTransform([glyph.width, 0], fontMatrix); width = transformed[0] * fontSize + spacing; ctx.translate(width, 0); current.x += width * textHScale; } ctx.restore(); this.processingType3 = null; } setCharWidth(xWidth, yWidth) {} setCharWidthAndBounds(xWidth, yWidth, llx, lly, urx, ury) { this.ctx.rect(llx, lly, urx - llx, ury - lly); this.clip(); this.endPath(); } getColorN_Pattern(IR) { let pattern; if (IR[0] === "TilingPattern") { const color = IR[1]; const baseTransform = this.baseTransform || this.ctx.mozCurrentTransform.slice(); const canvasGraphicsFactory = { createCanvasGraphics: ctx => { return new CanvasGraphics(ctx, this.commonObjs, this.objs, this.canvasFactory); } }; pattern = new _pattern_helper.TilingPattern(IR, color, this.ctx, canvasGraphicsFactory, baseTransform); } else { pattern = this._getPattern(IR[1], IR[2]); } return pattern; } setStrokeColorN() { this.current.strokeColor = this.getColorN_Pattern(arguments); } setFillColorN() { this.current.fillColor = this.getColorN_Pattern(arguments); this.current.patternFill = true; } setStrokeRGBColor(r, g, b) { const color = _util.Util.makeHexColor(r, g, b); this.ctx.strokeStyle = color; this.current.strokeColor = color; } setFillRGBColor(r, g, b) { const color = _util.Util.makeHexColor(r, g, b); this.ctx.fillStyle = color; this.current.fillColor = color; this.current.patternFill = false; } _getPattern(objId, matrix = null) { let pattern; if (this.cachedPatterns.has(objId)) { pattern = this.cachedPatterns.get(objId); } else { pattern = (0, _pattern_helper.getShadingPattern)(this.objs.get(objId)); this.cachedPatterns.set(objId, pattern); } if (matrix) { pattern.matrix = matrix; } return pattern; } shadingFill(objId) { if (!this.contentVisible) { return; } const ctx = this.ctx; this.save(); const pattern = this._getPattern(objId); ctx.fillStyle = pattern.getPattern(ctx, this, ctx.mozCurrentTransformInverse, _pattern_helper.PathType.SHADING); const inv = ctx.mozCurrentTransformInverse; if (inv) { const canvas = ctx.canvas; const width = canvas.width; const height = canvas.height; const bl = _util.Util.applyTransform([0, 0], inv); const br = _util.Util.applyTransform([0, height], inv); const ul = _util.Util.applyTransform([width, 0], inv); const ur = _util.Util.applyTransform([width, height], inv); const x0 = Math.min(bl[0], br[0], ul[0], ur[0]); const y0 = Math.min(bl[1], br[1], ul[1], ur[1]); const x1 = Math.max(bl[0], br[0], ul[0], ur[0]); const y1 = Math.max(bl[1], br[1], ul[1], ur[1]); this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0); } else { this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10); } this.compose(this.current.getClippedPathBoundingBox()); this.restore(); } beginInlineImage() { (0, _util.unreachable)("Should not call beginInlineImage"); } beginImageData() { (0, _util.unreachable)("Should not call beginImageData"); } paintFormXObjectBegin(matrix, bbox) { if (!this.contentVisible) { return; } this.save(); this.baseTransformStack.push(this.baseTransform); if (Array.isArray(matrix) && matrix.length === 6) { this.transform.apply(this, matrix); } this.baseTransform = this.ctx.mozCurrentTransform; if (bbox) { const width = bbox[2] - bbox[0]; const height = bbox[3] - bbox[1]; this.ctx.rect(bbox[0], bbox[1], width, height); this.current.updatePathMinMax(this.ctx.mozCurrentTransform, bbox[0], bbox[1]); this.current.updatePathMinMax(this.ctx.mozCurrentTransform, bbox[2], bbox[3]); this.clip(); this.endPath(); } } paintFormXObjectEnd() { if (!this.contentVisible) { return; } this.restore(); this.baseTransform = this.baseTransformStack.pop(); } beginGroup(group) { if (!this.contentVisible) { return; } this.save(); const suspendedCtx = this.suspendedCtx; if (this.current.activeSMask) { this.suspendedCtx = null; this.current.activeSMask = null; } const currentCtx = this.ctx; if (!group.isolated) { (0, _util.info)("TODO: Support non-isolated groups."); } if (group.knockout) { (0, _util.warn)("Knockout groups not supported."); } const currentTransform = currentCtx.mozCurrentTransform; if (group.matrix) { currentCtx.transform.apply(currentCtx, group.matrix); } if (!group.bbox) { throw new Error("Bounding box is required."); } let bounds = _util.Util.getAxialAlignedBoundingBox(group.bbox, currentCtx.mozCurrentTransform); const canvasBounds = [0, 0, currentCtx.canvas.width, currentCtx.canvas.height]; bounds = _util.Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0]; const offsetX = Math.floor(bounds[0]); const offsetY = Math.floor(bounds[1]); let drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1); let drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1); let scaleX = 1, scaleY = 1; if (drawnWidth > MAX_GROUP_SIZE) { scaleX = drawnWidth / MAX_GROUP_SIZE; drawnWidth = MAX_GROUP_SIZE; } if (drawnHeight > MAX_GROUP_SIZE) { scaleY = drawnHeight / MAX_GROUP_SIZE; drawnHeight = MAX_GROUP_SIZE; } this.current.startNewPathAndClipBox([0, 0, drawnWidth, drawnHeight]); let cacheId = "groupAt" + this.groupLevel; if (group.smask) { cacheId += "_smask_" + this.smaskCounter++ % 2; } const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true); const groupCtx = scratchCanvas.context; groupCtx.scale(1 / scaleX, 1 / scaleY); groupCtx.translate(-offsetX, -offsetY); groupCtx.transform.apply(groupCtx, currentTransform); if (group.smask) { this.smaskStack.push({ canvas: scratchCanvas.canvas, context: groupCtx, offsetX, offsetY, scaleX, scaleY, subtype: group.smask.subtype, backdrop: group.smask.backdrop, transferMap: group.smask.transferMap || null, startTransformInverse: null }); } else { currentCtx.setTransform(1, 0, 0, 1, 0, 0); currentCtx.translate(offsetX, offsetY); currentCtx.scale(scaleX, scaleY); currentCtx.save(); } copyCtxState(currentCtx, groupCtx); this.ctx = groupCtx; this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]); this.groupStack.push({ ctx: currentCtx, suspendedCtx }); this.groupLevel++; } endGroup(group) { if (!this.contentVisible) { return; } this.groupLevel--; const groupCtx = this.ctx; const { ctx, suspendedCtx } = this.groupStack.pop(); this.ctx = ctx; this.ctx.imageSmoothingEnabled = false; if (suspendedCtx) { this.suspendedCtx = suspendedCtx; } if (group.smask) { this.tempSMask = this.smaskStack.pop(); this.restore(); } else { this.ctx.restore(); const currentMtx = this.ctx.mozCurrentTransform; this.restore(); this.ctx.save(); this.ctx.setTransform.apply(this.ctx, currentMtx); const dirtyBox = _util.Util.getAxialAlignedBoundingBox([0, 0, groupCtx.canvas.width, groupCtx.canvas.height], currentMtx); this.ctx.drawImage(groupCtx.canvas, 0, 0); this.ctx.restore(); this.compose(dirtyBox); } } beginAnnotations() { this.save(); if (this.baseTransform) { this.ctx.setTransform.apply(this.ctx, this.baseTransform); } } endAnnotations() { this.restore(); } beginAnnotation(id, rect, transform, matrix, hasOwnCanvas) { this.save(); if (Array.isArray(rect) && rect.length === 4) { const width = rect[2] - rect[0]; const height = rect[3] - rect[1]; if (hasOwnCanvas && this.annotationCanvasMap) { transform = transform.slice(); transform[4] -= rect[0]; transform[5] -= rect[1]; rect = rect.slice(); rect[0] = rect[1] = 0; rect[2] = width; rect[3] = height; const [scaleX, scaleY] = _util.Util.singularValueDecompose2dScale(this.ctx.mozCurrentTransform); const { viewportScale } = this; const canvasWidth = Math.ceil(width * this.outputScaleX * viewportScale); const canvasHeight = Math.ceil(height * this.outputScaleY * viewportScale); this.annotationCanvas = this.canvasFactory.create(canvasWidth, canvasHeight); const { canvas, context } = this.annotationCanvas; canvas.style.width = `calc(${width}px * var(--viewport-scale-factor))`; canvas.style.height = `calc(${height}px * var(--viewport-scale-factor))`; this.annotationCanvasMap.set(id, canvas); this.annotationCanvas.savedCtx = this.ctx; this.ctx = context; this.ctx.setTransform(scaleX, 0, 0, -scaleY, 0, height * scaleY); addContextCurrentTransform(this.ctx); resetCtxToDefault(this.ctx); } else { resetCtxToDefault(this.ctx); this.ctx.rect(rect[0], rect[1], width, height); this.clip(); this.endPath(); } } this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height); this.transform.apply(this, transform); this.transform.apply(this, matrix); } endAnnotation() { if (this.annotationCanvas) { this.ctx = this.annotationCanvas.savedCtx; delete this.annotationCanvas.savedCtx; delete this.annotationCanvas; } this.restore(); } paintImageMaskXObject(img) { if (!this.contentVisible) { return; } const ctx = this.ctx; const width = img.width, height = img.height; const glyph = this.processingType3; if (glyph && glyph.compiled === undefined) { if (width <= MAX_SIZE_TO_COMPILE && height <= MAX_SIZE_TO_COMPILE) { glyph.compiled = compileType3Glyph({ data: img.data, width, height }); } else { glyph.compiled = null; } } if (glyph?.compiled) { glyph.compiled(ctx); return; } const mask = this._createMaskCanvas(img); const maskCanvas = mask.canvas; ctx.save(); ctx.setTransform(1, 0, 0, 1, 0, 0); ctx.drawImage(maskCanvas, mask.offsetX, mask.offsetY); ctx.restore(); this.compose(); } paintImageMaskXObjectRepeat(imgData, scaleX, skewX = 0, skewY = 0, scaleY, positions) { if (!this.contentVisible) { return; } const ctx = this.ctx; ctx.save(); const currentTransform = ctx.mozCurrentTransform; ctx.transform(scaleX, skewX, skewY, scaleY, 0, 0); const mask = this._createMaskCanvas(imgData); ctx.setTransform(1, 0, 0, 1, 0, 0); for (let i = 0, ii = positions.length; i < ii; i += 2) { const trans = _util.Util.transform(currentTransform, [scaleX, skewX, skewY, scaleY, positions[i], positions[i + 1]]); const [x, y] = _util.Util.applyTransform([0, 0], trans); ctx.drawImage(mask.canvas, x, y); } ctx.restore(); this.compose(); } paintImageMaskXObjectGroup(images) { if (!this.contentVisible) { return; } const ctx = this.ctx; const fillColor = this.current.fillColor; const isPatternFill = this.current.patternFill; for (let i = 0, ii = images.length; i < ii; i++) { const image = images[i]; const width = image.width, height = image.height; const maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height); const maskCtx = maskCanvas.context; maskCtx.save(); putBinaryImageMask(maskCtx, image); maskCtx.globalCompositeOperation = "source-in"; maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this, ctx.mozCurrentTransformInverse, _pattern_helper.PathType.FILL) : fillColor; maskCtx.fillRect(0, 0, width, height); maskCtx.restore(); ctx.save(); ctx.transform.apply(ctx, image.transform); ctx.scale(1, -1); ctx.drawImage(maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1); ctx.restore(); } this.compose(); } paintImageXObject(objId) { if (!this.contentVisible) { return; } const imgData = objId.startsWith("g_") ? this.commonObjs.get(objId) : this.objs.get(objId); if (!imgData) { (0, _util.warn)("Dependent image isn't ready yet"); return; } this.paintInlineImageXObject(imgData); } paintImageXObjectRepeat(objId, scaleX, scaleY, positions) { if (!this.contentVisible) { return; } const imgData = objId.startsWith("g_") ? this.commonObjs.get(objId) : this.objs.get(objId); if (!imgData) { (0, _util.warn)("Dependent image isn't ready yet"); return; } const width = imgData.width; const height = imgData.height; const map = []; for (let i = 0, ii = positions.length; i < ii; i += 2) { map.push({ transform: [scaleX, 0, 0, scaleY, positions[i], positions[i + 1]], x: 0, y: 0, w: width, h: height }); } this.paintInlineImageXObjectGroup(imgData, map); } paintInlineImageXObject(imgData) { if (!this.contentVisible) { return; } const width = imgData.width; const height = imgData.height; const ctx = this.ctx; this.save(); ctx.scale(1 / width, -1 / height); let imgToPaint; if (typeof HTMLElement === "function" && imgData instanceof HTMLElement || !imgData.data) { imgToPaint = imgData; } else { const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height); const tmpCtx = tmpCanvas.context; putBinaryImageData(tmpCtx, imgData, this.current.transferMaps); imgToPaint = tmpCanvas.canvas; } const scaled = this._scaleImage(imgToPaint, ctx.mozCurrentTransformInverse); ctx.imageSmoothingEnabled = getImageSmoothingEnabled(ctx.mozCurrentTransform, imgData.interpolate); ctx.drawImage(scaled.img, 0, 0, scaled.paintWidth, scaled.paintHeight, 0, -height, width, height); if (this.imageLayer) { const position = this.getCanvasPosition(0, -height); this.imageLayer.appendImage({ imgData, left: position[0], top: position[1], width: width / ctx.mozCurrentTransformInverse[0], height: height / ctx.mozCurrentTransformInverse[3] }); } this.compose(); this.restore(); } paintInlineImageXObjectGroup(imgData, map) { if (!this.contentVisible) { return; } const ctx = this.ctx; const w = imgData.width; const h = imgData.height; const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", w, h); const tmpCtx = tmpCanvas.context; putBinaryImageData(tmpCtx, imgData, this.current.transferMaps); for (let i = 0, ii = map.length; i < ii; i++) { const entry = map[i]; ctx.save(); ctx.transform.apply(ctx, entry.transform); ctx.scale(1, -1); ctx.drawImage(tmpCanvas.canvas, entry.x, entry.y, entry.w, entry.h, 0, -1, 1, 1); if (this.imageLayer) { const position = this.getCanvasPosition(entry.x, entry.y); this.imageLayer.appendImage({ imgData, left: position[0], top: position[1], width: w, height: h }); } ctx.restore(); } this.compose(); } paintSolidColorImageMask() { if (!this.contentVisible) { return; } this.ctx.fillRect(0, 0, 1, 1); this.compose(); } markPoint(tag) {} markPointProps(tag, properties) {} beginMarkedContent(tag) { this.markedContentStack.push({ visible: true }); } beginMarkedContentProps(tag, properties) { if (tag === "OC") { this.markedContentStack.push({ visible: this.optionalContentConfig.isVisible(properties) }); } else { this.markedContentStack.push({ visible: true }); } this.contentVisible = this.isContentVisible(); } endMarkedContent() { this.markedContentStack.pop(); this.contentVisible = this.isContentVisible(); } beginCompat() {} endCompat() {} consumePath(clipBox) { if (this.pendingClip) { this.current.updateClipFromPath(); } if (!this.pendingClip) { this.compose(clipBox); } const ctx = this.ctx; if (this.pendingClip) { if (this.pendingClip === EO_CLIP) { ctx.clip("evenodd"); } else { ctx.clip(); } this.pendingClip = null; } this.current.startNewPathAndClipBox(this.current.clipBox); ctx.beginPath(); } getSinglePixelWidth() { if (this._cachedGetSinglePixelWidth === null) { const m = this.ctx.mozCurrentTransform; const absDet = Math.abs(m[0] * m[3] - m[2] * m[1]); const sqNorm1 = m[0] ** 2 + m[2] ** 2; const sqNorm2 = m[1] ** 2 + m[3] ** 2; const pixelHeight = Math.sqrt(Math.max(sqNorm1, sqNorm2)) / absDet; if (sqNorm1 !== sqNorm2 && this._combinedScaleFactor * pixelHeight > 1) { this._cachedGetSinglePixelWidth = -(this._combinedScaleFactor * pixelHeight); } else if (absDet > Number.EPSILON) { this._cachedGetSinglePixelWidth = pixelHeight; } else { this._cachedGetSinglePixelWidth = 1; } } return this._cachedGetSinglePixelWidth; } getCanvasPosition(x, y) { const transform = this.ctx.mozCurrentTransform; return [transform[0] * x + transform[2] * y + transform[4], transform[1] * x + transform[3] * y + transform[5]]; } isContentVisible() { for (let i = this.markedContentStack.length - 1; i >= 0; i--) { if (!this.markedContentStack[i].visible) { return false; } } return true; } } exports.CanvasGraphics = CanvasGraphics; for (const op in _util.OPS) { if (CanvasGraphics.prototype[op] !== undefined) { CanvasGraphics.prototype[_util.OPS[op]] = CanvasGraphics.prototype[op]; } } /***/ }), /* 11 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.TilingPattern = exports.PathType = void 0; exports.getShadingPattern = getShadingPattern; var _util = __w_pdfjs_require__(2); const PathType = { FILL: "Fill", STROKE: "Stroke", SHADING: "Shading" }; exports.PathType = PathType; function applyBoundingBox(ctx, bbox) { if (!bbox || typeof Path2D === "undefined") { return; } const width = bbox[2] - bbox[0]; const height = bbox[3] - bbox[1]; const region = new Path2D(); region.rect(bbox[0], bbox[1], width, height); ctx.clip(region); } class BaseShadingPattern { constructor() { if (this.constructor === BaseShadingPattern) { (0, _util.unreachable)("Cannot initialize BaseShadingPattern."); } } getPattern() { (0, _util.unreachable)("Abstract method `getPattern` called."); } } class RadialAxialShadingPattern extends BaseShadingPattern { constructor(IR) { super(); this._type = IR[1]; this._bbox = IR[2]; this._colorStops = IR[3]; this._p0 = IR[4]; this._p1 = IR[5]; this._r0 = IR[6]; this._r1 = IR[7]; this.matrix = null; } _createGradient(ctx) { let grad; if (this._type === "axial") { grad = ctx.createLinearGradient(this._p0[0], this._p0[1], this._p1[0], this._p1[1]); } else if (this._type === "radial") { grad = ctx.createRadialGradient(this._p0[0], this._p0[1], this._r0, this._p1[0], this._p1[1], this._r1); } for (const colorStop of this._colorStops) { grad.addColorStop(colorStop[0], colorStop[1]); } return grad; } getPattern(ctx, owner, inverse, pathType) { let pattern; if (pathType === PathType.STROKE || pathType === PathType.FILL) { const ownerBBox = owner.current.getClippedPathBoundingBox(pathType, ctx.mozCurrentTransform) || [0, 0, 0, 0]; const width = Math.ceil(ownerBBox[2] - ownerBBox[0]) || 1; const height = Math.ceil(ownerBBox[3] - ownerBBox[1]) || 1; const tmpCanvas = owner.cachedCanvases.getCanvas("pattern", width, height, true); const tmpCtx = tmpCanvas.context; tmpCtx.clearRect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height); tmpCtx.beginPath(); tmpCtx.rect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height); tmpCtx.translate(-ownerBBox[0], -ownerBBox[1]); inverse = _util.Util.transform(inverse, [1, 0, 0, 1, ownerBBox[0], ownerBBox[1]]); tmpCtx.transform.apply(tmpCtx, owner.baseTransform); if (this.matrix) { tmpCtx.transform.apply(tmpCtx, this.matrix); } applyBoundingBox(tmpCtx, this._bbox); tmpCtx.fillStyle = this._createGradient(tmpCtx); tmpCtx.fill(); pattern = ctx.createPattern(tmpCanvas.canvas, "no-repeat"); const domMatrix = new DOMMatrix(inverse); try { pattern.setTransform(domMatrix); } catch (ex) { (0, _util.warn)(`RadialAxialShadingPattern.getPattern: "${ex?.message}".`); } } else { applyBoundingBox(ctx, this._bbox); pattern = this._createGradient(ctx); } return pattern; } } function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) { const coords = context.coords, colors = context.colors; const bytes = data.data, rowSize = data.width * 4; let tmp; if (coords[p1 + 1] > coords[p2 + 1]) { tmp = p1; p1 = p2; p2 = tmp; tmp = c1; c1 = c2; c2 = tmp; } if (coords[p2 + 1] > coords[p3 + 1]) { tmp = p2; p2 = p3; p3 = tmp; tmp = c2; c2 = c3; c3 = tmp; } if (coords[p1 + 1] > coords[p2 + 1]) { tmp = p1; p1 = p2; p2 = tmp; tmp = c1; c1 = c2; c2 = tmp; } const x1 = (coords[p1] + context.offsetX) * context.scaleX; const y1 = (coords[p1 + 1] + context.offsetY) * context.scaleY; const x2 = (coords[p2] + context.offsetX) * context.scaleX; const y2 = (coords[p2 + 1] + context.offsetY) * context.scaleY; const x3 = (coords[p3] + context.offsetX) * context.scaleX; const y3 = (coords[p3 + 1] + context.offsetY) * context.scaleY; if (y1 >= y3) { return; } const c1r = colors[c1], c1g = colors[c1 + 1], c1b = colors[c1 + 2]; const c2r = colors[c2], c2g = colors[c2 + 1], c2b = colors[c2 + 2]; const c3r = colors[c3], c3g = colors[c3 + 1], c3b = colors[c3 + 2]; const minY = Math.round(y1), maxY = Math.round(y3); let xa, car, cag, cab; let xb, cbr, cbg, cbb; for (let y = minY; y <= maxY; y++) { if (y < y2) { let k; if (y < y1) { k = 0; } else { k = (y1 - y) / (y1 - y2); } xa = x1 - (x1 - x2) * k; car = c1r - (c1r - c2r) * k; cag = c1g - (c1g - c2g) * k; cab = c1b - (c1b - c2b) * k; } else { let k; if (y > y3) { k = 1; } else if (y2 === y3) { k = 0; } else { k = (y2 - y) / (y2 - y3); } xa = x2 - (x2 - x3) * k; car = c2r - (c2r - c3r) * k; cag = c2g - (c2g - c3g) * k; cab = c2b - (c2b - c3b) * k; } let k; if (y < y1) { k = 0; } else if (y > y3) { k = 1; } else { k = (y1 - y) / (y1 - y3); } xb = x1 - (x1 - x3) * k; cbr = c1r - (c1r - c3r) * k; cbg = c1g - (c1g - c3g) * k; cbb = c1b - (c1b - c3b) * k; const x1_ = Math.round(Math.min(xa, xb)); const x2_ = Math.round(Math.max(xa, xb)); let j = rowSize * y + x1_ * 4; for (let x = x1_; x <= x2_; x++) { k = (xa - x) / (xa - xb); if (k < 0) { k = 0; } else if (k > 1) { k = 1; } bytes[j++] = car - (car - cbr) * k | 0; bytes[j++] = cag - (cag - cbg) * k | 0; bytes[j++] = cab - (cab - cbb) * k | 0; bytes[j++] = 255; } } } function drawFigure(data, figure, context) { const ps = figure.coords; const cs = figure.colors; let i, ii; switch (figure.type) { case "lattice": const verticesPerRow = figure.verticesPerRow; const rows = Math.floor(ps.length / verticesPerRow) - 1; const cols = verticesPerRow - 1; for (i = 0; i < rows; i++) { let q = i * verticesPerRow; for (let j = 0; j < cols; j++, q++) { drawTriangle(data, context, ps[q], ps[q + 1], ps[q + verticesPerRow], cs[q], cs[q + 1], cs[q + verticesPerRow]); drawTriangle(data, context, ps[q + verticesPerRow + 1], ps[q + 1], ps[q + verticesPerRow], cs[q + verticesPerRow + 1], cs[q + 1], cs[q + verticesPerRow]); } } break; case "triangles": for (i = 0, ii = ps.length; i < ii; i += 3) { drawTriangle(data, context, ps[i], ps[i + 1], ps[i + 2], cs[i], cs[i + 1], cs[i + 2]); } break; default: throw new Error("illegal figure"); } } class MeshShadingPattern extends BaseShadingPattern { constructor(IR) { super(); this._coords = IR[2]; this._colors = IR[3]; this._figures = IR[4]; this._bounds = IR[5]; this._bbox = IR[7]; this._background = IR[8]; this.matrix = null; } _createMeshCanvas(combinedScale, backgroundColor, cachedCanvases) { const EXPECTED_SCALE = 1.1; const MAX_PATTERN_SIZE = 3000; const BORDER_SIZE = 2; const offsetX = Math.floor(this._bounds[0]); const offsetY = Math.floor(this._bounds[1]); const boundsWidth = Math.ceil(this._bounds[2]) - offsetX; const boundsHeight = Math.ceil(this._bounds[3]) - offsetY; const width = Math.min(Math.ceil(Math.abs(boundsWidth * combinedScale[0] * EXPECTED_SCALE)), MAX_PATTERN_SIZE); const height = Math.min(Math.ceil(Math.abs(boundsHeight * combinedScale[1] * EXPECTED_SCALE)), MAX_PATTERN_SIZE); const scaleX = boundsWidth / width; const scaleY = boundsHeight / height; const context = { coords: this._coords, colors: this._colors, offsetX: -offsetX, offsetY: -offsetY, scaleX: 1 / scaleX, scaleY: 1 / scaleY }; const paddedWidth = width + BORDER_SIZE * 2; const paddedHeight = height + BORDER_SIZE * 2; const tmpCanvas = cachedCanvases.getCanvas("mesh", paddedWidth, paddedHeight, false); const tmpCtx = tmpCanvas.context; const data = tmpCtx.createImageData(width, height); if (backgroundColor) { const bytes = data.data; for (let i = 0, ii = bytes.length; i < ii; i += 4) { bytes[i] = backgroundColor[0]; bytes[i + 1] = backgroundColor[1]; bytes[i + 2] = backgroundColor[2]; bytes[i + 3] = 255; } } for (const figure of this._figures) { drawFigure(data, figure, context); } tmpCtx.putImageData(data, BORDER_SIZE, BORDER_SIZE); const canvas = tmpCanvas.canvas; return { canvas, offsetX: offsetX - BORDER_SIZE * scaleX, offsetY: offsetY - BORDER_SIZE * scaleY, scaleX, scaleY }; } getPattern(ctx, owner, inverse, pathType) { applyBoundingBox(ctx, this._bbox); let scale; if (pathType === PathType.SHADING) { scale = _util.Util.singularValueDecompose2dScale(ctx.mozCurrentTransform); } else { scale = _util.Util.singularValueDecompose2dScale(owner.baseTransform); if (this.matrix) { const matrixScale = _util.Util.singularValueDecompose2dScale(this.matrix); scale = [scale[0] * matrixScale[0], scale[1] * matrixScale[1]]; } } const temporaryPatternCanvas = this._createMeshCanvas(scale, pathType === PathType.SHADING ? null : this._background, owner.cachedCanvases); if (pathType !== PathType.SHADING) { ctx.setTransform.apply(ctx, owner.baseTransform); if (this.matrix) { ctx.transform.apply(ctx, this.matrix); } } ctx.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY); ctx.scale(temporaryPatternCanvas.scaleX, temporaryPatternCanvas.scaleY); return ctx.createPattern(temporaryPatternCanvas.canvas, "no-repeat"); } } class DummyShadingPattern extends BaseShadingPattern { getPattern() { return "hotpink"; } } function getShadingPattern(IR) { switch (IR[0]) { case "RadialAxial": return new RadialAxialShadingPattern(IR); case "Mesh": return new MeshShadingPattern(IR); case "Dummy": return new DummyShadingPattern(); } throw new Error(`Unknown IR type: ${IR[0]}`); } const PaintType = { COLORED: 1, UNCOLORED: 2 }; class TilingPattern { static get MAX_PATTERN_SIZE() { return (0, _util.shadow)(this, "MAX_PATTERN_SIZE", 3000); } constructor(IR, color, ctx, canvasGraphicsFactory, baseTransform) { this.operatorList = IR[2]; this.matrix = IR[3] || [1, 0, 0, 1, 0, 0]; this.bbox = IR[4]; this.xstep = IR[5]; this.ystep = IR[6]; this.paintType = IR[7]; this.tilingType = IR[8]; this.color = color; this.ctx = ctx; this.canvasGraphicsFactory = canvasGraphicsFactory; this.baseTransform = baseTransform; } createPatternCanvas(owner) { const operatorList = this.operatorList; const bbox = this.bbox; const xstep = this.xstep; const ystep = this.ystep; const paintType = this.paintType; const tilingType = this.tilingType; const color = this.color; const canvasGraphicsFactory = this.canvasGraphicsFactory; (0, _util.info)("TilingType: " + tilingType); const x0 = bbox[0], y0 = bbox[1], x1 = bbox[2], y1 = bbox[3]; const matrixScale = _util.Util.singularValueDecompose2dScale(this.matrix); const curMatrixScale = _util.Util.singularValueDecompose2dScale(this.baseTransform); const combinedScale = [matrixScale[0] * curMatrixScale[0], matrixScale[1] * curMatrixScale[1]]; const dimx = this.getSizeAndScale(xstep, this.ctx.canvas.width, combinedScale[0]); const dimy = this.getSizeAndScale(ystep, this.ctx.canvas.height, combinedScale[1]); const tmpCanvas = owner.cachedCanvases.getCanvas("pattern", dimx.size, dimy.size, true); const tmpCtx = tmpCanvas.context; const graphics = canvasGraphicsFactory.createCanvasGraphics(tmpCtx); graphics.groupLevel = owner.groupLevel; this.setFillAndStrokeStyleToContext(graphics, paintType, color); let adjustedX0 = x0; let adjustedY0 = y0; let adjustedX1 = x1; let adjustedY1 = y1; if (x0 < 0) { adjustedX0 = 0; adjustedX1 += Math.abs(x0); } if (y0 < 0) { adjustedY0 = 0; adjustedY1 += Math.abs(y0); } tmpCtx.translate(-(dimx.scale * adjustedX0), -(dimy.scale * adjustedY0)); graphics.transform(dimx.scale, 0, 0, dimy.scale, 0, 0); this.clipBbox(graphics, adjustedX0, adjustedY0, adjustedX1, adjustedY1); graphics.baseTransform = graphics.ctx.mozCurrentTransform.slice(); graphics.executeOperatorList(operatorList); graphics.endDrawing(); return { canvas: tmpCanvas.canvas, scaleX: dimx.scale, scaleY: dimy.scale, offsetX: adjustedX0, offsetY: adjustedY0 }; } getSizeAndScale(step, realOutputSize, scale) { step = Math.abs(step); const maxSize = Math.max(TilingPattern.MAX_PATTERN_SIZE, realOutputSize); let size = Math.ceil(step * scale); if (size >= maxSize) { size = maxSize; } else { scale = size / step; } return { scale, size }; } clipBbox(graphics, x0, y0, x1, y1) { const bboxWidth = x1 - x0; const bboxHeight = y1 - y0; graphics.ctx.rect(x0, y0, bboxWidth, bboxHeight); graphics.clip(); graphics.endPath(); } setFillAndStrokeStyleToContext(graphics, paintType, color) { const context = graphics.ctx, current = graphics.current; switch (paintType) { case PaintType.COLORED: const ctx = this.ctx; context.fillStyle = ctx.fillStyle; context.strokeStyle = ctx.strokeStyle; current.fillColor = ctx.fillStyle; current.strokeColor = ctx.strokeStyle; break; case PaintType.UNCOLORED: const cssColor = _util.Util.makeHexColor(color[0], color[1], color[2]); context.fillStyle = cssColor; context.strokeStyle = cssColor; current.fillColor = cssColor; current.strokeColor = cssColor; break; default: throw new _util.FormatError(`Unsupported paint type: ${paintType}`); } } getPattern(ctx, owner, inverse, pathType) { let matrix = inverse; if (pathType !== PathType.SHADING) { matrix = _util.Util.transform(matrix, owner.baseTransform); if (this.matrix) { matrix = _util.Util.transform(matrix, this.matrix); } } const temporaryPatternCanvas = this.createPatternCanvas(owner); let domMatrix = new DOMMatrix(matrix); domMatrix = domMatrix.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY); domMatrix = domMatrix.scale(1 / temporaryPatternCanvas.scaleX, 1 / temporaryPatternCanvas.scaleY); const pattern = ctx.createPattern(temporaryPatternCanvas.canvas, "repeat"); try { pattern.setTransform(domMatrix); } catch (ex) { (0, _util.warn)(`TilingPattern.getPattern: "${ex?.message}".`); } return pattern; } } exports.TilingPattern = TilingPattern; /***/ }), /* 12 */ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.GlobalWorkerOptions = void 0; const GlobalWorkerOptions = Object.create(null); exports.GlobalWorkerOptions = GlobalWorkerOptions; GlobalWorkerOptions.workerPort = GlobalWorkerOptions.workerPort === undefined ? null : GlobalWorkerOptions.workerPort; GlobalWorkerOptions.workerSrc = GlobalWorkerOptions.workerSrc === undefined ? "" : GlobalWorkerOptions.workerSrc; /***/ }), /* 13 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.MessageHandler = void 0; var _util = __w_pdfjs_require__(2); const CallbackKind = { UNKNOWN: 0, DATA: 1, ERROR: 2 }; const StreamKind = { UNKNOWN: 0, CANCEL: 1, CANCEL_COMPLETE: 2, CLOSE: 3, ENQUEUE: 4, ERROR: 5, PULL: 6, PULL_COMPLETE: 7, START_COMPLETE: 8 }; function wrapReason(reason) { if (!(reason instanceof Error || typeof reason === "object" && reason !== null)) { (0, _util.warn)('wrapReason: Expected "reason" to be a (possibly cloned) Error.'); return reason; } switch (reason.name) { case "AbortException": return new _util.AbortException(reason.message); case "MissingPDFException": return new _util.MissingPDFException(reason.message); case "PasswordException": return new _util.PasswordException(reason.message, reason.code); case "UnexpectedResponseException": return new _util.UnexpectedResponseException(reason.message, reason.status); case "UnknownErrorException": return new _util.UnknownErrorException(reason.message, reason.details); default: return new _util.UnknownErrorException(reason.message, reason.toString()); } } class MessageHandler { constructor(sourceName, targetName, comObj) { this.sourceName = sourceName; this.targetName = targetName; this.comObj = comObj; this.callbackId = 1; this.streamId = 1; this.streamSinks = Object.create(null); this.streamControllers = Object.create(null); this.callbackCapabilities = Object.create(null); this.actionHandler = Object.create(null); this._onComObjOnMessage = event => { const data = event.data; if (data.targetName !== this.sourceName) { return; } if (data.stream) { this._processStreamMessage(data); return; } if (data.callback) { const callbackId = data.callbackId; const capability = this.callbackCapabilities[callbackId]; if (!capability) { throw new Error(`Cannot resolve callback ${callbackId}`); } delete this.callbackCapabilities[callbackId]; if (data.callback === CallbackKind.DATA) { capability.resolve(data.data); } else if (data.callback === CallbackKind.ERROR) { capability.reject(wrapReason(data.reason)); } else { throw new Error("Unexpected callback case"); } return; } const action = this.actionHandler[data.action]; if (!action) { throw new Error(`Unknown action from worker: ${data.action}`); } if (data.callbackId) { const cbSourceName = this.sourceName; const cbTargetName = data.sourceName; new Promise(function (resolve) { resolve(action(data.data)); }).then(function (result) { comObj.postMessage({ sourceName: cbSourceName, targetName: cbTargetName, callback: CallbackKind.DATA, callbackId: data.callbackId, data: result }); }, function (reason) { comObj.postMessage({ sourceName: cbSourceName, targetName: cbTargetName, callback: CallbackKind.ERROR, callbackId: data.callbackId, reason: wrapReason(reason) }); }); return; } if (data.streamId) { this._createStreamSink(data); return; } action(data.data); }; comObj.addEventListener("message", this._onComObjOnMessage); } on(actionName, handler) { const ah = this.actionHandler; if (ah[actionName]) { throw new Error(`There is already an actionName called "${actionName}"`); } ah[actionName] = handler; } send(actionName, data, transfers) { this.comObj.postMessage({ sourceName: this.sourceName, targetName: this.targetName, action: actionName, data }, transfers); } sendWithPromise(actionName, data, transfers) { const callbackId = this.callbackId++; const capability = (0, _util.createPromiseCapability)(); this.callbackCapabilities[callbackId] = capability; try { this.comObj.postMessage({ sourceName: this.sourceName, targetName: this.targetName, action: actionName, callbackId, data }, transfers); } catch (ex) { capability.reject(ex); } return capability.promise; } sendWithStream(actionName, data, queueingStrategy, transfers) { const streamId = this.streamId++, sourceName = this.sourceName, targetName = this.targetName, comObj = this.comObj; return new ReadableStream({ start: controller => { const startCapability = (0, _util.createPromiseCapability)(); this.streamControllers[streamId] = { controller, startCall: startCapability, pullCall: null, cancelCall: null, isClosed: false }; comObj.postMessage({ sourceName, targetName, action: actionName, streamId, data, desiredSize: controller.desiredSize }, transfers); return startCapability.promise; }, pull: controller => { const pullCapability = (0, _util.createPromiseCapability)(); this.streamControllers[streamId].pullCall = pullCapability; comObj.postMessage({ sourceName, targetName, stream: StreamKind.PULL, streamId, desiredSize: controller.desiredSize }); return pullCapability.promise; }, cancel: reason => { (0, _util.assert)(reason instanceof Error, "cancel must have a valid reason"); const cancelCapability = (0, _util.createPromiseCapability)(); this.streamControllers[streamId].cancelCall = cancelCapability; this.streamControllers[streamId].isClosed = true; comObj.postMessage({ sourceName, targetName, stream: StreamKind.CANCEL, streamId, reason: wrapReason(reason) }); return cancelCapability.promise; } }, queueingStrategy); } _createStreamSink(data) { const streamId = data.streamId, sourceName = this.sourceName, targetName = data.sourceName, comObj = this.comObj; const self = this, action = this.actionHandler[data.action]; const streamSink = { enqueue(chunk, size = 1, transfers) { if (this.isCancelled) { return; } const lastDesiredSize = this.desiredSize; this.desiredSize -= size; if (lastDesiredSize > 0 && this.desiredSize <= 0) { this.sinkCapability = (0, _util.createPromiseCapability)(); this.ready = this.sinkCapability.promise; } comObj.postMessage({ sourceName, targetName, stream: StreamKind.ENQUEUE, streamId, chunk }, transfers); }, close() { if (this.isCancelled) { return; } this.isCancelled = true; comObj.postMessage({ sourceName, targetName, stream: StreamKind.CLOSE, streamId }); delete self.streamSinks[streamId]; }, error(reason) { (0, _util.assert)(reason instanceof Error, "error must have a valid reason"); if (this.isCancelled) { return; } this.isCancelled = true; comObj.postMessage({ sourceName, targetName, stream: StreamKind.ERROR, streamId, reason: wrapReason(reason) }); }, sinkCapability: (0, _util.createPromiseCapability)(), onPull: null, onCancel: null, isCancelled: false, desiredSize: data.desiredSize, ready: null }; streamSink.sinkCapability.resolve(); streamSink.ready = streamSink.sinkCapability.promise; this.streamSinks[streamId] = streamSink; new Promise(function (resolve) { resolve(action(data.data, streamSink)); }).then(function () { comObj.postMessage({ sourceName, targetName, stream: StreamKind.START_COMPLETE, streamId, success: true }); }, function (reason) { comObj.postMessage({ sourceName, targetName, stream: StreamKind.START_COMPLETE, streamId, reason: wrapReason(reason) }); }); } _processStreamMessage(data) { const streamId = data.streamId, sourceName = this.sourceName, targetName = data.sourceName, comObj = this.comObj; const streamController = this.streamControllers[streamId], streamSink = this.streamSinks[streamId]; switch (data.stream) { case StreamKind.START_COMPLETE: if (data.success) { streamController.startCall.resolve(); } else { streamController.startCall.reject(wrapReason(data.reason)); } break; case StreamKind.PULL_COMPLETE: if (data.success) { streamController.pullCall.resolve(); } else { streamController.pullCall.reject(wrapReason(data.reason)); } break; case StreamKind.PULL: if (!streamSink) { comObj.postMessage({ sourceName, targetName, stream: StreamKind.PULL_COMPLETE, streamId, success: true }); break; } if (streamSink.desiredSize <= 0 && data.desiredSize > 0) { streamSink.sinkCapability.resolve(); } streamSink.desiredSize = data.desiredSize; new Promise(function (resolve) { resolve(streamSink.onPull && streamSink.onPull()); }).then(function () { comObj.postMessage({ sourceName, targetName, stream: StreamKind.PULL_COMPLETE, streamId, success: true }); }, function (reason) { comObj.postMessage({ sourceName, targetName, stream: StreamKind.PULL_COMPLETE, streamId, reason: wrapReason(reason) }); }); break; case StreamKind.ENQUEUE: (0, _util.assert)(streamController, "enqueue should have stream controller"); if (streamController.isClosed) { break; } streamController.controller.enqueue(data.chunk); break; case StreamKind.CLOSE: (0, _util.assert)(streamController, "close should have stream controller"); if (streamController.isClosed) { break; } streamController.isClosed = true; streamController.controller.close(); this._deleteStreamController(streamController, streamId); break; case StreamKind.ERROR: (0, _util.assert)(streamController, "error should have stream controller"); streamController.controller.error(wrapReason(data.reason)); this._deleteStreamController(streamController, streamId); break; case StreamKind.CANCEL_COMPLETE: if (data.success) { streamController.cancelCall.resolve(); } else { streamController.cancelCall.reject(wrapReason(data.reason)); } this._deleteStreamController(streamController, streamId); break; case StreamKind.CANCEL: if (!streamSink) { break; } new Promise(function (resolve) { resolve(streamSink.onCancel && streamSink.onCancel(wrapReason(data.reason))); }).then(function () { comObj.postMessage({ sourceName, targetName, stream: StreamKind.CANCEL_COMPLETE, streamId, success: true }); }, function (reason) { comObj.postMessage({ sourceName, targetName, stream: StreamKind.CANCEL_COMPLETE, streamId, reason: wrapReason(reason) }); }); streamSink.sinkCapability.reject(wrapReason(data.reason)); streamSink.isCancelled = true; delete this.streamSinks[streamId]; break; default: throw new Error("Unexpected stream case"); } } async _deleteStreamController(streamController, streamId) { await Promise.allSettled([streamController.startCall && streamController.startCall.promise, streamController.pullCall && streamController.pullCall.promise, streamController.cancelCall && streamController.cancelCall.promise]); delete this.streamControllers[streamId]; } destroy() { this.comObj.removeEventListener("message", this._onComObjOnMessage); } } exports.MessageHandler = MessageHandler; /***/ }), /* 14 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.Metadata = void 0; var _util = __w_pdfjs_require__(2); class Metadata { #metadataMap; #data; constructor({ parsedData, rawData }) { this.#metadataMap = parsedData; this.#data = rawData; } getRaw() { return this.#data; } get(name) { return this.#metadataMap.get(name) ?? null; } getAll() { return (0, _util.objectFromMap)(this.#metadataMap); } has(name) { return this.#metadataMap.has(name); } } exports.Metadata = Metadata; /***/ }), /* 15 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.OptionalContentConfig = void 0; var _util = __w_pdfjs_require__(2); class OptionalContentGroup { constructor(name, intent) { this.visible = true; this.name = name; this.intent = intent; } } class OptionalContentConfig { constructor(data) { this.name = null; this.creator = null; this._order = null; this._groups = new Map(); if (data === null) { return; } this.name = data.name; this.creator = data.creator; this._order = data.order; for (const group of data.groups) { this._groups.set(group.id, new OptionalContentGroup(group.name, group.intent)); } if (data.baseState === "OFF") { for (const group of this._groups) { group.visible = false; } } for (const on of data.on) { this._groups.get(on).visible = true; } for (const off of data.off) { this._groups.get(off).visible = false; } } _evaluateVisibilityExpression(array) { const length = array.length; if (length < 2) { return true; } const operator = array[0]; for (let i = 1; i < length; i++) { const element = array[i]; let state; if (Array.isArray(element)) { state = this._evaluateVisibilityExpression(element); } else if (this._groups.has(element)) { state = this._groups.get(element).visible; } else { (0, _util.warn)(`Optional content group not found: ${element}`); return true; } switch (operator) { case "And": if (!state) { return false; } break; case "Or": if (state) { return true; } break; case "Not": return !state; default: return true; } } return operator === "And"; } isVisible(group) { if (this._groups.size === 0) { return true; } if (!group) { (0, _util.warn)("Optional content group not defined."); return true; } if (group.type === "OCG") { if (!this._groups.has(group.id)) { (0, _util.warn)(`Optional content group not found: ${group.id}`); return true; } return this._groups.get(group.id).visible; } else if (group.type === "OCMD") { if (group.expression) { return this._evaluateVisibilityExpression(group.expression); } if (!group.policy || group.policy === "AnyOn") { for (const id of group.ids) { if (!this._groups.has(id)) { (0, _util.warn)(`Optional content group not found: ${id}`); return true; } if (this._groups.get(id).visible) { return true; } } return false; } else if (group.policy === "AllOn") { for (const id of group.ids) { if (!this._groups.has(id)) { (0, _util.warn)(`Optional content group not found: ${id}`); return true; } if (!this._groups.get(id).visible) { return false; } } return true; } else if (group.policy === "AnyOff") { for (const id of group.ids) { if (!this._groups.has(id)) { (0, _util.warn)(`Optional content group not found: ${id}`); return true; } if (!this._groups.get(id).visible) { return true; } } return false; } else if (group.policy === "AllOff") { for (const id of group.ids) { if (!this._groups.has(id)) { (0, _util.warn)(`Optional content group not found: ${id}`); return true; } if (this._groups.get(id).visible) { return false; } } return true; } (0, _util.warn)(`Unknown optional content policy ${group.policy}.`); return true; } (0, _util.warn)(`Unknown group type ${group.type}.`); return true; } setVisibility(id, visible = true) { if (!this._groups.has(id)) { (0, _util.warn)(`Optional content group not found: ${id}`); return; } this._groups.get(id).visible = !!visible; } getOrder() { if (!this._groups.size) { return null; } if (this._order) { return this._order.slice(); } return Array.from(this._groups.keys()); } getGroups() { return this._groups.size > 0 ? (0, _util.objectFromMap)(this._groups) : null; } getGroup(id) { return this._groups.get(id) || null; } } exports.OptionalContentConfig = OptionalContentConfig; /***/ }), /* 16 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PDFDataTransportStream = void 0; var _util = __w_pdfjs_require__(2); var _display_utils = __w_pdfjs_require__(1); class PDFDataTransportStream { constructor(params, pdfDataRangeTransport) { (0, _util.assert)(pdfDataRangeTransport, 'PDFDataTransportStream - missing required "pdfDataRangeTransport" argument.'); this._queuedChunks = []; this._progressiveDone = params.progressiveDone || false; this._contentDispositionFilename = params.contentDispositionFilename || null; const initialData = params.initialData; if (initialData?.length > 0) { const buffer = new Uint8Array(initialData).buffer; this._queuedChunks.push(buffer); } this._pdfDataRangeTransport = pdfDataRangeTransport; this._isStreamingSupported = !params.disableStream; this._isRangeSupported = !params.disableRange; this._contentLength = params.length; this._fullRequestReader = null; this._rangeReaders = []; this._pdfDataRangeTransport.addRangeListener((begin, chunk) => { this._onReceiveData({ begin, chunk }); }); this._pdfDataRangeTransport.addProgressListener((loaded, total) => { this._onProgress({ loaded, total }); }); this._pdfDataRangeTransport.addProgressiveReadListener(chunk => { this._onReceiveData({ chunk }); }); this._pdfDataRangeTransport.addProgressiveDoneListener(() => { this._onProgressiveDone(); }); this._pdfDataRangeTransport.transportReady(); } _onReceiveData(args) { const buffer = new Uint8Array(args.chunk).buffer; if (args.begin === undefined) { if (this._fullRequestReader) { this._fullRequestReader._enqueue(buffer); } else { this._queuedChunks.push(buffer); } } else { const found = this._rangeReaders.some(function (rangeReader) { if (rangeReader._begin !== args.begin) { return false; } rangeReader._enqueue(buffer); return true; }); (0, _util.assert)(found, "_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found."); } } get _progressiveDataLength() { return this._fullRequestReader?._loaded ?? 0; } _onProgress(evt) { if (evt.total === undefined) { const firstReader = this._rangeReaders[0]; if (firstReader?.onProgress) { firstReader.onProgress({ loaded: evt.loaded }); } } else { const fullReader = this._fullRequestReader; if (fullReader?.onProgress) { fullReader.onProgress({ loaded: evt.loaded, total: evt.total }); } } } _onProgressiveDone() { if (this._fullRequestReader) { this._fullRequestReader.progressiveDone(); } this._progressiveDone = true; } _removeRangeReader(reader) { const i = this._rangeReaders.indexOf(reader); if (i >= 0) { this._rangeReaders.splice(i, 1); } } getFullReader() { (0, _util.assert)(!this._fullRequestReader, "PDFDataTransportStream.getFullReader can only be called once."); const queuedChunks = this._queuedChunks; this._queuedChunks = null; return new PDFDataTransportStreamReader(this, queuedChunks, this._progressiveDone, this._contentDispositionFilename); } getRangeReader(begin, end) { if (end <= this._progressiveDataLength) { return null; } const reader = new PDFDataTransportStreamRangeReader(this, begin, end); this._pdfDataRangeTransport.requestDataRange(begin, end); this._rangeReaders.push(reader); return reader; } cancelAllRequests(reason) { if (this._fullRequestReader) { this._fullRequestReader.cancel(reason); } for (const reader of this._rangeReaders.slice(0)) { reader.cancel(reason); } this._pdfDataRangeTransport.abort(); } } exports.PDFDataTransportStream = PDFDataTransportStream; class PDFDataTransportStreamReader { constructor(stream, queuedChunks, progressiveDone = false, contentDispositionFilename = null) { this._stream = stream; this._done = progressiveDone || false; this._filename = (0, _display_utils.isPdfFile)(contentDispositionFilename) ? contentDispositionFilename : null; this._queuedChunks = queuedChunks || []; this._loaded = 0; for (const chunk of this._queuedChunks) { this._loaded += chunk.byteLength; } this._requests = []; this._headersReady = Promise.resolve(); stream._fullRequestReader = this; this.onProgress = null; } _enqueue(chunk) { if (this._done) { return; } if (this._requests.length > 0) { const requestCapability = this._requests.shift(); requestCapability.resolve({ value: chunk, done: false }); } else { this._queuedChunks.push(chunk); } this._loaded += chunk.byteLength; } get headersReady() { return this._headersReady; } get filename() { return this._filename; } get isRangeSupported() { return this._stream._isRangeSupported; } get isStreamingSupported() { return this._stream._isStreamingSupported; } get contentLength() { return this._stream._contentLength; } async read() { if (this._queuedChunks.length > 0) { const chunk = this._queuedChunks.shift(); return { value: chunk, done: false }; } if (this._done) { return { value: undefined, done: true }; } const requestCapability = (0, _util.createPromiseCapability)(); this._requests.push(requestCapability); return requestCapability.promise; } cancel(reason) { this._done = true; for (const requestCapability of this._requests) { requestCapability.resolve({ value: undefined, done: true }); } this._requests.length = 0; } progressiveDone() { if (this._done) { return; } this._done = true; } } class PDFDataTransportStreamRangeReader { constructor(stream, begin, end) { this._stream = stream; this._begin = begin; this._end = end; this._queuedChunk = null; this._requests = []; this._done = false; this.onProgress = null; } _enqueue(chunk) { if (this._done) { return; } if (this._requests.length === 0) { this._queuedChunk = chunk; } else { const requestsCapability = this._requests.shift(); requestsCapability.resolve({ value: chunk, done: false }); for (const requestCapability of this._requests) { requestCapability.resolve({ value: undefined, done: true }); } this._requests.length = 0; } this._done = true; this._stream._removeRangeReader(this); } get isStreamingSupported() { return false; } async read() { if (this._queuedChunk) { const chunk = this._queuedChunk; this._queuedChunk = null; return { value: chunk, done: false }; } if (this._done) { return { value: undefined, done: true }; } const requestCapability = (0, _util.createPromiseCapability)(); this._requests.push(requestCapability); return requestCapability.promise; } cancel(reason) { this._done = true; for (const requestCapability of this._requests) { requestCapability.resolve({ value: undefined, done: true }); } this._requests.length = 0; this._stream._removeRangeReader(this); } } /***/ }), /* 17 */ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.XfaText = void 0; class XfaText { static textContent(xfa) { const items = []; const output = { items, styles: Object.create(null) }; function walk(node) { if (!node) { return; } let str = null; const name = node.name; if (name === "#text") { str = node.value; } else if (!XfaText.shouldBuildText(name)) { return; } else if (node?.attributes?.textContent) { str = node.attributes.textContent; } else if (node.value) { str = node.value; } if (str !== null) { items.push({ str }); } if (!node.children) { return; } for (const child of node.children) { walk(child); } } walk(xfa); return output; } static shouldBuildText(name) { return !(name === "textarea" || name === "input" || name === "option" || name === "select"); } } exports.XfaText = XfaText; /***/ }), /* 18 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.AnnotationLayer = void 0; var _util = __w_pdfjs_require__(2); var _display_utils = __w_pdfjs_require__(1); var _annotation_storage = __w_pdfjs_require__(9); var _scripting_utils = __w_pdfjs_require__(19); var _xfa_layer = __w_pdfjs_require__(20); const DEFAULT_TAB_INDEX = 1000; const GetElementsByNameSet = new WeakSet(); class AnnotationElementFactory { static create(parameters) { const subtype = parameters.data.annotationType; switch (subtype) { case _util.AnnotationType.LINK: return new LinkAnnotationElement(parameters); case _util.AnnotationType.TEXT: return new TextAnnotationElement(parameters); case _util.AnnotationType.WIDGET: const fieldType = parameters.data.fieldType; switch (fieldType) { case "Tx": return new TextWidgetAnnotationElement(parameters); case "Btn": if (parameters.data.radioButton) { return new RadioButtonWidgetAnnotationElement(parameters); } else if (parameters.data.checkBox) { return new CheckboxWidgetAnnotationElement(parameters); } return new PushButtonWidgetAnnotationElement(parameters); case "Ch": return new ChoiceWidgetAnnotationElement(parameters); } return new WidgetAnnotationElement(parameters); case _util.AnnotationType.POPUP: return new PopupAnnotationElement(parameters); case _util.AnnotationType.FREETEXT: return new FreeTextAnnotationElement(parameters); case _util.AnnotationType.LINE: return new LineAnnotationElement(parameters); case _util.AnnotationType.SQUARE: return new SquareAnnotationElement(parameters); case _util.AnnotationType.CIRCLE: return new CircleAnnotationElement(parameters); case _util.AnnotationType.POLYLINE: return new PolylineAnnotationElement(parameters); case _util.AnnotationType.CARET: return new CaretAnnotationElement(parameters); case _util.AnnotationType.INK: return new InkAnnotationElement(parameters); case _util.AnnotationType.POLYGON: return new PolygonAnnotationElement(parameters); case _util.AnnotationType.HIGHLIGHT: return new HighlightAnnotationElement(parameters); case _util.AnnotationType.UNDERLINE: return new UnderlineAnnotationElement(parameters); case _util.AnnotationType.SQUIGGLY: return new SquigglyAnnotationElement(parameters); case _util.AnnotationType.STRIKEOUT: return new StrikeOutAnnotationElement(parameters); case _util.AnnotationType.STAMP: return new StampAnnotationElement(parameters); case _util.AnnotationType.FILEATTACHMENT: return new FileAttachmentAnnotationElement(parameters); default: return new AnnotationElement(parameters); } } } class AnnotationElement { constructor(parameters, { isRenderable = false, ignoreBorder = false, createQuadrilaterals = false } = {}) { this.isRenderable = isRenderable; this.data = parameters.data; this.layer = parameters.layer; this.page = parameters.page; this.viewport = parameters.viewport; this.linkService = parameters.linkService; this.downloadManager = parameters.downloadManager; this.imageResourcesPath = parameters.imageResourcesPath; this.renderForms = parameters.renderForms; this.svgFactory = parameters.svgFactory; this.annotationStorage = parameters.annotationStorage; this.enableScripting = parameters.enableScripting; this.hasJSActions = parameters.hasJSActions; this._fieldObjects = parameters.fieldObjects; this._mouseState = parameters.mouseState; if (isRenderable) { this.container = this._createContainer(ignoreBorder); } if (createQuadrilaterals) { this.quadrilaterals = this._createQuadrilaterals(ignoreBorder); } } _createContainer(ignoreBorder = false) { const data = this.data, page = this.page, viewport = this.viewport; const container = document.createElement("section"); let width = data.rect[2] - data.rect[0]; let height = data.rect[3] - data.rect[1]; container.setAttribute("data-annotation-id", data.id); const rect = _util.Util.normalizeRect([data.rect[0], page.view[3] - data.rect[1] + page.view[1], data.rect[2], page.view[3] - data.rect[3] + page.view[1]]); if (data.hasOwnCanvas) { const transform = viewport.transform.slice(); const [scaleX, scaleY] = _util.Util.singularValueDecompose2dScale(transform); width = Math.ceil(width * scaleX); height = Math.ceil(height * scaleY); rect[0] *= scaleX; rect[1] *= scaleY; for (let i = 0; i < 4; i++) { transform[i] = Math.sign(transform[i]); } container.style.transform = `matrix(${transform.join(",")})`; } else { container.style.transform = `matrix(${viewport.transform.join(",")})`; } container.style.transformOrigin = `${-rect[0]}px ${-rect[1]}px`; if (!ignoreBorder && data.borderStyle.width > 0) { container.style.borderWidth = `${data.borderStyle.width}px`; if (data.borderStyle.style !== _util.AnnotationBorderStyleType.UNDERLINE) { width -= 2 * data.borderStyle.width; height -= 2 * data.borderStyle.width; } const horizontalRadius = data.borderStyle.horizontalCornerRadius; const verticalRadius = data.borderStyle.verticalCornerRadius; if (horizontalRadius > 0 || verticalRadius > 0) { const radius = `${horizontalRadius}px / ${verticalRadius}px`; container.style.borderRadius = radius; } switch (data.borderStyle.style) { case _util.AnnotationBorderStyleType.SOLID: container.style.borderStyle = "solid"; break; case _util.AnnotationBorderStyleType.DASHED: container.style.borderStyle = "dashed"; break; case _util.AnnotationBorderStyleType.BEVELED: (0, _util.warn)("Unimplemented border style: beveled"); break; case _util.AnnotationBorderStyleType.INSET: (0, _util.warn)("Unimplemented border style: inset"); break; case _util.AnnotationBorderStyleType.UNDERLINE: container.style.borderBottomStyle = "solid"; break; } const borderColor = data.borderColor || data.color || null; if (borderColor) { container.style.borderColor = _util.Util.makeHexColor(data.color[0] | 0, data.color[1] | 0, data.color[2] | 0); } else { container.style.borderWidth = 0; } } container.style.left = `${rect[0]}px`; container.style.top = `${rect[1]}px`; if (data.hasOwnCanvas) { container.style.width = container.style.height = "auto"; } else { container.style.width = `${width}px`; container.style.height = `${height}px`; } return container; } _createQuadrilaterals(ignoreBorder = false) { if (!this.data.quadPoints) { return null; } const quadrilaterals = []; const savedRect = this.data.rect; for (const quadPoint of this.data.quadPoints) { this.data.rect = [quadPoint[2].x, quadPoint[2].y, quadPoint[1].x, quadPoint[1].y]; quadrilaterals.push(this._createContainer(ignoreBorder)); } this.data.rect = savedRect; return quadrilaterals; } _createPopup(trigger, data) { let container = this.container; if (this.quadrilaterals) { trigger = trigger || this.quadrilaterals; container = this.quadrilaterals[0]; } if (!trigger) { trigger = document.createElement("div"); trigger.style.height = container.style.height; trigger.style.width = container.style.width; container.appendChild(trigger); } const popupElement = new PopupElement({ container, trigger, color: data.color, titleObj: data.titleObj, modificationDate: data.modificationDate, contentsObj: data.contentsObj, richText: data.richText, hideWrapper: true }); const popup = popupElement.render(); popup.style.left = container.style.width; container.appendChild(popup); } _renderQuadrilaterals(className) { for (const quadrilateral of this.quadrilaterals) { quadrilateral.className = className; } return this.quadrilaterals; } render() { (0, _util.unreachable)("Abstract method `AnnotationElement.render` called"); } _getElementsByName(name, skipId = null) { const fields = []; if (this._fieldObjects) { const fieldObj = this._fieldObjects[name]; if (fieldObj) { for (const { page, id, exportValues } of fieldObj) { if (page === -1) { continue; } if (id === skipId) { continue; } const exportValue = typeof exportValues === "string" ? exportValues : null; const domElement = document.getElementById(id); if (domElement && !GetElementsByNameSet.has(domElement)) { (0, _util.warn)(`_getElementsByName - element not allowed: ${id}`); continue; } fields.push({ id, exportValue, domElement }); } } return fields; } for (const domElement of document.getElementsByName(name)) { const { id, exportValue } = domElement; if (id === skipId) { continue; } if (!GetElementsByNameSet.has(domElement)) { continue; } fields.push({ id, exportValue, domElement }); } return fields; } static get platform() { const platform = typeof navigator !== "undefined" ? navigator.platform : ""; return (0, _util.shadow)(this, "platform", { isWin: platform.includes("Win"), isMac: platform.includes("Mac") }); } } class LinkAnnotationElement extends AnnotationElement { constructor(parameters, options = null) { const isRenderable = !!(parameters.data.url || parameters.data.dest || parameters.data.action || parameters.data.isTooltipOnly || parameters.data.resetForm || parameters.data.actions && (parameters.data.actions.Action || parameters.data.actions["Mouse Up"] || parameters.data.actions["Mouse Down"])); super(parameters, { isRenderable, ignoreBorder: !!options?.ignoreBorder, createQuadrilaterals: true }); } render() { const { data, linkService } = this; const link = document.createElement("a"); if (data.url) { if (!linkService.addLinkAttributes) { (0, _util.warn)("LinkAnnotationElement.render - missing `addLinkAttributes`-method on the `linkService`-instance."); } linkService.addLinkAttributes?.(link, data.url, data.newWindow); } else if (data.action) { this._bindNamedAction(link, data.action); } else if (data.dest) { this._bindLink(link, data.dest); } else { let hasClickAction = false; if (data.actions && (data.actions.Action || data.actions["Mouse Up"] || data.actions["Mouse Down"]) && this.enableScripting && this.hasJSActions) { hasClickAction = true; this._bindJSAction(link, data); } if (data.resetForm) { this._bindResetFormAction(link, data.resetForm); } else if (!hasClickAction) { this._bindLink(link, ""); } } if (this.quadrilaterals) { return this._renderQuadrilaterals("linkAnnotation").map((quadrilateral, index) => { const linkElement = index === 0 ? link : link.cloneNode(); quadrilateral.appendChild(linkElement); return quadrilateral; }); } this.container.className = "linkAnnotation"; this.container.appendChild(link); return this.container; } _bindLink(link, destination) { link.href = this.linkService.getDestinationHash(destination); link.onclick = () => { if (destination) { this.linkService.goToDestination(destination); } return false; }; if (destination || destination === "") { link.className = "internalLink"; } } _bindNamedAction(link, action) { link.href = this.linkService.getAnchorUrl(""); link.onclick = () => { this.linkService.executeNamedAction(action); return false; }; link.className = "internalLink"; } _bindJSAction(link, data) { link.href = this.linkService.getAnchorUrl(""); const map = new Map([["Action", "onclick"], ["Mouse Up", "onmouseup"], ["Mouse Down", "onmousedown"]]); for (const name of Object.keys(data.actions)) { const jsName = map.get(name); if (!jsName) { continue; } link[jsName] = () => { this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { source: this, detail: { id: data.id, name } }); return false; }; } if (!link.onclick) { link.onclick = () => false; } link.className = "internalLink"; } _bindResetFormAction(link, resetForm) { const otherClickAction = link.onclick; if (!otherClickAction) { link.href = this.linkService.getAnchorUrl(""); } link.className = "internalLink"; if (!this._fieldObjects) { (0, _util.warn)(`_bindResetFormAction - "resetForm" action not supported, ` + "ensure that the `fieldObjects` parameter is provided."); if (!otherClickAction) { link.onclick = () => false; } return; } link.onclick = () => { if (otherClickAction) { otherClickAction(); } const { fields: resetFormFields, refs: resetFormRefs, include } = resetForm; const allFields = []; if (resetFormFields.length !== 0 || resetFormRefs.length !== 0) { const fieldIds = new Set(resetFormRefs); for (const fieldName of resetFormFields) { const fields = this._fieldObjects[fieldName] || []; for (const { id } of fields) { fieldIds.add(id); } } for (const fields of Object.values(this._fieldObjects)) { for (const field of fields) { if (fieldIds.has(field.id) === include) { allFields.push(field); } } } } else { for (const fields of Object.values(this._fieldObjects)) { allFields.push(...fields); } } const storage = this.annotationStorage; const allIds = []; for (const field of allFields) { const { id } = field; allIds.push(id); switch (field.type) { case "text": { const value = field.defaultValue || ""; storage.setValue(id, { value, valueAsString: value }); break; } case "checkbox": case "radiobutton": { const value = field.defaultValue === field.exportValues; storage.setValue(id, { value }); break; } case "combobox": case "listbox": { const value = field.defaultValue || ""; storage.setValue(id, { value }); break; } default: continue; } const domElement = document.getElementById(id); if (!domElement || !GetElementsByNameSet.has(domElement)) { continue; } domElement.dispatchEvent(new Event("resetform")); } if (this.enableScripting) { this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { source: this, detail: { id: "app", ids: allIds, name: "ResetForm" } }); } return false; }; } } class TextAnnotationElement extends AnnotationElement { constructor(parameters) { const isRenderable = !!(parameters.data.hasPopup || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str); super(parameters, { isRenderable }); } render() { this.container.className = "textAnnotation"; const image = document.createElement("img"); image.style.height = this.container.style.height; image.style.width = this.container.style.width; image.src = this.imageResourcesPath + "annotation-" + this.data.name.toLowerCase() + ".svg"; image.alt = "[{{type}} Annotation]"; image.dataset.l10nId = "text_annotation_type"; image.dataset.l10nArgs = JSON.stringify({ type: this.data.name }); if (!this.data.hasPopup) { this._createPopup(image, this.data); } this.container.appendChild(image); return this.container; } } class WidgetAnnotationElement extends AnnotationElement { render() { if (this.data.alternativeText) { this.container.title = this.data.alternativeText; } return this.container; } _getKeyModifier(event) { const { isWin, isMac } = AnnotationElement.platform; return isWin && event.ctrlKey || isMac && event.metaKey; } _setEventListener(element, baseName, eventName, valueGetter) { if (baseName.includes("mouse")) { element.addEventListener(baseName, event => { this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { source: this, detail: { id: this.data.id, name: eventName, value: valueGetter(event), shift: event.shiftKey, modifier: this._getKeyModifier(event) } }); }); } else { element.addEventListener(baseName, event => { this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { source: this, detail: { id: this.data.id, name: eventName, value: event.target.checked } }); }); } } _setEventListeners(element, names, getter) { for (const [baseName, eventName] of names) { if (eventName === "Action" || this.data.actions?.[eventName]) { this._setEventListener(element, baseName, eventName, getter); } } } _setBackgroundColor(element) { const color = this.data.backgroundColor || null; element.style.backgroundColor = color === null ? "transparent" : _util.Util.makeHexColor(color[0], color[1], color[2]); } _dispatchEventFromSandbox(actions, jsEvent) { const setColor = (jsName, styleName, event) => { const color = event.detail[jsName]; event.target.style[styleName] = _scripting_utils.ColorConverters[`${color[0]}_HTML`](color.slice(1)); }; const commonActions = { display: event => { const hidden = event.detail.display % 2 === 1; event.target.style.visibility = hidden ? "hidden" : "visible"; this.annotationStorage.setValue(this.data.id, { hidden, print: event.detail.display === 0 || event.detail.display === 3 }); }, print: event => { this.annotationStorage.setValue(this.data.id, { print: event.detail.print }); }, hidden: event => { event.target.style.visibility = event.detail.hidden ? "hidden" : "visible"; this.annotationStorage.setValue(this.data.id, { hidden: event.detail.hidden }); }, focus: event => { setTimeout(() => event.target.focus({ preventScroll: false }), 0); }, userName: event => { event.target.title = event.detail.userName; }, readonly: event => { if (event.detail.readonly) { event.target.setAttribute("readonly", ""); } else { event.target.removeAttribute("readonly"); } }, required: event => { if (event.detail.required) { event.target.setAttribute("required", ""); } else { event.target.removeAttribute("required"); } }, bgColor: event => { setColor("bgColor", "backgroundColor", event); }, fillColor: event => { setColor("fillColor", "backgroundColor", event); }, fgColor: event => { setColor("fgColor", "color", event); }, textColor: event => { setColor("textColor", "color", event); }, borderColor: event => { setColor("borderColor", "borderColor", event); }, strokeColor: event => { setColor("strokeColor", "borderColor", event); } }; for (const name of Object.keys(jsEvent.detail)) { const action = actions[name] || commonActions[name]; if (action) { action(jsEvent); } } } } class TextWidgetAnnotationElement extends WidgetAnnotationElement { constructor(parameters) { const isRenderable = parameters.renderForms || !parameters.data.hasAppearance && !!parameters.data.fieldValue; super(parameters, { isRenderable }); } setPropertyOnSiblings(base, key, value, keyInStorage) { const storage = this.annotationStorage; for (const element of this._getElementsByName(base.name, base.id)) { if (element.domElement) { element.domElement[key] = value; } storage.setValue(element.id, { [keyInStorage]: value }); } } render() { const storage = this.annotationStorage; const id = this.data.id; this.container.className = "textWidgetAnnotation"; let element = null; if (this.renderForms) { const storedData = storage.getValue(id, { value: this.data.fieldValue, valueAsString: this.data.fieldValue }); const textContent = storedData.valueAsString || storedData.value || ""; const elementData = { userValue: null, formattedValue: null, beforeInputSelectionRange: null, beforeInputValue: null }; if (this.data.multiLine) { element = document.createElement("textarea"); element.textContent = textContent; } else { element = document.createElement("input"); element.type = "text"; element.setAttribute("value", textContent); } GetElementsByNameSet.add(element); element.disabled = this.data.readOnly; element.name = this.data.fieldName; element.tabIndex = DEFAULT_TAB_INDEX; elementData.userValue = textContent; element.setAttribute("id", id); element.addEventListener("input", event => { storage.setValue(id, { value: event.target.value }); this.setPropertyOnSiblings(element, "value", event.target.value, "value"); }); element.addEventListener("resetform", event => { const defaultValue = this.data.defaultFieldValue || ""; element.value = elementData.userValue = defaultValue; delete elementData.formattedValue; }); let blurListener = event => { if (elementData.formattedValue) { event.target.value = elementData.formattedValue; } event.target.scrollLeft = 0; elementData.beforeInputSelectionRange = null; }; if (this.enableScripting && this.hasJSActions) { element.addEventListener("focus", event => { if (elementData.userValue) { event.target.value = elementData.userValue; } }); element.addEventListener("updatefromsandbox", jsEvent => { const actions = { value(event) { elementData.userValue = event.detail.value || ""; storage.setValue(id, { value: elementData.userValue.toString() }); if (!elementData.formattedValue) { event.target.value = elementData.userValue; } }, valueAsString(event) { elementData.formattedValue = event.detail.valueAsString || ""; if (event.target !== document.activeElement) { event.target.value = elementData.formattedValue; } storage.setValue(id, { formattedValue: elementData.formattedValue }); }, selRange(event) { const [selStart, selEnd] = event.detail.selRange; if (selStart >= 0 && selEnd < event.target.value.length) { event.target.setSelectionRange(selStart, selEnd); } } }; this._dispatchEventFromSandbox(actions, jsEvent); }); element.addEventListener("keydown", event => { elementData.beforeInputValue = event.target.value; let commitKey = -1; if (event.key === "Escape") { commitKey = 0; } else if (event.key === "Enter") { commitKey = 2; } else if (event.key === "Tab") { commitKey = 3; } if (commitKey === -1) { return; } elementData.userValue = event.target.value; this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { source: this, detail: { id, name: "Keystroke", value: event.target.value, willCommit: true, commitKey, selStart: event.target.selectionStart, selEnd: event.target.selectionEnd } }); }); const _blurListener = blurListener; blurListener = null; element.addEventListener("blur", event => { if (this._mouseState.isDown) { elementData.userValue = event.target.value; this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { source: this, detail: { id, name: "Keystroke", value: event.target.value, willCommit: true, commitKey: 1, selStart: event.target.selectionStart, selEnd: event.target.selectionEnd } }); } _blurListener(event); }); element.addEventListener("mousedown", event => { elementData.beforeInputValue = event.target.value; elementData.beforeInputSelectionRange = null; }); element.addEventListener("keyup", event => { if (event.target.selectionStart === event.target.selectionEnd) { elementData.beforeInputSelectionRange = null; } }); element.addEventListener("select", event => { elementData.beforeInputSelectionRange = [event.target.selectionStart, event.target.selectionEnd]; }); if (this.data.actions?.Keystroke) { element.addEventListener("input", event => { let selStart = -1; let selEnd = -1; if (elementData.beforeInputSelectionRange) { [selStart, selEnd] = elementData.beforeInputSelectionRange; } this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { source: this, detail: { id, name: "Keystroke", value: elementData.beforeInputValue, change: event.data, willCommit: false, selStart, selEnd } }); }); } this._setEventListeners(element, [["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], event => event.target.value); } if (blurListener) { element.addEventListener("blur", blurListener); } if (this.data.maxLen !== null) { element.maxLength = this.data.maxLen; } if (this.data.comb) { const fieldWidth = this.data.rect[2] - this.data.rect[0]; const combWidth = fieldWidth / this.data.maxLen; element.classList.add("comb"); element.style.letterSpacing = `calc(${combWidth}px - 1ch)`; } } else { element = document.createElement("div"); element.textContent = this.data.fieldValue; element.style.verticalAlign = "middle"; element.style.display = "table-cell"; } this._setTextStyle(element); this._setBackgroundColor(element); this.container.appendChild(element); return this.container; } _setTextStyle(element) { const TEXT_ALIGNMENT = ["left", "center", "right"]; const { fontSize, fontColor } = this.data.defaultAppearanceData; const style = element.style; if (fontSize) { style.fontSize = `${fontSize}px`; } style.color = _util.Util.makeHexColor(fontColor[0], fontColor[1], fontColor[2]); if (this.data.textAlignment !== null) { style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment]; } } } class CheckboxWidgetAnnotationElement extends WidgetAnnotationElement { constructor(parameters) { super(parameters, { isRenderable: parameters.renderForms }); } render() { const storage = this.annotationStorage; const data = this.data; const id = data.id; let value = storage.getValue(id, { value: data.exportValue === data.fieldValue }).value; if (typeof value === "string") { value = value !== "Off"; storage.setValue(id, { value }); } this.container.className = "buttonWidgetAnnotation checkBox"; const element = document.createElement("input"); GetElementsByNameSet.add(element); element.disabled = data.readOnly; element.type = "checkbox"; element.name = data.fieldName; if (value) { element.setAttribute("checked", true); } element.setAttribute("id", id); element.setAttribute("exportValue", data.exportValue); element.tabIndex = DEFAULT_TAB_INDEX; element.addEventListener("change", event => { const { name, checked } = event.target; for (const checkbox of this._getElementsByName(name, id)) { const curChecked = checked && checkbox.exportValue === data.exportValue; if (checkbox.domElement) { checkbox.domElement.checked = curChecked; } storage.setValue(checkbox.id, { value: curChecked }); } storage.setValue(id, { value: checked }); }); element.addEventListener("resetform", event => { const defaultValue = data.defaultFieldValue || "Off"; event.target.checked = defaultValue === data.exportValue; }); if (this.enableScripting && this.hasJSActions) { element.addEventListener("updatefromsandbox", jsEvent => { const actions = { value(event) { event.target.checked = event.detail.value !== "Off"; storage.setValue(id, { value: event.target.checked }); } }; this._dispatchEventFromSandbox(actions, jsEvent); }); this._setEventListeners(element, [["change", "Validate"], ["change", "Action"], ["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], event => event.target.checked); } this._setBackgroundColor(element); this.container.appendChild(element); return this.container; } } class RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement { constructor(parameters) { super(parameters, { isRenderable: parameters.renderForms }); } render() { this.container.className = "buttonWidgetAnnotation radioButton"; const storage = this.annotationStorage; const data = this.data; const id = data.id; let value = storage.getValue(id, { value: data.fieldValue === data.buttonValue }).value; if (typeof value === "string") { value = value !== data.buttonValue; storage.setValue(id, { value }); } const element = document.createElement("input"); GetElementsByNameSet.add(element); element.disabled = data.readOnly; element.type = "radio"; element.name = data.fieldName; if (value) { element.setAttribute("checked", true); } element.setAttribute("id", id); element.tabIndex = DEFAULT_TAB_INDEX; element.addEventListener("change", event => { const { name, checked } = event.target; for (const radio of this._getElementsByName(name, id)) { storage.setValue(radio.id, { value: false }); } storage.setValue(id, { value: checked }); }); element.addEventListener("resetform", event => { const defaultValue = data.defaultFieldValue; event.target.checked = defaultValue !== null && defaultValue !== undefined && defaultValue === data.buttonValue; }); if (this.enableScripting && this.hasJSActions) { const pdfButtonValue = data.buttonValue; element.addEventListener("updatefromsandbox", jsEvent => { const actions = { value: event => { const checked = pdfButtonValue === event.detail.value; for (const radio of this._getElementsByName(event.target.name)) { const curChecked = checked && radio.id === id; if (radio.domElement) { radio.domElement.checked = curChecked; } storage.setValue(radio.id, { value: curChecked }); } } }; this._dispatchEventFromSandbox(actions, jsEvent); }); this._setEventListeners(element, [["change", "Validate"], ["change", "Action"], ["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], event => event.target.checked); } this._setBackgroundColor(element); this.container.appendChild(element); return this.container; } } class PushButtonWidgetAnnotationElement extends LinkAnnotationElement { constructor(parameters) { super(parameters, { ignoreBorder: parameters.data.hasAppearance }); } render() { const container = super.render(); container.className = "buttonWidgetAnnotation pushButton"; if (this.data.alternativeText) { container.title = this.data.alternativeText; } return container; } } class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement { constructor(parameters) { super(parameters, { isRenderable: parameters.renderForms }); } render() { this.container.className = "choiceWidgetAnnotation"; const storage = this.annotationStorage; const id = this.data.id; storage.getValue(id, { value: this.data.fieldValue.length > 0 ? this.data.fieldValue[0] : undefined }); let { fontSize } = this.data.defaultAppearanceData; if (!fontSize) { fontSize = 9; } const fontSizeStyle = `calc(${fontSize}px * var(--zoom-factor))`; const selectElement = document.createElement("select"); GetElementsByNameSet.add(selectElement); selectElement.disabled = this.data.readOnly; selectElement.name = this.data.fieldName; selectElement.setAttribute("id", id); selectElement.tabIndex = DEFAULT_TAB_INDEX; selectElement.style.fontSize = `${fontSize}px`; if (!this.data.combo) { selectElement.size = this.data.options.length; if (this.data.multiSelect) { selectElement.multiple = true; } } selectElement.addEventListener("resetform", event => { const defaultValue = this.data.defaultFieldValue; for (const option of selectElement.options) { option.selected = option.value === defaultValue; } }); for (const option of this.data.options) { const optionElement = document.createElement("option"); optionElement.textContent = option.displayValue; optionElement.value = option.exportValue; if (this.data.combo) { optionElement.style.fontSize = fontSizeStyle; } if (this.data.fieldValue.includes(option.exportValue)) { optionElement.setAttribute("selected", true); } selectElement.appendChild(optionElement); } const getValue = (event, isExport) => { const name = isExport ? "value" : "textContent"; const options = event.target.options; if (!event.target.multiple) { return options.selectedIndex === -1 ? null : options[options.selectedIndex][name]; } return Array.prototype.filter.call(options, option => option.selected).map(option => option[name]); }; const getItems = event => { const options = event.target.options; return Array.prototype.map.call(options, option => { return { displayValue: option.textContent, exportValue: option.value }; }); }; if (this.enableScripting && this.hasJSActions) { selectElement.addEventListener("updatefromsandbox", jsEvent => { const actions = { value(event) { const value = event.detail.value; const values = new Set(Array.isArray(value) ? value : [value]); for (const option of selectElement.options) { option.selected = values.has(option.value); } storage.setValue(id, { value: getValue(event, true) }); }, multipleSelection(event) { selectElement.multiple = true; }, remove(event) { const options = selectElement.options; const index = event.detail.remove; options[index].selected = false; selectElement.remove(index); if (options.length > 0) { const i = Array.prototype.findIndex.call(options, option => option.selected); if (i === -1) { options[0].selected = true; } } storage.setValue(id, { value: getValue(event, true), items: getItems(event) }); }, clear(event) { while (selectElement.length !== 0) { selectElement.remove(0); } storage.setValue(id, { value: null, items: [] }); }, insert(event) { const { index, displayValue, exportValue } = event.detail.insert; const optionElement = document.createElement("option"); optionElement.textContent = displayValue; optionElement.value = exportValue; selectElement.insertBefore(optionElement, selectElement.children[index]); storage.setValue(id, { value: getValue(event, true), items: getItems(event) }); }, items(event) { const { items } = event.detail; while (selectElement.length !== 0) { selectElement.remove(0); } for (const item of items) { const { displayValue, exportValue } = item; const optionElement = document.createElement("option"); optionElement.textContent = displayValue; optionElement.value = exportValue; selectElement.appendChild(optionElement); } if (selectElement.options.length > 0) { selectElement.options[0].selected = true; } storage.setValue(id, { value: getValue(event, true), items: getItems(event) }); }, indices(event) { const indices = new Set(event.detail.indices); for (const option of event.target.options) { option.selected = indices.has(option.index); } storage.setValue(id, { value: getValue(event, true) }); }, editable(event) { event.target.disabled = !event.detail.editable; } }; this._dispatchEventFromSandbox(actions, jsEvent); }); selectElement.addEventListener("input", event => { const exportValue = getValue(event, true); const value = getValue(event, false); storage.setValue(id, { value: exportValue }); this.linkService.eventBus?.dispatch("dispatcheventinsandbox", { source: this, detail: { id, name: "Keystroke", value, changeEx: exportValue, willCommit: true, commitKey: 1, keyDown: false } }); }); this._setEventListeners(selectElement, [["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"], ["input", "Action"]], event => event.target.checked); } else { selectElement.addEventListener("input", function (event) { storage.setValue(id, { value: getValue(event) }); }); } this._setBackgroundColor(selectElement); this.container.appendChild(selectElement); return this.container; } } class PopupAnnotationElement extends AnnotationElement { constructor(parameters) { const isRenderable = !!(parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str); super(parameters, { isRenderable }); } render() { const IGNORE_TYPES = ["Line", "Square", "Circle", "PolyLine", "Polygon", "Ink"]; this.container.className = "popupAnnotation"; if (IGNORE_TYPES.includes(this.data.parentType)) { return this.container; } const selector = `[data-annotation-id="${this.data.parentId}"]`; const parentElements = this.layer.querySelectorAll(selector); if (parentElements.length === 0) { return this.container; } const popup = new PopupElement({ container: this.container, trigger: Array.from(parentElements), color: this.data.color, titleObj: this.data.titleObj, modificationDate: this.data.modificationDate, contentsObj: this.data.contentsObj, richText: this.data.richText }); const page = this.page; const rect = _util.Util.normalizeRect([this.data.parentRect[0], page.view[3] - this.data.parentRect[1] + page.view[1], this.data.parentRect[2], page.view[3] - this.data.parentRect[3] + page.view[1]]); const popupLeft = rect[0] + this.data.parentRect[2] - this.data.parentRect[0]; const popupTop = rect[1]; this.container.style.transformOrigin = `${-popupLeft}px ${-popupTop}px`; this.container.style.left = `${popupLeft}px`; this.container.style.top = `${popupTop}px`; this.container.appendChild(popup.render()); return this.container; } } class PopupElement { constructor(parameters) { this.container = parameters.container; this.trigger = parameters.trigger; this.color = parameters.color; this.titleObj = parameters.titleObj; this.modificationDate = parameters.modificationDate; this.contentsObj = parameters.contentsObj; this.richText = parameters.richText; this.hideWrapper = parameters.hideWrapper || false; this.pinned = false; } render() { const BACKGROUND_ENLIGHT = 0.7; const wrapper = document.createElement("div"); wrapper.className = "popupWrapper"; this.hideElement = this.hideWrapper ? wrapper : this.container; this.hideElement.hidden = true; const popup = document.createElement("div"); popup.className = "popup"; const color = this.color; if (color) { const r = BACKGROUND_ENLIGHT * (255 - color[0]) + color[0]; const g = BACKGROUND_ENLIGHT * (255 - color[1]) + color[1]; const b = BACKGROUND_ENLIGHT * (255 - color[2]) + color[2]; popup.style.backgroundColor = _util.Util.makeHexColor(r | 0, g | 0, b | 0); } const title = document.createElement("h1"); title.dir = this.titleObj.dir; title.textContent = this.titleObj.str; popup.appendChild(title); const dateObject = _display_utils.PDFDateString.toDateObject(this.modificationDate); if (dateObject) { const modificationDate = document.createElement("span"); modificationDate.className = "popupDate"; modificationDate.textContent = "{{date}}, {{time}}"; modificationDate.dataset.l10nId = "annotation_date_string"; modificationDate.dataset.l10nArgs = JSON.stringify({ date: dateObject.toLocaleDateString(), time: dateObject.toLocaleTimeString() }); popup.appendChild(modificationDate); } if (this.richText?.str && (!this.contentsObj?.str || this.contentsObj.str === this.richText.str)) { _xfa_layer.XfaLayer.render({ xfaHtml: this.richText.html, intent: "richText", div: popup }); popup.lastChild.className = "richText popupContent"; } else { const contents = this._formatContents(this.contentsObj); popup.appendChild(contents); } if (!Array.isArray(this.trigger)) { this.trigger = [this.trigger]; } for (const element of this.trigger) { element.addEventListener("click", this._toggle.bind(this)); element.addEventListener("mouseover", this._show.bind(this, false)); element.addEventListener("mouseout", this._hide.bind(this, false)); } popup.addEventListener("click", this._hide.bind(this, true)); wrapper.appendChild(popup); return wrapper; } _formatContents({ str, dir }) { const p = document.createElement("p"); p.className = "popupContent"; p.dir = dir; const lines = str.split(/(?:\r\n?|\n)/); for (let i = 0, ii = lines.length; i < ii; ++i) { const line = lines[i]; p.appendChild(document.createTextNode(line)); if (i < ii - 1) { p.appendChild(document.createElement("br")); } } return p; } _toggle() { if (this.pinned) { this._hide(true); } else { this._show(true); } } _show(pin = false) { if (pin) { this.pinned = true; } if (this.hideElement.hidden) { this.hideElement.hidden = false; this.container.style.zIndex += 1; } } _hide(unpin = true) { if (unpin) { this.pinned = false; } if (!this.hideElement.hidden && !this.pinned) { this.hideElement.hidden = true; this.container.style.zIndex -= 1; } } } class FreeTextAnnotationElement extends AnnotationElement { constructor(parameters) { const isRenderable = !!(parameters.data.hasPopup || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str); super(parameters, { isRenderable, ignoreBorder: true }); } render() { this.container.className = "freeTextAnnotation"; if (!this.data.hasPopup) { this._createPopup(null, this.data); } return this.container; } } class LineAnnotationElement extends AnnotationElement { constructor(parameters) { const isRenderable = !!(parameters.data.hasPopup || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str); super(parameters, { isRenderable, ignoreBorder: true }); } render() { this.container.className = "lineAnnotation"; const data = this.data; const width = data.rect[2] - data.rect[0]; const height = data.rect[3] - data.rect[1]; const svg = this.svgFactory.create(width, height); const line = this.svgFactory.createElement("svg:line"); line.setAttribute("x1", data.rect[2] - data.lineCoordinates[0]); line.setAttribute("y1", data.rect[3] - data.lineCoordinates[1]); line.setAttribute("x2", data.rect[2] - data.lineCoordinates[2]); line.setAttribute("y2", data.rect[3] - data.lineCoordinates[3]); line.setAttribute("stroke-width", data.borderStyle.width || 1); line.setAttribute("stroke", "transparent"); line.setAttribute("fill", "transparent"); svg.appendChild(line); this.container.append(svg); this._createPopup(line, data); return this.container; } } class SquareAnnotationElement extends AnnotationElement { constructor(parameters) { const isRenderable = !!(parameters.data.hasPopup || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str); super(parameters, { isRenderable, ignoreBorder: true }); } render() { this.container.className = "squareAnnotation"; const data = this.data; const width = data.rect[2] - data.rect[0]; const height = data.rect[3] - data.rect[1]; const svg = this.svgFactory.create(width, height); const borderWidth = data.borderStyle.width; const square = this.svgFactory.createElement("svg:rect"); square.setAttribute("x", borderWidth / 2); square.setAttribute("y", borderWidth / 2); square.setAttribute("width", width - borderWidth); square.setAttribute("height", height - borderWidth); square.setAttribute("stroke-width", borderWidth || 1); square.setAttribute("stroke", "transparent"); square.setAttribute("fill", "transparent"); svg.appendChild(square); this.container.append(svg); this._createPopup(square, data); return this.container; } } class CircleAnnotationElement extends AnnotationElement { constructor(parameters) { const isRenderable = !!(parameters.data.hasPopup || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str); super(parameters, { isRenderable, ignoreBorder: true }); } render() { this.container.className = "circleAnnotation"; const data = this.data; const width = data.rect[2] - data.rect[0]; const height = data.rect[3] - data.rect[1]; const svg = this.svgFactory.create(width, height); const borderWidth = data.borderStyle.width; const circle = this.svgFactory.createElement("svg:ellipse"); circle.setAttribute("cx", width / 2); circle.setAttribute("cy", height / 2); circle.setAttribute("rx", width / 2 - borderWidth / 2); circle.setAttribute("ry", height / 2 - borderWidth / 2); circle.setAttribute("stroke-width", borderWidth || 1); circle.setAttribute("stroke", "transparent"); circle.setAttribute("fill", "transparent"); svg.appendChild(circle); this.container.append(svg); this._createPopup(circle, data); return this.container; } } class PolylineAnnotationElement extends AnnotationElement { constructor(parameters) { const isRenderable = !!(parameters.data.hasPopup || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str); super(parameters, { isRenderable, ignoreBorder: true }); this.containerClassName = "polylineAnnotation"; this.svgElementName = "svg:polyline"; } render() { this.container.className = this.containerClassName; const data = this.data; const width = data.rect[2] - data.rect[0]; const height = data.rect[3] - data.rect[1]; const svg = this.svgFactory.create(width, height); let points = []; for (const coordinate of data.vertices) { const x = coordinate.x - data.rect[0]; const y = data.rect[3] - coordinate.y; points.push(x + "," + y); } points = points.join(" "); const polyline = this.svgFactory.createElement(this.svgElementName); polyline.setAttribute("points", points); polyline.setAttribute("stroke-width", data.borderStyle.width || 1); polyline.setAttribute("stroke", "transparent"); polyline.setAttribute("fill", "transparent"); svg.appendChild(polyline); this.container.append(svg); this._createPopup(polyline, data); return this.container; } } class PolygonAnnotationElement extends PolylineAnnotationElement { constructor(parameters) { super(parameters); this.containerClassName = "polygonAnnotation"; this.svgElementName = "svg:polygon"; } } class CaretAnnotationElement extends AnnotationElement { constructor(parameters) { const isRenderable = !!(parameters.data.hasPopup || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str); super(parameters, { isRenderable, ignoreBorder: true }); } render() { this.container.className = "caretAnnotation"; if (!this.data.hasPopup) { this._createPopup(null, this.data); } return this.container; } } class InkAnnotationElement extends AnnotationElement { constructor(parameters) { const isRenderable = !!(parameters.data.hasPopup || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str); super(parameters, { isRenderable, ignoreBorder: true }); this.containerClassName = "inkAnnotation"; this.svgElementName = "svg:polyline"; } render() { this.container.className = this.containerClassName; const data = this.data; const width = data.rect[2] - data.rect[0]; const height = data.rect[3] - data.rect[1]; const svg = this.svgFactory.create(width, height); for (const inkList of data.inkLists) { let points = []; for (const coordinate of inkList) { const x = coordinate.x - data.rect[0]; const y = data.rect[3] - coordinate.y; points.push(`${x},${y}`); } points = points.join(" "); const polyline = this.svgFactory.createElement(this.svgElementName); polyline.setAttribute("points", points); polyline.setAttribute("stroke-width", data.borderStyle.width || 1); polyline.setAttribute("stroke", "transparent"); polyline.setAttribute("fill", "transparent"); this._createPopup(polyline, data); svg.appendChild(polyline); } this.container.append(svg); return this.container; } } class HighlightAnnotationElement extends AnnotationElement { constructor(parameters) { const isRenderable = !!(parameters.data.hasPopup || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str); super(parameters, { isRenderable, ignoreBorder: true, createQuadrilaterals: true }); } render() { if (!this.data.hasPopup) { this._createPopup(null, this.data); } if (this.quadrilaterals) { return this._renderQuadrilaterals("highlightAnnotation"); } this.container.className = "highlightAnnotation"; return this.container; } } class UnderlineAnnotationElement extends AnnotationElement { constructor(parameters) { const isRenderable = !!(parameters.data.hasPopup || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str); super(parameters, { isRenderable, ignoreBorder: true, createQuadrilaterals: true }); } render() { if (!this.data.hasPopup) { this._createPopup(null, this.data); } if (this.quadrilaterals) { return this._renderQuadrilaterals("underlineAnnotation"); } this.container.className = "underlineAnnotation"; return this.container; } } class SquigglyAnnotationElement extends AnnotationElement { constructor(parameters) { const isRenderable = !!(parameters.data.hasPopup || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str); super(parameters, { isRenderable, ignoreBorder: true, createQuadrilaterals: true }); } render() { if (!this.data.hasPopup) { this._createPopup(null, this.data); } if (this.quadrilaterals) { return this._renderQuadrilaterals("squigglyAnnotation"); } this.container.className = "squigglyAnnotation"; return this.container; } } class StrikeOutAnnotationElement extends AnnotationElement { constructor(parameters) { const isRenderable = !!(parameters.data.hasPopup || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str); super(parameters, { isRenderable, ignoreBorder: true, createQuadrilaterals: true }); } render() { if (!this.data.hasPopup) { this._createPopup(null, this.data); } if (this.quadrilaterals) { return this._renderQuadrilaterals("strikeoutAnnotation"); } this.container.className = "strikeoutAnnotation"; return this.container; } } class StampAnnotationElement extends AnnotationElement { constructor(parameters) { const isRenderable = !!(parameters.data.hasPopup || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str); super(parameters, { isRenderable, ignoreBorder: true }); } render() { this.container.className = "stampAnnotation"; if (!this.data.hasPopup) { this._createPopup(null, this.data); } return this.container; } } class FileAttachmentAnnotationElement extends AnnotationElement { constructor(parameters) { super(parameters, { isRenderable: true }); const { filename, content } = this.data.file; this.filename = (0, _display_utils.getFilenameFromUrl)(filename); this.content = content; this.linkService.eventBus?.dispatch("fileattachmentannotation", { source: this, id: (0, _util.stringToPDFString)(filename), filename, content }); } render() { this.container.className = "fileAttachmentAnnotation"; const trigger = document.createElement("div"); trigger.style.height = this.container.style.height; trigger.style.width = this.container.style.width; trigger.addEventListener("dblclick", this._download.bind(this)); if (!this.data.hasPopup && (this.data.titleObj?.str || this.data.contentsObj?.str || this.data.richText)) { this._createPopup(trigger, this.data); } this.container.appendChild(trigger); return this.container; } _download() { this.downloadManager?.openOrDownloadData(this.container, this.content, this.filename); } } class AnnotationLayer { static render(parameters) { const sortedAnnotations = [], popupAnnotations = []; for (const data of parameters.annotations) { if (!data) { continue; } if (data.annotationType === _util.AnnotationType.POPUP) { popupAnnotations.push(data); continue; } sortedAnnotations.push(data); } if (popupAnnotations.length) { sortedAnnotations.push(...popupAnnotations); } const div = parameters.div; for (const data of sortedAnnotations) { const element = AnnotationElementFactory.create({ data, layer: div, page: parameters.page, viewport: parameters.viewport, linkService: parameters.linkService, downloadManager: parameters.downloadManager, imageResourcesPath: parameters.imageResourcesPath || "", renderForms: parameters.renderForms !== false, svgFactory: new _display_utils.DOMSVGFactory(), annotationStorage: parameters.annotationStorage || new _annotation_storage.AnnotationStorage(), enableScripting: parameters.enableScripting, hasJSActions: parameters.hasJSActions, fieldObjects: parameters.fieldObjects, mouseState: parameters.mouseState || { isDown: false } }); if (element.isRenderable) { const rendered = element.render(); if (data.hidden) { rendered.style.visibility = "hidden"; } if (Array.isArray(rendered)) { for (const renderedElement of rendered) { div.appendChild(renderedElement); } } else { if (element instanceof PopupAnnotationElement) { div.prepend(rendered); } else { div.appendChild(rendered); } } } } this.#setAnnotationCanvasMap(div, parameters.annotationCanvasMap); } static update(parameters) { const { page, viewport, annotations, annotationCanvasMap, div } = parameters; const transform = viewport.transform; const matrix = `matrix(${transform.join(",")})`; let scale, ownMatrix; for (const data of annotations) { const elements = div.querySelectorAll(`[data-annotation-id="${data.id}"]`); if (elements) { for (const element of elements) { if (data.hasOwnCanvas) { const rect = _util.Util.normalizeRect([data.rect[0], page.view[3] - data.rect[1] + page.view[1], data.rect[2], page.view[3] - data.rect[3] + page.view[1]]); if (!ownMatrix) { scale = Math.abs(transform[0] || transform[1]); const ownTransform = transform.slice(); for (let i = 0; i < 4; i++) { ownTransform[i] = Math.sign(ownTransform[i]); } ownMatrix = `matrix(${ownTransform.join(",")})`; } const left = rect[0] * scale; const top = rect[1] * scale; element.style.left = `${left}px`; element.style.top = `${top}px`; element.style.transformOrigin = `${-left}px ${-top}px`; element.style.transform = ownMatrix; } else { element.style.transform = matrix; } } } } this.#setAnnotationCanvasMap(div, annotationCanvasMap); div.hidden = false; } static #setAnnotationCanvasMap(div, annotationCanvasMap) { if (!annotationCanvasMap) { return; } for (const [id, canvas] of annotationCanvasMap) { const element = div.querySelector(`[data-annotation-id="${id}"]`); if (!element) { continue; } const { firstChild } = element; if (firstChild.nodeName === "CANVAS") { element.replaceChild(canvas, firstChild); } else { element.insertBefore(canvas, firstChild); } } annotationCanvasMap.clear(); } } exports.AnnotationLayer = AnnotationLayer; /***/ }), /* 19 */ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.ColorConverters = void 0; function makeColorComp(n) { return Math.floor(Math.max(0, Math.min(1, n)) * 255).toString(16).padStart(2, "0"); } class ColorConverters { static CMYK_G([c, y, m, k]) { return ["G", 1 - Math.min(1, 0.3 * c + 0.59 * m + 0.11 * y + k)]; } static G_CMYK([g]) { return ["CMYK", 0, 0, 0, 1 - g]; } static G_RGB([g]) { return ["RGB", g, g, g]; } static G_HTML([g]) { const G = makeColorComp(g); return `#${G}${G}${G}`; } static RGB_G([r, g, b]) { return ["G", 0.3 * r + 0.59 * g + 0.11 * b]; } static RGB_HTML([r, g, b]) { const R = makeColorComp(r); const G = makeColorComp(g); const B = makeColorComp(b); return `#${R}${G}${B}`; } static T_HTML() { return "#00000000"; } static CMYK_RGB([c, y, m, k]) { return ["RGB", 1 - Math.min(1, c + k), 1 - Math.min(1, m + k), 1 - Math.min(1, y + k)]; } static CMYK_HTML(components) { return this.RGB_HTML(this.CMYK_RGB(components)); } static RGB_CMYK([r, g, b]) { const c = 1 - r; const m = 1 - g; const y = 1 - b; const k = Math.min(c, m, y); return ["CMYK", c, m, y, k]; } } exports.ColorConverters = ColorConverters; /***/ }), /* 20 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.XfaLayer = void 0; var _util = __w_pdfjs_require__(2); var _xfa_text = __w_pdfjs_require__(17); class XfaLayer { static setupStorage(html, id, element, storage, intent) { const storedData = storage.getValue(id, { value: null }); switch (element.name) { case "textarea": if (storedData.value !== null) { html.textContent = storedData.value; } if (intent === "print") { break; } html.addEventListener("input", event => { storage.setValue(id, { value: event.target.value }); }); break; case "input": if (element.attributes.type === "radio" || element.attributes.type === "checkbox") { if (storedData.value === element.attributes.xfaOn) { html.setAttribute("checked", true); } else if (storedData.value === element.attributes.xfaOff) { html.removeAttribute("checked"); } if (intent === "print") { break; } html.addEventListener("change", event => { storage.setValue(id, { value: event.target.checked ? event.target.getAttribute("xfaOn") : event.target.getAttribute("xfaOff") }); }); } else { if (storedData.value !== null) { html.setAttribute("value", storedData.value); } if (intent === "print") { break; } html.addEventListener("input", event => { storage.setValue(id, { value: event.target.value }); }); } break; case "select": if (storedData.value !== null) { for (const option of element.children) { if (option.attributes.value === storedData.value) { option.attributes.selected = true; } } } html.addEventListener("input", event => { const options = event.target.options; const value = options.selectedIndex === -1 ? "" : options[options.selectedIndex].value; storage.setValue(id, { value }); }); break; } } static setAttributes({ html, element, storage = null, intent, linkService }) { const { attributes } = element; const isHTMLAnchorElement = html instanceof HTMLAnchorElement; if (attributes.type === "radio") { attributes.name = `${attributes.name}-${intent}`; } for (const [key, value] of Object.entries(attributes)) { if (value === null || value === undefined || key === "dataId") { continue; } if (key !== "style") { if (key === "textContent") { html.textContent = value; } else if (key === "class") { if (value.length) { html.setAttribute(key, value.join(" ")); } } else { if (isHTMLAnchorElement && (key === "href" || key === "newWindow")) { continue; } html.setAttribute(key, value); } } else { Object.assign(html.style, value); } } if (isHTMLAnchorElement) { if (!linkService.addLinkAttributes) { (0, _util.warn)("XfaLayer.setAttribute - missing `addLinkAttributes`-method on the `linkService`-instance."); } linkService.addLinkAttributes?.(html, attributes.href, attributes.newWindow); } if (storage && attributes.dataId) { this.setupStorage(html, attributes.dataId, element, storage); } } static render(parameters) { const storage = parameters.annotationStorage; const linkService = parameters.linkService; const root = parameters.xfaHtml; const intent = parameters.intent || "display"; const rootHtml = document.createElement(root.name); if (root.attributes) { this.setAttributes({ html: rootHtml, element: root, intent, linkService }); } const stack = [[root, -1, rootHtml]]; const rootDiv = parameters.div; rootDiv.appendChild(rootHtml); if (parameters.viewport) { const transform = `matrix(${parameters.viewport.transform.join(",")})`; rootDiv.style.transform = transform; } if (intent !== "richText") { rootDiv.setAttribute("class", "xfaLayer xfaFont"); } const textDivs = []; while (stack.length > 0) { const [parent, i, html] = stack[stack.length - 1]; if (i + 1 === parent.children.length) { stack.pop(); continue; } const child = parent.children[++stack[stack.length - 1][1]]; if (child === null) { continue; } const { name } = child; if (name === "#text") { const node = document.createTextNode(child.value); textDivs.push(node); html.appendChild(node); continue; } let childHtml; if (child?.attributes?.xmlns) { childHtml = document.createElementNS(child.attributes.xmlns, name); } else { childHtml = document.createElement(name); } html.appendChild(childHtml); if (child.attributes) { this.setAttributes({ html: childHtml, element: child, storage, intent, linkService }); } if (child.children && child.children.length > 0) { stack.push([child, -1, childHtml]); } else if (child.value) { const node = document.createTextNode(child.value); if (_xfa_text.XfaText.shouldBuildText(name)) { textDivs.push(node); } childHtml.appendChild(node); } } for (const el of rootDiv.querySelectorAll(".xfaNonInteractive input, .xfaNonInteractive textarea")) { el.setAttribute("readOnly", true); } return { textDivs }; } static update(parameters) { const transform = `matrix(${parameters.viewport.transform.join(",")})`; parameters.div.style.transform = transform; parameters.div.hidden = false; } } exports.XfaLayer = XfaLayer; /***/ }), /* 21 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.renderTextLayer = renderTextLayer; var _util = __w_pdfjs_require__(2); const MAX_TEXT_DIVS_TO_RENDER = 100000; const DEFAULT_FONT_SIZE = 30; const DEFAULT_FONT_ASCENT = 0.8; const ascentCache = new Map(); const AllWhitespaceRegexp = /^\s+$/g; function getAscent(fontFamily, ctx) { const cachedAscent = ascentCache.get(fontFamily); if (cachedAscent) { return cachedAscent; } ctx.save(); ctx.font = `${DEFAULT_FONT_SIZE}px ${fontFamily}`; const metrics = ctx.measureText(""); let ascent = metrics.fontBoundingBoxAscent; let descent = Math.abs(metrics.fontBoundingBoxDescent); if (ascent) { ctx.restore(); const ratio = ascent / (ascent + descent); ascentCache.set(fontFamily, ratio); return ratio; } ctx.strokeStyle = "red"; ctx.clearRect(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE); ctx.strokeText("g", 0, 0); let pixels = ctx.getImageData(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE).data; descent = 0; for (let i = pixels.length - 1 - 3; i >= 0; i -= 4) { if (pixels[i] > 0) { descent = Math.ceil(i / 4 / DEFAULT_FONT_SIZE); break; } } ctx.clearRect(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE); ctx.strokeText("A", 0, DEFAULT_FONT_SIZE); pixels = ctx.getImageData(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE).data; ascent = 0; for (let i = 0, ii = pixels.length; i < ii; i += 4) { if (pixels[i] > 0) { ascent = DEFAULT_FONT_SIZE - Math.floor(i / 4 / DEFAULT_FONT_SIZE); break; } } ctx.restore(); if (ascent) { const ratio = ascent / (ascent + descent); ascentCache.set(fontFamily, ratio); return ratio; } ascentCache.set(fontFamily, DEFAULT_FONT_ASCENT); return DEFAULT_FONT_ASCENT; } function appendText(task, geom, styles, ctx) { const textDiv = document.createElement("span"); const textDivProperties = task._enhanceTextSelection ? { angle: 0, canvasWidth: 0, hasText: geom.str !== "", hasEOL: geom.hasEOL, originalTransform: null, paddingBottom: 0, paddingLeft: 0, paddingRight: 0, paddingTop: 0, scale: 1 } : { angle: 0, canvasWidth: 0, hasText: geom.str !== "", hasEOL: geom.hasEOL }; task._textDivs.push(textDiv); const tx = _util.Util.transform(task._viewport.transform, geom.transform); let angle = Math.atan2(tx[1], tx[0]); const style = styles[geom.fontName]; if (style.vertical) { angle += Math.PI / 2; } const fontHeight = Math.hypot(tx[2], tx[3]); const fontAscent = fontHeight * getAscent(style.fontFamily, ctx); let left, top; if (angle === 0) { left = tx[4]; top = tx[5] - fontAscent; } else { left = tx[4] + fontAscent * Math.sin(angle); top = tx[5] - fontAscent * Math.cos(angle); } textDiv.style.left = `${left}px`; textDiv.style.top = `${top}px`; textDiv.style.fontSize = `${fontHeight}px`; textDiv.style.fontFamily = style.fontFamily; textDiv.setAttribute("role", "presentation"); textDiv.textContent = geom.str; textDiv.dir = geom.dir; if (task._fontInspectorEnabled) { textDiv.dataset.fontName = geom.fontName; } if (angle !== 0) { textDivProperties.angle = angle * (180 / Math.PI); } let shouldScaleText = false; if (geom.str.length > 1 || task._enhanceTextSelection && AllWhitespaceRegexp.test(geom.str)) { shouldScaleText = true; } else if (geom.str !== " " && geom.transform[0] !== geom.transform[3]) { const absScaleX = Math.abs(geom.transform[0]), absScaleY = Math.abs(geom.transform[3]); if (absScaleX !== absScaleY && Math.max(absScaleX, absScaleY) / Math.min(absScaleX, absScaleY) > 1.5) { shouldScaleText = true; } } if (shouldScaleText) { if (style.vertical) { textDivProperties.canvasWidth = geom.height * task._viewport.scale; } else { textDivProperties.canvasWidth = geom.width * task._viewport.scale; } } task._textDivProperties.set(textDiv, textDivProperties); if (task._textContentStream) { task._layoutText(textDiv); } if (task._enhanceTextSelection && textDivProperties.hasText) { let angleCos = 1, angleSin = 0; if (angle !== 0) { angleCos = Math.cos(angle); angleSin = Math.sin(angle); } const divWidth = (style.vertical ? geom.height : geom.width) * task._viewport.scale; const divHeight = fontHeight; let m, b; if (angle !== 0) { m = [angleCos, angleSin, -angleSin, angleCos, left, top]; b = _util.Util.getAxialAlignedBoundingBox([0, 0, divWidth, divHeight], m); } else { b = [left, top, left + divWidth, top + divHeight]; } task._bounds.push({ left: b[0], top: b[1], right: b[2], bottom: b[3], div: textDiv, size: [divWidth, divHeight], m }); } } function render(task) { if (task._canceled) { return; } const textDivs = task._textDivs; const capability = task._capability; const textDivsLength = textDivs.length; if (textDivsLength > MAX_TEXT_DIVS_TO_RENDER) { task._renderingDone = true; capability.resolve(); return; } if (!task._textContentStream) { for (let i = 0; i < textDivsLength; i++) { task._layoutText(textDivs[i]); } } task._renderingDone = true; capability.resolve(); } function findPositiveMin(ts, offset, count) { let result = 0; for (let i = 0; i < count; i++) { const t = ts[offset++]; if (t > 0) { result = result ? Math.min(t, result) : t; } } return result; } function expand(task) { const bounds = task._bounds; const viewport = task._viewport; const expanded = expandBounds(viewport.width, viewport.height, bounds); for (let i = 0; i < expanded.length; i++) { const div = bounds[i].div; const divProperties = task._textDivProperties.get(div); if (divProperties.angle === 0) { divProperties.paddingLeft = bounds[i].left - expanded[i].left; divProperties.paddingTop = bounds[i].top - expanded[i].top; divProperties.paddingRight = expanded[i].right - bounds[i].right; divProperties.paddingBottom = expanded[i].bottom - bounds[i].bottom; task._textDivProperties.set(div, divProperties); continue; } const e = expanded[i], b = bounds[i]; const m = b.m, c = m[0], s = m[1]; const points = [[0, 0], [0, b.size[1]], [b.size[0], 0], b.size]; const ts = new Float64Array(64); for (let j = 0, jj = points.length; j < jj; j++) { const t = _util.Util.applyTransform(points[j], m); ts[j + 0] = c && (e.left - t[0]) / c; ts[j + 4] = s && (e.top - t[1]) / s; ts[j + 8] = c && (e.right - t[0]) / c; ts[j + 12] = s && (e.bottom - t[1]) / s; ts[j + 16] = s && (e.left - t[0]) / -s; ts[j + 20] = c && (e.top - t[1]) / c; ts[j + 24] = s && (e.right - t[0]) / -s; ts[j + 28] = c && (e.bottom - t[1]) / c; ts[j + 32] = c && (e.left - t[0]) / -c; ts[j + 36] = s && (e.top - t[1]) / -s; ts[j + 40] = c && (e.right - t[0]) / -c; ts[j + 44] = s && (e.bottom - t[1]) / -s; ts[j + 48] = s && (e.left - t[0]) / s; ts[j + 52] = c && (e.top - t[1]) / -c; ts[j + 56] = s && (e.right - t[0]) / s; ts[j + 60] = c && (e.bottom - t[1]) / -c; } const boxScale = 1 + Math.min(Math.abs(c), Math.abs(s)); divProperties.paddingLeft = findPositiveMin(ts, 32, 16) / boxScale; divProperties.paddingTop = findPositiveMin(ts, 48, 16) / boxScale; divProperties.paddingRight = findPositiveMin(ts, 0, 16) / boxScale; divProperties.paddingBottom = findPositiveMin(ts, 16, 16) / boxScale; task._textDivProperties.set(div, divProperties); } } function expandBounds(width, height, boxes) { const bounds = boxes.map(function (box, i) { return { x1: box.left, y1: box.top, x2: box.right, y2: box.bottom, index: i, x1New: undefined, x2New: undefined }; }); expandBoundsLTR(width, bounds); const expanded = new Array(boxes.length); for (const b of bounds) { const i = b.index; expanded[i] = { left: b.x1New, top: 0, right: b.x2New, bottom: 0 }; } boxes.map(function (box, i) { const e = expanded[i], b = bounds[i]; b.x1 = box.top; b.y1 = width - e.right; b.x2 = box.bottom; b.y2 = width - e.left; b.index = i; b.x1New = undefined; b.x2New = undefined; }); expandBoundsLTR(height, bounds); for (const b of bounds) { const i = b.index; expanded[i].top = b.x1New; expanded[i].bottom = b.x2New; } return expanded; } function expandBoundsLTR(width, bounds) { bounds.sort(function (a, b) { return a.x1 - b.x1 || a.index - b.index; }); const fakeBoundary = { x1: -Infinity, y1: -Infinity, x2: 0, y2: Infinity, index: -1, x1New: 0, x2New: 0 }; const horizon = [{ start: -Infinity, end: Infinity, boundary: fakeBoundary }]; for (const boundary of bounds) { let i = 0; while (i < horizon.length && horizon[i].end <= boundary.y1) { i++; } let j = horizon.length - 1; while (j >= 0 && horizon[j].start >= boundary.y2) { j--; } let horizonPart, affectedBoundary; let q, k, maxXNew = -Infinity; for (q = i; q <= j; q++) { horizonPart = horizon[q]; affectedBoundary = horizonPart.boundary; let xNew; if (affectedBoundary.x2 > boundary.x1) { xNew = affectedBoundary.index > boundary.index ? affectedBoundary.x1New : boundary.x1; } else if (affectedBoundary.x2New === undefined) { xNew = (affectedBoundary.x2 + boundary.x1) / 2; } else { xNew = affectedBoundary.x2New; } if (xNew > maxXNew) { maxXNew = xNew; } } boundary.x1New = maxXNew; for (q = i; q <= j; q++) { horizonPart = horizon[q]; affectedBoundary = horizonPart.boundary; if (affectedBoundary.x2New === undefined) { if (affectedBoundary.x2 > boundary.x1) { if (affectedBoundary.index > boundary.index) { affectedBoundary.x2New = affectedBoundary.x2; } } else { affectedBoundary.x2New = maxXNew; } } else if (affectedBoundary.x2New > maxXNew) { affectedBoundary.x2New = Math.max(maxXNew, affectedBoundary.x2); } } const changedHorizon = []; let lastBoundary = null; for (q = i; q <= j; q++) { horizonPart = horizon[q]; affectedBoundary = horizonPart.boundary; const useBoundary = affectedBoundary.x2 > boundary.x2 ? affectedBoundary : boundary; if (lastBoundary === useBoundary) { changedHorizon[changedHorizon.length - 1].end = horizonPart.end; } else { changedHorizon.push({ start: horizonPart.start, end: horizonPart.end, boundary: useBoundary }); lastBoundary = useBoundary; } } if (horizon[i].start < boundary.y1) { changedHorizon[0].start = boundary.y1; changedHorizon.unshift({ start: horizon[i].start, end: boundary.y1, boundary: horizon[i].boundary }); } if (boundary.y2 < horizon[j].end) { changedHorizon[changedHorizon.length - 1].end = boundary.y2; changedHorizon.push({ start: boundary.y2, end: horizon[j].end, boundary: horizon[j].boundary }); } for (q = i; q <= j; q++) { horizonPart = horizon[q]; affectedBoundary = horizonPart.boundary; if (affectedBoundary.x2New !== undefined) { continue; } let used = false; for (k = i - 1; !used && k >= 0 && horizon[k].start >= affectedBoundary.y1; k--) { used = horizon[k].boundary === affectedBoundary; } for (k = j + 1; !used && k < horizon.length && horizon[k].end <= affectedBoundary.y2; k++) { used = horizon[k].boundary === affectedBoundary; } for (k = 0; !used && k < changedHorizon.length; k++) { used = changedHorizon[k].boundary === affectedBoundary; } if (!used) { affectedBoundary.x2New = maxXNew; } } Array.prototype.splice.apply(horizon, [i, j - i + 1].concat(changedHorizon)); } for (const horizonPart of horizon) { const affectedBoundary = horizonPart.boundary; if (affectedBoundary.x2New === undefined) { affectedBoundary.x2New = Math.max(width, affectedBoundary.x2); } } } class TextLayerRenderTask { constructor({ textContent, textContentStream, container, viewport, textDivs, textContentItemsStr, enhanceTextSelection }) { this._textContent = textContent; this._textContentStream = textContentStream; this._container = container; this._document = container.ownerDocument; this._viewport = viewport; this._textDivs = textDivs || []; this._textContentItemsStr = textContentItemsStr || []; this._enhanceTextSelection = !!enhanceTextSelection; this._fontInspectorEnabled = !!globalThis.FontInspector?.enabled; this._reader = null; this._layoutTextLastFontSize = null; this._layoutTextLastFontFamily = null; this._layoutTextCtx = null; this._textDivProperties = new WeakMap(); this._renderingDone = false; this._canceled = false; this._capability = (0, _util.createPromiseCapability)(); this._renderTimer = null; this._bounds = []; this._capability.promise.finally(() => { if (!this._enhanceTextSelection) { this._textDivProperties = null; } if (this._layoutTextCtx) { this._layoutTextCtx.canvas.width = 0; this._layoutTextCtx.canvas.height = 0; this._layoutTextCtx = null; } }).catch(() => {}); } get promise() { return this._capability.promise; } cancel() { this._canceled = true; if (this._reader) { this._reader.cancel(new _util.AbortException("TextLayer task cancelled.")).catch(() => {}); this._reader = null; } if (this._renderTimer !== null) { clearTimeout(this._renderTimer); this._renderTimer = null; } this._capability.reject(new Error("TextLayer task cancelled.")); } _processItems(items, styleCache) { for (let i = 0, len = items.length; i < len; i++) { if (items[i].str === undefined) { if (items[i].type === "beginMarkedContentProps" || items[i].type === "beginMarkedContent") { const parent = this._container; this._container = document.createElement("span"); this._container.classList.add("markedContent"); if (items[i].id !== null) { this._container.setAttribute("id", `${items[i].id}`); } parent.appendChild(this._container); } else if (items[i].type === "endMarkedContent") { this._container = this._container.parentNode; } continue; } this._textContentItemsStr.push(items[i].str); appendText(this, items[i], styleCache, this._layoutTextCtx); } } _layoutText(textDiv) { const textDivProperties = this._textDivProperties.get(textDiv); let transform = ""; if (textDivProperties.canvasWidth !== 0 && textDivProperties.hasText) { const { fontSize, fontFamily } = textDiv.style; if (fontSize !== this._layoutTextLastFontSize || fontFamily !== this._layoutTextLastFontFamily) { this._layoutTextCtx.font = `${fontSize} ${fontFamily}`; this._layoutTextLastFontSize = fontSize; this._layoutTextLastFontFamily = fontFamily; } const { width } = this._layoutTextCtx.measureText(textDiv.textContent); if (width > 0) { const scale = textDivProperties.canvasWidth / width; if (this._enhanceTextSelection) { textDivProperties.scale = scale; } transform = `scaleX(${scale})`; } } if (textDivProperties.angle !== 0) { transform = `rotate(${textDivProperties.angle}deg) ${transform}`; } if (transform.length > 0) { if (this._enhanceTextSelection) { textDivProperties.originalTransform = transform; } textDiv.style.transform = transform; } if (textDivProperties.hasText) { this._container.appendChild(textDiv); } if (textDivProperties.hasEOL) { const br = document.createElement("br"); br.setAttribute("role", "presentation"); this._container.appendChild(br); } } _render(timeout = 0) { const capability = (0, _util.createPromiseCapability)(); let styleCache = Object.create(null); const canvas = this._document.createElement("canvas"); canvas.height = canvas.width = DEFAULT_FONT_SIZE; canvas.mozOpaque = true; this._layoutTextCtx = canvas.getContext("2d", { alpha: false }); if (this._textContent) { const textItems = this._textContent.items; const textStyles = this._textContent.styles; this._processItems(textItems, textStyles); capability.resolve(); } else if (this._textContentStream) { const pump = () => { this._reader.read().then(({ value, done }) => { if (done) { capability.resolve(); return; } Object.assign(styleCache, value.styles); this._processItems(value.items, styleCache); pump(); }, capability.reject); }; this._reader = this._textContentStream.getReader(); pump(); } else { throw new Error('Neither "textContent" nor "textContentStream" parameters specified.'); } capability.promise.then(() => { styleCache = null; if (!timeout) { render(this); } else { this._renderTimer = setTimeout(() => { render(this); this._renderTimer = null; }, timeout); } }, this._capability.reject); } expandTextDivs(expandDivs = false) { if (!this._enhanceTextSelection || !this._renderingDone) { return; } if (this._bounds !== null) { expand(this); this._bounds = null; } const transformBuf = [], paddingBuf = []; for (let i = 0, ii = this._textDivs.length; i < ii; i++) { const div = this._textDivs[i]; const divProps = this._textDivProperties.get(div); if (!divProps.hasText) { continue; } if (expandDivs) { transformBuf.length = 0; paddingBuf.length = 0; if (divProps.originalTransform) { transformBuf.push(divProps.originalTransform); } if (divProps.paddingTop > 0) { paddingBuf.push(`${divProps.paddingTop}px`); transformBuf.push(`translateY(${-divProps.paddingTop}px)`); } else { paddingBuf.push(0); } if (divProps.paddingRight > 0) { paddingBuf.push(`${divProps.paddingRight / divProps.scale}px`); } else { paddingBuf.push(0); } if (divProps.paddingBottom > 0) { paddingBuf.push(`${divProps.paddingBottom}px`); } else { paddingBuf.push(0); } if (divProps.paddingLeft > 0) { paddingBuf.push(`${divProps.paddingLeft / divProps.scale}px`); transformBuf.push(`translateX(${-divProps.paddingLeft / divProps.scale}px)`); } else { paddingBuf.push(0); } div.style.padding = paddingBuf.join(" "); if (transformBuf.length) { div.style.transform = transformBuf.join(" "); } } else { div.style.padding = null; div.style.transform = divProps.originalTransform; } } } } function renderTextLayer(renderParameters) { const task = new TextLayerRenderTask({ textContent: renderParameters.textContent, textContentStream: renderParameters.textContentStream, container: renderParameters.container, viewport: renderParameters.viewport, textDivs: renderParameters.textDivs, textContentItemsStr: renderParameters.textContentItemsStr, enhanceTextSelection: renderParameters.enhanceTextSelection }); task._render(renderParameters.timeout); return task; } /***/ }), /* 22 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.SVGGraphics = void 0; var _util = __w_pdfjs_require__(2); var _display_utils = __w_pdfjs_require__(1); var _is_node = __w_pdfjs_require__(4); let SVGGraphics = class { constructor() { (0, _util.unreachable)("Not implemented: SVGGraphics"); } }; exports.SVGGraphics = SVGGraphics; { const SVG_DEFAULTS = { fontStyle: "normal", fontWeight: "normal", fillColor: "#000000" }; const XML_NS = "http://www.w3.org/XML/1998/namespace"; const XLINK_NS = "http://www.w3.org/1999/xlink"; const LINE_CAP_STYLES = ["butt", "round", "square"]; const LINE_JOIN_STYLES = ["miter", "round", "bevel"]; const convertImgDataToPng = function () { const PNG_HEADER = new Uint8Array([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]); const CHUNK_WRAPPER_SIZE = 12; const crcTable = new Int32Array(256); for (let i = 0; i < 256; i++) { let c = i; for (let h = 0; h < 8; h++) { if (c & 1) { c = 0xedb88320 ^ c >> 1 & 0x7fffffff; } else { c = c >> 1 & 0x7fffffff; } } crcTable[i] = c; } function crc32(data, start, end) { let crc = -1; for (let i = start; i < end; i++) { const a = (crc ^ data[i]) & 0xff; const b = crcTable[a]; crc = crc >>> 8 ^ b; } return crc ^ -1; } function writePngChunk(type, body, data, offset) { let p = offset; const len = body.length; data[p] = len >> 24 & 0xff; data[p + 1] = len >> 16 & 0xff; data[p + 2] = len >> 8 & 0xff; data[p + 3] = len & 0xff; p += 4; data[p] = type.charCodeAt(0) & 0xff; data[p + 1] = type.charCodeAt(1) & 0xff; data[p + 2] = type.charCodeAt(2) & 0xff; data[p + 3] = type.charCodeAt(3) & 0xff; p += 4; data.set(body, p); p += body.length; const crc = crc32(data, offset + 4, p); data[p] = crc >> 24 & 0xff; data[p + 1] = crc >> 16 & 0xff; data[p + 2] = crc >> 8 & 0xff; data[p + 3] = crc & 0xff; } function adler32(data, start, end) { let a = 1; let b = 0; for (let i = start; i < end; ++i) { a = (a + (data[i] & 0xff)) % 65521; b = (b + a) % 65521; } return b << 16 | a; } function deflateSync(literals) { if (!_is_node.isNodeJS) { return deflateSyncUncompressed(literals); } try { let input; if (parseInt(process.versions.node) >= 8) { input = literals; } else { input = Buffer.from(literals); } const output = require$$5.deflateSync(input, { level: 9 }); return output instanceof Uint8Array ? output : new Uint8Array(output); } catch (e) { (0, _util.warn)("Not compressing PNG because zlib.deflateSync is unavailable: " + e); } return deflateSyncUncompressed(literals); } function deflateSyncUncompressed(literals) { let len = literals.length; const maxBlockLength = 0xffff; const deflateBlocks = Math.ceil(len / maxBlockLength); const idat = new Uint8Array(2 + len + deflateBlocks * 5 + 4); let pi = 0; idat[pi++] = 0x78; idat[pi++] = 0x9c; let pos = 0; while (len > maxBlockLength) { idat[pi++] = 0x00; idat[pi++] = 0xff; idat[pi++] = 0xff; idat[pi++] = 0x00; idat[pi++] = 0x00; idat.set(literals.subarray(pos, pos + maxBlockLength), pi); pi += maxBlockLength; pos += maxBlockLength; len -= maxBlockLength; } idat[pi++] = 0x01; idat[pi++] = len & 0xff; idat[pi++] = len >> 8 & 0xff; idat[pi++] = ~len & 0xffff & 0xff; idat[pi++] = (~len & 0xffff) >> 8 & 0xff; idat.set(literals.subarray(pos), pi); pi += literals.length - pos; const adler = adler32(literals, 0, literals.length); idat[pi++] = adler >> 24 & 0xff; idat[pi++] = adler >> 16 & 0xff; idat[pi++] = adler >> 8 & 0xff; idat[pi++] = adler & 0xff; return idat; } function encode(imgData, kind, forceDataSchema, isMask) { const width = imgData.width; const height = imgData.height; let bitDepth, colorType, lineSize; const bytes = imgData.data; switch (kind) { case _util.ImageKind.GRAYSCALE_1BPP: colorType = 0; bitDepth = 1; lineSize = width + 7 >> 3; break; case _util.ImageKind.RGB_24BPP: colorType = 2; bitDepth = 8; lineSize = width * 3; break; case _util.ImageKind.RGBA_32BPP: colorType = 6; bitDepth = 8; lineSize = width * 4; break; default: throw new Error("invalid format"); } const literals = new Uint8Array((1 + lineSize) * height); let offsetLiterals = 0, offsetBytes = 0; for (let y = 0; y < height; ++y) { literals[offsetLiterals++] = 0; literals.set(bytes.subarray(offsetBytes, offsetBytes + lineSize), offsetLiterals); offsetBytes += lineSize; offsetLiterals += lineSize; } if (kind === _util.ImageKind.GRAYSCALE_1BPP && isMask) { offsetLiterals = 0; for (let y = 0; y < height; y++) { offsetLiterals++; for (let i = 0; i < lineSize; i++) { literals[offsetLiterals++] ^= 0xff; } } } const ihdr = new Uint8Array([width >> 24 & 0xff, width >> 16 & 0xff, width >> 8 & 0xff, width & 0xff, height >> 24 & 0xff, height >> 16 & 0xff, height >> 8 & 0xff, height & 0xff, bitDepth, colorType, 0x00, 0x00, 0x00]); const idat = deflateSync(literals); const pngLength = PNG_HEADER.length + CHUNK_WRAPPER_SIZE * 3 + ihdr.length + idat.length; const data = new Uint8Array(pngLength); let offset = 0; data.set(PNG_HEADER, offset); offset += PNG_HEADER.length; writePngChunk("IHDR", ihdr, data, offset); offset += CHUNK_WRAPPER_SIZE + ihdr.length; writePngChunk("IDATA", idat, data, offset); offset += CHUNK_WRAPPER_SIZE + idat.length; writePngChunk("IEND", new Uint8Array(0), data, offset); return (0, _util.createObjectURL)(data, "image/png", forceDataSchema); } return function convertImgDataToPng(imgData, forceDataSchema, isMask) { const kind = imgData.kind === undefined ? _util.ImageKind.GRAYSCALE_1BPP : imgData.kind; return encode(imgData, kind, forceDataSchema, isMask); }; }(); class SVGExtraState { constructor() { this.fontSizeScale = 1; this.fontWeight = SVG_DEFAULTS.fontWeight; this.fontSize = 0; this.textMatrix = _util.IDENTITY_MATRIX; this.fontMatrix = _util.FONT_IDENTITY_MATRIX; this.leading = 0; this.textRenderingMode = _util.TextRenderingMode.FILL; this.textMatrixScale = 1; this.x = 0; this.y = 0; this.lineX = 0; this.lineY = 0; this.charSpacing = 0; this.wordSpacing = 0; this.textHScale = 1; this.textRise = 0; this.fillColor = SVG_DEFAULTS.fillColor; this.strokeColor = "#000000"; this.fillAlpha = 1; this.strokeAlpha = 1; this.lineWidth = 1; this.lineJoin = ""; this.lineCap = ""; this.miterLimit = 0; this.dashArray = []; this.dashPhase = 0; this.dependencies = []; this.activeClipUrl = null; this.clipGroup = null; this.maskId = ""; } clone() { return Object.create(this); } setCurrentPoint(x, y) { this.x = x; this.y = y; } } function opListToTree(opList) { let opTree = []; const tmp = []; for (const opListElement of opList) { if (opListElement.fn === "save") { opTree.push({ fnId: 92, fn: "group", items: [] }); tmp.push(opTree); opTree = opTree[opTree.length - 1].items; continue; } if (opListElement.fn === "restore") { opTree = tmp.pop(); } else { opTree.push(opListElement); } } return opTree; } function pf(value) { if (Number.isInteger(value)) { return value.toString(); } const s = value.toFixed(10); let i = s.length - 1; if (s[i] !== "0") { return s; } do { i--; } while (s[i] === "0"); return s.substring(0, s[i] === "." ? i : i + 1); } function pm(m) { if (m[4] === 0 && m[5] === 0) { if (m[1] === 0 && m[2] === 0) { if (m[0] === 1 && m[3] === 1) { return ""; } return `scale(${pf(m[0])} ${pf(m[3])})`; } if (m[0] === m[3] && m[1] === -m[2]) { const a = Math.acos(m[0]) * 180 / Math.PI; return `rotate(${pf(a)})`; } } else { if (m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 1) { return `translate(${pf(m[4])} ${pf(m[5])})`; } } return `matrix(${pf(m[0])} ${pf(m[1])} ${pf(m[2])} ${pf(m[3])} ${pf(m[4])} ` + `${pf(m[5])})`; } let clipCount = 0; let maskCount = 0; let shadingCount = 0; exports.SVGGraphics = SVGGraphics = class { constructor(commonObjs, objs, forceDataSchema = false) { this.svgFactory = new _display_utils.DOMSVGFactory(); this.current = new SVGExtraState(); this.transformMatrix = _util.IDENTITY_MATRIX; this.transformStack = []; this.extraStack = []; this.commonObjs = commonObjs; this.objs = objs; this.pendingClip = null; this.pendingEOFill = false; this.embedFonts = false; this.embeddedFonts = Object.create(null); this.cssStyle = null; this.forceDataSchema = !!forceDataSchema; this._operatorIdMapping = []; for (const op in _util.OPS) { this._operatorIdMapping[_util.OPS[op]] = op; } } save() { this.transformStack.push(this.transformMatrix); const old = this.current; this.extraStack.push(old); this.current = old.clone(); } restore() { this.transformMatrix = this.transformStack.pop(); this.current = this.extraStack.pop(); this.pendingClip = null; this.tgrp = null; } group(items) { this.save(); this.executeOpTree(items); this.restore(); } loadDependencies(operatorList) { const fnArray = operatorList.fnArray; const argsArray = operatorList.argsArray; for (let i = 0, ii = fnArray.length; i < ii; i++) { if (fnArray[i] !== _util.OPS.dependency) { continue; } for (const obj of argsArray[i]) { const objsPool = obj.startsWith("g_") ? this.commonObjs : this.objs; const promise = new Promise(resolve => { objsPool.get(obj, resolve); }); this.current.dependencies.push(promise); } } return Promise.all(this.current.dependencies); } transform(a, b, c, d, e, f) { const transformMatrix = [a, b, c, d, e, f]; this.transformMatrix = _util.Util.transform(this.transformMatrix, transformMatrix); this.tgrp = null; } getSVG(operatorList, viewport) { this.viewport = viewport; const svgElement = this._initialize(viewport); return this.loadDependencies(operatorList).then(() => { this.transformMatrix = _util.IDENTITY_MATRIX; this.executeOpTree(this.convertOpList(operatorList)); return svgElement; }); } convertOpList(operatorList) { const operatorIdMapping = this._operatorIdMapping; const argsArray = operatorList.argsArray; const fnArray = operatorList.fnArray; const opList = []; for (let i = 0, ii = fnArray.length; i < ii; i++) { const fnId = fnArray[i]; opList.push({ fnId, fn: operatorIdMapping[fnId], args: argsArray[i] }); } return opListToTree(opList); } executeOpTree(opTree) { for (const opTreeElement of opTree) { const fn = opTreeElement.fn; const fnId = opTreeElement.fnId; const args = opTreeElement.args; switch (fnId | 0) { case _util.OPS.beginText: this.beginText(); break; case _util.OPS.dependency: break; case _util.OPS.setLeading: this.setLeading(args); break; case _util.OPS.setLeadingMoveText: this.setLeadingMoveText(args[0], args[1]); break; case _util.OPS.setFont: this.setFont(args); break; case _util.OPS.showText: this.showText(args[0]); break; case _util.OPS.showSpacedText: this.showText(args[0]); break; case _util.OPS.endText: this.endText(); break; case _util.OPS.moveText: this.moveText(args[0], args[1]); break; case _util.OPS.setCharSpacing: this.setCharSpacing(args[0]); break; case _util.OPS.setWordSpacing: this.setWordSpacing(args[0]); break; case _util.OPS.setHScale: this.setHScale(args[0]); break; case _util.OPS.setTextMatrix: this.setTextMatrix(args[0], args[1], args[2], args[3], args[4], args[5]); break; case _util.OPS.setTextRise: this.setTextRise(args[0]); break; case _util.OPS.setTextRenderingMode: this.setTextRenderingMode(args[0]); break; case _util.OPS.setLineWidth: this.setLineWidth(args[0]); break; case _util.OPS.setLineJoin: this.setLineJoin(args[0]); break; case _util.OPS.setLineCap: this.setLineCap(args[0]); break; case _util.OPS.setMiterLimit: this.setMiterLimit(args[0]); break; case _util.OPS.setFillRGBColor: this.setFillRGBColor(args[0], args[1], args[2]); break; case _util.OPS.setStrokeRGBColor: this.setStrokeRGBColor(args[0], args[1], args[2]); break; case _util.OPS.setStrokeColorN: this.setStrokeColorN(args); break; case _util.OPS.setFillColorN: this.setFillColorN(args); break; case _util.OPS.shadingFill: this.shadingFill(args[0]); break; case _util.OPS.setDash: this.setDash(args[0], args[1]); break; case _util.OPS.setRenderingIntent: this.setRenderingIntent(args[0]); break; case _util.OPS.setFlatness: this.setFlatness(args[0]); break; case _util.OPS.setGState: this.setGState(args[0]); break; case _util.OPS.fill: this.fill(); break; case _util.OPS.eoFill: this.eoFill(); break; case _util.OPS.stroke: this.stroke(); break; case _util.OPS.fillStroke: this.fillStroke(); break; case _util.OPS.eoFillStroke: this.eoFillStroke(); break; case _util.OPS.clip: this.clip("nonzero"); break; case _util.OPS.eoClip: this.clip("evenodd"); break; case _util.OPS.paintSolidColorImageMask: this.paintSolidColorImageMask(); break; case _util.OPS.paintImageXObject: this.paintImageXObject(args[0]); break; case _util.OPS.paintInlineImageXObject: this.paintInlineImageXObject(args[0]); break; case _util.OPS.paintImageMaskXObject: this.paintImageMaskXObject(args[0]); break; case _util.OPS.paintFormXObjectBegin: this.paintFormXObjectBegin(args[0], args[1]); break; case _util.OPS.paintFormXObjectEnd: this.paintFormXObjectEnd(); break; case _util.OPS.closePath: this.closePath(); break; case _util.OPS.closeStroke: this.closeStroke(); break; case _util.OPS.closeFillStroke: this.closeFillStroke(); break; case _util.OPS.closeEOFillStroke: this.closeEOFillStroke(); break; case _util.OPS.nextLine: this.nextLine(); break; case _util.OPS.transform: this.transform(args[0], args[1], args[2], args[3], args[4], args[5]); break; case _util.OPS.constructPath: this.constructPath(args[0], args[1]); break; case _util.OPS.endPath: this.endPath(); break; case 92: this.group(opTreeElement.items); break; default: (0, _util.warn)(`Unimplemented operator ${fn}`); break; } } } setWordSpacing(wordSpacing) { this.current.wordSpacing = wordSpacing; } setCharSpacing(charSpacing) { this.current.charSpacing = charSpacing; } nextLine() { this.moveText(0, this.current.leading); } setTextMatrix(a, b, c, d, e, f) { const current = this.current; current.textMatrix = current.lineMatrix = [a, b, c, d, e, f]; current.textMatrixScale = Math.hypot(a, b); current.x = current.lineX = 0; current.y = current.lineY = 0; current.xcoords = []; current.ycoords = []; current.tspan = this.svgFactory.createElement("svg:tspan"); current.tspan.setAttributeNS(null, "font-family", current.fontFamily); current.tspan.setAttributeNS(null, "font-size", `${pf(current.fontSize)}px`); current.tspan.setAttributeNS(null, "y", pf(-current.y)); current.txtElement = this.svgFactory.createElement("svg:text"); current.txtElement.appendChild(current.tspan); } beginText() { const current = this.current; current.x = current.lineX = 0; current.y = current.lineY = 0; current.textMatrix = _util.IDENTITY_MATRIX; current.lineMatrix = _util.IDENTITY_MATRIX; current.textMatrixScale = 1; current.tspan = this.svgFactory.createElement("svg:tspan"); current.txtElement = this.svgFactory.createElement("svg:text"); current.txtgrp = this.svgFactory.createElement("svg:g"); current.xcoords = []; current.ycoords = []; } moveText(x, y) { const current = this.current; current.x = current.lineX += x; current.y = current.lineY += y; current.xcoords = []; current.ycoords = []; current.tspan = this.svgFactory.createElement("svg:tspan"); current.tspan.setAttributeNS(null, "font-family", current.fontFamily); current.tspan.setAttributeNS(null, "font-size", `${pf(current.fontSize)}px`); current.tspan.setAttributeNS(null, "y", pf(-current.y)); } showText(glyphs) { const current = this.current; const font = current.font; const fontSize = current.fontSize; if (fontSize === 0) { return; } const fontSizeScale = current.fontSizeScale; const charSpacing = current.charSpacing; const wordSpacing = current.wordSpacing; const fontDirection = current.fontDirection; const textHScale = current.textHScale * fontDirection; const vertical = font.vertical; const spacingDir = vertical ? 1 : -1; const defaultVMetrics = font.defaultVMetrics; const widthAdvanceScale = fontSize * current.fontMatrix[0]; let x = 0; for (const glyph of glyphs) { if (glyph === null) { x += fontDirection * wordSpacing; continue; } else if ((0, _util.isNum)(glyph)) { x += spacingDir * glyph * fontSize / 1000; continue; } const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; const character = glyph.fontChar; let scaledX, scaledY; let width = glyph.width; if (vertical) { let vx; const vmetric = glyph.vmetric || defaultVMetrics; vx = glyph.vmetric ? vmetric[1] : width * 0.5; vx = -vx * widthAdvanceScale; const vy = vmetric[2] * widthAdvanceScale; width = vmetric ? -vmetric[0] : width; scaledX = vx / fontSizeScale; scaledY = (x + vy) / fontSizeScale; } else { scaledX = x / fontSizeScale; scaledY = 0; } if (glyph.isInFont || font.missingFile) { current.xcoords.push(current.x + scaledX); if (vertical) { current.ycoords.push(-current.y + scaledY); } current.tspan.textContent += character; } let charWidth; if (vertical) { charWidth = width * widthAdvanceScale - spacing * fontDirection; } else { charWidth = width * widthAdvanceScale + spacing * fontDirection; } x += charWidth; } current.tspan.setAttributeNS(null, "x", current.xcoords.map(pf).join(" ")); if (vertical) { current.tspan.setAttributeNS(null, "y", current.ycoords.map(pf).join(" ")); } else { current.tspan.setAttributeNS(null, "y", pf(-current.y)); } if (vertical) { current.y -= x; } else { current.x += x * textHScale; } current.tspan.setAttributeNS(null, "font-family", current.fontFamily); current.tspan.setAttributeNS(null, "font-size", `${pf(current.fontSize)}px`); if (current.fontStyle !== SVG_DEFAULTS.fontStyle) { current.tspan.setAttributeNS(null, "font-style", current.fontStyle); } if (current.fontWeight !== SVG_DEFAULTS.fontWeight) { current.tspan.setAttributeNS(null, "font-weight", current.fontWeight); } const fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK; if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { if (current.fillColor !== SVG_DEFAULTS.fillColor) { current.tspan.setAttributeNS(null, "fill", current.fillColor); } if (current.fillAlpha < 1) { current.tspan.setAttributeNS(null, "fill-opacity", current.fillAlpha); } } else if (current.textRenderingMode === _util.TextRenderingMode.ADD_TO_PATH) { current.tspan.setAttributeNS(null, "fill", "transparent"); } else { current.tspan.setAttributeNS(null, "fill", "none"); } if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { const lineWidthScale = 1 / (current.textMatrixScale || 1); this._setStrokeAttributes(current.tspan, lineWidthScale); } let textMatrix = current.textMatrix; if (current.textRise !== 0) { textMatrix = textMatrix.slice(); textMatrix[5] += current.textRise; } current.txtElement.setAttributeNS(null, "transform", `${pm(textMatrix)} scale(${pf(textHScale)}, -1)`); current.txtElement.setAttributeNS(XML_NS, "xml:space", "preserve"); current.txtElement.appendChild(current.tspan); current.txtgrp.appendChild(current.txtElement); this._ensureTransformGroup().appendChild(current.txtElement); } setLeadingMoveText(x, y) { this.setLeading(-y); this.moveText(x, y); } addFontStyle(fontObj) { if (!fontObj.data) { throw new Error("addFontStyle: No font data available, " + 'ensure that the "fontExtraProperties" API parameter is set.'); } if (!this.cssStyle) { this.cssStyle = this.svgFactory.createElement("svg:style"); this.cssStyle.setAttributeNS(null, "type", "text/css"); this.defs.appendChild(this.cssStyle); } const url = (0, _util.createObjectURL)(fontObj.data, fontObj.mimetype, this.forceDataSchema); this.cssStyle.textContent += `@font-face { font-family: "${fontObj.loadedName}";` + ` src: url(${url}); }\n`; } setFont(details) { const current = this.current; const fontObj = this.commonObjs.get(details[0]); let size = details[1]; current.font = fontObj; if (this.embedFonts && !fontObj.missingFile && !this.embeddedFonts[fontObj.loadedName]) { this.addFontStyle(fontObj); this.embeddedFonts[fontObj.loadedName] = fontObj; } current.fontMatrix = fontObj.fontMatrix || _util.FONT_IDENTITY_MATRIX; let bold = "normal"; if (fontObj.black) { bold = "900"; } else if (fontObj.bold) { bold = "bold"; } const italic = fontObj.italic ? "italic" : "normal"; if (size < 0) { size = -size; current.fontDirection = -1; } else { current.fontDirection = 1; } current.fontSize = size; current.fontFamily = fontObj.loadedName; current.fontWeight = bold; current.fontStyle = italic; current.tspan = this.svgFactory.createElement("svg:tspan"); current.tspan.setAttributeNS(null, "y", pf(-current.y)); current.xcoords = []; current.ycoords = []; } endText() { const current = this.current; if (current.textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG && current.txtElement?.hasChildNodes()) { current.element = current.txtElement; this.clip("nonzero"); this.endPath(); } } setLineWidth(width) { if (width > 0) { this.current.lineWidth = width; } } setLineCap(style) { this.current.lineCap = LINE_CAP_STYLES[style]; } setLineJoin(style) { this.current.lineJoin = LINE_JOIN_STYLES[style]; } setMiterLimit(limit) { this.current.miterLimit = limit; } setStrokeAlpha(strokeAlpha) { this.current.strokeAlpha = strokeAlpha; } setStrokeRGBColor(r, g, b) { this.current.strokeColor = _util.Util.makeHexColor(r, g, b); } setFillAlpha(fillAlpha) { this.current.fillAlpha = fillAlpha; } setFillRGBColor(r, g, b) { this.current.fillColor = _util.Util.makeHexColor(r, g, b); this.current.tspan = this.svgFactory.createElement("svg:tspan"); this.current.xcoords = []; this.current.ycoords = []; } setStrokeColorN(args) { this.current.strokeColor = this._makeColorN_Pattern(args); } setFillColorN(args) { this.current.fillColor = this._makeColorN_Pattern(args); } shadingFill(args) { const width = this.viewport.width; const height = this.viewport.height; const inv = _util.Util.inverseTransform(this.transformMatrix); const bl = _util.Util.applyTransform([0, 0], inv); const br = _util.Util.applyTransform([0, height], inv); const ul = _util.Util.applyTransform([width, 0], inv); const ur = _util.Util.applyTransform([width, height], inv); const x0 = Math.min(bl[0], br[0], ul[0], ur[0]); const y0 = Math.min(bl[1], br[1], ul[1], ur[1]); const x1 = Math.max(bl[0], br[0], ul[0], ur[0]); const y1 = Math.max(bl[1], br[1], ul[1], ur[1]); const rect = this.svgFactory.createElement("svg:rect"); rect.setAttributeNS(null, "x", x0); rect.setAttributeNS(null, "y", y0); rect.setAttributeNS(null, "width", x1 - x0); rect.setAttributeNS(null, "height", y1 - y0); rect.setAttributeNS(null, "fill", this._makeShadingPattern(args)); if (this.current.fillAlpha < 1) { rect.setAttributeNS(null, "fill-opacity", this.current.fillAlpha); } this._ensureTransformGroup().appendChild(rect); } _makeColorN_Pattern(args) { if (args[0] === "TilingPattern") { return this._makeTilingPattern(args); } return this._makeShadingPattern(args); } _makeTilingPattern(args) { const color = args[1]; const operatorList = args[2]; const matrix = args[3] || _util.IDENTITY_MATRIX; const [x0, y0, x1, y1] = args[4]; const xstep = args[5]; const ystep = args[6]; const paintType = args[7]; const tilingId = `shading${shadingCount++}`; const [tx0, ty0, tx1, ty1] = _util.Util.normalizeRect([..._util.Util.applyTransform([x0, y0], matrix), ..._util.Util.applyTransform([x1, y1], matrix)]); const [xscale, yscale] = _util.Util.singularValueDecompose2dScale(matrix); const txstep = xstep * xscale; const tystep = ystep * yscale; const tiling = this.svgFactory.createElement("svg:pattern"); tiling.setAttributeNS(null, "id", tilingId); tiling.setAttributeNS(null, "patternUnits", "userSpaceOnUse"); tiling.setAttributeNS(null, "width", txstep); tiling.setAttributeNS(null, "height", tystep); tiling.setAttributeNS(null, "x", `${tx0}`); tiling.setAttributeNS(null, "y", `${ty0}`); const svg = this.svg; const transformMatrix = this.transformMatrix; const fillColor = this.current.fillColor; const strokeColor = this.current.strokeColor; const bbox = this.svgFactory.create(tx1 - tx0, ty1 - ty0); this.svg = bbox; this.transformMatrix = matrix; if (paintType === 2) { const cssColor = _util.Util.makeHexColor(...color); this.current.fillColor = cssColor; this.current.strokeColor = cssColor; } this.executeOpTree(this.convertOpList(operatorList)); this.svg = svg; this.transformMatrix = transformMatrix; this.current.fillColor = fillColor; this.current.strokeColor = strokeColor; tiling.appendChild(bbox.childNodes[0]); this.defs.appendChild(tiling); return `url(#${tilingId})`; } _makeShadingPattern(args) { if (typeof args === "string") { args = this.objs.get(args); } switch (args[0]) { case "RadialAxial": const shadingId = `shading${shadingCount++}`; const colorStops = args[3]; let gradient; switch (args[1]) { case "axial": const point0 = args[4]; const point1 = args[5]; gradient = this.svgFactory.createElement("svg:linearGradient"); gradient.setAttributeNS(null, "id", shadingId); gradient.setAttributeNS(null, "gradientUnits", "userSpaceOnUse"); gradient.setAttributeNS(null, "x1", point0[0]); gradient.setAttributeNS(null, "y1", point0[1]); gradient.setAttributeNS(null, "x2", point1[0]); gradient.setAttributeNS(null, "y2", point1[1]); break; case "radial": const focalPoint = args[4]; const circlePoint = args[5]; const focalRadius = args[6]; const circleRadius = args[7]; gradient = this.svgFactory.createElement("svg:radialGradient"); gradient.setAttributeNS(null, "id", shadingId); gradient.setAttributeNS(null, "gradientUnits", "userSpaceOnUse"); gradient.setAttributeNS(null, "cx", circlePoint[0]); gradient.setAttributeNS(null, "cy", circlePoint[1]); gradient.setAttributeNS(null, "r", circleRadius); gradient.setAttributeNS(null, "fx", focalPoint[0]); gradient.setAttributeNS(null, "fy", focalPoint[1]); gradient.setAttributeNS(null, "fr", focalRadius); break; default: throw new Error(`Unknown RadialAxial type: ${args[1]}`); } for (const colorStop of colorStops) { const stop = this.svgFactory.createElement("svg:stop"); stop.setAttributeNS(null, "offset", colorStop[0]); stop.setAttributeNS(null, "stop-color", colorStop[1]); gradient.appendChild(stop); } this.defs.appendChild(gradient); return `url(#${shadingId})`; case "Mesh": (0, _util.warn)("Unimplemented pattern Mesh"); return null; case "Dummy": return "hotpink"; default: throw new Error(`Unknown IR type: ${args[0]}`); } } setDash(dashArray, dashPhase) { this.current.dashArray = dashArray; this.current.dashPhase = dashPhase; } constructPath(ops, args) { const current = this.current; let x = current.x, y = current.y; let d = []; let j = 0; for (const op of ops) { switch (op | 0) { case _util.OPS.rectangle: x = args[j++]; y = args[j++]; const width = args[j++]; const height = args[j++]; const xw = x + width; const yh = y + height; d.push("M", pf(x), pf(y), "L", pf(xw), pf(y), "L", pf(xw), pf(yh), "L", pf(x), pf(yh), "Z"); break; case _util.OPS.moveTo: x = args[j++]; y = args[j++]; d.push("M", pf(x), pf(y)); break; case _util.OPS.lineTo: x = args[j++]; y = args[j++]; d.push("L", pf(x), pf(y)); break; case _util.OPS.curveTo: x = args[j + 4]; y = args[j + 5]; d.push("C", pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3]), pf(x), pf(y)); j += 6; break; case _util.OPS.curveTo2: d.push("C", pf(x), pf(y), pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3])); x = args[j + 2]; y = args[j + 3]; j += 4; break; case _util.OPS.curveTo3: x = args[j + 2]; y = args[j + 3]; d.push("C", pf(args[j]), pf(args[j + 1]), pf(x), pf(y), pf(x), pf(y)); j += 4; break; case _util.OPS.closePath: d.push("Z"); break; } } d = d.join(" "); if (current.path && ops.length > 0 && ops[0] !== _util.OPS.rectangle && ops[0] !== _util.OPS.moveTo) { d = current.path.getAttributeNS(null, "d") + d; } else { current.path = this.svgFactory.createElement("svg:path"); this._ensureTransformGroup().appendChild(current.path); } current.path.setAttributeNS(null, "d", d); current.path.setAttributeNS(null, "fill", "none"); current.element = current.path; current.setCurrentPoint(x, y); } endPath() { const current = this.current; current.path = null; if (!this.pendingClip) { return; } if (!current.element) { this.pendingClip = null; return; } const clipId = `clippath${clipCount++}`; const clipPath = this.svgFactory.createElement("svg:clipPath"); clipPath.setAttributeNS(null, "id", clipId); clipPath.setAttributeNS(null, "transform", pm(this.transformMatrix)); const clipElement = current.element.cloneNode(true); if (this.pendingClip === "evenodd") { clipElement.setAttributeNS(null, "clip-rule", "evenodd"); } else { clipElement.setAttributeNS(null, "clip-rule", "nonzero"); } this.pendingClip = null; clipPath.appendChild(clipElement); this.defs.appendChild(clipPath); if (current.activeClipUrl) { current.clipGroup = null; for (const prev of this.extraStack) { prev.clipGroup = null; } clipPath.setAttributeNS(null, "clip-path", current.activeClipUrl); } current.activeClipUrl = `url(#${clipId})`; this.tgrp = null; } clip(type) { this.pendingClip = type; } closePath() { const current = this.current; if (current.path) { const d = `${current.path.getAttributeNS(null, "d")}Z`; current.path.setAttributeNS(null, "d", d); } } setLeading(leading) { this.current.leading = -leading; } setTextRise(textRise) { this.current.textRise = textRise; } setTextRenderingMode(textRenderingMode) { this.current.textRenderingMode = textRenderingMode; } setHScale(scale) { this.current.textHScale = scale / 100; } setRenderingIntent(intent) {} setFlatness(flatness) {} setGState(states) { for (const [key, value] of states) { switch (key) { case "LW": this.setLineWidth(value); break; case "LC": this.setLineCap(value); break; case "LJ": this.setLineJoin(value); break; case "ML": this.setMiterLimit(value); break; case "D": this.setDash(value[0], value[1]); break; case "RI": this.setRenderingIntent(value); break; case "FL": this.setFlatness(value); break; case "Font": this.setFont(value); break; case "CA": this.setStrokeAlpha(value); break; case "ca": this.setFillAlpha(value); break; default: (0, _util.warn)(`Unimplemented graphic state operator ${key}`); break; } } } fill() { const current = this.current; if (current.element) { current.element.setAttributeNS(null, "fill", current.fillColor); current.element.setAttributeNS(null, "fill-opacity", current.fillAlpha); this.endPath(); } } stroke() { const current = this.current; if (current.element) { this._setStrokeAttributes(current.element); current.element.setAttributeNS(null, "fill", "none"); this.endPath(); } } _setStrokeAttributes(element, lineWidthScale = 1) { const current = this.current; let dashArray = current.dashArray; if (lineWidthScale !== 1 && dashArray.length > 0) { dashArray = dashArray.map(function (value) { return lineWidthScale * value; }); } element.setAttributeNS(null, "stroke", current.strokeColor); element.setAttributeNS(null, "stroke-opacity", current.strokeAlpha); element.setAttributeNS(null, "stroke-miterlimit", pf(current.miterLimit)); element.setAttributeNS(null, "stroke-linecap", current.lineCap); element.setAttributeNS(null, "stroke-linejoin", current.lineJoin); element.setAttributeNS(null, "stroke-width", pf(lineWidthScale * current.lineWidth) + "px"); element.setAttributeNS(null, "stroke-dasharray", dashArray.map(pf).join(" ")); element.setAttributeNS(null, "stroke-dashoffset", pf(lineWidthScale * current.dashPhase) + "px"); } eoFill() { if (this.current.element) { this.current.element.setAttributeNS(null, "fill-rule", "evenodd"); } this.fill(); } fillStroke() { this.stroke(); this.fill(); } eoFillStroke() { if (this.current.element) { this.current.element.setAttributeNS(null, "fill-rule", "evenodd"); } this.fillStroke(); } closeStroke() { this.closePath(); this.stroke(); } closeFillStroke() { this.closePath(); this.fillStroke(); } closeEOFillStroke() { this.closePath(); this.eoFillStroke(); } paintSolidColorImageMask() { const rect = this.svgFactory.createElement("svg:rect"); rect.setAttributeNS(null, "x", "0"); rect.setAttributeNS(null, "y", "0"); rect.setAttributeNS(null, "width", "1px"); rect.setAttributeNS(null, "height", "1px"); rect.setAttributeNS(null, "fill", this.current.fillColor); this._ensureTransformGroup().appendChild(rect); } paintImageXObject(objId) { const imgData = objId.startsWith("g_") ? this.commonObjs.get(objId) : this.objs.get(objId); if (!imgData) { (0, _util.warn)(`Dependent image with object ID ${objId} is not ready yet`); return; } this.paintInlineImageXObject(imgData); } paintInlineImageXObject(imgData, mask) { const width = imgData.width; const height = imgData.height; const imgSrc = convertImgDataToPng(imgData, this.forceDataSchema, !!mask); const cliprect = this.svgFactory.createElement("svg:rect"); cliprect.setAttributeNS(null, "x", "0"); cliprect.setAttributeNS(null, "y", "0"); cliprect.setAttributeNS(null, "width", pf(width)); cliprect.setAttributeNS(null, "height", pf(height)); this.current.element = cliprect; this.clip("nonzero"); const imgEl = this.svgFactory.createElement("svg:image"); imgEl.setAttributeNS(XLINK_NS, "xlink:href", imgSrc); imgEl.setAttributeNS(null, "x", "0"); imgEl.setAttributeNS(null, "y", pf(-height)); imgEl.setAttributeNS(null, "width", pf(width) + "px"); imgEl.setAttributeNS(null, "height", pf(height) + "px"); imgEl.setAttributeNS(null, "transform", `scale(${pf(1 / width)} ${pf(-1 / height)})`); if (mask) { mask.appendChild(imgEl); } else { this._ensureTransformGroup().appendChild(imgEl); } } paintImageMaskXObject(imgData) { const current = this.current; const width = imgData.width; const height = imgData.height; const fillColor = current.fillColor; current.maskId = `mask${maskCount++}`; const mask = this.svgFactory.createElement("svg:mask"); mask.setAttributeNS(null, "id", current.maskId); const rect = this.svgFactory.createElement("svg:rect"); rect.setAttributeNS(null, "x", "0"); rect.setAttributeNS(null, "y", "0"); rect.setAttributeNS(null, "width", pf(width)); rect.setAttributeNS(null, "height", pf(height)); rect.setAttributeNS(null, "fill", fillColor); rect.setAttributeNS(null, "mask", `url(#${current.maskId})`); this.defs.appendChild(mask); this._ensureTransformGroup().appendChild(rect); this.paintInlineImageXObject(imgData, mask); } paintFormXObjectBegin(matrix, bbox) { if (Array.isArray(matrix) && matrix.length === 6) { this.transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]); } if (bbox) { const width = bbox[2] - bbox[0]; const height = bbox[3] - bbox[1]; const cliprect = this.svgFactory.createElement("svg:rect"); cliprect.setAttributeNS(null, "x", bbox[0]); cliprect.setAttributeNS(null, "y", bbox[1]); cliprect.setAttributeNS(null, "width", pf(width)); cliprect.setAttributeNS(null, "height", pf(height)); this.current.element = cliprect; this.clip("nonzero"); this.endPath(); } } paintFormXObjectEnd() {} _initialize(viewport) { const svg = this.svgFactory.create(viewport.width, viewport.height); const definitions = this.svgFactory.createElement("svg:defs"); svg.appendChild(definitions); this.defs = definitions; const rootGroup = this.svgFactory.createElement("svg:g"); rootGroup.setAttributeNS(null, "transform", pm(viewport.transform)); svg.appendChild(rootGroup); this.svg = rootGroup; return svg; } _ensureClipGroup() { if (!this.current.clipGroup) { const clipGroup = this.svgFactory.createElement("svg:g"); clipGroup.setAttributeNS(null, "clip-path", this.current.activeClipUrl); this.svg.appendChild(clipGroup); this.current.clipGroup = clipGroup; } return this.current.clipGroup; } _ensureTransformGroup() { if (!this.tgrp) { this.tgrp = this.svgFactory.createElement("svg:g"); this.tgrp.setAttributeNS(null, "transform", pm(this.transformMatrix)); if (this.current.activeClipUrl) { this._ensureClipGroup().appendChild(this.tgrp); } else { this.svg.appendChild(this.tgrp); } } return this.tgrp; } }; } /***/ }), /* 23 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PDFNodeStream = void 0; var _util = __w_pdfjs_require__(2); var _network_utils = __w_pdfjs_require__(24); const fs = require$$5; const http = require$$5; const https = require$$5; const url = require$$5; const fileUriRegex = /^file:\/\/\/[a-zA-Z]:\//; function parseUrl(sourceUrl) { const parsedUrl = url.parse(sourceUrl); if (parsedUrl.protocol === "file:" || parsedUrl.host) { return parsedUrl; } if (/^[a-z]:[/\\]/i.test(sourceUrl)) { return url.parse(`file:///${sourceUrl}`); } if (!parsedUrl.host) { parsedUrl.protocol = "file:"; } return parsedUrl; } class PDFNodeStream { constructor(source) { this.source = source; this.url = parseUrl(source.url); this.isHttp = this.url.protocol === "http:" || this.url.protocol === "https:"; this.isFsUrl = this.url.protocol === "file:"; this.httpHeaders = this.isHttp && source.httpHeaders || {}; this._fullRequestReader = null; this._rangeRequestReaders = []; } get _progressiveDataLength() { return this._fullRequestReader?._loaded ?? 0; } getFullReader() { (0, _util.assert)(!this._fullRequestReader, "PDFNodeStream.getFullReader can only be called once."); this._fullRequestReader = this.isFsUrl ? new PDFNodeStreamFsFullReader(this) : new PDFNodeStreamFullReader(this); return this._fullRequestReader; } getRangeReader(start, end) { if (end <= this._progressiveDataLength) { return null; } const rangeReader = this.isFsUrl ? new PDFNodeStreamFsRangeReader(this, start, end) : new PDFNodeStreamRangeReader(this, start, end); this._rangeRequestReaders.push(rangeReader); return rangeReader; } cancelAllRequests(reason) { if (this._fullRequestReader) { this._fullRequestReader.cancel(reason); } for (const reader of this._rangeRequestReaders.slice(0)) { reader.cancel(reason); } } } exports.PDFNodeStream = PDFNodeStream; class BaseFullReader { constructor(stream) { this._url = stream.url; this._done = false; this._storedError = null; this.onProgress = null; const source = stream.source; this._contentLength = source.length; this._loaded = 0; this._filename = null; this._disableRange = source.disableRange || false; this._rangeChunkSize = source.rangeChunkSize; if (!this._rangeChunkSize && !this._disableRange) { this._disableRange = true; } this._isStreamingSupported = !source.disableStream; this._isRangeSupported = !source.disableRange; this._readableStream = null; this._readCapability = (0, _util.createPromiseCapability)(); this._headersCapability = (0, _util.createPromiseCapability)(); } get headersReady() { return this._headersCapability.promise; } get filename() { return this._filename; } get contentLength() { return this._contentLength; } get isRangeSupported() { return this._isRangeSupported; } get isStreamingSupported() { return this._isStreamingSupported; } async read() { await this._readCapability.promise; if (this._done) { return { value: undefined, done: true }; } if (this._storedError) { throw this._storedError; } const chunk = this._readableStream.read(); if (chunk === null) { this._readCapability = (0, _util.createPromiseCapability)(); return this.read(); } this._loaded += chunk.length; if (this.onProgress) { this.onProgress({ loaded: this._loaded, total: this._contentLength }); } const buffer = new Uint8Array(chunk).buffer; return { value: buffer, done: false }; } cancel(reason) { if (!this._readableStream) { this._error(reason); return; } this._readableStream.destroy(reason); } _error(reason) { this._storedError = reason; this._readCapability.resolve(); } _setReadableStream(readableStream) { this._readableStream = readableStream; readableStream.on("readable", () => { this._readCapability.resolve(); }); readableStream.on("end", () => { readableStream.destroy(); this._done = true; this._readCapability.resolve(); }); readableStream.on("error", reason => { this._error(reason); }); if (!this._isStreamingSupported && this._isRangeSupported) { this._error(new _util.AbortException("streaming is disabled")); } if (this._storedError) { this._readableStream.destroy(this._storedError); } } } class BaseRangeReader { constructor(stream) { this._url = stream.url; this._done = false; this._storedError = null; this.onProgress = null; this._loaded = 0; this._readableStream = null; this._readCapability = (0, _util.createPromiseCapability)(); const source = stream.source; this._isStreamingSupported = !source.disableStream; } get isStreamingSupported() { return this._isStreamingSupported; } async read() { await this._readCapability.promise; if (this._done) { return { value: undefined, done: true }; } if (this._storedError) { throw this._storedError; } const chunk = this._readableStream.read(); if (chunk === null) { this._readCapability = (0, _util.createPromiseCapability)(); return this.read(); } this._loaded += chunk.length; if (this.onProgress) { this.onProgress({ loaded: this._loaded }); } const buffer = new Uint8Array(chunk).buffer; return { value: buffer, done: false }; } cancel(reason) { if (!this._readableStream) { this._error(reason); return; } this._readableStream.destroy(reason); } _error(reason) { this._storedError = reason; this._readCapability.resolve(); } _setReadableStream(readableStream) { this._readableStream = readableStream; readableStream.on("readable", () => { this._readCapability.resolve(); }); readableStream.on("end", () => { readableStream.destroy(); this._done = true; this._readCapability.resolve(); }); readableStream.on("error", reason => { this._error(reason); }); if (this._storedError) { this._readableStream.destroy(this._storedError); } } } function createRequestOptions(parsedUrl, headers) { return { protocol: parsedUrl.protocol, auth: parsedUrl.auth, host: parsedUrl.hostname, port: parsedUrl.port, path: parsedUrl.path, method: "GET", headers }; } class PDFNodeStreamFullReader extends BaseFullReader { constructor(stream) { super(stream); const handleResponse = response => { if (response.statusCode === 404) { const error = new _util.MissingPDFException(`Missing PDF "${this._url}".`); this._storedError = error; this._headersCapability.reject(error); return; } this._headersCapability.resolve(); this._setReadableStream(response); const getResponseHeader = name => { return this._readableStream.headers[name.toLowerCase()]; }; const { allowRangeRequests, suggestedLength } = (0, _network_utils.validateRangeRequestCapabilities)({ getResponseHeader, isHttp: stream.isHttp, rangeChunkSize: this._rangeChunkSize, disableRange: this._disableRange }); this._isRangeSupported = allowRangeRequests; this._contentLength = suggestedLength || this._contentLength; this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader); }; this._request = null; if (this._url.protocol === "http:") { this._request = http.request(createRequestOptions(this._url, stream.httpHeaders), handleResponse); } else { this._request = https.request(createRequestOptions(this._url, stream.httpHeaders), handleResponse); } this._request.on("error", reason => { this._storedError = reason; this._headersCapability.reject(reason); }); this._request.end(); } } class PDFNodeStreamRangeReader extends BaseRangeReader { constructor(stream, start, end) { super(stream); this._httpHeaders = {}; for (const property in stream.httpHeaders) { const value = stream.httpHeaders[property]; if (typeof value === "undefined") { continue; } this._httpHeaders[property] = value; } this._httpHeaders.Range = `bytes=${start}-${end - 1}`; const handleResponse = response => { if (response.statusCode === 404) { const error = new _util.MissingPDFException(`Missing PDF "${this._url}".`); this._storedError = error; return; } this._setReadableStream(response); }; this._request = null; if (this._url.protocol === "http:") { this._request = http.request(createRequestOptions(this._url, this._httpHeaders), handleResponse); } else { this._request = https.request(createRequestOptions(this._url, this._httpHeaders), handleResponse); } this._request.on("error", reason => { this._storedError = reason; }); this._request.end(); } } class PDFNodeStreamFsFullReader extends BaseFullReader { constructor(stream) { super(stream); let path = decodeURIComponent(this._url.path); if (fileUriRegex.test(this._url.href)) { path = path.replace(/^\//, ""); } fs.lstat(path, (error, stat) => { if (error) { if (error.code === "ENOENT") { error = new _util.MissingPDFException(`Missing PDF "${path}".`); } this._storedError = error; this._headersCapability.reject(error); return; } this._contentLength = stat.size; this._setReadableStream(fs.createReadStream(path)); this._headersCapability.resolve(); }); } } class PDFNodeStreamFsRangeReader extends BaseRangeReader { constructor(stream, start, end) { super(stream); let path = decodeURIComponent(this._url.path); if (fileUriRegex.test(this._url.href)) { path = path.replace(/^\//, ""); } this._setReadableStream(fs.createReadStream(path, { start, end: end - 1 })); } } /***/ }), /* 24 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.createResponseStatusError = createResponseStatusError; exports.extractFilenameFromHeader = extractFilenameFromHeader; exports.validateRangeRequestCapabilities = validateRangeRequestCapabilities; exports.validateResponseStatus = validateResponseStatus; var _util = __w_pdfjs_require__(2); var _content_disposition = __w_pdfjs_require__(25); var _display_utils = __w_pdfjs_require__(1); function validateRangeRequestCapabilities({ getResponseHeader, isHttp, rangeChunkSize, disableRange }) { (0, _util.assert)(rangeChunkSize > 0, "Range chunk size must be larger than zero"); const returnValues = { allowRangeRequests: false, suggestedLength: undefined }; const length = parseInt(getResponseHeader("Content-Length"), 10); if (!Number.isInteger(length)) { return returnValues; } returnValues.suggestedLength = length; if (length <= 2 * rangeChunkSize) { return returnValues; } if (disableRange || !isHttp) { return returnValues; } if (getResponseHeader("Accept-Ranges") !== "bytes") { return returnValues; } const contentEncoding = getResponseHeader("Content-Encoding") || "identity"; if (contentEncoding !== "identity") { return returnValues; } returnValues.allowRangeRequests = true; return returnValues; } function extractFilenameFromHeader(getResponseHeader) { const contentDisposition = getResponseHeader("Content-Disposition"); if (contentDisposition) { let filename = (0, _content_disposition.getFilenameFromContentDispositionHeader)(contentDisposition); if (filename.includes("%")) { try { filename = decodeURIComponent(filename); } catch (ex) {} } if ((0, _display_utils.isPdfFile)(filename)) { return filename; } } return null; } function createResponseStatusError(status, url) { if (status === 404 || status === 0 && url.startsWith("file:")) { return new _util.MissingPDFException('Missing PDF "' + url + '".'); } return new _util.UnexpectedResponseException(`Unexpected server response (${status}) while retrieving PDF "${url}".`, status); } function validateResponseStatus(status) { return status === 200 || status === 206; } /***/ }), /* 25 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.getFilenameFromContentDispositionHeader = getFilenameFromContentDispositionHeader; var _util = __w_pdfjs_require__(2); function getFilenameFromContentDispositionHeader(contentDisposition) { let needsEncodingFixup = true; let tmp = toParamRegExp("filename\\*", "i").exec(contentDisposition); if (tmp) { tmp = tmp[1]; let filename = rfc2616unquote(tmp); filename = unescape(filename); filename = rfc5987decode(filename); filename = rfc2047decode(filename); return fixupEncoding(filename); } tmp = rfc2231getparam(contentDisposition); if (tmp) { const filename = rfc2047decode(tmp); return fixupEncoding(filename); } tmp = toParamRegExp("filename", "i").exec(contentDisposition); if (tmp) { tmp = tmp[1]; let filename = rfc2616unquote(tmp); filename = rfc2047decode(filename); return fixupEncoding(filename); } function toParamRegExp(attributePattern, flags) { return new RegExp("(?:^|;)\\s*" + attributePattern + "\\s*=\\s*" + "(" + '[^";\\s][^;\\s]*' + "|" + '"(?:[^"\\\\]|\\\\"?)+"?' + ")", flags); } function textdecode(encoding, value) { if (encoding) { if (!/^[\x00-\xFF]+$/.test(value)) { return value; } try { const decoder = new TextDecoder(encoding, { fatal: true }); const buffer = (0, _util.stringToBytes)(value); value = decoder.decode(buffer); needsEncodingFixup = false; } catch (e) { if (/^utf-?8$/i.test(encoding)) { try { value = decodeURIComponent(escape(value)); needsEncodingFixup = false; } catch (err) {} } } } return value; } function fixupEncoding(value) { if (needsEncodingFixup && /[\x80-\xff]/.test(value)) { value = textdecode("utf-8", value); if (needsEncodingFixup) { value = textdecode("iso-8859-1", value); } } return value; } function rfc2231getparam(contentDispositionStr) { const matches = []; let match; const iter = toParamRegExp("filename\\*((?!0\\d)\\d+)(\\*?)", "ig"); while ((match = iter.exec(contentDispositionStr)) !== null) { let [, n, quot, part] = match; n = parseInt(n, 10); if (n in matches) { if (n === 0) { break; } continue; } matches[n] = [quot, part]; } const parts = []; for (let n = 0; n < matches.length; ++n) { if (!(n in matches)) { break; } let [quot, part] = matches[n]; part = rfc2616unquote(part); if (quot) { part = unescape(part); if (n === 0) { part = rfc5987decode(part); } } parts.push(part); } return parts.join(""); } function rfc2616unquote(value) { if (value.startsWith('"')) { const parts = value.slice(1).split('\\"'); for (let i = 0; i < parts.length; ++i) { const quotindex = parts[i].indexOf('"'); if (quotindex !== -1) { parts[i] = parts[i].slice(0, quotindex); parts.length = i + 1; } parts[i] = parts[i].replace(/\\(.)/g, "$1"); } value = parts.join('"'); } return value; } function rfc5987decode(extvalue) { const encodingend = extvalue.indexOf("'"); if (encodingend === -1) { return extvalue; } const encoding = extvalue.slice(0, encodingend); const langvalue = extvalue.slice(encodingend + 1); const value = langvalue.replace(/^[^']*'/, ""); return textdecode(encoding, value); } function rfc2047decode(value) { if (!value.startsWith("=?") || /[\x00-\x19\x80-\xff]/.test(value)) { return value; } return value.replace(/=\?([\w-]*)\?([QqBb])\?((?:[^?]|\?(?!=))*)\?=/g, function (matches, charset, encoding, text) { if (encoding === "q" || encoding === "Q") { text = text.replace(/_/g, " "); text = text.replace(/=([0-9a-fA-F]{2})/g, function (match, hex) { return String.fromCharCode(parseInt(hex, 16)); }); return textdecode(charset, text); } try { text = atob(text); } catch (e) {} return textdecode(charset, text); }); } return ""; } /***/ }), /* 26 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PDFNetworkStream = void 0; var _util = __w_pdfjs_require__(2); var _network_utils = __w_pdfjs_require__(24); const OK_RESPONSE = 200; const PARTIAL_CONTENT_RESPONSE = 206; function getArrayBuffer(xhr) { const data = xhr.response; if (typeof data !== "string") { return data; } const array = (0, _util.stringToBytes)(data); return array.buffer; } class NetworkManager { constructor(url, args = {}) { this.url = url; this.isHttp = /^https?:/i.test(url); this.httpHeaders = this.isHttp && args.httpHeaders || Object.create(null); this.withCredentials = args.withCredentials || false; this.getXhr = args.getXhr || function NetworkManager_getXhr() { return new XMLHttpRequest(); }; this.currXhrId = 0; this.pendingRequests = Object.create(null); } requestRange(begin, end, listeners) { const args = { begin, end }; for (const prop in listeners) { args[prop] = listeners[prop]; } return this.request(args); } requestFull(listeners) { return this.request(listeners); } request(args) { const xhr = this.getXhr(); const xhrId = this.currXhrId++; const pendingRequest = this.pendingRequests[xhrId] = { xhr }; xhr.open("GET", this.url); xhr.withCredentials = this.withCredentials; for (const property in this.httpHeaders) { const value = this.httpHeaders[property]; if (typeof value === "undefined") { continue; } xhr.setRequestHeader(property, value); } if (this.isHttp && "begin" in args && "end" in args) { xhr.setRequestHeader("Range", `bytes=${args.begin}-${args.end - 1}`); pendingRequest.expectedStatus = PARTIAL_CONTENT_RESPONSE; } else { pendingRequest.expectedStatus = OK_RESPONSE; } xhr.responseType = "arraybuffer"; if (args.onError) { xhr.onerror = function (evt) { args.onError(xhr.status); }; } xhr.onreadystatechange = this.onStateChange.bind(this, xhrId); xhr.onprogress = this.onProgress.bind(this, xhrId); pendingRequest.onHeadersReceived = args.onHeadersReceived; pendingRequest.onDone = args.onDone; pendingRequest.onError = args.onError; pendingRequest.onProgress = args.onProgress; xhr.send(null); return xhrId; } onProgress(xhrId, evt) { const pendingRequest = this.pendingRequests[xhrId]; if (!pendingRequest) { return; } pendingRequest.onProgress?.(evt); } onStateChange(xhrId, evt) { const pendingRequest = this.pendingRequests[xhrId]; if (!pendingRequest) { return; } const xhr = pendingRequest.xhr; if (xhr.readyState >= 2 && pendingRequest.onHeadersReceived) { pendingRequest.onHeadersReceived(); delete pendingRequest.onHeadersReceived; } if (xhr.readyState !== 4) { return; } if (!(xhrId in this.pendingRequests)) { return; } delete this.pendingRequests[xhrId]; if (xhr.status === 0 && this.isHttp) { pendingRequest.onError?.(xhr.status); return; } const xhrStatus = xhr.status || OK_RESPONSE; const ok_response_on_range_request = xhrStatus === OK_RESPONSE && pendingRequest.expectedStatus === PARTIAL_CONTENT_RESPONSE; if (!ok_response_on_range_request && xhrStatus !== pendingRequest.expectedStatus) { pendingRequest.onError?.(xhr.status); return; } const chunk = getArrayBuffer(xhr); if (xhrStatus === PARTIAL_CONTENT_RESPONSE) { const rangeHeader = xhr.getResponseHeader("Content-Range"); const matches = /bytes (\d+)-(\d+)\/(\d+)/.exec(rangeHeader); pendingRequest.onDone({ begin: parseInt(matches[1], 10), chunk }); } else if (chunk) { pendingRequest.onDone({ begin: 0, chunk }); } else { pendingRequest.onError?.(xhr.status); } } getRequestXhr(xhrId) { return this.pendingRequests[xhrId].xhr; } isPendingRequest(xhrId) { return xhrId in this.pendingRequests; } abortRequest(xhrId) { const xhr = this.pendingRequests[xhrId].xhr; delete this.pendingRequests[xhrId]; xhr.abort(); } } class PDFNetworkStream { constructor(source) { this._source = source; this._manager = new NetworkManager(source.url, { httpHeaders: source.httpHeaders, withCredentials: source.withCredentials }); this._rangeChunkSize = source.rangeChunkSize; this._fullRequestReader = null; this._rangeRequestReaders = []; } _onRangeRequestReaderClosed(reader) { const i = this._rangeRequestReaders.indexOf(reader); if (i >= 0) { this._rangeRequestReaders.splice(i, 1); } } getFullReader() { (0, _util.assert)(!this._fullRequestReader, "PDFNetworkStream.getFullReader can only be called once."); this._fullRequestReader = new PDFNetworkStreamFullRequestReader(this._manager, this._source); return this._fullRequestReader; } getRangeReader(begin, end) { const reader = new PDFNetworkStreamRangeRequestReader(this._manager, begin, end); reader.onClosed = this._onRangeRequestReaderClosed.bind(this); this._rangeRequestReaders.push(reader); return reader; } cancelAllRequests(reason) { this._fullRequestReader?.cancel(reason); for (const reader of this._rangeRequestReaders.slice(0)) { reader.cancel(reason); } } } exports.PDFNetworkStream = PDFNetworkStream; class PDFNetworkStreamFullRequestReader { constructor(manager, source) { this._manager = manager; const args = { onHeadersReceived: this._onHeadersReceived.bind(this), onDone: this._onDone.bind(this), onError: this._onError.bind(this), onProgress: this._onProgress.bind(this) }; this._url = source.url; this._fullRequestId = manager.requestFull(args); this._headersReceivedCapability = (0, _util.createPromiseCapability)(); this._disableRange = source.disableRange || false; this._contentLength = source.length; this._rangeChunkSize = source.rangeChunkSize; if (!this._rangeChunkSize && !this._disableRange) { this._disableRange = true; } this._isStreamingSupported = false; this._isRangeSupported = false; this._cachedChunks = []; this._requests = []; this._done = false; this._storedError = undefined; this._filename = null; this.onProgress = null; } _onHeadersReceived() { const fullRequestXhrId = this._fullRequestId; const fullRequestXhr = this._manager.getRequestXhr(fullRequestXhrId); const getResponseHeader = name => { return fullRequestXhr.getResponseHeader(name); }; const { allowRangeRequests, suggestedLength } = (0, _network_utils.validateRangeRequestCapabilities)({ getResponseHeader, isHttp: this._manager.isHttp, rangeChunkSize: this._rangeChunkSize, disableRange: this._disableRange }); if (allowRangeRequests) { this._isRangeSupported = true; } this._contentLength = suggestedLength || this._contentLength; this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader); if (this._isRangeSupported) { this._manager.abortRequest(fullRequestXhrId); } this._headersReceivedCapability.resolve(); } _onDone(data) { if (data) { if (this._requests.length > 0) { const requestCapability = this._requests.shift(); requestCapability.resolve({ value: data.chunk, done: false }); } else { this._cachedChunks.push(data.chunk); } } this._done = true; if (this._cachedChunks.length > 0) { return; } for (const requestCapability of this._requests) { requestCapability.resolve({ value: undefined, done: true }); } this._requests.length = 0; } _onError(status) { this._storedError = (0, _network_utils.createResponseStatusError)(status, this._url); this._headersReceivedCapability.reject(this._storedError); for (const requestCapability of this._requests) { requestCapability.reject(this._storedError); } this._requests.length = 0; this._cachedChunks.length = 0; } _onProgress(evt) { this.onProgress?.({ loaded: evt.loaded, total: evt.lengthComputable ? evt.total : this._contentLength }); } get filename() { return this._filename; } get isRangeSupported() { return this._isRangeSupported; } get isStreamingSupported() { return this._isStreamingSupported; } get contentLength() { return this._contentLength; } get headersReady() { return this._headersReceivedCapability.promise; } async read() { if (this._storedError) { throw this._storedError; } if (this._cachedChunks.length > 0) { const chunk = this._cachedChunks.shift(); return { value: chunk, done: false }; } if (this._done) { return { value: undefined, done: true }; } const requestCapability = (0, _util.createPromiseCapability)(); this._requests.push(requestCapability); return requestCapability.promise; } cancel(reason) { this._done = true; this._headersReceivedCapability.reject(reason); for (const requestCapability of this._requests) { requestCapability.resolve({ value: undefined, done: true }); } this._requests.length = 0; if (this._manager.isPendingRequest(this._fullRequestId)) { this._manager.abortRequest(this._fullRequestId); } this._fullRequestReader = null; } } class PDFNetworkStreamRangeRequestReader { constructor(manager, begin, end) { this._manager = manager; const args = { onDone: this._onDone.bind(this), onError: this._onError.bind(this), onProgress: this._onProgress.bind(this) }; this._url = manager.url; this._requestId = manager.requestRange(begin, end, args); this._requests = []; this._queuedChunk = null; this._done = false; this._storedError = undefined; this.onProgress = null; this.onClosed = null; } _close() { this.onClosed?.(this); } _onDone(data) { const chunk = data.chunk; if (this._requests.length > 0) { const requestCapability = this._requests.shift(); requestCapability.resolve({ value: chunk, done: false }); } else { this._queuedChunk = chunk; } this._done = true; for (const requestCapability of this._requests) { requestCapability.resolve({ value: undefined, done: true }); } this._requests.length = 0; this._close(); } _onError(status) { this._storedError = (0, _network_utils.createResponseStatusError)(status, this._url); for (const requestCapability of this._requests) { requestCapability.reject(this._storedError); } this._requests.length = 0; this._queuedChunk = null; } _onProgress(evt) { if (!this.isStreamingSupported) { this.onProgress?.({ loaded: evt.loaded }); } } get isStreamingSupported() { return false; } async read() { if (this._storedError) { throw this._storedError; } if (this._queuedChunk !== null) { const chunk = this._queuedChunk; this._queuedChunk = null; return { value: chunk, done: false }; } if (this._done) { return { value: undefined, done: true }; } const requestCapability = (0, _util.createPromiseCapability)(); this._requests.push(requestCapability); return requestCapability.promise; } cancel(reason) { this._done = true; for (const requestCapability of this._requests) { requestCapability.resolve({ value: undefined, done: true }); } this._requests.length = 0; if (this._manager.isPendingRequest(this._requestId)) { this._manager.abortRequest(this._requestId); } this._close(); } } /***/ }), /* 27 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PDFFetchStream = void 0; var _util = __w_pdfjs_require__(2); var _network_utils = __w_pdfjs_require__(24); function createFetchOptions(headers, withCredentials, abortController) { return { method: "GET", headers, signal: abortController?.signal, mode: "cors", credentials: withCredentials ? "include" : "same-origin", redirect: "follow" }; } function createHeaders(httpHeaders) { const headers = new Headers(); for (const property in httpHeaders) { const value = httpHeaders[property]; if (typeof value === "undefined") { continue; } headers.append(property, value); } return headers; } class PDFFetchStream { constructor(source) { this.source = source; this.isHttp = /^https?:/i.test(source.url); this.httpHeaders = this.isHttp && source.httpHeaders || {}; this._fullRequestReader = null; this._rangeRequestReaders = []; } get _progressiveDataLength() { return this._fullRequestReader?._loaded ?? 0; } getFullReader() { (0, _util.assert)(!this._fullRequestReader, "PDFFetchStream.getFullReader can only be called once."); this._fullRequestReader = new PDFFetchStreamReader(this); return this._fullRequestReader; } getRangeReader(begin, end) { if (end <= this._progressiveDataLength) { return null; } const reader = new PDFFetchStreamRangeReader(this, begin, end); this._rangeRequestReaders.push(reader); return reader; } cancelAllRequests(reason) { if (this._fullRequestReader) { this._fullRequestReader.cancel(reason); } for (const reader of this._rangeRequestReaders.slice(0)) { reader.cancel(reason); } } } exports.PDFFetchStream = PDFFetchStream; class PDFFetchStreamReader { constructor(stream) { this._stream = stream; this._reader = null; this._loaded = 0; this._filename = null; const source = stream.source; this._withCredentials = source.withCredentials || false; this._contentLength = source.length; this._headersCapability = (0, _util.createPromiseCapability)(); this._disableRange = source.disableRange || false; this._rangeChunkSize = source.rangeChunkSize; if (!this._rangeChunkSize && !this._disableRange) { this._disableRange = true; } if (typeof AbortController !== "undefined") { this._abortController = new AbortController(); } this._isStreamingSupported = !source.disableStream; this._isRangeSupported = !source.disableRange; this._headers = createHeaders(this._stream.httpHeaders); const url = source.url; fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(response => { if (!(0, _network_utils.validateResponseStatus)(response.status)) { throw (0, _network_utils.createResponseStatusError)(response.status, url); } this._reader = response.body.getReader(); this._headersCapability.resolve(); const getResponseHeader = name => { return response.headers.get(name); }; const { allowRangeRequests, suggestedLength } = (0, _network_utils.validateRangeRequestCapabilities)({ getResponseHeader, isHttp: this._stream.isHttp, rangeChunkSize: this._rangeChunkSize, disableRange: this._disableRange }); this._isRangeSupported = allowRangeRequests; this._contentLength = suggestedLength || this._contentLength; this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader); if (!this._isStreamingSupported && this._isRangeSupported) { this.cancel(new _util.AbortException("Streaming is disabled.")); } }).catch(this._headersCapability.reject); this.onProgress = null; } get headersReady() { return this._headersCapability.promise; } get filename() { return this._filename; } get contentLength() { return this._contentLength; } get isRangeSupported() { return this._isRangeSupported; } get isStreamingSupported() { return this._isStreamingSupported; } async read() { await this._headersCapability.promise; const { value, done } = await this._reader.read(); if (done) { return { value, done }; } this._loaded += value.byteLength; if (this.onProgress) { this.onProgress({ loaded: this._loaded, total: this._contentLength }); } const buffer = new Uint8Array(value).buffer; return { value: buffer, done: false }; } cancel(reason) { if (this._reader) { this._reader.cancel(reason); } if (this._abortController) { this._abortController.abort(); } } } class PDFFetchStreamRangeReader { constructor(stream, begin, end) { this._stream = stream; this._reader = null; this._loaded = 0; const source = stream.source; this._withCredentials = source.withCredentials || false; this._readCapability = (0, _util.createPromiseCapability)(); this._isStreamingSupported = !source.disableStream; if (typeof AbortController !== "undefined") { this._abortController = new AbortController(); } this._headers = createHeaders(this._stream.httpHeaders); this._headers.append("Range", `bytes=${begin}-${end - 1}`); const url = source.url; fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(response => { if (!(0, _network_utils.validateResponseStatus)(response.status)) { throw (0, _network_utils.createResponseStatusError)(response.status, url); } this._readCapability.resolve(); this._reader = response.body.getReader(); }).catch(this._readCapability.reject); this.onProgress = null; } get isStreamingSupported() { return this._isStreamingSupported; } async read() { await this._readCapability.promise; const { value, done } = await this._reader.read(); if (done) { return { value, done }; } this._loaded += value.byteLength; if (this.onProgress) { this.onProgress({ loaded: this._loaded }); } const buffer = new Uint8Array(value).buffer; return { value: buffer, done: false }; } cancel(reason) { if (this._reader) { this._reader.cancel(reason); } if (this._abortController) { this._abortController.abort(); } } } /***/ }) /******/ ]); /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __w_pdfjs_require__(moduleId) { /******/ // Check if module is in cache /******/ var cachedModule = __webpack_module_cache__[moduleId]; /******/ if (cachedModule !== undefined) { /******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleId] = { /******/ // no module.id needed /******/ // no module.loaded needed /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ __webpack_modules__[moduleId](module, module.exports, __w_pdfjs_require__); /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /************************************************************************/ var __webpack_exports__ = {}; // This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. (() => { var exports = __webpack_exports__; Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "AnnotationLayer", ({ enumerable: true, get: function () { return _annotation_layer.AnnotationLayer; } })); Object.defineProperty(exports, "AnnotationMode", ({ enumerable: true, get: function () { return _util.AnnotationMode; } })); Object.defineProperty(exports, "CMapCompressionType", ({ enumerable: true, get: function () { return _util.CMapCompressionType; } })); Object.defineProperty(exports, "GlobalWorkerOptions", ({ enumerable: true, get: function () { return _worker_options.GlobalWorkerOptions; } })); Object.defineProperty(exports, "InvalidPDFException", ({ enumerable: true, get: function () { return _util.InvalidPDFException; } })); Object.defineProperty(exports, "LinkTarget", ({ enumerable: true, get: function () { return _display_utils.LinkTarget; } })); Object.defineProperty(exports, "LoopbackPort", ({ enumerable: true, get: function () { return _api.LoopbackPort; } })); Object.defineProperty(exports, "MissingPDFException", ({ enumerable: true, get: function () { return _util.MissingPDFException; } })); Object.defineProperty(exports, "OPS", ({ enumerable: true, get: function () { return _util.OPS; } })); Object.defineProperty(exports, "PDFDataRangeTransport", ({ enumerable: true, get: function () { return _api.PDFDataRangeTransport; } })); Object.defineProperty(exports, "PDFDateString", ({ enumerable: true, get: function () { return _display_utils.PDFDateString; } })); Object.defineProperty(exports, "PDFWorker", ({ enumerable: true, get: function () { return _api.PDFWorker; } })); Object.defineProperty(exports, "PasswordResponses", ({ enumerable: true, get: function () { return _util.PasswordResponses; } })); Object.defineProperty(exports, "PermissionFlag", ({ enumerable: true, get: function () { return _util.PermissionFlag; } })); Object.defineProperty(exports, "PixelsPerInch", ({ enumerable: true, get: function () { return _display_utils.PixelsPerInch; } })); Object.defineProperty(exports, "RenderingCancelledException", ({ enumerable: true, get: function () { return _display_utils.RenderingCancelledException; } })); Object.defineProperty(exports, "SVGGraphics", ({ enumerable: true, get: function () { return _svg.SVGGraphics; } })); Object.defineProperty(exports, "UNSUPPORTED_FEATURES", ({ enumerable: true, get: function () { return _util.UNSUPPORTED_FEATURES; } })); Object.defineProperty(exports, "UnexpectedResponseException", ({ enumerable: true, get: function () { return _util.UnexpectedResponseException; } })); Object.defineProperty(exports, "Util", ({ enumerable: true, get: function () { return _util.Util; } })); Object.defineProperty(exports, "VerbosityLevel", ({ enumerable: true, get: function () { return _util.VerbosityLevel; } })); Object.defineProperty(exports, "XfaLayer", ({ enumerable: true, get: function () { return _xfa_layer.XfaLayer; } })); Object.defineProperty(exports, "addLinkAttributes", ({ enumerable: true, get: function () { return _display_utils.addLinkAttributes; } })); Object.defineProperty(exports, "build", ({ enumerable: true, get: function () { return _api.build; } })); Object.defineProperty(exports, "createObjectURL", ({ enumerable: true, get: function () { return _util.createObjectURL; } })); Object.defineProperty(exports, "createPromiseCapability", ({ enumerable: true, get: function () { return _util.createPromiseCapability; } })); Object.defineProperty(exports, "createValidAbsoluteUrl", ({ enumerable: true, get: function () { return _util.createValidAbsoluteUrl; } })); Object.defineProperty(exports, "getDocument", ({ enumerable: true, get: function () { return _api.getDocument; } })); Object.defineProperty(exports, "getFilenameFromUrl", ({ enumerable: true, get: function () { return _display_utils.getFilenameFromUrl; } })); Object.defineProperty(exports, "getPdfFilenameFromUrl", ({ enumerable: true, get: function () { return _display_utils.getPdfFilenameFromUrl; } })); Object.defineProperty(exports, "getXfaPageViewport", ({ enumerable: true, get: function () { return _display_utils.getXfaPageViewport; } })); Object.defineProperty(exports, "isPdfFile", ({ enumerable: true, get: function () { return _display_utils.isPdfFile; } })); Object.defineProperty(exports, "loadScript", ({ enumerable: true, get: function () { return _display_utils.loadScript; } })); Object.defineProperty(exports, "removeNullCharacters", ({ enumerable: true, get: function () { return _util.removeNullCharacters; } })); Object.defineProperty(exports, "renderTextLayer", ({ enumerable: true, get: function () { return _text_layer.renderTextLayer; } })); Object.defineProperty(exports, "shadow", ({ enumerable: true, get: function () { return _util.shadow; } })); Object.defineProperty(exports, "version", ({ enumerable: true, get: function () { return _api.version; } })); var _display_utils = __w_pdfjs_require__(1); var _util = __w_pdfjs_require__(2); var _api = __w_pdfjs_require__(6); var _annotation_layer = __w_pdfjs_require__(18); var _worker_options = __w_pdfjs_require__(12); var _is_node = __w_pdfjs_require__(4); var _text_layer = __w_pdfjs_require__(21); var _svg = __w_pdfjs_require__(22); var _xfa_layer = __w_pdfjs_require__(20); { if (_is_node.isNodeJS) { const { PDFNodeStream } = __w_pdfjs_require__(23); (0, _api.setPDFNetworkStreamFactory)(params => { return new PDFNodeStream(params); }); } else { const { PDFNetworkStream } = __w_pdfjs_require__(26); const { PDFFetchStream } = __w_pdfjs_require__(27); (0, _api.setPDFNetworkStreamFactory)(params => { if ((0, _display_utils.isValidFetchUrl)(params.url)) { return new PDFFetchStream(params); } return new PDFNetworkStream(params); }); } } })(); /******/ return __webpack_exports__; /******/ })() ; }); }); var pdf_worker = createCommonjsModule(function (module, exports) { /** * @licstart The following is the entire license notice for the * Javascript code in this page * * Copyright 2021 Mozilla Foundation * * 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 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * @licend The above is the entire license notice for the * Javascript code in this page */ (function webpackUniversalModuleDefinition(root, factory) { module.exports = factory(); })(commonjsGlobal, function() { return /******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = ([ /* 0 */, /* 1 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.WorkerTask = exports.WorkerMessageHandler = void 0; var _util = __w_pdfjs_require__(2); var _primitives = __w_pdfjs_require__(5); var _pdf_manager = __w_pdfjs_require__(7); var _writer = __w_pdfjs_require__(71); var _is_node = __w_pdfjs_require__(4); var _message_handler = __w_pdfjs_require__(99); var _worker_stream = __w_pdfjs_require__(100); var _core_utils = __w_pdfjs_require__(9); class WorkerTask { constructor(name) { this.name = name; this.terminated = false; this._capability = (0, _util.createPromiseCapability)(); } get finished() { return this._capability.promise; } finish() { this._capability.resolve(); } terminate() { this.terminated = true; } ensureNotTerminated() { if (this.terminated) { throw new Error("Worker task was terminated"); } } } exports.WorkerTask = WorkerTask; class WorkerMessageHandler { static setup(handler, port) { let testMessageProcessed = false; handler.on("test", function wphSetupTest(data) { if (testMessageProcessed) { return; } testMessageProcessed = true; handler.send("test", data instanceof Uint8Array && data[0] === 255); }); handler.on("configure", function wphConfigure(data) { (0, _util.setVerbosityLevel)(data.verbosity); }); handler.on("GetDocRequest", function wphSetupDoc(data) { return WorkerMessageHandler.createDocumentHandler(data, port); }); } static createDocumentHandler(docParams, port) { let pdfManager; let terminated = false; let cancelXHRs = null; const WorkerTasks = []; const verbosity = (0, _util.getVerbosityLevel)(); const apiVersion = docParams.apiVersion; const workerVersion = '2.12.313'; if (apiVersion !== workerVersion) { throw new Error(`The API version "${apiVersion}" does not match ` + `the Worker version "${workerVersion}".`); } const enumerableProperties = []; for (const property in []) { enumerableProperties.push(property); } if (enumerableProperties.length) { throw new Error("The `Array.prototype` contains unexpected enumerable properties: " + enumerableProperties.join(", ") + "; thus breaking e.g. `for...in` iteration of `Array`s."); } if (typeof ReadableStream === "undefined") { throw new Error("The browser/environment lacks native support for critical " + "functionality used by the PDF.js library (e.g. `ReadableStream`); " + "please use a `legacy`-build instead."); } const docId = docParams.docId; const docBaseUrl = docParams.docBaseUrl; const workerHandlerName = docParams.docId + "_worker"; let handler = new _message_handler.MessageHandler(workerHandlerName, docId, port); function ensureNotTerminated() { if (terminated) { throw new Error("Worker was terminated"); } } function startWorkerTask(task) { WorkerTasks.push(task); } function finishWorkerTask(task) { task.finish(); const i = WorkerTasks.indexOf(task); WorkerTasks.splice(i, 1); } async function loadDocument(recoveryMode) { await pdfManager.ensureDoc("checkHeader"); await pdfManager.ensureDoc("parseStartXRef"); await pdfManager.ensureDoc("parse", [recoveryMode]); await pdfManager.ensureDoc("checkFirstPage", [recoveryMode]); await pdfManager.ensureDoc("checkLastPage", [recoveryMode]); const isPureXfa = await pdfManager.ensureDoc("isPureXfa"); if (isPureXfa) { const task = new WorkerTask("loadXfaFonts"); startWorkerTask(task); await Promise.all([pdfManager.loadXfaFonts(handler, task).catch(reason => {}).then(() => finishWorkerTask(task)), pdfManager.loadXfaImages()]); } const [numPages, fingerprints] = await Promise.all([pdfManager.ensureDoc("numPages"), pdfManager.ensureDoc("fingerprints")]); const htmlForXfa = isPureXfa ? await pdfManager.ensureDoc("htmlForXfa") : null; return { numPages, fingerprints, htmlForXfa }; } function getPdfManager(data, evaluatorOptions, enableXfa) { const pdfManagerCapability = (0, _util.createPromiseCapability)(); let newPdfManager; const source = data.source; if (source.data) { try { newPdfManager = new _pdf_manager.LocalPdfManager(docId, source.data, source.password, handler, evaluatorOptions, enableXfa, docBaseUrl); pdfManagerCapability.resolve(newPdfManager); } catch (ex) { pdfManagerCapability.reject(ex); } return pdfManagerCapability.promise; } let pdfStream, cachedChunks = []; try { pdfStream = new _worker_stream.PDFWorkerStream(handler); } catch (ex) { pdfManagerCapability.reject(ex); return pdfManagerCapability.promise; } const fullRequest = pdfStream.getFullReader(); fullRequest.headersReady.then(function () { if (!fullRequest.isRangeSupported) { return; } const disableAutoFetch = source.disableAutoFetch || fullRequest.isStreamingSupported; newPdfManager = new _pdf_manager.NetworkPdfManager(docId, pdfStream, { msgHandler: handler, password: source.password, length: fullRequest.contentLength, disableAutoFetch, rangeChunkSize: source.rangeChunkSize }, evaluatorOptions, enableXfa, docBaseUrl); for (let i = 0; i < cachedChunks.length; i++) { newPdfManager.sendProgressiveData(cachedChunks[i]); } cachedChunks = []; pdfManagerCapability.resolve(newPdfManager); cancelXHRs = null; }).catch(function (reason) { pdfManagerCapability.reject(reason); cancelXHRs = null; }); let loaded = 0; const flushChunks = function () { const pdfFile = (0, _util.arraysToBytes)(cachedChunks); if (source.length && pdfFile.length !== source.length) { (0, _util.warn)("reported HTTP length is different from actual"); } try { newPdfManager = new _pdf_manager.LocalPdfManager(docId, pdfFile, source.password, handler, evaluatorOptions, enableXfa, docBaseUrl); pdfManagerCapability.resolve(newPdfManager); } catch (ex) { pdfManagerCapability.reject(ex); } cachedChunks = []; }; const readPromise = new Promise(function (resolve, reject) { const readChunk = function ({ value, done }) { try { ensureNotTerminated(); if (done) { if (!newPdfManager) { flushChunks(); } cancelXHRs = null; return; } loaded += (0, _util.arrayByteLength)(value); if (!fullRequest.isStreamingSupported) { handler.send("DocProgress", { loaded, total: Math.max(loaded, fullRequest.contentLength || 0) }); } if (newPdfManager) { newPdfManager.sendProgressiveData(value); } else { cachedChunks.push(value); } fullRequest.read().then(readChunk, reject); } catch (e) { reject(e); } }; fullRequest.read().then(readChunk, reject); }); readPromise.catch(function (e) { pdfManagerCapability.reject(e); cancelXHRs = null; }); cancelXHRs = function (reason) { pdfStream.cancelAllRequests(reason); }; return pdfManagerCapability.promise; } function setupDoc(data) { function onSuccess(doc) { ensureNotTerminated(); handler.send("GetDoc", { pdfInfo: doc }); } function onFailure(ex) { ensureNotTerminated(); if (ex instanceof _util.PasswordException) { const task = new WorkerTask(`PasswordException: response ${ex.code}`); startWorkerTask(task); handler.sendWithPromise("PasswordRequest", ex).then(function ({ password }) { finishWorkerTask(task); pdfManager.updatePassword(password); pdfManagerReady(); }).catch(function () { finishWorkerTask(task); handler.send("DocException", ex); }); } else if (ex instanceof _util.InvalidPDFException || ex instanceof _util.MissingPDFException || ex instanceof _util.UnexpectedResponseException || ex instanceof _util.UnknownErrorException) { handler.send("DocException", ex); } else { handler.send("DocException", new _util.UnknownErrorException(ex.message, ex.toString())); } } function pdfManagerReady() { ensureNotTerminated(); loadDocument(false).then(onSuccess, function (reason) { ensureNotTerminated(); if (!(reason instanceof _core_utils.XRefParseException)) { onFailure(reason); return; } pdfManager.requestLoadedStream(); pdfManager.onLoadedStream().then(function () { ensureNotTerminated(); loadDocument(true).then(onSuccess, onFailure); }); }); } ensureNotTerminated(); const evaluatorOptions = { maxImageSize: data.maxImageSize, disableFontFace: data.disableFontFace, ignoreErrors: data.ignoreErrors, isEvalSupported: data.isEvalSupported, fontExtraProperties: data.fontExtraProperties, useSystemFonts: data.useSystemFonts, cMapUrl: data.cMapUrl, standardFontDataUrl: data.standardFontDataUrl }; getPdfManager(data, evaluatorOptions, data.enableXfa).then(function (newPdfManager) { if (terminated) { newPdfManager.terminate(new _util.AbortException("Worker was terminated.")); throw new Error("Worker was terminated"); } pdfManager = newPdfManager; pdfManager.onLoadedStream().then(function (stream) { handler.send("DataLoaded", { length: stream.bytes.byteLength }); }); }).then(pdfManagerReady, onFailure); } handler.on("GetPage", function wphSetupGetPage(data) { return pdfManager.getPage(data.pageIndex).then(function (page) { return Promise.all([pdfManager.ensure(page, "rotate"), pdfManager.ensure(page, "ref"), pdfManager.ensure(page, "userUnit"), pdfManager.ensure(page, "view")]).then(function ([rotate, ref, userUnit, view]) { return { rotate, ref, userUnit, view }; }); }); }); handler.on("GetPageIndex", function wphSetupGetPageIndex({ ref }) { const pageRef = _primitives.Ref.get(ref.num, ref.gen); return pdfManager.ensureCatalog("getPageIndex", [pageRef]); }); handler.on("GetDestinations", function wphSetupGetDestinations(data) { return pdfManager.ensureCatalog("destinations"); }); handler.on("GetDestination", function wphSetupGetDestination(data) { return pdfManager.ensureCatalog("getDestination", [data.id]); }); handler.on("GetPageLabels", function wphSetupGetPageLabels(data) { return pdfManager.ensureCatalog("pageLabels"); }); handler.on("GetPageLayout", function wphSetupGetPageLayout(data) { return pdfManager.ensureCatalog("pageLayout"); }); handler.on("GetPageMode", function wphSetupGetPageMode(data) { return pdfManager.ensureCatalog("pageMode"); }); handler.on("GetViewerPreferences", function (data) { return pdfManager.ensureCatalog("viewerPreferences"); }); handler.on("GetOpenAction", function (data) { return pdfManager.ensureCatalog("openAction"); }); handler.on("GetAttachments", function wphSetupGetAttachments(data) { return pdfManager.ensureCatalog("attachments"); }); handler.on("GetJavaScript", function wphSetupGetJavaScript(data) { return pdfManager.ensureCatalog("javaScript"); }); handler.on("GetDocJSActions", function wphSetupGetDocJSActions(data) { return pdfManager.ensureCatalog("jsActions"); }); handler.on("GetPageJSActions", function ({ pageIndex }) { return pdfManager.getPage(pageIndex).then(function (page) { return pdfManager.ensure(page, "jsActions"); }); }); handler.on("GetOutline", function wphSetupGetOutline(data) { return pdfManager.ensureCatalog("documentOutline"); }); handler.on("GetOptionalContentConfig", function (data) { return pdfManager.ensureCatalog("optionalContentConfig"); }); handler.on("GetPermissions", function (data) { return pdfManager.ensureCatalog("permissions"); }); handler.on("GetMetadata", function wphSetupGetMetadata(data) { return Promise.all([pdfManager.ensureDoc("documentInfo"), pdfManager.ensureCatalog("metadata")]); }); handler.on("GetMarkInfo", function wphSetupGetMarkInfo(data) { return pdfManager.ensureCatalog("markInfo"); }); handler.on("GetData", function wphSetupGetData(data) { pdfManager.requestLoadedStream(); return pdfManager.onLoadedStream().then(function (stream) { return stream.bytes; }); }); handler.on("GetAnnotations", function ({ pageIndex, intent }) { return pdfManager.getPage(pageIndex).then(function (page) { return page.getAnnotationsData(intent); }); }); handler.on("GetFieldObjects", function (data) { return pdfManager.ensureDoc("fieldObjects"); }); handler.on("HasJSActions", function (data) { return pdfManager.ensureDoc("hasJSActions"); }); handler.on("GetCalculationOrderIds", function (data) { return pdfManager.ensureDoc("calculationOrderIds"); }); handler.on("SaveDocument", function ({ isPureXfa, numPages, annotationStorage, filename }) { pdfManager.requestLoadedStream(); const promises = [pdfManager.onLoadedStream(), pdfManager.ensureCatalog("acroForm"), pdfManager.ensureCatalog("acroFormRef"), pdfManager.ensureDoc("xref"), pdfManager.ensureDoc("startXRef")]; if (isPureXfa) { promises.push(pdfManager.serializeXfaData(annotationStorage)); } else { for (let pageIndex = 0; pageIndex < numPages; pageIndex++) { promises.push(pdfManager.getPage(pageIndex).then(function (page) { const task = new WorkerTask(`Save: page ${pageIndex}`); return page.save(handler, task, annotationStorage).finally(function () { finishWorkerTask(task); }); })); } } return Promise.all(promises).then(function ([stream, acroForm, acroFormRef, xref, startXRef, ...refs]) { let newRefs = []; let xfaData = null; if (isPureXfa) { xfaData = refs[0]; if (!xfaData) { return stream.bytes; } } else { for (const ref of refs) { newRefs = ref.filter(x => x !== null).reduce((a, b) => a.concat(b), newRefs); } if (newRefs.length === 0) { return stream.bytes; } } const xfa = acroForm instanceof _primitives.Dict && acroForm.get("XFA") || null; let xfaDatasetsRef = null; let hasXfaDatasetsEntry = false; if (Array.isArray(xfa)) { for (let i = 0, ii = xfa.length; i < ii; i += 2) { if (xfa[i] === "datasets") { xfaDatasetsRef = xfa[i + 1]; acroFormRef = null; hasXfaDatasetsEntry = true; } } if (xfaDatasetsRef === null) { xfaDatasetsRef = xref.getNewRef(); } } else if (xfa) { acroFormRef = null; (0, _util.warn)("Unsupported XFA type."); } let newXrefInfo = Object.create(null); if (xref.trailer) { const infoObj = Object.create(null); const xrefInfo = xref.trailer.get("Info") || null; if (xrefInfo instanceof _primitives.Dict) { xrefInfo.forEach((key, value) => { if ((0, _util.isString)(key) && (0, _util.isString)(value)) { infoObj[key] = (0, _util.stringToPDFString)(value); } }); } newXrefInfo = { rootRef: xref.trailer.getRaw("Root") || null, encryptRef: xref.trailer.getRaw("Encrypt") || null, newRef: xref.getNewRef(), infoRef: xref.trailer.getRaw("Info") || null, info: infoObj, fileIds: xref.trailer.get("ID") || null, startXRef, filename }; } xref.resetNewRef(); return (0, _writer.incrementalUpdate)({ originalData: stream.bytes, xrefInfo: newXrefInfo, newRefs, xref, hasXfa: !!xfa, xfaDatasetsRef, hasXfaDatasetsEntry, acroFormRef, acroForm, xfaData }); }); }); handler.on("GetOperatorList", function wphSetupRenderPage(data, sink) { const pageIndex = data.pageIndex; pdfManager.getPage(pageIndex).then(function (page) { const task = new WorkerTask(`GetOperatorList: page ${pageIndex}`); startWorkerTask(task); const start = verbosity >= _util.VerbosityLevel.INFOS ? Date.now() : 0; page.getOperatorList({ handler, sink, task, intent: data.intent, cacheKey: data.cacheKey, annotationStorage: data.annotationStorage }).then(function (operatorListInfo) { finishWorkerTask(task); if (start) { (0, _util.info)(`page=${pageIndex + 1} - getOperatorList: time=` + `${Date.now() - start}ms, len=${operatorListInfo.length}`); } sink.close(); }, function (reason) { finishWorkerTask(task); if (task.terminated) { return; } handler.send("UnsupportedFeature", { featureId: _util.UNSUPPORTED_FEATURES.errorOperatorList }); sink.error(reason); }); }); }); handler.on("GetTextContent", function wphExtractText(data, sink) { const pageIndex = data.pageIndex; pdfManager.getPage(pageIndex).then(function (page) { const task = new WorkerTask("GetTextContent: page " + pageIndex); startWorkerTask(task); const start = verbosity >= _util.VerbosityLevel.INFOS ? Date.now() : 0; page.extractTextContent({ handler, task, sink, normalizeWhitespace: data.normalizeWhitespace, includeMarkedContent: data.includeMarkedContent, combineTextItems: data.combineTextItems }).then(function () { finishWorkerTask(task); if (start) { (0, _util.info)(`page=${pageIndex + 1} - getTextContent: time=` + `${Date.now() - start}ms`); } sink.close(); }, function (reason) { finishWorkerTask(task); if (task.terminated) { return; } sink.error(reason); }); }); }); handler.on("GetStructTree", function wphGetStructTree(data) { return pdfManager.getPage(data.pageIndex).then(function (page) { return pdfManager.ensure(page, "getStructTree"); }); }); handler.on("FontFallback", function (data) { return pdfManager.fontFallback(data.id, handler); }); handler.on("Cleanup", function wphCleanup(data) { return pdfManager.cleanup(true); }); handler.on("Terminate", function wphTerminate(data) { terminated = true; const waitOn = []; if (pdfManager) { pdfManager.terminate(new _util.AbortException("Worker was terminated.")); const cleanupPromise = pdfManager.cleanup(); waitOn.push(cleanupPromise); pdfManager = null; } else { (0, _primitives.clearPrimitiveCaches)(); } if (cancelXHRs) { cancelXHRs(new _util.AbortException("Worker was terminated.")); } for (const task of WorkerTasks) { waitOn.push(task.finished); task.terminate(); } return Promise.all(waitOn).then(function () { handler.destroy(); handler = null; }); }); handler.on("Ready", function wphReady(data) { setupDoc(docParams); docParams = null; }); return workerHandlerName; } static initializeFromPort(port) { const handler = new _message_handler.MessageHandler("worker", "main", port); WorkerMessageHandler.setup(handler, port); handler.send("ready", null); } } exports.WorkerMessageHandler = WorkerMessageHandler; function isMessagePort(maybePort) { return typeof maybePort.postMessage === "function" && "onmessage" in maybePort; } if (typeof window === "undefined" && !_is_node.isNodeJS && typeof self !== "undefined" && isMessagePort(self)) { WorkerMessageHandler.initializeFromPort(self); } /***/ }), /* 2 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.VerbosityLevel = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.UNSUPPORTED_FEATURES = exports.TextRenderingMode = exports.StreamType = exports.RenderingIntentFlag = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.PageActionEventType = exports.OPS = exports.MissingPDFException = exports.IsLittleEndianCached = exports.IsEvalSupportedCached = exports.InvalidPDFException = exports.ImageKind = exports.IDENTITY_MATRIX = exports.FormatError = exports.FontType = exports.FONT_IDENTITY_MATRIX = exports.DocumentActionEventType = exports.CMapCompressionType = exports.BaseException = exports.AnnotationType = exports.AnnotationStateModelType = exports.AnnotationReviewState = exports.AnnotationReplyType = exports.AnnotationMode = exports.AnnotationMarkedState = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.AnnotationActionEventType = exports.AbortException = void 0; exports.arrayByteLength = arrayByteLength; exports.arraysToBytes = arraysToBytes; exports.assert = assert; exports.bytesToString = bytesToString; exports.createObjectURL = createObjectURL; exports.createPromiseCapability = createPromiseCapability; exports.createValidAbsoluteUrl = createValidAbsoluteUrl; exports.escapeString = escapeString; exports.getModificationDate = getModificationDate; exports.getVerbosityLevel = getVerbosityLevel; exports.info = info; exports.isArrayBuffer = isArrayBuffer; exports.isArrayEqual = isArrayEqual; exports.isAscii = isAscii; exports.isBool = isBool; exports.isNum = isNum; exports.isSameOrigin = isSameOrigin; exports.isString = isString; exports.objectFromMap = objectFromMap; exports.objectSize = objectSize; exports.removeNullCharacters = removeNullCharacters; exports.setVerbosityLevel = setVerbosityLevel; exports.shadow = shadow; exports.string32 = string32; exports.stringToBytes = stringToBytes; exports.stringToPDFString = stringToPDFString; exports.stringToUTF16BEString = stringToUTF16BEString; exports.stringToUTF8String = stringToUTF8String; exports.unreachable = unreachable; exports.utf8StringToString = utf8StringToString; exports.warn = warn; __w_pdfjs_require__(3); const IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0]; exports.IDENTITY_MATRIX = IDENTITY_MATRIX; const FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0]; exports.FONT_IDENTITY_MATRIX = FONT_IDENTITY_MATRIX; const RenderingIntentFlag = { ANY: 0x01, DISPLAY: 0x02, PRINT: 0x04, ANNOTATIONS_FORMS: 0x10, ANNOTATIONS_STORAGE: 0x20, ANNOTATIONS_DISABLE: 0x40, OPLIST: 0x100 }; exports.RenderingIntentFlag = RenderingIntentFlag; const AnnotationMode = { DISABLE: 0, ENABLE: 1, ENABLE_FORMS: 2, ENABLE_STORAGE: 3 }; exports.AnnotationMode = AnnotationMode; const PermissionFlag = { PRINT: 0x04, MODIFY_CONTENTS: 0x08, COPY: 0x10, MODIFY_ANNOTATIONS: 0x20, FILL_INTERACTIVE_FORMS: 0x100, COPY_FOR_ACCESSIBILITY: 0x200, ASSEMBLE: 0x400, PRINT_HIGH_QUALITY: 0x800 }; exports.PermissionFlag = PermissionFlag; const TextRenderingMode = { FILL: 0, STROKE: 1, FILL_STROKE: 2, INVISIBLE: 3, FILL_ADD_TO_PATH: 4, STROKE_ADD_TO_PATH: 5, FILL_STROKE_ADD_TO_PATH: 6, ADD_TO_PATH: 7, FILL_STROKE_MASK: 3, ADD_TO_PATH_FLAG: 4 }; exports.TextRenderingMode = TextRenderingMode; const ImageKind = { GRAYSCALE_1BPP: 1, RGB_24BPP: 2, RGBA_32BPP: 3 }; exports.ImageKind = ImageKind; const AnnotationType = { TEXT: 1, LINK: 2, FREETEXT: 3, LINE: 4, SQUARE: 5, CIRCLE: 6, POLYGON: 7, POLYLINE: 8, HIGHLIGHT: 9, UNDERLINE: 10, SQUIGGLY: 11, STRIKEOUT: 12, STAMP: 13, CARET: 14, INK: 15, POPUP: 16, FILEATTACHMENT: 17, SOUND: 18, MOVIE: 19, WIDGET: 20, SCREEN: 21, PRINTERMARK: 22, TRAPNET: 23, WATERMARK: 24, THREED: 25, REDACT: 26 }; exports.AnnotationType = AnnotationType; const AnnotationStateModelType = { MARKED: "Marked", REVIEW: "Review" }; exports.AnnotationStateModelType = AnnotationStateModelType; const AnnotationMarkedState = { MARKED: "Marked", UNMARKED: "Unmarked" }; exports.AnnotationMarkedState = AnnotationMarkedState; const AnnotationReviewState = { ACCEPTED: "Accepted", REJECTED: "Rejected", CANCELLED: "Cancelled", COMPLETED: "Completed", NONE: "None" }; exports.AnnotationReviewState = AnnotationReviewState; const AnnotationReplyType = { GROUP: "Group", REPLY: "R" }; exports.AnnotationReplyType = AnnotationReplyType; const AnnotationFlag = { INVISIBLE: 0x01, HIDDEN: 0x02, PRINT: 0x04, NOZOOM: 0x08, NOROTATE: 0x10, NOVIEW: 0x20, READONLY: 0x40, LOCKED: 0x80, TOGGLENOVIEW: 0x100, LOCKEDCONTENTS: 0x200 }; exports.AnnotationFlag = AnnotationFlag; const AnnotationFieldFlag = { READONLY: 0x0000001, REQUIRED: 0x0000002, NOEXPORT: 0x0000004, MULTILINE: 0x0001000, PASSWORD: 0x0002000, NOTOGGLETOOFF: 0x0004000, RADIO: 0x0008000, PUSHBUTTON: 0x0010000, COMBO: 0x0020000, EDIT: 0x0040000, SORT: 0x0080000, FILESELECT: 0x0100000, MULTISELECT: 0x0200000, DONOTSPELLCHECK: 0x0400000, DONOTSCROLL: 0x0800000, COMB: 0x1000000, RICHTEXT: 0x2000000, RADIOSINUNISON: 0x2000000, COMMITONSELCHANGE: 0x4000000 }; exports.AnnotationFieldFlag = AnnotationFieldFlag; const AnnotationBorderStyleType = { SOLID: 1, DASHED: 2, BEVELED: 3, INSET: 4, UNDERLINE: 5 }; exports.AnnotationBorderStyleType = AnnotationBorderStyleType; const AnnotationActionEventType = { E: "Mouse Enter", X: "Mouse Exit", D: "Mouse Down", U: "Mouse Up", Fo: "Focus", Bl: "Blur", PO: "PageOpen", PC: "PageClose", PV: "PageVisible", PI: "PageInvisible", K: "Keystroke", F: "Format", V: "Validate", C: "Calculate" }; exports.AnnotationActionEventType = AnnotationActionEventType; const DocumentActionEventType = { WC: "WillClose", WS: "WillSave", DS: "DidSave", WP: "WillPrint", DP: "DidPrint" }; exports.DocumentActionEventType = DocumentActionEventType; const PageActionEventType = { O: "PageOpen", C: "PageClose" }; exports.PageActionEventType = PageActionEventType; const StreamType = { UNKNOWN: "UNKNOWN", FLATE: "FLATE", LZW: "LZW", DCT: "DCT", JPX: "JPX", JBIG: "JBIG", A85: "A85", AHX: "AHX", CCF: "CCF", RLX: "RLX" }; exports.StreamType = StreamType; const FontType = { UNKNOWN: "UNKNOWN", TYPE1: "TYPE1", TYPE1STANDARD: "TYPE1STANDARD", TYPE1C: "TYPE1C", CIDFONTTYPE0: "CIDFONTTYPE0", CIDFONTTYPE0C: "CIDFONTTYPE0C", TRUETYPE: "TRUETYPE", CIDFONTTYPE2: "CIDFONTTYPE2", TYPE3: "TYPE3", OPENTYPE: "OPENTYPE", TYPE0: "TYPE0", MMTYPE1: "MMTYPE1" }; exports.FontType = FontType; const VerbosityLevel = { ERRORS: 0, WARNINGS: 1, INFOS: 5 }; exports.VerbosityLevel = VerbosityLevel; const CMapCompressionType = { NONE: 0, BINARY: 1, STREAM: 2 }; exports.CMapCompressionType = CMapCompressionType; const OPS = { dependency: 1, setLineWidth: 2, setLineCap: 3, setLineJoin: 4, setMiterLimit: 5, setDash: 6, setRenderingIntent: 7, setFlatness: 8, setGState: 9, save: 10, restore: 11, transform: 12, moveTo: 13, lineTo: 14, curveTo: 15, curveTo2: 16, curveTo3: 17, closePath: 18, rectangle: 19, stroke: 20, closeStroke: 21, fill: 22, eoFill: 23, fillStroke: 24, eoFillStroke: 25, closeFillStroke: 26, closeEOFillStroke: 27, endPath: 28, clip: 29, eoClip: 30, beginText: 31, endText: 32, setCharSpacing: 33, setWordSpacing: 34, setHScale: 35, setLeading: 36, setFont: 37, setTextRenderingMode: 38, setTextRise: 39, moveText: 40, setLeadingMoveText: 41, setTextMatrix: 42, nextLine: 43, showText: 44, showSpacedText: 45, nextLineShowText: 46, nextLineSetSpacingShowText: 47, setCharWidth: 48, setCharWidthAndBounds: 49, setStrokeColorSpace: 50, setFillColorSpace: 51, setStrokeColor: 52, setStrokeColorN: 53, setFillColor: 54, setFillColorN: 55, setStrokeGray: 56, setFillGray: 57, setStrokeRGBColor: 58, setFillRGBColor: 59, setStrokeCMYKColor: 60, setFillCMYKColor: 61, shadingFill: 62, beginInlineImage: 63, beginImageData: 64, endInlineImage: 65, paintXObject: 66, markPoint: 67, markPointProps: 68, beginMarkedContent: 69, beginMarkedContentProps: 70, endMarkedContent: 71, beginCompat: 72, endCompat: 73, paintFormXObjectBegin: 74, paintFormXObjectEnd: 75, beginGroup: 76, endGroup: 77, beginAnnotations: 78, endAnnotations: 79, beginAnnotation: 80, endAnnotation: 81, paintJpegXObject: 82, paintImageMaskXObject: 83, paintImageMaskXObjectGroup: 84, paintImageXObject: 85, paintInlineImageXObject: 86, paintInlineImageXObjectGroup: 87, paintImageXObjectRepeat: 88, paintImageMaskXObjectRepeat: 89, paintSolidColorImageMask: 90, constructPath: 91 }; exports.OPS = OPS; const UNSUPPORTED_FEATURES = { unknown: "unknown", forms: "forms", javaScript: "javaScript", signatures: "signatures", smask: "smask", shadingPattern: "shadingPattern", font: "font", errorTilingPattern: "errorTilingPattern", errorExtGState: "errorExtGState", errorXObject: "errorXObject", errorFontLoadType3: "errorFontLoadType3", errorFontState: "errorFontState", errorFontMissing: "errorFontMissing", errorFontTranslate: "errorFontTranslate", errorColorSpace: "errorColorSpace", errorOperatorList: "errorOperatorList", errorFontToUnicode: "errorFontToUnicode", errorFontLoadNative: "errorFontLoadNative", errorFontBuildPath: "errorFontBuildPath", errorFontGetPath: "errorFontGetPath", errorMarkedContent: "errorMarkedContent", errorContentSubStream: "errorContentSubStream" }; exports.UNSUPPORTED_FEATURES = UNSUPPORTED_FEATURES; const PasswordResponses = { NEED_PASSWORD: 1, INCORRECT_PASSWORD: 2 }; exports.PasswordResponses = PasswordResponses; let verbosity = VerbosityLevel.WARNINGS; function setVerbosityLevel(level) { if (Number.isInteger(level)) { verbosity = level; } } function getVerbosityLevel() { return verbosity; } function info(msg) { if (verbosity >= VerbosityLevel.INFOS) { console.log(`Info: ${msg}`); } } function warn(msg) { if (verbosity >= VerbosityLevel.WARNINGS) { console.log(`Warning: ${msg}`); } } function unreachable(msg) { throw new Error(msg); } function assert(cond, msg) { if (!cond) { unreachable(msg); } } function isSameOrigin(baseUrl, otherUrl) { let base; try { base = new URL(baseUrl); if (!base.origin || base.origin === "null") { return false; } } catch (e) { return false; } const other = new URL(otherUrl, base); return base.origin === other.origin; } function _isValidProtocol(url) { if (!url) { return false; } switch (url.protocol) { case "http:": case "https:": case "ftp:": case "mailto:": case "tel:": return true; default: return false; } } function createValidAbsoluteUrl(url, baseUrl = null, options = null) { if (!url) { return null; } try { if (options && typeof url === "string") { if (options.addDefaultProtocol && url.startsWith("www.")) { const dots = url.match(/\./g); if (dots && dots.length >= 2) { url = `http://${url}`; } } if (options.tryConvertEncoding) { try { url = stringToUTF8String(url); } catch (ex) {} } } const absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url); if (_isValidProtocol(absoluteUrl)) { return absoluteUrl; } } catch (ex) {} return null; } function shadow(obj, prop, value) { Object.defineProperty(obj, prop, { value, enumerable: true, configurable: true, writable: false }); return value; } const BaseException = function BaseExceptionClosure() { function BaseException(message, name) { if (this.constructor === BaseException) { unreachable("Cannot initialize BaseException."); } this.message = message; this.name = name; } BaseException.prototype = new Error(); BaseException.constructor = BaseException; return BaseException; }(); exports.BaseException = BaseException; class PasswordException extends BaseException { constructor(msg, code) { super(msg, "PasswordException"); this.code = code; } } exports.PasswordException = PasswordException; class UnknownErrorException extends BaseException { constructor(msg, details) { super(msg, "UnknownErrorException"); this.details = details; } } exports.UnknownErrorException = UnknownErrorException; class InvalidPDFException extends BaseException { constructor(msg) { super(msg, "InvalidPDFException"); } } exports.InvalidPDFException = InvalidPDFException; class MissingPDFException extends BaseException { constructor(msg) { super(msg, "MissingPDFException"); } } exports.MissingPDFException = MissingPDFException; class UnexpectedResponseException extends BaseException { constructor(msg, status) { super(msg, "UnexpectedResponseException"); this.status = status; } } exports.UnexpectedResponseException = UnexpectedResponseException; class FormatError extends BaseException { constructor(msg) { super(msg, "FormatError"); } } exports.FormatError = FormatError; class AbortException extends BaseException { constructor(msg) { super(msg, "AbortException"); } } exports.AbortException = AbortException; const NullCharactersRegExp = /\x00+/g; const InvisibleCharactersRegExp = /[\x01-\x1F]/g; function removeNullCharacters(str, replaceInvisible = false) { if (typeof str !== "string") { warn("The argument for removeNullCharacters must be a string."); return str; } if (replaceInvisible) { str = str.replace(InvisibleCharactersRegExp, " "); } return str.replace(NullCharactersRegExp, ""); } function bytesToString(bytes) { assert(bytes !== null && typeof bytes === "object" && bytes.length !== undefined, "Invalid argument for bytesToString"); const length = bytes.length; const MAX_ARGUMENT_COUNT = 8192; if (length < MAX_ARGUMENT_COUNT) { return String.fromCharCode.apply(null, bytes); } const strBuf = []; for (let i = 0; i < length; i += MAX_ARGUMENT_COUNT) { const chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length); const chunk = bytes.subarray(i, chunkEnd); strBuf.push(String.fromCharCode.apply(null, chunk)); } return strBuf.join(""); } function stringToBytes(str) { assert(typeof str === "string", "Invalid argument for stringToBytes"); const length = str.length; const bytes = new Uint8Array(length); for (let i = 0; i < length; ++i) { bytes[i] = str.charCodeAt(i) & 0xff; } return bytes; } function arrayByteLength(arr) { if (arr.length !== undefined) { return arr.length; } assert(arr.byteLength !== undefined, "arrayByteLength - invalid argument."); return arr.byteLength; } function arraysToBytes(arr) { const length = arr.length; if (length === 1 && arr[0] instanceof Uint8Array) { return arr[0]; } let resultLength = 0; for (let i = 0; i < length; i++) { resultLength += arrayByteLength(arr[i]); } let pos = 0; const data = new Uint8Array(resultLength); for (let i = 0; i < length; i++) { let item = arr[i]; if (!(item instanceof Uint8Array)) { if (typeof item === "string") { item = stringToBytes(item); } else { item = new Uint8Array(item); } } const itemLength = item.byteLength; data.set(item, pos); pos += itemLength; } return data; } function string32(value) { return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff); } function objectSize(obj) { return Object.keys(obj).length; } function objectFromMap(map) { const obj = Object.create(null); for (const [key, value] of map) { obj[key] = value; } return obj; } function isLittleEndian() { const buffer8 = new Uint8Array(4); buffer8[0] = 1; const view32 = new Uint32Array(buffer8.buffer, 0, 1); return view32[0] === 1; } const IsLittleEndianCached = { get value() { return shadow(this, "value", isLittleEndian()); } }; exports.IsLittleEndianCached = IsLittleEndianCached; function isEvalSupported() { try { new Function(""); return true; } catch (e) { return false; } } const IsEvalSupportedCached = { get value() { return shadow(this, "value", isEvalSupported()); } }; exports.IsEvalSupportedCached = IsEvalSupportedCached; const hexNumbers = [...Array(256).keys()].map(n => n.toString(16).padStart(2, "0")); class Util { static makeHexColor(r, g, b) { return `#${hexNumbers[r]}${hexNumbers[g]}${hexNumbers[b]}`; } static transform(m1, m2) { return [m1[0] * m2[0] + m1[2] * m2[1], m1[1] * m2[0] + m1[3] * m2[1], m1[0] * m2[2] + m1[2] * m2[3], m1[1] * m2[2] + m1[3] * m2[3], m1[0] * m2[4] + m1[2] * m2[5] + m1[4], m1[1] * m2[4] + m1[3] * m2[5] + m1[5]]; } static applyTransform(p, m) { const xt = p[0] * m[0] + p[1] * m[2] + m[4]; const yt = p[0] * m[1] + p[1] * m[3] + m[5]; return [xt, yt]; } static applyInverseTransform(p, m) { const d = m[0] * m[3] - m[1] * m[2]; const xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d; const yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d; return [xt, yt]; } static getAxialAlignedBoundingBox(r, m) { const p1 = Util.applyTransform(r, m); const p2 = Util.applyTransform(r.slice(2, 4), m); const p3 = Util.applyTransform([r[0], r[3]], m); const p4 = Util.applyTransform([r[2], r[1]], m); return [Math.min(p1[0], p2[0], p3[0], p4[0]), Math.min(p1[1], p2[1], p3[1], p4[1]), Math.max(p1[0], p2[0], p3[0], p4[0]), Math.max(p1[1], p2[1], p3[1], p4[1])]; } static inverseTransform(m) { const d = m[0] * m[3] - m[1] * m[2]; return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d, (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d]; } static apply3dTransform(m, v) { return [m[0] * v[0] + m[1] * v[1] + m[2] * v[2], m[3] * v[0] + m[4] * v[1] + m[5] * v[2], m[6] * v[0] + m[7] * v[1] + m[8] * v[2]]; } static singularValueDecompose2dScale(m) { const transpose = [m[0], m[2], m[1], m[3]]; const a = m[0] * transpose[0] + m[1] * transpose[2]; const b = m[0] * transpose[1] + m[1] * transpose[3]; const c = m[2] * transpose[0] + m[3] * transpose[2]; const d = m[2] * transpose[1] + m[3] * transpose[3]; const first = (a + d) / 2; const second = Math.sqrt((a + d) ** 2 - 4 * (a * d - c * b)) / 2; const sx = first + second || 1; const sy = first - second || 1; return [Math.sqrt(sx), Math.sqrt(sy)]; } static normalizeRect(rect) { const r = rect.slice(0); if (rect[0] > rect[2]) { r[0] = rect[2]; r[2] = rect[0]; } if (rect[1] > rect[3]) { r[1] = rect[3]; r[3] = rect[1]; } return r; } static intersect(rect1, rect2) { function compare(a, b) { return a - b; } const orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare); const orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare); const result = []; rect1 = Util.normalizeRect(rect1); rect2 = Util.normalizeRect(rect2); if (orderedX[0] === rect1[0] && orderedX[1] === rect2[0] || orderedX[0] === rect2[0] && orderedX[1] === rect1[0]) { result[0] = orderedX[1]; result[2] = orderedX[2]; } else { return null; } if (orderedY[0] === rect1[1] && orderedY[1] === rect2[1] || orderedY[0] === rect2[1] && orderedY[1] === rect1[1]) { result[1] = orderedY[1]; result[3] = orderedY[2]; } else { return null; } return result; } static bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3) { const tvalues = [], bounds = [[], []]; let a, b, c, t, t1, t2, b2ac, sqrtb2ac; for (let i = 0; i < 2; ++i) { if (i === 0) { b = 6 * x0 - 12 * x1 + 6 * x2; a = -3 * x0 + 9 * x1 - 9 * x2 + 3 * x3; c = 3 * x1 - 3 * x0; } else { b = 6 * y0 - 12 * y1 + 6 * y2; a = -3 * y0 + 9 * y1 - 9 * y2 + 3 * y3; c = 3 * y1 - 3 * y0; } if (Math.abs(a) < 1e-12) { if (Math.abs(b) < 1e-12) { continue; } t = -c / b; if (0 < t && t < 1) { tvalues.push(t); } continue; } b2ac = b * b - 4 * c * a; sqrtb2ac = Math.sqrt(b2ac); if (b2ac < 0) { continue; } t1 = (-b + sqrtb2ac) / (2 * a); if (0 < t1 && t1 < 1) { tvalues.push(t1); } t2 = (-b - sqrtb2ac) / (2 * a); if (0 < t2 && t2 < 1) { tvalues.push(t2); } } let j = tvalues.length, mt; const jlen = j; while (j--) { t = tvalues[j]; mt = 1 - t; bounds[0][j] = mt * mt * mt * x0 + 3 * mt * mt * t * x1 + 3 * mt * t * t * x2 + t * t * t * x3; bounds[1][j] = mt * mt * mt * y0 + 3 * mt * mt * t * y1 + 3 * mt * t * t * y2 + t * t * t * y3; } bounds[0][jlen] = x0; bounds[1][jlen] = y0; bounds[0][jlen + 1] = x3; bounds[1][jlen + 1] = y3; bounds[0].length = bounds[1].length = jlen + 2; return [Math.min(...bounds[0]), Math.min(...bounds[1]), Math.max(...bounds[0]), Math.max(...bounds[1])]; } } exports.Util = Util; const PDFStringTranslateTable = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2d8, 0x2c7, 0x2c6, 0x2d9, 0x2dd, 0x2db, 0x2da, 0x2dc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x192, 0x2044, 0x2039, 0x203a, 0x2212, 0x2030, 0x201e, 0x201c, 0x201d, 0x2018, 0x2019, 0x201a, 0x2122, 0xfb01, 0xfb02, 0x141, 0x152, 0x160, 0x178, 0x17d, 0x131, 0x142, 0x153, 0x161, 0x17e, 0, 0x20ac]; function stringToPDFString(str) { const length = str.length, strBuf = []; if (str[0] === "\xFE" && str[1] === "\xFF") { for (let i = 2; i < length; i += 2) { strBuf.push(String.fromCharCode(str.charCodeAt(i) << 8 | str.charCodeAt(i + 1))); } } else if (str[0] === "\xFF" && str[1] === "\xFE") { for (let i = 2; i < length; i += 2) { strBuf.push(String.fromCharCode(str.charCodeAt(i + 1) << 8 | str.charCodeAt(i))); } } else { for (let i = 0; i < length; ++i) { const code = PDFStringTranslateTable[str.charCodeAt(i)]; strBuf.push(code ? String.fromCharCode(code) : str.charAt(i)); } } return strBuf.join(""); } function escapeString(str) { return str.replace(/([()\\\n\r])/g, match => { if (match === "\n") { return "\\n"; } else if (match === "\r") { return "\\r"; } return `\\${match}`; }); } function isAscii(str) { return /^[\x00-\x7F]*$/.test(str); } function stringToUTF16BEString(str) { const buf = ["\xFE\xFF"]; for (let i = 0, ii = str.length; i < ii; i++) { const char = str.charCodeAt(i); buf.push(String.fromCharCode(char >> 8 & 0xff), String.fromCharCode(char & 0xff)); } return buf.join(""); } function stringToUTF8String(str) { return decodeURIComponent(escape(str)); } function utf8StringToString(str) { return unescape(encodeURIComponent(str)); } function isBool(v) { return typeof v === "boolean"; } function isNum(v) { return typeof v === "number"; } function isString(v) { return typeof v === "string"; } function isArrayBuffer(v) { return typeof v === "object" && v !== null && v.byteLength !== undefined; } function isArrayEqual(arr1, arr2) { if (arr1.length !== arr2.length) { return false; } for (let i = 0, ii = arr1.length; i < ii; i++) { if (arr1[i] !== arr2[i]) { return false; } } return true; } function getModificationDate(date = new Date()) { const buffer = [date.getUTCFullYear().toString(), (date.getUTCMonth() + 1).toString().padStart(2, "0"), date.getUTCDate().toString().padStart(2, "0"), date.getUTCHours().toString().padStart(2, "0"), date.getUTCMinutes().toString().padStart(2, "0"), date.getUTCSeconds().toString().padStart(2, "0")]; return buffer.join(""); } function createPromiseCapability() { const capability = Object.create(null); let isSettled = false; Object.defineProperty(capability, "settled", { get() { return isSettled; } }); capability.promise = new Promise(function (resolve, reject) { capability.resolve = function (data) { isSettled = true; resolve(data); }; capability.reject = function (reason) { isSettled = true; reject(reason); }; }); return capability; } function createObjectURL(data, contentType = "", forceDataSchema = false) { if (URL.createObjectURL && typeof Blob !== "undefined" && !forceDataSchema) { return URL.createObjectURL(new Blob([data], { type: contentType })); } const digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; let buffer = `data:${contentType};base64,`; for (let i = 0, ii = data.length; i < ii; i += 3) { const b1 = data[i] & 0xff; const b2 = data[i + 1] & 0xff; const b3 = data[i + 2] & 0xff; const d1 = b1 >> 2, d2 = (b1 & 3) << 4 | b2 >> 4; const d3 = i + 1 < ii ? (b2 & 0xf) << 2 | b3 >> 6 : 64; const d4 = i + 2 < ii ? b3 & 0x3f : 64; buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4]; } return buffer; } /***/ }), /* 3 */ /***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => { __w_pdfjs_require__(4); /***/ }), /* 4 */ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.isNodeJS = void 0; const isNodeJS = typeof process === "object" && process + "" === "[object process]" && !process.versions.nw && !(process.versions.electron && process.type && process.type !== "browser"); exports.isNodeJS = isNodeJS; /***/ }), /* 5 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.RefSetCache = exports.RefSet = exports.Ref = exports.Name = exports.EOF = exports.Dict = exports.Cmd = exports.CIRCULAR_REF = void 0; exports.clearPrimitiveCaches = clearPrimitiveCaches; exports.isCmd = isCmd; exports.isDict = isDict; exports.isName = isName; exports.isRef = isRef; exports.isRefsEqual = isRefsEqual; exports.isStream = isStream; var _util = __w_pdfjs_require__(2); var _base_stream = __w_pdfjs_require__(6); const CIRCULAR_REF = Symbol("CIRCULAR_REF"); exports.CIRCULAR_REF = CIRCULAR_REF; const EOF = Symbol("EOF"); exports.EOF = EOF; const Name = function NameClosure() { let nameCache = Object.create(null); class Name { constructor(name) { this.name = name; } static get(name) { const nameValue = nameCache[name]; return nameValue ? nameValue : nameCache[name] = new Name(name); } static _clearCache() { nameCache = Object.create(null); } } return Name; }(); exports.Name = Name; const Cmd = function CmdClosure() { let cmdCache = Object.create(null); class Cmd { constructor(cmd) { this.cmd = cmd; } static get(cmd) { const cmdValue = cmdCache[cmd]; return cmdValue ? cmdValue : cmdCache[cmd] = new Cmd(cmd); } static _clearCache() { cmdCache = Object.create(null); } } return Cmd; }(); exports.Cmd = Cmd; const nonSerializable = function nonSerializableClosure() { return nonSerializable; }; class Dict { constructor(xref = null) { this._map = Object.create(null); this.xref = xref; this.objId = null; this.suppressEncryption = false; this.__nonSerializable__ = nonSerializable; } assignXref(newXref) { this.xref = newXref; } get size() { return Object.keys(this._map).length; } get(key1, key2, key3) { let value = this._map[key1]; if (value === undefined && key2 !== undefined) { value = this._map[key2]; if (value === undefined && key3 !== undefined) { value = this._map[key3]; } } if (value instanceof Ref && this.xref) { return this.xref.fetch(value, this.suppressEncryption); } return value; } async getAsync(key1, key2, key3) { let value = this._map[key1]; if (value === undefined && key2 !== undefined) { value = this._map[key2]; if (value === undefined && key3 !== undefined) { value = this._map[key3]; } } if (value instanceof Ref && this.xref) { return this.xref.fetchAsync(value, this.suppressEncryption); } return value; } getArray(key1, key2, key3) { let value = this._map[key1]; if (value === undefined && key2 !== undefined) { value = this._map[key2]; if (value === undefined && key3 !== undefined) { value = this._map[key3]; } } if (value instanceof Ref && this.xref) { value = this.xref.fetch(value, this.suppressEncryption); } if (Array.isArray(value)) { value = value.slice(); for (let i = 0, ii = value.length; i < ii; i++) { if (value[i] instanceof Ref && this.xref) { value[i] = this.xref.fetch(value[i], this.suppressEncryption); } } } return value; } getRaw(key) { return this._map[key]; } getKeys() { return Object.keys(this._map); } getRawValues() { return Object.values(this._map); } set(key, value) { this._map[key] = value; } has(key) { return this._map[key] !== undefined; } forEach(callback) { for (const key in this._map) { callback(key, this.get(key)); } } static get empty() { const emptyDict = new Dict(null); emptyDict.set = (key, value) => { (0, _util.unreachable)("Should not call `set` on the empty dictionary."); }; return (0, _util.shadow)(this, "empty", emptyDict); } static merge({ xref, dictArray, mergeSubDicts = false }) { const mergedDict = new Dict(xref), properties = new Map(); for (const dict of dictArray) { if (!(dict instanceof Dict)) { continue; } for (const [key, value] of Object.entries(dict._map)) { let property = properties.get(key); if (property === undefined) { property = []; properties.set(key, property); } else if (!mergeSubDicts || !(value instanceof Dict)) { continue; } property.push(value); } } for (const [name, values] of properties) { if (values.length === 1 || !(values[0] instanceof Dict)) { mergedDict._map[name] = values[0]; continue; } const subDict = new Dict(xref); for (const dict of values) { for (const [key, value] of Object.entries(dict._map)) { if (subDict._map[key] === undefined) { subDict._map[key] = value; } } } if (subDict.size > 0) { mergedDict._map[name] = subDict; } } properties.clear(); return mergedDict.size > 0 ? mergedDict : Dict.empty; } } exports.Dict = Dict; const Ref = function RefClosure() { let refCache = Object.create(null); class Ref { constructor(num, gen) { this.num = num; this.gen = gen; } toString() { if (this.gen === 0) { return `${this.num}R`; } return `${this.num}R${this.gen}`; } static get(num, gen) { const key = gen === 0 ? `${num}R` : `${num}R${gen}`; const refValue = refCache[key]; return refValue ? refValue : refCache[key] = new Ref(num, gen); } static _clearCache() { refCache = Object.create(null); } } return Ref; }(); exports.Ref = Ref; class RefSet { constructor(parent = null) { this._set = new Set(parent && parent._set); } has(ref) { return this._set.has(ref.toString()); } put(ref) { this._set.add(ref.toString()); } remove(ref) { this._set.delete(ref.toString()); } forEach(callback) { for (const ref of this._set.values()) { callback(ref); } } clear() { this._set.clear(); } } exports.RefSet = RefSet; class RefSetCache { constructor() { this._map = new Map(); } get size() { return this._map.size; } get(ref) { return this._map.get(ref.toString()); } has(ref) { return this._map.has(ref.toString()); } put(ref, obj) { this._map.set(ref.toString(), obj); } putAlias(ref, aliasRef) { this._map.set(ref.toString(), this.get(aliasRef)); } forEach(callback) { for (const value of this._map.values()) { callback(value); } } clear() { this._map.clear(); } } exports.RefSetCache = RefSetCache; function isName(v, name) { return v instanceof Name && (name === undefined || v.name === name); } function isCmd(v, cmd) { return v instanceof Cmd && (cmd === undefined || v.cmd === cmd); } function isDict(v, type) { return v instanceof Dict && (type === undefined || isName(v.get("Type"), type)); } function isRef(v) { return v instanceof Ref; } function isRefsEqual(v1, v2) { return v1.num === v2.num && v1.gen === v2.gen; } function isStream(v) { return v instanceof _base_stream.BaseStream; } function clearPrimitiveCaches() { Cmd._clearCache(); Name._clearCache(); Ref._clearCache(); } /***/ }), /* 6 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.BaseStream = void 0; var _util = __w_pdfjs_require__(2); class BaseStream { constructor() { if (this.constructor === BaseStream) { (0, _util.unreachable)("Cannot initialize BaseStream."); } } get length() { (0, _util.unreachable)("Abstract getter `length` accessed"); } get isEmpty() { (0, _util.unreachable)("Abstract getter `isEmpty` accessed"); } get isDataLoaded() { return (0, _util.shadow)(this, "isDataLoaded", true); } getByte() { (0, _util.unreachable)("Abstract method `getByte` called"); } getBytes(length, forceClamped = false) { (0, _util.unreachable)("Abstract method `getBytes` called"); } peekByte() { const peekedByte = this.getByte(); if (peekedByte !== -1) { this.pos--; } return peekedByte; } peekBytes(length, forceClamped = false) { const bytes = this.getBytes(length, forceClamped); this.pos -= bytes.length; return bytes; } getUint16() { const b0 = this.getByte(); const b1 = this.getByte(); if (b0 === -1 || b1 === -1) { return -1; } return (b0 << 8) + b1; } getInt32() { const b0 = this.getByte(); const b1 = this.getByte(); const b2 = this.getByte(); const b3 = this.getByte(); return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3; } getByteRange(begin, end) { (0, _util.unreachable)("Abstract method `getByteRange` called"); } getString(length) { return (0, _util.bytesToString)(this.getBytes(length, false)); } skip(n) { this.pos += n || 1; } reset() { (0, _util.unreachable)("Abstract method `reset` called"); } moveStart() { (0, _util.unreachable)("Abstract method `moveStart` called"); } makeSubStream(start, length, dict = null) { (0, _util.unreachable)("Abstract method `makeSubStream` called"); } getBaseStreams() { return null; } } exports.BaseStream = BaseStream; /***/ }), /* 7 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.NetworkPdfManager = exports.LocalPdfManager = void 0; var _util = __w_pdfjs_require__(2); var _chunked_stream = __w_pdfjs_require__(8); var _core_utils = __w_pdfjs_require__(9); var _document = __w_pdfjs_require__(11); var _stream = __w_pdfjs_require__(10); function parseDocBaseUrl(url) { if (url) { const absoluteUrl = (0, _util.createValidAbsoluteUrl)(url); if (absoluteUrl) { return absoluteUrl.href; } (0, _util.warn)(`Invalid absolute docBaseUrl: "${url}".`); } return null; } class BasePdfManager { constructor() { if (this.constructor === BasePdfManager) { (0, _util.unreachable)("Cannot initialize BasePdfManager."); } } get docId() { return this._docId; } get password() { return this._password; } get docBaseUrl() { return this._docBaseUrl; } onLoadedStream() { (0, _util.unreachable)("Abstract method `onLoadedStream` called"); } ensureDoc(prop, args) { return this.ensure(this.pdfDocument, prop, args); } ensureXRef(prop, args) { return this.ensure(this.pdfDocument.xref, prop, args); } ensureCatalog(prop, args) { return this.ensure(this.pdfDocument.catalog, prop, args); } getPage(pageIndex) { return this.pdfDocument.getPage(pageIndex); } fontFallback(id, handler) { return this.pdfDocument.fontFallback(id, handler); } loadXfaFonts(handler, task) { return this.pdfDocument.loadXfaFonts(handler, task); } loadXfaImages() { return this.pdfDocument.loadXfaImages(); } serializeXfaData(annotationStorage) { return this.pdfDocument.serializeXfaData(annotationStorage); } cleanup(manuallyTriggered = false) { return this.pdfDocument.cleanup(manuallyTriggered); } async ensure(obj, prop, args) { (0, _util.unreachable)("Abstract method `ensure` called"); } requestRange(begin, end) { (0, _util.unreachable)("Abstract method `requestRange` called"); } requestLoadedStream() { (0, _util.unreachable)("Abstract method `requestLoadedStream` called"); } sendProgressiveData(chunk) { (0, _util.unreachable)("Abstract method `sendProgressiveData` called"); } updatePassword(password) { this._password = password; } terminate(reason) { (0, _util.unreachable)("Abstract method `terminate` called"); } } class LocalPdfManager extends BasePdfManager { constructor(docId, data, password, msgHandler, evaluatorOptions, enableXfa, docBaseUrl) { super(); this._docId = docId; this._password = password; this._docBaseUrl = parseDocBaseUrl(docBaseUrl); this.msgHandler = msgHandler; this.evaluatorOptions = evaluatorOptions; this.enableXfa = enableXfa; const stream = new _stream.Stream(data); this.pdfDocument = new _document.PDFDocument(this, stream); this._loadedStreamPromise = Promise.resolve(stream); } async ensure(obj, prop, args) { const value = obj[prop]; if (typeof value === "function") { return value.apply(obj, args); } return value; } requestRange(begin, end) { return Promise.resolve(); } requestLoadedStream() {} onLoadedStream() { return this._loadedStreamPromise; } terminate(reason) {} } exports.LocalPdfManager = LocalPdfManager; class NetworkPdfManager extends BasePdfManager { constructor(docId, pdfNetworkStream, args, evaluatorOptions, enableXfa, docBaseUrl) { super(); this._docId = docId; this._password = args.password; this._docBaseUrl = parseDocBaseUrl(docBaseUrl); this.msgHandler = args.msgHandler; this.evaluatorOptions = evaluatorOptions; this.enableXfa = enableXfa; this.streamManager = new _chunked_stream.ChunkedStreamManager(pdfNetworkStream, { msgHandler: args.msgHandler, length: args.length, disableAutoFetch: args.disableAutoFetch, rangeChunkSize: args.rangeChunkSize }); this.pdfDocument = new _document.PDFDocument(this, this.streamManager.getStream()); } async ensure(obj, prop, args) { try { const value = obj[prop]; if (typeof value === "function") { return value.apply(obj, args); } return value; } catch (ex) { if (!(ex instanceof _core_utils.MissingDataException)) { throw ex; } await this.requestRange(ex.begin, ex.end); return this.ensure(obj, prop, args); } } requestRange(begin, end) { return this.streamManager.requestRange(begin, end); } requestLoadedStream() { this.streamManager.requestAllChunks(); } sendProgressiveData(chunk) { this.streamManager.onReceiveData({ chunk }); } onLoadedStream() { return this.streamManager.onLoadedStream(); } terminate(reason) { this.streamManager.abort(reason); } } exports.NetworkPdfManager = NetworkPdfManager; /***/ }), /* 8 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.ChunkedStreamManager = exports.ChunkedStream = void 0; var _util = __w_pdfjs_require__(2); var _core_utils = __w_pdfjs_require__(9); var _stream = __w_pdfjs_require__(10); class ChunkedStream extends _stream.Stream { constructor(length, chunkSize, manager) { super(new Uint8Array(length), 0, length, null); this.chunkSize = chunkSize; this._loadedChunks = new Set(); this.numChunks = Math.ceil(length / chunkSize); this.manager = manager; this.progressiveDataLength = 0; this.lastSuccessfulEnsureByteChunk = -1; } getMissingChunks() { const chunks = []; for (let chunk = 0, n = this.numChunks; chunk < n; ++chunk) { if (!this._loadedChunks.has(chunk)) { chunks.push(chunk); } } return chunks; } get numChunksLoaded() { return this._loadedChunks.size; } get isDataLoaded() { return this.numChunksLoaded === this.numChunks; } onReceiveData(begin, chunk) { const chunkSize = this.chunkSize; if (begin % chunkSize !== 0) { throw new Error(`Bad begin offset: ${begin}`); } const end = begin + chunk.byteLength; if (end % chunkSize !== 0 && end !== this.bytes.length) { throw new Error(`Bad end offset: ${end}`); } this.bytes.set(new Uint8Array(chunk), begin); const beginChunk = Math.floor(begin / chunkSize); const endChunk = Math.floor((end - 1) / chunkSize) + 1; for (let curChunk = beginChunk; curChunk < endChunk; ++curChunk) { this._loadedChunks.add(curChunk); } } onReceiveProgressiveData(data) { let position = this.progressiveDataLength; const beginChunk = Math.floor(position / this.chunkSize); this.bytes.set(new Uint8Array(data), position); position += data.byteLength; this.progressiveDataLength = position; const endChunk = position >= this.end ? this.numChunks : Math.floor(position / this.chunkSize); for (let curChunk = beginChunk; curChunk < endChunk; ++curChunk) { this._loadedChunks.add(curChunk); } } ensureByte(pos) { if (pos < this.progressiveDataLength) { return; } const chunk = Math.floor(pos / this.chunkSize); if (chunk > this.numChunks) { return; } if (chunk === this.lastSuccessfulEnsureByteChunk) { return; } if (!this._loadedChunks.has(chunk)) { throw new _core_utils.MissingDataException(pos, pos + 1); } this.lastSuccessfulEnsureByteChunk = chunk; } ensureRange(begin, end) { if (begin >= end) { return; } if (end <= this.progressiveDataLength) { return; } const beginChunk = Math.floor(begin / this.chunkSize); if (beginChunk > this.numChunks) { return; } const endChunk = Math.min(Math.floor((end - 1) / this.chunkSize) + 1, this.numChunks); for (let chunk = beginChunk; chunk < endChunk; ++chunk) { if (!this._loadedChunks.has(chunk)) { throw new _core_utils.MissingDataException(begin, end); } } } nextEmptyChunk(beginChunk) { const numChunks = this.numChunks; for (let i = 0; i < numChunks; ++i) { const chunk = (beginChunk + i) % numChunks; if (!this._loadedChunks.has(chunk)) { return chunk; } } return null; } hasChunk(chunk) { return this._loadedChunks.has(chunk); } getByte() { const pos = this.pos; if (pos >= this.end) { return -1; } if (pos >= this.progressiveDataLength) { this.ensureByte(pos); } return this.bytes[this.pos++]; } getBytes(length, forceClamped = false) { const bytes = this.bytes; const pos = this.pos; const strEnd = this.end; if (!length) { if (strEnd > this.progressiveDataLength) { this.ensureRange(pos, strEnd); } const subarray = bytes.subarray(pos, strEnd); return forceClamped ? new Uint8ClampedArray(subarray) : subarray; } let end = pos + length; if (end > strEnd) { end = strEnd; } if (end > this.progressiveDataLength) { this.ensureRange(pos, end); } this.pos = end; const subarray = bytes.subarray(pos, end); return forceClamped ? new Uint8ClampedArray(subarray) : subarray; } getByteRange(begin, end) { if (begin < 0) { begin = 0; } if (end > this.end) { end = this.end; } if (end > this.progressiveDataLength) { this.ensureRange(begin, end); } return this.bytes.subarray(begin, end); } makeSubStream(start, length, dict = null) { if (length) { if (start + length > this.progressiveDataLength) { this.ensureRange(start, start + length); } } else { if (start >= this.progressiveDataLength) { this.ensureByte(start); } } function ChunkedStreamSubstream() {} ChunkedStreamSubstream.prototype = Object.create(this); ChunkedStreamSubstream.prototype.getMissingChunks = function () { const chunkSize = this.chunkSize; const beginChunk = Math.floor(this.start / chunkSize); const endChunk = Math.floor((this.end - 1) / chunkSize) + 1; const missingChunks = []; for (let chunk = beginChunk; chunk < endChunk; ++chunk) { if (!this._loadedChunks.has(chunk)) { missingChunks.push(chunk); } } return missingChunks; }; Object.defineProperty(ChunkedStreamSubstream.prototype, "isDataLoaded", { get() { if (this.numChunksLoaded === this.numChunks) { return true; } return this.getMissingChunks().length === 0; }, configurable: true }); const subStream = new ChunkedStreamSubstream(); subStream.pos = subStream.start = start; subStream.end = start + length || this.end; subStream.dict = dict; return subStream; } getBaseStreams() { return [this]; } } exports.ChunkedStream = ChunkedStream; class ChunkedStreamManager { constructor(pdfNetworkStream, args) { this.length = args.length; this.chunkSize = args.rangeChunkSize; this.stream = new ChunkedStream(this.length, this.chunkSize, this); this.pdfNetworkStream = pdfNetworkStream; this.disableAutoFetch = args.disableAutoFetch; this.msgHandler = args.msgHandler; this.currRequestId = 0; this._chunksNeededByRequest = new Map(); this._requestsByChunk = new Map(); this._promisesByRequest = new Map(); this.progressiveDataLength = 0; this.aborted = false; this._loadedStreamCapability = (0, _util.createPromiseCapability)(); } onLoadedStream() { return this._loadedStreamCapability.promise; } sendRequest(begin, end) { const rangeReader = this.pdfNetworkStream.getRangeReader(begin, end); if (!rangeReader.isStreamingSupported) { rangeReader.onProgress = this.onProgress.bind(this); } let chunks = [], loaded = 0; return new Promise((resolve, reject) => { const readChunk = chunk => { try { if (!chunk.done) { const data = chunk.value; chunks.push(data); loaded += (0, _util.arrayByteLength)(data); if (rangeReader.isStreamingSupported) { this.onProgress({ loaded }); } rangeReader.read().then(readChunk, reject); return; } const chunkData = (0, _util.arraysToBytes)(chunks); chunks = null; resolve(chunkData); } catch (e) { reject(e); } }; rangeReader.read().then(readChunk, reject); }).then(data => { if (this.aborted) { return; } this.onReceiveData({ chunk: data, begin }); }); } requestAllChunks() { const missingChunks = this.stream.getMissingChunks(); this._requestChunks(missingChunks); return this._loadedStreamCapability.promise; } _requestChunks(chunks) { const requestId = this.currRequestId++; const chunksNeeded = new Set(); this._chunksNeededByRequest.set(requestId, chunksNeeded); for (const chunk of chunks) { if (!this.stream.hasChunk(chunk)) { chunksNeeded.add(chunk); } } if (chunksNeeded.size === 0) { return Promise.resolve(); } const capability = (0, _util.createPromiseCapability)(); this._promisesByRequest.set(requestId, capability); const chunksToRequest = []; for (const chunk of chunksNeeded) { let requestIds = this._requestsByChunk.get(chunk); if (!requestIds) { requestIds = []; this._requestsByChunk.set(chunk, requestIds); chunksToRequest.push(chunk); } requestIds.push(requestId); } if (chunksToRequest.length > 0) { const groupedChunksToRequest = this.groupChunks(chunksToRequest); for (const groupedChunk of groupedChunksToRequest) { const begin = groupedChunk.beginChunk * this.chunkSize; const end = Math.min(groupedChunk.endChunk * this.chunkSize, this.length); this.sendRequest(begin, end).catch(capability.reject); } } return capability.promise.catch(reason => { if (this.aborted) { return; } throw reason; }); } getStream() { return this.stream; } requestRange(begin, end) { end = Math.min(end, this.length); const beginChunk = this.getBeginChunk(begin); const endChunk = this.getEndChunk(end); const chunks = []; for (let chunk = beginChunk; chunk < endChunk; ++chunk) { chunks.push(chunk); } return this._requestChunks(chunks); } requestRanges(ranges = []) { const chunksToRequest = []; for (const range of ranges) { const beginChunk = this.getBeginChunk(range.begin); const endChunk = this.getEndChunk(range.end); for (let chunk = beginChunk; chunk < endChunk; ++chunk) { if (!chunksToRequest.includes(chunk)) { chunksToRequest.push(chunk); } } } chunksToRequest.sort(function (a, b) { return a - b; }); return this._requestChunks(chunksToRequest); } groupChunks(chunks) { const groupedChunks = []; let beginChunk = -1; let prevChunk = -1; for (let i = 0, ii = chunks.length; i < ii; ++i) { const chunk = chunks[i]; if (beginChunk < 0) { beginChunk = chunk; } if (prevChunk >= 0 && prevChunk + 1 !== chunk) { groupedChunks.push({ beginChunk, endChunk: prevChunk + 1 }); beginChunk = chunk; } if (i + 1 === chunks.length) { groupedChunks.push({ beginChunk, endChunk: chunk + 1 }); } prevChunk = chunk; } return groupedChunks; } onProgress(args) { this.msgHandler.send("DocProgress", { loaded: this.stream.numChunksLoaded * this.chunkSize + args.loaded, total: this.length }); } onReceiveData(args) { const chunk = args.chunk; const isProgressive = args.begin === undefined; const begin = isProgressive ? this.progressiveDataLength : args.begin; const end = begin + chunk.byteLength; const beginChunk = Math.floor(begin / this.chunkSize); const endChunk = end < this.length ? Math.floor(end / this.chunkSize) : Math.ceil(end / this.chunkSize); if (isProgressive) { this.stream.onReceiveProgressiveData(chunk); this.progressiveDataLength = end; } else { this.stream.onReceiveData(begin, chunk); } if (this.stream.isDataLoaded) { this._loadedStreamCapability.resolve(this.stream); } const loadedRequests = []; for (let curChunk = beginChunk; curChunk < endChunk; ++curChunk) { const requestIds = this._requestsByChunk.get(curChunk); if (!requestIds) { continue; } this._requestsByChunk.delete(curChunk); for (const requestId of requestIds) { const chunksNeeded = this._chunksNeededByRequest.get(requestId); if (chunksNeeded.has(curChunk)) { chunksNeeded.delete(curChunk); } if (chunksNeeded.size > 0) { continue; } loadedRequests.push(requestId); } } if (!this.disableAutoFetch && this._requestsByChunk.size === 0) { let nextEmptyChunk; if (this.stream.numChunksLoaded === 1) { const lastChunk = this.stream.numChunks - 1; if (!this.stream.hasChunk(lastChunk)) { nextEmptyChunk = lastChunk; } } else { nextEmptyChunk = this.stream.nextEmptyChunk(endChunk); } if (Number.isInteger(nextEmptyChunk)) { this._requestChunks([nextEmptyChunk]); } } for (const requestId of loadedRequests) { const capability = this._promisesByRequest.get(requestId); this._promisesByRequest.delete(requestId); capability.resolve(); } this.msgHandler.send("DocProgress", { loaded: this.stream.numChunksLoaded * this.chunkSize, total: this.length }); } onError(err) { this._loadedStreamCapability.reject(err); } getBeginChunk(begin) { return Math.floor(begin / this.chunkSize); } getEndChunk(end) { return Math.floor((end - 1) / this.chunkSize) + 1; } abort(reason) { this.aborted = true; if (this.pdfNetworkStream) { this.pdfNetworkStream.cancelAllRequests(reason); } for (const capability of this._promisesByRequest.values()) { capability.reject(reason); } } } exports.ChunkedStreamManager = ChunkedStreamManager; /***/ }), /* 9 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.XRefParseException = exports.XRefEntryException = exports.ParserEOFException = exports.MissingDataException = exports.DocStats = void 0; exports.collectActions = collectActions; exports.encodeToXmlString = encodeToXmlString; exports.escapePDFName = escapePDFName; exports.getArrayLookupTableFactory = getArrayLookupTableFactory; exports.getInheritableProperty = getInheritableProperty; exports.getLookupTableFactory = getLookupTableFactory; exports.isWhiteSpace = isWhiteSpace; exports.log2 = log2; exports.parseXFAPath = parseXFAPath; exports.readInt8 = readInt8; exports.readUint16 = readUint16; exports.readUint32 = readUint32; exports.recoverJsURL = recoverJsURL; exports.toRomanNumerals = toRomanNumerals; exports.validateCSSFont = validateCSSFont; var _util = __w_pdfjs_require__(2); var _primitives = __w_pdfjs_require__(5); function getLookupTableFactory(initializer) { let lookup; return function () { if (initializer) { lookup = Object.create(null); initializer(lookup); initializer = null; } return lookup; }; } function getArrayLookupTableFactory(initializer) { let lookup; return function () { if (initializer) { let arr = initializer(); initializer = null; lookup = Object.create(null); for (let i = 0, ii = arr.length; i < ii; i += 2) { lookup[arr[i]] = arr[i + 1]; } arr = null; } return lookup; }; } class MissingDataException extends _util.BaseException { constructor(begin, end) { super(`Missing data [${begin}, ${end})`, "MissingDataException"); this.begin = begin; this.end = end; } } exports.MissingDataException = MissingDataException; class ParserEOFException extends _util.BaseException { constructor(msg) { super(msg, "ParserEOFException"); } } exports.ParserEOFException = ParserEOFException; class XRefEntryException extends _util.BaseException { constructor(msg) { super(msg, "XRefEntryException"); } } exports.XRefEntryException = XRefEntryException; class XRefParseException extends _util.BaseException { constructor(msg) { super(msg, "XRefParseException"); } } exports.XRefParseException = XRefParseException; class DocStats { constructor(handler) { this._handler = handler; this._streamTypes = new Set(); this._fontTypes = new Set(); } _send() { const streamTypes = Object.create(null), fontTypes = Object.create(null); for (const type of this._streamTypes) { streamTypes[type] = true; } for (const type of this._fontTypes) { fontTypes[type] = true; } this._handler.send("DocStats", { streamTypes, fontTypes }); } addStreamType(type) { if (this._streamTypes.has(type)) { return; } this._streamTypes.add(type); this._send(); } addFontType(type) { if (this._fontTypes.has(type)) { return; } this._fontTypes.add(type); this._send(); } } exports.DocStats = DocStats; function getInheritableProperty({ dict, key, getArray = false, stopWhenFound = true }) { let values; const visited = new _primitives.RefSet(); while (dict instanceof _primitives.Dict && !(dict.objId && visited.has(dict.objId))) { if (dict.objId) { visited.put(dict.objId); } const value = getArray ? dict.getArray(key) : dict.get(key); if (value !== undefined) { if (stopWhenFound) { return value; } if (!values) { values = []; } values.push(value); } dict = dict.get("Parent"); } return values; } const ROMAN_NUMBER_MAP = ["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM", "", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC", "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"]; function toRomanNumerals(number, lowerCase = false) { (0, _util.assert)(Number.isInteger(number) && number > 0, "The number should be a positive integer."); const romanBuf = []; let pos; while (number >= 1000) { number -= 1000; romanBuf.push("M"); } pos = number / 100 | 0; number %= 100; romanBuf.push(ROMAN_NUMBER_MAP[pos]); pos = number / 10 | 0; number %= 10; romanBuf.push(ROMAN_NUMBER_MAP[10 + pos]); romanBuf.push(ROMAN_NUMBER_MAP[20 + number]); const romanStr = romanBuf.join(""); return lowerCase ? romanStr.toLowerCase() : romanStr; } function log2(x) { if (x <= 0) { return 0; } return Math.ceil(Math.log2(x)); } function readInt8(data, offset) { return data[offset] << 24 >> 24; } function readUint16(data, offset) { return data[offset] << 8 | data[offset + 1]; } function readUint32(data, offset) { return (data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]) >>> 0; } function isWhiteSpace(ch) { return ch === 0x20 || ch === 0x09 || ch === 0x0d || ch === 0x0a; } function parseXFAPath(path) { const positionPattern = /(.+)\[(\d+)\]$/; return path.split(".").map(component => { const m = component.match(positionPattern); if (m) { return { name: m[1], pos: parseInt(m[2], 10) }; } return { name: component, pos: 0 }; }); } function escapePDFName(str) { const buffer = []; let start = 0; for (let i = 0, ii = str.length; i < ii; i++) { const char = str.charCodeAt(i); if (char < 0x21 || char > 0x7e || char === 0x23 || char === 0x28 || char === 0x29 || char === 0x3c || char === 0x3e || char === 0x5b || char === 0x5d || char === 0x7b || char === 0x7d || char === 0x2f || char === 0x25) { if (start < i) { buffer.push(str.substring(start, i)); } buffer.push(`#${char.toString(16)}`); start = i + 1; } } if (buffer.length === 0) { return str; } if (start < str.length) { buffer.push(str.substring(start, str.length)); } return buffer.join(""); } function _collectJS(entry, xref, list, parents) { if (!entry) { return; } let parent = null; if ((0, _primitives.isRef)(entry)) { if (parents.has(entry)) { return; } parent = entry; parents.put(parent); entry = xref.fetch(entry); } if (Array.isArray(entry)) { for (const element of entry) { _collectJS(element, xref, list, parents); } } else if (entry instanceof _primitives.Dict) { if ((0, _primitives.isName)(entry.get("S"), "JavaScript") && entry.has("JS")) { const js = entry.get("JS"); let code; if ((0, _primitives.isStream)(js)) { code = js.getString(); } else { code = js; } code = (0, _util.stringToPDFString)(code); if (code) { list.push(code); } } _collectJS(entry.getRaw("Next"), xref, list, parents); } if (parent) { parents.remove(parent); } } function collectActions(xref, dict, eventType) { const actions = Object.create(null); const additionalActionsDicts = getInheritableProperty({ dict, key: "AA", stopWhenFound: false }); if (additionalActionsDicts) { for (let i = additionalActionsDicts.length - 1; i >= 0; i--) { const additionalActions = additionalActionsDicts[i]; if (!(additionalActions instanceof _primitives.Dict)) { continue; } for (const key of additionalActions.getKeys()) { const action = eventType[key]; if (!action) { continue; } const actionDict = additionalActions.getRaw(key); const parents = new _primitives.RefSet(); const list = []; _collectJS(actionDict, xref, list, parents); if (list.length > 0) { actions[action] = list; } } } } if (dict.has("A")) { const actionDict = dict.get("A"); const parents = new _primitives.RefSet(); const list = []; _collectJS(actionDict, xref, list, parents); if (list.length > 0) { actions.Action = list; } } return (0, _util.objectSize)(actions) > 0 ? actions : null; } const XMLEntities = { 0x3c: "<", 0x3e: ">", 0x26: "&", 0x22: """, 0x27: "'" }; function encodeToXmlString(str) { const buffer = []; let start = 0; for (let i = 0, ii = str.length; i < ii; i++) { const char = str.codePointAt(i); if (0x20 <= char && char <= 0x7e) { const entity = XMLEntities[char]; if (entity) { if (start < i) { buffer.push(str.substring(start, i)); } buffer.push(entity); start = i + 1; } } else { if (start < i) { buffer.push(str.substring(start, i)); } buffer.push(`&#x${char.toString(16).toUpperCase()};`); if (char > 0xd7ff && (char < 0xe000 || char > 0xfffd)) { i++; } start = i + 1; } } if (buffer.length === 0) { return str; } if (start < str.length) { buffer.push(str.substring(start, str.length)); } return buffer.join(""); } function validateCSSFont(cssFontInfo) { const DEFAULT_CSS_FONT_OBLIQUE = "14"; const DEFAULT_CSS_FONT_WEIGHT = "400"; const CSS_FONT_WEIGHT_VALUES = new Set(["100", "200", "300", "400", "500", "600", "700", "800", "900", "1000", "normal", "bold", "bolder", "lighter"]); const { fontFamily, fontWeight, italicAngle } = cssFontInfo; if (/^".*"$/.test(fontFamily)) { if (/[^\\]"/.test(fontFamily.slice(1, fontFamily.length - 1))) { (0, _util.warn)(`XFA - FontFamily contains some unescaped ": ${fontFamily}.`); return false; } } else if (/^'.*'$/.test(fontFamily)) { if (/[^\\]'/.test(fontFamily.slice(1, fontFamily.length - 1))) { (0, _util.warn)(`XFA - FontFamily contains some unescaped ': ${fontFamily}.`); return false; } } else { for (const ident of fontFamily.split(/[ \t]+/)) { if (/^(\d|(-(\d|-)))/.test(ident) || !/^[\w-\\]+$/.test(ident)) { (0, _util.warn)(`XFA - FontFamily contains some invalid : ${fontFamily}.`); return false; } } } const weight = fontWeight ? fontWeight.toString() : ""; cssFontInfo.fontWeight = CSS_FONT_WEIGHT_VALUES.has(weight) ? weight : DEFAULT_CSS_FONT_WEIGHT; const angle = parseFloat(italicAngle); cssFontInfo.italicAngle = isNaN(angle) || angle < -90 || angle > 90 ? DEFAULT_CSS_FONT_OBLIQUE : italicAngle.toString(); return true; } function recoverJsURL(str) { const URL_OPEN_METHODS = ["app.launchURL", "window.open", "xfa.host.gotoURL"]; const regex = new RegExp("^\\s*(" + URL_OPEN_METHODS.join("|").split(".").join("\\.") + ")\\((?:'|\")([^'\"]*)(?:'|\")(?:,\\s*(\\w+)\\)|\\))", "i"); const jsUrl = regex.exec(str); if (jsUrl && jsUrl[2]) { const url = jsUrl[2]; let newWindow = false; if (jsUrl[3] === "true" && jsUrl[1] === "app.launchURL") { newWindow = true; } return { url, newWindow }; } return null; } /***/ }), /* 10 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.StringStream = exports.Stream = exports.NullStream = void 0; var _base_stream = __w_pdfjs_require__(6); var _util = __w_pdfjs_require__(2); class Stream extends _base_stream.BaseStream { constructor(arrayBuffer, start, length, dict) { super(); this.bytes = arrayBuffer instanceof Uint8Array ? arrayBuffer : new Uint8Array(arrayBuffer); this.start = start || 0; this.pos = this.start; this.end = start + length || this.bytes.length; this.dict = dict; } get length() { return this.end - this.start; } get isEmpty() { return this.length === 0; } getByte() { if (this.pos >= this.end) { return -1; } return this.bytes[this.pos++]; } getBytes(length, forceClamped = false) { const bytes = this.bytes; const pos = this.pos; const strEnd = this.end; if (!length) { const subarray = bytes.subarray(pos, strEnd); return forceClamped ? new Uint8ClampedArray(subarray) : subarray; } let end = pos + length; if (end > strEnd) { end = strEnd; } this.pos = end; const subarray = bytes.subarray(pos, end); return forceClamped ? new Uint8ClampedArray(subarray) : subarray; } getByteRange(begin, end) { if (begin < 0) { begin = 0; } if (end > this.end) { end = this.end; } return this.bytes.subarray(begin, end); } reset() { this.pos = this.start; } moveStart() { this.start = this.pos; } makeSubStream(start, length, dict = null) { return new Stream(this.bytes.buffer, start, length, dict); } } exports.Stream = Stream; class StringStream extends Stream { constructor(str) { super((0, _util.stringToBytes)(str)); } } exports.StringStream = StringStream; class NullStream extends Stream { constructor() { super(new Uint8Array(0)); } } exports.NullStream = NullStream; /***/ }), /* 11 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.Page = exports.PDFDocument = void 0; var _util = __w_pdfjs_require__(2); var _primitives = __w_pdfjs_require__(5); var _core_utils = __w_pdfjs_require__(9); var _xfa_fonts = __w_pdfjs_require__(12); var _stream = __w_pdfjs_require__(10); var _annotation = __w_pdfjs_require__(22); var _base_stream = __w_pdfjs_require__(6); var _crypto = __w_pdfjs_require__(72); var _catalog = __w_pdfjs_require__(64); var _parser = __w_pdfjs_require__(27); var _object_loader = __w_pdfjs_require__(70); var _operator_list = __w_pdfjs_require__(62); var _evaluator = __w_pdfjs_require__(25); var _decode_stream = __w_pdfjs_require__(29); var _struct_tree = __w_pdfjs_require__(69); var _factory = __w_pdfjs_require__(74); var _xref = __w_pdfjs_require__(98); const DEFAULT_USER_UNIT = 1.0; const LETTER_SIZE_MEDIABOX = [0, 0, 612, 792]; class Page { constructor({ pdfManager, xref, pageIndex, pageDict, ref, globalIdFactory, fontCache, builtInCMapCache, standardFontDataCache, globalImageCache, nonBlendModesSet, xfaFactory }) { this.pdfManager = pdfManager; this.pageIndex = pageIndex; this.pageDict = pageDict; this.xref = xref; this.ref = ref; this.fontCache = fontCache; this.builtInCMapCache = builtInCMapCache; this.standardFontDataCache = standardFontDataCache; this.globalImageCache = globalImageCache; this.nonBlendModesSet = nonBlendModesSet; this.evaluatorOptions = pdfManager.evaluatorOptions; this.resourcesPromise = null; this.xfaFactory = xfaFactory; const idCounters = { obj: 0 }; this._localIdFactory = class extends globalIdFactory { static createObjId() { return `p${pageIndex}_${++idCounters.obj}`; } static getPageObjId() { return `page${ref.toString()}`; } }; } _getInheritableProperty(key, getArray = false) { const value = (0, _core_utils.getInheritableProperty)({ dict: this.pageDict, key, getArray, stopWhenFound: false }); if (!Array.isArray(value)) { return value; } if (value.length === 1 || !(0, _primitives.isDict)(value[0])) { return value[0]; } return _primitives.Dict.merge({ xref: this.xref, dictArray: value }); } get content() { return this.pageDict.getArray("Contents"); } get resources() { return (0, _util.shadow)(this, "resources", this._getInheritableProperty("Resources") || _primitives.Dict.empty); } _getBoundingBox(name) { if (this.xfaData) { return this.xfaData.bbox; } const box = this._getInheritableProperty(name, true); if (Array.isArray(box) && box.length === 4) { if (box[2] - box[0] !== 0 && box[3] - box[1] !== 0) { return box; } (0, _util.warn)(`Empty /${name} entry.`); } return null; } get mediaBox() { return (0, _util.shadow)(this, "mediaBox", this._getBoundingBox("MediaBox") || LETTER_SIZE_MEDIABOX); } get cropBox() { return (0, _util.shadow)(this, "cropBox", this._getBoundingBox("CropBox") || this.mediaBox); } get userUnit() { let obj = this.pageDict.get("UserUnit"); if (!(0, _util.isNum)(obj) || obj <= 0) { obj = DEFAULT_USER_UNIT; } return (0, _util.shadow)(this, "userUnit", obj); } get view() { const { cropBox, mediaBox } = this; let view; if (cropBox === mediaBox || (0, _util.isArrayEqual)(cropBox, mediaBox)) { view = mediaBox; } else { const box = _util.Util.intersect(cropBox, mediaBox); if (box && box[2] - box[0] !== 0 && box[3] - box[1] !== 0) { view = box; } else { (0, _util.warn)("Empty /CropBox and /MediaBox intersection."); } } return (0, _util.shadow)(this, "view", view || mediaBox); } get rotate() { let rotate = this._getInheritableProperty("Rotate") || 0; if (rotate % 90 !== 0) { rotate = 0; } else if (rotate >= 360) { rotate %= 360; } else if (rotate < 0) { rotate = (rotate % 360 + 360) % 360; } return (0, _util.shadow)(this, "rotate", rotate); } _onSubStreamError(handler, reason, objId) { if (this.evaluatorOptions.ignoreErrors) { handler.send("UnsupportedFeature", { featureId: _util.UNSUPPORTED_FEATURES.errorContentSubStream }); (0, _util.warn)(`getContentStream - ignoring sub-stream (${objId}): "${reason}".`); return; } throw reason; } getContentStream(handler) { return this.pdfManager.ensure(this, "content").then(content => { if (content instanceof _base_stream.BaseStream) { return content; } if (Array.isArray(content)) { return new _decode_stream.StreamsSequenceStream(content, this._onSubStreamError.bind(this, handler)); } return new _stream.NullStream(); }); } get xfaData() { return (0, _util.shadow)(this, "xfaData", this.xfaFactory ? { bbox: this.xfaFactory.getBoundingBox(this.pageIndex) } : null); } save(handler, task, annotationStorage) { const partialEvaluator = new _evaluator.PartialEvaluator({ xref: this.xref, handler, pageIndex: this.pageIndex, idFactory: this._localIdFactory, fontCache: this.fontCache, builtInCMapCache: this.builtInCMapCache, standardFontDataCache: this.standardFontDataCache, globalImageCache: this.globalImageCache, options: this.evaluatorOptions }); return this._parsedAnnotations.then(function (annotations) { const newRefsPromises = []; for (const annotation of annotations) { if (!annotation.mustBePrinted(annotationStorage)) { continue; } newRefsPromises.push(annotation.save(partialEvaluator, task, annotationStorage).catch(function (reason) { (0, _util.warn)("save - ignoring annotation data during " + `"${task.name}" task: "${reason}".`); return null; })); } return Promise.all(newRefsPromises); }); } loadResources(keys) { if (!this.resourcesPromise) { this.resourcesPromise = this.pdfManager.ensure(this, "resources"); } return this.resourcesPromise.then(() => { const objectLoader = new _object_loader.ObjectLoader(this.resources, keys, this.xref); return objectLoader.load(); }); } getOperatorList({ handler, sink, task, intent, cacheKey, annotationStorage = null }) { const contentStreamPromise = this.getContentStream(handler); const resourcesPromise = this.loadResources(["ColorSpace", "ExtGState", "Font", "Pattern", "Properties", "Shading", "XObject"]); const partialEvaluator = new _evaluator.PartialEvaluator({ xref: this.xref, handler, pageIndex: this.pageIndex, idFactory: this._localIdFactory, fontCache: this.fontCache, builtInCMapCache: this.builtInCMapCache, standardFontDataCache: this.standardFontDataCache, globalImageCache: this.globalImageCache, options: this.evaluatorOptions }); const dataPromises = Promise.all([contentStreamPromise, resourcesPromise]); const pageListPromise = dataPromises.then(([contentStream]) => { const opList = new _operator_list.OperatorList(intent, sink); handler.send("StartRenderPage", { transparency: partialEvaluator.hasBlendModes(this.resources, this.nonBlendModesSet), pageIndex: this.pageIndex, cacheKey }); return partialEvaluator.getOperatorList({ stream: contentStream, task, resources: this.resources, operatorList: opList }).then(function () { return opList; }); }); return Promise.all([pageListPromise, this._parsedAnnotations]).then(function ([pageOpList, annotations]) { if (annotations.length === 0 || intent & _util.RenderingIntentFlag.ANNOTATIONS_DISABLE) { pageOpList.flush(true); return { length: pageOpList.totalLength }; } const renderForms = !!(intent & _util.RenderingIntentFlag.ANNOTATIONS_FORMS), intentAny = !!(intent & _util.RenderingIntentFlag.ANY), intentDisplay = !!(intent & _util.RenderingIntentFlag.DISPLAY), intentPrint = !!(intent & _util.RenderingIntentFlag.PRINT); const opListPromises = []; for (const annotation of annotations) { if (intentAny || intentDisplay && annotation.mustBeViewed(annotationStorage) || intentPrint && annotation.mustBePrinted(annotationStorage)) { opListPromises.push(annotation.getOperatorList(partialEvaluator, task, intent, renderForms, annotationStorage).catch(function (reason) { (0, _util.warn)("getOperatorList - ignoring annotation data during " + `"${task.name}" task: "${reason}".`); return null; })); } } return Promise.all(opListPromises).then(function (opLists) { pageOpList.addOp(_util.OPS.beginAnnotations, []); for (const opList of opLists) { pageOpList.addOpList(opList); } pageOpList.addOp(_util.OPS.endAnnotations, []); pageOpList.flush(true); return { length: pageOpList.totalLength }; }); }); } extractTextContent({ handler, task, normalizeWhitespace, includeMarkedContent, sink, combineTextItems }) { const contentStreamPromise = this.getContentStream(handler); const resourcesPromise = this.loadResources(["ExtGState", "Font", "Properties", "XObject"]); const dataPromises = Promise.all([contentStreamPromise, resourcesPromise]); return dataPromises.then(([contentStream]) => { const partialEvaluator = new _evaluator.PartialEvaluator({ xref: this.xref, handler, pageIndex: this.pageIndex, idFactory: this._localIdFactory, fontCache: this.fontCache, builtInCMapCache: this.builtInCMapCache, standardFontDataCache: this.standardFontDataCache, globalImageCache: this.globalImageCache, options: this.evaluatorOptions }); return partialEvaluator.getTextContent({ stream: contentStream, task, resources: this.resources, normalizeWhitespace, includeMarkedContent, combineTextItems, sink }); }); } async getStructTree() { const structTreeRoot = await this.pdfManager.ensureCatalog("structTreeRoot"); if (!structTreeRoot) { return null; } const structTree = await this.pdfManager.ensure(this, "_parseStructTree", [structTreeRoot]); return structTree.serializable; } _parseStructTree(structTreeRoot) { const tree = new _struct_tree.StructTreePage(structTreeRoot, this.pageDict); tree.parse(); return tree; } getAnnotationsData(intent) { return this._parsedAnnotations.then(function (annotations) { const annotationsData = []; if (annotations.length === 0) { return annotationsData; } const intentAny = !!(intent & _util.RenderingIntentFlag.ANY), intentDisplay = !!(intent & _util.RenderingIntentFlag.DISPLAY), intentPrint = !!(intent & _util.RenderingIntentFlag.PRINT); for (const annotation of annotations) { if (intentAny || intentDisplay && annotation.viewable || intentPrint && annotation.printable) { annotationsData.push(annotation.data); } } return annotationsData; }); } get annotations() { const annots = this._getInheritableProperty("Annots"); return (0, _util.shadow)(this, "annotations", Array.isArray(annots) ? annots : []); } get _parsedAnnotations() { const parsedAnnotations = this.pdfManager.ensure(this, "annotations").then(() => { const annotationPromises = []; for (const annotationRef of this.annotations) { annotationPromises.push(_annotation.AnnotationFactory.create(this.xref, annotationRef, this.pdfManager, this._localIdFactory, false).catch(function (reason) { (0, _util.warn)(`_parsedAnnotations: "${reason}".`); return null; })); } return Promise.all(annotationPromises).then(function (annotations) { return annotations.filter(annotation => !!annotation); }); }); return (0, _util.shadow)(this, "_parsedAnnotations", parsedAnnotations); } get jsActions() { const actions = (0, _core_utils.collectActions)(this.xref, this.pageDict, _util.PageActionEventType); return (0, _util.shadow)(this, "jsActions", actions); } } exports.Page = Page; const PDF_HEADER_SIGNATURE = new Uint8Array([0x25, 0x50, 0x44, 0x46, 0x2d]); const STARTXREF_SIGNATURE = new Uint8Array([0x73, 0x74, 0x61, 0x72, 0x74, 0x78, 0x72, 0x65, 0x66]); const ENDOBJ_SIGNATURE = new Uint8Array([0x65, 0x6e, 0x64, 0x6f, 0x62, 0x6a]); const FINGERPRINT_FIRST_BYTES = 1024; const EMPTY_FINGERPRINT = "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"; const PDF_HEADER_VERSION_REGEXP = /^[1-9]\.\d$/; function find(stream, signature, limit = 1024, backwards = false) { const signatureLength = signature.length; const scanBytes = stream.peekBytes(limit); const scanLength = scanBytes.length - signatureLength; if (scanLength <= 0) { return false; } if (backwards) { const signatureEnd = signatureLength - 1; let pos = scanBytes.length - 1; while (pos >= signatureEnd) { let j = 0; while (j < signatureLength && scanBytes[pos - j] === signature[signatureEnd - j]) { j++; } if (j >= signatureLength) { stream.pos += pos - signatureEnd; return true; } pos--; } } else { let pos = 0; while (pos <= scanLength) { let j = 0; while (j < signatureLength && scanBytes[pos + j] === signature[j]) { j++; } if (j >= signatureLength) { stream.pos += pos; return true; } pos++; } } return false; } class PDFDocument { constructor(pdfManager, arg) { let stream; if ((0, _primitives.isStream)(arg)) { stream = arg; } else if ((0, _util.isArrayBuffer)(arg)) { stream = new _stream.Stream(arg); } else { throw new Error("PDFDocument: Unknown argument type"); } if (stream.length <= 0) { throw new _util.InvalidPDFException("The PDF file is empty, i.e. its size is zero bytes."); } this.pdfManager = pdfManager; this.stream = stream; this.xref = new _xref.XRef(stream, pdfManager); this._pagePromises = new Map(); this._version = null; const idCounters = { font: 0 }; this._globalIdFactory = class { static getDocId() { return `g_${pdfManager.docId}`; } static createFontId() { return `f${++idCounters.font}`; } static createObjId() { (0, _util.unreachable)("Abstract method `createObjId` called."); } static getPageObjId() { (0, _util.unreachable)("Abstract method `getPageObjId` called."); } }; } parse(recoveryMode) { this.xref.parse(recoveryMode); this.catalog = new _catalog.Catalog(this.pdfManager, this.xref); if (this.catalog.version) { this._version = this.catalog.version; } } get linearization() { let linearization = null; try { linearization = _parser.Linearization.create(this.stream); } catch (err) { if (err instanceof _core_utils.MissingDataException) { throw err; } (0, _util.info)(err); } return (0, _util.shadow)(this, "linearization", linearization); } get startXRef() { const stream = this.stream; let startXRef = 0; if (this.linearization) { stream.reset(); if (find(stream, ENDOBJ_SIGNATURE)) { startXRef = stream.pos + 6 - stream.start; } } else { const step = 1024; const startXRefLength = STARTXREF_SIGNATURE.length; let found = false, pos = stream.end; while (!found && pos > 0) { pos -= step - startXRefLength; if (pos < 0) { pos = 0; } stream.pos = pos; found = find(stream, STARTXREF_SIGNATURE, step, true); } if (found) { stream.skip(9); let ch; do { ch = stream.getByte(); } while ((0, _core_utils.isWhiteSpace)(ch)); let str = ""; while (ch >= 0x20 && ch <= 0x39) { str += String.fromCharCode(ch); ch = stream.getByte(); } startXRef = parseInt(str, 10); if (isNaN(startXRef)) { startXRef = 0; } } } return (0, _util.shadow)(this, "startXRef", startXRef); } checkHeader() { const stream = this.stream; stream.reset(); if (!find(stream, PDF_HEADER_SIGNATURE)) { return; } stream.moveStart(); const MAX_PDF_VERSION_LENGTH = 12; let version = "", ch; while ((ch = stream.getByte()) > 0x20) { if (version.length >= MAX_PDF_VERSION_LENGTH) { break; } version += String.fromCharCode(ch); } if (!this._version) { this._version = version.substring(5); } } parseStartXRef() { this.xref.setStartXRef(this.startXRef); } get numPages() { let num = 0; if (this.catalog.hasActualNumPages) { num = this.catalog.numPages; } else if (this.xfaFactory) { num = this.xfaFactory.getNumPages(); } else if (this.linearization) { num = this.linearization.numPages; } else { num = this.catalog.numPages; } return (0, _util.shadow)(this, "numPages", num); } _hasOnlyDocumentSignatures(fields, recursionDepth = 0) { const RECURSION_LIMIT = 10; if (!Array.isArray(fields)) { return false; } return fields.every(field => { field = this.xref.fetchIfRef(field); if (!(field instanceof _primitives.Dict)) { return false; } if (field.has("Kids")) { if (++recursionDepth > RECURSION_LIMIT) { (0, _util.warn)("_hasOnlyDocumentSignatures: maximum recursion depth reached"); return false; } return this._hasOnlyDocumentSignatures(field.get("Kids"), recursionDepth); } const isSignature = (0, _primitives.isName)(field.get("FT"), "Sig"); const rectangle = field.get("Rect"); const isInvisible = Array.isArray(rectangle) && rectangle.every(value => value === 0); return isSignature && isInvisible; }); } get xfaData() { const acroForm = this.catalog.acroForm; if (!acroForm) { return null; } const xfa = acroForm.get("XFA"); const entries = { "xdp:xdp": "", template: "", datasets: "", config: "", connectionSet: "", localeSet: "", stylesheet: "", "/xdp:xdp": "" }; if ((0, _primitives.isStream)(xfa) && !xfa.isEmpty) { try { entries["xdp:xdp"] = (0, _util.stringToUTF8String)(xfa.getString()); return entries; } catch (_) { (0, _util.warn)("XFA - Invalid utf-8 string."); return null; } } if (!Array.isArray(xfa) || xfa.length === 0) { return null; } for (let i = 0, ii = xfa.length; i < ii; i += 2) { let name; if (i === 0) { name = "xdp:xdp"; } else if (i === ii - 2) { name = "/xdp:xdp"; } else { name = xfa[i]; } if (!entries.hasOwnProperty(name)) { continue; } const data = this.xref.fetchIfRef(xfa[i + 1]); if (!(0, _primitives.isStream)(data) || data.isEmpty) { continue; } try { entries[name] = (0, _util.stringToUTF8String)(data.getString()); } catch (_) { (0, _util.warn)("XFA - Invalid utf-8 string."); return null; } } return entries; } get xfaFactory() { let data; if (this.pdfManager.enableXfa && this.catalog.needsRendering && this.formInfo.hasXfa && !this.formInfo.hasAcroForm) { data = this.xfaData; } return (0, _util.shadow)(this, "xfaFactory", data ? new _factory.XFAFactory(data) : null); } get isPureXfa() { return this.xfaFactory ? this.xfaFactory.isValid() : false; } get htmlForXfa() { return this.xfaFactory ? this.xfaFactory.getPages() : null; } async loadXfaImages() { const xfaImagesDict = await this.pdfManager.ensureCatalog("xfaImages"); if (!xfaImagesDict) { return; } const keys = xfaImagesDict.getKeys(); const objectLoader = new _object_loader.ObjectLoader(xfaImagesDict, keys, this.xref); await objectLoader.load(); const xfaImages = new Map(); for (const key of keys) { const stream = xfaImagesDict.get(key); if (!(0, _primitives.isStream)(stream)) { continue; } xfaImages.set(key, stream.getBytes()); } this.xfaFactory.setImages(xfaImages); } async loadXfaFonts(handler, task) { const acroForm = await this.pdfManager.ensureCatalog("acroForm"); if (!acroForm) { return; } const resources = await acroForm.getAsync("DR"); if (!(resources instanceof _primitives.Dict)) { return; } const objectLoader = new _object_loader.ObjectLoader(resources, ["Font"], this.xref); await objectLoader.load(); const fontRes = resources.get("Font"); if (!(fontRes instanceof _primitives.Dict)) { return; } const options = Object.assign(Object.create(null), this.pdfManager.evaluatorOptions); options.useSystemFonts = false; const partialEvaluator = new _evaluator.PartialEvaluator({ xref: this.xref, handler, pageIndex: -1, idFactory: this._globalIdFactory, fontCache: this.catalog.fontCache, builtInCMapCache: this.catalog.builtInCMapCache, standardFontDataCache: this.catalog.standardFontDataCache, options }); const operatorList = new _operator_list.OperatorList(); const pdfFonts = []; const initialState = { get font() { return pdfFonts[pdfFonts.length - 1]; }, set font(font) { pdfFonts.push(font); }, clone() { return this; } }; const fonts = new Map(); fontRes.forEach((fontName, font) => { fonts.set(fontName, font); }); const promises = []; for (const [fontName, font] of fonts) { const descriptor = font.get("FontDescriptor"); if (!(descriptor instanceof _primitives.Dict)) { continue; } let fontFamily = descriptor.get("FontFamily"); fontFamily = fontFamily.replace(/[ ]+(\d)/g, "$1"); const fontWeight = descriptor.get("FontWeight"); const italicAngle = -descriptor.get("ItalicAngle"); const cssFontInfo = { fontFamily, fontWeight, italicAngle }; if (!(0, _core_utils.validateCSSFont)(cssFontInfo)) { continue; } promises.push(partialEvaluator.handleSetFont(resources, [_primitives.Name.get(fontName), 1], null, operatorList, task, initialState, null, cssFontInfo).catch(function (reason) { (0, _util.warn)(`loadXfaFonts: "${reason}".`); return null; })); } await Promise.all(promises); const missingFonts = this.xfaFactory.setFonts(pdfFonts); if (!missingFonts) { return; } options.ignoreErrors = true; promises.length = 0; pdfFonts.length = 0; const reallyMissingFonts = new Set(); for (const missing of missingFonts) { if (!(0, _xfa_fonts.getXfaFontName)(`${missing}-Regular`)) { reallyMissingFonts.add(missing); } } if (reallyMissingFonts.size) { missingFonts.push("PdfJS-Fallback"); } for (const missing of missingFonts) { if (reallyMissingFonts.has(missing)) { continue; } for (const fontInfo of [{ name: "Regular", fontWeight: 400, italicAngle: 0 }, { name: "Bold", fontWeight: 700, italicAngle: 0 }, { name: "Italic", fontWeight: 400, italicAngle: 12 }, { name: "BoldItalic", fontWeight: 700, italicAngle: 12 }]) { const name = `${missing}-${fontInfo.name}`; const dict = (0, _xfa_fonts.getXfaFontDict)(name); promises.push(partialEvaluator.handleSetFont(resources, [_primitives.Name.get(name), 1], null, operatorList, task, initialState, dict, { fontFamily: missing, fontWeight: fontInfo.fontWeight, italicAngle: fontInfo.italicAngle }).catch(function (reason) { (0, _util.warn)(`loadXfaFonts: "${reason}".`); return null; })); } } await Promise.all(promises); this.xfaFactory.appendFonts(pdfFonts, reallyMissingFonts); } async serializeXfaData(annotationStorage) { return this.xfaFactory ? this.xfaFactory.serializeData(annotationStorage) : null; } get formInfo() { const formInfo = { hasFields: false, hasAcroForm: false, hasXfa: false, hasSignatures: false }; const acroForm = this.catalog.acroForm; if (!acroForm) { return (0, _util.shadow)(this, "formInfo", formInfo); } try { const fields = acroForm.get("Fields"); const hasFields = Array.isArray(fields) && fields.length > 0; formInfo.hasFields = hasFields; const xfa = acroForm.get("XFA"); formInfo.hasXfa = Array.isArray(xfa) && xfa.length > 0 || (0, _primitives.isStream)(xfa) && !xfa.isEmpty; const sigFlags = acroForm.get("SigFlags"); const hasSignatures = !!(sigFlags & 0x1); const hasOnlyDocumentSignatures = hasSignatures && this._hasOnlyDocumentSignatures(fields); formInfo.hasAcroForm = hasFields && !hasOnlyDocumentSignatures; formInfo.hasSignatures = hasSignatures; } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } (0, _util.warn)(`Cannot fetch form information: "${ex}".`); } return (0, _util.shadow)(this, "formInfo", formInfo); } get documentInfo() { const DocumentInfoValidators = { Title: _util.isString, Author: _util.isString, Subject: _util.isString, Keywords: _util.isString, Creator: _util.isString, Producer: _util.isString, CreationDate: _util.isString, ModDate: _util.isString, Trapped: _primitives.isName }; let version = this._version; if (typeof version !== "string" || !PDF_HEADER_VERSION_REGEXP.test(version)) { (0, _util.warn)(`Invalid PDF header version number: ${version}`); version = null; } const docInfo = { PDFFormatVersion: version, Language: this.catalog.lang, EncryptFilterName: this.xref.encrypt ? this.xref.encrypt.filterName : null, IsLinearized: !!this.linearization, IsAcroFormPresent: this.formInfo.hasAcroForm, IsXFAPresent: this.formInfo.hasXfa, IsCollectionPresent: !!this.catalog.collection, IsSignaturesPresent: this.formInfo.hasSignatures }; let infoDict; try { infoDict = this.xref.trailer.get("Info"); } catch (err) { if (err instanceof _core_utils.MissingDataException) { throw err; } (0, _util.info)("The document information dictionary is invalid."); } if ((0, _primitives.isDict)(infoDict)) { for (const key of infoDict.getKeys()) { const value = infoDict.get(key); if (DocumentInfoValidators[key]) { if (DocumentInfoValidators[key](value)) { docInfo[key] = typeof value !== "string" ? value : (0, _util.stringToPDFString)(value); } else { (0, _util.info)(`Bad value in document info for "${key}".`); } } else if (typeof key === "string") { let customValue; if ((0, _util.isString)(value)) { customValue = (0, _util.stringToPDFString)(value); } else if ((0, _primitives.isName)(value) || (0, _util.isNum)(value) || (0, _util.isBool)(value)) { customValue = value; } else { (0, _util.info)(`Unsupported value in document info for (custom) "${key}".`); continue; } if (!docInfo.Custom) { docInfo.Custom = Object.create(null); } docInfo.Custom[key] = customValue; } } } return (0, _util.shadow)(this, "documentInfo", docInfo); } get fingerprints() { function validate(data) { return typeof data === "string" && data.length > 0 && data !== EMPTY_FINGERPRINT; } function hexString(hash) { const buf = []; for (let i = 0, ii = hash.length; i < ii; i++) { const hex = hash[i].toString(16); buf.push(hex.padStart(2, "0")); } return buf.join(""); } const idArray = this.xref.trailer.get("ID"); let hashOriginal, hashModified; if (Array.isArray(idArray) && validate(idArray[0])) { hashOriginal = (0, _util.stringToBytes)(idArray[0]); if (idArray[1] !== idArray[0] && validate(idArray[1])) { hashModified = (0, _util.stringToBytes)(idArray[1]); } } else { hashOriginal = (0, _crypto.calculateMD5)(this.stream.getByteRange(0, FINGERPRINT_FIRST_BYTES), 0, FINGERPRINT_FIRST_BYTES); } return (0, _util.shadow)(this, "fingerprints", [hexString(hashOriginal), hashModified ? hexString(hashModified) : null]); } async _getLinearizationPage(pageIndex) { const { catalog, linearization } = this; const ref = _primitives.Ref.get(linearization.objectNumberFirst, 0); try { const obj = await this.xref.fetchAsync(ref); if ((0, _primitives.isDict)(obj, "Page") || (0, _primitives.isDict)(obj) && !obj.has("Type") && obj.has("Contents")) { if (ref && !catalog.pageKidsCountCache.has(ref)) { catalog.pageKidsCountCache.put(ref, 1); } return [obj, ref]; } throw new _util.FormatError("The Linearization dictionary doesn't point to a valid Page dictionary."); } catch (reason) { (0, _util.info)(reason); return catalog.getPageDict(pageIndex); } } getPage(pageIndex) { const cachedPromise = this._pagePromises.get(pageIndex); if (cachedPromise) { return cachedPromise; } const { catalog, linearization, xfaFactory } = this; let promise; if (xfaFactory) { promise = Promise.resolve([_primitives.Dict.empty, null]); } else if (linearization && linearization.pageFirst === pageIndex) { promise = this._getLinearizationPage(pageIndex); } else { promise = catalog.getPageDict(pageIndex); } promise = promise.then(([pageDict, ref]) => { return new Page({ pdfManager: this.pdfManager, xref: this.xref, pageIndex, pageDict, ref, globalIdFactory: this._globalIdFactory, fontCache: catalog.fontCache, builtInCMapCache: catalog.builtInCMapCache, standardFontDataCache: catalog.standardFontDataCache, globalImageCache: catalog.globalImageCache, nonBlendModesSet: catalog.nonBlendModesSet, xfaFactory }); }); this._pagePromises.set(pageIndex, promise); return promise; } async checkFirstPage(recoveryMode = false) { if (recoveryMode) { return; } try { await this.getPage(0); } catch (reason) { if (reason instanceof _core_utils.XRefEntryException) { this._pagePromises.delete(0); await this.cleanup(); throw new _core_utils.XRefParseException(); } } } async checkLastPage(recoveryMode = false) { const { catalog, pdfManager } = this; catalog.setActualNumPages(); let numPages; try { await Promise.all([pdfManager.ensureDoc("xfaFactory"), pdfManager.ensureDoc("linearization"), pdfManager.ensureCatalog("numPages")]); if (this.xfaFactory) { return; } else if (this.linearization) { numPages = this.linearization.numPages; } else { numPages = catalog.numPages; } if (!Number.isInteger(numPages)) { throw new _util.FormatError("Page count is not an integer."); } else if (numPages <= 1) { return; } await this.getPage(numPages - 1); } catch (reason) { this._pagePromises.delete(numPages - 1); await this.cleanup(); if (reason instanceof _core_utils.XRefEntryException && !recoveryMode) { throw new _core_utils.XRefParseException(); } (0, _util.warn)(`checkLastPage - invalid /Pages tree /Count: ${numPages}.`); let pagesTree; try { pagesTree = await pdfManager.ensureCatalog("getAllPageDicts", [recoveryMode]); } catch (reasonAll) { if (reasonAll instanceof _core_utils.XRefEntryException && !recoveryMode) { throw new _core_utils.XRefParseException(); } catalog.setActualNumPages(1); return; } for (const [pageIndex, [pageDict, ref]] of pagesTree) { let promise; if (pageDict instanceof Error) { promise = Promise.reject(pageDict); promise.catch(() => {}); } else { promise = Promise.resolve(new Page({ pdfManager, xref: this.xref, pageIndex, pageDict, ref, globalIdFactory: this._globalIdFactory, fontCache: catalog.fontCache, builtInCMapCache: catalog.builtInCMapCache, standardFontDataCache: catalog.standardFontDataCache, globalImageCache: catalog.globalImageCache, nonBlendModesSet: catalog.nonBlendModesSet, xfaFactory: null })); } this._pagePromises.set(pageIndex, promise); } catalog.setActualNumPages(pagesTree.size); } } fontFallback(id, handler) { return this.catalog.fontFallback(id, handler); } async cleanup(manuallyTriggered = false) { return this.catalog ? this.catalog.cleanup(manuallyTriggered) : (0, _primitives.clearPrimitiveCaches)(); } _collectFieldObjects(name, fieldRef, promises) { const field = this.xref.fetchIfRef(fieldRef); if (field.has("T")) { const partName = (0, _util.stringToPDFString)(field.get("T")); if (name === "") { name = partName; } else { name = `${name}.${partName}`; } } if (!promises.has(name)) { promises.set(name, []); } promises.get(name).push(_annotation.AnnotationFactory.create(this.xref, fieldRef, this.pdfManager, this._localIdFactory, true).then(annotation => annotation && annotation.getFieldObject()).catch(function (reason) { (0, _util.warn)(`_collectFieldObjects: "${reason}".`); return null; })); if (field.has("Kids")) { const kids = field.get("Kids"); for (const kid of kids) { this._collectFieldObjects(name, kid, promises); } } } get fieldObjects() { if (!this.formInfo.hasFields) { return (0, _util.shadow)(this, "fieldObjects", Promise.resolve(null)); } const allFields = Object.create(null); const fieldPromises = new Map(); for (const fieldRef of this.catalog.acroForm.get("Fields")) { this._collectFieldObjects("", fieldRef, fieldPromises); } const allPromises = []; for (const [name, promises] of fieldPromises) { allPromises.push(Promise.all(promises).then(fields => { fields = fields.filter(field => !!field); if (fields.length > 0) { allFields[name] = fields; } })); } return (0, _util.shadow)(this, "fieldObjects", Promise.all(allPromises).then(() => allFields)); } get hasJSActions() { const promise = this.pdfManager.ensureDoc("_parseHasJSActions"); return (0, _util.shadow)(this, "hasJSActions", promise); } async _parseHasJSActions() { const [catalogJsActions, fieldObjects] = await Promise.all([this.pdfManager.ensureCatalog("jsActions"), this.pdfManager.ensureDoc("fieldObjects")]); if (catalogJsActions) { return true; } if (fieldObjects) { return Object.values(fieldObjects).some(fieldObject => fieldObject.some(object => object.actions !== null)); } return false; } get calculationOrderIds() { const acroForm = this.catalog.acroForm; if (!acroForm || !acroForm.has("CO")) { return (0, _util.shadow)(this, "calculationOrderIds", null); } const calculationOrder = acroForm.get("CO"); if (!Array.isArray(calculationOrder) || calculationOrder.length === 0) { return (0, _util.shadow)(this, "calculationOrderIds", null); } const ids = calculationOrder.filter(_primitives.isRef).map(ref => ref.toString()); if (ids.length === 0) { return (0, _util.shadow)(this, "calculationOrderIds", null); } return (0, _util.shadow)(this, "calculationOrderIds", ids); } } exports.PDFDocument = PDFDocument; /***/ }), /* 12 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.getXfaFontDict = getXfaFontDict; exports.getXfaFontName = getXfaFontName; var _calibri_factors = __w_pdfjs_require__(13); var _primitives = __w_pdfjs_require__(5); var _helvetica_factors = __w_pdfjs_require__(14); var _liberationsans_widths = __w_pdfjs_require__(15); var _myriadpro_factors = __w_pdfjs_require__(16); var _segoeui_factors = __w_pdfjs_require__(17); var _core_utils = __w_pdfjs_require__(9); var _fonts_utils = __w_pdfjs_require__(18); const getXFAFontMap = (0, _core_utils.getLookupTableFactory)(function (t) { t["MyriadPro-Regular"] = t["PdfJS-Fallback-Regular"] = { name: "LiberationSans-Regular", factors: _myriadpro_factors.MyriadProRegularFactors, baseWidths: _liberationsans_widths.LiberationSansRegularWidths, baseMapping: _liberationsans_widths.LiberationSansRegularMapping, metrics: _myriadpro_factors.MyriadProRegularMetrics }; t["MyriadPro-Bold"] = t["PdfJS-Fallback-Bold"] = { name: "LiberationSans-Bold", factors: _myriadpro_factors.MyriadProBoldFactors, baseWidths: _liberationsans_widths.LiberationSansBoldWidths, baseMapping: _liberationsans_widths.LiberationSansBoldMapping, metrics: _myriadpro_factors.MyriadProBoldMetrics }; t["MyriadPro-It"] = t["MyriadPro-Italic"] = t["PdfJS-Fallback-Italic"] = { name: "LiberationSans-Italic", factors: _myriadpro_factors.MyriadProItalicFactors, baseWidths: _liberationsans_widths.LiberationSansItalicWidths, baseMapping: _liberationsans_widths.LiberationSansItalicMapping, metrics: _myriadpro_factors.MyriadProItalicMetrics }; t["MyriadPro-BoldIt"] = t["MyriadPro-BoldItalic"] = t["PdfJS-Fallback-BoldItalic"] = { name: "LiberationSans-BoldItalic", factors: _myriadpro_factors.MyriadProBoldItalicFactors, baseWidths: _liberationsans_widths.LiberationSansBoldItalicWidths, baseMapping: _liberationsans_widths.LiberationSansBoldItalicMapping, metrics: _myriadpro_factors.MyriadProBoldItalicMetrics }; t.ArialMT = t.Arial = t["Arial-Regular"] = { name: "LiberationSans-Regular", baseWidths: _liberationsans_widths.LiberationSansRegularWidths, baseMapping: _liberationsans_widths.LiberationSansRegularMapping }; t["Arial-BoldMT"] = t["Arial-Bold"] = { name: "LiberationSans-Bold", baseWidths: _liberationsans_widths.LiberationSansBoldWidths, baseMapping: _liberationsans_widths.LiberationSansBoldMapping }; t["Arial-ItalicMT"] = t["Arial-Italic"] = { name: "LiberationSans-Italic", baseWidths: _liberationsans_widths.LiberationSansItalicWidths, baseMapping: _liberationsans_widths.LiberationSansItalicMapping }; t["Arial-BoldItalicMT"] = t["Arial-BoldItalic"] = { name: "LiberationSans-BoldItalic", baseWidths: _liberationsans_widths.LiberationSansBoldItalicWidths, baseMapping: _liberationsans_widths.LiberationSansBoldItalicMapping }; t["Calibri-Regular"] = { name: "LiberationSans-Regular", factors: _calibri_factors.CalibriRegularFactors, baseWidths: _liberationsans_widths.LiberationSansRegularWidths, baseMapping: _liberationsans_widths.LiberationSansRegularMapping, metrics: _calibri_factors.CalibriRegularMetrics }; t["Calibri-Bold"] = { name: "LiberationSans-Bold", factors: _calibri_factors.CalibriBoldFactors, baseWidths: _liberationsans_widths.LiberationSansBoldWidths, baseMapping: _liberationsans_widths.LiberationSansBoldMapping, metrics: _calibri_factors.CalibriBoldMetrics }; t["Calibri-Italic"] = { name: "LiberationSans-Italic", factors: _calibri_factors.CalibriItalicFactors, baseWidths: _liberationsans_widths.LiberationSansItalicWidths, baseMapping: _liberationsans_widths.LiberationSansItalicMapping, metrics: _calibri_factors.CalibriItalicMetrics }; t["Calibri-BoldItalic"] = { name: "LiberationSans-BoldItalic", factors: _calibri_factors.CalibriBoldItalicFactors, baseWidths: _liberationsans_widths.LiberationSansBoldItalicWidths, baseMapping: _liberationsans_widths.LiberationSansBoldItalicMapping, metrics: _calibri_factors.CalibriBoldItalicMetrics }; t["Segoeui-Regular"] = { name: "LiberationSans-Regular", factors: _segoeui_factors.SegoeuiRegularFactors, baseWidths: _liberationsans_widths.LiberationSansRegularWidths, baseMapping: _liberationsans_widths.LiberationSansRegularMapping, metrics: _segoeui_factors.SegoeuiRegularMetrics }; t["Segoeui-Bold"] = { name: "LiberationSans-Bold", factors: _segoeui_factors.SegoeuiBoldFactors, baseWidths: _liberationsans_widths.LiberationSansBoldWidths, baseMapping: _liberationsans_widths.LiberationSansBoldMapping, metrics: _segoeui_factors.SegoeuiBoldMetrics }; t["Segoeui-Italic"] = { name: "LiberationSans-Italic", factors: _segoeui_factors.SegoeuiItalicFactors, baseWidths: _liberationsans_widths.LiberationSansItalicWidths, baseMapping: _liberationsans_widths.LiberationSansItalicMapping, metrics: _segoeui_factors.SegoeuiItalicMetrics }; t["Segoeui-BoldItalic"] = { name: "LiberationSans-BoldItalic", factors: _segoeui_factors.SegoeuiBoldItalicFactors, baseWidths: _liberationsans_widths.LiberationSansBoldItalicWidths, baseMapping: _liberationsans_widths.LiberationSansBoldItalicMapping, metrics: _segoeui_factors.SegoeuiBoldItalicMetrics }; t["Helvetica-Regular"] = t.Helvetica = { name: "LiberationSans-Regular", factors: _helvetica_factors.HelveticaRegularFactors, baseWidths: _liberationsans_widths.LiberationSansRegularWidths, baseMapping: _liberationsans_widths.LiberationSansRegularMapping, metrics: _helvetica_factors.HelveticaRegularMetrics }; t["Helvetica-Bold"] = { name: "LiberationSans-Bold", factors: _helvetica_factors.HelveticaBoldFactors, baseWidths: _liberationsans_widths.LiberationSansBoldWidths, baseMapping: _liberationsans_widths.LiberationSansBoldMapping, metrics: _helvetica_factors.HelveticaBoldMetrics }; t["Helvetica-Italic"] = { name: "LiberationSans-Italic", factors: _helvetica_factors.HelveticaItalicFactors, baseWidths: _liberationsans_widths.LiberationSansItalicWidths, baseMapping: _liberationsans_widths.LiberationSansItalicMapping, metrics: _helvetica_factors.HelveticaItalicMetrics }; t["Helvetica-BoldItalic"] = { name: "LiberationSans-BoldItalic", factors: _helvetica_factors.HelveticaBoldItalicFactors, baseWidths: _liberationsans_widths.LiberationSansBoldItalicWidths, baseMapping: _liberationsans_widths.LiberationSansBoldItalicMapping, metrics: _helvetica_factors.HelveticaBoldItalicMetrics }; }); function getXfaFontName(name) { const fontName = (0, _fonts_utils.normalizeFontName)(name); const fontMap = getXFAFontMap(); return fontMap[fontName]; } function getXfaFontWidths(name) { const info = getXfaFontName(name); if (!info) { return null; } const { baseWidths, baseMapping, factors } = info; let rescaledBaseWidths; if (!factors) { rescaledBaseWidths = baseWidths; } else { rescaledBaseWidths = baseWidths.map((w, i) => w * factors[i]); } let currentCode = -2; let currentArray; const newWidths = []; for (const [unicode, glyphIndex] of baseMapping.map((charUnicode, index) => [charUnicode, index]).sort(([unicode1], [unicode2]) => unicode1 - unicode2)) { if (unicode === -1) { continue; } if (unicode === currentCode + 1) { currentArray.push(rescaledBaseWidths[glyphIndex]); currentCode += 1; } else { currentCode = unicode; currentArray = [rescaledBaseWidths[glyphIndex]]; newWidths.push(unicode, currentArray); } } return newWidths; } function getXfaFontDict(name) { const widths = getXfaFontWidths(name); const dict = new _primitives.Dict(null); dict.set("BaseFont", _primitives.Name.get(name)); dict.set("Type", _primitives.Name.get("Font")); dict.set("Subtype", _primitives.Name.get("CIDFontType2")); dict.set("Encoding", _primitives.Name.get("Identity-H")); dict.set("CIDToGIDMap", _primitives.Name.get("Identity")); dict.set("W", widths); dict.set("FirstChar", widths[0]); dict.set("LastChar", widths[widths.length - 2] + widths[widths.length - 1].length - 1); const descriptor = new _primitives.Dict(null); dict.set("FontDescriptor", descriptor); const systemInfo = new _primitives.Dict(null); systemInfo.set("Ordering", "Identity"); systemInfo.set("Registry", "Adobe"); systemInfo.set("Supplement", 0); dict.set("CIDSystemInfo", systemInfo); return dict; } /***/ }), /* 13 */ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.CalibriRegularMetrics = exports.CalibriRegularFactors = exports.CalibriItalicMetrics = exports.CalibriItalicFactors = exports.CalibriBoldMetrics = exports.CalibriBoldItalicMetrics = exports.CalibriBoldItalicFactors = exports.CalibriBoldFactors = void 0; const CalibriBoldFactors = [1.3877, 1, 1, 1, 0.97801, 0.92482, 0.89552, 0.91133, 0.81988, 0.97566, 0.98152, 0.93548, 0.93548, 1.2798, 0.85284, 0.92794, 1, 0.96134, 1.54657, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.82845, 0.82845, 0.85284, 0.85284, 0.85284, 0.75859, 0.92138, 0.83908, 0.7762, 0.73293, 0.87289, 0.73133, 0.7514, 0.81921, 0.87356, 0.95958, 0.59526, 0.75727, 0.69225, 1.04924, 0.9121, 0.86943, 0.79795, 0.88198, 0.77958, 0.70864, 0.81055, 0.90399, 0.88653, 0.96017, 0.82577, 0.77892, 0.78257, 0.97507, 1.54657, 0.97507, 0.85284, 0.89552, 0.90176, 0.88762, 0.8785, 0.75241, 0.8785, 0.90518, 0.95015, 0.77618, 0.8785, 0.88401, 0.91916, 0.86304, 0.88401, 0.91488, 0.8785, 0.8801, 0.8785, 0.8785, 0.91343, 0.7173, 1.04106, 0.8785, 0.85075, 0.95794, 0.82616, 0.85162, 0.79492, 0.88331, 1.69808, 0.88331, 0.85284, 0.97801, 0.89552, 0.91133, 0.89552, 0.91133, 1.7801, 0.89552, 1.24487, 1.13254, 1.12401, 0.96839, 0.85284, 0.68787, 0.70645, 0.85592, 0.90747, 1.01466, 1.0088, 0.90323, 1, 1.07463, 1, 0.91056, 0.75806, 1.19118, 0.96839, 0.78864, 0.82845, 0.84133, 0.75859, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.77539, 0.73293, 0.73133, 0.73133, 0.73133, 0.73133, 0.95958, 0.95958, 0.95958, 0.95958, 0.88506, 0.9121, 0.86943, 0.86943, 0.86943, 0.86943, 0.86943, 0.85284, 0.87508, 0.90399, 0.90399, 0.90399, 0.90399, 0.77892, 0.79795, 0.90807, 0.88762, 0.88762, 0.88762, 0.88762, 0.88762, 0.88762, 0.8715, 0.75241, 0.90518, 0.90518, 0.90518, 0.90518, 0.88401, 0.88401, 0.88401, 0.88401, 0.8785, 0.8785, 0.8801, 0.8801, 0.8801, 0.8801, 0.8801, 0.90747, 0.89049, 0.8785, 0.8785, 0.8785, 0.8785, 0.85162, 0.8785, 0.85162, 0.83908, 0.88762, 0.83908, 0.88762, 0.83908, 0.88762, 0.73293, 0.75241, 0.73293, 0.75241, 0.73293, 0.75241, 0.73293, 0.75241, 0.87289, 0.83016, 0.88506, 0.93125, 0.73133, 0.90518, 0.73133, 0.90518, 0.73133, 0.90518, 0.73133, 0.90518, 0.73133, 0.90518, 0.81921, 0.77618, 0.81921, 0.77618, 0.81921, 0.77618, 1, 1, 0.87356, 0.8785, 0.91075, 0.89608, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.76229, 0.90167, 0.59526, 0.91916, 1, 1, 0.86304, 0.69225, 0.88401, 1, 1, 0.70424, 0.79468, 0.91926, 0.88175, 0.70823, 0.94903, 0.9121, 0.8785, 1, 1, 0.9121, 0.8785, 0.87802, 0.88656, 0.8785, 0.86943, 0.8801, 0.86943, 0.8801, 0.86943, 0.8801, 0.87402, 0.89291, 0.77958, 0.91343, 1, 1, 0.77958, 0.91343, 0.70864, 0.7173, 0.70864, 0.7173, 0.70864, 0.7173, 0.70864, 0.7173, 1, 1, 0.81055, 0.75841, 0.81055, 1.06452, 0.90399, 0.8785, 0.90399, 0.8785, 0.90399, 0.8785, 0.90399, 0.8785, 0.90399, 0.8785, 0.90399, 0.8785, 0.96017, 0.95794, 0.77892, 0.85162, 0.77892, 0.78257, 0.79492, 0.78257, 0.79492, 0.78257, 0.79492, 0.9297, 0.56892, 0.83908, 0.88762, 0.77539, 0.8715, 0.87508, 0.89049, 1, 1, 0.81055, 1.04106, 1.20528, 1.20528, 1, 1.15543, 0.70674, 0.98387, 0.94721, 1.33431, 1.45894, 0.95161, 1.06303, 0.83908, 0.80352, 0.57184, 0.6965, 0.56289, 0.82001, 0.56029, 0.81235, 1.02988, 0.83908, 0.7762, 0.68156, 0.80367, 0.73133, 0.78257, 0.87356, 0.86943, 0.95958, 0.75727, 0.89019, 1.04924, 0.9121, 0.7648, 0.86943, 0.87356, 0.79795, 0.78275, 0.81055, 0.77892, 0.9762, 0.82577, 0.99819, 0.84896, 0.95958, 0.77892, 0.96108, 1.01407, 0.89049, 1.02988, 0.94211, 0.96108, 0.8936, 0.84021, 0.87842, 0.96399, 0.79109, 0.89049, 1.00813, 1.02988, 0.86077, 0.87445, 0.92099, 0.84723, 0.86513, 0.8801, 0.75638, 0.85714, 0.78216, 0.79586, 0.87965, 0.94211, 0.97747, 0.78287, 0.97926, 0.84971, 1.02988, 0.94211, 0.8801, 0.94211, 0.84971, 0.73133, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90264, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90518, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90548, 1, 1, 1, 1, 1, 1, 0.96017, 0.95794, 0.96017, 0.95794, 0.96017, 0.95794, 0.77892, 0.85162, 1, 1, 0.89552, 0.90527, 1, 0.90363, 0.92794, 0.92794, 0.92794, 0.92794, 0.87012, 0.87012, 0.87012, 0.89552, 0.89552, 1.42259, 0.71143, 1.06152, 1, 1, 1.03372, 1.03372, 0.97171, 1.4956, 2.2807, 0.93835, 0.83406, 0.91133, 0.84107, 0.91133, 1, 1, 1, 0.72021, 1, 1.23108, 0.83489, 0.88525, 0.88525, 0.81499, 0.90527, 1.81055, 0.90527, 1.81055, 1.31006, 1.53711, 0.94434, 1.08696, 1, 0.95018, 0.77192, 0.85284, 0.90747, 1.17534, 0.69825, 0.9716, 1.37077, 0.90747, 0.90747, 0.85356, 0.90747, 0.90747, 1.44947, 0.85284, 0.8941, 0.8941, 0.70572, 0.8, 0.70572, 0.70572, 0.70572, 0.70572, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.99862, 0.99862, 1, 1, 1, 1, 1, 1.08004, 0.91027, 1, 1, 1, 0.99862, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90727, 0.90727, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; exports.CalibriBoldFactors = CalibriBoldFactors; const CalibriBoldMetrics = { lineHeight: 1.2207, lineGap: 0.2207 }; exports.CalibriBoldMetrics = CalibriBoldMetrics; const CalibriBoldItalicFactors = [1.3877, 1, 1, 1, 0.97801, 0.92482, 0.89552, 0.91133, 0.81988, 0.97566, 0.98152, 0.93548, 0.93548, 1.2798, 0.85284, 0.92794, 1, 0.96134, 1.56239, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.82845, 0.82845, 0.85284, 0.85284, 0.85284, 0.75859, 0.92138, 0.83908, 0.7762, 0.71805, 0.87289, 0.73133, 0.7514, 0.81921, 0.87356, 0.95958, 0.59526, 0.75727, 0.69225, 1.04924, 0.90872, 0.85938, 0.79795, 0.87068, 0.77958, 0.69766, 0.81055, 0.90399, 0.88653, 0.96068, 0.82577, 0.77892, 0.78257, 0.97507, 1.529, 0.97507, 0.85284, 0.89552, 0.90176, 0.94908, 0.86411, 0.74012, 0.86411, 0.88323, 0.95015, 0.86411, 0.86331, 0.88401, 0.91916, 0.86304, 0.88401, 0.9039, 0.86331, 0.86331, 0.86411, 0.86411, 0.90464, 0.70852, 1.04106, 0.86331, 0.84372, 0.95794, 0.82616, 0.84548, 0.79492, 0.88331, 1.69808, 0.88331, 0.85284, 0.97801, 0.89552, 0.91133, 0.89552, 0.91133, 1.7801, 0.89552, 1.24487, 1.13254, 1.19129, 0.96839, 0.85284, 0.68787, 0.70645, 0.85592, 0.90747, 1.01466, 1.0088, 0.90323, 1, 1.07463, 1, 0.91056, 0.75806, 1.19118, 0.96839, 0.78864, 0.82845, 0.84133, 0.75859, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.83908, 0.77539, 0.71805, 0.73133, 0.73133, 0.73133, 0.73133, 0.95958, 0.95958, 0.95958, 0.95958, 0.88506, 0.90872, 0.85938, 0.85938, 0.85938, 0.85938, 0.85938, 0.85284, 0.87068, 0.90399, 0.90399, 0.90399, 0.90399, 0.77892, 0.79795, 0.90807, 0.94908, 0.94908, 0.94908, 0.94908, 0.94908, 0.94908, 0.85887, 0.74012, 0.88323, 0.88323, 0.88323, 0.88323, 0.88401, 0.88401, 0.88401, 0.88401, 0.8785, 0.86331, 0.86331, 0.86331, 0.86331, 0.86331, 0.86331, 0.90747, 0.89049, 0.86331, 0.86331, 0.86331, 0.86331, 0.84548, 0.86411, 0.84548, 0.83908, 0.94908, 0.83908, 0.94908, 0.83908, 0.94908, 0.71805, 0.74012, 0.71805, 0.74012, 0.71805, 0.74012, 0.71805, 0.74012, 0.87289, 0.79538, 0.88506, 0.92726, 0.73133, 0.88323, 0.73133, 0.88323, 0.73133, 0.88323, 0.73133, 0.88323, 0.73133, 0.88323, 0.81921, 0.86411, 0.81921, 0.86411, 0.81921, 0.86411, 1, 1, 0.87356, 0.86331, 0.91075, 0.8777, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.95958, 0.88401, 0.76467, 0.90167, 0.59526, 0.91916, 1, 1, 0.86304, 0.69225, 0.88401, 1, 1, 0.70424, 0.77312, 0.91926, 0.88175, 0.70823, 0.94903, 0.90872, 0.86331, 1, 1, 0.90872, 0.86331, 0.86906, 0.88116, 0.86331, 0.85938, 0.86331, 0.85938, 0.86331, 0.85938, 0.86331, 0.87402, 0.86549, 0.77958, 0.90464, 1, 1, 0.77958, 0.90464, 0.69766, 0.70852, 0.69766, 0.70852, 0.69766, 0.70852, 0.69766, 0.70852, 1, 1, 0.81055, 0.75841, 0.81055, 1.06452, 0.90399, 0.86331, 0.90399, 0.86331, 0.90399, 0.86331, 0.90399, 0.86331, 0.90399, 0.86331, 0.90399, 0.86331, 0.96068, 0.95794, 0.77892, 0.84548, 0.77892, 0.78257, 0.79492, 0.78257, 0.79492, 0.78257, 0.79492, 0.9297, 0.56892, 0.83908, 0.94908, 0.77539, 0.85887, 0.87068, 0.89049, 1, 1, 0.81055, 1.04106, 1.20528, 1.20528, 1, 1.15543, 0.70088, 0.98387, 0.94721, 1.33431, 1.45894, 0.95161, 1.48387, 0.83908, 0.80352, 0.57118, 0.6965, 0.56347, 0.79179, 0.55853, 0.80346, 1.02988, 0.83908, 0.7762, 0.67174, 0.86036, 0.73133, 0.78257, 0.87356, 0.86441, 0.95958, 0.75727, 0.89019, 1.04924, 0.90872, 0.74889, 0.85938, 0.87891, 0.79795, 0.7957, 0.81055, 0.77892, 0.97447, 0.82577, 0.97466, 0.87179, 0.95958, 0.77892, 0.94252, 0.95612, 0.8753, 1.02988, 0.92733, 0.94252, 0.87411, 0.84021, 0.8728, 0.95612, 0.74081, 0.8753, 1.02189, 1.02988, 0.84814, 0.87445, 0.91822, 0.84723, 0.85668, 0.86331, 0.81344, 0.87581, 0.76422, 0.82046, 0.96057, 0.92733, 0.99375, 0.78022, 0.95452, 0.86015, 1.02988, 0.92733, 0.86331, 0.92733, 0.86015, 0.73133, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90631, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.88323, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.85174, 1, 1, 1, 1, 1, 1, 0.96068, 0.95794, 0.96068, 0.95794, 0.96068, 0.95794, 0.77892, 0.84548, 1, 1, 0.89552, 0.90527, 1, 0.90363, 0.92794, 0.92794, 0.92794, 0.89807, 0.87012, 0.87012, 0.87012, 0.89552, 0.89552, 1.42259, 0.71094, 1.06152, 1, 1, 1.03372, 1.03372, 0.97171, 1.4956, 2.2807, 0.92972, 0.83406, 0.91133, 0.83326, 0.91133, 1, 1, 1, 0.72021, 1, 1.23108, 0.83489, 0.88525, 0.88525, 0.81499, 0.90616, 1.81055, 0.90527, 1.81055, 1.3107, 1.53711, 0.94434, 1.08696, 1, 0.95018, 0.77192, 0.85284, 0.90747, 1.17534, 0.69825, 0.9716, 1.37077, 0.90747, 0.90747, 0.85356, 0.90747, 0.90747, 1.44947, 0.85284, 0.8941, 0.8941, 0.70572, 0.8, 0.70572, 0.70572, 0.70572, 0.70572, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.99862, 0.99862, 1, 1, 1, 1, 1, 1.08004, 0.91027, 1, 1, 1, 0.99862, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90727, 0.90727, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; exports.CalibriBoldItalicFactors = CalibriBoldItalicFactors; const CalibriBoldItalicMetrics = { lineHeight: 1.2207, lineGap: 0.2207 }; exports.CalibriBoldItalicMetrics = CalibriBoldItalicMetrics; const CalibriItalicFactors = [1.3877, 1, 1, 1, 1.17223, 1.1293, 0.89552, 0.91133, 0.80395, 1.02269, 1.15601, 0.91056, 0.91056, 1.2798, 0.85284, 0.89807, 1, 0.90861, 1.39543, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.96309, 0.96309, 0.85284, 0.85284, 0.85284, 0.83319, 0.88071, 0.8675, 0.81552, 0.72346, 0.85193, 0.73206, 0.7522, 0.81105, 0.86275, 0.90685, 0.6377, 0.77892, 0.75593, 1.02638, 0.89249, 0.84118, 0.77452, 0.85374, 0.75186, 0.67789, 0.79776, 0.88844, 0.85066, 0.94309, 0.77818, 0.7306, 0.76659, 1.10369, 1.38313, 1.10369, 1.06139, 0.89552, 0.8739, 0.9245, 0.9245, 0.83203, 0.9245, 0.85865, 1.09842, 0.9245, 0.9245, 1.03297, 1.07692, 0.90918, 1.03297, 0.94959, 0.9245, 0.92274, 0.9245, 0.9245, 1.02933, 0.77832, 1.20562, 0.9245, 0.8916, 0.98986, 0.86621, 0.89453, 0.79004, 0.94152, 1.77256, 0.94152, 0.85284, 0.97801, 0.89552, 0.91133, 0.89552, 0.91133, 1.91729, 0.89552, 1.17889, 1.13254, 1.16359, 0.92098, 0.85284, 0.68787, 0.71353, 0.84737, 0.90747, 1.0088, 1.0044, 0.87683, 1, 1.09091, 1, 0.92229, 0.739, 1.15642, 0.92098, 0.76288, 0.80504, 0.80972, 0.75859, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.76318, 0.72346, 0.73206, 0.73206, 0.73206, 0.73206, 0.90685, 0.90685, 0.90685, 0.90685, 0.86477, 0.89249, 0.84118, 0.84118, 0.84118, 0.84118, 0.84118, 0.85284, 0.84557, 0.88844, 0.88844, 0.88844, 0.88844, 0.7306, 0.77452, 0.86331, 0.9245, 0.9245, 0.9245, 0.9245, 0.9245, 0.9245, 0.84843, 0.83203, 0.85865, 0.85865, 0.85865, 0.85865, 0.82601, 0.82601, 0.82601, 0.82601, 0.94469, 0.9245, 0.92274, 0.92274, 0.92274, 0.92274, 0.92274, 0.90747, 0.86651, 0.9245, 0.9245, 0.9245, 0.9245, 0.89453, 0.9245, 0.89453, 0.8675, 0.9245, 0.8675, 0.9245, 0.8675, 0.9245, 0.72346, 0.83203, 0.72346, 0.83203, 0.72346, 0.83203, 0.72346, 0.83203, 0.85193, 0.8875, 0.86477, 0.99034, 0.73206, 0.85865, 0.73206, 0.85865, 0.73206, 0.85865, 0.73206, 0.85865, 0.73206, 0.85865, 0.81105, 0.9245, 0.81105, 0.9245, 0.81105, 0.9245, 1, 1, 0.86275, 0.9245, 0.90872, 0.93591, 0.90685, 0.82601, 0.90685, 0.82601, 0.90685, 0.82601, 0.90685, 1.03297, 0.90685, 0.82601, 0.77896, 1.05611, 0.6377, 1.07692, 1, 1, 0.90918, 0.75593, 1.03297, 1, 1, 0.76032, 0.9375, 0.98156, 0.93407, 0.77261, 1.11429, 0.89249, 0.9245, 1, 1, 0.89249, 0.9245, 0.92534, 0.86698, 0.9245, 0.84118, 0.92274, 0.84118, 0.92274, 0.84118, 0.92274, 0.8667, 0.86291, 0.75186, 1.02933, 1, 1, 0.75186, 1.02933, 0.67789, 0.77832, 0.67789, 0.77832, 0.67789, 0.77832, 0.67789, 0.77832, 1, 1, 0.79776, 0.97655, 0.79776, 1.23023, 0.88844, 0.9245, 0.88844, 0.9245, 0.88844, 0.9245, 0.88844, 0.9245, 0.88844, 0.9245, 0.88844, 0.9245, 0.94309, 0.98986, 0.7306, 0.89453, 0.7306, 0.76659, 0.79004, 0.76659, 0.79004, 0.76659, 0.79004, 1.09231, 0.54873, 0.8675, 0.9245, 0.76318, 0.84843, 0.84557, 0.86651, 1, 1, 0.79776, 1.20562, 1.18622, 1.18622, 1, 1.1437, 0.67009, 0.96334, 0.93695, 1.35191, 1.40909, 0.95161, 1.48387, 0.8675, 0.90861, 0.6192, 0.7363, 0.64824, 0.82411, 0.56321, 0.85696, 1.23516, 0.8675, 0.81552, 0.7286, 0.84134, 0.73206, 0.76659, 0.86275, 0.84369, 0.90685, 0.77892, 0.85871, 1.02638, 0.89249, 0.75828, 0.84118, 0.85984, 0.77452, 0.76466, 0.79776, 0.7306, 0.90782, 0.77818, 0.903, 0.87291, 0.90685, 0.7306, 0.99058, 1.03667, 0.94635, 1.23516, 0.9849, 0.99058, 0.92393, 0.8916, 0.942, 1.03667, 0.75026, 0.94635, 1.0297, 1.23516, 0.90918, 0.94048, 0.98217, 0.89746, 0.84153, 0.92274, 0.82507, 0.88832, 0.84438, 0.88178, 1.03525, 0.9849, 1.00225, 0.78086, 0.97248, 0.89404, 1.23516, 0.9849, 0.92274, 0.9849, 0.89404, 0.73206, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.89693, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.85865, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.90933, 1, 1, 1, 1, 1, 1, 0.94309, 0.98986, 0.94309, 0.98986, 0.94309, 0.98986, 0.7306, 0.89453, 1, 1, 0.89552, 0.90527, 1, 0.90186, 1.12308, 1.12308, 1.12308, 1.12308, 1.2566, 1.2566, 1.2566, 0.89552, 0.89552, 1.42259, 0.68994, 1.03809, 1, 1, 1.0176, 1.0176, 1.11523, 1.4956, 2.01462, 0.97858, 0.82616, 0.91133, 0.83437, 0.91133, 1, 1, 1, 0.70508, 1, 1.23108, 0.79801, 0.84426, 0.84426, 0.774, 0.90572, 1.81055, 0.90749, 1.81055, 1.28809, 1.55469, 0.94434, 1.07806, 1, 0.97094, 0.7589, 0.85284, 0.90747, 1.19658, 0.69825, 0.97622, 1.33512, 0.90747, 0.90747, 0.85284, 0.90747, 0.90747, 1.44947, 0.85284, 0.8941, 0.8941, 0.70572, 0.8, 0.70572, 0.70572, 0.70572, 0.70572, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.99862, 0.99862, 1, 1, 1, 1, 1, 1.0336, 0.91027, 1, 1, 1, 0.99862, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.05859, 1.05859, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; exports.CalibriItalicFactors = CalibriItalicFactors; const CalibriItalicMetrics = { lineHeight: 1.2207, lineGap: 0.2207 }; exports.CalibriItalicMetrics = CalibriItalicMetrics; const CalibriRegularFactors = [1.3877, 1, 1, 1, 1.17223, 1.1293, 0.89552, 0.91133, 0.80395, 1.02269, 1.15601, 0.91056, 0.91056, 1.2798, 0.85284, 0.89807, 1, 0.90861, 1.39016, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.91133, 0.96309, 0.96309, 0.85284, 0.85284, 0.85284, 0.83319, 0.88071, 0.8675, 0.81552, 0.73834, 0.85193, 0.73206, 0.7522, 0.81105, 0.86275, 0.90685, 0.6377, 0.77892, 0.75593, 1.02638, 0.89385, 0.85122, 0.77452, 0.86503, 0.75186, 0.68887, 0.79776, 0.88844, 0.85066, 0.94258, 0.77818, 0.7306, 0.76659, 1.10369, 1.39016, 1.10369, 1.06139, 0.89552, 0.8739, 0.86128, 0.94469, 0.8457, 0.94469, 0.89464, 1.09842, 0.84636, 0.94469, 1.03297, 1.07692, 0.90918, 1.03297, 0.95897, 0.94469, 0.9482, 0.94469, 0.94469, 1.04692, 0.78223, 1.20562, 0.94469, 0.90332, 0.98986, 0.86621, 0.90527, 0.79004, 0.94152, 1.77256, 0.94152, 0.85284, 0.97801, 0.89552, 0.91133, 0.89552, 0.91133, 1.91729, 0.89552, 1.17889, 1.13254, 1.08707, 0.92098, 0.85284, 0.68787, 0.71353, 0.84737, 0.90747, 1.0088, 1.0044, 0.87683, 1, 1.09091, 1, 0.92229, 0.739, 1.15642, 0.92098, 0.76288, 0.80504, 0.80972, 0.75859, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.8675, 0.76318, 0.73834, 0.73206, 0.73206, 0.73206, 0.73206, 0.90685, 0.90685, 0.90685, 0.90685, 0.86477, 0.89385, 0.85122, 0.85122, 0.85122, 0.85122, 0.85122, 0.85284, 0.85311, 0.88844, 0.88844, 0.88844, 0.88844, 0.7306, 0.77452, 0.86331, 0.86128, 0.86128, 0.86128, 0.86128, 0.86128, 0.86128, 0.8693, 0.8457, 0.89464, 0.89464, 0.89464, 0.89464, 0.82601, 0.82601, 0.82601, 0.82601, 0.94469, 0.94469, 0.9482, 0.9482, 0.9482, 0.9482, 0.9482, 0.90747, 0.86651, 0.94469, 0.94469, 0.94469, 0.94469, 0.90527, 0.94469, 0.90527, 0.8675, 0.86128, 0.8675, 0.86128, 0.8675, 0.86128, 0.73834, 0.8457, 0.73834, 0.8457, 0.73834, 0.8457, 0.73834, 0.8457, 0.85193, 0.92454, 0.86477, 0.9921, 0.73206, 0.89464, 0.73206, 0.89464, 0.73206, 0.89464, 0.73206, 0.89464, 0.73206, 0.89464, 0.81105, 0.84636, 0.81105, 0.84636, 0.81105, 0.84636, 1, 1, 0.86275, 0.94469, 0.90872, 0.95786, 0.90685, 0.82601, 0.90685, 0.82601, 0.90685, 0.82601, 0.90685, 1.03297, 0.90685, 0.82601, 0.77741, 1.05611, 0.6377, 1.07692, 1, 1, 0.90918, 0.75593, 1.03297, 1, 1, 0.76032, 0.90452, 0.98156, 1.11842, 0.77261, 1.11429, 0.89385, 0.94469, 1, 1, 0.89385, 0.94469, 0.95877, 0.86901, 0.94469, 0.85122, 0.9482, 0.85122, 0.9482, 0.85122, 0.9482, 0.8667, 0.90016, 0.75186, 1.04692, 1, 1, 0.75186, 1.04692, 0.68887, 0.78223, 0.68887, 0.78223, 0.68887, 0.78223, 0.68887, 0.78223, 1, 1, 0.79776, 0.92188, 0.79776, 1.23023, 0.88844, 0.94469, 0.88844, 0.94469, 0.88844, 0.94469, 0.88844, 0.94469, 0.88844, 0.94469, 0.88844, 0.94469, 0.94258, 0.98986, 0.7306, 0.90527, 0.7306, 0.76659, 0.79004, 0.76659, 0.79004, 0.76659, 0.79004, 1.09231, 0.54873, 0.8675, 0.86128, 0.76318, 0.8693, 0.85311, 0.86651, 1, 1, 0.79776, 1.20562, 1.18622, 1.18622, 1, 1.1437, 0.67742, 0.96334, 0.93695, 1.35191, 1.40909, 0.95161, 1.48387, 0.86686, 0.90861, 0.62267, 0.74359, 0.65649, 0.85498, 0.56963, 0.88254, 1.23516, 0.8675, 0.81552, 0.75443, 0.84503, 0.73206, 0.76659, 0.86275, 0.85122, 0.90685, 0.77892, 0.85746, 1.02638, 0.89385, 0.75657, 0.85122, 0.86275, 0.77452, 0.74171, 0.79776, 0.7306, 0.95165, 0.77818, 0.89772, 0.88831, 0.90685, 0.7306, 0.98142, 1.02191, 0.96576, 1.23516, 0.99018, 0.98142, 0.9236, 0.89258, 0.94035, 1.02191, 0.78848, 0.96576, 0.9561, 1.23516, 0.90918, 0.92578, 0.95424, 0.89746, 0.83969, 0.9482, 0.80113, 0.89442, 0.85208, 0.86155, 0.98022, 0.99018, 1.00452, 0.81209, 0.99247, 0.89181, 1.23516, 0.99018, 0.9482, 0.99018, 0.89181, 0.73206, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.88844, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.89464, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.96766, 1, 1, 1, 1, 1, 1, 0.94258, 0.98986, 0.94258, 0.98986, 0.94258, 0.98986, 0.7306, 0.90527, 1, 1, 0.89552, 0.90527, 1, 0.90186, 1.12308, 1.12308, 1.12308, 1.12308, 1.2566, 1.2566, 1.2566, 0.89552, 0.89552, 1.42259, 0.69043, 1.03809, 1, 1, 1.0176, 1.0176, 1.11523, 1.4956, 2.01462, 0.99331, 0.82616, 0.91133, 0.84286, 0.91133, 1, 1, 1, 0.70508, 1, 1.23108, 0.79801, 0.84426, 0.84426, 0.774, 0.90527, 1.81055, 0.90527, 1.81055, 1.28809, 1.55469, 0.94434, 1.07806, 1, 0.97094, 0.7589, 0.85284, 0.90747, 1.19658, 0.69825, 0.97622, 1.33512, 0.90747, 0.90747, 0.85356, 0.90747, 0.90747, 1.44947, 0.85284, 0.8941, 0.8941, 0.70572, 0.8, 0.70572, 0.70572, 0.70572, 0.70572, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.99862, 0.99862, 1, 1, 1, 1, 1, 1.0336, 0.91027, 1, 1, 1, 0.99862, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.05859, 1.05859, 1, 1, 1, 1.07185, 0.99413, 0.96334, 1.08065, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; exports.CalibriRegularFactors = CalibriRegularFactors; const CalibriRegularMetrics = { lineHeight: 1.2207, lineGap: 0.2207 }; exports.CalibriRegularMetrics = CalibriRegularMetrics; /***/ }), /* 14 */ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.HelveticaRegularMetrics = exports.HelveticaRegularFactors = exports.HelveticaItalicMetrics = exports.HelveticaItalicFactors = exports.HelveticaBoldMetrics = exports.HelveticaBoldItalicMetrics = exports.HelveticaBoldItalicFactors = exports.HelveticaBoldFactors = void 0; const HelveticaBoldFactors = [0.76116, 1, 1, 1.0006, 0.99998, 0.99974, 0.99973, 0.99973, 0.99982, 0.99977, 1.00087, 0.99998, 0.99998, 0.99959, 1.00003, 1.0006, 0.99998, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99998, 1, 1.00003, 1.00003, 1.00003, 1.00026, 0.9999, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00026, 1.00022, 0.99977, 1.0006, 0.99973, 0.99977, 1.00026, 0.99999, 0.99977, 1.00022, 1.00001, 1.00022, 0.99977, 1.00001, 1.00026, 0.99977, 1.00001, 1.00016, 1.00001, 1.00001, 1.00026, 0.99998, 1.0006, 0.99998, 1.00003, 0.99973, 0.99998, 0.99973, 1.00026, 0.99973, 1.00026, 0.99973, 0.99998, 1.00026, 1.00026, 1.0006, 1.0006, 0.99973, 1.0006, 0.99982, 1.00026, 1.00026, 1.00026, 1.00026, 0.99959, 0.99973, 0.99998, 1.00026, 0.99973, 1.00022, 0.99973, 0.99973, 1, 0.99959, 1.00077, 0.99959, 1.00003, 0.99998, 0.99973, 0.99973, 0.99973, 0.99973, 1.00077, 0.99973, 0.99998, 1.00025, 0.99968, 0.99973, 1.00003, 1.00025, 0.60299, 1.00024, 1.06409, 1, 1, 0.99998, 1, 0.99973, 1.0006, 0.99998, 1, 0.99936, 0.99973, 1.00002, 1.00002, 1.00002, 1.00026, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 1, 0.99977, 1.00001, 1.00001, 1.00001, 1.00001, 1.0006, 1.0006, 1.0006, 1.0006, 0.99977, 0.99977, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1.00003, 1.00022, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00001, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99982, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.06409, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 0.99973, 1.00026, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 1.03374, 0.99977, 1.00026, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.00042, 0.99973, 0.99973, 1.0006, 0.99977, 0.99973, 0.99973, 1.00026, 1.0006, 1.00026, 1.0006, 1.00026, 1.03828, 1.00026, 0.99999, 1.00026, 1.0006, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.9993, 0.9998, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1, 1.00016, 0.99977, 0.99959, 0.99977, 0.99959, 0.99977, 0.99959, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00026, 0.99998, 1.00026, 0.8121, 1.00026, 0.99998, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 1.00016, 1.00022, 1.00001, 0.99973, 1.00001, 1.00026, 1, 1.00026, 1, 1.00026, 1, 1.0006, 0.99973, 0.99977, 0.99973, 1, 0.99982, 1.00022, 1.00026, 1.00001, 0.99973, 1.00026, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 1.00034, 0.99977, 1, 0.99997, 1.00026, 1.00078, 1.00036, 0.99973, 1.00013, 1.0006, 0.99977, 0.99977, 0.99988, 0.85148, 1.00001, 1.00026, 0.99977, 1.00022, 1.0006, 0.99977, 1.00001, 0.99999, 0.99977, 1.00069, 1.00022, 0.99977, 1.00001, 0.99984, 1.00026, 1.00001, 1.00024, 1.00001, 0.9999, 1, 1.0006, 1.00001, 1.00041, 0.99962, 1.00026, 1.0006, 0.99995, 1.00041, 0.99942, 0.99973, 0.99927, 1.00082, 0.99902, 1.00026, 1.00087, 1.0006, 1.00069, 0.99973, 0.99867, 0.99973, 0.9993, 1.00026, 1.00049, 1.00056, 1, 0.99988, 0.99935, 0.99995, 0.99954, 1.00055, 0.99945, 1.00032, 1.0006, 0.99995, 1.00026, 0.99995, 1.00032, 1.00001, 1.00008, 0.99971, 1.00019, 0.9994, 1.00001, 1.0006, 1.00044, 0.99973, 1.00023, 1.00047, 1, 0.99942, 0.99561, 0.99989, 1.00035, 0.99977, 1.00035, 0.99977, 1.00019, 0.99944, 1.00001, 1.00021, 0.99926, 1.00035, 1.00035, 0.99942, 1.00048, 0.99999, 0.99977, 1.00022, 1.00035, 1.00001, 0.99977, 1.00026, 0.99989, 1.00057, 1.00001, 0.99936, 1.00052, 1.00012, 0.99996, 1.00043, 1, 1.00035, 0.9994, 0.99976, 1.00035, 0.99973, 1.00052, 1.00041, 1.00119, 1.00037, 0.99973, 1.00002, 0.99986, 1.00041, 1.00041, 0.99902, 0.9996, 1.00034, 0.99999, 1.00026, 0.99999, 1.00026, 0.99973, 1.00052, 0.99973, 1, 0.99973, 1.00041, 1.00075, 0.9994, 1.0003, 0.99999, 1, 1.00041, 0.99955, 1, 0.99915, 0.99973, 0.99973, 1.00026, 1.00119, 0.99955, 0.99973, 1.0006, 0.99911, 1.0006, 1.00026, 0.99972, 1.00026, 0.99902, 1.00041, 0.99973, 0.99999, 1, 1, 1.00038, 1.0005, 1.00016, 1.00022, 1.00016, 1.00022, 1.00016, 1.00022, 1.00001, 0.99973, 1, 1, 0.99973, 1, 1, 0.99955, 1.0006, 1.0006, 1.0006, 1.0006, 1, 1, 1, 0.99973, 0.99973, 0.99972, 1, 1, 1.00106, 0.99999, 0.99998, 0.99998, 0.99999, 0.99998, 1.66475, 1, 0.99973, 0.99973, 1.00023, 0.99973, 0.99971, 1.00047, 1.00023, 1, 0.99991, 0.99984, 1.00002, 1.00002, 1.00002, 1.00002, 1, 1, 1, 1, 1, 1, 1, 0.99972, 1, 1.20985, 1.39713, 1.00003, 1.00031, 1.00015, 1, 0.99561, 1.00027, 1.00031, 1.00031, 0.99915, 1.00031, 1.00031, 0.99999, 1.00003, 0.99999, 0.99999, 1.41144, 1.6, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.40579, 1.40579, 1.36625, 0.99999, 1, 0.99861, 0.99861, 1, 1.00026, 1.00026, 1.00026, 1.00026, 0.99972, 0.99999, 0.99999, 0.99999, 0.99999, 1.40483, 1, 0.99977, 1.00054, 1, 1, 0.99953, 0.99962, 1.00042, 0.9995, 1, 1, 1, 1, 1, 1, 1, 1, 0.99998, 0.99998, 0.99998, 0.99998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; exports.HelveticaBoldFactors = HelveticaBoldFactors; const HelveticaBoldMetrics = { lineHeight: 1.2, lineGap: 0.2 }; exports.HelveticaBoldMetrics = HelveticaBoldMetrics; const HelveticaBoldItalicFactors = [0.76116, 1, 1, 1.0006, 0.99998, 0.99974, 0.99973, 0.99973, 0.99982, 0.99977, 1.00087, 0.99998, 0.99998, 0.99959, 1.00003, 1.0006, 0.99998, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99998, 1, 1.00003, 1.00003, 1.00003, 1.00026, 0.9999, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00026, 1.00022, 0.99977, 1.0006, 0.99973, 0.99977, 1.00026, 0.99999, 0.99977, 1.00022, 1.00001, 1.00022, 0.99977, 1.00001, 1.00026, 0.99977, 1.00001, 1.00016, 1.00001, 1.00001, 1.00026, 0.99998, 1.0006, 0.99998, 1.00003, 0.99973, 0.99998, 0.99973, 1.00026, 0.99973, 1.00026, 0.99973, 0.99998, 1.00026, 1.00026, 1.0006, 1.0006, 0.99973, 1.0006, 0.99982, 1.00026, 1.00026, 1.00026, 1.00026, 0.99959, 0.99973, 0.99998, 1.00026, 0.99973, 1.00022, 0.99973, 0.99973, 1, 0.99959, 1.00077, 0.99959, 1.00003, 0.99998, 0.99973, 0.99973, 0.99973, 0.99973, 1.00077, 0.99973, 0.99998, 1.00025, 0.99968, 0.99973, 1.00003, 1.00025, 0.60299, 1.00024, 1.06409, 1, 1, 0.99998, 1, 0.99973, 1.0006, 0.99998, 1, 0.99936, 0.99973, 1.00002, 1.00002, 1.00002, 1.00026, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 0.99977, 1, 0.99977, 1.00001, 1.00001, 1.00001, 1.00001, 1.0006, 1.0006, 1.0006, 1.0006, 0.99977, 0.99977, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1.00003, 1.00022, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00001, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99982, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 1.06409, 1.00026, 1.00026, 1.00026, 1.00026, 1.00026, 0.99973, 1.00026, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 1.0044, 0.99977, 1.00026, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 0.99971, 0.99973, 0.99973, 1.0006, 0.99977, 0.99973, 0.99973, 1.00026, 1.0006, 1.00026, 1.0006, 1.00026, 1.01011, 1.00026, 0.99999, 1.00026, 1.0006, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.9993, 0.9998, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1.00022, 1.00026, 1, 1.00016, 0.99977, 0.99959, 0.99977, 0.99959, 0.99977, 0.99959, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00026, 0.99998, 1.00026, 0.8121, 1.00026, 0.99998, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 0.99977, 1.00026, 1.00016, 1.00022, 1.00001, 0.99973, 1.00001, 1.00026, 1, 1.00026, 1, 1.00026, 1, 1.0006, 0.99973, 0.99977, 0.99973, 1, 0.99982, 1.00022, 1.00026, 1.00001, 0.99973, 1.00026, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99977, 1, 1, 1.00026, 0.99969, 0.99972, 0.99981, 0.9998, 1.0006, 0.99977, 0.99977, 1.00022, 0.91155, 1.00001, 1.00026, 0.99977, 1.00022, 1.0006, 0.99977, 1.00001, 0.99999, 0.99977, 0.99966, 1.00022, 1.00032, 1.00001, 0.99944, 1.00026, 1.00001, 0.99968, 1.00001, 1.00047, 1, 1.0006, 1.00001, 0.99981, 1.00101, 1.00026, 1.0006, 0.99948, 0.99981, 1.00064, 0.99973, 0.99942, 1.00101, 1.00061, 1.00026, 1.00069, 1.0006, 1.00014, 0.99973, 1.01322, 0.99973, 1.00065, 1.00026, 1.00012, 0.99923, 1, 1.00064, 1.00076, 0.99948, 1.00055, 1.00063, 1.00007, 0.99943, 1.0006, 0.99948, 1.00026, 0.99948, 0.99943, 1.00001, 1.00001, 1.00029, 1.00038, 1.00035, 1.00001, 1.0006, 1.0006, 0.99973, 0.99978, 1.00001, 1.00057, 0.99989, 0.99967, 0.99964, 0.99967, 0.99977, 0.99999, 0.99977, 1.00038, 0.99977, 1.00001, 0.99973, 1.00066, 0.99967, 0.99967, 1.00041, 0.99998, 0.99999, 0.99977, 1.00022, 0.99967, 1.00001, 0.99977, 1.00026, 0.99964, 1.00031, 1.00001, 0.99999, 0.99999, 1, 1.00023, 1, 1, 0.99999, 1.00035, 1.00001, 0.99999, 0.99973, 0.99977, 0.99999, 1.00058, 0.99973, 0.99973, 0.99955, 0.9995, 1.00026, 1.00026, 1.00032, 0.99989, 1.00034, 0.99999, 1.00026, 1.00026, 1.00026, 0.99973, 0.45998, 0.99973, 1.00026, 0.99973, 1.00001, 0.99999, 0.99982, 0.99994, 0.99996, 1, 1.00042, 1.00044, 1.00029, 1.00023, 0.99973, 0.99973, 1.00026, 0.99949, 1.00002, 0.99973, 1.0006, 1.0006, 1.0006, 0.99975, 1.00026, 1.00026, 1.00032, 0.98685, 0.99973, 1.00026, 1, 1, 0.99966, 1.00044, 1.00016, 1.00022, 1.00016, 1.00022, 1.00016, 1.00022, 1.00001, 0.99973, 1, 1, 0.99973, 1, 1, 0.99955, 1.0006, 1.0006, 1.0006, 1.0006, 1, 1, 1, 0.99973, 0.99973, 0.99972, 1, 1, 1.00106, 0.99999, 0.99998, 0.99998, 0.99999, 0.99998, 1.66475, 1, 0.99973, 0.99973, 1, 0.99973, 0.99971, 0.99978, 1, 1, 0.99991, 0.99984, 1.00002, 1.00002, 1.00002, 1.00002, 1.00098, 1, 1, 1, 1.00049, 1, 1, 0.99972, 1, 1.20985, 1.39713, 1.00003, 1.00031, 1.00015, 1, 0.99561, 1.00027, 1.00031, 1.00031, 0.99915, 1.00031, 1.00031, 0.99999, 1.00003, 0.99999, 0.99999, 1.41144, 1.6, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.40579, 1.40579, 1.36625, 0.99999, 1, 0.99861, 0.99861, 1, 1.00026, 1.00026, 1.00026, 1.00026, 0.99972, 0.99999, 0.99999, 0.99999, 0.99999, 1.40483, 1, 0.99977, 1.00054, 1, 1, 0.99953, 0.99962, 1.00042, 0.9995, 1, 1, 1, 1, 1, 1, 1, 1, 0.99998, 0.99998, 0.99998, 0.99998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; exports.HelveticaBoldItalicFactors = HelveticaBoldItalicFactors; const HelveticaBoldItalicMetrics = { lineHeight: 1.35, lineGap: 0.2 }; exports.HelveticaBoldItalicMetrics = HelveticaBoldItalicMetrics; const HelveticaItalicFactors = [0.76116, 1, 1, 1.0006, 1.0006, 1.00006, 0.99973, 0.99973, 0.99982, 1.00001, 1.00043, 0.99998, 0.99998, 0.99959, 1.00003, 1.0006, 0.99998, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1, 1.00003, 1.00003, 1.00003, 0.99973, 0.99987, 1.00001, 1.00001, 0.99977, 0.99977, 1.00001, 1.00026, 1.00022, 0.99977, 1.0006, 1, 1.00001, 0.99973, 0.99999, 0.99977, 1.00022, 1.00001, 1.00022, 0.99977, 1.00001, 1.00026, 0.99977, 1.00001, 1.00016, 1.00001, 1.00001, 1.00026, 1.0006, 1.0006, 1.0006, 0.99949, 0.99973, 0.99998, 0.99973, 0.99973, 1, 0.99973, 0.99973, 1.0006, 0.99973, 0.99973, 0.99924, 0.99924, 1, 0.99924, 0.99999, 0.99973, 0.99973, 0.99973, 0.99973, 0.99998, 1, 1.0006, 0.99973, 1, 0.99977, 1, 1, 1, 1.00005, 1.0009, 1.00005, 1.00003, 0.99998, 0.99973, 0.99973, 0.99973, 0.99973, 1.0009, 0.99973, 0.99998, 1.00025, 0.99968, 0.99973, 1.00003, 1.00025, 0.60299, 1.00024, 1.06409, 1, 1, 0.99998, 1, 0.9998, 1.0006, 0.99998, 1, 0.99936, 0.99973, 1.00002, 1.00002, 1.00002, 1.00026, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1, 0.99977, 1.00001, 1.00001, 1.00001, 1.00001, 1.0006, 1.0006, 1.0006, 1.0006, 0.99977, 0.99977, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1.00003, 1.00022, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00001, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99982, 1, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.06409, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 1, 0.99973, 1, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 0.99977, 1, 0.99977, 1, 0.99977, 1, 0.99977, 1, 0.99977, 1.0288, 0.99977, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 0.99924, 1.0006, 1.0006, 0.99946, 1.00034, 1, 0.99924, 1.00001, 1, 1, 0.99973, 0.99924, 0.99973, 0.99924, 0.99973, 1.06311, 0.99973, 1.00024, 0.99973, 0.99924, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 1.00041, 0.9998, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1, 1.00016, 0.99977, 0.99998, 0.99977, 0.99998, 0.99977, 0.99998, 1.00001, 1, 1.00001, 1, 1.00001, 1, 1.00001, 1, 1.00026, 1.0006, 1.00026, 0.89547, 1.00026, 1.0006, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 1.00016, 0.99977, 1.00001, 1, 1.00001, 1.00026, 1, 1.00026, 1, 1.00026, 1, 0.99924, 0.99973, 1.00001, 0.99973, 1, 0.99982, 1.00022, 1.00026, 1.00001, 1, 1.00026, 1.0006, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 1.00001, 1, 1.00054, 0.99977, 1.00084, 1.00007, 0.99973, 1.00013, 0.99924, 1.00001, 1.00001, 0.99945, 0.91221, 1.00001, 1.00026, 0.99977, 1.00022, 1.0006, 1.00001, 1.00001, 0.99999, 0.99977, 0.99933, 1.00022, 1.00054, 1.00001, 1.00065, 1.00026, 1.00001, 1.0001, 1.00001, 1.00052, 1, 1.0006, 1.00001, 0.99945, 0.99897, 0.99968, 0.99924, 1.00036, 0.99945, 0.99949, 1, 1.0006, 0.99897, 0.99918, 0.99968, 0.99911, 0.99924, 1, 0.99962, 1.01487, 1, 1.0005, 0.99973, 1.00012, 1.00043, 1, 0.99995, 0.99994, 1.00036, 0.99947, 1.00019, 1.00063, 1.00025, 0.99924, 1.00036, 0.99973, 1.00036, 1.00025, 1.00001, 1.00001, 1.00027, 1.0001, 1.00068, 1.00001, 1.0006, 1.0006, 1, 1.00008, 0.99957, 0.99972, 0.9994, 0.99954, 0.99975, 1.00051, 1.00001, 1.00019, 1.00001, 1.0001, 0.99986, 1.00001, 1.00001, 1.00038, 0.99954, 0.99954, 0.9994, 1.00066, 0.99999, 0.99977, 1.00022, 1.00054, 1.00001, 0.99977, 1.00026, 0.99975, 1.0001, 1.00001, 0.99993, 0.9995, 0.99955, 1.00016, 0.99978, 0.99974, 1.00019, 1.00022, 0.99955, 1.00053, 0.99973, 1.00089, 1.00005, 0.99967, 1.00048, 0.99973, 1.00002, 1.00034, 0.99973, 0.99973, 0.99964, 1.00006, 1.00066, 0.99947, 0.99973, 0.98894, 0.99973, 1, 0.44898, 1, 0.99946, 1, 1.00039, 1.00082, 0.99991, 0.99991, 0.99985, 1.00022, 1.00023, 1.00061, 1.00006, 0.99966, 0.99973, 0.99973, 0.99973, 1.00019, 1.0008, 1, 0.99924, 0.99924, 0.99924, 0.99983, 1.00044, 0.99973, 0.99964, 0.98332, 1, 0.99973, 1, 1, 0.99962, 0.99895, 1.00016, 0.99977, 1.00016, 0.99977, 1.00016, 0.99977, 1.00001, 1, 1, 1, 0.99973, 1, 1, 0.99955, 0.99924, 0.99924, 0.99924, 0.99924, 0.99998, 0.99998, 0.99998, 0.99973, 0.99973, 0.99972, 1, 1, 1.00267, 0.99999, 0.99998, 0.99998, 1, 0.99998, 1.66475, 1, 0.99973, 0.99973, 1.00023, 0.99973, 1.00423, 0.99925, 0.99999, 1, 0.99991, 0.99984, 1.00002, 1.00002, 1.00002, 1.00002, 1.00049, 1, 1.00245, 1, 1, 1, 1, 0.96329, 1, 1.20985, 1.39713, 1.00003, 0.8254, 1.00015, 1, 1.00035, 1.00027, 1.00031, 1.00031, 1.00003, 1.00031, 1.00031, 0.99999, 1.00003, 0.99999, 0.99999, 1.41144, 1.6, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.40579, 1.40579, 1.36625, 0.99999, 1, 0.99861, 0.99861, 1, 1.00026, 1.00026, 1.00026, 1.00026, 0.95317, 0.99999, 0.99999, 0.99999, 0.99999, 1.40483, 1, 0.99977, 1.00054, 1, 1, 0.99953, 0.99962, 1.00042, 0.9995, 1, 1, 1, 1, 1, 1, 1, 1, 0.99998, 0.99998, 0.99998, 0.99998, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; exports.HelveticaItalicFactors = HelveticaItalicFactors; const HelveticaItalicMetrics = { lineHeight: 1.35, lineGap: 0.2 }; exports.HelveticaItalicMetrics = HelveticaItalicMetrics; const HelveticaRegularFactors = [0.76116, 1, 1, 1.0006, 1.0006, 1.00006, 0.99973, 0.99973, 0.99982, 1.00001, 1.00043, 0.99998, 0.99998, 0.99959, 1.00003, 1.0006, 0.99998, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1, 1.00003, 1.00003, 1.00003, 0.99973, 0.99987, 1.00001, 1.00001, 0.99977, 0.99977, 1.00001, 1.00026, 1.00022, 0.99977, 1.0006, 1, 1.00001, 0.99973, 0.99999, 0.99977, 1.00022, 1.00001, 1.00022, 0.99977, 1.00001, 1.00026, 0.99977, 1.00001, 1.00016, 1.00001, 1.00001, 1.00026, 1.0006, 1.0006, 1.0006, 0.99949, 0.99973, 0.99998, 0.99973, 0.99973, 1, 0.99973, 0.99973, 1.0006, 0.99973, 0.99973, 0.99924, 0.99924, 1, 0.99924, 0.99999, 0.99973, 0.99973, 0.99973, 0.99973, 0.99998, 1, 1.0006, 0.99973, 1, 0.99977, 1, 1, 1, 1.00005, 1.0009, 1.00005, 1.00003, 0.99998, 0.99973, 0.99973, 0.99973, 0.99973, 1.0009, 0.99973, 0.99998, 1.00025, 0.99968, 0.99973, 1.00003, 1.00025, 0.60299, 1.00024, 1.06409, 1, 1, 0.99998, 1, 0.9998, 1.0006, 0.99998, 1, 0.99936, 0.99973, 1.00002, 1.00002, 1.00002, 1.00026, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1.00001, 1, 0.99977, 1.00001, 1.00001, 1.00001, 1.00001, 1.0006, 1.0006, 1.0006, 1.0006, 0.99977, 0.99977, 1.00022, 1.00022, 1.00022, 1.00022, 1.00022, 1.00003, 1.00022, 0.99977, 0.99977, 0.99977, 0.99977, 1.00001, 1.00001, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99982, 1, 0.99973, 0.99973, 0.99973, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 0.99973, 1.06409, 1.00026, 0.99973, 0.99973, 0.99973, 0.99973, 1, 0.99973, 1, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 0.99977, 1, 0.99977, 1, 0.99977, 1, 0.99977, 1, 0.99977, 1.04596, 0.99977, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00001, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 1.0006, 0.99924, 1.0006, 1.0006, 1.00019, 1.00034, 1, 0.99924, 1.00001, 1, 1, 0.99973, 0.99924, 0.99973, 0.99924, 0.99973, 1.02572, 0.99973, 1.00005, 0.99973, 0.99924, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99999, 0.9998, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1.00022, 0.99973, 1, 1.00016, 0.99977, 0.99998, 0.99977, 0.99998, 0.99977, 0.99998, 1.00001, 1, 1.00001, 1, 1.00001, 1, 1.00001, 1, 1.00026, 1.0006, 1.00026, 0.84533, 1.00026, 1.0006, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 0.99977, 0.99973, 1.00016, 0.99977, 1.00001, 1, 1.00001, 1.00026, 1, 1.00026, 1, 1.00026, 1, 0.99924, 0.99973, 1.00001, 0.99973, 1, 0.99982, 1.00022, 1.00026, 1.00001, 1, 1.00026, 1.0006, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99998, 0.99928, 1, 0.99977, 1.00013, 1.00055, 0.99947, 0.99945, 0.99941, 0.99924, 1.00001, 1.00001, 1.0004, 0.91621, 1.00001, 1.00026, 0.99977, 1.00022, 1.0006, 1.00001, 1.00005, 0.99999, 0.99977, 1.00015, 1.00022, 0.99977, 1.00001, 0.99973, 1.00026, 1.00001, 1.00019, 1.00001, 0.99946, 1, 1.0006, 1.00001, 0.99978, 1.00045, 0.99973, 0.99924, 1.00023, 0.99978, 0.99966, 1, 1.00065, 1.00045, 1.00019, 0.99973, 0.99973, 0.99924, 1, 1, 0.96499, 1, 1.00055, 0.99973, 1.00008, 1.00027, 1, 0.9997, 0.99995, 1.00023, 0.99933, 1.00019, 1.00015, 1.00031, 0.99924, 1.00023, 0.99973, 1.00023, 1.00031, 1.00001, 0.99928, 1.00029, 1.00092, 1.00035, 1.00001, 1.0006, 1.0006, 1, 0.99988, 0.99975, 1, 1.00082, 0.99561, 0.9996, 1.00035, 1.00001, 0.99962, 1.00001, 1.00092, 0.99964, 1.00001, 0.99963, 0.99999, 1.00035, 1.00035, 1.00082, 0.99962, 0.99999, 0.99977, 1.00022, 1.00035, 1.00001, 0.99977, 1.00026, 0.9996, 0.99967, 1.00001, 1.00034, 1.00074, 1.00054, 1.00053, 1.00063, 0.99971, 0.99962, 1.00035, 0.99975, 0.99977, 0.99973, 1.00043, 0.99953, 1.0007, 0.99915, 0.99973, 1.00008, 0.99892, 1.00073, 1.00073, 1.00114, 0.99915, 1.00073, 0.99955, 0.99973, 1.00092, 0.99973, 1, 0.99998, 1, 1.0003, 1, 1.00043, 1.00001, 0.99969, 1.0003, 1, 1.00035, 1.00001, 0.9995, 1, 1.00092, 0.99973, 0.99973, 0.99973, 1.0007, 0.9995, 1, 0.99924, 1.0006, 0.99924, 0.99972, 1.00062, 0.99973, 1.00114, 1.00073, 1, 0.99955, 1, 1, 1.00047, 0.99968, 1.00016, 0.99977, 1.00016, 0.99977, 1.00016, 0.99977, 1.00001, 1, 1, 1, 0.99973, 1, 1, 0.99955, 0.99924, 0.99924, 0.99924, 0.99924, 0.99998, 0.99998, 0.99998, 0.99973, 0.99973, 0.99972, 1, 1, 1.00267, 0.99999, 0.99998, 0.99998, 1, 0.99998, 1.66475, 1, 0.99973, 0.99973, 1.00023, 0.99973, 0.99971, 0.99925, 1.00023, 1, 0.99991, 0.99984, 1.00002, 1.00002, 1.00002, 1.00002, 1, 1, 1, 1, 1, 1, 1, 0.96329, 1, 1.20985, 1.39713, 1.00003, 0.8254, 1.00015, 1, 1.00035, 1.00027, 1.00031, 1.00031, 0.99915, 1.00031, 1.00031, 0.99999, 1.00003, 0.99999, 0.99999, 1.41144, 1.6, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.41144, 1.40579, 1.40579, 1.36625, 0.99999, 1, 0.99861, 0.99861, 1, 1.00026, 1.00026, 1.00026, 1.00026, 0.95317, 0.99999, 0.99999, 0.99999, 0.99999, 1.40483, 1, 0.99977, 1.00054, 1, 1, 0.99953, 0.99962, 1.00042, 0.9995, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; exports.HelveticaRegularFactors = HelveticaRegularFactors; const HelveticaRegularMetrics = { lineHeight: 1.2, lineGap: 0.2 }; exports.HelveticaRegularMetrics = HelveticaRegularMetrics; /***/ }), /* 15 */ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.LiberationSansRegularWidths = exports.LiberationSansRegularMapping = exports.LiberationSansItalicWidths = exports.LiberationSansItalicMapping = exports.LiberationSansBoldWidths = exports.LiberationSansBoldMapping = exports.LiberationSansBoldItalicWidths = exports.LiberationSansBoldItalicMapping = void 0; const LiberationSansBoldWidths = [365, 0, 333, 278, 333, 474, 556, 556, 889, 722, 238, 333, 333, 389, 584, 278, 333, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 333, 333, 584, 584, 584, 611, 975, 722, 722, 722, 722, 667, 611, 778, 722, 278, 556, 722, 611, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 333, 278, 333, 584, 556, 333, 556, 611, 556, 611, 556, 333, 611, 611, 278, 278, 556, 278, 889, 611, 611, 611, 611, 389, 556, 333, 611, 556, 778, 556, 556, 500, 389, 280, 389, 584, 333, 556, 556, 556, 556, 280, 556, 333, 737, 370, 556, 584, 737, 552, 400, 549, 333, 333, 333, 576, 556, 278, 333, 333, 365, 556, 834, 834, 834, 611, 722, 722, 722, 722, 722, 722, 1000, 722, 667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667, 667, 611, 556, 556, 556, 556, 556, 556, 889, 556, 556, 556, 556, 556, 278, 278, 278, 278, 611, 611, 611, 611, 611, 611, 611, 549, 611, 611, 611, 611, 611, 556, 611, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 719, 722, 611, 667, 556, 667, 556, 667, 556, 667, 556, 667, 556, 778, 611, 778, 611, 778, 611, 778, 611, 722, 611, 722, 611, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 785, 556, 556, 278, 722, 556, 556, 611, 278, 611, 278, 611, 385, 611, 479, 611, 278, 722, 611, 722, 611, 722, 611, 708, 723, 611, 778, 611, 778, 611, 778, 611, 1000, 944, 722, 389, 722, 389, 722, 389, 667, 556, 667, 556, 667, 556, 667, 556, 611, 333, 611, 479, 611, 333, 722, 611, 722, 611, 722, 611, 722, 611, 722, 611, 722, 611, 944, 778, 667, 556, 667, 611, 500, 611, 500, 611, 500, 278, 556, 722, 556, 1000, 889, 778, 611, 667, 556, 611, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 465, 722, 333, 853, 906, 474, 825, 927, 838, 278, 722, 722, 601, 719, 667, 611, 722, 778, 278, 722, 667, 833, 722, 644, 778, 722, 667, 600, 611, 667, 821, 667, 809, 802, 278, 667, 615, 451, 611, 278, 582, 615, 610, 556, 606, 475, 460, 611, 541, 278, 558, 556, 612, 556, 445, 611, 766, 619, 520, 684, 446, 582, 715, 576, 753, 845, 278, 582, 611, 582, 845, 667, 669, 885, 567, 711, 667, 278, 276, 556, 1094, 1062, 875, 610, 722, 622, 719, 722, 719, 722, 567, 712, 667, 904, 626, 719, 719, 610, 702, 833, 722, 778, 719, 667, 722, 611, 622, 854, 667, 730, 703, 1005, 1019, 870, 979, 719, 711, 1031, 719, 556, 618, 615, 417, 635, 556, 709, 497, 615, 615, 500, 635, 740, 604, 611, 604, 611, 556, 490, 556, 875, 556, 615, 581, 833, 844, 729, 854, 615, 552, 854, 583, 556, 556, 611, 417, 552, 556, 278, 281, 278, 969, 906, 611, 500, 615, 556, 604, 778, 611, 487, 447, 944, 778, 944, 778, 944, 778, 667, 556, 333, 333, 556, 1000, 1000, 552, 278, 278, 278, 278, 500, 500, 500, 556, 556, 350, 1000, 1000, 240, 479, 333, 333, 604, 333, 167, 396, 556, 556, 1094, 556, 885, 489, 1115, 1000, 768, 600, 834, 834, 834, 834, 1000, 500, 1000, 500, 1000, 500, 500, 494, 612, 823, 713, 584, 549, 713, 979, 722, 274, 549, 549, 583, 549, 549, 604, 584, 604, 604, 708, 625, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 729, 604, 604, 354, 354, 1000, 990, 990, 990, 990, 494, 604, 604, 604, 604, 354, 1021, 1052, 917, 750, 750, 531, 656, 594, 510, 500, 750, 750, 611, 611, 333, 333, 333, 333, 333, 333, 333, 333, 222, 222, 333, 333, 333, 333, 333, 333, 333, 333]; exports.LiberationSansBoldWidths = LiberationSansBoldWidths; const LiberationSansBoldMapping = [-1, -1, -1, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 402, 506, 507, 508, 509, 510, 511, 536, 537, 538, 539, 710, 711, 713, 728, 729, 730, 731, 732, 733, 900, 901, 902, 903, 904, 905, 906, 908, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1138, 1139, 1168, 1169, 7808, 7809, 7810, 7811, 7812, 7813, 7922, 7923, 8208, 8209, 8211, 8212, 8213, 8215, 8216, 8217, 8218, 8219, 8220, 8221, 8222, 8224, 8225, 8226, 8230, 8240, 8242, 8243, 8249, 8250, 8252, 8254, 8260, 8319, 8355, 8356, 8359, 8364, 8453, 8467, 8470, 8482, 8486, 8494, 8539, 8540, 8541, 8542, 8592, 8593, 8594, 8595, 8596, 8597, 8616, 8706, 8710, 8719, 8721, 8722, 8730, 8734, 8735, 8745, 8747, 8776, 8800, 8801, 8804, 8805, 8962, 8976, 8992, 8993, 9472, 9474, 9484, 9488, 9492, 9496, 9500, 9508, 9516, 9524, 9532, 9552, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9600, 9604, 9608, 9612, 9616, 9617, 9618, 9619, 9632, 9633, 9642, 9643, 9644, 9650, 9658, 9660, 9668, 9674, 9675, 9679, 9688, 9689, 9702, 9786, 9787, 9788, 9792, 9794, 9824, 9827, 9829, 9830, 9834, 9835, 9836, 61441, 61442, 61445, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]; exports.LiberationSansBoldMapping = LiberationSansBoldMapping; const LiberationSansBoldItalicWidths = [365, 0, 333, 278, 333, 474, 556, 556, 889, 722, 238, 333, 333, 389, 584, 278, 333, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 333, 333, 584, 584, 584, 611, 975, 722, 722, 722, 722, 667, 611, 778, 722, 278, 556, 722, 611, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 333, 278, 333, 584, 556, 333, 556, 611, 556, 611, 556, 333, 611, 611, 278, 278, 556, 278, 889, 611, 611, 611, 611, 389, 556, 333, 611, 556, 778, 556, 556, 500, 389, 280, 389, 584, 333, 556, 556, 556, 556, 280, 556, 333, 737, 370, 556, 584, 737, 552, 400, 549, 333, 333, 333, 576, 556, 278, 333, 333, 365, 556, 834, 834, 834, 611, 722, 722, 722, 722, 722, 722, 1000, 722, 667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667, 667, 611, 556, 556, 556, 556, 556, 556, 889, 556, 556, 556, 556, 556, 278, 278, 278, 278, 611, 611, 611, 611, 611, 611, 611, 549, 611, 611, 611, 611, 611, 556, 611, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 740, 722, 611, 667, 556, 667, 556, 667, 556, 667, 556, 667, 556, 778, 611, 778, 611, 778, 611, 778, 611, 722, 611, 722, 611, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 782, 556, 556, 278, 722, 556, 556, 611, 278, 611, 278, 611, 396, 611, 479, 611, 278, 722, 611, 722, 611, 722, 611, 708, 723, 611, 778, 611, 778, 611, 778, 611, 1000, 944, 722, 389, 722, 389, 722, 389, 667, 556, 667, 556, 667, 556, 667, 556, 611, 333, 611, 479, 611, 333, 722, 611, 722, 611, 722, 611, 722, 611, 722, 611, 722, 611, 944, 778, 667, 556, 667, 611, 500, 611, 500, 611, 500, 278, 556, 722, 556, 1000, 889, 778, 611, 667, 556, 611, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 722, 333, 854, 906, 473, 844, 930, 847, 278, 722, 722, 610, 671, 667, 611, 722, 778, 278, 722, 667, 833, 722, 657, 778, 718, 667, 590, 611, 667, 822, 667, 829, 781, 278, 667, 620, 479, 611, 278, 591, 620, 621, 556, 610, 479, 492, 611, 558, 278, 566, 556, 603, 556, 450, 611, 712, 605, 532, 664, 409, 591, 704, 578, 773, 834, 278, 591, 611, 591, 834, 667, 667, 886, 614, 719, 667, 278, 278, 556, 1094, 1042, 854, 622, 719, 677, 719, 722, 708, 722, 614, 722, 667, 927, 643, 719, 719, 615, 687, 833, 722, 778, 719, 667, 722, 611, 677, 781, 667, 729, 708, 979, 989, 854, 1000, 708, 719, 1042, 729, 556, 619, 604, 534, 618, 556, 736, 510, 611, 611, 507, 622, 740, 604, 611, 611, 611, 556, 889, 556, 885, 556, 646, 583, 889, 935, 707, 854, 594, 552, 865, 589, 556, 556, 611, 469, 563, 556, 278, 278, 278, 969, 906, 611, 507, 619, 556, 611, 778, 611, 575, 467, 944, 778, 944, 778, 944, 778, 667, 556, 333, 333, 556, 1000, 1000, 552, 278, 278, 278, 278, 500, 500, 500, 556, 556, 350, 1000, 1000, 240, 479, 333, 333, 604, 333, 167, 396, 556, 556, 1104, 556, 885, 516, 1146, 1000, 768, 600, 834, 834, 834, 834, 999, 500, 1000, 500, 1000, 500, 500, 494, 612, 823, 713, 584, 549, 713, 979, 722, 274, 549, 549, 583, 549, 549, 604, 584, 604, 604, 708, 625, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 729, 604, 604, 354, 354, 1000, 990, 990, 990, 990, 494, 604, 604, 604, 604, 354, 1021, 1052, 917, 750, 750, 531, 656, 594, 510, 500, 750, 750, 611, 611, 333, 333, 333, 333, 333, 333, 333, 333, 222, 222, 333, 333, 333, 333, 333, 333, 333, 333]; exports.LiberationSansBoldItalicWidths = LiberationSansBoldItalicWidths; const LiberationSansBoldItalicMapping = [-1, -1, -1, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 402, 506, 507, 508, 509, 510, 511, 536, 537, 538, 539, 710, 711, 713, 728, 729, 730, 731, 732, 733, 900, 901, 902, 903, 904, 905, 906, 908, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1138, 1139, 1168, 1169, 7808, 7809, 7810, 7811, 7812, 7813, 7922, 7923, 8208, 8209, 8211, 8212, 8213, 8215, 8216, 8217, 8218, 8219, 8220, 8221, 8222, 8224, 8225, 8226, 8230, 8240, 8242, 8243, 8249, 8250, 8252, 8254, 8260, 8319, 8355, 8356, 8359, 8364, 8453, 8467, 8470, 8482, 8486, 8494, 8539, 8540, 8541, 8542, 8592, 8593, 8594, 8595, 8596, 8597, 8616, 8706, 8710, 8719, 8721, 8722, 8730, 8734, 8735, 8745, 8747, 8776, 8800, 8801, 8804, 8805, 8962, 8976, 8992, 8993, 9472, 9474, 9484, 9488, 9492, 9496, 9500, 9508, 9516, 9524, 9532, 9552, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9600, 9604, 9608, 9612, 9616, 9617, 9618, 9619, 9632, 9633, 9642, 9643, 9644, 9650, 9658, 9660, 9668, 9674, 9675, 9679, 9688, 9689, 9702, 9786, 9787, 9788, 9792, 9794, 9824, 9827, 9829, 9830, 9834, 9835, 9836, 61441, 61442, 61445, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]; exports.LiberationSansBoldItalicMapping = LiberationSansBoldItalicMapping; const LiberationSansItalicWidths = [365, 0, 333, 278, 278, 355, 556, 556, 889, 667, 191, 333, 333, 389, 584, 278, 333, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 278, 278, 584, 584, 584, 556, 1015, 667, 667, 722, 722, 667, 611, 778, 722, 278, 500, 667, 556, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 278, 278, 278, 469, 556, 333, 556, 556, 500, 556, 556, 278, 556, 556, 222, 222, 500, 222, 833, 556, 556, 556, 556, 333, 500, 278, 556, 500, 722, 500, 500, 500, 334, 260, 334, 584, 333, 556, 556, 556, 556, 260, 556, 333, 737, 370, 556, 584, 737, 552, 400, 549, 333, 333, 333, 576, 537, 278, 333, 333, 365, 556, 834, 834, 834, 611, 667, 667, 667, 667, 667, 667, 1000, 722, 667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667, 667, 611, 556, 556, 556, 556, 556, 556, 889, 500, 556, 556, 556, 556, 278, 278, 278, 278, 556, 556, 556, 556, 556, 556, 556, 549, 611, 556, 556, 556, 556, 500, 556, 500, 667, 556, 667, 556, 667, 556, 722, 500, 722, 500, 722, 500, 722, 500, 722, 625, 722, 556, 667, 556, 667, 556, 667, 556, 667, 556, 667, 556, 778, 556, 778, 556, 778, 556, 778, 556, 722, 556, 722, 556, 278, 278, 278, 278, 278, 278, 278, 222, 278, 278, 733, 444, 500, 222, 667, 500, 500, 556, 222, 556, 222, 556, 281, 556, 400, 556, 222, 722, 556, 722, 556, 722, 556, 615, 723, 556, 778, 556, 778, 556, 778, 556, 1000, 944, 722, 333, 722, 333, 722, 333, 667, 500, 667, 500, 667, 500, 667, 500, 611, 278, 611, 354, 611, 278, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 944, 722, 667, 500, 667, 611, 500, 611, 500, 611, 500, 222, 556, 667, 556, 1000, 889, 778, 611, 667, 500, 611, 278, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 667, 278, 789, 846, 389, 794, 865, 775, 222, 667, 667, 570, 671, 667, 611, 722, 778, 278, 667, 667, 833, 722, 648, 778, 725, 667, 600, 611, 667, 837, 667, 831, 761, 278, 667, 570, 439, 555, 222, 550, 570, 571, 500, 556, 439, 463, 555, 542, 222, 500, 492, 548, 500, 447, 556, 670, 573, 486, 603, 374, 550, 652, 546, 728, 779, 222, 550, 556, 550, 779, 667, 667, 843, 544, 708, 667, 278, 278, 500, 1066, 982, 844, 589, 715, 639, 724, 667, 651, 667, 544, 704, 667, 917, 614, 715, 715, 589, 686, 833, 722, 778, 725, 667, 722, 611, 639, 795, 667, 727, 673, 920, 923, 805, 886, 651, 694, 1022, 682, 556, 562, 522, 493, 553, 556, 688, 465, 556, 556, 472, 564, 686, 550, 556, 556, 556, 500, 833, 500, 835, 500, 572, 518, 830, 851, 621, 736, 526, 492, 752, 534, 556, 556, 556, 378, 496, 500, 222, 222, 222, 910, 828, 556, 472, 565, 500, 556, 778, 556, 492, 339, 944, 722, 944, 722, 944, 722, 667, 500, 333, 333, 556, 1000, 1000, 552, 222, 222, 222, 222, 333, 333, 333, 556, 556, 350, 1000, 1000, 188, 354, 333, 333, 500, 333, 167, 365, 556, 556, 1094, 556, 885, 323, 1083, 1000, 768, 600, 834, 834, 834, 834, 1000, 500, 998, 500, 1000, 500, 500, 494, 612, 823, 713, 584, 549, 713, 979, 719, 274, 549, 549, 584, 549, 549, 604, 584, 604, 604, 708, 625, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 729, 604, 604, 354, 354, 1000, 990, 990, 990, 990, 494, 604, 604, 604, 604, 354, 1021, 1052, 917, 750, 750, 531, 656, 594, 510, 500, 750, 750, 500, 500, 333, 333, 333, 333, 333, 333, 333, 333, 222, 222, 294, 294, 324, 324, 316, 328, 398, 285]; exports.LiberationSansItalicWidths = LiberationSansItalicWidths; const LiberationSansItalicMapping = [-1, -1, -1, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 402, 506, 507, 508, 509, 510, 511, 536, 537, 538, 539, 710, 711, 713, 728, 729, 730, 731, 732, 733, 900, 901, 902, 903, 904, 905, 906, 908, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1138, 1139, 1168, 1169, 7808, 7809, 7810, 7811, 7812, 7813, 7922, 7923, 8208, 8209, 8211, 8212, 8213, 8215, 8216, 8217, 8218, 8219, 8220, 8221, 8222, 8224, 8225, 8226, 8230, 8240, 8242, 8243, 8249, 8250, 8252, 8254, 8260, 8319, 8355, 8356, 8359, 8364, 8453, 8467, 8470, 8482, 8486, 8494, 8539, 8540, 8541, 8542, 8592, 8593, 8594, 8595, 8596, 8597, 8616, 8706, 8710, 8719, 8721, 8722, 8730, 8734, 8735, 8745, 8747, 8776, 8800, 8801, 8804, 8805, 8962, 8976, 8992, 8993, 9472, 9474, 9484, 9488, 9492, 9496, 9500, 9508, 9516, 9524, 9532, 9552, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9600, 9604, 9608, 9612, 9616, 9617, 9618, 9619, 9632, 9633, 9642, 9643, 9644, 9650, 9658, 9660, 9668, 9674, 9675, 9679, 9688, 9689, 9702, 9786, 9787, 9788, 9792, 9794, 9824, 9827, 9829, 9830, 9834, 9835, 9836, 61441, 61442, 61445, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]; exports.LiberationSansItalicMapping = LiberationSansItalicMapping; const LiberationSansRegularWidths = [365, 0, 333, 278, 278, 355, 556, 556, 889, 667, 191, 333, 333, 389, 584, 278, 333, 278, 278, 556, 556, 556, 556, 556, 556, 556, 556, 556, 556, 278, 278, 584, 584, 584, 556, 1015, 667, 667, 722, 722, 667, 611, 778, 722, 278, 500, 667, 556, 833, 722, 778, 667, 778, 722, 667, 611, 722, 667, 944, 667, 667, 611, 278, 278, 278, 469, 556, 333, 556, 556, 500, 556, 556, 278, 556, 556, 222, 222, 500, 222, 833, 556, 556, 556, 556, 333, 500, 278, 556, 500, 722, 500, 500, 500, 334, 260, 334, 584, 333, 556, 556, 556, 556, 260, 556, 333, 737, 370, 556, 584, 737, 552, 400, 549, 333, 333, 333, 576, 537, 278, 333, 333, 365, 556, 834, 834, 834, 611, 667, 667, 667, 667, 667, 667, 1000, 722, 667, 667, 667, 667, 278, 278, 278, 278, 722, 722, 778, 778, 778, 778, 778, 584, 778, 722, 722, 722, 722, 667, 667, 611, 556, 556, 556, 556, 556, 556, 889, 500, 556, 556, 556, 556, 278, 278, 278, 278, 556, 556, 556, 556, 556, 556, 556, 549, 611, 556, 556, 556, 556, 500, 556, 500, 667, 556, 667, 556, 667, 556, 722, 500, 722, 500, 722, 500, 722, 500, 722, 615, 722, 556, 667, 556, 667, 556, 667, 556, 667, 556, 667, 556, 778, 556, 778, 556, 778, 556, 778, 556, 722, 556, 722, 556, 278, 278, 278, 278, 278, 278, 278, 222, 278, 278, 735, 444, 500, 222, 667, 500, 500, 556, 222, 556, 222, 556, 292, 556, 334, 556, 222, 722, 556, 722, 556, 722, 556, 604, 723, 556, 778, 556, 778, 556, 778, 556, 1000, 944, 722, 333, 722, 333, 722, 333, 667, 500, 667, 500, 667, 500, 667, 500, 611, 278, 611, 375, 611, 278, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 722, 556, 944, 722, 667, 500, 667, 611, 500, 611, 500, 611, 500, 222, 556, 667, 556, 1000, 889, 778, 611, 667, 500, 611, 278, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, 667, 278, 784, 838, 384, 774, 855, 752, 222, 667, 667, 551, 668, 667, 611, 722, 778, 278, 667, 668, 833, 722, 650, 778, 722, 667, 618, 611, 667, 798, 667, 835, 748, 278, 667, 578, 446, 556, 222, 547, 578, 575, 500, 557, 446, 441, 556, 556, 222, 500, 500, 576, 500, 448, 556, 690, 569, 482, 617, 395, 547, 648, 525, 713, 781, 222, 547, 556, 547, 781, 667, 667, 865, 542, 719, 667, 278, 278, 500, 1057, 1010, 854, 583, 722, 635, 719, 667, 656, 667, 542, 677, 667, 923, 604, 719, 719, 583, 656, 833, 722, 778, 719, 667, 722, 611, 635, 760, 667, 740, 667, 917, 938, 792, 885, 656, 719, 1010, 722, 556, 573, 531, 365, 583, 556, 669, 458, 559, 559, 438, 583, 688, 552, 556, 542, 556, 500, 458, 500, 823, 500, 573, 521, 802, 823, 625, 719, 521, 510, 750, 542, 556, 556, 556, 365, 510, 500, 222, 278, 222, 906, 812, 556, 438, 559, 500, 552, 778, 556, 489, 411, 944, 722, 944, 722, 944, 722, 667, 500, 333, 333, 556, 1000, 1000, 552, 222, 222, 222, 222, 333, 333, 333, 556, 556, 350, 1000, 1000, 188, 354, 333, 333, 500, 333, 167, 365, 556, 556, 1094, 556, 885, 323, 1073, 1000, 768, 600, 834, 834, 834, 834, 1000, 500, 1000, 500, 1000, 500, 500, 494, 612, 823, 713, 584, 549, 713, 979, 719, 274, 549, 549, 583, 549, 549, 604, 584, 604, 604, 708, 625, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, 729, 604, 604, 354, 354, 1000, 990, 990, 990, 990, 494, 604, 604, 604, 604, 354, 1021, 1052, 917, 750, 750, 531, 656, 594, 510, 500, 750, 750, 500, 500, 333, 333, 333, 333, 333, 333, 333, 333, 222, 222, 294, 294, 324, 324, 316, 328, 398, 285]; exports.LiberationSansRegularWidths = LiberationSansRegularWidths; const LiberationSansRegularMapping = [-1, -1, -1, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 402, 506, 507, 508, 509, 510, 511, 536, 537, 538, 539, 710, 711, 713, 728, 729, 730, 731, 732, 733, 900, 901, 902, 903, 904, 905, 906, 908, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1138, 1139, 1168, 1169, 7808, 7809, 7810, 7811, 7812, 7813, 7922, 7923, 8208, 8209, 8211, 8212, 8213, 8215, 8216, 8217, 8218, 8219, 8220, 8221, 8222, 8224, 8225, 8226, 8230, 8240, 8242, 8243, 8249, 8250, 8252, 8254, 8260, 8319, 8355, 8356, 8359, 8364, 8453, 8467, 8470, 8482, 8486, 8494, 8539, 8540, 8541, 8542, 8592, 8593, 8594, 8595, 8596, 8597, 8616, 8706, 8710, 8719, 8721, 8722, 8730, 8734, 8735, 8745, 8747, 8776, 8800, 8801, 8804, 8805, 8962, 8976, 8992, 8993, 9472, 9474, 9484, 9488, 9492, 9496, 9500, 9508, 9516, 9524, 9532, 9552, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9600, 9604, 9608, 9612, 9616, 9617, 9618, 9619, 9632, 9633, 9642, 9643, 9644, 9650, 9658, 9660, 9668, 9674, 9675, 9679, 9688, 9689, 9702, 9786, 9787, 9788, 9792, 9794, 9824, 9827, 9829, 9830, 9834, 9835, 9836, 61441, 61442, 61445, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]; exports.LiberationSansRegularMapping = LiberationSansRegularMapping; /***/ }), /* 16 */ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.MyriadProRegularMetrics = exports.MyriadProRegularFactors = exports.MyriadProItalicMetrics = exports.MyriadProItalicFactors = exports.MyriadProBoldMetrics = exports.MyriadProBoldItalicMetrics = exports.MyriadProBoldItalicFactors = exports.MyriadProBoldFactors = void 0; const MyriadProBoldFactors = [1.36898, 1, 1, 0.72706, 0.80479, 0.83734, 0.98894, 0.99793, 0.9897, 0.93884, 0.86209, 0.94292, 0.94292, 1.16661, 1.02058, 0.93582, 0.96694, 0.93582, 1.19137, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.99793, 0.78076, 0.78076, 1.02058, 1.02058, 1.02058, 0.72851, 0.78966, 0.90838, 0.83637, 0.82391, 0.96376, 0.80061, 0.86275, 0.8768, 0.95407, 1.0258, 0.73901, 0.85022, 0.83655, 1.0156, 0.95546, 0.92179, 0.87107, 0.92179, 0.82114, 0.8096, 0.89713, 0.94438, 0.95353, 0.94083, 0.91905, 0.90406, 0.9446, 0.94292, 1.18777, 0.94292, 1.02058, 0.89903, 0.90088, 0.94938, 0.97898, 0.81093, 0.97571, 0.94938, 1.024, 0.9577, 0.95933, 0.98621, 1.0474, 0.97455, 0.98981, 0.9672, 0.95933, 0.9446, 0.97898, 0.97407, 0.97646, 0.78036, 1.10208, 0.95442, 0.95298, 0.97579, 0.9332, 0.94039, 0.938, 0.80687, 1.01149, 0.80687, 1.02058, 0.80479, 0.99793, 0.99793, 0.99793, 0.99793, 1.01149, 1.00872, 0.90088, 0.91882, 1.0213, 0.8361, 1.02058, 0.62295, 0.54324, 0.89022, 1.08595, 1, 1, 0.90088, 1, 0.97455, 0.93582, 0.90088, 1, 1.05686, 0.8361, 0.99642, 0.99642, 0.99642, 0.72851, 0.90838, 0.90838, 0.90838, 0.90838, 0.90838, 0.90838, 0.868, 0.82391, 0.80061, 0.80061, 0.80061, 0.80061, 1.0258, 1.0258, 1.0258, 1.0258, 0.97484, 0.95546, 0.92179, 0.92179, 0.92179, 0.92179, 0.92179, 1.02058, 0.92179, 0.94438, 0.94438, 0.94438, 0.94438, 0.90406, 0.86958, 0.98225, 0.94938, 0.94938, 0.94938, 0.94938, 0.94938, 0.94938, 0.9031, 0.81093, 0.94938, 0.94938, 0.94938, 0.94938, 0.98621, 0.98621, 0.98621, 0.98621, 0.93969, 0.95933, 0.9446, 0.9446, 0.9446, 0.9446, 0.9446, 1.08595, 0.9446, 0.95442, 0.95442, 0.95442, 0.95442, 0.94039, 0.97898, 0.94039, 0.90838, 0.94938, 0.90838, 0.94938, 0.90838, 0.94938, 0.82391, 0.81093, 0.82391, 0.81093, 0.82391, 0.81093, 0.82391, 0.81093, 0.96376, 0.84313, 0.97484, 0.97571, 0.80061, 0.94938, 0.80061, 0.94938, 0.80061, 0.94938, 0.80061, 0.94938, 0.80061, 0.94938, 0.8768, 0.9577, 0.8768, 0.9577, 0.8768, 0.9577, 1, 1, 0.95407, 0.95933, 0.97069, 0.95933, 1.0258, 0.98621, 1.0258, 0.98621, 1.0258, 0.98621, 1.0258, 0.98621, 1.0258, 0.98621, 0.887, 1.01591, 0.73901, 1.0474, 1, 1, 0.97455, 0.83655, 0.98981, 1, 1, 0.83655, 0.73977, 0.83655, 0.73903, 0.84638, 1.033, 0.95546, 0.95933, 1, 1, 0.95546, 0.95933, 0.8271, 0.95417, 0.95933, 0.92179, 0.9446, 0.92179, 0.9446, 0.92179, 0.9446, 0.936, 0.91964, 0.82114, 0.97646, 1, 1, 0.82114, 0.97646, 0.8096, 0.78036, 0.8096, 0.78036, 1, 1, 0.8096, 0.78036, 1, 1, 0.89713, 0.77452, 0.89713, 1.10208, 0.94438, 0.95442, 0.94438, 0.95442, 0.94438, 0.95442, 0.94438, 0.95442, 0.94438, 0.95442, 0.94438, 0.95442, 0.94083, 0.97579, 0.90406, 0.94039, 0.90406, 0.9446, 0.938, 0.9446, 0.938, 0.9446, 0.938, 1, 0.99793, 0.90838, 0.94938, 0.868, 0.9031, 0.92179, 0.9446, 1, 1, 0.89713, 1.10208, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90989, 0.9358, 0.91945, 0.83181, 0.75261, 0.87992, 0.82976, 0.96034, 0.83689, 0.97268, 1.0078, 0.90838, 0.83637, 0.8019, 0.90157, 0.80061, 0.9446, 0.95407, 0.92436, 1.0258, 0.85022, 0.97153, 1.0156, 0.95546, 0.89192, 0.92179, 0.92361, 0.87107, 0.96318, 0.89713, 0.93704, 0.95638, 0.91905, 0.91709, 0.92796, 1.0258, 0.93704, 0.94836, 1.0373, 0.95933, 1.0078, 0.95871, 0.94836, 0.96174, 0.92601, 0.9498, 0.98607, 0.95776, 0.95933, 1.05453, 1.0078, 0.98275, 0.9314, 0.95617, 0.91701, 1.05993, 0.9446, 0.78367, 0.9553, 1, 0.86832, 1.0128, 0.95871, 0.99394, 0.87548, 0.96361, 0.86774, 1.0078, 0.95871, 0.9446, 0.95871, 0.86774, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.94083, 0.97579, 0.94083, 0.97579, 0.94083, 0.97579, 0.90406, 0.94039, 0.96694, 1, 0.89903, 1, 1, 1, 0.93582, 0.93582, 0.93582, 1, 0.908, 0.908, 0.918, 0.94219, 0.94219, 0.96544, 1, 1.285, 1, 1, 0.81079, 0.81079, 1, 1, 0.74854, 1, 1, 1, 1, 0.99793, 1, 1, 1, 0.65, 1, 1.36145, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.17173, 1, 0.80535, 0.76169, 1.02058, 1.0732, 1.05486, 1, 1, 1.30692, 1.08595, 1.08595, 1, 1.08595, 1.08595, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.16161, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; exports.MyriadProBoldFactors = MyriadProBoldFactors; const MyriadProBoldMetrics = { lineHeight: 1.2, lineGap: 0.2 }; exports.MyriadProBoldMetrics = MyriadProBoldMetrics; const MyriadProBoldItalicFactors = [1.36898, 1, 1, 0.66227, 0.80779, 0.81625, 0.97276, 0.97276, 0.97733, 0.92222, 0.83266, 0.94292, 0.94292, 1.16148, 1.02058, 0.93582, 0.96694, 0.93582, 1.17337, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.97276, 0.78076, 0.78076, 1.02058, 1.02058, 1.02058, 0.71541, 0.76813, 0.85576, 0.80591, 0.80729, 0.94299, 0.77512, 0.83655, 0.86523, 0.92222, 0.98621, 0.71743, 0.81698, 0.79726, 0.98558, 0.92222, 0.90637, 0.83809, 0.90637, 0.80729, 0.76463, 0.86275, 0.90699, 0.91605, 0.9154, 0.85308, 0.85458, 0.90531, 0.94292, 1.21296, 0.94292, 1.02058, 0.89903, 1.18616, 0.99613, 0.91677, 0.78216, 0.91677, 0.90083, 0.98796, 0.9135, 0.92168, 0.95381, 0.98981, 0.95298, 0.95381, 0.93459, 0.92168, 0.91513, 0.92004, 0.91677, 0.95077, 0.748, 1.04502, 0.91677, 0.92061, 0.94236, 0.89544, 0.89364, 0.9, 0.80687, 0.8578, 0.80687, 1.02058, 0.80779, 0.97276, 0.97276, 0.97276, 0.97276, 0.8578, 0.99973, 1.18616, 0.91339, 1.08074, 0.82891, 1.02058, 0.55509, 0.71526, 0.89022, 1.08595, 1, 1, 1.18616, 1, 0.96736, 0.93582, 1.18616, 1, 1.04864, 0.82711, 0.99043, 0.99043, 0.99043, 0.71541, 0.85576, 0.85576, 0.85576, 0.85576, 0.85576, 0.85576, 0.845, 0.80729, 0.77512, 0.77512, 0.77512, 0.77512, 0.98621, 0.98621, 0.98621, 0.98621, 0.95961, 0.92222, 0.90637, 0.90637, 0.90637, 0.90637, 0.90637, 1.02058, 0.90251, 0.90699, 0.90699, 0.90699, 0.90699, 0.85458, 0.83659, 0.94951, 0.99613, 0.99613, 0.99613, 0.99613, 0.99613, 0.99613, 0.85811, 0.78216, 0.90083, 0.90083, 0.90083, 0.90083, 0.95381, 0.95381, 0.95381, 0.95381, 0.9135, 0.92168, 0.91513, 0.91513, 0.91513, 0.91513, 0.91513, 1.08595, 0.91677, 0.91677, 0.91677, 0.91677, 0.91677, 0.89364, 0.92332, 0.89364, 0.85576, 0.99613, 0.85576, 0.99613, 0.85576, 0.99613, 0.80729, 0.78216, 0.80729, 0.78216, 0.80729, 0.78216, 0.80729, 0.78216, 0.94299, 0.76783, 0.95961, 0.91677, 0.77512, 0.90083, 0.77512, 0.90083, 0.77512, 0.90083, 0.77512, 0.90083, 0.77512, 0.90083, 0.86523, 0.9135, 0.86523, 0.9135, 0.86523, 0.9135, 1, 1, 0.92222, 0.92168, 0.92222, 0.92168, 0.98621, 0.95381, 0.98621, 0.95381, 0.98621, 0.95381, 0.98621, 0.95381, 0.98621, 0.95381, 0.86036, 0.97096, 0.71743, 0.98981, 1, 1, 0.95298, 0.79726, 0.95381, 1, 1, 0.79726, 0.6894, 0.79726, 0.74321, 0.81691, 1.0006, 0.92222, 0.92168, 1, 1, 0.92222, 0.92168, 0.79464, 0.92098, 0.92168, 0.90637, 0.91513, 0.90637, 0.91513, 0.90637, 0.91513, 0.909, 0.87514, 0.80729, 0.95077, 1, 1, 0.80729, 0.95077, 0.76463, 0.748, 0.76463, 0.748, 1, 1, 0.76463, 0.748, 1, 1, 0.86275, 0.72651, 0.86275, 1.04502, 0.90699, 0.91677, 0.90699, 0.91677, 0.90699, 0.91677, 0.90699, 0.91677, 0.90699, 0.91677, 0.90699, 0.91677, 0.9154, 0.94236, 0.85458, 0.89364, 0.85458, 0.90531, 0.9, 0.90531, 0.9, 0.90531, 0.9, 1, 0.97276, 0.85576, 0.99613, 0.845, 0.85811, 0.90251, 0.91677, 1, 1, 0.86275, 1.04502, 1.18616, 1.18616, 1.18616, 1.18616, 1.18616, 1.18616, 1.18616, 1.18616, 1.18616, 1.00899, 1.30628, 0.85576, 0.80178, 0.66862, 0.7927, 0.69323, 0.88127, 0.72459, 0.89711, 0.95381, 0.85576, 0.80591, 0.7805, 0.94729, 0.77512, 0.90531, 0.92222, 0.90637, 0.98621, 0.81698, 0.92655, 0.98558, 0.92222, 0.85359, 0.90637, 0.90976, 0.83809, 0.94523, 0.86275, 0.83509, 0.93157, 0.85308, 0.83392, 0.92346, 0.98621, 0.83509, 0.92886, 0.91324, 0.92168, 0.95381, 0.90646, 0.92886, 0.90557, 0.86847, 0.90276, 0.91324, 0.86842, 0.92168, 0.99531, 0.95381, 0.9224, 0.85408, 0.92699, 0.86847, 1.0051, 0.91513, 0.80487, 0.93481, 1, 0.88159, 1.05214, 0.90646, 0.97355, 0.81539, 0.89398, 0.85923, 0.95381, 0.90646, 0.91513, 0.90646, 0.85923, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.9154, 0.94236, 0.9154, 0.94236, 0.9154, 0.94236, 0.85458, 0.89364, 0.96694, 1, 0.89903, 1, 1, 1, 0.91782, 0.91782, 0.91782, 1, 0.896, 0.896, 0.896, 0.9332, 0.9332, 0.95973, 1, 1.26, 1, 1, 0.80479, 0.80178, 1, 1, 0.85633, 1, 1, 1, 1, 0.97276, 1, 1, 1, 0.698, 1, 1.36145, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.14542, 1, 0.79199, 0.78694, 1.02058, 1.03493, 1.05486, 1, 1, 1.23026, 1.08595, 1.08595, 1, 1.08595, 1.08595, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.20006, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; exports.MyriadProBoldItalicFactors = MyriadProBoldItalicFactors; const MyriadProBoldItalicMetrics = { lineHeight: 1.2, lineGap: 0.2 }; exports.MyriadProBoldItalicMetrics = MyriadProBoldItalicMetrics; const MyriadProItalicFactors = [1.36898, 1, 1, 0.65507, 0.84943, 0.85639, 0.88465, 0.88465, 0.86936, 0.88307, 0.86948, 0.85283, 0.85283, 1.06383, 1.02058, 0.75945, 0.9219, 0.75945, 1.17337, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.88465, 0.75945, 0.75945, 1.02058, 1.02058, 1.02058, 0.69046, 0.70926, 0.85158, 0.77812, 0.76852, 0.89591, 0.70466, 0.76125, 0.80094, 0.86822, 0.83864, 0.728, 0.77212, 0.79475, 0.93637, 0.87514, 0.8588, 0.76013, 0.8588, 0.72421, 0.69866, 0.77598, 0.85991, 0.80811, 0.87832, 0.78112, 0.77512, 0.8562, 1.0222, 1.18417, 1.0222, 1.27014, 0.89903, 1.15012, 0.93859, 0.94399, 0.846, 0.94399, 0.81453, 1.0186, 0.94219, 0.96017, 1.03075, 1.02175, 0.912, 1.03075, 0.96998, 0.96017, 0.93859, 0.94399, 0.94399, 0.95493, 0.746, 1.12658, 0.94578, 0.91, 0.979, 0.882, 0.882, 0.83, 0.85034, 0.83537, 0.85034, 1.02058, 0.70869, 0.88465, 0.88465, 0.88465, 0.88465, 0.83537, 0.90083, 1.15012, 0.9161, 0.94565, 0.73541, 1.02058, 0.53609, 0.69353, 0.79519, 1.08595, 1, 1, 1.15012, 1, 0.91974, 0.75945, 1.15012, 1, 0.9446, 0.73361, 0.9005, 0.9005, 0.9005, 0.62864, 0.85158, 0.85158, 0.85158, 0.85158, 0.85158, 0.85158, 0.773, 0.76852, 0.70466, 0.70466, 0.70466, 0.70466, 0.83864, 0.83864, 0.83864, 0.83864, 0.90561, 0.87514, 0.8588, 0.8588, 0.8588, 0.8588, 0.8588, 1.02058, 0.85751, 0.85991, 0.85991, 0.85991, 0.85991, 0.77512, 0.76013, 0.88075, 0.93859, 0.93859, 0.93859, 0.93859, 0.93859, 0.93859, 0.8075, 0.846, 0.81453, 0.81453, 0.81453, 0.81453, 0.82424, 0.82424, 0.82424, 0.82424, 0.9278, 0.96017, 0.93859, 0.93859, 0.93859, 0.93859, 0.93859, 1.08595, 0.8562, 0.94578, 0.94578, 0.94578, 0.94578, 0.882, 0.94578, 0.882, 0.85158, 0.93859, 0.85158, 0.93859, 0.85158, 0.93859, 0.76852, 0.846, 0.76852, 0.846, 0.76852, 0.846, 0.76852, 0.846, 0.89591, 0.8544, 0.90561, 0.94399, 0.70466, 0.81453, 0.70466, 0.81453, 0.70466, 0.81453, 0.70466, 0.81453, 0.70466, 0.81453, 0.80094, 0.94219, 0.80094, 0.94219, 0.80094, 0.94219, 1, 1, 0.86822, 0.96017, 0.86822, 0.96017, 0.83864, 0.82424, 0.83864, 0.82424, 0.83864, 0.82424, 0.83864, 1.03075, 0.83864, 0.82424, 0.81402, 1.02738, 0.728, 1.02175, 1, 1, 0.912, 0.79475, 1.03075, 1, 1, 0.79475, 0.83911, 0.79475, 0.66266, 0.80553, 1.06676, 0.87514, 0.96017, 1, 1, 0.87514, 0.96017, 0.86865, 0.87396, 0.96017, 0.8588, 0.93859, 0.8588, 0.93859, 0.8588, 0.93859, 0.867, 0.84759, 0.72421, 0.95493, 1, 1, 0.72421, 0.95493, 0.69866, 0.746, 0.69866, 0.746, 1, 1, 0.69866, 0.746, 1, 1, 0.77598, 0.88417, 0.77598, 1.12658, 0.85991, 0.94578, 0.85991, 0.94578, 0.85991, 0.94578, 0.85991, 0.94578, 0.85991, 0.94578, 0.85991, 0.94578, 0.87832, 0.979, 0.77512, 0.882, 0.77512, 0.8562, 0.83, 0.8562, 0.83, 0.8562, 0.83, 1, 0.88465, 0.85158, 0.93859, 0.773, 0.8075, 0.85751, 0.8562, 1, 1, 0.77598, 1.12658, 1.15012, 1.15012, 1.15012, 1.15012, 1.15012, 1.15313, 1.15012, 1.15012, 1.15012, 1.08106, 1.03901, 0.85158, 0.77025, 0.62264, 0.7646, 0.65351, 0.86026, 0.69461, 0.89947, 1.03075, 0.85158, 0.77812, 0.76449, 0.88836, 0.70466, 0.8562, 0.86822, 0.8588, 0.83864, 0.77212, 0.85308, 0.93637, 0.87514, 0.82352, 0.8588, 0.85701, 0.76013, 0.89058, 0.77598, 0.8156, 0.82565, 0.78112, 0.77899, 0.89386, 0.83864, 0.8156, 0.9486, 0.92388, 0.96186, 1.03075, 0.91123, 0.9486, 0.93298, 0.878, 0.93942, 0.92388, 0.84596, 0.96186, 0.95119, 1.03075, 0.922, 0.88787, 0.95829, 0.88, 0.93559, 0.93859, 0.78815, 0.93758, 1, 0.89217, 1.03737, 0.91123, 0.93969, 0.77487, 0.85769, 0.86799, 1.03075, 0.91123, 0.93859, 0.91123, 0.86799, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.87832, 0.979, 0.87832, 0.979, 0.87832, 0.979, 0.77512, 0.882, 0.9219, 1, 0.89903, 1, 1, 1, 0.87321, 0.87321, 0.87321, 1, 1.027, 1.027, 1.027, 0.86847, 0.86847, 0.79121, 1, 1.124, 1, 1, 0.73572, 0.73572, 1, 1, 0.85034, 1, 1, 1, 1, 0.88465, 1, 1, 1, 0.669, 1, 1.36145, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.04828, 1, 0.74948, 0.75187, 1.02058, 0.98391, 1.02119, 1, 1, 1.06233, 1.08595, 1.08595, 1, 1.08595, 1.08595, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.05233, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; exports.MyriadProItalicFactors = MyriadProItalicFactors; const MyriadProItalicMetrics = { lineHeight: 1.2, lineGap: 0.2 }; exports.MyriadProItalicMetrics = MyriadProItalicMetrics; const MyriadProRegularFactors = [1.36898, 1, 1, 0.76305, 0.82784, 0.94935, 0.89364, 0.92241, 0.89073, 0.90706, 0.98472, 0.85283, 0.85283, 1.0664, 1.02058, 0.74505, 0.9219, 0.74505, 1.23456, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.92241, 0.74505, 0.74505, 1.02058, 1.02058, 1.02058, 0.73002, 0.72601, 0.91755, 0.8126, 0.80314, 0.92222, 0.73764, 0.79726, 0.83051, 0.90284, 0.86023, 0.74, 0.8126, 0.84869, 0.96518, 0.91115, 0.8858, 0.79761, 0.8858, 0.74498, 0.73914, 0.81363, 0.89591, 0.83659, 0.89633, 0.85608, 0.8111, 0.90531, 1.0222, 1.22736, 1.0222, 1.27014, 0.89903, 0.90088, 0.86667, 1.0231, 0.896, 1.01411, 0.90083, 1.05099, 1.00512, 0.99793, 1.05326, 1.09377, 0.938, 1.06226, 1.00119, 0.99793, 0.98714, 1.0231, 1.01231, 0.98196, 0.792, 1.19137, 0.99074, 0.962, 1.01915, 0.926, 0.942, 0.856, 0.85034, 0.92006, 0.85034, 1.02058, 0.69067, 0.92241, 0.92241, 0.92241, 0.92241, 0.92006, 0.9332, 0.90088, 0.91882, 0.93484, 0.75339, 1.02058, 0.56866, 0.54324, 0.79519, 1.08595, 1, 1, 0.90088, 1, 0.95325, 0.74505, 0.90088, 1, 0.97198, 0.75339, 0.91009, 0.91009, 0.91009, 0.66466, 0.91755, 0.91755, 0.91755, 0.91755, 0.91755, 0.91755, 0.788, 0.80314, 0.73764, 0.73764, 0.73764, 0.73764, 0.86023, 0.86023, 0.86023, 0.86023, 0.92915, 0.91115, 0.8858, 0.8858, 0.8858, 0.8858, 0.8858, 1.02058, 0.8858, 0.89591, 0.89591, 0.89591, 0.89591, 0.8111, 0.79611, 0.89713, 0.86667, 0.86667, 0.86667, 0.86667, 0.86667, 0.86667, 0.86936, 0.896, 0.90083, 0.90083, 0.90083, 0.90083, 0.84224, 0.84224, 0.84224, 0.84224, 0.97276, 0.99793, 0.98714, 0.98714, 0.98714, 0.98714, 0.98714, 1.08595, 0.89876, 0.99074, 0.99074, 0.99074, 0.99074, 0.942, 1.0231, 0.942, 0.91755, 0.86667, 0.91755, 0.86667, 0.91755, 0.86667, 0.80314, 0.896, 0.80314, 0.896, 0.80314, 0.896, 0.80314, 0.896, 0.92222, 0.93372, 0.92915, 1.01411, 0.73764, 0.90083, 0.73764, 0.90083, 0.73764, 0.90083, 0.73764, 0.90083, 0.73764, 0.90083, 0.83051, 1.00512, 0.83051, 1.00512, 0.83051, 1.00512, 1, 1, 0.90284, 0.99793, 0.90976, 0.99793, 0.86023, 0.84224, 0.86023, 0.84224, 0.86023, 0.84224, 0.86023, 1.05326, 0.86023, 0.84224, 0.82873, 1.07469, 0.74, 1.09377, 1, 1, 0.938, 0.84869, 1.06226, 1, 1, 0.84869, 0.83704, 0.84869, 0.81441, 0.85588, 1.08927, 0.91115, 0.99793, 1, 1, 0.91115, 0.99793, 0.91887, 0.90991, 0.99793, 0.8858, 0.98714, 0.8858, 0.98714, 0.8858, 0.98714, 0.894, 0.91434, 0.74498, 0.98196, 1, 1, 0.74498, 0.98196, 0.73914, 0.792, 0.73914, 0.792, 1, 1, 0.73914, 0.792, 1, 1, 0.81363, 0.904, 0.81363, 1.19137, 0.89591, 0.99074, 0.89591, 0.99074, 0.89591, 0.99074, 0.89591, 0.99074, 0.89591, 0.99074, 0.89591, 0.99074, 0.89633, 1.01915, 0.8111, 0.942, 0.8111, 0.90531, 0.856, 0.90531, 0.856, 0.90531, 0.856, 1, 0.92241, 0.91755, 0.86667, 0.788, 0.86936, 0.8858, 0.89876, 1, 1, 0.81363, 1.19137, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90088, 0.90388, 1.03901, 0.92138, 0.78105, 0.7154, 0.86169, 0.80513, 0.94007, 0.82528, 0.98612, 1.06226, 0.91755, 0.8126, 0.81884, 0.92819, 0.73764, 0.90531, 0.90284, 0.8858, 0.86023, 0.8126, 0.91172, 0.96518, 0.91115, 0.83089, 0.8858, 0.87791, 0.79761, 0.89297, 0.81363, 0.88157, 0.89992, 0.85608, 0.81992, 0.94307, 0.86023, 0.88157, 0.95308, 0.98699, 0.99793, 1.06226, 0.95817, 0.95308, 0.97358, 0.928, 0.98088, 0.98699, 0.92761, 0.99793, 0.96017, 1.06226, 0.986, 0.944, 0.95978, 0.938, 0.96705, 0.98714, 0.80442, 0.98972, 1, 0.89762, 1.04552, 0.95817, 0.99007, 0.87064, 0.91879, 0.88888, 1.06226, 0.95817, 0.98714, 0.95817, 0.88888, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.89633, 1.01915, 0.89633, 1.01915, 0.89633, 1.01915, 0.8111, 0.942, 0.9219, 1, 0.89903, 1, 1, 1, 0.93173, 0.93173, 0.93173, 1, 1.06304, 1.06304, 1.06904, 0.89903, 0.89903, 0.80549, 1, 1.156, 1, 1, 0.76575, 0.76575, 1, 1, 0.72458, 1, 1, 1, 1, 0.92241, 1, 1, 1, 0.619, 1, 1.36145, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.07257, 1, 0.74705, 0.71119, 1.02058, 1.024, 1.02119, 1, 1, 1.1536, 1.08595, 1.08595, 1, 1.08595, 1.08595, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.05638, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; exports.MyriadProRegularFactors = MyriadProRegularFactors; const MyriadProRegularMetrics = { lineHeight: 1.2, lineGap: 0.2 }; exports.MyriadProRegularMetrics = MyriadProRegularMetrics; /***/ }), /* 17 */ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.SegoeuiRegularMetrics = exports.SegoeuiRegularFactors = exports.SegoeuiItalicMetrics = exports.SegoeuiItalicFactors = exports.SegoeuiBoldMetrics = exports.SegoeuiBoldItalicMetrics = exports.SegoeuiBoldItalicFactors = exports.SegoeuiBoldFactors = void 0; const SegoeuiBoldFactors = [1.76738, 1, 1, 0.99297, 0.9824, 1.04016, 1.06497, 1.03424, 0.97529, 1.17647, 1.23203, 1.1085, 1.1085, 1.16939, 1.2107, 0.9754, 1.21408, 0.9754, 1.59578, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 1.03424, 0.81378, 0.81378, 1.2107, 1.2107, 1.2107, 0.71703, 0.97847, 0.97363, 0.88776, 0.8641, 1.02096, 0.79795, 0.85132, 0.914, 1.06085, 1.1406, 0.8007, 0.89858, 0.83693, 1.14889, 1.09398, 0.97489, 0.92094, 0.97489, 0.90399, 0.84041, 0.95923, 1.00135, 1, 1.06467, 0.98243, 0.90996, 0.99361, 1.1085, 1.56942, 1.1085, 1.2107, 0.74627, 0.94282, 0.96752, 1.01519, 0.86304, 1.01359, 0.97278, 1.15103, 1.01359, 0.98561, 1.02285, 1.02285, 1.00527, 1.02285, 1.0302, 0.99041, 1.0008, 1.01519, 1.01359, 1.02258, 0.79104, 1.16862, 0.99041, 0.97454, 1.02511, 0.99298, 0.96752, 0.95801, 0.94856, 1.16579, 0.94856, 1.2107, 0.9824, 1.03424, 1.03424, 1, 1.03424, 1.16579, 0.8727, 1.3871, 1.18622, 1.10818, 1.04478, 1.2107, 1.18622, 0.75155, 0.94994, 1.28826, 1.21408, 1.21408, 0.91056, 1, 0.91572, 0.9754, 0.64663, 1.18328, 1.24866, 1.04478, 1.14169, 1.15749, 1.17389, 0.71703, 0.97363, 0.97363, 0.97363, 0.97363, 0.97363, 0.97363, 0.93506, 0.8641, 0.79795, 0.79795, 0.79795, 0.79795, 1.1406, 1.1406, 1.1406, 1.1406, 1.02096, 1.09398, 0.97426, 0.97426, 0.97426, 0.97426, 0.97426, 1.2107, 0.97489, 1.00135, 1.00135, 1.00135, 1.00135, 0.90996, 0.92094, 1.02798, 0.96752, 0.96752, 0.96752, 0.96752, 0.96752, 0.96752, 0.93136, 0.86304, 0.97278, 0.97278, 0.97278, 0.97278, 1.02285, 1.02285, 1.02285, 1.02285, 0.97122, 0.99041, 1, 1, 1, 1, 1, 1.28826, 1.0008, 0.99041, 0.99041, 0.99041, 0.99041, 0.96752, 1.01519, 0.96752, 0.97363, 0.96752, 0.97363, 0.96752, 0.97363, 0.96752, 0.8641, 0.86304, 0.8641, 0.86304, 0.8641, 0.86304, 0.8641, 0.86304, 1.02096, 1.03057, 1.02096, 1.03517, 0.79795, 0.97278, 0.79795, 0.97278, 0.79795, 0.97278, 0.79795, 0.97278, 0.79795, 0.97278, 0.914, 1.01359, 0.914, 1.01359, 0.914, 1.01359, 1, 1, 1.06085, 0.98561, 1.06085, 1.00879, 1.1406, 1.02285, 1.1406, 1.02285, 1.1406, 1.02285, 1.1406, 1.02285, 1.1406, 1.02285, 0.97138, 1.08692, 0.8007, 1.02285, 1, 1, 1.00527, 0.83693, 1.02285, 1, 1, 0.83693, 0.9455, 0.83693, 0.90418, 0.83693, 1.13005, 1.09398, 0.99041, 1, 1, 1.09398, 0.99041, 0.96692, 1.09251, 0.99041, 0.97489, 1.0008, 0.97489, 1.0008, 0.97489, 1.0008, 0.93994, 0.97931, 0.90399, 1.02258, 1, 1, 0.90399, 1.02258, 0.84041, 0.79104, 0.84041, 0.79104, 0.84041, 0.79104, 0.84041, 0.79104, 1, 1, 0.95923, 1.07034, 0.95923, 1.16862, 1.00135, 0.99041, 1.00135, 0.99041, 1.00135, 0.99041, 1.00135, 0.99041, 1.00135, 0.99041, 1.00135, 0.99041, 1.06467, 1.02511, 0.90996, 0.96752, 0.90996, 0.99361, 0.95801, 0.99361, 0.95801, 0.99361, 0.95801, 1.07733, 1.03424, 0.97363, 0.96752, 0.93506, 0.93136, 0.97489, 1.0008, 1, 1, 0.95923, 1.16862, 1.15103, 1.15103, 1.01173, 1.03959, 0.75953, 0.81378, 0.79912, 1.15103, 1.21994, 0.95161, 0.87815, 1.01149, 0.81525, 0.7676, 0.98167, 1.01134, 1.02546, 0.84097, 1.03089, 1.18102, 0.97363, 0.88776, 0.85134, 0.97826, 0.79795, 0.99361, 1.06085, 0.97489, 1.1406, 0.89858, 1.0388, 1.14889, 1.09398, 0.86039, 0.97489, 1.0595, 0.92094, 0.94793, 0.95923, 0.90996, 0.99346, 0.98243, 1.02112, 0.95493, 1.1406, 0.90996, 1.03574, 1.02597, 1.0008, 1.18102, 1.06628, 1.03574, 1.0192, 1.01932, 1.00886, 0.97531, 1.0106, 1.0008, 1.13189, 1.18102, 1.02277, 0.98683, 1.0016, 0.99561, 1.07237, 1.0008, 0.90434, 0.99921, 0.93803, 0.8965, 1.23085, 1.06628, 1.04983, 0.96268, 1.0499, 0.98439, 1.18102, 1.06628, 1.0008, 1.06628, 0.98439, 0.79795, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.09466, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.97278, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.02065, 1, 1, 1, 1, 1, 1, 1.06467, 1.02511, 1.06467, 1.02511, 1.06467, 1.02511, 0.90996, 0.96752, 1, 1.21408, 0.89903, 1, 1, 0.75155, 1.04394, 1.04394, 1.04394, 1.04394, 0.98633, 0.98633, 0.98633, 0.73047, 0.73047, 1.20642, 0.91211, 1.25635, 1.222, 1.02956, 1.03372, 1.03372, 0.96039, 1.24633, 1, 1.12454, 0.93503, 1.03424, 1.19687, 1.03424, 1, 1, 1, 0.771, 1, 1, 1.15749, 1.15749, 1.15749, 1.10948, 0.86279, 0.94434, 0.86279, 0.94434, 0.86182, 1, 1, 1.16897, 1, 0.96085, 0.90137, 1.2107, 1.18416, 1.13973, 0.69825, 0.9716, 2.10339, 1.29004, 1.29004, 1.21172, 1.29004, 1.29004, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.42603, 1, 0.99862, 0.99862, 1, 0.87025, 0.87025, 0.87025, 0.87025, 1.18874, 1.42603, 1, 1.42603, 1.42603, 0.99862, 1, 1, 1, 1, 1, 1.2886, 1.04315, 1.15296, 1.34163, 1, 1, 1, 1.09193, 1.09193, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; exports.SegoeuiBoldFactors = SegoeuiBoldFactors; const SegoeuiBoldMetrics = { lineHeight: 1.33008, lineGap: 0 }; exports.SegoeuiBoldMetrics = SegoeuiBoldMetrics; const SegoeuiBoldItalicFactors = [1.76738, 1, 1, 0.98946, 1.03959, 1.04016, 1.02809, 1.036, 0.97639, 1.10953, 1.23203, 1.11144, 1.11144, 1.16939, 1.21237, 0.9754, 1.21261, 0.9754, 1.59754, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 1.036, 0.81378, 0.81378, 1.21237, 1.21237, 1.21237, 0.73541, 0.97847, 0.97363, 0.89723, 0.87897, 1.0426, 0.79429, 0.85292, 0.91149, 1.05815, 1.1406, 0.79631, 0.90128, 0.83853, 1.04396, 1.10615, 0.97552, 0.94436, 0.97552, 0.88641, 0.80527, 0.96083, 1.00135, 1, 1.06777, 0.9817, 0.91142, 0.99361, 1.11144, 1.57293, 1.11144, 1.21237, 0.74627, 1.31818, 1.06585, 0.97042, 0.83055, 0.97042, 0.93503, 1.1261, 0.97042, 0.97922, 1.14236, 0.94552, 1.01054, 1.14236, 1.02471, 0.97922, 0.94165, 0.97042, 0.97042, 1.0276, 0.78929, 1.1261, 0.97922, 0.95874, 1.02197, 0.98507, 0.96752, 0.97168, 0.95107, 1.16579, 0.95107, 1.21237, 1.03959, 1.036, 1.036, 1, 1.036, 1.16579, 0.87357, 1.31818, 1.18754, 1.26781, 1.05356, 1.21237, 1.18622, 0.79487, 0.94994, 1.29004, 1.24047, 1.24047, 1.31818, 1, 0.91484, 0.9754, 1.31818, 1.1349, 1.24866, 1.05356, 1.13934, 1.15574, 1.17389, 0.73541, 0.97363, 0.97363, 0.97363, 0.97363, 0.97363, 0.97363, 0.94385, 0.87897, 0.79429, 0.79429, 0.79429, 0.79429, 1.1406, 1.1406, 1.1406, 1.1406, 1.0426, 1.10615, 0.97552, 0.97552, 0.97552, 0.97552, 0.97552, 1.21237, 0.97552, 1.00135, 1.00135, 1.00135, 1.00135, 0.91142, 0.94436, 0.98721, 1.06585, 1.06585, 1.06585, 1.06585, 1.06585, 1.06585, 0.96705, 0.83055, 0.93503, 0.93503, 0.93503, 0.93503, 1.14236, 1.14236, 1.14236, 1.14236, 0.93125, 0.97922, 0.94165, 0.94165, 0.94165, 0.94165, 0.94165, 1.29004, 0.94165, 0.97922, 0.97922, 0.97922, 0.97922, 0.96752, 0.97042, 0.96752, 0.97363, 1.06585, 0.97363, 1.06585, 0.97363, 1.06585, 0.87897, 0.83055, 0.87897, 0.83055, 0.87897, 0.83055, 0.87897, 0.83055, 1.0426, 1.0033, 1.0426, 0.97042, 0.79429, 0.93503, 0.79429, 0.93503, 0.79429, 0.93503, 0.79429, 0.93503, 0.79429, 0.93503, 0.91149, 0.97042, 0.91149, 0.97042, 0.91149, 0.97042, 1, 1, 1.05815, 0.97922, 1.05815, 0.97922, 1.1406, 1.14236, 1.1406, 1.14236, 1.1406, 1.14236, 1.1406, 1.14236, 1.1406, 1.14236, 0.97441, 1.04302, 0.79631, 1.01582, 1, 1, 1.01054, 0.83853, 1.14236, 1, 1, 0.83853, 1.09125, 0.83853, 0.90418, 0.83853, 1.19508, 1.10615, 0.97922, 1, 1, 1.10615, 0.97922, 1.01034, 1.10466, 0.97922, 0.97552, 0.94165, 0.97552, 0.94165, 0.97552, 0.94165, 0.91602, 0.91981, 0.88641, 1.0276, 1, 1, 0.88641, 1.0276, 0.80527, 0.78929, 0.80527, 0.78929, 0.80527, 0.78929, 0.80527, 0.78929, 1, 1, 0.96083, 1.05403, 0.95923, 1.16862, 1.00135, 0.97922, 1.00135, 0.97922, 1.00135, 0.97922, 1.00135, 0.97922, 1.00135, 0.97922, 1.00135, 0.97922, 1.06777, 1.02197, 0.91142, 0.96752, 0.91142, 0.99361, 0.97168, 0.99361, 0.97168, 0.99361, 0.97168, 1.23199, 1.036, 0.97363, 1.06585, 0.94385, 0.96705, 0.97552, 0.94165, 1, 1, 0.96083, 1.1261, 1.31818, 1.31818, 1.31818, 1.31818, 1.31818, 1.31818, 1.31818, 1.31818, 1.31818, 0.95161, 1.27126, 1.00811, 0.83284, 0.77702, 0.99137, 0.95253, 1.0347, 0.86142, 1.07205, 1.14236, 0.97363, 0.89723, 0.86869, 1.09818, 0.79429, 0.99361, 1.05815, 0.97552, 1.1406, 0.90128, 1.06662, 1.04396, 1.10615, 0.84918, 0.97552, 1.04694, 0.94436, 0.98015, 0.96083, 0.91142, 1.00356, 0.9817, 1.01945, 0.98999, 1.1406, 0.91142, 1.04961, 0.9898, 1.00639, 1.14236, 1.07514, 1.04961, 0.99607, 1.02897, 1.008, 0.9898, 0.95134, 1.00639, 1.11121, 1.14236, 1.00518, 0.97981, 1.02186, 1, 1.08578, 0.94165, 0.99314, 0.98387, 0.93028, 0.93377, 1.35125, 1.07514, 1.10687, 0.93491, 1.04232, 1.00351, 1.14236, 1.07514, 0.94165, 1.07514, 1.00351, 0.79429, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.09097, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.93503, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.96609, 1, 1, 1, 1, 1, 1, 1.06777, 1.02197, 1.06777, 1.02197, 1.06777, 1.02197, 0.91142, 0.96752, 1, 1.21261, 0.89903, 1, 1, 0.75155, 1.04745, 1.04745, 1.04745, 1.04394, 0.98633, 0.98633, 0.98633, 0.72959, 0.72959, 1.20502, 0.91406, 1.26514, 1.222, 1.02956, 1.03372, 1.03372, 0.96039, 1.24633, 1, 1.09125, 0.93327, 1.03336, 1.16541, 1.036, 1, 1, 1, 0.771, 1, 1, 1.15574, 1.15574, 1.15574, 1.15574, 0.86364, 0.94434, 0.86279, 0.94434, 0.86224, 1, 1, 1.16798, 1, 0.96085, 0.90068, 1.21237, 1.18416, 1.13904, 0.69825, 0.9716, 2.10339, 1.29004, 1.29004, 1.21339, 1.29004, 1.29004, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.42603, 1, 0.99862, 0.99862, 1, 0.87025, 0.87025, 0.87025, 0.87025, 1.18775, 1.42603, 1, 1.42603, 1.42603, 0.99862, 1, 1, 1, 1, 1, 1.2886, 1.04315, 1.15296, 1.34163, 1, 1, 1, 1.13269, 1.13269, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; exports.SegoeuiBoldItalicFactors = SegoeuiBoldItalicFactors; const SegoeuiBoldItalicMetrics = { lineHeight: 1.33008, lineGap: 0 }; exports.SegoeuiBoldItalicMetrics = SegoeuiBoldItalicMetrics; const SegoeuiItalicFactors = [1.76738, 1, 1, 0.98946, 1.14763, 1.05365, 1.06234, 0.96927, 0.92586, 1.15373, 1.18414, 0.91349, 0.91349, 1.07403, 1.17308, 0.78383, 1.20088, 0.78383, 1.42531, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.78383, 0.78383, 1.17308, 1.17308, 1.17308, 0.77349, 0.94565, 0.94729, 0.85944, 0.88506, 0.9858, 0.74817, 0.80016, 0.88449, 0.98039, 0.95782, 0.69238, 0.89898, 0.83231, 0.98183, 1.03989, 0.96924, 0.86237, 0.96924, 0.80595, 0.74524, 0.86091, 0.95402, 0.94143, 0.98448, 0.8858, 0.83089, 0.93285, 1.0949, 1.39016, 1.0949, 1.45994, 0.74627, 1.04839, 0.97454, 0.97454, 0.87207, 0.97454, 0.87533, 1.06151, 0.97454, 1.00176, 1.16484, 1.08132, 0.98047, 1.16484, 1.02989, 1.01054, 0.96225, 0.97454, 0.97454, 1.06598, 0.79004, 1.16344, 1.00351, 0.94629, 0.9973, 0.91016, 0.96777, 0.9043, 0.91082, 0.92481, 0.91082, 1.17308, 0.95748, 0.96927, 0.96927, 1, 0.96927, 0.92481, 0.80597, 1.04839, 1.23393, 1.1781, 0.9245, 1.17308, 1.20808, 0.63218, 0.94261, 1.24822, 1.09971, 1.09971, 1.04839, 1, 0.85273, 0.78032, 1.04839, 1.09971, 1.22326, 0.9245, 1.09836, 1.13525, 1.15222, 0.70424, 0.94729, 0.94729, 0.94729, 0.94729, 0.94729, 0.94729, 0.85498, 0.88506, 0.74817, 0.74817, 0.74817, 0.74817, 0.95782, 0.95782, 0.95782, 0.95782, 0.9858, 1.03989, 0.96924, 0.96924, 0.96924, 0.96924, 0.96924, 1.17308, 0.96924, 0.95402, 0.95402, 0.95402, 0.95402, 0.83089, 0.86237, 0.88409, 0.97454, 0.97454, 0.97454, 0.97454, 0.97454, 0.97454, 0.92916, 0.87207, 0.87533, 0.87533, 0.87533, 0.87533, 0.93146, 0.93146, 0.93146, 0.93146, 0.93854, 1.01054, 0.96225, 0.96225, 0.96225, 0.96225, 0.96225, 1.24822, 0.8761, 1.00351, 1.00351, 1.00351, 1.00351, 0.96777, 0.97454, 0.96777, 0.94729, 0.97454, 0.94729, 0.97454, 0.94729, 0.97454, 0.88506, 0.87207, 0.88506, 0.87207, 0.88506, 0.87207, 0.88506, 0.87207, 0.9858, 0.95391, 0.9858, 0.97454, 0.74817, 0.87533, 0.74817, 0.87533, 0.74817, 0.87533, 0.74817, 0.87533, 0.74817, 0.87533, 0.88449, 0.97454, 0.88449, 0.97454, 0.88449, 0.97454, 1, 1, 0.98039, 1.00176, 0.98039, 1.00176, 0.95782, 0.93146, 0.95782, 0.93146, 0.95782, 0.93146, 0.95782, 1.16484, 0.95782, 0.93146, 0.84421, 1.12761, 0.69238, 1.08132, 1, 1, 0.98047, 0.83231, 1.16484, 1, 1, 0.84723, 1.04861, 0.84723, 0.78755, 0.83231, 1.23736, 1.03989, 1.01054, 1, 1, 1.03989, 1.01054, 0.9857, 1.03849, 1.01054, 0.96924, 0.96225, 0.96924, 0.96225, 0.96924, 0.96225, 0.92383, 0.90171, 0.80595, 1.06598, 1, 1, 0.80595, 1.06598, 0.74524, 0.79004, 0.74524, 0.79004, 0.74524, 0.79004, 0.74524, 0.79004, 1, 1, 0.86091, 1.02759, 0.85771, 1.16344, 0.95402, 1.00351, 0.95402, 1.00351, 0.95402, 1.00351, 0.95402, 1.00351, 0.95402, 1.00351, 0.95402, 1.00351, 0.98448, 0.9973, 0.83089, 0.96777, 0.83089, 0.93285, 0.9043, 0.93285, 0.9043, 0.93285, 0.9043, 1.31868, 0.96927, 0.94729, 0.97454, 0.85498, 0.92916, 0.96924, 0.8761, 1, 1, 0.86091, 1.16344, 1.04839, 1.04839, 1.04839, 1.04839, 1.04839, 1.04839, 1.04839, 1.04839, 1.04839, 0.81965, 0.81965, 0.94729, 0.78032, 0.71022, 0.90883, 0.84171, 0.99877, 0.77596, 1.05734, 1.2, 0.94729, 0.85944, 0.82791, 0.9607, 0.74817, 0.93285, 0.98039, 0.96924, 0.95782, 0.89898, 0.98316, 0.98183, 1.03989, 0.78614, 0.96924, 0.97642, 0.86237, 0.86075, 0.86091, 0.83089, 0.90082, 0.8858, 0.97296, 1.01284, 0.95782, 0.83089, 1.0976, 1.04, 1.03342, 1.2, 1.0675, 1.0976, 0.98205, 1.03809, 1.05097, 1.04, 0.95364, 1.03342, 1.05401, 1.2, 1.02148, 1.0119, 1.04724, 1.0127, 1.02732, 0.96225, 0.8965, 0.97783, 0.93574, 0.94818, 1.30679, 1.0675, 1.11826, 0.99821, 1.0557, 1.0326, 1.2, 1.0675, 0.96225, 1.0675, 1.0326, 0.74817, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.03754, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.87533, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.98705, 1, 1, 1, 1, 1, 1, 0.98448, 0.9973, 0.98448, 0.9973, 0.98448, 0.9973, 0.83089, 0.96777, 1, 1.20088, 0.89903, 1, 1, 0.75155, 0.94945, 0.94945, 0.94945, 0.94945, 1.12317, 1.12317, 1.12317, 0.67603, 0.67603, 1.15621, 0.73584, 1.21191, 1.22135, 1.06483, 0.94868, 0.94868, 0.95996, 1.24633, 1, 1.07497, 0.87709, 0.96927, 1.01473, 0.96927, 1, 1, 1, 0.77295, 1, 1, 1.09836, 1.09836, 1.09836, 1.01522, 0.86321, 0.94434, 0.8649, 0.94434, 0.86182, 1, 1, 1.083, 1, 0.91578, 0.86438, 1.17308, 1.18416, 1.14589, 0.69825, 0.97622, 1.96791, 1.24822, 1.24822, 1.17308, 1.24822, 1.24822, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.42603, 1, 0.99862, 0.99862, 1, 0.87025, 0.87025, 0.87025, 0.87025, 1.17984, 1.42603, 1, 1.42603, 1.42603, 0.99862, 1, 1, 1, 1, 1, 1.2886, 1.04315, 1.15296, 1.34163, 1, 1, 1, 1.10742, 1.10742, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; exports.SegoeuiItalicFactors = SegoeuiItalicFactors; const SegoeuiItalicMetrics = { lineHeight: 1.33008, lineGap: 0 }; exports.SegoeuiItalicMetrics = SegoeuiItalicMetrics; const SegoeuiRegularFactors = [1.76738, 1, 1, 0.98594, 1.02285, 1.10454, 1.06234, 0.96927, 0.92037, 1.19985, 1.2046, 0.90616, 0.90616, 1.07152, 1.1714, 0.78032, 1.20088, 0.78032, 1.40246, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.96927, 0.78032, 0.78032, 1.1714, 1.1714, 1.1714, 0.80597, 0.94084, 0.96706, 0.85944, 0.85734, 0.97093, 0.75842, 0.79936, 0.88198, 0.9831, 0.95782, 0.71387, 0.86969, 0.84636, 1.07796, 1.03584, 0.96924, 0.83968, 0.96924, 0.82826, 0.79649, 0.85771, 0.95132, 0.93119, 0.98965, 0.88433, 0.8287, 0.93365, 1.08612, 1.3638, 1.08612, 1.45786, 0.74627, 0.80499, 0.91484, 1.05707, 0.92383, 1.05882, 0.9403, 1.12654, 1.05882, 1.01756, 1.09011, 1.09011, 0.99414, 1.09011, 1.034, 1.01756, 1.05356, 1.05707, 1.05882, 1.04399, 0.84863, 1.21968, 1.01756, 0.95801, 1.00068, 0.91797, 0.96777, 0.9043, 0.90351, 0.92105, 0.90351, 1.1714, 0.85337, 0.96927, 0.96927, 0.99912, 0.96927, 0.92105, 0.80597, 1.2434, 1.20808, 1.05937, 0.90957, 1.1714, 1.20808, 0.75155, 0.94261, 1.24644, 1.09971, 1.09971, 0.84751, 1, 0.85273, 0.78032, 0.61584, 1.05425, 1.17914, 0.90957, 1.08665, 1.11593, 1.14169, 0.73381, 0.96706, 0.96706, 0.96706, 0.96706, 0.96706, 0.96706, 0.86035, 0.85734, 0.75842, 0.75842, 0.75842, 0.75842, 0.95782, 0.95782, 0.95782, 0.95782, 0.97093, 1.03584, 0.96924, 0.96924, 0.96924, 0.96924, 0.96924, 1.1714, 0.96924, 0.95132, 0.95132, 0.95132, 0.95132, 0.8287, 0.83968, 0.89049, 0.91484, 0.91484, 0.91484, 0.91484, 0.91484, 0.91484, 0.93575, 0.92383, 0.9403, 0.9403, 0.9403, 0.9403, 0.8717, 0.8717, 0.8717, 0.8717, 1.00527, 1.01756, 1.05356, 1.05356, 1.05356, 1.05356, 1.05356, 1.24644, 0.95923, 1.01756, 1.01756, 1.01756, 1.01756, 0.96777, 1.05707, 0.96777, 0.96706, 0.91484, 0.96706, 0.91484, 0.96706, 0.91484, 0.85734, 0.92383, 0.85734, 0.92383, 0.85734, 0.92383, 0.85734, 0.92383, 0.97093, 1.0969, 0.97093, 1.05882, 0.75842, 0.9403, 0.75842, 0.9403, 0.75842, 0.9403, 0.75842, 0.9403, 0.75842, 0.9403, 0.88198, 1.05882, 0.88198, 1.05882, 0.88198, 1.05882, 1, 1, 0.9831, 1.01756, 0.9831, 1.01756, 0.95782, 0.8717, 0.95782, 0.8717, 0.95782, 0.8717, 0.95782, 1.09011, 0.95782, 0.8717, 0.84784, 1.11551, 0.71387, 1.09011, 1, 1, 0.99414, 0.84636, 1.09011, 1, 1, 0.84636, 1.0536, 0.84636, 0.94298, 0.84636, 1.23297, 1.03584, 1.01756, 1, 1, 1.03584, 1.01756, 1.00323, 1.03444, 1.01756, 0.96924, 1.05356, 0.96924, 1.05356, 0.96924, 1.05356, 0.93066, 0.98293, 0.82826, 1.04399, 1, 1, 0.82826, 1.04399, 0.79649, 0.84863, 0.79649, 0.84863, 0.79649, 0.84863, 0.79649, 0.84863, 1, 1, 0.85771, 1.17318, 0.85771, 1.21968, 0.95132, 1.01756, 0.95132, 1.01756, 0.95132, 1.01756, 0.95132, 1.01756, 0.95132, 1.01756, 0.95132, 1.01756, 0.98965, 1.00068, 0.8287, 0.96777, 0.8287, 0.93365, 0.9043, 0.93365, 0.9043, 0.93365, 0.9043, 1.08571, 0.96927, 0.96706, 0.91484, 0.86035, 0.93575, 0.96924, 0.95923, 1, 1, 0.85771, 1.21968, 1.11437, 1.11437, 0.93109, 0.91202, 0.60411, 0.84164, 0.55572, 1.01173, 0.97361, 0.81818, 0.81818, 0.96635, 0.78032, 0.72727, 0.92366, 0.98601, 1.03405, 0.77968, 1.09799, 1.2, 0.96706, 0.85944, 0.85638, 0.96491, 0.75842, 0.93365, 0.9831, 0.96924, 0.95782, 0.86969, 0.94152, 1.07796, 1.03584, 0.78437, 0.96924, 0.98715, 0.83968, 0.83491, 0.85771, 0.8287, 0.94492, 0.88433, 0.9287, 1.0098, 0.95782, 0.8287, 1.0625, 0.98248, 1.03424, 1.2, 1.01071, 1.0625, 0.95246, 1.03809, 1.04912, 0.98248, 1.00221, 1.03424, 1.05443, 1.2, 1.04785, 0.99609, 1.00169, 1.05176, 0.99346, 1.05356, 0.9087, 1.03004, 0.95542, 0.93117, 1.23362, 1.01071, 1.07831, 1.02512, 1.05205, 1.03502, 1.2, 1.01071, 1.05356, 1.01071, 1.03502, 0.75842, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.03719, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0.9403, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.04021, 1, 1, 1, 1, 1, 1, 0.98965, 1.00068, 0.98965, 1.00068, 0.98965, 1.00068, 0.8287, 0.96777, 1, 1.20088, 0.89903, 1, 1, 0.75155, 1.03077, 1.03077, 1.03077, 1.03077, 1.13196, 1.13196, 1.13196, 0.67428, 0.67428, 1.16039, 0.73291, 1.20996, 1.22135, 1.06483, 0.94868, 0.94868, 0.95996, 1.24633, 1, 1.07497, 0.87796, 0.96927, 1.01518, 0.96927, 1, 1, 1, 0.77295, 1, 1, 1.10539, 1.10539, 1.11358, 1.06967, 0.86279, 0.94434, 0.86279, 0.94434, 0.86182, 1, 1, 1.083, 1, 0.91578, 0.86507, 1.1714, 1.18416, 1.14589, 0.69825, 0.97622, 1.9697, 1.24822, 1.24822, 1.17238, 1.24822, 1.24822, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.42603, 1, 0.99862, 0.99862, 1, 0.87025, 0.87025, 0.87025, 0.87025, 1.18083, 1.42603, 1, 1.42603, 1.42603, 0.99862, 1, 1, 1, 1, 1, 1.2886, 1.04315, 1.15296, 1.34163, 1, 1, 1, 1.10938, 1.10938, 1, 1, 1, 1.05425, 1.09971, 1.09971, 1.09971, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]; exports.SegoeuiRegularFactors = SegoeuiRegularFactors; const SegoeuiRegularMetrics = { lineHeight: 1.33008, lineGap: 0 }; exports.SegoeuiRegularMetrics = SegoeuiRegularMetrics; /***/ }), /* 18 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.SEAC_ANALYSIS_ENABLED = exports.MacStandardGlyphOrdering = exports.FontFlags = void 0; exports.getFontType = getFontType; exports.normalizeFontName = normalizeFontName; exports.recoverGlyphName = recoverGlyphName; exports.type1FontGlyphMapping = type1FontGlyphMapping; var _util = __w_pdfjs_require__(2); var _encodings = __w_pdfjs_require__(19); var _glyphlist = __w_pdfjs_require__(20); var _unicode = __w_pdfjs_require__(21); const SEAC_ANALYSIS_ENABLED = true; exports.SEAC_ANALYSIS_ENABLED = SEAC_ANALYSIS_ENABLED; const FontFlags = { FixedPitch: 1, Serif: 2, Symbolic: 4, Script: 8, Nonsymbolic: 32, Italic: 64, AllCap: 65536, SmallCap: 131072, ForceBold: 262144 }; exports.FontFlags = FontFlags; const MacStandardGlyphOrdering = [".notdef", ".null", "nonmarkingreturn", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quotesingle", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "grave", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "Adieresis", "Aring", "Ccedilla", "Eacute", "Ntilde", "Odieresis", "Udieresis", "aacute", "agrave", "acircumflex", "adieresis", "atilde", "aring", "ccedilla", "eacute", "egrave", "ecircumflex", "edieresis", "iacute", "igrave", "icircumflex", "idieresis", "ntilde", "oacute", "ograve", "ocircumflex", "odieresis", "otilde", "uacute", "ugrave", "ucircumflex", "udieresis", "dagger", "degree", "cent", "sterling", "section", "bullet", "paragraph", "germandbls", "registered", "copyright", "trademark", "acute", "dieresis", "notequal", "AE", "Oslash", "infinity", "plusminus", "lessequal", "greaterequal", "yen", "mu", "partialdiff", "summation", "product", "pi", "integral", "ordfeminine", "ordmasculine", "Omega", "ae", "oslash", "questiondown", "exclamdown", "logicalnot", "radical", "florin", "approxequal", "Delta", "guillemotleft", "guillemotright", "ellipsis", "nonbreakingspace", "Agrave", "Atilde", "Otilde", "OE", "oe", "endash", "emdash", "quotedblleft", "quotedblright", "quoteleft", "quoteright", "divide", "lozenge", "ydieresis", "Ydieresis", "fraction", "currency", "guilsinglleft", "guilsinglright", "fi", "fl", "daggerdbl", "periodcentered", "quotesinglbase", "quotedblbase", "perthousand", "Acircumflex", "Ecircumflex", "Aacute", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Oacute", "Ocircumflex", "apple", "Ograve", "Uacute", "Ucircumflex", "Ugrave", "dotlessi", "circumflex", "tilde", "macron", "breve", "dotaccent", "ring", "cedilla", "hungarumlaut", "ogonek", "caron", "Lslash", "lslash", "Scaron", "scaron", "Zcaron", "zcaron", "brokenbar", "Eth", "eth", "Yacute", "yacute", "Thorn", "thorn", "minus", "multiply", "onesuperior", "twosuperior", "threesuperior", "onehalf", "onequarter", "threequarters", "franc", "Gbreve", "gbreve", "Idotaccent", "Scedilla", "scedilla", "Cacute", "cacute", "Ccaron", "ccaron", "dcroat"]; exports.MacStandardGlyphOrdering = MacStandardGlyphOrdering; function getFontType(type, subtype, isStandardFont = false) { switch (type) { case "Type1": if (isStandardFont) { return _util.FontType.TYPE1STANDARD; } return subtype === "Type1C" ? _util.FontType.TYPE1C : _util.FontType.TYPE1; case "CIDFontType0": return subtype === "CIDFontType0C" ? _util.FontType.CIDFONTTYPE0C : _util.FontType.CIDFONTTYPE0; case "OpenType": return _util.FontType.OPENTYPE; case "TrueType": return _util.FontType.TRUETYPE; case "CIDFontType2": return _util.FontType.CIDFONTTYPE2; case "MMType1": return _util.FontType.MMTYPE1; case "Type0": return _util.FontType.TYPE0; default: return _util.FontType.UNKNOWN; } } function recoverGlyphName(name, glyphsUnicodeMap) { if (glyphsUnicodeMap[name] !== undefined) { return name; } const unicode = (0, _unicode.getUnicodeForGlyph)(name, glyphsUnicodeMap); if (unicode !== -1) { for (const key in glyphsUnicodeMap) { if (glyphsUnicodeMap[key] === unicode) { return key; } } } (0, _util.info)("Unable to recover a standard glyph name for: " + name); return name; } function type1FontGlyphMapping(properties, builtInEncoding, glyphNames) { const charCodeToGlyphId = Object.create(null); let glyphId, charCode, baseEncoding; const isSymbolicFont = !!(properties.flags & FontFlags.Symbolic); if (properties.isInternalFont) { baseEncoding = builtInEncoding; for (charCode = 0; charCode < baseEncoding.length; charCode++) { glyphId = glyphNames.indexOf(baseEncoding[charCode]); if (glyphId >= 0) { charCodeToGlyphId[charCode] = glyphId; } else { charCodeToGlyphId[charCode] = 0; } } } else if (properties.baseEncodingName) { baseEncoding = (0, _encodings.getEncoding)(properties.baseEncodingName); for (charCode = 0; charCode < baseEncoding.length; charCode++) { glyphId = glyphNames.indexOf(baseEncoding[charCode]); if (glyphId >= 0) { charCodeToGlyphId[charCode] = glyphId; } else { charCodeToGlyphId[charCode] = 0; } } } else if (isSymbolicFont) { for (charCode in builtInEncoding) { charCodeToGlyphId[charCode] = builtInEncoding[charCode]; } } else { baseEncoding = _encodings.StandardEncoding; for (charCode = 0; charCode < baseEncoding.length; charCode++) { glyphId = glyphNames.indexOf(baseEncoding[charCode]); if (glyphId >= 0) { charCodeToGlyphId[charCode] = glyphId; } else { charCodeToGlyphId[charCode] = 0; } } } const differences = properties.differences; let glyphsUnicodeMap; if (differences) { for (charCode in differences) { const glyphName = differences[charCode]; glyphId = glyphNames.indexOf(glyphName); if (glyphId === -1) { if (!glyphsUnicodeMap) { glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); } const standardGlyphName = recoverGlyphName(glyphName, glyphsUnicodeMap); if (standardGlyphName !== glyphName) { glyphId = glyphNames.indexOf(standardGlyphName); } } if (glyphId >= 0) { charCodeToGlyphId[charCode] = glyphId; } else { charCodeToGlyphId[charCode] = 0; } } } return charCodeToGlyphId; } function normalizeFontName(name) { return name.replace(/[,_]/g, "-").replace(/\s/g, ""); } /***/ }), /* 19 */ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.ZapfDingbatsEncoding = exports.WinAnsiEncoding = exports.SymbolSetEncoding = exports.StandardEncoding = exports.MacRomanEncoding = exports.ExpertEncoding = void 0; exports.getEncoding = getEncoding; const ExpertEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclamsmall", "Hungarumlautsmall", "", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "commasuperior", "threequartersemdash", "periodsuperior", "questionsmall", "", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "", "", "", "isuperior", "", "", "lsuperior", "msuperior", "nsuperior", "osuperior", "", "", "rsuperior", "ssuperior", "tsuperior", "", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "", "parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "exclamdownsmall", "centoldstyle", "Lslashsmall", "", "", "Scaronsmall", "Zcaronsmall", "Dieresissmall", "Brevesmall", "Caronsmall", "", "Dotaccentsmall", "", "", "Macronsmall", "", "", "figuredash", "hypheninferior", "", "", "Ogoneksmall", "Ringsmall", "Cedillasmall", "", "", "", "onequarter", "onehalf", "threequarters", "questiondownsmall", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "", "", "zerosuperior", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior", "Agravesmall", "Aacutesmall", "Acircumflexsmall", "Atildesmall", "Adieresissmall", "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall", "Eacutesmall", "Ecircumflexsmall", "Edieresissmall", "Igravesmall", "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall", "Ntildesmall", "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall", "Odieresissmall", "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall", "Ucircumflexsmall", "Udieresissmall", "Yacutesmall", "Thornsmall", "Ydieresissmall"]; exports.ExpertEncoding = ExpertEncoding; const MacExpertEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclamsmall", "Hungarumlautsmall", "centoldstyle", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "", "threequartersemdash", "", "questionsmall", "", "", "", "", "Ethsmall", "", "", "onequarter", "onehalf", "threequarters", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "", "", "", "", "", "", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "", "parenrightinferior", "Circumflexsmall", "hypheninferior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "", "", "asuperior", "centsuperior", "", "", "", "", "Aacutesmall", "Agravesmall", "Acircumflexsmall", "Adieresissmall", "Atildesmall", "Aringsmall", "Ccedillasmall", "Eacutesmall", "Egravesmall", "Ecircumflexsmall", "Edieresissmall", "Iacutesmall", "Igravesmall", "Icircumflexsmall", "Idieresissmall", "Ntildesmall", "Oacutesmall", "Ogravesmall", "Ocircumflexsmall", "Odieresissmall", "Otildesmall", "Uacutesmall", "Ugravesmall", "Ucircumflexsmall", "Udieresissmall", "", "eightsuperior", "fourinferior", "threeinferior", "sixinferior", "eightinferior", "seveninferior", "Scaronsmall", "", "centinferior", "twoinferior", "", "Dieresissmall", "", "Caronsmall", "osuperior", "fiveinferior", "", "commainferior", "periodinferior", "Yacutesmall", "", "dollarinferior", "", "", "Thornsmall", "", "nineinferior", "zeroinferior", "Zcaronsmall", "AEsmall", "Oslashsmall", "questiondownsmall", "oneinferior", "Lslashsmall", "", "", "", "", "", "", "Cedillasmall", "", "", "", "", "", "OEsmall", "figuredash", "hyphensuperior", "", "", "", "", "exclamdownsmall", "", "Ydieresissmall", "", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "ninesuperior", "zerosuperior", "", "esuperior", "rsuperior", "tsuperior", "", "", "isuperior", "ssuperior", "dsuperior", "", "", "", "", "", "lsuperior", "Ogoneksmall", "Brevesmall", "Macronsmall", "bsuperior", "nsuperior", "msuperior", "commasuperior", "periodsuperior", "Dotaccentsmall", "Ringsmall", "", "", "", ""]; const MacRomanEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quotesingle", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "grave", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "", "Adieresis", "Aring", "Ccedilla", "Eacute", "Ntilde", "Odieresis", "Udieresis", "aacute", "agrave", "acircumflex", "adieresis", "atilde", "aring", "ccedilla", "eacute", "egrave", "ecircumflex", "edieresis", "iacute", "igrave", "icircumflex", "idieresis", "ntilde", "oacute", "ograve", "ocircumflex", "odieresis", "otilde", "uacute", "ugrave", "ucircumflex", "udieresis", "dagger", "degree", "cent", "sterling", "section", "bullet", "paragraph", "germandbls", "registered", "copyright", "trademark", "acute", "dieresis", "notequal", "AE", "Oslash", "infinity", "plusminus", "lessequal", "greaterequal", "yen", "mu", "partialdiff", "summation", "product", "pi", "integral", "ordfeminine", "ordmasculine", "Omega", "ae", "oslash", "questiondown", "exclamdown", "logicalnot", "radical", "florin", "approxequal", "Delta", "guillemotleft", "guillemotright", "ellipsis", "space", "Agrave", "Atilde", "Otilde", "OE", "oe", "endash", "emdash", "quotedblleft", "quotedblright", "quoteleft", "quoteright", "divide", "lozenge", "ydieresis", "Ydieresis", "fraction", "currency", "guilsinglleft", "guilsinglright", "fi", "fl", "daggerdbl", "periodcentered", "quotesinglbase", "quotedblbase", "perthousand", "Acircumflex", "Ecircumflex", "Aacute", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Oacute", "Ocircumflex", "apple", "Ograve", "Uacute", "Ucircumflex", "Ugrave", "dotlessi", "circumflex", "tilde", "macron", "breve", "dotaccent", "ring", "cedilla", "hungarumlaut", "ogonek", "caron"]; exports.MacRomanEncoding = MacRomanEncoding; const StandardEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quoteright", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "quoteleft", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "exclamdown", "cent", "sterling", "fraction", "yen", "florin", "section", "currency", "quotesingle", "quotedblleft", "guillemotleft", "guilsinglleft", "guilsinglright", "fi", "fl", "", "endash", "dagger", "daggerdbl", "periodcentered", "", "paragraph", "bullet", "quotesinglbase", "quotedblbase", "quotedblright", "guillemotright", "ellipsis", "perthousand", "", "questiondown", "", "grave", "acute", "circumflex", "tilde", "macron", "breve", "dotaccent", "dieresis", "", "ring", "cedilla", "", "hungarumlaut", "ogonek", "caron", "emdash", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "AE", "", "ordfeminine", "", "", "", "", "Lslash", "Oslash", "OE", "ordmasculine", "", "", "", "", "", "ae", "", "", "", "dotlessi", "", "", "lslash", "oslash", "oe", "germandbls", "", "", "", ""]; exports.StandardEncoding = StandardEncoding; const WinAnsiEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quotesingle", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "grave", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "bullet", "Euro", "bullet", "quotesinglbase", "florin", "quotedblbase", "ellipsis", "dagger", "daggerdbl", "circumflex", "perthousand", "Scaron", "guilsinglleft", "OE", "bullet", "Zcaron", "bullet", "bullet", "quoteleft", "quoteright", "quotedblleft", "quotedblright", "bullet", "endash", "emdash", "tilde", "trademark", "scaron", "guilsinglright", "oe", "bullet", "zcaron", "Ydieresis", "space", "exclamdown", "cent", "sterling", "currency", "yen", "brokenbar", "section", "dieresis", "copyright", "ordfeminine", "guillemotleft", "logicalnot", "hyphen", "registered", "macron", "degree", "plusminus", "twosuperior", "threesuperior", "acute", "mu", "paragraph", "periodcentered", "cedilla", "onesuperior", "ordmasculine", "guillemotright", "onequarter", "onehalf", "threequarters", "questiondown", "Agrave", "Aacute", "Acircumflex", "Atilde", "Adieresis", "Aring", "AE", "Ccedilla", "Egrave", "Eacute", "Ecircumflex", "Edieresis", "Igrave", "Iacute", "Icircumflex", "Idieresis", "Eth", "Ntilde", "Ograve", "Oacute", "Ocircumflex", "Otilde", "Odieresis", "multiply", "Oslash", "Ugrave", "Uacute", "Ucircumflex", "Udieresis", "Yacute", "Thorn", "germandbls", "agrave", "aacute", "acircumflex", "atilde", "adieresis", "aring", "ae", "ccedilla", "egrave", "eacute", "ecircumflex", "edieresis", "igrave", "iacute", "icircumflex", "idieresis", "eth", "ntilde", "ograve", "oacute", "ocircumflex", "otilde", "odieresis", "divide", "oslash", "ugrave", "uacute", "ucircumflex", "udieresis", "yacute", "thorn", "ydieresis"]; exports.WinAnsiEncoding = WinAnsiEncoding; const SymbolSetEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "exclam", "universal", "numbersign", "existential", "percent", "ampersand", "suchthat", "parenleft", "parenright", "asteriskmath", "plus", "comma", "minus", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "congruent", "Alpha", "Beta", "Chi", "Delta", "Epsilon", "Phi", "Gamma", "Eta", "Iota", "theta1", "Kappa", "Lambda", "Mu", "Nu", "Omicron", "Pi", "Theta", "Rho", "Sigma", "Tau", "Upsilon", "sigma1", "Omega", "Xi", "Psi", "Zeta", "bracketleft", "therefore", "bracketright", "perpendicular", "underscore", "radicalex", "alpha", "beta", "chi", "delta", "epsilon", "phi", "gamma", "eta", "iota", "phi1", "kappa", "lambda", "mu", "nu", "omicron", "pi", "theta", "rho", "sigma", "tau", "upsilon", "omega1", "omega", "xi", "psi", "zeta", "braceleft", "bar", "braceright", "similar", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "Euro", "Upsilon1", "minute", "lessequal", "fraction", "infinity", "florin", "club", "diamond", "heart", "spade", "arrowboth", "arrowleft", "arrowup", "arrowright", "arrowdown", "degree", "plusminus", "second", "greaterequal", "multiply", "proportional", "partialdiff", "bullet", "divide", "notequal", "equivalence", "approxequal", "ellipsis", "arrowvertex", "arrowhorizex", "carriagereturn", "aleph", "Ifraktur", "Rfraktur", "weierstrass", "circlemultiply", "circleplus", "emptyset", "intersection", "union", "propersuperset", "reflexsuperset", "notsubset", "propersubset", "reflexsubset", "element", "notelement", "angle", "gradient", "registerserif", "copyrightserif", "trademarkserif", "product", "radical", "dotmath", "logicalnot", "logicaland", "logicalor", "arrowdblboth", "arrowdblleft", "arrowdblup", "arrowdblright", "arrowdbldown", "lozenge", "angleleft", "registersans", "copyrightsans", "trademarksans", "summation", "parenlefttp", "parenleftex", "parenleftbt", "bracketlefttp", "bracketleftex", "bracketleftbt", "bracelefttp", "braceleftmid", "braceleftbt", "braceex", "", "angleright", "integral", "integraltp", "integralex", "integralbt", "parenrighttp", "parenrightex", "parenrightbt", "bracketrighttp", "bracketrightex", "bracketrightbt", "bracerighttp", "bracerightmid", "bracerightbt", ""]; exports.SymbolSetEncoding = SymbolSetEncoding; const ZapfDingbatsEncoding = ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "space", "a1", "a2", "a202", "a3", "a4", "a5", "a119", "a118", "a117", "a11", "a12", "a13", "a14", "a15", "a16", "a105", "a17", "a18", "a19", "a20", "a21", "a22", "a23", "a24", "a25", "a26", "a27", "a28", "a6", "a7", "a8", "a9", "a10", "a29", "a30", "a31", "a32", "a33", "a34", "a35", "a36", "a37", "a38", "a39", "a40", "a41", "a42", "a43", "a44", "a45", "a46", "a47", "a48", "a49", "a50", "a51", "a52", "a53", "a54", "a55", "a56", "a57", "a58", "a59", "a60", "a61", "a62", "a63", "a64", "a65", "a66", "a67", "a68", "a69", "a70", "a71", "a72", "a73", "a74", "a203", "a75", "a204", "a76", "a77", "a78", "a79", "a81", "a82", "a83", "a84", "a97", "a98", "a99", "a100", "", "a89", "a90", "a93", "a94", "a91", "a92", "a205", "a85", "a206", "a86", "a87", "a88", "a95", "a96", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "a101", "a102", "a103", "a104", "a106", "a107", "a108", "a112", "a111", "a110", "a109", "a120", "a121", "a122", "a123", "a124", "a125", "a126", "a127", "a128", "a129", "a130", "a131", "a132", "a133", "a134", "a135", "a136", "a137", "a138", "a139", "a140", "a141", "a142", "a143", "a144", "a145", "a146", "a147", "a148", "a149", "a150", "a151", "a152", "a153", "a154", "a155", "a156", "a157", "a158", "a159", "a160", "a161", "a163", "a164", "a196", "a165", "a192", "a166", "a167", "a168", "a169", "a170", "a171", "a172", "a173", "a162", "a174", "a175", "a176", "a177", "a178", "a179", "a193", "a180", "a199", "a181", "a200", "a182", "", "a201", "a183", "a184", "a197", "a185", "a194", "a198", "a186", "a195", "a187", "a188", "a189", "a190", "a191", ""]; exports.ZapfDingbatsEncoding = ZapfDingbatsEncoding; function getEncoding(encodingName) { switch (encodingName) { case "WinAnsiEncoding": return WinAnsiEncoding; case "StandardEncoding": return StandardEncoding; case "MacRomanEncoding": return MacRomanEncoding; case "SymbolSetEncoding": return SymbolSetEncoding; case "ZapfDingbatsEncoding": return ZapfDingbatsEncoding; case "ExpertEncoding": return ExpertEncoding; case "MacExpertEncoding": return MacExpertEncoding; default: return null; } } /***/ }), /* 20 */ /***/ ((__unused_webpack_module, __webpack_exports__, __w_pdfjs_require__) => { __w_pdfjs_require__.r(__webpack_exports__); /* harmony export */ __w_pdfjs_require__.d(__webpack_exports__, { /* harmony export */ "getDingbatsGlyphsUnicode": () => (/* binding */ getDingbatsGlyphsUnicode), /* harmony export */ "getGlyphsUnicode": () => (/* binding */ getGlyphsUnicode) /* harmony export */ }); /* harmony import */ var _core_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __w_pdfjs_require__(9); const getGlyphsUnicode = (0, _core_utils_js__WEBPACK_IMPORTED_MODULE_0__.getArrayLookupTableFactory)(function () { return [ "A", 0x0041, "AE", 0x00c6, "AEacute", 0x01fc, "AEmacron", 0x01e2, "AEsmall", 0xf7e6, "Aacute", 0x00c1, "Aacutesmall", 0xf7e1, "Abreve", 0x0102, "Abreveacute", 0x1eae, "Abrevecyrillic", 0x04d0, "Abrevedotbelow", 0x1eb6, "Abrevegrave", 0x1eb0, "Abrevehookabove", 0x1eb2, "Abrevetilde", 0x1eb4, "Acaron", 0x01cd, "Acircle", 0x24b6, "Acircumflex", 0x00c2, "Acircumflexacute", 0x1ea4, "Acircumflexdotbelow", 0x1eac, "Acircumflexgrave", 0x1ea6, "Acircumflexhookabove", 0x1ea8, "Acircumflexsmall", 0xf7e2, "Acircumflextilde", 0x1eaa, "Acute", 0xf6c9, "Acutesmall", 0xf7b4, "Acyrillic", 0x0410, "Adblgrave", 0x0200, "Adieresis", 0x00c4, "Adieresiscyrillic", 0x04d2, "Adieresismacron", 0x01de, "Adieresissmall", 0xf7e4, "Adotbelow", 0x1ea0, "Adotmacron", 0x01e0, "Agrave", 0x00c0, "Agravesmall", 0xf7e0, "Ahookabove", 0x1ea2, "Aiecyrillic", 0x04d4, "Ainvertedbreve", 0x0202, "Alpha", 0x0391, "Alphatonos", 0x0386, "Amacron", 0x0100, "Amonospace", 0xff21, "Aogonek", 0x0104, "Aring", 0x00c5, "Aringacute", 0x01fa, "Aringbelow", 0x1e00, "Aringsmall", 0xf7e5, "Asmall", 0xf761, "Atilde", 0x00c3, "Atildesmall", 0xf7e3, "Aybarmenian", 0x0531, "B", 0x0042, "Bcircle", 0x24b7, "Bdotaccent", 0x1e02, "Bdotbelow", 0x1e04, "Becyrillic", 0x0411, "Benarmenian", 0x0532, "Beta", 0x0392, "Bhook", 0x0181, "Blinebelow", 0x1e06, "Bmonospace", 0xff22, "Brevesmall", 0xf6f4, "Bsmall", 0xf762, "Btopbar", 0x0182, "C", 0x0043, "Caarmenian", 0x053e, "Cacute", 0x0106, "Caron", 0xf6ca, "Caronsmall", 0xf6f5, "Ccaron", 0x010c, "Ccedilla", 0x00c7, "Ccedillaacute", 0x1e08, "Ccedillasmall", 0xf7e7, "Ccircle", 0x24b8, "Ccircumflex", 0x0108, "Cdot", 0x010a, "Cdotaccent", 0x010a, "Cedillasmall", 0xf7b8, "Chaarmenian", 0x0549, "Cheabkhasiancyrillic", 0x04bc, "Checyrillic", 0x0427, "Chedescenderabkhasiancyrillic", 0x04be, "Chedescendercyrillic", 0x04b6, "Chedieresiscyrillic", 0x04f4, "Cheharmenian", 0x0543, "Chekhakassiancyrillic", 0x04cb, "Cheverticalstrokecyrillic", 0x04b8, "Chi", 0x03a7, "Chook", 0x0187, "Circumflexsmall", 0xf6f6, "Cmonospace", 0xff23, "Coarmenian", 0x0551, "Csmall", 0xf763, "D", 0x0044, "DZ", 0x01f1, "DZcaron", 0x01c4, "Daarmenian", 0x0534, "Dafrican", 0x0189, "Dcaron", 0x010e, "Dcedilla", 0x1e10, "Dcircle", 0x24b9, "Dcircumflexbelow", 0x1e12, "Dcroat", 0x0110, "Ddotaccent", 0x1e0a, "Ddotbelow", 0x1e0c, "Decyrillic", 0x0414, "Deicoptic", 0x03ee, "Delta", 0x2206, "Deltagreek", 0x0394, "Dhook", 0x018a, "Dieresis", 0xf6cb, "DieresisAcute", 0xf6cc, "DieresisGrave", 0xf6cd, "Dieresissmall", 0xf7a8, "Digammagreek", 0x03dc, "Djecyrillic", 0x0402, "Dlinebelow", 0x1e0e, "Dmonospace", 0xff24, "Dotaccentsmall", 0xf6f7, "Dslash", 0x0110, "Dsmall", 0xf764, "Dtopbar", 0x018b, "Dz", 0x01f2, "Dzcaron", 0x01c5, "Dzeabkhasiancyrillic", 0x04e0, "Dzecyrillic", 0x0405, "Dzhecyrillic", 0x040f, "E", 0x0045, "Eacute", 0x00c9, "Eacutesmall", 0xf7e9, "Ebreve", 0x0114, "Ecaron", 0x011a, "Ecedillabreve", 0x1e1c, "Echarmenian", 0x0535, "Ecircle", 0x24ba, "Ecircumflex", 0x00ca, "Ecircumflexacute", 0x1ebe, "Ecircumflexbelow", 0x1e18, "Ecircumflexdotbelow", 0x1ec6, "Ecircumflexgrave", 0x1ec0, "Ecircumflexhookabove", 0x1ec2, "Ecircumflexsmall", 0xf7ea, "Ecircumflextilde", 0x1ec4, "Ecyrillic", 0x0404, "Edblgrave", 0x0204, "Edieresis", 0x00cb, "Edieresissmall", 0xf7eb, "Edot", 0x0116, "Edotaccent", 0x0116, "Edotbelow", 0x1eb8, "Efcyrillic", 0x0424, "Egrave", 0x00c8, "Egravesmall", 0xf7e8, "Eharmenian", 0x0537, "Ehookabove", 0x1eba, "Eightroman", 0x2167, "Einvertedbreve", 0x0206, "Eiotifiedcyrillic", 0x0464, "Elcyrillic", 0x041b, "Elevenroman", 0x216a, "Emacron", 0x0112, "Emacronacute", 0x1e16, "Emacrongrave", 0x1e14, "Emcyrillic", 0x041c, "Emonospace", 0xff25, "Encyrillic", 0x041d, "Endescendercyrillic", 0x04a2, "Eng", 0x014a, "Enghecyrillic", 0x04a4, "Enhookcyrillic", 0x04c7, "Eogonek", 0x0118, "Eopen", 0x0190, "Epsilon", 0x0395, "Epsilontonos", 0x0388, "Ercyrillic", 0x0420, "Ereversed", 0x018e, "Ereversedcyrillic", 0x042d, "Escyrillic", 0x0421, "Esdescendercyrillic", 0x04aa, "Esh", 0x01a9, "Esmall", 0xf765, "Eta", 0x0397, "Etarmenian", 0x0538, "Etatonos", 0x0389, "Eth", 0x00d0, "Ethsmall", 0xf7f0, "Etilde", 0x1ebc, "Etildebelow", 0x1e1a, "Euro", 0x20ac, "Ezh", 0x01b7, "Ezhcaron", 0x01ee, "Ezhreversed", 0x01b8, "F", 0x0046, "Fcircle", 0x24bb, "Fdotaccent", 0x1e1e, "Feharmenian", 0x0556, "Feicoptic", 0x03e4, "Fhook", 0x0191, "Fitacyrillic", 0x0472, "Fiveroman", 0x2164, "Fmonospace", 0xff26, "Fourroman", 0x2163, "Fsmall", 0xf766, "G", 0x0047, "GBsquare", 0x3387, "Gacute", 0x01f4, "Gamma", 0x0393, "Gammaafrican", 0x0194, "Gangiacoptic", 0x03ea, "Gbreve", 0x011e, "Gcaron", 0x01e6, "Gcedilla", 0x0122, "Gcircle", 0x24bc, "Gcircumflex", 0x011c, "Gcommaaccent", 0x0122, "Gdot", 0x0120, "Gdotaccent", 0x0120, "Gecyrillic", 0x0413, "Ghadarmenian", 0x0542, "Ghemiddlehookcyrillic", 0x0494, "Ghestrokecyrillic", 0x0492, "Gheupturncyrillic", 0x0490, "Ghook", 0x0193, "Gimarmenian", 0x0533, "Gjecyrillic", 0x0403, "Gmacron", 0x1e20, "Gmonospace", 0xff27, "Grave", 0xf6ce, "Gravesmall", 0xf760, "Gsmall", 0xf767, "Gsmallhook", 0x029b, "Gstroke", 0x01e4, "H", 0x0048, "H18533", 0x25cf, "H18543", 0x25aa, "H18551", 0x25ab, "H22073", 0x25a1, "HPsquare", 0x33cb, "Haabkhasiancyrillic", 0x04a8, "Hadescendercyrillic", 0x04b2, "Hardsigncyrillic", 0x042a, "Hbar", 0x0126, "Hbrevebelow", 0x1e2a, "Hcedilla", 0x1e28, "Hcircle", 0x24bd, "Hcircumflex", 0x0124, "Hdieresis", 0x1e26, "Hdotaccent", 0x1e22, "Hdotbelow", 0x1e24, "Hmonospace", 0xff28, "Hoarmenian", 0x0540, "Horicoptic", 0x03e8, "Hsmall", 0xf768, "Hungarumlaut", 0xf6cf, "Hungarumlautsmall", 0xf6f8, "Hzsquare", 0x3390, "I", 0x0049, "IAcyrillic", 0x042f, "IJ", 0x0132, "IUcyrillic", 0x042e, "Iacute", 0x00cd, "Iacutesmall", 0xf7ed, "Ibreve", 0x012c, "Icaron", 0x01cf, "Icircle", 0x24be, "Icircumflex", 0x00ce, "Icircumflexsmall", 0xf7ee, "Icyrillic", 0x0406, "Idblgrave", 0x0208, "Idieresis", 0x00cf, "Idieresisacute", 0x1e2e, "Idieresiscyrillic", 0x04e4, "Idieresissmall", 0xf7ef, "Idot", 0x0130, "Idotaccent", 0x0130, "Idotbelow", 0x1eca, "Iebrevecyrillic", 0x04d6, "Iecyrillic", 0x0415, "Ifraktur", 0x2111, "Igrave", 0x00cc, "Igravesmall", 0xf7ec, "Ihookabove", 0x1ec8, "Iicyrillic", 0x0418, "Iinvertedbreve", 0x020a, "Iishortcyrillic", 0x0419, "Imacron", 0x012a, "Imacroncyrillic", 0x04e2, "Imonospace", 0xff29, "Iniarmenian", 0x053b, "Iocyrillic", 0x0401, "Iogonek", 0x012e, "Iota", 0x0399, "Iotaafrican", 0x0196, "Iotadieresis", 0x03aa, "Iotatonos", 0x038a, "Ismall", 0xf769, "Istroke", 0x0197, "Itilde", 0x0128, "Itildebelow", 0x1e2c, "Izhitsacyrillic", 0x0474, "Izhitsadblgravecyrillic", 0x0476, "J", 0x004a, "Jaarmenian", 0x0541, "Jcircle", 0x24bf, "Jcircumflex", 0x0134, "Jecyrillic", 0x0408, "Jheharmenian", 0x054b, "Jmonospace", 0xff2a, "Jsmall", 0xf76a, "K", 0x004b, "KBsquare", 0x3385, "KKsquare", 0x33cd, "Kabashkircyrillic", 0x04a0, "Kacute", 0x1e30, "Kacyrillic", 0x041a, "Kadescendercyrillic", 0x049a, "Kahookcyrillic", 0x04c3, "Kappa", 0x039a, "Kastrokecyrillic", 0x049e, "Kaverticalstrokecyrillic", 0x049c, "Kcaron", 0x01e8, "Kcedilla", 0x0136, "Kcircle", 0x24c0, "Kcommaaccent", 0x0136, "Kdotbelow", 0x1e32, "Keharmenian", 0x0554, "Kenarmenian", 0x053f, "Khacyrillic", 0x0425, "Kheicoptic", 0x03e6, "Khook", 0x0198, "Kjecyrillic", 0x040c, "Klinebelow", 0x1e34, "Kmonospace", 0xff2b, "Koppacyrillic", 0x0480, "Koppagreek", 0x03de, "Ksicyrillic", 0x046e, "Ksmall", 0xf76b, "L", 0x004c, "LJ", 0x01c7, "LL", 0xf6bf, "Lacute", 0x0139, "Lambda", 0x039b, "Lcaron", 0x013d, "Lcedilla", 0x013b, "Lcircle", 0x24c1, "Lcircumflexbelow", 0x1e3c, "Lcommaaccent", 0x013b, "Ldot", 0x013f, "Ldotaccent", 0x013f, "Ldotbelow", 0x1e36, "Ldotbelowmacron", 0x1e38, "Liwnarmenian", 0x053c, "Lj", 0x01c8, "Ljecyrillic", 0x0409, "Llinebelow", 0x1e3a, "Lmonospace", 0xff2c, "Lslash", 0x0141, "Lslashsmall", 0xf6f9, "Lsmall", 0xf76c, "M", 0x004d, "MBsquare", 0x3386, "Macron", 0xf6d0, "Macronsmall", 0xf7af, "Macute", 0x1e3e, "Mcircle", 0x24c2, "Mdotaccent", 0x1e40, "Mdotbelow", 0x1e42, "Menarmenian", 0x0544, "Mmonospace", 0xff2d, "Msmall", 0xf76d, "Mturned", 0x019c, "Mu", 0x039c, "N", 0x004e, "NJ", 0x01ca, "Nacute", 0x0143, "Ncaron", 0x0147, "Ncedilla", 0x0145, "Ncircle", 0x24c3, "Ncircumflexbelow", 0x1e4a, "Ncommaaccent", 0x0145, "Ndotaccent", 0x1e44, "Ndotbelow", 0x1e46, "Nhookleft", 0x019d, "Nineroman", 0x2168, "Nj", 0x01cb, "Njecyrillic", 0x040a, "Nlinebelow", 0x1e48, "Nmonospace", 0xff2e, "Nowarmenian", 0x0546, "Nsmall", 0xf76e, "Ntilde", 0x00d1, "Ntildesmall", 0xf7f1, "Nu", 0x039d, "O", 0x004f, "OE", 0x0152, "OEsmall", 0xf6fa, "Oacute", 0x00d3, "Oacutesmall", 0xf7f3, "Obarredcyrillic", 0x04e8, "Obarreddieresiscyrillic", 0x04ea, "Obreve", 0x014e, "Ocaron", 0x01d1, "Ocenteredtilde", 0x019f, "Ocircle", 0x24c4, "Ocircumflex", 0x00d4, "Ocircumflexacute", 0x1ed0, "Ocircumflexdotbelow", 0x1ed8, "Ocircumflexgrave", 0x1ed2, "Ocircumflexhookabove", 0x1ed4, "Ocircumflexsmall", 0xf7f4, "Ocircumflextilde", 0x1ed6, "Ocyrillic", 0x041e, "Odblacute", 0x0150, "Odblgrave", 0x020c, "Odieresis", 0x00d6, "Odieresiscyrillic", 0x04e6, "Odieresissmall", 0xf7f6, "Odotbelow", 0x1ecc, "Ogoneksmall", 0xf6fb, "Ograve", 0x00d2, "Ogravesmall", 0xf7f2, "Oharmenian", 0x0555, "Ohm", 0x2126, "Ohookabove", 0x1ece, "Ohorn", 0x01a0, "Ohornacute", 0x1eda, "Ohorndotbelow", 0x1ee2, "Ohorngrave", 0x1edc, "Ohornhookabove", 0x1ede, "Ohorntilde", 0x1ee0, "Ohungarumlaut", 0x0150, "Oi", 0x01a2, "Oinvertedbreve", 0x020e, "Omacron", 0x014c, "Omacronacute", 0x1e52, "Omacrongrave", 0x1e50, "Omega", 0x2126, "Omegacyrillic", 0x0460, "Omegagreek", 0x03a9, "Omegaroundcyrillic", 0x047a, "Omegatitlocyrillic", 0x047c, "Omegatonos", 0x038f, "Omicron", 0x039f, "Omicrontonos", 0x038c, "Omonospace", 0xff2f, "Oneroman", 0x2160, "Oogonek", 0x01ea, "Oogonekmacron", 0x01ec, "Oopen", 0x0186, "Oslash", 0x00d8, "Oslashacute", 0x01fe, "Oslashsmall", 0xf7f8, "Osmall", 0xf76f, "Ostrokeacute", 0x01fe, "Otcyrillic", 0x047e, "Otilde", 0x00d5, "Otildeacute", 0x1e4c, "Otildedieresis", 0x1e4e, "Otildesmall", 0xf7f5, "P", 0x0050, "Pacute", 0x1e54, "Pcircle", 0x24c5, "Pdotaccent", 0x1e56, "Pecyrillic", 0x041f, "Peharmenian", 0x054a, "Pemiddlehookcyrillic", 0x04a6, "Phi", 0x03a6, "Phook", 0x01a4, "Pi", 0x03a0, "Piwrarmenian", 0x0553, "Pmonospace", 0xff30, "Psi", 0x03a8, "Psicyrillic", 0x0470, "Psmall", 0xf770, "Q", 0x0051, "Qcircle", 0x24c6, "Qmonospace", 0xff31, "Qsmall", 0xf771, "R", 0x0052, "Raarmenian", 0x054c, "Racute", 0x0154, "Rcaron", 0x0158, "Rcedilla", 0x0156, "Rcircle", 0x24c7, "Rcommaaccent", 0x0156, "Rdblgrave", 0x0210, "Rdotaccent", 0x1e58, "Rdotbelow", 0x1e5a, "Rdotbelowmacron", 0x1e5c, "Reharmenian", 0x0550, "Rfraktur", 0x211c, "Rho", 0x03a1, "Ringsmall", 0xf6fc, "Rinvertedbreve", 0x0212, "Rlinebelow", 0x1e5e, "Rmonospace", 0xff32, "Rsmall", 0xf772, "Rsmallinverted", 0x0281, "Rsmallinvertedsuperior", 0x02b6, "S", 0x0053, "SF010000", 0x250c, "SF020000", 0x2514, "SF030000", 0x2510, "SF040000", 0x2518, "SF050000", 0x253c, "SF060000", 0x252c, "SF070000", 0x2534, "SF080000", 0x251c, "SF090000", 0x2524, "SF100000", 0x2500, "SF110000", 0x2502, "SF190000", 0x2561, "SF200000", 0x2562, "SF210000", 0x2556, "SF220000", 0x2555, "SF230000", 0x2563, "SF240000", 0x2551, "SF250000", 0x2557, "SF260000", 0x255d, "SF270000", 0x255c, "SF280000", 0x255b, "SF360000", 0x255e, "SF370000", 0x255f, "SF380000", 0x255a, "SF390000", 0x2554, "SF400000", 0x2569, "SF410000", 0x2566, "SF420000", 0x2560, "SF430000", 0x2550, "SF440000", 0x256c, "SF450000", 0x2567, "SF460000", 0x2568, "SF470000", 0x2564, "SF480000", 0x2565, "SF490000", 0x2559, "SF500000", 0x2558, "SF510000", 0x2552, "SF520000", 0x2553, "SF530000", 0x256b, "SF540000", 0x256a, "Sacute", 0x015a, "Sacutedotaccent", 0x1e64, "Sampigreek", 0x03e0, "Scaron", 0x0160, "Scarondotaccent", 0x1e66, "Scaronsmall", 0xf6fd, "Scedilla", 0x015e, "Schwa", 0x018f, "Schwacyrillic", 0x04d8, "Schwadieresiscyrillic", 0x04da, "Scircle", 0x24c8, "Scircumflex", 0x015c, "Scommaaccent", 0x0218, "Sdotaccent", 0x1e60, "Sdotbelow", 0x1e62, "Sdotbelowdotaccent", 0x1e68, "Seharmenian", 0x054d, "Sevenroman", 0x2166, "Shaarmenian", 0x0547, "Shacyrillic", 0x0428, "Shchacyrillic", 0x0429, "Sheicoptic", 0x03e2, "Shhacyrillic", 0x04ba, "Shimacoptic", 0x03ec, "Sigma", 0x03a3, "Sixroman", 0x2165, "Smonospace", 0xff33, "Softsigncyrillic", 0x042c, "Ssmall", 0xf773, "Stigmagreek", 0x03da, "T", 0x0054, "Tau", 0x03a4, "Tbar", 0x0166, "Tcaron", 0x0164, "Tcedilla", 0x0162, "Tcircle", 0x24c9, "Tcircumflexbelow", 0x1e70, "Tcommaaccent", 0x0162, "Tdotaccent", 0x1e6a, "Tdotbelow", 0x1e6c, "Tecyrillic", 0x0422, "Tedescendercyrillic", 0x04ac, "Tenroman", 0x2169, "Tetsecyrillic", 0x04b4, "Theta", 0x0398, "Thook", 0x01ac, "Thorn", 0x00de, "Thornsmall", 0xf7fe, "Threeroman", 0x2162, "Tildesmall", 0xf6fe, "Tiwnarmenian", 0x054f, "Tlinebelow", 0x1e6e, "Tmonospace", 0xff34, "Toarmenian", 0x0539, "Tonefive", 0x01bc, "Tonesix", 0x0184, "Tonetwo", 0x01a7, "Tretroflexhook", 0x01ae, "Tsecyrillic", 0x0426, "Tshecyrillic", 0x040b, "Tsmall", 0xf774, "Twelveroman", 0x216b, "Tworoman", 0x2161, "U", 0x0055, "Uacute", 0x00da, "Uacutesmall", 0xf7fa, "Ubreve", 0x016c, "Ucaron", 0x01d3, "Ucircle", 0x24ca, "Ucircumflex", 0x00db, "Ucircumflexbelow", 0x1e76, "Ucircumflexsmall", 0xf7fb, "Ucyrillic", 0x0423, "Udblacute", 0x0170, "Udblgrave", 0x0214, "Udieresis", 0x00dc, "Udieresisacute", 0x01d7, "Udieresisbelow", 0x1e72, "Udieresiscaron", 0x01d9, "Udieresiscyrillic", 0x04f0, "Udieresisgrave", 0x01db, "Udieresismacron", 0x01d5, "Udieresissmall", 0xf7fc, "Udotbelow", 0x1ee4, "Ugrave", 0x00d9, "Ugravesmall", 0xf7f9, "Uhookabove", 0x1ee6, "Uhorn", 0x01af, "Uhornacute", 0x1ee8, "Uhorndotbelow", 0x1ef0, "Uhorngrave", 0x1eea, "Uhornhookabove", 0x1eec, "Uhorntilde", 0x1eee, "Uhungarumlaut", 0x0170, "Uhungarumlautcyrillic", 0x04f2, "Uinvertedbreve", 0x0216, "Ukcyrillic", 0x0478, "Umacron", 0x016a, "Umacroncyrillic", 0x04ee, "Umacrondieresis", 0x1e7a, "Umonospace", 0xff35, "Uogonek", 0x0172, "Upsilon", 0x03a5, "Upsilon1", 0x03d2, "Upsilonacutehooksymbolgreek", 0x03d3, "Upsilonafrican", 0x01b1, "Upsilondieresis", 0x03ab, "Upsilondieresishooksymbolgreek", 0x03d4, "Upsilonhooksymbol", 0x03d2, "Upsilontonos", 0x038e, "Uring", 0x016e, "Ushortcyrillic", 0x040e, "Usmall", 0xf775, "Ustraightcyrillic", 0x04ae, "Ustraightstrokecyrillic", 0x04b0, "Utilde", 0x0168, "Utildeacute", 0x1e78, "Utildebelow", 0x1e74, "V", 0x0056, "Vcircle", 0x24cb, "Vdotbelow", 0x1e7e, "Vecyrillic", 0x0412, "Vewarmenian", 0x054e, "Vhook", 0x01b2, "Vmonospace", 0xff36, "Voarmenian", 0x0548, "Vsmall", 0xf776, "Vtilde", 0x1e7c, "W", 0x0057, "Wacute", 0x1e82, "Wcircle", 0x24cc, "Wcircumflex", 0x0174, "Wdieresis", 0x1e84, "Wdotaccent", 0x1e86, "Wdotbelow", 0x1e88, "Wgrave", 0x1e80, "Wmonospace", 0xff37, "Wsmall", 0xf777, "X", 0x0058, "Xcircle", 0x24cd, "Xdieresis", 0x1e8c, "Xdotaccent", 0x1e8a, "Xeharmenian", 0x053d, "Xi", 0x039e, "Xmonospace", 0xff38, "Xsmall", 0xf778, "Y", 0x0059, "Yacute", 0x00dd, "Yacutesmall", 0xf7fd, "Yatcyrillic", 0x0462, "Ycircle", 0x24ce, "Ycircumflex", 0x0176, "Ydieresis", 0x0178, "Ydieresissmall", 0xf7ff, "Ydotaccent", 0x1e8e, "Ydotbelow", 0x1ef4, "Yericyrillic", 0x042b, "Yerudieresiscyrillic", 0x04f8, "Ygrave", 0x1ef2, "Yhook", 0x01b3, "Yhookabove", 0x1ef6, "Yiarmenian", 0x0545, "Yicyrillic", 0x0407, "Yiwnarmenian", 0x0552, "Ymonospace", 0xff39, "Ysmall", 0xf779, "Ytilde", 0x1ef8, "Yusbigcyrillic", 0x046a, "Yusbigiotifiedcyrillic", 0x046c, "Yuslittlecyrillic", 0x0466, "Yuslittleiotifiedcyrillic", 0x0468, "Z", 0x005a, "Zaarmenian", 0x0536, "Zacute", 0x0179, "Zcaron", 0x017d, "Zcaronsmall", 0xf6ff, "Zcircle", 0x24cf, "Zcircumflex", 0x1e90, "Zdot", 0x017b, "Zdotaccent", 0x017b, "Zdotbelow", 0x1e92, "Zecyrillic", 0x0417, "Zedescendercyrillic", 0x0498, "Zedieresiscyrillic", 0x04de, "Zeta", 0x0396, "Zhearmenian", 0x053a, "Zhebrevecyrillic", 0x04c1, "Zhecyrillic", 0x0416, "Zhedescendercyrillic", 0x0496, "Zhedieresiscyrillic", 0x04dc, "Zlinebelow", 0x1e94, "Zmonospace", 0xff3a, "Zsmall", 0xf77a, "Zstroke", 0x01b5, "a", 0x0061, "aabengali", 0x0986, "aacute", 0x00e1, "aadeva", 0x0906, "aagujarati", 0x0a86, "aagurmukhi", 0x0a06, "aamatragurmukhi", 0x0a3e, "aarusquare", 0x3303, "aavowelsignbengali", 0x09be, "aavowelsigndeva", 0x093e, "aavowelsigngujarati", 0x0abe, "abbreviationmarkarmenian", 0x055f, "abbreviationsigndeva", 0x0970, "abengali", 0x0985, "abopomofo", 0x311a, "abreve", 0x0103, "abreveacute", 0x1eaf, "abrevecyrillic", 0x04d1, "abrevedotbelow", 0x1eb7, "abrevegrave", 0x1eb1, "abrevehookabove", 0x1eb3, "abrevetilde", 0x1eb5, "acaron", 0x01ce, "acircle", 0x24d0, "acircumflex", 0x00e2, "acircumflexacute", 0x1ea5, "acircumflexdotbelow", 0x1ead, "acircumflexgrave", 0x1ea7, "acircumflexhookabove", 0x1ea9, "acircumflextilde", 0x1eab, "acute", 0x00b4, "acutebelowcmb", 0x0317, "acutecmb", 0x0301, "acutecomb", 0x0301, "acutedeva", 0x0954, "acutelowmod", 0x02cf, "acutetonecmb", 0x0341, "acyrillic", 0x0430, "adblgrave", 0x0201, "addakgurmukhi", 0x0a71, "adeva", 0x0905, "adieresis", 0x00e4, "adieresiscyrillic", 0x04d3, "adieresismacron", 0x01df, "adotbelow", 0x1ea1, "adotmacron", 0x01e1, "ae", 0x00e6, "aeacute", 0x01fd, "aekorean", 0x3150, "aemacron", 0x01e3, "afii00208", 0x2015, "afii08941", 0x20a4, "afii10017", 0x0410, "afii10018", 0x0411, "afii10019", 0x0412, "afii10020", 0x0413, "afii10021", 0x0414, "afii10022", 0x0415, "afii10023", 0x0401, "afii10024", 0x0416, "afii10025", 0x0417, "afii10026", 0x0418, "afii10027", 0x0419, "afii10028", 0x041a, "afii10029", 0x041b, "afii10030", 0x041c, "afii10031", 0x041d, "afii10032", 0x041e, "afii10033", 0x041f, "afii10034", 0x0420, "afii10035", 0x0421, "afii10036", 0x0422, "afii10037", 0x0423, "afii10038", 0x0424, "afii10039", 0x0425, "afii10040", 0x0426, "afii10041", 0x0427, "afii10042", 0x0428, "afii10043", 0x0429, "afii10044", 0x042a, "afii10045", 0x042b, "afii10046", 0x042c, "afii10047", 0x042d, "afii10048", 0x042e, "afii10049", 0x042f, "afii10050", 0x0490, "afii10051", 0x0402, "afii10052", 0x0403, "afii10053", 0x0404, "afii10054", 0x0405, "afii10055", 0x0406, "afii10056", 0x0407, "afii10057", 0x0408, "afii10058", 0x0409, "afii10059", 0x040a, "afii10060", 0x040b, "afii10061", 0x040c, "afii10062", 0x040e, "afii10063", 0xf6c4, "afii10064", 0xf6c5, "afii10065", 0x0430, "afii10066", 0x0431, "afii10067", 0x0432, "afii10068", 0x0433, "afii10069", 0x0434, "afii10070", 0x0435, "afii10071", 0x0451, "afii10072", 0x0436, "afii10073", 0x0437, "afii10074", 0x0438, "afii10075", 0x0439, "afii10076", 0x043a, "afii10077", 0x043b, "afii10078", 0x043c, "afii10079", 0x043d, "afii10080", 0x043e, "afii10081", 0x043f, "afii10082", 0x0440, "afii10083", 0x0441, "afii10084", 0x0442, "afii10085", 0x0443, "afii10086", 0x0444, "afii10087", 0x0445, "afii10088", 0x0446, "afii10089", 0x0447, "afii10090", 0x0448, "afii10091", 0x0449, "afii10092", 0x044a, "afii10093", 0x044b, "afii10094", 0x044c, "afii10095", 0x044d, "afii10096", 0x044e, "afii10097", 0x044f, "afii10098", 0x0491, "afii10099", 0x0452, "afii10100", 0x0453, "afii10101", 0x0454, "afii10102", 0x0455, "afii10103", 0x0456, "afii10104", 0x0457, "afii10105", 0x0458, "afii10106", 0x0459, "afii10107", 0x045a, "afii10108", 0x045b, "afii10109", 0x045c, "afii10110", 0x045e, "afii10145", 0x040f, "afii10146", 0x0462, "afii10147", 0x0472, "afii10148", 0x0474, "afii10192", 0xf6c6, "afii10193", 0x045f, "afii10194", 0x0463, "afii10195", 0x0473, "afii10196", 0x0475, "afii10831", 0xf6c7, "afii10832", 0xf6c8, "afii10846", 0x04d9, "afii299", 0x200e, "afii300", 0x200f, "afii301", 0x200d, "afii57381", 0x066a, "afii57388", 0x060c, "afii57392", 0x0660, "afii57393", 0x0661, "afii57394", 0x0662, "afii57395", 0x0663, "afii57396", 0x0664, "afii57397", 0x0665, "afii57398", 0x0666, "afii57399", 0x0667, "afii57400", 0x0668, "afii57401", 0x0669, "afii57403", 0x061b, "afii57407", 0x061f, "afii57409", 0x0621, "afii57410", 0x0622, "afii57411", 0x0623, "afii57412", 0x0624, "afii57413", 0x0625, "afii57414", 0x0626, "afii57415", 0x0627, "afii57416", 0x0628, "afii57417", 0x0629, "afii57418", 0x062a, "afii57419", 0x062b, "afii57420", 0x062c, "afii57421", 0x062d, "afii57422", 0x062e, "afii57423", 0x062f, "afii57424", 0x0630, "afii57425", 0x0631, "afii57426", 0x0632, "afii57427", 0x0633, "afii57428", 0x0634, "afii57429", 0x0635, "afii57430", 0x0636, "afii57431", 0x0637, "afii57432", 0x0638, "afii57433", 0x0639, "afii57434", 0x063a, "afii57440", 0x0640, "afii57441", 0x0641, "afii57442", 0x0642, "afii57443", 0x0643, "afii57444", 0x0644, "afii57445", 0x0645, "afii57446", 0x0646, "afii57448", 0x0648, "afii57449", 0x0649, "afii57450", 0x064a, "afii57451", 0x064b, "afii57452", 0x064c, "afii57453", 0x064d, "afii57454", 0x064e, "afii57455", 0x064f, "afii57456", 0x0650, "afii57457", 0x0651, "afii57458", 0x0652, "afii57470", 0x0647, "afii57505", 0x06a4, "afii57506", 0x067e, "afii57507", 0x0686, "afii57508", 0x0698, "afii57509", 0x06af, "afii57511", 0x0679, "afii57512", 0x0688, "afii57513", 0x0691, "afii57514", 0x06ba, "afii57519", 0x06d2, "afii57534", 0x06d5, "afii57636", 0x20aa, "afii57645", 0x05be, "afii57658", 0x05c3, "afii57664", 0x05d0, "afii57665", 0x05d1, "afii57666", 0x05d2, "afii57667", 0x05d3, "afii57668", 0x05d4, "afii57669", 0x05d5, "afii57670", 0x05d6, "afii57671", 0x05d7, "afii57672", 0x05d8, "afii57673", 0x05d9, "afii57674", 0x05da, "afii57675", 0x05db, "afii57676", 0x05dc, "afii57677", 0x05dd, "afii57678", 0x05de, "afii57679", 0x05df, "afii57680", 0x05e0, "afii57681", 0x05e1, "afii57682", 0x05e2, "afii57683", 0x05e3, "afii57684", 0x05e4, "afii57685", 0x05e5, "afii57686", 0x05e6, "afii57687", 0x05e7, "afii57688", 0x05e8, "afii57689", 0x05e9, "afii57690", 0x05ea, "afii57694", 0xfb2a, "afii57695", 0xfb2b, "afii57700", 0xfb4b, "afii57705", 0xfb1f, "afii57716", 0x05f0, "afii57717", 0x05f1, "afii57718", 0x05f2, "afii57723", 0xfb35, "afii57793", 0x05b4, "afii57794", 0x05b5, "afii57795", 0x05b6, "afii57796", 0x05bb, "afii57797", 0x05b8, "afii57798", 0x05b7, "afii57799", 0x05b0, "afii57800", 0x05b2, "afii57801", 0x05b1, "afii57802", 0x05b3, "afii57803", 0x05c2, "afii57804", 0x05c1, "afii57806", 0x05b9, "afii57807", 0x05bc, "afii57839", 0x05bd, "afii57841", 0x05bf, "afii57842", 0x05c0, "afii57929", 0x02bc, "afii61248", 0x2105, "afii61289", 0x2113, "afii61352", 0x2116, "afii61573", 0x202c, "afii61574", 0x202d, "afii61575", 0x202e, "afii61664", 0x200c, "afii63167", 0x066d, "afii64937", 0x02bd, "agrave", 0x00e0, "agujarati", 0x0a85, "agurmukhi", 0x0a05, "ahiragana", 0x3042, "ahookabove", 0x1ea3, "aibengali", 0x0990, "aibopomofo", 0x311e, "aideva", 0x0910, "aiecyrillic", 0x04d5, "aigujarati", 0x0a90, "aigurmukhi", 0x0a10, "aimatragurmukhi", 0x0a48, "ainarabic", 0x0639, "ainfinalarabic", 0xfeca, "aininitialarabic", 0xfecb, "ainmedialarabic", 0xfecc, "ainvertedbreve", 0x0203, "aivowelsignbengali", 0x09c8, "aivowelsigndeva", 0x0948, "aivowelsigngujarati", 0x0ac8, "akatakana", 0x30a2, "akatakanahalfwidth", 0xff71, "akorean", 0x314f, "alef", 0x05d0, "alefarabic", 0x0627, "alefdageshhebrew", 0xfb30, "aleffinalarabic", 0xfe8e, "alefhamzaabovearabic", 0x0623, "alefhamzaabovefinalarabic", 0xfe84, "alefhamzabelowarabic", 0x0625, "alefhamzabelowfinalarabic", 0xfe88, "alefhebrew", 0x05d0, "aleflamedhebrew", 0xfb4f, "alefmaddaabovearabic", 0x0622, "alefmaddaabovefinalarabic", 0xfe82, "alefmaksuraarabic", 0x0649, "alefmaksurafinalarabic", 0xfef0, "alefmaksurainitialarabic", 0xfef3, "alefmaksuramedialarabic", 0xfef4, "alefpatahhebrew", 0xfb2e, "alefqamatshebrew", 0xfb2f, "aleph", 0x2135, "allequal", 0x224c, "alpha", 0x03b1, "alphatonos", 0x03ac, "amacron", 0x0101, "amonospace", 0xff41, "ampersand", 0x0026, "ampersandmonospace", 0xff06, "ampersandsmall", 0xf726, "amsquare", 0x33c2, "anbopomofo", 0x3122, "angbopomofo", 0x3124, "angbracketleft", 0x3008, "angbracketright", 0x3009, "angkhankhuthai", 0x0e5a, "angle", 0x2220, "anglebracketleft", 0x3008, "anglebracketleftvertical", 0xfe3f, "anglebracketright", 0x3009, "anglebracketrightvertical", 0xfe40, "angleleft", 0x2329, "angleright", 0x232a, "angstrom", 0x212b, "anoteleia", 0x0387, "anudattadeva", 0x0952, "anusvarabengali", 0x0982, "anusvaradeva", 0x0902, "anusvaragujarati", 0x0a82, "aogonek", 0x0105, "apaatosquare", 0x3300, "aparen", 0x249c, "apostrophearmenian", 0x055a, "apostrophemod", 0x02bc, "apple", 0xf8ff, "approaches", 0x2250, "approxequal", 0x2248, "approxequalorimage", 0x2252, "approximatelyequal", 0x2245, "araeaekorean", 0x318e, "araeakorean", 0x318d, "arc", 0x2312, "arighthalfring", 0x1e9a, "aring", 0x00e5, "aringacute", 0x01fb, "aringbelow", 0x1e01, "arrowboth", 0x2194, "arrowdashdown", 0x21e3, "arrowdashleft", 0x21e0, "arrowdashright", 0x21e2, "arrowdashup", 0x21e1, "arrowdblboth", 0x21d4, "arrowdbldown", 0x21d3, "arrowdblleft", 0x21d0, "arrowdblright", 0x21d2, "arrowdblup", 0x21d1, "arrowdown", 0x2193, "arrowdownleft", 0x2199, "arrowdownright", 0x2198, "arrowdownwhite", 0x21e9, "arrowheaddownmod", 0x02c5, "arrowheadleftmod", 0x02c2, "arrowheadrightmod", 0x02c3, "arrowheadupmod", 0x02c4, "arrowhorizex", 0xf8e7, "arrowleft", 0x2190, "arrowleftdbl", 0x21d0, "arrowleftdblstroke", 0x21cd, "arrowleftoverright", 0x21c6, "arrowleftwhite", 0x21e6, "arrowright", 0x2192, "arrowrightdblstroke", 0x21cf, "arrowrightheavy", 0x279e, "arrowrightoverleft", 0x21c4, "arrowrightwhite", 0x21e8, "arrowtableft", 0x21e4, "arrowtabright", 0x21e5, "arrowup", 0x2191, "arrowupdn", 0x2195, "arrowupdnbse", 0x21a8, "arrowupdownbase", 0x21a8, "arrowupleft", 0x2196, "arrowupleftofdown", 0x21c5, "arrowupright", 0x2197, "arrowupwhite", 0x21e7, "arrowvertex", 0xf8e6, "asciicircum", 0x005e, "asciicircummonospace", 0xff3e, "asciitilde", 0x007e, "asciitildemonospace", 0xff5e, "ascript", 0x0251, "ascriptturned", 0x0252, "asmallhiragana", 0x3041, "asmallkatakana", 0x30a1, "asmallkatakanahalfwidth", 0xff67, "asterisk", 0x002a, "asteriskaltonearabic", 0x066d, "asteriskarabic", 0x066d, "asteriskmath", 0x2217, "asteriskmonospace", 0xff0a, "asterisksmall", 0xfe61, "asterism", 0x2042, "asuperior", 0xf6e9, "asymptoticallyequal", 0x2243, "at", 0x0040, "atilde", 0x00e3, "atmonospace", 0xff20, "atsmall", 0xfe6b, "aturned", 0x0250, "aubengali", 0x0994, "aubopomofo", 0x3120, "audeva", 0x0914, "augujarati", 0x0a94, "augurmukhi", 0x0a14, "aulengthmarkbengali", 0x09d7, "aumatragurmukhi", 0x0a4c, "auvowelsignbengali", 0x09cc, "auvowelsigndeva", 0x094c, "auvowelsigngujarati", 0x0acc, "avagrahadeva", 0x093d, "aybarmenian", 0x0561, "ayin", 0x05e2, "ayinaltonehebrew", 0xfb20, "ayinhebrew", 0x05e2, "b", 0x0062, "babengali", 0x09ac, "backslash", 0x005c, "backslashmonospace", 0xff3c, "badeva", 0x092c, "bagujarati", 0x0aac, "bagurmukhi", 0x0a2c, "bahiragana", 0x3070, "bahtthai", 0x0e3f, "bakatakana", 0x30d0, "bar", 0x007c, "barmonospace", 0xff5c, "bbopomofo", 0x3105, "bcircle", 0x24d1, "bdotaccent", 0x1e03, "bdotbelow", 0x1e05, "beamedsixteenthnotes", 0x266c, "because", 0x2235, "becyrillic", 0x0431, "beharabic", 0x0628, "behfinalarabic", 0xfe90, "behinitialarabic", 0xfe91, "behiragana", 0x3079, "behmedialarabic", 0xfe92, "behmeeminitialarabic", 0xfc9f, "behmeemisolatedarabic", 0xfc08, "behnoonfinalarabic", 0xfc6d, "bekatakana", 0x30d9, "benarmenian", 0x0562, "bet", 0x05d1, "beta", 0x03b2, "betasymbolgreek", 0x03d0, "betdagesh", 0xfb31, "betdageshhebrew", 0xfb31, "bethebrew", 0x05d1, "betrafehebrew", 0xfb4c, "bhabengali", 0x09ad, "bhadeva", 0x092d, "bhagujarati", 0x0aad, "bhagurmukhi", 0x0a2d, "bhook", 0x0253, "bihiragana", 0x3073, "bikatakana", 0x30d3, "bilabialclick", 0x0298, "bindigurmukhi", 0x0a02, "birusquare", 0x3331, "blackcircle", 0x25cf, "blackdiamond", 0x25c6, "blackdownpointingtriangle", 0x25bc, "blackleftpointingpointer", 0x25c4, "blackleftpointingtriangle", 0x25c0, "blacklenticularbracketleft", 0x3010, "blacklenticularbracketleftvertical", 0xfe3b, "blacklenticularbracketright", 0x3011, "blacklenticularbracketrightvertical", 0xfe3c, "blacklowerlefttriangle", 0x25e3, "blacklowerrighttriangle", 0x25e2, "blackrectangle", 0x25ac, "blackrightpointingpointer", 0x25ba, "blackrightpointingtriangle", 0x25b6, "blacksmallsquare", 0x25aa, "blacksmilingface", 0x263b, "blacksquare", 0x25a0, "blackstar", 0x2605, "blackupperlefttriangle", 0x25e4, "blackupperrighttriangle", 0x25e5, "blackuppointingsmalltriangle", 0x25b4, "blackuppointingtriangle", 0x25b2, "blank", 0x2423, "blinebelow", 0x1e07, "block", 0x2588, "bmonospace", 0xff42, "bobaimaithai", 0x0e1a, "bohiragana", 0x307c, "bokatakana", 0x30dc, "bparen", 0x249d, "bqsquare", 0x33c3, "braceex", 0xf8f4, "braceleft", 0x007b, "braceleftbt", 0xf8f3, "braceleftmid", 0xf8f2, "braceleftmonospace", 0xff5b, "braceleftsmall", 0xfe5b, "bracelefttp", 0xf8f1, "braceleftvertical", 0xfe37, "braceright", 0x007d, "bracerightbt", 0xf8fe, "bracerightmid", 0xf8fd, "bracerightmonospace", 0xff5d, "bracerightsmall", 0xfe5c, "bracerighttp", 0xf8fc, "bracerightvertical", 0xfe38, "bracketleft", 0x005b, "bracketleftbt", 0xf8f0, "bracketleftex", 0xf8ef, "bracketleftmonospace", 0xff3b, "bracketlefttp", 0xf8ee, "bracketright", 0x005d, "bracketrightbt", 0xf8fb, "bracketrightex", 0xf8fa, "bracketrightmonospace", 0xff3d, "bracketrighttp", 0xf8f9, "breve", 0x02d8, "brevebelowcmb", 0x032e, "brevecmb", 0x0306, "breveinvertedbelowcmb", 0x032f, "breveinvertedcmb", 0x0311, "breveinverteddoublecmb", 0x0361, "bridgebelowcmb", 0x032a, "bridgeinvertedbelowcmb", 0x033a, "brokenbar", 0x00a6, "bstroke", 0x0180, "bsuperior", 0xf6ea, "btopbar", 0x0183, "buhiragana", 0x3076, "bukatakana", 0x30d6, "bullet", 0x2022, "bulletinverse", 0x25d8, "bulletoperator", 0x2219, "bullseye", 0x25ce, "c", 0x0063, "caarmenian", 0x056e, "cabengali", 0x099a, "cacute", 0x0107, "cadeva", 0x091a, "cagujarati", 0x0a9a, "cagurmukhi", 0x0a1a, "calsquare", 0x3388, "candrabindubengali", 0x0981, "candrabinducmb", 0x0310, "candrabindudeva", 0x0901, "candrabindugujarati", 0x0a81, "capslock", 0x21ea, "careof", 0x2105, "caron", 0x02c7, "caronbelowcmb", 0x032c, "caroncmb", 0x030c, "carriagereturn", 0x21b5, "cbopomofo", 0x3118, "ccaron", 0x010d, "ccedilla", 0x00e7, "ccedillaacute", 0x1e09, "ccircle", 0x24d2, "ccircumflex", 0x0109, "ccurl", 0x0255, "cdot", 0x010b, "cdotaccent", 0x010b, "cdsquare", 0x33c5, "cedilla", 0x00b8, "cedillacmb", 0x0327, "cent", 0x00a2, "centigrade", 0x2103, "centinferior", 0xf6df, "centmonospace", 0xffe0, "centoldstyle", 0xf7a2, "centsuperior", 0xf6e0, "chaarmenian", 0x0579, "chabengali", 0x099b, "chadeva", 0x091b, "chagujarati", 0x0a9b, "chagurmukhi", 0x0a1b, "chbopomofo", 0x3114, "cheabkhasiancyrillic", 0x04bd, "checkmark", 0x2713, "checyrillic", 0x0447, "chedescenderabkhasiancyrillic", 0x04bf, "chedescendercyrillic", 0x04b7, "chedieresiscyrillic", 0x04f5, "cheharmenian", 0x0573, "chekhakassiancyrillic", 0x04cc, "cheverticalstrokecyrillic", 0x04b9, "chi", 0x03c7, "chieuchacirclekorean", 0x3277, "chieuchaparenkorean", 0x3217, "chieuchcirclekorean", 0x3269, "chieuchkorean", 0x314a, "chieuchparenkorean", 0x3209, "chochangthai", 0x0e0a, "chochanthai", 0x0e08, "chochingthai", 0x0e09, "chochoethai", 0x0e0c, "chook", 0x0188, "cieucacirclekorean", 0x3276, "cieucaparenkorean", 0x3216, "cieuccirclekorean", 0x3268, "cieuckorean", 0x3148, "cieucparenkorean", 0x3208, "cieucuparenkorean", 0x321c, "circle", 0x25cb, "circlecopyrt", 0x00a9, "circlemultiply", 0x2297, "circleot", 0x2299, "circleplus", 0x2295, "circlepostalmark", 0x3036, "circlewithlefthalfblack", 0x25d0, "circlewithrighthalfblack", 0x25d1, "circumflex", 0x02c6, "circumflexbelowcmb", 0x032d, "circumflexcmb", 0x0302, "clear", 0x2327, "clickalveolar", 0x01c2, "clickdental", 0x01c0, "clicklateral", 0x01c1, "clickretroflex", 0x01c3, "club", 0x2663, "clubsuitblack", 0x2663, "clubsuitwhite", 0x2667, "cmcubedsquare", 0x33a4, "cmonospace", 0xff43, "cmsquaredsquare", 0x33a0, "coarmenian", 0x0581, "colon", 0x003a, "colonmonetary", 0x20a1, "colonmonospace", 0xff1a, "colonsign", 0x20a1, "colonsmall", 0xfe55, "colontriangularhalfmod", 0x02d1, "colontriangularmod", 0x02d0, "comma", 0x002c, "commaabovecmb", 0x0313, "commaaboverightcmb", 0x0315, "commaaccent", 0xf6c3, "commaarabic", 0x060c, "commaarmenian", 0x055d, "commainferior", 0xf6e1, "commamonospace", 0xff0c, "commareversedabovecmb", 0x0314, "commareversedmod", 0x02bd, "commasmall", 0xfe50, "commasuperior", 0xf6e2, "commaturnedabovecmb", 0x0312, "commaturnedmod", 0x02bb, "compass", 0x263c, "congruent", 0x2245, "contourintegral", 0x222e, "control", 0x2303, "controlACK", 0x0006, "controlBEL", 0x0007, "controlBS", 0x0008, "controlCAN", 0x0018, "controlCR", 0x000d, "controlDC1", 0x0011, "controlDC2", 0x0012, "controlDC3", 0x0013, "controlDC4", 0x0014, "controlDEL", 0x007f, "controlDLE", 0x0010, "controlEM", 0x0019, "controlENQ", 0x0005, "controlEOT", 0x0004, "controlESC", 0x001b, "controlETB", 0x0017, "controlETX", 0x0003, "controlFF", 0x000c, "controlFS", 0x001c, "controlGS", 0x001d, "controlHT", 0x0009, "controlLF", 0x000a, "controlNAK", 0x0015, "controlNULL", 0x0000, "controlRS", 0x001e, "controlSI", 0x000f, "controlSO", 0x000e, "controlSOT", 0x0002, "controlSTX", 0x0001, "controlSUB", 0x001a, "controlSYN", 0x0016, "controlUS", 0x001f, "controlVT", 0x000b, "copyright", 0x00a9, "copyrightsans", 0xf8e9, "copyrightserif", 0xf6d9, "cornerbracketleft", 0x300c, "cornerbracketlefthalfwidth", 0xff62, "cornerbracketleftvertical", 0xfe41, "cornerbracketright", 0x300d, "cornerbracketrighthalfwidth", 0xff63, "cornerbracketrightvertical", 0xfe42, "corporationsquare", 0x337f, "cosquare", 0x33c7, "coverkgsquare", 0x33c6, "cparen", 0x249e, "cruzeiro", 0x20a2, "cstretched", 0x0297, "curlyand", 0x22cf, "curlyor", 0x22ce, "currency", 0x00a4, "cyrBreve", 0xf6d1, "cyrFlex", 0xf6d2, "cyrbreve", 0xf6d4, "cyrflex", 0xf6d5, "d", 0x0064, "daarmenian", 0x0564, "dabengali", 0x09a6, "dadarabic", 0x0636, "dadeva", 0x0926, "dadfinalarabic", 0xfebe, "dadinitialarabic", 0xfebf, "dadmedialarabic", 0xfec0, "dagesh", 0x05bc, "dageshhebrew", 0x05bc, "dagger", 0x2020, "daggerdbl", 0x2021, "dagujarati", 0x0aa6, "dagurmukhi", 0x0a26, "dahiragana", 0x3060, "dakatakana", 0x30c0, "dalarabic", 0x062f, "dalet", 0x05d3, "daletdagesh", 0xfb33, "daletdageshhebrew", 0xfb33, "dalethebrew", 0x05d3, "dalfinalarabic", 0xfeaa, "dammaarabic", 0x064f, "dammalowarabic", 0x064f, "dammatanaltonearabic", 0x064c, "dammatanarabic", 0x064c, "danda", 0x0964, "dargahebrew", 0x05a7, "dargalefthebrew", 0x05a7, "dasiapneumatacyrilliccmb", 0x0485, "dblGrave", 0xf6d3, "dblanglebracketleft", 0x300a, "dblanglebracketleftvertical", 0xfe3d, "dblanglebracketright", 0x300b, "dblanglebracketrightvertical", 0xfe3e, "dblarchinvertedbelowcmb", 0x032b, "dblarrowleft", 0x21d4, "dblarrowright", 0x21d2, "dbldanda", 0x0965, "dblgrave", 0xf6d6, "dblgravecmb", 0x030f, "dblintegral", 0x222c, "dbllowline", 0x2017, "dbllowlinecmb", 0x0333, "dbloverlinecmb", 0x033f, "dblprimemod", 0x02ba, "dblverticalbar", 0x2016, "dblverticallineabovecmb", 0x030e, "dbopomofo", 0x3109, "dbsquare", 0x33c8, "dcaron", 0x010f, "dcedilla", 0x1e11, "dcircle", 0x24d3, "dcircumflexbelow", 0x1e13, "dcroat", 0x0111, "ddabengali", 0x09a1, "ddadeva", 0x0921, "ddagujarati", 0x0aa1, "ddagurmukhi", 0x0a21, "ddalarabic", 0x0688, "ddalfinalarabic", 0xfb89, "dddhadeva", 0x095c, "ddhabengali", 0x09a2, "ddhadeva", 0x0922, "ddhagujarati", 0x0aa2, "ddhagurmukhi", 0x0a22, "ddotaccent", 0x1e0b, "ddotbelow", 0x1e0d, "decimalseparatorarabic", 0x066b, "decimalseparatorpersian", 0x066b, "decyrillic", 0x0434, "degree", 0x00b0, "dehihebrew", 0x05ad, "dehiragana", 0x3067, "deicoptic", 0x03ef, "dekatakana", 0x30c7, "deleteleft", 0x232b, "deleteright", 0x2326, "delta", 0x03b4, "deltaturned", 0x018d, "denominatorminusonenumeratorbengali", 0x09f8, "dezh", 0x02a4, "dhabengali", 0x09a7, "dhadeva", 0x0927, "dhagujarati", 0x0aa7, "dhagurmukhi", 0x0a27, "dhook", 0x0257, "dialytikatonos", 0x0385, "dialytikatonoscmb", 0x0344, "diamond", 0x2666, "diamondsuitwhite", 0x2662, "dieresis", 0x00a8, "dieresisacute", 0xf6d7, "dieresisbelowcmb", 0x0324, "dieresiscmb", 0x0308, "dieresisgrave", 0xf6d8, "dieresistonos", 0x0385, "dihiragana", 0x3062, "dikatakana", 0x30c2, "dittomark", 0x3003, "divide", 0x00f7, "divides", 0x2223, "divisionslash", 0x2215, "djecyrillic", 0x0452, "dkshade", 0x2593, "dlinebelow", 0x1e0f, "dlsquare", 0x3397, "dmacron", 0x0111, "dmonospace", 0xff44, "dnblock", 0x2584, "dochadathai", 0x0e0e, "dodekthai", 0x0e14, "dohiragana", 0x3069, "dokatakana", 0x30c9, "dollar", 0x0024, "dollarinferior", 0xf6e3, "dollarmonospace", 0xff04, "dollaroldstyle", 0xf724, "dollarsmall", 0xfe69, "dollarsuperior", 0xf6e4, "dong", 0x20ab, "dorusquare", 0x3326, "dotaccent", 0x02d9, "dotaccentcmb", 0x0307, "dotbelowcmb", 0x0323, "dotbelowcomb", 0x0323, "dotkatakana", 0x30fb, "dotlessi", 0x0131, "dotlessj", 0xf6be, "dotlessjstrokehook", 0x0284, "dotmath", 0x22c5, "dottedcircle", 0x25cc, "doubleyodpatah", 0xfb1f, "doubleyodpatahhebrew", 0xfb1f, "downtackbelowcmb", 0x031e, "downtackmod", 0x02d5, "dparen", 0x249f, "dsuperior", 0xf6eb, "dtail", 0x0256, "dtopbar", 0x018c, "duhiragana", 0x3065, "dukatakana", 0x30c5, "dz", 0x01f3, "dzaltone", 0x02a3, "dzcaron", 0x01c6, "dzcurl", 0x02a5, "dzeabkhasiancyrillic", 0x04e1, "dzecyrillic", 0x0455, "dzhecyrillic", 0x045f, "e", 0x0065, "eacute", 0x00e9, "earth", 0x2641, "ebengali", 0x098f, "ebopomofo", 0x311c, "ebreve", 0x0115, "ecandradeva", 0x090d, "ecandragujarati", 0x0a8d, "ecandravowelsigndeva", 0x0945, "ecandravowelsigngujarati", 0x0ac5, "ecaron", 0x011b, "ecedillabreve", 0x1e1d, "echarmenian", 0x0565, "echyiwnarmenian", 0x0587, "ecircle", 0x24d4, "ecircumflex", 0x00ea, "ecircumflexacute", 0x1ebf, "ecircumflexbelow", 0x1e19, "ecircumflexdotbelow", 0x1ec7, "ecircumflexgrave", 0x1ec1, "ecircumflexhookabove", 0x1ec3, "ecircumflextilde", 0x1ec5, "ecyrillic", 0x0454, "edblgrave", 0x0205, "edeva", 0x090f, "edieresis", 0x00eb, "edot", 0x0117, "edotaccent", 0x0117, "edotbelow", 0x1eb9, "eegurmukhi", 0x0a0f, "eematragurmukhi", 0x0a47, "efcyrillic", 0x0444, "egrave", 0x00e8, "egujarati", 0x0a8f, "eharmenian", 0x0567, "ehbopomofo", 0x311d, "ehiragana", 0x3048, "ehookabove", 0x1ebb, "eibopomofo", 0x311f, "eight", 0x0038, "eightarabic", 0x0668, "eightbengali", 0x09ee, "eightcircle", 0x2467, "eightcircleinversesansserif", 0x2791, "eightdeva", 0x096e, "eighteencircle", 0x2471, "eighteenparen", 0x2485, "eighteenperiod", 0x2499, "eightgujarati", 0x0aee, "eightgurmukhi", 0x0a6e, "eighthackarabic", 0x0668, "eighthangzhou", 0x3028, "eighthnotebeamed", 0x266b, "eightideographicparen", 0x3227, "eightinferior", 0x2088, "eightmonospace", 0xff18, "eightoldstyle", 0xf738, "eightparen", 0x247b, "eightperiod", 0x248f, "eightpersian", 0x06f8, "eightroman", 0x2177, "eightsuperior", 0x2078, "eightthai", 0x0e58, "einvertedbreve", 0x0207, "eiotifiedcyrillic", 0x0465, "ekatakana", 0x30a8, "ekatakanahalfwidth", 0xff74, "ekonkargurmukhi", 0x0a74, "ekorean", 0x3154, "elcyrillic", 0x043b, "element", 0x2208, "elevencircle", 0x246a, "elevenparen", 0x247e, "elevenperiod", 0x2492, "elevenroman", 0x217a, "ellipsis", 0x2026, "ellipsisvertical", 0x22ee, "emacron", 0x0113, "emacronacute", 0x1e17, "emacrongrave", 0x1e15, "emcyrillic", 0x043c, "emdash", 0x2014, "emdashvertical", 0xfe31, "emonospace", 0xff45, "emphasismarkarmenian", 0x055b, "emptyset", 0x2205, "enbopomofo", 0x3123, "encyrillic", 0x043d, "endash", 0x2013, "endashvertical", 0xfe32, "endescendercyrillic", 0x04a3, "eng", 0x014b, "engbopomofo", 0x3125, "enghecyrillic", 0x04a5, "enhookcyrillic", 0x04c8, "enspace", 0x2002, "eogonek", 0x0119, "eokorean", 0x3153, "eopen", 0x025b, "eopenclosed", 0x029a, "eopenreversed", 0x025c, "eopenreversedclosed", 0x025e, "eopenreversedhook", 0x025d, "eparen", 0x24a0, "epsilon", 0x03b5, "epsilontonos", 0x03ad, "equal", 0x003d, "equalmonospace", 0xff1d, "equalsmall", 0xfe66, "equalsuperior", 0x207c, "equivalence", 0x2261, "erbopomofo", 0x3126, "ercyrillic", 0x0440, "ereversed", 0x0258, "ereversedcyrillic", 0x044d, "escyrillic", 0x0441, "esdescendercyrillic", 0x04ab, "esh", 0x0283, "eshcurl", 0x0286, "eshortdeva", 0x090e, "eshortvowelsigndeva", 0x0946, "eshreversedloop", 0x01aa, "eshsquatreversed", 0x0285, "esmallhiragana", 0x3047, "esmallkatakana", 0x30a7, "esmallkatakanahalfwidth", 0xff6a, "estimated", 0x212e, "esuperior", 0xf6ec, "eta", 0x03b7, "etarmenian", 0x0568, "etatonos", 0x03ae, "eth", 0x00f0, "etilde", 0x1ebd, "etildebelow", 0x1e1b, "etnahtafoukhhebrew", 0x0591, "etnahtafoukhlefthebrew", 0x0591, "etnahtahebrew", 0x0591, "etnahtalefthebrew", 0x0591, "eturned", 0x01dd, "eukorean", 0x3161, "euro", 0x20ac, "evowelsignbengali", 0x09c7, "evowelsigndeva", 0x0947, "evowelsigngujarati", 0x0ac7, "exclam", 0x0021, "exclamarmenian", 0x055c, "exclamdbl", 0x203c, "exclamdown", 0x00a1, "exclamdownsmall", 0xf7a1, "exclammonospace", 0xff01, "exclamsmall", 0xf721, "existential", 0x2203, "ezh", 0x0292, "ezhcaron", 0x01ef, "ezhcurl", 0x0293, "ezhreversed", 0x01b9, "ezhtail", 0x01ba, "f", 0x0066, "fadeva", 0x095e, "fagurmukhi", 0x0a5e, "fahrenheit", 0x2109, "fathaarabic", 0x064e, "fathalowarabic", 0x064e, "fathatanarabic", 0x064b, "fbopomofo", 0x3108, "fcircle", 0x24d5, "fdotaccent", 0x1e1f, "feharabic", 0x0641, "feharmenian", 0x0586, "fehfinalarabic", 0xfed2, "fehinitialarabic", 0xfed3, "fehmedialarabic", 0xfed4, "feicoptic", 0x03e5, "female", 0x2640, "ff", 0xfb00, "f_f", 0xfb00, "ffi", 0xfb03, "ffl", 0xfb04, "fi", 0xfb01, "fifteencircle", 0x246e, "fifteenparen", 0x2482, "fifteenperiod", 0x2496, "figuredash", 0x2012, "filledbox", 0x25a0, "filledrect", 0x25ac, "finalkaf", 0x05da, "finalkafdagesh", 0xfb3a, "finalkafdageshhebrew", 0xfb3a, "finalkafhebrew", 0x05da, "finalmem", 0x05dd, "finalmemhebrew", 0x05dd, "finalnun", 0x05df, "finalnunhebrew", 0x05df, "finalpe", 0x05e3, "finalpehebrew", 0x05e3, "finaltsadi", 0x05e5, "finaltsadihebrew", 0x05e5, "firsttonechinese", 0x02c9, "fisheye", 0x25c9, "fitacyrillic", 0x0473, "five", 0x0035, "fivearabic", 0x0665, "fivebengali", 0x09eb, "fivecircle", 0x2464, "fivecircleinversesansserif", 0x278e, "fivedeva", 0x096b, "fiveeighths", 0x215d, "fivegujarati", 0x0aeb, "fivegurmukhi", 0x0a6b, "fivehackarabic", 0x0665, "fivehangzhou", 0x3025, "fiveideographicparen", 0x3224, "fiveinferior", 0x2085, "fivemonospace", 0xff15, "fiveoldstyle", 0xf735, "fiveparen", 0x2478, "fiveperiod", 0x248c, "fivepersian", 0x06f5, "fiveroman", 0x2174, "fivesuperior", 0x2075, "fivethai", 0x0e55, "fl", 0xfb02, "florin", 0x0192, "fmonospace", 0xff46, "fmsquare", 0x3399, "fofanthai", 0x0e1f, "fofathai", 0x0e1d, "fongmanthai", 0x0e4f, "forall", 0x2200, "four", 0x0034, "fourarabic", 0x0664, "fourbengali", 0x09ea, "fourcircle", 0x2463, "fourcircleinversesansserif", 0x278d, "fourdeva", 0x096a, "fourgujarati", 0x0aea, "fourgurmukhi", 0x0a6a, "fourhackarabic", 0x0664, "fourhangzhou", 0x3024, "fourideographicparen", 0x3223, "fourinferior", 0x2084, "fourmonospace", 0xff14, "fournumeratorbengali", 0x09f7, "fouroldstyle", 0xf734, "fourparen", 0x2477, "fourperiod", 0x248b, "fourpersian", 0x06f4, "fourroman", 0x2173, "foursuperior", 0x2074, "fourteencircle", 0x246d, "fourteenparen", 0x2481, "fourteenperiod", 0x2495, "fourthai", 0x0e54, "fourthtonechinese", 0x02cb, "fparen", 0x24a1, "fraction", 0x2044, "franc", 0x20a3, "g", 0x0067, "gabengali", 0x0997, "gacute", 0x01f5, "gadeva", 0x0917, "gafarabic", 0x06af, "gaffinalarabic", 0xfb93, "gafinitialarabic", 0xfb94, "gafmedialarabic", 0xfb95, "gagujarati", 0x0a97, "gagurmukhi", 0x0a17, "gahiragana", 0x304c, "gakatakana", 0x30ac, "gamma", 0x03b3, "gammalatinsmall", 0x0263, "gammasuperior", 0x02e0, "gangiacoptic", 0x03eb, "gbopomofo", 0x310d, "gbreve", 0x011f, "gcaron", 0x01e7, "gcedilla", 0x0123, "gcircle", 0x24d6, "gcircumflex", 0x011d, "gcommaaccent", 0x0123, "gdot", 0x0121, "gdotaccent", 0x0121, "gecyrillic", 0x0433, "gehiragana", 0x3052, "gekatakana", 0x30b2, "geometricallyequal", 0x2251, "gereshaccenthebrew", 0x059c, "gereshhebrew", 0x05f3, "gereshmuqdamhebrew", 0x059d, "germandbls", 0x00df, "gershayimaccenthebrew", 0x059e, "gershayimhebrew", 0x05f4, "getamark", 0x3013, "ghabengali", 0x0998, "ghadarmenian", 0x0572, "ghadeva", 0x0918, "ghagujarati", 0x0a98, "ghagurmukhi", 0x0a18, "ghainarabic", 0x063a, "ghainfinalarabic", 0xfece, "ghaininitialarabic", 0xfecf, "ghainmedialarabic", 0xfed0, "ghemiddlehookcyrillic", 0x0495, "ghestrokecyrillic", 0x0493, "gheupturncyrillic", 0x0491, "ghhadeva", 0x095a, "ghhagurmukhi", 0x0a5a, "ghook", 0x0260, "ghzsquare", 0x3393, "gihiragana", 0x304e, "gikatakana", 0x30ae, "gimarmenian", 0x0563, "gimel", 0x05d2, "gimeldagesh", 0xfb32, "gimeldageshhebrew", 0xfb32, "gimelhebrew", 0x05d2, "gjecyrillic", 0x0453, "glottalinvertedstroke", 0x01be, "glottalstop", 0x0294, "glottalstopinverted", 0x0296, "glottalstopmod", 0x02c0, "glottalstopreversed", 0x0295, "glottalstopreversedmod", 0x02c1, "glottalstopreversedsuperior", 0x02e4, "glottalstopstroke", 0x02a1, "glottalstopstrokereversed", 0x02a2, "gmacron", 0x1e21, "gmonospace", 0xff47, "gohiragana", 0x3054, "gokatakana", 0x30b4, "gparen", 0x24a2, "gpasquare", 0x33ac, "gradient", 0x2207, "grave", 0x0060, "gravebelowcmb", 0x0316, "gravecmb", 0x0300, "gravecomb", 0x0300, "gravedeva", 0x0953, "gravelowmod", 0x02ce, "gravemonospace", 0xff40, "gravetonecmb", 0x0340, "greater", 0x003e, "greaterequal", 0x2265, "greaterequalorless", 0x22db, "greatermonospace", 0xff1e, "greaterorequivalent", 0x2273, "greaterorless", 0x2277, "greateroverequal", 0x2267, "greatersmall", 0xfe65, "gscript", 0x0261, "gstroke", 0x01e5, "guhiragana", 0x3050, "guillemotleft", 0x00ab, "guillemotright", 0x00bb, "guilsinglleft", 0x2039, "guilsinglright", 0x203a, "gukatakana", 0x30b0, "guramusquare", 0x3318, "gysquare", 0x33c9, "h", 0x0068, "haabkhasiancyrillic", 0x04a9, "haaltonearabic", 0x06c1, "habengali", 0x09b9, "hadescendercyrillic", 0x04b3, "hadeva", 0x0939, "hagujarati", 0x0ab9, "hagurmukhi", 0x0a39, "haharabic", 0x062d, "hahfinalarabic", 0xfea2, "hahinitialarabic", 0xfea3, "hahiragana", 0x306f, "hahmedialarabic", 0xfea4, "haitusquare", 0x332a, "hakatakana", 0x30cf, "hakatakanahalfwidth", 0xff8a, "halantgurmukhi", 0x0a4d, "hamzaarabic", 0x0621, "hamzalowarabic", 0x0621, "hangulfiller", 0x3164, "hardsigncyrillic", 0x044a, "harpoonleftbarbup", 0x21bc, "harpoonrightbarbup", 0x21c0, "hasquare", 0x33ca, "hatafpatah", 0x05b2, "hatafpatah16", 0x05b2, "hatafpatah23", 0x05b2, "hatafpatah2f", 0x05b2, "hatafpatahhebrew", 0x05b2, "hatafpatahnarrowhebrew", 0x05b2, "hatafpatahquarterhebrew", 0x05b2, "hatafpatahwidehebrew", 0x05b2, "hatafqamats", 0x05b3, "hatafqamats1b", 0x05b3, "hatafqamats28", 0x05b3, "hatafqamats34", 0x05b3, "hatafqamatshebrew", 0x05b3, "hatafqamatsnarrowhebrew", 0x05b3, "hatafqamatsquarterhebrew", 0x05b3, "hatafqamatswidehebrew", 0x05b3, "hatafsegol", 0x05b1, "hatafsegol17", 0x05b1, "hatafsegol24", 0x05b1, "hatafsegol30", 0x05b1, "hatafsegolhebrew", 0x05b1, "hatafsegolnarrowhebrew", 0x05b1, "hatafsegolquarterhebrew", 0x05b1, "hatafsegolwidehebrew", 0x05b1, "hbar", 0x0127, "hbopomofo", 0x310f, "hbrevebelow", 0x1e2b, "hcedilla", 0x1e29, "hcircle", 0x24d7, "hcircumflex", 0x0125, "hdieresis", 0x1e27, "hdotaccent", 0x1e23, "hdotbelow", 0x1e25, "he", 0x05d4, "heart", 0x2665, "heartsuitblack", 0x2665, "heartsuitwhite", 0x2661, "hedagesh", 0xfb34, "hedageshhebrew", 0xfb34, "hehaltonearabic", 0x06c1, "heharabic", 0x0647, "hehebrew", 0x05d4, "hehfinalaltonearabic", 0xfba7, "hehfinalalttwoarabic", 0xfeea, "hehfinalarabic", 0xfeea, "hehhamzaabovefinalarabic", 0xfba5, "hehhamzaaboveisolatedarabic", 0xfba4, "hehinitialaltonearabic", 0xfba8, "hehinitialarabic", 0xfeeb, "hehiragana", 0x3078, "hehmedialaltonearabic", 0xfba9, "hehmedialarabic", 0xfeec, "heiseierasquare", 0x337b, "hekatakana", 0x30d8, "hekatakanahalfwidth", 0xff8d, "hekutaarusquare", 0x3336, "henghook", 0x0267, "herutusquare", 0x3339, "het", 0x05d7, "hethebrew", 0x05d7, "hhook", 0x0266, "hhooksuperior", 0x02b1, "hieuhacirclekorean", 0x327b, "hieuhaparenkorean", 0x321b, "hieuhcirclekorean", 0x326d, "hieuhkorean", 0x314e, "hieuhparenkorean", 0x320d, "hihiragana", 0x3072, "hikatakana", 0x30d2, "hikatakanahalfwidth", 0xff8b, "hiriq", 0x05b4, "hiriq14", 0x05b4, "hiriq21", 0x05b4, "hiriq2d", 0x05b4, "hiriqhebrew", 0x05b4, "hiriqnarrowhebrew", 0x05b4, "hiriqquarterhebrew", 0x05b4, "hiriqwidehebrew", 0x05b4, "hlinebelow", 0x1e96, "hmonospace", 0xff48, "hoarmenian", 0x0570, "hohipthai", 0x0e2b, "hohiragana", 0x307b, "hokatakana", 0x30db, "hokatakanahalfwidth", 0xff8e, "holam", 0x05b9, "holam19", 0x05b9, "holam26", 0x05b9, "holam32", 0x05b9, "holamhebrew", 0x05b9, "holamnarrowhebrew", 0x05b9, "holamquarterhebrew", 0x05b9, "holamwidehebrew", 0x05b9, "honokhukthai", 0x0e2e, "hookabovecomb", 0x0309, "hookcmb", 0x0309, "hookpalatalizedbelowcmb", 0x0321, "hookretroflexbelowcmb", 0x0322, "hoonsquare", 0x3342, "horicoptic", 0x03e9, "horizontalbar", 0x2015, "horncmb", 0x031b, "hotsprings", 0x2668, "house", 0x2302, "hparen", 0x24a3, "hsuperior", 0x02b0, "hturned", 0x0265, "huhiragana", 0x3075, "huiitosquare", 0x3333, "hukatakana", 0x30d5, "hukatakanahalfwidth", 0xff8c, "hungarumlaut", 0x02dd, "hungarumlautcmb", 0x030b, "hv", 0x0195, "hyphen", 0x002d, "hypheninferior", 0xf6e5, "hyphenmonospace", 0xff0d, "hyphensmall", 0xfe63, "hyphensuperior", 0xf6e6, "hyphentwo", 0x2010, "i", 0x0069, "iacute", 0x00ed, "iacyrillic", 0x044f, "ibengali", 0x0987, "ibopomofo", 0x3127, "ibreve", 0x012d, "icaron", 0x01d0, "icircle", 0x24d8, "icircumflex", 0x00ee, "icyrillic", 0x0456, "idblgrave", 0x0209, "ideographearthcircle", 0x328f, "ideographfirecircle", 0x328b, "ideographicallianceparen", 0x323f, "ideographiccallparen", 0x323a, "ideographiccentrecircle", 0x32a5, "ideographicclose", 0x3006, "ideographiccomma", 0x3001, "ideographiccommaleft", 0xff64, "ideographiccongratulationparen", 0x3237, "ideographiccorrectcircle", 0x32a3, "ideographicearthparen", 0x322f, "ideographicenterpriseparen", 0x323d, "ideographicexcellentcircle", 0x329d, "ideographicfestivalparen", 0x3240, "ideographicfinancialcircle", 0x3296, "ideographicfinancialparen", 0x3236, "ideographicfireparen", 0x322b, "ideographichaveparen", 0x3232, "ideographichighcircle", 0x32a4, "ideographiciterationmark", 0x3005, "ideographiclaborcircle", 0x3298, "ideographiclaborparen", 0x3238, "ideographicleftcircle", 0x32a7, "ideographiclowcircle", 0x32a6, "ideographicmedicinecircle", 0x32a9, "ideographicmetalparen", 0x322e, "ideographicmoonparen", 0x322a, "ideographicnameparen", 0x3234, "ideographicperiod", 0x3002, "ideographicprintcircle", 0x329e, "ideographicreachparen", 0x3243, "ideographicrepresentparen", 0x3239, "ideographicresourceparen", 0x323e, "ideographicrightcircle", 0x32a8, "ideographicsecretcircle", 0x3299, "ideographicselfparen", 0x3242, "ideographicsocietyparen", 0x3233, "ideographicspace", 0x3000, "ideographicspecialparen", 0x3235, "ideographicstockparen", 0x3231, "ideographicstudyparen", 0x323b, "ideographicsunparen", 0x3230, "ideographicsuperviseparen", 0x323c, "ideographicwaterparen", 0x322c, "ideographicwoodparen", 0x322d, "ideographiczero", 0x3007, "ideographmetalcircle", 0x328e, "ideographmooncircle", 0x328a, "ideographnamecircle", 0x3294, "ideographsuncircle", 0x3290, "ideographwatercircle", 0x328c, "ideographwoodcircle", 0x328d, "ideva", 0x0907, "idieresis", 0x00ef, "idieresisacute", 0x1e2f, "idieresiscyrillic", 0x04e5, "idotbelow", 0x1ecb, "iebrevecyrillic", 0x04d7, "iecyrillic", 0x0435, "ieungacirclekorean", 0x3275, "ieungaparenkorean", 0x3215, "ieungcirclekorean", 0x3267, "ieungkorean", 0x3147, "ieungparenkorean", 0x3207, "igrave", 0x00ec, "igujarati", 0x0a87, "igurmukhi", 0x0a07, "ihiragana", 0x3044, "ihookabove", 0x1ec9, "iibengali", 0x0988, "iicyrillic", 0x0438, "iideva", 0x0908, "iigujarati", 0x0a88, "iigurmukhi", 0x0a08, "iimatragurmukhi", 0x0a40, "iinvertedbreve", 0x020b, "iishortcyrillic", 0x0439, "iivowelsignbengali", 0x09c0, "iivowelsigndeva", 0x0940, "iivowelsigngujarati", 0x0ac0, "ij", 0x0133, "ikatakana", 0x30a4, "ikatakanahalfwidth", 0xff72, "ikorean", 0x3163, "ilde", 0x02dc, "iluyhebrew", 0x05ac, "imacron", 0x012b, "imacroncyrillic", 0x04e3, "imageorapproximatelyequal", 0x2253, "imatragurmukhi", 0x0a3f, "imonospace", 0xff49, "increment", 0x2206, "infinity", 0x221e, "iniarmenian", 0x056b, "integral", 0x222b, "integralbottom", 0x2321, "integralbt", 0x2321, "integralex", 0xf8f5, "integraltop", 0x2320, "integraltp", 0x2320, "intersection", 0x2229, "intisquare", 0x3305, "invbullet", 0x25d8, "invcircle", 0x25d9, "invsmileface", 0x263b, "iocyrillic", 0x0451, "iogonek", 0x012f, "iota", 0x03b9, "iotadieresis", 0x03ca, "iotadieresistonos", 0x0390, "iotalatin", 0x0269, "iotatonos", 0x03af, "iparen", 0x24a4, "irigurmukhi", 0x0a72, "ismallhiragana", 0x3043, "ismallkatakana", 0x30a3, "ismallkatakanahalfwidth", 0xff68, "issharbengali", 0x09fa, "istroke", 0x0268, "isuperior", 0xf6ed, "iterationhiragana", 0x309d, "iterationkatakana", 0x30fd, "itilde", 0x0129, "itildebelow", 0x1e2d, "iubopomofo", 0x3129, "iucyrillic", 0x044e, "ivowelsignbengali", 0x09bf, "ivowelsigndeva", 0x093f, "ivowelsigngujarati", 0x0abf, "izhitsacyrillic", 0x0475, "izhitsadblgravecyrillic", 0x0477, "j", 0x006a, "jaarmenian", 0x0571, "jabengali", 0x099c, "jadeva", 0x091c, "jagujarati", 0x0a9c, "jagurmukhi", 0x0a1c, "jbopomofo", 0x3110, "jcaron", 0x01f0, "jcircle", 0x24d9, "jcircumflex", 0x0135, "jcrossedtail", 0x029d, "jdotlessstroke", 0x025f, "jecyrillic", 0x0458, "jeemarabic", 0x062c, "jeemfinalarabic", 0xfe9e, "jeeminitialarabic", 0xfe9f, "jeemmedialarabic", 0xfea0, "jeharabic", 0x0698, "jehfinalarabic", 0xfb8b, "jhabengali", 0x099d, "jhadeva", 0x091d, "jhagujarati", 0x0a9d, "jhagurmukhi", 0x0a1d, "jheharmenian", 0x057b, "jis", 0x3004, "jmonospace", 0xff4a, "jparen", 0x24a5, "jsuperior", 0x02b2, "k", 0x006b, "kabashkircyrillic", 0x04a1, "kabengali", 0x0995, "kacute", 0x1e31, "kacyrillic", 0x043a, "kadescendercyrillic", 0x049b, "kadeva", 0x0915, "kaf", 0x05db, "kafarabic", 0x0643, "kafdagesh", 0xfb3b, "kafdageshhebrew", 0xfb3b, "kaffinalarabic", 0xfeda, "kafhebrew", 0x05db, "kafinitialarabic", 0xfedb, "kafmedialarabic", 0xfedc, "kafrafehebrew", 0xfb4d, "kagujarati", 0x0a95, "kagurmukhi", 0x0a15, "kahiragana", 0x304b, "kahookcyrillic", 0x04c4, "kakatakana", 0x30ab, "kakatakanahalfwidth", 0xff76, "kappa", 0x03ba, "kappasymbolgreek", 0x03f0, "kapyeounmieumkorean", 0x3171, "kapyeounphieuphkorean", 0x3184, "kapyeounpieupkorean", 0x3178, "kapyeounssangpieupkorean", 0x3179, "karoriisquare", 0x330d, "kashidaautoarabic", 0x0640, "kashidaautonosidebearingarabic", 0x0640, "kasmallkatakana", 0x30f5, "kasquare", 0x3384, "kasraarabic", 0x0650, "kasratanarabic", 0x064d, "kastrokecyrillic", 0x049f, "katahiraprolongmarkhalfwidth", 0xff70, "kaverticalstrokecyrillic", 0x049d, "kbopomofo", 0x310e, "kcalsquare", 0x3389, "kcaron", 0x01e9, "kcedilla", 0x0137, "kcircle", 0x24da, "kcommaaccent", 0x0137, "kdotbelow", 0x1e33, "keharmenian", 0x0584, "kehiragana", 0x3051, "kekatakana", 0x30b1, "kekatakanahalfwidth", 0xff79, "kenarmenian", 0x056f, "kesmallkatakana", 0x30f6, "kgreenlandic", 0x0138, "khabengali", 0x0996, "khacyrillic", 0x0445, "khadeva", 0x0916, "khagujarati", 0x0a96, "khagurmukhi", 0x0a16, "khaharabic", 0x062e, "khahfinalarabic", 0xfea6, "khahinitialarabic", 0xfea7, "khahmedialarabic", 0xfea8, "kheicoptic", 0x03e7, "khhadeva", 0x0959, "khhagurmukhi", 0x0a59, "khieukhacirclekorean", 0x3278, "khieukhaparenkorean", 0x3218, "khieukhcirclekorean", 0x326a, "khieukhkorean", 0x314b, "khieukhparenkorean", 0x320a, "khokhaithai", 0x0e02, "khokhonthai", 0x0e05, "khokhuatthai", 0x0e03, "khokhwaithai", 0x0e04, "khomutthai", 0x0e5b, "khook", 0x0199, "khorakhangthai", 0x0e06, "khzsquare", 0x3391, "kihiragana", 0x304d, "kikatakana", 0x30ad, "kikatakanahalfwidth", 0xff77, "kiroguramusquare", 0x3315, "kiromeetorusquare", 0x3316, "kirosquare", 0x3314, "kiyeokacirclekorean", 0x326e, "kiyeokaparenkorean", 0x320e, "kiyeokcirclekorean", 0x3260, "kiyeokkorean", 0x3131, "kiyeokparenkorean", 0x3200, "kiyeoksioskorean", 0x3133, "kjecyrillic", 0x045c, "klinebelow", 0x1e35, "klsquare", 0x3398, "kmcubedsquare", 0x33a6, "kmonospace", 0xff4b, "kmsquaredsquare", 0x33a2, "kohiragana", 0x3053, "kohmsquare", 0x33c0, "kokaithai", 0x0e01, "kokatakana", 0x30b3, "kokatakanahalfwidth", 0xff7a, "kooposquare", 0x331e, "koppacyrillic", 0x0481, "koreanstandardsymbol", 0x327f, "koroniscmb", 0x0343, "kparen", 0x24a6, "kpasquare", 0x33aa, "ksicyrillic", 0x046f, "ktsquare", 0x33cf, "kturned", 0x029e, "kuhiragana", 0x304f, "kukatakana", 0x30af, "kukatakanahalfwidth", 0xff78, "kvsquare", 0x33b8, "kwsquare", 0x33be, "l", 0x006c, "labengali", 0x09b2, "lacute", 0x013a, "ladeva", 0x0932, "lagujarati", 0x0ab2, "lagurmukhi", 0x0a32, "lakkhangyaothai", 0x0e45, "lamaleffinalarabic", 0xfefc, "lamalefhamzaabovefinalarabic", 0xfef8, "lamalefhamzaaboveisolatedarabic", 0xfef7, "lamalefhamzabelowfinalarabic", 0xfefa, "lamalefhamzabelowisolatedarabic", 0xfef9, "lamalefisolatedarabic", 0xfefb, "lamalefmaddaabovefinalarabic", 0xfef6, "lamalefmaddaaboveisolatedarabic", 0xfef5, "lamarabic", 0x0644, "lambda", 0x03bb, "lambdastroke", 0x019b, "lamed", 0x05dc, "lameddagesh", 0xfb3c, "lameddageshhebrew", 0xfb3c, "lamedhebrew", 0x05dc, "lamfinalarabic", 0xfede, "lamhahinitialarabic", 0xfcca, "laminitialarabic", 0xfedf, "lamjeeminitialarabic", 0xfcc9, "lamkhahinitialarabic", 0xfccb, "lamlamhehisolatedarabic", 0xfdf2, "lammedialarabic", 0xfee0, "lammeemhahinitialarabic", 0xfd88, "lammeeminitialarabic", 0xfccc, "largecircle", 0x25ef, "lbar", 0x019a, "lbelt", 0x026c, "lbopomofo", 0x310c, "lcaron", 0x013e, "lcedilla", 0x013c, "lcircle", 0x24db, "lcircumflexbelow", 0x1e3d, "lcommaaccent", 0x013c, "ldot", 0x0140, "ldotaccent", 0x0140, "ldotbelow", 0x1e37, "ldotbelowmacron", 0x1e39, "leftangleabovecmb", 0x031a, "lefttackbelowcmb", 0x0318, "less", 0x003c, "lessequal", 0x2264, "lessequalorgreater", 0x22da, "lessmonospace", 0xff1c, "lessorequivalent", 0x2272, "lessorgreater", 0x2276, "lessoverequal", 0x2266, "lesssmall", 0xfe64, "lezh", 0x026e, "lfblock", 0x258c, "lhookretroflex", 0x026d, "lira", 0x20a4, "liwnarmenian", 0x056c, "lj", 0x01c9, "ljecyrillic", 0x0459, "ll", 0xf6c0, "lladeva", 0x0933, "llagujarati", 0x0ab3, "llinebelow", 0x1e3b, "llladeva", 0x0934, "llvocalicbengali", 0x09e1, "llvocalicdeva", 0x0961, "llvocalicvowelsignbengali", 0x09e3, "llvocalicvowelsigndeva", 0x0963, "lmiddletilde", 0x026b, "lmonospace", 0xff4c, "lmsquare", 0x33d0, "lochulathai", 0x0e2c, "logicaland", 0x2227, "logicalnot", 0x00ac, "logicalnotreversed", 0x2310, "logicalor", 0x2228, "lolingthai", 0x0e25, "longs", 0x017f, "lowlinecenterline", 0xfe4e, "lowlinecmb", 0x0332, "lowlinedashed", 0xfe4d, "lozenge", 0x25ca, "lparen", 0x24a7, "lslash", 0x0142, "lsquare", 0x2113, "lsuperior", 0xf6ee, "ltshade", 0x2591, "luthai", 0x0e26, "lvocalicbengali", 0x098c, "lvocalicdeva", 0x090c, "lvocalicvowelsignbengali", 0x09e2, "lvocalicvowelsigndeva", 0x0962, "lxsquare", 0x33d3, "m", 0x006d, "mabengali", 0x09ae, "macron", 0x00af, "macronbelowcmb", 0x0331, "macroncmb", 0x0304, "macronlowmod", 0x02cd, "macronmonospace", 0xffe3, "macute", 0x1e3f, "madeva", 0x092e, "magujarati", 0x0aae, "magurmukhi", 0x0a2e, "mahapakhhebrew", 0x05a4, "mahapakhlefthebrew", 0x05a4, "mahiragana", 0x307e, "maichattawalowleftthai", 0xf895, "maichattawalowrightthai", 0xf894, "maichattawathai", 0x0e4b, "maichattawaupperleftthai", 0xf893, "maieklowleftthai", 0xf88c, "maieklowrightthai", 0xf88b, "maiekthai", 0x0e48, "maiekupperleftthai", 0xf88a, "maihanakatleftthai", 0xf884, "maihanakatthai", 0x0e31, "maitaikhuleftthai", 0xf889, "maitaikhuthai", 0x0e47, "maitholowleftthai", 0xf88f, "maitholowrightthai", 0xf88e, "maithothai", 0x0e49, "maithoupperleftthai", 0xf88d, "maitrilowleftthai", 0xf892, "maitrilowrightthai", 0xf891, "maitrithai", 0x0e4a, "maitriupperleftthai", 0xf890, "maiyamokthai", 0x0e46, "makatakana", 0x30de, "makatakanahalfwidth", 0xff8f, "male", 0x2642, "mansyonsquare", 0x3347, "maqafhebrew", 0x05be, "mars", 0x2642, "masoracirclehebrew", 0x05af, "masquare", 0x3383, "mbopomofo", 0x3107, "mbsquare", 0x33d4, "mcircle", 0x24dc, "mcubedsquare", 0x33a5, "mdotaccent", 0x1e41, "mdotbelow", 0x1e43, "meemarabic", 0x0645, "meemfinalarabic", 0xfee2, "meeminitialarabic", 0xfee3, "meemmedialarabic", 0xfee4, "meemmeeminitialarabic", 0xfcd1, "meemmeemisolatedarabic", 0xfc48, "meetorusquare", 0x334d, "mehiragana", 0x3081, "meizierasquare", 0x337e, "mekatakana", 0x30e1, "mekatakanahalfwidth", 0xff92, "mem", 0x05de, "memdagesh", 0xfb3e, "memdageshhebrew", 0xfb3e, "memhebrew", 0x05de, "menarmenian", 0x0574, "merkhahebrew", 0x05a5, "merkhakefulahebrew", 0x05a6, "merkhakefulalefthebrew", 0x05a6, "merkhalefthebrew", 0x05a5, "mhook", 0x0271, "mhzsquare", 0x3392, "middledotkatakanahalfwidth", 0xff65, "middot", 0x00b7, "mieumacirclekorean", 0x3272, "mieumaparenkorean", 0x3212, "mieumcirclekorean", 0x3264, "mieumkorean", 0x3141, "mieumpansioskorean", 0x3170, "mieumparenkorean", 0x3204, "mieumpieupkorean", 0x316e, "mieumsioskorean", 0x316f, "mihiragana", 0x307f, "mikatakana", 0x30df, "mikatakanahalfwidth", 0xff90, "minus", 0x2212, "minusbelowcmb", 0x0320, "minuscircle", 0x2296, "minusmod", 0x02d7, "minusplus", 0x2213, "minute", 0x2032, "miribaarusquare", 0x334a, "mirisquare", 0x3349, "mlonglegturned", 0x0270, "mlsquare", 0x3396, "mmcubedsquare", 0x33a3, "mmonospace", 0xff4d, "mmsquaredsquare", 0x339f, "mohiragana", 0x3082, "mohmsquare", 0x33c1, "mokatakana", 0x30e2, "mokatakanahalfwidth", 0xff93, "molsquare", 0x33d6, "momathai", 0x0e21, "moverssquare", 0x33a7, "moverssquaredsquare", 0x33a8, "mparen", 0x24a8, "mpasquare", 0x33ab, "mssquare", 0x33b3, "msuperior", 0xf6ef, "mturned", 0x026f, "mu", 0x00b5, "mu1", 0x00b5, "muasquare", 0x3382, "muchgreater", 0x226b, "muchless", 0x226a, "mufsquare", 0x338c, "mugreek", 0x03bc, "mugsquare", 0x338d, "muhiragana", 0x3080, "mukatakana", 0x30e0, "mukatakanahalfwidth", 0xff91, "mulsquare", 0x3395, "multiply", 0x00d7, "mumsquare", 0x339b, "munahhebrew", 0x05a3, "munahlefthebrew", 0x05a3, "musicalnote", 0x266a, "musicalnotedbl", 0x266b, "musicflatsign", 0x266d, "musicsharpsign", 0x266f, "mussquare", 0x33b2, "muvsquare", 0x33b6, "muwsquare", 0x33bc, "mvmegasquare", 0x33b9, "mvsquare", 0x33b7, "mwmegasquare", 0x33bf, "mwsquare", 0x33bd, "n", 0x006e, "nabengali", 0x09a8, "nabla", 0x2207, "nacute", 0x0144, "nadeva", 0x0928, "nagujarati", 0x0aa8, "nagurmukhi", 0x0a28, "nahiragana", 0x306a, "nakatakana", 0x30ca, "nakatakanahalfwidth", 0xff85, "napostrophe", 0x0149, "nasquare", 0x3381, "nbopomofo", 0x310b, "nbspace", 0x00a0, "ncaron", 0x0148, "ncedilla", 0x0146, "ncircle", 0x24dd, "ncircumflexbelow", 0x1e4b, "ncommaaccent", 0x0146, "ndotaccent", 0x1e45, "ndotbelow", 0x1e47, "nehiragana", 0x306d, "nekatakana", 0x30cd, "nekatakanahalfwidth", 0xff88, "newsheqelsign", 0x20aa, "nfsquare", 0x338b, "ngabengali", 0x0999, "ngadeva", 0x0919, "ngagujarati", 0x0a99, "ngagurmukhi", 0x0a19, "ngonguthai", 0x0e07, "nhiragana", 0x3093, "nhookleft", 0x0272, "nhookretroflex", 0x0273, "nieunacirclekorean", 0x326f, "nieunaparenkorean", 0x320f, "nieuncieuckorean", 0x3135, "nieuncirclekorean", 0x3261, "nieunhieuhkorean", 0x3136, "nieunkorean", 0x3134, "nieunpansioskorean", 0x3168, "nieunparenkorean", 0x3201, "nieunsioskorean", 0x3167, "nieuntikeutkorean", 0x3166, "nihiragana", 0x306b, "nikatakana", 0x30cb, "nikatakanahalfwidth", 0xff86, "nikhahitleftthai", 0xf899, "nikhahitthai", 0x0e4d, "nine", 0x0039, "ninearabic", 0x0669, "ninebengali", 0x09ef, "ninecircle", 0x2468, "ninecircleinversesansserif", 0x2792, "ninedeva", 0x096f, "ninegujarati", 0x0aef, "ninegurmukhi", 0x0a6f, "ninehackarabic", 0x0669, "ninehangzhou", 0x3029, "nineideographicparen", 0x3228, "nineinferior", 0x2089, "ninemonospace", 0xff19, "nineoldstyle", 0xf739, "nineparen", 0x247c, "nineperiod", 0x2490, "ninepersian", 0x06f9, "nineroman", 0x2178, "ninesuperior", 0x2079, "nineteencircle", 0x2472, "nineteenparen", 0x2486, "nineteenperiod", 0x249a, "ninethai", 0x0e59, "nj", 0x01cc, "njecyrillic", 0x045a, "nkatakana", 0x30f3, "nkatakanahalfwidth", 0xff9d, "nlegrightlong", 0x019e, "nlinebelow", 0x1e49, "nmonospace", 0xff4e, "nmsquare", 0x339a, "nnabengali", 0x09a3, "nnadeva", 0x0923, "nnagujarati", 0x0aa3, "nnagurmukhi", 0x0a23, "nnnadeva", 0x0929, "nohiragana", 0x306e, "nokatakana", 0x30ce, "nokatakanahalfwidth", 0xff89, "nonbreakingspace", 0x00a0, "nonenthai", 0x0e13, "nonuthai", 0x0e19, "noonarabic", 0x0646, "noonfinalarabic", 0xfee6, "noonghunnaarabic", 0x06ba, "noonghunnafinalarabic", 0xfb9f, "nooninitialarabic", 0xfee7, "noonjeeminitialarabic", 0xfcd2, "noonjeemisolatedarabic", 0xfc4b, "noonmedialarabic", 0xfee8, "noonmeeminitialarabic", 0xfcd5, "noonmeemisolatedarabic", 0xfc4e, "noonnoonfinalarabic", 0xfc8d, "notcontains", 0x220c, "notelement", 0x2209, "notelementof", 0x2209, "notequal", 0x2260, "notgreater", 0x226f, "notgreaternorequal", 0x2271, "notgreaternorless", 0x2279, "notidentical", 0x2262, "notless", 0x226e, "notlessnorequal", 0x2270, "notparallel", 0x2226, "notprecedes", 0x2280, "notsubset", 0x2284, "notsucceeds", 0x2281, "notsuperset", 0x2285, "nowarmenian", 0x0576, "nparen", 0x24a9, "nssquare", 0x33b1, "nsuperior", 0x207f, "ntilde", 0x00f1, "nu", 0x03bd, "nuhiragana", 0x306c, "nukatakana", 0x30cc, "nukatakanahalfwidth", 0xff87, "nuktabengali", 0x09bc, "nuktadeva", 0x093c, "nuktagujarati", 0x0abc, "nuktagurmukhi", 0x0a3c, "numbersign", 0x0023, "numbersignmonospace", 0xff03, "numbersignsmall", 0xfe5f, "numeralsigngreek", 0x0374, "numeralsignlowergreek", 0x0375, "numero", 0x2116, "nun", 0x05e0, "nundagesh", 0xfb40, "nundageshhebrew", 0xfb40, "nunhebrew", 0x05e0, "nvsquare", 0x33b5, "nwsquare", 0x33bb, "nyabengali", 0x099e, "nyadeva", 0x091e, "nyagujarati", 0x0a9e, "nyagurmukhi", 0x0a1e, "o", 0x006f, "oacute", 0x00f3, "oangthai", 0x0e2d, "obarred", 0x0275, "obarredcyrillic", 0x04e9, "obarreddieresiscyrillic", 0x04eb, "obengali", 0x0993, "obopomofo", 0x311b, "obreve", 0x014f, "ocandradeva", 0x0911, "ocandragujarati", 0x0a91, "ocandravowelsigndeva", 0x0949, "ocandravowelsigngujarati", 0x0ac9, "ocaron", 0x01d2, "ocircle", 0x24de, "ocircumflex", 0x00f4, "ocircumflexacute", 0x1ed1, "ocircumflexdotbelow", 0x1ed9, "ocircumflexgrave", 0x1ed3, "ocircumflexhookabove", 0x1ed5, "ocircumflextilde", 0x1ed7, "ocyrillic", 0x043e, "odblacute", 0x0151, "odblgrave", 0x020d, "odeva", 0x0913, "odieresis", 0x00f6, "odieresiscyrillic", 0x04e7, "odotbelow", 0x1ecd, "oe", 0x0153, "oekorean", 0x315a, "ogonek", 0x02db, "ogonekcmb", 0x0328, "ograve", 0x00f2, "ogujarati", 0x0a93, "oharmenian", 0x0585, "ohiragana", 0x304a, "ohookabove", 0x1ecf, "ohorn", 0x01a1, "ohornacute", 0x1edb, "ohorndotbelow", 0x1ee3, "ohorngrave", 0x1edd, "ohornhookabove", 0x1edf, "ohorntilde", 0x1ee1, "ohungarumlaut", 0x0151, "oi", 0x01a3, "oinvertedbreve", 0x020f, "okatakana", 0x30aa, "okatakanahalfwidth", 0xff75, "okorean", 0x3157, "olehebrew", 0x05ab, "omacron", 0x014d, "omacronacute", 0x1e53, "omacrongrave", 0x1e51, "omdeva", 0x0950, "omega", 0x03c9, "omega1", 0x03d6, "omegacyrillic", 0x0461, "omegalatinclosed", 0x0277, "omegaroundcyrillic", 0x047b, "omegatitlocyrillic", 0x047d, "omegatonos", 0x03ce, "omgujarati", 0x0ad0, "omicron", 0x03bf, "omicrontonos", 0x03cc, "omonospace", 0xff4f, "one", 0x0031, "onearabic", 0x0661, "onebengali", 0x09e7, "onecircle", 0x2460, "onecircleinversesansserif", 0x278a, "onedeva", 0x0967, "onedotenleader", 0x2024, "oneeighth", 0x215b, "onefitted", 0xf6dc, "onegujarati", 0x0ae7, "onegurmukhi", 0x0a67, "onehackarabic", 0x0661, "onehalf", 0x00bd, "onehangzhou", 0x3021, "oneideographicparen", 0x3220, "oneinferior", 0x2081, "onemonospace", 0xff11, "onenumeratorbengali", 0x09f4, "oneoldstyle", 0xf731, "oneparen", 0x2474, "oneperiod", 0x2488, "onepersian", 0x06f1, "onequarter", 0x00bc, "oneroman", 0x2170, "onesuperior", 0x00b9, "onethai", 0x0e51, "onethird", 0x2153, "oogonek", 0x01eb, "oogonekmacron", 0x01ed, "oogurmukhi", 0x0a13, "oomatragurmukhi", 0x0a4b, "oopen", 0x0254, "oparen", 0x24aa, "openbullet", 0x25e6, "option", 0x2325, "ordfeminine", 0x00aa, "ordmasculine", 0x00ba, "orthogonal", 0x221f, "oshortdeva", 0x0912, "oshortvowelsigndeva", 0x094a, "oslash", 0x00f8, "oslashacute", 0x01ff, "osmallhiragana", 0x3049, "osmallkatakana", 0x30a9, "osmallkatakanahalfwidth", 0xff6b, "ostrokeacute", 0x01ff, "osuperior", 0xf6f0, "otcyrillic", 0x047f, "otilde", 0x00f5, "otildeacute", 0x1e4d, "otildedieresis", 0x1e4f, "oubopomofo", 0x3121, "overline", 0x203e, "overlinecenterline", 0xfe4a, "overlinecmb", 0x0305, "overlinedashed", 0xfe49, "overlinedblwavy", 0xfe4c, "overlinewavy", 0xfe4b, "overscore", 0x00af, "ovowelsignbengali", 0x09cb, "ovowelsigndeva", 0x094b, "ovowelsigngujarati", 0x0acb, "p", 0x0070, "paampssquare", 0x3380, "paasentosquare", 0x332b, "pabengali", 0x09aa, "pacute", 0x1e55, "padeva", 0x092a, "pagedown", 0x21df, "pageup", 0x21de, "pagujarati", 0x0aaa, "pagurmukhi", 0x0a2a, "pahiragana", 0x3071, "paiyannoithai", 0x0e2f, "pakatakana", 0x30d1, "palatalizationcyrilliccmb", 0x0484, "palochkacyrillic", 0x04c0, "pansioskorean", 0x317f, "paragraph", 0x00b6, "parallel", 0x2225, "parenleft", 0x0028, "parenleftaltonearabic", 0xfd3e, "parenleftbt", 0xf8ed, "parenleftex", 0xf8ec, "parenleftinferior", 0x208d, "parenleftmonospace", 0xff08, "parenleftsmall", 0xfe59, "parenleftsuperior", 0x207d, "parenlefttp", 0xf8eb, "parenleftvertical", 0xfe35, "parenright", 0x0029, "parenrightaltonearabic", 0xfd3f, "parenrightbt", 0xf8f8, "parenrightex", 0xf8f7, "parenrightinferior", 0x208e, "parenrightmonospace", 0xff09, "parenrightsmall", 0xfe5a, "parenrightsuperior", 0x207e, "parenrighttp", 0xf8f6, "parenrightvertical", 0xfe36, "partialdiff", 0x2202, "paseqhebrew", 0x05c0, "pashtahebrew", 0x0599, "pasquare", 0x33a9, "patah", 0x05b7, "patah11", 0x05b7, "patah1d", 0x05b7, "patah2a", 0x05b7, "patahhebrew", 0x05b7, "patahnarrowhebrew", 0x05b7, "patahquarterhebrew", 0x05b7, "patahwidehebrew", 0x05b7, "pazerhebrew", 0x05a1, "pbopomofo", 0x3106, "pcircle", 0x24df, "pdotaccent", 0x1e57, "pe", 0x05e4, "pecyrillic", 0x043f, "pedagesh", 0xfb44, "pedageshhebrew", 0xfb44, "peezisquare", 0x333b, "pefinaldageshhebrew", 0xfb43, "peharabic", 0x067e, "peharmenian", 0x057a, "pehebrew", 0x05e4, "pehfinalarabic", 0xfb57, "pehinitialarabic", 0xfb58, "pehiragana", 0x307a, "pehmedialarabic", 0xfb59, "pekatakana", 0x30da, "pemiddlehookcyrillic", 0x04a7, "perafehebrew", 0xfb4e, "percent", 0x0025, "percentarabic", 0x066a, "percentmonospace", 0xff05, "percentsmall", 0xfe6a, "period", 0x002e, "periodarmenian", 0x0589, "periodcentered", 0x00b7, "periodhalfwidth", 0xff61, "periodinferior", 0xf6e7, "periodmonospace", 0xff0e, "periodsmall", 0xfe52, "periodsuperior", 0xf6e8, "perispomenigreekcmb", 0x0342, "perpendicular", 0x22a5, "perthousand", 0x2030, "peseta", 0x20a7, "pfsquare", 0x338a, "phabengali", 0x09ab, "phadeva", 0x092b, "phagujarati", 0x0aab, "phagurmukhi", 0x0a2b, "phi", 0x03c6, "phi1", 0x03d5, "phieuphacirclekorean", 0x327a, "phieuphaparenkorean", 0x321a, "phieuphcirclekorean", 0x326c, "phieuphkorean", 0x314d, "phieuphparenkorean", 0x320c, "philatin", 0x0278, "phinthuthai", 0x0e3a, "phisymbolgreek", 0x03d5, "phook", 0x01a5, "phophanthai", 0x0e1e, "phophungthai", 0x0e1c, "phosamphaothai", 0x0e20, "pi", 0x03c0, "pieupacirclekorean", 0x3273, "pieupaparenkorean", 0x3213, "pieupcieuckorean", 0x3176, "pieupcirclekorean", 0x3265, "pieupkiyeokkorean", 0x3172, "pieupkorean", 0x3142, "pieupparenkorean", 0x3205, "pieupsioskiyeokkorean", 0x3174, "pieupsioskorean", 0x3144, "pieupsiostikeutkorean", 0x3175, "pieupthieuthkorean", 0x3177, "pieuptikeutkorean", 0x3173, "pihiragana", 0x3074, "pikatakana", 0x30d4, "pisymbolgreek", 0x03d6, "piwrarmenian", 0x0583, "plus", 0x002b, "plusbelowcmb", 0x031f, "pluscircle", 0x2295, "plusminus", 0x00b1, "plusmod", 0x02d6, "plusmonospace", 0xff0b, "plussmall", 0xfe62, "plussuperior", 0x207a, "pmonospace", 0xff50, "pmsquare", 0x33d8, "pohiragana", 0x307d, "pointingindexdownwhite", 0x261f, "pointingindexleftwhite", 0x261c, "pointingindexrightwhite", 0x261e, "pointingindexupwhite", 0x261d, "pokatakana", 0x30dd, "poplathai", 0x0e1b, "postalmark", 0x3012, "postalmarkface", 0x3020, "pparen", 0x24ab, "precedes", 0x227a, "prescription", 0x211e, "primemod", 0x02b9, "primereversed", 0x2035, "product", 0x220f, "projective", 0x2305, "prolongedkana", 0x30fc, "propellor", 0x2318, "propersubset", 0x2282, "propersuperset", 0x2283, "proportion", 0x2237, "proportional", 0x221d, "psi", 0x03c8, "psicyrillic", 0x0471, "psilipneumatacyrilliccmb", 0x0486, "pssquare", 0x33b0, "puhiragana", 0x3077, "pukatakana", 0x30d7, "pvsquare", 0x33b4, "pwsquare", 0x33ba, "q", 0x0071, "qadeva", 0x0958, "qadmahebrew", 0x05a8, "qafarabic", 0x0642, "qaffinalarabic", 0xfed6, "qafinitialarabic", 0xfed7, "qafmedialarabic", 0xfed8, "qamats", 0x05b8, "qamats10", 0x05b8, "qamats1a", 0x05b8, "qamats1c", 0x05b8, "qamats27", 0x05b8, "qamats29", 0x05b8, "qamats33", 0x05b8, "qamatsde", 0x05b8, "qamatshebrew", 0x05b8, "qamatsnarrowhebrew", 0x05b8, "qamatsqatanhebrew", 0x05b8, "qamatsqatannarrowhebrew", 0x05b8, "qamatsqatanquarterhebrew", 0x05b8, "qamatsqatanwidehebrew", 0x05b8, "qamatsquarterhebrew", 0x05b8, "qamatswidehebrew", 0x05b8, "qarneyparahebrew", 0x059f, "qbopomofo", 0x3111, "qcircle", 0x24e0, "qhook", 0x02a0, "qmonospace", 0xff51, "qof", 0x05e7, "qofdagesh", 0xfb47, "qofdageshhebrew", 0xfb47, "qofhebrew", 0x05e7, "qparen", 0x24ac, "quarternote", 0x2669, "qubuts", 0x05bb, "qubuts18", 0x05bb, "qubuts25", 0x05bb, "qubuts31", 0x05bb, "qubutshebrew", 0x05bb, "qubutsnarrowhebrew", 0x05bb, "qubutsquarterhebrew", 0x05bb, "qubutswidehebrew", 0x05bb, "question", 0x003f, "questionarabic", 0x061f, "questionarmenian", 0x055e, "questiondown", 0x00bf, "questiondownsmall", 0xf7bf, "questiongreek", 0x037e, "questionmonospace", 0xff1f, "questionsmall", 0xf73f, "quotedbl", 0x0022, "quotedblbase", 0x201e, "quotedblleft", 0x201c, "quotedblmonospace", 0xff02, "quotedblprime", 0x301e, "quotedblprimereversed", 0x301d, "quotedblright", 0x201d, "quoteleft", 0x2018, "quoteleftreversed", 0x201b, "quotereversed", 0x201b, "quoteright", 0x2019, "quoterightn", 0x0149, "quotesinglbase", 0x201a, "quotesingle", 0x0027, "quotesinglemonospace", 0xff07, "r", 0x0072, "raarmenian", 0x057c, "rabengali", 0x09b0, "racute", 0x0155, "radeva", 0x0930, "radical", 0x221a, "radicalex", 0xf8e5, "radoverssquare", 0x33ae, "radoverssquaredsquare", 0x33af, "radsquare", 0x33ad, "rafe", 0x05bf, "rafehebrew", 0x05bf, "ragujarati", 0x0ab0, "ragurmukhi", 0x0a30, "rahiragana", 0x3089, "rakatakana", 0x30e9, "rakatakanahalfwidth", 0xff97, "ralowerdiagonalbengali", 0x09f1, "ramiddlediagonalbengali", 0x09f0, "ramshorn", 0x0264, "ratio", 0x2236, "rbopomofo", 0x3116, "rcaron", 0x0159, "rcedilla", 0x0157, "rcircle", 0x24e1, "rcommaaccent", 0x0157, "rdblgrave", 0x0211, "rdotaccent", 0x1e59, "rdotbelow", 0x1e5b, "rdotbelowmacron", 0x1e5d, "referencemark", 0x203b, "reflexsubset", 0x2286, "reflexsuperset", 0x2287, "registered", 0x00ae, "registersans", 0xf8e8, "registerserif", 0xf6da, "reharabic", 0x0631, "reharmenian", 0x0580, "rehfinalarabic", 0xfeae, "rehiragana", 0x308c, "rekatakana", 0x30ec, "rekatakanahalfwidth", 0xff9a, "resh", 0x05e8, "reshdageshhebrew", 0xfb48, "reshhebrew", 0x05e8, "reversedtilde", 0x223d, "reviahebrew", 0x0597, "reviamugrashhebrew", 0x0597, "revlogicalnot", 0x2310, "rfishhook", 0x027e, "rfishhookreversed", 0x027f, "rhabengali", 0x09dd, "rhadeva", 0x095d, "rho", 0x03c1, "rhook", 0x027d, "rhookturned", 0x027b, "rhookturnedsuperior", 0x02b5, "rhosymbolgreek", 0x03f1, "rhotichookmod", 0x02de, "rieulacirclekorean", 0x3271, "rieulaparenkorean", 0x3211, "rieulcirclekorean", 0x3263, "rieulhieuhkorean", 0x3140, "rieulkiyeokkorean", 0x313a, "rieulkiyeoksioskorean", 0x3169, "rieulkorean", 0x3139, "rieulmieumkorean", 0x313b, "rieulpansioskorean", 0x316c, "rieulparenkorean", 0x3203, "rieulphieuphkorean", 0x313f, "rieulpieupkorean", 0x313c, "rieulpieupsioskorean", 0x316b, "rieulsioskorean", 0x313d, "rieulthieuthkorean", 0x313e, "rieultikeutkorean", 0x316a, "rieulyeorinhieuhkorean", 0x316d, "rightangle", 0x221f, "righttackbelowcmb", 0x0319, "righttriangle", 0x22bf, "rihiragana", 0x308a, "rikatakana", 0x30ea, "rikatakanahalfwidth", 0xff98, "ring", 0x02da, "ringbelowcmb", 0x0325, "ringcmb", 0x030a, "ringhalfleft", 0x02bf, "ringhalfleftarmenian", 0x0559, "ringhalfleftbelowcmb", 0x031c, "ringhalfleftcentered", 0x02d3, "ringhalfright", 0x02be, "ringhalfrightbelowcmb", 0x0339, "ringhalfrightcentered", 0x02d2, "rinvertedbreve", 0x0213, "rittorusquare", 0x3351, "rlinebelow", 0x1e5f, "rlongleg", 0x027c, "rlonglegturned", 0x027a, "rmonospace", 0xff52, "rohiragana", 0x308d, "rokatakana", 0x30ed, "rokatakanahalfwidth", 0xff9b, "roruathai", 0x0e23, "rparen", 0x24ad, "rrabengali", 0x09dc, "rradeva", 0x0931, "rragurmukhi", 0x0a5c, "rreharabic", 0x0691, "rrehfinalarabic", 0xfb8d, "rrvocalicbengali", 0x09e0, "rrvocalicdeva", 0x0960, "rrvocalicgujarati", 0x0ae0, "rrvocalicvowelsignbengali", 0x09c4, "rrvocalicvowelsigndeva", 0x0944, "rrvocalicvowelsigngujarati", 0x0ac4, "rsuperior", 0xf6f1, "rtblock", 0x2590, "rturned", 0x0279, "rturnedsuperior", 0x02b4, "ruhiragana", 0x308b, "rukatakana", 0x30eb, "rukatakanahalfwidth", 0xff99, "rupeemarkbengali", 0x09f2, "rupeesignbengali", 0x09f3, "rupiah", 0xf6dd, "ruthai", 0x0e24, "rvocalicbengali", 0x098b, "rvocalicdeva", 0x090b, "rvocalicgujarati", 0x0a8b, "rvocalicvowelsignbengali", 0x09c3, "rvocalicvowelsigndeva", 0x0943, "rvocalicvowelsigngujarati", 0x0ac3, "s", 0x0073, "sabengali", 0x09b8, "sacute", 0x015b, "sacutedotaccent", 0x1e65, "sadarabic", 0x0635, "sadeva", 0x0938, "sadfinalarabic", 0xfeba, "sadinitialarabic", 0xfebb, "sadmedialarabic", 0xfebc, "sagujarati", 0x0ab8, "sagurmukhi", 0x0a38, "sahiragana", 0x3055, "sakatakana", 0x30b5, "sakatakanahalfwidth", 0xff7b, "sallallahoualayhewasallamarabic", 0xfdfa, "samekh", 0x05e1, "samekhdagesh", 0xfb41, "samekhdageshhebrew", 0xfb41, "samekhhebrew", 0x05e1, "saraaathai", 0x0e32, "saraaethai", 0x0e41, "saraaimaimalaithai", 0x0e44, "saraaimaimuanthai", 0x0e43, "saraamthai", 0x0e33, "saraathai", 0x0e30, "saraethai", 0x0e40, "saraiileftthai", 0xf886, "saraiithai", 0x0e35, "saraileftthai", 0xf885, "saraithai", 0x0e34, "saraothai", 0x0e42, "saraueeleftthai", 0xf888, "saraueethai", 0x0e37, "saraueleftthai", 0xf887, "sarauethai", 0x0e36, "sarauthai", 0x0e38, "sarauuthai", 0x0e39, "sbopomofo", 0x3119, "scaron", 0x0161, "scarondotaccent", 0x1e67, "scedilla", 0x015f, "schwa", 0x0259, "schwacyrillic", 0x04d9, "schwadieresiscyrillic", 0x04db, "schwahook", 0x025a, "scircle", 0x24e2, "scircumflex", 0x015d, "scommaaccent", 0x0219, "sdotaccent", 0x1e61, "sdotbelow", 0x1e63, "sdotbelowdotaccent", 0x1e69, "seagullbelowcmb", 0x033c, "second", 0x2033, "secondtonechinese", 0x02ca, "section", 0x00a7, "seenarabic", 0x0633, "seenfinalarabic", 0xfeb2, "seeninitialarabic", 0xfeb3, "seenmedialarabic", 0xfeb4, "segol", 0x05b6, "segol13", 0x05b6, "segol1f", 0x05b6, "segol2c", 0x05b6, "segolhebrew", 0x05b6, "segolnarrowhebrew", 0x05b6, "segolquarterhebrew", 0x05b6, "segoltahebrew", 0x0592, "segolwidehebrew", 0x05b6, "seharmenian", 0x057d, "sehiragana", 0x305b, "sekatakana", 0x30bb, "sekatakanahalfwidth", 0xff7e, "semicolon", 0x003b, "semicolonarabic", 0x061b, "semicolonmonospace", 0xff1b, "semicolonsmall", 0xfe54, "semivoicedmarkkana", 0x309c, "semivoicedmarkkanahalfwidth", 0xff9f, "sentisquare", 0x3322, "sentosquare", 0x3323, "seven", 0x0037, "sevenarabic", 0x0667, "sevenbengali", 0x09ed, "sevencircle", 0x2466, "sevencircleinversesansserif", 0x2790, "sevendeva", 0x096d, "seveneighths", 0x215e, "sevengujarati", 0x0aed, "sevengurmukhi", 0x0a6d, "sevenhackarabic", 0x0667, "sevenhangzhou", 0x3027, "sevenideographicparen", 0x3226, "seveninferior", 0x2087, "sevenmonospace", 0xff17, "sevenoldstyle", 0xf737, "sevenparen", 0x247a, "sevenperiod", 0x248e, "sevenpersian", 0x06f7, "sevenroman", 0x2176, "sevensuperior", 0x2077, "seventeencircle", 0x2470, "seventeenparen", 0x2484, "seventeenperiod", 0x2498, "seventhai", 0x0e57, "sfthyphen", 0x00ad, "shaarmenian", 0x0577, "shabengali", 0x09b6, "shacyrillic", 0x0448, "shaddaarabic", 0x0651, "shaddadammaarabic", 0xfc61, "shaddadammatanarabic", 0xfc5e, "shaddafathaarabic", 0xfc60, "shaddakasraarabic", 0xfc62, "shaddakasratanarabic", 0xfc5f, "shade", 0x2592, "shadedark", 0x2593, "shadelight", 0x2591, "shademedium", 0x2592, "shadeva", 0x0936, "shagujarati", 0x0ab6, "shagurmukhi", 0x0a36, "shalshelethebrew", 0x0593, "shbopomofo", 0x3115, "shchacyrillic", 0x0449, "sheenarabic", 0x0634, "sheenfinalarabic", 0xfeb6, "sheeninitialarabic", 0xfeb7, "sheenmedialarabic", 0xfeb8, "sheicoptic", 0x03e3, "sheqel", 0x20aa, "sheqelhebrew", 0x20aa, "sheva", 0x05b0, "sheva115", 0x05b0, "sheva15", 0x05b0, "sheva22", 0x05b0, "sheva2e", 0x05b0, "shevahebrew", 0x05b0, "shevanarrowhebrew", 0x05b0, "shevaquarterhebrew", 0x05b0, "shevawidehebrew", 0x05b0, "shhacyrillic", 0x04bb, "shimacoptic", 0x03ed, "shin", 0x05e9, "shindagesh", 0xfb49, "shindageshhebrew", 0xfb49, "shindageshshindot", 0xfb2c, "shindageshshindothebrew", 0xfb2c, "shindageshsindot", 0xfb2d, "shindageshsindothebrew", 0xfb2d, "shindothebrew", 0x05c1, "shinhebrew", 0x05e9, "shinshindot", 0xfb2a, "shinshindothebrew", 0xfb2a, "shinsindot", 0xfb2b, "shinsindothebrew", 0xfb2b, "shook", 0x0282, "sigma", 0x03c3, "sigma1", 0x03c2, "sigmafinal", 0x03c2, "sigmalunatesymbolgreek", 0x03f2, "sihiragana", 0x3057, "sikatakana", 0x30b7, "sikatakanahalfwidth", 0xff7c, "siluqhebrew", 0x05bd, "siluqlefthebrew", 0x05bd, "similar", 0x223c, "sindothebrew", 0x05c2, "siosacirclekorean", 0x3274, "siosaparenkorean", 0x3214, "sioscieuckorean", 0x317e, "sioscirclekorean", 0x3266, "sioskiyeokkorean", 0x317a, "sioskorean", 0x3145, "siosnieunkorean", 0x317b, "siosparenkorean", 0x3206, "siospieupkorean", 0x317d, "siostikeutkorean", 0x317c, "six", 0x0036, "sixarabic", 0x0666, "sixbengali", 0x09ec, "sixcircle", 0x2465, "sixcircleinversesansserif", 0x278f, "sixdeva", 0x096c, "sixgujarati", 0x0aec, "sixgurmukhi", 0x0a6c, "sixhackarabic", 0x0666, "sixhangzhou", 0x3026, "sixideographicparen", 0x3225, "sixinferior", 0x2086, "sixmonospace", 0xff16, "sixoldstyle", 0xf736, "sixparen", 0x2479, "sixperiod", 0x248d, "sixpersian", 0x06f6, "sixroman", 0x2175, "sixsuperior", 0x2076, "sixteencircle", 0x246f, "sixteencurrencydenominatorbengali", 0x09f9, "sixteenparen", 0x2483, "sixteenperiod", 0x2497, "sixthai", 0x0e56, "slash", 0x002f, "slashmonospace", 0xff0f, "slong", 0x017f, "slongdotaccent", 0x1e9b, "smileface", 0x263a, "smonospace", 0xff53, "sofpasuqhebrew", 0x05c3, "softhyphen", 0x00ad, "softsigncyrillic", 0x044c, "sohiragana", 0x305d, "sokatakana", 0x30bd, "sokatakanahalfwidth", 0xff7f, "soliduslongoverlaycmb", 0x0338, "solidusshortoverlaycmb", 0x0337, "sorusithai", 0x0e29, "sosalathai", 0x0e28, "sosothai", 0x0e0b, "sosuathai", 0x0e2a, "space", 0x0020, "spacehackarabic", 0x0020, "spade", 0x2660, "spadesuitblack", 0x2660, "spadesuitwhite", 0x2664, "sparen", 0x24ae, "squarebelowcmb", 0x033b, "squarecc", 0x33c4, "squarecm", 0x339d, "squarediagonalcrosshatchfill", 0x25a9, "squarehorizontalfill", 0x25a4, "squarekg", 0x338f, "squarekm", 0x339e, "squarekmcapital", 0x33ce, "squareln", 0x33d1, "squarelog", 0x33d2, "squaremg", 0x338e, "squaremil", 0x33d5, "squaremm", 0x339c, "squaremsquared", 0x33a1, "squareorthogonalcrosshatchfill", 0x25a6, "squareupperlefttolowerrightfill", 0x25a7, "squareupperrighttolowerleftfill", 0x25a8, "squareverticalfill", 0x25a5, "squarewhitewithsmallblack", 0x25a3, "srsquare", 0x33db, "ssabengali", 0x09b7, "ssadeva", 0x0937, "ssagujarati", 0x0ab7, "ssangcieuckorean", 0x3149, "ssanghieuhkorean", 0x3185, "ssangieungkorean", 0x3180, "ssangkiyeokkorean", 0x3132, "ssangnieunkorean", 0x3165, "ssangpieupkorean", 0x3143, "ssangsioskorean", 0x3146, "ssangtikeutkorean", 0x3138, "ssuperior", 0xf6f2, "sterling", 0x00a3, "sterlingmonospace", 0xffe1, "strokelongoverlaycmb", 0x0336, "strokeshortoverlaycmb", 0x0335, "subset", 0x2282, "subsetnotequal", 0x228a, "subsetorequal", 0x2286, "succeeds", 0x227b, "suchthat", 0x220b, "suhiragana", 0x3059, "sukatakana", 0x30b9, "sukatakanahalfwidth", 0xff7d, "sukunarabic", 0x0652, "summation", 0x2211, "sun", 0x263c, "superset", 0x2283, "supersetnotequal", 0x228b, "supersetorequal", 0x2287, "svsquare", 0x33dc, "syouwaerasquare", 0x337c, "t", 0x0074, "tabengali", 0x09a4, "tackdown", 0x22a4, "tackleft", 0x22a3, "tadeva", 0x0924, "tagujarati", 0x0aa4, "tagurmukhi", 0x0a24, "taharabic", 0x0637, "tahfinalarabic", 0xfec2, "tahinitialarabic", 0xfec3, "tahiragana", 0x305f, "tahmedialarabic", 0xfec4, "taisyouerasquare", 0x337d, "takatakana", 0x30bf, "takatakanahalfwidth", 0xff80, "tatweelarabic", 0x0640, "tau", 0x03c4, "tav", 0x05ea, "tavdages", 0xfb4a, "tavdagesh", 0xfb4a, "tavdageshhebrew", 0xfb4a, "tavhebrew", 0x05ea, "tbar", 0x0167, "tbopomofo", 0x310a, "tcaron", 0x0165, "tccurl", 0x02a8, "tcedilla", 0x0163, "tcheharabic", 0x0686, "tchehfinalarabic", 0xfb7b, "tchehinitialarabic", 0xfb7c, "tchehmedialarabic", 0xfb7d, "tcircle", 0x24e3, "tcircumflexbelow", 0x1e71, "tcommaaccent", 0x0163, "tdieresis", 0x1e97, "tdotaccent", 0x1e6b, "tdotbelow", 0x1e6d, "tecyrillic", 0x0442, "tedescendercyrillic", 0x04ad, "teharabic", 0x062a, "tehfinalarabic", 0xfe96, "tehhahinitialarabic", 0xfca2, "tehhahisolatedarabic", 0xfc0c, "tehinitialarabic", 0xfe97, "tehiragana", 0x3066, "tehjeeminitialarabic", 0xfca1, "tehjeemisolatedarabic", 0xfc0b, "tehmarbutaarabic", 0x0629, "tehmarbutafinalarabic", 0xfe94, "tehmedialarabic", 0xfe98, "tehmeeminitialarabic", 0xfca4, "tehmeemisolatedarabic", 0xfc0e, "tehnoonfinalarabic", 0xfc73, "tekatakana", 0x30c6, "tekatakanahalfwidth", 0xff83, "telephone", 0x2121, "telephoneblack", 0x260e, "telishagedolahebrew", 0x05a0, "telishaqetanahebrew", 0x05a9, "tencircle", 0x2469, "tenideographicparen", 0x3229, "tenparen", 0x247d, "tenperiod", 0x2491, "tenroman", 0x2179, "tesh", 0x02a7, "tet", 0x05d8, "tetdagesh", 0xfb38, "tetdageshhebrew", 0xfb38, "tethebrew", 0x05d8, "tetsecyrillic", 0x04b5, "tevirhebrew", 0x059b, "tevirlefthebrew", 0x059b, "thabengali", 0x09a5, "thadeva", 0x0925, "thagujarati", 0x0aa5, "thagurmukhi", 0x0a25, "thalarabic", 0x0630, "thalfinalarabic", 0xfeac, "thanthakhatlowleftthai", 0xf898, "thanthakhatlowrightthai", 0xf897, "thanthakhatthai", 0x0e4c, "thanthakhatupperleftthai", 0xf896, "theharabic", 0x062b, "thehfinalarabic", 0xfe9a, "thehinitialarabic", 0xfe9b, "thehmedialarabic", 0xfe9c, "thereexists", 0x2203, "therefore", 0x2234, "theta", 0x03b8, "theta1", 0x03d1, "thetasymbolgreek", 0x03d1, "thieuthacirclekorean", 0x3279, "thieuthaparenkorean", 0x3219, "thieuthcirclekorean", 0x326b, "thieuthkorean", 0x314c, "thieuthparenkorean", 0x320b, "thirteencircle", 0x246c, "thirteenparen", 0x2480, "thirteenperiod", 0x2494, "thonangmonthothai", 0x0e11, "thook", 0x01ad, "thophuthaothai", 0x0e12, "thorn", 0x00fe, "thothahanthai", 0x0e17, "thothanthai", 0x0e10, "thothongthai", 0x0e18, "thothungthai", 0x0e16, "thousandcyrillic", 0x0482, "thousandsseparatorarabic", 0x066c, "thousandsseparatorpersian", 0x066c, "three", 0x0033, "threearabic", 0x0663, "threebengali", 0x09e9, "threecircle", 0x2462, "threecircleinversesansserif", 0x278c, "threedeva", 0x0969, "threeeighths", 0x215c, "threegujarati", 0x0ae9, "threegurmukhi", 0x0a69, "threehackarabic", 0x0663, "threehangzhou", 0x3023, "threeideographicparen", 0x3222, "threeinferior", 0x2083, "threemonospace", 0xff13, "threenumeratorbengali", 0x09f6, "threeoldstyle", 0xf733, "threeparen", 0x2476, "threeperiod", 0x248a, "threepersian", 0x06f3, "threequarters", 0x00be, "threequartersemdash", 0xf6de, "threeroman", 0x2172, "threesuperior", 0x00b3, "threethai", 0x0e53, "thzsquare", 0x3394, "tihiragana", 0x3061, "tikatakana", 0x30c1, "tikatakanahalfwidth", 0xff81, "tikeutacirclekorean", 0x3270, "tikeutaparenkorean", 0x3210, "tikeutcirclekorean", 0x3262, "tikeutkorean", 0x3137, "tikeutparenkorean", 0x3202, "tilde", 0x02dc, "tildebelowcmb", 0x0330, "tildecmb", 0x0303, "tildecomb", 0x0303, "tildedoublecmb", 0x0360, "tildeoperator", 0x223c, "tildeoverlaycmb", 0x0334, "tildeverticalcmb", 0x033e, "timescircle", 0x2297, "tipehahebrew", 0x0596, "tipehalefthebrew", 0x0596, "tippigurmukhi", 0x0a70, "titlocyrilliccmb", 0x0483, "tiwnarmenian", 0x057f, "tlinebelow", 0x1e6f, "tmonospace", 0xff54, "toarmenian", 0x0569, "tohiragana", 0x3068, "tokatakana", 0x30c8, "tokatakanahalfwidth", 0xff84, "tonebarextrahighmod", 0x02e5, "tonebarextralowmod", 0x02e9, "tonebarhighmod", 0x02e6, "tonebarlowmod", 0x02e8, "tonebarmidmod", 0x02e7, "tonefive", 0x01bd, "tonesix", 0x0185, "tonetwo", 0x01a8, "tonos", 0x0384, "tonsquare", 0x3327, "topatakthai", 0x0e0f, "tortoiseshellbracketleft", 0x3014, "tortoiseshellbracketleftsmall", 0xfe5d, "tortoiseshellbracketleftvertical", 0xfe39, "tortoiseshellbracketright", 0x3015, "tortoiseshellbracketrightsmall", 0xfe5e, "tortoiseshellbracketrightvertical", 0xfe3a, "totaothai", 0x0e15, "tpalatalhook", 0x01ab, "tparen", 0x24af, "trademark", 0x2122, "trademarksans", 0xf8ea, "trademarkserif", 0xf6db, "tretroflexhook", 0x0288, "triagdn", 0x25bc, "triaglf", 0x25c4, "triagrt", 0x25ba, "triagup", 0x25b2, "ts", 0x02a6, "tsadi", 0x05e6, "tsadidagesh", 0xfb46, "tsadidageshhebrew", 0xfb46, "tsadihebrew", 0x05e6, "tsecyrillic", 0x0446, "tsere", 0x05b5, "tsere12", 0x05b5, "tsere1e", 0x05b5, "tsere2b", 0x05b5, "tserehebrew", 0x05b5, "tserenarrowhebrew", 0x05b5, "tserequarterhebrew", 0x05b5, "tserewidehebrew", 0x05b5, "tshecyrillic", 0x045b, "tsuperior", 0xf6f3, "ttabengali", 0x099f, "ttadeva", 0x091f, "ttagujarati", 0x0a9f, "ttagurmukhi", 0x0a1f, "tteharabic", 0x0679, "ttehfinalarabic", 0xfb67, "ttehinitialarabic", 0xfb68, "ttehmedialarabic", 0xfb69, "tthabengali", 0x09a0, "tthadeva", 0x0920, "tthagujarati", 0x0aa0, "tthagurmukhi", 0x0a20, "tturned", 0x0287, "tuhiragana", 0x3064, "tukatakana", 0x30c4, "tukatakanahalfwidth", 0xff82, "tusmallhiragana", 0x3063, "tusmallkatakana", 0x30c3, "tusmallkatakanahalfwidth", 0xff6f, "twelvecircle", 0x246b, "twelveparen", 0x247f, "twelveperiod", 0x2493, "twelveroman", 0x217b, "twentycircle", 0x2473, "twentyhangzhou", 0x5344, "twentyparen", 0x2487, "twentyperiod", 0x249b, "two", 0x0032, "twoarabic", 0x0662, "twobengali", 0x09e8, "twocircle", 0x2461, "twocircleinversesansserif", 0x278b, "twodeva", 0x0968, "twodotenleader", 0x2025, "twodotleader", 0x2025, "twodotleadervertical", 0xfe30, "twogujarati", 0x0ae8, "twogurmukhi", 0x0a68, "twohackarabic", 0x0662, "twohangzhou", 0x3022, "twoideographicparen", 0x3221, "twoinferior", 0x2082, "twomonospace", 0xff12, "twonumeratorbengali", 0x09f5, "twooldstyle", 0xf732, "twoparen", 0x2475, "twoperiod", 0x2489, "twopersian", 0x06f2, "tworoman", 0x2171, "twostroke", 0x01bb, "twosuperior", 0x00b2, "twothai", 0x0e52, "twothirds", 0x2154, "u", 0x0075, "uacute", 0x00fa, "ubar", 0x0289, "ubengali", 0x0989, "ubopomofo", 0x3128, "ubreve", 0x016d, "ucaron", 0x01d4, "ucircle", 0x24e4, "ucircumflex", 0x00fb, "ucircumflexbelow", 0x1e77, "ucyrillic", 0x0443, "udattadeva", 0x0951, "udblacute", 0x0171, "udblgrave", 0x0215, "udeva", 0x0909, "udieresis", 0x00fc, "udieresisacute", 0x01d8, "udieresisbelow", 0x1e73, "udieresiscaron", 0x01da, "udieresiscyrillic", 0x04f1, "udieresisgrave", 0x01dc, "udieresismacron", 0x01d6, "udotbelow", 0x1ee5, "ugrave", 0x00f9, "ugujarati", 0x0a89, "ugurmukhi", 0x0a09, "uhiragana", 0x3046, "uhookabove", 0x1ee7, "uhorn", 0x01b0, "uhornacute", 0x1ee9, "uhorndotbelow", 0x1ef1, "uhorngrave", 0x1eeb, "uhornhookabove", 0x1eed, "uhorntilde", 0x1eef, "uhungarumlaut", 0x0171, "uhungarumlautcyrillic", 0x04f3, "uinvertedbreve", 0x0217, "ukatakana", 0x30a6, "ukatakanahalfwidth", 0xff73, "ukcyrillic", 0x0479, "ukorean", 0x315c, "umacron", 0x016b, "umacroncyrillic", 0x04ef, "umacrondieresis", 0x1e7b, "umatragurmukhi", 0x0a41, "umonospace", 0xff55, "underscore", 0x005f, "underscoredbl", 0x2017, "underscoremonospace", 0xff3f, "underscorevertical", 0xfe33, "underscorewavy", 0xfe4f, "union", 0x222a, "universal", 0x2200, "uogonek", 0x0173, "uparen", 0x24b0, "upblock", 0x2580, "upperdothebrew", 0x05c4, "upsilon", 0x03c5, "upsilondieresis", 0x03cb, "upsilondieresistonos", 0x03b0, "upsilonlatin", 0x028a, "upsilontonos", 0x03cd, "uptackbelowcmb", 0x031d, "uptackmod", 0x02d4, "uragurmukhi", 0x0a73, "uring", 0x016f, "ushortcyrillic", 0x045e, "usmallhiragana", 0x3045, "usmallkatakana", 0x30a5, "usmallkatakanahalfwidth", 0xff69, "ustraightcyrillic", 0x04af, "ustraightstrokecyrillic", 0x04b1, "utilde", 0x0169, "utildeacute", 0x1e79, "utildebelow", 0x1e75, "uubengali", 0x098a, "uudeva", 0x090a, "uugujarati", 0x0a8a, "uugurmukhi", 0x0a0a, "uumatragurmukhi", 0x0a42, "uuvowelsignbengali", 0x09c2, "uuvowelsigndeva", 0x0942, "uuvowelsigngujarati", 0x0ac2, "uvowelsignbengali", 0x09c1, "uvowelsigndeva", 0x0941, "uvowelsigngujarati", 0x0ac1, "v", 0x0076, "vadeva", 0x0935, "vagujarati", 0x0ab5, "vagurmukhi", 0x0a35, "vakatakana", 0x30f7, "vav", 0x05d5, "vavdagesh", 0xfb35, "vavdagesh65", 0xfb35, "vavdageshhebrew", 0xfb35, "vavhebrew", 0x05d5, "vavholam", 0xfb4b, "vavholamhebrew", 0xfb4b, "vavvavhebrew", 0x05f0, "vavyodhebrew", 0x05f1, "vcircle", 0x24e5, "vdotbelow", 0x1e7f, "vecyrillic", 0x0432, "veharabic", 0x06a4, "vehfinalarabic", 0xfb6b, "vehinitialarabic", 0xfb6c, "vehmedialarabic", 0xfb6d, "vekatakana", 0x30f9, "venus", 0x2640, "verticalbar", 0x007c, "verticallineabovecmb", 0x030d, "verticallinebelowcmb", 0x0329, "verticallinelowmod", 0x02cc, "verticallinemod", 0x02c8, "vewarmenian", 0x057e, "vhook", 0x028b, "vikatakana", 0x30f8, "viramabengali", 0x09cd, "viramadeva", 0x094d, "viramagujarati", 0x0acd, "visargabengali", 0x0983, "visargadeva", 0x0903, "visargagujarati", 0x0a83, "vmonospace", 0xff56, "voarmenian", 0x0578, "voicediterationhiragana", 0x309e, "voicediterationkatakana", 0x30fe, "voicedmarkkana", 0x309b, "voicedmarkkanahalfwidth", 0xff9e, "vokatakana", 0x30fa, "vparen", 0x24b1, "vtilde", 0x1e7d, "vturned", 0x028c, "vuhiragana", 0x3094, "vukatakana", 0x30f4, "w", 0x0077, "wacute", 0x1e83, "waekorean", 0x3159, "wahiragana", 0x308f, "wakatakana", 0x30ef, "wakatakanahalfwidth", 0xff9c, "wakorean", 0x3158, "wasmallhiragana", 0x308e, "wasmallkatakana", 0x30ee, "wattosquare", 0x3357, "wavedash", 0x301c, "wavyunderscorevertical", 0xfe34, "wawarabic", 0x0648, "wawfinalarabic", 0xfeee, "wawhamzaabovearabic", 0x0624, "wawhamzaabovefinalarabic", 0xfe86, "wbsquare", 0x33dd, "wcircle", 0x24e6, "wcircumflex", 0x0175, "wdieresis", 0x1e85, "wdotaccent", 0x1e87, "wdotbelow", 0x1e89, "wehiragana", 0x3091, "weierstrass", 0x2118, "wekatakana", 0x30f1, "wekorean", 0x315e, "weokorean", 0x315d, "wgrave", 0x1e81, "whitebullet", 0x25e6, "whitecircle", 0x25cb, "whitecircleinverse", 0x25d9, "whitecornerbracketleft", 0x300e, "whitecornerbracketleftvertical", 0xfe43, "whitecornerbracketright", 0x300f, "whitecornerbracketrightvertical", 0xfe44, "whitediamond", 0x25c7, "whitediamondcontainingblacksmalldiamond", 0x25c8, "whitedownpointingsmalltriangle", 0x25bf, "whitedownpointingtriangle", 0x25bd, "whiteleftpointingsmalltriangle", 0x25c3, "whiteleftpointingtriangle", 0x25c1, "whitelenticularbracketleft", 0x3016, "whitelenticularbracketright", 0x3017, "whiterightpointingsmalltriangle", 0x25b9, "whiterightpointingtriangle", 0x25b7, "whitesmallsquare", 0x25ab, "whitesmilingface", 0x263a, "whitesquare", 0x25a1, "whitestar", 0x2606, "whitetelephone", 0x260f, "whitetortoiseshellbracketleft", 0x3018, "whitetortoiseshellbracketright", 0x3019, "whiteuppointingsmalltriangle", 0x25b5, "whiteuppointingtriangle", 0x25b3, "wihiragana", 0x3090, "wikatakana", 0x30f0, "wikorean", 0x315f, "wmonospace", 0xff57, "wohiragana", 0x3092, "wokatakana", 0x30f2, "wokatakanahalfwidth", 0xff66, "won", 0x20a9, "wonmonospace", 0xffe6, "wowaenthai", 0x0e27, "wparen", 0x24b2, "wring", 0x1e98, "wsuperior", 0x02b7, "wturned", 0x028d, "wynn", 0x01bf, "x", 0x0078, "xabovecmb", 0x033d, "xbopomofo", 0x3112, "xcircle", 0x24e7, "xdieresis", 0x1e8d, "xdotaccent", 0x1e8b, "xeharmenian", 0x056d, "xi", 0x03be, "xmonospace", 0xff58, "xparen", 0x24b3, "xsuperior", 0x02e3, "y", 0x0079, "yaadosquare", 0x334e, "yabengali", 0x09af, "yacute", 0x00fd, "yadeva", 0x092f, "yaekorean", 0x3152, "yagujarati", 0x0aaf, "yagurmukhi", 0x0a2f, "yahiragana", 0x3084, "yakatakana", 0x30e4, "yakatakanahalfwidth", 0xff94, "yakorean", 0x3151, "yamakkanthai", 0x0e4e, "yasmallhiragana", 0x3083, "yasmallkatakana", 0x30e3, "yasmallkatakanahalfwidth", 0xff6c, "yatcyrillic", 0x0463, "ycircle", 0x24e8, "ycircumflex", 0x0177, "ydieresis", 0x00ff, "ydotaccent", 0x1e8f, "ydotbelow", 0x1ef5, "yeharabic", 0x064a, "yehbarreearabic", 0x06d2, "yehbarreefinalarabic", 0xfbaf, "yehfinalarabic", 0xfef2, "yehhamzaabovearabic", 0x0626, "yehhamzaabovefinalarabic", 0xfe8a, "yehhamzaaboveinitialarabic", 0xfe8b, "yehhamzaabovemedialarabic", 0xfe8c, "yehinitialarabic", 0xfef3, "yehmedialarabic", 0xfef4, "yehmeeminitialarabic", 0xfcdd, "yehmeemisolatedarabic", 0xfc58, "yehnoonfinalarabic", 0xfc94, "yehthreedotsbelowarabic", 0x06d1, "yekorean", 0x3156, "yen", 0x00a5, "yenmonospace", 0xffe5, "yeokorean", 0x3155, "yeorinhieuhkorean", 0x3186, "yerahbenyomohebrew", 0x05aa, "yerahbenyomolefthebrew", 0x05aa, "yericyrillic", 0x044b, "yerudieresiscyrillic", 0x04f9, "yesieungkorean", 0x3181, "yesieungpansioskorean", 0x3183, "yesieungsioskorean", 0x3182, "yetivhebrew", 0x059a, "ygrave", 0x1ef3, "yhook", 0x01b4, "yhookabove", 0x1ef7, "yiarmenian", 0x0575, "yicyrillic", 0x0457, "yikorean", 0x3162, "yinyang", 0x262f, "yiwnarmenian", 0x0582, "ymonospace", 0xff59, "yod", 0x05d9, "yoddagesh", 0xfb39, "yoddageshhebrew", 0xfb39, "yodhebrew", 0x05d9, "yodyodhebrew", 0x05f2, "yodyodpatahhebrew", 0xfb1f, "yohiragana", 0x3088, "yoikorean", 0x3189, "yokatakana", 0x30e8, "yokatakanahalfwidth", 0xff96, "yokorean", 0x315b, "yosmallhiragana", 0x3087, "yosmallkatakana", 0x30e7, "yosmallkatakanahalfwidth", 0xff6e, "yotgreek", 0x03f3, "yoyaekorean", 0x3188, "yoyakorean", 0x3187, "yoyakthai", 0x0e22, "yoyingthai", 0x0e0d, "yparen", 0x24b4, "ypogegrammeni", 0x037a, "ypogegrammenigreekcmb", 0x0345, "yr", 0x01a6, "yring", 0x1e99, "ysuperior", 0x02b8, "ytilde", 0x1ef9, "yturned", 0x028e, "yuhiragana", 0x3086, "yuikorean", 0x318c, "yukatakana", 0x30e6, "yukatakanahalfwidth", 0xff95, "yukorean", 0x3160, "yusbigcyrillic", 0x046b, "yusbigiotifiedcyrillic", 0x046d, "yuslittlecyrillic", 0x0467, "yuslittleiotifiedcyrillic", 0x0469, "yusmallhiragana", 0x3085, "yusmallkatakana", 0x30e5, "yusmallkatakanahalfwidth", 0xff6d, "yuyekorean", 0x318b, "yuyeokorean", 0x318a, "yyabengali", 0x09df, "yyadeva", 0x095f, "z", 0x007a, "zaarmenian", 0x0566, "zacute", 0x017a, "zadeva", 0x095b, "zagurmukhi", 0x0a5b, "zaharabic", 0x0638, "zahfinalarabic", 0xfec6, "zahinitialarabic", 0xfec7, "zahiragana", 0x3056, "zahmedialarabic", 0xfec8, "zainarabic", 0x0632, "zainfinalarabic", 0xfeb0, "zakatakana", 0x30b6, "zaqefgadolhebrew", 0x0595, "zaqefqatanhebrew", 0x0594, "zarqahebrew", 0x0598, "zayin", 0x05d6, "zayindagesh", 0xfb36, "zayindageshhebrew", 0xfb36, "zayinhebrew", 0x05d6, "zbopomofo", 0x3117, "zcaron", 0x017e, "zcircle", 0x24e9, "zcircumflex", 0x1e91, "zcurl", 0x0291, "zdot", 0x017c, "zdotaccent", 0x017c, "zdotbelow", 0x1e93, "zecyrillic", 0x0437, "zedescendercyrillic", 0x0499, "zedieresiscyrillic", 0x04df, "zehiragana", 0x305c, "zekatakana", 0x30bc, "zero", 0x0030, "zeroarabic", 0x0660, "zerobengali", 0x09e6, "zerodeva", 0x0966, "zerogujarati", 0x0ae6, "zerogurmukhi", 0x0a66, "zerohackarabic", 0x0660, "zeroinferior", 0x2080, "zeromonospace", 0xff10, "zerooldstyle", 0xf730, "zeropersian", 0x06f0, "zerosuperior", 0x2070, "zerothai", 0x0e50, "zerowidthjoiner", 0xfeff, "zerowidthnonjoiner", 0x200c, "zerowidthspace", 0x200b, "zeta", 0x03b6, "zhbopomofo", 0x3113, "zhearmenian", 0x056a, "zhebrevecyrillic", 0x04c2, "zhecyrillic", 0x0436, "zhedescendercyrillic", 0x0497, "zhedieresiscyrillic", 0x04dd, "zihiragana", 0x3058, "zikatakana", 0x30b8, "zinorhebrew", 0x05ae, "zlinebelow", 0x1e95, "zmonospace", 0xff5a, "zohiragana", 0x305e, "zokatakana", 0x30be, "zparen", 0x24b5, "zretroflexhook", 0x0290, "zstroke", 0x01b6, "zuhiragana", 0x305a, "zukatakana", 0x30ba, ".notdef", 0x0000, "angbracketleftbig", 0x2329, "angbracketleftBig", 0x2329, "angbracketleftbigg", 0x2329, "angbracketleftBigg", 0x2329, "angbracketrightBig", 0x232a, "angbracketrightbig", 0x232a, "angbracketrightBigg", 0x232a, "angbracketrightbigg", 0x232a, "arrowhookleft", 0x21aa, "arrowhookright", 0x21a9, "arrowlefttophalf", 0x21bc, "arrowleftbothalf", 0x21bd, "arrownortheast", 0x2197, "arrownorthwest", 0x2196, "arrowrighttophalf", 0x21c0, "arrowrightbothalf", 0x21c1, "arrowsoutheast", 0x2198, "arrowsouthwest", 0x2199, "backslashbig", 0x2216, "backslashBig", 0x2216, "backslashBigg", 0x2216, "backslashbigg", 0x2216, "bardbl", 0x2016, "bracehtipdownleft", 0xfe37, "bracehtipdownright", 0xfe37, "bracehtipupleft", 0xfe38, "bracehtipupright", 0xfe38, "braceleftBig", 0x007b, "braceleftbig", 0x007b, "braceleftbigg", 0x007b, "braceleftBigg", 0x007b, "bracerightBig", 0x007d, "bracerightbig", 0x007d, "bracerightbigg", 0x007d, "bracerightBigg", 0x007d, "bracketleftbig", 0x005b, "bracketleftBig", 0x005b, "bracketleftbigg", 0x005b, "bracketleftBigg", 0x005b, "bracketrightBig", 0x005d, "bracketrightbig", 0x005d, "bracketrightbigg", 0x005d, "bracketrightBigg", 0x005d, "ceilingleftbig", 0x2308, "ceilingleftBig", 0x2308, "ceilingleftBigg", 0x2308, "ceilingleftbigg", 0x2308, "ceilingrightbig", 0x2309, "ceilingrightBig", 0x2309, "ceilingrightbigg", 0x2309, "ceilingrightBigg", 0x2309, "circledotdisplay", 0x2299, "circledottext", 0x2299, "circlemultiplydisplay", 0x2297, "circlemultiplytext", 0x2297, "circleplusdisplay", 0x2295, "circleplustext", 0x2295, "contintegraldisplay", 0x222e, "contintegraltext", 0x222e, "coproductdisplay", 0x2210, "coproducttext", 0x2210, "floorleftBig", 0x230a, "floorleftbig", 0x230a, "floorleftbigg", 0x230a, "floorleftBigg", 0x230a, "floorrightbig", 0x230b, "floorrightBig", 0x230b, "floorrightBigg", 0x230b, "floorrightbigg", 0x230b, "hatwide", 0x0302, "hatwider", 0x0302, "hatwidest", 0x0302, "intercal", 0x1d40, "integraldisplay", 0x222b, "integraltext", 0x222b, "intersectiondisplay", 0x22c2, "intersectiontext", 0x22c2, "logicalanddisplay", 0x2227, "logicalandtext", 0x2227, "logicalordisplay", 0x2228, "logicalortext", 0x2228, "parenleftBig", 0x0028, "parenleftbig", 0x0028, "parenleftBigg", 0x0028, "parenleftbigg", 0x0028, "parenrightBig", 0x0029, "parenrightbig", 0x0029, "parenrightBigg", 0x0029, "parenrightbigg", 0x0029, "prime", 0x2032, "productdisplay", 0x220f, "producttext", 0x220f, "radicalbig", 0x221a, "radicalBig", 0x221a, "radicalBigg", 0x221a, "radicalbigg", 0x221a, "radicalbt", 0x221a, "radicaltp", 0x221a, "radicalvertex", 0x221a, "slashbig", 0x002f, "slashBig", 0x002f, "slashBigg", 0x002f, "slashbigg", 0x002f, "summationdisplay", 0x2211, "summationtext", 0x2211, "tildewide", 0x02dc, "tildewider", 0x02dc, "tildewidest", 0x02dc, "uniondisplay", 0x22c3, "unionmultidisplay", 0x228e, "unionmultitext", 0x228e, "unionsqdisplay", 0x2294, "unionsqtext", 0x2294, "uniontext", 0x22c3, "vextenddouble", 0x2225, "vextendsingle", 0x2223 ]; }); const getDingbatsGlyphsUnicode = (0, _core_utils_js__WEBPACK_IMPORTED_MODULE_0__.getArrayLookupTableFactory)(function () { return [ "space", 0x0020, "a1", 0x2701, "a2", 0x2702, "a202", 0x2703, "a3", 0x2704, "a4", 0x260e, "a5", 0x2706, "a119", 0x2707, "a118", 0x2708, "a117", 0x2709, "a11", 0x261b, "a12", 0x261e, "a13", 0x270c, "a14", 0x270d, "a15", 0x270e, "a16", 0x270f, "a105", 0x2710, "a17", 0x2711, "a18", 0x2712, "a19", 0x2713, "a20", 0x2714, "a21", 0x2715, "a22", 0x2716, "a23", 0x2717, "a24", 0x2718, "a25", 0x2719, "a26", 0x271a, "a27", 0x271b, "a28", 0x271c, "a6", 0x271d, "a7", 0x271e, "a8", 0x271f, "a9", 0x2720, "a10", 0x2721, "a29", 0x2722, "a30", 0x2723, "a31", 0x2724, "a32", 0x2725, "a33", 0x2726, "a34", 0x2727, "a35", 0x2605, "a36", 0x2729, "a37", 0x272a, "a38", 0x272b, "a39", 0x272c, "a40", 0x272d, "a41", 0x272e, "a42", 0x272f, "a43", 0x2730, "a44", 0x2731, "a45", 0x2732, "a46", 0x2733, "a47", 0x2734, "a48", 0x2735, "a49", 0x2736, "a50", 0x2737, "a51", 0x2738, "a52", 0x2739, "a53", 0x273a, "a54", 0x273b, "a55", 0x273c, "a56", 0x273d, "a57", 0x273e, "a58", 0x273f, "a59", 0x2740, "a60", 0x2741, "a61", 0x2742, "a62", 0x2743, "a63", 0x2744, "a64", 0x2745, "a65", 0x2746, "a66", 0x2747, "a67", 0x2748, "a68", 0x2749, "a69", 0x274a, "a70", 0x274b, "a71", 0x25cf, "a72", 0x274d, "a73", 0x25a0, "a74", 0x274f, "a203", 0x2750, "a75", 0x2751, "a204", 0x2752, "a76", 0x25b2, "a77", 0x25bc, "a78", 0x25c6, "a79", 0x2756, "a81", 0x25d7, "a82", 0x2758, "a83", 0x2759, "a84", 0x275a, "a97", 0x275b, "a98", 0x275c, "a99", 0x275d, "a100", 0x275e, "a101", 0x2761, "a102", 0x2762, "a103", 0x2763, "a104", 0x2764, "a106", 0x2765, "a107", 0x2766, "a108", 0x2767, "a112", 0x2663, "a111", 0x2666, "a110", 0x2665, "a109", 0x2660, "a120", 0x2460, "a121", 0x2461, "a122", 0x2462, "a123", 0x2463, "a124", 0x2464, "a125", 0x2465, "a126", 0x2466, "a127", 0x2467, "a128", 0x2468, "a129", 0x2469, "a130", 0x2776, "a131", 0x2777, "a132", 0x2778, "a133", 0x2779, "a134", 0x277a, "a135", 0x277b, "a136", 0x277c, "a137", 0x277d, "a138", 0x277e, "a139", 0x277f, "a140", 0x2780, "a141", 0x2781, "a142", 0x2782, "a143", 0x2783, "a144", 0x2784, "a145", 0x2785, "a146", 0x2786, "a147", 0x2787, "a148", 0x2788, "a149", 0x2789, "a150", 0x278a, "a151", 0x278b, "a152", 0x278c, "a153", 0x278d, "a154", 0x278e, "a155", 0x278f, "a156", 0x2790, "a157", 0x2791, "a158", 0x2792, "a159", 0x2793, "a160", 0x2794, "a161", 0x2192, "a163", 0x2194, "a164", 0x2195, "a196", 0x2798, "a165", 0x2799, "a192", 0x279a, "a166", 0x279b, "a167", 0x279c, "a168", 0x279d, "a169", 0x279e, "a170", 0x279f, "a171", 0x27a0, "a172", 0x27a1, "a173", 0x27a2, "a162", 0x27a3, "a174", 0x27a4, "a175", 0x27a5, "a176", 0x27a6, "a177", 0x27a7, "a178", 0x27a8, "a179", 0x27a9, "a193", 0x27aa, "a180", 0x27ab, "a199", 0x27ac, "a181", 0x27ad, "a200", 0x27ae, "a182", 0x27af, "a201", 0x27b1, "a183", 0x27b2, "a184", 0x27b3, "a197", 0x27b4, "a185", 0x27b5, "a194", 0x27b6, "a198", 0x27b7, "a186", 0x27b8, "a195", 0x27b9, "a187", 0x27ba, "a188", 0x27bb, "a189", 0x27bc, "a190", 0x27bd, "a191", 0x27be, "a89", 0x2768, "a90", 0x2769, "a93", 0x276a, "a94", 0x276b, "a91", 0x276c, "a92", 0x276d, "a205", 0x276e, "a85", 0x276f, "a206", 0x2770, "a86", 0x2771, "a87", 0x2772, "a88", 0x2773, "a95", 0x2774, "a96", 0x2775, ".notdef", 0x0000 ]; }); /***/ }), /* 21 */ /***/ ((__unused_webpack_module, __webpack_exports__, __w_pdfjs_require__) => { __w_pdfjs_require__.r(__webpack_exports__); /* harmony export */ __w_pdfjs_require__.d(__webpack_exports__, { /* harmony export */ "getNormalizedUnicodes": () => (/* binding */ getNormalizedUnicodes), /* harmony export */ "getUnicodeForGlyph": () => (/* binding */ getUnicodeForGlyph), /* harmony export */ "getUnicodeRangeFor": () => (/* binding */ getUnicodeRangeFor), /* harmony export */ "mapSpecialUnicodeValues": () => (/* binding */ mapSpecialUnicodeValues), /* harmony export */ "reverseIfRtl": () => (/* binding */ reverseIfRtl) /* harmony export */ }); /* harmony import */ var _core_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __w_pdfjs_require__(9); const getSpecialPUASymbols = (0, _core_utils_js__WEBPACK_IMPORTED_MODULE_0__.getLookupTableFactory)(function (t) { t[63721] = 0x00a9; t[63193] = 0x00a9; t[63720] = 0x00ae; t[63194] = 0x00ae; t[63722] = 0x2122; t[63195] = 0x2122; t[63729] = 0x23a7; t[63730] = 0x23a8; t[63731] = 0x23a9; t[63740] = 0x23ab; t[63741] = 0x23ac; t[63742] = 0x23ad; t[63726] = 0x23a1; t[63727] = 0x23a2; t[63728] = 0x23a3; t[63737] = 0x23a4; t[63738] = 0x23a5; t[63739] = 0x23a6; t[63723] = 0x239b; t[63724] = 0x239c; t[63725] = 0x239d; t[63734] = 0x239e; t[63735] = 0x239f; t[63736] = 0x23a0; }); function mapSpecialUnicodeValues(code) { if (code >= 0xfff0 && code <= 0xffff) { return 0; } else if (code >= 0xf600 && code <= 0xf8ff) { return getSpecialPUASymbols()[code] || code; } else if (code === 0x00ad) { return 0x002d; } return code; } function getUnicodeForGlyph(name, glyphsUnicodeMap) { let unicode = glyphsUnicodeMap[name]; if (unicode !== undefined) { return unicode; } if (!name) { return -1; } if (name[0] === "u") { const nameLen = name.length; let hexStr; if (nameLen === 7 && name[1] === "n" && name[2] === "i") { hexStr = name.substring(3); } else if (nameLen >= 5 && nameLen <= 7) { hexStr = name.substring(1); } else { return -1; } if (hexStr === hexStr.toUpperCase()) { unicode = parseInt(hexStr, 16); if (unicode >= 0) { return unicode; } } } return -1; } const UnicodeRanges = [ { begin: 0x0000, end: 0x007f }, { begin: 0x0080, end: 0x00ff }, { begin: 0x0100, end: 0x017f }, { begin: 0x0180, end: 0x024f }, { begin: 0x0250, end: 0x02af }, { begin: 0x02b0, end: 0x02ff }, { begin: 0x0300, end: 0x036f }, { begin: 0x0370, end: 0x03ff }, { begin: 0x2c80, end: 0x2cff }, { begin: 0x0400, end: 0x04ff }, { begin: 0x0530, end: 0x058f }, { begin: 0x0590, end: 0x05ff }, { begin: 0xa500, end: 0xa63f }, { begin: 0x0600, end: 0x06ff }, { begin: 0x07c0, end: 0x07ff }, { begin: 0x0900, end: 0x097f }, { begin: 0x0980, end: 0x09ff }, { begin: 0x0a00, end: 0x0a7f }, { begin: 0x0a80, end: 0x0aff }, { begin: 0x0b00, end: 0x0b7f }, { begin: 0x0b80, end: 0x0bff }, { begin: 0x0c00, end: 0x0c7f }, { begin: 0x0c80, end: 0x0cff }, { begin: 0x0d00, end: 0x0d7f }, { begin: 0x0e00, end: 0x0e7f }, { begin: 0x0e80, end: 0x0eff }, { begin: 0x10a0, end: 0x10ff }, { begin: 0x1b00, end: 0x1b7f }, { begin: 0x1100, end: 0x11ff }, { begin: 0x1e00, end: 0x1eff }, { begin: 0x1f00, end: 0x1fff }, { begin: 0x2000, end: 0x206f }, { begin: 0x2070, end: 0x209f }, { begin: 0x20a0, end: 0x20cf }, { begin: 0x20d0, end: 0x20ff }, { begin: 0x2100, end: 0x214f }, { begin: 0x2150, end: 0x218f }, { begin: 0x2190, end: 0x21ff }, { begin: 0x2200, end: 0x22ff }, { begin: 0x2300, end: 0x23ff }, { begin: 0x2400, end: 0x243f }, { begin: 0x2440, end: 0x245f }, { begin: 0x2460, end: 0x24ff }, { begin: 0x2500, end: 0x257f }, { begin: 0x2580, end: 0x259f }, { begin: 0x25a0, end: 0x25ff }, { begin: 0x2600, end: 0x26ff }, { begin: 0x2700, end: 0x27bf }, { begin: 0x3000, end: 0x303f }, { begin: 0x3040, end: 0x309f }, { begin: 0x30a0, end: 0x30ff }, { begin: 0x3100, end: 0x312f }, { begin: 0x3130, end: 0x318f }, { begin: 0xa840, end: 0xa87f }, { begin: 0x3200, end: 0x32ff }, { begin: 0x3300, end: 0x33ff }, { begin: 0xac00, end: 0xd7af }, { begin: 0xd800, end: 0xdfff }, { begin: 0x10900, end: 0x1091f }, { begin: 0x4e00, end: 0x9fff }, { begin: 0xe000, end: 0xf8ff }, { begin: 0x31c0, end: 0x31ef }, { begin: 0xfb00, end: 0xfb4f }, { begin: 0xfb50, end: 0xfdff }, { begin: 0xfe20, end: 0xfe2f }, { begin: 0xfe10, end: 0xfe1f }, { begin: 0xfe50, end: 0xfe6f }, { begin: 0xfe70, end: 0xfeff }, { begin: 0xff00, end: 0xffef }, { begin: 0xfff0, end: 0xffff }, { begin: 0x0f00, end: 0x0fff }, { begin: 0x0700, end: 0x074f }, { begin: 0x0780, end: 0x07bf }, { begin: 0x0d80, end: 0x0dff }, { begin: 0x1000, end: 0x109f }, { begin: 0x1200, end: 0x137f }, { begin: 0x13a0, end: 0x13ff }, { begin: 0x1400, end: 0x167f }, { begin: 0x1680, end: 0x169f }, { begin: 0x16a0, end: 0x16ff }, { begin: 0x1780, end: 0x17ff }, { begin: 0x1800, end: 0x18af }, { begin: 0x2800, end: 0x28ff }, { begin: 0xa000, end: 0xa48f }, { begin: 0x1700, end: 0x171f }, { begin: 0x10300, end: 0x1032f }, { begin: 0x10330, end: 0x1034f }, { begin: 0x10400, end: 0x1044f }, { begin: 0x1d000, end: 0x1d0ff }, { begin: 0x1d400, end: 0x1d7ff }, { begin: 0xff000, end: 0xffffd }, { begin: 0xfe00, end: 0xfe0f }, { begin: 0xe0000, end: 0xe007f }, { begin: 0x1900, end: 0x194f }, { begin: 0x1950, end: 0x197f }, { begin: 0x1980, end: 0x19df }, { begin: 0x1a00, end: 0x1a1f }, { begin: 0x2c00, end: 0x2c5f }, { begin: 0x2d30, end: 0x2d7f }, { begin: 0x4dc0, end: 0x4dff }, { begin: 0xa800, end: 0xa82f }, { begin: 0x10000, end: 0x1007f }, { begin: 0x10140, end: 0x1018f }, { begin: 0x10380, end: 0x1039f }, { begin: 0x103a0, end: 0x103df }, { begin: 0x10450, end: 0x1047f }, { begin: 0x10480, end: 0x104af }, { begin: 0x10800, end: 0x1083f }, { begin: 0x10a00, end: 0x10a5f }, { begin: 0x1d300, end: 0x1d35f }, { begin: 0x12000, end: 0x123ff }, { begin: 0x1d360, end: 0x1d37f }, { begin: 0x1b80, end: 0x1bbf }, { begin: 0x1c00, end: 0x1c4f }, { begin: 0x1c50, end: 0x1c7f }, { begin: 0xa880, end: 0xa8df }, { begin: 0xa900, end: 0xa92f }, { begin: 0xa930, end: 0xa95f }, { begin: 0xaa00, end: 0xaa5f }, { begin: 0x10190, end: 0x101cf }, { begin: 0x101d0, end: 0x101ff }, { begin: 0x102a0, end: 0x102df }, { begin: 0x1f030, end: 0x1f09f } ]; function getUnicodeRangeFor(value) { for (let i = 0, ii = UnicodeRanges.length; i < ii; i++) { const range = UnicodeRanges[i]; if (value >= range.begin && value < range.end) { return i; } } return -1; } function isRTLRangeFor(value) { let range = UnicodeRanges[13]; if (value >= range.begin && value < range.end) { return true; } range = UnicodeRanges[11]; if (value >= range.begin && value < range.end) { return true; } return false; } const getNormalizedUnicodes = (0, _core_utils_js__WEBPACK_IMPORTED_MODULE_0__.getArrayLookupTableFactory)(function () { return [ "\u00A8", "\u0020\u0308", "\u00AF", "\u0020\u0304", "\u00B4", "\u0020\u0301", "\u00B5", "\u03BC", "\u00B8", "\u0020\u0327", "\u0132", "\u0049\u004A", "\u0133", "\u0069\u006A", "\u013F", "\u004C\u00B7", "\u0140", "\u006C\u00B7", "\u0149", "\u02BC\u006E", "\u017F", "\u0073", "\u01C4", "\u0044\u017D", "\u01C5", "\u0044\u017E", "\u01C6", "\u0064\u017E", "\u01C7", "\u004C\u004A", "\u01C8", "\u004C\u006A", "\u01C9", "\u006C\u006A", "\u01CA", "\u004E\u004A", "\u01CB", "\u004E\u006A", "\u01CC", "\u006E\u006A", "\u01F1", "\u0044\u005A", "\u01F2", "\u0044\u007A", "\u01F3", "\u0064\u007A", "\u02D8", "\u0020\u0306", "\u02D9", "\u0020\u0307", "\u02DA", "\u0020\u030A", "\u02DB", "\u0020\u0328", "\u02DC", "\u0020\u0303", "\u02DD", "\u0020\u030B", "\u037A", "\u0020\u0345", "\u0384", "\u0020\u0301", "\u03D0", "\u03B2", "\u03D1", "\u03B8", "\u03D2", "\u03A5", "\u03D5", "\u03C6", "\u03D6", "\u03C0", "\u03F0", "\u03BA", "\u03F1", "\u03C1", "\u03F2", "\u03C2", "\u03F4", "\u0398", "\u03F5", "\u03B5", "\u03F9", "\u03A3", "\u0587", "\u0565\u0582", "\u0675", "\u0627\u0674", "\u0676", "\u0648\u0674", "\u0677", "\u06C7\u0674", "\u0678", "\u064A\u0674", "\u0E33", "\u0E4D\u0E32", "\u0EB3", "\u0ECD\u0EB2", "\u0EDC", "\u0EAB\u0E99", "\u0EDD", "\u0EAB\u0EA1", "\u0F77", "\u0FB2\u0F81", "\u0F79", "\u0FB3\u0F81", "\u1E9A", "\u0061\u02BE", "\u1FBD", "\u0020\u0313", "\u1FBF", "\u0020\u0313", "\u1FC0", "\u0020\u0342", "\u1FFE", "\u0020\u0314", "\u2002", "\u0020", "\u2003", "\u0020", "\u2004", "\u0020", "\u2005", "\u0020", "\u2006", "\u0020", "\u2008", "\u0020", "\u2009", "\u0020", "\u200A", "\u0020", "\u2017", "\u0020\u0333", "\u2024", "\u002E", "\u2025", "\u002E\u002E", "\u2026", "\u002E\u002E\u002E", "\u2033", "\u2032\u2032", "\u2034", "\u2032\u2032\u2032", "\u2036", "\u2035\u2035", "\u2037", "\u2035\u2035\u2035", "\u203C", "\u0021\u0021", "\u203E", "\u0020\u0305", "\u2047", "\u003F\u003F", "\u2048", "\u003F\u0021", "\u2049", "\u0021\u003F", "\u2057", "\u2032\u2032\u2032\u2032", "\u205F", "\u0020", "\u20A8", "\u0052\u0073", "\u2100", "\u0061\u002F\u0063", "\u2101", "\u0061\u002F\u0073", "\u2103", "\u00B0\u0043", "\u2105", "\u0063\u002F\u006F", "\u2106", "\u0063\u002F\u0075", "\u2107", "\u0190", "\u2109", "\u00B0\u0046", "\u2116", "\u004E\u006F", "\u2121", "\u0054\u0045\u004C", "\u2135", "\u05D0", "\u2136", "\u05D1", "\u2137", "\u05D2", "\u2138", "\u05D3", "\u213B", "\u0046\u0041\u0058", "\u2160", "\u0049", "\u2161", "\u0049\u0049", "\u2162", "\u0049\u0049\u0049", "\u2163", "\u0049\u0056", "\u2164", "\u0056", "\u2165", "\u0056\u0049", "\u2166", "\u0056\u0049\u0049", "\u2167", "\u0056\u0049\u0049\u0049", "\u2168", "\u0049\u0058", "\u2169", "\u0058", "\u216A", "\u0058\u0049", "\u216B", "\u0058\u0049\u0049", "\u216C", "\u004C", "\u216D", "\u0043", "\u216E", "\u0044", "\u216F", "\u004D", "\u2170", "\u0069", "\u2171", "\u0069\u0069", "\u2172", "\u0069\u0069\u0069", "\u2173", "\u0069\u0076", "\u2174", "\u0076", "\u2175", "\u0076\u0069", "\u2176", "\u0076\u0069\u0069", "\u2177", "\u0076\u0069\u0069\u0069", "\u2178", "\u0069\u0078", "\u2179", "\u0078", "\u217A", "\u0078\u0069", "\u217B", "\u0078\u0069\u0069", "\u217C", "\u006C", "\u217D", "\u0063", "\u217E", "\u0064", "\u217F", "\u006D", "\u222C", "\u222B\u222B", "\u222D", "\u222B\u222B\u222B", "\u222F", "\u222E\u222E", "\u2230", "\u222E\u222E\u222E", "\u2474", "\u0028\u0031\u0029", "\u2475", "\u0028\u0032\u0029", "\u2476", "\u0028\u0033\u0029", "\u2477", "\u0028\u0034\u0029", "\u2478", "\u0028\u0035\u0029", "\u2479", "\u0028\u0036\u0029", "\u247A", "\u0028\u0037\u0029", "\u247B", "\u0028\u0038\u0029", "\u247C", "\u0028\u0039\u0029", "\u247D", "\u0028\u0031\u0030\u0029", "\u247E", "\u0028\u0031\u0031\u0029", "\u247F", "\u0028\u0031\u0032\u0029", "\u2480", "\u0028\u0031\u0033\u0029", "\u2481", "\u0028\u0031\u0034\u0029", "\u2482", "\u0028\u0031\u0035\u0029", "\u2483", "\u0028\u0031\u0036\u0029", "\u2484", "\u0028\u0031\u0037\u0029", "\u2485", "\u0028\u0031\u0038\u0029", "\u2486", "\u0028\u0031\u0039\u0029", "\u2487", "\u0028\u0032\u0030\u0029", "\u2488", "\u0031\u002E", "\u2489", "\u0032\u002E", "\u248A", "\u0033\u002E", "\u248B", "\u0034\u002E", "\u248C", "\u0035\u002E", "\u248D", "\u0036\u002E", "\u248E", "\u0037\u002E", "\u248F", "\u0038\u002E", "\u2490", "\u0039\u002E", "\u2491", "\u0031\u0030\u002E", "\u2492", "\u0031\u0031\u002E", "\u2493", "\u0031\u0032\u002E", "\u2494", "\u0031\u0033\u002E", "\u2495", "\u0031\u0034\u002E", "\u2496", "\u0031\u0035\u002E", "\u2497", "\u0031\u0036\u002E", "\u2498", "\u0031\u0037\u002E", "\u2499", "\u0031\u0038\u002E", "\u249A", "\u0031\u0039\u002E", "\u249B", "\u0032\u0030\u002E", "\u249C", "\u0028\u0061\u0029", "\u249D", "\u0028\u0062\u0029", "\u249E", "\u0028\u0063\u0029", "\u249F", "\u0028\u0064\u0029", "\u24A0", "\u0028\u0065\u0029", "\u24A1", "\u0028\u0066\u0029", "\u24A2", "\u0028\u0067\u0029", "\u24A3", "\u0028\u0068\u0029", "\u24A4", "\u0028\u0069\u0029", "\u24A5", "\u0028\u006A\u0029", "\u24A6", "\u0028\u006B\u0029", "\u24A7", "\u0028\u006C\u0029", "\u24A8", "\u0028\u006D\u0029", "\u24A9", "\u0028\u006E\u0029", "\u24AA", "\u0028\u006F\u0029", "\u24AB", "\u0028\u0070\u0029", "\u24AC", "\u0028\u0071\u0029", "\u24AD", "\u0028\u0072\u0029", "\u24AE", "\u0028\u0073\u0029", "\u24AF", "\u0028\u0074\u0029", "\u24B0", "\u0028\u0075\u0029", "\u24B1", "\u0028\u0076\u0029", "\u24B2", "\u0028\u0077\u0029", "\u24B3", "\u0028\u0078\u0029", "\u24B4", "\u0028\u0079\u0029", "\u24B5", "\u0028\u007A\u0029", "\u2A0C", "\u222B\u222B\u222B\u222B", "\u2A74", "\u003A\u003A\u003D", "\u2A75", "\u003D\u003D", "\u2A76", "\u003D\u003D\u003D", "\u2E9F", "\u6BCD", "\u2EF3", "\u9F9F", "\u2F00", "\u4E00", "\u2F01", "\u4E28", "\u2F02", "\u4E36", "\u2F03", "\u4E3F", "\u2F04", "\u4E59", "\u2F05", "\u4E85", "\u2F06", "\u4E8C", "\u2F07", "\u4EA0", "\u2F08", "\u4EBA", "\u2F09", "\u513F", "\u2F0A", "\u5165", "\u2F0B", "\u516B", "\u2F0C", "\u5182", "\u2F0D", "\u5196", "\u2F0E", "\u51AB", "\u2F0F", "\u51E0", "\u2F10", "\u51F5", "\u2F11", "\u5200", "\u2F12", "\u529B", "\u2F13", "\u52F9", "\u2F14", "\u5315", "\u2F15", "\u531A", "\u2F16", "\u5338", "\u2F17", "\u5341", "\u2F18", "\u535C", "\u2F19", "\u5369", "\u2F1A", "\u5382", "\u2F1B", "\u53B6", "\u2F1C", "\u53C8", "\u2F1D", "\u53E3", "\u2F1E", "\u56D7", "\u2F1F", "\u571F", "\u2F20", "\u58EB", "\u2F21", "\u5902", "\u2F22", "\u590A", "\u2F23", "\u5915", "\u2F24", "\u5927", "\u2F25", "\u5973", "\u2F26", "\u5B50", "\u2F27", "\u5B80", "\u2F28", "\u5BF8", "\u2F29", "\u5C0F", "\u2F2A", "\u5C22", "\u2F2B", "\u5C38", "\u2F2C", "\u5C6E", "\u2F2D", "\u5C71", "\u2F2E", "\u5DDB", "\u2F2F", "\u5DE5", "\u2F30", "\u5DF1", "\u2F31", "\u5DFE", "\u2F32", "\u5E72", "\u2F33", "\u5E7A", "\u2F34", "\u5E7F", "\u2F35", "\u5EF4", "\u2F36", "\u5EFE", "\u2F37", "\u5F0B", "\u2F38", "\u5F13", "\u2F39", "\u5F50", "\u2F3A", "\u5F61", "\u2F3B", "\u5F73", "\u2F3C", "\u5FC3", "\u2F3D", "\u6208", "\u2F3E", "\u6236", "\u2F3F", "\u624B", "\u2F40", "\u652F", "\u2F41", "\u6534", "\u2F42", "\u6587", "\u2F43", "\u6597", "\u2F44", "\u65A4", "\u2F45", "\u65B9", "\u2F46", "\u65E0", "\u2F47", "\u65E5", "\u2F48", "\u66F0", "\u2F49", "\u6708", "\u2F4A", "\u6728", "\u2F4B", "\u6B20", "\u2F4C", "\u6B62", "\u2F4D", "\u6B79", "\u2F4E", "\u6BB3", "\u2F4F", "\u6BCB", "\u2F50", "\u6BD4", "\u2F51", "\u6BDB", "\u2F52", "\u6C0F", "\u2F53", "\u6C14", "\u2F54", "\u6C34", "\u2F55", "\u706B", "\u2F56", "\u722A", "\u2F57", "\u7236", "\u2F58", "\u723B", "\u2F59", "\u723F", "\u2F5A", "\u7247", "\u2F5B", "\u7259", "\u2F5C", "\u725B", "\u2F5D", "\u72AC", "\u2F5E", "\u7384", "\u2F5F", "\u7389", "\u2F60", "\u74DC", "\u2F61", "\u74E6", "\u2F62", "\u7518", "\u2F63", "\u751F", "\u2F64", "\u7528", "\u2F65", "\u7530", "\u2F66", "\u758B", "\u2F67", "\u7592", "\u2F68", "\u7676", "\u2F69", "\u767D", "\u2F6A", "\u76AE", "\u2F6B", "\u76BF", "\u2F6C", "\u76EE", "\u2F6D", "\u77DB", "\u2F6E", "\u77E2", "\u2F6F", "\u77F3", "\u2F70", "\u793A", "\u2F71", "\u79B8", "\u2F72", "\u79BE", "\u2F73", "\u7A74", "\u2F74", "\u7ACB", "\u2F75", "\u7AF9", "\u2F76", "\u7C73", "\u2F77", "\u7CF8", "\u2F78", "\u7F36", "\u2F79", "\u7F51", "\u2F7A", "\u7F8A", "\u2F7B", "\u7FBD", "\u2F7C", "\u8001", "\u2F7D", "\u800C", "\u2F7E", "\u8012", "\u2F7F", "\u8033", "\u2F80", "\u807F", "\u2F81", "\u8089", "\u2F82", "\u81E3", "\u2F83", "\u81EA", "\u2F84", "\u81F3", "\u2F85", "\u81FC", "\u2F86", "\u820C", "\u2F87", "\u821B", "\u2F88", "\u821F", "\u2F89", "\u826E", "\u2F8A", "\u8272", "\u2F8B", "\u8278", "\u2F8C", "\u864D", "\u2F8D", "\u866B", "\u2F8E", "\u8840", "\u2F8F", "\u884C", "\u2F90", "\u8863", "\u2F91", "\u897E", "\u2F92", "\u898B", "\u2F93", "\u89D2", "\u2F94", "\u8A00", "\u2F95", "\u8C37", "\u2F96", "\u8C46", "\u2F97", "\u8C55", "\u2F98", "\u8C78", "\u2F99", "\u8C9D", "\u2F9A", "\u8D64", "\u2F9B", "\u8D70", "\u2F9C", "\u8DB3", "\u2F9D", "\u8EAB", "\u2F9E", "\u8ECA", "\u2F9F", "\u8F9B", "\u2FA0", "\u8FB0", "\u2FA1", "\u8FB5", "\u2FA2", "\u9091", "\u2FA3", "\u9149", "\u2FA4", "\u91C6", "\u2FA5", "\u91CC", "\u2FA6", "\u91D1", "\u2FA7", "\u9577", "\u2FA8", "\u9580", "\u2FA9", "\u961C", "\u2FAA", "\u96B6", "\u2FAB", "\u96B9", "\u2FAC", "\u96E8", "\u2FAD", "\u9751", "\u2FAE", "\u975E", "\u2FAF", "\u9762", "\u2FB0", "\u9769", "\u2FB1", "\u97CB", "\u2FB2", "\u97ED", "\u2FB3", "\u97F3", "\u2FB4", "\u9801", "\u2FB5", "\u98A8", "\u2FB6", "\u98DB", "\u2FB7", "\u98DF", "\u2FB8", "\u9996", "\u2FB9", "\u9999", "\u2FBA", "\u99AC", "\u2FBB", "\u9AA8", "\u2FBC", "\u9AD8", "\u2FBD", "\u9ADF", "\u2FBE", "\u9B25", "\u2FBF", "\u9B2F", "\u2FC0", "\u9B32", "\u2FC1", "\u9B3C", "\u2FC2", "\u9B5A", "\u2FC3", "\u9CE5", "\u2FC4", "\u9E75", "\u2FC5", "\u9E7F", "\u2FC6", "\u9EA5", "\u2FC7", "\u9EBB", "\u2FC8", "\u9EC3", "\u2FC9", "\u9ECD", "\u2FCA", "\u9ED1", "\u2FCB", "\u9EF9", "\u2FCC", "\u9EFD", "\u2FCD", "\u9F0E", "\u2FCE", "\u9F13", "\u2FCF", "\u9F20", "\u2FD0", "\u9F3B", "\u2FD1", "\u9F4A", "\u2FD2", "\u9F52", "\u2FD3", "\u9F8D", "\u2FD4", "\u9F9C", "\u2FD5", "\u9FA0", "\u3036", "\u3012", "\u3038", "\u5341", "\u3039", "\u5344", "\u303A", "\u5345", "\u309B", "\u0020\u3099", "\u309C", "\u0020\u309A", "\u3131", "\u1100", "\u3132", "\u1101", "\u3133", "\u11AA", "\u3134", "\u1102", "\u3135", "\u11AC", "\u3136", "\u11AD", "\u3137", "\u1103", "\u3138", "\u1104", "\u3139", "\u1105", "\u313A", "\u11B0", "\u313B", "\u11B1", "\u313C", "\u11B2", "\u313D", "\u11B3", "\u313E", "\u11B4", "\u313F", "\u11B5", "\u3140", "\u111A", "\u3141", "\u1106", "\u3142", "\u1107", "\u3143", "\u1108", "\u3144", "\u1121", "\u3145", "\u1109", "\u3146", "\u110A", "\u3147", "\u110B", "\u3148", "\u110C", "\u3149", "\u110D", "\u314A", "\u110E", "\u314B", "\u110F", "\u314C", "\u1110", "\u314D", "\u1111", "\u314E", "\u1112", "\u314F", "\u1161", "\u3150", "\u1162", "\u3151", "\u1163", "\u3152", "\u1164", "\u3153", "\u1165", "\u3154", "\u1166", "\u3155", "\u1167", "\u3156", "\u1168", "\u3157", "\u1169", "\u3158", "\u116A", "\u3159", "\u116B", "\u315A", "\u116C", "\u315B", "\u116D", "\u315C", "\u116E", "\u315D", "\u116F", "\u315E", "\u1170", "\u315F", "\u1171", "\u3160", "\u1172", "\u3161", "\u1173", "\u3162", "\u1174", "\u3163", "\u1175", "\u3164", "\u1160", "\u3165", "\u1114", "\u3166", "\u1115", "\u3167", "\u11C7", "\u3168", "\u11C8", "\u3169", "\u11CC", "\u316A", "\u11CE", "\u316B", "\u11D3", "\u316C", "\u11D7", "\u316D", "\u11D9", "\u316E", "\u111C", "\u316F", "\u11DD", "\u3170", "\u11DF", "\u3171", "\u111D", "\u3172", "\u111E", "\u3173", "\u1120", "\u3174", "\u1122", "\u3175", "\u1123", "\u3176", "\u1127", "\u3177", "\u1129", "\u3178", "\u112B", "\u3179", "\u112C", "\u317A", "\u112D", "\u317B", "\u112E", "\u317C", "\u112F", "\u317D", "\u1132", "\u317E", "\u1136", "\u317F", "\u1140", "\u3180", "\u1147", "\u3181", "\u114C", "\u3182", "\u11F1", "\u3183", "\u11F2", "\u3184", "\u1157", "\u3185", "\u1158", "\u3186", "\u1159", "\u3187", "\u1184", "\u3188", "\u1185", "\u3189", "\u1188", "\u318A", "\u1191", "\u318B", "\u1192", "\u318C", "\u1194", "\u318D", "\u119E", "\u318E", "\u11A1", "\u3200", "\u0028\u1100\u0029", "\u3201", "\u0028\u1102\u0029", "\u3202", "\u0028\u1103\u0029", "\u3203", "\u0028\u1105\u0029", "\u3204", "\u0028\u1106\u0029", "\u3205", "\u0028\u1107\u0029", "\u3206", "\u0028\u1109\u0029", "\u3207", "\u0028\u110B\u0029", "\u3208", "\u0028\u110C\u0029", "\u3209", "\u0028\u110E\u0029", "\u320A", "\u0028\u110F\u0029", "\u320B", "\u0028\u1110\u0029", "\u320C", "\u0028\u1111\u0029", "\u320D", "\u0028\u1112\u0029", "\u320E", "\u0028\u1100\u1161\u0029", "\u320F", "\u0028\u1102\u1161\u0029", "\u3210", "\u0028\u1103\u1161\u0029", "\u3211", "\u0028\u1105\u1161\u0029", "\u3212", "\u0028\u1106\u1161\u0029", "\u3213", "\u0028\u1107\u1161\u0029", "\u3214", "\u0028\u1109\u1161\u0029", "\u3215", "\u0028\u110B\u1161\u0029", "\u3216", "\u0028\u110C\u1161\u0029", "\u3217", "\u0028\u110E\u1161\u0029", "\u3218", "\u0028\u110F\u1161\u0029", "\u3219", "\u0028\u1110\u1161\u0029", "\u321A", "\u0028\u1111\u1161\u0029", "\u321B", "\u0028\u1112\u1161\u0029", "\u321C", "\u0028\u110C\u116E\u0029", "\u321D", "\u0028\u110B\u1169\u110C\u1165\u11AB\u0029", "\u321E", "\u0028\u110B\u1169\u1112\u116E\u0029", "\u3220", "\u0028\u4E00\u0029", "\u3221", "\u0028\u4E8C\u0029", "\u3222", "\u0028\u4E09\u0029", "\u3223", "\u0028\u56DB\u0029", "\u3224", "\u0028\u4E94\u0029", "\u3225", "\u0028\u516D\u0029", "\u3226", "\u0028\u4E03\u0029", "\u3227", "\u0028\u516B\u0029", "\u3228", "\u0028\u4E5D\u0029", "\u3229", "\u0028\u5341\u0029", "\u322A", "\u0028\u6708\u0029", "\u322B", "\u0028\u706B\u0029", "\u322C", "\u0028\u6C34\u0029", "\u322D", "\u0028\u6728\u0029", "\u322E", "\u0028\u91D1\u0029", "\u322F", "\u0028\u571F\u0029", "\u3230", "\u0028\u65E5\u0029", "\u3231", "\u0028\u682A\u0029", "\u3232", "\u0028\u6709\u0029", "\u3233", "\u0028\u793E\u0029", "\u3234", "\u0028\u540D\u0029", "\u3235", "\u0028\u7279\u0029", "\u3236", "\u0028\u8CA1\u0029", "\u3237", "\u0028\u795D\u0029", "\u3238", "\u0028\u52B4\u0029", "\u3239", "\u0028\u4EE3\u0029", "\u323A", "\u0028\u547C\u0029", "\u323B", "\u0028\u5B66\u0029", "\u323C", "\u0028\u76E3\u0029", "\u323D", "\u0028\u4F01\u0029", "\u323E", "\u0028\u8CC7\u0029", "\u323F", "\u0028\u5354\u0029", "\u3240", "\u0028\u796D\u0029", "\u3241", "\u0028\u4F11\u0029", "\u3242", "\u0028\u81EA\u0029", "\u3243", "\u0028\u81F3\u0029", "\u32C0", "\u0031\u6708", "\u32C1", "\u0032\u6708", "\u32C2", "\u0033\u6708", "\u32C3", "\u0034\u6708", "\u32C4", "\u0035\u6708", "\u32C5", "\u0036\u6708", "\u32C6", "\u0037\u6708", "\u32C7", "\u0038\u6708", "\u32C8", "\u0039\u6708", "\u32C9", "\u0031\u0030\u6708", "\u32CA", "\u0031\u0031\u6708", "\u32CB", "\u0031\u0032\u6708", "\u3358", "\u0030\u70B9", "\u3359", "\u0031\u70B9", "\u335A", "\u0032\u70B9", "\u335B", "\u0033\u70B9", "\u335C", "\u0034\u70B9", "\u335D", "\u0035\u70B9", "\u335E", "\u0036\u70B9", "\u335F", "\u0037\u70B9", "\u3360", "\u0038\u70B9", "\u3361", "\u0039\u70B9", "\u3362", "\u0031\u0030\u70B9", "\u3363", "\u0031\u0031\u70B9", "\u3364", "\u0031\u0032\u70B9", "\u3365", "\u0031\u0033\u70B9", "\u3366", "\u0031\u0034\u70B9", "\u3367", "\u0031\u0035\u70B9", "\u3368", "\u0031\u0036\u70B9", "\u3369", "\u0031\u0037\u70B9", "\u336A", "\u0031\u0038\u70B9", "\u336B", "\u0031\u0039\u70B9", "\u336C", "\u0032\u0030\u70B9", "\u336D", "\u0032\u0031\u70B9", "\u336E", "\u0032\u0032\u70B9", "\u336F", "\u0032\u0033\u70B9", "\u3370", "\u0032\u0034\u70B9", "\u33E0", "\u0031\u65E5", "\u33E1", "\u0032\u65E5", "\u33E2", "\u0033\u65E5", "\u33E3", "\u0034\u65E5", "\u33E4", "\u0035\u65E5", "\u33E5", "\u0036\u65E5", "\u33E6", "\u0037\u65E5", "\u33E7", "\u0038\u65E5", "\u33E8", "\u0039\u65E5", "\u33E9", "\u0031\u0030\u65E5", "\u33EA", "\u0031\u0031\u65E5", "\u33EB", "\u0031\u0032\u65E5", "\u33EC", "\u0031\u0033\u65E5", "\u33ED", "\u0031\u0034\u65E5", "\u33EE", "\u0031\u0035\u65E5", "\u33EF", "\u0031\u0036\u65E5", "\u33F0", "\u0031\u0037\u65E5", "\u33F1", "\u0031\u0038\u65E5", "\u33F2", "\u0031\u0039\u65E5", "\u33F3", "\u0032\u0030\u65E5", "\u33F4", "\u0032\u0031\u65E5", "\u33F5", "\u0032\u0032\u65E5", "\u33F6", "\u0032\u0033\u65E5", "\u33F7", "\u0032\u0034\u65E5", "\u33F8", "\u0032\u0035\u65E5", "\u33F9", "\u0032\u0036\u65E5", "\u33FA", "\u0032\u0037\u65E5", "\u33FB", "\u0032\u0038\u65E5", "\u33FC", "\u0032\u0039\u65E5", "\u33FD", "\u0033\u0030\u65E5", "\u33FE", "\u0033\u0031\u65E5", "\uFB00", "\u0066\u0066", "\uFB01", "\u0066\u0069", "\uFB02", "\u0066\u006C", "\uFB03", "\u0066\u0066\u0069", "\uFB04", "\u0066\u0066\u006C", "\uFB05", "\u017F\u0074", "\uFB06", "\u0073\u0074", "\uFB13", "\u0574\u0576", "\uFB14", "\u0574\u0565", "\uFB15", "\u0574\u056B", "\uFB16", "\u057E\u0576", "\uFB17", "\u0574\u056D", "\uFB4F", "\u05D0\u05DC", "\uFB50", "\u0671", "\uFB51", "\u0671", "\uFB52", "\u067B", "\uFB53", "\u067B", "\uFB54", "\u067B", "\uFB55", "\u067B", "\uFB56", "\u067E", "\uFB57", "\u067E", "\uFB58", "\u067E", "\uFB59", "\u067E", "\uFB5A", "\u0680", "\uFB5B", "\u0680", "\uFB5C", "\u0680", "\uFB5D", "\u0680", "\uFB5E", "\u067A", "\uFB5F", "\u067A", "\uFB60", "\u067A", "\uFB61", "\u067A", "\uFB62", "\u067F", "\uFB63", "\u067F", "\uFB64", "\u067F", "\uFB65", "\u067F", "\uFB66", "\u0679", "\uFB67", "\u0679", "\uFB68", "\u0679", "\uFB69", "\u0679", "\uFB6A", "\u06A4", "\uFB6B", "\u06A4", "\uFB6C", "\u06A4", "\uFB6D", "\u06A4", "\uFB6E", "\u06A6", "\uFB6F", "\u06A6", "\uFB70", "\u06A6", "\uFB71", "\u06A6", "\uFB72", "\u0684", "\uFB73", "\u0684", "\uFB74", "\u0684", "\uFB75", "\u0684", "\uFB76", "\u0683", "\uFB77", "\u0683", "\uFB78", "\u0683", "\uFB79", "\u0683", "\uFB7A", "\u0686", "\uFB7B", "\u0686", "\uFB7C", "\u0686", "\uFB7D", "\u0686", "\uFB7E", "\u0687", "\uFB7F", "\u0687", "\uFB80", "\u0687", "\uFB81", "\u0687", "\uFB82", "\u068D", "\uFB83", "\u068D", "\uFB84", "\u068C", "\uFB85", "\u068C", "\uFB86", "\u068E", "\uFB87", "\u068E", "\uFB88", "\u0688", "\uFB89", "\u0688", "\uFB8A", "\u0698", "\uFB8B", "\u0698", "\uFB8C", "\u0691", "\uFB8D", "\u0691", "\uFB8E", "\u06A9", "\uFB8F", "\u06A9", "\uFB90", "\u06A9", "\uFB91", "\u06A9", "\uFB92", "\u06AF", "\uFB93", "\u06AF", "\uFB94", "\u06AF", "\uFB95", "\u06AF", "\uFB96", "\u06B3", "\uFB97", "\u06B3", "\uFB98", "\u06B3", "\uFB99", "\u06B3", "\uFB9A", "\u06B1", "\uFB9B", "\u06B1", "\uFB9C", "\u06B1", "\uFB9D", "\u06B1", "\uFB9E", "\u06BA", "\uFB9F", "\u06BA", "\uFBA0", "\u06BB", "\uFBA1", "\u06BB", "\uFBA2", "\u06BB", "\uFBA3", "\u06BB", "\uFBA4", "\u06C0", "\uFBA5", "\u06C0", "\uFBA6", "\u06C1", "\uFBA7", "\u06C1", "\uFBA8", "\u06C1", "\uFBA9", "\u06C1", "\uFBAA", "\u06BE", "\uFBAB", "\u06BE", "\uFBAC", "\u06BE", "\uFBAD", "\u06BE", "\uFBAE", "\u06D2", "\uFBAF", "\u06D2", "\uFBB0", "\u06D3", "\uFBB1", "\u06D3", "\uFBD3", "\u06AD", "\uFBD4", "\u06AD", "\uFBD5", "\u06AD", "\uFBD6", "\u06AD", "\uFBD7", "\u06C7", "\uFBD8", "\u06C7", "\uFBD9", "\u06C6", "\uFBDA", "\u06C6", "\uFBDB", "\u06C8", "\uFBDC", "\u06C8", "\uFBDD", "\u0677", "\uFBDE", "\u06CB", "\uFBDF", "\u06CB", "\uFBE0", "\u06C5", "\uFBE1", "\u06C5", "\uFBE2", "\u06C9", "\uFBE3", "\u06C9", "\uFBE4", "\u06D0", "\uFBE5", "\u06D0", "\uFBE6", "\u06D0", "\uFBE7", "\u06D0", "\uFBE8", "\u0649", "\uFBE9", "\u0649", "\uFBEA", "\u0626\u0627", "\uFBEB", "\u0626\u0627", "\uFBEC", "\u0626\u06D5", "\uFBED", "\u0626\u06D5", "\uFBEE", "\u0626\u0648", "\uFBEF", "\u0626\u0648", "\uFBF0", "\u0626\u06C7", "\uFBF1", "\u0626\u06C7", "\uFBF2", "\u0626\u06C6", "\uFBF3", "\u0626\u06C6", "\uFBF4", "\u0626\u06C8", "\uFBF5", "\u0626\u06C8", "\uFBF6", "\u0626\u06D0", "\uFBF7", "\u0626\u06D0", "\uFBF8", "\u0626\u06D0", "\uFBF9", "\u0626\u0649", "\uFBFA", "\u0626\u0649", "\uFBFB", "\u0626\u0649", "\uFBFC", "\u06CC", "\uFBFD", "\u06CC", "\uFBFE", "\u06CC", "\uFBFF", "\u06CC", "\uFC00", "\u0626\u062C", "\uFC01", "\u0626\u062D", "\uFC02", "\u0626\u0645", "\uFC03", "\u0626\u0649", "\uFC04", "\u0626\u064A", "\uFC05", "\u0628\u062C", "\uFC06", "\u0628\u062D", "\uFC07", "\u0628\u062E", "\uFC08", "\u0628\u0645", "\uFC09", "\u0628\u0649", "\uFC0A", "\u0628\u064A", "\uFC0B", "\u062A\u062C", "\uFC0C", "\u062A\u062D", "\uFC0D", "\u062A\u062E", "\uFC0E", "\u062A\u0645", "\uFC0F", "\u062A\u0649", "\uFC10", "\u062A\u064A", "\uFC11", "\u062B\u062C", "\uFC12", "\u062B\u0645", "\uFC13", "\u062B\u0649", "\uFC14", "\u062B\u064A", "\uFC15", "\u062C\u062D", "\uFC16", "\u062C\u0645", "\uFC17", "\u062D\u062C", "\uFC18", "\u062D\u0645", "\uFC19", "\u062E\u062C", "\uFC1A", "\u062E\u062D", "\uFC1B", "\u062E\u0645", "\uFC1C", "\u0633\u062C", "\uFC1D", "\u0633\u062D", "\uFC1E", "\u0633\u062E", "\uFC1F", "\u0633\u0645", "\uFC20", "\u0635\u062D", "\uFC21", "\u0635\u0645", "\uFC22", "\u0636\u062C", "\uFC23", "\u0636\u062D", "\uFC24", "\u0636\u062E", "\uFC25", "\u0636\u0645", "\uFC26", "\u0637\u062D", "\uFC27", "\u0637\u0645", "\uFC28", "\u0638\u0645", "\uFC29", "\u0639\u062C", "\uFC2A", "\u0639\u0645", "\uFC2B", "\u063A\u062C", "\uFC2C", "\u063A\u0645", "\uFC2D", "\u0641\u062C", "\uFC2E", "\u0641\u062D", "\uFC2F", "\u0641\u062E", "\uFC30", "\u0641\u0645", "\uFC31", "\u0641\u0649", "\uFC32", "\u0641\u064A", "\uFC33", "\u0642\u062D", "\uFC34", "\u0642\u0645", "\uFC35", "\u0642\u0649", "\uFC36", "\u0642\u064A", "\uFC37", "\u0643\u0627", "\uFC38", "\u0643\u062C", "\uFC39", "\u0643\u062D", "\uFC3A", "\u0643\u062E", "\uFC3B", "\u0643\u0644", "\uFC3C", "\u0643\u0645", "\uFC3D", "\u0643\u0649", "\uFC3E", "\u0643\u064A", "\uFC3F", "\u0644\u062C", "\uFC40", "\u0644\u062D", "\uFC41", "\u0644\u062E", "\uFC42", "\u0644\u0645", "\uFC43", "\u0644\u0649", "\uFC44", "\u0644\u064A", "\uFC45", "\u0645\u062C", "\uFC46", "\u0645\u062D", "\uFC47", "\u0645\u062E", "\uFC48", "\u0645\u0645", "\uFC49", "\u0645\u0649", "\uFC4A", "\u0645\u064A", "\uFC4B", "\u0646\u062C", "\uFC4C", "\u0646\u062D", "\uFC4D", "\u0646\u062E", "\uFC4E", "\u0646\u0645", "\uFC4F", "\u0646\u0649", "\uFC50", "\u0646\u064A", "\uFC51", "\u0647\u062C", "\uFC52", "\u0647\u0645", "\uFC53", "\u0647\u0649", "\uFC54", "\u0647\u064A", "\uFC55", "\u064A\u062C", "\uFC56", "\u064A\u062D", "\uFC57", "\u064A\u062E", "\uFC58", "\u064A\u0645", "\uFC59", "\u064A\u0649", "\uFC5A", "\u064A\u064A", "\uFC5B", "\u0630\u0670", "\uFC5C", "\u0631\u0670", "\uFC5D", "\u0649\u0670", "\uFC5E", "\u0020\u064C\u0651", "\uFC5F", "\u0020\u064D\u0651", "\uFC60", "\u0020\u064E\u0651", "\uFC61", "\u0020\u064F\u0651", "\uFC62", "\u0020\u0650\u0651", "\uFC63", "\u0020\u0651\u0670", "\uFC64", "\u0626\u0631", "\uFC65", "\u0626\u0632", "\uFC66", "\u0626\u0645", "\uFC67", "\u0626\u0646", "\uFC68", "\u0626\u0649", "\uFC69", "\u0626\u064A", "\uFC6A", "\u0628\u0631", "\uFC6B", "\u0628\u0632", "\uFC6C", "\u0628\u0645", "\uFC6D", "\u0628\u0646", "\uFC6E", "\u0628\u0649", "\uFC6F", "\u0628\u064A", "\uFC70", "\u062A\u0631", "\uFC71", "\u062A\u0632", "\uFC72", "\u062A\u0645", "\uFC73", "\u062A\u0646", "\uFC74", "\u062A\u0649", "\uFC75", "\u062A\u064A", "\uFC76", "\u062B\u0631", "\uFC77", "\u062B\u0632", "\uFC78", "\u062B\u0645", "\uFC79", "\u062B\u0646", "\uFC7A", "\u062B\u0649", "\uFC7B", "\u062B\u064A", "\uFC7C", "\u0641\u0649", "\uFC7D", "\u0641\u064A", "\uFC7E", "\u0642\u0649", "\uFC7F", "\u0642\u064A", "\uFC80", "\u0643\u0627", "\uFC81", "\u0643\u0644", "\uFC82", "\u0643\u0645", "\uFC83", "\u0643\u0649", "\uFC84", "\u0643\u064A", "\uFC85", "\u0644\u0645", "\uFC86", "\u0644\u0649", "\uFC87", "\u0644\u064A", "\uFC88", "\u0645\u0627", "\uFC89", "\u0645\u0645", "\uFC8A", "\u0646\u0631", "\uFC8B", "\u0646\u0632", "\uFC8C", "\u0646\u0645", "\uFC8D", "\u0646\u0646", "\uFC8E", "\u0646\u0649", "\uFC8F", "\u0646\u064A", "\uFC90", "\u0649\u0670", "\uFC91", "\u064A\u0631", "\uFC92", "\u064A\u0632", "\uFC93", "\u064A\u0645", "\uFC94", "\u064A\u0646", "\uFC95", "\u064A\u0649", "\uFC96", "\u064A\u064A", "\uFC97", "\u0626\u062C", "\uFC98", "\u0626\u062D", "\uFC99", "\u0626\u062E", "\uFC9A", "\u0626\u0645", "\uFC9B", "\u0626\u0647", "\uFC9C", "\u0628\u062C", "\uFC9D", "\u0628\u062D", "\uFC9E", "\u0628\u062E", "\uFC9F", "\u0628\u0645", "\uFCA0", "\u0628\u0647", "\uFCA1", "\u062A\u062C", "\uFCA2", "\u062A\u062D", "\uFCA3", "\u062A\u062E", "\uFCA4", "\u062A\u0645", "\uFCA5", "\u062A\u0647", "\uFCA6", "\u062B\u0645", "\uFCA7", "\u062C\u062D", "\uFCA8", "\u062C\u0645", "\uFCA9", "\u062D\u062C", "\uFCAA", "\u062D\u0645", "\uFCAB", "\u062E\u062C", "\uFCAC", "\u062E\u0645", "\uFCAD", "\u0633\u062C", "\uFCAE", "\u0633\u062D", "\uFCAF", "\u0633\u062E", "\uFCB0", "\u0633\u0645", "\uFCB1", "\u0635\u062D", "\uFCB2", "\u0635\u062E", "\uFCB3", "\u0635\u0645", "\uFCB4", "\u0636\u062C", "\uFCB5", "\u0636\u062D", "\uFCB6", "\u0636\u062E", "\uFCB7", "\u0636\u0645", "\uFCB8", "\u0637\u062D", "\uFCB9", "\u0638\u0645", "\uFCBA", "\u0639\u062C", "\uFCBB", "\u0639\u0645", "\uFCBC", "\u063A\u062C", "\uFCBD", "\u063A\u0645", "\uFCBE", "\u0641\u062C", "\uFCBF", "\u0641\u062D", "\uFCC0", "\u0641\u062E", "\uFCC1", "\u0641\u0645", "\uFCC2", "\u0642\u062D", "\uFCC3", "\u0642\u0645", "\uFCC4", "\u0643\u062C", "\uFCC5", "\u0643\u062D", "\uFCC6", "\u0643\u062E", "\uFCC7", "\u0643\u0644", "\uFCC8", "\u0643\u0645", "\uFCC9", "\u0644\u062C", "\uFCCA", "\u0644\u062D", "\uFCCB", "\u0644\u062E", "\uFCCC", "\u0644\u0645", "\uFCCD", "\u0644\u0647", "\uFCCE", "\u0645\u062C", "\uFCCF", "\u0645\u062D", "\uFCD0", "\u0645\u062E", "\uFCD1", "\u0645\u0645", "\uFCD2", "\u0646\u062C", "\uFCD3", "\u0646\u062D", "\uFCD4", "\u0646\u062E", "\uFCD5", "\u0646\u0645", "\uFCD6", "\u0646\u0647", "\uFCD7", "\u0647\u062C", "\uFCD8", "\u0647\u0645", "\uFCD9", "\u0647\u0670", "\uFCDA", "\u064A\u062C", "\uFCDB", "\u064A\u062D", "\uFCDC", "\u064A\u062E", "\uFCDD", "\u064A\u0645", "\uFCDE", "\u064A\u0647", "\uFCDF", "\u0626\u0645", "\uFCE0", "\u0626\u0647", "\uFCE1", "\u0628\u0645", "\uFCE2", "\u0628\u0647", "\uFCE3", "\u062A\u0645", "\uFCE4", "\u062A\u0647", "\uFCE5", "\u062B\u0645", "\uFCE6", "\u062B\u0647", "\uFCE7", "\u0633\u0645", "\uFCE8", "\u0633\u0647", "\uFCE9", "\u0634\u0645", "\uFCEA", "\u0634\u0647", "\uFCEB", "\u0643\u0644", "\uFCEC", "\u0643\u0645", "\uFCED", "\u0644\u0645", "\uFCEE", "\u0646\u0645", "\uFCEF", "\u0646\u0647", "\uFCF0", "\u064A\u0645", "\uFCF1", "\u064A\u0647", "\uFCF2", "\u0640\u064E\u0651", "\uFCF3", "\u0640\u064F\u0651", "\uFCF4", "\u0640\u0650\u0651", "\uFCF5", "\u0637\u0649", "\uFCF6", "\u0637\u064A", "\uFCF7", "\u0639\u0649", "\uFCF8", "\u0639\u064A", "\uFCF9", "\u063A\u0649", "\uFCFA", "\u063A\u064A", "\uFCFB", "\u0633\u0649", "\uFCFC", "\u0633\u064A", "\uFCFD", "\u0634\u0649", "\uFCFE", "\u0634\u064A", "\uFCFF", "\u062D\u0649", "\uFD00", "\u062D\u064A", "\uFD01", "\u062C\u0649", "\uFD02", "\u062C\u064A", "\uFD03", "\u062E\u0649", "\uFD04", "\u062E\u064A", "\uFD05", "\u0635\u0649", "\uFD06", "\u0635\u064A", "\uFD07", "\u0636\u0649", "\uFD08", "\u0636\u064A", "\uFD09", "\u0634\u062C", "\uFD0A", "\u0634\u062D", "\uFD0B", "\u0634\u062E", "\uFD0C", "\u0634\u0645", "\uFD0D", "\u0634\u0631", "\uFD0E", "\u0633\u0631", "\uFD0F", "\u0635\u0631", "\uFD10", "\u0636\u0631", "\uFD11", "\u0637\u0649", "\uFD12", "\u0637\u064A", "\uFD13", "\u0639\u0649", "\uFD14", "\u0639\u064A", "\uFD15", "\u063A\u0649", "\uFD16", "\u063A\u064A", "\uFD17", "\u0633\u0649", "\uFD18", "\u0633\u064A", "\uFD19", "\u0634\u0649", "\uFD1A", "\u0634\u064A", "\uFD1B", "\u062D\u0649", "\uFD1C", "\u062D\u064A", "\uFD1D", "\u062C\u0649", "\uFD1E", "\u062C\u064A", "\uFD1F", "\u062E\u0649", "\uFD20", "\u062E\u064A", "\uFD21", "\u0635\u0649", "\uFD22", "\u0635\u064A", "\uFD23", "\u0636\u0649", "\uFD24", "\u0636\u064A", "\uFD25", "\u0634\u062C", "\uFD26", "\u0634\u062D", "\uFD27", "\u0634\u062E", "\uFD28", "\u0634\u0645", "\uFD29", "\u0634\u0631", "\uFD2A", "\u0633\u0631", "\uFD2B", "\u0635\u0631", "\uFD2C", "\u0636\u0631", "\uFD2D", "\u0634\u062C", "\uFD2E", "\u0634\u062D", "\uFD2F", "\u0634\u062E", "\uFD30", "\u0634\u0645", "\uFD31", "\u0633\u0647", "\uFD32", "\u0634\u0647", "\uFD33", "\u0637\u0645", "\uFD34", "\u0633\u062C", "\uFD35", "\u0633\u062D", "\uFD36", "\u0633\u062E", "\uFD37", "\u0634\u062C", "\uFD38", "\u0634\u062D", "\uFD39", "\u0634\u062E", "\uFD3A", "\u0637\u0645", "\uFD3B", "\u0638\u0645", "\uFD3C", "\u0627\u064B", "\uFD3D", "\u0627\u064B", "\uFD50", "\u062A\u062C\u0645", "\uFD51", "\u062A\u062D\u062C", "\uFD52", "\u062A\u062D\u062C", "\uFD53", "\u062A\u062D\u0645", "\uFD54", "\u062A\u062E\u0645", "\uFD55", "\u062A\u0645\u062C", "\uFD56", "\u062A\u0645\u062D", "\uFD57", "\u062A\u0645\u062E", "\uFD58", "\u062C\u0645\u062D", "\uFD59", "\u062C\u0645\u062D", "\uFD5A", "\u062D\u0645\u064A", "\uFD5B", "\u062D\u0645\u0649", "\uFD5C", "\u0633\u062D\u062C", "\uFD5D", "\u0633\u062C\u062D", "\uFD5E", "\u0633\u062C\u0649", "\uFD5F", "\u0633\u0645\u062D", "\uFD60", "\u0633\u0645\u062D", "\uFD61", "\u0633\u0645\u062C", "\uFD62", "\u0633\u0645\u0645", "\uFD63", "\u0633\u0645\u0645", "\uFD64", "\u0635\u062D\u062D", "\uFD65", "\u0635\u062D\u062D", "\uFD66", "\u0635\u0645\u0645", "\uFD67", "\u0634\u062D\u0645", "\uFD68", "\u0634\u062D\u0645", "\uFD69", "\u0634\u062C\u064A", "\uFD6A", "\u0634\u0645\u062E", "\uFD6B", "\u0634\u0645\u062E", "\uFD6C", "\u0634\u0645\u0645", "\uFD6D", "\u0634\u0645\u0645", "\uFD6E", "\u0636\u062D\u0649", "\uFD6F", "\u0636\u062E\u0645", "\uFD70", "\u0636\u062E\u0645", "\uFD71", "\u0637\u0645\u062D", "\uFD72", "\u0637\u0645\u062D", "\uFD73", "\u0637\u0645\u0645", "\uFD74", "\u0637\u0645\u064A", "\uFD75", "\u0639\u062C\u0645", "\uFD76", "\u0639\u0645\u0645", "\uFD77", "\u0639\u0645\u0645", "\uFD78", "\u0639\u0645\u0649", "\uFD79", "\u063A\u0645\u0645", "\uFD7A", "\u063A\u0645\u064A", "\uFD7B", "\u063A\u0645\u0649", "\uFD7C", "\u0641\u062E\u0645", "\uFD7D", "\u0641\u062E\u0645", "\uFD7E", "\u0642\u0645\u062D", "\uFD7F", "\u0642\u0645\u0645", "\uFD80", "\u0644\u062D\u0645", "\uFD81", "\u0644\u062D\u064A", "\uFD82", "\u0644\u062D\u0649", "\uFD83", "\u0644\u062C\u062C", "\uFD84", "\u0644\u062C\u062C", "\uFD85", "\u0644\u062E\u0645", "\uFD86", "\u0644\u062E\u0645", "\uFD87", "\u0644\u0645\u062D", "\uFD88", "\u0644\u0645\u062D", "\uFD89", "\u0645\u062D\u062C", "\uFD8A", "\u0645\u062D\u0645", "\uFD8B", "\u0645\u062D\u064A", "\uFD8C", "\u0645\u062C\u062D", "\uFD8D", "\u0645\u062C\u0645", "\uFD8E", "\u0645\u062E\u062C", "\uFD8F", "\u0645\u062E\u0645", "\uFD92", "\u0645\u062C\u062E", "\uFD93", "\u0647\u0645\u062C", "\uFD94", "\u0647\u0645\u0645", "\uFD95", "\u0646\u062D\u0645", "\uFD96", "\u0646\u062D\u0649", "\uFD97", "\u0646\u062C\u0645", "\uFD98", "\u0646\u062C\u0645", "\uFD99", "\u0646\u062C\u0649", "\uFD9A", "\u0646\u0645\u064A", "\uFD9B", "\u0646\u0645\u0649", "\uFD9C", "\u064A\u0645\u0645", "\uFD9D", "\u064A\u0645\u0645", "\uFD9E", "\u0628\u062E\u064A", "\uFD9F", "\u062A\u062C\u064A", "\uFDA0", "\u062A\u062C\u0649", "\uFDA1", "\u062A\u062E\u064A", "\uFDA2", "\u062A\u062E\u0649", "\uFDA3", "\u062A\u0645\u064A", "\uFDA4", "\u062A\u0645\u0649", "\uFDA5", "\u062C\u0645\u064A", "\uFDA6", "\u062C\u062D\u0649", "\uFDA7", "\u062C\u0645\u0649", "\uFDA8", "\u0633\u062E\u0649", "\uFDA9", "\u0635\u062D\u064A", "\uFDAA", "\u0634\u062D\u064A", "\uFDAB", "\u0636\u062D\u064A", "\uFDAC", "\u0644\u062C\u064A", "\uFDAD", "\u0644\u0645\u064A", "\uFDAE", "\u064A\u062D\u064A", "\uFDAF", "\u064A\u062C\u064A", "\uFDB0", "\u064A\u0645\u064A", "\uFDB1", "\u0645\u0645\u064A", "\uFDB2", "\u0642\u0645\u064A", "\uFDB3", "\u0646\u062D\u064A", "\uFDB4", "\u0642\u0645\u062D", "\uFDB5", "\u0644\u062D\u0645", "\uFDB6", "\u0639\u0645\u064A", "\uFDB7", "\u0643\u0645\u064A", "\uFDB8", "\u0646\u062C\u062D", "\uFDB9", "\u0645\u062E\u064A", "\uFDBA", "\u0644\u062C\u0645", "\uFDBB", "\u0643\u0645\u0645", "\uFDBC", "\u0644\u062C\u0645", "\uFDBD", "\u0646\u062C\u062D", "\uFDBE", "\u062C\u062D\u064A", "\uFDBF", "\u062D\u062C\u064A", "\uFDC0", "\u0645\u062C\u064A", "\uFDC1", "\u0641\u0645\u064A", "\uFDC2", "\u0628\u062D\u064A", "\uFDC3", "\u0643\u0645\u0645", "\uFDC4", "\u0639\u062C\u0645", "\uFDC5", "\u0635\u0645\u0645", "\uFDC6", "\u0633\u062E\u064A", "\uFDC7", "\u0646\u062C\u064A", "\uFE49", "\u203E", "\uFE4A", "\u203E", "\uFE4B", "\u203E", "\uFE4C", "\u203E", "\uFE4D", "\u005F", "\uFE4E", "\u005F", "\uFE4F", "\u005F", "\uFE80", "\u0621", "\uFE81", "\u0622", "\uFE82", "\u0622", "\uFE83", "\u0623", "\uFE84", "\u0623", "\uFE85", "\u0624", "\uFE86", "\u0624", "\uFE87", "\u0625", "\uFE88", "\u0625", "\uFE89", "\u0626", "\uFE8A", "\u0626", "\uFE8B", "\u0626", "\uFE8C", "\u0626", "\uFE8D", "\u0627", "\uFE8E", "\u0627", "\uFE8F", "\u0628", "\uFE90", "\u0628", "\uFE91", "\u0628", "\uFE92", "\u0628", "\uFE93", "\u0629", "\uFE94", "\u0629", "\uFE95", "\u062A", "\uFE96", "\u062A", "\uFE97", "\u062A", "\uFE98", "\u062A", "\uFE99", "\u062B", "\uFE9A", "\u062B", "\uFE9B", "\u062B", "\uFE9C", "\u062B", "\uFE9D", "\u062C", "\uFE9E", "\u062C", "\uFE9F", "\u062C", "\uFEA0", "\u062C", "\uFEA1", "\u062D", "\uFEA2", "\u062D", "\uFEA3", "\u062D", "\uFEA4", "\u062D", "\uFEA5", "\u062E", "\uFEA6", "\u062E", "\uFEA7", "\u062E", "\uFEA8", "\u062E", "\uFEA9", "\u062F", "\uFEAA", "\u062F", "\uFEAB", "\u0630", "\uFEAC", "\u0630", "\uFEAD", "\u0631", "\uFEAE", "\u0631", "\uFEAF", "\u0632", "\uFEB0", "\u0632", "\uFEB1", "\u0633", "\uFEB2", "\u0633", "\uFEB3", "\u0633", "\uFEB4", "\u0633", "\uFEB5", "\u0634", "\uFEB6", "\u0634", "\uFEB7", "\u0634", "\uFEB8", "\u0634", "\uFEB9", "\u0635", "\uFEBA", "\u0635", "\uFEBB", "\u0635", "\uFEBC", "\u0635", "\uFEBD", "\u0636", "\uFEBE", "\u0636", "\uFEBF", "\u0636", "\uFEC0", "\u0636", "\uFEC1", "\u0637", "\uFEC2", "\u0637", "\uFEC3", "\u0637", "\uFEC4", "\u0637", "\uFEC5", "\u0638", "\uFEC6", "\u0638", "\uFEC7", "\u0638", "\uFEC8", "\u0638", "\uFEC9", "\u0639", "\uFECA", "\u0639", "\uFECB", "\u0639", "\uFECC", "\u0639", "\uFECD", "\u063A", "\uFECE", "\u063A", "\uFECF", "\u063A", "\uFED0", "\u063A", "\uFED1", "\u0641", "\uFED2", "\u0641", "\uFED3", "\u0641", "\uFED4", "\u0641", "\uFED5", "\u0642", "\uFED6", "\u0642", "\uFED7", "\u0642", "\uFED8", "\u0642", "\uFED9", "\u0643", "\uFEDA", "\u0643", "\uFEDB", "\u0643", "\uFEDC", "\u0643", "\uFEDD", "\u0644", "\uFEDE", "\u0644", "\uFEDF", "\u0644", "\uFEE0", "\u0644", "\uFEE1", "\u0645", "\uFEE2", "\u0645", "\uFEE3", "\u0645", "\uFEE4", "\u0645", "\uFEE5", "\u0646", "\uFEE6", "\u0646", "\uFEE7", "\u0646", "\uFEE8", "\u0646", "\uFEE9", "\u0647", "\uFEEA", "\u0647", "\uFEEB", "\u0647", "\uFEEC", "\u0647", "\uFEED", "\u0648", "\uFEEE", "\u0648", "\uFEEF", "\u0649", "\uFEF0", "\u0649", "\uFEF1", "\u064A", "\uFEF2", "\u064A", "\uFEF3", "\u064A", "\uFEF4", "\u064A", "\uFEF5", "\u0644\u0622", "\uFEF6", "\u0644\u0622", "\uFEF7", "\u0644\u0623", "\uFEF8", "\u0644\u0623", "\uFEF9", "\u0644\u0625", "\uFEFA", "\u0644\u0625", "\uFEFB", "\u0644\u0627", "\uFEFC", "\u0644\u0627" ]; }); function reverseIfRtl(chars) { const charsLength = chars.length; if (charsLength <= 1 || !isRTLRangeFor(chars.charCodeAt(0))) { return chars; } const buf = []; for (let ii = charsLength - 1; ii >= 0; ii--) { buf.push(chars[ii]); } return buf.join(""); } /***/ }), /* 22 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.MarkupAnnotation = exports.AnnotationFactory = exports.AnnotationBorderStyle = exports.Annotation = void 0; exports.getQuadPoints = getQuadPoints; var _util = __w_pdfjs_require__(2); var _core_utils = __w_pdfjs_require__(9); var _default_appearance = __w_pdfjs_require__(23); var _primitives = __w_pdfjs_require__(5); var _bidi = __w_pdfjs_require__(59); var _catalog = __w_pdfjs_require__(64); var _colorspace = __w_pdfjs_require__(24); var _file_spec = __w_pdfjs_require__(66); var _object_loader = __w_pdfjs_require__(70); var _operator_list = __w_pdfjs_require__(62); var _stream = __w_pdfjs_require__(10); var _writer = __w_pdfjs_require__(71); var _factory = __w_pdfjs_require__(74); class AnnotationFactory { static create(xref, ref, pdfManager, idFactory, collectFields) { return Promise.all([pdfManager.ensureCatalog("acroForm"), collectFields ? this._getPageIndex(xref, ref, pdfManager) : -1]).then(([acroForm, pageIndex]) => pdfManager.ensure(this, "_create", [xref, ref, pdfManager, idFactory, acroForm, collectFields, pageIndex])); } static _create(xref, ref, pdfManager, idFactory, acroForm, collectFields, pageIndex = -1) { const dict = xref.fetchIfRef(ref); if (!(0, _primitives.isDict)(dict)) { return undefined; } const id = (0, _primitives.isRef)(ref) ? ref.toString() : `annot_${idFactory.createObjId()}`; let subtype = dict.get("Subtype"); subtype = (0, _primitives.isName)(subtype) ? subtype.name : null; const parameters = { xref, ref, dict, subtype, id, pdfManager, acroForm: acroForm instanceof _primitives.Dict ? acroForm : _primitives.Dict.empty, collectFields, pageIndex }; switch (subtype) { case "Link": return new LinkAnnotation(parameters); case "Text": return new TextAnnotation(parameters); case "Widget": let fieldType = (0, _core_utils.getInheritableProperty)({ dict, key: "FT" }); fieldType = (0, _primitives.isName)(fieldType) ? fieldType.name : null; switch (fieldType) { case "Tx": return new TextWidgetAnnotation(parameters); case "Btn": return new ButtonWidgetAnnotation(parameters); case "Ch": return new ChoiceWidgetAnnotation(parameters); case "Sig": return new SignatureWidgetAnnotation(parameters); } (0, _util.warn)(`Unimplemented widget field type "${fieldType}", ` + "falling back to base field type."); return new WidgetAnnotation(parameters); case "Popup": return new PopupAnnotation(parameters); case "FreeText": return new FreeTextAnnotation(parameters); case "Line": return new LineAnnotation(parameters); case "Square": return new SquareAnnotation(parameters); case "Circle": return new CircleAnnotation(parameters); case "PolyLine": return new PolylineAnnotation(parameters); case "Polygon": return new PolygonAnnotation(parameters); case "Caret": return new CaretAnnotation(parameters); case "Ink": return new InkAnnotation(parameters); case "Highlight": return new HighlightAnnotation(parameters); case "Underline": return new UnderlineAnnotation(parameters); case "Squiggly": return new SquigglyAnnotation(parameters); case "StrikeOut": return new StrikeOutAnnotation(parameters); case "Stamp": return new StampAnnotation(parameters); case "FileAttachment": return new FileAttachmentAnnotation(parameters); default: if (!collectFields) { if (!subtype) { (0, _util.warn)("Annotation is missing the required /Subtype."); } else { (0, _util.warn)(`Unimplemented annotation type "${subtype}", ` + "falling back to base annotation."); } } return new Annotation(parameters); } } static async _getPageIndex(xref, ref, pdfManager) { try { const annotDict = await xref.fetchIfRefAsync(ref); if (!(0, _primitives.isDict)(annotDict)) { return -1; } const pageRef = annotDict.getRaw("P"); if (!(0, _primitives.isRef)(pageRef)) { return -1; } const pageIndex = await pdfManager.ensureCatalog("getPageIndex", [pageRef]); return pageIndex; } catch (ex) { (0, _util.warn)(`_getPageIndex: "${ex}".`); return -1; } } } exports.AnnotationFactory = AnnotationFactory; function getRgbColor(color, defaultColor = new Uint8ClampedArray(3)) { if (!Array.isArray(color)) { return defaultColor; } const rgbColor = defaultColor || new Uint8ClampedArray(3); switch (color.length) { case 0: return null; case 1: _colorspace.ColorSpace.singletons.gray.getRgbItem(color, 0, rgbColor, 0); return rgbColor; case 3: _colorspace.ColorSpace.singletons.rgb.getRgbItem(color, 0, rgbColor, 0); return rgbColor; case 4: _colorspace.ColorSpace.singletons.cmyk.getRgbItem(color, 0, rgbColor, 0); return rgbColor; default: return defaultColor; } } function getQuadPoints(dict, rect) { if (!dict.has("QuadPoints")) { return null; } const quadPoints = dict.getArray("QuadPoints"); if (!Array.isArray(quadPoints) || quadPoints.length === 0 || quadPoints.length % 8 > 0) { return null; } const quadPointsLists = []; for (let i = 0, ii = quadPoints.length / 8; i < ii; i++) { quadPointsLists.push([]); for (let j = i * 8, jj = i * 8 + 8; j < jj; j += 2) { const x = quadPoints[j]; const y = quadPoints[j + 1]; if (rect !== null && (x < rect[0] || x > rect[2] || y < rect[1] || y > rect[3])) { return null; } quadPointsLists[i].push({ x, y }); } } return quadPointsLists.map(quadPointsList => { const [minX, maxX, minY, maxY] = quadPointsList.reduce(([mX, MX, mY, MY], quadPoint) => [Math.min(mX, quadPoint.x), Math.max(MX, quadPoint.x), Math.min(mY, quadPoint.y), Math.max(MY, quadPoint.y)], [Number.MAX_VALUE, Number.MIN_VALUE, Number.MAX_VALUE, Number.MIN_VALUE]); return [{ x: minX, y: maxY }, { x: maxX, y: maxY }, { x: minX, y: minY }, { x: maxX, y: minY }]; }); } function getTransformMatrix(rect, bbox, matrix) { const [minX, minY, maxX, maxY] = _util.Util.getAxialAlignedBoundingBox(bbox, matrix); if (minX === maxX || minY === maxY) { return [1, 0, 0, 1, rect[0], rect[1]]; } const xRatio = (rect[2] - rect[0]) / (maxX - minX); const yRatio = (rect[3] - rect[1]) / (maxY - minY); return [xRatio, 0, 0, yRatio, rect[0] - minX * xRatio, rect[1] - minY * yRatio]; } class Annotation { constructor(params) { const dict = params.dict; this.setTitle(dict.get("T")); this.setContents(dict.get("Contents")); this.setModificationDate(dict.get("M")); this.setFlags(dict.get("F")); this.setRectangle(dict.getArray("Rect")); this.setColor(dict.getArray("C")); this.setBorderStyle(dict); this.setAppearance(dict); this.setBorderAndBackgroundColors(dict.get("MK")); this._streams = []; if (this.appearance) { this._streams.push(this.appearance); } this.data = { annotationFlags: this.flags, borderStyle: this.borderStyle, color: this.color, backgroundColor: this.backgroundColor, borderColor: this.borderColor, contentsObj: this._contents, hasAppearance: !!this.appearance, id: params.id, modificationDate: this.modificationDate, rect: this.rectangle, subtype: params.subtype, hasOwnCanvas: false }; if (params.collectFields) { const kids = dict.get("Kids"); if (Array.isArray(kids)) { const kidIds = []; for (const kid of kids) { if ((0, _primitives.isRef)(kid)) { kidIds.push(kid.toString()); } } if (kidIds.length !== 0) { this.data.kidIds = kidIds; } } this.data.actions = (0, _core_utils.collectActions)(params.xref, dict, _util.AnnotationActionEventType); this.data.fieldName = this._constructFieldName(dict); this.data.pageIndex = params.pageIndex; } this._fallbackFontDict = null; } _hasFlag(flags, flag) { return !!(flags & flag); } _isViewable(flags) { return !this._hasFlag(flags, _util.AnnotationFlag.INVISIBLE) && !this._hasFlag(flags, _util.AnnotationFlag.NOVIEW); } _isPrintable(flags) { return this._hasFlag(flags, _util.AnnotationFlag.PRINT) && !this._hasFlag(flags, _util.AnnotationFlag.INVISIBLE); } mustBeViewed(annotationStorage) { const storageEntry = annotationStorage && annotationStorage.get(this.data.id); if (storageEntry && storageEntry.hidden !== undefined) { return !storageEntry.hidden; } return this.viewable && !this._hasFlag(this.flags, _util.AnnotationFlag.HIDDEN); } mustBePrinted(annotationStorage) { const storageEntry = annotationStorage && annotationStorage.get(this.data.id); if (storageEntry && storageEntry.print !== undefined) { return storageEntry.print; } return this.printable; } get viewable() { if (this.data.quadPoints === null) { return false; } if (this.flags === 0) { return true; } return this._isViewable(this.flags); } get printable() { if (this.data.quadPoints === null) { return false; } if (this.flags === 0) { return false; } return this._isPrintable(this.flags); } _parseStringHelper(data) { const str = typeof data === "string" ? (0, _util.stringToPDFString)(data) : ""; const dir = str && (0, _bidi.bidi)(str).dir === "rtl" ? "rtl" : "ltr"; return { str, dir }; } setTitle(title) { this._title = this._parseStringHelper(title); } setContents(contents) { this._contents = this._parseStringHelper(contents); } setModificationDate(modificationDate) { this.modificationDate = (0, _util.isString)(modificationDate) ? modificationDate : null; } setFlags(flags) { this.flags = Number.isInteger(flags) && flags > 0 ? flags : 0; } hasFlag(flag) { return this._hasFlag(this.flags, flag); } setRectangle(rectangle) { if (Array.isArray(rectangle) && rectangle.length === 4) { this.rectangle = _util.Util.normalizeRect(rectangle); } else { this.rectangle = [0, 0, 0, 0]; } } setColor(color) { this.color = getRgbColor(color); } setBorderAndBackgroundColors(mk) { if (mk instanceof _primitives.Dict) { this.borderColor = getRgbColor(mk.getArray("BC"), null); this.backgroundColor = getRgbColor(mk.getArray("BG"), null); } else { this.borderColor = this.backgroundColor = null; } } setBorderStyle(borderStyle) { this.borderStyle = new AnnotationBorderStyle(); if (!(0, _primitives.isDict)(borderStyle)) { return; } if (borderStyle.has("BS")) { const dict = borderStyle.get("BS"); const dictType = dict.get("Type"); if (!dictType || (0, _primitives.isName)(dictType, "Border")) { this.borderStyle.setWidth(dict.get("W"), this.rectangle); this.borderStyle.setStyle(dict.get("S")); this.borderStyle.setDashArray(dict.getArray("D")); } } else if (borderStyle.has("Border")) { const array = borderStyle.getArray("Border"); if (Array.isArray(array) && array.length >= 3) { this.borderStyle.setHorizontalCornerRadius(array[0]); this.borderStyle.setVerticalCornerRadius(array[1]); this.borderStyle.setWidth(array[2], this.rectangle); if (array.length === 4) { this.borderStyle.setDashArray(array[3], true); } } } else { this.borderStyle.setWidth(0); } } setAppearance(dict) { this.appearance = null; const appearanceStates = dict.get("AP"); if (!(0, _primitives.isDict)(appearanceStates)) { return; } const normalAppearanceState = appearanceStates.get("N"); if ((0, _primitives.isStream)(normalAppearanceState)) { this.appearance = normalAppearanceState; return; } if (!(0, _primitives.isDict)(normalAppearanceState)) { return; } const as = dict.get("AS"); if (!(0, _primitives.isName)(as) || !normalAppearanceState.has(as.name)) { return; } this.appearance = normalAppearanceState.get(as.name); } loadResources(keys, appearance) { return appearance.dict.getAsync("Resources").then(resources => { if (!resources) { return undefined; } const objectLoader = new _object_loader.ObjectLoader(resources, keys, resources.xref); return objectLoader.load().then(function () { return resources; }); }); } getOperatorList(evaluator, task, intent, renderForms, annotationStorage) { const data = this.data; let appearance = this.appearance; const isUsingOwnCanvas = data.hasOwnCanvas && intent & _util.RenderingIntentFlag.DISPLAY; if (!appearance) { if (!isUsingOwnCanvas) { return Promise.resolve(new _operator_list.OperatorList()); } appearance = new _stream.StringStream(""); appearance.dict = new _primitives.Dict(); } const appearanceDict = appearance.dict; const resourcesPromise = this.loadResources(["ExtGState", "ColorSpace", "Pattern", "Shading", "XObject", "Font"], appearance); const bbox = appearanceDict.getArray("BBox") || [0, 0, 1, 1]; const matrix = appearanceDict.getArray("Matrix") || [1, 0, 0, 1, 0, 0]; const transform = getTransformMatrix(data.rect, bbox, matrix); return resourcesPromise.then(resources => { const opList = new _operator_list.OperatorList(); opList.addOp(_util.OPS.beginAnnotation, [data.id, data.rect, transform, matrix, isUsingOwnCanvas]); return evaluator.getOperatorList({ stream: appearance, task, resources, operatorList: opList, fallbackFontDict: this._fallbackFontDict }).then(() => { opList.addOp(_util.OPS.endAnnotation, []); this.reset(); return opList; }); }); } async save(evaluator, task, annotationStorage) { return null; } getFieldObject() { if (this.data.kidIds) { return { id: this.data.id, actions: this.data.actions, name: this.data.fieldName, strokeColor: this.data.borderColor, fillColor: this.data.backgroundColor, type: "", kidIds: this.data.kidIds, page: this.data.pageIndex }; } return null; } reset() { for (const stream of this._streams) { stream.reset(); } } _constructFieldName(dict) { if (!dict.has("T") && !dict.has("Parent")) { (0, _util.warn)("Unknown field name, falling back to empty field name."); return ""; } if (!dict.has("Parent")) { return (0, _util.stringToPDFString)(dict.get("T")); } const fieldName = []; if (dict.has("T")) { fieldName.unshift((0, _util.stringToPDFString)(dict.get("T"))); } let loopDict = dict; const visited = new _primitives.RefSet(); if (dict.objId) { visited.put(dict.objId); } while (loopDict.has("Parent")) { loopDict = loopDict.get("Parent"); if (!(loopDict instanceof _primitives.Dict) || loopDict.objId && visited.has(loopDict.objId)) { break; } if (loopDict.objId) { visited.put(loopDict.objId); } if (loopDict.has("T")) { fieldName.unshift((0, _util.stringToPDFString)(loopDict.get("T"))); } } return fieldName.join("."); } } exports.Annotation = Annotation; class AnnotationBorderStyle { constructor() { this.width = 1; this.style = _util.AnnotationBorderStyleType.SOLID; this.dashArray = [3]; this.horizontalCornerRadius = 0; this.verticalCornerRadius = 0; } setWidth(width, rect = [0, 0, 0, 0]) { if ((0, _primitives.isName)(width)) { this.width = 0; return; } if (Number.isInteger(width)) { if (width > 0) { const maxWidth = (rect[2] - rect[0]) / 2; const maxHeight = (rect[3] - rect[1]) / 2; if (maxWidth > 0 && maxHeight > 0 && (width > maxWidth || width > maxHeight)) { (0, _util.warn)(`AnnotationBorderStyle.setWidth - ignoring width: ${width}`); width = 1; } } this.width = width; } } setStyle(style) { if (!(0, _primitives.isName)(style)) { return; } switch (style.name) { case "S": this.style = _util.AnnotationBorderStyleType.SOLID; break; case "D": this.style = _util.AnnotationBorderStyleType.DASHED; break; case "B": this.style = _util.AnnotationBorderStyleType.BEVELED; break; case "I": this.style = _util.AnnotationBorderStyleType.INSET; break; case "U": this.style = _util.AnnotationBorderStyleType.UNDERLINE; break; } } setDashArray(dashArray, forceStyle = false) { if (Array.isArray(dashArray) && dashArray.length > 0) { let isValid = true; let allZeros = true; for (const element of dashArray) { const validNumber = +element >= 0; if (!validNumber) { isValid = false; break; } else if (element > 0) { allZeros = false; } } if (isValid && !allZeros) { this.dashArray = dashArray; if (forceStyle) { this.setStyle(_primitives.Name.get("D")); } } else { this.width = 0; } } else if (dashArray) { this.width = 0; } } setHorizontalCornerRadius(radius) { if (Number.isInteger(radius)) { this.horizontalCornerRadius = radius; } } setVerticalCornerRadius(radius) { if (Number.isInteger(radius)) { this.verticalCornerRadius = radius; } } } exports.AnnotationBorderStyle = AnnotationBorderStyle; class MarkupAnnotation extends Annotation { constructor(parameters) { super(parameters); const dict = parameters.dict; if (dict.has("IRT")) { const rawIRT = dict.getRaw("IRT"); this.data.inReplyTo = (0, _primitives.isRef)(rawIRT) ? rawIRT.toString() : null; const rt = dict.get("RT"); this.data.replyType = (0, _primitives.isName)(rt) ? rt.name : _util.AnnotationReplyType.REPLY; } if (this.data.replyType === _util.AnnotationReplyType.GROUP) { const parent = dict.get("IRT"); this.setTitle(parent.get("T")); this.data.titleObj = this._title; this.setContents(parent.get("Contents")); this.data.contentsObj = this._contents; if (!parent.has("CreationDate")) { this.data.creationDate = null; } else { this.setCreationDate(parent.get("CreationDate")); this.data.creationDate = this.creationDate; } if (!parent.has("M")) { this.data.modificationDate = null; } else { this.setModificationDate(parent.get("M")); this.data.modificationDate = this.modificationDate; } this.data.hasPopup = parent.has("Popup"); if (!parent.has("C")) { this.data.color = null; } else { this.setColor(parent.getArray("C")); this.data.color = this.color; } } else { this.data.titleObj = this._title; this.setCreationDate(dict.get("CreationDate")); this.data.creationDate = this.creationDate; this.data.hasPopup = dict.has("Popup"); if (!dict.has("C")) { this.data.color = null; } } if (dict.has("RC")) { this.data.richText = _factory.XFAFactory.getRichTextAsHtml(dict.get("RC")); } } setCreationDate(creationDate) { this.creationDate = (0, _util.isString)(creationDate) ? creationDate : null; } _setDefaultAppearance({ xref, extra, strokeColor, fillColor, blendMode, strokeAlpha, fillAlpha, pointsCallback }) { let minX = Number.MAX_VALUE; let minY = Number.MAX_VALUE; let maxX = Number.MIN_VALUE; let maxY = Number.MIN_VALUE; const buffer = ["q"]; if (extra) { buffer.push(extra); } if (strokeColor) { buffer.push(`${strokeColor[0]} ${strokeColor[1]} ${strokeColor[2]} RG`); } if (fillColor) { buffer.push(`${fillColor[0]} ${fillColor[1]} ${fillColor[2]} rg`); } let pointsArray = this.data.quadPoints; if (!pointsArray) { pointsArray = [[{ x: this.rectangle[0], y: this.rectangle[3] }, { x: this.rectangle[2], y: this.rectangle[3] }, { x: this.rectangle[0], y: this.rectangle[1] }, { x: this.rectangle[2], y: this.rectangle[1] }]]; } for (const points of pointsArray) { const [mX, MX, mY, MY] = pointsCallback(buffer, points); minX = Math.min(minX, mX); maxX = Math.max(maxX, MX); minY = Math.min(minY, mY); maxY = Math.max(maxY, MY); } buffer.push("Q"); const formDict = new _primitives.Dict(xref); const appearanceStreamDict = new _primitives.Dict(xref); appearanceStreamDict.set("Subtype", _primitives.Name.get("Form")); const appearanceStream = new _stream.StringStream(buffer.join(" ")); appearanceStream.dict = appearanceStreamDict; formDict.set("Fm0", appearanceStream); const gsDict = new _primitives.Dict(xref); if (blendMode) { gsDict.set("BM", _primitives.Name.get(blendMode)); } if (typeof strokeAlpha === "number") { gsDict.set("CA", strokeAlpha); } if (typeof fillAlpha === "number") { gsDict.set("ca", fillAlpha); } const stateDict = new _primitives.Dict(xref); stateDict.set("GS0", gsDict); const resources = new _primitives.Dict(xref); resources.set("ExtGState", stateDict); resources.set("XObject", formDict); const appearanceDict = new _primitives.Dict(xref); appearanceDict.set("Resources", resources); const bbox = this.data.rect = [minX, minY, maxX, maxY]; appearanceDict.set("BBox", bbox); this.appearance = new _stream.StringStream("/GS0 gs /Fm0 Do"); this.appearance.dict = appearanceDict; this._streams.push(this.appearance, appearanceStream); } } exports.MarkupAnnotation = MarkupAnnotation; class WidgetAnnotation extends Annotation { constructor(params) { super(params); const dict = params.dict; const data = this.data; this.ref = params.ref; data.annotationType = _util.AnnotationType.WIDGET; if (data.fieldName === undefined) { data.fieldName = this._constructFieldName(dict); } if (data.actions === undefined) { data.actions = (0, _core_utils.collectActions)(params.xref, dict, _util.AnnotationActionEventType); } const fieldValue = (0, _core_utils.getInheritableProperty)({ dict, key: "V", getArray: true }); data.fieldValue = this._decodeFormValue(fieldValue); const defaultFieldValue = (0, _core_utils.getInheritableProperty)({ dict, key: "DV", getArray: true }); data.defaultFieldValue = this._decodeFormValue(defaultFieldValue); if (fieldValue === undefined && data.defaultFieldValue !== null) { data.fieldValue = data.defaultFieldValue; } data.alternativeText = (0, _util.stringToPDFString)(dict.get("TU") || ""); const defaultAppearance = (0, _core_utils.getInheritableProperty)({ dict, key: "DA" }) || params.acroForm.get("DA"); this._defaultAppearance = (0, _util.isString)(defaultAppearance) ? defaultAppearance : ""; data.defaultAppearanceData = (0, _default_appearance.parseDefaultAppearance)(this._defaultAppearance); const fieldType = (0, _core_utils.getInheritableProperty)({ dict, key: "FT" }); data.fieldType = (0, _primitives.isName)(fieldType) ? fieldType.name : null; const localResources = (0, _core_utils.getInheritableProperty)({ dict, key: "DR" }); const acroFormResources = params.acroForm.get("DR"); const appearanceResources = this.appearance && this.appearance.dict.get("Resources"); this._fieldResources = { localResources, acroFormResources, appearanceResources, mergedResources: _primitives.Dict.merge({ xref: params.xref, dictArray: [localResources, appearanceResources, acroFormResources], mergeSubDicts: true }) }; data.fieldFlags = (0, _core_utils.getInheritableProperty)({ dict, key: "Ff" }); if (!Number.isInteger(data.fieldFlags) || data.fieldFlags < 0) { data.fieldFlags = 0; } data.readOnly = this.hasFieldFlag(_util.AnnotationFieldFlag.READONLY); data.hidden = this._hasFlag(data.annotationFlags, _util.AnnotationFlag.HIDDEN); } _decodeFormValue(formValue) { if (Array.isArray(formValue)) { return formValue.filter(item => (0, _util.isString)(item)).map(item => (0, _util.stringToPDFString)(item)); } else if ((0, _primitives.isName)(formValue)) { return (0, _util.stringToPDFString)(formValue.name); } else if ((0, _util.isString)(formValue)) { return (0, _util.stringToPDFString)(formValue); } return null; } hasFieldFlag(flag) { return !!(this.data.fieldFlags & flag); } getOperatorList(evaluator, task, intent, renderForms, annotationStorage) { if (renderForms && !(this instanceof SignatureWidgetAnnotation)) { return Promise.resolve(new _operator_list.OperatorList()); } if (!this._hasText) { return super.getOperatorList(evaluator, task, intent, renderForms, annotationStorage); } return this._getAppearance(evaluator, task, annotationStorage).then(content => { if (this.appearance && content === null) { return super.getOperatorList(evaluator, task, intent, renderForms, annotationStorage); } const operatorList = new _operator_list.OperatorList(); if (!this._defaultAppearance || content === null) { return operatorList; } const matrix = [1, 0, 0, 1, 0, 0]; const bbox = [0, 0, this.data.rect[2] - this.data.rect[0], this.data.rect[3] - this.data.rect[1]]; const transform = getTransformMatrix(this.data.rect, bbox, matrix); operatorList.addOp(_util.OPS.beginAnnotation, [this.data.id, this.data.rect, transform, matrix]); const stream = new _stream.StringStream(content); return evaluator.getOperatorList({ stream, task, resources: this._fieldResources.mergedResources, operatorList }).then(function () { operatorList.addOp(_util.OPS.endAnnotation, []); return operatorList; }); }); } async save(evaluator, task, annotationStorage) { if (!annotationStorage) { return null; } const storageEntry = annotationStorage.get(this.data.id); const value = storageEntry && storageEntry.value; if (value === this.data.fieldValue || value === undefined) { return null; } let appearance = await this._getAppearance(evaluator, task, annotationStorage); if (appearance === null) { return null; } const { xref } = evaluator; const dict = xref.fetchIfRef(this.ref); if (!(0, _primitives.isDict)(dict)) { return null; } const bbox = [0, 0, this.data.rect[2] - this.data.rect[0], this.data.rect[3] - this.data.rect[1]]; const xfa = { path: (0, _util.stringToPDFString)(dict.get("T") || ""), value }; const newRef = xref.getNewRef(); const AP = new _primitives.Dict(xref); AP.set("N", newRef); const encrypt = xref.encrypt; let originalTransform = null; let newTransform = null; if (encrypt) { originalTransform = encrypt.createCipherTransform(this.ref.num, this.ref.gen); newTransform = encrypt.createCipherTransform(newRef.num, newRef.gen); appearance = newTransform.encryptString(appearance); } dict.set("V", (0, _util.isAscii)(value) ? value : (0, _util.stringToUTF16BEString)(value)); dict.set("AP", AP); dict.set("M", `D:${(0, _util.getModificationDate)()}`); const appearanceDict = new _primitives.Dict(xref); appearanceDict.set("Length", appearance.length); appearanceDict.set("Subtype", _primitives.Name.get("Form")); appearanceDict.set("Resources", this._getSaveFieldResources(xref)); appearanceDict.set("BBox", bbox); const bufferOriginal = [`${this.ref.num} ${this.ref.gen} obj\n`]; (0, _writer.writeDict)(dict, bufferOriginal, originalTransform); bufferOriginal.push("\nendobj\n"); const bufferNew = [`${newRef.num} ${newRef.gen} obj\n`]; (0, _writer.writeDict)(appearanceDict, bufferNew, newTransform); bufferNew.push(" stream\n", appearance, "\nendstream\nendobj\n"); return [{ ref: this.ref, data: bufferOriginal.join(""), xfa }, { ref: newRef, data: bufferNew.join(""), xfa: null }]; } async _getAppearance(evaluator, task, annotationStorage) { const isPassword = this.hasFieldFlag(_util.AnnotationFieldFlag.PASSWORD); if (!annotationStorage || isPassword) { return null; } const storageEntry = annotationStorage.get(this.data.id); let value = storageEntry && storageEntry.value; if (value === undefined) { return null; } value = value.trim(); if (value === "") { return ""; } let lineCount = -1; if (this.data.multiLine) { lineCount = value.split(/\r\n|\r|\n/).length; } const defaultPadding = 2; const hPadding = defaultPadding; const totalHeight = this.data.rect[3] - this.data.rect[1]; const totalWidth = this.data.rect[2] - this.data.rect[0]; if (!this._defaultAppearance) { this.data.defaultAppearanceData = (0, _default_appearance.parseDefaultAppearance)(this._defaultAppearance = "/Helvetica 0 Tf 0 g"); } const [defaultAppearance, fontSize] = this._computeFontSize(totalHeight, lineCount); const font = await this._getFontData(evaluator, task); let descent = font.descent; if (isNaN(descent)) { descent = 0; } const vPadding = defaultPadding + Math.abs(descent) * fontSize; const alignment = this.data.textAlignment; if (this.data.multiLine) { return this._getMultilineAppearance(defaultAppearance, value, font, fontSize, totalWidth, totalHeight, alignment, hPadding, vPadding); } const encodedString = font.encodeString(value).join(""); if (this.data.comb) { return this._getCombAppearance(defaultAppearance, font, encodedString, totalWidth, hPadding, vPadding); } if (alignment === 0 || alignment > 2) { return "/Tx BMC q BT " + defaultAppearance + ` 1 0 0 1 ${hPadding} ${vPadding} Tm (${(0, _util.escapeString)(encodedString)}) Tj` + " ET Q EMC"; } const renderedText = this._renderText(encodedString, font, fontSize, totalWidth, alignment, hPadding, vPadding); return "/Tx BMC q BT " + defaultAppearance + ` 1 0 0 1 0 0 Tm ${renderedText}` + " ET Q EMC"; } async _getFontData(evaluator, task) { const operatorList = new _operator_list.OperatorList(); const initialState = { font: null, clone() { return this; } }; const { fontName, fontSize } = this.data.defaultAppearanceData; await evaluator.handleSetFont(this._fieldResources.mergedResources, [fontName && _primitives.Name.get(fontName), fontSize], null, operatorList, task, initialState, null); return initialState.font; } _computeFontSize(height, lineCount) { let { fontSize } = this.data.defaultAppearanceData; if (!fontSize) { const roundWithOneDigit = x => Math.round(x * 10) / 10; const FONT_FACTOR = 0.8; if (lineCount === -1) { fontSize = roundWithOneDigit(FONT_FACTOR * height); } else { fontSize = 10; let lineHeight = fontSize / FONT_FACTOR; let numberOfLines = Math.round(height / lineHeight); numberOfLines = Math.max(numberOfLines, lineCount); lineHeight = height / numberOfLines; fontSize = roundWithOneDigit(FONT_FACTOR * lineHeight); } const { fontName, fontColor } = this.data.defaultAppearanceData; this._defaultAppearance = (0, _default_appearance.createDefaultAppearance)({ fontSize, fontName, fontColor }); } return [this._defaultAppearance, fontSize]; } _renderText(text, font, fontSize, totalWidth, alignment, hPadding, vPadding) { const glyphs = font.charsToGlyphs(text); const scale = fontSize / 1000; let width = 0; for (const glyph of glyphs) { width += glyph.width * scale; } let shift; if (alignment === 1) { shift = (totalWidth - width) / 2; } else if (alignment === 2) { shift = totalWidth - width - hPadding; } else { shift = hPadding; } shift = shift.toFixed(2); vPadding = vPadding.toFixed(2); return `${shift} ${vPadding} Td (${(0, _util.escapeString)(text)}) Tj`; } _getSaveFieldResources(xref) { const { localResources, appearanceResources, acroFormResources } = this._fieldResources; const fontName = this.data.defaultAppearanceData && this.data.defaultAppearanceData.fontName; if (!fontName) { return localResources || _primitives.Dict.empty; } for (const resources of [localResources, appearanceResources]) { if (resources instanceof _primitives.Dict) { const localFont = resources.get("Font"); if (localFont instanceof _primitives.Dict && localFont.has(fontName)) { return resources; } } } if (acroFormResources instanceof _primitives.Dict) { const acroFormFont = acroFormResources.get("Font"); if (acroFormFont instanceof _primitives.Dict && acroFormFont.has(fontName)) { const subFontDict = new _primitives.Dict(xref); subFontDict.set(fontName, acroFormFont.getRaw(fontName)); const subResourcesDict = new _primitives.Dict(xref); subResourcesDict.set("Font", subFontDict); return _primitives.Dict.merge({ xref, dictArray: [subResourcesDict, localResources], mergeSubDicts: true }); } } return localResources || _primitives.Dict.empty; } getFieldObject() { return null; } } class TextWidgetAnnotation extends WidgetAnnotation { constructor(params) { super(params); this._hasText = true; const dict = params.dict; if (!(0, _util.isString)(this.data.fieldValue)) { this.data.fieldValue = ""; } let alignment = (0, _core_utils.getInheritableProperty)({ dict, key: "Q" }); if (!Number.isInteger(alignment) || alignment < 0 || alignment > 2) { alignment = null; } this.data.textAlignment = alignment; let maximumLength = (0, _core_utils.getInheritableProperty)({ dict, key: "MaxLen" }); if (!Number.isInteger(maximumLength) || maximumLength < 0) { maximumLength = null; } this.data.maxLen = maximumLength; this.data.multiLine = this.hasFieldFlag(_util.AnnotationFieldFlag.MULTILINE); this.data.comb = this.hasFieldFlag(_util.AnnotationFieldFlag.COMB) && !this.hasFieldFlag(_util.AnnotationFieldFlag.MULTILINE) && !this.hasFieldFlag(_util.AnnotationFieldFlag.PASSWORD) && !this.hasFieldFlag(_util.AnnotationFieldFlag.FILESELECT) && this.data.maxLen !== null; } _getCombAppearance(defaultAppearance, font, text, width, hPadding, vPadding) { const combWidth = (width / this.data.maxLen).toFixed(2); const buf = []; const positions = font.getCharPositions(text); for (const [start, end] of positions) { buf.push(`(${(0, _util.escapeString)(text.substring(start, end))}) Tj`); } const renderedComb = buf.join(` ${combWidth} 0 Td `); return "/Tx BMC q BT " + defaultAppearance + ` 1 0 0 1 ${hPadding} ${vPadding} Tm ${renderedComb}` + " ET Q EMC"; } _getMultilineAppearance(defaultAppearance, text, font, fontSize, width, height, alignment, hPadding, vPadding) { const lines = text.split(/\r\n|\r|\n/); const buf = []; const totalWidth = width - 2 * hPadding; for (const line of lines) { const chunks = this._splitLine(line, font, fontSize, totalWidth); for (const chunk of chunks) { const padding = buf.length === 0 ? hPadding : 0; buf.push(this._renderText(chunk, font, fontSize, width, alignment, padding, -fontSize)); } } const renderedText = buf.join("\n"); return "/Tx BMC q BT " + defaultAppearance + ` 1 0 0 1 0 ${height} Tm ${renderedText}` + " ET Q EMC"; } _splitLine(line, font, fontSize, width) { line = font.encodeString(line).join(""); const glyphs = font.charsToGlyphs(line); if (glyphs.length <= 1) { return [line]; } const positions = font.getCharPositions(line); const scale = fontSize / 1000; const chunks = []; let lastSpacePosInStringStart = -1, lastSpacePosInStringEnd = -1, lastSpacePos = -1, startChunk = 0, currentWidth = 0; for (let i = 0, ii = glyphs.length; i < ii; i++) { const [start, end] = positions[i]; const glyph = glyphs[i]; const glyphWidth = glyph.width * scale; if (glyph.unicode === " ") { if (currentWidth + glyphWidth > width) { chunks.push(line.substring(startChunk, start)); startChunk = start; currentWidth = glyphWidth; lastSpacePosInStringStart = -1; lastSpacePos = -1; } else { currentWidth += glyphWidth; lastSpacePosInStringStart = start; lastSpacePosInStringEnd = end; lastSpacePos = i; } } else { if (currentWidth + glyphWidth > width) { if (lastSpacePosInStringStart !== -1) { chunks.push(line.substring(startChunk, lastSpacePosInStringEnd)); startChunk = lastSpacePosInStringEnd; i = lastSpacePos + 1; lastSpacePosInStringStart = -1; currentWidth = 0; } else { chunks.push(line.substring(startChunk, start)); startChunk = start; currentWidth = glyphWidth; } } else { currentWidth += glyphWidth; } } } if (startChunk < line.length) { chunks.push(line.substring(startChunk, line.length)); } return chunks; } getFieldObject() { return { id: this.data.id, value: this.data.fieldValue, defaultValue: this.data.defaultFieldValue, multiline: this.data.multiLine, password: this.hasFieldFlag(_util.AnnotationFieldFlag.PASSWORD), charLimit: this.data.maxLen, comb: this.data.comb, editable: !this.data.readOnly, hidden: this.data.hidden, name: this.data.fieldName, rect: this.data.rect, actions: this.data.actions, page: this.data.pageIndex, strokeColor: this.data.borderColor, fillColor: this.data.backgroundColor, type: "text" }; } } class ButtonWidgetAnnotation extends WidgetAnnotation { constructor(params) { super(params); this.checkedAppearance = null; this.uncheckedAppearance = null; this.data.checkBox = !this.hasFieldFlag(_util.AnnotationFieldFlag.RADIO) && !this.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON); this.data.radioButton = this.hasFieldFlag(_util.AnnotationFieldFlag.RADIO) && !this.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON); this.data.pushButton = this.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON); this.data.isTooltipOnly = false; if (this.data.checkBox) { this._processCheckBox(params); } else if (this.data.radioButton) { this._processRadioButton(params); } else if (this.data.pushButton) { this.data.hasOwnCanvas = true; this._processPushButton(params); } else { (0, _util.warn)("Invalid field flags for button widget annotation"); } } async getOperatorList(evaluator, task, intent, renderForms, annotationStorage) { if (this.data.pushButton) { return super.getOperatorList(evaluator, task, intent, false, annotationStorage); } let value = null; if (annotationStorage) { const storageEntry = annotationStorage.get(this.data.id); value = storageEntry ? storageEntry.value : null; } if (value === null) { if (this.appearance) { return super.getOperatorList(evaluator, task, intent, renderForms, annotationStorage); } if (this.data.checkBox) { value = this.data.fieldValue === this.data.exportValue; } else { value = this.data.fieldValue === this.data.buttonValue; } } const appearance = value ? this.checkedAppearance : this.uncheckedAppearance; if (appearance) { const savedAppearance = this.appearance; this.appearance = appearance; const operatorList = super.getOperatorList(evaluator, task, intent, renderForms, annotationStorage); this.appearance = savedAppearance; return operatorList; } return new _operator_list.OperatorList(); } async save(evaluator, task, annotationStorage) { if (this.data.checkBox) { return this._saveCheckbox(evaluator, task, annotationStorage); } if (this.data.radioButton) { return this._saveRadioButton(evaluator, task, annotationStorage); } return null; } async _saveCheckbox(evaluator, task, annotationStorage) { if (!annotationStorage) { return null; } const storageEntry = annotationStorage.get(this.data.id); const value = storageEntry && storageEntry.value; if (value === undefined) { return null; } const defaultValue = this.data.fieldValue === this.data.exportValue; if (defaultValue === value) { return null; } const dict = evaluator.xref.fetchIfRef(this.ref); if (!(0, _primitives.isDict)(dict)) { return null; } const xfa = { path: (0, _util.stringToPDFString)(dict.get("T") || ""), value: value ? this.data.exportValue : "" }; const name = _primitives.Name.get(value ? this.data.exportValue : "Off"); dict.set("V", name); dict.set("AS", name); dict.set("M", `D:${(0, _util.getModificationDate)()}`); const encrypt = evaluator.xref.encrypt; let originalTransform = null; if (encrypt) { originalTransform = encrypt.createCipherTransform(this.ref.num, this.ref.gen); } const buffer = [`${this.ref.num} ${this.ref.gen} obj\n`]; (0, _writer.writeDict)(dict, buffer, originalTransform); buffer.push("\nendobj\n"); return [{ ref: this.ref, data: buffer.join(""), xfa }]; } async _saveRadioButton(evaluator, task, annotationStorage) { if (!annotationStorage) { return null; } const storageEntry = annotationStorage.get(this.data.id); const value = storageEntry && storageEntry.value; if (value === undefined) { return null; } const defaultValue = this.data.fieldValue === this.data.buttonValue; if (defaultValue === value) { return null; } const dict = evaluator.xref.fetchIfRef(this.ref); if (!(0, _primitives.isDict)(dict)) { return null; } const xfa = { path: (0, _util.stringToPDFString)(dict.get("T") || ""), value: value ? this.data.buttonValue : "" }; const name = _primitives.Name.get(value ? this.data.buttonValue : "Off"); let parentBuffer = null; const encrypt = evaluator.xref.encrypt; if (value) { if ((0, _primitives.isRef)(this.parent)) { const parent = evaluator.xref.fetch(this.parent); let parentTransform = null; if (encrypt) { parentTransform = encrypt.createCipherTransform(this.parent.num, this.parent.gen); } parent.set("V", name); parentBuffer = [`${this.parent.num} ${this.parent.gen} obj\n`]; (0, _writer.writeDict)(parent, parentBuffer, parentTransform); parentBuffer.push("\nendobj\n"); } else if ((0, _primitives.isDict)(this.parent)) { this.parent.set("V", name); } } dict.set("AS", name); dict.set("M", `D:${(0, _util.getModificationDate)()}`); let originalTransform = null; if (encrypt) { originalTransform = encrypt.createCipherTransform(this.ref.num, this.ref.gen); } const buffer = [`${this.ref.num} ${this.ref.gen} obj\n`]; (0, _writer.writeDict)(dict, buffer, originalTransform); buffer.push("\nendobj\n"); const newRefs = [{ ref: this.ref, data: buffer.join(""), xfa }]; if (parentBuffer !== null) { newRefs.push({ ref: this.parent, data: parentBuffer.join(""), xfa: null }); } return newRefs; } _getDefaultCheckedAppearance(params, type) { const width = this.data.rect[2] - this.data.rect[0]; const height = this.data.rect[3] - this.data.rect[1]; const bbox = [0, 0, width, height]; const FONT_RATIO = 0.8; const fontSize = Math.min(width, height) * FONT_RATIO; let metrics, char; if (type === "check") { metrics = { width: 0.755 * fontSize, height: 0.705 * fontSize }; char = "\x33"; } else if (type === "disc") { metrics = { width: 0.791 * fontSize, height: 0.705 * fontSize }; char = "\x6C"; } else { (0, _util.unreachable)(`_getDefaultCheckedAppearance - unsupported type: ${type}`); } const xShift = (width - metrics.width) / 2; const yShift = (height - metrics.height) / 2; const appearance = `q BT /PdfJsZaDb ${fontSize} Tf 0 g ${xShift} ${yShift} Td (${char}) Tj ET Q`; const appearanceStreamDict = new _primitives.Dict(params.xref); appearanceStreamDict.set("FormType", 1); appearanceStreamDict.set("Subtype", _primitives.Name.get("Form")); appearanceStreamDict.set("Type", _primitives.Name.get("XObject")); appearanceStreamDict.set("BBox", bbox); appearanceStreamDict.set("Matrix", [1, 0, 0, 1, 0, 0]); appearanceStreamDict.set("Length", appearance.length); const resources = new _primitives.Dict(params.xref); const font = new _primitives.Dict(params.xref); font.set("PdfJsZaDb", this.fallbackFontDict); resources.set("Font", font); appearanceStreamDict.set("Resources", resources); this.checkedAppearance = new _stream.StringStream(appearance); this.checkedAppearance.dict = appearanceStreamDict; this._streams.push(this.checkedAppearance); } _processCheckBox(params) { const customAppearance = params.dict.get("AP"); if (!(0, _primitives.isDict)(customAppearance)) { return; } const normalAppearance = customAppearance.get("N"); if (!(0, _primitives.isDict)(normalAppearance)) { return; } const asValue = this._decodeFormValue(params.dict.get("AS")); if (typeof asValue === "string") { this.data.fieldValue = asValue; } const yes = this.data.fieldValue !== null && this.data.fieldValue !== "Off" ? this.data.fieldValue : "Yes"; const exportValues = normalAppearance.getKeys(); if (exportValues.length === 0) { exportValues.push("Off", yes); } else if (exportValues.length === 1) { if (exportValues[0] === "Off") { exportValues.push(yes); } else { exportValues.unshift("Off"); } } else if (exportValues.includes(yes)) { exportValues.length = 0; exportValues.push("Off", yes); } else { const otherYes = exportValues.find(v => v !== "Off"); exportValues.length = 0; exportValues.push("Off", otherYes); } if (!exportValues.includes(this.data.fieldValue)) { this.data.fieldValue = "Off"; } this.data.exportValue = exportValues[1]; this.checkedAppearance = normalAppearance.get(this.data.exportValue) || null; this.uncheckedAppearance = normalAppearance.get("Off") || null; if (this.checkedAppearance) { this._streams.push(this.checkedAppearance); } else { this._getDefaultCheckedAppearance(params, "check"); } if (this.uncheckedAppearance) { this._streams.push(this.uncheckedAppearance); } this._fallbackFontDict = this.fallbackFontDict; } _processRadioButton(params) { this.data.fieldValue = this.data.buttonValue = null; const fieldParent = params.dict.get("Parent"); if ((0, _primitives.isDict)(fieldParent)) { this.parent = params.dict.getRaw("Parent"); const fieldParentValue = fieldParent.get("V"); if ((0, _primitives.isName)(fieldParentValue)) { this.data.fieldValue = this._decodeFormValue(fieldParentValue); } } const appearanceStates = params.dict.get("AP"); if (!(0, _primitives.isDict)(appearanceStates)) { return; } const normalAppearance = appearanceStates.get("N"); if (!(0, _primitives.isDict)(normalAppearance)) { return; } for (const key of normalAppearance.getKeys()) { if (key !== "Off") { this.data.buttonValue = this._decodeFormValue(key); break; } } this.checkedAppearance = normalAppearance.get(this.data.buttonValue) || null; this.uncheckedAppearance = normalAppearance.get("Off") || null; if (this.checkedAppearance) { this._streams.push(this.checkedAppearance); } else { this._getDefaultCheckedAppearance(params, "disc"); } if (this.uncheckedAppearance) { this._streams.push(this.uncheckedAppearance); } this._fallbackFontDict = this.fallbackFontDict; } _processPushButton(params) { if (!params.dict.has("A") && !params.dict.has("AA") && !this.data.alternativeText) { (0, _util.warn)("Push buttons without action dictionaries are not supported"); return; } this.data.isTooltipOnly = !params.dict.has("A") && !params.dict.has("AA"); _catalog.Catalog.parseDestDictionary({ destDict: params.dict, resultObj: this.data, docBaseUrl: params.pdfManager.docBaseUrl }); } getFieldObject() { let type = "button"; let exportValues; if (this.data.checkBox) { type = "checkbox"; exportValues = this.data.exportValue; } else if (this.data.radioButton) { type = "radiobutton"; exportValues = this.data.buttonValue; } return { id: this.data.id, value: this.data.fieldValue || "Off", defaultValue: this.data.defaultFieldValue, exportValues, editable: !this.data.readOnly, name: this.data.fieldName, rect: this.data.rect, hidden: this.data.hidden, actions: this.data.actions, page: this.data.pageIndex, strokeColor: this.data.borderColor, fillColor: this.data.backgroundColor, type }; } get fallbackFontDict() { const dict = new _primitives.Dict(); dict.set("BaseFont", _primitives.Name.get("ZapfDingbats")); dict.set("Type", _primitives.Name.get("FallbackType")); dict.set("Subtype", _primitives.Name.get("FallbackType")); dict.set("Encoding", _primitives.Name.get("ZapfDingbatsEncoding")); return (0, _util.shadow)(this, "fallbackFontDict", dict); } } class ChoiceWidgetAnnotation extends WidgetAnnotation { constructor(params) { super(params); this.data.options = []; const options = (0, _core_utils.getInheritableProperty)({ dict: params.dict, key: "Opt" }); if (Array.isArray(options)) { const xref = params.xref; for (let i = 0, ii = options.length; i < ii; i++) { const option = xref.fetchIfRef(options[i]); const isOptionArray = Array.isArray(option); this.data.options[i] = { exportValue: this._decodeFormValue(isOptionArray ? xref.fetchIfRef(option[0]) : option), displayValue: this._decodeFormValue(isOptionArray ? xref.fetchIfRef(option[1]) : option) }; } } if ((0, _util.isString)(this.data.fieldValue)) { this.data.fieldValue = [this.data.fieldValue]; } else if (!this.data.fieldValue) { this.data.fieldValue = []; } this.data.combo = this.hasFieldFlag(_util.AnnotationFieldFlag.COMBO); this.data.multiSelect = this.hasFieldFlag(_util.AnnotationFieldFlag.MULTISELECT); this._hasText = true; } getFieldObject() { const type = this.data.combo ? "combobox" : "listbox"; const value = this.data.fieldValue.length > 0 ? this.data.fieldValue[0] : null; return { id: this.data.id, value, defaultValue: this.data.defaultFieldValue, editable: !this.data.readOnly, name: this.data.fieldName, rect: this.data.rect, numItems: this.data.fieldValue.length, multipleSelection: this.data.multiSelect, hidden: this.data.hidden, actions: this.data.actions, items: this.data.options, page: this.data.pageIndex, strokeColor: this.data.borderColor, fillColor: this.data.backgroundColor, type }; } } class SignatureWidgetAnnotation extends WidgetAnnotation { constructor(params) { super(params); this.data.fieldValue = null; } getFieldObject() { return { id: this.data.id, value: null, page: this.data.pageIndex, type: "signature" }; } } class TextAnnotation extends MarkupAnnotation { constructor(parameters) { const DEFAULT_ICON_SIZE = 22; super(parameters); const dict = parameters.dict; this.data.annotationType = _util.AnnotationType.TEXT; if (this.data.hasAppearance) { this.data.name = "NoIcon"; } else { this.data.rect[1] = this.data.rect[3] - DEFAULT_ICON_SIZE; this.data.rect[2] = this.data.rect[0] + DEFAULT_ICON_SIZE; this.data.name = dict.has("Name") ? dict.get("Name").name : "Note"; } if (dict.has("State")) { this.data.state = dict.get("State") || null; this.data.stateModel = dict.get("StateModel") || null; } else { this.data.state = null; this.data.stateModel = null; } } } class LinkAnnotation extends Annotation { constructor(params) { super(params); this.data.annotationType = _util.AnnotationType.LINK; const quadPoints = getQuadPoints(params.dict, this.rectangle); if (quadPoints) { this.data.quadPoints = quadPoints; } _catalog.Catalog.parseDestDictionary({ destDict: params.dict, resultObj: this.data, docBaseUrl: params.pdfManager.docBaseUrl }); } } class PopupAnnotation extends Annotation { constructor(parameters) { super(parameters); this.data.annotationType = _util.AnnotationType.POPUP; let parentItem = parameters.dict.get("Parent"); if (!parentItem) { (0, _util.warn)("Popup annotation has a missing or invalid parent annotation."); return; } const parentSubtype = parentItem.get("Subtype"); this.data.parentType = (0, _primitives.isName)(parentSubtype) ? parentSubtype.name : null; const rawParent = parameters.dict.getRaw("Parent"); this.data.parentId = (0, _primitives.isRef)(rawParent) ? rawParent.toString() : null; const parentRect = parentItem.getArray("Rect"); if (Array.isArray(parentRect) && parentRect.length === 4) { this.data.parentRect = _util.Util.normalizeRect(parentRect); } else { this.data.parentRect = [0, 0, 0, 0]; } const rt = parentItem.get("RT"); if ((0, _primitives.isName)(rt, _util.AnnotationReplyType.GROUP)) { parentItem = parentItem.get("IRT"); } if (!parentItem.has("M")) { this.data.modificationDate = null; } else { this.setModificationDate(parentItem.get("M")); this.data.modificationDate = this.modificationDate; } if (!parentItem.has("C")) { this.data.color = null; } else { this.setColor(parentItem.getArray("C")); this.data.color = this.color; } if (!this.viewable) { const parentFlags = parentItem.get("F"); if (this._isViewable(parentFlags)) { this.setFlags(parentFlags); } } this.setTitle(parentItem.get("T")); this.data.titleObj = this._title; this.setContents(parentItem.get("Contents")); this.data.contentsObj = this._contents; if (parentItem.has("RC")) { this.data.richText = _factory.XFAFactory.getRichTextAsHtml(parentItem.get("RC")); } } } class FreeTextAnnotation extends MarkupAnnotation { constructor(parameters) { super(parameters); this.data.annotationType = _util.AnnotationType.FREETEXT; } } class LineAnnotation extends MarkupAnnotation { constructor(parameters) { super(parameters); this.data.annotationType = _util.AnnotationType.LINE; const lineCoordinates = parameters.dict.getArray("L"); this.data.lineCoordinates = _util.Util.normalizeRect(lineCoordinates); if (!this.appearance) { const strokeColor = this.color ? Array.from(this.color).map(c => c / 255) : [0, 0, 0]; const strokeAlpha = parameters.dict.get("CA"); let fillColor = null, interiorColor = parameters.dict.getArray("IC"); if (interiorColor) { interiorColor = getRgbColor(interiorColor, null); fillColor = interiorColor ? Array.from(interiorColor).map(c => c / 255) : null; } const fillAlpha = fillColor ? strokeAlpha : null; const borderWidth = this.borderStyle.width || 1, borderAdjust = 2 * borderWidth; const bbox = [this.data.lineCoordinates[0] - borderAdjust, this.data.lineCoordinates[1] - borderAdjust, this.data.lineCoordinates[2] + borderAdjust, this.data.lineCoordinates[3] + borderAdjust]; if (!_util.Util.intersect(this.rectangle, bbox)) { this.rectangle = bbox; } this._setDefaultAppearance({ xref: parameters.xref, extra: `${borderWidth} w`, strokeColor, fillColor, strokeAlpha, fillAlpha, pointsCallback: (buffer, points) => { buffer.push(`${lineCoordinates[0]} ${lineCoordinates[1]} m`, `${lineCoordinates[2]} ${lineCoordinates[3]} l`, "S"); return [points[0].x - borderWidth, points[1].x + borderWidth, points[3].y - borderWidth, points[1].y + borderWidth]; } }); } } } class SquareAnnotation extends MarkupAnnotation { constructor(parameters) { super(parameters); this.data.annotationType = _util.AnnotationType.SQUARE; if (!this.appearance) { const strokeColor = this.color ? Array.from(this.color).map(c => c / 255) : [0, 0, 0]; const strokeAlpha = parameters.dict.get("CA"); let fillColor = null, interiorColor = parameters.dict.getArray("IC"); if (interiorColor) { interiorColor = getRgbColor(interiorColor, null); fillColor = interiorColor ? Array.from(interiorColor).map(c => c / 255) : null; } const fillAlpha = fillColor ? strokeAlpha : null; if (this.borderStyle.width === 0 && !fillColor) { return; } this._setDefaultAppearance({ xref: parameters.xref, extra: `${this.borderStyle.width} w`, strokeColor, fillColor, strokeAlpha, fillAlpha, pointsCallback: (buffer, points) => { const x = points[2].x + this.borderStyle.width / 2; const y = points[2].y + this.borderStyle.width / 2; const width = points[3].x - points[2].x - this.borderStyle.width; const height = points[1].y - points[3].y - this.borderStyle.width; buffer.push(`${x} ${y} ${width} ${height} re`); if (fillColor) { buffer.push("B"); } else { buffer.push("S"); } return [points[0].x, points[1].x, points[3].y, points[1].y]; } }); } } } class CircleAnnotation extends MarkupAnnotation { constructor(parameters) { super(parameters); this.data.annotationType = _util.AnnotationType.CIRCLE; if (!this.appearance) { const strokeColor = this.color ? Array.from(this.color).map(c => c / 255) : [0, 0, 0]; const strokeAlpha = parameters.dict.get("CA"); let fillColor = null; let interiorColor = parameters.dict.getArray("IC"); if (interiorColor) { interiorColor = getRgbColor(interiorColor, null); fillColor = interiorColor ? Array.from(interiorColor).map(c => c / 255) : null; } const fillAlpha = fillColor ? strokeAlpha : null; if (this.borderStyle.width === 0 && !fillColor) { return; } const controlPointsDistance = 4 / 3 * Math.tan(Math.PI / (2 * 4)); this._setDefaultAppearance({ xref: parameters.xref, extra: `${this.borderStyle.width} w`, strokeColor, fillColor, strokeAlpha, fillAlpha, pointsCallback: (buffer, points) => { const x0 = points[0].x + this.borderStyle.width / 2; const y0 = points[0].y - this.borderStyle.width / 2; const x1 = points[3].x - this.borderStyle.width / 2; const y1 = points[3].y + this.borderStyle.width / 2; const xMid = x0 + (x1 - x0) / 2; const yMid = y0 + (y1 - y0) / 2; const xOffset = (x1 - x0) / 2 * controlPointsDistance; const yOffset = (y1 - y0) / 2 * controlPointsDistance; buffer.push(`${xMid} ${y1} m`, `${xMid + xOffset} ${y1} ${x1} ${yMid + yOffset} ${x1} ${yMid} c`, `${x1} ${yMid - yOffset} ${xMid + xOffset} ${y0} ${xMid} ${y0} c`, `${xMid - xOffset} ${y0} ${x0} ${yMid - yOffset} ${x0} ${yMid} c`, `${x0} ${yMid + yOffset} ${xMid - xOffset} ${y1} ${xMid} ${y1} c`, "h"); if (fillColor) { buffer.push("B"); } else { buffer.push("S"); } return [points[0].x, points[1].x, points[3].y, points[1].y]; } }); } } } class PolylineAnnotation extends MarkupAnnotation { constructor(parameters) { super(parameters); this.data.annotationType = _util.AnnotationType.POLYLINE; this.data.vertices = []; const rawVertices = parameters.dict.getArray("Vertices"); if (!Array.isArray(rawVertices)) { return; } for (let i = 0, ii = rawVertices.length; i < ii; i += 2) { this.data.vertices.push({ x: rawVertices[i], y: rawVertices[i + 1] }); } if (!this.appearance) { const strokeColor = this.color ? Array.from(this.color).map(c => c / 255) : [0, 0, 0]; const strokeAlpha = parameters.dict.get("CA"); const borderWidth = this.borderStyle.width || 1, borderAdjust = 2 * borderWidth; const bbox = [Infinity, Infinity, -Infinity, -Infinity]; for (const vertex of this.data.vertices) { bbox[0] = Math.min(bbox[0], vertex.x - borderAdjust); bbox[1] = Math.min(bbox[1], vertex.y - borderAdjust); bbox[2] = Math.max(bbox[2], vertex.x + borderAdjust); bbox[3] = Math.max(bbox[3], vertex.y + borderAdjust); } if (!_util.Util.intersect(this.rectangle, bbox)) { this.rectangle = bbox; } this._setDefaultAppearance({ xref: parameters.xref, extra: `${borderWidth} w`, strokeColor, strokeAlpha, pointsCallback: (buffer, points) => { const vertices = this.data.vertices; for (let i = 0, ii = vertices.length; i < ii; i++) { buffer.push(`${vertices[i].x} ${vertices[i].y} ${i === 0 ? "m" : "l"}`); } buffer.push("S"); return [points[0].x, points[1].x, points[3].y, points[1].y]; } }); } } } class PolygonAnnotation extends PolylineAnnotation { constructor(parameters) { super(parameters); this.data.annotationType = _util.AnnotationType.POLYGON; } } class CaretAnnotation extends MarkupAnnotation { constructor(parameters) { super(parameters); this.data.annotationType = _util.AnnotationType.CARET; } } class InkAnnotation extends MarkupAnnotation { constructor(parameters) { super(parameters); this.data.annotationType = _util.AnnotationType.INK; this.data.inkLists = []; const rawInkLists = parameters.dict.getArray("InkList"); if (!Array.isArray(rawInkLists)) { return; } const xref = parameters.xref; for (let i = 0, ii = rawInkLists.length; i < ii; ++i) { this.data.inkLists.push([]); for (let j = 0, jj = rawInkLists[i].length; j < jj; j += 2) { this.data.inkLists[i].push({ x: xref.fetchIfRef(rawInkLists[i][j]), y: xref.fetchIfRef(rawInkLists[i][j + 1]) }); } } if (!this.appearance) { const strokeColor = this.color ? Array.from(this.color).map(c => c / 255) : [0, 0, 0]; const strokeAlpha = parameters.dict.get("CA"); const borderWidth = this.borderStyle.width || 1, borderAdjust = 2 * borderWidth; const bbox = [Infinity, Infinity, -Infinity, -Infinity]; for (const inkLists of this.data.inkLists) { for (const vertex of inkLists) { bbox[0] = Math.min(bbox[0], vertex.x - borderAdjust); bbox[1] = Math.min(bbox[1], vertex.y - borderAdjust); bbox[2] = Math.max(bbox[2], vertex.x + borderAdjust); bbox[3] = Math.max(bbox[3], vertex.y + borderAdjust); } } if (!_util.Util.intersect(this.rectangle, bbox)) { this.rectangle = bbox; } this._setDefaultAppearance({ xref: parameters.xref, extra: `${borderWidth} w`, strokeColor, strokeAlpha, pointsCallback: (buffer, points) => { for (const inkList of this.data.inkLists) { for (let i = 0, ii = inkList.length; i < ii; i++) { buffer.push(`${inkList[i].x} ${inkList[i].y} ${i === 0 ? "m" : "l"}`); } buffer.push("S"); } return [points[0].x, points[1].x, points[3].y, points[1].y]; } }); } } } class HighlightAnnotation extends MarkupAnnotation { constructor(parameters) { super(parameters); this.data.annotationType = _util.AnnotationType.HIGHLIGHT; const quadPoints = this.data.quadPoints = getQuadPoints(parameters.dict, null); if (quadPoints) { const resources = this.appearance && this.appearance.dict.get("Resources"); if (!this.appearance || !(resources && resources.has("ExtGState"))) { if (this.appearance) { (0, _util.warn)("HighlightAnnotation - ignoring built-in appearance stream."); } const fillColor = this.color ? Array.from(this.color).map(c => c / 255) : [1, 1, 0]; const fillAlpha = parameters.dict.get("CA"); this._setDefaultAppearance({ xref: parameters.xref, fillColor, blendMode: "Multiply", fillAlpha, pointsCallback: (buffer, points) => { buffer.push(`${points[0].x} ${points[0].y} m`, `${points[1].x} ${points[1].y} l`, `${points[3].x} ${points[3].y} l`, `${points[2].x} ${points[2].y} l`, "f"); return [points[0].x, points[1].x, points[3].y, points[1].y]; } }); } } else { this.data.hasPopup = false; } } } class UnderlineAnnotation extends MarkupAnnotation { constructor(parameters) { super(parameters); this.data.annotationType = _util.AnnotationType.UNDERLINE; const quadPoints = this.data.quadPoints = getQuadPoints(parameters.dict, null); if (quadPoints) { if (!this.appearance) { const strokeColor = this.color ? Array.from(this.color).map(c => c / 255) : [0, 0, 0]; const strokeAlpha = parameters.dict.get("CA"); this._setDefaultAppearance({ xref: parameters.xref, extra: "[] 0 d 1 w", strokeColor, strokeAlpha, pointsCallback: (buffer, points) => { buffer.push(`${points[2].x} ${points[2].y} m`, `${points[3].x} ${points[3].y} l`, "S"); return [points[0].x, points[1].x, points[3].y, points[1].y]; } }); } } else { this.data.hasPopup = false; } } } class SquigglyAnnotation extends MarkupAnnotation { constructor(parameters) { super(parameters); this.data.annotationType = _util.AnnotationType.SQUIGGLY; const quadPoints = this.data.quadPoints = getQuadPoints(parameters.dict, null); if (quadPoints) { if (!this.appearance) { const strokeColor = this.color ? Array.from(this.color).map(c => c / 255) : [0, 0, 0]; const strokeAlpha = parameters.dict.get("CA"); this._setDefaultAppearance({ xref: parameters.xref, extra: "[] 0 d 1 w", strokeColor, strokeAlpha, pointsCallback: (buffer, points) => { const dy = (points[0].y - points[2].y) / 6; let shift = dy; let x = points[2].x; const y = points[2].y; const xEnd = points[3].x; buffer.push(`${x} ${y + shift} m`); do { x += 2; shift = shift === 0 ? dy : 0; buffer.push(`${x} ${y + shift} l`); } while (x < xEnd); buffer.push("S"); return [points[2].x, xEnd, y - 2 * dy, y + 2 * dy]; } }); } } else { this.data.hasPopup = false; } } } class StrikeOutAnnotation extends MarkupAnnotation { constructor(parameters) { super(parameters); this.data.annotationType = _util.AnnotationType.STRIKEOUT; const quadPoints = this.data.quadPoints = getQuadPoints(parameters.dict, null); if (quadPoints) { if (!this.appearance) { const strokeColor = this.color ? Array.from(this.color).map(c => c / 255) : [0, 0, 0]; const strokeAlpha = parameters.dict.get("CA"); this._setDefaultAppearance({ xref: parameters.xref, extra: "[] 0 d 1 w", strokeColor, strokeAlpha, pointsCallback: (buffer, points) => { buffer.push(`${(points[0].x + points[2].x) / 2} ` + `${(points[0].y + points[2].y) / 2} m`, `${(points[1].x + points[3].x) / 2} ` + `${(points[1].y + points[3].y) / 2} l`, "S"); return [points[0].x, points[1].x, points[3].y, points[1].y]; } }); } } else { this.data.hasPopup = false; } } } class StampAnnotation extends MarkupAnnotation { constructor(parameters) { super(parameters); this.data.annotationType = _util.AnnotationType.STAMP; } } class FileAttachmentAnnotation extends MarkupAnnotation { constructor(parameters) { super(parameters); const file = new _file_spec.FileSpec(parameters.dict.get("FS"), parameters.xref); this.data.annotationType = _util.AnnotationType.FILEATTACHMENT; this.data.file = file.serializable; } } /***/ }), /* 23 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.createDefaultAppearance = createDefaultAppearance; exports.parseDefaultAppearance = parseDefaultAppearance; var _util = __w_pdfjs_require__(2); var _colorspace = __w_pdfjs_require__(24); var _core_utils = __w_pdfjs_require__(9); var _evaluator = __w_pdfjs_require__(25); var _primitives = __w_pdfjs_require__(5); var _stream = __w_pdfjs_require__(10); class DefaultAppearanceEvaluator extends _evaluator.EvaluatorPreprocessor { constructor(str) { super(new _stream.StringStream(str)); } parse() { const operation = { fn: 0, args: [] }; const result = { fontSize: 0, fontName: "", fontColor: new Uint8ClampedArray(3) }; try { while (true) { operation.args.length = 0; if (!this.read(operation)) { break; } if (this.savedStatesDepth !== 0) { continue; } const { fn, args } = operation; switch (fn | 0) { case _util.OPS.setFont: const [fontName, fontSize] = args; if (fontName instanceof _primitives.Name) { result.fontName = fontName.name; } if (typeof fontSize === "number" && fontSize > 0) { result.fontSize = fontSize; } break; case _util.OPS.setFillRGBColor: _colorspace.ColorSpace.singletons.rgb.getRgbItem(args, 0, result.fontColor, 0); break; case _util.OPS.setFillGray: _colorspace.ColorSpace.singletons.gray.getRgbItem(args, 0, result.fontColor, 0); break; case _util.OPS.setFillColorSpace: _colorspace.ColorSpace.singletons.cmyk.getRgbItem(args, 0, result.fontColor, 0); break; } } } catch (reason) { (0, _util.warn)(`parseDefaultAppearance - ignoring errors: "${reason}".`); } return result; } } function parseDefaultAppearance(str) { return new DefaultAppearanceEvaluator(str).parse(); } function createDefaultAppearance({ fontSize, fontName, fontColor }) { let colorCmd; if (fontColor.every(c => c === 0)) { colorCmd = "0 g"; } else { colorCmd = Array.from(fontColor).map(c => (c / 255).toFixed(2)).join(" ") + " rg"; } return `/${(0, _core_utils.escapePDFName)(fontName)} ${fontSize} Tf ${colorCmd}`; } /***/ }), /* 24 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.ColorSpace = void 0; var _util = __w_pdfjs_require__(2); var _primitives = __w_pdfjs_require__(5); var _core_utils = __w_pdfjs_require__(9); function resizeRgbImage(src, dest, w1, h1, w2, h2, alpha01) { const COMPONENTS = 3; alpha01 = alpha01 !== 1 ? 0 : alpha01; const xRatio = w1 / w2; const yRatio = h1 / h2; let newIndex = 0, oldIndex; const xScaled = new Uint16Array(w2); const w1Scanline = w1 * COMPONENTS; for (let i = 0; i < w2; i++) { xScaled[i] = Math.floor(i * xRatio) * COMPONENTS; } for (let i = 0; i < h2; i++) { const py = Math.floor(i * yRatio) * w1Scanline; for (let j = 0; j < w2; j++) { oldIndex = py + xScaled[j]; dest[newIndex++] = src[oldIndex++]; dest[newIndex++] = src[oldIndex++]; dest[newIndex++] = src[oldIndex++]; newIndex += alpha01; } } } class ColorSpace { constructor(name, numComps) { if (this.constructor === ColorSpace) { (0, _util.unreachable)("Cannot initialize ColorSpace."); } this.name = name; this.numComps = numComps; } getRgb(src, srcOffset) { const rgb = new Uint8ClampedArray(3); this.getRgbItem(src, srcOffset, rgb, 0); return rgb; } getRgbItem(src, srcOffset, dest, destOffset) { (0, _util.unreachable)("Should not call ColorSpace.getRgbItem"); } getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { (0, _util.unreachable)("Should not call ColorSpace.getRgbBuffer"); } getOutputLength(inputLength, alpha01) { (0, _util.unreachable)("Should not call ColorSpace.getOutputLength"); } isPassthrough(bits) { return false; } isDefaultDecode(decodeMap, bpc) { return ColorSpace.isDefaultDecode(decodeMap, this.numComps); } fillRgb(dest, originalWidth, originalHeight, width, height, actualHeight, bpc, comps, alpha01) { const count = originalWidth * originalHeight; let rgbBuf = null; const numComponentColors = 1 << bpc; const needsResizing = originalHeight !== height || originalWidth !== width; if (this.isPassthrough(bpc)) { rgbBuf = comps; } else if (this.numComps === 1 && count > numComponentColors && this.name !== "DeviceGray" && this.name !== "DeviceRGB") { const allColors = bpc <= 8 ? new Uint8Array(numComponentColors) : new Uint16Array(numComponentColors); for (let i = 0; i < numComponentColors; i++) { allColors[i] = i; } const colorMap = new Uint8ClampedArray(numComponentColors * 3); this.getRgbBuffer(allColors, 0, numComponentColors, colorMap, 0, bpc, 0); if (!needsResizing) { let destPos = 0; for (let i = 0; i < count; ++i) { const key = comps[i] * 3; dest[destPos++] = colorMap[key]; dest[destPos++] = colorMap[key + 1]; dest[destPos++] = colorMap[key + 2]; destPos += alpha01; } } else { rgbBuf = new Uint8Array(count * 3); let rgbPos = 0; for (let i = 0; i < count; ++i) { const key = comps[i] * 3; rgbBuf[rgbPos++] = colorMap[key]; rgbBuf[rgbPos++] = colorMap[key + 1]; rgbBuf[rgbPos++] = colorMap[key + 2]; } } } else { if (!needsResizing) { this.getRgbBuffer(comps, 0, width * actualHeight, dest, 0, bpc, alpha01); } else { rgbBuf = new Uint8ClampedArray(count * 3); this.getRgbBuffer(comps, 0, count, rgbBuf, 0, bpc, 0); } } if (rgbBuf) { if (needsResizing) { resizeRgbImage(rgbBuf, dest, originalWidth, originalHeight, width, height, alpha01); } else { let destPos = 0, rgbPos = 0; for (let i = 0, ii = width * actualHeight; i < ii; i++) { dest[destPos++] = rgbBuf[rgbPos++]; dest[destPos++] = rgbBuf[rgbPos++]; dest[destPos++] = rgbBuf[rgbPos++]; destPos += alpha01; } } } } get usesZeroToOneRange() { return (0, _util.shadow)(this, "usesZeroToOneRange", true); } static _cache(cacheKey, xref, localColorSpaceCache, parsedColorSpace) { if (!localColorSpaceCache) { throw new Error('ColorSpace._cache - expected "localColorSpaceCache" argument.'); } if (!parsedColorSpace) { throw new Error('ColorSpace._cache - expected "parsedColorSpace" argument.'); } let csName, csRef; if (cacheKey instanceof _primitives.Ref) { csRef = cacheKey; cacheKey = xref.fetch(cacheKey); } if (cacheKey instanceof _primitives.Name) { csName = cacheKey.name; } if (csName || csRef) { localColorSpaceCache.set(csName, csRef, parsedColorSpace); } } static getCached(cacheKey, xref, localColorSpaceCache) { if (!localColorSpaceCache) { throw new Error('ColorSpace.getCached - expected "localColorSpaceCache" argument.'); } if (cacheKey instanceof _primitives.Ref) { const localColorSpace = localColorSpaceCache.getByRef(cacheKey); if (localColorSpace) { return localColorSpace; } try { cacheKey = xref.fetch(cacheKey); } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } } } if (cacheKey instanceof _primitives.Name) { const localColorSpace = localColorSpaceCache.getByName(cacheKey.name); if (localColorSpace) { return localColorSpace; } } return null; } static async parseAsync({ cs, xref, resources = null, pdfFunctionFactory, localColorSpaceCache }) { const parsedColorSpace = this._parse(cs, xref, resources, pdfFunctionFactory); this._cache(cs, xref, localColorSpaceCache, parsedColorSpace); return parsedColorSpace; } static parse({ cs, xref, resources = null, pdfFunctionFactory, localColorSpaceCache }) { const cachedColorSpace = this.getCached(cs, xref, localColorSpaceCache); if (cachedColorSpace) { return cachedColorSpace; } const parsedColorSpace = this._parse(cs, xref, resources, pdfFunctionFactory); this._cache(cs, xref, localColorSpaceCache, parsedColorSpace); return parsedColorSpace; } static _parse(cs, xref, resources = null, pdfFunctionFactory) { cs = xref.fetchIfRef(cs); if ((0, _primitives.isName)(cs)) { switch (cs.name) { case "G": case "DeviceGray": return this.singletons.gray; case "RGB": case "DeviceRGB": return this.singletons.rgb; case "CMYK": case "DeviceCMYK": return this.singletons.cmyk; case "Pattern": return new PatternCS(null); default: if ((0, _primitives.isDict)(resources)) { const colorSpaces = resources.get("ColorSpace"); if ((0, _primitives.isDict)(colorSpaces)) { const resourcesCS = colorSpaces.get(cs.name); if (resourcesCS) { if ((0, _primitives.isName)(resourcesCS)) { return this._parse(resourcesCS, xref, resources, pdfFunctionFactory); } cs = resourcesCS; break; } } } throw new _util.FormatError(`Unrecognized ColorSpace: ${cs.name}`); } } if (Array.isArray(cs)) { const mode = xref.fetchIfRef(cs[0]).name; let params, numComps, baseCS, whitePoint, blackPoint, gamma; switch (mode) { case "G": case "DeviceGray": return this.singletons.gray; case "RGB": case "DeviceRGB": return this.singletons.rgb; case "CMYK": case "DeviceCMYK": return this.singletons.cmyk; case "CalGray": params = xref.fetchIfRef(cs[1]); whitePoint = params.getArray("WhitePoint"); blackPoint = params.getArray("BlackPoint"); gamma = params.get("Gamma"); return new CalGrayCS(whitePoint, blackPoint, gamma); case "CalRGB": params = xref.fetchIfRef(cs[1]); whitePoint = params.getArray("WhitePoint"); blackPoint = params.getArray("BlackPoint"); gamma = params.getArray("Gamma"); const matrix = params.getArray("Matrix"); return new CalRGBCS(whitePoint, blackPoint, gamma, matrix); case "ICCBased": const stream = xref.fetchIfRef(cs[1]); const dict = stream.dict; numComps = dict.get("N"); const alt = dict.get("Alternate"); if (alt) { const altCS = this._parse(alt, xref, resources, pdfFunctionFactory); if (altCS.numComps === numComps) { return altCS; } (0, _util.warn)("ICCBased color space: Ignoring incorrect /Alternate entry."); } if (numComps === 1) { return this.singletons.gray; } else if (numComps === 3) { return this.singletons.rgb; } else if (numComps === 4) { return this.singletons.cmyk; } break; case "Pattern": baseCS = cs[1] || null; if (baseCS) { baseCS = this._parse(baseCS, xref, resources, pdfFunctionFactory); } return new PatternCS(baseCS); case "I": case "Indexed": baseCS = this._parse(cs[1], xref, resources, pdfFunctionFactory); const hiVal = xref.fetchIfRef(cs[2]) + 1; const lookup = xref.fetchIfRef(cs[3]); return new IndexedCS(baseCS, hiVal, lookup); case "Separation": case "DeviceN": const name = xref.fetchIfRef(cs[1]); numComps = Array.isArray(name) ? name.length : 1; baseCS = this._parse(cs[2], xref, resources, pdfFunctionFactory); const tintFn = pdfFunctionFactory.create(cs[3]); return new AlternateCS(numComps, baseCS, tintFn); case "Lab": params = xref.fetchIfRef(cs[1]); whitePoint = params.getArray("WhitePoint"); blackPoint = params.getArray("BlackPoint"); const range = params.getArray("Range"); return new LabCS(whitePoint, blackPoint, range); default: throw new _util.FormatError(`Unimplemented ColorSpace object: ${mode}`); } } throw new _util.FormatError(`Unrecognized ColorSpace object: ${cs}`); } static isDefaultDecode(decode, numComps) { if (!Array.isArray(decode)) { return true; } if (numComps * 2 !== decode.length) { (0, _util.warn)("The decode map is not the correct length"); return true; } for (let i = 0, ii = decode.length; i < ii; i += 2) { if (decode[i] !== 0 || decode[i + 1] !== 1) { return false; } } return true; } static get singletons() { return (0, _util.shadow)(this, "singletons", { get gray() { return (0, _util.shadow)(this, "gray", new DeviceGrayCS()); }, get rgb() { return (0, _util.shadow)(this, "rgb", new DeviceRgbCS()); }, get cmyk() { return (0, _util.shadow)(this, "cmyk", new DeviceCmykCS()); } }); } } exports.ColorSpace = ColorSpace; class AlternateCS extends ColorSpace { constructor(numComps, base, tintFn) { super("Alternate", numComps); this.base = base; this.tintFn = tintFn; this.tmpBuf = new Float32Array(base.numComps); } getRgbItem(src, srcOffset, dest, destOffset) { const tmpBuf = this.tmpBuf; this.tintFn(src, srcOffset, tmpBuf, 0); this.base.getRgbItem(tmpBuf, 0, dest, destOffset); } getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { const tintFn = this.tintFn; const base = this.base; const scale = 1 / ((1 << bits) - 1); const baseNumComps = base.numComps; const usesZeroToOneRange = base.usesZeroToOneRange; const isPassthrough = (base.isPassthrough(8) || !usesZeroToOneRange) && alpha01 === 0; let pos = isPassthrough ? destOffset : 0; const baseBuf = isPassthrough ? dest : new Uint8ClampedArray(baseNumComps * count); const numComps = this.numComps; const scaled = new Float32Array(numComps); const tinted = new Float32Array(baseNumComps); let i, j; for (i = 0; i < count; i++) { for (j = 0; j < numComps; j++) { scaled[j] = src[srcOffset++] * scale; } tintFn(scaled, 0, tinted, 0); if (usesZeroToOneRange) { for (j = 0; j < baseNumComps; j++) { baseBuf[pos++] = tinted[j] * 255; } } else { base.getRgbItem(tinted, 0, baseBuf, pos); pos += baseNumComps; } } if (!isPassthrough) { base.getRgbBuffer(baseBuf, 0, count, dest, destOffset, 8, alpha01); } } getOutputLength(inputLength, alpha01) { return this.base.getOutputLength(inputLength * this.base.numComps / this.numComps, alpha01); } } class PatternCS extends ColorSpace { constructor(baseCS) { super("Pattern", null); this.base = baseCS; } isDefaultDecode(decodeMap, bpc) { (0, _util.unreachable)("Should not call PatternCS.isDefaultDecode"); } } class IndexedCS extends ColorSpace { constructor(base, highVal, lookup) { super("Indexed", 1); this.base = base; this.highVal = highVal; const length = base.numComps * highVal; this.lookup = new Uint8Array(length); if ((0, _primitives.isStream)(lookup)) { const bytes = lookup.getBytes(length); this.lookup.set(bytes); } else if (typeof lookup === "string") { for (let i = 0; i < length; ++i) { this.lookup[i] = lookup.charCodeAt(i) & 0xff; } } else { throw new _util.FormatError(`IndexedCS - unrecognized lookup table: ${lookup}`); } } getRgbItem(src, srcOffset, dest, destOffset) { const numComps = this.base.numComps; const start = src[srcOffset] * numComps; this.base.getRgbBuffer(this.lookup, start, 1, dest, destOffset, 8, 0); } getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { const base = this.base; const numComps = base.numComps; const outputDelta = base.getOutputLength(numComps, alpha01); const lookup = this.lookup; for (let i = 0; i < count; ++i) { const lookupPos = src[srcOffset++] * numComps; base.getRgbBuffer(lookup, lookupPos, 1, dest, destOffset, 8, alpha01); destOffset += outputDelta; } } getOutputLength(inputLength, alpha01) { return this.base.getOutputLength(inputLength * this.base.numComps, alpha01); } isDefaultDecode(decodeMap, bpc) { if (!Array.isArray(decodeMap)) { return true; } if (decodeMap.length !== 2) { (0, _util.warn)("Decode map length is not correct"); return true; } if (!Number.isInteger(bpc) || bpc < 1) { (0, _util.warn)("Bits per component is not correct"); return true; } return decodeMap[0] === 0 && decodeMap[1] === (1 << bpc) - 1; } } class DeviceGrayCS extends ColorSpace { constructor() { super("DeviceGray", 1); } getRgbItem(src, srcOffset, dest, destOffset) { const c = src[srcOffset] * 255; dest[destOffset] = dest[destOffset + 1] = dest[destOffset + 2] = c; } getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { const scale = 255 / ((1 << bits) - 1); let j = srcOffset, q = destOffset; for (let i = 0; i < count; ++i) { const c = scale * src[j++]; dest[q++] = c; dest[q++] = c; dest[q++] = c; q += alpha01; } } getOutputLength(inputLength, alpha01) { return inputLength * (3 + alpha01); } } class DeviceRgbCS extends ColorSpace { constructor() { super("DeviceRGB", 3); } getRgbItem(src, srcOffset, dest, destOffset) { dest[destOffset] = src[srcOffset] * 255; dest[destOffset + 1] = src[srcOffset + 1] * 255; dest[destOffset + 2] = src[srcOffset + 2] * 255; } getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { if (bits === 8 && alpha01 === 0) { dest.set(src.subarray(srcOffset, srcOffset + count * 3), destOffset); return; } const scale = 255 / ((1 << bits) - 1); let j = srcOffset, q = destOffset; for (let i = 0; i < count; ++i) { dest[q++] = scale * src[j++]; dest[q++] = scale * src[j++]; dest[q++] = scale * src[j++]; q += alpha01; } } getOutputLength(inputLength, alpha01) { return inputLength * (3 + alpha01) / 3 | 0; } isPassthrough(bits) { return bits === 8; } } const DeviceCmykCS = function DeviceCmykCSClosure() { function convertToRgb(src, srcOffset, srcScale, dest, destOffset) { const c = src[srcOffset] * srcScale; const m = src[srcOffset + 1] * srcScale; const y = src[srcOffset + 2] * srcScale; const k = src[srcOffset + 3] * srcScale; dest[destOffset] = 255 + c * (-4.387332384609988 * c + 54.48615194189176 * m + 18.82290502165302 * y + 212.25662451639585 * k + -285.2331026137004) + m * (1.7149763477362134 * m - 5.6096736904047315 * y + -17.873870861415444 * k - 5.497006427196366) + y * (-2.5217340131683033 * y - 21.248923337353073 * k + 17.5119270841813) + k * (-21.86122147463605 * k - 189.48180835922747); dest[destOffset + 1] = 255 + c * (8.841041422036149 * c + 60.118027045597366 * m + 6.871425592049007 * y + 31.159100130055922 * k + -79.2970844816548) + m * (-15.310361306967817 * m + 17.575251261109482 * y + 131.35250912493976 * k - 190.9453302588951) + y * (4.444339102852739 * y + 9.8632861493405 * k - 24.86741582555878) + k * (-20.737325471181034 * k - 187.80453709719578); dest[destOffset + 2] = 255 + c * (0.8842522430003296 * c + 8.078677503112928 * m + 30.89978309703729 * y - 0.23883238689178934 * k + -14.183576799673286) + m * (10.49593273432072 * m + 63.02378494754052 * y + 50.606957656360734 * k - 112.23884253719248) + y * (0.03296041114873217 * y + 115.60384449646641 * k + -193.58209356861505) + k * (-22.33816807309886 * k - 180.12613974708367); } class DeviceCmykCS extends ColorSpace { constructor() { super("DeviceCMYK", 4); } getRgbItem(src, srcOffset, dest, destOffset) { convertToRgb(src, srcOffset, 1, dest, destOffset); } getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { const scale = 1 / ((1 << bits) - 1); for (let i = 0; i < count; i++) { convertToRgb(src, srcOffset, scale, dest, destOffset); srcOffset += 4; destOffset += 3 + alpha01; } } getOutputLength(inputLength, alpha01) { return inputLength / 4 * (3 + alpha01) | 0; } } return DeviceCmykCS; }(); const CalGrayCS = function CalGrayCSClosure() { function convertToRgb(cs, src, srcOffset, dest, destOffset, scale) { const A = src[srcOffset] * scale; const AG = A ** cs.G; const L = cs.YW * AG; const val = Math.max(295.8 * L ** 0.3333333333333333 - 40.8, 0); dest[destOffset] = val; dest[destOffset + 1] = val; dest[destOffset + 2] = val; } class CalGrayCS extends ColorSpace { constructor(whitePoint, blackPoint, gamma) { super("CalGray", 1); if (!whitePoint) { throw new _util.FormatError("WhitePoint missing - required for color space CalGray"); } blackPoint = blackPoint || [0, 0, 0]; gamma = gamma || 1; this.XW = whitePoint[0]; this.YW = whitePoint[1]; this.ZW = whitePoint[2]; this.XB = blackPoint[0]; this.YB = blackPoint[1]; this.ZB = blackPoint[2]; this.G = gamma; if (this.XW < 0 || this.ZW < 0 || this.YW !== 1) { throw new _util.FormatError(`Invalid WhitePoint components for ${this.name}` + ", no fallback available"); } if (this.XB < 0 || this.YB < 0 || this.ZB < 0) { (0, _util.info)(`Invalid BlackPoint for ${this.name}, falling back to default.`); this.XB = this.YB = this.ZB = 0; } if (this.XB !== 0 || this.YB !== 0 || this.ZB !== 0) { (0, _util.warn)(`${this.name}, BlackPoint: XB: ${this.XB}, YB: ${this.YB}, ` + `ZB: ${this.ZB}, only default values are supported.`); } if (this.G < 1) { (0, _util.info)(`Invalid Gamma: ${this.G} for ${this.name}, ` + "falling back to default."); this.G = 1; } } getRgbItem(src, srcOffset, dest, destOffset) { convertToRgb(this, src, srcOffset, dest, destOffset, 1); } getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { const scale = 1 / ((1 << bits) - 1); for (let i = 0; i < count; ++i) { convertToRgb(this, src, srcOffset, dest, destOffset, scale); srcOffset += 1; destOffset += 3 + alpha01; } } getOutputLength(inputLength, alpha01) { return inputLength * (3 + alpha01); } } return CalGrayCS; }(); const CalRGBCS = function CalRGBCSClosure() { const BRADFORD_SCALE_MATRIX = new Float32Array([0.8951, 0.2664, -0.1614, -0.7502, 1.7135, 0.0367, 0.0389, -0.0685, 1.0296]); const BRADFORD_SCALE_INVERSE_MATRIX = new Float32Array([0.9869929, -0.1470543, 0.1599627, 0.4323053, 0.5183603, 0.0492912, -0.0085287, 0.0400428, 0.9684867]); const SRGB_D65_XYZ_TO_RGB_MATRIX = new Float32Array([3.2404542, -1.5371385, -0.4985314, -0.9692660, 1.8760108, 0.0415560, 0.0556434, -0.2040259, 1.0572252]); const FLAT_WHITEPOINT_MATRIX = new Float32Array([1, 1, 1]); const tempNormalizeMatrix = new Float32Array(3); const tempConvertMatrix1 = new Float32Array(3); const tempConvertMatrix2 = new Float32Array(3); const DECODE_L_CONSTANT = ((8 + 16) / 116) ** 3 / 8.0; function matrixProduct(a, b, result) { result[0] = a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; result[1] = a[3] * b[0] + a[4] * b[1] + a[5] * b[2]; result[2] = a[6] * b[0] + a[7] * b[1] + a[8] * b[2]; } function convertToFlat(sourceWhitePoint, LMS, result) { result[0] = LMS[0] * 1 / sourceWhitePoint[0]; result[1] = LMS[1] * 1 / sourceWhitePoint[1]; result[2] = LMS[2] * 1 / sourceWhitePoint[2]; } function convertToD65(sourceWhitePoint, LMS, result) { const D65X = 0.95047; const D65Y = 1; const D65Z = 1.08883; result[0] = LMS[0] * D65X / sourceWhitePoint[0]; result[1] = LMS[1] * D65Y / sourceWhitePoint[1]; result[2] = LMS[2] * D65Z / sourceWhitePoint[2]; } function sRGBTransferFunction(color) { if (color <= 0.0031308) { return adjustToRange(0, 1, 12.92 * color); } if (color >= 0.99554525) { return 1; } return adjustToRange(0, 1, (1 + 0.055) * color ** (1 / 2.4) - 0.055); } function adjustToRange(min, max, value) { return Math.max(min, Math.min(max, value)); } function decodeL(L) { if (L < 0) { return -decodeL(-L); } if (L > 8.0) { return ((L + 16) / 116) ** 3; } return L * DECODE_L_CONSTANT; } function compensateBlackPoint(sourceBlackPoint, XYZ_Flat, result) { if (sourceBlackPoint[0] === 0 && sourceBlackPoint[1] === 0 && sourceBlackPoint[2] === 0) { result[0] = XYZ_Flat[0]; result[1] = XYZ_Flat[1]; result[2] = XYZ_Flat[2]; return; } const zeroDecodeL = decodeL(0); const X_DST = zeroDecodeL; const X_SRC = decodeL(sourceBlackPoint[0]); const Y_DST = zeroDecodeL; const Y_SRC = decodeL(sourceBlackPoint[1]); const Z_DST = zeroDecodeL; const Z_SRC = decodeL(sourceBlackPoint[2]); const X_Scale = (1 - X_DST) / (1 - X_SRC); const X_Offset = 1 - X_Scale; const Y_Scale = (1 - Y_DST) / (1 - Y_SRC); const Y_Offset = 1 - Y_Scale; const Z_Scale = (1 - Z_DST) / (1 - Z_SRC); const Z_Offset = 1 - Z_Scale; result[0] = XYZ_Flat[0] * X_Scale + X_Offset; result[1] = XYZ_Flat[1] * Y_Scale + Y_Offset; result[2] = XYZ_Flat[2] * Z_Scale + Z_Offset; } function normalizeWhitePointToFlat(sourceWhitePoint, XYZ_In, result) { if (sourceWhitePoint[0] === 1 && sourceWhitePoint[2] === 1) { result[0] = XYZ_In[0]; result[1] = XYZ_In[1]; result[2] = XYZ_In[2]; return; } const LMS = result; matrixProduct(BRADFORD_SCALE_MATRIX, XYZ_In, LMS); const LMS_Flat = tempNormalizeMatrix; convertToFlat(sourceWhitePoint, LMS, LMS_Flat); matrixProduct(BRADFORD_SCALE_INVERSE_MATRIX, LMS_Flat, result); } function normalizeWhitePointToD65(sourceWhitePoint, XYZ_In, result) { const LMS = result; matrixProduct(BRADFORD_SCALE_MATRIX, XYZ_In, LMS); const LMS_D65 = tempNormalizeMatrix; convertToD65(sourceWhitePoint, LMS, LMS_D65); matrixProduct(BRADFORD_SCALE_INVERSE_MATRIX, LMS_D65, result); } function convertToRgb(cs, src, srcOffset, dest, destOffset, scale) { const A = adjustToRange(0, 1, src[srcOffset] * scale); const B = adjustToRange(0, 1, src[srcOffset + 1] * scale); const C = adjustToRange(0, 1, src[srcOffset + 2] * scale); const AGR = A === 1 ? 1 : A ** cs.GR; const BGG = B === 1 ? 1 : B ** cs.GG; const CGB = C === 1 ? 1 : C ** cs.GB; const X = cs.MXA * AGR + cs.MXB * BGG + cs.MXC * CGB; const Y = cs.MYA * AGR + cs.MYB * BGG + cs.MYC * CGB; const Z = cs.MZA * AGR + cs.MZB * BGG + cs.MZC * CGB; const XYZ = tempConvertMatrix1; XYZ[0] = X; XYZ[1] = Y; XYZ[2] = Z; const XYZ_Flat = tempConvertMatrix2; normalizeWhitePointToFlat(cs.whitePoint, XYZ, XYZ_Flat); const XYZ_Black = tempConvertMatrix1; compensateBlackPoint(cs.blackPoint, XYZ_Flat, XYZ_Black); const XYZ_D65 = tempConvertMatrix2; normalizeWhitePointToD65(FLAT_WHITEPOINT_MATRIX, XYZ_Black, XYZ_D65); const SRGB = tempConvertMatrix1; matrixProduct(SRGB_D65_XYZ_TO_RGB_MATRIX, XYZ_D65, SRGB); dest[destOffset] = sRGBTransferFunction(SRGB[0]) * 255; dest[destOffset + 1] = sRGBTransferFunction(SRGB[1]) * 255; dest[destOffset + 2] = sRGBTransferFunction(SRGB[2]) * 255; } class CalRGBCS extends ColorSpace { constructor(whitePoint, blackPoint, gamma, matrix) { super("CalRGB", 3); if (!whitePoint) { throw new _util.FormatError("WhitePoint missing - required for color space CalRGB"); } blackPoint = blackPoint || new Float32Array(3); gamma = gamma || new Float32Array([1, 1, 1]); matrix = matrix || new Float32Array([1, 0, 0, 0, 1, 0, 0, 0, 1]); const XW = whitePoint[0]; const YW = whitePoint[1]; const ZW = whitePoint[2]; this.whitePoint = whitePoint; const XB = blackPoint[0]; const YB = blackPoint[1]; const ZB = blackPoint[2]; this.blackPoint = blackPoint; this.GR = gamma[0]; this.GG = gamma[1]; this.GB = gamma[2]; this.MXA = matrix[0]; this.MYA = matrix[1]; this.MZA = matrix[2]; this.MXB = matrix[3]; this.MYB = matrix[4]; this.MZB = matrix[5]; this.MXC = matrix[6]; this.MYC = matrix[7]; this.MZC = matrix[8]; if (XW < 0 || ZW < 0 || YW !== 1) { throw new _util.FormatError(`Invalid WhitePoint components for ${this.name}` + ", no fallback available"); } if (XB < 0 || YB < 0 || ZB < 0) { (0, _util.info)(`Invalid BlackPoint for ${this.name} [${XB}, ${YB}, ${ZB}], ` + "falling back to default."); this.blackPoint = new Float32Array(3); } if (this.GR < 0 || this.GG < 0 || this.GB < 0) { (0, _util.info)(`Invalid Gamma [${this.GR}, ${this.GG}, ${this.GB}] for ` + `${this.name}, falling back to default.`); this.GR = this.GG = this.GB = 1; } } getRgbItem(src, srcOffset, dest, destOffset) { convertToRgb(this, src, srcOffset, dest, destOffset, 1); } getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { const scale = 1 / ((1 << bits) - 1); for (let i = 0; i < count; ++i) { convertToRgb(this, src, srcOffset, dest, destOffset, scale); srcOffset += 3; destOffset += 3 + alpha01; } } getOutputLength(inputLength, alpha01) { return inputLength * (3 + alpha01) / 3 | 0; } } return CalRGBCS; }(); const LabCS = function LabCSClosure() { function fn_g(x) { let result; if (x >= 6 / 29) { result = x ** 3; } else { result = 108 / 841 * (x - 4 / 29); } return result; } function decode(value, high1, low2, high2) { return low2 + value * (high2 - low2) / high1; } function convertToRgb(cs, src, srcOffset, maxVal, dest, destOffset) { let Ls = src[srcOffset]; let as = src[srcOffset + 1]; let bs = src[srcOffset + 2]; if (maxVal !== false) { Ls = decode(Ls, maxVal, 0, 100); as = decode(as, maxVal, cs.amin, cs.amax); bs = decode(bs, maxVal, cs.bmin, cs.bmax); } if (as > cs.amax) { as = cs.amax; } else if (as < cs.amin) { as = cs.amin; } if (bs > cs.bmax) { bs = cs.bmax; } else if (bs < cs.bmin) { bs = cs.bmin; } const M = (Ls + 16) / 116; const L = M + as / 500; const N = M - bs / 200; const X = cs.XW * fn_g(L); const Y = cs.YW * fn_g(M); const Z = cs.ZW * fn_g(N); let r, g, b; if (cs.ZW < 1) { r = X * 3.1339 + Y * -1.617 + Z * -0.4906; g = X * -0.9785 + Y * 1.916 + Z * 0.0333; b = X * 0.072 + Y * -0.229 + Z * 1.4057; } else { r = X * 3.2406 + Y * -1.5372 + Z * -0.4986; g = X * -0.9689 + Y * 1.8758 + Z * 0.0415; b = X * 0.0557 + Y * -0.204 + Z * 1.057; } dest[destOffset] = Math.sqrt(r) * 255; dest[destOffset + 1] = Math.sqrt(g) * 255; dest[destOffset + 2] = Math.sqrt(b) * 255; } class LabCS extends ColorSpace { constructor(whitePoint, blackPoint, range) { super("Lab", 3); if (!whitePoint) { throw new _util.FormatError("WhitePoint missing - required for color space Lab"); } blackPoint = blackPoint || [0, 0, 0]; range = range || [-100, 100, -100, 100]; this.XW = whitePoint[0]; this.YW = whitePoint[1]; this.ZW = whitePoint[2]; this.amin = range[0]; this.amax = range[1]; this.bmin = range[2]; this.bmax = range[3]; this.XB = blackPoint[0]; this.YB = blackPoint[1]; this.ZB = blackPoint[2]; if (this.XW < 0 || this.ZW < 0 || this.YW !== 1) { throw new _util.FormatError("Invalid WhitePoint components, no fallback available"); } if (this.XB < 0 || this.YB < 0 || this.ZB < 0) { (0, _util.info)("Invalid BlackPoint, falling back to default"); this.XB = this.YB = this.ZB = 0; } if (this.amin > this.amax || this.bmin > this.bmax) { (0, _util.info)("Invalid Range, falling back to defaults"); this.amin = -100; this.amax = 100; this.bmin = -100; this.bmax = 100; } } getRgbItem(src, srcOffset, dest, destOffset) { convertToRgb(this, src, srcOffset, false, dest, destOffset); } getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { const maxVal = (1 << bits) - 1; for (let i = 0; i < count; i++) { convertToRgb(this, src, srcOffset, maxVal, dest, destOffset); srcOffset += 3; destOffset += 3 + alpha01; } } getOutputLength(inputLength, alpha01) { return inputLength * (3 + alpha01) / 3 | 0; } isDefaultDecode(decodeMap, bpc) { return true; } get usesZeroToOneRange() { return (0, _util.shadow)(this, "usesZeroToOneRange", false); } } return LabCS; }(); /***/ }), /* 25 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PartialEvaluator = exports.EvaluatorPreprocessor = void 0; var _util = __w_pdfjs_require__(2); var _cmap = __w_pdfjs_require__(26); var _primitives = __w_pdfjs_require__(5); var _fonts = __w_pdfjs_require__(44); var _fonts_utils = __w_pdfjs_require__(18); var _encodings = __w_pdfjs_require__(19); var _standard_fonts = __w_pdfjs_require__(47); var _unicode = __w_pdfjs_require__(21); var _pattern = __w_pdfjs_require__(55); var _xfa_fonts = __w_pdfjs_require__(12); var _to_unicode_map = __w_pdfjs_require__(48); var _function = __w_pdfjs_require__(56); var _parser = __w_pdfjs_require__(27); var _image_utils = __w_pdfjs_require__(58); var _stream = __w_pdfjs_require__(10); var _base_stream = __w_pdfjs_require__(6); var _bidi = __w_pdfjs_require__(59); var _colorspace = __w_pdfjs_require__(24); var _decode_stream = __w_pdfjs_require__(29); var _glyphlist = __w_pdfjs_require__(20); var _core_utils = __w_pdfjs_require__(9); var _metrics = __w_pdfjs_require__(60); var _murmurhash = __w_pdfjs_require__(61); var _operator_list = __w_pdfjs_require__(62); var _image = __w_pdfjs_require__(63); const DefaultPartialEvaluatorOptions = Object.freeze({ maxImageSize: -1, disableFontFace: false, ignoreErrors: false, isEvalSupported: true, fontExtraProperties: false, useSystemFonts: true, cMapUrl: null, standardFontDataUrl: null }); const PatternType = { TILING: 1, SHADING: 2 }; const TEXT_CHUNK_BATCH_SIZE = 10; const deferred = Promise.resolve(); function normalizeBlendMode(value, parsingArray = false) { if (Array.isArray(value)) { for (let i = 0, ii = value.length; i < ii; i++) { const maybeBM = normalizeBlendMode(value[i], true); if (maybeBM) { return maybeBM; } } (0, _util.warn)(`Unsupported blend mode Array: ${value}`); return "source-over"; } if (!(0, _primitives.isName)(value)) { if (parsingArray) { return null; } return "source-over"; } switch (value.name) { case "Normal": case "Compatible": return "source-over"; case "Multiply": return "multiply"; case "Screen": return "screen"; case "Overlay": return "overlay"; case "Darken": return "darken"; case "Lighten": return "lighten"; case "ColorDodge": return "color-dodge"; case "ColorBurn": return "color-burn"; case "HardLight": return "hard-light"; case "SoftLight": return "soft-light"; case "Difference": return "difference"; case "Exclusion": return "exclusion"; case "Hue": return "hue"; case "Saturation": return "saturation"; case "Color": return "color"; case "Luminosity": return "luminosity"; } if (parsingArray) { return null; } (0, _util.warn)(`Unsupported blend mode: ${value.name}`); return "source-over"; } class TimeSlotManager { static get TIME_SLOT_DURATION_MS() { return (0, _util.shadow)(this, "TIME_SLOT_DURATION_MS", 20); } static get CHECK_TIME_EVERY() { return (0, _util.shadow)(this, "CHECK_TIME_EVERY", 100); } constructor() { this.reset(); } check() { if (++this.checked < TimeSlotManager.CHECK_TIME_EVERY) { return false; } this.checked = 0; return this.endTime <= Date.now(); } reset() { this.endTime = Date.now() + TimeSlotManager.TIME_SLOT_DURATION_MS; this.checked = 0; } } class PartialEvaluator { constructor({ xref, handler, pageIndex, idFactory, fontCache, builtInCMapCache, standardFontDataCache, globalImageCache, options = null }) { this.xref = xref; this.handler = handler; this.pageIndex = pageIndex; this.idFactory = idFactory; this.fontCache = fontCache; this.builtInCMapCache = builtInCMapCache; this.standardFontDataCache = standardFontDataCache; this.globalImageCache = globalImageCache; this.options = options || DefaultPartialEvaluatorOptions; this.parsingType3Font = false; this._fetchBuiltInCMapBound = this.fetchBuiltInCMap.bind(this); } get _pdfFunctionFactory() { const pdfFunctionFactory = new _function.PDFFunctionFactory({ xref: this.xref, isEvalSupported: this.options.isEvalSupported }); return (0, _util.shadow)(this, "_pdfFunctionFactory", pdfFunctionFactory); } clone(newOptions = null) { const newEvaluator = Object.create(this); newEvaluator.options = Object.assign(Object.create(null), this.options, newOptions); return newEvaluator; } hasBlendModes(resources, nonBlendModesSet) { if (!(resources instanceof _primitives.Dict)) { return false; } if (resources.objId && nonBlendModesSet.has(resources.objId)) { return false; } const processed = new _primitives.RefSet(nonBlendModesSet); if (resources.objId) { processed.put(resources.objId); } const nodes = [resources], xref = this.xref; while (nodes.length) { const node = nodes.shift(); const graphicStates = node.get("ExtGState"); if (graphicStates instanceof _primitives.Dict) { for (let graphicState of graphicStates.getRawValues()) { if (graphicState instanceof _primitives.Ref) { if (processed.has(graphicState)) { continue; } try { graphicState = xref.fetch(graphicState); } catch (ex) { processed.put(graphicState); (0, _util.info)(`hasBlendModes - ignoring ExtGState: "${ex}".`); continue; } } if (!(graphicState instanceof _primitives.Dict)) { continue; } if (graphicState.objId) { processed.put(graphicState.objId); } const bm = graphicState.get("BM"); if (bm instanceof _primitives.Name) { if (bm.name !== "Normal") { return true; } continue; } if (bm !== undefined && Array.isArray(bm)) { for (const element of bm) { if (element instanceof _primitives.Name && element.name !== "Normal") { return true; } } } } } const xObjects = node.get("XObject"); if (!(xObjects instanceof _primitives.Dict)) { continue; } for (let xObject of xObjects.getRawValues()) { if (xObject instanceof _primitives.Ref) { if (processed.has(xObject)) { continue; } try { xObject = xref.fetch(xObject); } catch (ex) { processed.put(xObject); (0, _util.info)(`hasBlendModes - ignoring XObject: "${ex}".`); continue; } } if (!(0, _primitives.isStream)(xObject)) { continue; } if (xObject.dict.objId) { processed.put(xObject.dict.objId); } const xResources = xObject.dict.get("Resources"); if (!(xResources instanceof _primitives.Dict)) { continue; } if (xResources.objId && processed.has(xResources.objId)) { continue; } nodes.push(xResources); if (xResources.objId) { processed.put(xResources.objId); } } } processed.forEach(ref => { nonBlendModesSet.put(ref); }); return false; } async fetchBuiltInCMap(name) { const cachedData = this.builtInCMapCache.get(name); if (cachedData) { return cachedData; } let data; if (this.options.cMapUrl !== null) { const url = `${this.options.cMapUrl}${name}.bcmap`; const response = await fetch(url); if (!response.ok) { throw new Error(`fetchBuiltInCMap: failed to fetch file "${url}" with "${response.statusText}".`); } data = { cMapData: new Uint8Array(await response.arrayBuffer()), compressionType: _util.CMapCompressionType.BINARY }; } else { data = await this.handler.sendWithPromise("FetchBuiltInCMap", { name }); } if (data.compressionType !== _util.CMapCompressionType.NONE) { this.builtInCMapCache.set(name, data); } return data; } async fetchStandardFontData(name) { const cachedData = this.standardFontDataCache.get(name); if (cachedData) { return new _stream.Stream(cachedData); } if (this.options.useSystemFonts && name !== "Symbol" && name !== "ZapfDingbats") { return null; } const standardFontNameToFileName = (0, _standard_fonts.getFontNameToFileMap)(), filename = standardFontNameToFileName[name]; let data; if (this.options.standardFontDataUrl !== null) { const url = `${this.options.standardFontDataUrl}${filename}`; const response = await fetch(url); if (!response.ok) { (0, _util.warn)(`fetchStandardFontData: failed to fetch file "${url}" with "${response.statusText}".`); } else { data = await response.arrayBuffer(); } } else { try { data = await this.handler.sendWithPromise("FetchStandardFontData", { filename }); } catch (e) { (0, _util.warn)(`fetchStandardFontData: failed to fetch file "${filename}" with "${e}".`); } } if (!data) { return null; } this.standardFontDataCache.set(name, data); return new _stream.Stream(data); } async buildFormXObject(resources, xobj, smask, operatorList, task, initialState, localColorSpaceCache) { const dict = xobj.dict; const matrix = dict.getArray("Matrix"); let bbox = dict.getArray("BBox"); if (Array.isArray(bbox) && bbox.length === 4) { bbox = _util.Util.normalizeRect(bbox); } else { bbox = null; } let optionalContent, groupOptions; if (dict.has("OC")) { optionalContent = await this.parseMarkedContentProps(dict.get("OC"), resources); } if (optionalContent !== undefined) { operatorList.addOp(_util.OPS.beginMarkedContentProps, ["OC", optionalContent]); } const group = dict.get("Group"); if (group) { groupOptions = { matrix, bbox, smask, isolated: false, knockout: false }; const groupSubtype = group.get("S"); let colorSpace = null; if ((0, _primitives.isName)(groupSubtype, "Transparency")) { groupOptions.isolated = group.get("I") || false; groupOptions.knockout = group.get("K") || false; if (group.has("CS")) { const cs = group.getRaw("CS"); const cachedColorSpace = _colorspace.ColorSpace.getCached(cs, this.xref, localColorSpaceCache); if (cachedColorSpace) { colorSpace = cachedColorSpace; } else { colorSpace = await this.parseColorSpace({ cs, resources, localColorSpaceCache }); } } } if (smask && smask.backdrop) { colorSpace = colorSpace || _colorspace.ColorSpace.singletons.rgb; smask.backdrop = colorSpace.getRgb(smask.backdrop, 0); } operatorList.addOp(_util.OPS.beginGroup, [groupOptions]); } const args = group ? [matrix, null] : [matrix, bbox]; operatorList.addOp(_util.OPS.paintFormXObjectBegin, args); return this.getOperatorList({ stream: xobj, task, resources: dict.get("Resources") || resources, operatorList, initialState }).then(function () { operatorList.addOp(_util.OPS.paintFormXObjectEnd, []); if (group) { operatorList.addOp(_util.OPS.endGroup, [groupOptions]); } if (optionalContent !== undefined) { operatorList.addOp(_util.OPS.endMarkedContent, []); } }); } _sendImgData(objId, imgData, cacheGlobally = false) { const transfers = imgData ? [imgData.data.buffer] : null; if (this.parsingType3Font || cacheGlobally) { return this.handler.send("commonobj", [objId, "Image", imgData], transfers); } return this.handler.send("obj", [objId, this.pageIndex, "Image", imgData], transfers); } async buildPaintImageXObject({ resources, image, isInline = false, operatorList, cacheKey, localImageCache, localColorSpaceCache }) { const dict = image.dict; const imageRef = dict.objId; const w = dict.get("W", "Width"); const h = dict.get("H", "Height"); if (!(w && (0, _util.isNum)(w)) || !(h && (0, _util.isNum)(h))) { (0, _util.warn)("Image dimensions are missing, or not numbers."); return; } const maxImageSize = this.options.maxImageSize; if (maxImageSize !== -1 && w * h > maxImageSize) { (0, _util.warn)("Image exceeded maximum allowed size and was removed."); return; } let optionalContent; if (dict.has("OC")) { optionalContent = await this.parseMarkedContentProps(dict.get("OC"), resources); } if (optionalContent !== undefined) { operatorList.addOp(_util.OPS.beginMarkedContentProps, ["OC", optionalContent]); } const imageMask = dict.get("IM", "ImageMask") || false; const interpolate = dict.get("I", "Interpolate"); let imgData, args; if (imageMask) { const bitStrideLength = w + 7 >> 3; const imgArray = image.getBytes(bitStrideLength * h, true); const decode = dict.getArray("D", "Decode"); imgData = _image.PDFImage.createMask({ imgArray, width: w, height: h, imageIsFromDecodeStream: image instanceof _decode_stream.DecodeStream, inverseDecode: !!decode && decode[0] > 0, interpolate }); imgData.cached = !!cacheKey; args = [imgData]; operatorList.addOp(_util.OPS.paintImageMaskXObject, args); if (cacheKey) { localImageCache.set(cacheKey, imageRef, { fn: _util.OPS.paintImageMaskXObject, args }); } if (optionalContent !== undefined) { operatorList.addOp(_util.OPS.endMarkedContent, []); } return; } const softMask = dict.get("SM", "SMask") || false; const mask = dict.get("Mask") || false; const SMALL_IMAGE_DIMENSIONS = 200; if (isInline && !softMask && !mask && w + h < SMALL_IMAGE_DIMENSIONS) { const imageObj = new _image.PDFImage({ xref: this.xref, res: resources, image, isInline, pdfFunctionFactory: this._pdfFunctionFactory, localColorSpaceCache }); imgData = imageObj.createImageData(true); operatorList.addOp(_util.OPS.paintInlineImageXObject, [imgData]); if (optionalContent !== undefined) { operatorList.addOp(_util.OPS.endMarkedContent, []); } return; } let objId = `img_${this.idFactory.createObjId()}`, cacheGlobally = false; if (this.parsingType3Font) { objId = `${this.idFactory.getDocId()}_type3_${objId}`; } else if (imageRef) { cacheGlobally = this.globalImageCache.shouldCache(imageRef, this.pageIndex); if (cacheGlobally) { objId = `${this.idFactory.getDocId()}_${objId}`; } } operatorList.addDependency(objId); args = [objId, w, h]; _image.PDFImage.buildImage({ xref: this.xref, res: resources, image, isInline, pdfFunctionFactory: this._pdfFunctionFactory, localColorSpaceCache }).then(imageObj => { imgData = imageObj.createImageData(false); if (cacheKey && imageRef && cacheGlobally) { this.globalImageCache.addByteSize(imageRef, imgData.data.length); } return this._sendImgData(objId, imgData, cacheGlobally); }).catch(reason => { (0, _util.warn)(`Unable to decode image "${objId}": "${reason}".`); return this._sendImgData(objId, null, cacheGlobally); }); operatorList.addOp(_util.OPS.paintImageXObject, args); if (cacheKey) { localImageCache.set(cacheKey, imageRef, { fn: _util.OPS.paintImageXObject, args }); if (imageRef) { (0, _util.assert)(!isInline, "Cannot cache an inline image globally."); this.globalImageCache.addPageIndex(imageRef, this.pageIndex); if (cacheGlobally) { this.globalImageCache.setData(imageRef, { objId, fn: _util.OPS.paintImageXObject, args, byteSize: 0 }); } } } if (optionalContent !== undefined) { operatorList.addOp(_util.OPS.endMarkedContent, []); } } handleSMask(smask, resources, operatorList, task, stateManager, localColorSpaceCache) { const smaskContent = smask.get("G"); const smaskOptions = { subtype: smask.get("S").name, backdrop: smask.get("BC") }; const transferObj = smask.get("TR"); if ((0, _function.isPDFFunction)(transferObj)) { const transferFn = this._pdfFunctionFactory.create(transferObj); const transferMap = new Uint8Array(256); const tmp = new Float32Array(1); for (let i = 0; i < 256; i++) { tmp[0] = i / 255; transferFn(tmp, 0, tmp, 0); transferMap[i] = tmp[0] * 255 | 0; } smaskOptions.transferMap = transferMap; } return this.buildFormXObject(resources, smaskContent, smaskOptions, operatorList, task, stateManager.state.clone(), localColorSpaceCache); } handleTransferFunction(tr) { let transferArray; if (Array.isArray(tr)) { transferArray = tr; } else if ((0, _function.isPDFFunction)(tr)) { transferArray = [tr]; } else { return null; } const transferMaps = []; let numFns = 0, numEffectfulFns = 0; for (const entry of transferArray) { const transferObj = this.xref.fetchIfRef(entry); numFns++; if ((0, _primitives.isName)(transferObj, "Identity")) { transferMaps.push(null); continue; } else if (!(0, _function.isPDFFunction)(transferObj)) { return null; } const transferFn = this._pdfFunctionFactory.create(transferObj); const transferMap = new Uint8Array(256), tmp = new Float32Array(1); for (let j = 0; j < 256; j++) { tmp[0] = j / 255; transferFn(tmp, 0, tmp, 0); transferMap[j] = tmp[0] * 255 | 0; } transferMaps.push(transferMap); numEffectfulFns++; } if (!(numFns === 1 || numFns === 4)) { return null; } if (numEffectfulFns === 0) { return null; } return transferMaps; } handleTilingType(fn, color, resources, pattern, patternDict, operatorList, task, localTilingPatternCache) { const tilingOpList = new _operator_list.OperatorList(); const patternResources = _primitives.Dict.merge({ xref: this.xref, dictArray: [patternDict.get("Resources"), resources] }); return this.getOperatorList({ stream: pattern, task, resources: patternResources, operatorList: tilingOpList }).then(function () { const operatorListIR = tilingOpList.getIR(); const tilingPatternIR = (0, _pattern.getTilingPatternIR)(operatorListIR, patternDict, color); operatorList.addDependencies(tilingOpList.dependencies); operatorList.addOp(fn, tilingPatternIR); if (patternDict.objId) { localTilingPatternCache.set(null, patternDict.objId, { operatorListIR, dict: patternDict }); } }).catch(reason => { if (reason instanceof _util.AbortException) { return; } if (this.options.ignoreErrors) { this.handler.send("UnsupportedFeature", { featureId: _util.UNSUPPORTED_FEATURES.errorTilingPattern }); (0, _util.warn)(`handleTilingType - ignoring pattern: "${reason}".`); return; } throw reason; }); } handleSetFont(resources, fontArgs, fontRef, operatorList, task, state, fallbackFontDict = null, cssFontInfo = null) { const fontName = fontArgs && fontArgs[0] instanceof _primitives.Name ? fontArgs[0].name : null; return this.loadFont(fontName, fontRef, resources, fallbackFontDict, cssFontInfo).then(translated => { if (!translated.font.isType3Font) { return translated; } return translated.loadType3Data(this, resources, task).then(function () { operatorList.addDependencies(translated.type3Dependencies); return translated; }).catch(reason => { this.handler.send("UnsupportedFeature", { featureId: _util.UNSUPPORTED_FEATURES.errorFontLoadType3 }); return new TranslatedFont({ loadedName: "g_font_error", font: new _fonts.ErrorFont(`Type3 font load error: ${reason}`), dict: translated.font, evaluatorOptions: this.options }); }); }).then(translated => { state.font = translated.font; translated.send(this.handler); return translated.loadedName; }); } handleText(chars, state) { const font = state.font; const glyphs = font.charsToGlyphs(chars); if (font.data) { const isAddToPathSet = !!(state.textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG); if (isAddToPathSet || state.fillColorSpace.name === "Pattern" || font.disableFontFace || this.options.disableFontFace) { PartialEvaluator.buildFontPaths(font, glyphs, this.handler, this.options); } } return glyphs; } ensureStateFont(state) { if (state.font) { return; } const reason = new _util.FormatError("Missing setFont (Tf) operator before text rendering operator."); if (this.options.ignoreErrors) { this.handler.send("UnsupportedFeature", { featureId: _util.UNSUPPORTED_FEATURES.errorFontState }); (0, _util.warn)(`ensureStateFont: "${reason}".`); return; } throw reason; } async setGState({ resources, gState, operatorList, cacheKey, task, stateManager, localGStateCache, localColorSpaceCache }) { const gStateRef = gState.objId; let isSimpleGState = true; const gStateObj = []; const gStateKeys = gState.getKeys(); let promise = Promise.resolve(); for (let i = 0, ii = gStateKeys.length; i < ii; i++) { const key = gStateKeys[i]; const value = gState.get(key); switch (key) { case "Type": break; case "LW": case "LC": case "LJ": case "ML": case "D": case "RI": case "FL": case "CA": case "ca": gStateObj.push([key, value]); break; case "Font": isSimpleGState = false; promise = promise.then(() => { return this.handleSetFont(resources, null, value[0], operatorList, task, stateManager.state).then(function (loadedName) { operatorList.addDependency(loadedName); gStateObj.push([key, [loadedName, value[1]]]); }); }); break; case "BM": gStateObj.push([key, normalizeBlendMode(value)]); break; case "SMask": if ((0, _primitives.isName)(value, "None")) { gStateObj.push([key, false]); break; } if ((0, _primitives.isDict)(value)) { isSimpleGState = false; promise = promise.then(() => { return this.handleSMask(value, resources, operatorList, task, stateManager, localColorSpaceCache); }); gStateObj.push([key, true]); } else { (0, _util.warn)("Unsupported SMask type"); } break; case "TR": const transferMaps = this.handleTransferFunction(value); gStateObj.push([key, transferMaps]); break; case "OP": case "op": case "OPM": case "BG": case "BG2": case "UCR": case "UCR2": case "TR2": case "HT": case "SM": case "SA": case "AIS": case "TK": (0, _util.info)("graphic state operator " + key); break; default: (0, _util.info)("Unknown graphic state operator " + key); break; } } return promise.then(function () { if (gStateObj.length > 0) { operatorList.addOp(_util.OPS.setGState, [gStateObj]); } if (isSimpleGState) { localGStateCache.set(cacheKey, gStateRef, gStateObj); } }); } loadFont(fontName, font, resources, fallbackFontDict = null, cssFontInfo = null) { const errorFont = async () => { return new TranslatedFont({ loadedName: "g_font_error", font: new _fonts.ErrorFont(`Font "${fontName}" is not available.`), dict: font, evaluatorOptions: this.options }); }; const xref = this.xref; let fontRef; if (font) { if (!(0, _primitives.isRef)(font)) { throw new _util.FormatError('The "font" object should be a reference.'); } fontRef = font; } else { const fontRes = resources.get("Font"); if (fontRes) { fontRef = fontRes.getRaw(fontName); } } if (!fontRef) { const partialMsg = `Font "${fontName || font && font.toString()}" is not available`; if (!this.options.ignoreErrors && !this.parsingType3Font) { (0, _util.warn)(`${partialMsg}.`); return errorFont(); } this.handler.send("UnsupportedFeature", { featureId: _util.UNSUPPORTED_FEATURES.errorFontMissing }); (0, _util.warn)(`${partialMsg} -- attempting to fallback to a default font.`); if (fallbackFontDict) { fontRef = fallbackFontDict; } else { fontRef = PartialEvaluator.fallbackFontDict; } } if (this.fontCache.has(fontRef)) { return this.fontCache.get(fontRef); } font = xref.fetchIfRef(fontRef); if (!(0, _primitives.isDict)(font)) { return errorFont(); } if (font.cacheKey && this.fontCache.has(font.cacheKey)) { return this.fontCache.get(font.cacheKey); } const fontCapability = (0, _util.createPromiseCapability)(); let preEvaluatedFont; try { preEvaluatedFont = this.preEvaluateFont(font); preEvaluatedFont.cssFontInfo = cssFontInfo; } catch (reason) { (0, _util.warn)(`loadFont - preEvaluateFont failed: "${reason}".`); return errorFont(); } const { descriptor, hash } = preEvaluatedFont; const fontRefIsRef = (0, _primitives.isRef)(fontRef); let fontID; if (fontRefIsRef) { fontID = `f${fontRef.toString()}`; } if (hash && (0, _primitives.isDict)(descriptor)) { if (!descriptor.fontAliases) { descriptor.fontAliases = Object.create(null); } const fontAliases = descriptor.fontAliases; if (fontAliases[hash]) { const aliasFontRef = fontAliases[hash].aliasRef; if (fontRefIsRef && aliasFontRef && this.fontCache.has(aliasFontRef)) { this.fontCache.putAlias(fontRef, aliasFontRef); return this.fontCache.get(fontRef); } } else { fontAliases[hash] = { fontID: this.idFactory.createFontId() }; } if (fontRefIsRef) { fontAliases[hash].aliasRef = fontRef; } fontID = fontAliases[hash].fontID; } if (fontRefIsRef) { this.fontCache.put(fontRef, fontCapability.promise); } else { if (!fontID) { fontID = this.idFactory.createFontId(); } font.cacheKey = `cacheKey_${fontID}`; this.fontCache.put(font.cacheKey, fontCapability.promise); } (0, _util.assert)(fontID && fontID.startsWith("f"), 'The "fontID" must be (correctly) defined.'); font.loadedName = `${this.idFactory.getDocId()}_${fontID}`; this.translateFont(preEvaluatedFont).then(translatedFont => { if (translatedFont.fontType !== undefined) { xref.stats.addFontType(translatedFont.fontType); } fontCapability.resolve(new TranslatedFont({ loadedName: font.loadedName, font: translatedFont, dict: font, evaluatorOptions: this.options })); }).catch(reason => { this.handler.send("UnsupportedFeature", { featureId: _util.UNSUPPORTED_FEATURES.errorFontTranslate }); (0, _util.warn)(`loadFont - translateFont failed: "${reason}".`); try { const fontFile3 = descriptor && descriptor.get("FontFile3"); const subtype = fontFile3 && fontFile3.get("Subtype"); const fontType = (0, _fonts_utils.getFontType)(preEvaluatedFont.type, subtype && subtype.name); if (fontType !== undefined) { xref.stats.addFontType(fontType); } } catch (ex) {} fontCapability.resolve(new TranslatedFont({ loadedName: font.loadedName, font: new _fonts.ErrorFont(reason instanceof Error ? reason.message : reason), dict: font, evaluatorOptions: this.options })); }); return fontCapability.promise; } buildPath(operatorList, fn, args, parsingText = false) { const lastIndex = operatorList.length - 1; if (!args) { args = []; } if (lastIndex < 0 || operatorList.fnArray[lastIndex] !== _util.OPS.constructPath) { if (parsingText) { (0, _util.warn)(`Encountered path operator "${fn}" inside of a text object.`); operatorList.addOp(_util.OPS.save, null); } operatorList.addOp(_util.OPS.constructPath, [[fn], args]); if (parsingText) { operatorList.addOp(_util.OPS.restore, null); } } else { const opArgs = operatorList.argsArray[lastIndex]; opArgs[0].push(fn); Array.prototype.push.apply(opArgs[1], args); } } parseColorSpace({ cs, resources, localColorSpaceCache }) { return _colorspace.ColorSpace.parseAsync({ cs, xref: this.xref, resources, pdfFunctionFactory: this._pdfFunctionFactory, localColorSpaceCache }).catch(reason => { if (reason instanceof _util.AbortException) { return null; } if (this.options.ignoreErrors) { this.handler.send("UnsupportedFeature", { featureId: _util.UNSUPPORTED_FEATURES.errorColorSpace }); (0, _util.warn)(`parseColorSpace - ignoring ColorSpace: "${reason}".`); return null; } throw reason; }); } parseShading({ shading, resources, localColorSpaceCache, localShadingPatternCache }) { let id = localShadingPatternCache.get(shading); if (!id) { var shadingFill = _pattern.Pattern.parseShading(shading, this.xref, resources, this.handler, this._pdfFunctionFactory, localColorSpaceCache); const patternIR = shadingFill.getIR(); id = `pattern_${this.idFactory.createObjId()}`; localShadingPatternCache.set(shading, id); this.handler.send("obj", [id, this.pageIndex, "Pattern", patternIR]); } return id; } handleColorN(operatorList, fn, args, cs, patterns, resources, task, localColorSpaceCache, localTilingPatternCache, localShadingPatternCache) { const patternName = args.pop(); if (patternName instanceof _primitives.Name) { const rawPattern = patterns.getRaw(patternName.name); const localTilingPattern = rawPattern instanceof _primitives.Ref && localTilingPatternCache.getByRef(rawPattern); if (localTilingPattern) { try { const color = cs.base ? cs.base.getRgb(args, 0) : null; const tilingPatternIR = (0, _pattern.getTilingPatternIR)(localTilingPattern.operatorListIR, localTilingPattern.dict, color); operatorList.addOp(fn, tilingPatternIR); return undefined; } catch (ex) {} } const pattern = this.xref.fetchIfRef(rawPattern); if (pattern) { const dict = (0, _primitives.isStream)(pattern) ? pattern.dict : pattern; const typeNum = dict.get("PatternType"); if (typeNum === PatternType.TILING) { const color = cs.base ? cs.base.getRgb(args, 0) : null; return this.handleTilingType(fn, color, resources, pattern, dict, operatorList, task, localTilingPatternCache); } else if (typeNum === PatternType.SHADING) { const shading = dict.get("Shading"); const matrix = dict.getArray("Matrix"); const objId = this.parseShading({ shading, resources, localColorSpaceCache, localShadingPatternCache }); operatorList.addOp(fn, ["Shading", objId, matrix]); return undefined; } throw new _util.FormatError(`Unknown PatternType: ${typeNum}`); } } throw new _util.FormatError(`Unknown PatternName: ${patternName}`); } _parseVisibilityExpression(array, nestingCounter, currentResult) { const MAX_NESTING = 10; if (++nestingCounter > MAX_NESTING) { (0, _util.warn)("Visibility expression is too deeply nested"); return; } const length = array.length; const operator = this.xref.fetchIfRef(array[0]); if (length < 2 || !(0, _primitives.isName)(operator)) { (0, _util.warn)("Invalid visibility expression"); return; } switch (operator.name) { case "And": case "Or": case "Not": currentResult.push(operator.name); break; default: (0, _util.warn)(`Invalid operator ${operator.name} in visibility expression`); return; } for (let i = 1; i < length; i++) { const raw = array[i]; const object = this.xref.fetchIfRef(raw); if (Array.isArray(object)) { const nestedResult = []; currentResult.push(nestedResult); this._parseVisibilityExpression(object, nestingCounter, nestedResult); } else if ((0, _primitives.isRef)(raw)) { currentResult.push(raw.toString()); } } } async parseMarkedContentProps(contentProperties, resources) { let optionalContent; if ((0, _primitives.isName)(contentProperties)) { const properties = resources.get("Properties"); optionalContent = properties.get(contentProperties.name); } else if ((0, _primitives.isDict)(contentProperties)) { optionalContent = contentProperties; } else { throw new _util.FormatError("Optional content properties malformed."); } const optionalContentType = optionalContent.get("Type").name; if (optionalContentType === "OCG") { return { type: optionalContentType, id: optionalContent.objId }; } else if (optionalContentType === "OCMD") { const expression = optionalContent.get("VE"); if (Array.isArray(expression)) { const result = []; this._parseVisibilityExpression(expression, 0, result); if (result.length > 0) { return { type: "OCMD", expression: result }; } } const optionalContentGroups = optionalContent.get("OCGs"); if (Array.isArray(optionalContentGroups) || (0, _primitives.isDict)(optionalContentGroups)) { const groupIds = []; if (Array.isArray(optionalContentGroups)) { for (const ocg of optionalContentGroups) { groupIds.push(ocg.toString()); } } else { groupIds.push(optionalContentGroups.objId); } return { type: optionalContentType, ids: groupIds, policy: (0, _primitives.isName)(optionalContent.get("P")) ? optionalContent.get("P").name : null, expression: null }; } else if ((0, _primitives.isRef)(optionalContentGroups)) { return { type: optionalContentType, id: optionalContentGroups.toString() }; } } return null; } getOperatorList({ stream, task, resources, operatorList, initialState = null, fallbackFontDict = null }) { resources = resources || _primitives.Dict.empty; initialState = initialState || new EvalState(); if (!operatorList) { throw new Error('getOperatorList: missing "operatorList" parameter'); } const self = this; const xref = this.xref; let parsingText = false; const localImageCache = new _image_utils.LocalImageCache(); const localColorSpaceCache = new _image_utils.LocalColorSpaceCache(); const localGStateCache = new _image_utils.LocalGStateCache(); const localTilingPatternCache = new _image_utils.LocalTilingPatternCache(); const localShadingPatternCache = new Map(); const xobjs = resources.get("XObject") || _primitives.Dict.empty; const patterns = resources.get("Pattern") || _primitives.Dict.empty; const stateManager = new StateManager(initialState); const preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager); const timeSlotManager = new TimeSlotManager(); function closePendingRestoreOPS(argument) { for (let i = 0, ii = preprocessor.savedStatesDepth; i < ii; i++) { operatorList.addOp(_util.OPS.restore, []); } } return new Promise(function promiseBody(resolve, reject) { const next = function (promise) { Promise.all([promise, operatorList.ready]).then(function () { try { promiseBody(resolve, reject); } catch (ex) { reject(ex); } }, reject); }; task.ensureNotTerminated(); timeSlotManager.reset(); const operation = {}; let stop, i, ii, cs, name, isValidName; while (!(stop = timeSlotManager.check())) { operation.args = null; if (!preprocessor.read(operation)) { break; } let args = operation.args; let fn = operation.fn; switch (fn | 0) { case _util.OPS.paintXObject: isValidName = args[0] instanceof _primitives.Name; name = args[0].name; if (isValidName) { const localImage = localImageCache.getByName(name); if (localImage) { operatorList.addOp(localImage.fn, localImage.args); args = null; continue; } } next(new Promise(function (resolveXObject, rejectXObject) { if (!isValidName) { throw new _util.FormatError("XObject must be referred to by name."); } let xobj = xobjs.getRaw(name); if (xobj instanceof _primitives.Ref) { const localImage = localImageCache.getByRef(xobj); if (localImage) { operatorList.addOp(localImage.fn, localImage.args); resolveXObject(); return; } const globalImage = self.globalImageCache.getData(xobj, self.pageIndex); if (globalImage) { operatorList.addDependency(globalImage.objId); operatorList.addOp(globalImage.fn, globalImage.args); resolveXObject(); return; } xobj = xref.fetch(xobj); } if (!(0, _primitives.isStream)(xobj)) { throw new _util.FormatError("XObject should be a stream"); } const type = xobj.dict.get("Subtype"); if (!(0, _primitives.isName)(type)) { throw new _util.FormatError("XObject should have a Name subtype"); } if (type.name === "Form") { stateManager.save(); self.buildFormXObject(resources, xobj, null, operatorList, task, stateManager.state.clone(), localColorSpaceCache).then(function () { stateManager.restore(); resolveXObject(); }, rejectXObject); return; } else if (type.name === "Image") { self.buildPaintImageXObject({ resources, image: xobj, operatorList, cacheKey: name, localImageCache, localColorSpaceCache }).then(resolveXObject, rejectXObject); return; } else if (type.name === "PS") { (0, _util.info)("Ignored XObject subtype PS"); } else { throw new _util.FormatError(`Unhandled XObject subtype ${type.name}`); } resolveXObject(); }).catch(function (reason) { if (reason instanceof _util.AbortException) { return; } if (self.options.ignoreErrors) { self.handler.send("UnsupportedFeature", { featureId: _util.UNSUPPORTED_FEATURES.errorXObject }); (0, _util.warn)(`getOperatorList - ignoring XObject: "${reason}".`); return; } throw reason; })); return; case _util.OPS.setFont: var fontSize = args[1]; next(self.handleSetFont(resources, args, null, operatorList, task, stateManager.state, fallbackFontDict).then(function (loadedName) { operatorList.addDependency(loadedName); operatorList.addOp(_util.OPS.setFont, [loadedName, fontSize]); })); return; case _util.OPS.beginText: parsingText = true; break; case _util.OPS.endText: parsingText = false; break; case _util.OPS.endInlineImage: var cacheKey = args[0].cacheKey; if (cacheKey) { const localImage = localImageCache.getByName(cacheKey); if (localImage) { operatorList.addOp(localImage.fn, localImage.args); args = null; continue; } } next(self.buildPaintImageXObject({ resources, image: args[0], isInline: true, operatorList, cacheKey, localImageCache, localColorSpaceCache })); return; case _util.OPS.showText: if (!stateManager.state.font) { self.ensureStateFont(stateManager.state); continue; } args[0] = self.handleText(args[0], stateManager.state); break; case _util.OPS.showSpacedText: if (!stateManager.state.font) { self.ensureStateFont(stateManager.state); continue; } var arr = args[0]; var combinedGlyphs = []; var arrLength = arr.length; var state = stateManager.state; for (i = 0; i < arrLength; ++i) { const arrItem = arr[i]; if ((0, _util.isString)(arrItem)) { Array.prototype.push.apply(combinedGlyphs, self.handleText(arrItem, state)); } else if ((0, _util.isNum)(arrItem)) { combinedGlyphs.push(arrItem); } } args[0] = combinedGlyphs; fn = _util.OPS.showText; break; case _util.OPS.nextLineShowText: if (!stateManager.state.font) { self.ensureStateFont(stateManager.state); continue; } operatorList.addOp(_util.OPS.nextLine); args[0] = self.handleText(args[0], stateManager.state); fn = _util.OPS.showText; break; case _util.OPS.nextLineSetSpacingShowText: if (!stateManager.state.font) { self.ensureStateFont(stateManager.state); continue; } operatorList.addOp(_util.OPS.nextLine); operatorList.addOp(_util.OPS.setWordSpacing, [args.shift()]); operatorList.addOp(_util.OPS.setCharSpacing, [args.shift()]); args[0] = self.handleText(args[0], stateManager.state); fn = _util.OPS.showText; break; case _util.OPS.setTextRenderingMode: stateManager.state.textRenderingMode = args[0]; break; case _util.OPS.setFillColorSpace: { const cachedColorSpace = _colorspace.ColorSpace.getCached(args[0], xref, localColorSpaceCache); if (cachedColorSpace) { stateManager.state.fillColorSpace = cachedColorSpace; continue; } next(self.parseColorSpace({ cs: args[0], resources, localColorSpaceCache }).then(function (colorSpace) { if (colorSpace) { stateManager.state.fillColorSpace = colorSpace; } })); return; } case _util.OPS.setStrokeColorSpace: { const cachedColorSpace = _colorspace.ColorSpace.getCached(args[0], xref, localColorSpaceCache); if (cachedColorSpace) { stateManager.state.strokeColorSpace = cachedColorSpace; continue; } next(self.parseColorSpace({ cs: args[0], resources, localColorSpaceCache }).then(function (colorSpace) { if (colorSpace) { stateManager.state.strokeColorSpace = colorSpace; } })); return; } case _util.OPS.setFillColor: cs = stateManager.state.fillColorSpace; args = cs.getRgb(args, 0); fn = _util.OPS.setFillRGBColor; break; case _util.OPS.setStrokeColor: cs = stateManager.state.strokeColorSpace; args = cs.getRgb(args, 0); fn = _util.OPS.setStrokeRGBColor; break; case _util.OPS.setFillGray: stateManager.state.fillColorSpace = _colorspace.ColorSpace.singletons.gray; args = _colorspace.ColorSpace.singletons.gray.getRgb(args, 0); fn = _util.OPS.setFillRGBColor; break; case _util.OPS.setStrokeGray: stateManager.state.strokeColorSpace = _colorspace.ColorSpace.singletons.gray; args = _colorspace.ColorSpace.singletons.gray.getRgb(args, 0); fn = _util.OPS.setStrokeRGBColor; break; case _util.OPS.setFillCMYKColor: stateManager.state.fillColorSpace = _colorspace.ColorSpace.singletons.cmyk; args = _colorspace.ColorSpace.singletons.cmyk.getRgb(args, 0); fn = _util.OPS.setFillRGBColor; break; case _util.OPS.setStrokeCMYKColor: stateManager.state.strokeColorSpace = _colorspace.ColorSpace.singletons.cmyk; args = _colorspace.ColorSpace.singletons.cmyk.getRgb(args, 0); fn = _util.OPS.setStrokeRGBColor; break; case _util.OPS.setFillRGBColor: stateManager.state.fillColorSpace = _colorspace.ColorSpace.singletons.rgb; args = _colorspace.ColorSpace.singletons.rgb.getRgb(args, 0); break; case _util.OPS.setStrokeRGBColor: stateManager.state.strokeColorSpace = _colorspace.ColorSpace.singletons.rgb; args = _colorspace.ColorSpace.singletons.rgb.getRgb(args, 0); break; case _util.OPS.setFillColorN: cs = stateManager.state.fillColorSpace; if (cs.name === "Pattern") { next(self.handleColorN(operatorList, _util.OPS.setFillColorN, args, cs, patterns, resources, task, localColorSpaceCache, localTilingPatternCache, localShadingPatternCache)); return; } args = cs.getRgb(args, 0); fn = _util.OPS.setFillRGBColor; break; case _util.OPS.setStrokeColorN: cs = stateManager.state.strokeColorSpace; if (cs.name === "Pattern") { next(self.handleColorN(operatorList, _util.OPS.setStrokeColorN, args, cs, patterns, resources, task, localColorSpaceCache, localTilingPatternCache, localShadingPatternCache)); return; } args = cs.getRgb(args, 0); fn = _util.OPS.setStrokeRGBColor; break; case _util.OPS.shadingFill: var shadingRes = resources.get("Shading"); if (!shadingRes) { throw new _util.FormatError("No shading resource found"); } var shading = shadingRes.get(args[0].name); if (!shading) { throw new _util.FormatError("No shading object found"); } const patternId = self.parseShading({ shading, resources, localColorSpaceCache, localShadingPatternCache }); args = [patternId]; fn = _util.OPS.shadingFill; break; case _util.OPS.setGState: isValidName = args[0] instanceof _primitives.Name; name = args[0].name; if (isValidName) { const localGStateObj = localGStateCache.getByName(name); if (localGStateObj) { if (localGStateObj.length > 0) { operatorList.addOp(_util.OPS.setGState, [localGStateObj]); } args = null; continue; } } next(new Promise(function (resolveGState, rejectGState) { if (!isValidName) { throw new _util.FormatError("GState must be referred to by name."); } const extGState = resources.get("ExtGState"); if (!(extGState instanceof _primitives.Dict)) { throw new _util.FormatError("ExtGState should be a dictionary."); } const gState = extGState.get(name); if (!(gState instanceof _primitives.Dict)) { throw new _util.FormatError("GState should be a dictionary."); } self.setGState({ resources, gState, operatorList, cacheKey: name, task, stateManager, localGStateCache, localColorSpaceCache }).then(resolveGState, rejectGState); }).catch(function (reason) { if (reason instanceof _util.AbortException) { return; } if (self.options.ignoreErrors) { self.handler.send("UnsupportedFeature", { featureId: _util.UNSUPPORTED_FEATURES.errorExtGState }); (0, _util.warn)(`getOperatorList - ignoring ExtGState: "${reason}".`); return; } throw reason; })); return; case _util.OPS.moveTo: case _util.OPS.lineTo: case _util.OPS.curveTo: case _util.OPS.curveTo2: case _util.OPS.curveTo3: case _util.OPS.closePath: case _util.OPS.rectangle: self.buildPath(operatorList, fn, args, parsingText); continue; case _util.OPS.markPoint: case _util.OPS.markPointProps: case _util.OPS.beginCompat: case _util.OPS.endCompat: continue; case _util.OPS.beginMarkedContentProps: if (!(0, _primitives.isName)(args[0])) { (0, _util.warn)(`Expected name for beginMarkedContentProps arg0=${args[0]}`); continue; } if (args[0].name === "OC") { next(self.parseMarkedContentProps(args[1], resources).then(data => { operatorList.addOp(_util.OPS.beginMarkedContentProps, ["OC", data]); }).catch(reason => { if (reason instanceof _util.AbortException) { return; } if (self.options.ignoreErrors) { self.handler.send("UnsupportedFeature", { featureId: _util.UNSUPPORTED_FEATURES.errorMarkedContent }); (0, _util.warn)(`getOperatorList - ignoring beginMarkedContentProps: "${reason}".`); return; } throw reason; })); return; } args = [args[0].name, args[1] instanceof _primitives.Dict ? args[1].get("MCID") : null]; break; case _util.OPS.beginMarkedContent: case _util.OPS.endMarkedContent: default: if (args !== null) { for (i = 0, ii = args.length; i < ii; i++) { if (args[i] instanceof _primitives.Dict) { break; } } if (i < ii) { (0, _util.warn)("getOperatorList - ignoring operator: " + fn); continue; } } } operatorList.addOp(fn, args); } if (stop) { next(deferred); return; } closePendingRestoreOPS(); resolve(); }).catch(reason => { if (reason instanceof _util.AbortException) { return; } if (this.options.ignoreErrors) { this.handler.send("UnsupportedFeature", { featureId: _util.UNSUPPORTED_FEATURES.errorOperatorList }); (0, _util.warn)(`getOperatorList - ignoring errors during "${task.name}" ` + `task: "${reason}".`); closePendingRestoreOPS(); return; } throw reason; }); } getTextContent({ stream, task, resources, stateManager = null, normalizeWhitespace = false, combineTextItems = false, includeMarkedContent = false, sink, seenStyles = new Set() }) { resources = resources || _primitives.Dict.empty; stateManager = stateManager || new StateManager(new TextState()); const WhitespaceRegexp = /\s/g; const DiacriticRegExp = new RegExp("^\\p{Mn}$", "u"); const NormalizedUnicodes = (0, _unicode.getNormalizedUnicodes)(); const textContent = { items: [], styles: Object.create(null) }; const textContentItem = { initialized: false, str: [], totalWidth: 0, totalHeight: 0, width: 0, height: 0, vertical: false, prevTransform: null, textAdvanceScale: 0, spaceInFlowMin: 0, spaceInFlowMax: 0, trackingSpaceMin: Infinity, negativeSpaceMax: -Infinity, transform: null, fontName: null, hasEOL: false }; const TRACKING_SPACE_FACTOR = 0.1; const NEGATIVE_SPACE_FACTOR = -0.2; const SPACE_IN_FLOW_MIN_FACTOR = 0.1; const SPACE_IN_FLOW_MAX_FACTOR = 0.6; const self = this; const xref = this.xref; const showSpacedTextBuffer = []; let xobjs = null; const emptyXObjectCache = new _image_utils.LocalImageCache(); const emptyGStateCache = new _image_utils.LocalGStateCache(); const preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager); let textState; function getCurrentTextTransform() { const font = textState.font; const tsm = [textState.fontSize * textState.textHScale, 0, 0, textState.fontSize, 0, textState.textRise]; if (font.isType3Font && (textState.fontSize <= 1 || font.isCharBBox) && !(0, _util.isArrayEqual)(textState.fontMatrix, _util.FONT_IDENTITY_MATRIX)) { const glyphHeight = font.bbox[3] - font.bbox[1]; if (glyphHeight > 0) { tsm[3] *= glyphHeight * textState.fontMatrix[3]; } } return _util.Util.transform(textState.ctm, _util.Util.transform(textState.textMatrix, tsm)); } function ensureTextContentItem() { if (textContentItem.initialized) { return textContentItem; } const font = textState.font, loadedName = font.loadedName; if (!seenStyles.has(loadedName)) { seenStyles.add(loadedName); textContent.styles[loadedName] = { fontFamily: font.fallbackName, ascent: font.ascent, descent: font.descent, vertical: font.vertical }; } textContentItem.fontName = loadedName; const trm = textContentItem.transform = getCurrentTextTransform(); if (!font.vertical) { textContentItem.width = textContentItem.totalWidth = 0; textContentItem.height = textContentItem.totalHeight = Math.hypot(trm[2], trm[3]); textContentItem.vertical = false; } else { textContentItem.width = textContentItem.totalWidth = Math.hypot(trm[0], trm[1]); textContentItem.height = textContentItem.totalHeight = 0; textContentItem.vertical = true; } const scaleLineX = Math.hypot(textState.textLineMatrix[0], textState.textLineMatrix[1]); const scaleCtmX = Math.hypot(textState.ctm[0], textState.ctm[1]); textContentItem.textAdvanceScale = scaleCtmX * scaleLineX; textContentItem.trackingSpaceMin = textState.fontSize * TRACKING_SPACE_FACTOR; textContentItem.negativeSpaceMax = textState.fontSize * NEGATIVE_SPACE_FACTOR; textContentItem.spaceInFlowMin = textState.fontSize * SPACE_IN_FLOW_MIN_FACTOR; textContentItem.spaceInFlowMax = textState.fontSize * SPACE_IN_FLOW_MAX_FACTOR; textContentItem.hasEOL = false; textContentItem.initialized = true; return textContentItem; } function updateAdvanceScale() { if (!textContentItem.initialized) { return; } const scaleLineX = Math.hypot(textState.textLineMatrix[0], textState.textLineMatrix[1]); const scaleCtmX = Math.hypot(textState.ctm[0], textState.ctm[1]); const scaleFactor = scaleCtmX * scaleLineX; if (scaleFactor === textContentItem.textAdvanceScale) { return; } if (!textContentItem.vertical) { textContentItem.totalWidth += textContentItem.width * textContentItem.textAdvanceScale; textContentItem.width = 0; } else { textContentItem.totalHeight += textContentItem.height * textContentItem.textAdvanceScale; textContentItem.height = 0; } textContentItem.textAdvanceScale = scaleFactor; } function replaceWhitespace(str) { const ii = str.length; let i = 0, code; while (i < ii && (code = str.charCodeAt(i)) >= 0x20 && code <= 0x7f) { i++; } return i < ii ? str.replace(WhitespaceRegexp, " ") : str; } function runBidiTransform(textChunk) { const text = textChunk.str.join(""); const bidiResult = (0, _bidi.bidi)(text, -1, textChunk.vertical); const str = normalizeWhitespace ? replaceWhitespace(bidiResult.str) : bidiResult.str; return { str, dir: bidiResult.dir, width: textChunk.totalWidth, height: textChunk.totalHeight, transform: textChunk.transform, fontName: textChunk.fontName, hasEOL: textChunk.hasEOL }; } function handleSetFont(fontName, fontRef) { return self.loadFont(fontName, fontRef, resources).then(function (translated) { if (!translated.font.isType3Font) { return translated; } return translated.loadType3Data(self, resources, task).catch(function () {}).then(function () { return translated; }); }).then(function (translated) { textState.font = translated.font; textState.fontMatrix = translated.font.fontMatrix || _util.FONT_IDENTITY_MATRIX; }); } function compareWithLastPosition() { if (!combineTextItems || !textState.font || !textContentItem.prevTransform) { return; } const currentTransform = getCurrentTextTransform(); let posX = currentTransform[4]; let posY = currentTransform[5]; let lastPosX = textContentItem.prevTransform[4]; let lastPosY = textContentItem.prevTransform[5]; if (lastPosX === posX && lastPosY === posY) { return; } let rotate = 0; if (currentTransform[0] && currentTransform[1] === 0 && currentTransform[2] === 0) { rotate = currentTransform[0] > 0 ? 0 : 180; } else if (currentTransform[1] && currentTransform[0] === 0 && currentTransform[3] === 0) { rotate += currentTransform[1] > 0 ? 90 : 270; } if (rotate !== 0) { switch (rotate) { case 90: [posX, posY] = [posY, posX]; [lastPosX, lastPosY] = [lastPosY, lastPosX]; break; case 180: [posX, posY, lastPosX, lastPosY] = [-posX, -posY, -lastPosX, -lastPosY]; break; case 270: [posX, posY] = [-posY, -posX]; [lastPosX, lastPosY] = [-lastPosY, -lastPosX]; break; } } if (textState.font.vertical) { const advanceY = (lastPosY - posY) / textContentItem.textAdvanceScale; const advanceX = posX - lastPosX; if (advanceY < textContentItem.negativeSpaceMax) { if (Math.abs(advanceX) > 0.5 * textContentItem.width) { appendEOL(); return; } flushTextContentItem(); return; } if (Math.abs(advanceX) > textContentItem.height) { appendEOL(); return; } if (advanceY <= textContentItem.trackingSpaceMin) { textContentItem.height += advanceY; } else if (!addFakeSpaces(advanceY, textContentItem.prevTransform)) { if (textContentItem.str.length === 0) { textContent.items.push({ str: " ", dir: "ltr", width: 0, height: advanceY, transform: textContentItem.prevTransform, fontName: textContentItem.fontName, hasEOL: false }); } else { textContentItem.height += advanceY; } } return; } const advanceX = (posX - lastPosX) / textContentItem.textAdvanceScale; const advanceY = posY - lastPosY; if (advanceX < textContentItem.negativeSpaceMax) { if (Math.abs(advanceY) > 0.5 * textContentItem.height) { appendEOL(); return; } flushTextContentItem(); return; } if (Math.abs(advanceY) > textContentItem.height) { appendEOL(); return; } if (advanceX <= textContentItem.trackingSpaceMin) { textContentItem.width += advanceX; } else if (!addFakeSpaces(advanceX, textContentItem.prevTransform)) { if (textContentItem.str.length === 0) { textContent.items.push({ str: " ", dir: "ltr", width: advanceX, height: 0, transform: textContentItem.prevTransform, fontName: textContentItem.fontName, hasEOL: false }); } else { textContentItem.width += advanceX; } } } function buildTextContentItem({ chars, extraSpacing }) { const font = textState.font; if (!chars) { const charSpacing = textState.charSpacing + extraSpacing; if (charSpacing) { if (!font.vertical) { textState.translateTextMatrix(charSpacing * textState.textHScale, 0); } else { textState.translateTextMatrix(0, -charSpacing); } } return; } const glyphs = font.charsToGlyphs(chars); const scale = textState.fontMatrix[0] * textState.fontSize; for (let i = 0, ii = glyphs.length; i < ii; i++) { const glyph = glyphs[i]; let charSpacing = textState.charSpacing + (i + 1 === ii ? extraSpacing : 0); let glyphWidth = glyph.width; if (font.vertical) { glyphWidth = glyph.vmetric ? glyph.vmetric[0] : -glyphWidth; } let scaledDim = glyphWidth * scale; let glyphUnicode = glyph.unicode; if (glyphUnicode === " " && (i === 0 || i + 1 === ii || glyphs[i - 1].unicode === " " || glyphs[i + 1].unicode === " " || extraSpacing)) { if (!font.vertical) { charSpacing += scaledDim + textState.wordSpacing; textState.translateTextMatrix(charSpacing * textState.textHScale, 0); } else { charSpacing += -scaledDim + textState.wordSpacing; textState.translateTextMatrix(0, -charSpacing); } continue; } compareWithLastPosition(); const textChunk = ensureTextContentItem(); if (DiacriticRegExp.test(glyph.unicode)) { scaledDim = 0; } if (!font.vertical) { scaledDim *= textState.textHScale; textState.translateTextMatrix(scaledDim, 0); textChunk.width += scaledDim; } else { textState.translateTextMatrix(0, scaledDim); scaledDim = Math.abs(scaledDim); textChunk.height += scaledDim; } if (scaledDim) { textChunk.prevTransform = getCurrentTextTransform(); } glyphUnicode = NormalizedUnicodes[glyphUnicode] || glyphUnicode; glyphUnicode = (0, _unicode.reverseIfRtl)(glyphUnicode); textChunk.str.push(glyphUnicode); if (charSpacing) { if (!font.vertical) { textState.translateTextMatrix(charSpacing * textState.textHScale, 0); } else { textState.translateTextMatrix(0, -charSpacing); } } } } function appendEOL() { if (textContentItem.initialized) { textContentItem.hasEOL = true; flushTextContentItem(); } else { textContent.items.push({ str: "", dir: "ltr", width: 0, height: 0, transform: getCurrentTextTransform(), fontName: textState.font.loadedName, hasEOL: true }); } } function addFakeSpaces(width, transf) { if (textContentItem.spaceInFlowMin <= width && width <= textContentItem.spaceInFlowMax) { if (textContentItem.initialized) { textContentItem.str.push(" "); } return false; } const fontName = textContentItem.fontName; let height = 0; if (textContentItem.vertical) { height = width; width = 0; } flushTextContentItem(); textContent.items.push({ str: " ", dir: "ltr", width, height, transform: transf || getCurrentTextTransform(), fontName, hasEOL: false }); return true; } function flushTextContentItem() { if (!textContentItem.initialized || !textContentItem.str) { return; } if (!textContentItem.vertical) { textContentItem.totalWidth += textContentItem.width * textContentItem.textAdvanceScale; } else { textContentItem.totalHeight += textContentItem.height * textContentItem.textAdvanceScale; } textContent.items.push(runBidiTransform(textContentItem)); textContentItem.initialized = false; textContentItem.str.length = 0; } function enqueueChunk(batch = false) { const length = textContent.items.length; if (length === 0) { return; } if (batch && length < TEXT_CHUNK_BATCH_SIZE) { return; } sink.enqueue(textContent, length); textContent.items = []; textContent.styles = Object.create(null); } const timeSlotManager = new TimeSlotManager(); return new Promise(function promiseBody(resolve, reject) { const next = function (promise) { enqueueChunk(true); Promise.all([promise, sink.ready]).then(function () { try { promiseBody(resolve, reject); } catch (ex) { reject(ex); } }, reject); }; task.ensureNotTerminated(); timeSlotManager.reset(); const operation = {}; let stop, args = []; while (!(stop = timeSlotManager.check())) { args.length = 0; operation.args = args; if (!preprocessor.read(operation)) { break; } textState = stateManager.state; const fn = operation.fn; args = operation.args; switch (fn | 0) { case _util.OPS.setFont: var fontNameArg = args[0].name, fontSizeArg = args[1]; if (textState.font && fontNameArg === textState.fontName && fontSizeArg === textState.fontSize) { break; } flushTextContentItem(); textState.fontName = fontNameArg; textState.fontSize = fontSizeArg; next(handleSetFont(fontNameArg, null)); return; case _util.OPS.setTextRise: textState.textRise = args[0]; break; case _util.OPS.setHScale: textState.textHScale = args[0] / 100; break; case _util.OPS.setLeading: textState.leading = args[0]; break; case _util.OPS.moveText: textState.translateTextLineMatrix(args[0], args[1]); textState.textMatrix = textState.textLineMatrix.slice(); break; case _util.OPS.setLeadingMoveText: textState.leading = -args[1]; textState.translateTextLineMatrix(args[0], args[1]); textState.textMatrix = textState.textLineMatrix.slice(); break; case _util.OPS.nextLine: textState.carriageReturn(); break; case _util.OPS.setTextMatrix: textState.setTextMatrix(args[0], args[1], args[2], args[3], args[4], args[5]); textState.setTextLineMatrix(args[0], args[1], args[2], args[3], args[4], args[5]); updateAdvanceScale(); break; case _util.OPS.setCharSpacing: textState.charSpacing = args[0]; break; case _util.OPS.setWordSpacing: textState.wordSpacing = args[0]; break; case _util.OPS.beginText: textState.textMatrix = _util.IDENTITY_MATRIX.slice(); textState.textLineMatrix = _util.IDENTITY_MATRIX.slice(); break; case _util.OPS.showSpacedText: if (!stateManager.state.font) { self.ensureStateFont(stateManager.state); continue; } const spaceFactor = (textState.font.vertical ? 1 : -1) * textState.fontSize / 1000; const elements = args[0]; for (let i = 0, ii = elements.length; i < ii - 1; i++) { const item = elements[i]; if (typeof item === "string") { showSpacedTextBuffer.push(item); } else if (typeof item === "number" && item !== 0) { const str = showSpacedTextBuffer.join(""); showSpacedTextBuffer.length = 0; buildTextContentItem({ chars: str, extraSpacing: item * spaceFactor }); } } const item = elements[elements.length - 1]; if (typeof item === "string") { showSpacedTextBuffer.push(item); } if (showSpacedTextBuffer.length > 0) { const str = showSpacedTextBuffer.join(""); showSpacedTextBuffer.length = 0; buildTextContentItem({ chars: str, extraSpacing: 0 }); } break; case _util.OPS.showText: if (!stateManager.state.font) { self.ensureStateFont(stateManager.state); continue; } buildTextContentItem({ chars: args[0], extraSpacing: 0 }); break; case _util.OPS.nextLineShowText: if (!stateManager.state.font) { self.ensureStateFont(stateManager.state); continue; } textState.carriageReturn(); buildTextContentItem({ chars: args[0], extraSpacing: 0 }); break; case _util.OPS.nextLineSetSpacingShowText: if (!stateManager.state.font) { self.ensureStateFont(stateManager.state); continue; } textState.wordSpacing = args[0]; textState.charSpacing = args[1]; textState.carriageReturn(); buildTextContentItem({ chars: args[2], extraSpacing: 0 }); break; case _util.OPS.paintXObject: flushTextContentItem(); if (!xobjs) { xobjs = resources.get("XObject") || _primitives.Dict.empty; } var isValidName = args[0] instanceof _primitives.Name; var name = args[0].name; if (isValidName && emptyXObjectCache.getByName(name)) { break; } next(new Promise(function (resolveXObject, rejectXObject) { if (!isValidName) { throw new _util.FormatError("XObject must be referred to by name."); } let xobj = xobjs.getRaw(name); if (xobj instanceof _primitives.Ref) { if (emptyXObjectCache.getByRef(xobj)) { resolveXObject(); return; } const globalImage = self.globalImageCache.getData(xobj, self.pageIndex); if (globalImage) { resolveXObject(); return; } xobj = xref.fetch(xobj); } if (!(0, _primitives.isStream)(xobj)) { throw new _util.FormatError("XObject should be a stream"); } const type = xobj.dict.get("Subtype"); if (!(0, _primitives.isName)(type)) { throw new _util.FormatError("XObject should have a Name subtype"); } if (type.name !== "Form") { emptyXObjectCache.set(name, xobj.dict.objId, true); resolveXObject(); return; } const currentState = stateManager.state.clone(); const xObjStateManager = new StateManager(currentState); const matrix = xobj.dict.getArray("Matrix"); if (Array.isArray(matrix) && matrix.length === 6) { xObjStateManager.transform(matrix); } enqueueChunk(); const sinkWrapper = { enqueueInvoked: false, enqueue(chunk, size) { this.enqueueInvoked = true; sink.enqueue(chunk, size); }, get desiredSize() { return sink.desiredSize; }, get ready() { return sink.ready; } }; self.getTextContent({ stream: xobj, task, resources: xobj.dict.get("Resources") || resources, stateManager: xObjStateManager, normalizeWhitespace, combineTextItems, includeMarkedContent, sink: sinkWrapper, seenStyles }).then(function () { if (!sinkWrapper.enqueueInvoked) { emptyXObjectCache.set(name, xobj.dict.objId, true); } resolveXObject(); }, rejectXObject); }).catch(function (reason) { if (reason instanceof _util.AbortException) { return; } if (self.options.ignoreErrors) { (0, _util.warn)(`getTextContent - ignoring XObject: "${reason}".`); return; } throw reason; })); return; case _util.OPS.setGState: isValidName = args[0] instanceof _primitives.Name; name = args[0].name; if (isValidName && emptyGStateCache.getByName(name)) { break; } next(new Promise(function (resolveGState, rejectGState) { if (!isValidName) { throw new _util.FormatError("GState must be referred to by name."); } const extGState = resources.get("ExtGState"); if (!(extGState instanceof _primitives.Dict)) { throw new _util.FormatError("ExtGState should be a dictionary."); } const gState = extGState.get(name); if (!(gState instanceof _primitives.Dict)) { throw new _util.FormatError("GState should be a dictionary."); } const gStateFont = gState.get("Font"); if (!gStateFont) { emptyGStateCache.set(name, gState.objId, true); resolveGState(); return; } flushTextContentItem(); textState.fontName = null; textState.fontSize = gStateFont[1]; handleSetFont(null, gStateFont[0]).then(resolveGState, rejectGState); }).catch(function (reason) { if (reason instanceof _util.AbortException) { return; } if (self.options.ignoreErrors) { (0, _util.warn)(`getTextContent - ignoring ExtGState: "${reason}".`); return; } throw reason; })); return; case _util.OPS.beginMarkedContent: if (includeMarkedContent) { textContent.items.push({ type: "beginMarkedContent", tag: (0, _primitives.isName)(args[0]) ? args[0].name : null }); } break; case _util.OPS.beginMarkedContentProps: if (includeMarkedContent) { flushTextContentItem(); let mcid = null; if ((0, _primitives.isDict)(args[1])) { mcid = args[1].get("MCID"); } textContent.items.push({ type: "beginMarkedContentProps", id: Number.isInteger(mcid) ? `${self.idFactory.getPageObjId()}_mcid${mcid}` : null, tag: (0, _primitives.isName)(args[0]) ? args[0].name : null }); } break; case _util.OPS.endMarkedContent: if (includeMarkedContent) { flushTextContentItem(); textContent.items.push({ type: "endMarkedContent" }); } break; } if (textContent.items.length >= sink.desiredSize) { stop = true; break; } } if (stop) { next(deferred); return; } flushTextContentItem(); enqueueChunk(); resolve(); }).catch(reason => { if (reason instanceof _util.AbortException) { return; } if (this.options.ignoreErrors) { (0, _util.warn)(`getTextContent - ignoring errors during "${task.name}" ` + `task: "${reason}".`); flushTextContentItem(); enqueueChunk(); return; } throw reason; }); } extractDataStructures(dict, baseDict, properties) { const xref = this.xref; let cidToGidBytes; const toUnicodePromise = this.readToUnicode(properties.toUnicode || dict.get("ToUnicode") || baseDict.get("ToUnicode")); if (properties.composite) { const cidSystemInfo = dict.get("CIDSystemInfo"); if ((0, _primitives.isDict)(cidSystemInfo)) { properties.cidSystemInfo = { registry: (0, _util.stringToPDFString)(cidSystemInfo.get("Registry")), ordering: (0, _util.stringToPDFString)(cidSystemInfo.get("Ordering")), supplement: cidSystemInfo.get("Supplement") }; } const cidToGidMap = dict.get("CIDToGIDMap"); if (cidToGidMap instanceof _base_stream.BaseStream) { cidToGidBytes = cidToGidMap.getBytes(); } } const differences = []; let baseEncodingName = null; let encoding; if (dict.has("Encoding")) { encoding = dict.get("Encoding"); if ((0, _primitives.isDict)(encoding)) { baseEncodingName = encoding.get("BaseEncoding"); baseEncodingName = (0, _primitives.isName)(baseEncodingName) ? baseEncodingName.name : null; if (encoding.has("Differences")) { const diffEncoding = encoding.get("Differences"); let index = 0; for (let j = 0, jj = diffEncoding.length; j < jj; j++) { const data = xref.fetchIfRef(diffEncoding[j]); if ((0, _util.isNum)(data)) { index = data; } else if ((0, _primitives.isName)(data)) { differences[index++] = data.name; } else { throw new _util.FormatError(`Invalid entry in 'Differences' array: ${data}`); } } } } else if ((0, _primitives.isName)(encoding)) { baseEncodingName = encoding.name; } else { throw new _util.FormatError("Encoding is not a Name nor a Dict"); } if (baseEncodingName !== "MacRomanEncoding" && baseEncodingName !== "MacExpertEncoding" && baseEncodingName !== "WinAnsiEncoding") { baseEncodingName = null; } } if (baseEncodingName) { properties.defaultEncoding = (0, _encodings.getEncoding)(baseEncodingName); } else { const isSymbolicFont = !!(properties.flags & _fonts_utils.FontFlags.Symbolic); const isNonsymbolicFont = !!(properties.flags & _fonts_utils.FontFlags.Nonsymbolic); encoding = _encodings.StandardEncoding; if (properties.type === "TrueType" && !isNonsymbolicFont) { encoding = _encodings.WinAnsiEncoding; } if (isSymbolicFont) { encoding = _encodings.MacRomanEncoding; if (!properties.file || properties.isInternalFont) { if (/Symbol/i.test(properties.name)) { encoding = _encodings.SymbolSetEncoding; } else if (/Dingbats|Wingdings/i.test(properties.name)) { encoding = _encodings.ZapfDingbatsEncoding; } } } properties.defaultEncoding = encoding; } properties.differences = differences; properties.baseEncodingName = baseEncodingName; properties.hasEncoding = !!baseEncodingName || differences.length > 0; properties.dict = dict; return toUnicodePromise.then(readToUnicode => { properties.toUnicode = readToUnicode; return this.buildToUnicode(properties); }).then(builtToUnicode => { properties.toUnicode = builtToUnicode; if (cidToGidBytes) { properties.cidToGidMap = this.readCidToGidMap(cidToGidBytes, builtToUnicode); } return properties; }); } _simpleFontToUnicode(properties, forceGlyphs = false) { (0, _util.assert)(!properties.composite, "Must be a simple font."); const toUnicode = []; const encoding = properties.defaultEncoding.slice(); const baseEncodingName = properties.baseEncodingName; const differences = properties.differences; for (const charcode in differences) { const glyphName = differences[charcode]; if (glyphName === ".notdef") { continue; } encoding[charcode] = glyphName; } const glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); for (const charcode in encoding) { let glyphName = encoding[charcode]; if (glyphName === "") { continue; } else if (glyphsUnicodeMap[glyphName] === undefined) { let code = 0; switch (glyphName[0]) { case "G": if (glyphName.length === 3) { code = parseInt(glyphName.substring(1), 16); } break; case "g": if (glyphName.length === 5) { code = parseInt(glyphName.substring(1), 16); } break; case "C": case "c": if (glyphName.length >= 3 && glyphName.length <= 4) { const codeStr = glyphName.substring(1); if (forceGlyphs) { code = parseInt(codeStr, 16); break; } code = +codeStr; if (Number.isNaN(code) && Number.isInteger(parseInt(codeStr, 16))) { return this._simpleFontToUnicode(properties, true); } } break; default: const unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap); if (unicode !== -1) { code = unicode; } } if (code > 0 && code <= 0x10ffff && Number.isInteger(code)) { if (baseEncodingName && code === +charcode) { const baseEncoding = (0, _encodings.getEncoding)(baseEncodingName); if (baseEncoding && (glyphName = baseEncoding[charcode])) { toUnicode[charcode] = String.fromCharCode(glyphsUnicodeMap[glyphName]); continue; } } toUnicode[charcode] = String.fromCodePoint(code); } continue; } toUnicode[charcode] = String.fromCharCode(glyphsUnicodeMap[glyphName]); } return toUnicode; } async buildToUnicode(properties) { properties.hasIncludedToUnicodeMap = !!properties.toUnicode && properties.toUnicode.length > 0; if (properties.hasIncludedToUnicodeMap) { if (!properties.composite && properties.hasEncoding) { properties.fallbackToUnicode = this._simpleFontToUnicode(properties); } return properties.toUnicode; } if (!properties.composite) { return new _to_unicode_map.ToUnicodeMap(this._simpleFontToUnicode(properties)); } if (properties.composite && (properties.cMap.builtInCMap && !(properties.cMap instanceof _cmap.IdentityCMap) || properties.cidSystemInfo.registry === "Adobe" && (properties.cidSystemInfo.ordering === "GB1" || properties.cidSystemInfo.ordering === "CNS1" || properties.cidSystemInfo.ordering === "Japan1" || properties.cidSystemInfo.ordering === "Korea1"))) { const { registry, ordering } = properties.cidSystemInfo; const ucs2CMapName = _primitives.Name.get(`${registry}-${ordering}-UCS2`); const ucs2CMap = await _cmap.CMapFactory.create({ encoding: ucs2CMapName, fetchBuiltInCMap: this._fetchBuiltInCMapBound, useCMap: null }); const toUnicode = []; properties.cMap.forEach(function (charcode, cid) { if (cid > 0xffff) { throw new _util.FormatError("Max size of CID is 65,535"); } const ucs2 = ucs2CMap.lookup(cid); if (ucs2) { toUnicode[charcode] = String.fromCharCode((ucs2.charCodeAt(0) << 8) + ucs2.charCodeAt(1)); } }); return new _to_unicode_map.ToUnicodeMap(toUnicode); } return new _to_unicode_map.IdentityToUnicodeMap(properties.firstChar, properties.lastChar); } readToUnicode(cmapObj) { if (!cmapObj) { return Promise.resolve(null); } if ((0, _primitives.isName)(cmapObj)) { return _cmap.CMapFactory.create({ encoding: cmapObj, fetchBuiltInCMap: this._fetchBuiltInCMapBound, useCMap: null }).then(function (cmap) { if (cmap instanceof _cmap.IdentityCMap) { return new _to_unicode_map.IdentityToUnicodeMap(0, 0xffff); } return new _to_unicode_map.ToUnicodeMap(cmap.getMap()); }); } else if ((0, _primitives.isStream)(cmapObj)) { return _cmap.CMapFactory.create({ encoding: cmapObj, fetchBuiltInCMap: this._fetchBuiltInCMapBound, useCMap: null }).then(function (cmap) { if (cmap instanceof _cmap.IdentityCMap) { return new _to_unicode_map.IdentityToUnicodeMap(0, 0xffff); } const map = new Array(cmap.length); cmap.forEach(function (charCode, token) { if (typeof token === "number") { map[charCode] = String.fromCodePoint(token); return; } const str = []; for (let k = 0; k < token.length; k += 2) { const w1 = token.charCodeAt(k) << 8 | token.charCodeAt(k + 1); if ((w1 & 0xf800) !== 0xd800) { str.push(w1); continue; } k += 2; const w2 = token.charCodeAt(k) << 8 | token.charCodeAt(k + 1); str.push(((w1 & 0x3ff) << 10) + (w2 & 0x3ff) + 0x10000); } map[charCode] = String.fromCodePoint.apply(String, str); }); return new _to_unicode_map.ToUnicodeMap(map); }, reason => { if (reason instanceof _util.AbortException) { return null; } if (this.options.ignoreErrors) { this.handler.send("UnsupportedFeature", { featureId: _util.UNSUPPORTED_FEATURES.errorFontToUnicode }); (0, _util.warn)(`readToUnicode - ignoring ToUnicode data: "${reason}".`); return null; } throw reason; }); } return Promise.resolve(null); } readCidToGidMap(glyphsData, toUnicode) { const result = []; for (let j = 0, jj = glyphsData.length; j < jj; j++) { const glyphID = glyphsData[j++] << 8 | glyphsData[j]; const code = j >> 1; if (glyphID === 0 && !toUnicode.has(code)) { continue; } result[code] = glyphID; } return result; } extractWidths(dict, descriptor, properties) { const xref = this.xref; let glyphsWidths = []; let defaultWidth = 0; const glyphsVMetrics = []; let defaultVMetrics; let i, ii, j, jj, start, code, widths; if (properties.composite) { defaultWidth = dict.has("DW") ? dict.get("DW") : 1000; widths = dict.get("W"); if (widths) { for (i = 0, ii = widths.length; i < ii; i++) { start = xref.fetchIfRef(widths[i++]); code = xref.fetchIfRef(widths[i]); if (Array.isArray(code)) { for (j = 0, jj = code.length; j < jj; j++) { glyphsWidths[start++] = xref.fetchIfRef(code[j]); } } else { const width = xref.fetchIfRef(widths[++i]); for (j = start; j <= code; j++) { glyphsWidths[j] = width; } } } } if (properties.vertical) { let vmetrics = dict.getArray("DW2") || [880, -1000]; defaultVMetrics = [vmetrics[1], defaultWidth * 0.5, vmetrics[0]]; vmetrics = dict.get("W2"); if (vmetrics) { for (i = 0, ii = vmetrics.length; i < ii; i++) { start = xref.fetchIfRef(vmetrics[i++]); code = xref.fetchIfRef(vmetrics[i]); if (Array.isArray(code)) { for (j = 0, jj = code.length; j < jj; j++) { glyphsVMetrics[start++] = [xref.fetchIfRef(code[j++]), xref.fetchIfRef(code[j++]), xref.fetchIfRef(code[j])]; } } else { const vmetric = [xref.fetchIfRef(vmetrics[++i]), xref.fetchIfRef(vmetrics[++i]), xref.fetchIfRef(vmetrics[++i])]; for (j = start; j <= code; j++) { glyphsVMetrics[j] = vmetric; } } } } } } else { const firstChar = properties.firstChar; widths = dict.get("Widths"); if (widths) { j = firstChar; for (i = 0, ii = widths.length; i < ii; i++) { glyphsWidths[j++] = xref.fetchIfRef(widths[i]); } defaultWidth = parseFloat(descriptor.get("MissingWidth")) || 0; } else { const baseFontName = dict.get("BaseFont"); if ((0, _primitives.isName)(baseFontName)) { const metrics = this.getBaseFontMetrics(baseFontName.name); glyphsWidths = this.buildCharCodeToWidth(metrics.widths, properties); defaultWidth = metrics.defaultWidth; } } } let isMonospace = true; let firstWidth = defaultWidth; for (const glyph in glyphsWidths) { const glyphWidth = glyphsWidths[glyph]; if (!glyphWidth) { continue; } if (!firstWidth) { firstWidth = glyphWidth; continue; } if (firstWidth !== glyphWidth) { isMonospace = false; break; } } if (isMonospace) { properties.flags |= _fonts_utils.FontFlags.FixedPitch; } properties.defaultWidth = defaultWidth; properties.widths = glyphsWidths; properties.defaultVMetrics = defaultVMetrics; properties.vmetrics = glyphsVMetrics; } isSerifFont(baseFontName) { const fontNameWoStyle = baseFontName.split("-")[0]; return fontNameWoStyle in (0, _standard_fonts.getSerifFonts)() || fontNameWoStyle.search(/serif/gi) !== -1; } getBaseFontMetrics(name) { let defaultWidth = 0; let widths = Object.create(null); let monospace = false; const stdFontMap = (0, _standard_fonts.getStdFontMap)(); let lookupName = stdFontMap[name] || name; const Metrics = (0, _metrics.getMetrics)(); if (!(lookupName in Metrics)) { if (this.isSerifFont(name)) { lookupName = "Times-Roman"; } else { lookupName = "Helvetica"; } } const glyphWidths = Metrics[lookupName]; if ((0, _util.isNum)(glyphWidths)) { defaultWidth = glyphWidths; monospace = true; } else { widths = glyphWidths(); } return { defaultWidth, monospace, widths }; } buildCharCodeToWidth(widthsByGlyphName, properties) { const widths = Object.create(null); const differences = properties.differences; const encoding = properties.defaultEncoding; for (let charCode = 0; charCode < 256; charCode++) { if (charCode in differences && widthsByGlyphName[differences[charCode]]) { widths[charCode] = widthsByGlyphName[differences[charCode]]; continue; } if (charCode in encoding && widthsByGlyphName[encoding[charCode]]) { widths[charCode] = widthsByGlyphName[encoding[charCode]]; continue; } } return widths; } preEvaluateFont(dict) { const baseDict = dict; let type = dict.get("Subtype"); if (!(0, _primitives.isName)(type)) { throw new _util.FormatError("invalid font Subtype"); } let composite = false; let hash, toUnicode; if (type.name === "Type0") { const df = dict.get("DescendantFonts"); if (!df) { throw new _util.FormatError("Descendant fonts are not specified"); } dict = Array.isArray(df) ? this.xref.fetchIfRef(df[0]) : df; if (!(dict instanceof _primitives.Dict)) { throw new _util.FormatError("Descendant font is not a dictionary."); } type = dict.get("Subtype"); if (!(0, _primitives.isName)(type)) { throw new _util.FormatError("invalid font Subtype"); } composite = true; } const firstChar = dict.get("FirstChar") || 0, lastChar = dict.get("LastChar") || (composite ? 0xffff : 0xff); const descriptor = dict.get("FontDescriptor"); if (descriptor) { hash = new _murmurhash.MurmurHash3_64(); const encoding = baseDict.getRaw("Encoding"); if ((0, _primitives.isName)(encoding)) { hash.update(encoding.name); } else if ((0, _primitives.isRef)(encoding)) { hash.update(encoding.toString()); } else if ((0, _primitives.isDict)(encoding)) { for (const entry of encoding.getRawValues()) { if ((0, _primitives.isName)(entry)) { hash.update(entry.name); } else if ((0, _primitives.isRef)(entry)) { hash.update(entry.toString()); } else if (Array.isArray(entry)) { const diffLength = entry.length, diffBuf = new Array(diffLength); for (let j = 0; j < diffLength; j++) { const diffEntry = entry[j]; if ((0, _primitives.isName)(diffEntry)) { diffBuf[j] = diffEntry.name; } else if ((0, _util.isNum)(diffEntry) || (0, _primitives.isRef)(diffEntry)) { diffBuf[j] = diffEntry.toString(); } } hash.update(diffBuf.join()); } } } hash.update(`${firstChar}-${lastChar}`); toUnicode = dict.get("ToUnicode") || baseDict.get("ToUnicode"); if ((0, _primitives.isStream)(toUnicode)) { const stream = toUnicode.str || toUnicode; const uint8array = stream.buffer ? new Uint8Array(stream.buffer.buffer, 0, stream.bufferLength) : new Uint8Array(stream.bytes.buffer, stream.start, stream.end - stream.start); hash.update(uint8array); } else if ((0, _primitives.isName)(toUnicode)) { hash.update(toUnicode.name); } const widths = dict.get("Widths") || baseDict.get("Widths"); if (Array.isArray(widths)) { const widthsBuf = []; for (const entry of widths) { if ((0, _util.isNum)(entry) || (0, _primitives.isRef)(entry)) { widthsBuf.push(entry.toString()); } } hash.update(widthsBuf.join()); } if (composite) { hash.update("compositeFont"); const compositeWidths = dict.get("W") || baseDict.get("W"); if (Array.isArray(compositeWidths)) { const widthsBuf = []; for (const entry of compositeWidths) { if ((0, _util.isNum)(entry) || (0, _primitives.isRef)(entry)) { widthsBuf.push(entry.toString()); } else if (Array.isArray(entry)) { const subWidthsBuf = []; for (const element of entry) { if ((0, _util.isNum)(element) || (0, _primitives.isRef)(element)) { subWidthsBuf.push(element.toString()); } } widthsBuf.push(`[${subWidthsBuf.join()}]`); } } hash.update(widthsBuf.join()); } const cidToGidMap = dict.getRaw("CIDToGIDMap") || baseDict.getRaw("CIDToGIDMap"); if (cidToGidMap instanceof _primitives.Name) { hash.update(cidToGidMap.name); } else if (cidToGidMap instanceof _primitives.Ref) { hash.update(cidToGidMap.toString()); } else if (cidToGidMap instanceof _base_stream.BaseStream) { hash.update(cidToGidMap.peekBytes()); } } } return { descriptor, dict, baseDict, composite, type: type.name, firstChar, lastChar, toUnicode, hash: hash ? hash.hexdigest() : "" }; } async translateFont({ descriptor, dict, baseDict, composite, type, firstChar, lastChar, toUnicode, cssFontInfo }) { const isType3Font = type === "Type3"; let properties; if (!descriptor) { if (isType3Font) { descriptor = new _primitives.Dict(null); descriptor.set("FontName", _primitives.Name.get(type)); descriptor.set("FontBBox", dict.getArray("FontBBox") || [0, 0, 0, 0]); } else { let baseFontName = dict.get("BaseFont"); if (!(0, _primitives.isName)(baseFontName)) { throw new _util.FormatError("Base font is not specified"); } baseFontName = baseFontName.name.replace(/[,_]/g, "-"); const metrics = this.getBaseFontMetrics(baseFontName); const fontNameWoStyle = baseFontName.split("-")[0]; const flags = (this.isSerifFont(fontNameWoStyle) ? _fonts_utils.FontFlags.Serif : 0) | (metrics.monospace ? _fonts_utils.FontFlags.FixedPitch : 0) | ((0, _standard_fonts.getSymbolsFonts)()[fontNameWoStyle] ? _fonts_utils.FontFlags.Symbolic : _fonts_utils.FontFlags.Nonsymbolic); properties = { type, name: baseFontName, loadedName: baseDict.loadedName, widths: metrics.widths, defaultWidth: metrics.defaultWidth, isSimulatedFlags: true, flags, firstChar, lastChar, toUnicode, xHeight: 0, capHeight: 0, italicAngle: 0, isType3Font }; const widths = dict.get("Widths"); const standardFontName = (0, _standard_fonts.getStandardFontName)(baseFontName); let file = null; if (standardFontName) { properties.isStandardFont = true; file = await this.fetchStandardFontData(standardFontName); properties.isInternalFont = !!file; } return this.extractDataStructures(dict, dict, properties).then(newProperties => { if (widths) { const glyphWidths = []; let j = firstChar; for (let i = 0, ii = widths.length; i < ii; i++) { glyphWidths[j++] = this.xref.fetchIfRef(widths[i]); } newProperties.widths = glyphWidths; } else { newProperties.widths = this.buildCharCodeToWidth(metrics.widths, newProperties); } return new _fonts.Font(baseFontName, file, newProperties); }); } } let fontName = descriptor.get("FontName"); let baseFont = dict.get("BaseFont"); if ((0, _util.isString)(fontName)) { fontName = _primitives.Name.get(fontName); } if ((0, _util.isString)(baseFont)) { baseFont = _primitives.Name.get(baseFont); } if (!isType3Font) { const fontNameStr = fontName && fontName.name; const baseFontStr = baseFont && baseFont.name; if (fontNameStr !== baseFontStr) { (0, _util.info)(`The FontDescriptor's FontName is "${fontNameStr}" but ` + `should be the same as the Font's BaseFont "${baseFontStr}".`); if (fontNameStr && baseFontStr && baseFontStr.startsWith(fontNameStr)) { fontName = baseFont; } } } fontName = fontName || baseFont; if (!(0, _primitives.isName)(fontName)) { throw new _util.FormatError("invalid font name"); } let fontFile, subtype, length1, length2, length3; try { fontFile = descriptor.get("FontFile", "FontFile2", "FontFile3"); } catch (ex) { if (!this.options.ignoreErrors) { throw ex; } (0, _util.warn)(`translateFont - fetching "${fontName.name}" font file: "${ex}".`); fontFile = new _stream.NullStream(); } let isStandardFont = false; let isInternalFont = false; let glyphScaleFactors = null; if (fontFile) { if (fontFile.dict) { const subtypeEntry = fontFile.dict.get("Subtype"); if (subtypeEntry instanceof _primitives.Name) { subtype = subtypeEntry.name; } length1 = fontFile.dict.get("Length1"); length2 = fontFile.dict.get("Length2"); length3 = fontFile.dict.get("Length3"); } } else if (cssFontInfo) { const standardFontName = (0, _xfa_fonts.getXfaFontName)(fontName.name); if (standardFontName) { cssFontInfo.fontFamily = `${cssFontInfo.fontFamily}-PdfJS-XFA`; cssFontInfo.metrics = standardFontName.metrics || null; glyphScaleFactors = standardFontName.factors || null; fontFile = await this.fetchStandardFontData(standardFontName.name); isInternalFont = !!fontFile; baseDict = dict = (0, _xfa_fonts.getXfaFontDict)(fontName.name); composite = true; } } else if (!isType3Font) { const standardFontName = (0, _standard_fonts.getStandardFontName)(fontName.name); if (standardFontName) { isStandardFont = true; fontFile = await this.fetchStandardFontData(standardFontName); isInternalFont = !!fontFile; } } properties = { type, name: fontName.name, subtype, file: fontFile, length1, length2, length3, isStandardFont, isInternalFont, loadedName: baseDict.loadedName, composite, fixedPitch: false, fontMatrix: dict.getArray("FontMatrix") || _util.FONT_IDENTITY_MATRIX, firstChar, lastChar, toUnicode, bbox: descriptor.getArray("FontBBox") || dict.getArray("FontBBox"), ascent: descriptor.get("Ascent"), descent: descriptor.get("Descent"), xHeight: descriptor.get("XHeight") || 0, capHeight: descriptor.get("CapHeight") || 0, flags: descriptor.get("Flags"), italicAngle: descriptor.get("ItalicAngle") || 0, isType3Font, cssFontInfo, scaleFactors: glyphScaleFactors }; if (composite) { const cidEncoding = baseDict.get("Encoding"); if ((0, _primitives.isName)(cidEncoding)) { properties.cidEncoding = cidEncoding.name; } const cMap = await _cmap.CMapFactory.create({ encoding: cidEncoding, fetchBuiltInCMap: this._fetchBuiltInCMapBound, useCMap: null }); properties.cMap = cMap; properties.vertical = properties.cMap.vertical; } return this.extractDataStructures(dict, baseDict, properties).then(newProperties => { this.extractWidths(dict, descriptor, newProperties); return new _fonts.Font(fontName.name, fontFile, newProperties); }); } static buildFontPaths(font, glyphs, handler, evaluatorOptions) { function buildPath(fontChar) { const glyphName = `${font.loadedName}_path_${fontChar}`; try { if (font.renderer.hasBuiltPath(fontChar)) { return; } handler.send("commonobj", [glyphName, "FontPath", font.renderer.getPathJs(fontChar)]); } catch (reason) { if (evaluatorOptions.ignoreErrors) { handler.send("UnsupportedFeature", { featureId: _util.UNSUPPORTED_FEATURES.errorFontBuildPath }); (0, _util.warn)(`buildFontPaths - ignoring ${glyphName} glyph: "${reason}".`); return; } throw reason; } } for (const glyph of glyphs) { buildPath(glyph.fontChar); const accent = glyph.accent; if (accent && accent.fontChar) { buildPath(accent.fontChar); } } } static get fallbackFontDict() { const dict = new _primitives.Dict(); dict.set("BaseFont", _primitives.Name.get("PDFJS-FallbackFont")); dict.set("Type", _primitives.Name.get("FallbackType")); dict.set("Subtype", _primitives.Name.get("FallbackType")); dict.set("Encoding", _primitives.Name.get("WinAnsiEncoding")); return (0, _util.shadow)(this, "fallbackFontDict", dict); } } exports.PartialEvaluator = PartialEvaluator; class TranslatedFont { constructor({ loadedName, font, dict, evaluatorOptions }) { this.loadedName = loadedName; this.font = font; this.dict = dict; this._evaluatorOptions = evaluatorOptions || DefaultPartialEvaluatorOptions; this.type3Loaded = null; this.type3Dependencies = font.isType3Font ? new Set() : null; this.sent = false; } send(handler) { if (this.sent) { return; } this.sent = true; handler.send("commonobj", [this.loadedName, "Font", this.font.exportData(this._evaluatorOptions.fontExtraProperties)]); } fallback(handler) { if (!this.font.data) { return; } this.font.disableFontFace = true; PartialEvaluator.buildFontPaths(this.font, this.font.glyphCacheValues, handler, this._evaluatorOptions); } loadType3Data(evaluator, resources, task) { if (this.type3Loaded) { return this.type3Loaded; } if (!this.font.isType3Font) { throw new Error("Must be a Type3 font."); } const type3Evaluator = evaluator.clone({ ignoreErrors: false }); type3Evaluator.parsingType3Font = true; const translatedFont = this.font, type3Dependencies = this.type3Dependencies; let loadCharProcsPromise = Promise.resolve(); const charProcs = this.dict.get("CharProcs"); const fontResources = this.dict.get("Resources") || resources; const charProcOperatorList = Object.create(null); const isEmptyBBox = !translatedFont.bbox || (0, _util.isArrayEqual)(translatedFont.bbox, [0, 0, 0, 0]); for (const key of charProcs.getKeys()) { loadCharProcsPromise = loadCharProcsPromise.then(() => { const glyphStream = charProcs.get(key); const operatorList = new _operator_list.OperatorList(); return type3Evaluator.getOperatorList({ stream: glyphStream, task, resources: fontResources, operatorList }).then(() => { if (operatorList.fnArray[0] === _util.OPS.setCharWidthAndBounds) { this._removeType3ColorOperators(operatorList, isEmptyBBox); } charProcOperatorList[key] = operatorList.getIR(); for (const dependency of operatorList.dependencies) { type3Dependencies.add(dependency); } }).catch(function (reason) { (0, _util.warn)(`Type3 font resource "${key}" is not available.`); const dummyOperatorList = new _operator_list.OperatorList(); charProcOperatorList[key] = dummyOperatorList.getIR(); }); }); } this.type3Loaded = loadCharProcsPromise.then(() => { translatedFont.charProcOperatorList = charProcOperatorList; if (this._bbox) { translatedFont.isCharBBox = true; translatedFont.bbox = this._bbox; } }); return this.type3Loaded; } _removeType3ColorOperators(operatorList, isEmptyBBox = false) { if (isEmptyBBox) { if (!this._bbox) { this._bbox = [Infinity, Infinity, -Infinity, -Infinity]; } const charBBox = _util.Util.normalizeRect(operatorList.argsArray[0].slice(2)); this._bbox[0] = Math.min(this._bbox[0], charBBox[0]); this._bbox[1] = Math.min(this._bbox[1], charBBox[1]); this._bbox[2] = Math.max(this._bbox[2], charBBox[2]); this._bbox[3] = Math.max(this._bbox[3], charBBox[3]); } let i = 1, ii = operatorList.length; while (i < ii) { switch (operatorList.fnArray[i]) { case _util.OPS.setStrokeColorSpace: case _util.OPS.setFillColorSpace: case _util.OPS.setStrokeColor: case _util.OPS.setStrokeColorN: case _util.OPS.setFillColor: case _util.OPS.setFillColorN: case _util.OPS.setStrokeGray: case _util.OPS.setFillGray: case _util.OPS.setStrokeRGBColor: case _util.OPS.setFillRGBColor: case _util.OPS.setStrokeCMYKColor: case _util.OPS.setFillCMYKColor: case _util.OPS.shadingFill: case _util.OPS.setRenderingIntent: operatorList.fnArray.splice(i, 1); operatorList.argsArray.splice(i, 1); ii--; continue; case _util.OPS.setGState: const [gStateObj] = operatorList.argsArray[i]; let j = 0, jj = gStateObj.length; while (j < jj) { const [gStateKey] = gStateObj[j]; switch (gStateKey) { case "TR": case "TR2": case "HT": case "BG": case "BG2": case "UCR": case "UCR2": gStateObj.splice(j, 1); jj--; continue; } j++; } break; } i++; } } } class StateManager { constructor(initialState = new EvalState()) { this.state = initialState; this.stateStack = []; } save() { const old = this.state; this.stateStack.push(this.state); this.state = old.clone(); } restore() { const prev = this.stateStack.pop(); if (prev) { this.state = prev; } } transform(args) { this.state.ctm = _util.Util.transform(this.state.ctm, args); } } class TextState { constructor() { this.ctm = new Float32Array(_util.IDENTITY_MATRIX); this.fontName = null; this.fontSize = 0; this.font = null; this.fontMatrix = _util.FONT_IDENTITY_MATRIX; this.textMatrix = _util.IDENTITY_MATRIX.slice(); this.textLineMatrix = _util.IDENTITY_MATRIX.slice(); this.charSpacing = 0; this.wordSpacing = 0; this.leading = 0; this.textHScale = 1; this.textRise = 0; } setTextMatrix(a, b, c, d, e, f) { const m = this.textMatrix; m[0] = a; m[1] = b; m[2] = c; m[3] = d; m[4] = e; m[5] = f; } setTextLineMatrix(a, b, c, d, e, f) { const m = this.textLineMatrix; m[0] = a; m[1] = b; m[2] = c; m[3] = d; m[4] = e; m[5] = f; } translateTextMatrix(x, y) { const m = this.textMatrix; m[4] = m[0] * x + m[2] * y + m[4]; m[5] = m[1] * x + m[3] * y + m[5]; } translateTextLineMatrix(x, y) { const m = this.textLineMatrix; m[4] = m[0] * x + m[2] * y + m[4]; m[5] = m[1] * x + m[3] * y + m[5]; } carriageReturn() { this.translateTextLineMatrix(0, -this.leading); this.textMatrix = this.textLineMatrix.slice(); } clone() { const clone = Object.create(this); clone.textMatrix = this.textMatrix.slice(); clone.textLineMatrix = this.textLineMatrix.slice(); clone.fontMatrix = this.fontMatrix.slice(); return clone; } } class EvalState { constructor() { this.ctm = new Float32Array(_util.IDENTITY_MATRIX); this.font = null; this.textRenderingMode = _util.TextRenderingMode.FILL; this.fillColorSpace = _colorspace.ColorSpace.singletons.gray; this.strokeColorSpace = _colorspace.ColorSpace.singletons.gray; } clone() { return Object.create(this); } } class EvaluatorPreprocessor { static get opMap() { const getOPMap = (0, _core_utils.getLookupTableFactory)(function (t) { t.w = { id: _util.OPS.setLineWidth, numArgs: 1, variableArgs: false }; t.J = { id: _util.OPS.setLineCap, numArgs: 1, variableArgs: false }; t.j = { id: _util.OPS.setLineJoin, numArgs: 1, variableArgs: false }; t.M = { id: _util.OPS.setMiterLimit, numArgs: 1, variableArgs: false }; t.d = { id: _util.OPS.setDash, numArgs: 2, variableArgs: false }; t.ri = { id: _util.OPS.setRenderingIntent, numArgs: 1, variableArgs: false }; t.i = { id: _util.OPS.setFlatness, numArgs: 1, variableArgs: false }; t.gs = { id: _util.OPS.setGState, numArgs: 1, variableArgs: false }; t.q = { id: _util.OPS.save, numArgs: 0, variableArgs: false }; t.Q = { id: _util.OPS.restore, numArgs: 0, variableArgs: false }; t.cm = { id: _util.OPS.transform, numArgs: 6, variableArgs: false }; t.m = { id: _util.OPS.moveTo, numArgs: 2, variableArgs: false }; t.l = { id: _util.OPS.lineTo, numArgs: 2, variableArgs: false }; t.c = { id: _util.OPS.curveTo, numArgs: 6, variableArgs: false }; t.v = { id: _util.OPS.curveTo2, numArgs: 4, variableArgs: false }; t.y = { id: _util.OPS.curveTo3, numArgs: 4, variableArgs: false }; t.h = { id: _util.OPS.closePath, numArgs: 0, variableArgs: false }; t.re = { id: _util.OPS.rectangle, numArgs: 4, variableArgs: false }; t.S = { id: _util.OPS.stroke, numArgs: 0, variableArgs: false }; t.s = { id: _util.OPS.closeStroke, numArgs: 0, variableArgs: false }; t.f = { id: _util.OPS.fill, numArgs: 0, variableArgs: false }; t.F = { id: _util.OPS.fill, numArgs: 0, variableArgs: false }; t["f*"] = { id: _util.OPS.eoFill, numArgs: 0, variableArgs: false }; t.B = { id: _util.OPS.fillStroke, numArgs: 0, variableArgs: false }; t["B*"] = { id: _util.OPS.eoFillStroke, numArgs: 0, variableArgs: false }; t.b = { id: _util.OPS.closeFillStroke, numArgs: 0, variableArgs: false }; t["b*"] = { id: _util.OPS.closeEOFillStroke, numArgs: 0, variableArgs: false }; t.n = { id: _util.OPS.endPath, numArgs: 0, variableArgs: false }; t.W = { id: _util.OPS.clip, numArgs: 0, variableArgs: false }; t["W*"] = { id: _util.OPS.eoClip, numArgs: 0, variableArgs: false }; t.BT = { id: _util.OPS.beginText, numArgs: 0, variableArgs: false }; t.ET = { id: _util.OPS.endText, numArgs: 0, variableArgs: false }; t.Tc = { id: _util.OPS.setCharSpacing, numArgs: 1, variableArgs: false }; t.Tw = { id: _util.OPS.setWordSpacing, numArgs: 1, variableArgs: false }; t.Tz = { id: _util.OPS.setHScale, numArgs: 1, variableArgs: false }; t.TL = { id: _util.OPS.setLeading, numArgs: 1, variableArgs: false }; t.Tf = { id: _util.OPS.setFont, numArgs: 2, variableArgs: false }; t.Tr = { id: _util.OPS.setTextRenderingMode, numArgs: 1, variableArgs: false }; t.Ts = { id: _util.OPS.setTextRise, numArgs: 1, variableArgs: false }; t.Td = { id: _util.OPS.moveText, numArgs: 2, variableArgs: false }; t.TD = { id: _util.OPS.setLeadingMoveText, numArgs: 2, variableArgs: false }; t.Tm = { id: _util.OPS.setTextMatrix, numArgs: 6, variableArgs: false }; t["T*"] = { id: _util.OPS.nextLine, numArgs: 0, variableArgs: false }; t.Tj = { id: _util.OPS.showText, numArgs: 1, variableArgs: false }; t.TJ = { id: _util.OPS.showSpacedText, numArgs: 1, variableArgs: false }; t["'"] = { id: _util.OPS.nextLineShowText, numArgs: 1, variableArgs: false }; t['"'] = { id: _util.OPS.nextLineSetSpacingShowText, numArgs: 3, variableArgs: false }; t.d0 = { id: _util.OPS.setCharWidth, numArgs: 2, variableArgs: false }; t.d1 = { id: _util.OPS.setCharWidthAndBounds, numArgs: 6, variableArgs: false }; t.CS = { id: _util.OPS.setStrokeColorSpace, numArgs: 1, variableArgs: false }; t.cs = { id: _util.OPS.setFillColorSpace, numArgs: 1, variableArgs: false }; t.SC = { id: _util.OPS.setStrokeColor, numArgs: 4, variableArgs: true }; t.SCN = { id: _util.OPS.setStrokeColorN, numArgs: 33, variableArgs: true }; t.sc = { id: _util.OPS.setFillColor, numArgs: 4, variableArgs: true }; t.scn = { id: _util.OPS.setFillColorN, numArgs: 33, variableArgs: true }; t.G = { id: _util.OPS.setStrokeGray, numArgs: 1, variableArgs: false }; t.g = { id: _util.OPS.setFillGray, numArgs: 1, variableArgs: false }; t.RG = { id: _util.OPS.setStrokeRGBColor, numArgs: 3, variableArgs: false }; t.rg = { id: _util.OPS.setFillRGBColor, numArgs: 3, variableArgs: false }; t.K = { id: _util.OPS.setStrokeCMYKColor, numArgs: 4, variableArgs: false }; t.k = { id: _util.OPS.setFillCMYKColor, numArgs: 4, variableArgs: false }; t.sh = { id: _util.OPS.shadingFill, numArgs: 1, variableArgs: false }; t.BI = { id: _util.OPS.beginInlineImage, numArgs: 0, variableArgs: false }; t.ID = { id: _util.OPS.beginImageData, numArgs: 0, variableArgs: false }; t.EI = { id: _util.OPS.endInlineImage, numArgs: 1, variableArgs: false }; t.Do = { id: _util.OPS.paintXObject, numArgs: 1, variableArgs: false }; t.MP = { id: _util.OPS.markPoint, numArgs: 1, variableArgs: false }; t.DP = { id: _util.OPS.markPointProps, numArgs: 2, variableArgs: false }; t.BMC = { id: _util.OPS.beginMarkedContent, numArgs: 1, variableArgs: false }; t.BDC = { id: _util.OPS.beginMarkedContentProps, numArgs: 2, variableArgs: false }; t.EMC = { id: _util.OPS.endMarkedContent, numArgs: 0, variableArgs: false }; t.BX = { id: _util.OPS.beginCompat, numArgs: 0, variableArgs: false }; t.EX = { id: _util.OPS.endCompat, numArgs: 0, variableArgs: false }; t.BM = null; t.BD = null; t.true = null; t.fa = null; t.fal = null; t.fals = null; t.false = null; t.nu = null; t.nul = null; t.null = null; }); return (0, _util.shadow)(this, "opMap", getOPMap()); } static get MAX_INVALID_PATH_OPS() { return (0, _util.shadow)(this, "MAX_INVALID_PATH_OPS", 20); } constructor(stream, xref, stateManager = new StateManager()) { this.parser = new _parser.Parser({ lexer: new _parser.Lexer(stream, EvaluatorPreprocessor.opMap), xref }); this.stateManager = stateManager; this.nonProcessedArgs = []; this._numInvalidPathOPS = 0; } get savedStatesDepth() { return this.stateManager.stateStack.length; } read(operation) { let args = operation.args; while (true) { const obj = this.parser.getObj(); if (obj instanceof _primitives.Cmd) { const cmd = obj.cmd; const opSpec = EvaluatorPreprocessor.opMap[cmd]; if (!opSpec) { (0, _util.warn)(`Unknown command "${cmd}".`); continue; } const fn = opSpec.id; const numArgs = opSpec.numArgs; let argsLength = args !== null ? args.length : 0; if (!opSpec.variableArgs) { if (argsLength !== numArgs) { const nonProcessedArgs = this.nonProcessedArgs; while (argsLength > numArgs) { nonProcessedArgs.push(args.shift()); argsLength--; } while (argsLength < numArgs && nonProcessedArgs.length !== 0) { if (args === null) { args = []; } args.unshift(nonProcessedArgs.pop()); argsLength++; } } if (argsLength < numArgs) { const partialMsg = `command ${cmd}: expected ${numArgs} args, ` + `but received ${argsLength} args.`; if (fn >= _util.OPS.moveTo && fn <= _util.OPS.endPath && ++this._numInvalidPathOPS > EvaluatorPreprocessor.MAX_INVALID_PATH_OPS) { throw new _util.FormatError(`Invalid ${partialMsg}`); } (0, _util.warn)(`Skipping ${partialMsg}`); if (args !== null) { args.length = 0; } continue; } } else if (argsLength > numArgs) { (0, _util.info)(`Command ${cmd}: expected [0, ${numArgs}] args, ` + `but received ${argsLength} args.`); } this.preprocessCommand(fn, args); operation.fn = fn; operation.args = args; return true; } if (obj === _primitives.EOF) { return false; } if (obj !== null) { if (args === null) { args = []; } args.push(obj); if (args.length > 33) { throw new _util.FormatError("Too many arguments"); } } } } preprocessCommand(fn, args) { switch (fn | 0) { case _util.OPS.save: this.stateManager.save(); break; case _util.OPS.restore: this.stateManager.restore(); break; case _util.OPS.transform: this.stateManager.transform(args); break; } } } exports.EvaluatorPreprocessor = EvaluatorPreprocessor; /***/ }), /* 26 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.IdentityCMap = exports.CMapFactory = exports.CMap = void 0; var _util = __w_pdfjs_require__(2); var _primitives = __w_pdfjs_require__(5); var _parser = __w_pdfjs_require__(27); var _core_utils = __w_pdfjs_require__(9); var _stream = __w_pdfjs_require__(10); const BUILT_IN_CMAPS = ["Adobe-GB1-UCS2", "Adobe-CNS1-UCS2", "Adobe-Japan1-UCS2", "Adobe-Korea1-UCS2", "78-EUC-H", "78-EUC-V", "78-H", "78-RKSJ-H", "78-RKSJ-V", "78-V", "78ms-RKSJ-H", "78ms-RKSJ-V", "83pv-RKSJ-H", "90ms-RKSJ-H", "90ms-RKSJ-V", "90msp-RKSJ-H", "90msp-RKSJ-V", "90pv-RKSJ-H", "90pv-RKSJ-V", "Add-H", "Add-RKSJ-H", "Add-RKSJ-V", "Add-V", "Adobe-CNS1-0", "Adobe-CNS1-1", "Adobe-CNS1-2", "Adobe-CNS1-3", "Adobe-CNS1-4", "Adobe-CNS1-5", "Adobe-CNS1-6", "Adobe-GB1-0", "Adobe-GB1-1", "Adobe-GB1-2", "Adobe-GB1-3", "Adobe-GB1-4", "Adobe-GB1-5", "Adobe-Japan1-0", "Adobe-Japan1-1", "Adobe-Japan1-2", "Adobe-Japan1-3", "Adobe-Japan1-4", "Adobe-Japan1-5", "Adobe-Japan1-6", "Adobe-Korea1-0", "Adobe-Korea1-1", "Adobe-Korea1-2", "B5-H", "B5-V", "B5pc-H", "B5pc-V", "CNS-EUC-H", "CNS-EUC-V", "CNS1-H", "CNS1-V", "CNS2-H", "CNS2-V", "ETHK-B5-H", "ETHK-B5-V", "ETen-B5-H", "ETen-B5-V", "ETenms-B5-H", "ETenms-B5-V", "EUC-H", "EUC-V", "Ext-H", "Ext-RKSJ-H", "Ext-RKSJ-V", "Ext-V", "GB-EUC-H", "GB-EUC-V", "GB-H", "GB-V", "GBK-EUC-H", "GBK-EUC-V", "GBK2K-H", "GBK2K-V", "GBKp-EUC-H", "GBKp-EUC-V", "GBT-EUC-H", "GBT-EUC-V", "GBT-H", "GBT-V", "GBTpc-EUC-H", "GBTpc-EUC-V", "GBpc-EUC-H", "GBpc-EUC-V", "H", "HKdla-B5-H", "HKdla-B5-V", "HKdlb-B5-H", "HKdlb-B5-V", "HKgccs-B5-H", "HKgccs-B5-V", "HKm314-B5-H", "HKm314-B5-V", "HKm471-B5-H", "HKm471-B5-V", "HKscs-B5-H", "HKscs-B5-V", "Hankaku", "Hiragana", "KSC-EUC-H", "KSC-EUC-V", "KSC-H", "KSC-Johab-H", "KSC-Johab-V", "KSC-V", "KSCms-UHC-H", "KSCms-UHC-HW-H", "KSCms-UHC-HW-V", "KSCms-UHC-V", "KSCpc-EUC-H", "KSCpc-EUC-V", "Katakana", "NWP-H", "NWP-V", "RKSJ-H", "RKSJ-V", "Roman", "UniCNS-UCS2-H", "UniCNS-UCS2-V", "UniCNS-UTF16-H", "UniCNS-UTF16-V", "UniCNS-UTF32-H", "UniCNS-UTF32-V", "UniCNS-UTF8-H", "UniCNS-UTF8-V", "UniGB-UCS2-H", "UniGB-UCS2-V", "UniGB-UTF16-H", "UniGB-UTF16-V", "UniGB-UTF32-H", "UniGB-UTF32-V", "UniGB-UTF8-H", "UniGB-UTF8-V", "UniJIS-UCS2-H", "UniJIS-UCS2-HW-H", "UniJIS-UCS2-HW-V", "UniJIS-UCS2-V", "UniJIS-UTF16-H", "UniJIS-UTF16-V", "UniJIS-UTF32-H", "UniJIS-UTF32-V", "UniJIS-UTF8-H", "UniJIS-UTF8-V", "UniJIS2004-UTF16-H", "UniJIS2004-UTF16-V", "UniJIS2004-UTF32-H", "UniJIS2004-UTF32-V", "UniJIS2004-UTF8-H", "UniJIS2004-UTF8-V", "UniJISPro-UCS2-HW-V", "UniJISPro-UCS2-V", "UniJISPro-UTF8-V", "UniJISX0213-UTF32-H", "UniJISX0213-UTF32-V", "UniJISX02132004-UTF32-H", "UniJISX02132004-UTF32-V", "UniKS-UCS2-H", "UniKS-UCS2-V", "UniKS-UTF16-H", "UniKS-UTF16-V", "UniKS-UTF32-H", "UniKS-UTF32-V", "UniKS-UTF8-H", "UniKS-UTF8-V", "V", "WP-Symbol"]; const MAX_MAP_RANGE = 2 ** 24 - 1; class CMap { constructor(builtInCMap = false) { this.codespaceRanges = [[], [], [], []]; this.numCodespaceRanges = 0; this._map = []; this.name = ""; this.vertical = false; this.useCMap = null; this.builtInCMap = builtInCMap; } addCodespaceRange(n, low, high) { this.codespaceRanges[n - 1].push(low, high); this.numCodespaceRanges++; } mapCidRange(low, high, dstLow) { if (high - low > MAX_MAP_RANGE) { throw new Error("mapCidRange - ignoring data above MAX_MAP_RANGE."); } while (low <= high) { this._map[low++] = dstLow++; } } mapBfRange(low, high, dstLow) { if (high - low > MAX_MAP_RANGE) { throw new Error("mapBfRange - ignoring data above MAX_MAP_RANGE."); } const lastByte = dstLow.length - 1; while (low <= high) { this._map[low++] = dstLow; const nextCharCode = dstLow.charCodeAt(lastByte) + 1; if (nextCharCode > 0xff) { dstLow = dstLow.substring(0, lastByte - 1) + String.fromCharCode(dstLow.charCodeAt(lastByte - 1) + 1) + "\x00"; continue; } dstLow = dstLow.substring(0, lastByte) + String.fromCharCode(nextCharCode); } } mapBfRangeToArray(low, high, array) { if (high - low > MAX_MAP_RANGE) { throw new Error("mapBfRangeToArray - ignoring data above MAX_MAP_RANGE."); } const ii = array.length; let i = 0; while (low <= high && i < ii) { this._map[low] = array[i++]; ++low; } } mapOne(src, dst) { this._map[src] = dst; } lookup(code) { return this._map[code]; } contains(code) { return this._map[code] !== undefined; } forEach(callback) { const map = this._map; const length = map.length; if (length <= 0x10000) { for (let i = 0; i < length; i++) { if (map[i] !== undefined) { callback(i, map[i]); } } } else { for (const i in map) { callback(i, map[i]); } } } charCodeOf(value) { const map = this._map; if (map.length <= 0x10000) { return map.indexOf(value); } for (const charCode in map) { if (map[charCode] === value) { return charCode | 0; } } return -1; } getMap() { return this._map; } readCharCode(str, offset, out) { let c = 0; const codespaceRanges = this.codespaceRanges; for (let n = 0, nn = codespaceRanges.length; n < nn; n++) { c = (c << 8 | str.charCodeAt(offset + n)) >>> 0; const codespaceRange = codespaceRanges[n]; for (let k = 0, kk = codespaceRange.length; k < kk;) { const low = codespaceRange[k++]; const high = codespaceRange[k++]; if (c >= low && c <= high) { out.charcode = c; out.length = n + 1; return; } } } out.charcode = 0; out.length = 1; } getCharCodeLength(charCode) { const codespaceRanges = this.codespaceRanges; for (let n = 0, nn = codespaceRanges.length; n < nn; n++) { const codespaceRange = codespaceRanges[n]; for (let k = 0, kk = codespaceRange.length; k < kk;) { const low = codespaceRange[k++]; const high = codespaceRange[k++]; if (charCode >= low && charCode <= high) { return n + 1; } } } return 1; } get length() { return this._map.length; } get isIdentityCMap() { if (!(this.name === "Identity-H" || this.name === "Identity-V")) { return false; } if (this._map.length !== 0x10000) { return false; } for (let i = 0; i < 0x10000; i++) { if (this._map[i] !== i) { return false; } } return true; } } exports.CMap = CMap; class IdentityCMap extends CMap { constructor(vertical, n) { super(); this.vertical = vertical; this.addCodespaceRange(n, 0, 0xffff); } mapCidRange(low, high, dstLow) { (0, _util.unreachable)("should not call mapCidRange"); } mapBfRange(low, high, dstLow) { (0, _util.unreachable)("should not call mapBfRange"); } mapBfRangeToArray(low, high, array) { (0, _util.unreachable)("should not call mapBfRangeToArray"); } mapOne(src, dst) { (0, _util.unreachable)("should not call mapCidOne"); } lookup(code) { return Number.isInteger(code) && code <= 0xffff ? code : undefined; } contains(code) { return Number.isInteger(code) && code <= 0xffff; } forEach(callback) { for (let i = 0; i <= 0xffff; i++) { callback(i, i); } } charCodeOf(value) { return Number.isInteger(value) && value <= 0xffff ? value : -1; } getMap() { const map = new Array(0x10000); for (let i = 0; i <= 0xffff; i++) { map[i] = i; } return map; } get length() { return 0x10000; } get isIdentityCMap() { (0, _util.unreachable)("should not access .isIdentityCMap"); } } exports.IdentityCMap = IdentityCMap; const BinaryCMapReader = function BinaryCMapReaderClosure() { function hexToInt(a, size) { let n = 0; for (let i = 0; i <= size; i++) { n = n << 8 | a[i]; } return n >>> 0; } function hexToStr(a, size) { if (size === 1) { return String.fromCharCode(a[0], a[1]); } if (size === 3) { return String.fromCharCode(a[0], a[1], a[2], a[3]); } return String.fromCharCode.apply(null, a.subarray(0, size + 1)); } function addHex(a, b, size) { let c = 0; for (let i = size; i >= 0; i--) { c += a[i] + b[i]; a[i] = c & 255; c >>= 8; } } function incHex(a, size) { let c = 1; for (let i = size; i >= 0 && c > 0; i--) { c += a[i]; a[i] = c & 255; c >>= 8; } } const MAX_NUM_SIZE = 16; const MAX_ENCODED_NUM_SIZE = 19; class BinaryCMapStream { constructor(data) { this.buffer = data; this.pos = 0; this.end = data.length; this.tmpBuf = new Uint8Array(MAX_ENCODED_NUM_SIZE); } readByte() { if (this.pos >= this.end) { return -1; } return this.buffer[this.pos++]; } readNumber() { let n = 0; let last; do { const b = this.readByte(); if (b < 0) { throw new _util.FormatError("unexpected EOF in bcmap"); } last = !(b & 0x80); n = n << 7 | b & 0x7f; } while (!last); return n; } readSigned() { const n = this.readNumber(); return n & 1 ? ~(n >>> 1) : n >>> 1; } readHex(num, size) { num.set(this.buffer.subarray(this.pos, this.pos + size + 1)); this.pos += size + 1; } readHexNumber(num, size) { let last; const stack = this.tmpBuf; let sp = 0; do { const b = this.readByte(); if (b < 0) { throw new _util.FormatError("unexpected EOF in bcmap"); } last = !(b & 0x80); stack[sp++] = b & 0x7f; } while (!last); let i = size, buffer = 0, bufferSize = 0; while (i >= 0) { while (bufferSize < 8 && stack.length > 0) { buffer |= stack[--sp] << bufferSize; bufferSize += 7; } num[i] = buffer & 255; i--; buffer >>= 8; bufferSize -= 8; } } readHexSigned(num, size) { this.readHexNumber(num, size); const sign = num[size] & 1 ? 255 : 0; let c = 0; for (let i = 0; i <= size; i++) { c = (c & 1) << 8 | num[i]; num[i] = c >> 1 ^ sign; } } readString() { const len = this.readNumber(); let s = ""; for (let i = 0; i < len; i++) { s += String.fromCharCode(this.readNumber()); } return s; } } class BinaryCMapReader { async process(data, cMap, extend) { const stream = new BinaryCMapStream(data); const header = stream.readByte(); cMap.vertical = !!(header & 1); let useCMap = null; const start = new Uint8Array(MAX_NUM_SIZE); const end = new Uint8Array(MAX_NUM_SIZE); const char = new Uint8Array(MAX_NUM_SIZE); const charCode = new Uint8Array(MAX_NUM_SIZE); const tmp = new Uint8Array(MAX_NUM_SIZE); let code; let b; while ((b = stream.readByte()) >= 0) { const type = b >> 5; if (type === 7) { switch (b & 0x1f) { case 0: stream.readString(); break; case 1: useCMap = stream.readString(); break; } continue; } const sequence = !!(b & 0x10); const dataSize = b & 15; if (dataSize + 1 > MAX_NUM_SIZE) { throw new Error("BinaryCMapReader.process: Invalid dataSize."); } const ucs2DataSize = 1; const subitemsCount = stream.readNumber(); switch (type) { case 0: stream.readHex(start, dataSize); stream.readHexNumber(end, dataSize); addHex(end, start, dataSize); cMap.addCodespaceRange(dataSize + 1, hexToInt(start, dataSize), hexToInt(end, dataSize)); for (let i = 1; i < subitemsCount; i++) { incHex(end, dataSize); stream.readHexNumber(start, dataSize); addHex(start, end, dataSize); stream.readHexNumber(end, dataSize); addHex(end, start, dataSize); cMap.addCodespaceRange(dataSize + 1, hexToInt(start, dataSize), hexToInt(end, dataSize)); } break; case 1: stream.readHex(start, dataSize); stream.readHexNumber(end, dataSize); addHex(end, start, dataSize); stream.readNumber(); for (let i = 1; i < subitemsCount; i++) { incHex(end, dataSize); stream.readHexNumber(start, dataSize); addHex(start, end, dataSize); stream.readHexNumber(end, dataSize); addHex(end, start, dataSize); stream.readNumber(); } break; case 2: stream.readHex(char, dataSize); code = stream.readNumber(); cMap.mapOne(hexToInt(char, dataSize), code); for (let i = 1; i < subitemsCount; i++) { incHex(char, dataSize); if (!sequence) { stream.readHexNumber(tmp, dataSize); addHex(char, tmp, dataSize); } code = stream.readSigned() + (code + 1); cMap.mapOne(hexToInt(char, dataSize), code); } break; case 3: stream.readHex(start, dataSize); stream.readHexNumber(end, dataSize); addHex(end, start, dataSize); code = stream.readNumber(); cMap.mapCidRange(hexToInt(start, dataSize), hexToInt(end, dataSize), code); for (let i = 1; i < subitemsCount; i++) { incHex(end, dataSize); if (!sequence) { stream.readHexNumber(start, dataSize); addHex(start, end, dataSize); } else { start.set(end); } stream.readHexNumber(end, dataSize); addHex(end, start, dataSize); code = stream.readNumber(); cMap.mapCidRange(hexToInt(start, dataSize), hexToInt(end, dataSize), code); } break; case 4: stream.readHex(char, ucs2DataSize); stream.readHex(charCode, dataSize); cMap.mapOne(hexToInt(char, ucs2DataSize), hexToStr(charCode, dataSize)); for (let i = 1; i < subitemsCount; i++) { incHex(char, ucs2DataSize); if (!sequence) { stream.readHexNumber(tmp, ucs2DataSize); addHex(char, tmp, ucs2DataSize); } incHex(charCode, dataSize); stream.readHexSigned(tmp, dataSize); addHex(charCode, tmp, dataSize); cMap.mapOne(hexToInt(char, ucs2DataSize), hexToStr(charCode, dataSize)); } break; case 5: stream.readHex(start, ucs2DataSize); stream.readHexNumber(end, ucs2DataSize); addHex(end, start, ucs2DataSize); stream.readHex(charCode, dataSize); cMap.mapBfRange(hexToInt(start, ucs2DataSize), hexToInt(end, ucs2DataSize), hexToStr(charCode, dataSize)); for (let i = 1; i < subitemsCount; i++) { incHex(end, ucs2DataSize); if (!sequence) { stream.readHexNumber(start, ucs2DataSize); addHex(start, end, ucs2DataSize); } else { start.set(end); } stream.readHexNumber(end, ucs2DataSize); addHex(end, start, ucs2DataSize); stream.readHex(charCode, dataSize); cMap.mapBfRange(hexToInt(start, ucs2DataSize), hexToInt(end, ucs2DataSize), hexToStr(charCode, dataSize)); } break; default: throw new Error(`BinaryCMapReader.process - unknown type: ${type}`); } } if (useCMap) { return extend(useCMap); } return cMap; } } return BinaryCMapReader; }(); const CMapFactory = function CMapFactoryClosure() { function strToInt(str) { let a = 0; for (let i = 0; i < str.length; i++) { a = a << 8 | str.charCodeAt(i); } return a >>> 0; } function expectString(obj) { if (!(0, _util.isString)(obj)) { throw new _util.FormatError("Malformed CMap: expected string."); } } function expectInt(obj) { if (!Number.isInteger(obj)) { throw new _util.FormatError("Malformed CMap: expected int."); } } function parseBfChar(cMap, lexer) { while (true) { let obj = lexer.getObj(); if (obj === _primitives.EOF) { break; } if ((0, _primitives.isCmd)(obj, "endbfchar")) { return; } expectString(obj); const src = strToInt(obj); obj = lexer.getObj(); expectString(obj); const dst = obj; cMap.mapOne(src, dst); } } function parseBfRange(cMap, lexer) { while (true) { let obj = lexer.getObj(); if (obj === _primitives.EOF) { break; } if ((0, _primitives.isCmd)(obj, "endbfrange")) { return; } expectString(obj); const low = strToInt(obj); obj = lexer.getObj(); expectString(obj); const high = strToInt(obj); obj = lexer.getObj(); if (Number.isInteger(obj) || (0, _util.isString)(obj)) { const dstLow = Number.isInteger(obj) ? String.fromCharCode(obj) : obj; cMap.mapBfRange(low, high, dstLow); } else if ((0, _primitives.isCmd)(obj, "[")) { obj = lexer.getObj(); const array = []; while (!(0, _primitives.isCmd)(obj, "]") && obj !== _primitives.EOF) { array.push(obj); obj = lexer.getObj(); } cMap.mapBfRangeToArray(low, high, array); } else { break; } } throw new _util.FormatError("Invalid bf range."); } function parseCidChar(cMap, lexer) { while (true) { let obj = lexer.getObj(); if (obj === _primitives.EOF) { break; } if ((0, _primitives.isCmd)(obj, "endcidchar")) { return; } expectString(obj); const src = strToInt(obj); obj = lexer.getObj(); expectInt(obj); const dst = obj; cMap.mapOne(src, dst); } } function parseCidRange(cMap, lexer) { while (true) { let obj = lexer.getObj(); if (obj === _primitives.EOF) { break; } if ((0, _primitives.isCmd)(obj, "endcidrange")) { return; } expectString(obj); const low = strToInt(obj); obj = lexer.getObj(); expectString(obj); const high = strToInt(obj); obj = lexer.getObj(); expectInt(obj); const dstLow = obj; cMap.mapCidRange(low, high, dstLow); } } function parseCodespaceRange(cMap, lexer) { while (true) { let obj = lexer.getObj(); if (obj === _primitives.EOF) { break; } if ((0, _primitives.isCmd)(obj, "endcodespacerange")) { return; } if (!(0, _util.isString)(obj)) { break; } const low = strToInt(obj); obj = lexer.getObj(); if (!(0, _util.isString)(obj)) { break; } const high = strToInt(obj); cMap.addCodespaceRange(obj.length, low, high); } throw new _util.FormatError("Invalid codespace range."); } function parseWMode(cMap, lexer) { const obj = lexer.getObj(); if (Number.isInteger(obj)) { cMap.vertical = !!obj; } } function parseCMapName(cMap, lexer) { const obj = lexer.getObj(); if ((0, _primitives.isName)(obj) && (0, _util.isString)(obj.name)) { cMap.name = obj.name; } } async function parseCMap(cMap, lexer, fetchBuiltInCMap, useCMap) { let previous, embeddedUseCMap; objLoop: while (true) { try { const obj = lexer.getObj(); if (obj === _primitives.EOF) { break; } else if ((0, _primitives.isName)(obj)) { if (obj.name === "WMode") { parseWMode(cMap, lexer); } else if (obj.name === "CMapName") { parseCMapName(cMap, lexer); } previous = obj; } else if ((0, _primitives.isCmd)(obj)) { switch (obj.cmd) { case "endcmap": break objLoop; case "usecmap": if ((0, _primitives.isName)(previous)) { embeddedUseCMap = previous.name; } break; case "begincodespacerange": parseCodespaceRange(cMap, lexer); break; case "beginbfchar": parseBfChar(cMap, lexer); break; case "begincidchar": parseCidChar(cMap, lexer); break; case "beginbfrange": parseBfRange(cMap, lexer); break; case "begincidrange": parseCidRange(cMap, lexer); break; } } } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } (0, _util.warn)("Invalid cMap data: " + ex); continue; } } if (!useCMap && embeddedUseCMap) { useCMap = embeddedUseCMap; } if (useCMap) { return extendCMap(cMap, fetchBuiltInCMap, useCMap); } return cMap; } async function extendCMap(cMap, fetchBuiltInCMap, useCMap) { cMap.useCMap = await createBuiltInCMap(useCMap, fetchBuiltInCMap); if (cMap.numCodespaceRanges === 0) { const useCodespaceRanges = cMap.useCMap.codespaceRanges; for (let i = 0; i < useCodespaceRanges.length; i++) { cMap.codespaceRanges[i] = useCodespaceRanges[i].slice(); } cMap.numCodespaceRanges = cMap.useCMap.numCodespaceRanges; } cMap.useCMap.forEach(function (key, value) { if (!cMap.contains(key)) { cMap.mapOne(key, cMap.useCMap.lookup(key)); } }); return cMap; } async function createBuiltInCMap(name, fetchBuiltInCMap) { if (name === "Identity-H") { return new IdentityCMap(false, 2); } else if (name === "Identity-V") { return new IdentityCMap(true, 2); } if (!BUILT_IN_CMAPS.includes(name)) { throw new Error("Unknown CMap name: " + name); } if (!fetchBuiltInCMap) { throw new Error("Built-in CMap parameters are not provided."); } const { cMapData, compressionType } = await fetchBuiltInCMap(name); const cMap = new CMap(true); if (compressionType === _util.CMapCompressionType.BINARY) { return new BinaryCMapReader().process(cMapData, cMap, useCMap => { return extendCMap(cMap, fetchBuiltInCMap, useCMap); }); } if (compressionType === _util.CMapCompressionType.NONE) { const lexer = new _parser.Lexer(new _stream.Stream(cMapData)); return parseCMap(cMap, lexer, fetchBuiltInCMap, null); } throw new Error("TODO: Only BINARY/NONE CMap compression is currently supported."); } return { async create(params) { const encoding = params.encoding; const fetchBuiltInCMap = params.fetchBuiltInCMap; const useCMap = params.useCMap; if ((0, _primitives.isName)(encoding)) { return createBuiltInCMap(encoding.name, fetchBuiltInCMap); } else if ((0, _primitives.isStream)(encoding)) { const parsedCMap = await parseCMap(new CMap(), new _parser.Lexer(encoding), fetchBuiltInCMap, useCMap); if (parsedCMap.isIdentityCMap) { return createBuiltInCMap(parsedCMap.name, fetchBuiltInCMap); } return parsedCMap; } throw new Error("Encoding required."); } }; }(); exports.CMapFactory = CMapFactory; /***/ }), /* 27 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.Parser = exports.Linearization = exports.Lexer = void 0; var _util = __w_pdfjs_require__(2); var _primitives = __w_pdfjs_require__(5); var _core_utils = __w_pdfjs_require__(9); var _ascii_85_stream = __w_pdfjs_require__(28); var _ascii_hex_stream = __w_pdfjs_require__(30); var _ccitt_stream = __w_pdfjs_require__(31); var _flate_stream = __w_pdfjs_require__(33); var _jbig2_stream = __w_pdfjs_require__(34); var _jpeg_stream = __w_pdfjs_require__(37); var _jpx_stream = __w_pdfjs_require__(39); var _lzw_stream = __w_pdfjs_require__(41); var _stream = __w_pdfjs_require__(10); var _predictor_stream = __w_pdfjs_require__(42); var _run_length_stream = __w_pdfjs_require__(43); const MAX_LENGTH_TO_CACHE = 1000; const MAX_ADLER32_LENGTH = 5552; function computeAdler32(bytes) { const bytesLength = bytes.length; let a = 1, b = 0; for (let i = 0; i < bytesLength; ++i) { a += bytes[i] & 0xff; b += a; } return b % 65521 << 16 | a % 65521; } class Parser { constructor({ lexer, xref, allowStreams = false, recoveryMode = false }) { this.lexer = lexer; this.xref = xref; this.allowStreams = allowStreams; this.recoveryMode = recoveryMode; this.imageCache = Object.create(null); this.refill(); } refill() { this.buf1 = this.lexer.getObj(); this.buf2 = this.lexer.getObj(); } shift() { if (this.buf2 instanceof _primitives.Cmd && this.buf2.cmd === "ID") { this.buf1 = this.buf2; this.buf2 = null; } else { this.buf1 = this.buf2; this.buf2 = this.lexer.getObj(); } } tryShift() { try { this.shift(); return true; } catch (e) { if (e instanceof _core_utils.MissingDataException) { throw e; } return false; } } getObj(cipherTransform = null) { const buf1 = this.buf1; this.shift(); if (buf1 instanceof _primitives.Cmd) { switch (buf1.cmd) { case "BI": return this.makeInlineImage(cipherTransform); case "[": const array = []; while (!(0, _primitives.isCmd)(this.buf1, "]") && this.buf1 !== _primitives.EOF) { array.push(this.getObj(cipherTransform)); } if (this.buf1 === _primitives.EOF) { if (this.recoveryMode) { return array; } throw new _core_utils.ParserEOFException("End of file inside array."); } this.shift(); return array; case "<<": const dict = new _primitives.Dict(this.xref); while (!(0, _primitives.isCmd)(this.buf1, ">>") && this.buf1 !== _primitives.EOF) { if (!(0, _primitives.isName)(this.buf1)) { (0, _util.info)("Malformed dictionary: key must be a name object"); this.shift(); continue; } const key = this.buf1.name; this.shift(); if (this.buf1 === _primitives.EOF) { break; } dict.set(key, this.getObj(cipherTransform)); } if (this.buf1 === _primitives.EOF) { if (this.recoveryMode) { return dict; } throw new _core_utils.ParserEOFException("End of file inside dictionary."); } if ((0, _primitives.isCmd)(this.buf2, "stream")) { return this.allowStreams ? this.makeStream(dict, cipherTransform) : dict; } this.shift(); return dict; default: return buf1; } } if (Number.isInteger(buf1)) { if (Number.isInteger(this.buf1) && (0, _primitives.isCmd)(this.buf2, "R")) { const ref = _primitives.Ref.get(buf1, this.buf1); this.shift(); this.shift(); return ref; } return buf1; } if (typeof buf1 === "string") { if (cipherTransform) { return cipherTransform.decryptString(buf1); } return buf1; } return buf1; } findDefaultInlineStreamEnd(stream) { const E = 0x45, I = 0x49, SPACE = 0x20, LF = 0xa, CR = 0xd, NUL = 0x0; const lexer = this.lexer, startPos = stream.pos, n = 10; let state = 0, ch, maybeEIPos; while ((ch = stream.getByte()) !== -1) { if (state === 0) { state = ch === E ? 1 : 0; } else if (state === 1) { state = ch === I ? 2 : 0; } else { (0, _util.assert)(state === 2, "findDefaultInlineStreamEnd - invalid state."); if (ch === SPACE || ch === LF || ch === CR) { maybeEIPos = stream.pos; const followingBytes = stream.peekBytes(n); for (let i = 0, ii = followingBytes.length; i < ii; i++) { ch = followingBytes[i]; if (ch === NUL && followingBytes[i + 1] !== NUL) { continue; } if (ch !== LF && ch !== CR && (ch < SPACE || ch > 0x7f)) { state = 0; break; } } if (state !== 2) { continue; } if (lexer.knownCommands) { const nextObj = lexer.peekObj(); if (nextObj instanceof _primitives.Cmd && !lexer.knownCommands[nextObj.cmd]) { state = 0; } } else { (0, _util.warn)("findDefaultInlineStreamEnd - `lexer.knownCommands` is undefined."); } if (state === 2) { break; } } else { state = 0; } } } if (ch === -1) { (0, _util.warn)("findDefaultInlineStreamEnd: " + "Reached the end of the stream without finding a valid EI marker"); if (maybeEIPos) { (0, _util.warn)('... trying to recover by using the last "EI" occurrence.'); stream.skip(-(stream.pos - maybeEIPos)); } } let endOffset = 4; stream.skip(-endOffset); ch = stream.peekByte(); stream.skip(endOffset); if (!(0, _core_utils.isWhiteSpace)(ch)) { endOffset--; } return stream.pos - endOffset - startPos; } findDCTDecodeInlineStreamEnd(stream) { const startPos = stream.pos; let foundEOI = false, b, markerLength; while ((b = stream.getByte()) !== -1) { if (b !== 0xff) { continue; } switch (stream.getByte()) { case 0x00: break; case 0xff: stream.skip(-1); break; case 0xd9: foundEOI = true; break; case 0xc0: case 0xc1: case 0xc2: case 0xc3: case 0xc5: case 0xc6: case 0xc7: case 0xc9: case 0xca: case 0xcb: case 0xcd: case 0xce: case 0xcf: case 0xc4: case 0xcc: case 0xda: case 0xdb: case 0xdc: case 0xdd: case 0xde: case 0xdf: case 0xe0: case 0xe1: case 0xe2: case 0xe3: case 0xe4: case 0xe5: case 0xe6: case 0xe7: case 0xe8: case 0xe9: case 0xea: case 0xeb: case 0xec: case 0xed: case 0xee: case 0xef: case 0xfe: markerLength = stream.getUint16(); if (markerLength > 2) { stream.skip(markerLength - 2); } else { stream.skip(-2); } break; } if (foundEOI) { break; } } const length = stream.pos - startPos; if (b === -1) { (0, _util.warn)("Inline DCTDecode image stream: " + "EOI marker not found, searching for /EI/ instead."); stream.skip(-length); return this.findDefaultInlineStreamEnd(stream); } this.inlineStreamSkipEI(stream); return length; } findASCII85DecodeInlineStreamEnd(stream) { const TILDE = 0x7e, GT = 0x3e; const startPos = stream.pos; let ch; while ((ch = stream.getByte()) !== -1) { if (ch === TILDE) { const tildePos = stream.pos; ch = stream.peekByte(); while ((0, _core_utils.isWhiteSpace)(ch)) { stream.skip(); ch = stream.peekByte(); } if (ch === GT) { stream.skip(); break; } if (stream.pos > tildePos) { const maybeEI = stream.peekBytes(2); if (maybeEI[0] === 0x45 && maybeEI[1] === 0x49) { break; } } } } const length = stream.pos - startPos; if (ch === -1) { (0, _util.warn)("Inline ASCII85Decode image stream: " + "EOD marker not found, searching for /EI/ instead."); stream.skip(-length); return this.findDefaultInlineStreamEnd(stream); } this.inlineStreamSkipEI(stream); return length; } findASCIIHexDecodeInlineStreamEnd(stream) { const GT = 0x3e; const startPos = stream.pos; let ch; while ((ch = stream.getByte()) !== -1) { if (ch === GT) { break; } } const length = stream.pos - startPos; if (ch === -1) { (0, _util.warn)("Inline ASCIIHexDecode image stream: " + "EOD marker not found, searching for /EI/ instead."); stream.skip(-length); return this.findDefaultInlineStreamEnd(stream); } this.inlineStreamSkipEI(stream); return length; } inlineStreamSkipEI(stream) { const E = 0x45, I = 0x49; let state = 0, ch; while ((ch = stream.getByte()) !== -1) { if (state === 0) { state = ch === E ? 1 : 0; } else if (state === 1) { state = ch === I ? 2 : 0; } else if (state === 2) { break; } } } makeInlineImage(cipherTransform) { const lexer = this.lexer; const stream = lexer.stream; const dict = new _primitives.Dict(this.xref); let dictLength; while (!(0, _primitives.isCmd)(this.buf1, "ID") && this.buf1 !== _primitives.EOF) { if (!(0, _primitives.isName)(this.buf1)) { throw new _util.FormatError("Dictionary key must be a name object"); } const key = this.buf1.name; this.shift(); if (this.buf1 === _primitives.EOF) { break; } dict.set(key, this.getObj(cipherTransform)); } if (lexer.beginInlineImagePos !== -1) { dictLength = stream.pos - lexer.beginInlineImagePos; } const filter = dict.get("F", "Filter"); let filterName; if ((0, _primitives.isName)(filter)) { filterName = filter.name; } else if (Array.isArray(filter)) { const filterZero = this.xref.fetchIfRef(filter[0]); if ((0, _primitives.isName)(filterZero)) { filterName = filterZero.name; } } const startPos = stream.pos; let length; switch (filterName) { case "DCT": case "DCTDecode": length = this.findDCTDecodeInlineStreamEnd(stream); break; case "A85": case "ASCII85Decode": length = this.findASCII85DecodeInlineStreamEnd(stream); break; case "AHx": case "ASCIIHexDecode": length = this.findASCIIHexDecodeInlineStreamEnd(stream); break; default: length = this.findDefaultInlineStreamEnd(stream); } let imageStream = stream.makeSubStream(startPos, length, dict); let cacheKey; if (length < MAX_LENGTH_TO_CACHE && dictLength < MAX_ADLER32_LENGTH) { const imageBytes = imageStream.getBytes(); imageStream.reset(); const initialStreamPos = stream.pos; stream.pos = lexer.beginInlineImagePos; const dictBytes = stream.getBytes(dictLength); stream.pos = initialStreamPos; cacheKey = computeAdler32(imageBytes) + "_" + computeAdler32(dictBytes); const cacheEntry = this.imageCache[cacheKey]; if (cacheEntry !== undefined) { this.buf2 = _primitives.Cmd.get("EI"); this.shift(); cacheEntry.reset(); return cacheEntry; } } if (cipherTransform) { imageStream = cipherTransform.createStream(imageStream, length); } imageStream = this.filter(imageStream, dict, length); imageStream.dict = dict; if (cacheKey !== undefined) { imageStream.cacheKey = `inline_${length}_${cacheKey}`; this.imageCache[cacheKey] = imageStream; } this.buf2 = _primitives.Cmd.get("EI"); this.shift(); return imageStream; } _findStreamLength(startPos, signature) { const { stream } = this.lexer; stream.pos = startPos; const SCAN_BLOCK_LENGTH = 2048; const signatureLength = signature.length; while (stream.pos < stream.end) { const scanBytes = stream.peekBytes(SCAN_BLOCK_LENGTH); const scanLength = scanBytes.length - signatureLength; if (scanLength <= 0) { break; } let pos = 0; while (pos < scanLength) { let j = 0; while (j < signatureLength && scanBytes[pos + j] === signature[j]) { j++; } if (j >= signatureLength) { stream.pos += pos; return stream.pos - startPos; } pos++; } stream.pos += scanLength; } return -1; } makeStream(dict, cipherTransform) { const lexer = this.lexer; let stream = lexer.stream; lexer.skipToNextLine(); const startPos = stream.pos - 1; let length = dict.get("Length"); if (!Number.isInteger(length)) { (0, _util.info)(`Bad length "${length && length.toString()}" in stream.`); length = 0; } stream.pos = startPos + length; lexer.nextChar(); if (this.tryShift() && (0, _primitives.isCmd)(this.buf2, "endstream")) { this.shift(); } else { const ENDSTREAM_SIGNATURE = new Uint8Array([0x65, 0x6e, 0x64, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d]); let actualLength = this._findStreamLength(startPos, ENDSTREAM_SIGNATURE); if (actualLength < 0) { const MAX_TRUNCATION = 1; for (let i = 1; i <= MAX_TRUNCATION; i++) { const end = ENDSTREAM_SIGNATURE.length - i; const TRUNCATED_SIGNATURE = ENDSTREAM_SIGNATURE.slice(0, end); const maybeLength = this._findStreamLength(startPos, TRUNCATED_SIGNATURE); if (maybeLength >= 0) { const lastByte = stream.peekBytes(end + 1)[end]; if (!(0, _core_utils.isWhiteSpace)(lastByte)) { break; } (0, _util.info)(`Found "${(0, _util.bytesToString)(TRUNCATED_SIGNATURE)}" when ` + "searching for endstream command."); actualLength = maybeLength; break; } } if (actualLength < 0) { throw new _util.FormatError("Missing endstream command."); } } length = actualLength; lexer.nextChar(); this.shift(); this.shift(); } this.shift(); stream = stream.makeSubStream(startPos, length, dict); if (cipherTransform) { stream = cipherTransform.createStream(stream, length); } stream = this.filter(stream, dict, length); stream.dict = dict; return stream; } filter(stream, dict, length) { let filter = dict.get("F", "Filter"); let params = dict.get("DP", "DecodeParms"); if ((0, _primitives.isName)(filter)) { if (Array.isArray(params)) { (0, _util.warn)("/DecodeParms should not be an Array, when /Filter is a Name."); } return this.makeFilter(stream, filter.name, length, params); } let maybeLength = length; if (Array.isArray(filter)) { const filterArray = filter; const paramsArray = params; for (let i = 0, ii = filterArray.length; i < ii; ++i) { filter = this.xref.fetchIfRef(filterArray[i]); if (!(0, _primitives.isName)(filter)) { throw new _util.FormatError(`Bad filter name "${filter}"`); } params = null; if (Array.isArray(paramsArray) && i in paramsArray) { params = this.xref.fetchIfRef(paramsArray[i]); } stream = this.makeFilter(stream, filter.name, maybeLength, params); maybeLength = null; } } return stream; } makeFilter(stream, name, maybeLength, params) { if (maybeLength === 0) { (0, _util.warn)(`Empty "${name}" stream.`); return new _stream.NullStream(); } const xrefStats = this.xref.stats; try { switch (name) { case "Fl": case "FlateDecode": xrefStats.addStreamType(_util.StreamType.FLATE); if (params) { return new _predictor_stream.PredictorStream(new _flate_stream.FlateStream(stream, maybeLength), maybeLength, params); } return new _flate_stream.FlateStream(stream, maybeLength); case "LZW": case "LZWDecode": xrefStats.addStreamType(_util.StreamType.LZW); let earlyChange = 1; if (params) { if (params.has("EarlyChange")) { earlyChange = params.get("EarlyChange"); } return new _predictor_stream.PredictorStream(new _lzw_stream.LZWStream(stream, maybeLength, earlyChange), maybeLength, params); } return new _lzw_stream.LZWStream(stream, maybeLength, earlyChange); case "DCT": case "DCTDecode": xrefStats.addStreamType(_util.StreamType.DCT); return new _jpeg_stream.JpegStream(stream, maybeLength, params); case "JPX": case "JPXDecode": xrefStats.addStreamType(_util.StreamType.JPX); return new _jpx_stream.JpxStream(stream, maybeLength, params); case "A85": case "ASCII85Decode": xrefStats.addStreamType(_util.StreamType.A85); return new _ascii_85_stream.Ascii85Stream(stream, maybeLength); case "AHx": case "ASCIIHexDecode": xrefStats.addStreamType(_util.StreamType.AHX); return new _ascii_hex_stream.AsciiHexStream(stream, maybeLength); case "CCF": case "CCITTFaxDecode": xrefStats.addStreamType(_util.StreamType.CCF); return new _ccitt_stream.CCITTFaxStream(stream, maybeLength, params); case "RL": case "RunLengthDecode": xrefStats.addStreamType(_util.StreamType.RLX); return new _run_length_stream.RunLengthStream(stream, maybeLength); case "JBIG2Decode": xrefStats.addStreamType(_util.StreamType.JBIG); return new _jbig2_stream.Jbig2Stream(stream, maybeLength, params); } (0, _util.warn)(`Filter "${name}" is not supported.`); return stream; } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } (0, _util.warn)(`Invalid stream: "${ex}"`); return new _stream.NullStream(); } } } exports.Parser = Parser; const specialChars = [1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; function toHexDigit(ch) { if (ch >= 0x30 && ch <= 0x39) { return ch & 0x0f; } if (ch >= 0x41 && ch <= 0x46 || ch >= 0x61 && ch <= 0x66) { return (ch & 0x0f) + 9; } return -1; } class Lexer { constructor(stream, knownCommands = null) { this.stream = stream; this.nextChar(); this.strBuf = []; this.knownCommands = knownCommands; this._hexStringNumWarn = 0; this.beginInlineImagePos = -1; } nextChar() { return this.currentChar = this.stream.getByte(); } peekChar() { return this.stream.peekByte(); } getNumber() { let ch = this.currentChar; let eNotation = false; let divideBy = 0; let sign = 0; if (ch === 0x2d) { sign = -1; ch = this.nextChar(); if (ch === 0x2d) { ch = this.nextChar(); } } else if (ch === 0x2b) { sign = 1; ch = this.nextChar(); } if (ch === 0x0a || ch === 0x0d) { do { ch = this.nextChar(); } while (ch === 0x0a || ch === 0x0d); } if (ch === 0x2e) { divideBy = 10; ch = this.nextChar(); } if (ch < 0x30 || ch > 0x39) { if (divideBy === 10 && sign === 0 && ((0, _core_utils.isWhiteSpace)(ch) || ch === -1)) { (0, _util.warn)("Lexer.getNumber - treating a single decimal point as zero."); return 0; } throw new _util.FormatError(`Invalid number: ${String.fromCharCode(ch)} (charCode ${ch})`); } sign = sign || 1; let baseValue = ch - 0x30; let powerValue = 0; let powerValueSign = 1; while ((ch = this.nextChar()) >= 0) { if (ch >= 0x30 && ch <= 0x39) { const currentDigit = ch - 0x30; if (eNotation) { powerValue = powerValue * 10 + currentDigit; } else { if (divideBy !== 0) { divideBy *= 10; } baseValue = baseValue * 10 + currentDigit; } } else if (ch === 0x2e) { if (divideBy === 0) { divideBy = 1; } else { break; } } else if (ch === 0x2d) { (0, _util.warn)("Badly formatted number: minus sign in the middle"); } else if (ch === 0x45 || ch === 0x65) { ch = this.peekChar(); if (ch === 0x2b || ch === 0x2d) { powerValueSign = ch === 0x2d ? -1 : 1; this.nextChar(); } else if (ch < 0x30 || ch > 0x39) { break; } eNotation = true; } else { break; } } if (divideBy !== 0) { baseValue /= divideBy; } if (eNotation) { baseValue *= 10 ** (powerValueSign * powerValue); } return sign * baseValue; } getString() { let numParen = 1; let done = false; const strBuf = this.strBuf; strBuf.length = 0; let ch = this.nextChar(); while (true) { let charBuffered = false; switch (ch | 0) { case -1: (0, _util.warn)("Unterminated string"); done = true; break; case 0x28: ++numParen; strBuf.push("("); break; case 0x29: if (--numParen === 0) { this.nextChar(); done = true; } else { strBuf.push(")"); } break; case 0x5c: ch = this.nextChar(); switch (ch) { case -1: (0, _util.warn)("Unterminated string"); done = true; break; case 0x6e: strBuf.push("\n"); break; case 0x72: strBuf.push("\r"); break; case 0x74: strBuf.push("\t"); break; case 0x62: strBuf.push("\b"); break; case 0x66: strBuf.push("\f"); break; case 0x5c: case 0x28: case 0x29: strBuf.push(String.fromCharCode(ch)); break; case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37: let x = ch & 0x0f; ch = this.nextChar(); charBuffered = true; if (ch >= 0x30 && ch <= 0x37) { x = (x << 3) + (ch & 0x0f); ch = this.nextChar(); if (ch >= 0x30 && ch <= 0x37) { charBuffered = false; x = (x << 3) + (ch & 0x0f); } } strBuf.push(String.fromCharCode(x)); break; case 0x0d: if (this.peekChar() === 0x0a) { this.nextChar(); } break; case 0x0a: break; default: strBuf.push(String.fromCharCode(ch)); break; } break; default: strBuf.push(String.fromCharCode(ch)); break; } if (done) { break; } if (!charBuffered) { ch = this.nextChar(); } } return strBuf.join(""); } getName() { let ch, previousCh; const strBuf = this.strBuf; strBuf.length = 0; while ((ch = this.nextChar()) >= 0 && !specialChars[ch]) { if (ch === 0x23) { ch = this.nextChar(); if (specialChars[ch]) { (0, _util.warn)("Lexer_getName: " + "NUMBER SIGN (#) should be followed by a hexadecimal number."); strBuf.push("#"); break; } const x = toHexDigit(ch); if (x !== -1) { previousCh = ch; ch = this.nextChar(); const x2 = toHexDigit(ch); if (x2 === -1) { (0, _util.warn)(`Lexer_getName: Illegal digit (${String.fromCharCode(ch)}) ` + "in hexadecimal number."); strBuf.push("#", String.fromCharCode(previousCh)); if (specialChars[ch]) { break; } strBuf.push(String.fromCharCode(ch)); continue; } strBuf.push(String.fromCharCode(x << 4 | x2)); } else { strBuf.push("#", String.fromCharCode(ch)); } } else { strBuf.push(String.fromCharCode(ch)); } } if (strBuf.length > 127) { (0, _util.warn)(`Name token is longer than allowed by the spec: ${strBuf.length}`); } return _primitives.Name.get(strBuf.join("")); } _hexStringWarn(ch) { const MAX_HEX_STRING_NUM_WARN = 5; if (this._hexStringNumWarn++ === MAX_HEX_STRING_NUM_WARN) { (0, _util.warn)("getHexString - ignoring additional invalid characters."); return; } if (this._hexStringNumWarn > MAX_HEX_STRING_NUM_WARN) { return; } (0, _util.warn)(`getHexString - ignoring invalid character: ${ch}`); } getHexString() { const strBuf = this.strBuf; strBuf.length = 0; let ch = this.currentChar; let isFirstHex = true; let firstDigit, secondDigit; this._hexStringNumWarn = 0; while (true) { if (ch < 0) { (0, _util.warn)("Unterminated hex string"); break; } else if (ch === 0x3e) { this.nextChar(); break; } else if (specialChars[ch] === 1) { ch = this.nextChar(); continue; } else { if (isFirstHex) { firstDigit = toHexDigit(ch); if (firstDigit === -1) { this._hexStringWarn(ch); ch = this.nextChar(); continue; } } else { secondDigit = toHexDigit(ch); if (secondDigit === -1) { this._hexStringWarn(ch); ch = this.nextChar(); continue; } strBuf.push(String.fromCharCode(firstDigit << 4 | secondDigit)); } isFirstHex = !isFirstHex; ch = this.nextChar(); } } return strBuf.join(""); } getObj() { let comment = false; let ch = this.currentChar; while (true) { if (ch < 0) { return _primitives.EOF; } if (comment) { if (ch === 0x0a || ch === 0x0d) { comment = false; } } else if (ch === 0x25) { comment = true; } else if (specialChars[ch] !== 1) { break; } ch = this.nextChar(); } switch (ch | 0) { case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: case 0x2b: case 0x2d: case 0x2e: return this.getNumber(); case 0x28: return this.getString(); case 0x2f: return this.getName(); case 0x5b: this.nextChar(); return _primitives.Cmd.get("["); case 0x5d: this.nextChar(); return _primitives.Cmd.get("]"); case 0x3c: ch = this.nextChar(); if (ch === 0x3c) { this.nextChar(); return _primitives.Cmd.get("<<"); } return this.getHexString(); case 0x3e: ch = this.nextChar(); if (ch === 0x3e) { this.nextChar(); return _primitives.Cmd.get(">>"); } return _primitives.Cmd.get(">"); case 0x7b: this.nextChar(); return _primitives.Cmd.get("{"); case 0x7d: this.nextChar(); return _primitives.Cmd.get("}"); case 0x29: this.nextChar(); throw new _util.FormatError(`Illegal character: ${ch}`); } let str = String.fromCharCode(ch); if (ch < 0x20 || ch > 0x7f) { const nextCh = this.peekChar(); if (nextCh >= 0x20 && nextCh <= 0x7f) { this.nextChar(); return _primitives.Cmd.get(str); } } const knownCommands = this.knownCommands; let knownCommandFound = knownCommands && knownCommands[str] !== undefined; while ((ch = this.nextChar()) >= 0 && !specialChars[ch]) { const possibleCommand = str + String.fromCharCode(ch); if (knownCommandFound && knownCommands[possibleCommand] === undefined) { break; } if (str.length === 128) { throw new _util.FormatError(`Command token too long: ${str.length}`); } str = possibleCommand; knownCommandFound = knownCommands && knownCommands[str] !== undefined; } if (str === "true") { return true; } if (str === "false") { return false; } if (str === "null") { return null; } if (str === "BI") { this.beginInlineImagePos = this.stream.pos; } return _primitives.Cmd.get(str); } peekObj() { const streamPos = this.stream.pos, currentChar = this.currentChar, beginInlineImagePos = this.beginInlineImagePos; let nextObj; try { nextObj = this.getObj(); } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } (0, _util.warn)(`peekObj: ${ex}`); } this.stream.pos = streamPos; this.currentChar = currentChar; this.beginInlineImagePos = beginInlineImagePos; return nextObj; } skipToNextLine() { let ch = this.currentChar; while (ch >= 0) { if (ch === 0x0d) { ch = this.nextChar(); if (ch === 0x0a) { this.nextChar(); } break; } else if (ch === 0x0a) { this.nextChar(); break; } ch = this.nextChar(); } } } exports.Lexer = Lexer; class Linearization { static create(stream) { function getInt(linDict, name, allowZeroValue = false) { const obj = linDict.get(name); if (Number.isInteger(obj) && (allowZeroValue ? obj >= 0 : obj > 0)) { return obj; } throw new Error(`The "${name}" parameter in the linearization ` + "dictionary is invalid."); } function getHints(linDict) { const hints = linDict.get("H"); let hintsLength; if (Array.isArray(hints) && ((hintsLength = hints.length) === 2 || hintsLength === 4)) { for (let index = 0; index < hintsLength; index++) { const hint = hints[index]; if (!(Number.isInteger(hint) && hint > 0)) { throw new Error(`Hint (${index}) in the linearization dictionary is invalid.`); } } return hints; } throw new Error("Hint array in the linearization dictionary is invalid."); } const parser = new Parser({ lexer: new Lexer(stream), xref: null }); const obj1 = parser.getObj(); const obj2 = parser.getObj(); const obj3 = parser.getObj(); const linDict = parser.getObj(); let obj, length; if (!(Number.isInteger(obj1) && Number.isInteger(obj2) && (0, _primitives.isCmd)(obj3, "obj") && (0, _primitives.isDict)(linDict) && (0, _util.isNum)(obj = linDict.get("Linearized")) && obj > 0)) { return null; } else if ((length = getInt(linDict, "L")) !== stream.length) { throw new Error('The "L" parameter in the linearization dictionary ' + "does not equal the stream length."); } return { length, hints: getHints(linDict), objectNumberFirst: getInt(linDict, "O"), endFirst: getInt(linDict, "E"), numPages: getInt(linDict, "N"), mainXRefEntriesOffset: getInt(linDict, "T"), pageFirst: linDict.has("P") ? getInt(linDict, "P", true) : 0 }; } } exports.Linearization = Linearization; /***/ }), /* 28 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.Ascii85Stream = void 0; var _decode_stream = __w_pdfjs_require__(29); var _core_utils = __w_pdfjs_require__(9); class Ascii85Stream extends _decode_stream.DecodeStream { constructor(str, maybeLength) { if (maybeLength) { maybeLength *= 0.8; } super(maybeLength); this.str = str; this.dict = str.dict; this.input = new Uint8Array(5); } readBlock() { const TILDA_CHAR = 0x7e; const Z_LOWER_CHAR = 0x7a; const EOF = -1; const str = this.str; let c = str.getByte(); while ((0, _core_utils.isWhiteSpace)(c)) { c = str.getByte(); } if (c === EOF || c === TILDA_CHAR) { this.eof = true; return; } const bufferLength = this.bufferLength; let buffer, i; if (c === Z_LOWER_CHAR) { buffer = this.ensureBuffer(bufferLength + 4); for (i = 0; i < 4; ++i) { buffer[bufferLength + i] = 0; } this.bufferLength += 4; } else { const input = this.input; input[0] = c; for (i = 1; i < 5; ++i) { c = str.getByte(); while ((0, _core_utils.isWhiteSpace)(c)) { c = str.getByte(); } input[i] = c; if (c === EOF || c === TILDA_CHAR) { break; } } buffer = this.ensureBuffer(bufferLength + i - 1); this.bufferLength += i - 1; if (i < 5) { for (; i < 5; ++i) { input[i] = 0x21 + 84; } this.eof = true; } let t = 0; for (i = 0; i < 5; ++i) { t = t * 85 + (input[i] - 0x21); } for (i = 3; i >= 0; --i) { buffer[bufferLength + i] = t & 0xff; t >>= 8; } } } } exports.Ascii85Stream = Ascii85Stream; /***/ }), /* 29 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.StreamsSequenceStream = exports.DecodeStream = void 0; var _base_stream = __w_pdfjs_require__(6); var _stream = __w_pdfjs_require__(10); const emptyBuffer = new Uint8Array(0); class DecodeStream extends _base_stream.BaseStream { constructor(maybeMinBufferLength) { super(); this._rawMinBufferLength = maybeMinBufferLength || 0; this.pos = 0; this.bufferLength = 0; this.eof = false; this.buffer = emptyBuffer; this.minBufferLength = 512; if (maybeMinBufferLength) { while (this.minBufferLength < maybeMinBufferLength) { this.minBufferLength *= 2; } } } get isEmpty() { while (!this.eof && this.bufferLength === 0) { this.readBlock(); } return this.bufferLength === 0; } ensureBuffer(requested) { const buffer = this.buffer; if (requested <= buffer.byteLength) { return buffer; } let size = this.minBufferLength; while (size < requested) { size *= 2; } const buffer2 = new Uint8Array(size); buffer2.set(buffer); return this.buffer = buffer2; } getByte() { const pos = this.pos; while (this.bufferLength <= pos) { if (this.eof) { return -1; } this.readBlock(); } return this.buffer[this.pos++]; } getBytes(length, forceClamped = false) { const pos = this.pos; let end; if (length) { this.ensureBuffer(pos + length); end = pos + length; while (!this.eof && this.bufferLength < end) { this.readBlock(); } const bufEnd = this.bufferLength; if (end > bufEnd) { end = bufEnd; } } else { while (!this.eof) { this.readBlock(); } end = this.bufferLength; } this.pos = end; const subarray = this.buffer.subarray(pos, end); return forceClamped && !(subarray instanceof Uint8ClampedArray) ? new Uint8ClampedArray(subarray) : subarray; } reset() { this.pos = 0; } makeSubStream(start, length, dict = null) { if (length === undefined) { while (!this.eof) { this.readBlock(); } } else { const end = start + length; while (this.bufferLength <= end && !this.eof) { this.readBlock(); } } return new _stream.Stream(this.buffer, start, length, dict); } getBaseStreams() { return this.str ? this.str.getBaseStreams() : null; } } exports.DecodeStream = DecodeStream; class StreamsSequenceStream extends DecodeStream { constructor(streams, onError = null) { let maybeLength = 0; for (const stream of streams) { maybeLength += stream instanceof DecodeStream ? stream._rawMinBufferLength : stream.length; } super(maybeLength); this.streams = streams; this._onError = onError; } readBlock() { const streams = this.streams; if (streams.length === 0) { this.eof = true; return; } const stream = streams.shift(); let chunk; try { chunk = stream.getBytes(); } catch (reason) { if (this._onError) { this._onError(reason, stream.dict && stream.dict.objId); return; } throw reason; } const bufferLength = this.bufferLength; const newLength = bufferLength + chunk.length; const buffer = this.ensureBuffer(newLength); buffer.set(chunk, bufferLength); this.bufferLength = newLength; } getBaseStreams() { const baseStreamsBuf = []; for (const stream of this.streams) { const baseStreams = stream.getBaseStreams(); if (baseStreams) { baseStreamsBuf.push(...baseStreams); } } return baseStreamsBuf.length > 0 ? baseStreamsBuf : null; } } exports.StreamsSequenceStream = StreamsSequenceStream; /***/ }), /* 30 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.AsciiHexStream = void 0; var _decode_stream = __w_pdfjs_require__(29); class AsciiHexStream extends _decode_stream.DecodeStream { constructor(str, maybeLength) { if (maybeLength) { maybeLength *= 0.5; } super(maybeLength); this.str = str; this.dict = str.dict; this.firstDigit = -1; } readBlock() { const UPSTREAM_BLOCK_SIZE = 8000; const bytes = this.str.getBytes(UPSTREAM_BLOCK_SIZE); if (!bytes.length) { this.eof = true; return; } const maxDecodeLength = bytes.length + 1 >> 1; const buffer = this.ensureBuffer(this.bufferLength + maxDecodeLength); let bufferLength = this.bufferLength; let firstDigit = this.firstDigit; for (const ch of bytes) { let digit; if (ch >= 0x30 && ch <= 0x39) { digit = ch & 0x0f; } else if (ch >= 0x41 && ch <= 0x46 || ch >= 0x61 && ch <= 0x66) { digit = (ch & 0x0f) + 9; } else if (ch === 0x3e) { this.eof = true; break; } else { continue; } if (firstDigit < 0) { firstDigit = digit; } else { buffer[bufferLength++] = firstDigit << 4 | digit; firstDigit = -1; } } if (firstDigit >= 0 && this.eof) { buffer[bufferLength++] = firstDigit << 4; firstDigit = -1; } this.firstDigit = firstDigit; this.bufferLength = bufferLength; } } exports.AsciiHexStream = AsciiHexStream; /***/ }), /* 31 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.CCITTFaxStream = void 0; var _primitives = __w_pdfjs_require__(5); var _ccitt = __w_pdfjs_require__(32); var _decode_stream = __w_pdfjs_require__(29); class CCITTFaxStream extends _decode_stream.DecodeStream { constructor(str, maybeLength, params) { super(maybeLength); this.str = str; this.dict = str.dict; if (!(0, _primitives.isDict)(params)) { params = _primitives.Dict.empty; } const source = { next() { return str.getByte(); } }; this.ccittFaxDecoder = new _ccitt.CCITTFaxDecoder(source, { K: params.get("K"), EndOfLine: params.get("EndOfLine"), EncodedByteAlign: params.get("EncodedByteAlign"), Columns: params.get("Columns"), Rows: params.get("Rows"), EndOfBlock: params.get("EndOfBlock"), BlackIs1: params.get("BlackIs1") }); } readBlock() { while (!this.eof) { const c = this.ccittFaxDecoder.readNextChar(); if (c === -1) { this.eof = true; return; } this.ensureBuffer(this.bufferLength + 1); this.buffer[this.bufferLength++] = c; } } } exports.CCITTFaxStream = CCITTFaxStream; /***/ }), /* 32 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.CCITTFaxDecoder = void 0; var _util = __w_pdfjs_require__(2); const ccittEOL = -2; const ccittEOF = -1; const twoDimPass = 0; const twoDimHoriz = 1; const twoDimVert0 = 2; const twoDimVertR1 = 3; const twoDimVertL1 = 4; const twoDimVertR2 = 5; const twoDimVertL2 = 6; const twoDimVertR3 = 7; const twoDimVertL3 = 8; const twoDimTable = [[-1, -1], [-1, -1], [7, twoDimVertL3], [7, twoDimVertR3], [6, twoDimVertL2], [6, twoDimVertL2], [6, twoDimVertR2], [6, twoDimVertR2], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [4, twoDimPass], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimHoriz], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertL1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [3, twoDimVertR1], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0], [1, twoDimVert0]]; const whiteTable1 = [[-1, -1], [12, ccittEOL], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [11, 1792], [11, 1792], [12, 1984], [12, 2048], [12, 2112], [12, 2176], [12, 2240], [12, 2304], [11, 1856], [11, 1856], [11, 1920], [11, 1920], [12, 2368], [12, 2432], [12, 2496], [12, 2560]]; const whiteTable2 = [[-1, -1], [-1, -1], [-1, -1], [-1, -1], [8, 29], [8, 29], [8, 30], [8, 30], [8, 45], [8, 45], [8, 46], [8, 46], [7, 22], [7, 22], [7, 22], [7, 22], [7, 23], [7, 23], [7, 23], [7, 23], [8, 47], [8, 47], [8, 48], [8, 48], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [6, 13], [7, 20], [7, 20], [7, 20], [7, 20], [8, 33], [8, 33], [8, 34], [8, 34], [8, 35], [8, 35], [8, 36], [8, 36], [8, 37], [8, 37], [8, 38], [8, 38], [7, 19], [7, 19], [7, 19], [7, 19], [8, 31], [8, 31], [8, 32], [8, 32], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 1], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [6, 12], [8, 53], [8, 53], [8, 54], [8, 54], [7, 26], [7, 26], [7, 26], [7, 26], [8, 39], [8, 39], [8, 40], [8, 40], [8, 41], [8, 41], [8, 42], [8, 42], [8, 43], [8, 43], [8, 44], [8, 44], [7, 21], [7, 21], [7, 21], [7, 21], [7, 28], [7, 28], [7, 28], [7, 28], [8, 61], [8, 61], [8, 62], [8, 62], [8, 63], [8, 63], [8, 0], [8, 0], [8, 320], [8, 320], [8, 384], [8, 384], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 10], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [5, 11], [7, 27], [7, 27], [7, 27], [7, 27], [8, 59], [8, 59], [8, 60], [8, 60], [9, 1472], [9, 1536], [9, 1600], [9, 1728], [7, 18], [7, 18], [7, 18], [7, 18], [7, 24], [7, 24], [7, 24], [7, 24], [8, 49], [8, 49], [8, 50], [8, 50], [8, 51], [8, 51], [8, 52], [8, 52], [7, 25], [7, 25], [7, 25], [7, 25], [8, 55], [8, 55], [8, 56], [8, 56], [8, 57], [8, 57], [8, 58], [8, 58], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 192], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [6, 1664], [8, 448], [8, 448], [8, 512], [8, 512], [9, 704], [9, 768], [8, 640], [8, 640], [8, 576], [8, 576], [9, 832], [9, 896], [9, 960], [9, 1024], [9, 1088], [9, 1152], [9, 1216], [9, 1280], [9, 1344], [9, 1408], [7, 256], [7, 256], [7, 256], [7, 256], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 2], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [4, 3], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 128], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 8], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [5, 9], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 16], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [6, 17], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 4], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 14], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [6, 15], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [5, 64], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 6], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7], [4, 7]]; const blackTable1 = [[-1, -1], [-1, -1], [12, ccittEOL], [12, ccittEOL], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [-1, -1], [11, 1792], [11, 1792], [11, 1792], [11, 1792], [12, 1984], [12, 1984], [12, 2048], [12, 2048], [12, 2112], [12, 2112], [12, 2176], [12, 2176], [12, 2240], [12, 2240], [12, 2304], [12, 2304], [11, 1856], [11, 1856], [11, 1856], [11, 1856], [11, 1920], [11, 1920], [11, 1920], [11, 1920], [12, 2368], [12, 2368], [12, 2432], [12, 2432], [12, 2496], [12, 2496], [12, 2560], [12, 2560], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [10, 18], [12, 52], [12, 52], [13, 640], [13, 704], [13, 768], [13, 832], [12, 55], [12, 55], [12, 56], [12, 56], [13, 1280], [13, 1344], [13, 1408], [13, 1472], [12, 59], [12, 59], [12, 60], [12, 60], [13, 1536], [13, 1600], [11, 24], [11, 24], [11, 24], [11, 24], [11, 25], [11, 25], [11, 25], [11, 25], [13, 1664], [13, 1728], [12, 320], [12, 320], [12, 384], [12, 384], [12, 448], [12, 448], [13, 512], [13, 576], [12, 53], [12, 53], [12, 54], [12, 54], [13, 896], [13, 960], [13, 1024], [13, 1088], [13, 1152], [13, 1216], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64], [10, 64]]; const blackTable2 = [[8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [8, 13], [11, 23], [11, 23], [12, 50], [12, 51], [12, 44], [12, 45], [12, 46], [12, 47], [12, 57], [12, 58], [12, 61], [12, 256], [10, 16], [10, 16], [10, 16], [10, 16], [10, 17], [10, 17], [10, 17], [10, 17], [12, 48], [12, 49], [12, 62], [12, 63], [12, 30], [12, 31], [12, 32], [12, 33], [12, 40], [12, 41], [11, 22], [11, 22], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [8, 14], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 10], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [7, 11], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [9, 15], [12, 128], [12, 192], [12, 26], [12, 27], [12, 28], [12, 29], [11, 19], [11, 19], [11, 20], [11, 20], [12, 34], [12, 35], [12, 36], [12, 37], [12, 38], [12, 39], [11, 21], [11, 21], [12, 42], [12, 43], [10, 0], [10, 0], [10, 0], [10, 0], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12], [7, 12]]; const blackTable3 = [[-1, -1], [-1, -1], [-1, -1], [-1, -1], [6, 9], [6, 8], [5, 7], [5, 7], [4, 6], [4, 6], [4, 6], [4, 6], [4, 5], [4, 5], [4, 5], [4, 5], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 1], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [3, 4], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 3], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2], [2, 2]]; class CCITTFaxDecoder { constructor(source, options = {}) { if (!source || typeof source.next !== "function") { throw new Error('CCITTFaxDecoder - invalid "source" parameter.'); } this.source = source; this.eof = false; this.encoding = options.K || 0; this.eoline = options.EndOfLine || false; this.byteAlign = options.EncodedByteAlign || false; this.columns = options.Columns || 1728; this.rows = options.Rows || 0; let eoblock = options.EndOfBlock; if (eoblock === null || eoblock === undefined) { eoblock = true; } this.eoblock = eoblock; this.black = options.BlackIs1 || false; this.codingLine = new Uint32Array(this.columns + 1); this.refLine = new Uint32Array(this.columns + 2); this.codingLine[0] = this.columns; this.codingPos = 0; this.row = 0; this.nextLine2D = this.encoding < 0; this.inputBits = 0; this.inputBuf = 0; this.outputBits = 0; this.rowsDone = false; let code1; while ((code1 = this._lookBits(12)) === 0) { this._eatBits(1); } if (code1 === 1) { this._eatBits(12); } if (this.encoding > 0) { this.nextLine2D = !this._lookBits(1); this._eatBits(1); } } readNextChar() { if (this.eof) { return -1; } const refLine = this.refLine; const codingLine = this.codingLine; const columns = this.columns; let refPos, blackPixels, bits, i; if (this.outputBits === 0) { if (this.rowsDone) { this.eof = true; } if (this.eof) { return -1; } this.err = false; let code1, code2, code3; if (this.nextLine2D) { for (i = 0; codingLine[i] < columns; ++i) { refLine[i] = codingLine[i]; } refLine[i++] = columns; refLine[i] = columns; codingLine[0] = 0; this.codingPos = 0; refPos = 0; blackPixels = 0; while (codingLine[this.codingPos] < columns) { code1 = this._getTwoDimCode(); switch (code1) { case twoDimPass: this._addPixels(refLine[refPos + 1], blackPixels); if (refLine[refPos + 1] < columns) { refPos += 2; } break; case twoDimHoriz: code1 = code2 = 0; if (blackPixels) { do { code1 += code3 = this._getBlackCode(); } while (code3 >= 64); do { code2 += code3 = this._getWhiteCode(); } while (code3 >= 64); } else { do { code1 += code3 = this._getWhiteCode(); } while (code3 >= 64); do { code2 += code3 = this._getBlackCode(); } while (code3 >= 64); } this._addPixels(codingLine[this.codingPos] + code1, blackPixels); if (codingLine[this.codingPos] < columns) { this._addPixels(codingLine[this.codingPos] + code2, blackPixels ^ 1); } while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { refPos += 2; } break; case twoDimVertR3: this._addPixels(refLine[refPos] + 3, blackPixels); blackPixels ^= 1; if (codingLine[this.codingPos] < columns) { ++refPos; while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { refPos += 2; } } break; case twoDimVertR2: this._addPixels(refLine[refPos] + 2, blackPixels); blackPixels ^= 1; if (codingLine[this.codingPos] < columns) { ++refPos; while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { refPos += 2; } } break; case twoDimVertR1: this._addPixels(refLine[refPos] + 1, blackPixels); blackPixels ^= 1; if (codingLine[this.codingPos] < columns) { ++refPos; while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { refPos += 2; } } break; case twoDimVert0: this._addPixels(refLine[refPos], blackPixels); blackPixels ^= 1; if (codingLine[this.codingPos] < columns) { ++refPos; while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { refPos += 2; } } break; case twoDimVertL3: this._addPixelsNeg(refLine[refPos] - 3, blackPixels); blackPixels ^= 1; if (codingLine[this.codingPos] < columns) { if (refPos > 0) { --refPos; } else { ++refPos; } while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { refPos += 2; } } break; case twoDimVertL2: this._addPixelsNeg(refLine[refPos] - 2, blackPixels); blackPixels ^= 1; if (codingLine[this.codingPos] < columns) { if (refPos > 0) { --refPos; } else { ++refPos; } while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { refPos += 2; } } break; case twoDimVertL1: this._addPixelsNeg(refLine[refPos] - 1, blackPixels); blackPixels ^= 1; if (codingLine[this.codingPos] < columns) { if (refPos > 0) { --refPos; } else { ++refPos; } while (refLine[refPos] <= codingLine[this.codingPos] && refLine[refPos] < columns) { refPos += 2; } } break; case ccittEOF: this._addPixels(columns, 0); this.eof = true; break; default: (0, _util.info)("bad 2d code"); this._addPixels(columns, 0); this.err = true; } } } else { codingLine[0] = 0; this.codingPos = 0; blackPixels = 0; while (codingLine[this.codingPos] < columns) { code1 = 0; if (blackPixels) { do { code1 += code3 = this._getBlackCode(); } while (code3 >= 64); } else { do { code1 += code3 = this._getWhiteCode(); } while (code3 >= 64); } this._addPixels(codingLine[this.codingPos] + code1, blackPixels); blackPixels ^= 1; } } let gotEOL = false; if (this.byteAlign) { this.inputBits &= ~7; } if (!this.eoblock && this.row === this.rows - 1) { this.rowsDone = true; } else { code1 = this._lookBits(12); if (this.eoline) { while (code1 !== ccittEOF && code1 !== 1) { this._eatBits(1); code1 = this._lookBits(12); } } else { while (code1 === 0) { this._eatBits(1); code1 = this._lookBits(12); } } if (code1 === 1) { this._eatBits(12); gotEOL = true; } else if (code1 === ccittEOF) { this.eof = true; } } if (!this.eof && this.encoding > 0 && !this.rowsDone) { this.nextLine2D = !this._lookBits(1); this._eatBits(1); } if (this.eoblock && gotEOL && this.byteAlign) { code1 = this._lookBits(12); if (code1 === 1) { this._eatBits(12); if (this.encoding > 0) { this._lookBits(1); this._eatBits(1); } if (this.encoding >= 0) { for (i = 0; i < 4; ++i) { code1 = this._lookBits(12); if (code1 !== 1) { (0, _util.info)("bad rtc code: " + code1); } this._eatBits(12); if (this.encoding > 0) { this._lookBits(1); this._eatBits(1); } } } this.eof = true; } } else if (this.err && this.eoline) { while (true) { code1 = this._lookBits(13); if (code1 === ccittEOF) { this.eof = true; return -1; } if (code1 >> 1 === 1) { break; } this._eatBits(1); } this._eatBits(12); if (this.encoding > 0) { this._eatBits(1); this.nextLine2D = !(code1 & 1); } } if (codingLine[0] > 0) { this.outputBits = codingLine[this.codingPos = 0]; } else { this.outputBits = codingLine[this.codingPos = 1]; } this.row++; } let c; if (this.outputBits >= 8) { c = this.codingPos & 1 ? 0 : 0xff; this.outputBits -= 8; if (this.outputBits === 0 && codingLine[this.codingPos] < columns) { this.codingPos++; this.outputBits = codingLine[this.codingPos] - codingLine[this.codingPos - 1]; } } else { bits = 8; c = 0; do { if (typeof this.outputBits !== "number") { throw new _util.FormatError('Invalid /CCITTFaxDecode data, "outputBits" must be a number.'); } if (this.outputBits > bits) { c <<= bits; if (!(this.codingPos & 1)) { c |= 0xff >> 8 - bits; } this.outputBits -= bits; bits = 0; } else { c <<= this.outputBits; if (!(this.codingPos & 1)) { c |= 0xff >> 8 - this.outputBits; } bits -= this.outputBits; this.outputBits = 0; if (codingLine[this.codingPos] < columns) { this.codingPos++; this.outputBits = codingLine[this.codingPos] - codingLine[this.codingPos - 1]; } else if (bits > 0) { c <<= bits; bits = 0; } } } while (bits); } if (this.black) { c ^= 0xff; } return c; } _addPixels(a1, blackPixels) { const codingLine = this.codingLine; let codingPos = this.codingPos; if (a1 > codingLine[codingPos]) { if (a1 > this.columns) { (0, _util.info)("row is wrong length"); this.err = true; a1 = this.columns; } if (codingPos & 1 ^ blackPixels) { ++codingPos; } codingLine[codingPos] = a1; } this.codingPos = codingPos; } _addPixelsNeg(a1, blackPixels) { const codingLine = this.codingLine; let codingPos = this.codingPos; if (a1 > codingLine[codingPos]) { if (a1 > this.columns) { (0, _util.info)("row is wrong length"); this.err = true; a1 = this.columns; } if (codingPos & 1 ^ blackPixels) { ++codingPos; } codingLine[codingPos] = a1; } else if (a1 < codingLine[codingPos]) { if (a1 < 0) { (0, _util.info)("invalid code"); this.err = true; a1 = 0; } while (codingPos > 0 && a1 < codingLine[codingPos - 1]) { --codingPos; } codingLine[codingPos] = a1; } this.codingPos = codingPos; } _findTableCode(start, end, table, limit) { const limitValue = limit || 0; for (let i = start; i <= end; ++i) { let code = this._lookBits(i); if (code === ccittEOF) { return [true, 1, false]; } if (i < end) { code <<= end - i; } if (!limitValue || code >= limitValue) { const p = table[code - limitValue]; if (p[0] === i) { this._eatBits(i); return [true, p[1], true]; } } } return [false, 0, false]; } _getTwoDimCode() { let code = 0; let p; if (this.eoblock) { code = this._lookBits(7); p = twoDimTable[code]; if (p && p[0] > 0) { this._eatBits(p[0]); return p[1]; } } else { const result = this._findTableCode(1, 7, twoDimTable); if (result[0] && result[2]) { return result[1]; } } (0, _util.info)("Bad two dim code"); return ccittEOF; } _getWhiteCode() { let code = 0; let p; if (this.eoblock) { code = this._lookBits(12); if (code === ccittEOF) { return 1; } if (code >> 5 === 0) { p = whiteTable1[code]; } else { p = whiteTable2[code >> 3]; } if (p[0] > 0) { this._eatBits(p[0]); return p[1]; } } else { let result = this._findTableCode(1, 9, whiteTable2); if (result[0]) { return result[1]; } result = this._findTableCode(11, 12, whiteTable1); if (result[0]) { return result[1]; } } (0, _util.info)("bad white code"); this._eatBits(1); return 1; } _getBlackCode() { let code, p; if (this.eoblock) { code = this._lookBits(13); if (code === ccittEOF) { return 1; } if (code >> 7 === 0) { p = blackTable1[code]; } else if (code >> 9 === 0 && code >> 7 !== 0) { p = blackTable2[(code >> 1) - 64]; } else { p = blackTable3[code >> 7]; } if (p[0] > 0) { this._eatBits(p[0]); return p[1]; } } else { let result = this._findTableCode(2, 6, blackTable3); if (result[0]) { return result[1]; } result = this._findTableCode(7, 12, blackTable2, 64); if (result[0]) { return result[1]; } result = this._findTableCode(10, 13, blackTable1); if (result[0]) { return result[1]; } } (0, _util.info)("bad black code"); this._eatBits(1); return 1; } _lookBits(n) { let c; while (this.inputBits < n) { if ((c = this.source.next()) === -1) { if (this.inputBits === 0) { return ccittEOF; } return this.inputBuf << n - this.inputBits & 0xffff >> 16 - n; } this.inputBuf = this.inputBuf << 8 | c; this.inputBits += 8; } return this.inputBuf >> this.inputBits - n & 0xffff >> 16 - n; } _eatBits(n) { if ((this.inputBits -= n) < 0) { this.inputBits = 0; } } } exports.CCITTFaxDecoder = CCITTFaxDecoder; /***/ }), /* 33 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.FlateStream = void 0; var _decode_stream = __w_pdfjs_require__(29); var _util = __w_pdfjs_require__(2); const codeLenCodeMap = new Int32Array([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]); const lengthDecode = new Int32Array([0x00003, 0x00004, 0x00005, 0x00006, 0x00007, 0x00008, 0x00009, 0x0000a, 0x1000b, 0x1000d, 0x1000f, 0x10011, 0x20013, 0x20017, 0x2001b, 0x2001f, 0x30023, 0x3002b, 0x30033, 0x3003b, 0x40043, 0x40053, 0x40063, 0x40073, 0x50083, 0x500a3, 0x500c3, 0x500e3, 0x00102, 0x00102, 0x00102]); const distDecode = new Int32Array([0x00001, 0x00002, 0x00003, 0x00004, 0x10005, 0x10007, 0x20009, 0x2000d, 0x30011, 0x30019, 0x40021, 0x40031, 0x50041, 0x50061, 0x60081, 0x600c1, 0x70101, 0x70181, 0x80201, 0x80301, 0x90401, 0x90601, 0xa0801, 0xa0c01, 0xb1001, 0xb1801, 0xc2001, 0xc3001, 0xd4001, 0xd6001]); const fixedLitCodeTab = [new Int32Array([0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c0, 0x70108, 0x80060, 0x80020, 0x900a0, 0x80000, 0x80080, 0x80040, 0x900e0, 0x70104, 0x80058, 0x80018, 0x90090, 0x70114, 0x80078, 0x80038, 0x900d0, 0x7010c, 0x80068, 0x80028, 0x900b0, 0x80008, 0x80088, 0x80048, 0x900f0, 0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c8, 0x7010a, 0x80064, 0x80024, 0x900a8, 0x80004, 0x80084, 0x80044, 0x900e8, 0x70106, 0x8005c, 0x8001c, 0x90098, 0x70116, 0x8007c, 0x8003c, 0x900d8, 0x7010e, 0x8006c, 0x8002c, 0x900b8, 0x8000c, 0x8008c, 0x8004c, 0x900f8, 0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c4, 0x70109, 0x80062, 0x80022, 0x900a4, 0x80002, 0x80082, 0x80042, 0x900e4, 0x70105, 0x8005a, 0x8001a, 0x90094, 0x70115, 0x8007a, 0x8003a, 0x900d4, 0x7010d, 0x8006a, 0x8002a, 0x900b4, 0x8000a, 0x8008a, 0x8004a, 0x900f4, 0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cc, 0x7010b, 0x80066, 0x80026, 0x900ac, 0x80006, 0x80086, 0x80046, 0x900ec, 0x70107, 0x8005e, 0x8001e, 0x9009c, 0x70117, 0x8007e, 0x8003e, 0x900dc, 0x7010f, 0x8006e, 0x8002e, 0x900bc, 0x8000e, 0x8008e, 0x8004e, 0x900fc, 0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c2, 0x70108, 0x80061, 0x80021, 0x900a2, 0x80001, 0x80081, 0x80041, 0x900e2, 0x70104, 0x80059, 0x80019, 0x90092, 0x70114, 0x80079, 0x80039, 0x900d2, 0x7010c, 0x80069, 0x80029, 0x900b2, 0x80009, 0x80089, 0x80049, 0x900f2, 0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900ca, 0x7010a, 0x80065, 0x80025, 0x900aa, 0x80005, 0x80085, 0x80045, 0x900ea, 0x70106, 0x8005d, 0x8001d, 0x9009a, 0x70116, 0x8007d, 0x8003d, 0x900da, 0x7010e, 0x8006d, 0x8002d, 0x900ba, 0x8000d, 0x8008d, 0x8004d, 0x900fa, 0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c6, 0x70109, 0x80063, 0x80023, 0x900a6, 0x80003, 0x80083, 0x80043, 0x900e6, 0x70105, 0x8005b, 0x8001b, 0x90096, 0x70115, 0x8007b, 0x8003b, 0x900d6, 0x7010d, 0x8006b, 0x8002b, 0x900b6, 0x8000b, 0x8008b, 0x8004b, 0x900f6, 0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900ce, 0x7010b, 0x80067, 0x80027, 0x900ae, 0x80007, 0x80087, 0x80047, 0x900ee, 0x70107, 0x8005f, 0x8001f, 0x9009e, 0x70117, 0x8007f, 0x8003f, 0x900de, 0x7010f, 0x8006f, 0x8002f, 0x900be, 0x8000f, 0x8008f, 0x8004f, 0x900fe, 0x70100, 0x80050, 0x80010, 0x80118, 0x70110, 0x80070, 0x80030, 0x900c1, 0x70108, 0x80060, 0x80020, 0x900a1, 0x80000, 0x80080, 0x80040, 0x900e1, 0x70104, 0x80058, 0x80018, 0x90091, 0x70114, 0x80078, 0x80038, 0x900d1, 0x7010c, 0x80068, 0x80028, 0x900b1, 0x80008, 0x80088, 0x80048, 0x900f1, 0x70102, 0x80054, 0x80014, 0x8011c, 0x70112, 0x80074, 0x80034, 0x900c9, 0x7010a, 0x80064, 0x80024, 0x900a9, 0x80004, 0x80084, 0x80044, 0x900e9, 0x70106, 0x8005c, 0x8001c, 0x90099, 0x70116, 0x8007c, 0x8003c, 0x900d9, 0x7010e, 0x8006c, 0x8002c, 0x900b9, 0x8000c, 0x8008c, 0x8004c, 0x900f9, 0x70101, 0x80052, 0x80012, 0x8011a, 0x70111, 0x80072, 0x80032, 0x900c5, 0x70109, 0x80062, 0x80022, 0x900a5, 0x80002, 0x80082, 0x80042, 0x900e5, 0x70105, 0x8005a, 0x8001a, 0x90095, 0x70115, 0x8007a, 0x8003a, 0x900d5, 0x7010d, 0x8006a, 0x8002a, 0x900b5, 0x8000a, 0x8008a, 0x8004a, 0x900f5, 0x70103, 0x80056, 0x80016, 0x8011e, 0x70113, 0x80076, 0x80036, 0x900cd, 0x7010b, 0x80066, 0x80026, 0x900ad, 0x80006, 0x80086, 0x80046, 0x900ed, 0x70107, 0x8005e, 0x8001e, 0x9009d, 0x70117, 0x8007e, 0x8003e, 0x900dd, 0x7010f, 0x8006e, 0x8002e, 0x900bd, 0x8000e, 0x8008e, 0x8004e, 0x900fd, 0x70100, 0x80051, 0x80011, 0x80119, 0x70110, 0x80071, 0x80031, 0x900c3, 0x70108, 0x80061, 0x80021, 0x900a3, 0x80001, 0x80081, 0x80041, 0x900e3, 0x70104, 0x80059, 0x80019, 0x90093, 0x70114, 0x80079, 0x80039, 0x900d3, 0x7010c, 0x80069, 0x80029, 0x900b3, 0x80009, 0x80089, 0x80049, 0x900f3, 0x70102, 0x80055, 0x80015, 0x8011d, 0x70112, 0x80075, 0x80035, 0x900cb, 0x7010a, 0x80065, 0x80025, 0x900ab, 0x80005, 0x80085, 0x80045, 0x900eb, 0x70106, 0x8005d, 0x8001d, 0x9009b, 0x70116, 0x8007d, 0x8003d, 0x900db, 0x7010e, 0x8006d, 0x8002d, 0x900bb, 0x8000d, 0x8008d, 0x8004d, 0x900fb, 0x70101, 0x80053, 0x80013, 0x8011b, 0x70111, 0x80073, 0x80033, 0x900c7, 0x70109, 0x80063, 0x80023, 0x900a7, 0x80003, 0x80083, 0x80043, 0x900e7, 0x70105, 0x8005b, 0x8001b, 0x90097, 0x70115, 0x8007b, 0x8003b, 0x900d7, 0x7010d, 0x8006b, 0x8002b, 0x900b7, 0x8000b, 0x8008b, 0x8004b, 0x900f7, 0x70103, 0x80057, 0x80017, 0x8011f, 0x70113, 0x80077, 0x80037, 0x900cf, 0x7010b, 0x80067, 0x80027, 0x900af, 0x80007, 0x80087, 0x80047, 0x900ef, 0x70107, 0x8005f, 0x8001f, 0x9009f, 0x70117, 0x8007f, 0x8003f, 0x900df, 0x7010f, 0x8006f, 0x8002f, 0x900bf, 0x8000f, 0x8008f, 0x8004f, 0x900ff]), 9]; const fixedDistCodeTab = [new Int32Array([0x50000, 0x50010, 0x50008, 0x50018, 0x50004, 0x50014, 0x5000c, 0x5001c, 0x50002, 0x50012, 0x5000a, 0x5001a, 0x50006, 0x50016, 0x5000e, 0x00000, 0x50001, 0x50011, 0x50009, 0x50019, 0x50005, 0x50015, 0x5000d, 0x5001d, 0x50003, 0x50013, 0x5000b, 0x5001b, 0x50007, 0x50017, 0x5000f, 0x00000]), 5]; class FlateStream extends _decode_stream.DecodeStream { constructor(str, maybeLength) { super(maybeLength); this.str = str; this.dict = str.dict; const cmf = str.getByte(); const flg = str.getByte(); if (cmf === -1 || flg === -1) { throw new _util.FormatError(`Invalid header in flate stream: ${cmf}, ${flg}`); } if ((cmf & 0x0f) !== 0x08) { throw new _util.FormatError(`Unknown compression method in flate stream: ${cmf}, ${flg}`); } if (((cmf << 8) + flg) % 31 !== 0) { throw new _util.FormatError(`Bad FCHECK in flate stream: ${cmf}, ${flg}`); } if (flg & 0x20) { throw new _util.FormatError(`FDICT bit set in flate stream: ${cmf}, ${flg}`); } this.codeSize = 0; this.codeBuf = 0; } getBits(bits) { const str = this.str; let codeSize = this.codeSize; let codeBuf = this.codeBuf; let b; while (codeSize < bits) { if ((b = str.getByte()) === -1) { throw new _util.FormatError("Bad encoding in flate stream"); } codeBuf |= b << codeSize; codeSize += 8; } b = codeBuf & (1 << bits) - 1; this.codeBuf = codeBuf >> bits; this.codeSize = codeSize -= bits; return b; } getCode(table) { const str = this.str; const codes = table[0]; const maxLen = table[1]; let codeSize = this.codeSize; let codeBuf = this.codeBuf; let b; while (codeSize < maxLen) { if ((b = str.getByte()) === -1) { break; } codeBuf |= b << codeSize; codeSize += 8; } const code = codes[codeBuf & (1 << maxLen) - 1]; const codeLen = code >> 16; const codeVal = code & 0xffff; if (codeLen < 1 || codeSize < codeLen) { throw new _util.FormatError("Bad encoding in flate stream"); } this.codeBuf = codeBuf >> codeLen; this.codeSize = codeSize - codeLen; return codeVal; } generateHuffmanTable(lengths) { const n = lengths.length; let maxLen = 0; let i; for (i = 0; i < n; ++i) { if (lengths[i] > maxLen) { maxLen = lengths[i]; } } const size = 1 << maxLen; const codes = new Int32Array(size); for (let len = 1, code = 0, skip = 2; len <= maxLen; ++len, code <<= 1, skip <<= 1) { for (let val = 0; val < n; ++val) { if (lengths[val] === len) { let code2 = 0; let t = code; for (i = 0; i < len; ++i) { code2 = code2 << 1 | t & 1; t >>= 1; } for (i = code2; i < size; i += skip) { codes[i] = len << 16 | val; } ++code; } } } return [codes, maxLen]; } readBlock() { let buffer, len; const str = this.str; let hdr = this.getBits(3); if (hdr & 1) { this.eof = true; } hdr >>= 1; if (hdr === 0) { let b; if ((b = str.getByte()) === -1) { throw new _util.FormatError("Bad block header in flate stream"); } let blockLen = b; if ((b = str.getByte()) === -1) { throw new _util.FormatError("Bad block header in flate stream"); } blockLen |= b << 8; if ((b = str.getByte()) === -1) { throw new _util.FormatError("Bad block header in flate stream"); } let check = b; if ((b = str.getByte()) === -1) { throw new _util.FormatError("Bad block header in flate stream"); } check |= b << 8; if (check !== (~blockLen & 0xffff) && (blockLen !== 0 || check !== 0)) { throw new _util.FormatError("Bad uncompressed block length in flate stream"); } this.codeBuf = 0; this.codeSize = 0; const bufferLength = this.bufferLength, end = bufferLength + blockLen; buffer = this.ensureBuffer(end); this.bufferLength = end; if (blockLen === 0) { if (str.peekByte() === -1) { this.eof = true; } } else { const block = str.getBytes(blockLen); buffer.set(block, bufferLength); if (block.length < blockLen) { this.eof = true; } } return; } let litCodeTable; let distCodeTable; if (hdr === 1) { litCodeTable = fixedLitCodeTab; distCodeTable = fixedDistCodeTab; } else if (hdr === 2) { const numLitCodes = this.getBits(5) + 257; const numDistCodes = this.getBits(5) + 1; const numCodeLenCodes = this.getBits(4) + 4; const codeLenCodeLengths = new Uint8Array(codeLenCodeMap.length); let i; for (i = 0; i < numCodeLenCodes; ++i) { codeLenCodeLengths[codeLenCodeMap[i]] = this.getBits(3); } const codeLenCodeTab = this.generateHuffmanTable(codeLenCodeLengths); len = 0; i = 0; const codes = numLitCodes + numDistCodes; const codeLengths = new Uint8Array(codes); let bitsLength, bitsOffset, what; while (i < codes) { const code = this.getCode(codeLenCodeTab); if (code === 16) { bitsLength = 2; bitsOffset = 3; what = len; } else if (code === 17) { bitsLength = 3; bitsOffset = 3; what = len = 0; } else if (code === 18) { bitsLength = 7; bitsOffset = 11; what = len = 0; } else { codeLengths[i++] = len = code; continue; } let repeatLength = this.getBits(bitsLength) + bitsOffset; while (repeatLength-- > 0) { codeLengths[i++] = what; } } litCodeTable = this.generateHuffmanTable(codeLengths.subarray(0, numLitCodes)); distCodeTable = this.generateHuffmanTable(codeLengths.subarray(numLitCodes, codes)); } else { throw new _util.FormatError("Unknown block type in flate stream"); } buffer = this.buffer; let limit = buffer ? buffer.length : 0; let pos = this.bufferLength; while (true) { let code1 = this.getCode(litCodeTable); if (code1 < 256) { if (pos + 1 >= limit) { buffer = this.ensureBuffer(pos + 1); limit = buffer.length; } buffer[pos++] = code1; continue; } if (code1 === 256) { this.bufferLength = pos; return; } code1 -= 257; code1 = lengthDecode[code1]; let code2 = code1 >> 16; if (code2 > 0) { code2 = this.getBits(code2); } len = (code1 & 0xffff) + code2; code1 = this.getCode(distCodeTable); code1 = distDecode[code1]; code2 = code1 >> 16; if (code2 > 0) { code2 = this.getBits(code2); } const dist = (code1 & 0xffff) + code2; if (pos + len >= limit) { buffer = this.ensureBuffer(pos + len); limit = buffer.length; } for (let k = 0; k < len; ++k, ++pos) { buffer[pos] = buffer[pos - dist]; } } } } exports.FlateStream = FlateStream; /***/ }), /* 34 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.Jbig2Stream = void 0; var _primitives = __w_pdfjs_require__(5); var _decode_stream = __w_pdfjs_require__(29); var _jbig = __w_pdfjs_require__(35); var _util = __w_pdfjs_require__(2); class Jbig2Stream extends _decode_stream.DecodeStream { constructor(stream, maybeLength, params) { super(maybeLength); this.stream = stream; this.dict = stream.dict; this.maybeLength = maybeLength; this.params = params; } get bytes() { return (0, _util.shadow)(this, "bytes", this.stream.getBytes(this.maybeLength)); } ensureBuffer(requested) {} readBlock() { if (this.eof) { return; } const jbig2Image = new _jbig.Jbig2Image(); const chunks = []; if ((0, _primitives.isDict)(this.params)) { const globalsStream = this.params.get("JBIG2Globals"); if ((0, _primitives.isStream)(globalsStream)) { const globals = globalsStream.getBytes(); chunks.push({ data: globals, start: 0, end: globals.length }); } } chunks.push({ data: this.bytes, start: 0, end: this.bytes.length }); const data = jbig2Image.parseChunks(chunks); const dataLength = data.length; for (let i = 0; i < dataLength; i++) { data[i] ^= 0xff; } this.buffer = data; this.bufferLength = dataLength; this.eof = true; } } exports.Jbig2Stream = Jbig2Stream; /***/ }), /* 35 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.Jbig2Image = void 0; var _util = __w_pdfjs_require__(2); var _core_utils = __w_pdfjs_require__(9); var _arithmetic_decoder = __w_pdfjs_require__(36); var _ccitt = __w_pdfjs_require__(32); class Jbig2Error extends _util.BaseException { constructor(msg) { super(`JBIG2 error: ${msg}`, "Jbig2Error"); } } class ContextCache { getContexts(id) { if (id in this) { return this[id]; } return this[id] = new Int8Array(1 << 16); } } class DecodingContext { constructor(data, start, end) { this.data = data; this.start = start; this.end = end; } get decoder() { const decoder = new _arithmetic_decoder.ArithmeticDecoder(this.data, this.start, this.end); return (0, _util.shadow)(this, "decoder", decoder); } get contextCache() { const cache = new ContextCache(); return (0, _util.shadow)(this, "contextCache", cache); } } function decodeInteger(contextCache, procedure, decoder) { const contexts = contextCache.getContexts(procedure); let prev = 1; function readBits(length) { let v = 0; for (let i = 0; i < length; i++) { const bit = decoder.readBit(contexts, prev); prev = prev < 256 ? prev << 1 | bit : (prev << 1 | bit) & 511 | 256; v = v << 1 | bit; } return v >>> 0; } const sign = readBits(1); const value = readBits(1) ? readBits(1) ? readBits(1) ? readBits(1) ? readBits(1) ? readBits(32) + 4436 : readBits(12) + 340 : readBits(8) + 84 : readBits(6) + 20 : readBits(4) + 4 : readBits(2); if (sign === 0) { return value; } else if (value > 0) { return -value; } return null; } function decodeIAID(contextCache, decoder, codeLength) { const contexts = contextCache.getContexts("IAID"); let prev = 1; for (let i = 0; i < codeLength; i++) { const bit = decoder.readBit(contexts, prev); prev = prev << 1 | bit; } if (codeLength < 31) { return prev & (1 << codeLength) - 1; } return prev & 0x7fffffff; } const SegmentTypes = ["SymbolDictionary", null, null, null, "IntermediateTextRegion", null, "ImmediateTextRegion", "ImmediateLosslessTextRegion", null, null, null, null, null, null, null, null, "PatternDictionary", null, null, null, "IntermediateHalftoneRegion", null, "ImmediateHalftoneRegion", "ImmediateLosslessHalftoneRegion", null, null, null, null, null, null, null, null, null, null, null, null, "IntermediateGenericRegion", null, "ImmediateGenericRegion", "ImmediateLosslessGenericRegion", "IntermediateGenericRefinementRegion", null, "ImmediateGenericRefinementRegion", "ImmediateLosslessGenericRefinementRegion", null, null, null, null, "PageInformation", "EndOfPage", "EndOfStripe", "EndOfFile", "Profiles", "Tables", null, null, null, null, null, null, null, null, "Extension"]; const CodingTemplates = [[{ x: -1, y: -2 }, { x: 0, y: -2 }, { x: 1, y: -2 }, { x: -2, y: -1 }, { x: -1, y: -1 }, { x: 0, y: -1 }, { x: 1, y: -1 }, { x: 2, y: -1 }, { x: -4, y: 0 }, { x: -3, y: 0 }, { x: -2, y: 0 }, { x: -1, y: 0 }], [{ x: -1, y: -2 }, { x: 0, y: -2 }, { x: 1, y: -2 }, { x: 2, y: -2 }, { x: -2, y: -1 }, { x: -1, y: -1 }, { x: 0, y: -1 }, { x: 1, y: -1 }, { x: 2, y: -1 }, { x: -3, y: 0 }, { x: -2, y: 0 }, { x: -1, y: 0 }], [{ x: -1, y: -2 }, { x: 0, y: -2 }, { x: 1, y: -2 }, { x: -2, y: -1 }, { x: -1, y: -1 }, { x: 0, y: -1 }, { x: 1, y: -1 }, { x: -2, y: 0 }, { x: -1, y: 0 }], [{ x: -3, y: -1 }, { x: -2, y: -1 }, { x: -1, y: -1 }, { x: 0, y: -1 }, { x: 1, y: -1 }, { x: -4, y: 0 }, { x: -3, y: 0 }, { x: -2, y: 0 }, { x: -1, y: 0 }]]; const RefinementTemplates = [{ coding: [{ x: 0, y: -1 }, { x: 1, y: -1 }, { x: -1, y: 0 }], reference: [{ x: 0, y: -1 }, { x: 1, y: -1 }, { x: -1, y: 0 }, { x: 0, y: 0 }, { x: 1, y: 0 }, { x: -1, y: 1 }, { x: 0, y: 1 }, { x: 1, y: 1 }] }, { coding: [{ x: -1, y: -1 }, { x: 0, y: -1 }, { x: 1, y: -1 }, { x: -1, y: 0 }], reference: [{ x: 0, y: -1 }, { x: -1, y: 0 }, { x: 0, y: 0 }, { x: 1, y: 0 }, { x: 0, y: 1 }, { x: 1, y: 1 }] }]; const ReusedContexts = [0x9b25, 0x0795, 0x00e5, 0x0195]; const RefinementReusedContexts = [0x0020, 0x0008]; function decodeBitmapTemplate0(width, height, decodingContext) { const decoder = decodingContext.decoder; const contexts = decodingContext.contextCache.getContexts("GB"); const bitmap = []; let contextLabel, i, j, pixel, row, row1, row2; const OLD_PIXEL_MASK = 0x7bf7; for (i = 0; i < height; i++) { row = bitmap[i] = new Uint8Array(width); row1 = i < 1 ? row : bitmap[i - 1]; row2 = i < 2 ? row : bitmap[i - 2]; contextLabel = row2[0] << 13 | row2[1] << 12 | row2[2] << 11 | row1[0] << 7 | row1[1] << 6 | row1[2] << 5 | row1[3] << 4; for (j = 0; j < width; j++) { row[j] = pixel = decoder.readBit(contexts, contextLabel); contextLabel = (contextLabel & OLD_PIXEL_MASK) << 1 | (j + 3 < width ? row2[j + 3] << 11 : 0) | (j + 4 < width ? row1[j + 4] << 4 : 0) | pixel; } } return bitmap; } function decodeBitmap(mmr, width, height, templateIndex, prediction, skip, at, decodingContext) { if (mmr) { const input = new Reader(decodingContext.data, decodingContext.start, decodingContext.end); return decodeMMRBitmap(input, width, height, false); } if (templateIndex === 0 && !skip && !prediction && at.length === 4 && at[0].x === 3 && at[0].y === -1 && at[1].x === -3 && at[1].y === -1 && at[2].x === 2 && at[2].y === -2 && at[3].x === -2 && at[3].y === -2) { return decodeBitmapTemplate0(width, height, decodingContext); } const useskip = !!skip; const template = CodingTemplates[templateIndex].concat(at); template.sort(function (a, b) { return a.y - b.y || a.x - b.x; }); const templateLength = template.length; const templateX = new Int8Array(templateLength); const templateY = new Int8Array(templateLength); const changingTemplateEntries = []; let reuseMask = 0, minX = 0, maxX = 0, minY = 0; let c, k; for (k = 0; k < templateLength; k++) { templateX[k] = template[k].x; templateY[k] = template[k].y; minX = Math.min(minX, template[k].x); maxX = Math.max(maxX, template[k].x); minY = Math.min(minY, template[k].y); if (k < templateLength - 1 && template[k].y === template[k + 1].y && template[k].x === template[k + 1].x - 1) { reuseMask |= 1 << templateLength - 1 - k; } else { changingTemplateEntries.push(k); } } const changingEntriesLength = changingTemplateEntries.length; const changingTemplateX = new Int8Array(changingEntriesLength); const changingTemplateY = new Int8Array(changingEntriesLength); const changingTemplateBit = new Uint16Array(changingEntriesLength); for (c = 0; c < changingEntriesLength; c++) { k = changingTemplateEntries[c]; changingTemplateX[c] = template[k].x; changingTemplateY[c] = template[k].y; changingTemplateBit[c] = 1 << templateLength - 1 - k; } const sbb_left = -minX; const sbb_top = -minY; const sbb_right = width - maxX; const pseudoPixelContext = ReusedContexts[templateIndex]; let row = new Uint8Array(width); const bitmap = []; const decoder = decodingContext.decoder; const contexts = decodingContext.contextCache.getContexts("GB"); let ltp = 0, j, i0, j0, contextLabel = 0, bit, shift; for (let i = 0; i < height; i++) { if (prediction) { const sltp = decoder.readBit(contexts, pseudoPixelContext); ltp ^= sltp; if (ltp) { bitmap.push(row); continue; } } row = new Uint8Array(row); bitmap.push(row); for (j = 0; j < width; j++) { if (useskip && skip[i][j]) { row[j] = 0; continue; } if (j >= sbb_left && j < sbb_right && i >= sbb_top) { contextLabel = contextLabel << 1 & reuseMask; for (k = 0; k < changingEntriesLength; k++) { i0 = i + changingTemplateY[k]; j0 = j + changingTemplateX[k]; bit = bitmap[i0][j0]; if (bit) { bit = changingTemplateBit[k]; contextLabel |= bit; } } } else { contextLabel = 0; shift = templateLength - 1; for (k = 0; k < templateLength; k++, shift--) { j0 = j + templateX[k]; if (j0 >= 0 && j0 < width) { i0 = i + templateY[k]; if (i0 >= 0) { bit = bitmap[i0][j0]; if (bit) { contextLabel |= bit << shift; } } } } } const pixel = decoder.readBit(contexts, contextLabel); row[j] = pixel; } } return bitmap; } function decodeRefinement(width, height, templateIndex, referenceBitmap, offsetX, offsetY, prediction, at, decodingContext) { let codingTemplate = RefinementTemplates[templateIndex].coding; if (templateIndex === 0) { codingTemplate = codingTemplate.concat([at[0]]); } const codingTemplateLength = codingTemplate.length; const codingTemplateX = new Int32Array(codingTemplateLength); const codingTemplateY = new Int32Array(codingTemplateLength); let k; for (k = 0; k < codingTemplateLength; k++) { codingTemplateX[k] = codingTemplate[k].x; codingTemplateY[k] = codingTemplate[k].y; } let referenceTemplate = RefinementTemplates[templateIndex].reference; if (templateIndex === 0) { referenceTemplate = referenceTemplate.concat([at[1]]); } const referenceTemplateLength = referenceTemplate.length; const referenceTemplateX = new Int32Array(referenceTemplateLength); const referenceTemplateY = new Int32Array(referenceTemplateLength); for (k = 0; k < referenceTemplateLength; k++) { referenceTemplateX[k] = referenceTemplate[k].x; referenceTemplateY[k] = referenceTemplate[k].y; } const referenceWidth = referenceBitmap[0].length; const referenceHeight = referenceBitmap.length; const pseudoPixelContext = RefinementReusedContexts[templateIndex]; const bitmap = []; const decoder = decodingContext.decoder; const contexts = decodingContext.contextCache.getContexts("GR"); let ltp = 0; for (let i = 0; i < height; i++) { if (prediction) { const sltp = decoder.readBit(contexts, pseudoPixelContext); ltp ^= sltp; if (ltp) { throw new Jbig2Error("prediction is not supported"); } } const row = new Uint8Array(width); bitmap.push(row); for (let j = 0; j < width; j++) { let i0, j0; let contextLabel = 0; for (k = 0; k < codingTemplateLength; k++) { i0 = i + codingTemplateY[k]; j0 = j + codingTemplateX[k]; if (i0 < 0 || j0 < 0 || j0 >= width) { contextLabel <<= 1; } else { contextLabel = contextLabel << 1 | bitmap[i0][j0]; } } for (k = 0; k < referenceTemplateLength; k++) { i0 = i + referenceTemplateY[k] - offsetY; j0 = j + referenceTemplateX[k] - offsetX; if (i0 < 0 || i0 >= referenceHeight || j0 < 0 || j0 >= referenceWidth) { contextLabel <<= 1; } else { contextLabel = contextLabel << 1 | referenceBitmap[i0][j0]; } } const pixel = decoder.readBit(contexts, contextLabel); row[j] = pixel; } } return bitmap; } function decodeSymbolDictionary(huffman, refinement, symbols, numberOfNewSymbols, numberOfExportedSymbols, huffmanTables, templateIndex, at, refinementTemplateIndex, refinementAt, decodingContext, huffmanInput) { if (huffman && refinement) { throw new Jbig2Error("symbol refinement with Huffman is not supported"); } const newSymbols = []; let currentHeight = 0; let symbolCodeLength = (0, _core_utils.log2)(symbols.length + numberOfNewSymbols); const decoder = decodingContext.decoder; const contextCache = decodingContext.contextCache; let tableB1, symbolWidths; if (huffman) { tableB1 = getStandardTable(1); symbolWidths = []; symbolCodeLength = Math.max(symbolCodeLength, 1); } while (newSymbols.length < numberOfNewSymbols) { const deltaHeight = huffman ? huffmanTables.tableDeltaHeight.decode(huffmanInput) : decodeInteger(contextCache, "IADH", decoder); currentHeight += deltaHeight; let currentWidth = 0, totalWidth = 0; const firstSymbol = huffman ? symbolWidths.length : 0; while (true) { const deltaWidth = huffman ? huffmanTables.tableDeltaWidth.decode(huffmanInput) : decodeInteger(contextCache, "IADW", decoder); if (deltaWidth === null) { break; } currentWidth += deltaWidth; totalWidth += currentWidth; let bitmap; if (refinement) { const numberOfInstances = decodeInteger(contextCache, "IAAI", decoder); if (numberOfInstances > 1) { bitmap = decodeTextRegion(huffman, refinement, currentWidth, currentHeight, 0, numberOfInstances, 1, symbols.concat(newSymbols), symbolCodeLength, 0, 0, 1, 0, huffmanTables, refinementTemplateIndex, refinementAt, decodingContext, 0, huffmanInput); } else { const symbolId = decodeIAID(contextCache, decoder, symbolCodeLength); const rdx = decodeInteger(contextCache, "IARDX", decoder); const rdy = decodeInteger(contextCache, "IARDY", decoder); const symbol = symbolId < symbols.length ? symbols[symbolId] : newSymbols[symbolId - symbols.length]; bitmap = decodeRefinement(currentWidth, currentHeight, refinementTemplateIndex, symbol, rdx, rdy, false, refinementAt, decodingContext); } newSymbols.push(bitmap); } else if (huffman) { symbolWidths.push(currentWidth); } else { bitmap = decodeBitmap(false, currentWidth, currentHeight, templateIndex, false, null, at, decodingContext); newSymbols.push(bitmap); } } if (huffman && !refinement) { const bitmapSize = huffmanTables.tableBitmapSize.decode(huffmanInput); huffmanInput.byteAlign(); let collectiveBitmap; if (bitmapSize === 0) { collectiveBitmap = readUncompressedBitmap(huffmanInput, totalWidth, currentHeight); } else { const originalEnd = huffmanInput.end; const bitmapEnd = huffmanInput.position + bitmapSize; huffmanInput.end = bitmapEnd; collectiveBitmap = decodeMMRBitmap(huffmanInput, totalWidth, currentHeight, false); huffmanInput.end = originalEnd; huffmanInput.position = bitmapEnd; } const numberOfSymbolsDecoded = symbolWidths.length; if (firstSymbol === numberOfSymbolsDecoded - 1) { newSymbols.push(collectiveBitmap); } else { let i, y, xMin = 0, xMax, bitmapWidth, symbolBitmap; for (i = firstSymbol; i < numberOfSymbolsDecoded; i++) { bitmapWidth = symbolWidths[i]; xMax = xMin + bitmapWidth; symbolBitmap = []; for (y = 0; y < currentHeight; y++) { symbolBitmap.push(collectiveBitmap[y].subarray(xMin, xMax)); } newSymbols.push(symbolBitmap); xMin = xMax; } } } } const exportedSymbols = [], flags = []; let currentFlag = false, i, ii; const totalSymbolsLength = symbols.length + numberOfNewSymbols; while (flags.length < totalSymbolsLength) { let runLength = huffman ? tableB1.decode(huffmanInput) : decodeInteger(contextCache, "IAEX", decoder); while (runLength--) { flags.push(currentFlag); } currentFlag = !currentFlag; } for (i = 0, ii = symbols.length; i < ii; i++) { if (flags[i]) { exportedSymbols.push(symbols[i]); } } for (let j = 0; j < numberOfNewSymbols; i++, j++) { if (flags[i]) { exportedSymbols.push(newSymbols[j]); } } return exportedSymbols; } function decodeTextRegion(huffman, refinement, width, height, defaultPixelValue, numberOfSymbolInstances, stripSize, inputSymbols, symbolCodeLength, transposed, dsOffset, referenceCorner, combinationOperator, huffmanTables, refinementTemplateIndex, refinementAt, decodingContext, logStripSize, huffmanInput) { if (huffman && refinement) { throw new Jbig2Error("refinement with Huffman is not supported"); } const bitmap = []; let i, row; for (i = 0; i < height; i++) { row = new Uint8Array(width); if (defaultPixelValue) { for (let j = 0; j < width; j++) { row[j] = defaultPixelValue; } } bitmap.push(row); } const decoder = decodingContext.decoder; const contextCache = decodingContext.contextCache; let stripT = huffman ? -huffmanTables.tableDeltaT.decode(huffmanInput) : -decodeInteger(contextCache, "IADT", decoder); let firstS = 0; i = 0; while (i < numberOfSymbolInstances) { const deltaT = huffman ? huffmanTables.tableDeltaT.decode(huffmanInput) : decodeInteger(contextCache, "IADT", decoder); stripT += deltaT; const deltaFirstS = huffman ? huffmanTables.tableFirstS.decode(huffmanInput) : decodeInteger(contextCache, "IAFS", decoder); firstS += deltaFirstS; let currentS = firstS; do { let currentT = 0; if (stripSize > 1) { currentT = huffman ? huffmanInput.readBits(logStripSize) : decodeInteger(contextCache, "IAIT", decoder); } const t = stripSize * stripT + currentT; const symbolId = huffman ? huffmanTables.symbolIDTable.decode(huffmanInput) : decodeIAID(contextCache, decoder, symbolCodeLength); const applyRefinement = refinement && (huffman ? huffmanInput.readBit() : decodeInteger(contextCache, "IARI", decoder)); let symbolBitmap = inputSymbols[symbolId]; let symbolWidth = symbolBitmap[0].length; let symbolHeight = symbolBitmap.length; if (applyRefinement) { const rdw = decodeInteger(contextCache, "IARDW", decoder); const rdh = decodeInteger(contextCache, "IARDH", decoder); const rdx = decodeInteger(contextCache, "IARDX", decoder); const rdy = decodeInteger(contextCache, "IARDY", decoder); symbolWidth += rdw; symbolHeight += rdh; symbolBitmap = decodeRefinement(symbolWidth, symbolHeight, refinementTemplateIndex, symbolBitmap, (rdw >> 1) + rdx, (rdh >> 1) + rdy, false, refinementAt, decodingContext); } const offsetT = t - (referenceCorner & 1 ? 0 : symbolHeight - 1); const offsetS = currentS - (referenceCorner & 2 ? symbolWidth - 1 : 0); let s2, t2, symbolRow; if (transposed) { for (s2 = 0; s2 < symbolHeight; s2++) { row = bitmap[offsetS + s2]; if (!row) { continue; } symbolRow = symbolBitmap[s2]; const maxWidth = Math.min(width - offsetT, symbolWidth); switch (combinationOperator) { case 0: for (t2 = 0; t2 < maxWidth; t2++) { row[offsetT + t2] |= symbolRow[t2]; } break; case 2: for (t2 = 0; t2 < maxWidth; t2++) { row[offsetT + t2] ^= symbolRow[t2]; } break; default: throw new Jbig2Error(`operator ${combinationOperator} is not supported`); } } currentS += symbolHeight - 1; } else { for (t2 = 0; t2 < symbolHeight; t2++) { row = bitmap[offsetT + t2]; if (!row) { continue; } symbolRow = symbolBitmap[t2]; switch (combinationOperator) { case 0: for (s2 = 0; s2 < symbolWidth; s2++) { row[offsetS + s2] |= symbolRow[s2]; } break; case 2: for (s2 = 0; s2 < symbolWidth; s2++) { row[offsetS + s2] ^= symbolRow[s2]; } break; default: throw new Jbig2Error(`operator ${combinationOperator} is not supported`); } } currentS += symbolWidth - 1; } i++; const deltaS = huffman ? huffmanTables.tableDeltaS.decode(huffmanInput) : decodeInteger(contextCache, "IADS", decoder); if (deltaS === null) { break; } currentS += deltaS + dsOffset; } while (true); } return bitmap; } function decodePatternDictionary(mmr, patternWidth, patternHeight, maxPatternIndex, template, decodingContext) { const at = []; if (!mmr) { at.push({ x: -patternWidth, y: 0 }); if (template === 0) { at.push({ x: -3, y: -1 }, { x: 2, y: -2 }, { x: -2, y: -2 }); } } const collectiveWidth = (maxPatternIndex + 1) * patternWidth; const collectiveBitmap = decodeBitmap(mmr, collectiveWidth, patternHeight, template, false, null, at, decodingContext); const patterns = []; for (let i = 0; i <= maxPatternIndex; i++) { const patternBitmap = []; const xMin = patternWidth * i; const xMax = xMin + patternWidth; for (let y = 0; y < patternHeight; y++) { patternBitmap.push(collectiveBitmap[y].subarray(xMin, xMax)); } patterns.push(patternBitmap); } return patterns; } function decodeHalftoneRegion(mmr, patterns, template, regionWidth, regionHeight, defaultPixelValue, enableSkip, combinationOperator, gridWidth, gridHeight, gridOffsetX, gridOffsetY, gridVectorX, gridVectorY, decodingContext) { const skip = null; if (enableSkip) { throw new Jbig2Error("skip is not supported"); } if (combinationOperator !== 0) { throw new Jbig2Error(`operator "${combinationOperator}" is not supported in halftone region`); } const regionBitmap = []; let i, j, row; for (i = 0; i < regionHeight; i++) { row = new Uint8Array(regionWidth); if (defaultPixelValue) { for (j = 0; j < regionWidth; j++) { row[j] = defaultPixelValue; } } regionBitmap.push(row); } const numberOfPatterns = patterns.length; const pattern0 = patterns[0]; const patternWidth = pattern0[0].length, patternHeight = pattern0.length; const bitsPerValue = (0, _core_utils.log2)(numberOfPatterns); const at = []; if (!mmr) { at.push({ x: template <= 1 ? 3 : 2, y: -1 }); if (template === 0) { at.push({ x: -3, y: -1 }, { x: 2, y: -2 }, { x: -2, y: -2 }); } } const grayScaleBitPlanes = []; let mmrInput, bitmap; if (mmr) { mmrInput = new Reader(decodingContext.data, decodingContext.start, decodingContext.end); } for (i = bitsPerValue - 1; i >= 0; i--) { if (mmr) { bitmap = decodeMMRBitmap(mmrInput, gridWidth, gridHeight, true); } else { bitmap = decodeBitmap(false, gridWidth, gridHeight, template, false, skip, at, decodingContext); } grayScaleBitPlanes[i] = bitmap; } let mg, ng, bit, patternIndex, patternBitmap, x, y, patternRow, regionRow; for (mg = 0; mg < gridHeight; mg++) { for (ng = 0; ng < gridWidth; ng++) { bit = 0; patternIndex = 0; for (j = bitsPerValue - 1; j >= 0; j--) { bit ^= grayScaleBitPlanes[j][mg][ng]; patternIndex |= bit << j; } patternBitmap = patterns[patternIndex]; x = gridOffsetX + mg * gridVectorY + ng * gridVectorX >> 8; y = gridOffsetY + mg * gridVectorX - ng * gridVectorY >> 8; if (x >= 0 && x + patternWidth <= regionWidth && y >= 0 && y + patternHeight <= regionHeight) { for (i = 0; i < patternHeight; i++) { regionRow = regionBitmap[y + i]; patternRow = patternBitmap[i]; for (j = 0; j < patternWidth; j++) { regionRow[x + j] |= patternRow[j]; } } } else { let regionX, regionY; for (i = 0; i < patternHeight; i++) { regionY = y + i; if (regionY < 0 || regionY >= regionHeight) { continue; } regionRow = regionBitmap[regionY]; patternRow = patternBitmap[i]; for (j = 0; j < patternWidth; j++) { regionX = x + j; if (regionX >= 0 && regionX < regionWidth) { regionRow[regionX] |= patternRow[j]; } } } } } } return regionBitmap; } function readSegmentHeader(data, start) { const segmentHeader = {}; segmentHeader.number = (0, _core_utils.readUint32)(data, start); const flags = data[start + 4]; const segmentType = flags & 0x3f; if (!SegmentTypes[segmentType]) { throw new Jbig2Error("invalid segment type: " + segmentType); } segmentHeader.type = segmentType; segmentHeader.typeName = SegmentTypes[segmentType]; segmentHeader.deferredNonRetain = !!(flags & 0x80); const pageAssociationFieldSize = !!(flags & 0x40); const referredFlags = data[start + 5]; let referredToCount = referredFlags >> 5 & 7; const retainBits = [referredFlags & 31]; let position = start + 6; if (referredFlags === 7) { referredToCount = (0, _core_utils.readUint32)(data, position - 1) & 0x1fffffff; position += 3; let bytes = referredToCount + 7 >> 3; retainBits[0] = data[position++]; while (--bytes > 0) { retainBits.push(data[position++]); } } else if (referredFlags === 5 || referredFlags === 6) { throw new Jbig2Error("invalid referred-to flags"); } segmentHeader.retainBits = retainBits; let referredToSegmentNumberSize = 4; if (segmentHeader.number <= 256) { referredToSegmentNumberSize = 1; } else if (segmentHeader.number <= 65536) { referredToSegmentNumberSize = 2; } const referredTo = []; let i, ii; for (i = 0; i < referredToCount; i++) { let number; if (referredToSegmentNumberSize === 1) { number = data[position]; } else if (referredToSegmentNumberSize === 2) { number = (0, _core_utils.readUint16)(data, position); } else { number = (0, _core_utils.readUint32)(data, position); } referredTo.push(number); position += referredToSegmentNumberSize; } segmentHeader.referredTo = referredTo; if (!pageAssociationFieldSize) { segmentHeader.pageAssociation = data[position++]; } else { segmentHeader.pageAssociation = (0, _core_utils.readUint32)(data, position); position += 4; } segmentHeader.length = (0, _core_utils.readUint32)(data, position); position += 4; if (segmentHeader.length === 0xffffffff) { if (segmentType === 38) { const genericRegionInfo = readRegionSegmentInformation(data, position); const genericRegionSegmentFlags = data[position + RegionSegmentInformationFieldLength]; const genericRegionMmr = !!(genericRegionSegmentFlags & 1); const searchPatternLength = 6; const searchPattern = new Uint8Array(searchPatternLength); if (!genericRegionMmr) { searchPattern[0] = 0xff; searchPattern[1] = 0xac; } searchPattern[2] = genericRegionInfo.height >>> 24 & 0xff; searchPattern[3] = genericRegionInfo.height >> 16 & 0xff; searchPattern[4] = genericRegionInfo.height >> 8 & 0xff; searchPattern[5] = genericRegionInfo.height & 0xff; for (i = position, ii = data.length; i < ii; i++) { let j = 0; while (j < searchPatternLength && searchPattern[j] === data[i + j]) { j++; } if (j === searchPatternLength) { segmentHeader.length = i + searchPatternLength; break; } } if (segmentHeader.length === 0xffffffff) { throw new Jbig2Error("segment end was not found"); } } else { throw new Jbig2Error("invalid unknown segment length"); } } segmentHeader.headerEnd = position; return segmentHeader; } function readSegments(header, data, start, end) { const segments = []; let position = start; while (position < end) { const segmentHeader = readSegmentHeader(data, position); position = segmentHeader.headerEnd; const segment = { header: segmentHeader, data }; if (!header.randomAccess) { segment.start = position; position += segmentHeader.length; segment.end = position; } segments.push(segment); if (segmentHeader.type === 51) { break; } } if (header.randomAccess) { for (let i = 0, ii = segments.length; i < ii; i++) { segments[i].start = position; position += segments[i].header.length; segments[i].end = position; } } return segments; } function readRegionSegmentInformation(data, start) { return { width: (0, _core_utils.readUint32)(data, start), height: (0, _core_utils.readUint32)(data, start + 4), x: (0, _core_utils.readUint32)(data, start + 8), y: (0, _core_utils.readUint32)(data, start + 12), combinationOperator: data[start + 16] & 7 }; } const RegionSegmentInformationFieldLength = 17; function processSegment(segment, visitor) { const header = segment.header; const data = segment.data, end = segment.end; let position = segment.start; let args, at, i, atLength; switch (header.type) { case 0: const dictionary = {}; const dictionaryFlags = (0, _core_utils.readUint16)(data, position); dictionary.huffman = !!(dictionaryFlags & 1); dictionary.refinement = !!(dictionaryFlags & 2); dictionary.huffmanDHSelector = dictionaryFlags >> 2 & 3; dictionary.huffmanDWSelector = dictionaryFlags >> 4 & 3; dictionary.bitmapSizeSelector = dictionaryFlags >> 6 & 1; dictionary.aggregationInstancesSelector = dictionaryFlags >> 7 & 1; dictionary.bitmapCodingContextUsed = !!(dictionaryFlags & 256); dictionary.bitmapCodingContextRetained = !!(dictionaryFlags & 512); dictionary.template = dictionaryFlags >> 10 & 3; dictionary.refinementTemplate = dictionaryFlags >> 12 & 1; position += 2; if (!dictionary.huffman) { atLength = dictionary.template === 0 ? 4 : 1; at = []; for (i = 0; i < atLength; i++) { at.push({ x: (0, _core_utils.readInt8)(data, position), y: (0, _core_utils.readInt8)(data, position + 1) }); position += 2; } dictionary.at = at; } if (dictionary.refinement && !dictionary.refinementTemplate) { at = []; for (i = 0; i < 2; i++) { at.push({ x: (0, _core_utils.readInt8)(data, position), y: (0, _core_utils.readInt8)(data, position + 1) }); position += 2; } dictionary.refinementAt = at; } dictionary.numberOfExportedSymbols = (0, _core_utils.readUint32)(data, position); position += 4; dictionary.numberOfNewSymbols = (0, _core_utils.readUint32)(data, position); position += 4; args = [dictionary, header.number, header.referredTo, data, position, end]; break; case 6: case 7: const textRegion = {}; textRegion.info = readRegionSegmentInformation(data, position); position += RegionSegmentInformationFieldLength; const textRegionSegmentFlags = (0, _core_utils.readUint16)(data, position); position += 2; textRegion.huffman = !!(textRegionSegmentFlags & 1); textRegion.refinement = !!(textRegionSegmentFlags & 2); textRegion.logStripSize = textRegionSegmentFlags >> 2 & 3; textRegion.stripSize = 1 << textRegion.logStripSize; textRegion.referenceCorner = textRegionSegmentFlags >> 4 & 3; textRegion.transposed = !!(textRegionSegmentFlags & 64); textRegion.combinationOperator = textRegionSegmentFlags >> 7 & 3; textRegion.defaultPixelValue = textRegionSegmentFlags >> 9 & 1; textRegion.dsOffset = textRegionSegmentFlags << 17 >> 27; textRegion.refinementTemplate = textRegionSegmentFlags >> 15 & 1; if (textRegion.huffman) { const textRegionHuffmanFlags = (0, _core_utils.readUint16)(data, position); position += 2; textRegion.huffmanFS = textRegionHuffmanFlags & 3; textRegion.huffmanDS = textRegionHuffmanFlags >> 2 & 3; textRegion.huffmanDT = textRegionHuffmanFlags >> 4 & 3; textRegion.huffmanRefinementDW = textRegionHuffmanFlags >> 6 & 3; textRegion.huffmanRefinementDH = textRegionHuffmanFlags >> 8 & 3; textRegion.huffmanRefinementDX = textRegionHuffmanFlags >> 10 & 3; textRegion.huffmanRefinementDY = textRegionHuffmanFlags >> 12 & 3; textRegion.huffmanRefinementSizeSelector = !!(textRegionHuffmanFlags & 0x4000); } if (textRegion.refinement && !textRegion.refinementTemplate) { at = []; for (i = 0; i < 2; i++) { at.push({ x: (0, _core_utils.readInt8)(data, position), y: (0, _core_utils.readInt8)(data, position + 1) }); position += 2; } textRegion.refinementAt = at; } textRegion.numberOfSymbolInstances = (0, _core_utils.readUint32)(data, position); position += 4; args = [textRegion, header.referredTo, data, position, end]; break; case 16: const patternDictionary = {}; const patternDictionaryFlags = data[position++]; patternDictionary.mmr = !!(patternDictionaryFlags & 1); patternDictionary.template = patternDictionaryFlags >> 1 & 3; patternDictionary.patternWidth = data[position++]; patternDictionary.patternHeight = data[position++]; patternDictionary.maxPatternIndex = (0, _core_utils.readUint32)(data, position); position += 4; args = [patternDictionary, header.number, data, position, end]; break; case 22: case 23: const halftoneRegion = {}; halftoneRegion.info = readRegionSegmentInformation(data, position); position += RegionSegmentInformationFieldLength; const halftoneRegionFlags = data[position++]; halftoneRegion.mmr = !!(halftoneRegionFlags & 1); halftoneRegion.template = halftoneRegionFlags >> 1 & 3; halftoneRegion.enableSkip = !!(halftoneRegionFlags & 8); halftoneRegion.combinationOperator = halftoneRegionFlags >> 4 & 7; halftoneRegion.defaultPixelValue = halftoneRegionFlags >> 7 & 1; halftoneRegion.gridWidth = (0, _core_utils.readUint32)(data, position); position += 4; halftoneRegion.gridHeight = (0, _core_utils.readUint32)(data, position); position += 4; halftoneRegion.gridOffsetX = (0, _core_utils.readUint32)(data, position) & 0xffffffff; position += 4; halftoneRegion.gridOffsetY = (0, _core_utils.readUint32)(data, position) & 0xffffffff; position += 4; halftoneRegion.gridVectorX = (0, _core_utils.readUint16)(data, position); position += 2; halftoneRegion.gridVectorY = (0, _core_utils.readUint16)(data, position); position += 2; args = [halftoneRegion, header.referredTo, data, position, end]; break; case 38: case 39: const genericRegion = {}; genericRegion.info = readRegionSegmentInformation(data, position); position += RegionSegmentInformationFieldLength; const genericRegionSegmentFlags = data[position++]; genericRegion.mmr = !!(genericRegionSegmentFlags & 1); genericRegion.template = genericRegionSegmentFlags >> 1 & 3; genericRegion.prediction = !!(genericRegionSegmentFlags & 8); if (!genericRegion.mmr) { atLength = genericRegion.template === 0 ? 4 : 1; at = []; for (i = 0; i < atLength; i++) { at.push({ x: (0, _core_utils.readInt8)(data, position), y: (0, _core_utils.readInt8)(data, position + 1) }); position += 2; } genericRegion.at = at; } args = [genericRegion, data, position, end]; break; case 48: const pageInfo = { width: (0, _core_utils.readUint32)(data, position), height: (0, _core_utils.readUint32)(data, position + 4), resolutionX: (0, _core_utils.readUint32)(data, position + 8), resolutionY: (0, _core_utils.readUint32)(data, position + 12) }; if (pageInfo.height === 0xffffffff) { delete pageInfo.height; } const pageSegmentFlags = data[position + 16]; (0, _core_utils.readUint16)(data, position + 17); pageInfo.lossless = !!(pageSegmentFlags & 1); pageInfo.refinement = !!(pageSegmentFlags & 2); pageInfo.defaultPixelValue = pageSegmentFlags >> 2 & 1; pageInfo.combinationOperator = pageSegmentFlags >> 3 & 3; pageInfo.requiresBuffer = !!(pageSegmentFlags & 32); pageInfo.combinationOperatorOverride = !!(pageSegmentFlags & 64); args = [pageInfo]; break; case 49: break; case 50: break; case 51: break; case 53: args = [header.number, data, position, end]; break; case 62: break; default: throw new Jbig2Error(`segment type ${header.typeName}(${header.type})` + " is not implemented"); } const callbackName = "on" + header.typeName; if (callbackName in visitor) { visitor[callbackName].apply(visitor, args); } } function processSegments(segments, visitor) { for (let i = 0, ii = segments.length; i < ii; i++) { processSegment(segments[i], visitor); } } function parseJbig2Chunks(chunks) { const visitor = new SimpleSegmentVisitor(); for (let i = 0, ii = chunks.length; i < ii; i++) { const chunk = chunks[i]; const segments = readSegments({}, chunk.data, chunk.start, chunk.end); processSegments(segments, visitor); } return visitor.buffer; } function parseJbig2(data) { const end = data.length; let position = 0; if (data[position] !== 0x97 || data[position + 1] !== 0x4a || data[position + 2] !== 0x42 || data[position + 3] !== 0x32 || data[position + 4] !== 0x0d || data[position + 5] !== 0x0a || data[position + 6] !== 0x1a || data[position + 7] !== 0x0a) { throw new Jbig2Error("parseJbig2 - invalid header."); } const header = Object.create(null); position += 8; const flags = data[position++]; header.randomAccess = !(flags & 1); if (!(flags & 2)) { header.numberOfPages = (0, _core_utils.readUint32)(data, position); position += 4; } const segments = readSegments(header, data, position, end); const visitor = new SimpleSegmentVisitor(); processSegments(segments, visitor); const { width, height } = visitor.currentPageInfo; const bitPacked = visitor.buffer; const imgData = new Uint8ClampedArray(width * height); let q = 0, k = 0; for (let i = 0; i < height; i++) { let mask = 0, buffer; for (let j = 0; j < width; j++) { if (!mask) { mask = 128; buffer = bitPacked[k++]; } imgData[q++] = buffer & mask ? 0 : 255; mask >>= 1; } } return { imgData, width, height }; } class SimpleSegmentVisitor { onPageInformation(info) { this.currentPageInfo = info; const rowSize = info.width + 7 >> 3; const buffer = new Uint8ClampedArray(rowSize * info.height); if (info.defaultPixelValue) { for (let i = 0, ii = buffer.length; i < ii; i++) { buffer[i] = 0xff; } } this.buffer = buffer; } drawBitmap(regionInfo, bitmap) { const pageInfo = this.currentPageInfo; const width = regionInfo.width, height = regionInfo.height; const rowSize = pageInfo.width + 7 >> 3; const combinationOperator = pageInfo.combinationOperatorOverride ? regionInfo.combinationOperator : pageInfo.combinationOperator; const buffer = this.buffer; const mask0 = 128 >> (regionInfo.x & 7); let offset0 = regionInfo.y * rowSize + (regionInfo.x >> 3); let i, j, mask, offset; switch (combinationOperator) { case 0: for (i = 0; i < height; i++) { mask = mask0; offset = offset0; for (j = 0; j < width; j++) { if (bitmap[i][j]) { buffer[offset] |= mask; } mask >>= 1; if (!mask) { mask = 128; offset++; } } offset0 += rowSize; } break; case 2: for (i = 0; i < height; i++) { mask = mask0; offset = offset0; for (j = 0; j < width; j++) { if (bitmap[i][j]) { buffer[offset] ^= mask; } mask >>= 1; if (!mask) { mask = 128; offset++; } } offset0 += rowSize; } break; default: throw new Jbig2Error(`operator ${combinationOperator} is not supported`); } } onImmediateGenericRegion(region, data, start, end) { const regionInfo = region.info; const decodingContext = new DecodingContext(data, start, end); const bitmap = decodeBitmap(region.mmr, regionInfo.width, regionInfo.height, region.template, region.prediction, null, region.at, decodingContext); this.drawBitmap(regionInfo, bitmap); } onImmediateLosslessGenericRegion() { this.onImmediateGenericRegion.apply(this, arguments); } onSymbolDictionary(dictionary, currentSegment, referredSegments, data, start, end) { let huffmanTables, huffmanInput; if (dictionary.huffman) { huffmanTables = getSymbolDictionaryHuffmanTables(dictionary, referredSegments, this.customTables); huffmanInput = new Reader(data, start, end); } let symbols = this.symbols; if (!symbols) { this.symbols = symbols = {}; } let inputSymbols = []; for (let i = 0, ii = referredSegments.length; i < ii; i++) { const referredSymbols = symbols[referredSegments[i]]; if (referredSymbols) { inputSymbols = inputSymbols.concat(referredSymbols); } } const decodingContext = new DecodingContext(data, start, end); symbols[currentSegment] = decodeSymbolDictionary(dictionary.huffman, dictionary.refinement, inputSymbols, dictionary.numberOfNewSymbols, dictionary.numberOfExportedSymbols, huffmanTables, dictionary.template, dictionary.at, dictionary.refinementTemplate, dictionary.refinementAt, decodingContext, huffmanInput); } onImmediateTextRegion(region, referredSegments, data, start, end) { const regionInfo = region.info; let huffmanTables, huffmanInput; const symbols = this.symbols; let inputSymbols = []; for (let i = 0, ii = referredSegments.length; i < ii; i++) { const referredSymbols = symbols[referredSegments[i]]; if (referredSymbols) { inputSymbols = inputSymbols.concat(referredSymbols); } } const symbolCodeLength = (0, _core_utils.log2)(inputSymbols.length); if (region.huffman) { huffmanInput = new Reader(data, start, end); huffmanTables = getTextRegionHuffmanTables(region, referredSegments, this.customTables, inputSymbols.length, huffmanInput); } const decodingContext = new DecodingContext(data, start, end); const bitmap = decodeTextRegion(region.huffman, region.refinement, regionInfo.width, regionInfo.height, region.defaultPixelValue, region.numberOfSymbolInstances, region.stripSize, inputSymbols, symbolCodeLength, region.transposed, region.dsOffset, region.referenceCorner, region.combinationOperator, huffmanTables, region.refinementTemplate, region.refinementAt, decodingContext, region.logStripSize, huffmanInput); this.drawBitmap(regionInfo, bitmap); } onImmediateLosslessTextRegion() { this.onImmediateTextRegion.apply(this, arguments); } onPatternDictionary(dictionary, currentSegment, data, start, end) { let patterns = this.patterns; if (!patterns) { this.patterns = patterns = {}; } const decodingContext = new DecodingContext(data, start, end); patterns[currentSegment] = decodePatternDictionary(dictionary.mmr, dictionary.patternWidth, dictionary.patternHeight, dictionary.maxPatternIndex, dictionary.template, decodingContext); } onImmediateHalftoneRegion(region, referredSegments, data, start, end) { const patterns = this.patterns[referredSegments[0]]; const regionInfo = region.info; const decodingContext = new DecodingContext(data, start, end); const bitmap = decodeHalftoneRegion(region.mmr, patterns, region.template, regionInfo.width, regionInfo.height, region.defaultPixelValue, region.enableSkip, region.combinationOperator, region.gridWidth, region.gridHeight, region.gridOffsetX, region.gridOffsetY, region.gridVectorX, region.gridVectorY, decodingContext); this.drawBitmap(regionInfo, bitmap); } onImmediateLosslessHalftoneRegion() { this.onImmediateHalftoneRegion.apply(this, arguments); } onTables(currentSegment, data, start, end) { let customTables = this.customTables; if (!customTables) { this.customTables = customTables = {}; } customTables[currentSegment] = decodeTablesSegment(data, start, end); } } class HuffmanLine { constructor(lineData) { if (lineData.length === 2) { this.isOOB = true; this.rangeLow = 0; this.prefixLength = lineData[0]; this.rangeLength = 0; this.prefixCode = lineData[1]; this.isLowerRange = false; } else { this.isOOB = false; this.rangeLow = lineData[0]; this.prefixLength = lineData[1]; this.rangeLength = lineData[2]; this.prefixCode = lineData[3]; this.isLowerRange = lineData[4] === "lower"; } } } class HuffmanTreeNode { constructor(line) { this.children = []; if (line) { this.isLeaf = true; this.rangeLength = line.rangeLength; this.rangeLow = line.rangeLow; this.isLowerRange = line.isLowerRange; this.isOOB = line.isOOB; } else { this.isLeaf = false; } } buildTree(line, shift) { const bit = line.prefixCode >> shift & 1; if (shift <= 0) { this.children[bit] = new HuffmanTreeNode(line); } else { let node = this.children[bit]; if (!node) { this.children[bit] = node = new HuffmanTreeNode(null); } node.buildTree(line, shift - 1); } } decodeNode(reader) { if (this.isLeaf) { if (this.isOOB) { return null; } const htOffset = reader.readBits(this.rangeLength); return this.rangeLow + (this.isLowerRange ? -htOffset : htOffset); } const node = this.children[reader.readBit()]; if (!node) { throw new Jbig2Error("invalid Huffman data"); } return node.decodeNode(reader); } } class HuffmanTable { constructor(lines, prefixCodesDone) { if (!prefixCodesDone) { this.assignPrefixCodes(lines); } this.rootNode = new HuffmanTreeNode(null); for (let i = 0, ii = lines.length; i < ii; i++) { const line = lines[i]; if (line.prefixLength > 0) { this.rootNode.buildTree(line, line.prefixLength - 1); } } } decode(reader) { return this.rootNode.decodeNode(reader); } assignPrefixCodes(lines) { const linesLength = lines.length; let prefixLengthMax = 0; for (let i = 0; i < linesLength; i++) { prefixLengthMax = Math.max(prefixLengthMax, lines[i].prefixLength); } const histogram = new Uint32Array(prefixLengthMax + 1); for (let i = 0; i < linesLength; i++) { histogram[lines[i].prefixLength]++; } let currentLength = 1, firstCode = 0, currentCode, currentTemp, line; histogram[0] = 0; while (currentLength <= prefixLengthMax) { firstCode = firstCode + histogram[currentLength - 1] << 1; currentCode = firstCode; currentTemp = 0; while (currentTemp < linesLength) { line = lines[currentTemp]; if (line.prefixLength === currentLength) { line.prefixCode = currentCode; currentCode++; } currentTemp++; } currentLength++; } } } function decodeTablesSegment(data, start, end) { const flags = data[start]; const lowestValue = (0, _core_utils.readUint32)(data, start + 1) & 0xffffffff; const highestValue = (0, _core_utils.readUint32)(data, start + 5) & 0xffffffff; const reader = new Reader(data, start + 9, end); const prefixSizeBits = (flags >> 1 & 7) + 1; const rangeSizeBits = (flags >> 4 & 7) + 1; const lines = []; let prefixLength, rangeLength, currentRangeLow = lowestValue; do { prefixLength = reader.readBits(prefixSizeBits); rangeLength = reader.readBits(rangeSizeBits); lines.push(new HuffmanLine([currentRangeLow, prefixLength, rangeLength, 0])); currentRangeLow += 1 << rangeLength; } while (currentRangeLow < highestValue); prefixLength = reader.readBits(prefixSizeBits); lines.push(new HuffmanLine([lowestValue - 1, prefixLength, 32, 0, "lower"])); prefixLength = reader.readBits(prefixSizeBits); lines.push(new HuffmanLine([highestValue, prefixLength, 32, 0])); if (flags & 1) { prefixLength = reader.readBits(prefixSizeBits); lines.push(new HuffmanLine([prefixLength, 0])); } return new HuffmanTable(lines, false); } const standardTablesCache = {}; function getStandardTable(number) { let table = standardTablesCache[number]; if (table) { return table; } let lines; switch (number) { case 1: lines = [[0, 1, 4, 0x0], [16, 2, 8, 0x2], [272, 3, 16, 0x6], [65808, 3, 32, 0x7]]; break; case 2: lines = [[0, 1, 0, 0x0], [1, 2, 0, 0x2], [2, 3, 0, 0x6], [3, 4, 3, 0xe], [11, 5, 6, 0x1e], [75, 6, 32, 0x3e], [6, 0x3f]]; break; case 3: lines = [[-256, 8, 8, 0xfe], [0, 1, 0, 0x0], [1, 2, 0, 0x2], [2, 3, 0, 0x6], [3, 4, 3, 0xe], [11, 5, 6, 0x1e], [-257, 8, 32, 0xff, "lower"], [75, 7, 32, 0x7e], [6, 0x3e]]; break; case 4: lines = [[1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 0, 0x6], [4, 4, 3, 0xe], [12, 5, 6, 0x1e], [76, 5, 32, 0x1f]]; break; case 5: lines = [[-255, 7, 8, 0x7e], [1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 0, 0x6], [4, 4, 3, 0xe], [12, 5, 6, 0x1e], [-256, 7, 32, 0x7f, "lower"], [76, 6, 32, 0x3e]]; break; case 6: lines = [[-2048, 5, 10, 0x1c], [-1024, 4, 9, 0x8], [-512, 4, 8, 0x9], [-256, 4, 7, 0xa], [-128, 5, 6, 0x1d], [-64, 5, 5, 0x1e], [-32, 4, 5, 0xb], [0, 2, 7, 0x0], [128, 3, 7, 0x2], [256, 3, 8, 0x3], [512, 4, 9, 0xc], [1024, 4, 10, 0xd], [-2049, 6, 32, 0x3e, "lower"], [2048, 6, 32, 0x3f]]; break; case 7: lines = [[-1024, 4, 9, 0x8], [-512, 3, 8, 0x0], [-256, 4, 7, 0x9], [-128, 5, 6, 0x1a], [-64, 5, 5, 0x1b], [-32, 4, 5, 0xa], [0, 4, 5, 0xb], [32, 5, 5, 0x1c], [64, 5, 6, 0x1d], [128, 4, 7, 0xc], [256, 3, 8, 0x1], [512, 3, 9, 0x2], [1024, 3, 10, 0x3], [-1025, 5, 32, 0x1e, "lower"], [2048, 5, 32, 0x1f]]; break; case 8: lines = [[-15, 8, 3, 0xfc], [-7, 9, 1, 0x1fc], [-5, 8, 1, 0xfd], [-3, 9, 0, 0x1fd], [-2, 7, 0, 0x7c], [-1, 4, 0, 0xa], [0, 2, 1, 0x0], [2, 5, 0, 0x1a], [3, 6, 0, 0x3a], [4, 3, 4, 0x4], [20, 6, 1, 0x3b], [22, 4, 4, 0xb], [38, 4, 5, 0xc], [70, 5, 6, 0x1b], [134, 5, 7, 0x1c], [262, 6, 7, 0x3c], [390, 7, 8, 0x7d], [646, 6, 10, 0x3d], [-16, 9, 32, 0x1fe, "lower"], [1670, 9, 32, 0x1ff], [2, 0x1]]; break; case 9: lines = [[-31, 8, 4, 0xfc], [-15, 9, 2, 0x1fc], [-11, 8, 2, 0xfd], [-7, 9, 1, 0x1fd], [-5, 7, 1, 0x7c], [-3, 4, 1, 0xa], [-1, 3, 1, 0x2], [1, 3, 1, 0x3], [3, 5, 1, 0x1a], [5, 6, 1, 0x3a], [7, 3, 5, 0x4], [39, 6, 2, 0x3b], [43, 4, 5, 0xb], [75, 4, 6, 0xc], [139, 5, 7, 0x1b], [267, 5, 8, 0x1c], [523, 6, 8, 0x3c], [779, 7, 9, 0x7d], [1291, 6, 11, 0x3d], [-32, 9, 32, 0x1fe, "lower"], [3339, 9, 32, 0x1ff], [2, 0x0]]; break; case 10: lines = [[-21, 7, 4, 0x7a], [-5, 8, 0, 0xfc], [-4, 7, 0, 0x7b], [-3, 5, 0, 0x18], [-2, 2, 2, 0x0], [2, 5, 0, 0x19], [3, 6, 0, 0x36], [4, 7, 0, 0x7c], [5, 8, 0, 0xfd], [6, 2, 6, 0x1], [70, 5, 5, 0x1a], [102, 6, 5, 0x37], [134, 6, 6, 0x38], [198, 6, 7, 0x39], [326, 6, 8, 0x3a], [582, 6, 9, 0x3b], [1094, 6, 10, 0x3c], [2118, 7, 11, 0x7d], [-22, 8, 32, 0xfe, "lower"], [4166, 8, 32, 0xff], [2, 0x2]]; break; case 11: lines = [[1, 1, 0, 0x0], [2, 2, 1, 0x2], [4, 4, 0, 0xc], [5, 4, 1, 0xd], [7, 5, 1, 0x1c], [9, 5, 2, 0x1d], [13, 6, 2, 0x3c], [17, 7, 2, 0x7a], [21, 7, 3, 0x7b], [29, 7, 4, 0x7c], [45, 7, 5, 0x7d], [77, 7, 6, 0x7e], [141, 7, 32, 0x7f]]; break; case 12: lines = [[1, 1, 0, 0x0], [2, 2, 0, 0x2], [3, 3, 1, 0x6], [5, 5, 0, 0x1c], [6, 5, 1, 0x1d], [8, 6, 1, 0x3c], [10, 7, 0, 0x7a], [11, 7, 1, 0x7b], [13, 7, 2, 0x7c], [17, 7, 3, 0x7d], [25, 7, 4, 0x7e], [41, 8, 5, 0xfe], [73, 8, 32, 0xff]]; break; case 13: lines = [[1, 1, 0, 0x0], [2, 3, 0, 0x4], [3, 4, 0, 0xc], [4, 5, 0, 0x1c], [5, 4, 1, 0xd], [7, 3, 3, 0x5], [15, 6, 1, 0x3a], [17, 6, 2, 0x3b], [21, 6, 3, 0x3c], [29, 6, 4, 0x3d], [45, 6, 5, 0x3e], [77, 7, 6, 0x7e], [141, 7, 32, 0x7f]]; break; case 14: lines = [[-2, 3, 0, 0x4], [-1, 3, 0, 0x5], [0, 1, 0, 0x0], [1, 3, 0, 0x6], [2, 3, 0, 0x7]]; break; case 15: lines = [[-24, 7, 4, 0x7c], [-8, 6, 2, 0x3c], [-4, 5, 1, 0x1c], [-2, 4, 0, 0xc], [-1, 3, 0, 0x4], [0, 1, 0, 0x0], [1, 3, 0, 0x5], [2, 4, 0, 0xd], [3, 5, 1, 0x1d], [5, 6, 2, 0x3d], [9, 7, 4, 0x7d], [-25, 7, 32, 0x7e, "lower"], [25, 7, 32, 0x7f]]; break; default: throw new Jbig2Error(`standard table B.${number} does not exist`); } for (let i = 0, ii = lines.length; i < ii; i++) { lines[i] = new HuffmanLine(lines[i]); } table = new HuffmanTable(lines, true); standardTablesCache[number] = table; return table; } class Reader { constructor(data, start, end) { this.data = data; this.start = start; this.end = end; this.position = start; this.shift = -1; this.currentByte = 0; } readBit() { if (this.shift < 0) { if (this.position >= this.end) { throw new Jbig2Error("end of data while reading bit"); } this.currentByte = this.data[this.position++]; this.shift = 7; } const bit = this.currentByte >> this.shift & 1; this.shift--; return bit; } readBits(numBits) { let result = 0, i; for (i = numBits - 1; i >= 0; i--) { result |= this.readBit() << i; } return result; } byteAlign() { this.shift = -1; } next() { if (this.position >= this.end) { return -1; } return this.data[this.position++]; } } function getCustomHuffmanTable(index, referredTo, customTables) { let currentIndex = 0; for (let i = 0, ii = referredTo.length; i < ii; i++) { const table = customTables[referredTo[i]]; if (table) { if (index === currentIndex) { return table; } currentIndex++; } } throw new Jbig2Error("can't find custom Huffman table"); } function getTextRegionHuffmanTables(textRegion, referredTo, customTables, numberOfSymbols, reader) { const codes = []; for (let i = 0; i <= 34; i++) { const codeLength = reader.readBits(4); codes.push(new HuffmanLine([i, codeLength, 0, 0])); } const runCodesTable = new HuffmanTable(codes, false); codes.length = 0; for (let i = 0; i < numberOfSymbols;) { const codeLength = runCodesTable.decode(reader); if (codeLength >= 32) { let repeatedLength, numberOfRepeats, j; switch (codeLength) { case 32: if (i === 0) { throw new Jbig2Error("no previous value in symbol ID table"); } numberOfRepeats = reader.readBits(2) + 3; repeatedLength = codes[i - 1].prefixLength; break; case 33: numberOfRepeats = reader.readBits(3) + 3; repeatedLength = 0; break; case 34: numberOfRepeats = reader.readBits(7) + 11; repeatedLength = 0; break; default: throw new Jbig2Error("invalid code length in symbol ID table"); } for (j = 0; j < numberOfRepeats; j++) { codes.push(new HuffmanLine([i, repeatedLength, 0, 0])); i++; } } else { codes.push(new HuffmanLine([i, codeLength, 0, 0])); i++; } } reader.byteAlign(); const symbolIDTable = new HuffmanTable(codes, false); let customIndex = 0, tableFirstS, tableDeltaS, tableDeltaT; switch (textRegion.huffmanFS) { case 0: case 1: tableFirstS = getStandardTable(textRegion.huffmanFS + 6); break; case 3: tableFirstS = getCustomHuffmanTable(customIndex, referredTo, customTables); customIndex++; break; default: throw new Jbig2Error("invalid Huffman FS selector"); } switch (textRegion.huffmanDS) { case 0: case 1: case 2: tableDeltaS = getStandardTable(textRegion.huffmanDS + 8); break; case 3: tableDeltaS = getCustomHuffmanTable(customIndex, referredTo, customTables); customIndex++; break; default: throw new Jbig2Error("invalid Huffman DS selector"); } switch (textRegion.huffmanDT) { case 0: case 1: case 2: tableDeltaT = getStandardTable(textRegion.huffmanDT + 11); break; case 3: tableDeltaT = getCustomHuffmanTable(customIndex, referredTo, customTables); customIndex++; break; default: throw new Jbig2Error("invalid Huffman DT selector"); } if (textRegion.refinement) { throw new Jbig2Error("refinement with Huffman is not supported"); } return { symbolIDTable, tableFirstS, tableDeltaS, tableDeltaT }; } function getSymbolDictionaryHuffmanTables(dictionary, referredTo, customTables) { let customIndex = 0, tableDeltaHeight, tableDeltaWidth; switch (dictionary.huffmanDHSelector) { case 0: case 1: tableDeltaHeight = getStandardTable(dictionary.huffmanDHSelector + 4); break; case 3: tableDeltaHeight = getCustomHuffmanTable(customIndex, referredTo, customTables); customIndex++; break; default: throw new Jbig2Error("invalid Huffman DH selector"); } switch (dictionary.huffmanDWSelector) { case 0: case 1: tableDeltaWidth = getStandardTable(dictionary.huffmanDWSelector + 2); break; case 3: tableDeltaWidth = getCustomHuffmanTable(customIndex, referredTo, customTables); customIndex++; break; default: throw new Jbig2Error("invalid Huffman DW selector"); } let tableBitmapSize, tableAggregateInstances; if (dictionary.bitmapSizeSelector) { tableBitmapSize = getCustomHuffmanTable(customIndex, referredTo, customTables); customIndex++; } else { tableBitmapSize = getStandardTable(1); } if (dictionary.aggregationInstancesSelector) { tableAggregateInstances = getCustomHuffmanTable(customIndex, referredTo, customTables); } else { tableAggregateInstances = getStandardTable(1); } return { tableDeltaHeight, tableDeltaWidth, tableBitmapSize, tableAggregateInstances }; } function readUncompressedBitmap(reader, width, height) { const bitmap = []; for (let y = 0; y < height; y++) { const row = new Uint8Array(width); bitmap.push(row); for (let x = 0; x < width; x++) { row[x] = reader.readBit(); } reader.byteAlign(); } return bitmap; } function decodeMMRBitmap(input, width, height, endOfBlock) { const params = { K: -1, Columns: width, Rows: height, BlackIs1: true, EndOfBlock: endOfBlock }; const decoder = new _ccitt.CCITTFaxDecoder(input, params); const bitmap = []; let currentByte, eof = false; for (let y = 0; y < height; y++) { const row = new Uint8Array(width); bitmap.push(row); let shift = -1; for (let x = 0; x < width; x++) { if (shift < 0) { currentByte = decoder.readNextChar(); if (currentByte === -1) { currentByte = 0; eof = true; } shift = 7; } row[x] = currentByte >> shift & 1; shift--; } } if (endOfBlock && !eof) { const lookForEOFLimit = 5; for (let i = 0; i < lookForEOFLimit; i++) { if (decoder.readNextChar() === -1) { break; } } } return bitmap; } class Jbig2Image { parseChunks(chunks) { return parseJbig2Chunks(chunks); } parse(data) { const { imgData, width, height } = parseJbig2(data); this.width = width; this.height = height; return imgData; } } exports.Jbig2Image = Jbig2Image; /***/ }), /* 36 */ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.ArithmeticDecoder = void 0; const QeTable = [{ qe: 0x5601, nmps: 1, nlps: 1, switchFlag: 1 }, { qe: 0x3401, nmps: 2, nlps: 6, switchFlag: 0 }, { qe: 0x1801, nmps: 3, nlps: 9, switchFlag: 0 }, { qe: 0x0ac1, nmps: 4, nlps: 12, switchFlag: 0 }, { qe: 0x0521, nmps: 5, nlps: 29, switchFlag: 0 }, { qe: 0x0221, nmps: 38, nlps: 33, switchFlag: 0 }, { qe: 0x5601, nmps: 7, nlps: 6, switchFlag: 1 }, { qe: 0x5401, nmps: 8, nlps: 14, switchFlag: 0 }, { qe: 0x4801, nmps: 9, nlps: 14, switchFlag: 0 }, { qe: 0x3801, nmps: 10, nlps: 14, switchFlag: 0 }, { qe: 0x3001, nmps: 11, nlps: 17, switchFlag: 0 }, { qe: 0x2401, nmps: 12, nlps: 18, switchFlag: 0 }, { qe: 0x1c01, nmps: 13, nlps: 20, switchFlag: 0 }, { qe: 0x1601, nmps: 29, nlps: 21, switchFlag: 0 }, { qe: 0x5601, nmps: 15, nlps: 14, switchFlag: 1 }, { qe: 0x5401, nmps: 16, nlps: 14, switchFlag: 0 }, { qe: 0x5101, nmps: 17, nlps: 15, switchFlag: 0 }, { qe: 0x4801, nmps: 18, nlps: 16, switchFlag: 0 }, { qe: 0x3801, nmps: 19, nlps: 17, switchFlag: 0 }, { qe: 0x3401, nmps: 20, nlps: 18, switchFlag: 0 }, { qe: 0x3001, nmps: 21, nlps: 19, switchFlag: 0 }, { qe: 0x2801, nmps: 22, nlps: 19, switchFlag: 0 }, { qe: 0x2401, nmps: 23, nlps: 20, switchFlag: 0 }, { qe: 0x2201, nmps: 24, nlps: 21, switchFlag: 0 }, { qe: 0x1c01, nmps: 25, nlps: 22, switchFlag: 0 }, { qe: 0x1801, nmps: 26, nlps: 23, switchFlag: 0 }, { qe: 0x1601, nmps: 27, nlps: 24, switchFlag: 0 }, { qe: 0x1401, nmps: 28, nlps: 25, switchFlag: 0 }, { qe: 0x1201, nmps: 29, nlps: 26, switchFlag: 0 }, { qe: 0x1101, nmps: 30, nlps: 27, switchFlag: 0 }, { qe: 0x0ac1, nmps: 31, nlps: 28, switchFlag: 0 }, { qe: 0x09c1, nmps: 32, nlps: 29, switchFlag: 0 }, { qe: 0x08a1, nmps: 33, nlps: 30, switchFlag: 0 }, { qe: 0x0521, nmps: 34, nlps: 31, switchFlag: 0 }, { qe: 0x0441, nmps: 35, nlps: 32, switchFlag: 0 }, { qe: 0x02a1, nmps: 36, nlps: 33, switchFlag: 0 }, { qe: 0x0221, nmps: 37, nlps: 34, switchFlag: 0 }, { qe: 0x0141, nmps: 38, nlps: 35, switchFlag: 0 }, { qe: 0x0111, nmps: 39, nlps: 36, switchFlag: 0 }, { qe: 0x0085, nmps: 40, nlps: 37, switchFlag: 0 }, { qe: 0x0049, nmps: 41, nlps: 38, switchFlag: 0 }, { qe: 0x0025, nmps: 42, nlps: 39, switchFlag: 0 }, { qe: 0x0015, nmps: 43, nlps: 40, switchFlag: 0 }, { qe: 0x0009, nmps: 44, nlps: 41, switchFlag: 0 }, { qe: 0x0005, nmps: 45, nlps: 42, switchFlag: 0 }, { qe: 0x0001, nmps: 45, nlps: 43, switchFlag: 0 }, { qe: 0x5601, nmps: 46, nlps: 46, switchFlag: 0 }]; class ArithmeticDecoder { constructor(data, start, end) { this.data = data; this.bp = start; this.dataEnd = end; this.chigh = data[start]; this.clow = 0; this.byteIn(); this.chigh = this.chigh << 7 & 0xffff | this.clow >> 9 & 0x7f; this.clow = this.clow << 7 & 0xffff; this.ct -= 7; this.a = 0x8000; } byteIn() { const data = this.data; let bp = this.bp; if (data[bp] === 0xff) { if (data[bp + 1] > 0x8f) { this.clow += 0xff00; this.ct = 8; } else { bp++; this.clow += data[bp] << 9; this.ct = 7; this.bp = bp; } } else { bp++; this.clow += bp < this.dataEnd ? data[bp] << 8 : 0xff00; this.ct = 8; this.bp = bp; } if (this.clow > 0xffff) { this.chigh += this.clow >> 16; this.clow &= 0xffff; } } readBit(contexts, pos) { let cx_index = contexts[pos] >> 1, cx_mps = contexts[pos] & 1; const qeTableIcx = QeTable[cx_index]; const qeIcx = qeTableIcx.qe; let d; let a = this.a - qeIcx; if (this.chigh < qeIcx) { if (a < qeIcx) { a = qeIcx; d = cx_mps; cx_index = qeTableIcx.nmps; } else { a = qeIcx; d = 1 ^ cx_mps; if (qeTableIcx.switchFlag === 1) { cx_mps = d; } cx_index = qeTableIcx.nlps; } } else { this.chigh -= qeIcx; if ((a & 0x8000) !== 0) { this.a = a; return cx_mps; } if (a < qeIcx) { d = 1 ^ cx_mps; if (qeTableIcx.switchFlag === 1) { cx_mps = d; } cx_index = qeTableIcx.nlps; } else { d = cx_mps; cx_index = qeTableIcx.nmps; } } do { if (this.ct === 0) { this.byteIn(); } a <<= 1; this.chigh = this.chigh << 1 & 0xffff | this.clow >> 15 & 1; this.clow = this.clow << 1 & 0xffff; this.ct--; } while ((a & 0x8000) === 0); this.a = a; contexts[pos] = cx_index << 1 | cx_mps; return d; } } exports.ArithmeticDecoder = ArithmeticDecoder; /***/ }), /* 37 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.JpegStream = void 0; var _decode_stream = __w_pdfjs_require__(29); var _primitives = __w_pdfjs_require__(5); var _jpg = __w_pdfjs_require__(38); var _util = __w_pdfjs_require__(2); class JpegStream extends _decode_stream.DecodeStream { constructor(stream, maybeLength, params) { let ch; while ((ch = stream.getByte()) !== -1) { if (ch === 0xff) { stream.skip(-1); break; } } super(maybeLength); this.stream = stream; this.dict = stream.dict; this.maybeLength = maybeLength; this.params = params; } get bytes() { return (0, _util.shadow)(this, "bytes", this.stream.getBytes(this.maybeLength)); } ensureBuffer(requested) {} readBlock() { if (this.eof) { return; } const jpegOptions = { decodeTransform: undefined, colorTransform: undefined }; const decodeArr = this.dict.getArray("D", "Decode"); if (this.forceRGB && Array.isArray(decodeArr)) { const bitsPerComponent = this.dict.get("BPC", "BitsPerComponent") || 8; const decodeArrLength = decodeArr.length; const transform = new Int32Array(decodeArrLength); let transformNeeded = false; const maxValue = (1 << bitsPerComponent) - 1; for (let i = 0; i < decodeArrLength; i += 2) { transform[i] = (decodeArr[i + 1] - decodeArr[i]) * 256 | 0; transform[i + 1] = decodeArr[i] * maxValue | 0; if (transform[i] !== 256 || transform[i + 1] !== 0) { transformNeeded = true; } } if (transformNeeded) { jpegOptions.decodeTransform = transform; } } if ((0, _primitives.isDict)(this.params)) { const colorTransform = this.params.get("ColorTransform"); if (Number.isInteger(colorTransform)) { jpegOptions.colorTransform = colorTransform; } } const jpegImage = new _jpg.JpegImage(jpegOptions); jpegImage.parse(this.bytes); const data = jpegImage.getData({ width: this.drawWidth, height: this.drawHeight, forceRGB: this.forceRGB, isSourcePDF: true }); this.buffer = data; this.bufferLength = data.length; this.eof = true; } } exports.JpegStream = JpegStream; /***/ }), /* 38 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.JpegImage = void 0; var _util = __w_pdfjs_require__(2); var _core_utils = __w_pdfjs_require__(9); class JpegError extends _util.BaseException { constructor(msg) { super(`JPEG error: ${msg}`, "JpegError"); } } class DNLMarkerError extends _util.BaseException { constructor(message, scanLines) { super(message, "DNLMarkerError"); this.scanLines = scanLines; } } class EOIMarkerError extends _util.BaseException { constructor(msg) { super(msg, "EOIMarkerError"); } } const dctZigZag = new Uint8Array([0, 1, 8, 16, 9, 2, 3, 10, 17, 24, 32, 25, 18, 11, 4, 5, 12, 19, 26, 33, 40, 48, 41, 34, 27, 20, 13, 6, 7, 14, 21, 28, 35, 42, 49, 56, 57, 50, 43, 36, 29, 22, 15, 23, 30, 37, 44, 51, 58, 59, 52, 45, 38, 31, 39, 46, 53, 60, 61, 54, 47, 55, 62, 63]); const dctCos1 = 4017; const dctSin1 = 799; const dctCos3 = 3406; const dctSin3 = 2276; const dctCos6 = 1567; const dctSin6 = 3784; const dctSqrt2 = 5793; const dctSqrt1d2 = 2896; function buildHuffmanTable(codeLengths, values) { let k = 0, i, j, length = 16; while (length > 0 && !codeLengths[length - 1]) { length--; } const code = [{ children: [], index: 0 }]; let p = code[0], q; for (i = 0; i < length; i++) { for (j = 0; j < codeLengths[i]; j++) { p = code.pop(); p.children[p.index] = values[k]; while (p.index > 0) { p = code.pop(); } p.index++; code.push(p); while (code.length <= i) { code.push(q = { children: [], index: 0 }); p.children[p.index] = q.children; p = q; } k++; } if (i + 1 < length) { code.push(q = { children: [], index: 0 }); p.children[p.index] = q.children; p = q; } } return code[0].children; } function getBlockBufferOffset(component, row, col) { return 64 * ((component.blocksPerLine + 1) * row + col); } function decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successivePrev, successive, parseDNLMarker = false) { const mcusPerLine = frame.mcusPerLine; const progressive = frame.progressive; const startOffset = offset; let bitsData = 0, bitsCount = 0; function readBit() { if (bitsCount > 0) { bitsCount--; return bitsData >> bitsCount & 1; } bitsData = data[offset++]; if (bitsData === 0xff) { const nextByte = data[offset++]; if (nextByte) { if (nextByte === 0xdc && parseDNLMarker) { offset += 2; const scanLines = (0, _core_utils.readUint16)(data, offset); offset += 2; if (scanLines > 0 && scanLines !== frame.scanLines) { throw new DNLMarkerError("Found DNL marker (0xFFDC) while parsing scan data", scanLines); } } else if (nextByte === 0xd9) { if (parseDNLMarker) { const maybeScanLines = blockRow * (frame.precision === 8 ? 8 : 0); if (maybeScanLines > 0 && Math.round(frame.scanLines / maybeScanLines) >= 10) { throw new DNLMarkerError("Found EOI marker (0xFFD9) while parsing scan data, " + "possibly caused by incorrect `scanLines` parameter", maybeScanLines); } } throw new EOIMarkerError("Found EOI marker (0xFFD9) while parsing scan data"); } throw new JpegError(`unexpected marker ${(bitsData << 8 | nextByte).toString(16)}`); } } bitsCount = 7; return bitsData >>> 7; } function decodeHuffman(tree) { let node = tree; while (true) { node = node[readBit()]; switch (typeof node) { case "number": return node; case "object": continue; } throw new JpegError("invalid huffman sequence"); } } function receive(length) { let n = 0; while (length > 0) { n = n << 1 | readBit(); length--; } return n; } function receiveAndExtend(length) { if (length === 1) { return readBit() === 1 ? 1 : -1; } const n = receive(length); if (n >= 1 << length - 1) { return n; } return n + (-1 << length) + 1; } function decodeBaseline(component, blockOffset) { const t = decodeHuffman(component.huffmanTableDC); const diff = t === 0 ? 0 : receiveAndExtend(t); component.blockData[blockOffset] = component.pred += diff; let k = 1; while (k < 64) { const rs = decodeHuffman(component.huffmanTableAC); const s = rs & 15, r = rs >> 4; if (s === 0) { if (r < 15) { break; } k += 16; continue; } k += r; const z = dctZigZag[k]; component.blockData[blockOffset + z] = receiveAndExtend(s); k++; } } function decodeDCFirst(component, blockOffset) { const t = decodeHuffman(component.huffmanTableDC); const diff = t === 0 ? 0 : receiveAndExtend(t) << successive; component.blockData[blockOffset] = component.pred += diff; } function decodeDCSuccessive(component, blockOffset) { component.blockData[blockOffset] |= readBit() << successive; } let eobrun = 0; function decodeACFirst(component, blockOffset) { if (eobrun > 0) { eobrun--; return; } let k = spectralStart; const e = spectralEnd; while (k <= e) { const rs = decodeHuffman(component.huffmanTableAC); const s = rs & 15, r = rs >> 4; if (s === 0) { if (r < 15) { eobrun = receive(r) + (1 << r) - 1; break; } k += 16; continue; } k += r; const z = dctZigZag[k]; component.blockData[blockOffset + z] = receiveAndExtend(s) * (1 << successive); k++; } } let successiveACState = 0, successiveACNextValue; function decodeACSuccessive(component, blockOffset) { let k = spectralStart; const e = spectralEnd; let r = 0; let s; let rs; while (k <= e) { const offsetZ = blockOffset + dctZigZag[k]; const sign = component.blockData[offsetZ] < 0 ? -1 : 1; switch (successiveACState) { case 0: rs = decodeHuffman(component.huffmanTableAC); s = rs & 15; r = rs >> 4; if (s === 0) { if (r < 15) { eobrun = receive(r) + (1 << r); successiveACState = 4; } else { r = 16; successiveACState = 1; } } else { if (s !== 1) { throw new JpegError("invalid ACn encoding"); } successiveACNextValue = receiveAndExtend(s); successiveACState = r ? 2 : 3; } continue; case 1: case 2: if (component.blockData[offsetZ]) { component.blockData[offsetZ] += sign * (readBit() << successive); } else { r--; if (r === 0) { successiveACState = successiveACState === 2 ? 3 : 0; } } break; case 3: if (component.blockData[offsetZ]) { component.blockData[offsetZ] += sign * (readBit() << successive); } else { component.blockData[offsetZ] = successiveACNextValue << successive; successiveACState = 0; } break; case 4: if (component.blockData[offsetZ]) { component.blockData[offsetZ] += sign * (readBit() << successive); } break; } k++; } if (successiveACState === 4) { eobrun--; if (eobrun === 0) { successiveACState = 0; } } } let blockRow = 0; function decodeMcu(component, decode, mcu, row, col) { const mcuRow = mcu / mcusPerLine | 0; const mcuCol = mcu % mcusPerLine; blockRow = mcuRow * component.v + row; const blockCol = mcuCol * component.h + col; const blockOffset = getBlockBufferOffset(component, blockRow, blockCol); decode(component, blockOffset); } function decodeBlock(component, decode, mcu) { blockRow = mcu / component.blocksPerLine | 0; const blockCol = mcu % component.blocksPerLine; const blockOffset = getBlockBufferOffset(component, blockRow, blockCol); decode(component, blockOffset); } const componentsLength = components.length; let component, i, j, k, n; let decodeFn; if (progressive) { if (spectralStart === 0) { decodeFn = successivePrev === 0 ? decodeDCFirst : decodeDCSuccessive; } else { decodeFn = successivePrev === 0 ? decodeACFirst : decodeACSuccessive; } } else { decodeFn = decodeBaseline; } let mcu = 0, fileMarker; let mcuExpected; if (componentsLength === 1) { mcuExpected = components[0].blocksPerLine * components[0].blocksPerColumn; } else { mcuExpected = mcusPerLine * frame.mcusPerColumn; } let h, v; while (mcu <= mcuExpected) { const mcuToRead = resetInterval ? Math.min(mcuExpected - mcu, resetInterval) : mcuExpected; if (mcuToRead > 0) { for (i = 0; i < componentsLength; i++) { components[i].pred = 0; } eobrun = 0; if (componentsLength === 1) { component = components[0]; for (n = 0; n < mcuToRead; n++) { decodeBlock(component, decodeFn, mcu); mcu++; } } else { for (n = 0; n < mcuToRead; n++) { for (i = 0; i < componentsLength; i++) { component = components[i]; h = component.h; v = component.v; for (j = 0; j < v; j++) { for (k = 0; k < h; k++) { decodeMcu(component, decodeFn, mcu, j, k); } } } mcu++; } } } bitsCount = 0; fileMarker = findNextFileMarker(data, offset); if (!fileMarker) { break; } if (fileMarker.invalid) { const partialMsg = mcuToRead > 0 ? "unexpected" : "excessive"; (0, _util.warn)(`decodeScan - ${partialMsg} MCU data, current marker is: ${fileMarker.invalid}`); offset = fileMarker.offset; } if (fileMarker.marker >= 0xffd0 && fileMarker.marker <= 0xffd7) { offset += 2; } else { break; } } return offset - startOffset; } function quantizeAndInverse(component, blockBufferOffset, p) { const qt = component.quantizationTable, blockData = component.blockData; let v0, v1, v2, v3, v4, v5, v6, v7; let p0, p1, p2, p3, p4, p5, p6, p7; let t; if (!qt) { throw new JpegError("missing required Quantization Table."); } for (let row = 0; row < 64; row += 8) { p0 = blockData[blockBufferOffset + row]; p1 = blockData[blockBufferOffset + row + 1]; p2 = blockData[blockBufferOffset + row + 2]; p3 = blockData[blockBufferOffset + row + 3]; p4 = blockData[blockBufferOffset + row + 4]; p5 = blockData[blockBufferOffset + row + 5]; p6 = blockData[blockBufferOffset + row + 6]; p7 = blockData[blockBufferOffset + row + 7]; p0 *= qt[row]; if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) { t = dctSqrt2 * p0 + 512 >> 10; p[row] = t; p[row + 1] = t; p[row + 2] = t; p[row + 3] = t; p[row + 4] = t; p[row + 5] = t; p[row + 6] = t; p[row + 7] = t; continue; } p1 *= qt[row + 1]; p2 *= qt[row + 2]; p3 *= qt[row + 3]; p4 *= qt[row + 4]; p5 *= qt[row + 5]; p6 *= qt[row + 6]; p7 *= qt[row + 7]; v0 = dctSqrt2 * p0 + 128 >> 8; v1 = dctSqrt2 * p4 + 128 >> 8; v2 = p2; v3 = p6; v4 = dctSqrt1d2 * (p1 - p7) + 128 >> 8; v7 = dctSqrt1d2 * (p1 + p7) + 128 >> 8; v5 = p3 << 4; v6 = p5 << 4; v0 = v0 + v1 + 1 >> 1; v1 = v0 - v1; t = v2 * dctSin6 + v3 * dctCos6 + 128 >> 8; v2 = v2 * dctCos6 - v3 * dctSin6 + 128 >> 8; v3 = t; v4 = v4 + v6 + 1 >> 1; v6 = v4 - v6; v7 = v7 + v5 + 1 >> 1; v5 = v7 - v5; v0 = v0 + v3 + 1 >> 1; v3 = v0 - v3; v1 = v1 + v2 + 1 >> 1; v2 = v1 - v2; t = v4 * dctSin3 + v7 * dctCos3 + 2048 >> 12; v4 = v4 * dctCos3 - v7 * dctSin3 + 2048 >> 12; v7 = t; t = v5 * dctSin1 + v6 * dctCos1 + 2048 >> 12; v5 = v5 * dctCos1 - v6 * dctSin1 + 2048 >> 12; v6 = t; p[row] = v0 + v7; p[row + 7] = v0 - v7; p[row + 1] = v1 + v6; p[row + 6] = v1 - v6; p[row + 2] = v2 + v5; p[row + 5] = v2 - v5; p[row + 3] = v3 + v4; p[row + 4] = v3 - v4; } for (let col = 0; col < 8; ++col) { p0 = p[col]; p1 = p[col + 8]; p2 = p[col + 16]; p3 = p[col + 24]; p4 = p[col + 32]; p5 = p[col + 40]; p6 = p[col + 48]; p7 = p[col + 56]; if ((p1 | p2 | p3 | p4 | p5 | p6 | p7) === 0) { t = dctSqrt2 * p0 + 8192 >> 14; if (t < -2040) { t = 0; } else if (t >= 2024) { t = 255; } else { t = t + 2056 >> 4; } blockData[blockBufferOffset + col] = t; blockData[blockBufferOffset + col + 8] = t; blockData[blockBufferOffset + col + 16] = t; blockData[blockBufferOffset + col + 24] = t; blockData[blockBufferOffset + col + 32] = t; blockData[blockBufferOffset + col + 40] = t; blockData[blockBufferOffset + col + 48] = t; blockData[blockBufferOffset + col + 56] = t; continue; } v0 = dctSqrt2 * p0 + 2048 >> 12; v1 = dctSqrt2 * p4 + 2048 >> 12; v2 = p2; v3 = p6; v4 = dctSqrt1d2 * (p1 - p7) + 2048 >> 12; v7 = dctSqrt1d2 * (p1 + p7) + 2048 >> 12; v5 = p3; v6 = p5; v0 = (v0 + v1 + 1 >> 1) + 4112; v1 = v0 - v1; t = v2 * dctSin6 + v3 * dctCos6 + 2048 >> 12; v2 = v2 * dctCos6 - v3 * dctSin6 + 2048 >> 12; v3 = t; v4 = v4 + v6 + 1 >> 1; v6 = v4 - v6; v7 = v7 + v5 + 1 >> 1; v5 = v7 - v5; v0 = v0 + v3 + 1 >> 1; v3 = v0 - v3; v1 = v1 + v2 + 1 >> 1; v2 = v1 - v2; t = v4 * dctSin3 + v7 * dctCos3 + 2048 >> 12; v4 = v4 * dctCos3 - v7 * dctSin3 + 2048 >> 12; v7 = t; t = v5 * dctSin1 + v6 * dctCos1 + 2048 >> 12; v5 = v5 * dctCos1 - v6 * dctSin1 + 2048 >> 12; v6 = t; p0 = v0 + v7; p7 = v0 - v7; p1 = v1 + v6; p6 = v1 - v6; p2 = v2 + v5; p5 = v2 - v5; p3 = v3 + v4; p4 = v3 - v4; if (p0 < 16) { p0 = 0; } else if (p0 >= 4080) { p0 = 255; } else { p0 >>= 4; } if (p1 < 16) { p1 = 0; } else if (p1 >= 4080) { p1 = 255; } else { p1 >>= 4; } if (p2 < 16) { p2 = 0; } else if (p2 >= 4080) { p2 = 255; } else { p2 >>= 4; } if (p3 < 16) { p3 = 0; } else if (p3 >= 4080) { p3 = 255; } else { p3 >>= 4; } if (p4 < 16) { p4 = 0; } else if (p4 >= 4080) { p4 = 255; } else { p4 >>= 4; } if (p5 < 16) { p5 = 0; } else if (p5 >= 4080) { p5 = 255; } else { p5 >>= 4; } if (p6 < 16) { p6 = 0; } else if (p6 >= 4080) { p6 = 255; } else { p6 >>= 4; } if (p7 < 16) { p7 = 0; } else if (p7 >= 4080) { p7 = 255; } else { p7 >>= 4; } blockData[blockBufferOffset + col] = p0; blockData[blockBufferOffset + col + 8] = p1; blockData[blockBufferOffset + col + 16] = p2; blockData[blockBufferOffset + col + 24] = p3; blockData[blockBufferOffset + col + 32] = p4; blockData[blockBufferOffset + col + 40] = p5; blockData[blockBufferOffset + col + 48] = p6; blockData[blockBufferOffset + col + 56] = p7; } } function buildComponentData(frame, component) { const blocksPerLine = component.blocksPerLine; const blocksPerColumn = component.blocksPerColumn; const computationBuffer = new Int16Array(64); for (let blockRow = 0; blockRow < blocksPerColumn; blockRow++) { for (let blockCol = 0; blockCol < blocksPerLine; blockCol++) { const offset = getBlockBufferOffset(component, blockRow, blockCol); quantizeAndInverse(component, offset, computationBuffer); } } return component.blockData; } function findNextFileMarker(data, currentPos, startPos = currentPos) { const maxPos = data.length - 1; let newPos = startPos < currentPos ? startPos : currentPos; if (currentPos >= maxPos) { return null; } const currentMarker = (0, _core_utils.readUint16)(data, currentPos); if (currentMarker >= 0xffc0 && currentMarker <= 0xfffe) { return { invalid: null, marker: currentMarker, offset: currentPos }; } let newMarker = (0, _core_utils.readUint16)(data, newPos); while (!(newMarker >= 0xffc0 && newMarker <= 0xfffe)) { if (++newPos >= maxPos) { return null; } newMarker = (0, _core_utils.readUint16)(data, newPos); } return { invalid: currentMarker.toString(16), marker: newMarker, offset: newPos }; } class JpegImage { constructor({ decodeTransform = null, colorTransform = -1 } = {}) { this._decodeTransform = decodeTransform; this._colorTransform = colorTransform; } parse(data, { dnlScanLines = null } = {}) { function readDataBlock() { const length = (0, _core_utils.readUint16)(data, offset); offset += 2; let endOffset = offset + length - 2; const fileMarker = findNextFileMarker(data, endOffset, offset); if (fileMarker && fileMarker.invalid) { (0, _util.warn)("readDataBlock - incorrect length, current marker is: " + fileMarker.invalid); endOffset = fileMarker.offset; } const array = data.subarray(offset, endOffset); offset += array.length; return array; } function prepareComponents(frame) { const mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / frame.maxH); const mcusPerColumn = Math.ceil(frame.scanLines / 8 / frame.maxV); for (let i = 0, ii = frame.components.length; i < ii; i++) { const component = frame.components[i]; const blocksPerLine = Math.ceil(Math.ceil(frame.samplesPerLine / 8) * component.h / frame.maxH); const blocksPerColumn = Math.ceil(Math.ceil(frame.scanLines / 8) * component.v / frame.maxV); const blocksPerLineForMcu = mcusPerLine * component.h; const blocksPerColumnForMcu = mcusPerColumn * component.v; const blocksBufferSize = 64 * blocksPerColumnForMcu * (blocksPerLineForMcu + 1); component.blockData = new Int16Array(blocksBufferSize); component.blocksPerLine = blocksPerLine; component.blocksPerColumn = blocksPerColumn; } frame.mcusPerLine = mcusPerLine; frame.mcusPerColumn = mcusPerColumn; } let offset = 0; let jfif = null; let adobe = null; let frame, resetInterval; let numSOSMarkers = 0; const quantizationTables = []; const huffmanTablesAC = [], huffmanTablesDC = []; let fileMarker = (0, _core_utils.readUint16)(data, offset); offset += 2; if (fileMarker !== 0xffd8) { throw new JpegError("SOI not found"); } fileMarker = (0, _core_utils.readUint16)(data, offset); offset += 2; markerLoop: while (fileMarker !== 0xffd9) { let i, j, l; switch (fileMarker) { case 0xffe0: case 0xffe1: case 0xffe2: case 0xffe3: case 0xffe4: case 0xffe5: case 0xffe6: case 0xffe7: case 0xffe8: case 0xffe9: case 0xffea: case 0xffeb: case 0xffec: case 0xffed: case 0xffee: case 0xffef: case 0xfffe: const appData = readDataBlock(); if (fileMarker === 0xffe0) { if (appData[0] === 0x4a && appData[1] === 0x46 && appData[2] === 0x49 && appData[3] === 0x46 && appData[4] === 0) { jfif = { version: { major: appData[5], minor: appData[6] }, densityUnits: appData[7], xDensity: appData[8] << 8 | appData[9], yDensity: appData[10] << 8 | appData[11], thumbWidth: appData[12], thumbHeight: appData[13], thumbData: appData.subarray(14, 14 + 3 * appData[12] * appData[13]) }; } } if (fileMarker === 0xffee) { if (appData[0] === 0x41 && appData[1] === 0x64 && appData[2] === 0x6f && appData[3] === 0x62 && appData[4] === 0x65) { adobe = { version: appData[5] << 8 | appData[6], flags0: appData[7] << 8 | appData[8], flags1: appData[9] << 8 | appData[10], transformCode: appData[11] }; } } break; case 0xffdb: const quantizationTablesLength = (0, _core_utils.readUint16)(data, offset); offset += 2; const quantizationTablesEnd = quantizationTablesLength + offset - 2; let z; while (offset < quantizationTablesEnd) { const quantizationTableSpec = data[offset++]; const tableData = new Uint16Array(64); if (quantizationTableSpec >> 4 === 0) { for (j = 0; j < 64; j++) { z = dctZigZag[j]; tableData[z] = data[offset++]; } } else if (quantizationTableSpec >> 4 === 1) { for (j = 0; j < 64; j++) { z = dctZigZag[j]; tableData[z] = (0, _core_utils.readUint16)(data, offset); offset += 2; } } else { throw new JpegError("DQT - invalid table spec"); } quantizationTables[quantizationTableSpec & 15] = tableData; } break; case 0xffc0: case 0xffc1: case 0xffc2: if (frame) { throw new JpegError("Only single frame JPEGs supported"); } offset += 2; frame = {}; frame.extended = fileMarker === 0xffc1; frame.progressive = fileMarker === 0xffc2; frame.precision = data[offset++]; const sofScanLines = (0, _core_utils.readUint16)(data, offset); offset += 2; frame.scanLines = dnlScanLines || sofScanLines; frame.samplesPerLine = (0, _core_utils.readUint16)(data, offset); offset += 2; frame.components = []; frame.componentIds = {}; const componentsCount = data[offset++]; let maxH = 0, maxV = 0; for (i = 0; i < componentsCount; i++) { const componentId = data[offset]; const h = data[offset + 1] >> 4; const v = data[offset + 1] & 15; if (maxH < h) { maxH = h; } if (maxV < v) { maxV = v; } const qId = data[offset + 2]; l = frame.components.push({ h, v, quantizationId: qId, quantizationTable: null }); frame.componentIds[componentId] = l - 1; offset += 3; } frame.maxH = maxH; frame.maxV = maxV; prepareComponents(frame); break; case 0xffc4: const huffmanLength = (0, _core_utils.readUint16)(data, offset); offset += 2; for (i = 2; i < huffmanLength;) { const huffmanTableSpec = data[offset++]; const codeLengths = new Uint8Array(16); let codeLengthSum = 0; for (j = 0; j < 16; j++, offset++) { codeLengthSum += codeLengths[j] = data[offset]; } const huffmanValues = new Uint8Array(codeLengthSum); for (j = 0; j < codeLengthSum; j++, offset++) { huffmanValues[j] = data[offset]; } i += 17 + codeLengthSum; (huffmanTableSpec >> 4 === 0 ? huffmanTablesDC : huffmanTablesAC)[huffmanTableSpec & 15] = buildHuffmanTable(codeLengths, huffmanValues); } break; case 0xffdd: offset += 2; resetInterval = (0, _core_utils.readUint16)(data, offset); offset += 2; break; case 0xffda: const parseDNLMarker = ++numSOSMarkers === 1 && !dnlScanLines; offset += 2; const selectorsCount = data[offset++], components = []; for (i = 0; i < selectorsCount; i++) { const index = data[offset++]; const componentIndex = frame.componentIds[index]; const component = frame.components[componentIndex]; component.index = index; const tableSpec = data[offset++]; component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4]; component.huffmanTableAC = huffmanTablesAC[tableSpec & 15]; components.push(component); } const spectralStart = data[offset++], spectralEnd = data[offset++], successiveApproximation = data[offset++]; try { const processed = decodeScan(data, offset, frame, components, resetInterval, spectralStart, spectralEnd, successiveApproximation >> 4, successiveApproximation & 15, parseDNLMarker); offset += processed; } catch (ex) { if (ex instanceof DNLMarkerError) { (0, _util.warn)(`${ex.message} -- attempting to re-parse the JPEG image.`); return this.parse(data, { dnlScanLines: ex.scanLines }); } else if (ex instanceof EOIMarkerError) { (0, _util.warn)(`${ex.message} -- ignoring the rest of the image data.`); break markerLoop; } throw ex; } break; case 0xffdc: offset += 4; break; case 0xffff: if (data[offset] !== 0xff) { offset--; } break; default: const nextFileMarker = findNextFileMarker(data, offset - 2, offset - 3); if (nextFileMarker && nextFileMarker.invalid) { (0, _util.warn)("JpegImage.parse - unexpected data, current marker is: " + nextFileMarker.invalid); offset = nextFileMarker.offset; break; } if (!nextFileMarker || offset >= data.length - 1) { (0, _util.warn)("JpegImage.parse - reached the end of the image data " + "without finding an EOI marker (0xFFD9)."); break markerLoop; } throw new JpegError("JpegImage.parse - unknown marker: " + fileMarker.toString(16)); } fileMarker = (0, _core_utils.readUint16)(data, offset); offset += 2; } this.width = frame.samplesPerLine; this.height = frame.scanLines; this.jfif = jfif; this.adobe = adobe; this.components = []; for (let i = 0, ii = frame.components.length; i < ii; i++) { const component = frame.components[i]; const quantizationTable = quantizationTables[component.quantizationId]; if (quantizationTable) { component.quantizationTable = quantizationTable; } this.components.push({ index: component.index, output: buildComponentData(frame, component), scaleX: component.h / frame.maxH, scaleY: component.v / frame.maxV, blocksPerLine: component.blocksPerLine, blocksPerColumn: component.blocksPerColumn }); } this.numComponents = this.components.length; return undefined; } _getLinearizedBlockData(width, height, isSourcePDF = false) { const scaleX = this.width / width, scaleY = this.height / height; let component, componentScaleX, componentScaleY, blocksPerScanline; let x, y, i, j, k; let index; let offset = 0; let output; const numComponents = this.components.length; const dataLength = width * height * numComponents; const data = new Uint8ClampedArray(dataLength); const xScaleBlockOffset = new Uint32Array(width); const mask3LSB = 0xfffffff8; let lastComponentScaleX; for (i = 0; i < numComponents; i++) { component = this.components[i]; componentScaleX = component.scaleX * scaleX; componentScaleY = component.scaleY * scaleY; offset = i; output = component.output; blocksPerScanline = component.blocksPerLine + 1 << 3; if (componentScaleX !== lastComponentScaleX) { for (x = 0; x < width; x++) { j = 0 | x * componentScaleX; xScaleBlockOffset[x] = (j & mask3LSB) << 3 | j & 7; } lastComponentScaleX = componentScaleX; } for (y = 0; y < height; y++) { j = 0 | y * componentScaleY; index = blocksPerScanline * (j & mask3LSB) | (j & 7) << 3; for (x = 0; x < width; x++) { data[offset] = output[index + xScaleBlockOffset[x]]; offset += numComponents; } } } let transform = this._decodeTransform; if (!isSourcePDF && numComponents === 4 && !transform) { transform = new Int32Array([-256, 255, -256, 255, -256, 255, -256, 255]); } if (transform) { for (i = 0; i < dataLength;) { for (j = 0, k = 0; j < numComponents; j++, i++, k += 2) { data[i] = (data[i] * transform[k] >> 8) + transform[k + 1]; } } } return data; } get _isColorConversionNeeded() { if (this.adobe) { return !!this.adobe.transformCode; } if (this.numComponents === 3) { if (this._colorTransform === 0) { return false; } else if (this.components[0].index === 0x52 && this.components[1].index === 0x47 && this.components[2].index === 0x42) { return false; } return true; } if (this._colorTransform === 1) { return true; } return false; } _convertYccToRgb(data) { let Y, Cb, Cr; for (let i = 0, length = data.length; i < length; i += 3) { Y = data[i]; Cb = data[i + 1]; Cr = data[i + 2]; data[i] = Y - 179.456 + 1.402 * Cr; data[i + 1] = Y + 135.459 - 0.344 * Cb - 0.714 * Cr; data[i + 2] = Y - 226.816 + 1.772 * Cb; } return data; } _convertYcckToRgb(data) { let Y, Cb, Cr, k; let offset = 0; for (let i = 0, length = data.length; i < length; i += 4) { Y = data[i]; Cb = data[i + 1]; Cr = data[i + 2]; k = data[i + 3]; data[offset++] = -122.67195406894 + Cb * (-6.60635669420364e-5 * Cb + 0.000437130475926232 * Cr - 5.4080610064599e-5 * Y + 0.00048449797120281 * k - 0.154362151871126) + Cr * (-0.000957964378445773 * Cr + 0.000817076911346625 * Y - 0.00477271405408747 * k + 1.53380253221734) + Y * (0.000961250184130688 * Y - 0.00266257332283933 * k + 0.48357088451265) + k * (-0.000336197177618394 * k + 0.484791561490776); data[offset++] = 107.268039397724 + Cb * (2.19927104525741e-5 * Cb - 0.000640992018297945 * Cr + 0.000659397001245577 * Y + 0.000426105652938837 * k - 0.176491792462875) + Cr * (-0.000778269941513683 * Cr + 0.00130872261408275 * Y + 0.000770482631801132 * k - 0.151051492775562) + Y * (0.00126935368114843 * Y - 0.00265090189010898 * k + 0.25802910206845) + k * (-0.000318913117588328 * k - 0.213742400323665); data[offset++] = -20.810012546947 + Cb * (-0.000570115196973677 * Cb - 2.63409051004589e-5 * Cr + 0.0020741088115012 * Y - 0.00288260236853442 * k + 0.814272968359295) + Cr * (-1.53496057440975e-5 * Cr - 0.000132689043961446 * Y + 0.000560833691242812 * k - 0.195152027534049) + Y * (0.00174418132927582 * Y - 0.00255243321439347 * k + 0.116935020465145) + k * (-0.000343531996510555 * k + 0.24165260232407); } return data.subarray(0, offset); } _convertYcckToCmyk(data) { let Y, Cb, Cr; for (let i = 0, length = data.length; i < length; i += 4) { Y = data[i]; Cb = data[i + 1]; Cr = data[i + 2]; data[i] = 434.456 - Y - 1.402 * Cr; data[i + 1] = 119.541 - Y + 0.344 * Cb + 0.714 * Cr; data[i + 2] = 481.816 - Y - 1.772 * Cb; } return data; } _convertCmykToRgb(data) { let c, m, y, k; let offset = 0; for (let i = 0, length = data.length; i < length; i += 4) { c = data[i]; m = data[i + 1]; y = data[i + 2]; k = data[i + 3]; data[offset++] = 255 + c * (-0.00006747147073602441 * c + 0.0008379262121013727 * m + 0.0002894718188643294 * y + 0.003264231057537806 * k - 1.1185611867203937) + m * (0.000026374107616089405 * m - 0.00008626949158638572 * y - 0.0002748769067499491 * k - 0.02155688794978967) + y * (-0.00003878099212869363 * y - 0.0003267808279485286 * k + 0.0686742238595345) - k * (0.0003361971776183937 * k + 0.7430659151342254); data[offset++] = 255 + c * (0.00013596372813588848 * c + 0.000924537132573585 * m + 0.00010567359618683593 * y + 0.0004791864687436512 * k - 0.3109689587515875) + m * (-0.00023545346108370344 * m + 0.0002702845253534714 * y + 0.0020200308977307156 * k - 0.7488052167015494) + y * (0.00006834815998235662 * y + 0.00015168452363460973 * k - 0.09751927774728933) - k * (0.0003189131175883281 * k + 0.7364883807733168); data[offset++] = 255 + c * (0.000013598650411385307 * c + 0.00012423956175490851 * m + 0.0004751985097583589 * y - 0.0000036729317476630422 * k - 0.05562186980264034) + m * (0.00016141380598724676 * m + 0.0009692239130725186 * y + 0.0007782692450036253 * k - 0.44015232367526463) + y * (5.068882914068769e-7 * y + 0.0017778369011375071 * k - 0.7591454649749609) - k * (0.0003435319965105553 * k + 0.7063770186160144); } return data.subarray(0, offset); } getData({ width, height, forceRGB = false, isSourcePDF = false }) { if (this.numComponents > 4) { throw new JpegError("Unsupported color mode"); } const data = this._getLinearizedBlockData(width, height, isSourcePDF); if (this.numComponents === 1 && forceRGB) { const dataLength = data.length; const rgbData = new Uint8ClampedArray(dataLength * 3); let offset = 0; for (let i = 0; i < dataLength; i++) { const grayColor = data[i]; rgbData[offset++] = grayColor; rgbData[offset++] = grayColor; rgbData[offset++] = grayColor; } return rgbData; } else if (this.numComponents === 3 && this._isColorConversionNeeded) { return this._convertYccToRgb(data); } else if (this.numComponents === 4) { if (this._isColorConversionNeeded) { if (forceRGB) { return this._convertYcckToRgb(data); } return this._convertYcckToCmyk(data); } else if (forceRGB) { return this._convertCmykToRgb(data); } } return data; } } exports.JpegImage = JpegImage; /***/ }), /* 39 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.JpxStream = void 0; var _decode_stream = __w_pdfjs_require__(29); var _jpx = __w_pdfjs_require__(40); var _util = __w_pdfjs_require__(2); class JpxStream extends _decode_stream.DecodeStream { constructor(stream, maybeLength, params) { super(maybeLength); this.stream = stream; this.dict = stream.dict; this.maybeLength = maybeLength; this.params = params; } get bytes() { return (0, _util.shadow)(this, "bytes", this.stream.getBytes(this.maybeLength)); } ensureBuffer(requested) {} readBlock() { if (this.eof) { return; } const jpxImage = new _jpx.JpxImage(); jpxImage.parse(this.bytes); const width = jpxImage.width; const height = jpxImage.height; const componentsCount = jpxImage.componentsCount; const tileCount = jpxImage.tiles.length; if (tileCount === 1) { this.buffer = jpxImage.tiles[0].items; } else { const data = new Uint8ClampedArray(width * height * componentsCount); for (let k = 0; k < tileCount; k++) { const tileComponents = jpxImage.tiles[k]; const tileWidth = tileComponents.width; const tileHeight = tileComponents.height; const tileLeft = tileComponents.left; const tileTop = tileComponents.top; const src = tileComponents.items; let srcPosition = 0; let dataPosition = (width * tileTop + tileLeft) * componentsCount; const imgRowSize = width * componentsCount; const tileRowSize = tileWidth * componentsCount; for (let j = 0; j < tileHeight; j++) { const rowBytes = src.subarray(srcPosition, srcPosition + tileRowSize); data.set(rowBytes, dataPosition); srcPosition += tileRowSize; dataPosition += imgRowSize; } } this.buffer = data; } this.bufferLength = this.buffer.length; this.eof = true; } } exports.JpxStream = JpxStream; /***/ }), /* 40 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.JpxImage = void 0; var _util = __w_pdfjs_require__(2); var _core_utils = __w_pdfjs_require__(9); var _arithmetic_decoder = __w_pdfjs_require__(36); class JpxError extends _util.BaseException { constructor(msg) { super(`JPX error: ${msg}`, "JpxError"); } } const SubbandsGainLog2 = { LL: 0, LH: 1, HL: 1, HH: 2 }; class JpxImage { constructor() { this.failOnCorruptedImage = false; } parse(data) { const head = (0, _core_utils.readUint16)(data, 0); if (head === 0xff4f) { this.parseCodestream(data, 0, data.length); return; } const length = data.length; let position = 0; while (position < length) { let headerSize = 8; let lbox = (0, _core_utils.readUint32)(data, position); const tbox = (0, _core_utils.readUint32)(data, position + 4); position += headerSize; if (lbox === 1) { lbox = (0, _core_utils.readUint32)(data, position) * 4294967296 + (0, _core_utils.readUint32)(data, position + 4); position += 8; headerSize += 8; } if (lbox === 0) { lbox = length - position + headerSize; } if (lbox < headerSize) { throw new JpxError("Invalid box field size"); } const dataLength = lbox - headerSize; let jumpDataLength = true; switch (tbox) { case 0x6a703268: jumpDataLength = false; break; case 0x636f6c72: const method = data[position]; if (method === 1) { const colorspace = (0, _core_utils.readUint32)(data, position + 3); switch (colorspace) { case 16: case 17: case 18: break; default: (0, _util.warn)("Unknown colorspace " + colorspace); break; } } else if (method === 2) { (0, _util.info)("ICC profile not supported"); } break; case 0x6a703263: this.parseCodestream(data, position, position + dataLength); break; case 0x6a502020: if ((0, _core_utils.readUint32)(data, position) !== 0x0d0a870a) { (0, _util.warn)("Invalid JP2 signature"); } break; case 0x6a501a1a: case 0x66747970: case 0x72726571: case 0x72657320: case 0x69686472: break; default: const headerType = String.fromCharCode(tbox >> 24 & 0xff, tbox >> 16 & 0xff, tbox >> 8 & 0xff, tbox & 0xff); (0, _util.warn)(`Unsupported header type ${tbox} (${headerType}).`); break; } if (jumpDataLength) { position += dataLength; } } } parseImageProperties(stream) { let newByte = stream.getByte(); while (newByte >= 0) { const oldByte = newByte; newByte = stream.getByte(); const code = oldByte << 8 | newByte; if (code === 0xff51) { stream.skip(4); const Xsiz = stream.getInt32() >>> 0; const Ysiz = stream.getInt32() >>> 0; const XOsiz = stream.getInt32() >>> 0; const YOsiz = stream.getInt32() >>> 0; stream.skip(16); const Csiz = stream.getUint16(); this.width = Xsiz - XOsiz; this.height = Ysiz - YOsiz; this.componentsCount = Csiz; this.bitsPerComponent = 8; return; } } throw new JpxError("No size marker found in JPX stream"); } parseCodestream(data, start, end) { const context = {}; let doNotRecover = false; try { let position = start; while (position + 1 < end) { const code = (0, _core_utils.readUint16)(data, position); position += 2; let length = 0, j, sqcd, spqcds, spqcdSize, scalarExpounded, tile; switch (code) { case 0xff4f: context.mainHeader = true; break; case 0xffd9: break; case 0xff51: length = (0, _core_utils.readUint16)(data, position); const siz = {}; siz.Xsiz = (0, _core_utils.readUint32)(data, position + 4); siz.Ysiz = (0, _core_utils.readUint32)(data, position + 8); siz.XOsiz = (0, _core_utils.readUint32)(data, position + 12); siz.YOsiz = (0, _core_utils.readUint32)(data, position + 16); siz.XTsiz = (0, _core_utils.readUint32)(data, position + 20); siz.YTsiz = (0, _core_utils.readUint32)(data, position + 24); siz.XTOsiz = (0, _core_utils.readUint32)(data, position + 28); siz.YTOsiz = (0, _core_utils.readUint32)(data, position + 32); const componentsCount = (0, _core_utils.readUint16)(data, position + 36); siz.Csiz = componentsCount; const components = []; j = position + 38; for (let i = 0; i < componentsCount; i++) { const component = { precision: (data[j] & 0x7f) + 1, isSigned: !!(data[j] & 0x80), XRsiz: data[j + 1], YRsiz: data[j + 2] }; j += 3; calculateComponentDimensions(component, siz); components.push(component); } context.SIZ = siz; context.components = components; calculateTileGrids(context, components); context.QCC = []; context.COC = []; break; case 0xff5c: length = (0, _core_utils.readUint16)(data, position); const qcd = {}; j = position + 2; sqcd = data[j++]; switch (sqcd & 0x1f) { case 0: spqcdSize = 8; scalarExpounded = true; break; case 1: spqcdSize = 16; scalarExpounded = false; break; case 2: spqcdSize = 16; scalarExpounded = true; break; default: throw new Error("Invalid SQcd value " + sqcd); } qcd.noQuantization = spqcdSize === 8; qcd.scalarExpounded = scalarExpounded; qcd.guardBits = sqcd >> 5; spqcds = []; while (j < length + position) { const spqcd = {}; if (spqcdSize === 8) { spqcd.epsilon = data[j++] >> 3; spqcd.mu = 0; } else { spqcd.epsilon = data[j] >> 3; spqcd.mu = (data[j] & 0x7) << 8 | data[j + 1]; j += 2; } spqcds.push(spqcd); } qcd.SPqcds = spqcds; if (context.mainHeader) { context.QCD = qcd; } else { context.currentTile.QCD = qcd; context.currentTile.QCC = []; } break; case 0xff5d: length = (0, _core_utils.readUint16)(data, position); const qcc = {}; j = position + 2; let cqcc; if (context.SIZ.Csiz < 257) { cqcc = data[j++]; } else { cqcc = (0, _core_utils.readUint16)(data, j); j += 2; } sqcd = data[j++]; switch (sqcd & 0x1f) { case 0: spqcdSize = 8; scalarExpounded = true; break; case 1: spqcdSize = 16; scalarExpounded = false; break; case 2: spqcdSize = 16; scalarExpounded = true; break; default: throw new Error("Invalid SQcd value " + sqcd); } qcc.noQuantization = spqcdSize === 8; qcc.scalarExpounded = scalarExpounded; qcc.guardBits = sqcd >> 5; spqcds = []; while (j < length + position) { const spqcd = {}; if (spqcdSize === 8) { spqcd.epsilon = data[j++] >> 3; spqcd.mu = 0; } else { spqcd.epsilon = data[j] >> 3; spqcd.mu = (data[j] & 0x7) << 8 | data[j + 1]; j += 2; } spqcds.push(spqcd); } qcc.SPqcds = spqcds; if (context.mainHeader) { context.QCC[cqcc] = qcc; } else { context.currentTile.QCC[cqcc] = qcc; } break; case 0xff52: length = (0, _core_utils.readUint16)(data, position); const cod = {}; j = position + 2; const scod = data[j++]; cod.entropyCoderWithCustomPrecincts = !!(scod & 1); cod.sopMarkerUsed = !!(scod & 2); cod.ephMarkerUsed = !!(scod & 4); cod.progressionOrder = data[j++]; cod.layersCount = (0, _core_utils.readUint16)(data, j); j += 2; cod.multipleComponentTransform = data[j++]; cod.decompositionLevelsCount = data[j++]; cod.xcb = (data[j++] & 0xf) + 2; cod.ycb = (data[j++] & 0xf) + 2; const blockStyle = data[j++]; cod.selectiveArithmeticCodingBypass = !!(blockStyle & 1); cod.resetContextProbabilities = !!(blockStyle & 2); cod.terminationOnEachCodingPass = !!(blockStyle & 4); cod.verticallyStripe = !!(blockStyle & 8); cod.predictableTermination = !!(blockStyle & 16); cod.segmentationSymbolUsed = !!(blockStyle & 32); cod.reversibleTransformation = data[j++]; if (cod.entropyCoderWithCustomPrecincts) { const precinctsSizes = []; while (j < length + position) { const precinctsSize = data[j++]; precinctsSizes.push({ PPx: precinctsSize & 0xf, PPy: precinctsSize >> 4 }); } cod.precinctsSizes = precinctsSizes; } const unsupported = []; if (cod.selectiveArithmeticCodingBypass) { unsupported.push("selectiveArithmeticCodingBypass"); } if (cod.resetContextProbabilities) { unsupported.push("resetContextProbabilities"); } if (cod.terminationOnEachCodingPass) { unsupported.push("terminationOnEachCodingPass"); } if (cod.verticallyStripe) { unsupported.push("verticallyStripe"); } if (cod.predictableTermination) { unsupported.push("predictableTermination"); } if (unsupported.length > 0) { doNotRecover = true; (0, _util.warn)(`JPX: Unsupported COD options (${unsupported.join(", ")}).`); } if (context.mainHeader) { context.COD = cod; } else { context.currentTile.COD = cod; context.currentTile.COC = []; } break; case 0xff90: length = (0, _core_utils.readUint16)(data, position); tile = {}; tile.index = (0, _core_utils.readUint16)(data, position + 2); tile.length = (0, _core_utils.readUint32)(data, position + 4); tile.dataEnd = tile.length + position - 2; tile.partIndex = data[position + 8]; tile.partsCount = data[position + 9]; context.mainHeader = false; if (tile.partIndex === 0) { tile.COD = context.COD; tile.COC = context.COC.slice(0); tile.QCD = context.QCD; tile.QCC = context.QCC.slice(0); } context.currentTile = tile; break; case 0xff93: tile = context.currentTile; if (tile.partIndex === 0) { initializeTile(context, tile.index); buildPackets(context); } length = tile.dataEnd - position; parseTilePackets(context, data, position, length); break; case 0xff53: (0, _util.warn)("JPX: Codestream code 0xFF53 (COC) is not implemented."); case 0xff55: case 0xff57: case 0xff58: case 0xff64: length = (0, _core_utils.readUint16)(data, position); break; default: throw new Error("Unknown codestream code: " + code.toString(16)); } position += length; } } catch (e) { if (doNotRecover || this.failOnCorruptedImage) { throw new JpxError(e.message); } else { (0, _util.warn)(`JPX: Trying to recover from: "${e.message}".`); } } this.tiles = transformComponents(context); this.width = context.SIZ.Xsiz - context.SIZ.XOsiz; this.height = context.SIZ.Ysiz - context.SIZ.YOsiz; this.componentsCount = context.SIZ.Csiz; } } exports.JpxImage = JpxImage; function calculateComponentDimensions(component, siz) { component.x0 = Math.ceil(siz.XOsiz / component.XRsiz); component.x1 = Math.ceil(siz.Xsiz / component.XRsiz); component.y0 = Math.ceil(siz.YOsiz / component.YRsiz); component.y1 = Math.ceil(siz.Ysiz / component.YRsiz); component.width = component.x1 - component.x0; component.height = component.y1 - component.y0; } function calculateTileGrids(context, components) { const siz = context.SIZ; const tiles = []; let tile; const numXtiles = Math.ceil((siz.Xsiz - siz.XTOsiz) / siz.XTsiz); const numYtiles = Math.ceil((siz.Ysiz - siz.YTOsiz) / siz.YTsiz); for (let q = 0; q < numYtiles; q++) { for (let p = 0; p < numXtiles; p++) { tile = {}; tile.tx0 = Math.max(siz.XTOsiz + p * siz.XTsiz, siz.XOsiz); tile.ty0 = Math.max(siz.YTOsiz + q * siz.YTsiz, siz.YOsiz); tile.tx1 = Math.min(siz.XTOsiz + (p + 1) * siz.XTsiz, siz.Xsiz); tile.ty1 = Math.min(siz.YTOsiz + (q + 1) * siz.YTsiz, siz.Ysiz); tile.width = tile.tx1 - tile.tx0; tile.height = tile.ty1 - tile.ty0; tile.components = []; tiles.push(tile); } } context.tiles = tiles; const componentsCount = siz.Csiz; for (let i = 0, ii = componentsCount; i < ii; i++) { const component = components[i]; for (let j = 0, jj = tiles.length; j < jj; j++) { const tileComponent = {}; tile = tiles[j]; tileComponent.tcx0 = Math.ceil(tile.tx0 / component.XRsiz); tileComponent.tcy0 = Math.ceil(tile.ty0 / component.YRsiz); tileComponent.tcx1 = Math.ceil(tile.tx1 / component.XRsiz); tileComponent.tcy1 = Math.ceil(tile.ty1 / component.YRsiz); tileComponent.width = tileComponent.tcx1 - tileComponent.tcx0; tileComponent.height = tileComponent.tcy1 - tileComponent.tcy0; tile.components[i] = tileComponent; } } } function getBlocksDimensions(context, component, r) { const codOrCoc = component.codingStyleParameters; const result = {}; if (!codOrCoc.entropyCoderWithCustomPrecincts) { result.PPx = 15; result.PPy = 15; } else { result.PPx = codOrCoc.precinctsSizes[r].PPx; result.PPy = codOrCoc.precinctsSizes[r].PPy; } result.xcb_ = r > 0 ? Math.min(codOrCoc.xcb, result.PPx - 1) : Math.min(codOrCoc.xcb, result.PPx); result.ycb_ = r > 0 ? Math.min(codOrCoc.ycb, result.PPy - 1) : Math.min(codOrCoc.ycb, result.PPy); return result; } function buildPrecincts(context, resolution, dimensions) { const precinctWidth = 1 << dimensions.PPx; const precinctHeight = 1 << dimensions.PPy; const isZeroRes = resolution.resLevel === 0; const precinctWidthInSubband = 1 << dimensions.PPx + (isZeroRes ? 0 : -1); const precinctHeightInSubband = 1 << dimensions.PPy + (isZeroRes ? 0 : -1); const numprecinctswide = resolution.trx1 > resolution.trx0 ? Math.ceil(resolution.trx1 / precinctWidth) - Math.floor(resolution.trx0 / precinctWidth) : 0; const numprecinctshigh = resolution.try1 > resolution.try0 ? Math.ceil(resolution.try1 / precinctHeight) - Math.floor(resolution.try0 / precinctHeight) : 0; const numprecincts = numprecinctswide * numprecinctshigh; resolution.precinctParameters = { precinctWidth, precinctHeight, numprecinctswide, numprecinctshigh, numprecincts, precinctWidthInSubband, precinctHeightInSubband }; } function buildCodeblocks(context, subband, dimensions) { const xcb_ = dimensions.xcb_; const ycb_ = dimensions.ycb_; const codeblockWidth = 1 << xcb_; const codeblockHeight = 1 << ycb_; const cbx0 = subband.tbx0 >> xcb_; const cby0 = subband.tby0 >> ycb_; const cbx1 = subband.tbx1 + codeblockWidth - 1 >> xcb_; const cby1 = subband.tby1 + codeblockHeight - 1 >> ycb_; const precinctParameters = subband.resolution.precinctParameters; const codeblocks = []; const precincts = []; let i, j, codeblock, precinctNumber; for (j = cby0; j < cby1; j++) { for (i = cbx0; i < cbx1; i++) { codeblock = { cbx: i, cby: j, tbx0: codeblockWidth * i, tby0: codeblockHeight * j, tbx1: codeblockWidth * (i + 1), tby1: codeblockHeight * (j + 1) }; codeblock.tbx0_ = Math.max(subband.tbx0, codeblock.tbx0); codeblock.tby0_ = Math.max(subband.tby0, codeblock.tby0); codeblock.tbx1_ = Math.min(subband.tbx1, codeblock.tbx1); codeblock.tby1_ = Math.min(subband.tby1, codeblock.tby1); const pi = Math.floor((codeblock.tbx0_ - subband.tbx0) / precinctParameters.precinctWidthInSubband); const pj = Math.floor((codeblock.tby0_ - subband.tby0) / precinctParameters.precinctHeightInSubband); precinctNumber = pi + pj * precinctParameters.numprecinctswide; codeblock.precinctNumber = precinctNumber; codeblock.subbandType = subband.type; codeblock.Lblock = 3; if (codeblock.tbx1_ <= codeblock.tbx0_ || codeblock.tby1_ <= codeblock.tby0_) { continue; } codeblocks.push(codeblock); let precinct = precincts[precinctNumber]; if (precinct !== undefined) { if (i < precinct.cbxMin) { precinct.cbxMin = i; } else if (i > precinct.cbxMax) { precinct.cbxMax = i; } if (j < precinct.cbyMin) { precinct.cbxMin = j; } else if (j > precinct.cbyMax) { precinct.cbyMax = j; } } else { precincts[precinctNumber] = precinct = { cbxMin: i, cbyMin: j, cbxMax: i, cbyMax: j }; } codeblock.precinct = precinct; } } subband.codeblockParameters = { codeblockWidth: xcb_, codeblockHeight: ycb_, numcodeblockwide: cbx1 - cbx0 + 1, numcodeblockhigh: cby1 - cby0 + 1 }; subband.codeblocks = codeblocks; subband.precincts = precincts; } function createPacket(resolution, precinctNumber, layerNumber) { const precinctCodeblocks = []; const subbands = resolution.subbands; for (let i = 0, ii = subbands.length; i < ii; i++) { const subband = subbands[i]; const codeblocks = subband.codeblocks; for (let j = 0, jj = codeblocks.length; j < jj; j++) { const codeblock = codeblocks[j]; if (codeblock.precinctNumber !== precinctNumber) { continue; } precinctCodeblocks.push(codeblock); } } return { layerNumber, codeblocks: precinctCodeblocks }; } function LayerResolutionComponentPositionIterator(context) { const siz = context.SIZ; const tileIndex = context.currentTile.index; const tile = context.tiles[tileIndex]; const layersCount = tile.codingStyleDefaultParameters.layersCount; const componentsCount = siz.Csiz; let maxDecompositionLevelsCount = 0; for (let q = 0; q < componentsCount; q++) { maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, tile.components[q].codingStyleParameters.decompositionLevelsCount); } let l = 0, r = 0, i = 0, k = 0; this.nextPacket = function JpxImage_nextPacket() { for (; l < layersCount; l++) { for (; r <= maxDecompositionLevelsCount; r++) { for (; i < componentsCount; i++) { const component = tile.components[i]; if (r > component.codingStyleParameters.decompositionLevelsCount) { continue; } const resolution = component.resolutions[r]; const numprecincts = resolution.precinctParameters.numprecincts; for (; k < numprecincts;) { const packet = createPacket(resolution, k, l); k++; return packet; } k = 0; } i = 0; } r = 0; } throw new JpxError("Out of packets"); }; } function ResolutionLayerComponentPositionIterator(context) { const siz = context.SIZ; const tileIndex = context.currentTile.index; const tile = context.tiles[tileIndex]; const layersCount = tile.codingStyleDefaultParameters.layersCount; const componentsCount = siz.Csiz; let maxDecompositionLevelsCount = 0; for (let q = 0; q < componentsCount; q++) { maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, tile.components[q].codingStyleParameters.decompositionLevelsCount); } let r = 0, l = 0, i = 0, k = 0; this.nextPacket = function JpxImage_nextPacket() { for (; r <= maxDecompositionLevelsCount; r++) { for (; l < layersCount; l++) { for (; i < componentsCount; i++) { const component = tile.components[i]; if (r > component.codingStyleParameters.decompositionLevelsCount) { continue; } const resolution = component.resolutions[r]; const numprecincts = resolution.precinctParameters.numprecincts; for (; k < numprecincts;) { const packet = createPacket(resolution, k, l); k++; return packet; } k = 0; } i = 0; } l = 0; } throw new JpxError("Out of packets"); }; } function ResolutionPositionComponentLayerIterator(context) { const siz = context.SIZ; const tileIndex = context.currentTile.index; const tile = context.tiles[tileIndex]; const layersCount = tile.codingStyleDefaultParameters.layersCount; const componentsCount = siz.Csiz; let l, r, c, p; let maxDecompositionLevelsCount = 0; for (c = 0; c < componentsCount; c++) { const component = tile.components[c]; maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, component.codingStyleParameters.decompositionLevelsCount); } const maxNumPrecinctsInLevel = new Int32Array(maxDecompositionLevelsCount + 1); for (r = 0; r <= maxDecompositionLevelsCount; ++r) { let maxNumPrecincts = 0; for (c = 0; c < componentsCount; ++c) { const resolutions = tile.components[c].resolutions; if (r < resolutions.length) { maxNumPrecincts = Math.max(maxNumPrecincts, resolutions[r].precinctParameters.numprecincts); } } maxNumPrecinctsInLevel[r] = maxNumPrecincts; } l = 0; r = 0; c = 0; p = 0; this.nextPacket = function JpxImage_nextPacket() { for (; r <= maxDecompositionLevelsCount; r++) { for (; p < maxNumPrecinctsInLevel[r]; p++) { for (; c < componentsCount; c++) { const component = tile.components[c]; if (r > component.codingStyleParameters.decompositionLevelsCount) { continue; } const resolution = component.resolutions[r]; const numprecincts = resolution.precinctParameters.numprecincts; if (p >= numprecincts) { continue; } for (; l < layersCount;) { const packet = createPacket(resolution, p, l); l++; return packet; } l = 0; } c = 0; } p = 0; } throw new JpxError("Out of packets"); }; } function PositionComponentResolutionLayerIterator(context) { const siz = context.SIZ; const tileIndex = context.currentTile.index; const tile = context.tiles[tileIndex]; const layersCount = tile.codingStyleDefaultParameters.layersCount; const componentsCount = siz.Csiz; const precinctsSizes = getPrecinctSizesInImageScale(tile); const precinctsIterationSizes = precinctsSizes; let l = 0, r = 0, c = 0, px = 0, py = 0; this.nextPacket = function JpxImage_nextPacket() { for (; py < precinctsIterationSizes.maxNumHigh; py++) { for (; px < precinctsIterationSizes.maxNumWide; px++) { for (; c < componentsCount; c++) { const component = tile.components[c]; const decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount; for (; r <= decompositionLevelsCount; r++) { const resolution = component.resolutions[r]; const sizeInImageScale = precinctsSizes.components[c].resolutions[r]; const k = getPrecinctIndexIfExist(px, py, sizeInImageScale, precinctsIterationSizes, resolution); if (k === null) { continue; } for (; l < layersCount;) { const packet = createPacket(resolution, k, l); l++; return packet; } l = 0; } r = 0; } c = 0; } px = 0; } throw new JpxError("Out of packets"); }; } function ComponentPositionResolutionLayerIterator(context) { const siz = context.SIZ; const tileIndex = context.currentTile.index; const tile = context.tiles[tileIndex]; const layersCount = tile.codingStyleDefaultParameters.layersCount; const componentsCount = siz.Csiz; const precinctsSizes = getPrecinctSizesInImageScale(tile); let l = 0, r = 0, c = 0, px = 0, py = 0; this.nextPacket = function JpxImage_nextPacket() { for (; c < componentsCount; ++c) { const component = tile.components[c]; const precinctsIterationSizes = precinctsSizes.components[c]; const decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount; for (; py < precinctsIterationSizes.maxNumHigh; py++) { for (; px < precinctsIterationSizes.maxNumWide; px++) { for (; r <= decompositionLevelsCount; r++) { const resolution = component.resolutions[r]; const sizeInImageScale = precinctsIterationSizes.resolutions[r]; const k = getPrecinctIndexIfExist(px, py, sizeInImageScale, precinctsIterationSizes, resolution); if (k === null) { continue; } for (; l < layersCount;) { const packet = createPacket(resolution, k, l); l++; return packet; } l = 0; } r = 0; } px = 0; } py = 0; } throw new JpxError("Out of packets"); }; } function getPrecinctIndexIfExist(pxIndex, pyIndex, sizeInImageScale, precinctIterationSizes, resolution) { const posX = pxIndex * precinctIterationSizes.minWidth; const posY = pyIndex * precinctIterationSizes.minHeight; if (posX % sizeInImageScale.width !== 0 || posY % sizeInImageScale.height !== 0) { return null; } const startPrecinctRowIndex = posY / sizeInImageScale.width * resolution.precinctParameters.numprecinctswide; return posX / sizeInImageScale.height + startPrecinctRowIndex; } function getPrecinctSizesInImageScale(tile) { const componentsCount = tile.components.length; let minWidth = Number.MAX_VALUE; let minHeight = Number.MAX_VALUE; let maxNumWide = 0; let maxNumHigh = 0; const sizePerComponent = new Array(componentsCount); for (let c = 0; c < componentsCount; c++) { const component = tile.components[c]; const decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount; const sizePerResolution = new Array(decompositionLevelsCount + 1); let minWidthCurrentComponent = Number.MAX_VALUE; let minHeightCurrentComponent = Number.MAX_VALUE; let maxNumWideCurrentComponent = 0; let maxNumHighCurrentComponent = 0; let scale = 1; for (let r = decompositionLevelsCount; r >= 0; --r) { const resolution = component.resolutions[r]; const widthCurrentResolution = scale * resolution.precinctParameters.precinctWidth; const heightCurrentResolution = scale * resolution.precinctParameters.precinctHeight; minWidthCurrentComponent = Math.min(minWidthCurrentComponent, widthCurrentResolution); minHeightCurrentComponent = Math.min(minHeightCurrentComponent, heightCurrentResolution); maxNumWideCurrentComponent = Math.max(maxNumWideCurrentComponent, resolution.precinctParameters.numprecinctswide); maxNumHighCurrentComponent = Math.max(maxNumHighCurrentComponent, resolution.precinctParameters.numprecinctshigh); sizePerResolution[r] = { width: widthCurrentResolution, height: heightCurrentResolution }; scale <<= 1; } minWidth = Math.min(minWidth, minWidthCurrentComponent); minHeight = Math.min(minHeight, minHeightCurrentComponent); maxNumWide = Math.max(maxNumWide, maxNumWideCurrentComponent); maxNumHigh = Math.max(maxNumHigh, maxNumHighCurrentComponent); sizePerComponent[c] = { resolutions: sizePerResolution, minWidth: minWidthCurrentComponent, minHeight: minHeightCurrentComponent, maxNumWide: maxNumWideCurrentComponent, maxNumHigh: maxNumHighCurrentComponent }; } return { components: sizePerComponent, minWidth, minHeight, maxNumWide, maxNumHigh }; } function buildPackets(context) { const siz = context.SIZ; const tileIndex = context.currentTile.index; const tile = context.tiles[tileIndex]; const componentsCount = siz.Csiz; for (let c = 0; c < componentsCount; c++) { const component = tile.components[c]; const decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount; const resolutions = []; const subbands = []; for (let r = 0; r <= decompositionLevelsCount; r++) { const blocksDimensions = getBlocksDimensions(context, component, r); const resolution = {}; const scale = 1 << decompositionLevelsCount - r; resolution.trx0 = Math.ceil(component.tcx0 / scale); resolution.try0 = Math.ceil(component.tcy0 / scale); resolution.trx1 = Math.ceil(component.tcx1 / scale); resolution.try1 = Math.ceil(component.tcy1 / scale); resolution.resLevel = r; buildPrecincts(context, resolution, blocksDimensions); resolutions.push(resolution); let subband; if (r === 0) { subband = {}; subband.type = "LL"; subband.tbx0 = Math.ceil(component.tcx0 / scale); subband.tby0 = Math.ceil(component.tcy0 / scale); subband.tbx1 = Math.ceil(component.tcx1 / scale); subband.tby1 = Math.ceil(component.tcy1 / scale); subband.resolution = resolution; buildCodeblocks(context, subband, blocksDimensions); subbands.push(subband); resolution.subbands = [subband]; } else { const bscale = 1 << decompositionLevelsCount - r + 1; const resolutionSubbands = []; subband = {}; subband.type = "HL"; subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5); subband.tby0 = Math.ceil(component.tcy0 / bscale); subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5); subband.tby1 = Math.ceil(component.tcy1 / bscale); subband.resolution = resolution; buildCodeblocks(context, subband, blocksDimensions); subbands.push(subband); resolutionSubbands.push(subband); subband = {}; subband.type = "LH"; subband.tbx0 = Math.ceil(component.tcx0 / bscale); subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5); subband.tbx1 = Math.ceil(component.tcx1 / bscale); subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5); subband.resolution = resolution; buildCodeblocks(context, subband, blocksDimensions); subbands.push(subband); resolutionSubbands.push(subband); subband = {}; subband.type = "HH"; subband.tbx0 = Math.ceil(component.tcx0 / bscale - 0.5); subband.tby0 = Math.ceil(component.tcy0 / bscale - 0.5); subband.tbx1 = Math.ceil(component.tcx1 / bscale - 0.5); subband.tby1 = Math.ceil(component.tcy1 / bscale - 0.5); subband.resolution = resolution; buildCodeblocks(context, subband, blocksDimensions); subbands.push(subband); resolutionSubbands.push(subband); resolution.subbands = resolutionSubbands; } } component.resolutions = resolutions; component.subbands = subbands; } const progressionOrder = tile.codingStyleDefaultParameters.progressionOrder; switch (progressionOrder) { case 0: tile.packetsIterator = new LayerResolutionComponentPositionIterator(context); break; case 1: tile.packetsIterator = new ResolutionLayerComponentPositionIterator(context); break; case 2: tile.packetsIterator = new ResolutionPositionComponentLayerIterator(context); break; case 3: tile.packetsIterator = new PositionComponentResolutionLayerIterator(context); break; case 4: tile.packetsIterator = new ComponentPositionResolutionLayerIterator(context); break; default: throw new JpxError(`Unsupported progression order ${progressionOrder}`); } } function parseTilePackets(context, data, offset, dataLength) { let position = 0; let buffer, bufferSize = 0, skipNextBit = false; function readBits(count) { while (bufferSize < count) { const b = data[offset + position]; position++; if (skipNextBit) { buffer = buffer << 7 | b; bufferSize += 7; skipNextBit = false; } else { buffer = buffer << 8 | b; bufferSize += 8; } if (b === 0xff) { skipNextBit = true; } } bufferSize -= count; return buffer >>> bufferSize & (1 << count) - 1; } function skipMarkerIfEqual(value) { if (data[offset + position - 1] === 0xff && data[offset + position] === value) { skipBytes(1); return true; } else if (data[offset + position] === 0xff && data[offset + position + 1] === value) { skipBytes(2); return true; } return false; } function skipBytes(count) { position += count; } function alignToByte() { bufferSize = 0; if (skipNextBit) { position++; skipNextBit = false; } } function readCodingpasses() { if (readBits(1) === 0) { return 1; } if (readBits(1) === 0) { return 2; } let value = readBits(2); if (value < 3) { return value + 3; } value = readBits(5); if (value < 31) { return value + 6; } value = readBits(7); return value + 37; } const tileIndex = context.currentTile.index; const tile = context.tiles[tileIndex]; const sopMarkerUsed = context.COD.sopMarkerUsed; const ephMarkerUsed = context.COD.ephMarkerUsed; const packetsIterator = tile.packetsIterator; while (position < dataLength) { alignToByte(); if (sopMarkerUsed && skipMarkerIfEqual(0x91)) { skipBytes(4); } const packet = packetsIterator.nextPacket(); if (!readBits(1)) { continue; } const layerNumber = packet.layerNumber, queue = []; let codeblock; for (let i = 0, ii = packet.codeblocks.length; i < ii; i++) { codeblock = packet.codeblocks[i]; let precinct = codeblock.precinct; const codeblockColumn = codeblock.cbx - precinct.cbxMin; const codeblockRow = codeblock.cby - precinct.cbyMin; let codeblockIncluded = false; let firstTimeInclusion = false; let valueReady, zeroBitPlanesTree; if (codeblock.included !== undefined) { codeblockIncluded = !!readBits(1); } else { precinct = codeblock.precinct; let inclusionTree; if (precinct.inclusionTree !== undefined) { inclusionTree = precinct.inclusionTree; } else { const width = precinct.cbxMax - precinct.cbxMin + 1; const height = precinct.cbyMax - precinct.cbyMin + 1; inclusionTree = new InclusionTree(width, height, layerNumber); zeroBitPlanesTree = new TagTree(width, height); precinct.inclusionTree = inclusionTree; precinct.zeroBitPlanesTree = zeroBitPlanesTree; for (let l = 0; l < layerNumber; l++) { if (readBits(1) !== 0) { throw new JpxError("Invalid tag tree"); } } } if (inclusionTree.reset(codeblockColumn, codeblockRow, layerNumber)) { while (true) { if (readBits(1)) { valueReady = !inclusionTree.nextLevel(); if (valueReady) { codeblock.included = true; codeblockIncluded = firstTimeInclusion = true; break; } } else { inclusionTree.incrementValue(layerNumber); break; } } } } if (!codeblockIncluded) { continue; } if (firstTimeInclusion) { zeroBitPlanesTree = precinct.zeroBitPlanesTree; zeroBitPlanesTree.reset(codeblockColumn, codeblockRow); while (true) { if (readBits(1)) { valueReady = !zeroBitPlanesTree.nextLevel(); if (valueReady) { break; } } else { zeroBitPlanesTree.incrementValue(); } } codeblock.zeroBitPlanes = zeroBitPlanesTree.value; } const codingpasses = readCodingpasses(); while (readBits(1)) { codeblock.Lblock++; } const codingpassesLog2 = (0, _core_utils.log2)(codingpasses); const bits = (codingpasses < 1 << codingpassesLog2 ? codingpassesLog2 - 1 : codingpassesLog2) + codeblock.Lblock; const codedDataLength = readBits(bits); queue.push({ codeblock, codingpasses, dataLength: codedDataLength }); } alignToByte(); if (ephMarkerUsed) { skipMarkerIfEqual(0x92); } while (queue.length > 0) { const packetItem = queue.shift(); codeblock = packetItem.codeblock; if (codeblock.data === undefined) { codeblock.data = []; } codeblock.data.push({ data, start: offset + position, end: offset + position + packetItem.dataLength, codingpasses: packetItem.codingpasses }); position += packetItem.dataLength; } } return position; } function copyCoefficients(coefficients, levelWidth, levelHeight, subband, delta, mb, reversible, segmentationSymbolUsed) { const x0 = subband.tbx0; const y0 = subband.tby0; const width = subband.tbx1 - subband.tbx0; const codeblocks = subband.codeblocks; const right = subband.type.charAt(0) === "H" ? 1 : 0; const bottom = subband.type.charAt(1) === "H" ? levelWidth : 0; for (let i = 0, ii = codeblocks.length; i < ii; ++i) { const codeblock = codeblocks[i]; const blockWidth = codeblock.tbx1_ - codeblock.tbx0_; const blockHeight = codeblock.tby1_ - codeblock.tby0_; if (blockWidth === 0 || blockHeight === 0) { continue; } if (codeblock.data === undefined) { continue; } const bitModel = new BitModel(blockWidth, blockHeight, codeblock.subbandType, codeblock.zeroBitPlanes, mb); let currentCodingpassType = 2; const data = codeblock.data; let totalLength = 0, codingpasses = 0; let j, jj, dataItem; for (j = 0, jj = data.length; j < jj; j++) { dataItem = data[j]; totalLength += dataItem.end - dataItem.start; codingpasses += dataItem.codingpasses; } const encodedData = new Uint8Array(totalLength); let position = 0; for (j = 0, jj = data.length; j < jj; j++) { dataItem = data[j]; const chunk = dataItem.data.subarray(dataItem.start, dataItem.end); encodedData.set(chunk, position); position += chunk.length; } const decoder = new _arithmetic_decoder.ArithmeticDecoder(encodedData, 0, totalLength); bitModel.setDecoder(decoder); for (j = 0; j < codingpasses; j++) { switch (currentCodingpassType) { case 0: bitModel.runSignificancePropagationPass(); break; case 1: bitModel.runMagnitudeRefinementPass(); break; case 2: bitModel.runCleanupPass(); if (segmentationSymbolUsed) { bitModel.checkSegmentationSymbol(); } break; } currentCodingpassType = (currentCodingpassType + 1) % 3; } let offset = codeblock.tbx0_ - x0 + (codeblock.tby0_ - y0) * width; const sign = bitModel.coefficentsSign; const magnitude = bitModel.coefficentsMagnitude; const bitsDecoded = bitModel.bitsDecoded; const magnitudeCorrection = reversible ? 0 : 0.5; let k, n, nb; position = 0; const interleave = subband.type !== "LL"; for (j = 0; j < blockHeight; j++) { const row = offset / width | 0; const levelOffset = 2 * row * (levelWidth - width) + right + bottom; for (k = 0; k < blockWidth; k++) { n = magnitude[position]; if (n !== 0) { n = (n + magnitudeCorrection) * delta; if (sign[position] !== 0) { n = -n; } nb = bitsDecoded[position]; const pos = interleave ? levelOffset + (offset << 1) : offset; if (reversible && nb >= mb) { coefficients[pos] = n; } else { coefficients[pos] = n * (1 << mb - nb); } } offset++; position++; } offset += width - blockWidth; } } } function transformTile(context, tile, c) { const component = tile.components[c]; const codingStyleParameters = component.codingStyleParameters; const quantizationParameters = component.quantizationParameters; const decompositionLevelsCount = codingStyleParameters.decompositionLevelsCount; const spqcds = quantizationParameters.SPqcds; const scalarExpounded = quantizationParameters.scalarExpounded; const guardBits = quantizationParameters.guardBits; const segmentationSymbolUsed = codingStyleParameters.segmentationSymbolUsed; const precision = context.components[c].precision; const reversible = codingStyleParameters.reversibleTransformation; const transform = reversible ? new ReversibleTransform() : new IrreversibleTransform(); const subbandCoefficients = []; let b = 0; for (let i = 0; i <= decompositionLevelsCount; i++) { const resolution = component.resolutions[i]; const width = resolution.trx1 - resolution.trx0; const height = resolution.try1 - resolution.try0; const coefficients = new Float32Array(width * height); for (let j = 0, jj = resolution.subbands.length; j < jj; j++) { let mu, epsilon; if (!scalarExpounded) { mu = spqcds[0].mu; epsilon = spqcds[0].epsilon + (i > 0 ? 1 - i : 0); } else { mu = spqcds[b].mu; epsilon = spqcds[b].epsilon; b++; } const subband = resolution.subbands[j]; const gainLog2 = SubbandsGainLog2[subband.type]; const delta = reversible ? 1 : 2 ** (precision + gainLog2 - epsilon) * (1 + mu / 2048); const mb = guardBits + epsilon - 1; copyCoefficients(coefficients, width, height, subband, delta, mb, reversible, segmentationSymbolUsed); } subbandCoefficients.push({ width, height, items: coefficients }); } const result = transform.calculate(subbandCoefficients, component.tcx0, component.tcy0); return { left: component.tcx0, top: component.tcy0, width: result.width, height: result.height, items: result.items }; } function transformComponents(context) { const siz = context.SIZ; const components = context.components; const componentsCount = siz.Csiz; const resultImages = []; for (let i = 0, ii = context.tiles.length; i < ii; i++) { const tile = context.tiles[i]; const transformedTiles = []; for (let c = 0; c < componentsCount; c++) { transformedTiles[c] = transformTile(context, tile, c); } const tile0 = transformedTiles[0]; const out = new Uint8ClampedArray(tile0.items.length * componentsCount); const result = { left: tile0.left, top: tile0.top, width: tile0.width, height: tile0.height, items: out }; let shift, offset; let pos = 0, j, jj, y0, y1, y2; if (tile.codingStyleDefaultParameters.multipleComponentTransform) { const fourComponents = componentsCount === 4; const y0items = transformedTiles[0].items; const y1items = transformedTiles[1].items; const y2items = transformedTiles[2].items; const y3items = fourComponents ? transformedTiles[3].items : null; shift = components[0].precision - 8; offset = (128 << shift) + 0.5; const component0 = tile.components[0]; const alpha01 = componentsCount - 3; jj = y0items.length; if (!component0.codingStyleParameters.reversibleTransformation) { for (j = 0; j < jj; j++, pos += alpha01) { y0 = y0items[j] + offset; y1 = y1items[j]; y2 = y2items[j]; out[pos++] = y0 + 1.402 * y2 >> shift; out[pos++] = y0 - 0.34413 * y1 - 0.71414 * y2 >> shift; out[pos++] = y0 + 1.772 * y1 >> shift; } } else { for (j = 0; j < jj; j++, pos += alpha01) { y0 = y0items[j] + offset; y1 = y1items[j]; y2 = y2items[j]; const g = y0 - (y2 + y1 >> 2); out[pos++] = g + y2 >> shift; out[pos++] = g >> shift; out[pos++] = g + y1 >> shift; } } if (fourComponents) { for (j = 0, pos = 3; j < jj; j++, pos += 4) { out[pos] = y3items[j] + offset >> shift; } } } else { for (let c = 0; c < componentsCount; c++) { const items = transformedTiles[c].items; shift = components[c].precision - 8; offset = (128 << shift) + 0.5; for (pos = c, j = 0, jj = items.length; j < jj; j++) { out[pos] = items[j] + offset >> shift; pos += componentsCount; } } } resultImages.push(result); } return resultImages; } function initializeTile(context, tileIndex) { const siz = context.SIZ; const componentsCount = siz.Csiz; const tile = context.tiles[tileIndex]; for (let c = 0; c < componentsCount; c++) { const component = tile.components[c]; const qcdOrQcc = context.currentTile.QCC[c] !== undefined ? context.currentTile.QCC[c] : context.currentTile.QCD; component.quantizationParameters = qcdOrQcc; const codOrCoc = context.currentTile.COC[c] !== undefined ? context.currentTile.COC[c] : context.currentTile.COD; component.codingStyleParameters = codOrCoc; } tile.codingStyleDefaultParameters = context.currentTile.COD; } class TagTree { constructor(width, height) { const levelsLength = (0, _core_utils.log2)(Math.max(width, height)) + 1; this.levels = []; for (let i = 0; i < levelsLength; i++) { const level = { width, height, items: [] }; this.levels.push(level); width = Math.ceil(width / 2); height = Math.ceil(height / 2); } } reset(i, j) { let currentLevel = 0, value = 0, level; while (currentLevel < this.levels.length) { level = this.levels[currentLevel]; const index = i + j * level.width; if (level.items[index] !== undefined) { value = level.items[index]; break; } level.index = index; i >>= 1; j >>= 1; currentLevel++; } currentLevel--; level = this.levels[currentLevel]; level.items[level.index] = value; this.currentLevel = currentLevel; delete this.value; } incrementValue() { const level = this.levels[this.currentLevel]; level.items[level.index]++; } nextLevel() { let currentLevel = this.currentLevel; let level = this.levels[currentLevel]; const value = level.items[level.index]; currentLevel--; if (currentLevel < 0) { this.value = value; return false; } this.currentLevel = currentLevel; level = this.levels[currentLevel]; level.items[level.index] = value; return true; } } class InclusionTree { constructor(width, height, defaultValue) { const levelsLength = (0, _core_utils.log2)(Math.max(width, height)) + 1; this.levels = []; for (let i = 0; i < levelsLength; i++) { const items = new Uint8Array(width * height); for (let j = 0, jj = items.length; j < jj; j++) { items[j] = defaultValue; } const level = { width, height, items }; this.levels.push(level); width = Math.ceil(width / 2); height = Math.ceil(height / 2); } } reset(i, j, stopValue) { let currentLevel = 0; while (currentLevel < this.levels.length) { const level = this.levels[currentLevel]; const index = i + j * level.width; level.index = index; const value = level.items[index]; if (value === 0xff) { break; } if (value > stopValue) { this.currentLevel = currentLevel; this.propagateValues(); return false; } i >>= 1; j >>= 1; currentLevel++; } this.currentLevel = currentLevel - 1; return true; } incrementValue(stopValue) { const level = this.levels[this.currentLevel]; level.items[level.index] = stopValue + 1; this.propagateValues(); } propagateValues() { let levelIndex = this.currentLevel; let level = this.levels[levelIndex]; const currentValue = level.items[level.index]; while (--levelIndex >= 0) { level = this.levels[levelIndex]; level.items[level.index] = currentValue; } } nextLevel() { let currentLevel = this.currentLevel; let level = this.levels[currentLevel]; const value = level.items[level.index]; level.items[level.index] = 0xff; currentLevel--; if (currentLevel < 0) { return false; } this.currentLevel = currentLevel; level = this.levels[currentLevel]; level.items[level.index] = value; return true; } } const BitModel = function BitModelClosure() { const UNIFORM_CONTEXT = 17; const RUNLENGTH_CONTEXT = 18; const LLAndLHContextsLabel = new Uint8Array([0, 5, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 1, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8, 0, 0, 0, 0, 0, 2, 6, 8, 0, 3, 7, 8, 0, 4, 7, 8]); const HLContextLabel = new Uint8Array([0, 3, 4, 0, 5, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 1, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8, 0, 0, 0, 0, 0, 2, 3, 4, 0, 6, 7, 7, 0, 8, 8, 8]); const HHContextLabel = new Uint8Array([0, 1, 2, 0, 1, 2, 2, 0, 2, 2, 2, 0, 0, 0, 0, 0, 3, 4, 5, 0, 4, 5, 5, 0, 5, 5, 5, 0, 0, 0, 0, 0, 6, 7, 7, 0, 7, 7, 7, 0, 7, 7, 7, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8, 0, 0, 0, 0, 0, 8, 8, 8, 0, 8, 8, 8, 0, 8, 8, 8]); class BitModel { constructor(width, height, subband, zeroBitPlanes, mb) { this.width = width; this.height = height; let contextLabelTable; if (subband === "HH") { contextLabelTable = HHContextLabel; } else if (subband === "HL") { contextLabelTable = HLContextLabel; } else { contextLabelTable = LLAndLHContextsLabel; } this.contextLabelTable = contextLabelTable; const coefficientCount = width * height; this.neighborsSignificance = new Uint8Array(coefficientCount); this.coefficentsSign = new Uint8Array(coefficientCount); let coefficentsMagnitude; if (mb > 14) { coefficentsMagnitude = new Uint32Array(coefficientCount); } else if (mb > 6) { coefficentsMagnitude = new Uint16Array(coefficientCount); } else { coefficentsMagnitude = new Uint8Array(coefficientCount); } this.coefficentsMagnitude = coefficentsMagnitude; this.processingFlags = new Uint8Array(coefficientCount); const bitsDecoded = new Uint8Array(coefficientCount); if (zeroBitPlanes !== 0) { for (let i = 0; i < coefficientCount; i++) { bitsDecoded[i] = zeroBitPlanes; } } this.bitsDecoded = bitsDecoded; this.reset(); } setDecoder(decoder) { this.decoder = decoder; } reset() { this.contexts = new Int8Array(19); this.contexts[0] = 4 << 1 | 0; this.contexts[UNIFORM_CONTEXT] = 46 << 1 | 0; this.contexts[RUNLENGTH_CONTEXT] = 3 << 1 | 0; } setNeighborsSignificance(row, column, index) { const neighborsSignificance = this.neighborsSignificance; const width = this.width, height = this.height; const left = column > 0; const right = column + 1 < width; let i; if (row > 0) { i = index - width; if (left) { neighborsSignificance[i - 1] += 0x10; } if (right) { neighborsSignificance[i + 1] += 0x10; } neighborsSignificance[i] += 0x04; } if (row + 1 < height) { i = index + width; if (left) { neighborsSignificance[i - 1] += 0x10; } if (right) { neighborsSignificance[i + 1] += 0x10; } neighborsSignificance[i] += 0x04; } if (left) { neighborsSignificance[index - 1] += 0x01; } if (right) { neighborsSignificance[index + 1] += 0x01; } neighborsSignificance[index] |= 0x80; } runSignificancePropagationPass() { const decoder = this.decoder; const width = this.width, height = this.height; const coefficentsMagnitude = this.coefficentsMagnitude; const coefficentsSign = this.coefficentsSign; const neighborsSignificance = this.neighborsSignificance; const processingFlags = this.processingFlags; const contexts = this.contexts; const labels = this.contextLabelTable; const bitsDecoded = this.bitsDecoded; const processedInverseMask = ~1; const processedMask = 1; const firstMagnitudeBitMask = 2; for (let i0 = 0; i0 < height; i0 += 4) { for (let j = 0; j < width; j++) { let index = i0 * width + j; for (let i1 = 0; i1 < 4; i1++, index += width) { const i = i0 + i1; if (i >= height) { break; } processingFlags[index] &= processedInverseMask; if (coefficentsMagnitude[index] || !neighborsSignificance[index]) { continue; } const contextLabel = labels[neighborsSignificance[index]]; const decision = decoder.readBit(contexts, contextLabel); if (decision) { const sign = this.decodeSignBit(i, j, index); coefficentsSign[index] = sign; coefficentsMagnitude[index] = 1; this.setNeighborsSignificance(i, j, index); processingFlags[index] |= firstMagnitudeBitMask; } bitsDecoded[index]++; processingFlags[index] |= processedMask; } } } } decodeSignBit(row, column, index) { const width = this.width, height = this.height; const coefficentsMagnitude = this.coefficentsMagnitude; const coefficentsSign = this.coefficentsSign; let contribution, sign0, sign1, significance1; let contextLabel, decoded; significance1 = column > 0 && coefficentsMagnitude[index - 1] !== 0; if (column + 1 < width && coefficentsMagnitude[index + 1] !== 0) { sign1 = coefficentsSign[index + 1]; if (significance1) { sign0 = coefficentsSign[index - 1]; contribution = 1 - sign1 - sign0; } else { contribution = 1 - sign1 - sign1; } } else if (significance1) { sign0 = coefficentsSign[index - 1]; contribution = 1 - sign0 - sign0; } else { contribution = 0; } const horizontalContribution = 3 * contribution; significance1 = row > 0 && coefficentsMagnitude[index - width] !== 0; if (row + 1 < height && coefficentsMagnitude[index + width] !== 0) { sign1 = coefficentsSign[index + width]; if (significance1) { sign0 = coefficentsSign[index - width]; contribution = 1 - sign1 - sign0 + horizontalContribution; } else { contribution = 1 - sign1 - sign1 + horizontalContribution; } } else if (significance1) { sign0 = coefficentsSign[index - width]; contribution = 1 - sign0 - sign0 + horizontalContribution; } else { contribution = horizontalContribution; } if (contribution >= 0) { contextLabel = 9 + contribution; decoded = this.decoder.readBit(this.contexts, contextLabel); } else { contextLabel = 9 - contribution; decoded = this.decoder.readBit(this.contexts, contextLabel) ^ 1; } return decoded; } runMagnitudeRefinementPass() { const decoder = this.decoder; const width = this.width, height = this.height; const coefficentsMagnitude = this.coefficentsMagnitude; const neighborsSignificance = this.neighborsSignificance; const contexts = this.contexts; const bitsDecoded = this.bitsDecoded; const processingFlags = this.processingFlags; const processedMask = 1; const firstMagnitudeBitMask = 2; const length = width * height; const width4 = width * 4; for (let index0 = 0, indexNext; index0 < length; index0 = indexNext) { indexNext = Math.min(length, index0 + width4); for (let j = 0; j < width; j++) { for (let index = index0 + j; index < indexNext; index += width) { if (!coefficentsMagnitude[index] || (processingFlags[index] & processedMask) !== 0) { continue; } let contextLabel = 16; if ((processingFlags[index] & firstMagnitudeBitMask) !== 0) { processingFlags[index] ^= firstMagnitudeBitMask; const significance = neighborsSignificance[index] & 127; contextLabel = significance === 0 ? 15 : 14; } const bit = decoder.readBit(contexts, contextLabel); coefficentsMagnitude[index] = coefficentsMagnitude[index] << 1 | bit; bitsDecoded[index]++; processingFlags[index] |= processedMask; } } } } runCleanupPass() { const decoder = this.decoder; const width = this.width, height = this.height; const neighborsSignificance = this.neighborsSignificance; const coefficentsMagnitude = this.coefficentsMagnitude; const coefficentsSign = this.coefficentsSign; const contexts = this.contexts; const labels = this.contextLabelTable; const bitsDecoded = this.bitsDecoded; const processingFlags = this.processingFlags; const processedMask = 1; const firstMagnitudeBitMask = 2; const oneRowDown = width; const twoRowsDown = width * 2; const threeRowsDown = width * 3; let iNext; for (let i0 = 0; i0 < height; i0 = iNext) { iNext = Math.min(i0 + 4, height); const indexBase = i0 * width; const checkAllEmpty = i0 + 3 < height; for (let j = 0; j < width; j++) { const index0 = indexBase + j; const allEmpty = checkAllEmpty && processingFlags[index0] === 0 && processingFlags[index0 + oneRowDown] === 0 && processingFlags[index0 + twoRowsDown] === 0 && processingFlags[index0 + threeRowsDown] === 0 && neighborsSignificance[index0] === 0 && neighborsSignificance[index0 + oneRowDown] === 0 && neighborsSignificance[index0 + twoRowsDown] === 0 && neighborsSignificance[index0 + threeRowsDown] === 0; let i1 = 0, index = index0; let i = i0, sign; if (allEmpty) { const hasSignificantCoefficent = decoder.readBit(contexts, RUNLENGTH_CONTEXT); if (!hasSignificantCoefficent) { bitsDecoded[index0]++; bitsDecoded[index0 + oneRowDown]++; bitsDecoded[index0 + twoRowsDown]++; bitsDecoded[index0 + threeRowsDown]++; continue; } i1 = decoder.readBit(contexts, UNIFORM_CONTEXT) << 1 | decoder.readBit(contexts, UNIFORM_CONTEXT); if (i1 !== 0) { i = i0 + i1; index += i1 * width; } sign = this.decodeSignBit(i, j, index); coefficentsSign[index] = sign; coefficentsMagnitude[index] = 1; this.setNeighborsSignificance(i, j, index); processingFlags[index] |= firstMagnitudeBitMask; index = index0; for (let i2 = i0; i2 <= i; i2++, index += width) { bitsDecoded[index]++; } i1++; } for (i = i0 + i1; i < iNext; i++, index += width) { if (coefficentsMagnitude[index] || (processingFlags[index] & processedMask) !== 0) { continue; } const contextLabel = labels[neighborsSignificance[index]]; const decision = decoder.readBit(contexts, contextLabel); if (decision === 1) { sign = this.decodeSignBit(i, j, index); coefficentsSign[index] = sign; coefficentsMagnitude[index] = 1; this.setNeighborsSignificance(i, j, index); processingFlags[index] |= firstMagnitudeBitMask; } bitsDecoded[index]++; } } } } checkSegmentationSymbol() { const decoder = this.decoder; const contexts = this.contexts; const symbol = decoder.readBit(contexts, UNIFORM_CONTEXT) << 3 | decoder.readBit(contexts, UNIFORM_CONTEXT) << 2 | decoder.readBit(contexts, UNIFORM_CONTEXT) << 1 | decoder.readBit(contexts, UNIFORM_CONTEXT); if (symbol !== 0xa) { throw new JpxError("Invalid segmentation symbol"); } } } return BitModel; }(); class Transform { constructor() { if (this.constructor === Transform) { (0, _util.unreachable)("Cannot initialize Transform."); } } calculate(subbands, u0, v0) { let ll = subbands[0]; for (let i = 1, ii = subbands.length; i < ii; i++) { ll = this.iterate(ll, subbands[i], u0, v0); } return ll; } extend(buffer, offset, size) { let i1 = offset - 1, j1 = offset + 1; let i2 = offset + size - 2, j2 = offset + size; buffer[i1--] = buffer[j1++]; buffer[j2++] = buffer[i2--]; buffer[i1--] = buffer[j1++]; buffer[j2++] = buffer[i2--]; buffer[i1--] = buffer[j1++]; buffer[j2++] = buffer[i2--]; buffer[i1] = buffer[j1]; buffer[j2] = buffer[i2]; } filter(x, offset, length) { (0, _util.unreachable)("Abstract method `filter` called"); } iterate(ll, hl_lh_hh, u0, v0) { const llWidth = ll.width, llHeight = ll.height; let llItems = ll.items; const width = hl_lh_hh.width; const height = hl_lh_hh.height; const items = hl_lh_hh.items; let i, j, k, l, u, v; for (k = 0, i = 0; i < llHeight; i++) { l = i * 2 * width; for (j = 0; j < llWidth; j++, k++, l += 2) { items[l] = llItems[k]; } } llItems = ll.items = null; const bufferPadding = 4; const rowBuffer = new Float32Array(width + 2 * bufferPadding); if (width === 1) { if ((u0 & 1) !== 0) { for (v = 0, k = 0; v < height; v++, k += width) { items[k] *= 0.5; } } } else { for (v = 0, k = 0; v < height; v++, k += width) { rowBuffer.set(items.subarray(k, k + width), bufferPadding); this.extend(rowBuffer, bufferPadding, width); this.filter(rowBuffer, bufferPadding, width); items.set(rowBuffer.subarray(bufferPadding, bufferPadding + width), k); } } let numBuffers = 16; const colBuffers = []; for (i = 0; i < numBuffers; i++) { colBuffers.push(new Float32Array(height + 2 * bufferPadding)); } let b, currentBuffer = 0; ll = bufferPadding + height; if (height === 1) { if ((v0 & 1) !== 0) { for (u = 0; u < width; u++) { items[u] *= 0.5; } } } else { for (u = 0; u < width; u++) { if (currentBuffer === 0) { numBuffers = Math.min(width - u, numBuffers); for (k = u, l = bufferPadding; l < ll; k += width, l++) { for (b = 0; b < numBuffers; b++) { colBuffers[b][l] = items[k + b]; } } currentBuffer = numBuffers; } currentBuffer--; const buffer = colBuffers[currentBuffer]; this.extend(buffer, bufferPadding, height); this.filter(buffer, bufferPadding, height); if (currentBuffer === 0) { k = u - numBuffers + 1; for (l = bufferPadding; l < ll; k += width, l++) { for (b = 0; b < numBuffers; b++) { items[k + b] = colBuffers[b][l]; } } } } } return { width, height, items }; } } class IrreversibleTransform extends Transform { filter(x, offset, length) { const len = length >> 1; offset |= 0; let j, n, current, next; const alpha = -1.586134342059924; const beta = -0.052980118572961; const gamma = 0.882911075530934; const delta = 0.443506852043971; const K = 1.230174104914001; const K_ = 1 / K; j = offset - 3; for (n = len + 4; n--; j += 2) { x[j] *= K_; } j = offset - 2; current = delta * x[j - 1]; for (n = len + 3; n--; j += 2) { next = delta * x[j + 1]; x[j] = K * x[j] - current - next; if (n--) { j += 2; current = delta * x[j + 1]; x[j] = K * x[j] - current - next; } else { break; } } j = offset - 1; current = gamma * x[j - 1]; for (n = len + 2; n--; j += 2) { next = gamma * x[j + 1]; x[j] -= current + next; if (n--) { j += 2; current = gamma * x[j + 1]; x[j] -= current + next; } else { break; } } j = offset; current = beta * x[j - 1]; for (n = len + 1; n--; j += 2) { next = beta * x[j + 1]; x[j] -= current + next; if (n--) { j += 2; current = beta * x[j + 1]; x[j] -= current + next; } else { break; } } if (len !== 0) { j = offset + 1; current = alpha * x[j - 1]; for (n = len; n--; j += 2) { next = alpha * x[j + 1]; x[j] -= current + next; if (n--) { j += 2; current = alpha * x[j + 1]; x[j] -= current + next; } else { break; } } } } } class ReversibleTransform extends Transform { filter(x, offset, length) { const len = length >> 1; offset |= 0; let j, n; for (j = offset, n = len + 1; n--; j += 2) { x[j] -= x[j - 1] + x[j + 1] + 2 >> 2; } for (j = offset + 1, n = len; n--; j += 2) { x[j] += x[j - 1] + x[j + 1] >> 1; } } } /***/ }), /* 41 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.LZWStream = void 0; var _decode_stream = __w_pdfjs_require__(29); class LZWStream extends _decode_stream.DecodeStream { constructor(str, maybeLength, earlyChange) { super(maybeLength); this.str = str; this.dict = str.dict; this.cachedData = 0; this.bitsCached = 0; const maxLzwDictionarySize = 4096; const lzwState = { earlyChange, codeLength: 9, nextCode: 258, dictionaryValues: new Uint8Array(maxLzwDictionarySize), dictionaryLengths: new Uint16Array(maxLzwDictionarySize), dictionaryPrevCodes: new Uint16Array(maxLzwDictionarySize), currentSequence: new Uint8Array(maxLzwDictionarySize), currentSequenceLength: 0 }; for (let i = 0; i < 256; ++i) { lzwState.dictionaryValues[i] = i; lzwState.dictionaryLengths[i] = 1; } this.lzwState = lzwState; } readBits(n) { let bitsCached = this.bitsCached; let cachedData = this.cachedData; while (bitsCached < n) { const c = this.str.getByte(); if (c === -1) { this.eof = true; return null; } cachedData = cachedData << 8 | c; bitsCached += 8; } this.bitsCached = bitsCached -= n; this.cachedData = cachedData; this.lastCode = null; return cachedData >>> bitsCached & (1 << n) - 1; } readBlock() { const blockSize = 512, decodedSizeDelta = blockSize; let estimatedDecodedSize = blockSize * 2; let i, j, q; const lzwState = this.lzwState; if (!lzwState) { return; } const earlyChange = lzwState.earlyChange; let nextCode = lzwState.nextCode; const dictionaryValues = lzwState.dictionaryValues; const dictionaryLengths = lzwState.dictionaryLengths; const dictionaryPrevCodes = lzwState.dictionaryPrevCodes; let codeLength = lzwState.codeLength; let prevCode = lzwState.prevCode; const currentSequence = lzwState.currentSequence; let currentSequenceLength = lzwState.currentSequenceLength; let decodedLength = 0; let currentBufferLength = this.bufferLength; let buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize); for (i = 0; i < blockSize; i++) { const code = this.readBits(codeLength); const hasPrev = currentSequenceLength > 0; if (code < 256) { currentSequence[0] = code; currentSequenceLength = 1; } else if (code >= 258) { if (code < nextCode) { currentSequenceLength = dictionaryLengths[code]; for (j = currentSequenceLength - 1, q = code; j >= 0; j--) { currentSequence[j] = dictionaryValues[q]; q = dictionaryPrevCodes[q]; } } else { currentSequence[currentSequenceLength++] = currentSequence[0]; } } else if (code === 256) { codeLength = 9; nextCode = 258; currentSequenceLength = 0; continue; } else { this.eof = true; delete this.lzwState; break; } if (hasPrev) { dictionaryPrevCodes[nextCode] = prevCode; dictionaryLengths[nextCode] = dictionaryLengths[prevCode] + 1; dictionaryValues[nextCode] = currentSequence[0]; nextCode++; codeLength = nextCode + earlyChange & nextCode + earlyChange - 1 ? codeLength : Math.min(Math.log(nextCode + earlyChange) / 0.6931471805599453 + 1, 12) | 0; } prevCode = code; decodedLength += currentSequenceLength; if (estimatedDecodedSize < decodedLength) { do { estimatedDecodedSize += decodedSizeDelta; } while (estimatedDecodedSize < decodedLength); buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize); } for (j = 0; j < currentSequenceLength; j++) { buffer[currentBufferLength++] = currentSequence[j]; } } lzwState.nextCode = nextCode; lzwState.codeLength = codeLength; lzwState.prevCode = prevCode; lzwState.currentSequenceLength = currentSequenceLength; this.bufferLength = currentBufferLength; } } exports.LZWStream = LZWStream; /***/ }), /* 42 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PredictorStream = void 0; var _decode_stream = __w_pdfjs_require__(29); var _util = __w_pdfjs_require__(2); var _primitives = __w_pdfjs_require__(5); class PredictorStream extends _decode_stream.DecodeStream { constructor(str, maybeLength, params) { super(maybeLength); if (!(0, _primitives.isDict)(params)) { return str; } const predictor = this.predictor = params.get("Predictor") || 1; if (predictor <= 1) { return str; } if (predictor !== 2 && (predictor < 10 || predictor > 15)) { throw new _util.FormatError(`Unsupported predictor: ${predictor}`); } if (predictor === 2) { this.readBlock = this.readBlockTiff; } else { this.readBlock = this.readBlockPng; } this.str = str; this.dict = str.dict; const colors = this.colors = params.get("Colors") || 1; const bits = this.bits = params.get("BPC", "BitsPerComponent") || 8; const columns = this.columns = params.get("Columns") || 1; this.pixBytes = colors * bits + 7 >> 3; this.rowBytes = columns * colors * bits + 7 >> 3; return this; } readBlockTiff() { const rowBytes = this.rowBytes; const bufferLength = this.bufferLength; const buffer = this.ensureBuffer(bufferLength + rowBytes); const bits = this.bits; const colors = this.colors; const rawBytes = this.str.getBytes(rowBytes); this.eof = !rawBytes.length; if (this.eof) { return; } let inbuf = 0, outbuf = 0; let inbits = 0, outbits = 0; let pos = bufferLength; let i; if (bits === 1 && colors === 1) { for (i = 0; i < rowBytes; ++i) { let c = rawBytes[i] ^ inbuf; c ^= c >> 1; c ^= c >> 2; c ^= c >> 4; inbuf = (c & 1) << 7; buffer[pos++] = c; } } else if (bits === 8) { for (i = 0; i < colors; ++i) { buffer[pos++] = rawBytes[i]; } for (; i < rowBytes; ++i) { buffer[pos] = buffer[pos - colors] + rawBytes[i]; pos++; } } else if (bits === 16) { const bytesPerPixel = colors * 2; for (i = 0; i < bytesPerPixel; ++i) { buffer[pos++] = rawBytes[i]; } for (; i < rowBytes; i += 2) { const sum = ((rawBytes[i] & 0xff) << 8) + (rawBytes[i + 1] & 0xff) + ((buffer[pos - bytesPerPixel] & 0xff) << 8) + (buffer[pos - bytesPerPixel + 1] & 0xff); buffer[pos++] = sum >> 8 & 0xff; buffer[pos++] = sum & 0xff; } } else { const compArray = new Uint8Array(colors + 1); const bitMask = (1 << bits) - 1; let j = 0, k = bufferLength; const columns = this.columns; for (i = 0; i < columns; ++i) { for (let kk = 0; kk < colors; ++kk) { if (inbits < bits) { inbuf = inbuf << 8 | rawBytes[j++] & 0xff; inbits += 8; } compArray[kk] = compArray[kk] + (inbuf >> inbits - bits) & bitMask; inbits -= bits; outbuf = outbuf << bits | compArray[kk]; outbits += bits; if (outbits >= 8) { buffer[k++] = outbuf >> outbits - 8 & 0xff; outbits -= 8; } } } if (outbits > 0) { buffer[k++] = (outbuf << 8 - outbits) + (inbuf & (1 << 8 - outbits) - 1); } } this.bufferLength += rowBytes; } readBlockPng() { const rowBytes = this.rowBytes; const pixBytes = this.pixBytes; const predictor = this.str.getByte(); const rawBytes = this.str.getBytes(rowBytes); this.eof = !rawBytes.length; if (this.eof) { return; } const bufferLength = this.bufferLength; const buffer = this.ensureBuffer(bufferLength + rowBytes); let prevRow = buffer.subarray(bufferLength - rowBytes, bufferLength); if (prevRow.length === 0) { prevRow = new Uint8Array(rowBytes); } let i, j = bufferLength, up, c; switch (predictor) { case 0: for (i = 0; i < rowBytes; ++i) { buffer[j++] = rawBytes[i]; } break; case 1: for (i = 0; i < pixBytes; ++i) { buffer[j++] = rawBytes[i]; } for (; i < rowBytes; ++i) { buffer[j] = buffer[j - pixBytes] + rawBytes[i] & 0xff; j++; } break; case 2: for (i = 0; i < rowBytes; ++i) { buffer[j++] = prevRow[i] + rawBytes[i] & 0xff; } break; case 3: for (i = 0; i < pixBytes; ++i) { buffer[j++] = (prevRow[i] >> 1) + rawBytes[i]; } for (; i < rowBytes; ++i) { buffer[j] = (prevRow[i] + buffer[j - pixBytes] >> 1) + rawBytes[i] & 0xff; j++; } break; case 4: for (i = 0; i < pixBytes; ++i) { up = prevRow[i]; c = rawBytes[i]; buffer[j++] = up + c; } for (; i < rowBytes; ++i) { up = prevRow[i]; const upLeft = prevRow[i - pixBytes]; const left = buffer[j - pixBytes]; const p = left + up - upLeft; let pa = p - left; if (pa < 0) { pa = -pa; } let pb = p - up; if (pb < 0) { pb = -pb; } let pc = p - upLeft; if (pc < 0) { pc = -pc; } c = rawBytes[i]; if (pa <= pb && pa <= pc) { buffer[j++] = left + c; } else if (pb <= pc) { buffer[j++] = up + c; } else { buffer[j++] = upLeft + c; } } break; default: throw new _util.FormatError(`Unsupported predictor: ${predictor}`); } this.bufferLength += rowBytes; } } exports.PredictorStream = PredictorStream; /***/ }), /* 43 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.RunLengthStream = void 0; var _decode_stream = __w_pdfjs_require__(29); class RunLengthStream extends _decode_stream.DecodeStream { constructor(str, maybeLength) { super(maybeLength); this.str = str; this.dict = str.dict; } readBlock() { const repeatHeader = this.str.getBytes(2); if (!repeatHeader || repeatHeader.length < 2 || repeatHeader[0] === 128) { this.eof = true; return; } let buffer; let bufferLength = this.bufferLength; let n = repeatHeader[0]; if (n < 128) { buffer = this.ensureBuffer(bufferLength + n + 1); buffer[bufferLength++] = repeatHeader[1]; if (n > 0) { const source = this.str.getBytes(n); buffer.set(source, bufferLength); bufferLength += n; } } else { n = 257 - n; const b = repeatHeader[1]; buffer = this.ensureBuffer(bufferLength + n + 1); for (let i = 0; i < n; i++) { buffer[bufferLength++] = b; } } this.bufferLength = bufferLength; } } exports.RunLengthStream = RunLengthStream; /***/ }), /* 44 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.Font = exports.ErrorFont = void 0; var _util = __w_pdfjs_require__(2); var _cff_parser = __w_pdfjs_require__(45); var _fonts_utils = __w_pdfjs_require__(18); var _glyphlist = __w_pdfjs_require__(20); var _encodings = __w_pdfjs_require__(19); var _standard_fonts = __w_pdfjs_require__(47); var _unicode = __w_pdfjs_require__(21); var _to_unicode_map = __w_pdfjs_require__(48); var _cff_font = __w_pdfjs_require__(49); var _font_renderer = __w_pdfjs_require__(50); var _glyf = __w_pdfjs_require__(51); var _cmap = __w_pdfjs_require__(26); var _opentype_file_builder = __w_pdfjs_require__(52); var _core_utils = __w_pdfjs_require__(9); var _stream = __w_pdfjs_require__(10); var _type1_font = __w_pdfjs_require__(53); const PRIVATE_USE_AREAS = [[0xe000, 0xf8ff], [0x100000, 0x10fffd]]; const PDF_GLYPH_SPACE_UNITS = 1000; const EXPORT_DATA_PROPERTIES = ["ascent", "bbox", "black", "bold", "charProcOperatorList", "composite", "cssFontInfo", "data", "defaultVMetrics", "defaultWidth", "descent", "fallbackName", "fontMatrix", "fontType", "isType3Font", "italic", "loadedName", "mimetype", "missingFile", "name", "remeasure", "subtype", "type", "vertical"]; const EXPORT_DATA_EXTRA_PROPERTIES = ["cMap", "defaultEncoding", "differences", "isMonospace", "isSerifFont", "isSymbolicFont", "seacMap", "toFontChar", "toUnicode", "vmetrics", "widths"]; function adjustWidths(properties) { if (!properties.fontMatrix) { return; } if (properties.fontMatrix[0] === _util.FONT_IDENTITY_MATRIX[0]) { return; } const scale = 0.001 / properties.fontMatrix[0]; const glyphsWidths = properties.widths; for (const glyph in glyphsWidths) { glyphsWidths[glyph] *= scale; } properties.defaultWidth *= scale; } function adjustToUnicode(properties, builtInEncoding) { if (properties.isInternalFont) { return; } if (builtInEncoding === properties.defaultEncoding) { return; } if (properties.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap) { return; } const toUnicode = [], glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); for (const charCode in builtInEncoding) { if (properties.hasIncludedToUnicodeMap) { if (properties.toUnicode.has(charCode)) { continue; } } else if (properties.hasEncoding) { if (properties.differences.length === 0 || properties.differences[charCode] !== undefined) { continue; } } const glyphName = builtInEncoding[charCode]; const unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap); if (unicode !== -1) { toUnicode[charCode] = String.fromCharCode(unicode); } } if (toUnicode.length > 0) { properties.toUnicode.amend(toUnicode); } } function amendFallbackToUnicode(properties) { if (!properties.fallbackToUnicode) { return; } if (properties.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap) { return; } const toUnicode = []; for (const charCode in properties.fallbackToUnicode) { if (properties.toUnicode.has(charCode)) { continue; } toUnicode[charCode] = properties.fallbackToUnicode[charCode]; } if (toUnicode.length > 0) { properties.toUnicode.amend(toUnicode); } } class Glyph { constructor(originalCharCode, fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont) { this.originalCharCode = originalCharCode; this.fontChar = fontChar; this.unicode = unicode; this.accent = accent; this.width = width; this.vmetric = vmetric; this.operatorListId = operatorListId; this.isSpace = isSpace; this.isInFont = isInFont; } matchesForCache(originalCharCode, fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont) { return this.originalCharCode === originalCharCode && this.fontChar === fontChar && this.unicode === unicode && this.accent === accent && this.width === width && this.vmetric === vmetric && this.operatorListId === operatorListId && this.isSpace === isSpace && this.isInFont === isInFont; } } function int16(b0, b1) { return (b0 << 8) + b1; } function writeSignedInt16(bytes, index, value) { bytes[index + 1] = value; bytes[index] = value >>> 8; } function signedInt16(b0, b1) { const value = (b0 << 8) + b1; return value & 1 << 15 ? value - 0x10000 : value; } function int32(b0, b1, b2, b3) { return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3; } function string16(value) { return String.fromCharCode(value >> 8 & 0xff, value & 0xff); } function safeString16(value) { if (value > 0x7fff) { value = 0x7fff; } else if (value < -0x8000) { value = -0x8000; } return String.fromCharCode(value >> 8 & 0xff, value & 0xff); } function isTrueTypeFile(file) { const header = file.peekBytes(4); return (0, _core_utils.readUint32)(header, 0) === 0x00010000 || (0, _util.bytesToString)(header) === "true"; } function isTrueTypeCollectionFile(file) { const header = file.peekBytes(4); return (0, _util.bytesToString)(header) === "ttcf"; } function isOpenTypeFile(file) { const header = file.peekBytes(4); return (0, _util.bytesToString)(header) === "OTTO"; } function isType1File(file) { const header = file.peekBytes(2); if (header[0] === 0x25 && header[1] === 0x21) { return true; } if (header[0] === 0x80 && header[1] === 0x01) { return true; } return false; } function isCFFFile(file) { const header = file.peekBytes(4); if (header[0] >= 1 && header[3] >= 1 && header[3] <= 4) { return true; } return false; } function getFontFileType(file, { type, subtype, composite }) { let fileType, fileSubtype; if (isTrueTypeFile(file) || isTrueTypeCollectionFile(file)) { if (composite) { fileType = "CIDFontType2"; } else { fileType = "TrueType"; } } else if (isOpenTypeFile(file)) { if (composite) { fileType = "CIDFontType2"; } else { fileType = "OpenType"; } } else if (isType1File(file)) { if (composite) { fileType = "CIDFontType0"; } else { fileType = type === "MMType1" ? "MMType1" : "Type1"; } } else if (isCFFFile(file)) { if (composite) { fileType = "CIDFontType0"; fileSubtype = "CIDFontType0C"; } else { fileType = type === "MMType1" ? "MMType1" : "Type1"; fileSubtype = "Type1C"; } } else { (0, _util.warn)("getFontFileType: Unable to detect correct font file Type/Subtype."); fileType = type; fileSubtype = subtype; } return [fileType, fileSubtype]; } function applyStandardFontGlyphMap(map, glyphMap) { for (const charCode in glyphMap) { map[+charCode] = glyphMap[charCode]; } } function buildToFontChar(encoding, glyphsUnicodeMap, differences) { const toFontChar = []; let unicode; for (let i = 0, ii = encoding.length; i < ii; i++) { unicode = (0, _unicode.getUnicodeForGlyph)(encoding[i], glyphsUnicodeMap); if (unicode !== -1) { toFontChar[i] = unicode; } } for (const charCode in differences) { unicode = (0, _unicode.getUnicodeForGlyph)(differences[charCode], glyphsUnicodeMap); if (unicode !== -1) { toFontChar[+charCode] = unicode; } } return toFontChar; } function convertCidString(charCode, cid, shouldThrow = false) { switch (cid.length) { case 1: return cid.charCodeAt(0); case 2: return cid.charCodeAt(0) << 8 | cid.charCodeAt(1); } const msg = `Unsupported CID string (charCode ${charCode}): "${cid}".`; if (shouldThrow) { throw new _util.FormatError(msg); } (0, _util.warn)(msg); return cid; } function adjustMapping(charCodeToGlyphId, hasGlyph, newGlyphZeroId) { const newMap = Object.create(null); const toFontChar = []; let privateUseAreaIndex = 0; let nextAvailableFontCharCode = PRIVATE_USE_AREAS[privateUseAreaIndex][0]; let privateUseOffetEnd = PRIVATE_USE_AREAS[privateUseAreaIndex][1]; for (let originalCharCode in charCodeToGlyphId) { originalCharCode |= 0; let glyphId = charCodeToGlyphId[originalCharCode]; if (!hasGlyph(glyphId)) { continue; } if (nextAvailableFontCharCode > privateUseOffetEnd) { privateUseAreaIndex++; if (privateUseAreaIndex >= PRIVATE_USE_AREAS.length) { (0, _util.warn)("Ran out of space in font private use area."); break; } nextAvailableFontCharCode = PRIVATE_USE_AREAS[privateUseAreaIndex][0]; privateUseOffetEnd = PRIVATE_USE_AREAS[privateUseAreaIndex][1]; } const fontCharCode = nextAvailableFontCharCode++; if (glyphId === 0) { glyphId = newGlyphZeroId; } newMap[fontCharCode] = glyphId; toFontChar[originalCharCode] = fontCharCode; } return { toFontChar, charCodeToGlyphId: newMap, nextAvailableFontCharCode }; } function getRanges(glyphs, numGlyphs) { const codes = []; for (const charCode in glyphs) { if (glyphs[charCode] >= numGlyphs) { continue; } codes.push({ fontCharCode: charCode | 0, glyphId: glyphs[charCode] }); } if (codes.length === 0) { codes.push({ fontCharCode: 0, glyphId: 0 }); } codes.sort(function fontGetRangesSort(a, b) { return a.fontCharCode - b.fontCharCode; }); const ranges = []; const length = codes.length; for (let n = 0; n < length;) { const start = codes[n].fontCharCode; const codeIndices = [codes[n].glyphId]; ++n; let end = start; while (n < length && end + 1 === codes[n].fontCharCode) { codeIndices.push(codes[n].glyphId); ++end; ++n; if (end === 0xffff) { break; } } ranges.push([start, end, codeIndices]); } return ranges; } function createCmapTable(glyphs, numGlyphs) { const ranges = getRanges(glyphs, numGlyphs); const numTables = ranges[ranges.length - 1][1] > 0xffff ? 2 : 1; let cmap = "\x00\x00" + string16(numTables) + "\x00\x03" + "\x00\x01" + (0, _util.string32)(4 + numTables * 8); let i, ii, j, jj; for (i = ranges.length - 1; i >= 0; --i) { if (ranges[i][0] <= 0xffff) { break; } } const bmpLength = i + 1; if (ranges[i][0] < 0xffff && ranges[i][1] === 0xffff) { ranges[i][1] = 0xfffe; } const trailingRangesCount = ranges[i][1] < 0xffff ? 1 : 0; const segCount = bmpLength + trailingRangesCount; const searchParams = _opentype_file_builder.OpenTypeFileBuilder.getSearchParams(segCount, 2); let startCount = ""; let endCount = ""; let idDeltas = ""; let idRangeOffsets = ""; let glyphsIds = ""; let bias = 0; let range, start, end, codes; for (i = 0, ii = bmpLength; i < ii; i++) { range = ranges[i]; start = range[0]; end = range[1]; startCount += string16(start); endCount += string16(end); codes = range[2]; let contiguous = true; for (j = 1, jj = codes.length; j < jj; ++j) { if (codes[j] !== codes[j - 1] + 1) { contiguous = false; break; } } if (!contiguous) { const offset = (segCount - i) * 2 + bias * 2; bias += end - start + 1; idDeltas += string16(0); idRangeOffsets += string16(offset); for (j = 0, jj = codes.length; j < jj; ++j) { glyphsIds += string16(codes[j]); } } else { const startCode = codes[0]; idDeltas += string16(startCode - start & 0xffff); idRangeOffsets += string16(0); } } if (trailingRangesCount > 0) { endCount += "\xFF\xFF"; startCount += "\xFF\xFF"; idDeltas += "\x00\x01"; idRangeOffsets += "\x00\x00"; } const format314 = "\x00\x00" + string16(2 * segCount) + string16(searchParams.range) + string16(searchParams.entry) + string16(searchParams.rangeShift) + endCount + "\x00\x00" + startCount + idDeltas + idRangeOffsets + glyphsIds; let format31012 = ""; let header31012 = ""; if (numTables > 1) { cmap += "\x00\x03" + "\x00\x0A" + (0, _util.string32)(4 + numTables * 8 + 4 + format314.length); format31012 = ""; for (i = 0, ii = ranges.length; i < ii; i++) { range = ranges[i]; start = range[0]; codes = range[2]; let code = codes[0]; for (j = 1, jj = codes.length; j < jj; ++j) { if (codes[j] !== codes[j - 1] + 1) { end = range[0] + j - 1; format31012 += (0, _util.string32)(start) + (0, _util.string32)(end) + (0, _util.string32)(code); start = end + 1; code = codes[j]; } } format31012 += (0, _util.string32)(start) + (0, _util.string32)(range[1]) + (0, _util.string32)(code); } header31012 = "\x00\x0C" + "\x00\x00" + (0, _util.string32)(format31012.length + 16) + "\x00\x00\x00\x00" + (0, _util.string32)(format31012.length / 12); } return cmap + "\x00\x04" + string16(format314.length + 4) + format314 + header31012 + format31012; } function validateOS2Table(os2, file) { file.pos = (file.start || 0) + os2.offset; const version = file.getUint16(); file.skip(60); const selection = file.getUint16(); if (version < 4 && selection & 0x0300) { return false; } const firstChar = file.getUint16(); const lastChar = file.getUint16(); if (firstChar > lastChar) { return false; } file.skip(6); const usWinAscent = file.getUint16(); if (usWinAscent === 0) { return false; } os2.data[8] = os2.data[9] = 0; return true; } function createOS2Table(properties, charstrings, override) { override = override || { unitsPerEm: 0, yMax: 0, yMin: 0, ascent: 0, descent: 0 }; let ulUnicodeRange1 = 0; let ulUnicodeRange2 = 0; let ulUnicodeRange3 = 0; let ulUnicodeRange4 = 0; let firstCharIndex = null; let lastCharIndex = 0; if (charstrings) { for (let code in charstrings) { code |= 0; if (firstCharIndex > code || !firstCharIndex) { firstCharIndex = code; } if (lastCharIndex < code) { lastCharIndex = code; } const position = (0, _unicode.getUnicodeRangeFor)(code); if (position < 32) { ulUnicodeRange1 |= 1 << position; } else if (position < 64) { ulUnicodeRange2 |= 1 << position - 32; } else if (position < 96) { ulUnicodeRange3 |= 1 << position - 64; } else if (position < 123) { ulUnicodeRange4 |= 1 << position - 96; } else { throw new _util.FormatError("Unicode ranges Bits > 123 are reserved for internal usage"); } } if (lastCharIndex > 0xffff) { lastCharIndex = 0xffff; } } else { firstCharIndex = 0; lastCharIndex = 255; } const bbox = properties.bbox || [0, 0, 0, 0]; const unitsPerEm = override.unitsPerEm || 1 / (properties.fontMatrix || _util.FONT_IDENTITY_MATRIX)[0]; const scale = properties.ascentScaled ? 1.0 : unitsPerEm / PDF_GLYPH_SPACE_UNITS; const typoAscent = override.ascent || Math.round(scale * (properties.ascent || bbox[3])); let typoDescent = override.descent || Math.round(scale * (properties.descent || bbox[1])); if (typoDescent > 0 && properties.descent > 0 && bbox[1] < 0) { typoDescent = -typoDescent; } const winAscent = override.yMax || typoAscent; const winDescent = -override.yMin || -typoDescent; return "\x00\x03" + "\x02\x24" + "\x01\xF4" + "\x00\x05" + "\x00\x00" + "\x02\x8A" + "\x02\xBB" + "\x00\x00" + "\x00\x8C" + "\x02\x8A" + "\x02\xBB" + "\x00\x00" + "\x01\xDF" + "\x00\x31" + "\x01\x02" + "\x00\x00" + "\x00\x00\x06" + String.fromCharCode(properties.fixedPitch ? 0x09 : 0x00) + "\x00\x00\x00\x00\x00\x00" + (0, _util.string32)(ulUnicodeRange1) + (0, _util.string32)(ulUnicodeRange2) + (0, _util.string32)(ulUnicodeRange3) + (0, _util.string32)(ulUnicodeRange4) + "\x2A\x32\x31\x2A" + string16(properties.italicAngle ? 1 : 0) + string16(firstCharIndex || properties.firstChar) + string16(lastCharIndex || properties.lastChar) + string16(typoAscent) + string16(typoDescent) + "\x00\x64" + string16(winAscent) + string16(winDescent) + "\x00\x00\x00\x00" + "\x00\x00\x00\x00" + string16(properties.xHeight) + string16(properties.capHeight) + string16(0) + string16(firstCharIndex || properties.firstChar) + "\x00\x03"; } function createPostTable(properties) { const angle = Math.floor(properties.italicAngle * 2 ** 16); return "\x00\x03\x00\x00" + (0, _util.string32)(angle) + "\x00\x00" + "\x00\x00" + (0, _util.string32)(properties.fixedPitch ? 1 : 0) + "\x00\x00\x00\x00" + "\x00\x00\x00\x00" + "\x00\x00\x00\x00" + "\x00\x00\x00\x00"; } function createPostscriptName(name) { return name.replace(/[^\x21-\x7E]|[[\](){}<>/%]/g, "").slice(0, 63); } function createNameTable(name, proto) { if (!proto) { proto = [[], []]; } const strings = [proto[0][0] || "Original licence", proto[0][1] || name, proto[0][2] || "Unknown", proto[0][3] || "uniqueID", proto[0][4] || name, proto[0][5] || "Version 0.11", proto[0][6] || createPostscriptName(name), proto[0][7] || "Unknown", proto[0][8] || "Unknown", proto[0][9] || "Unknown"]; const stringsUnicode = []; let i, ii, j, jj, str; for (i = 0, ii = strings.length; i < ii; i++) { str = proto[1][i] || strings[i]; const strBufUnicode = []; for (j = 0, jj = str.length; j < jj; j++) { strBufUnicode.push(string16(str.charCodeAt(j))); } stringsUnicode.push(strBufUnicode.join("")); } const names = [strings, stringsUnicode]; const platforms = ["\x00\x01", "\x00\x03"]; const encodings = ["\x00\x00", "\x00\x01"]; const languages = ["\x00\x00", "\x04\x09"]; const namesRecordCount = strings.length * platforms.length; let nameTable = "\x00\x00" + string16(namesRecordCount) + string16(namesRecordCount * 12 + 6); let strOffset = 0; for (i = 0, ii = platforms.length; i < ii; i++) { const strs = names[i]; for (j = 0, jj = strs.length; j < jj; j++) { str = strs[j]; const nameRecord = platforms[i] + encodings[i] + languages[i] + string16(j) + string16(str.length) + string16(strOffset); nameTable += nameRecord; strOffset += str.length; } } nameTable += strings.join("") + stringsUnicode.join(""); return nameTable; } class Font { constructor(name, file, properties) { this.name = name; this.psName = null; this.mimetype = null; this.disableFontFace = false; this.loadedName = properties.loadedName; this.isType3Font = properties.isType3Font; this.missingFile = false; this.cssFontInfo = properties.cssFontInfo; this._charsCache = Object.create(null); this._glyphCache = Object.create(null); let isSerifFont = !!(properties.flags & _fonts_utils.FontFlags.Serif); if (!isSerifFont && !properties.isSimulatedFlags) { const baseName = name.replace(/[,_]/g, "-").split("-")[0], serifFonts = (0, _standard_fonts.getSerifFonts)(); for (const namePart of baseName.split("+")) { if (serifFonts[namePart]) { isSerifFont = true; break; } } } this.isSerifFont = isSerifFont; this.isSymbolicFont = !!(properties.flags & _fonts_utils.FontFlags.Symbolic); this.isMonospace = !!(properties.flags & _fonts_utils.FontFlags.FixedPitch); let type = properties.type; let subtype = properties.subtype; this.type = type; this.subtype = subtype; let fallbackName = "sans-serif"; if (this.isMonospace) { fallbackName = "monospace"; } else if (this.isSerifFont) { fallbackName = "serif"; } this.fallbackName = fallbackName; this.differences = properties.differences; this.widths = properties.widths; this.defaultWidth = properties.defaultWidth; this.composite = properties.composite; this.cMap = properties.cMap; this.capHeight = properties.capHeight / PDF_GLYPH_SPACE_UNITS; this.ascent = properties.ascent / PDF_GLYPH_SPACE_UNITS; this.descent = properties.descent / PDF_GLYPH_SPACE_UNITS; this.lineHeight = this.ascent - this.descent; this.fontMatrix = properties.fontMatrix; this.bbox = properties.bbox; this.defaultEncoding = properties.defaultEncoding; this.toUnicode = properties.toUnicode; this.toFontChar = []; if (properties.type === "Type3") { for (let charCode = 0; charCode < 256; charCode++) { this.toFontChar[charCode] = this.differences[charCode] || properties.defaultEncoding[charCode]; } this.fontType = _util.FontType.TYPE3; return; } this.cidEncoding = properties.cidEncoding || ""; this.vertical = !!properties.vertical; if (this.vertical) { this.vmetrics = properties.vmetrics; this.defaultVMetrics = properties.defaultVMetrics; } if (!file || file.isEmpty) { if (file) { (0, _util.warn)('Font file is empty in "' + name + '" (' + this.loadedName + ")"); } this.fallbackToSystemFont(properties); return; } [type, subtype] = getFontFileType(file, properties); if (type !== this.type || subtype !== this.subtype) { (0, _util.info)("Inconsistent font file Type/SubType, expected: " + `${this.type}/${this.subtype} but found: ${type}/${subtype}.`); } let data; try { switch (type) { case "MMType1": (0, _util.info)("MMType1 font (" + name + "), falling back to Type1."); case "Type1": case "CIDFontType0": this.mimetype = "font/opentype"; const cff = subtype === "Type1C" || subtype === "CIDFontType0C" ? new _cff_font.CFFFont(file, properties) : new _type1_font.Type1Font(name, file, properties); adjustWidths(properties); data = this.convert(name, cff, properties); break; case "OpenType": case "TrueType": case "CIDFontType2": this.mimetype = "font/opentype"; data = this.checkAndRepair(name, file, properties); if (this.isOpenType) { adjustWidths(properties); type = "OpenType"; } break; default: throw new _util.FormatError(`Font ${type} is not supported`); } } catch (e) { (0, _util.warn)(e); this.fallbackToSystemFont(properties); return; } amendFallbackToUnicode(properties); this.data = data; this.fontType = (0, _fonts_utils.getFontType)(type, subtype, properties.isStandardFont); this.fontMatrix = properties.fontMatrix; this.widths = properties.widths; this.defaultWidth = properties.defaultWidth; this.toUnicode = properties.toUnicode; this.seacMap = properties.seacMap; } get renderer() { const renderer = _font_renderer.FontRendererFactory.create(this, _fonts_utils.SEAC_ANALYSIS_ENABLED); return (0, _util.shadow)(this, "renderer", renderer); } exportData(extraProperties = false) { const exportDataProperties = extraProperties ? [...EXPORT_DATA_PROPERTIES, ...EXPORT_DATA_EXTRA_PROPERTIES] : EXPORT_DATA_PROPERTIES; const data = Object.create(null); let property, value; for (property of exportDataProperties) { value = this[property]; if (value !== undefined) { data[property] = value; } } return data; } fallbackToSystemFont(properties) { this.missingFile = true; const name = this.name; const type = this.type; const subtype = this.subtype; let fontName = (0, _fonts_utils.normalizeFontName)(name); const stdFontMap = (0, _standard_fonts.getStdFontMap)(), nonStdFontMap = (0, _standard_fonts.getNonStdFontMap)(); const isStandardFont = !!stdFontMap[fontName]; const isMappedToStandardFont = !!(nonStdFontMap[fontName] && stdFontMap[nonStdFontMap[fontName]]); fontName = stdFontMap[fontName] || nonStdFontMap[fontName] || fontName; this.bold = fontName.search(/bold/gi) !== -1; this.italic = fontName.search(/oblique/gi) !== -1 || fontName.search(/italic/gi) !== -1; this.black = name.search(/Black/g) !== -1; const isNarrow = name.search(/Narrow/g) !== -1; this.remeasure = (!isStandardFont || isNarrow) && Object.keys(this.widths).length > 0; if ((isStandardFont || isMappedToStandardFont) && type === "CIDFontType2" && this.cidEncoding.startsWith("Identity-")) { const cidToGidMap = properties.cidToGidMap; const map = []; applyStandardFontGlyphMap(map, (0, _standard_fonts.getGlyphMapForStandardFonts)()); if (/Arial-?Black/i.test(name)) { applyStandardFontGlyphMap(map, (0, _standard_fonts.getSupplementalGlyphMapForArialBlack)()); } else if (/Calibri/i.test(name)) { applyStandardFontGlyphMap(map, (0, _standard_fonts.getSupplementalGlyphMapForCalibri)()); } if (cidToGidMap) { for (const charCode in map) { const cid = map[charCode]; if (cidToGidMap[cid] !== undefined) { map[+charCode] = cidToGidMap[cid]; } } if (cidToGidMap.length !== this.toUnicode.length && properties.hasIncludedToUnicodeMap && this.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap) { this.toUnicode.forEach(function (charCode, unicodeCharCode) { const cid = map[charCode]; if (cidToGidMap[cid] === undefined) { map[+charCode] = unicodeCharCode; } }); } } if (!(this.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap)) { this.toUnicode.forEach(function (charCode, unicodeCharCode) { map[+charCode] = unicodeCharCode; }); } this.toFontChar = map; this.toUnicode = new _to_unicode_map.ToUnicodeMap(map); } else if (/Symbol/i.test(fontName)) { this.toFontChar = buildToFontChar(_encodings.SymbolSetEncoding, (0, _glyphlist.getGlyphsUnicode)(), this.differences); } else if (/Dingbats/i.test(fontName)) { if (/Wingdings/i.test(name)) { (0, _util.warn)("Non-embedded Wingdings font, falling back to ZapfDingbats."); } this.toFontChar = buildToFontChar(_encodings.ZapfDingbatsEncoding, (0, _glyphlist.getDingbatsGlyphsUnicode)(), this.differences); } else if (isStandardFont) { const map = buildToFontChar(this.defaultEncoding, (0, _glyphlist.getGlyphsUnicode)(), this.differences); if (type === "CIDFontType2" && !this.cidEncoding.startsWith("Identity-") && !(this.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap)) { this.toUnicode.forEach(function (charCode, unicodeCharCode) { map[+charCode] = unicodeCharCode; }); } this.toFontChar = map; } else { const glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); const map = []; this.toUnicode.forEach((charCode, unicodeCharCode) => { if (!this.composite) { const glyphName = this.differences[charCode] || this.defaultEncoding[charCode]; const unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap); if (unicode !== -1) { unicodeCharCode = unicode; } } map[+charCode] = unicodeCharCode; }); if (this.composite && this.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap) { if (/Verdana/i.test(name)) { applyStandardFontGlyphMap(map, (0, _standard_fonts.getGlyphMapForStandardFonts)()); } } this.toFontChar = map; } amendFallbackToUnicode(properties); this.loadedName = fontName.split("-")[0]; this.fontType = (0, _fonts_utils.getFontType)(type, subtype, properties.isStandardFont); } checkAndRepair(name, font, properties) { const VALID_TABLES = ["OS/2", "cmap", "head", "hhea", "hmtx", "maxp", "name", "post", "loca", "glyf", "fpgm", "prep", "cvt ", "CFF "]; function readTables(file, numTables) { const tables = Object.create(null); tables["OS/2"] = null; tables.cmap = null; tables.head = null; tables.hhea = null; tables.hmtx = null; tables.maxp = null; tables.name = null; tables.post = null; for (let i = 0; i < numTables; i++) { const table = readTableEntry(file); if (!VALID_TABLES.includes(table.tag)) { continue; } if (table.length === 0) { continue; } tables[table.tag] = table; } return tables; } function readTableEntry(file) { const tag = file.getString(4); const checksum = file.getInt32() >>> 0; const offset = file.getInt32() >>> 0; const length = file.getInt32() >>> 0; const previousPosition = file.pos; file.pos = file.start ? file.start : 0; file.skip(offset); const data = file.getBytes(length); file.pos = previousPosition; if (tag === "head") { data[8] = data[9] = data[10] = data[11] = 0; data[17] |= 0x20; } return { tag, checksum, length, offset, data }; } function readOpenTypeHeader(ttf) { return { version: ttf.getString(4), numTables: ttf.getUint16(), searchRange: ttf.getUint16(), entrySelector: ttf.getUint16(), rangeShift: ttf.getUint16() }; } function readTrueTypeCollectionHeader(ttc) { const ttcTag = ttc.getString(4); (0, _util.assert)(ttcTag === "ttcf", "Must be a TrueType Collection font."); const majorVersion = ttc.getUint16(); const minorVersion = ttc.getUint16(); const numFonts = ttc.getInt32() >>> 0; const offsetTable = []; for (let i = 0; i < numFonts; i++) { offsetTable.push(ttc.getInt32() >>> 0); } const header = { ttcTag, majorVersion, minorVersion, numFonts, offsetTable }; switch (majorVersion) { case 1: return header; case 2: header.dsigTag = ttc.getInt32() >>> 0; header.dsigLength = ttc.getInt32() >>> 0; header.dsigOffset = ttc.getInt32() >>> 0; return header; } throw new _util.FormatError(`Invalid TrueType Collection majorVersion: ${majorVersion}.`); } function readTrueTypeCollectionData(ttc, fontName) { const { numFonts, offsetTable } = readTrueTypeCollectionHeader(ttc); const fontNameParts = fontName.split("+"); let fallbackData; for (let i = 0; i < numFonts; i++) { ttc.pos = (ttc.start || 0) + offsetTable[i]; const potentialHeader = readOpenTypeHeader(ttc); const potentialTables = readTables(ttc, potentialHeader.numTables); if (!potentialTables.name) { throw new _util.FormatError('TrueType Collection font must contain a "name" table.'); } const nameTable = readNameTable(potentialTables.name); for (let j = 0, jj = nameTable.length; j < jj; j++) { for (let k = 0, kk = nameTable[j].length; k < kk; k++) { const nameEntry = nameTable[j][k] && nameTable[j][k].replace(/\s/g, ""); if (!nameEntry) { continue; } if (nameEntry === fontName) { return { header: potentialHeader, tables: potentialTables }; } if (fontNameParts.length < 2) { continue; } for (const part of fontNameParts) { if (nameEntry === part) { fallbackData = { name: part, header: potentialHeader, tables: potentialTables }; } } } } } if (fallbackData) { (0, _util.warn)(`TrueType Collection does not contain "${fontName}" font, ` + `falling back to "${fallbackData.name}" font instead.`); return { header: fallbackData.header, tables: fallbackData.tables }; } throw new _util.FormatError(`TrueType Collection does not contain "${fontName}" font.`); } function readCmapTable(cmap, file, isSymbolicFont, hasEncoding) { if (!cmap) { (0, _util.warn)("No cmap table available."); return { platformId: -1, encodingId: -1, mappings: [], hasShortCmap: false }; } let segment; let start = (file.start ? file.start : 0) + cmap.offset; file.pos = start; file.skip(2); const numTables = file.getUint16(); let potentialTable; let canBreak = false; for (let i = 0; i < numTables; i++) { const platformId = file.getUint16(); const encodingId = file.getUint16(); const offset = file.getInt32() >>> 0; let useTable = false; if (potentialTable && potentialTable.platformId === platformId && potentialTable.encodingId === encodingId) { continue; } if (platformId === 0 && (encodingId === 0 || encodingId === 1 || encodingId === 3)) { useTable = true; } else if (platformId === 1 && encodingId === 0) { useTable = true; } else if (platformId === 3 && encodingId === 1 && (hasEncoding || !potentialTable)) { useTable = true; if (!isSymbolicFont) { canBreak = true; } } else if (isSymbolicFont && platformId === 3 && encodingId === 0) { useTable = true; let correctlySorted = true; if (i < numTables - 1) { const nextBytes = file.peekBytes(2), nextPlatformId = int16(nextBytes[0], nextBytes[1]); if (nextPlatformId < platformId) { correctlySorted = false; } } if (correctlySorted) { canBreak = true; } } if (useTable) { potentialTable = { platformId, encodingId, offset }; } if (canBreak) { break; } } if (potentialTable) { file.pos = start + potentialTable.offset; } if (!potentialTable || file.peekByte() === -1) { (0, _util.warn)("Could not find a preferred cmap table."); return { platformId: -1, encodingId: -1, mappings: [], hasShortCmap: false }; } const format = file.getUint16(); file.skip(2 + 2); let hasShortCmap = false; const mappings = []; let j, glyphId; if (format === 0) { for (j = 0; j < 256; j++) { const index = file.getByte(); if (!index) { continue; } mappings.push({ charCode: j, glyphId: index }); } hasShortCmap = true; } else if (format === 2) { const subHeaderKeys = []; let maxSubHeaderKey = 0; for (let i = 0; i < 256; i++) { const subHeaderKey = file.getUint16() >> 3; subHeaderKeys.push(subHeaderKey); maxSubHeaderKey = Math.max(subHeaderKey, maxSubHeaderKey); } const subHeaders = []; for (let i = 0; i <= maxSubHeaderKey; i++) { subHeaders.push({ firstCode: file.getUint16(), entryCount: file.getUint16(), idDelta: signedInt16(file.getByte(), file.getByte()), idRangePos: file.pos + file.getUint16() }); } for (let i = 0; i < 256; i++) { if (subHeaderKeys[i] === 0) { file.pos = subHeaders[0].idRangePos + 2 * i; glyphId = file.getUint16(); mappings.push({ charCode: i, glyphId }); } else { const s = subHeaders[subHeaderKeys[i]]; for (j = 0; j < s.entryCount; j++) { const charCode = (i << 8) + j + s.firstCode; file.pos = s.idRangePos + 2 * j; glyphId = file.getUint16(); if (glyphId !== 0) { glyphId = (glyphId + s.idDelta) % 65536; } mappings.push({ charCode, glyphId }); } } } } else if (format === 4) { const segCount = file.getUint16() >> 1; file.skip(6); const segments = []; let segIndex; for (segIndex = 0; segIndex < segCount; segIndex++) { segments.push({ end: file.getUint16() }); } file.skip(2); for (segIndex = 0; segIndex < segCount; segIndex++) { segments[segIndex].start = file.getUint16(); } for (segIndex = 0; segIndex < segCount; segIndex++) { segments[segIndex].delta = file.getUint16(); } let offsetsCount = 0, offsetIndex; for (segIndex = 0; segIndex < segCount; segIndex++) { segment = segments[segIndex]; const rangeOffset = file.getUint16(); if (!rangeOffset) { segment.offsetIndex = -1; continue; } offsetIndex = (rangeOffset >> 1) - (segCount - segIndex); segment.offsetIndex = offsetIndex; offsetsCount = Math.max(offsetsCount, offsetIndex + segment.end - segment.start + 1); } const offsets = []; for (j = 0; j < offsetsCount; j++) { offsets.push(file.getUint16()); } for (segIndex = 0; segIndex < segCount; segIndex++) { segment = segments[segIndex]; start = segment.start; const end = segment.end; const delta = segment.delta; offsetIndex = segment.offsetIndex; for (j = start; j <= end; j++) { if (j === 0xffff) { continue; } glyphId = offsetIndex < 0 ? j : offsets[offsetIndex + j - start]; glyphId = glyphId + delta & 0xffff; mappings.push({ charCode: j, glyphId }); } } } else if (format === 6) { const firstCode = file.getUint16(); const entryCount = file.getUint16(); for (j = 0; j < entryCount; j++) { glyphId = file.getUint16(); const charCode = firstCode + j; mappings.push({ charCode, glyphId }); } } else { (0, _util.warn)("cmap table has unsupported format: " + format); return { platformId: -1, encodingId: -1, mappings: [], hasShortCmap: false }; } mappings.sort(function (a, b) { return a.charCode - b.charCode; }); for (let i = 1; i < mappings.length; i++) { if (mappings[i - 1].charCode === mappings[i].charCode) { mappings.splice(i, 1); i--; } } return { platformId: potentialTable.platformId, encodingId: potentialTable.encodingId, mappings, hasShortCmap }; } function sanitizeMetrics(file, header, metrics, headTable, numGlyphs, dupFirstEntry) { if (!header) { if (metrics) { metrics.data = null; } return; } file.pos = (file.start ? file.start : 0) + header.offset; file.pos += 4; file.pos += 2; file.pos += 2; file.pos += 2; file.pos += 2; file.pos += 2; file.pos += 2; file.pos += 2; file.pos += 2; file.pos += 2; const caretOffset = file.getUint16(); file.pos += 8; file.pos += 2; let numOfMetrics = file.getUint16(); if (caretOffset !== 0) { const macStyle = int16(headTable.data[44], headTable.data[45]); if (!(macStyle & 2)) { header.data[22] = 0; header.data[23] = 0; } } if (numOfMetrics > numGlyphs) { (0, _util.info)(`The numOfMetrics (${numOfMetrics}) should not be ` + `greater than the numGlyphs (${numGlyphs}).`); numOfMetrics = numGlyphs; header.data[34] = (numOfMetrics & 0xff00) >> 8; header.data[35] = numOfMetrics & 0x00ff; } const numOfSidebearings = numGlyphs - numOfMetrics; const numMissing = numOfSidebearings - (metrics.length - numOfMetrics * 4 >> 1); if (numMissing > 0) { const entries = new Uint8Array(metrics.length + numMissing * 2); entries.set(metrics.data); if (dupFirstEntry) { entries[metrics.length] = metrics.data[2]; entries[metrics.length + 1] = metrics.data[3]; } metrics.data = entries; } } function sanitizeGlyph(source, sourceStart, sourceEnd, dest, destStart, hintsValid) { const glyphProfile = { length: 0, sizeOfInstructions: 0 }; if (sourceEnd - sourceStart <= 12) { return glyphProfile; } const glyf = source.subarray(sourceStart, sourceEnd); let contoursCount = signedInt16(glyf[0], glyf[1]); if (contoursCount < 0) { contoursCount = -1; writeSignedInt16(glyf, 0, contoursCount); dest.set(glyf, destStart); glyphProfile.length = glyf.length; return glyphProfile; } let i, j = 10, flagsCount = 0; for (i = 0; i < contoursCount; i++) { const endPoint = glyf[j] << 8 | glyf[j + 1]; flagsCount = endPoint + 1; j += 2; } const instructionsStart = j; const instructionsLength = glyf[j] << 8 | glyf[j + 1]; glyphProfile.sizeOfInstructions = instructionsLength; j += 2 + instructionsLength; const instructionsEnd = j; let coordinatesLength = 0; for (i = 0; i < flagsCount; i++) { const flag = glyf[j++]; if (flag & 0xc0) { glyf[j - 1] = flag & 0x3f; } let xLength = 2; if (flag & 2) { xLength = 1; } else if (flag & 16) { xLength = 0; } let yLength = 2; if (flag & 4) { yLength = 1; } else if (flag & 32) { yLength = 0; } const xyLength = xLength + yLength; coordinatesLength += xyLength; if (flag & 8) { const repeat = glyf[j++]; i += repeat; coordinatesLength += repeat * xyLength; } } if (coordinatesLength === 0) { return glyphProfile; } let glyphDataLength = j + coordinatesLength; if (glyphDataLength > glyf.length) { return glyphProfile; } if (!hintsValid && instructionsLength > 0) { dest.set(glyf.subarray(0, instructionsStart), destStart); dest.set([0, 0], destStart + instructionsStart); dest.set(glyf.subarray(instructionsEnd, glyphDataLength), destStart + instructionsStart + 2); glyphDataLength -= instructionsLength; if (glyf.length - glyphDataLength > 3) { glyphDataLength = glyphDataLength + 3 & ~3; } glyphProfile.length = glyphDataLength; return glyphProfile; } if (glyf.length - glyphDataLength > 3) { glyphDataLength = glyphDataLength + 3 & ~3; dest.set(glyf.subarray(0, glyphDataLength), destStart); glyphProfile.length = glyphDataLength; return glyphProfile; } dest.set(glyf, destStart); glyphProfile.length = glyf.length; return glyphProfile; } function sanitizeHead(head, numGlyphs, locaLength) { const data = head.data; const version = int32(data[0], data[1], data[2], data[3]); if (version >> 16 !== 1) { (0, _util.info)("Attempting to fix invalid version in head table: " + version); data[0] = 0; data[1] = 1; data[2] = 0; data[3] = 0; } const indexToLocFormat = int16(data[50], data[51]); if (indexToLocFormat < 0 || indexToLocFormat > 1) { (0, _util.info)("Attempting to fix invalid indexToLocFormat in head table: " + indexToLocFormat); const numGlyphsPlusOne = numGlyphs + 1; if (locaLength === numGlyphsPlusOne << 1) { data[50] = 0; data[51] = 0; } else if (locaLength === numGlyphsPlusOne << 2) { data[50] = 0; data[51] = 1; } else { throw new _util.FormatError("Could not fix indexToLocFormat: " + indexToLocFormat); } } } function sanitizeGlyphLocations(loca, glyf, numGlyphs, isGlyphLocationsLong, hintsValid, dupFirstEntry, maxSizeOfInstructions) { let itemSize, itemDecode, itemEncode; if (isGlyphLocationsLong) { itemSize = 4; itemDecode = function fontItemDecodeLong(data, offset) { return data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]; }; itemEncode = function fontItemEncodeLong(data, offset, value) { data[offset] = value >>> 24 & 0xff; data[offset + 1] = value >> 16 & 0xff; data[offset + 2] = value >> 8 & 0xff; data[offset + 3] = value & 0xff; }; } else { itemSize = 2; itemDecode = function fontItemDecode(data, offset) { return data[offset] << 9 | data[offset + 1] << 1; }; itemEncode = function fontItemEncode(data, offset, value) { data[offset] = value >> 9 & 0xff; data[offset + 1] = value >> 1 & 0xff; }; } const numGlyphsOut = dupFirstEntry ? numGlyphs + 1 : numGlyphs; const locaDataSize = itemSize * (1 + numGlyphsOut); const locaData = new Uint8Array(locaDataSize); locaData.set(loca.data.subarray(0, locaDataSize)); loca.data = locaData; const oldGlyfData = glyf.data; const oldGlyfDataLength = oldGlyfData.length; const newGlyfData = new Uint8Array(oldGlyfDataLength); let i, j; const locaEntries = []; for (i = 0, j = 0; i < numGlyphs + 1; i++, j += itemSize) { let offset = itemDecode(locaData, j); if (offset > oldGlyfDataLength) { offset = oldGlyfDataLength; } locaEntries.push({ index: i, offset, endOffset: 0 }); } locaEntries.sort((a, b) => { return a.offset - b.offset; }); for (i = 0; i < numGlyphs; i++) { locaEntries[i].endOffset = locaEntries[i + 1].offset; } locaEntries.sort((a, b) => { return a.index - b.index; }); const missingGlyphs = Object.create(null); let writeOffset = 0; itemEncode(locaData, 0, writeOffset); for (i = 0, j = itemSize; i < numGlyphs; i++, j += itemSize) { const glyphProfile = sanitizeGlyph(oldGlyfData, locaEntries[i].offset, locaEntries[i].endOffset, newGlyfData, writeOffset, hintsValid); const newLength = glyphProfile.length; if (newLength === 0) { missingGlyphs[i] = true; } if (glyphProfile.sizeOfInstructions > maxSizeOfInstructions) { maxSizeOfInstructions = glyphProfile.sizeOfInstructions; } writeOffset += newLength; itemEncode(locaData, j, writeOffset); } if (writeOffset === 0) { const simpleGlyph = new Uint8Array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 0]); for (i = 0, j = itemSize; i < numGlyphsOut; i++, j += itemSize) { itemEncode(locaData, j, simpleGlyph.length); } glyf.data = simpleGlyph; } else if (dupFirstEntry) { const firstEntryLength = itemDecode(locaData, itemSize); if (newGlyfData.length > firstEntryLength + writeOffset) { glyf.data = newGlyfData.subarray(0, firstEntryLength + writeOffset); } else { glyf.data = new Uint8Array(firstEntryLength + writeOffset); glyf.data.set(newGlyfData.subarray(0, writeOffset)); } glyf.data.set(newGlyfData.subarray(0, firstEntryLength), writeOffset); itemEncode(loca.data, locaData.length - itemSize, writeOffset + firstEntryLength); } else { glyf.data = newGlyfData.subarray(0, writeOffset); } return { missingGlyphs, maxSizeOfInstructions }; } function readPostScriptTable(post, propertiesObj, maxpNumGlyphs) { const start = (font.start ? font.start : 0) + post.offset; font.pos = start; const length = post.length, end = start + length; const version = font.getInt32(); font.skip(28); let glyphNames; let valid = true; let i; switch (version) { case 0x00010000: glyphNames = _fonts_utils.MacStandardGlyphOrdering; break; case 0x00020000: const numGlyphs = font.getUint16(); if (numGlyphs !== maxpNumGlyphs) { valid = false; break; } const glyphNameIndexes = []; for (i = 0; i < numGlyphs; ++i) { const index = font.getUint16(); if (index >= 32768) { valid = false; break; } glyphNameIndexes.push(index); } if (!valid) { break; } const customNames = [], strBuf = []; while (font.pos < end) { const stringLength = font.getByte(); strBuf.length = stringLength; for (i = 0; i < stringLength; ++i) { strBuf[i] = String.fromCharCode(font.getByte()); } customNames.push(strBuf.join("")); } glyphNames = []; for (i = 0; i < numGlyphs; ++i) { const j = glyphNameIndexes[i]; if (j < 258) { glyphNames.push(_fonts_utils.MacStandardGlyphOrdering[j]); continue; } glyphNames.push(customNames[j - 258]); } break; case 0x00030000: break; default: (0, _util.warn)("Unknown/unsupported post table version " + version); valid = false; if (propertiesObj.defaultEncoding) { glyphNames = propertiesObj.defaultEncoding; } break; } propertiesObj.glyphNames = glyphNames; return valid; } function readNameTable(nameTable) { const start = (font.start ? font.start : 0) + nameTable.offset; font.pos = start; const names = [[], []]; const length = nameTable.length, end = start + length; const format = font.getUint16(); const FORMAT_0_HEADER_LENGTH = 6; if (format !== 0 || length < FORMAT_0_HEADER_LENGTH) { return names; } const numRecords = font.getUint16(); const stringsStart = font.getUint16(); const records = []; const NAME_RECORD_LENGTH = 12; let i, ii; for (i = 0; i < numRecords && font.pos + NAME_RECORD_LENGTH <= end; i++) { const r = { platform: font.getUint16(), encoding: font.getUint16(), language: font.getUint16(), name: font.getUint16(), length: font.getUint16(), offset: font.getUint16() }; if (r.platform === 1 && r.encoding === 0 && r.language === 0 || r.platform === 3 && r.encoding === 1 && r.language === 0x409) { records.push(r); } } for (i = 0, ii = records.length; i < ii; i++) { const record = records[i]; if (record.length <= 0) { continue; } const pos = start + stringsStart + record.offset; if (pos + record.length > end) { continue; } font.pos = pos; const nameIndex = record.name; if (record.encoding) { let str = ""; for (let j = 0, jj = record.length; j < jj; j += 2) { str += String.fromCharCode(font.getUint16()); } names[1][nameIndex] = str; } else { names[0][nameIndex] = font.getString(record.length); } } return names; } const TTOpsStackDeltas = [0, 0, 0, 0, 0, 0, 0, 0, -2, -2, -2, -2, 0, 0, -2, -5, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, -1, -1, 1, -1, -999, 0, 1, 0, -1, -2, 0, -1, -2, -1, -1, 0, -1, -1, 0, 0, -999, -999, -1, -1, -1, -1, -2, -999, -2, -2, -999, 0, -2, -2, 0, 0, -2, 0, -2, 0, 0, 0, -2, -1, -1, 1, 1, 0, 0, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, 0, -1, -1, 0, -999, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, -999, -999, -999, -999, -999, -1, -1, -2, -2, 0, 0, 0, 0, -1, -1, -999, -2, -2, 0, 0, -1, -2, -2, 0, 0, 0, -1, -1, -1, -2]; function sanitizeTTProgram(table, ttContext) { let data = table.data; let i = 0, j, n, b, funcId, pc, lastEndf = 0, lastDeff = 0; const stack = []; const callstack = []; const functionsCalled = []; let tooComplexToFollowFunctions = ttContext.tooComplexToFollowFunctions; let inFDEF = false, ifLevel = 0, inELSE = 0; for (let ii = data.length; i < ii;) { const op = data[i++]; if (op === 0x40) { n = data[i++]; if (inFDEF || inELSE) { i += n; } else { for (j = 0; j < n; j++) { stack.push(data[i++]); } } } else if (op === 0x41) { n = data[i++]; if (inFDEF || inELSE) { i += n * 2; } else { for (j = 0; j < n; j++) { b = data[i++]; stack.push(b << 8 | data[i++]); } } } else if ((op & 0xf8) === 0xb0) { n = op - 0xb0 + 1; if (inFDEF || inELSE) { i += n; } else { for (j = 0; j < n; j++) { stack.push(data[i++]); } } } else if ((op & 0xf8) === 0xb8) { n = op - 0xb8 + 1; if (inFDEF || inELSE) { i += n * 2; } else { for (j = 0; j < n; j++) { b = data[i++]; stack.push(b << 8 | data[i++]); } } } else if (op === 0x2b && !tooComplexToFollowFunctions) { if (!inFDEF && !inELSE) { funcId = stack[stack.length - 1]; if (isNaN(funcId)) { (0, _util.info)("TT: CALL empty stack (or invalid entry)."); } else { ttContext.functionsUsed[funcId] = true; if (funcId in ttContext.functionsStackDeltas) { const newStackLength = stack.length + ttContext.functionsStackDeltas[funcId]; if (newStackLength < 0) { (0, _util.warn)("TT: CALL invalid functions stack delta."); ttContext.hintsValid = false; return; } stack.length = newStackLength; } else if (funcId in ttContext.functionsDefined && !functionsCalled.includes(funcId)) { callstack.push({ data, i, stackTop: stack.length - 1 }); functionsCalled.push(funcId); pc = ttContext.functionsDefined[funcId]; if (!pc) { (0, _util.warn)("TT: CALL non-existent function"); ttContext.hintsValid = false; return; } data = pc.data; i = pc.i; } } } } else if (op === 0x2c && !tooComplexToFollowFunctions) { if (inFDEF || inELSE) { (0, _util.warn)("TT: nested FDEFs not allowed"); tooComplexToFollowFunctions = true; } inFDEF = true; lastDeff = i; funcId = stack.pop(); ttContext.functionsDefined[funcId] = { data, i }; } else if (op === 0x2d) { if (inFDEF) { inFDEF = false; lastEndf = i; } else { pc = callstack.pop(); if (!pc) { (0, _util.warn)("TT: ENDF bad stack"); ttContext.hintsValid = false; return; } funcId = functionsCalled.pop(); data = pc.data; i = pc.i; ttContext.functionsStackDeltas[funcId] = stack.length - pc.stackTop; } } else if (op === 0x89) { if (inFDEF || inELSE) { (0, _util.warn)("TT: nested IDEFs not allowed"); tooComplexToFollowFunctions = true; } inFDEF = true; lastDeff = i; } else if (op === 0x58) { ++ifLevel; } else if (op === 0x1b) { inELSE = ifLevel; } else if (op === 0x59) { if (inELSE === ifLevel) { inELSE = 0; } --ifLevel; } else if (op === 0x1c) { if (!inFDEF && !inELSE) { const offset = stack[stack.length - 1]; if (offset > 0) { i += offset - 1; } } } if (!inFDEF && !inELSE) { let stackDelta = 0; if (op <= 0x8e) { stackDelta = TTOpsStackDeltas[op]; } else if (op >= 0xc0 && op <= 0xdf) { stackDelta = -1; } else if (op >= 0xe0) { stackDelta = -2; } if (op >= 0x71 && op <= 0x75) { n = stack.pop(); if (!isNaN(n)) { stackDelta = -n * 2; } } while (stackDelta < 0 && stack.length > 0) { stack.pop(); stackDelta++; } while (stackDelta > 0) { stack.push(NaN); stackDelta--; } } } ttContext.tooComplexToFollowFunctions = tooComplexToFollowFunctions; const content = [data]; if (i > data.length) { content.push(new Uint8Array(i - data.length)); } if (lastDeff > lastEndf) { (0, _util.warn)("TT: complementing a missing function tail"); content.push(new Uint8Array([0x22, 0x2d])); } foldTTTable(table, content); } function checkInvalidFunctions(ttContext, maxFunctionDefs) { if (ttContext.tooComplexToFollowFunctions) { return; } if (ttContext.functionsDefined.length > maxFunctionDefs) { (0, _util.warn)("TT: more functions defined than expected"); ttContext.hintsValid = false; return; } for (let j = 0, jj = ttContext.functionsUsed.length; j < jj; j++) { if (j > maxFunctionDefs) { (0, _util.warn)("TT: invalid function id: " + j); ttContext.hintsValid = false; return; } if (ttContext.functionsUsed[j] && !ttContext.functionsDefined[j]) { (0, _util.warn)("TT: undefined function: " + j); ttContext.hintsValid = false; return; } } } function foldTTTable(table, content) { if (content.length > 1) { let newLength = 0; let j, jj; for (j = 0, jj = content.length; j < jj; j++) { newLength += content[j].length; } newLength = newLength + 3 & ~3; const result = new Uint8Array(newLength); let pos = 0; for (j = 0, jj = content.length; j < jj; j++) { result.set(content[j], pos); pos += content[j].length; } table.data = result; table.length = newLength; } } function sanitizeTTPrograms(fpgm, prep, cvt, maxFunctionDefs) { const ttContext = { functionsDefined: [], functionsUsed: [], functionsStackDeltas: [], tooComplexToFollowFunctions: false, hintsValid: true }; if (fpgm) { sanitizeTTProgram(fpgm, ttContext); } if (prep) { sanitizeTTProgram(prep, ttContext); } if (fpgm) { checkInvalidFunctions(ttContext, maxFunctionDefs); } if (cvt && cvt.length & 1) { const cvtData = new Uint8Array(cvt.length + 1); cvtData.set(cvt.data); cvt.data = cvtData; } return ttContext.hintsValid; } font = new _stream.Stream(new Uint8Array(font.getBytes())); let header, tables; if (isTrueTypeCollectionFile(font)) { const ttcData = readTrueTypeCollectionData(font, this.name); header = ttcData.header; tables = ttcData.tables; } else { header = readOpenTypeHeader(font); tables = readTables(font, header.numTables); } let cff, cffFile; const isTrueType = !tables["CFF "]; if (!isTrueType) { const isComposite = properties.composite && ((properties.cidToGidMap || []).length > 0 || !(properties.cMap instanceof _cmap.IdentityCMap)); if (header.version === "OTTO" && !isComposite || !tables.head || !tables.hhea || !tables.maxp || !tables.post) { cffFile = new _stream.Stream(tables["CFF "].data); cff = new _cff_font.CFFFont(cffFile, properties); adjustWidths(properties); return this.convert(name, cff, properties); } delete tables.glyf; delete tables.loca; delete tables.fpgm; delete tables.prep; delete tables["cvt "]; this.isOpenType = true; } else { if (!tables.loca) { throw new _util.FormatError('Required "loca" table is not found'); } if (!tables.glyf) { (0, _util.warn)('Required "glyf" table is not found -- trying to recover.'); tables.glyf = { tag: "glyf", data: new Uint8Array(0) }; } this.isOpenType = false; } if (!tables.maxp) { throw new _util.FormatError('Required "maxp" table is not found'); } font.pos = (font.start || 0) + tables.maxp.offset; const version = font.getInt32(); const numGlyphs = font.getUint16(); if (properties.scaleFactors && properties.scaleFactors.length === numGlyphs && isTrueType) { const { scaleFactors } = properties; const isGlyphLocationsLong = int16(tables.head.data[50], tables.head.data[51]); const glyphs = new _glyf.GlyfTable({ glyfTable: tables.glyf.data, isGlyphLocationsLong, locaTable: tables.loca.data, numGlyphs }); glyphs.scale(scaleFactors); const { glyf, loca, isLocationLong } = glyphs.write(); tables.glyf.data = glyf; tables.loca.data = loca; if (isLocationLong !== !!isGlyphLocationsLong) { tables.head.data[50] = 0; tables.head.data[51] = isLocationLong ? 1 : 0; } const metrics = tables.hmtx.data; for (let i = 0; i < numGlyphs; i++) { const j = 4 * i; const advanceWidth = Math.round(scaleFactors[i] * int16(metrics[j], metrics[j + 1])); metrics[j] = advanceWidth >> 8 & 0xff; metrics[j + 1] = advanceWidth & 0xff; const lsb = Math.round(scaleFactors[i] * signedInt16(metrics[j + 2], metrics[j + 3])); writeSignedInt16(metrics, j + 2, lsb); } } let numGlyphsOut = numGlyphs + 1; let dupFirstEntry = true; if (numGlyphsOut > 0xffff) { dupFirstEntry = false; numGlyphsOut = numGlyphs; (0, _util.warn)("Not enough space in glyfs to duplicate first glyph."); } let maxFunctionDefs = 0; let maxSizeOfInstructions = 0; if (version >= 0x00010000 && tables.maxp.length >= 22) { font.pos += 8; const maxZones = font.getUint16(); if (maxZones > 2) { tables.maxp.data[14] = 0; tables.maxp.data[15] = 2; } font.pos += 4; maxFunctionDefs = font.getUint16(); font.pos += 4; maxSizeOfInstructions = font.getUint16(); } tables.maxp.data[4] = numGlyphsOut >> 8; tables.maxp.data[5] = numGlyphsOut & 255; const hintsValid = sanitizeTTPrograms(tables.fpgm, tables.prep, tables["cvt "], maxFunctionDefs); if (!hintsValid) { delete tables.fpgm; delete tables.prep; delete tables["cvt "]; } sanitizeMetrics(font, tables.hhea, tables.hmtx, tables.head, numGlyphsOut, dupFirstEntry); if (!tables.head) { throw new _util.FormatError('Required "head" table is not found'); } sanitizeHead(tables.head, numGlyphs, isTrueType ? tables.loca.length : 0); let missingGlyphs = Object.create(null); if (isTrueType) { const isGlyphLocationsLong = int16(tables.head.data[50], tables.head.data[51]); const glyphsInfo = sanitizeGlyphLocations(tables.loca, tables.glyf, numGlyphs, isGlyphLocationsLong, hintsValid, dupFirstEntry, maxSizeOfInstructions); missingGlyphs = glyphsInfo.missingGlyphs; if (version >= 0x00010000 && tables.maxp.length >= 22) { tables.maxp.data[26] = glyphsInfo.maxSizeOfInstructions >> 8; tables.maxp.data[27] = glyphsInfo.maxSizeOfInstructions & 255; } } if (!tables.hhea) { throw new _util.FormatError('Required "hhea" table is not found'); } if (tables.hhea.data[10] === 0 && tables.hhea.data[11] === 0) { tables.hhea.data[10] = 0xff; tables.hhea.data[11] = 0xff; } const metricsOverride = { unitsPerEm: int16(tables.head.data[18], tables.head.data[19]), yMax: int16(tables.head.data[42], tables.head.data[43]), yMin: signedInt16(tables.head.data[38], tables.head.data[39]), ascent: signedInt16(tables.hhea.data[4], tables.hhea.data[5]), descent: signedInt16(tables.hhea.data[6], tables.hhea.data[7]), lineGap: signedInt16(tables.hhea.data[8], tables.hhea.data[9]) }; this.ascent = metricsOverride.ascent / metricsOverride.unitsPerEm; this.descent = metricsOverride.descent / metricsOverride.unitsPerEm; this.lineGap = metricsOverride.lineGap / metricsOverride.unitsPerEm; if (this.cssFontInfo && this.cssFontInfo.lineHeight) { this.lineHeight = this.cssFontInfo.metrics.lineHeight; this.lineGap = this.cssFontInfo.metrics.lineGap; } else { this.lineHeight = this.ascent - this.descent + this.lineGap; } if (tables.post) { readPostScriptTable(tables.post, properties, numGlyphs); } tables.post = { tag: "post", data: createPostTable(properties) }; const charCodeToGlyphId = []; function hasGlyph(glyphId) { return !missingGlyphs[glyphId]; } if (properties.composite) { const cidToGidMap = properties.cidToGidMap || []; const isCidToGidMapEmpty = cidToGidMap.length === 0; properties.cMap.forEach(function (charCode, cid) { if (typeof cid === "string") { cid = convertCidString(charCode, cid, true); } if (cid > 0xffff) { throw new _util.FormatError("Max size of CID is 65,535"); } let glyphId = -1; if (isCidToGidMapEmpty) { glyphId = cid; } else if (cidToGidMap[cid] !== undefined) { glyphId = cidToGidMap[cid]; } if (glyphId >= 0 && glyphId < numGlyphs && hasGlyph(glyphId)) { charCodeToGlyphId[charCode] = glyphId; } }); } else { const cmapTable = readCmapTable(tables.cmap, font, this.isSymbolicFont, properties.hasEncoding); const cmapPlatformId = cmapTable.platformId; const cmapEncodingId = cmapTable.encodingId; const cmapMappings = cmapTable.mappings; const cmapMappingsLength = cmapMappings.length; let baseEncoding = [], forcePostTable = false; if (properties.hasEncoding && (properties.baseEncodingName === "MacRomanEncoding" || properties.baseEncodingName === "WinAnsiEncoding")) { baseEncoding = (0, _encodings.getEncoding)(properties.baseEncodingName); } if (properties.hasEncoding && !this.isSymbolicFont && (cmapPlatformId === 3 && cmapEncodingId === 1 || cmapPlatformId === 1 && cmapEncodingId === 0)) { const glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); for (let charCode = 0; charCode < 256; charCode++) { let glyphName; if (this.differences[charCode] !== undefined) { glyphName = this.differences[charCode]; } else if (baseEncoding.length && baseEncoding[charCode] !== "") { glyphName = baseEncoding[charCode]; } else { glyphName = _encodings.StandardEncoding[charCode]; } if (!glyphName) { continue; } const standardGlyphName = (0, _fonts_utils.recoverGlyphName)(glyphName, glyphsUnicodeMap); let unicodeOrCharCode; if (cmapPlatformId === 3 && cmapEncodingId === 1) { unicodeOrCharCode = glyphsUnicodeMap[standardGlyphName]; } else if (cmapPlatformId === 1 && cmapEncodingId === 0) { unicodeOrCharCode = _encodings.MacRomanEncoding.indexOf(standardGlyphName); } if (unicodeOrCharCode === undefined) { if (!properties.glyphNames && properties.hasIncludedToUnicodeMap && !(this.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap)) { const unicode = this.toUnicode.get(charCode); if (unicode) { unicodeOrCharCode = unicode.codePointAt(0); } } if (unicodeOrCharCode === undefined) { continue; } } for (let i = 0; i < cmapMappingsLength; ++i) { if (cmapMappings[i].charCode !== unicodeOrCharCode) { continue; } charCodeToGlyphId[charCode] = cmapMappings[i].glyphId; break; } } } else if (cmapPlatformId === 0) { for (let i = 0; i < cmapMappingsLength; ++i) { charCodeToGlyphId[cmapMappings[i].charCode] = cmapMappings[i].glyphId; } forcePostTable = true; } else { for (let i = 0; i < cmapMappingsLength; ++i) { let charCode = cmapMappings[i].charCode; if (cmapPlatformId === 3 && charCode >= 0xf000 && charCode <= 0xf0ff) { charCode &= 0xff; } charCodeToGlyphId[charCode] = cmapMappings[i].glyphId; } } if (properties.glyphNames && (baseEncoding.length || this.differences.length)) { for (let i = 0; i < 256; ++i) { if (!forcePostTable && charCodeToGlyphId[i] !== undefined) { continue; } const glyphName = this.differences[i] || baseEncoding[i]; if (!glyphName) { continue; } const glyphId = properties.glyphNames.indexOf(glyphName); if (glyphId > 0 && hasGlyph(glyphId)) { charCodeToGlyphId[i] = glyphId; } } } } if (charCodeToGlyphId.length === 0) { charCodeToGlyphId[0] = 0; } let glyphZeroId = numGlyphsOut - 1; if (!dupFirstEntry) { glyphZeroId = 0; } if (!properties.cssFontInfo) { const newMapping = adjustMapping(charCodeToGlyphId, hasGlyph, glyphZeroId); this.toFontChar = newMapping.toFontChar; tables.cmap = { tag: "cmap", data: createCmapTable(newMapping.charCodeToGlyphId, numGlyphsOut) }; if (!tables["OS/2"] || !validateOS2Table(tables["OS/2"], font)) { tables["OS/2"] = { tag: "OS/2", data: createOS2Table(properties, newMapping.charCodeToGlyphId, metricsOverride) }; } } if (!isTrueType) { try { cffFile = new _stream.Stream(tables["CFF "].data); const parser = new _cff_parser.CFFParser(cffFile, properties, _fonts_utils.SEAC_ANALYSIS_ENABLED); cff = parser.parse(); cff.duplicateFirstGlyph(); const compiler = new _cff_parser.CFFCompiler(cff); tables["CFF "].data = compiler.compile(); } catch (e) { (0, _util.warn)("Failed to compile font " + properties.loadedName); } } if (!tables.name) { tables.name = { tag: "name", data: createNameTable(this.name) }; } else { const namePrototype = readNameTable(tables.name); tables.name.data = createNameTable(name, namePrototype); this.psName = namePrototype[0][6] || null; } const builder = new _opentype_file_builder.OpenTypeFileBuilder(header.version); for (const tableTag in tables) { builder.addTable(tableTag, tables[tableTag].data); } return builder.toArray(); } convert(fontName, font, properties) { properties.fixedPitch = false; if (properties.builtInEncoding) { adjustToUnicode(properties, properties.builtInEncoding); } let glyphZeroId = 1; if (font instanceof _cff_font.CFFFont) { glyphZeroId = font.numGlyphs - 1; } const mapping = font.getGlyphMapping(properties); let newMapping = null; let newCharCodeToGlyphId = mapping; if (!properties.cssFontInfo) { newMapping = adjustMapping(mapping, font.hasGlyphId.bind(font), glyphZeroId); this.toFontChar = newMapping.toFontChar; newCharCodeToGlyphId = newMapping.charCodeToGlyphId; } const numGlyphs = font.numGlyphs; function getCharCodes(charCodeToGlyphId, glyphId) { let charCodes = null; for (const charCode in charCodeToGlyphId) { if (glyphId === charCodeToGlyphId[charCode]) { if (!charCodes) { charCodes = []; } charCodes.push(charCode | 0); } } return charCodes; } function createCharCode(charCodeToGlyphId, glyphId) { for (const charCode in charCodeToGlyphId) { if (glyphId === charCodeToGlyphId[charCode]) { return charCode | 0; } } newMapping.charCodeToGlyphId[newMapping.nextAvailableFontCharCode] = glyphId; return newMapping.nextAvailableFontCharCode++; } const seacs = font.seacs; if (newMapping && _fonts_utils.SEAC_ANALYSIS_ENABLED && seacs && seacs.length) { const matrix = properties.fontMatrix || _util.FONT_IDENTITY_MATRIX; const charset = font.getCharset(); const seacMap = Object.create(null); for (let glyphId in seacs) { glyphId |= 0; const seac = seacs[glyphId]; const baseGlyphName = _encodings.StandardEncoding[seac[2]]; const accentGlyphName = _encodings.StandardEncoding[seac[3]]; const baseGlyphId = charset.indexOf(baseGlyphName); const accentGlyphId = charset.indexOf(accentGlyphName); if (baseGlyphId < 0 || accentGlyphId < 0) { continue; } const accentOffset = { x: seac[0] * matrix[0] + seac[1] * matrix[2] + matrix[4], y: seac[0] * matrix[1] + seac[1] * matrix[3] + matrix[5] }; const charCodes = getCharCodes(mapping, glyphId); if (!charCodes) { continue; } for (let i = 0, ii = charCodes.length; i < ii; i++) { const charCode = charCodes[i]; const charCodeToGlyphId = newMapping.charCodeToGlyphId; const baseFontCharCode = createCharCode(charCodeToGlyphId, baseGlyphId); const accentFontCharCode = createCharCode(charCodeToGlyphId, accentGlyphId); seacMap[charCode] = { baseFontCharCode, accentFontCharCode, accentOffset }; } } properties.seacMap = seacMap; } const unitsPerEm = 1 / (properties.fontMatrix || _util.FONT_IDENTITY_MATRIX)[0]; const builder = new _opentype_file_builder.OpenTypeFileBuilder("\x4F\x54\x54\x4F"); builder.addTable("CFF ", font.data); builder.addTable("OS/2", createOS2Table(properties, newCharCodeToGlyphId)); builder.addTable("cmap", createCmapTable(newCharCodeToGlyphId, numGlyphs)); builder.addTable("head", "\x00\x01\x00\x00" + "\x00\x00\x10\x00" + "\x00\x00\x00\x00" + "\x5F\x0F\x3C\xF5" + "\x00\x00" + safeString16(unitsPerEm) + "\x00\x00\x00\x00\x9e\x0b\x7e\x27" + "\x00\x00\x00\x00\x9e\x0b\x7e\x27" + "\x00\x00" + safeString16(properties.descent) + "\x0F\xFF" + safeString16(properties.ascent) + string16(properties.italicAngle ? 2 : 0) + "\x00\x11" + "\x00\x00" + "\x00\x00" + "\x00\x00"); builder.addTable("hhea", "\x00\x01\x00\x00" + safeString16(properties.ascent) + safeString16(properties.descent) + "\x00\x00" + "\xFF\xFF" + "\x00\x00" + "\x00\x00" + "\x00\x00" + safeString16(properties.capHeight) + safeString16(Math.tan(properties.italicAngle) * properties.xHeight) + "\x00\x00" + "\x00\x00" + "\x00\x00" + "\x00\x00" + "\x00\x00" + "\x00\x00" + string16(numGlyphs)); builder.addTable("hmtx", function fontFieldsHmtx() { const charstrings = font.charstrings; const cffWidths = font.cff ? font.cff.widths : null; let hmtx = "\x00\x00\x00\x00"; for (let i = 1, ii = numGlyphs; i < ii; i++) { let width = 0; if (charstrings) { const charstring = charstrings[i - 1]; width = "width" in charstring ? charstring.width : 0; } else if (cffWidths) { width = Math.ceil(cffWidths[i] || 0); } hmtx += string16(width) + string16(0); } return hmtx; }()); builder.addTable("maxp", "\x00\x00\x50\x00" + string16(numGlyphs)); builder.addTable("name", createNameTable(fontName)); builder.addTable("post", createPostTable(properties)); return builder.toArray(); } get spaceWidth() { const possibleSpaceReplacements = ["space", "minus", "one", "i", "I"]; let width; for (let i = 0, ii = possibleSpaceReplacements.length; i < ii; i++) { const glyphName = possibleSpaceReplacements[i]; if (glyphName in this.widths) { width = this.widths[glyphName]; break; } const glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); const glyphUnicode = glyphsUnicodeMap[glyphName]; let charcode = 0; if (this.composite && this.cMap.contains(glyphUnicode)) { charcode = this.cMap.lookup(glyphUnicode); if (typeof charcode === "string") { charcode = convertCidString(glyphUnicode, charcode); } } if (!charcode && this.toUnicode) { charcode = this.toUnicode.charCodeOf(glyphUnicode); } if (charcode <= 0) { charcode = glyphUnicode; } width = this.widths[charcode]; if (width) { break; } } width = width || this.defaultWidth; return (0, _util.shadow)(this, "spaceWidth", width); } _charToGlyph(charcode, isSpace = false) { let fontCharCode, width, operatorListId; let widthCode = charcode; if (this.cMap && this.cMap.contains(charcode)) { widthCode = this.cMap.lookup(charcode); if (typeof widthCode === "string") { widthCode = convertCidString(charcode, widthCode); } } width = this.widths[widthCode]; width = (0, _util.isNum)(width) ? width : this.defaultWidth; const vmetric = this.vmetrics && this.vmetrics[widthCode]; let unicode = this.toUnicode.get(charcode) || charcode; if (typeof unicode === "number") { unicode = String.fromCharCode(unicode); } let isInFont = this.toFontChar[charcode] !== undefined; fontCharCode = this.toFontChar[charcode] || charcode; if (this.missingFile) { const glyphName = this.differences[charcode] || this.defaultEncoding[charcode]; if ((glyphName === ".notdef" || glyphName === "") && this.type === "Type1") { fontCharCode = 0x20; } fontCharCode = (0, _unicode.mapSpecialUnicodeValues)(fontCharCode); } if (this.isType3Font) { operatorListId = fontCharCode; } let accent = null; if (this.seacMap && this.seacMap[charcode]) { isInFont = true; const seac = this.seacMap[charcode]; fontCharCode = seac.baseFontCharCode; accent = { fontChar: String.fromCodePoint(seac.accentFontCharCode), offset: seac.accentOffset }; } let fontChar = ""; if (typeof fontCharCode === "number") { if (fontCharCode <= 0x10ffff) { fontChar = String.fromCodePoint(fontCharCode); } else { (0, _util.warn)(`charToGlyph - invalid fontCharCode: ${fontCharCode}`); } } let glyph = this._glyphCache[charcode]; if (!glyph || !glyph.matchesForCache(charcode, fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont)) { glyph = new Glyph(charcode, fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont); this._glyphCache[charcode] = glyph; } return glyph; } charsToGlyphs(chars) { let glyphs = this._charsCache[chars]; if (glyphs) { return glyphs; } glyphs = []; if (this.cMap) { const c = Object.create(null), ii = chars.length; let i = 0; while (i < ii) { this.cMap.readCharCode(chars, i, c); const { charcode, length } = c; i += length; const glyph = this._charToGlyph(charcode, length === 1 && chars.charCodeAt(i - 1) === 0x20); glyphs.push(glyph); } } else { for (let i = 0, ii = chars.length; i < ii; ++i) { const charcode = chars.charCodeAt(i); const glyph = this._charToGlyph(charcode, charcode === 0x20); glyphs.push(glyph); } } return this._charsCache[chars] = glyphs; } getCharPositions(chars) { const positions = []; if (this.cMap) { const c = Object.create(null); let i = 0; while (i < chars.length) { this.cMap.readCharCode(chars, i, c); const length = c.length; positions.push([i, i + length]); i += length; } } else { for (let i = 0, ii = chars.length; i < ii; ++i) { positions.push([i, i + 1]); } } return positions; } get glyphCacheValues() { return Object.values(this._glyphCache); } encodeString(str) { const buffers = []; const currentBuf = []; const hasCurrentBufErrors = () => buffers.length % 2 === 1; const getCharCode = this.toUnicode instanceof _to_unicode_map.IdentityToUnicodeMap ? unicode => this.toUnicode.charCodeOf(unicode) : unicode => this.toUnicode.charCodeOf(String.fromCodePoint(unicode)); for (let i = 0, ii = str.length; i < ii; i++) { const unicode = str.codePointAt(i); if (unicode > 0xd7ff && (unicode < 0xe000 || unicode > 0xfffd)) { i++; } if (this.toUnicode) { const charCode = getCharCode(unicode); if (charCode !== -1) { if (hasCurrentBufErrors()) { buffers.push(currentBuf.join("")); currentBuf.length = 0; } const charCodeLength = this.cMap ? this.cMap.getCharCodeLength(charCode) : 1; for (let j = charCodeLength - 1; j >= 0; j--) { currentBuf.push(String.fromCharCode(charCode >> 8 * j & 0xff)); } continue; } } if (!hasCurrentBufErrors()) { buffers.push(currentBuf.join("")); currentBuf.length = 0; } currentBuf.push(String.fromCodePoint(unicode)); } buffers.push(currentBuf.join("")); return buffers; } } exports.Font = Font; class ErrorFont { constructor(error) { this.error = error; this.loadedName = "g_font_error"; this.missingFile = true; } charsToGlyphs() { return []; } encodeString(chars) { return [chars]; } exportData(extraProperties = false) { return { error: this.error }; } } exports.ErrorFont = ErrorFont; /***/ }), /* 45 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.CFFTopDict = exports.CFFStrings = exports.CFFStandardStrings = exports.CFFPrivateDict = exports.CFFParser = exports.CFFIndex = exports.CFFHeader = exports.CFFFDSelect = exports.CFFCompiler = exports.CFFCharset = exports.CFF = void 0; var _util = __w_pdfjs_require__(2); var _charsets = __w_pdfjs_require__(46); var _encodings = __w_pdfjs_require__(19); const MAX_SUBR_NESTING = 10; const CFFStandardStrings = [".notdef", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quoteright", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "quoteleft", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "exclamdown", "cent", "sterling", "fraction", "yen", "florin", "section", "currency", "quotesingle", "quotedblleft", "guillemotleft", "guilsinglleft", "guilsinglright", "fi", "fl", "endash", "dagger", "daggerdbl", "periodcentered", "paragraph", "bullet", "quotesinglbase", "quotedblbase", "quotedblright", "guillemotright", "ellipsis", "perthousand", "questiondown", "grave", "acute", "circumflex", "tilde", "macron", "breve", "dotaccent", "dieresis", "ring", "cedilla", "hungarumlaut", "ogonek", "caron", "emdash", "AE", "ordfeminine", "Lslash", "Oslash", "OE", "ordmasculine", "ae", "dotlessi", "lslash", "oslash", "oe", "germandbls", "onesuperior", "logicalnot", "mu", "trademark", "Eth", "onehalf", "plusminus", "Thorn", "onequarter", "divide", "brokenbar", "degree", "thorn", "threequarters", "twosuperior", "registered", "minus", "eth", "multiply", "threesuperior", "copyright", "Aacute", "Acircumflex", "Adieresis", "Agrave", "Aring", "Atilde", "Ccedilla", "Eacute", "Ecircumflex", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Ntilde", "Oacute", "Ocircumflex", "Odieresis", "Ograve", "Otilde", "Scaron", "Uacute", "Ucircumflex", "Udieresis", "Ugrave", "Yacute", "Ydieresis", "Zcaron", "aacute", "acircumflex", "adieresis", "agrave", "aring", "atilde", "ccedilla", "eacute", "ecircumflex", "edieresis", "egrave", "iacute", "icircumflex", "idieresis", "igrave", "ntilde", "oacute", "ocircumflex", "odieresis", "ograve", "otilde", "scaron", "uacute", "ucircumflex", "udieresis", "ugrave", "yacute", "ydieresis", "zcaron", "exclamsmall", "Hungarumlautsmall", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "commasuperior", "threequartersemdash", "periodsuperior", "questionsmall", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "isuperior", "lsuperior", "msuperior", "nsuperior", "osuperior", "rsuperior", "ssuperior", "tsuperior", "ff", "ffi", "ffl", "parenleftinferior", "parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "exclamdownsmall", "centoldstyle", "Lslashsmall", "Scaronsmall", "Zcaronsmall", "Dieresissmall", "Brevesmall", "Caronsmall", "Dotaccentsmall", "Macronsmall", "figuredash", "hypheninferior", "Ogoneksmall", "Ringsmall", "Cedillasmall", "questiondownsmall", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "zerosuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior", "Agravesmall", "Aacutesmall", "Acircumflexsmall", "Atildesmall", "Adieresissmall", "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall", "Eacutesmall", "Ecircumflexsmall", "Edieresissmall", "Igravesmall", "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall", "Ntildesmall", "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall", "Odieresissmall", "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall", "Ucircumflexsmall", "Udieresissmall", "Yacutesmall", "Thornsmall", "Ydieresissmall", "001.000", "001.001", "001.002", "001.003", "Black", "Bold", "Book", "Light", "Medium", "Regular", "Roman", "Semibold"]; exports.CFFStandardStrings = CFFStandardStrings; const NUM_STANDARD_CFF_STRINGS = 391; const CFFParser = function CFFParserClosure() { const CharstringValidationData = [null, { id: "hstem", min: 2, stackClearing: true, stem: true }, null, { id: "vstem", min: 2, stackClearing: true, stem: true }, { id: "vmoveto", min: 1, stackClearing: true }, { id: "rlineto", min: 2, resetStack: true }, { id: "hlineto", min: 1, resetStack: true }, { id: "vlineto", min: 1, resetStack: true }, { id: "rrcurveto", min: 6, resetStack: true }, null, { id: "callsubr", min: 1, undefStack: true }, { id: "return", min: 0, undefStack: true }, null, null, { id: "endchar", min: 0, stackClearing: true }, null, null, null, { id: "hstemhm", min: 2, stackClearing: true, stem: true }, { id: "hintmask", min: 0, stackClearing: true }, { id: "cntrmask", min: 0, stackClearing: true }, { id: "rmoveto", min: 2, stackClearing: true }, { id: "hmoveto", min: 1, stackClearing: true }, { id: "vstemhm", min: 2, stackClearing: true, stem: true }, { id: "rcurveline", min: 8, resetStack: true }, { id: "rlinecurve", min: 8, resetStack: true }, { id: "vvcurveto", min: 4, resetStack: true }, { id: "hhcurveto", min: 4, resetStack: true }, null, { id: "callgsubr", min: 1, undefStack: true }, { id: "vhcurveto", min: 4, resetStack: true }, { id: "hvcurveto", min: 4, resetStack: true }]; const CharstringValidationData12 = [null, null, null, { id: "and", min: 2, stackDelta: -1 }, { id: "or", min: 2, stackDelta: -1 }, { id: "not", min: 1, stackDelta: 0 }, null, null, null, { id: "abs", min: 1, stackDelta: 0 }, { id: "add", min: 2, stackDelta: -1, stackFn: function stack_div(stack, index) { stack[index - 2] = stack[index - 2] + stack[index - 1]; } }, { id: "sub", min: 2, stackDelta: -1, stackFn: function stack_div(stack, index) { stack[index - 2] = stack[index - 2] - stack[index - 1]; } }, { id: "div", min: 2, stackDelta: -1, stackFn: function stack_div(stack, index) { stack[index - 2] = stack[index - 2] / stack[index - 1]; } }, null, { id: "neg", min: 1, stackDelta: 0, stackFn: function stack_div(stack, index) { stack[index - 1] = -stack[index - 1]; } }, { id: "eq", min: 2, stackDelta: -1 }, null, null, { id: "drop", min: 1, stackDelta: -1 }, null, { id: "put", min: 2, stackDelta: -2 }, { id: "get", min: 1, stackDelta: 0 }, { id: "ifelse", min: 4, stackDelta: -3 }, { id: "random", min: 0, stackDelta: 1 }, { id: "mul", min: 2, stackDelta: -1, stackFn: function stack_div(stack, index) { stack[index - 2] = stack[index - 2] * stack[index - 1]; } }, null, { id: "sqrt", min: 1, stackDelta: 0 }, { id: "dup", min: 1, stackDelta: 1 }, { id: "exch", min: 2, stackDelta: 0 }, { id: "index", min: 2, stackDelta: 0 }, { id: "roll", min: 3, stackDelta: -2 }, null, null, null, { id: "hflex", min: 7, resetStack: true }, { id: "flex", min: 13, resetStack: true }, { id: "hflex1", min: 9, resetStack: true }, { id: "flex1", min: 11, resetStack: true }]; class CFFParser { constructor(file, properties, seacAnalysisEnabled) { this.bytes = file.getBytes(); this.properties = properties; this.seacAnalysisEnabled = !!seacAnalysisEnabled; } parse() { const properties = this.properties; const cff = new CFF(); this.cff = cff; const header = this.parseHeader(); const nameIndex = this.parseIndex(header.endPos); const topDictIndex = this.parseIndex(nameIndex.endPos); const stringIndex = this.parseIndex(topDictIndex.endPos); const globalSubrIndex = this.parseIndex(stringIndex.endPos); const topDictParsed = this.parseDict(topDictIndex.obj.get(0)); const topDict = this.createDict(CFFTopDict, topDictParsed, cff.strings); cff.header = header.obj; cff.names = this.parseNameIndex(nameIndex.obj); cff.strings = this.parseStringIndex(stringIndex.obj); cff.topDict = topDict; cff.globalSubrIndex = globalSubrIndex.obj; this.parsePrivateDict(cff.topDict); cff.isCIDFont = topDict.hasName("ROS"); const charStringOffset = topDict.getByName("CharStrings"); const charStringIndex = this.parseIndex(charStringOffset).obj; const fontMatrix = topDict.getByName("FontMatrix"); if (fontMatrix) { properties.fontMatrix = fontMatrix; } const fontBBox = topDict.getByName("FontBBox"); if (fontBBox) { properties.ascent = Math.max(fontBBox[3], fontBBox[1]); properties.descent = Math.min(fontBBox[1], fontBBox[3]); properties.ascentScaled = true; } let charset, encoding; if (cff.isCIDFont) { const fdArrayIndex = this.parseIndex(topDict.getByName("FDArray")).obj; for (let i = 0, ii = fdArrayIndex.count; i < ii; ++i) { const dictRaw = fdArrayIndex.get(i); const fontDict = this.createDict(CFFTopDict, this.parseDict(dictRaw), cff.strings); this.parsePrivateDict(fontDict); cff.fdArray.push(fontDict); } encoding = null; charset = this.parseCharsets(topDict.getByName("charset"), charStringIndex.count, cff.strings, true); cff.fdSelect = this.parseFDSelect(topDict.getByName("FDSelect"), charStringIndex.count); } else { charset = this.parseCharsets(topDict.getByName("charset"), charStringIndex.count, cff.strings, false); encoding = this.parseEncoding(topDict.getByName("Encoding"), properties, cff.strings, charset.charset); } cff.charset = charset; cff.encoding = encoding; const charStringsAndSeacs = this.parseCharStrings({ charStrings: charStringIndex, localSubrIndex: topDict.privateDict.subrsIndex, globalSubrIndex: globalSubrIndex.obj, fdSelect: cff.fdSelect, fdArray: cff.fdArray, privateDict: topDict.privateDict }); cff.charStrings = charStringsAndSeacs.charStrings; cff.seacs = charStringsAndSeacs.seacs; cff.widths = charStringsAndSeacs.widths; return cff; } parseHeader() { let bytes = this.bytes; const bytesLength = bytes.length; let offset = 0; while (offset < bytesLength && bytes[offset] !== 1) { ++offset; } if (offset >= bytesLength) { throw new _util.FormatError("Invalid CFF header"); } if (offset !== 0) { (0, _util.info)("cff data is shifted"); bytes = bytes.subarray(offset); this.bytes = bytes; } const major = bytes[0]; const minor = bytes[1]; const hdrSize = bytes[2]; const offSize = bytes[3]; const header = new CFFHeader(major, minor, hdrSize, offSize); return { obj: header, endPos: hdrSize }; } parseDict(dict) { let pos = 0; function parseOperand() { let value = dict[pos++]; if (value === 30) { return parseFloatOperand(); } else if (value === 28) { value = dict[pos++]; value = (value << 24 | dict[pos++] << 16) >> 16; return value; } else if (value === 29) { value = dict[pos++]; value = value << 8 | dict[pos++]; value = value << 8 | dict[pos++]; value = value << 8 | dict[pos++]; return value; } else if (value >= 32 && value <= 246) { return value - 139; } else if (value >= 247 && value <= 250) { return (value - 247) * 256 + dict[pos++] + 108; } else if (value >= 251 && value <= 254) { return -((value - 251) * 256) - dict[pos++] - 108; } (0, _util.warn)('CFFParser_parseDict: "' + value + '" is a reserved command.'); return NaN; } function parseFloatOperand() { let str = ""; const eof = 15; const lookup = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ".", "E", "E-", null, "-"]; const length = dict.length; while (pos < length) { const b = dict[pos++]; const b1 = b >> 4; const b2 = b & 15; if (b1 === eof) { break; } str += lookup[b1]; if (b2 === eof) { break; } str += lookup[b2]; } return parseFloat(str); } let operands = []; const entries = []; pos = 0; const end = dict.length; while (pos < end) { let b = dict[pos]; if (b <= 21) { if (b === 12) { b = b << 8 | dict[++pos]; } entries.push([b, operands]); operands = []; ++pos; } else { operands.push(parseOperand()); } } return entries; } parseIndex(pos) { const cffIndex = new CFFIndex(); const bytes = this.bytes; const count = bytes[pos++] << 8 | bytes[pos++]; const offsets = []; let end = pos; let i, ii; if (count !== 0) { const offsetSize = bytes[pos++]; const startPos = pos + (count + 1) * offsetSize - 1; for (i = 0, ii = count + 1; i < ii; ++i) { let offset = 0; for (let j = 0; j < offsetSize; ++j) { offset <<= 8; offset += bytes[pos++]; } offsets.push(startPos + offset); } end = offsets[count]; } for (i = 0, ii = offsets.length - 1; i < ii; ++i) { const offsetStart = offsets[i]; const offsetEnd = offsets[i + 1]; cffIndex.add(bytes.subarray(offsetStart, offsetEnd)); } return { obj: cffIndex, endPos: end }; } parseNameIndex(index) { const names = []; for (let i = 0, ii = index.count; i < ii; ++i) { const name = index.get(i); names.push((0, _util.bytesToString)(name)); } return names; } parseStringIndex(index) { const strings = new CFFStrings(); for (let i = 0, ii = index.count; i < ii; ++i) { const data = index.get(i); strings.add((0, _util.bytesToString)(data)); } return strings; } createDict(Type, dict, strings) { const cffDict = new Type(strings); for (let i = 0, ii = dict.length; i < ii; ++i) { const pair = dict[i]; const key = pair[0]; const value = pair[1]; cffDict.setByKey(key, value); } return cffDict; } parseCharString(state, data, localSubrIndex, globalSubrIndex) { if (!data || state.callDepth > MAX_SUBR_NESTING) { return false; } let stackSize = state.stackSize; const stack = state.stack; const length = data.length; for (let j = 0; j < length;) { const value = data[j++]; let validationCommand = null; if (value === 12) { const q = data[j++]; if (q === 0) { data[j - 2] = 139; data[j - 1] = 22; stackSize = 0; } else { validationCommand = CharstringValidationData12[q]; } } else if (value === 28) { stack[stackSize] = (data[j] << 24 | data[j + 1] << 16) >> 16; j += 2; stackSize++; } else if (value === 14) { if (stackSize >= 4) { stackSize -= 4; if (this.seacAnalysisEnabled) { state.seac = stack.slice(stackSize, stackSize + 4); return false; } } validationCommand = CharstringValidationData[value]; } else if (value >= 32 && value <= 246) { stack[stackSize] = value - 139; stackSize++; } else if (value >= 247 && value <= 254) { stack[stackSize] = value < 251 ? (value - 247 << 8) + data[j] + 108 : -(value - 251 << 8) - data[j] - 108; j++; stackSize++; } else if (value === 255) { stack[stackSize] = (data[j] << 24 | data[j + 1] << 16 | data[j + 2] << 8 | data[j + 3]) / 65536; j += 4; stackSize++; } else if (value === 19 || value === 20) { state.hints += stackSize >> 1; j += state.hints + 7 >> 3; stackSize %= 2; validationCommand = CharstringValidationData[value]; } else if (value === 10 || value === 29) { let subrsIndex; if (value === 10) { subrsIndex = localSubrIndex; } else { subrsIndex = globalSubrIndex; } if (!subrsIndex) { validationCommand = CharstringValidationData[value]; (0, _util.warn)("Missing subrsIndex for " + validationCommand.id); return false; } let bias = 32768; if (subrsIndex.count < 1240) { bias = 107; } else if (subrsIndex.count < 33900) { bias = 1131; } const subrNumber = stack[--stackSize] + bias; if (subrNumber < 0 || subrNumber >= subrsIndex.count || isNaN(subrNumber)) { validationCommand = CharstringValidationData[value]; (0, _util.warn)("Out of bounds subrIndex for " + validationCommand.id); return false; } state.stackSize = stackSize; state.callDepth++; const valid = this.parseCharString(state, subrsIndex.get(subrNumber), localSubrIndex, globalSubrIndex); if (!valid) { return false; } state.callDepth--; stackSize = state.stackSize; continue; } else if (value === 11) { state.stackSize = stackSize; return true; } else if (value === 0 && j === data.length) { data[j - 1] = 14; validationCommand = CharstringValidationData[14]; } else { validationCommand = CharstringValidationData[value]; } if (validationCommand) { if (validationCommand.stem) { state.hints += stackSize >> 1; if (value === 3 || value === 23) { state.hasVStems = true; } else if (state.hasVStems && (value === 1 || value === 18)) { (0, _util.warn)("CFF stem hints are in wrong order"); data[j - 1] = value === 1 ? 3 : 23; } } if ("min" in validationCommand) { if (!state.undefStack && stackSize < validationCommand.min) { (0, _util.warn)("Not enough parameters for " + validationCommand.id + "; actual: " + stackSize + ", expected: " + validationCommand.min); if (stackSize === 0) { data[j - 1] = 14; return true; } return false; } } if (state.firstStackClearing && validationCommand.stackClearing) { state.firstStackClearing = false; stackSize -= validationCommand.min; if (stackSize >= 2 && validationCommand.stem) { stackSize %= 2; } else if (stackSize > 1) { (0, _util.warn)("Found too many parameters for stack-clearing command"); } if (stackSize > 0) { state.width = stack[stackSize - 1]; } } if ("stackDelta" in validationCommand) { if ("stackFn" in validationCommand) { validationCommand.stackFn(stack, stackSize); } stackSize += validationCommand.stackDelta; } else if (validationCommand.stackClearing) { stackSize = 0; } else if (validationCommand.resetStack) { stackSize = 0; state.undefStack = false; } else if (validationCommand.undefStack) { stackSize = 0; state.undefStack = true; state.firstStackClearing = false; } } } state.stackSize = stackSize; return true; } parseCharStrings({ charStrings, localSubrIndex, globalSubrIndex, fdSelect, fdArray, privateDict }) { const seacs = []; const widths = []; const count = charStrings.count; for (let i = 0; i < count; i++) { const charstring = charStrings.get(i); const state = { callDepth: 0, stackSize: 0, stack: [], undefStack: true, hints: 0, firstStackClearing: true, seac: null, width: null, hasVStems: false }; let valid = true; let localSubrToUse = null; let privateDictToUse = privateDict; if (fdSelect && fdArray.length) { const fdIndex = fdSelect.getFDIndex(i); if (fdIndex === -1) { (0, _util.warn)("Glyph index is not in fd select."); valid = false; } if (fdIndex >= fdArray.length) { (0, _util.warn)("Invalid fd index for glyph index."); valid = false; } if (valid) { privateDictToUse = fdArray[fdIndex].privateDict; localSubrToUse = privateDictToUse.subrsIndex; } } else if (localSubrIndex) { localSubrToUse = localSubrIndex; } if (valid) { valid = this.parseCharString(state, charstring, localSubrToUse, globalSubrIndex); } if (state.width !== null) { const nominalWidth = privateDictToUse.getByName("nominalWidthX"); widths[i] = nominalWidth + state.width; } else { const defaultWidth = privateDictToUse.getByName("defaultWidthX"); widths[i] = defaultWidth; } if (state.seac !== null) { seacs[i] = state.seac; } if (!valid) { charStrings.set(i, new Uint8Array([14])); } } return { charStrings, seacs, widths }; } emptyPrivateDictionary(parentDict) { const privateDict = this.createDict(CFFPrivateDict, [], parentDict.strings); parentDict.setByKey(18, [0, 0]); parentDict.privateDict = privateDict; } parsePrivateDict(parentDict) { if (!parentDict.hasName("Private")) { this.emptyPrivateDictionary(parentDict); return; } const privateOffset = parentDict.getByName("Private"); if (!Array.isArray(privateOffset) || privateOffset.length !== 2) { parentDict.removeByName("Private"); return; } const size = privateOffset[0]; const offset = privateOffset[1]; if (size === 0 || offset >= this.bytes.length) { this.emptyPrivateDictionary(parentDict); return; } const privateDictEnd = offset + size; const dictData = this.bytes.subarray(offset, privateDictEnd); const dict = this.parseDict(dictData); const privateDict = this.createDict(CFFPrivateDict, dict, parentDict.strings); parentDict.privateDict = privateDict; if (!privateDict.getByName("Subrs")) { return; } const subrsOffset = privateDict.getByName("Subrs"); const relativeOffset = offset + subrsOffset; if (subrsOffset === 0 || relativeOffset >= this.bytes.length) { this.emptyPrivateDictionary(parentDict); return; } const subrsIndex = this.parseIndex(relativeOffset); privateDict.subrsIndex = subrsIndex.obj; } parseCharsets(pos, length, strings, cid) { if (pos === 0) { return new CFFCharset(true, CFFCharsetPredefinedTypes.ISO_ADOBE, _charsets.ISOAdobeCharset); } else if (pos === 1) { return new CFFCharset(true, CFFCharsetPredefinedTypes.EXPERT, _charsets.ExpertCharset); } else if (pos === 2) { return new CFFCharset(true, CFFCharsetPredefinedTypes.EXPERT_SUBSET, _charsets.ExpertSubsetCharset); } const bytes = this.bytes; const start = pos; const format = bytes[pos++]; const charset = [cid ? 0 : ".notdef"]; let id, count, i; length -= 1; switch (format) { case 0: for (i = 0; i < length; i++) { id = bytes[pos++] << 8 | bytes[pos++]; charset.push(cid ? id : strings.get(id)); } break; case 1: while (charset.length <= length) { id = bytes[pos++] << 8 | bytes[pos++]; count = bytes[pos++]; for (i = 0; i <= count; i++) { charset.push(cid ? id++ : strings.get(id++)); } } break; case 2: while (charset.length <= length) { id = bytes[pos++] << 8 | bytes[pos++]; count = bytes[pos++] << 8 | bytes[pos++]; for (i = 0; i <= count; i++) { charset.push(cid ? id++ : strings.get(id++)); } } break; default: throw new _util.FormatError("Unknown charset format"); } const end = pos; const raw = bytes.subarray(start, end); return new CFFCharset(false, format, charset, raw); } parseEncoding(pos, properties, strings, charset) { const encoding = Object.create(null); const bytes = this.bytes; let predefined = false; let format, i, ii; let raw = null; function readSupplement() { const supplementsCount = bytes[pos++]; for (i = 0; i < supplementsCount; i++) { const code = bytes[pos++]; const sid = (bytes[pos++] << 8) + (bytes[pos++] & 0xff); encoding[code] = charset.indexOf(strings.get(sid)); } } if (pos === 0 || pos === 1) { predefined = true; format = pos; const baseEncoding = pos ? _encodings.ExpertEncoding : _encodings.StandardEncoding; for (i = 0, ii = charset.length; i < ii; i++) { const index = baseEncoding.indexOf(charset[i]); if (index !== -1) { encoding[index] = i; } } } else { const dataStart = pos; format = bytes[pos++]; switch (format & 0x7f) { case 0: const glyphsCount = bytes[pos++]; for (i = 1; i <= glyphsCount; i++) { encoding[bytes[pos++]] = i; } break; case 1: const rangesCount = bytes[pos++]; let gid = 1; for (i = 0; i < rangesCount; i++) { const start = bytes[pos++]; const left = bytes[pos++]; for (let j = start; j <= start + left; j++) { encoding[j] = gid++; } } break; default: throw new _util.FormatError(`Unknown encoding format: ${format} in CFF`); } const dataEnd = pos; if (format & 0x80) { bytes[dataStart] &= 0x7f; readSupplement(); } raw = bytes.subarray(dataStart, dataEnd); } format &= 0x7f; return new CFFEncoding(predefined, format, encoding, raw); } parseFDSelect(pos, length) { const bytes = this.bytes; const format = bytes[pos++]; const fdSelect = []; let i; switch (format) { case 0: for (i = 0; i < length; ++i) { const id = bytes[pos++]; fdSelect.push(id); } break; case 3: const rangesCount = bytes[pos++] << 8 | bytes[pos++]; for (i = 0; i < rangesCount; ++i) { let first = bytes[pos++] << 8 | bytes[pos++]; if (i === 0 && first !== 0) { (0, _util.warn)("parseFDSelect: The first range must have a first GID of 0" + " -- trying to recover."); first = 0; } const fdIndex = bytes[pos++]; const next = bytes[pos] << 8 | bytes[pos + 1]; for (let j = first; j < next; ++j) { fdSelect.push(fdIndex); } } pos += 2; break; default: throw new _util.FormatError(`parseFDSelect: Unknown format "${format}".`); } if (fdSelect.length !== length) { throw new _util.FormatError("parseFDSelect: Invalid font data."); } return new CFFFDSelect(format, fdSelect); } } return CFFParser; }(); exports.CFFParser = CFFParser; class CFF { constructor() { this.header = null; this.names = []; this.topDict = null; this.strings = new CFFStrings(); this.globalSubrIndex = null; this.encoding = null; this.charset = null; this.charStrings = null; this.fdArray = []; this.fdSelect = null; this.isCIDFont = false; } duplicateFirstGlyph() { if (this.charStrings.count >= 65535) { (0, _util.warn)("Not enough space in charstrings to duplicate first glyph."); return; } const glyphZero = this.charStrings.get(0); this.charStrings.add(glyphZero); if (this.isCIDFont) { this.fdSelect.fdSelect.push(this.fdSelect.fdSelect[0]); } } hasGlyphId(id) { if (id < 0 || id >= this.charStrings.count) { return false; } const glyph = this.charStrings.get(id); return glyph.length > 0; } } exports.CFF = CFF; class CFFHeader { constructor(major, minor, hdrSize, offSize) { this.major = major; this.minor = minor; this.hdrSize = hdrSize; this.offSize = offSize; } } exports.CFFHeader = CFFHeader; class CFFStrings { constructor() { this.strings = []; } get(index) { if (index >= 0 && index <= NUM_STANDARD_CFF_STRINGS - 1) { return CFFStandardStrings[index]; } if (index - NUM_STANDARD_CFF_STRINGS <= this.strings.length) { return this.strings[index - NUM_STANDARD_CFF_STRINGS]; } return CFFStandardStrings[0]; } getSID(str) { let index = CFFStandardStrings.indexOf(str); if (index !== -1) { return index; } index = this.strings.indexOf(str); if (index !== -1) { return index + NUM_STANDARD_CFF_STRINGS; } return -1; } add(value) { this.strings.push(value); } get count() { return this.strings.length; } } exports.CFFStrings = CFFStrings; class CFFIndex { constructor() { this.objects = []; this.length = 0; } add(data) { this.length += data.length; this.objects.push(data); } set(index, data) { this.length += data.length - this.objects[index].length; this.objects[index] = data; } get(index) { return this.objects[index]; } get count() { return this.objects.length; } } exports.CFFIndex = CFFIndex; class CFFDict { constructor(tables, strings) { this.keyToNameMap = tables.keyToNameMap; this.nameToKeyMap = tables.nameToKeyMap; this.defaults = tables.defaults; this.types = tables.types; this.opcodes = tables.opcodes; this.order = tables.order; this.strings = strings; this.values = Object.create(null); } setByKey(key, value) { if (!(key in this.keyToNameMap)) { return false; } const valueLength = value.length; if (valueLength === 0) { return true; } for (let i = 0; i < valueLength; i++) { if (isNaN(value[i])) { (0, _util.warn)('Invalid CFFDict value: "' + value + '" for key "' + key + '".'); return true; } } const type = this.types[key]; if (type === "num" || type === "sid" || type === "offset") { value = value[0]; } this.values[key] = value; return true; } setByName(name, value) { if (!(name in this.nameToKeyMap)) { throw new _util.FormatError(`Invalid dictionary name "${name}"`); } this.values[this.nameToKeyMap[name]] = value; } hasName(name) { return this.nameToKeyMap[name] in this.values; } getByName(name) { if (!(name in this.nameToKeyMap)) { throw new _util.FormatError(`Invalid dictionary name ${name}"`); } const key = this.nameToKeyMap[name]; if (!(key in this.values)) { return this.defaults[key]; } return this.values[key]; } removeByName(name) { delete this.values[this.nameToKeyMap[name]]; } static createTables(layout) { const tables = { keyToNameMap: {}, nameToKeyMap: {}, defaults: {}, types: {}, opcodes: {}, order: [] }; for (let i = 0, ii = layout.length; i < ii; ++i) { const entry = layout[i]; const key = Array.isArray(entry[0]) ? (entry[0][0] << 8) + entry[0][1] : entry[0]; tables.keyToNameMap[key] = entry[1]; tables.nameToKeyMap[entry[1]] = key; tables.types[key] = entry[2]; tables.defaults[key] = entry[3]; tables.opcodes[key] = Array.isArray(entry[0]) ? entry[0] : [entry[0]]; tables.order.push(key); } return tables; } } const CFFTopDict = function CFFTopDictClosure() { const layout = [[[12, 30], "ROS", ["sid", "sid", "num"], null], [[12, 20], "SyntheticBase", "num", null], [0, "version", "sid", null], [1, "Notice", "sid", null], [[12, 0], "Copyright", "sid", null], [2, "FullName", "sid", null], [3, "FamilyName", "sid", null], [4, "Weight", "sid", null], [[12, 1], "isFixedPitch", "num", 0], [[12, 2], "ItalicAngle", "num", 0], [[12, 3], "UnderlinePosition", "num", -100], [[12, 4], "UnderlineThickness", "num", 50], [[12, 5], "PaintType", "num", 0], [[12, 6], "CharstringType", "num", 2], [[12, 7], "FontMatrix", ["num", "num", "num", "num", "num", "num"], [0.001, 0, 0, 0.001, 0, 0]], [13, "UniqueID", "num", null], [5, "FontBBox", ["num", "num", "num", "num"], [0, 0, 0, 0]], [[12, 8], "StrokeWidth", "num", 0], [14, "XUID", "array", null], [15, "charset", "offset", 0], [16, "Encoding", "offset", 0], [17, "CharStrings", "offset", 0], [18, "Private", ["offset", "offset"], null], [[12, 21], "PostScript", "sid", null], [[12, 22], "BaseFontName", "sid", null], [[12, 23], "BaseFontBlend", "delta", null], [[12, 31], "CIDFontVersion", "num", 0], [[12, 32], "CIDFontRevision", "num", 0], [[12, 33], "CIDFontType", "num", 0], [[12, 34], "CIDCount", "num", 8720], [[12, 35], "UIDBase", "num", null], [[12, 37], "FDSelect", "offset", null], [[12, 36], "FDArray", "offset", null], [[12, 38], "FontName", "sid", null]]; let tables = null; class CFFTopDict extends CFFDict { constructor(strings) { if (tables === null) { tables = CFFDict.createTables(layout); } super(tables, strings); this.privateDict = null; } } return CFFTopDict; }(); exports.CFFTopDict = CFFTopDict; const CFFPrivateDict = function CFFPrivateDictClosure() { const layout = [[6, "BlueValues", "delta", null], [7, "OtherBlues", "delta", null], [8, "FamilyBlues", "delta", null], [9, "FamilyOtherBlues", "delta", null], [[12, 9], "BlueScale", "num", 0.039625], [[12, 10], "BlueShift", "num", 7], [[12, 11], "BlueFuzz", "num", 1], [10, "StdHW", "num", null], [11, "StdVW", "num", null], [[12, 12], "StemSnapH", "delta", null], [[12, 13], "StemSnapV", "delta", null], [[12, 14], "ForceBold", "num", 0], [[12, 17], "LanguageGroup", "num", 0], [[12, 18], "ExpansionFactor", "num", 0.06], [[12, 19], "initialRandomSeed", "num", 0], [20, "defaultWidthX", "num", 0], [21, "nominalWidthX", "num", 0], [19, "Subrs", "offset", null]]; let tables = null; class CFFPrivateDict extends CFFDict { constructor(strings) { if (tables === null) { tables = CFFDict.createTables(layout); } super(tables, strings); this.subrsIndex = null; } } return CFFPrivateDict; }(); exports.CFFPrivateDict = CFFPrivateDict; const CFFCharsetPredefinedTypes = { ISO_ADOBE: 0, EXPERT: 1, EXPERT_SUBSET: 2 }; class CFFCharset { constructor(predefined, format, charset, raw) { this.predefined = predefined; this.format = format; this.charset = charset; this.raw = raw; } } exports.CFFCharset = CFFCharset; class CFFEncoding { constructor(predefined, format, encoding, raw) { this.predefined = predefined; this.format = format; this.encoding = encoding; this.raw = raw; } } class CFFFDSelect { constructor(format, fdSelect) { this.format = format; this.fdSelect = fdSelect; } getFDIndex(glyphIndex) { if (glyphIndex < 0 || glyphIndex >= this.fdSelect.length) { return -1; } return this.fdSelect[glyphIndex]; } } exports.CFFFDSelect = CFFFDSelect; class CFFOffsetTracker { constructor() { this.offsets = Object.create(null); } isTracking(key) { return key in this.offsets; } track(key, location) { if (key in this.offsets) { throw new _util.FormatError(`Already tracking location of ${key}`); } this.offsets[key] = location; } offset(value) { for (const key in this.offsets) { this.offsets[key] += value; } } setEntryLocation(key, values, output) { if (!(key in this.offsets)) { throw new _util.FormatError(`Not tracking location of ${key}`); } const data = output.data; const dataOffset = this.offsets[key]; const size = 5; for (let i = 0, ii = values.length; i < ii; ++i) { const offset0 = i * size + dataOffset; const offset1 = offset0 + 1; const offset2 = offset0 + 2; const offset3 = offset0 + 3; const offset4 = offset0 + 4; if (data[offset0] !== 0x1d || data[offset1] !== 0 || data[offset2] !== 0 || data[offset3] !== 0 || data[offset4] !== 0) { throw new _util.FormatError("writing to an offset that is not empty"); } const value = values[i]; data[offset0] = 0x1d; data[offset1] = value >> 24 & 0xff; data[offset2] = value >> 16 & 0xff; data[offset3] = value >> 8 & 0xff; data[offset4] = value & 0xff; } } } class CFFCompiler { constructor(cff) { this.cff = cff; } compile() { const cff = this.cff; const output = { data: [], length: 0, add: function CFFCompiler_add(data) { this.data = this.data.concat(data); this.length = this.data.length; } }; const header = this.compileHeader(cff.header); output.add(header); const nameIndex = this.compileNameIndex(cff.names); output.add(nameIndex); if (cff.isCIDFont) { if (cff.topDict.hasName("FontMatrix")) { const base = cff.topDict.getByName("FontMatrix"); cff.topDict.removeByName("FontMatrix"); for (let i = 0, ii = cff.fdArray.length; i < ii; i++) { const subDict = cff.fdArray[i]; let matrix = base.slice(0); if (subDict.hasName("FontMatrix")) { matrix = _util.Util.transform(matrix, subDict.getByName("FontMatrix")); } subDict.setByName("FontMatrix", matrix); } } } const xuid = cff.topDict.getByName("XUID"); if (xuid && xuid.length > 16) { cff.topDict.removeByName("XUID"); } cff.topDict.setByName("charset", 0); let compiled = this.compileTopDicts([cff.topDict], output.length, cff.isCIDFont); output.add(compiled.output); const topDictTracker = compiled.trackers[0]; const stringIndex = this.compileStringIndex(cff.strings.strings); output.add(stringIndex); const globalSubrIndex = this.compileIndex(cff.globalSubrIndex); output.add(globalSubrIndex); if (cff.encoding && cff.topDict.hasName("Encoding")) { if (cff.encoding.predefined) { topDictTracker.setEntryLocation("Encoding", [cff.encoding.format], output); } else { const encoding = this.compileEncoding(cff.encoding); topDictTracker.setEntryLocation("Encoding", [output.length], output); output.add(encoding); } } const charset = this.compileCharset(cff.charset, cff.charStrings.count, cff.strings, cff.isCIDFont); topDictTracker.setEntryLocation("charset", [output.length], output); output.add(charset); const charStrings = this.compileCharStrings(cff.charStrings); topDictTracker.setEntryLocation("CharStrings", [output.length], output); output.add(charStrings); if (cff.isCIDFont) { topDictTracker.setEntryLocation("FDSelect", [output.length], output); const fdSelect = this.compileFDSelect(cff.fdSelect); output.add(fdSelect); compiled = this.compileTopDicts(cff.fdArray, output.length, true); topDictTracker.setEntryLocation("FDArray", [output.length], output); output.add(compiled.output); const fontDictTrackers = compiled.trackers; this.compilePrivateDicts(cff.fdArray, fontDictTrackers, output); } this.compilePrivateDicts([cff.topDict], [topDictTracker], output); output.add([0]); return output.data; } encodeNumber(value) { if (Number.isInteger(value)) { return this.encodeInteger(value); } return this.encodeFloat(value); } static get EncodeFloatRegExp() { return (0, _util.shadow)(this, "EncodeFloatRegExp", /\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/); } encodeFloat(num) { let value = num.toString(); const m = CFFCompiler.EncodeFloatRegExp.exec(value); if (m) { const epsilon = parseFloat("1e" + ((m[2] ? +m[2] : 0) + m[1].length)); value = (Math.round(num * epsilon) / epsilon).toString(); } let nibbles = ""; let i, ii; for (i = 0, ii = value.length; i < ii; ++i) { const a = value[i]; if (a === "e") { nibbles += value[++i] === "-" ? "c" : "b"; } else if (a === ".") { nibbles += "a"; } else if (a === "-") { nibbles += "e"; } else { nibbles += a; } } nibbles += nibbles.length & 1 ? "f" : "ff"; const out = [30]; for (i = 0, ii = nibbles.length; i < ii; i += 2) { out.push(parseInt(nibbles.substring(i, i + 2), 16)); } return out; } encodeInteger(value) { let code; if (value >= -107 && value <= 107) { code = [value + 139]; } else if (value >= 108 && value <= 1131) { value -= 108; code = [(value >> 8) + 247, value & 0xff]; } else if (value >= -1131 && value <= -108) { value = -value - 108; code = [(value >> 8) + 251, value & 0xff]; } else if (value >= -32768 && value <= 32767) { code = [0x1c, value >> 8 & 0xff, value & 0xff]; } else { code = [0x1d, value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff]; } return code; } compileHeader(header) { return [header.major, header.minor, 4, header.offSize]; } compileNameIndex(names) { const nameIndex = new CFFIndex(); for (let i = 0, ii = names.length; i < ii; ++i) { const name = names[i]; const length = Math.min(name.length, 127); let sanitizedName = new Array(length); for (let j = 0; j < length; j++) { let char = name[j]; if (char < "!" || char > "~" || char === "[" || char === "]" || char === "(" || char === ")" || char === "{" || char === "}" || char === "<" || char === ">" || char === "/" || char === "%") { char = "_"; } sanitizedName[j] = char; } sanitizedName = sanitizedName.join(""); if (sanitizedName === "") { sanitizedName = "Bad_Font_Name"; } nameIndex.add((0, _util.stringToBytes)(sanitizedName)); } return this.compileIndex(nameIndex); } compileTopDicts(dicts, length, removeCidKeys) { const fontDictTrackers = []; let fdArrayIndex = new CFFIndex(); for (let i = 0, ii = dicts.length; i < ii; ++i) { const fontDict = dicts[i]; if (removeCidKeys) { fontDict.removeByName("CIDFontVersion"); fontDict.removeByName("CIDFontRevision"); fontDict.removeByName("CIDFontType"); fontDict.removeByName("CIDCount"); fontDict.removeByName("UIDBase"); } const fontDictTracker = new CFFOffsetTracker(); const fontDictData = this.compileDict(fontDict, fontDictTracker); fontDictTrackers.push(fontDictTracker); fdArrayIndex.add(fontDictData); fontDictTracker.offset(length); } fdArrayIndex = this.compileIndex(fdArrayIndex, fontDictTrackers); return { trackers: fontDictTrackers, output: fdArrayIndex }; } compilePrivateDicts(dicts, trackers, output) { for (let i = 0, ii = dicts.length; i < ii; ++i) { const fontDict = dicts[i]; const privateDict = fontDict.privateDict; if (!privateDict || !fontDict.hasName("Private")) { throw new _util.FormatError("There must be a private dictionary."); } const privateDictTracker = new CFFOffsetTracker(); const privateDictData = this.compileDict(privateDict, privateDictTracker); let outputLength = output.length; privateDictTracker.offset(outputLength); if (!privateDictData.length) { outputLength = 0; } trackers[i].setEntryLocation("Private", [privateDictData.length, outputLength], output); output.add(privateDictData); if (privateDict.subrsIndex && privateDict.hasName("Subrs")) { const subrs = this.compileIndex(privateDict.subrsIndex); privateDictTracker.setEntryLocation("Subrs", [privateDictData.length], output); output.add(subrs); } } } compileDict(dict, offsetTracker) { let out = []; const order = dict.order; for (let i = 0; i < order.length; ++i) { const key = order[i]; if (!(key in dict.values)) { continue; } let values = dict.values[key]; let types = dict.types[key]; if (!Array.isArray(types)) { types = [types]; } if (!Array.isArray(values)) { values = [values]; } if (values.length === 0) { continue; } for (let j = 0, jj = types.length; j < jj; ++j) { const type = types[j]; const value = values[j]; switch (type) { case "num": case "sid": out = out.concat(this.encodeNumber(value)); break; case "offset": const name = dict.keyToNameMap[key]; if (!offsetTracker.isTracking(name)) { offsetTracker.track(name, out.length); } out = out.concat([0x1d, 0, 0, 0, 0]); break; case "array": case "delta": out = out.concat(this.encodeNumber(value)); for (let k = 1, kk = values.length; k < kk; ++k) { out = out.concat(this.encodeNumber(values[k])); } break; default: throw new _util.FormatError(`Unknown data type of ${type}`); } } out = out.concat(dict.opcodes[key]); } return out; } compileStringIndex(strings) { const stringIndex = new CFFIndex(); for (let i = 0, ii = strings.length; i < ii; ++i) { stringIndex.add((0, _util.stringToBytes)(strings[i])); } return this.compileIndex(stringIndex); } compileGlobalSubrIndex() { const globalSubrIndex = this.cff.globalSubrIndex; this.out.writeByteArray(this.compileIndex(globalSubrIndex)); } compileCharStrings(charStrings) { const charStringsIndex = new CFFIndex(); for (let i = 0; i < charStrings.count; i++) { const glyph = charStrings.get(i); if (glyph.length === 0) { charStringsIndex.add(new Uint8Array([0x8b, 0x0e])); continue; } charStringsIndex.add(glyph); } return this.compileIndex(charStringsIndex); } compileCharset(charset, numGlyphs, strings, isCIDFont) { let out; const numGlyphsLessNotDef = numGlyphs - 1; if (isCIDFont) { out = new Uint8Array([2, 0, 0, numGlyphsLessNotDef >> 8 & 0xff, numGlyphsLessNotDef & 0xff]); } else { const length = 1 + numGlyphsLessNotDef * 2; out = new Uint8Array(length); out[0] = 0; let charsetIndex = 0; const numCharsets = charset.charset.length; let warned = false; for (let i = 1; i < out.length; i += 2) { let sid = 0; if (charsetIndex < numCharsets) { const name = charset.charset[charsetIndex++]; sid = strings.getSID(name); if (sid === -1) { sid = 0; if (!warned) { warned = true; (0, _util.warn)(`Couldn't find ${name} in CFF strings`); } } } out[i] = sid >> 8 & 0xff; out[i + 1] = sid & 0xff; } } return this.compileTypedArray(out); } compileEncoding(encoding) { return this.compileTypedArray(encoding.raw); } compileFDSelect(fdSelect) { const format = fdSelect.format; let out, i; switch (format) { case 0: out = new Uint8Array(1 + fdSelect.fdSelect.length); out[0] = format; for (i = 0; i < fdSelect.fdSelect.length; i++) { out[i + 1] = fdSelect.fdSelect[i]; } break; case 3: const start = 0; let lastFD = fdSelect.fdSelect[0]; const ranges = [format, 0, 0, start >> 8 & 0xff, start & 0xff, lastFD]; for (i = 1; i < fdSelect.fdSelect.length; i++) { const currentFD = fdSelect.fdSelect[i]; if (currentFD !== lastFD) { ranges.push(i >> 8 & 0xff, i & 0xff, currentFD); lastFD = currentFD; } } const numRanges = (ranges.length - 3) / 3; ranges[1] = numRanges >> 8 & 0xff; ranges[2] = numRanges & 0xff; ranges.push(i >> 8 & 0xff, i & 0xff); out = new Uint8Array(ranges); break; } return this.compileTypedArray(out); } compileTypedArray(data) { const out = []; for (let i = 0, ii = data.length; i < ii; ++i) { out[i] = data[i]; } return out; } compileIndex(index, trackers = []) { const objects = index.objects; const count = objects.length; if (count === 0) { return [0, 0, 0]; } const data = [count >> 8 & 0xff, count & 0xff]; let lastOffset = 1, i; for (i = 0; i < count; ++i) { lastOffset += objects[i].length; } let offsetSize; if (lastOffset < 0x100) { offsetSize = 1; } else if (lastOffset < 0x10000) { offsetSize = 2; } else if (lastOffset < 0x1000000) { offsetSize = 3; } else { offsetSize = 4; } data.push(offsetSize); let relativeOffset = 1; for (i = 0; i < count + 1; i++) { if (offsetSize === 1) { data.push(relativeOffset & 0xff); } else if (offsetSize === 2) { data.push(relativeOffset >> 8 & 0xff, relativeOffset & 0xff); } else if (offsetSize === 3) { data.push(relativeOffset >> 16 & 0xff, relativeOffset >> 8 & 0xff, relativeOffset & 0xff); } else { data.push(relativeOffset >>> 24 & 0xff, relativeOffset >> 16 & 0xff, relativeOffset >> 8 & 0xff, relativeOffset & 0xff); } if (objects[i]) { relativeOffset += objects[i].length; } } for (i = 0; i < count; i++) { if (trackers[i]) { trackers[i].offset(data.length); } for (let j = 0, jj = objects[i].length; j < jj; j++) { data.push(objects[i][j]); } } return data; } } exports.CFFCompiler = CFFCompiler; /***/ }), /* 46 */ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.ISOAdobeCharset = exports.ExpertSubsetCharset = exports.ExpertCharset = void 0; const ISOAdobeCharset = [".notdef", "space", "exclam", "quotedbl", "numbersign", "dollar", "percent", "ampersand", "quoteright", "parenleft", "parenright", "asterisk", "plus", "comma", "hyphen", "period", "slash", "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "colon", "semicolon", "less", "equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft", "backslash", "bracketright", "asciicircum", "underscore", "quoteleft", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft", "bar", "braceright", "asciitilde", "exclamdown", "cent", "sterling", "fraction", "yen", "florin", "section", "currency", "quotesingle", "quotedblleft", "guillemotleft", "guilsinglleft", "guilsinglright", "fi", "fl", "endash", "dagger", "daggerdbl", "periodcentered", "paragraph", "bullet", "quotesinglbase", "quotedblbase", "quotedblright", "guillemotright", "ellipsis", "perthousand", "questiondown", "grave", "acute", "circumflex", "tilde", "macron", "breve", "dotaccent", "dieresis", "ring", "cedilla", "hungarumlaut", "ogonek", "caron", "emdash", "AE", "ordfeminine", "Lslash", "Oslash", "OE", "ordmasculine", "ae", "dotlessi", "lslash", "oslash", "oe", "germandbls", "onesuperior", "logicalnot", "mu", "trademark", "Eth", "onehalf", "plusminus", "Thorn", "onequarter", "divide", "brokenbar", "degree", "thorn", "threequarters", "twosuperior", "registered", "minus", "eth", "multiply", "threesuperior", "copyright", "Aacute", "Acircumflex", "Adieresis", "Agrave", "Aring", "Atilde", "Ccedilla", "Eacute", "Ecircumflex", "Edieresis", "Egrave", "Iacute", "Icircumflex", "Idieresis", "Igrave", "Ntilde", "Oacute", "Ocircumflex", "Odieresis", "Ograve", "Otilde", "Scaron", "Uacute", "Ucircumflex", "Udieresis", "Ugrave", "Yacute", "Ydieresis", "Zcaron", "aacute", "acircumflex", "adieresis", "agrave", "aring", "atilde", "ccedilla", "eacute", "ecircumflex", "edieresis", "egrave", "iacute", "icircumflex", "idieresis", "igrave", "ntilde", "oacute", "ocircumflex", "odieresis", "ograve", "otilde", "scaron", "uacute", "ucircumflex", "udieresis", "ugrave", "yacute", "ydieresis", "zcaron"]; exports.ISOAdobeCharset = ISOAdobeCharset; const ExpertCharset = [".notdef", "space", "exclamsmall", "Hungarumlautsmall", "dollaroldstyle", "dollarsuperior", "ampersandsmall", "Acutesmall", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "commasuperior", "threequartersemdash", "periodsuperior", "questionsmall", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "isuperior", "lsuperior", "msuperior", "nsuperior", "osuperior", "rsuperior", "ssuperior", "tsuperior", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "parenrightinferior", "Circumflexsmall", "hyphensuperior", "Gravesmall", "Asmall", "Bsmall", "Csmall", "Dsmall", "Esmall", "Fsmall", "Gsmall", "Hsmall", "Ismall", "Jsmall", "Ksmall", "Lsmall", "Msmall", "Nsmall", "Osmall", "Psmall", "Qsmall", "Rsmall", "Ssmall", "Tsmall", "Usmall", "Vsmall", "Wsmall", "Xsmall", "Ysmall", "Zsmall", "colonmonetary", "onefitted", "rupiah", "Tildesmall", "exclamdownsmall", "centoldstyle", "Lslashsmall", "Scaronsmall", "Zcaronsmall", "Dieresissmall", "Brevesmall", "Caronsmall", "Dotaccentsmall", "Macronsmall", "figuredash", "hypheninferior", "Ogoneksmall", "Ringsmall", "Cedillasmall", "onequarter", "onehalf", "threequarters", "questiondownsmall", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "zerosuperior", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior", "Agravesmall", "Aacutesmall", "Acircumflexsmall", "Atildesmall", "Adieresissmall", "Aringsmall", "AEsmall", "Ccedillasmall", "Egravesmall", "Eacutesmall", "Ecircumflexsmall", "Edieresissmall", "Igravesmall", "Iacutesmall", "Icircumflexsmall", "Idieresissmall", "Ethsmall", "Ntildesmall", "Ogravesmall", "Oacutesmall", "Ocircumflexsmall", "Otildesmall", "Odieresissmall", "OEsmall", "Oslashsmall", "Ugravesmall", "Uacutesmall", "Ucircumflexsmall", "Udieresissmall", "Yacutesmall", "Thornsmall", "Ydieresissmall"]; exports.ExpertCharset = ExpertCharset; const ExpertSubsetCharset = [".notdef", "space", "dollaroldstyle", "dollarsuperior", "parenleftsuperior", "parenrightsuperior", "twodotenleader", "onedotenleader", "comma", "hyphen", "period", "fraction", "zerooldstyle", "oneoldstyle", "twooldstyle", "threeoldstyle", "fouroldstyle", "fiveoldstyle", "sixoldstyle", "sevenoldstyle", "eightoldstyle", "nineoldstyle", "colon", "semicolon", "commasuperior", "threequartersemdash", "periodsuperior", "asuperior", "bsuperior", "centsuperior", "dsuperior", "esuperior", "isuperior", "lsuperior", "msuperior", "nsuperior", "osuperior", "rsuperior", "ssuperior", "tsuperior", "ff", "fi", "fl", "ffi", "ffl", "parenleftinferior", "parenrightinferior", "hyphensuperior", "colonmonetary", "onefitted", "rupiah", "centoldstyle", "figuredash", "hypheninferior", "onequarter", "onehalf", "threequarters", "oneeighth", "threeeighths", "fiveeighths", "seveneighths", "onethird", "twothirds", "zerosuperior", "onesuperior", "twosuperior", "threesuperior", "foursuperior", "fivesuperior", "sixsuperior", "sevensuperior", "eightsuperior", "ninesuperior", "zeroinferior", "oneinferior", "twoinferior", "threeinferior", "fourinferior", "fiveinferior", "sixinferior", "seveninferior", "eightinferior", "nineinferior", "centinferior", "dollarinferior", "periodinferior", "commainferior"]; exports.ExpertSubsetCharset = ExpertSubsetCharset; /***/ }), /* 47 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.getSerifFonts = exports.getNonStdFontMap = exports.getGlyphMapForStandardFonts = exports.getFontNameToFileMap = void 0; exports.getStandardFontName = getStandardFontName; exports.getSymbolsFonts = exports.getSupplementalGlyphMapForCalibri = exports.getSupplementalGlyphMapForArialBlack = exports.getStdFontMap = void 0; var _core_utils = __w_pdfjs_require__(9); var _fonts_utils = __w_pdfjs_require__(18); const getStdFontMap = (0, _core_utils.getLookupTableFactory)(function (t) { t["Times-Roman"] = "Times-Roman"; t.Helvetica = "Helvetica"; t.Courier = "Courier"; t.Symbol = "Symbol"; t["Times-Bold"] = "Times-Bold"; t["Helvetica-Bold"] = "Helvetica-Bold"; t["Courier-Bold"] = "Courier-Bold"; t.ZapfDingbats = "ZapfDingbats"; t["Times-Italic"] = "Times-Italic"; t["Helvetica-Oblique"] = "Helvetica-Oblique"; t["Courier-Oblique"] = "Courier-Oblique"; t["Times-BoldItalic"] = "Times-BoldItalic"; t["Helvetica-BoldOblique"] = "Helvetica-BoldOblique"; t["Courier-BoldOblique"] = "Courier-BoldOblique"; t.ArialNarrow = "Helvetica"; t["ArialNarrow-Bold"] = "Helvetica-Bold"; t["ArialNarrow-BoldItalic"] = "Helvetica-BoldOblique"; t["ArialNarrow-Italic"] = "Helvetica-Oblique"; t.ArialBlack = "Helvetica"; t["ArialBlack-Bold"] = "Helvetica-Bold"; t["ArialBlack-BoldItalic"] = "Helvetica-BoldOblique"; t["ArialBlack-Italic"] = "Helvetica-Oblique"; t["Arial-Black"] = "Helvetica"; t["Arial-Black-Bold"] = "Helvetica-Bold"; t["Arial-Black-BoldItalic"] = "Helvetica-BoldOblique"; t["Arial-Black-Italic"] = "Helvetica-Oblique"; t.Arial = "Helvetica"; t["Arial-Bold"] = "Helvetica-Bold"; t["Arial-BoldItalic"] = "Helvetica-BoldOblique"; t["Arial-Italic"] = "Helvetica-Oblique"; t["Arial-BoldItalicMT"] = "Helvetica-BoldOblique"; t["Arial-BoldMT"] = "Helvetica-Bold"; t["Arial-ItalicMT"] = "Helvetica-Oblique"; t.ArialMT = "Helvetica"; t["Courier-BoldItalic"] = "Courier-BoldOblique"; t["Courier-Italic"] = "Courier-Oblique"; t.CourierNew = "Courier"; t["CourierNew-Bold"] = "Courier-Bold"; t["CourierNew-BoldItalic"] = "Courier-BoldOblique"; t["CourierNew-Italic"] = "Courier-Oblique"; t["CourierNewPS-BoldItalicMT"] = "Courier-BoldOblique"; t["CourierNewPS-BoldMT"] = "Courier-Bold"; t["CourierNewPS-ItalicMT"] = "Courier-Oblique"; t.CourierNewPSMT = "Courier"; t["Helvetica-BoldItalic"] = "Helvetica-BoldOblique"; t["Helvetica-Italic"] = "Helvetica-Oblique"; t["Symbol-Bold"] = "Symbol"; t["Symbol-BoldItalic"] = "Symbol"; t["Symbol-Italic"] = "Symbol"; t.TimesNewRoman = "Times-Roman"; t["TimesNewRoman-Bold"] = "Times-Bold"; t["TimesNewRoman-BoldItalic"] = "Times-BoldItalic"; t["TimesNewRoman-Italic"] = "Times-Italic"; t.TimesNewRomanPS = "Times-Roman"; t["TimesNewRomanPS-Bold"] = "Times-Bold"; t["TimesNewRomanPS-BoldItalic"] = "Times-BoldItalic"; t["TimesNewRomanPS-BoldItalicMT"] = "Times-BoldItalic"; t["TimesNewRomanPS-BoldMT"] = "Times-Bold"; t["TimesNewRomanPS-Italic"] = "Times-Italic"; t["TimesNewRomanPS-ItalicMT"] = "Times-Italic"; t.TimesNewRomanPSMT = "Times-Roman"; t["TimesNewRomanPSMT-Bold"] = "Times-Bold"; t["TimesNewRomanPSMT-BoldItalic"] = "Times-BoldItalic"; t["TimesNewRomanPSMT-Italic"] = "Times-Italic"; }); exports.getStdFontMap = getStdFontMap; const getFontNameToFileMap = (0, _core_utils.getLookupTableFactory)(function (t) { t.Courier = "FoxitFixed.pfb"; t["Courier-Bold"] = "FoxitFixedBold.pfb"; t["Courier-BoldOblique"] = "FoxitFixedBoldItalic.pfb"; t["Courier-Oblique"] = "FoxitFixedItalic.pfb"; t.Helvetica = "FoxitSans.pfb"; t["Helvetica-Bold"] = "FoxitSansBold.pfb"; t["Helvetica-BoldOblique"] = "FoxitSansBoldItalic.pfb"; t["Helvetica-Oblique"] = "FoxitSansItalic.pfb"; t["Times-Roman"] = "FoxitSerif.pfb"; t["Times-Bold"] = "FoxitSerifBold.pfb"; t["Times-BoldItalic"] = "FoxitSerifBoldItalic.pfb"; t["Times-Italic"] = "FoxitSerifItalic.pfb"; t.Symbol = "FoxitSymbol.pfb"; t.ZapfDingbats = "FoxitDingbats.pfb"; t["LiberationSans-Regular"] = "LiberationSans-Regular.ttf"; t["LiberationSans-Bold"] = "LiberationSans-Bold.ttf"; t["LiberationSans-Italic"] = "LiberationSans-Italic.ttf"; t["LiberationSans-BoldItalic"] = "LiberationSans-BoldItalic.ttf"; }); exports.getFontNameToFileMap = getFontNameToFileMap; const getNonStdFontMap = (0, _core_utils.getLookupTableFactory)(function (t) { t.Calibri = "Helvetica"; t["Calibri-Bold"] = "Helvetica-Bold"; t["Calibri-BoldItalic"] = "Helvetica-BoldOblique"; t["Calibri-Italic"] = "Helvetica-Oblique"; t.CenturyGothic = "Helvetica"; t["CenturyGothic-Bold"] = "Helvetica-Bold"; t["CenturyGothic-BoldItalic"] = "Helvetica-BoldOblique"; t["CenturyGothic-Italic"] = "Helvetica-Oblique"; t.ComicSansMS = "Comic Sans MS"; t["ComicSansMS-Bold"] = "Comic Sans MS-Bold"; t["ComicSansMS-BoldItalic"] = "Comic Sans MS-BoldItalic"; t["ComicSansMS-Italic"] = "Comic Sans MS-Italic"; t["ItcSymbol-Bold"] = "Helvetica-Bold"; t["ItcSymbol-BoldItalic"] = "Helvetica-BoldOblique"; t["ItcSymbol-Book"] = "Helvetica"; t["ItcSymbol-BookItalic"] = "Helvetica-Oblique"; t["ItcSymbol-Medium"] = "Helvetica"; t["ItcSymbol-MediumItalic"] = "Helvetica-Oblique"; t.LucidaConsole = "Courier"; t["LucidaConsole-Bold"] = "Courier-Bold"; t["LucidaConsole-BoldItalic"] = "Courier-BoldOblique"; t["LucidaConsole-Italic"] = "Courier-Oblique"; t["LucidaSans-Demi"] = "Helvetica-Bold"; t["MS-Gothic"] = "MS Gothic"; t["MS-Gothic-Bold"] = "MS Gothic-Bold"; t["MS-Gothic-BoldItalic"] = "MS Gothic-BoldItalic"; t["MS-Gothic-Italic"] = "MS Gothic-Italic"; t["MS-Mincho"] = "MS Mincho"; t["MS-Mincho-Bold"] = "MS Mincho-Bold"; t["MS-Mincho-BoldItalic"] = "MS Mincho-BoldItalic"; t["MS-Mincho-Italic"] = "MS Mincho-Italic"; t["MS-PGothic"] = "MS PGothic"; t["MS-PGothic-Bold"] = "MS PGothic-Bold"; t["MS-PGothic-BoldItalic"] = "MS PGothic-BoldItalic"; t["MS-PGothic-Italic"] = "MS PGothic-Italic"; t["MS-PMincho"] = "MS PMincho"; t["MS-PMincho-Bold"] = "MS PMincho-Bold"; t["MS-PMincho-BoldItalic"] = "MS PMincho-BoldItalic"; t["MS-PMincho-Italic"] = "MS PMincho-Italic"; t.NuptialScript = "Times-Italic"; t.SegoeUISymbol = "Helvetica"; t.Wingdings = "ZapfDingbats"; t["Wingdings-Regular"] = "ZapfDingbats"; }); exports.getNonStdFontMap = getNonStdFontMap; const getSerifFonts = (0, _core_utils.getLookupTableFactory)(function (t) { t["Adobe Jenson"] = true; t["Adobe Text"] = true; t.Albertus = true; t.Aldus = true; t.Alexandria = true; t.Algerian = true; t["American Typewriter"] = true; t.Antiqua = true; t.Apex = true; t.Arno = true; t.Aster = true; t.Aurora = true; t.Baskerville = true; t.Bell = true; t.Bembo = true; t["Bembo Schoolbook"] = true; t.Benguiat = true; t["Berkeley Old Style"] = true; t["Bernhard Modern"] = true; t["Berthold City"] = true; t.Bodoni = true; t["Bauer Bodoni"] = true; t["Book Antiqua"] = true; t.Bookman = true; t["Bordeaux Roman"] = true; t["Californian FB"] = true; t.Calisto = true; t.Calvert = true; t.Capitals = true; t.Cambria = true; t.Cartier = true; t.Caslon = true; t.Catull = true; t.Centaur = true; t["Century Old Style"] = true; t["Century Schoolbook"] = true; t.Chaparral = true; t["Charis SIL"] = true; t.Cheltenham = true; t["Cholla Slab"] = true; t.Clarendon = true; t.Clearface = true; t.Cochin = true; t.Colonna = true; t["Computer Modern"] = true; t["Concrete Roman"] = true; t.Constantia = true; t["Cooper Black"] = true; t.Corona = true; t.Ecotype = true; t.Egyptienne = true; t.Elephant = true; t.Excelsior = true; t.Fairfield = true; t["FF Scala"] = true; t.Folkard = true; t.Footlight = true; t.FreeSerif = true; t["Friz Quadrata"] = true; t.Garamond = true; t.Gentium = true; t.Georgia = true; t.Gloucester = true; t["Goudy Old Style"] = true; t["Goudy Schoolbook"] = true; t["Goudy Pro Font"] = true; t.Granjon = true; t["Guardian Egyptian"] = true; t.Heather = true; t.Hercules = true; t["High Tower Text"] = true; t.Hiroshige = true; t["Hoefler Text"] = true; t["Humana Serif"] = true; t.Imprint = true; t["Ionic No. 5"] = true; t.Janson = true; t.Joanna = true; t.Korinna = true; t.Lexicon = true; t.LiberationSerif = true; t["Liberation Serif"] = true; t["Linux Libertine"] = true; t.Literaturnaya = true; t.Lucida = true; t["Lucida Bright"] = true; t.Melior = true; t.Memphis = true; t.Miller = true; t.Minion = true; t.Modern = true; t["Mona Lisa"] = true; t["Mrs Eaves"] = true; t["MS Serif"] = true; t["Museo Slab"] = true; t["New York"] = true; t["Nimbus Roman"] = true; t["NPS Rawlinson Roadway"] = true; t.NuptialScript = true; t.Palatino = true; t.Perpetua = true; t.Plantin = true; t["Plantin Schoolbook"] = true; t.Playbill = true; t["Poor Richard"] = true; t["Rawlinson Roadway"] = true; t.Renault = true; t.Requiem = true; t.Rockwell = true; t.Roman = true; t["Rotis Serif"] = true; t.Sabon = true; t.Scala = true; t.Seagull = true; t.Sistina = true; t.Souvenir = true; t.STIX = true; t["Stone Informal"] = true; t["Stone Serif"] = true; t.Sylfaen = true; t.Times = true; t.Trajan = true; t["Trinité"] = true; t["Trump Mediaeval"] = true; t.Utopia = true; t["Vale Type"] = true; t["Bitstream Vera"] = true; t["Vera Serif"] = true; t.Versailles = true; t.Wanted = true; t.Weiss = true; t["Wide Latin"] = true; t.Windsor = true; t.XITS = true; }); exports.getSerifFonts = getSerifFonts; const getSymbolsFonts = (0, _core_utils.getLookupTableFactory)(function (t) { t.Dingbats = true; t.Symbol = true; t.ZapfDingbats = true; }); exports.getSymbolsFonts = getSymbolsFonts; const getGlyphMapForStandardFonts = (0, _core_utils.getLookupTableFactory)(function (t) { t[2] = 10; t[3] = 32; t[4] = 33; t[5] = 34; t[6] = 35; t[7] = 36; t[8] = 37; t[9] = 38; t[10] = 39; t[11] = 40; t[12] = 41; t[13] = 42; t[14] = 43; t[15] = 44; t[16] = 45; t[17] = 46; t[18] = 47; t[19] = 48; t[20] = 49; t[21] = 50; t[22] = 51; t[23] = 52; t[24] = 53; t[25] = 54; t[26] = 55; t[27] = 56; t[28] = 57; t[29] = 58; t[30] = 894; t[31] = 60; t[32] = 61; t[33] = 62; t[34] = 63; t[35] = 64; t[36] = 65; t[37] = 66; t[38] = 67; t[39] = 68; t[40] = 69; t[41] = 70; t[42] = 71; t[43] = 72; t[44] = 73; t[45] = 74; t[46] = 75; t[47] = 76; t[48] = 77; t[49] = 78; t[50] = 79; t[51] = 80; t[52] = 81; t[53] = 82; t[54] = 83; t[55] = 84; t[56] = 85; t[57] = 86; t[58] = 87; t[59] = 88; t[60] = 89; t[61] = 90; t[62] = 91; t[63] = 92; t[64] = 93; t[65] = 94; t[66] = 95; t[67] = 96; t[68] = 97; t[69] = 98; t[70] = 99; t[71] = 100; t[72] = 101; t[73] = 102; t[74] = 103; t[75] = 104; t[76] = 105; t[77] = 106; t[78] = 107; t[79] = 108; t[80] = 109; t[81] = 110; t[82] = 111; t[83] = 112; t[84] = 113; t[85] = 114; t[86] = 115; t[87] = 116; t[88] = 117; t[89] = 118; t[90] = 119; t[91] = 120; t[92] = 121; t[93] = 122; t[94] = 123; t[95] = 124; t[96] = 125; t[97] = 126; t[98] = 196; t[99] = 197; t[100] = 199; t[101] = 201; t[102] = 209; t[103] = 214; t[104] = 220; t[105] = 225; t[106] = 224; t[107] = 226; t[108] = 228; t[109] = 227; t[110] = 229; t[111] = 231; t[112] = 233; t[113] = 232; t[114] = 234; t[115] = 235; t[116] = 237; t[117] = 236; t[118] = 238; t[119] = 239; t[120] = 241; t[121] = 243; t[122] = 242; t[123] = 244; t[124] = 246; t[125] = 245; t[126] = 250; t[127] = 249; t[128] = 251; t[129] = 252; t[130] = 8224; t[131] = 176; t[132] = 162; t[133] = 163; t[134] = 167; t[135] = 8226; t[136] = 182; t[137] = 223; t[138] = 174; t[139] = 169; t[140] = 8482; t[141] = 180; t[142] = 168; t[143] = 8800; t[144] = 198; t[145] = 216; t[146] = 8734; t[147] = 177; t[148] = 8804; t[149] = 8805; t[150] = 165; t[151] = 181; t[152] = 8706; t[153] = 8721; t[154] = 8719; t[156] = 8747; t[157] = 170; t[158] = 186; t[159] = 8486; t[160] = 230; t[161] = 248; t[162] = 191; t[163] = 161; t[164] = 172; t[165] = 8730; t[166] = 402; t[167] = 8776; t[168] = 8710; t[169] = 171; t[170] = 187; t[171] = 8230; t[200] = 193; t[203] = 205; t[210] = 218; t[223] = 711; t[224] = 321; t[225] = 322; t[226] = 352; t[227] = 353; t[228] = 381; t[229] = 382; t[233] = 221; t[234] = 253; t[252] = 263; t[253] = 268; t[254] = 269; t[258] = 258; t[260] = 260; t[261] = 261; t[265] = 280; t[266] = 281; t[267] = 282; t[268] = 283; t[269] = 313; t[275] = 323; t[276] = 324; t[278] = 328; t[283] = 344; t[284] = 345; t[285] = 346; t[286] = 347; t[292] = 367; t[295] = 377; t[296] = 378; t[298] = 380; t[305] = 963; t[306] = 964; t[307] = 966; t[308] = 8215; t[309] = 8252; t[310] = 8319; t[311] = 8359; t[312] = 8592; t[313] = 8593; t[337] = 9552; t[493] = 1039; t[494] = 1040; t[705] = 1524; t[706] = 8362; t[710] = 64288; t[711] = 64298; t[759] = 1617; t[761] = 1776; t[763] = 1778; t[775] = 1652; t[777] = 1764; t[778] = 1780; t[779] = 1781; t[780] = 1782; t[782] = 771; t[783] = 64726; t[786] = 8363; t[788] = 8532; t[790] = 768; t[791] = 769; t[792] = 768; t[795] = 803; t[797] = 64336; t[798] = 64337; t[799] = 64342; t[800] = 64343; t[801] = 64344; t[802] = 64345; t[803] = 64362; t[804] = 64363; t[805] = 64364; t[2424] = 7821; t[2425] = 7822; t[2426] = 7823; t[2427] = 7824; t[2428] = 7825; t[2429] = 7826; t[2430] = 7827; t[2433] = 7682; t[2678] = 8045; t[2679] = 8046; t[2830] = 1552; t[2838] = 686; t[2840] = 751; t[2842] = 753; t[2843] = 754; t[2844] = 755; t[2846] = 757; t[2856] = 767; t[2857] = 848; t[2858] = 849; t[2862] = 853; t[2863] = 854; t[2864] = 855; t[2865] = 861; t[2866] = 862; t[2906] = 7460; t[2908] = 7462; t[2909] = 7463; t[2910] = 7464; t[2912] = 7466; t[2913] = 7467; t[2914] = 7468; t[2916] = 7470; t[2917] = 7471; t[2918] = 7472; t[2920] = 7474; t[2921] = 7475; t[2922] = 7476; t[2924] = 7478; t[2925] = 7479; t[2926] = 7480; t[2928] = 7482; t[2929] = 7483; t[2930] = 7484; t[2932] = 7486; t[2933] = 7487; t[2934] = 7488; t[2936] = 7490; t[2937] = 7491; t[2938] = 7492; t[2940] = 7494; t[2941] = 7495; t[2942] = 7496; t[2944] = 7498; t[2946] = 7500; t[2948] = 7502; t[2950] = 7504; t[2951] = 7505; t[2952] = 7506; t[2954] = 7508; t[2955] = 7509; t[2956] = 7510; t[2958] = 7512; t[2959] = 7513; t[2960] = 7514; t[2962] = 7516; t[2963] = 7517; t[2964] = 7518; t[2966] = 7520; t[2967] = 7521; t[2968] = 7522; t[2970] = 7524; t[2971] = 7525; t[2972] = 7526; t[2974] = 7528; t[2975] = 7529; t[2976] = 7530; t[2978] = 1537; t[2979] = 1538; t[2980] = 1539; t[2982] = 1549; t[2983] = 1551; t[2984] = 1552; t[2986] = 1554; t[2987] = 1555; t[2988] = 1556; t[2990] = 1623; t[2991] = 1624; t[2995] = 1775; t[2999] = 1791; t[3002] = 64290; t[3003] = 64291; t[3004] = 64292; t[3006] = 64294; t[3007] = 64295; t[3008] = 64296; t[3011] = 1900; t[3014] = 8223; t[3015] = 8244; t[3017] = 7532; t[3018] = 7533; t[3019] = 7534; t[3075] = 7590; t[3076] = 7591; t[3079] = 7594; t[3080] = 7595; t[3083] = 7598; t[3084] = 7599; t[3087] = 7602; t[3088] = 7603; t[3091] = 7606; t[3092] = 7607; t[3095] = 7610; t[3096] = 7611; t[3099] = 7614; t[3100] = 7615; t[3103] = 7618; t[3104] = 7619; t[3107] = 8337; t[3108] = 8338; t[3116] = 1884; t[3119] = 1885; t[3120] = 1885; t[3123] = 1886; t[3124] = 1886; t[3127] = 1887; t[3128] = 1887; t[3131] = 1888; t[3132] = 1888; t[3135] = 1889; t[3136] = 1889; t[3139] = 1890; t[3140] = 1890; t[3143] = 1891; t[3144] = 1891; t[3147] = 1892; t[3148] = 1892; t[3153] = 580; t[3154] = 581; t[3157] = 584; t[3158] = 585; t[3161] = 588; t[3162] = 589; t[3165] = 891; t[3166] = 892; t[3169] = 1274; t[3170] = 1275; t[3173] = 1278; t[3174] = 1279; t[3181] = 7622; t[3182] = 7623; t[3282] = 11799; t[3316] = 578; t[3379] = 42785; t[3393] = 1159; t[3416] = 8377; }); exports.getGlyphMapForStandardFonts = getGlyphMapForStandardFonts; const getSupplementalGlyphMapForArialBlack = (0, _core_utils.getLookupTableFactory)(function (t) { t[227] = 322; t[264] = 261; t[291] = 346; }); exports.getSupplementalGlyphMapForArialBlack = getSupplementalGlyphMapForArialBlack; const getSupplementalGlyphMapForCalibri = (0, _core_utils.getLookupTableFactory)(function (t) { t[1] = 32; t[4] = 65; t[6] = 193; t[17] = 66; t[18] = 67; t[21] = 268; t[24] = 68; t[28] = 69; t[30] = 201; t[32] = 282; t[38] = 70; t[39] = 71; t[44] = 72; t[47] = 73; t[49] = 205; t[58] = 74; t[60] = 75; t[62] = 76; t[68] = 77; t[69] = 78; t[75] = 79; t[87] = 80; t[89] = 81; t[90] = 82; t[92] = 344; t[94] = 83; t[97] = 352; t[100] = 84; t[104] = 85; t[115] = 86; t[116] = 87; t[121] = 88; t[122] = 89; t[124] = 221; t[127] = 90; t[129] = 381; t[258] = 97; t[260] = 225; t[268] = 261; t[271] = 98; t[272] = 99; t[273] = 263; t[275] = 269; t[282] = 100; t[286] = 101; t[288] = 233; t[290] = 283; t[295] = 281; t[296] = 102; t[336] = 103; t[346] = 104; t[349] = 105; t[351] = 237; t[361] = 106; t[364] = 107; t[367] = 108; t[371] = 322; t[373] = 109; t[374] = 110; t[381] = 111; t[383] = 243; t[393] = 112; t[395] = 113; t[396] = 114; t[398] = 345; t[400] = 115; t[401] = 347; t[403] = 353; t[410] = 116; t[437] = 117; t[448] = 118; t[449] = 119; t[454] = 120; t[455] = 121; t[457] = 253; t[460] = 122; t[462] = 382; t[463] = 380; t[853] = 44; t[855] = 58; t[856] = 46; t[876] = 47; t[878] = 45; t[882] = 45; t[894] = 40; t[895] = 41; t[896] = 91; t[897] = 93; t[923] = 64; t[1004] = 48; t[1005] = 49; t[1006] = 50; t[1007] = 51; t[1008] = 52; t[1009] = 53; t[1010] = 54; t[1011] = 55; t[1012] = 56; t[1013] = 57; t[1081] = 37; t[1085] = 43; t[1086] = 45; }); exports.getSupplementalGlyphMapForCalibri = getSupplementalGlyphMapForCalibri; function getStandardFontName(name) { const fontName = (0, _fonts_utils.normalizeFontName)(name); const stdFontMap = getStdFontMap(); return stdFontMap[fontName]; } /***/ }), /* 48 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.ToUnicodeMap = exports.IdentityToUnicodeMap = void 0; var _util = __w_pdfjs_require__(2); class ToUnicodeMap { constructor(cmap = []) { this._map = cmap; } get length() { return this._map.length; } forEach(callback) { for (const charCode in this._map) { callback(charCode, this._map[charCode].charCodeAt(0)); } } has(i) { return this._map[i] !== undefined; } get(i) { return this._map[i]; } charCodeOf(value) { const map = this._map; if (map.length <= 0x10000) { return map.indexOf(value); } for (const charCode in map) { if (map[charCode] === value) { return charCode | 0; } } return -1; } amend(map) { for (const charCode in map) { this._map[charCode] = map[charCode]; } } } exports.ToUnicodeMap = ToUnicodeMap; class IdentityToUnicodeMap { constructor(firstChar, lastChar) { this.firstChar = firstChar; this.lastChar = lastChar; } get length() { return this.lastChar + 1 - this.firstChar; } forEach(callback) { for (let i = this.firstChar, ii = this.lastChar; i <= ii; i++) { callback(i, i); } } has(i) { return this.firstChar <= i && i <= this.lastChar; } get(i) { if (this.firstChar <= i && i <= this.lastChar) { return String.fromCharCode(i); } return undefined; } charCodeOf(v) { return Number.isInteger(v) && v >= this.firstChar && v <= this.lastChar ? v : -1; } amend(map) { (0, _util.unreachable)("Should not call amend()"); } } exports.IdentityToUnicodeMap = IdentityToUnicodeMap; /***/ }), /* 49 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.CFFFont = void 0; var _cff_parser = __w_pdfjs_require__(45); var _fonts_utils = __w_pdfjs_require__(18); var _util = __w_pdfjs_require__(2); class CFFFont { constructor(file, properties) { this.properties = properties; const parser = new _cff_parser.CFFParser(file, properties, _fonts_utils.SEAC_ANALYSIS_ENABLED); this.cff = parser.parse(); this.cff.duplicateFirstGlyph(); const compiler = new _cff_parser.CFFCompiler(this.cff); this.seacs = this.cff.seacs; try { this.data = compiler.compile(); } catch (e) { (0, _util.warn)("Failed to compile font " + properties.loadedName); this.data = file; } this._createBuiltInEncoding(); } get numGlyphs() { return this.cff.charStrings.count; } getCharset() { return this.cff.charset.charset; } getGlyphMapping() { const cff = this.cff; const properties = this.properties; const charsets = cff.charset.charset; let charCodeToGlyphId; let glyphId; if (properties.composite) { charCodeToGlyphId = Object.create(null); let charCode; if (cff.isCIDFont) { for (glyphId = 0; glyphId < charsets.length; glyphId++) { const cid = charsets[glyphId]; charCode = properties.cMap.charCodeOf(cid); charCodeToGlyphId[charCode] = glyphId; } } else { for (glyphId = 0; glyphId < cff.charStrings.count; glyphId++) { charCode = properties.cMap.charCodeOf(glyphId); charCodeToGlyphId[charCode] = glyphId; } } return charCodeToGlyphId; } let encoding = cff.encoding ? cff.encoding.encoding : null; if (properties.isInternalFont) { encoding = properties.defaultEncoding; } charCodeToGlyphId = (0, _fonts_utils.type1FontGlyphMapping)(properties, encoding, charsets); return charCodeToGlyphId; } hasGlyphId(id) { return this.cff.hasGlyphId(id); } _createBuiltInEncoding() { const { charset, encoding } = this.cff; if (!charset || !encoding) { return; } const charsets = charset.charset, encodings = encoding.encoding; const map = []; for (const charCode in encodings) { const glyphId = encodings[charCode]; if (glyphId >= 0) { const glyphName = charsets[glyphId]; if (glyphName) { map[charCode] = glyphName; } } } if (map.length > 0) { this.properties.builtInEncoding = map; } } } exports.CFFFont = CFFFont; /***/ }), /* 50 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.FontRendererFactory = void 0; var _util = __w_pdfjs_require__(2); var _cff_parser = __w_pdfjs_require__(45); var _glyphlist = __w_pdfjs_require__(20); var _encodings = __w_pdfjs_require__(19); var _stream = __w_pdfjs_require__(10); function getLong(data, offset) { return data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]; } function getUshort(data, offset) { return data[offset] << 8 | data[offset + 1]; } function getSubroutineBias(subrs) { const numSubrs = subrs.length; let bias = 32768; if (numSubrs < 1240) { bias = 107; } else if (numSubrs < 33900) { bias = 1131; } return bias; } function parseCmap(data, start, end) { const offset = getUshort(data, start + 2) === 1 ? getLong(data, start + 8) : getLong(data, start + 16); const format = getUshort(data, start + offset); let ranges, p, i; if (format === 4) { getUshort(data, start + offset + 2); const segCount = getUshort(data, start + offset + 6) >> 1; p = start + offset + 14; ranges = []; for (i = 0; i < segCount; i++, p += 2) { ranges[i] = { end: getUshort(data, p) }; } p += 2; for (i = 0; i < segCount; i++, p += 2) { ranges[i].start = getUshort(data, p); } for (i = 0; i < segCount; i++, p += 2) { ranges[i].idDelta = getUshort(data, p); } for (i = 0; i < segCount; i++, p += 2) { let idOffset = getUshort(data, p); if (idOffset === 0) { continue; } ranges[i].ids = []; for (let j = 0, jj = ranges[i].end - ranges[i].start + 1; j < jj; j++) { ranges[i].ids[j] = getUshort(data, p + idOffset); idOffset += 2; } } return ranges; } else if (format === 12) { getLong(data, start + offset + 4); const groups = getLong(data, start + offset + 12); p = start + offset + 16; ranges = []; for (i = 0; i < groups; i++) { ranges.push({ start: getLong(data, p), end: getLong(data, p + 4), idDelta: getLong(data, p + 8) - getLong(data, p) }); p += 12; } return ranges; } throw new _util.FormatError(`unsupported cmap: ${format}`); } function parseCff(data, start, end, seacAnalysisEnabled) { const properties = {}; const parser = new _cff_parser.CFFParser(new _stream.Stream(data, start, end - start), properties, seacAnalysisEnabled); const cff = parser.parse(); return { glyphs: cff.charStrings.objects, subrs: cff.topDict.privateDict && cff.topDict.privateDict.subrsIndex && cff.topDict.privateDict.subrsIndex.objects, gsubrs: cff.globalSubrIndex && cff.globalSubrIndex.objects, isCFFCIDFont: cff.isCIDFont, fdSelect: cff.fdSelect, fdArray: cff.fdArray }; } function parseGlyfTable(glyf, loca, isGlyphLocationsLong) { let itemSize, itemDecode; if (isGlyphLocationsLong) { itemSize = 4; itemDecode = function fontItemDecodeLong(data, offset) { return data[offset] << 24 | data[offset + 1] << 16 | data[offset + 2] << 8 | data[offset + 3]; }; } else { itemSize = 2; itemDecode = function fontItemDecode(data, offset) { return data[offset] << 9 | data[offset + 1] << 1; }; } const glyphs = []; let startOffset = itemDecode(loca, 0); for (let j = itemSize; j < loca.length; j += itemSize) { const endOffset = itemDecode(loca, j); glyphs.push(glyf.subarray(startOffset, endOffset)); startOffset = endOffset; } return glyphs; } function lookupCmap(ranges, unicode) { const code = unicode.codePointAt(0); let gid = 0, l = 0, r = ranges.length - 1; while (l < r) { const c = l + r + 1 >> 1; if (code < ranges[c].start) { r = c - 1; } else { l = c; } } if (ranges[l].start <= code && code <= ranges[l].end) { gid = ranges[l].idDelta + (ranges[l].ids ? ranges[l].ids[code - ranges[l].start] : code) & 0xffff; } return { charCode: code, glyphId: gid }; } function compileGlyf(code, cmds, font) { function moveTo(x, y) { cmds.push({ cmd: "moveTo", args: [x, y] }); } function lineTo(x, y) { cmds.push({ cmd: "lineTo", args: [x, y] }); } function quadraticCurveTo(xa, ya, x, y) { cmds.push({ cmd: "quadraticCurveTo", args: [xa, ya, x, y] }); } let i = 0; const numberOfContours = (code[i] << 24 | code[i + 1] << 16) >> 16; let flags; let x = 0, y = 0; i += 10; if (numberOfContours < 0) { do { flags = code[i] << 8 | code[i + 1]; const glyphIndex = code[i + 2] << 8 | code[i + 3]; i += 4; let arg1, arg2; if (flags & 0x01) { arg1 = (code[i] << 24 | code[i + 1] << 16) >> 16; arg2 = (code[i + 2] << 24 | code[i + 3] << 16) >> 16; i += 4; } else { arg1 = code[i++]; arg2 = code[i++]; } if (flags & 0x02) { x = arg1; y = arg2; } else { x = 0; y = 0; } let scaleX = 1, scaleY = 1, scale01 = 0, scale10 = 0; if (flags & 0x08) { scaleX = scaleY = (code[i] << 24 | code[i + 1] << 16) / 1073741824; i += 2; } else if (flags & 0x40) { scaleX = (code[i] << 24 | code[i + 1] << 16) / 1073741824; scaleY = (code[i + 2] << 24 | code[i + 3] << 16) / 1073741824; i += 4; } else if (flags & 0x80) { scaleX = (code[i] << 24 | code[i + 1] << 16) / 1073741824; scale01 = (code[i + 2] << 24 | code[i + 3] << 16) / 1073741824; scale10 = (code[i + 4] << 24 | code[i + 5] << 16) / 1073741824; scaleY = (code[i + 6] << 24 | code[i + 7] << 16) / 1073741824; i += 8; } const subglyph = font.glyphs[glyphIndex]; if (subglyph) { cmds.push({ cmd: "save" }, { cmd: "transform", args: [scaleX, scale01, scale10, scaleY, x, y] }); compileGlyf(subglyph, cmds, font); cmds.push({ cmd: "restore" }); } } while (flags & 0x20); } else { const endPtsOfContours = []; let j, jj; for (j = 0; j < numberOfContours; j++) { endPtsOfContours.push(code[i] << 8 | code[i + 1]); i += 2; } const instructionLength = code[i] << 8 | code[i + 1]; i += 2 + instructionLength; const numberOfPoints = endPtsOfContours[endPtsOfContours.length - 1] + 1; const points = []; while (points.length < numberOfPoints) { flags = code[i++]; let repeat = 1; if (flags & 0x08) { repeat += code[i++]; } while (repeat-- > 0) { points.push({ flags }); } } for (j = 0; j < numberOfPoints; j++) { switch (points[j].flags & 0x12) { case 0x00: x += (code[i] << 24 | code[i + 1] << 16) >> 16; i += 2; break; case 0x02: x -= code[i++]; break; case 0x12: x += code[i++]; break; } points[j].x = x; } for (j = 0; j < numberOfPoints; j++) { switch (points[j].flags & 0x24) { case 0x00: y += (code[i] << 24 | code[i + 1] << 16) >> 16; i += 2; break; case 0x04: y -= code[i++]; break; case 0x24: y += code[i++]; break; } points[j].y = y; } let startPoint = 0; for (i = 0; i < numberOfContours; i++) { const endPoint = endPtsOfContours[i]; const contour = points.slice(startPoint, endPoint + 1); if (contour[0].flags & 1) { contour.push(contour[0]); } else if (contour[contour.length - 1].flags & 1) { contour.unshift(contour[contour.length - 1]); } else { const p = { flags: 1, x: (contour[0].x + contour[contour.length - 1].x) / 2, y: (contour[0].y + contour[contour.length - 1].y) / 2 }; contour.unshift(p); contour.push(p); } moveTo(contour[0].x, contour[0].y); for (j = 1, jj = contour.length; j < jj; j++) { if (contour[j].flags & 1) { lineTo(contour[j].x, contour[j].y); } else if (contour[j + 1].flags & 1) { quadraticCurveTo(contour[j].x, contour[j].y, contour[j + 1].x, contour[j + 1].y); j++; } else { quadraticCurveTo(contour[j].x, contour[j].y, (contour[j].x + contour[j + 1].x) / 2, (contour[j].y + contour[j + 1].y) / 2); } } startPoint = endPoint + 1; } } } function compileCharString(charStringCode, cmds, font, glyphId) { function moveTo(x, y) { cmds.push({ cmd: "moveTo", args: [x, y] }); } function lineTo(x, y) { cmds.push({ cmd: "lineTo", args: [x, y] }); } function bezierCurveTo(x1, y1, x2, y2, x, y) { cmds.push({ cmd: "bezierCurveTo", args: [x1, y1, x2, y2, x, y] }); } const stack = []; let x = 0, y = 0; let stems = 0; function parse(code) { let i = 0; while (i < code.length) { let stackClean = false; let v = code[i++]; let xa, xb, ya, yb, y1, y2, y3, n, subrCode; switch (v) { case 1: stems += stack.length >> 1; stackClean = true; break; case 3: stems += stack.length >> 1; stackClean = true; break; case 4: y += stack.pop(); moveTo(x, y); stackClean = true; break; case 5: while (stack.length > 0) { x += stack.shift(); y += stack.shift(); lineTo(x, y); } break; case 6: while (stack.length > 0) { x += stack.shift(); lineTo(x, y); if (stack.length === 0) { break; } y += stack.shift(); lineTo(x, y); } break; case 7: while (stack.length > 0) { y += stack.shift(); lineTo(x, y); if (stack.length === 0) { break; } x += stack.shift(); lineTo(x, y); } break; case 8: while (stack.length > 0) { xa = x + stack.shift(); ya = y + stack.shift(); xb = xa + stack.shift(); yb = ya + stack.shift(); x = xb + stack.shift(); y = yb + stack.shift(); bezierCurveTo(xa, ya, xb, yb, x, y); } break; case 10: n = stack.pop(); subrCode = null; if (font.isCFFCIDFont) { const fdIndex = font.fdSelect.getFDIndex(glyphId); if (fdIndex >= 0 && fdIndex < font.fdArray.length) { const fontDict = font.fdArray[fdIndex]; let subrs; if (fontDict.privateDict && fontDict.privateDict.subrsIndex) { subrs = fontDict.privateDict.subrsIndex.objects; } if (subrs) { n += getSubroutineBias(subrs); subrCode = subrs[n]; } } else { (0, _util.warn)("Invalid fd index for glyph index."); } } else { subrCode = font.subrs[n + font.subrsBias]; } if (subrCode) { parse(subrCode); } break; case 11: return; case 12: v = code[i++]; switch (v) { case 34: xa = x + stack.shift(); xb = xa + stack.shift(); y1 = y + stack.shift(); x = xb + stack.shift(); bezierCurveTo(xa, y, xb, y1, x, y1); xa = x + stack.shift(); xb = xa + stack.shift(); x = xb + stack.shift(); bezierCurveTo(xa, y1, xb, y, x, y); break; case 35: xa = x + stack.shift(); ya = y + stack.shift(); xb = xa + stack.shift(); yb = ya + stack.shift(); x = xb + stack.shift(); y = yb + stack.shift(); bezierCurveTo(xa, ya, xb, yb, x, y); xa = x + stack.shift(); ya = y + stack.shift(); xb = xa + stack.shift(); yb = ya + stack.shift(); x = xb + stack.shift(); y = yb + stack.shift(); bezierCurveTo(xa, ya, xb, yb, x, y); stack.pop(); break; case 36: xa = x + stack.shift(); y1 = y + stack.shift(); xb = xa + stack.shift(); y2 = y1 + stack.shift(); x = xb + stack.shift(); bezierCurveTo(xa, y1, xb, y2, x, y2); xa = x + stack.shift(); xb = xa + stack.shift(); y3 = y2 + stack.shift(); x = xb + stack.shift(); bezierCurveTo(xa, y2, xb, y3, x, y); break; case 37: const x0 = x, y0 = y; xa = x + stack.shift(); ya = y + stack.shift(); xb = xa + stack.shift(); yb = ya + stack.shift(); x = xb + stack.shift(); y = yb + stack.shift(); bezierCurveTo(xa, ya, xb, yb, x, y); xa = x + stack.shift(); ya = y + stack.shift(); xb = xa + stack.shift(); yb = ya + stack.shift(); x = xb; y = yb; if (Math.abs(x - x0) > Math.abs(y - y0)) { x += stack.shift(); } else { y += stack.shift(); } bezierCurveTo(xa, ya, xb, yb, x, y); break; default: throw new _util.FormatError(`unknown operator: 12 ${v}`); } break; case 14: if (stack.length >= 4) { const achar = stack.pop(); const bchar = stack.pop(); y = stack.pop(); x = stack.pop(); cmds.push({ cmd: "save" }, { cmd: "translate", args: [x, y] }); let cmap = lookupCmap(font.cmap, String.fromCharCode(font.glyphNameMap[_encodings.StandardEncoding[achar]])); compileCharString(font.glyphs[cmap.glyphId], cmds, font, cmap.glyphId); cmds.push({ cmd: "restore" }); cmap = lookupCmap(font.cmap, String.fromCharCode(font.glyphNameMap[_encodings.StandardEncoding[bchar]])); compileCharString(font.glyphs[cmap.glyphId], cmds, font, cmap.glyphId); } return; case 18: stems += stack.length >> 1; stackClean = true; break; case 19: stems += stack.length >> 1; i += stems + 7 >> 3; stackClean = true; break; case 20: stems += stack.length >> 1; i += stems + 7 >> 3; stackClean = true; break; case 21: y += stack.pop(); x += stack.pop(); moveTo(x, y); stackClean = true; break; case 22: x += stack.pop(); moveTo(x, y); stackClean = true; break; case 23: stems += stack.length >> 1; stackClean = true; break; case 24: while (stack.length > 2) { xa = x + stack.shift(); ya = y + stack.shift(); xb = xa + stack.shift(); yb = ya + stack.shift(); x = xb + stack.shift(); y = yb + stack.shift(); bezierCurveTo(xa, ya, xb, yb, x, y); } x += stack.shift(); y += stack.shift(); lineTo(x, y); break; case 25: while (stack.length > 6) { x += stack.shift(); y += stack.shift(); lineTo(x, y); } xa = x + stack.shift(); ya = y + stack.shift(); xb = xa + stack.shift(); yb = ya + stack.shift(); x = xb + stack.shift(); y = yb + stack.shift(); bezierCurveTo(xa, ya, xb, yb, x, y); break; case 26: if (stack.length % 2) { x += stack.shift(); } while (stack.length > 0) { xa = x; ya = y + stack.shift(); xb = xa + stack.shift(); yb = ya + stack.shift(); x = xb; y = yb + stack.shift(); bezierCurveTo(xa, ya, xb, yb, x, y); } break; case 27: if (stack.length % 2) { y += stack.shift(); } while (stack.length > 0) { xa = x + stack.shift(); ya = y; xb = xa + stack.shift(); yb = ya + stack.shift(); x = xb + stack.shift(); y = yb; bezierCurveTo(xa, ya, xb, yb, x, y); } break; case 28: stack.push((code[i] << 24 | code[i + 1] << 16) >> 16); i += 2; break; case 29: n = stack.pop() + font.gsubrsBias; subrCode = font.gsubrs[n]; if (subrCode) { parse(subrCode); } break; case 30: while (stack.length > 0) { xa = x; ya = y + stack.shift(); xb = xa + stack.shift(); yb = ya + stack.shift(); x = xb + stack.shift(); y = yb + (stack.length === 1 ? stack.shift() : 0); bezierCurveTo(xa, ya, xb, yb, x, y); if (stack.length === 0) { break; } xa = x + stack.shift(); ya = y; xb = xa + stack.shift(); yb = ya + stack.shift(); y = yb + stack.shift(); x = xb + (stack.length === 1 ? stack.shift() : 0); bezierCurveTo(xa, ya, xb, yb, x, y); } break; case 31: while (stack.length > 0) { xa = x + stack.shift(); ya = y; xb = xa + stack.shift(); yb = ya + stack.shift(); y = yb + stack.shift(); x = xb + (stack.length === 1 ? stack.shift() : 0); bezierCurveTo(xa, ya, xb, yb, x, y); if (stack.length === 0) { break; } xa = x; ya = y + stack.shift(); xb = xa + stack.shift(); yb = ya + stack.shift(); x = xb + stack.shift(); y = yb + (stack.length === 1 ? stack.shift() : 0); bezierCurveTo(xa, ya, xb, yb, x, y); } break; default: if (v < 32) { throw new _util.FormatError(`unknown operator: ${v}`); } if (v < 247) { stack.push(v - 139); } else if (v < 251) { stack.push((v - 247) * 256 + code[i++] + 108); } else if (v < 255) { stack.push(-(v - 251) * 256 - code[i++] - 108); } else { stack.push((code[i] << 24 | code[i + 1] << 16 | code[i + 2] << 8 | code[i + 3]) / 65536); i += 4; } break; } if (stackClean) { stack.length = 0; } } } parse(charStringCode); } const NOOP = []; class CompiledFont { constructor(fontMatrix) { if (this.constructor === CompiledFont) { (0, _util.unreachable)("Cannot initialize CompiledFont."); } this.fontMatrix = fontMatrix; this.compiledGlyphs = Object.create(null); this.compiledCharCodeToGlyphId = Object.create(null); } getPathJs(unicode) { const { charCode, glyphId } = lookupCmap(this.cmap, unicode); let fn = this.compiledGlyphs[glyphId]; if (!fn) { try { fn = this.compileGlyph(this.glyphs[glyphId], glyphId); this.compiledGlyphs[glyphId] = fn; } catch (ex) { this.compiledGlyphs[glyphId] = NOOP; if (this.compiledCharCodeToGlyphId[charCode] === undefined) { this.compiledCharCodeToGlyphId[charCode] = glyphId; } throw ex; } } if (this.compiledCharCodeToGlyphId[charCode] === undefined) { this.compiledCharCodeToGlyphId[charCode] = glyphId; } return fn; } compileGlyph(code, glyphId) { if (!code || code.length === 0 || code[0] === 14) { return NOOP; } let fontMatrix = this.fontMatrix; if (this.isCFFCIDFont) { const fdIndex = this.fdSelect.getFDIndex(glyphId); if (fdIndex >= 0 && fdIndex < this.fdArray.length) { const fontDict = this.fdArray[fdIndex]; fontMatrix = fontDict.getByName("FontMatrix") || _util.FONT_IDENTITY_MATRIX; } else { (0, _util.warn)("Invalid fd index for glyph index."); } } const cmds = [{ cmd: "save" }, { cmd: "transform", args: fontMatrix.slice() }, { cmd: "scale", args: ["size", "-size"] }]; this.compileGlyphImpl(code, cmds, glyphId); cmds.push({ cmd: "restore" }); return cmds; } compileGlyphImpl() { (0, _util.unreachable)("Children classes should implement this."); } hasBuiltPath(unicode) { const { charCode, glyphId } = lookupCmap(this.cmap, unicode); return this.compiledGlyphs[glyphId] !== undefined && this.compiledCharCodeToGlyphId[charCode] !== undefined; } } class TrueTypeCompiled extends CompiledFont { constructor(glyphs, cmap, fontMatrix) { super(fontMatrix || [0.000488, 0, 0, 0.000488, 0, 0]); this.glyphs = glyphs; this.cmap = cmap; } compileGlyphImpl(code, cmds) { compileGlyf(code, cmds, this); } } class Type2Compiled extends CompiledFont { constructor(cffInfo, cmap, fontMatrix, glyphNameMap) { super(fontMatrix || [0.001, 0, 0, 0.001, 0, 0]); this.glyphs = cffInfo.glyphs; this.gsubrs = cffInfo.gsubrs || []; this.subrs = cffInfo.subrs || []; this.cmap = cmap; this.glyphNameMap = glyphNameMap || (0, _glyphlist.getGlyphsUnicode)(); this.gsubrsBias = getSubroutineBias(this.gsubrs); this.subrsBias = getSubroutineBias(this.subrs); this.isCFFCIDFont = cffInfo.isCFFCIDFont; this.fdSelect = cffInfo.fdSelect; this.fdArray = cffInfo.fdArray; } compileGlyphImpl(code, cmds, glyphId) { compileCharString(code, cmds, this, glyphId); } } class FontRendererFactory { static create(font, seacAnalysisEnabled) { const data = new Uint8Array(font.data); let cmap, glyf, loca, cff, indexToLocFormat, unitsPerEm; const numTables = getUshort(data, 4); for (let i = 0, p = 12; i < numTables; i++, p += 16) { const tag = (0, _util.bytesToString)(data.subarray(p, p + 4)); const offset = getLong(data, p + 8); const length = getLong(data, p + 12); switch (tag) { case "cmap": cmap = parseCmap(data, offset); break; case "glyf": glyf = data.subarray(offset, offset + length); break; case "loca": loca = data.subarray(offset, offset + length); break; case "head": unitsPerEm = getUshort(data, offset + 18); indexToLocFormat = getUshort(data, offset + 50); break; case "CFF ": cff = parseCff(data, offset, offset + length, seacAnalysisEnabled); break; } } if (glyf) { const fontMatrix = !unitsPerEm ? font.fontMatrix : [1 / unitsPerEm, 0, 0, 1 / unitsPerEm, 0, 0]; return new TrueTypeCompiled(parseGlyfTable(glyf, loca, indexToLocFormat), cmap, fontMatrix); } return new Type2Compiled(cff, cmap, font.fontMatrix, font.glyphNameMap); } } exports.FontRendererFactory = FontRendererFactory; /***/ }), /* 51 */ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.GlyfTable = void 0; const ON_CURVE_POINT = 1 << 0; const X_SHORT_VECTOR = 1 << 1; const Y_SHORT_VECTOR = 1 << 2; const REPEAT_FLAG = 1 << 3; const X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR = 1 << 4; const Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR = 1 << 5; const OVERLAP_SIMPLE = 1 << 6; const ARG_1_AND_2_ARE_WORDS = 1 << 0; const ARGS_ARE_XY_VALUES = 1 << 1; const WE_HAVE_A_SCALE = 1 << 3; const MORE_COMPONENTS = 1 << 5; const WE_HAVE_AN_X_AND_Y_SCALE = 1 << 6; const WE_HAVE_A_TWO_BY_TWO = 1 << 7; const WE_HAVE_INSTRUCTIONS = 1 << 8; class GlyfTable { constructor({ glyfTable, isGlyphLocationsLong, locaTable, numGlyphs }) { this.glyphs = []; const loca = new DataView(locaTable.buffer, locaTable.byteOffset, locaTable.byteLength); const glyf = new DataView(glyfTable.buffer, glyfTable.byteOffset, glyfTable.byteLength); const offsetSize = isGlyphLocationsLong ? 4 : 2; let prev = isGlyphLocationsLong ? loca.getUint32(0) : 2 * loca.getUint16(0); let pos = 0; for (let i = 0; i < numGlyphs; i++) { pos += offsetSize; const next = isGlyphLocationsLong ? loca.getUint32(pos) : 2 * loca.getUint16(pos); if (next === prev) { this.glyphs.push(new Glyph({})); continue; } const glyph = Glyph.parse(prev, glyf); this.glyphs.push(glyph); prev = next; } } getSize() { return this.glyphs.reduce((a, g) => { const size = g.getSize(); return a + (size + 3 & ~3); }, 0); } write() { const totalSize = this.getSize(); const glyfTable = new DataView(new ArrayBuffer(totalSize)); const isLocationLong = totalSize > 0x1fffe; const offsetSize = isLocationLong ? 4 : 2; const locaTable = new DataView(new ArrayBuffer((this.glyphs.length + 1) * offsetSize)); if (isLocationLong) { locaTable.setUint32(0, 0); } else { locaTable.setUint16(0, 0); } let pos = 0; let locaIndex = 0; for (const glyph of this.glyphs) { pos += glyph.write(pos, glyfTable); pos = pos + 3 & ~3; locaIndex += offsetSize; if (isLocationLong) { locaTable.setUint32(locaIndex, pos); } else { locaTable.setUint16(locaIndex, pos >> 1); } } return { isLocationLong, loca: new Uint8Array(locaTable.buffer), glyf: new Uint8Array(glyfTable.buffer) }; } scale(factors) { for (let i = 0, ii = this.glyphs.length; i < ii; i++) { this.glyphs[i].scale(factors[i]); } } } exports.GlyfTable = GlyfTable; class Glyph { constructor({ header = null, simple = null, composites = null }) { this.header = header; this.simple = simple; this.composites = composites; } static parse(pos, glyf) { const [read, header] = GlyphHeader.parse(pos, glyf); pos += read; if (header.numberOfContours < 0) { const composites = []; while (true) { const [n, composite] = CompositeGlyph.parse(pos, glyf); pos += n; composites.push(composite); if (!(composite.flags & MORE_COMPONENTS)) { break; } } return new Glyph({ header, composites }); } const simple = SimpleGlyph.parse(pos, glyf, header.numberOfContours); return new Glyph({ header, simple }); } getSize() { if (!this.header) { return 0; } const size = this.simple ? this.simple.getSize() : this.composites.reduce((a, c) => a + c.getSize(), 0); return this.header.getSize() + size; } write(pos, buf) { if (!this.header) { return 0; } const spos = pos; pos += this.header.write(pos, buf); if (this.simple) { pos += this.simple.write(pos, buf); } else { for (const composite of this.composites) { pos += composite.write(pos, buf); } } return pos - spos; } scale(factor) { if (!this.header) { return; } const xMiddle = (this.header.xMin + this.header.xMax) / 2; this.header.scale(xMiddle, factor); if (this.simple) { this.simple.scale(xMiddle, factor); } else { for (const composite of this.composites) { composite.scale(xMiddle, factor); } } } } class GlyphHeader { constructor({ numberOfContours, xMin, yMin, xMax, yMax }) { this.numberOfContours = numberOfContours; this.xMin = xMin; this.yMin = yMin; this.xMax = xMax; this.yMax = yMax; } static parse(pos, glyf) { return [10, new GlyphHeader({ numberOfContours: glyf.getInt16(pos), xMin: glyf.getInt16(pos + 2), yMin: glyf.getInt16(pos + 4), xMax: glyf.getInt16(pos + 6), yMax: glyf.getInt16(pos + 8) })]; } getSize() { return 10; } write(pos, buf) { buf.setInt16(pos, this.numberOfContours); buf.setInt16(pos + 2, this.xMin); buf.setInt16(pos + 4, this.yMin); buf.setInt16(pos + 6, this.xMax); buf.setInt16(pos + 8, this.yMax); return 10; } scale(x, factor) { this.xMin = Math.round(x + (this.xMin - x) * factor); this.xMax = Math.round(x + (this.xMax - x) * factor); } } class Contour { constructor({ flags, xCoordinates, yCoordinates }) { this.xCoordinates = xCoordinates; this.yCoordinates = yCoordinates; this.flags = flags; } } class SimpleGlyph { constructor({ contours, instructions }) { this.contours = contours; this.instructions = instructions; } static parse(pos, glyf, numberOfContours) { const endPtsOfContours = []; for (let i = 0; i < numberOfContours; i++) { const endPt = glyf.getUint16(pos); pos += 2; endPtsOfContours.push(endPt); } const numberOfPt = endPtsOfContours[numberOfContours - 1] + 1; const instructionLength = glyf.getUint16(pos); pos += 2; const instructions = new Uint8Array(glyf).slice(pos, pos + instructionLength); pos += instructionLength; const flags = []; for (let i = 0; i < numberOfPt; pos++, i++) { let flag = glyf.getUint8(pos); flags.push(flag); if (flag & REPEAT_FLAG) { const count = glyf.getUint8(++pos); flag ^= REPEAT_FLAG; for (let m = 0; m < count; m++) { flags.push(flag); } i += count; } } const allXCoordinates = []; let xCoordinates = []; let yCoordinates = []; let pointFlags = []; const contours = []; let endPtsOfContoursIndex = 0; let lastCoordinate = 0; for (let i = 0; i < numberOfPt; i++) { const flag = flags[i]; if (flag & X_SHORT_VECTOR) { const x = glyf.getUint8(pos++); lastCoordinate += flag & X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR ? x : -x; xCoordinates.push(lastCoordinate); } else if (flag & X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR) { xCoordinates.push(lastCoordinate); } else { lastCoordinate += glyf.getInt16(pos); pos += 2; xCoordinates.push(lastCoordinate); } if (endPtsOfContours[endPtsOfContoursIndex] === i) { endPtsOfContoursIndex++; allXCoordinates.push(xCoordinates); xCoordinates = []; } } lastCoordinate = 0; endPtsOfContoursIndex = 0; for (let i = 0; i < numberOfPt; i++) { const flag = flags[i]; if (flag & Y_SHORT_VECTOR) { const y = glyf.getUint8(pos++); lastCoordinate += flag & Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR ? y : -y; yCoordinates.push(lastCoordinate); } else if (flag & Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR) { yCoordinates.push(lastCoordinate); } else { lastCoordinate += glyf.getInt16(pos); pos += 2; yCoordinates.push(lastCoordinate); } pointFlags.push(flag & ON_CURVE_POINT | flag & OVERLAP_SIMPLE); if (endPtsOfContours[endPtsOfContoursIndex] === i) { xCoordinates = allXCoordinates[endPtsOfContoursIndex]; endPtsOfContoursIndex++; contours.push(new Contour({ flags: pointFlags, xCoordinates, yCoordinates })); yCoordinates = []; pointFlags = []; } } return new SimpleGlyph({ contours, instructions }); } getSize() { let size = this.contours.length * 2 + 2 + this.instructions.length; let lastX = 0; let lastY = 0; for (const contour of this.contours) { size += contour.flags.length; for (let i = 0, ii = contour.xCoordinates.length; i < ii; i++) { const x = contour.xCoordinates[i]; const y = contour.yCoordinates[i]; let abs = Math.abs(x - lastX); if (abs > 255) { size += 2; } else if (abs > 0) { size += 1; } lastX = x; abs = Math.abs(y - lastY); if (abs > 255) { size += 2; } else if (abs > 0) { size += 1; } lastY = y; } } return size; } write(pos, buf) { const spos = pos; const xCoordinates = []; const yCoordinates = []; const flags = []; let lastX = 0; let lastY = 0; for (const contour of this.contours) { for (let i = 0, ii = contour.xCoordinates.length; i < ii; i++) { let flag = contour.flags[i]; const x = contour.xCoordinates[i]; let delta = x - lastX; if (delta === 0) { flag |= X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR; xCoordinates.push(0); } else { const abs = Math.abs(delta); if (abs <= 255) { flag |= delta >= 0 ? X_SHORT_VECTOR | X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR : X_SHORT_VECTOR; xCoordinates.push(abs); } else { xCoordinates.push(delta); } } lastX = x; const y = contour.yCoordinates[i]; delta = y - lastY; if (delta === 0) { flag |= Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR; yCoordinates.push(0); } else { const abs = Math.abs(delta); if (abs <= 255) { flag |= delta >= 0 ? Y_SHORT_VECTOR | Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR : Y_SHORT_VECTOR; yCoordinates.push(abs); } else { yCoordinates.push(delta); } } lastY = y; flags.push(flag); } buf.setUint16(pos, xCoordinates.length - 1); pos += 2; } buf.setUint16(pos, this.instructions.length); pos += 2; if (this.instructions.length) { new Uint8Array(buf.buffer, 0, buf.buffer.byteLength).set(this.instructions, pos); pos += this.instructions.length; } for (const flag of flags) { buf.setUint8(pos++, flag); } for (let i = 0, ii = xCoordinates.length; i < ii; i++) { const x = xCoordinates[i]; const flag = flags[i]; if (flag & X_SHORT_VECTOR) { buf.setUint8(pos++, x); } else if (!(flag & X_IS_SAME_OR_POSITIVE_X_SHORT_VECTOR)) { buf.setInt16(pos, x); pos += 2; } } for (let i = 0, ii = yCoordinates.length; i < ii; i++) { const y = yCoordinates[i]; const flag = flags[i]; if (flag & Y_SHORT_VECTOR) { buf.setUint8(pos++, y); } else if (!(flag & Y_IS_SAME_OR_POSITIVE_Y_SHORT_VECTOR)) { buf.setInt16(pos, y); pos += 2; } } return pos - spos; } scale(x, factor) { for (const contour of this.contours) { if (contour.xCoordinates.length === 0) { continue; } for (let i = 0, ii = contour.xCoordinates.length; i < ii; i++) { contour.xCoordinates[i] = Math.round(x + (contour.xCoordinates[i] - x) * factor); } } } } class CompositeGlyph { constructor({ flags, glyphIndex, argument1, argument2, transf, instructions }) { this.flags = flags; this.glyphIndex = glyphIndex; this.argument1 = argument1; this.argument2 = argument2; this.transf = transf; this.instructions = instructions; } static parse(pos, glyf) { const spos = pos; const transf = []; let flags = glyf.getUint16(pos); const glyphIndex = glyf.getUint16(pos + 2); pos += 4; let argument1, argument2; if (flags & ARG_1_AND_2_ARE_WORDS) { if (flags & ARGS_ARE_XY_VALUES) { argument1 = glyf.getInt16(pos); argument2 = glyf.getInt16(pos + 2); } else { argument1 = glyf.getUint16(pos); argument2 = glyf.getUint16(pos + 2); } pos += 4; flags ^= ARG_1_AND_2_ARE_WORDS; } else { argument1 = glyf.getUint8(pos); argument2 = glyf.getUint8(pos + 1); if (flags & ARGS_ARE_XY_VALUES) { const abs1 = argument1 & 0x7f; argument1 = argument1 & 0x80 ? -abs1 : abs1; const abs2 = argument2 & 0x7f; argument2 = argument2 & 0x80 ? -abs2 : abs2; } pos += 2; } if (flags & WE_HAVE_A_SCALE) { transf.push(glyf.getUint16(pos)); pos += 2; } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) { transf.push(glyf.getUint16(pos), glyf.getUint16(pos + 2)); pos += 4; } else if (flags & WE_HAVE_A_TWO_BY_TWO) { transf.push(glyf.getUint16(pos), glyf.getUint16(pos + 2), glyf.getUint16(pos + 4), glyf.getUint16(pos + 6)); pos += 8; } let instructions = null; if (flags & WE_HAVE_INSTRUCTIONS) { const instructionLength = glyf.getUint16(pos); pos += 2; instructions = new Uint8Array(glyf).slice(pos, pos + instructionLength); pos += instructionLength; } return [pos - spos, new CompositeGlyph({ flags, glyphIndex, argument1, argument2, transf, instructions })]; } getSize() { let size = 2 + 2 + this.transf.length * 2; if (this.flags & WE_HAVE_INSTRUCTIONS) { size += 2 + this.instructions.length; } size += 2; if (this.flags & 2) { if (!(this.argument1 >= -128 && this.argument1 <= 127 && this.argument2 >= -128 && this.argument2 <= 127)) { size += 2; } } else { if (!(this.argument1 >= 0 && this.argument1 <= 255 && this.argument2 >= 0 && this.argument2 <= 255)) { size += 2; } } return size; } write(pos, buf) { const spos = pos; if (this.flags & ARGS_ARE_XY_VALUES) { if (!(this.argument1 >= -128 && this.argument1 <= 127 && this.argument2 >= -128 && this.argument2 <= 127)) { this.flags |= ARG_1_AND_2_ARE_WORDS; } } else { if (!(this.argument1 >= 0 && this.argument1 <= 255 && this.argument2 >= 0 && this.argument2 <= 255)) { this.flags |= ARG_1_AND_2_ARE_WORDS; } } buf.setUint16(pos, this.flags); buf.setUint16(pos + 2, this.glyphIndex); pos += 4; if (this.flags & ARG_1_AND_2_ARE_WORDS) { if (this.flags & ARGS_ARE_XY_VALUES) { buf.setInt16(pos, this.argument1); buf.setInt16(pos + 2, this.argument2); } else { buf.setUint16(pos, this.argument1); buf.setUint16(pos + 2, this.argument2); } pos += 4; } else { buf.setUint8(pos, this.argument1); buf.setUint8(pos + 1, this.argument2); pos += 2; } if (this.flags & WE_HAVE_INSTRUCTIONS) { buf.setUint16(pos, this.instructions.length); pos += 2; if (this.instructions.length) { new Uint8Array(buf.buffer, 0, buf.buffer.byteLength).set(this.instructions, pos); pos += this.instructions.length; } } return pos - spos; } scale(x, factor) {} } /***/ }), /* 52 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.OpenTypeFileBuilder = void 0; var _core_utils = __w_pdfjs_require__(9); var _util = __w_pdfjs_require__(2); function writeInt16(dest, offset, num) { dest[offset] = num >> 8 & 0xff; dest[offset + 1] = num & 0xff; } function writeInt32(dest, offset, num) { dest[offset] = num >> 24 & 0xff; dest[offset + 1] = num >> 16 & 0xff; dest[offset + 2] = num >> 8 & 0xff; dest[offset + 3] = num & 0xff; } function writeData(dest, offset, data) { if (data instanceof Uint8Array) { dest.set(data, offset); } else if (typeof data === "string") { for (let i = 0, ii = data.length; i < ii; i++) { dest[offset++] = data.charCodeAt(i) & 0xff; } } else { for (let i = 0, ii = data.length; i < ii; i++) { dest[offset++] = data[i] & 0xff; } } } const OTF_HEADER_SIZE = 12; const OTF_TABLE_ENTRY_SIZE = 16; class OpenTypeFileBuilder { constructor(sfnt) { this.sfnt = sfnt; this.tables = Object.create(null); } static getSearchParams(entriesCount, entrySize) { let maxPower2 = 1, log2 = 0; while ((maxPower2 ^ entriesCount) > maxPower2) { maxPower2 <<= 1; log2++; } const searchRange = maxPower2 * entrySize; return { range: searchRange, entry: log2, rangeShift: entrySize * entriesCount - searchRange }; } toArray() { let sfnt = this.sfnt; const tables = this.tables; const tablesNames = Object.keys(tables); tablesNames.sort(); const numTables = tablesNames.length; let i, j, jj, table, tableName; let offset = OTF_HEADER_SIZE + numTables * OTF_TABLE_ENTRY_SIZE; const tableOffsets = [offset]; for (i = 0; i < numTables; i++) { table = tables[tablesNames[i]]; const paddedLength = (table.length + 3 & ~3) >>> 0; offset += paddedLength; tableOffsets.push(offset); } const file = new Uint8Array(offset); for (i = 0; i < numTables; i++) { table = tables[tablesNames[i]]; writeData(file, tableOffsets[i], table); } if (sfnt === "true") { sfnt = (0, _util.string32)(0x00010000); } file[0] = sfnt.charCodeAt(0) & 0xff; file[1] = sfnt.charCodeAt(1) & 0xff; file[2] = sfnt.charCodeAt(2) & 0xff; file[3] = sfnt.charCodeAt(3) & 0xff; writeInt16(file, 4, numTables); const searchParams = OpenTypeFileBuilder.getSearchParams(numTables, 16); writeInt16(file, 6, searchParams.range); writeInt16(file, 8, searchParams.entry); writeInt16(file, 10, searchParams.rangeShift); offset = OTF_HEADER_SIZE; for (i = 0; i < numTables; i++) { tableName = tablesNames[i]; file[offset] = tableName.charCodeAt(0) & 0xff; file[offset + 1] = tableName.charCodeAt(1) & 0xff; file[offset + 2] = tableName.charCodeAt(2) & 0xff; file[offset + 3] = tableName.charCodeAt(3) & 0xff; let checksum = 0; for (j = tableOffsets[i], jj = tableOffsets[i + 1]; j < jj; j += 4) { const quad = (0, _core_utils.readUint32)(file, j); checksum = checksum + quad >>> 0; } writeInt32(file, offset + 4, checksum); writeInt32(file, offset + 8, tableOffsets[i]); writeInt32(file, offset + 12, tables[tableName].length); offset += OTF_TABLE_ENTRY_SIZE; } return file; } addTable(tag, data) { if (tag in this.tables) { throw new Error("Table " + tag + " already exists"); } this.tables[tag] = data; } } exports.OpenTypeFileBuilder = OpenTypeFileBuilder; /***/ }), /* 53 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.Type1Font = void 0; var _cff_parser = __w_pdfjs_require__(45); var _fonts_utils = __w_pdfjs_require__(18); var _core_utils = __w_pdfjs_require__(9); var _stream = __w_pdfjs_require__(10); var _type1_parser = __w_pdfjs_require__(54); var _util = __w_pdfjs_require__(2); function findBlock(streamBytes, signature, startIndex) { const streamBytesLength = streamBytes.length; const signatureLength = signature.length; const scanLength = streamBytesLength - signatureLength; let i = startIndex, found = false; while (i < scanLength) { let j = 0; while (j < signatureLength && streamBytes[i + j] === signature[j]) { j++; } if (j >= signatureLength) { i += j; while (i < streamBytesLength && (0, _core_utils.isWhiteSpace)(streamBytes[i])) { i++; } found = true; break; } i++; } return { found, length: i }; } function getHeaderBlock(stream, suggestedLength) { const EEXEC_SIGNATURE = [0x65, 0x65, 0x78, 0x65, 0x63]; const streamStartPos = stream.pos; let headerBytes, headerBytesLength, block; try { headerBytes = stream.getBytes(suggestedLength); headerBytesLength = headerBytes.length; } catch (ex) {} if (headerBytesLength === suggestedLength) { block = findBlock(headerBytes, EEXEC_SIGNATURE, suggestedLength - 2 * EEXEC_SIGNATURE.length); if (block.found && block.length === suggestedLength) { return { stream: new _stream.Stream(headerBytes), length: suggestedLength }; } } (0, _util.warn)('Invalid "Length1" property in Type1 font -- trying to recover.'); stream.pos = streamStartPos; const SCAN_BLOCK_LENGTH = 2048; let actualLength; while (true) { const scanBytes = stream.peekBytes(SCAN_BLOCK_LENGTH); block = findBlock(scanBytes, EEXEC_SIGNATURE, 0); if (block.length === 0) { break; } stream.pos += block.length; if (block.found) { actualLength = stream.pos - streamStartPos; break; } } stream.pos = streamStartPos; if (actualLength) { return { stream: new _stream.Stream(stream.getBytes(actualLength)), length: actualLength }; } (0, _util.warn)('Unable to recover "Length1" property in Type1 font -- using as is.'); return { stream: new _stream.Stream(stream.getBytes(suggestedLength)), length: suggestedLength }; } function getEexecBlock(stream, suggestedLength) { const eexecBytes = stream.getBytes(); return { stream: new _stream.Stream(eexecBytes), length: eexecBytes.length }; } class Type1Font { constructor(name, file, properties) { const PFB_HEADER_SIZE = 6; let headerBlockLength = properties.length1; properties.length2; let pfbHeader = file.peekBytes(PFB_HEADER_SIZE); const pfbHeaderPresent = pfbHeader[0] === 0x80 && pfbHeader[1] === 0x01; if (pfbHeaderPresent) { file.skip(PFB_HEADER_SIZE); headerBlockLength = pfbHeader[5] << 24 | pfbHeader[4] << 16 | pfbHeader[3] << 8 | pfbHeader[2]; } const headerBlock = getHeaderBlock(file, headerBlockLength); const headerBlockParser = new _type1_parser.Type1Parser(headerBlock.stream, false, _fonts_utils.SEAC_ANALYSIS_ENABLED); headerBlockParser.extractFontHeader(properties); if (pfbHeaderPresent) { pfbHeader = file.getBytes(PFB_HEADER_SIZE); pfbHeader[5] << 24 | pfbHeader[4] << 16 | pfbHeader[3] << 8 | pfbHeader[2]; } const eexecBlock = getEexecBlock(file); const eexecBlockParser = new _type1_parser.Type1Parser(eexecBlock.stream, true, _fonts_utils.SEAC_ANALYSIS_ENABLED); const data = eexecBlockParser.extractFontProgram(properties); for (const key in data.properties) { properties[key] = data.properties[key]; } const charstrings = data.charstrings; const type2Charstrings = this.getType2Charstrings(charstrings); const subrs = this.getType2Subrs(data.subrs); this.charstrings = charstrings; this.data = this.wrap(name, type2Charstrings, this.charstrings, subrs, properties); this.seacs = this.getSeacs(data.charstrings); } get numGlyphs() { return this.charstrings.length + 1; } getCharset() { const charset = [".notdef"]; const charstrings = this.charstrings; for (let glyphId = 0; glyphId < charstrings.length; glyphId++) { charset.push(charstrings[glyphId].glyphName); } return charset; } getGlyphMapping(properties) { const charstrings = this.charstrings; if (properties.composite) { const charCodeToGlyphId = Object.create(null); for (let glyphId = 0, charstringsLen = charstrings.length; glyphId < charstringsLen; glyphId++) { const charCode = properties.cMap.charCodeOf(glyphId); charCodeToGlyphId[charCode] = glyphId + 1; } return charCodeToGlyphId; } const glyphNames = [".notdef"]; let builtInEncoding, glyphId; for (glyphId = 0; glyphId < charstrings.length; glyphId++) { glyphNames.push(charstrings[glyphId].glyphName); } const encoding = properties.builtInEncoding; if (encoding) { builtInEncoding = Object.create(null); for (const charCode in encoding) { glyphId = glyphNames.indexOf(encoding[charCode]); if (glyphId >= 0) { builtInEncoding[charCode] = glyphId; } } } return (0, _fonts_utils.type1FontGlyphMapping)(properties, builtInEncoding, glyphNames); } hasGlyphId(id) { if (id < 0 || id >= this.numGlyphs) { return false; } if (id === 0) { return true; } const glyph = this.charstrings[id - 1]; return glyph.charstring.length > 0; } getSeacs(charstrings) { const seacMap = []; for (let i = 0, ii = charstrings.length; i < ii; i++) { const charstring = charstrings[i]; if (charstring.seac) { seacMap[i + 1] = charstring.seac; } } return seacMap; } getType2Charstrings(type1Charstrings) { const type2Charstrings = []; for (let i = 0, ii = type1Charstrings.length; i < ii; i++) { type2Charstrings.push(type1Charstrings[i].charstring); } return type2Charstrings; } getType2Subrs(type1Subrs) { let bias = 0; const count = type1Subrs.length; if (count < 1133) { bias = 107; } else if (count < 33769) { bias = 1131; } else { bias = 32768; } const type2Subrs = []; let i; for (i = 0; i < bias; i++) { type2Subrs.push([0x0b]); } for (i = 0; i < count; i++) { type2Subrs.push(type1Subrs[i]); } return type2Subrs; } wrap(name, glyphs, charstrings, subrs, properties) { const cff = new _cff_parser.CFF(); cff.header = new _cff_parser.CFFHeader(1, 0, 4, 4); cff.names = [name]; const topDict = new _cff_parser.CFFTopDict(); topDict.setByName("version", 391); topDict.setByName("Notice", 392); topDict.setByName("FullName", 393); topDict.setByName("FamilyName", 394); topDict.setByName("Weight", 395); topDict.setByName("Encoding", null); topDict.setByName("FontMatrix", properties.fontMatrix); topDict.setByName("FontBBox", properties.bbox); topDict.setByName("charset", null); topDict.setByName("CharStrings", null); topDict.setByName("Private", null); cff.topDict = topDict; const strings = new _cff_parser.CFFStrings(); strings.add("Version 0.11"); strings.add("See original notice"); strings.add(name); strings.add(name); strings.add("Medium"); cff.strings = strings; cff.globalSubrIndex = new _cff_parser.CFFIndex(); const count = glyphs.length; const charsetArray = [".notdef"]; let i, ii; for (i = 0; i < count; i++) { const glyphName = charstrings[i].glyphName; const index = _cff_parser.CFFStandardStrings.indexOf(glyphName); if (index === -1) { strings.add(glyphName); } charsetArray.push(glyphName); } cff.charset = new _cff_parser.CFFCharset(false, 0, charsetArray); const charStringsIndex = new _cff_parser.CFFIndex(); charStringsIndex.add([0x8b, 0x0e]); for (i = 0; i < count; i++) { charStringsIndex.add(glyphs[i]); } cff.charStrings = charStringsIndex; const privateDict = new _cff_parser.CFFPrivateDict(); privateDict.setByName("Subrs", null); const fields = ["BlueValues", "OtherBlues", "FamilyBlues", "FamilyOtherBlues", "StemSnapH", "StemSnapV", "BlueShift", "BlueFuzz", "BlueScale", "LanguageGroup", "ExpansionFactor", "ForceBold", "StdHW", "StdVW"]; for (i = 0, ii = fields.length; i < ii; i++) { const field = fields[i]; if (!(field in properties.privateData)) { continue; } const value = properties.privateData[field]; if (Array.isArray(value)) { for (let j = value.length - 1; j > 0; j--) { value[j] -= value[j - 1]; } } privateDict.setByName(field, value); } cff.topDict.privateDict = privateDict; const subrIndex = new _cff_parser.CFFIndex(); for (i = 0, ii = subrs.length; i < ii; i++) { subrIndex.add(subrs[i]); } privateDict.subrsIndex = subrIndex; const compiler = new _cff_parser.CFFCompiler(cff); return compiler.compile(); } } exports.Type1Font = Type1Font; /***/ }), /* 54 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.Type1Parser = void 0; var _encodings = __w_pdfjs_require__(19); var _core_utils = __w_pdfjs_require__(9); var _stream = __w_pdfjs_require__(10); var _util = __w_pdfjs_require__(2); const HINTING_ENABLED = false; const Type1CharString = function Type1CharStringClosure() { const COMMAND_MAP = { hstem: [1], vstem: [3], vmoveto: [4], rlineto: [5], hlineto: [6], vlineto: [7], rrcurveto: [8], callsubr: [10], flex: [12, 35], drop: [12, 18], endchar: [14], rmoveto: [21], hmoveto: [22], vhcurveto: [30], hvcurveto: [31] }; class Type1CharString { constructor() { this.width = 0; this.lsb = 0; this.flexing = false; this.output = []; this.stack = []; } convert(encoded, subrs, seacAnalysisEnabled) { const count = encoded.length; let error = false; let wx, sbx, subrNumber; for (let i = 0; i < count; i++) { let value = encoded[i]; if (value < 32) { if (value === 12) { value = (value << 8) + encoded[++i]; } switch (value) { case 1: { this.stack = []; break; } case 3: { this.stack = []; break; } case 4: if (this.flexing) { if (this.stack.length < 1) { error = true; break; } const dy = this.stack.pop(); this.stack.push(0, dy); break; } error = this.executeCommand(1, COMMAND_MAP.vmoveto); break; case 5: error = this.executeCommand(2, COMMAND_MAP.rlineto); break; case 6: error = this.executeCommand(1, COMMAND_MAP.hlineto); break; case 7: error = this.executeCommand(1, COMMAND_MAP.vlineto); break; case 8: error = this.executeCommand(6, COMMAND_MAP.rrcurveto); break; case 9: this.stack = []; break; case 10: if (this.stack.length < 1) { error = true; break; } subrNumber = this.stack.pop(); if (!subrs[subrNumber]) { error = true; break; } error = this.convert(subrs[subrNumber], subrs, seacAnalysisEnabled); break; case 11: return error; case 13: if (this.stack.length < 2) { error = true; break; } wx = this.stack.pop(); sbx = this.stack.pop(); this.lsb = sbx; this.width = wx; this.stack.push(wx, sbx); error = this.executeCommand(2, COMMAND_MAP.hmoveto); break; case 14: this.output.push(COMMAND_MAP.endchar[0]); break; case 21: if (this.flexing) { break; } error = this.executeCommand(2, COMMAND_MAP.rmoveto); break; case 22: if (this.flexing) { this.stack.push(0); break; } error = this.executeCommand(1, COMMAND_MAP.hmoveto); break; case 30: error = this.executeCommand(4, COMMAND_MAP.vhcurveto); break; case 31: error = this.executeCommand(4, COMMAND_MAP.hvcurveto); break; case (12 << 8) + 0: this.stack = []; break; case (12 << 8) + 1: { this.stack = []; break; } case (12 << 8) + 2: { this.stack = []; break; } case (12 << 8) + 6: if (seacAnalysisEnabled) { const asb = this.stack[this.stack.length - 5]; this.seac = this.stack.splice(-4, 4); this.seac[0] += this.lsb - asb; error = this.executeCommand(0, COMMAND_MAP.endchar); } else { error = this.executeCommand(4, COMMAND_MAP.endchar); } break; case (12 << 8) + 7: if (this.stack.length < 4) { error = true; break; } this.stack.pop(); wx = this.stack.pop(); const sby = this.stack.pop(); sbx = this.stack.pop(); this.lsb = sbx; this.width = wx; this.stack.push(wx, sbx, sby); error = this.executeCommand(3, COMMAND_MAP.rmoveto); break; case (12 << 8) + 12: if (this.stack.length < 2) { error = true; break; } const num2 = this.stack.pop(); const num1 = this.stack.pop(); this.stack.push(num1 / num2); break; case (12 << 8) + 16: if (this.stack.length < 2) { error = true; break; } subrNumber = this.stack.pop(); const numArgs = this.stack.pop(); if (subrNumber === 0 && numArgs === 3) { const flexArgs = this.stack.splice(this.stack.length - 17, 17); this.stack.push(flexArgs[2] + flexArgs[0], flexArgs[3] + flexArgs[1], flexArgs[4], flexArgs[5], flexArgs[6], flexArgs[7], flexArgs[8], flexArgs[9], flexArgs[10], flexArgs[11], flexArgs[12], flexArgs[13], flexArgs[14]); error = this.executeCommand(13, COMMAND_MAP.flex, true); this.flexing = false; this.stack.push(flexArgs[15], flexArgs[16]); } else if (subrNumber === 1 && numArgs === 0) { this.flexing = true; } break; case (12 << 8) + 17: break; case (12 << 8) + 33: this.stack = []; break; default: (0, _util.warn)('Unknown type 1 charstring command of "' + value + '"'); break; } if (error) { break; } continue; } else if (value <= 246) { value -= 139; } else if (value <= 250) { value = (value - 247) * 256 + encoded[++i] + 108; } else if (value <= 254) { value = -((value - 251) * 256) - encoded[++i] - 108; } else { value = (encoded[++i] & 0xff) << 24 | (encoded[++i] & 0xff) << 16 | (encoded[++i] & 0xff) << 8 | (encoded[++i] & 0xff) << 0; } this.stack.push(value); } return error; } executeCommand(howManyArgs, command, keepStack) { const stackLength = this.stack.length; if (howManyArgs > stackLength) { return true; } const start = stackLength - howManyArgs; for (let i = start; i < stackLength; i++) { let value = this.stack[i]; if (Number.isInteger(value)) { this.output.push(28, value >> 8 & 0xff, value & 0xff); } else { value = 65536 * value | 0; this.output.push(255, value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff); } } this.output.push.apply(this.output, command); if (keepStack) { this.stack.splice(start, howManyArgs); } else { this.stack.length = 0; } return false; } } return Type1CharString; }(); const Type1Parser = function Type1ParserClosure() { const EEXEC_ENCRYPT_KEY = 55665; const CHAR_STRS_ENCRYPT_KEY = 4330; function isHexDigit(code) { return code >= 48 && code <= 57 || code >= 65 && code <= 70 || code >= 97 && code <= 102; } function decrypt(data, key, discardNumber) { if (discardNumber >= data.length) { return new Uint8Array(0); } const c1 = 52845, c2 = 22719; let r = key | 0, i, j; for (i = 0; i < discardNumber; i++) { r = (data[i] + r) * c1 + c2 & (1 << 16) - 1; } const count = data.length - discardNumber; const decrypted = new Uint8Array(count); for (i = discardNumber, j = 0; j < count; i++, j++) { const value = data[i]; decrypted[j] = value ^ r >> 8; r = (value + r) * c1 + c2 & (1 << 16) - 1; } return decrypted; } function decryptAscii(data, key, discardNumber) { const c1 = 52845, c2 = 22719; let r = key | 0; const count = data.length, maybeLength = count >>> 1; const decrypted = new Uint8Array(maybeLength); let i, j; for (i = 0, j = 0; i < count; i++) { const digit1 = data[i]; if (!isHexDigit(digit1)) { continue; } i++; let digit2; while (i < count && !isHexDigit(digit2 = data[i])) { i++; } if (i < count) { const value = parseInt(String.fromCharCode(digit1, digit2), 16); decrypted[j++] = value ^ r >> 8; r = (value + r) * c1 + c2 & (1 << 16) - 1; } } return decrypted.slice(discardNumber, j); } function isSpecial(c) { return c === 0x2f || c === 0x5b || c === 0x5d || c === 0x7b || c === 0x7d || c === 0x28 || c === 0x29; } class Type1Parser { constructor(stream, encrypted, seacAnalysisEnabled) { if (encrypted) { const data = stream.getBytes(); const isBinary = !((isHexDigit(data[0]) || (0, _core_utils.isWhiteSpace)(data[0])) && isHexDigit(data[1]) && isHexDigit(data[2]) && isHexDigit(data[3]) && isHexDigit(data[4]) && isHexDigit(data[5]) && isHexDigit(data[6]) && isHexDigit(data[7])); stream = new _stream.Stream(isBinary ? decrypt(data, EEXEC_ENCRYPT_KEY, 4) : decryptAscii(data, EEXEC_ENCRYPT_KEY, 4)); } this.seacAnalysisEnabled = !!seacAnalysisEnabled; this.stream = stream; this.nextChar(); } readNumberArray() { this.getToken(); const array = []; while (true) { const token = this.getToken(); if (token === null || token === "]" || token === "}") { break; } array.push(parseFloat(token || 0)); } return array; } readNumber() { const token = this.getToken(); return parseFloat(token || 0); } readInt() { const token = this.getToken(); return parseInt(token || 0, 10) | 0; } readBoolean() { const token = this.getToken(); return token === "true" ? 1 : 0; } nextChar() { return this.currentChar = this.stream.getByte(); } getToken() { let comment = false; let ch = this.currentChar; while (true) { if (ch === -1) { return null; } if (comment) { if (ch === 0x0a || ch === 0x0d) { comment = false; } } else if (ch === 0x25) { comment = true; } else if (!(0, _core_utils.isWhiteSpace)(ch)) { break; } ch = this.nextChar(); } if (isSpecial(ch)) { this.nextChar(); return String.fromCharCode(ch); } let token = ""; do { token += String.fromCharCode(ch); ch = this.nextChar(); } while (ch >= 0 && !(0, _core_utils.isWhiteSpace)(ch) && !isSpecial(ch)); return token; } readCharStrings(bytes, lenIV) { if (lenIV === -1) { return bytes; } return decrypt(bytes, CHAR_STRS_ENCRYPT_KEY, lenIV); } extractFontProgram(properties) { const stream = this.stream; const subrs = [], charstrings = []; const privateData = Object.create(null); privateData.lenIV = 4; const program = { subrs: [], charstrings: [], properties: { privateData } }; let token, length, data, lenIV, encoded; while ((token = this.getToken()) !== null) { if (token !== "/") { continue; } token = this.getToken(); switch (token) { case "CharStrings": this.getToken(); this.getToken(); this.getToken(); this.getToken(); while (true) { token = this.getToken(); if (token === null || token === "end") { break; } if (token !== "/") { continue; } const glyph = this.getToken(); length = this.readInt(); this.getToken(); data = length > 0 ? stream.getBytes(length) : new Uint8Array(0); lenIV = program.properties.privateData.lenIV; encoded = this.readCharStrings(data, lenIV); this.nextChar(); token = this.getToken(); if (token === "noaccess") { this.getToken(); } charstrings.push({ glyph, encoded }); } break; case "Subrs": this.readInt(); this.getToken(); while (this.getToken() === "dup") { const index = this.readInt(); length = this.readInt(); this.getToken(); data = length > 0 ? stream.getBytes(length) : new Uint8Array(0); lenIV = program.properties.privateData.lenIV; encoded = this.readCharStrings(data, lenIV); this.nextChar(); token = this.getToken(); if (token === "noaccess") { this.getToken(); } subrs[index] = encoded; } break; case "BlueValues": case "OtherBlues": case "FamilyBlues": case "FamilyOtherBlues": const blueArray = this.readNumberArray(); if (blueArray.length > 0 && blueArray.length % 2 === 0 && HINTING_ENABLED) { program.properties.privateData[token] = blueArray; } break; case "StemSnapH": case "StemSnapV": program.properties.privateData[token] = this.readNumberArray(); break; case "StdHW": case "StdVW": program.properties.privateData[token] = this.readNumberArray()[0]; break; case "BlueShift": case "lenIV": case "BlueFuzz": case "BlueScale": case "LanguageGroup": case "ExpansionFactor": program.properties.privateData[token] = this.readNumber(); break; case "ForceBold": program.properties.privateData[token] = this.readBoolean(); break; } } for (let i = 0; i < charstrings.length; i++) { const glyph = charstrings[i].glyph; encoded = charstrings[i].encoded; const charString = new Type1CharString(); const error = charString.convert(encoded, subrs, this.seacAnalysisEnabled); let output = charString.output; if (error) { output = [14]; } const charStringObject = { glyphName: glyph, charstring: output, width: charString.width, lsb: charString.lsb, seac: charString.seac }; if (glyph === ".notdef") { program.charstrings.unshift(charStringObject); } else { program.charstrings.push(charStringObject); } if (properties.builtInEncoding) { const index = properties.builtInEncoding.indexOf(glyph); if (index > -1 && properties.widths[index] === undefined && index >= properties.firstChar && index <= properties.lastChar) { properties.widths[index] = charString.width; } } } return program; } extractFontHeader(properties) { let token; while ((token = this.getToken()) !== null) { if (token !== "/") { continue; } token = this.getToken(); switch (token) { case "FontMatrix": const matrix = this.readNumberArray(); properties.fontMatrix = matrix; break; case "Encoding": const encodingArg = this.getToken(); let encoding; if (!/^\d+$/.test(encodingArg)) { encoding = (0, _encodings.getEncoding)(encodingArg); } else { encoding = []; const size = parseInt(encodingArg, 10) | 0; this.getToken(); for (let j = 0; j < size; j++) { token = this.getToken(); while (token !== "dup" && token !== "def") { token = this.getToken(); if (token === null) { return; } } if (token === "def") { break; } const index = this.readInt(); this.getToken(); const glyph = this.getToken(); encoding[index] = glyph; this.getToken(); } } properties.builtInEncoding = encoding; break; case "FontBBox": const fontBBox = this.readNumberArray(); properties.ascent = Math.max(fontBBox[3], fontBBox[1]); properties.descent = Math.min(fontBBox[1], fontBBox[3]); properties.ascentScaled = true; break; } } } } return Type1Parser; }(); exports.Type1Parser = Type1Parser; /***/ }), /* 55 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.Pattern = void 0; exports.getTilingPatternIR = getTilingPatternIR; var _util = __w_pdfjs_require__(2); var _colorspace = __w_pdfjs_require__(24); var _primitives = __w_pdfjs_require__(5); var _core_utils = __w_pdfjs_require__(9); const ShadingType = { FUNCTION_BASED: 1, AXIAL: 2, RADIAL: 3, FREE_FORM_MESH: 4, LATTICE_FORM_MESH: 5, COONS_PATCH_MESH: 6, TENSOR_PATCH_MESH: 7 }; class Pattern { constructor() { (0, _util.unreachable)("Cannot initialize Pattern."); } static parseShading(shading, xref, res, handler, pdfFunctionFactory, localColorSpaceCache) { const dict = (0, _primitives.isStream)(shading) ? shading.dict : shading; const type = dict.get("ShadingType"); try { switch (type) { case ShadingType.AXIAL: case ShadingType.RADIAL: return new RadialAxialShading(dict, xref, res, pdfFunctionFactory, localColorSpaceCache); case ShadingType.FREE_FORM_MESH: case ShadingType.LATTICE_FORM_MESH: case ShadingType.COONS_PATCH_MESH: case ShadingType.TENSOR_PATCH_MESH: return new MeshShading(shading, xref, res, pdfFunctionFactory, localColorSpaceCache); default: throw new _util.FormatError("Unsupported ShadingType: " + type); } } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } handler.send("UnsupportedFeature", { featureId: _util.UNSUPPORTED_FEATURES.shadingPattern }); (0, _util.warn)(ex); return new DummyShading(); } } } exports.Pattern = Pattern; class BaseShading { static get SMALL_NUMBER() { return (0, _util.shadow)(this, "SMALL_NUMBER", 1e-6); } constructor() { if (this.constructor === BaseShading) { (0, _util.unreachable)("Cannot initialize BaseShading."); } } getIR() { (0, _util.unreachable)("Abstract method `getIR` called."); } } class RadialAxialShading extends BaseShading { constructor(dict, xref, resources, pdfFunctionFactory, localColorSpaceCache) { super(); this.coordsArr = dict.getArray("Coords"); this.shadingType = dict.get("ShadingType"); const cs = _colorspace.ColorSpace.parse({ cs: dict.getRaw("CS") || dict.getRaw("ColorSpace"), xref, resources, pdfFunctionFactory, localColorSpaceCache }); const bbox = dict.getArray("BBox"); if (Array.isArray(bbox) && bbox.length === 4) { this.bbox = _util.Util.normalizeRect(bbox); } else { this.bbox = null; } let t0 = 0.0, t1 = 1.0; if (dict.has("Domain")) { const domainArr = dict.getArray("Domain"); t0 = domainArr[0]; t1 = domainArr[1]; } let extendStart = false, extendEnd = false; if (dict.has("Extend")) { const extendArr = dict.getArray("Extend"); extendStart = extendArr[0]; extendEnd = extendArr[1]; } if (this.shadingType === ShadingType.RADIAL && (!extendStart || !extendEnd)) { const [x1, y1, r1, x2, y2, r2] = this.coordsArr; const distance = Math.hypot(x1 - x2, y1 - y2); if (r1 <= r2 + distance && r2 <= r1 + distance) { (0, _util.warn)("Unsupported radial gradient."); } } this.extendStart = extendStart; this.extendEnd = extendEnd; const fnObj = dict.getRaw("Function"); const fn = pdfFunctionFactory.createFromArray(fnObj); const NUMBER_OF_SAMPLES = 10; const step = (t1 - t0) / NUMBER_OF_SAMPLES; const colorStops = this.colorStops = []; if (t0 >= t1 || step <= 0) { (0, _util.info)("Bad shading domain."); return; } const color = new Float32Array(cs.numComps), ratio = new Float32Array(1); let rgbColor; for (let i = 0; i <= NUMBER_OF_SAMPLES; i++) { ratio[0] = t0 + i * step; fn(ratio, 0, color, 0); rgbColor = cs.getRgb(color, 0); const cssColor = _util.Util.makeHexColor(rgbColor[0], rgbColor[1], rgbColor[2]); colorStops.push([i / NUMBER_OF_SAMPLES, cssColor]); } let background = "transparent"; if (dict.has("Background")) { rgbColor = cs.getRgb(dict.get("Background"), 0); background = _util.Util.makeHexColor(rgbColor[0], rgbColor[1], rgbColor[2]); } if (!extendStart) { colorStops.unshift([0, background]); colorStops[1][0] += BaseShading.SMALL_NUMBER; } if (!extendEnd) { colorStops[colorStops.length - 1][0] -= BaseShading.SMALL_NUMBER; colorStops.push([1, background]); } this.colorStops = colorStops; } getIR() { const coordsArr = this.coordsArr; const shadingType = this.shadingType; let type, p0, p1, r0, r1; if (shadingType === ShadingType.AXIAL) { p0 = [coordsArr[0], coordsArr[1]]; p1 = [coordsArr[2], coordsArr[3]]; r0 = null; r1 = null; type = "axial"; } else if (shadingType === ShadingType.RADIAL) { p0 = [coordsArr[0], coordsArr[1]]; p1 = [coordsArr[3], coordsArr[4]]; r0 = coordsArr[2]; r1 = coordsArr[5]; type = "radial"; } else { (0, _util.unreachable)(`getPattern type unknown: ${shadingType}`); } return ["RadialAxial", type, this.bbox, this.colorStops, p0, p1, r0, r1]; } } class MeshStreamReader { constructor(stream, context) { this.stream = stream; this.context = context; this.buffer = 0; this.bufferLength = 0; const numComps = context.numComps; this.tmpCompsBuf = new Float32Array(numComps); const csNumComps = context.colorSpace.numComps; this.tmpCsCompsBuf = context.colorFn ? new Float32Array(csNumComps) : this.tmpCompsBuf; } get hasData() { if (this.stream.end) { return this.stream.pos < this.stream.end; } if (this.bufferLength > 0) { return true; } const nextByte = this.stream.getByte(); if (nextByte < 0) { return false; } this.buffer = nextByte; this.bufferLength = 8; return true; } readBits(n) { let buffer = this.buffer; let bufferLength = this.bufferLength; if (n === 32) { if (bufferLength === 0) { return (this.stream.getByte() << 24 | this.stream.getByte() << 16 | this.stream.getByte() << 8 | this.stream.getByte()) >>> 0; } buffer = buffer << 24 | this.stream.getByte() << 16 | this.stream.getByte() << 8 | this.stream.getByte(); const nextByte = this.stream.getByte(); this.buffer = nextByte & (1 << bufferLength) - 1; return (buffer << 8 - bufferLength | (nextByte & 0xff) >> bufferLength) >>> 0; } if (n === 8 && bufferLength === 0) { return this.stream.getByte(); } while (bufferLength < n) { buffer = buffer << 8 | this.stream.getByte(); bufferLength += 8; } bufferLength -= n; this.bufferLength = bufferLength; this.buffer = buffer & (1 << bufferLength) - 1; return buffer >> bufferLength; } align() { this.buffer = 0; this.bufferLength = 0; } readFlag() { return this.readBits(this.context.bitsPerFlag); } readCoordinate() { const bitsPerCoordinate = this.context.bitsPerCoordinate; const xi = this.readBits(bitsPerCoordinate); const yi = this.readBits(bitsPerCoordinate); const decode = this.context.decode; const scale = bitsPerCoordinate < 32 ? 1 / ((1 << bitsPerCoordinate) - 1) : 2.3283064365386963e-10; return [xi * scale * (decode[1] - decode[0]) + decode[0], yi * scale * (decode[3] - decode[2]) + decode[2]]; } readComponents() { const numComps = this.context.numComps; const bitsPerComponent = this.context.bitsPerComponent; const scale = bitsPerComponent < 32 ? 1 / ((1 << bitsPerComponent) - 1) : 2.3283064365386963e-10; const decode = this.context.decode; const components = this.tmpCompsBuf; for (let i = 0, j = 4; i < numComps; i++, j += 2) { const ci = this.readBits(bitsPerComponent); components[i] = ci * scale * (decode[j + 1] - decode[j]) + decode[j]; } const color = this.tmpCsCompsBuf; if (this.context.colorFn) { this.context.colorFn(components, 0, color, 0); } return this.context.colorSpace.getRgb(color, 0); } } const getB = function getBClosure() { function buildB(count) { const lut = []; for (let i = 0; i <= count; i++) { const t = i / count, t_ = 1 - t; lut.push(new Float32Array([t_ * t_ * t_, 3 * t * t_ * t_, 3 * t * t * t_, t * t * t])); } return lut; } const cache = []; return function (count) { if (!cache[count]) { cache[count] = buildB(count); } return cache[count]; }; }(); class MeshShading extends BaseShading { static get MIN_SPLIT_PATCH_CHUNKS_AMOUNT() { return (0, _util.shadow)(this, "MIN_SPLIT_PATCH_CHUNKS_AMOUNT", 3); } static get MAX_SPLIT_PATCH_CHUNKS_AMOUNT() { return (0, _util.shadow)(this, "MAX_SPLIT_PATCH_CHUNKS_AMOUNT", 20); } static get TRIANGLE_DENSITY() { return (0, _util.shadow)(this, "TRIANGLE_DENSITY", 20); } constructor(stream, xref, resources, pdfFunctionFactory, localColorSpaceCache) { super(); if (!(0, _primitives.isStream)(stream)) { throw new _util.FormatError("Mesh data is not a stream"); } const dict = stream.dict; this.shadingType = dict.get("ShadingType"); const bbox = dict.getArray("BBox"); if (Array.isArray(bbox) && bbox.length === 4) { this.bbox = _util.Util.normalizeRect(bbox); } else { this.bbox = null; } const cs = _colorspace.ColorSpace.parse({ cs: dict.getRaw("CS") || dict.getRaw("ColorSpace"), xref, resources, pdfFunctionFactory, localColorSpaceCache }); this.background = dict.has("Background") ? cs.getRgb(dict.get("Background"), 0) : null; const fnObj = dict.getRaw("Function"); const fn = fnObj ? pdfFunctionFactory.createFromArray(fnObj) : null; this.coords = []; this.colors = []; this.figures = []; const decodeContext = { bitsPerCoordinate: dict.get("BitsPerCoordinate"), bitsPerComponent: dict.get("BitsPerComponent"), bitsPerFlag: dict.get("BitsPerFlag"), decode: dict.getArray("Decode"), colorFn: fn, colorSpace: cs, numComps: fn ? 1 : cs.numComps }; const reader = new MeshStreamReader(stream, decodeContext); let patchMesh = false; switch (this.shadingType) { case ShadingType.FREE_FORM_MESH: this._decodeType4Shading(reader); break; case ShadingType.LATTICE_FORM_MESH: const verticesPerRow = dict.get("VerticesPerRow") | 0; if (verticesPerRow < 2) { throw new _util.FormatError("Invalid VerticesPerRow"); } this._decodeType5Shading(reader, verticesPerRow); break; case ShadingType.COONS_PATCH_MESH: this._decodeType6Shading(reader); patchMesh = true; break; case ShadingType.TENSOR_PATCH_MESH: this._decodeType7Shading(reader); patchMesh = true; break; default: (0, _util.unreachable)("Unsupported mesh type."); break; } if (patchMesh) { this._updateBounds(); for (let i = 0, ii = this.figures.length; i < ii; i++) { this._buildFigureFromPatch(i); } } this._updateBounds(); this._packData(); } _decodeType4Shading(reader) { const coords = this.coords; const colors = this.colors; const ps = []; let verticesLeft = 0; while (reader.hasData) { const f = reader.readFlag(); const coord = reader.readCoordinate(); const color = reader.readComponents(); if (verticesLeft === 0) { if (!(0 <= f && f <= 2)) { throw new _util.FormatError("Unknown type4 flag"); } switch (f) { case 0: verticesLeft = 3; break; case 1: ps.push(ps[ps.length - 2], ps[ps.length - 1]); verticesLeft = 1; break; case 2: ps.push(ps[ps.length - 3], ps[ps.length - 1]); verticesLeft = 1; break; } } ps.push(coords.length); coords.push(coord); colors.push(color); verticesLeft--; reader.align(); } this.figures.push({ type: "triangles", coords: new Int32Array(ps), colors: new Int32Array(ps) }); } _decodeType5Shading(reader, verticesPerRow) { const coords = this.coords; const colors = this.colors; const ps = []; while (reader.hasData) { const coord = reader.readCoordinate(); const color = reader.readComponents(); ps.push(coords.length); coords.push(coord); colors.push(color); } this.figures.push({ type: "lattice", coords: new Int32Array(ps), colors: new Int32Array(ps), verticesPerRow }); } _decodeType6Shading(reader) { const coords = this.coords; const colors = this.colors; const ps = new Int32Array(16); const cs = new Int32Array(4); while (reader.hasData) { const f = reader.readFlag(); if (!(0 <= f && f <= 3)) { throw new _util.FormatError("Unknown type6 flag"); } const pi = coords.length; for (let i = 0, ii = f !== 0 ? 8 : 12; i < ii; i++) { coords.push(reader.readCoordinate()); } const ci = colors.length; for (let i = 0, ii = f !== 0 ? 2 : 4; i < ii; i++) { colors.push(reader.readComponents()); } let tmp1, tmp2, tmp3, tmp4; switch (f) { case 0: ps[12] = pi + 3; ps[13] = pi + 4; ps[14] = pi + 5; ps[15] = pi + 6; ps[8] = pi + 2; ps[11] = pi + 7; ps[4] = pi + 1; ps[7] = pi + 8; ps[0] = pi; ps[1] = pi + 11; ps[2] = pi + 10; ps[3] = pi + 9; cs[2] = ci + 1; cs[3] = ci + 2; cs[0] = ci; cs[1] = ci + 3; break; case 1: tmp1 = ps[12]; tmp2 = ps[13]; tmp3 = ps[14]; tmp4 = ps[15]; ps[12] = tmp4; ps[13] = pi + 0; ps[14] = pi + 1; ps[15] = pi + 2; ps[8] = tmp3; ps[11] = pi + 3; ps[4] = tmp2; ps[7] = pi + 4; ps[0] = tmp1; ps[1] = pi + 7; ps[2] = pi + 6; ps[3] = pi + 5; tmp1 = cs[2]; tmp2 = cs[3]; cs[2] = tmp2; cs[3] = ci; cs[0] = tmp1; cs[1] = ci + 1; break; case 2: tmp1 = ps[15]; tmp2 = ps[11]; ps[12] = ps[3]; ps[13] = pi + 0; ps[14] = pi + 1; ps[15] = pi + 2; ps[8] = ps[7]; ps[11] = pi + 3; ps[4] = tmp2; ps[7] = pi + 4; ps[0] = tmp1; ps[1] = pi + 7; ps[2] = pi + 6; ps[3] = pi + 5; tmp1 = cs[3]; cs[2] = cs[1]; cs[3] = ci; cs[0] = tmp1; cs[1] = ci + 1; break; case 3: ps[12] = ps[0]; ps[13] = pi + 0; ps[14] = pi + 1; ps[15] = pi + 2; ps[8] = ps[1]; ps[11] = pi + 3; ps[4] = ps[2]; ps[7] = pi + 4; ps[0] = ps[3]; ps[1] = pi + 7; ps[2] = pi + 6; ps[3] = pi + 5; cs[2] = cs[0]; cs[3] = ci; cs[0] = cs[1]; cs[1] = ci + 1; break; } ps[5] = coords.length; coords.push([(-4 * coords[ps[0]][0] - coords[ps[15]][0] + 6 * (coords[ps[4]][0] + coords[ps[1]][0]) - 2 * (coords[ps[12]][0] + coords[ps[3]][0]) + 3 * (coords[ps[13]][0] + coords[ps[7]][0])) / 9, (-4 * coords[ps[0]][1] - coords[ps[15]][1] + 6 * (coords[ps[4]][1] + coords[ps[1]][1]) - 2 * (coords[ps[12]][1] + coords[ps[3]][1]) + 3 * (coords[ps[13]][1] + coords[ps[7]][1])) / 9]); ps[6] = coords.length; coords.push([(-4 * coords[ps[3]][0] - coords[ps[12]][0] + 6 * (coords[ps[2]][0] + coords[ps[7]][0]) - 2 * (coords[ps[0]][0] + coords[ps[15]][0]) + 3 * (coords[ps[4]][0] + coords[ps[14]][0])) / 9, (-4 * coords[ps[3]][1] - coords[ps[12]][1] + 6 * (coords[ps[2]][1] + coords[ps[7]][1]) - 2 * (coords[ps[0]][1] + coords[ps[15]][1]) + 3 * (coords[ps[4]][1] + coords[ps[14]][1])) / 9]); ps[9] = coords.length; coords.push([(-4 * coords[ps[12]][0] - coords[ps[3]][0] + 6 * (coords[ps[8]][0] + coords[ps[13]][0]) - 2 * (coords[ps[0]][0] + coords[ps[15]][0]) + 3 * (coords[ps[11]][0] + coords[ps[1]][0])) / 9, (-4 * coords[ps[12]][1] - coords[ps[3]][1] + 6 * (coords[ps[8]][1] + coords[ps[13]][1]) - 2 * (coords[ps[0]][1] + coords[ps[15]][1]) + 3 * (coords[ps[11]][1] + coords[ps[1]][1])) / 9]); ps[10] = coords.length; coords.push([(-4 * coords[ps[15]][0] - coords[ps[0]][0] + 6 * (coords[ps[11]][0] + coords[ps[14]][0]) - 2 * (coords[ps[12]][0] + coords[ps[3]][0]) + 3 * (coords[ps[2]][0] + coords[ps[8]][0])) / 9, (-4 * coords[ps[15]][1] - coords[ps[0]][1] + 6 * (coords[ps[11]][1] + coords[ps[14]][1]) - 2 * (coords[ps[12]][1] + coords[ps[3]][1]) + 3 * (coords[ps[2]][1] + coords[ps[8]][1])) / 9]); this.figures.push({ type: "patch", coords: new Int32Array(ps), colors: new Int32Array(cs) }); } } _decodeType7Shading(reader) { const coords = this.coords; const colors = this.colors; const ps = new Int32Array(16); const cs = new Int32Array(4); while (reader.hasData) { const f = reader.readFlag(); if (!(0 <= f && f <= 3)) { throw new _util.FormatError("Unknown type7 flag"); } const pi = coords.length; for (let i = 0, ii = f !== 0 ? 12 : 16; i < ii; i++) { coords.push(reader.readCoordinate()); } const ci = colors.length; for (let i = 0, ii = f !== 0 ? 2 : 4; i < ii; i++) { colors.push(reader.readComponents()); } let tmp1, tmp2, tmp3, tmp4; switch (f) { case 0: ps[12] = pi + 3; ps[13] = pi + 4; ps[14] = pi + 5; ps[15] = pi + 6; ps[8] = pi + 2; ps[9] = pi + 13; ps[10] = pi + 14; ps[11] = pi + 7; ps[4] = pi + 1; ps[5] = pi + 12; ps[6] = pi + 15; ps[7] = pi + 8; ps[0] = pi; ps[1] = pi + 11; ps[2] = pi + 10; ps[3] = pi + 9; cs[2] = ci + 1; cs[3] = ci + 2; cs[0] = ci; cs[1] = ci + 3; break; case 1: tmp1 = ps[12]; tmp2 = ps[13]; tmp3 = ps[14]; tmp4 = ps[15]; ps[12] = tmp4; ps[13] = pi + 0; ps[14] = pi + 1; ps[15] = pi + 2; ps[8] = tmp3; ps[9] = pi + 9; ps[10] = pi + 10; ps[11] = pi + 3; ps[4] = tmp2; ps[5] = pi + 8; ps[6] = pi + 11; ps[7] = pi + 4; ps[0] = tmp1; ps[1] = pi + 7; ps[2] = pi + 6; ps[3] = pi + 5; tmp1 = cs[2]; tmp2 = cs[3]; cs[2] = tmp2; cs[3] = ci; cs[0] = tmp1; cs[1] = ci + 1; break; case 2: tmp1 = ps[15]; tmp2 = ps[11]; ps[12] = ps[3]; ps[13] = pi + 0; ps[14] = pi + 1; ps[15] = pi + 2; ps[8] = ps[7]; ps[9] = pi + 9; ps[10] = pi + 10; ps[11] = pi + 3; ps[4] = tmp2; ps[5] = pi + 8; ps[6] = pi + 11; ps[7] = pi + 4; ps[0] = tmp1; ps[1] = pi + 7; ps[2] = pi + 6; ps[3] = pi + 5; tmp1 = cs[3]; cs[2] = cs[1]; cs[3] = ci; cs[0] = tmp1; cs[1] = ci + 1; break; case 3: ps[12] = ps[0]; ps[13] = pi + 0; ps[14] = pi + 1; ps[15] = pi + 2; ps[8] = ps[1]; ps[9] = pi + 9; ps[10] = pi + 10; ps[11] = pi + 3; ps[4] = ps[2]; ps[5] = pi + 8; ps[6] = pi + 11; ps[7] = pi + 4; ps[0] = ps[3]; ps[1] = pi + 7; ps[2] = pi + 6; ps[3] = pi + 5; cs[2] = cs[0]; cs[3] = ci; cs[0] = cs[1]; cs[1] = ci + 1; break; } this.figures.push({ type: "patch", coords: new Int32Array(ps), colors: new Int32Array(cs) }); } } _buildFigureFromPatch(index) { const figure = this.figures[index]; (0, _util.assert)(figure.type === "patch", "Unexpected patch mesh figure"); const coords = this.coords, colors = this.colors; const pi = figure.coords; const ci = figure.colors; const figureMinX = Math.min(coords[pi[0]][0], coords[pi[3]][0], coords[pi[12]][0], coords[pi[15]][0]); const figureMinY = Math.min(coords[pi[0]][1], coords[pi[3]][1], coords[pi[12]][1], coords[pi[15]][1]); const figureMaxX = Math.max(coords[pi[0]][0], coords[pi[3]][0], coords[pi[12]][0], coords[pi[15]][0]); const figureMaxY = Math.max(coords[pi[0]][1], coords[pi[3]][1], coords[pi[12]][1], coords[pi[15]][1]); let splitXBy = Math.ceil((figureMaxX - figureMinX) * MeshShading.TRIANGLE_DENSITY / (this.bounds[2] - this.bounds[0])); splitXBy = Math.max(MeshShading.MIN_SPLIT_PATCH_CHUNKS_AMOUNT, Math.min(MeshShading.MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitXBy)); let splitYBy = Math.ceil((figureMaxY - figureMinY) * MeshShading.TRIANGLE_DENSITY / (this.bounds[3] - this.bounds[1])); splitYBy = Math.max(MeshShading.MIN_SPLIT_PATCH_CHUNKS_AMOUNT, Math.min(MeshShading.MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitYBy)); const verticesPerRow = splitXBy + 1; const figureCoords = new Int32Array((splitYBy + 1) * verticesPerRow); const figureColors = new Int32Array((splitYBy + 1) * verticesPerRow); let k = 0; const cl = new Uint8Array(3), cr = new Uint8Array(3); const c0 = colors[ci[0]], c1 = colors[ci[1]], c2 = colors[ci[2]], c3 = colors[ci[3]]; const bRow = getB(splitYBy), bCol = getB(splitXBy); for (let row = 0; row <= splitYBy; row++) { cl[0] = (c0[0] * (splitYBy - row) + c2[0] * row) / splitYBy | 0; cl[1] = (c0[1] * (splitYBy - row) + c2[1] * row) / splitYBy | 0; cl[2] = (c0[2] * (splitYBy - row) + c2[2] * row) / splitYBy | 0; cr[0] = (c1[0] * (splitYBy - row) + c3[0] * row) / splitYBy | 0; cr[1] = (c1[1] * (splitYBy - row) + c3[1] * row) / splitYBy | 0; cr[2] = (c1[2] * (splitYBy - row) + c3[2] * row) / splitYBy | 0; for (let col = 0; col <= splitXBy; col++, k++) { if ((row === 0 || row === splitYBy) && (col === 0 || col === splitXBy)) { continue; } let x = 0, y = 0; let q = 0; for (let i = 0; i <= 3; i++) { for (let j = 0; j <= 3; j++, q++) { const m = bRow[row][i] * bCol[col][j]; x += coords[pi[q]][0] * m; y += coords[pi[q]][1] * m; } } figureCoords[k] = coords.length; coords.push([x, y]); figureColors[k] = colors.length; const newColor = new Uint8Array(3); newColor[0] = (cl[0] * (splitXBy - col) + cr[0] * col) / splitXBy | 0; newColor[1] = (cl[1] * (splitXBy - col) + cr[1] * col) / splitXBy | 0; newColor[2] = (cl[2] * (splitXBy - col) + cr[2] * col) / splitXBy | 0; colors.push(newColor); } } figureCoords[0] = pi[0]; figureColors[0] = ci[0]; figureCoords[splitXBy] = pi[3]; figureColors[splitXBy] = ci[1]; figureCoords[verticesPerRow * splitYBy] = pi[12]; figureColors[verticesPerRow * splitYBy] = ci[2]; figureCoords[verticesPerRow * splitYBy + splitXBy] = pi[15]; figureColors[verticesPerRow * splitYBy + splitXBy] = ci[3]; this.figures[index] = { type: "lattice", coords: figureCoords, colors: figureColors, verticesPerRow }; } _updateBounds() { let minX = this.coords[0][0], minY = this.coords[0][1], maxX = minX, maxY = minY; for (let i = 1, ii = this.coords.length; i < ii; i++) { const x = this.coords[i][0], y = this.coords[i][1]; minX = minX > x ? x : minX; minY = minY > y ? y : minY; maxX = maxX < x ? x : maxX; maxY = maxY < y ? y : maxY; } this.bounds = [minX, minY, maxX, maxY]; } _packData() { let i, ii, j, jj; const coords = this.coords; const coordsPacked = new Float32Array(coords.length * 2); for (i = 0, j = 0, ii = coords.length; i < ii; i++) { const xy = coords[i]; coordsPacked[j++] = xy[0]; coordsPacked[j++] = xy[1]; } this.coords = coordsPacked; const colors = this.colors; const colorsPacked = new Uint8Array(colors.length * 3); for (i = 0, j = 0, ii = colors.length; i < ii; i++) { const c = colors[i]; colorsPacked[j++] = c[0]; colorsPacked[j++] = c[1]; colorsPacked[j++] = c[2]; } this.colors = colorsPacked; const figures = this.figures; for (i = 0, ii = figures.length; i < ii; i++) { const figure = figures[i], ps = figure.coords, cs = figure.colors; for (j = 0, jj = ps.length; j < jj; j++) { ps[j] *= 2; cs[j] *= 3; } } } getIR() { return ["Mesh", this.shadingType, this.coords, this.colors, this.figures, this.bounds, this.bbox, this.background]; } } class DummyShading extends BaseShading { getIR() { return ["Dummy"]; } } function getTilingPatternIR(operatorList, dict, color) { const matrix = dict.getArray("Matrix"); const bbox = _util.Util.normalizeRect(dict.getArray("BBox")); const xstep = dict.get("XStep"); const ystep = dict.get("YStep"); const paintType = dict.get("PaintType"); const tilingType = dict.get("TilingType"); if (bbox[2] - bbox[0] === 0 || bbox[3] - bbox[1] === 0) { throw new _util.FormatError(`Invalid getTilingPatternIR /BBox array: [${bbox}].`); } return ["TilingPattern", color, operatorList, matrix, bbox, xstep, ystep, paintType, tilingType]; } /***/ }), /* 56 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PostScriptEvaluator = exports.PostScriptCompiler = exports.PDFFunctionFactory = void 0; exports.isPDFFunction = isPDFFunction; var _primitives = __w_pdfjs_require__(5); var _util = __w_pdfjs_require__(2); var _ps_parser = __w_pdfjs_require__(57); var _image_utils = __w_pdfjs_require__(58); class PDFFunctionFactory { constructor({ xref, isEvalSupported = true }) { this.xref = xref; this.isEvalSupported = isEvalSupported !== false; } create(fn) { const cachedFunction = this.getCached(fn); if (cachedFunction) { return cachedFunction; } const parsedFunction = PDFFunction.parse({ xref: this.xref, isEvalSupported: this.isEvalSupported, fn: fn instanceof _primitives.Ref ? this.xref.fetch(fn) : fn }); this._cache(fn, parsedFunction); return parsedFunction; } createFromArray(fnObj) { const cachedFunction = this.getCached(fnObj); if (cachedFunction) { return cachedFunction; } const parsedFunction = PDFFunction.parseArray({ xref: this.xref, isEvalSupported: this.isEvalSupported, fnObj: fnObj instanceof _primitives.Ref ? this.xref.fetch(fnObj) : fnObj }); this._cache(fnObj, parsedFunction); return parsedFunction; } getCached(cacheKey) { let fnRef; if (cacheKey instanceof _primitives.Ref) { fnRef = cacheKey; } else if (cacheKey instanceof _primitives.Dict) { fnRef = cacheKey.objId; } else if ((0, _primitives.isStream)(cacheKey)) { fnRef = cacheKey.dict && cacheKey.dict.objId; } if (fnRef) { const localFunction = this._localFunctionCache.getByRef(fnRef); if (localFunction) { return localFunction; } } return null; } _cache(cacheKey, parsedFunction) { if (!parsedFunction) { throw new Error('PDFFunctionFactory._cache - expected "parsedFunction" argument.'); } let fnRef; if (cacheKey instanceof _primitives.Ref) { fnRef = cacheKey; } else if (cacheKey instanceof _primitives.Dict) { fnRef = cacheKey.objId; } else if ((0, _primitives.isStream)(cacheKey)) { fnRef = cacheKey.dict && cacheKey.dict.objId; } if (fnRef) { this._localFunctionCache.set(null, fnRef, parsedFunction); } } get _localFunctionCache() { return (0, _util.shadow)(this, "_localFunctionCache", new _image_utils.LocalFunctionCache()); } } exports.PDFFunctionFactory = PDFFunctionFactory; function toNumberArray(arr) { if (!Array.isArray(arr)) { return null; } const length = arr.length; for (let i = 0; i < length; i++) { if (typeof arr[i] !== "number") { const result = new Array(length); for (let j = 0; j < length; j++) { result[j] = +arr[j]; } return result; } } return arr; } class PDFFunction { static getSampleArray(size, outputSize, bps, stream) { let i, ii; let length = 1; for (i = 0, ii = size.length; i < ii; i++) { length *= size[i]; } length *= outputSize; const array = new Array(length); let codeSize = 0; let codeBuf = 0; const sampleMul = 1.0 / (2.0 ** bps - 1); const strBytes = stream.getBytes((length * bps + 7) / 8); let strIdx = 0; for (i = 0; i < length; i++) { while (codeSize < bps) { codeBuf <<= 8; codeBuf |= strBytes[strIdx++]; codeSize += 8; } codeSize -= bps; array[i] = (codeBuf >> codeSize) * sampleMul; codeBuf &= (1 << codeSize) - 1; } return array; } static parse({ xref, isEvalSupported, fn }) { const dict = fn.dict || fn; const typeNum = dict.get("FunctionType"); switch (typeNum) { case 0: return this.constructSampled({ xref, isEvalSupported, fn, dict }); case 1: break; case 2: return this.constructInterpolated({ xref, isEvalSupported, dict }); case 3: return this.constructStiched({ xref, isEvalSupported, dict }); case 4: return this.constructPostScript({ xref, isEvalSupported, fn, dict }); } throw new _util.FormatError("Unknown type of function"); } static parseArray({ xref, isEvalSupported, fnObj }) { if (!Array.isArray(fnObj)) { return this.parse({ xref, isEvalSupported, fn: fnObj }); } const fnArray = []; for (let j = 0, jj = fnObj.length; j < jj; j++) { fnArray.push(this.parse({ xref, isEvalSupported, fn: xref.fetchIfRef(fnObj[j]) })); } return function (src, srcOffset, dest, destOffset) { for (let i = 0, ii = fnArray.length; i < ii; i++) { fnArray[i](src, srcOffset, dest, destOffset + i); } }; } static constructSampled({ xref, isEvalSupported, fn, dict }) { function toMultiArray(arr) { const inputLength = arr.length; const out = []; let index = 0; for (let i = 0; i < inputLength; i += 2) { out[index++] = [arr[i], arr[i + 1]]; } return out; } function interpolate(x, xmin, xmax, ymin, ymax) { return ymin + (x - xmin) * ((ymax - ymin) / (xmax - xmin)); } let domain = toNumberArray(dict.getArray("Domain")); let range = toNumberArray(dict.getArray("Range")); if (!domain || !range) { throw new _util.FormatError("No domain or range"); } const inputSize = domain.length / 2; const outputSize = range.length / 2; domain = toMultiArray(domain); range = toMultiArray(range); const size = toNumberArray(dict.getArray("Size")); const bps = dict.get("BitsPerSample"); const order = dict.get("Order") || 1; if (order !== 1) { (0, _util.info)("No support for cubic spline interpolation: " + order); } let encode = toNumberArray(dict.getArray("Encode")); if (!encode) { encode = []; for (let i = 0; i < inputSize; ++i) { encode.push([0, size[i] - 1]); } } else { encode = toMultiArray(encode); } let decode = toNumberArray(dict.getArray("Decode")); if (!decode) { decode = range; } else { decode = toMultiArray(decode); } const samples = this.getSampleArray(size, outputSize, bps, fn); return function constructSampledFn(src, srcOffset, dest, destOffset) { const cubeVertices = 1 << inputSize; const cubeN = new Float64Array(cubeVertices); const cubeVertex = new Uint32Array(cubeVertices); let i, j; for (j = 0; j < cubeVertices; j++) { cubeN[j] = 1; } let k = outputSize, pos = 1; for (i = 0; i < inputSize; ++i) { const domain_2i = domain[i][0]; const domain_2i_1 = domain[i][1]; const xi = Math.min(Math.max(src[srcOffset + i], domain_2i), domain_2i_1); let e = interpolate(xi, domain_2i, domain_2i_1, encode[i][0], encode[i][1]); const size_i = size[i]; e = Math.min(Math.max(e, 0), size_i - 1); const e0 = e < size_i - 1 ? Math.floor(e) : e - 1; const n0 = e0 + 1 - e; const n1 = e - e0; const offset0 = e0 * k; const offset1 = offset0 + k; for (j = 0; j < cubeVertices; j++) { if (j & pos) { cubeN[j] *= n1; cubeVertex[j] += offset1; } else { cubeN[j] *= n0; cubeVertex[j] += offset0; } } k *= size_i; pos <<= 1; } for (j = 0; j < outputSize; ++j) { let rj = 0; for (i = 0; i < cubeVertices; i++) { rj += samples[cubeVertex[i] + j] * cubeN[i]; } rj = interpolate(rj, 0, 1, decode[j][0], decode[j][1]); dest[destOffset + j] = Math.min(Math.max(rj, range[j][0]), range[j][1]); } }; } static constructInterpolated({ xref, isEvalSupported, dict }) { const c0 = toNumberArray(dict.getArray("C0")) || [0]; const c1 = toNumberArray(dict.getArray("C1")) || [1]; const n = dict.get("N"); const diff = []; for (let i = 0, ii = c0.length; i < ii; ++i) { diff.push(c1[i] - c0[i]); } const length = diff.length; return function constructInterpolatedFn(src, srcOffset, dest, destOffset) { const x = n === 1 ? src[srcOffset] : src[srcOffset] ** n; for (let j = 0; j < length; ++j) { dest[destOffset + j] = c0[j] + x * diff[j]; } }; } static constructStiched({ xref, isEvalSupported, dict }) { const domain = toNumberArray(dict.getArray("Domain")); if (!domain) { throw new _util.FormatError("No domain"); } const inputSize = domain.length / 2; if (inputSize !== 1) { throw new _util.FormatError("Bad domain for stiched function"); } const fnRefs = dict.get("Functions"); const fns = []; for (let i = 0, ii = fnRefs.length; i < ii; ++i) { fns.push(this.parse({ xref, isEvalSupported, fn: xref.fetchIfRef(fnRefs[i]) })); } const bounds = toNumberArray(dict.getArray("Bounds")); const encode = toNumberArray(dict.getArray("Encode")); const tmpBuf = new Float32Array(1); return function constructStichedFn(src, srcOffset, dest, destOffset) { const clip = function constructStichedFromIRClip(v, min, max) { if (v > max) { v = max; } else if (v < min) { v = min; } return v; }; const v = clip(src[srcOffset], domain[0], domain[1]); const length = bounds.length; let i; for (i = 0; i < length; ++i) { if (v < bounds[i]) { break; } } let dmin = domain[0]; if (i > 0) { dmin = bounds[i - 1]; } let dmax = domain[1]; if (i < bounds.length) { dmax = bounds[i]; } const rmin = encode[2 * i]; const rmax = encode[2 * i + 1]; tmpBuf[0] = dmin === dmax ? rmin : rmin + (v - dmin) * (rmax - rmin) / (dmax - dmin); fns[i](tmpBuf, 0, dest, destOffset); }; } static constructPostScript({ xref, isEvalSupported, fn, dict }) { const domain = toNumberArray(dict.getArray("Domain")); const range = toNumberArray(dict.getArray("Range")); if (!domain) { throw new _util.FormatError("No domain."); } if (!range) { throw new _util.FormatError("No range."); } const lexer = new _ps_parser.PostScriptLexer(fn); const parser = new _ps_parser.PostScriptParser(lexer); const code = parser.parse(); if (isEvalSupported && _util.IsEvalSupportedCached.value) { const compiled = new PostScriptCompiler().compile(code, domain, range); if (compiled) { return new Function("src", "srcOffset", "dest", "destOffset", compiled); } } (0, _util.info)("Unable to compile PS function"); const numOutputs = range.length >> 1; const numInputs = domain.length >> 1; const evaluator = new PostScriptEvaluator(code); const cache = Object.create(null); const MAX_CACHE_SIZE = 2048 * 4; let cache_available = MAX_CACHE_SIZE; const tmpBuf = new Float32Array(numInputs); return function constructPostScriptFn(src, srcOffset, dest, destOffset) { let i, value; let key = ""; const input = tmpBuf; for (i = 0; i < numInputs; i++) { value = src[srcOffset + i]; input[i] = value; key += value + "_"; } const cachedValue = cache[key]; if (cachedValue !== undefined) { dest.set(cachedValue, destOffset); return; } const output = new Float32Array(numOutputs); const stack = evaluator.execute(input); const stackIndex = stack.length - numOutputs; for (i = 0; i < numOutputs; i++) { value = stack[stackIndex + i]; let bound = range[i * 2]; if (value < bound) { value = bound; } else { bound = range[i * 2 + 1]; if (value > bound) { value = bound; } } output[i] = value; } if (cache_available > 0) { cache_available--; cache[key] = output; } dest.set(output, destOffset); }; } } function isPDFFunction(v) { let fnDict; if (typeof v !== "object") { return false; } else if ((0, _primitives.isDict)(v)) { fnDict = v; } else if ((0, _primitives.isStream)(v)) { fnDict = v.dict; } else { return false; } return fnDict.has("FunctionType"); } class PostScriptStack { static get MAX_STACK_SIZE() { return (0, _util.shadow)(this, "MAX_STACK_SIZE", 100); } constructor(initialStack) { this.stack = !initialStack ? [] : Array.prototype.slice.call(initialStack, 0); } push(value) { if (this.stack.length >= PostScriptStack.MAX_STACK_SIZE) { throw new Error("PostScript function stack overflow."); } this.stack.push(value); } pop() { if (this.stack.length <= 0) { throw new Error("PostScript function stack underflow."); } return this.stack.pop(); } copy(n) { if (this.stack.length + n >= PostScriptStack.MAX_STACK_SIZE) { throw new Error("PostScript function stack overflow."); } const stack = this.stack; for (let i = stack.length - n, j = n - 1; j >= 0; j--, i++) { stack.push(stack[i]); } } index(n) { this.push(this.stack[this.stack.length - n - 1]); } roll(n, p) { const stack = this.stack; const l = stack.length - n; const r = stack.length - 1; const c = l + (p - Math.floor(p / n) * n); for (let i = l, j = r; i < j; i++, j--) { const t = stack[i]; stack[i] = stack[j]; stack[j] = t; } for (let i = l, j = c - 1; i < j; i++, j--) { const t = stack[i]; stack[i] = stack[j]; stack[j] = t; } for (let i = c, j = r; i < j; i++, j--) { const t = stack[i]; stack[i] = stack[j]; stack[j] = t; } } } class PostScriptEvaluator { constructor(operators) { this.operators = operators; } execute(initialStack) { const stack = new PostScriptStack(initialStack); let counter = 0; const operators = this.operators; const length = operators.length; let operator, a, b; while (counter < length) { operator = operators[counter++]; if (typeof operator === "number") { stack.push(operator); continue; } switch (operator) { case "jz": b = stack.pop(); a = stack.pop(); if (!a) { counter = b; } break; case "j": a = stack.pop(); counter = a; break; case "abs": a = stack.pop(); stack.push(Math.abs(a)); break; case "add": b = stack.pop(); a = stack.pop(); stack.push(a + b); break; case "and": b = stack.pop(); a = stack.pop(); if ((0, _util.isBool)(a) && (0, _util.isBool)(b)) { stack.push(a && b); } else { stack.push(a & b); } break; case "atan": a = stack.pop(); stack.push(Math.atan(a)); break; case "bitshift": b = stack.pop(); a = stack.pop(); if (a > 0) { stack.push(a << b); } else { stack.push(a >> b); } break; case "ceiling": a = stack.pop(); stack.push(Math.ceil(a)); break; case "copy": a = stack.pop(); stack.copy(a); break; case "cos": a = stack.pop(); stack.push(Math.cos(a)); break; case "cvi": a = stack.pop() | 0; stack.push(a); break; case "cvr": break; case "div": b = stack.pop(); a = stack.pop(); stack.push(a / b); break; case "dup": stack.copy(1); break; case "eq": b = stack.pop(); a = stack.pop(); stack.push(a === b); break; case "exch": stack.roll(2, 1); break; case "exp": b = stack.pop(); a = stack.pop(); stack.push(a ** b); break; case "false": stack.push(false); break; case "floor": a = stack.pop(); stack.push(Math.floor(a)); break; case "ge": b = stack.pop(); a = stack.pop(); stack.push(a >= b); break; case "gt": b = stack.pop(); a = stack.pop(); stack.push(a > b); break; case "idiv": b = stack.pop(); a = stack.pop(); stack.push(a / b | 0); break; case "index": a = stack.pop(); stack.index(a); break; case "le": b = stack.pop(); a = stack.pop(); stack.push(a <= b); break; case "ln": a = stack.pop(); stack.push(Math.log(a)); break; case "log": a = stack.pop(); stack.push(Math.log(a) / Math.LN10); break; case "lt": b = stack.pop(); a = stack.pop(); stack.push(a < b); break; case "mod": b = stack.pop(); a = stack.pop(); stack.push(a % b); break; case "mul": b = stack.pop(); a = stack.pop(); stack.push(a * b); break; case "ne": b = stack.pop(); a = stack.pop(); stack.push(a !== b); break; case "neg": a = stack.pop(); stack.push(-a); break; case "not": a = stack.pop(); if ((0, _util.isBool)(a)) { stack.push(!a); } else { stack.push(~a); } break; case "or": b = stack.pop(); a = stack.pop(); if ((0, _util.isBool)(a) && (0, _util.isBool)(b)) { stack.push(a || b); } else { stack.push(a | b); } break; case "pop": stack.pop(); break; case "roll": b = stack.pop(); a = stack.pop(); stack.roll(a, b); break; case "round": a = stack.pop(); stack.push(Math.round(a)); break; case "sin": a = stack.pop(); stack.push(Math.sin(a)); break; case "sqrt": a = stack.pop(); stack.push(Math.sqrt(a)); break; case "sub": b = stack.pop(); a = stack.pop(); stack.push(a - b); break; case "true": stack.push(true); break; case "truncate": a = stack.pop(); a = a < 0 ? Math.ceil(a) : Math.floor(a); stack.push(a); break; case "xor": b = stack.pop(); a = stack.pop(); if ((0, _util.isBool)(a) && (0, _util.isBool)(b)) { stack.push(a !== b); } else { stack.push(a ^ b); } break; default: throw new _util.FormatError(`Unknown operator ${operator}`); } } return stack.stack; } } exports.PostScriptEvaluator = PostScriptEvaluator; const PostScriptCompiler = function PostScriptCompilerClosure() { class AstNode { constructor(type) { this.type = type; } visit(visitor) { (0, _util.unreachable)("abstract method"); } } class AstArgument extends AstNode { constructor(index, min, max) { super("args"); this.index = index; this.min = min; this.max = max; } visit(visitor) { visitor.visitArgument(this); } } class AstLiteral extends AstNode { constructor(number) { super("literal"); this.number = number; this.min = number; this.max = number; } visit(visitor) { visitor.visitLiteral(this); } } class AstBinaryOperation extends AstNode { constructor(op, arg1, arg2, min, max) { super("binary"); this.op = op; this.arg1 = arg1; this.arg2 = arg2; this.min = min; this.max = max; } visit(visitor) { visitor.visitBinaryOperation(this); } } class AstMin extends AstNode { constructor(arg, max) { super("max"); this.arg = arg; this.min = arg.min; this.max = max; } visit(visitor) { visitor.visitMin(this); } } class AstVariable extends AstNode { constructor(index, min, max) { super("var"); this.index = index; this.min = min; this.max = max; } visit(visitor) { visitor.visitVariable(this); } } class AstVariableDefinition extends AstNode { constructor(variable, arg) { super("definition"); this.variable = variable; this.arg = arg; } visit(visitor) { visitor.visitVariableDefinition(this); } } class ExpressionBuilderVisitor { constructor() { this.parts = []; } visitArgument(arg) { this.parts.push("Math.max(", arg.min, ", Math.min(", arg.max, ", src[srcOffset + ", arg.index, "]))"); } visitVariable(variable) { this.parts.push("v", variable.index); } visitLiteral(literal) { this.parts.push(literal.number); } visitBinaryOperation(operation) { this.parts.push("("); operation.arg1.visit(this); this.parts.push(" ", operation.op, " "); operation.arg2.visit(this); this.parts.push(")"); } visitVariableDefinition(definition) { this.parts.push("var "); definition.variable.visit(this); this.parts.push(" = "); definition.arg.visit(this); this.parts.push(";"); } visitMin(max) { this.parts.push("Math.min("); max.arg.visit(this); this.parts.push(", ", max.max, ")"); } toString() { return this.parts.join(""); } } function buildAddOperation(num1, num2) { if (num2.type === "literal" && num2.number === 0) { return num1; } if (num1.type === "literal" && num1.number === 0) { return num2; } if (num2.type === "literal" && num1.type === "literal") { return new AstLiteral(num1.number + num2.number); } return new AstBinaryOperation("+", num1, num2, num1.min + num2.min, num1.max + num2.max); } function buildMulOperation(num1, num2) { if (num2.type === "literal") { if (num2.number === 0) { return new AstLiteral(0); } else if (num2.number === 1) { return num1; } else if (num1.type === "literal") { return new AstLiteral(num1.number * num2.number); } } if (num1.type === "literal") { if (num1.number === 0) { return new AstLiteral(0); } else if (num1.number === 1) { return num2; } } const min = Math.min(num1.min * num2.min, num1.min * num2.max, num1.max * num2.min, num1.max * num2.max); const max = Math.max(num1.min * num2.min, num1.min * num2.max, num1.max * num2.min, num1.max * num2.max); return new AstBinaryOperation("*", num1, num2, min, max); } function buildSubOperation(num1, num2) { if (num2.type === "literal") { if (num2.number === 0) { return num1; } else if (num1.type === "literal") { return new AstLiteral(num1.number - num2.number); } } if (num2.type === "binary" && num2.op === "-" && num1.type === "literal" && num1.number === 1 && num2.arg1.type === "literal" && num2.arg1.number === 1) { return num2.arg2; } return new AstBinaryOperation("-", num1, num2, num1.min - num2.max, num1.max - num2.min); } function buildMinOperation(num1, max) { if (num1.min >= max) { return new AstLiteral(max); } else if (num1.max <= max) { return num1; } return new AstMin(num1, max); } class PostScriptCompiler { compile(code, domain, range) { const stack = []; const instructions = []; const inputSize = domain.length >> 1, outputSize = range.length >> 1; let lastRegister = 0; let n, j; let num1, num2, ast1, ast2, tmpVar, item; for (let i = 0; i < inputSize; i++) { stack.push(new AstArgument(i, domain[i * 2], domain[i * 2 + 1])); } for (let i = 0, ii = code.length; i < ii; i++) { item = code[i]; if (typeof item === "number") { stack.push(new AstLiteral(item)); continue; } switch (item) { case "add": if (stack.length < 2) { return null; } num2 = stack.pop(); num1 = stack.pop(); stack.push(buildAddOperation(num1, num2)); break; case "cvr": if (stack.length < 1) { return null; } break; case "mul": if (stack.length < 2) { return null; } num2 = stack.pop(); num1 = stack.pop(); stack.push(buildMulOperation(num1, num2)); break; case "sub": if (stack.length < 2) { return null; } num2 = stack.pop(); num1 = stack.pop(); stack.push(buildSubOperation(num1, num2)); break; case "exch": if (stack.length < 2) { return null; } ast1 = stack.pop(); ast2 = stack.pop(); stack.push(ast1, ast2); break; case "pop": if (stack.length < 1) { return null; } stack.pop(); break; case "index": if (stack.length < 1) { return null; } num1 = stack.pop(); if (num1.type !== "literal") { return null; } n = num1.number; if (n < 0 || !Number.isInteger(n) || stack.length < n) { return null; } ast1 = stack[stack.length - n - 1]; if (ast1.type === "literal" || ast1.type === "var") { stack.push(ast1); break; } tmpVar = new AstVariable(lastRegister++, ast1.min, ast1.max); stack[stack.length - n - 1] = tmpVar; stack.push(tmpVar); instructions.push(new AstVariableDefinition(tmpVar, ast1)); break; case "dup": if (stack.length < 1) { return null; } if (typeof code[i + 1] === "number" && code[i + 2] === "gt" && code[i + 3] === i + 7 && code[i + 4] === "jz" && code[i + 5] === "pop" && code[i + 6] === code[i + 1]) { num1 = stack.pop(); stack.push(buildMinOperation(num1, code[i + 1])); i += 6; break; } ast1 = stack[stack.length - 1]; if (ast1.type === "literal" || ast1.type === "var") { stack.push(ast1); break; } tmpVar = new AstVariable(lastRegister++, ast1.min, ast1.max); stack[stack.length - 1] = tmpVar; stack.push(tmpVar); instructions.push(new AstVariableDefinition(tmpVar, ast1)); break; case "roll": if (stack.length < 2) { return null; } num2 = stack.pop(); num1 = stack.pop(); if (num2.type !== "literal" || num1.type !== "literal") { return null; } j = num2.number; n = num1.number; if (n <= 0 || !Number.isInteger(n) || !Number.isInteger(j) || stack.length < n) { return null; } j = (j % n + n) % n; if (j === 0) { break; } Array.prototype.push.apply(stack, stack.splice(stack.length - n, n - j)); break; default: return null; } } if (stack.length !== outputSize) { return null; } const result = []; for (const instruction of instructions) { const statementBuilder = new ExpressionBuilderVisitor(); instruction.visit(statementBuilder); result.push(statementBuilder.toString()); } for (let i = 0, ii = stack.length; i < ii; i++) { const expr = stack[i], statementBuilder = new ExpressionBuilderVisitor(); expr.visit(statementBuilder); const min = range[i * 2], max = range[i * 2 + 1]; const out = [statementBuilder.toString()]; if (min > expr.min) { out.unshift("Math.max(", min, ", "); out.push(")"); } if (max < expr.max) { out.unshift("Math.min(", max, ", "); out.push(")"); } out.unshift("dest[destOffset + ", i, "] = "); out.push(";"); result.push(out.join("")); } return result.join("\n"); } } return PostScriptCompiler; }(); exports.PostScriptCompiler = PostScriptCompiler; /***/ }), /* 57 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PostScriptParser = exports.PostScriptLexer = void 0; var _util = __w_pdfjs_require__(2); var _primitives = __w_pdfjs_require__(5); var _core_utils = __w_pdfjs_require__(9); class PostScriptParser { constructor(lexer) { this.lexer = lexer; this.operators = []; this.token = null; this.prev = null; } nextToken() { this.prev = this.token; this.token = this.lexer.getToken(); } accept(type) { if (this.token.type === type) { this.nextToken(); return true; } return false; } expect(type) { if (this.accept(type)) { return true; } throw new _util.FormatError(`Unexpected symbol: found ${this.token.type} expected ${type}.`); } parse() { this.nextToken(); this.expect(PostScriptTokenTypes.LBRACE); this.parseBlock(); this.expect(PostScriptTokenTypes.RBRACE); return this.operators; } parseBlock() { while (true) { if (this.accept(PostScriptTokenTypes.NUMBER)) { this.operators.push(this.prev.value); } else if (this.accept(PostScriptTokenTypes.OPERATOR)) { this.operators.push(this.prev.value); } else if (this.accept(PostScriptTokenTypes.LBRACE)) { this.parseCondition(); } else { return; } } } parseCondition() { const conditionLocation = this.operators.length; this.operators.push(null, null); this.parseBlock(); this.expect(PostScriptTokenTypes.RBRACE); if (this.accept(PostScriptTokenTypes.IF)) { this.operators[conditionLocation] = this.operators.length; this.operators[conditionLocation + 1] = "jz"; } else if (this.accept(PostScriptTokenTypes.LBRACE)) { const jumpLocation = this.operators.length; this.operators.push(null, null); const endOfTrue = this.operators.length; this.parseBlock(); this.expect(PostScriptTokenTypes.RBRACE); this.expect(PostScriptTokenTypes.IFELSE); this.operators[jumpLocation] = this.operators.length; this.operators[jumpLocation + 1] = "j"; this.operators[conditionLocation] = endOfTrue; this.operators[conditionLocation + 1] = "jz"; } else { throw new _util.FormatError("PS Function: error parsing conditional."); } } } exports.PostScriptParser = PostScriptParser; const PostScriptTokenTypes = { LBRACE: 0, RBRACE: 1, NUMBER: 2, OPERATOR: 3, IF: 4, IFELSE: 5 }; class PostScriptToken { static get opCache() { return (0, _util.shadow)(this, "opCache", Object.create(null)); } constructor(type, value) { this.type = type; this.value = value; } static getOperator(op) { const opValue = PostScriptToken.opCache[op]; if (opValue) { return opValue; } return PostScriptToken.opCache[op] = new PostScriptToken(PostScriptTokenTypes.OPERATOR, op); } static get LBRACE() { return (0, _util.shadow)(this, "LBRACE", new PostScriptToken(PostScriptTokenTypes.LBRACE, "{")); } static get RBRACE() { return (0, _util.shadow)(this, "RBRACE", new PostScriptToken(PostScriptTokenTypes.RBRACE, "}")); } static get IF() { return (0, _util.shadow)(this, "IF", new PostScriptToken(PostScriptTokenTypes.IF, "IF")); } static get IFELSE() { return (0, _util.shadow)(this, "IFELSE", new PostScriptToken(PostScriptTokenTypes.IFELSE, "IFELSE")); } } class PostScriptLexer { constructor(stream) { this.stream = stream; this.nextChar(); this.strBuf = []; } nextChar() { return this.currentChar = this.stream.getByte(); } getToken() { let comment = false; let ch = this.currentChar; while (true) { if (ch < 0) { return _primitives.EOF; } if (comment) { if (ch === 0x0a || ch === 0x0d) { comment = false; } } else if (ch === 0x25) { comment = true; } else if (!(0, _core_utils.isWhiteSpace)(ch)) { break; } ch = this.nextChar(); } switch (ch | 0) { case 0x30: case 0x31: case 0x32: case 0x33: case 0x34: case 0x35: case 0x36: case 0x37: case 0x38: case 0x39: case 0x2b: case 0x2d: case 0x2e: return new PostScriptToken(PostScriptTokenTypes.NUMBER, this.getNumber()); case 0x7b: this.nextChar(); return PostScriptToken.LBRACE; case 0x7d: this.nextChar(); return PostScriptToken.RBRACE; } const strBuf = this.strBuf; strBuf.length = 0; strBuf[0] = String.fromCharCode(ch); while ((ch = this.nextChar()) >= 0 && (ch >= 0x41 && ch <= 0x5a || ch >= 0x61 && ch <= 0x7a)) { strBuf.push(String.fromCharCode(ch)); } const str = strBuf.join(""); switch (str.toLowerCase()) { case "if": return PostScriptToken.IF; case "ifelse": return PostScriptToken.IFELSE; default: return PostScriptToken.getOperator(str); } } getNumber() { let ch = this.currentChar; const strBuf = this.strBuf; strBuf.length = 0; strBuf[0] = String.fromCharCode(ch); while ((ch = this.nextChar()) >= 0) { if (ch >= 0x30 && ch <= 0x39 || ch === 0x2d || ch === 0x2e) { strBuf.push(String.fromCharCode(ch)); } else { break; } } const value = parseFloat(strBuf.join("")); if (isNaN(value)) { throw new _util.FormatError(`Invalid floating point number: ${value}`); } return value; } } exports.PostScriptLexer = PostScriptLexer; /***/ }), /* 58 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.LocalTilingPatternCache = exports.LocalImageCache = exports.LocalGStateCache = exports.LocalFunctionCache = exports.LocalColorSpaceCache = exports.GlobalImageCache = void 0; var _util = __w_pdfjs_require__(2); var _primitives = __w_pdfjs_require__(5); class BaseLocalCache { constructor(options) { if (this.constructor === BaseLocalCache) { (0, _util.unreachable)("Cannot initialize BaseLocalCache."); } this._onlyRefs = (options && options.onlyRefs) === true; if (!this._onlyRefs) { this._nameRefMap = new Map(); this._imageMap = new Map(); } this._imageCache = new _primitives.RefSetCache(); } getByName(name) { if (this._onlyRefs) { (0, _util.unreachable)("Should not call `getByName` method."); } const ref = this._nameRefMap.get(name); if (ref) { return this.getByRef(ref); } return this._imageMap.get(name) || null; } getByRef(ref) { return this._imageCache.get(ref) || null; } set(name, ref, data) { (0, _util.unreachable)("Abstract method `set` called."); } } class LocalImageCache extends BaseLocalCache { set(name, ref = null, data) { if (typeof name !== "string") { throw new Error('LocalImageCache.set - expected "name" argument.'); } if (ref) { if (this._imageCache.has(ref)) { return; } this._nameRefMap.set(name, ref); this._imageCache.put(ref, data); return; } if (this._imageMap.has(name)) { return; } this._imageMap.set(name, data); } } exports.LocalImageCache = LocalImageCache; class LocalColorSpaceCache extends BaseLocalCache { set(name = null, ref = null, data) { if (typeof name !== "string" && !ref) { throw new Error('LocalColorSpaceCache.set - expected "name" and/or "ref" argument.'); } if (ref) { if (this._imageCache.has(ref)) { return; } if (name !== null) { this._nameRefMap.set(name, ref); } this._imageCache.put(ref, data); return; } if (this._imageMap.has(name)) { return; } this._imageMap.set(name, data); } } exports.LocalColorSpaceCache = LocalColorSpaceCache; class LocalFunctionCache extends BaseLocalCache { constructor(options) { super({ onlyRefs: true }); } set(name = null, ref, data) { if (!ref) { throw new Error('LocalFunctionCache.set - expected "ref" argument.'); } if (this._imageCache.has(ref)) { return; } this._imageCache.put(ref, data); } } exports.LocalFunctionCache = LocalFunctionCache; class LocalGStateCache extends BaseLocalCache { set(name, ref = null, data) { if (typeof name !== "string") { throw new Error('LocalGStateCache.set - expected "name" argument.'); } if (ref) { if (this._imageCache.has(ref)) { return; } this._nameRefMap.set(name, ref); this._imageCache.put(ref, data); return; } if (this._imageMap.has(name)) { return; } this._imageMap.set(name, data); } } exports.LocalGStateCache = LocalGStateCache; class LocalTilingPatternCache extends BaseLocalCache { constructor(options) { super({ onlyRefs: true }); } set(name = null, ref, data) { if (!ref) { throw new Error('LocalTilingPatternCache.set - expected "ref" argument.'); } if (this._imageCache.has(ref)) { return; } this._imageCache.put(ref, data); } } exports.LocalTilingPatternCache = LocalTilingPatternCache; class GlobalImageCache { static get NUM_PAGES_THRESHOLD() { return (0, _util.shadow)(this, "NUM_PAGES_THRESHOLD", 2); } static get MIN_IMAGES_TO_CACHE() { return (0, _util.shadow)(this, "MIN_IMAGES_TO_CACHE", 10); } static get MAX_BYTE_SIZE() { return (0, _util.shadow)(this, "MAX_BYTE_SIZE", 40e6); } constructor() { this._refCache = new _primitives.RefSetCache(); this._imageCache = new _primitives.RefSetCache(); } get _byteSize() { let byteSize = 0; this._imageCache.forEach(imageData => { byteSize += imageData.byteSize; }); return byteSize; } get _cacheLimitReached() { if (this._imageCache.size < GlobalImageCache.MIN_IMAGES_TO_CACHE) { return false; } if (this._byteSize < GlobalImageCache.MAX_BYTE_SIZE) { return false; } return true; } shouldCache(ref, pageIndex) { const pageIndexSet = this._refCache.get(ref); const numPages = pageIndexSet ? pageIndexSet.size + (pageIndexSet.has(pageIndex) ? 0 : 1) : 1; if (numPages < GlobalImageCache.NUM_PAGES_THRESHOLD) { return false; } if (!this._imageCache.has(ref) && this._cacheLimitReached) { return false; } return true; } addPageIndex(ref, pageIndex) { let pageIndexSet = this._refCache.get(ref); if (!pageIndexSet) { pageIndexSet = new Set(); this._refCache.put(ref, pageIndexSet); } pageIndexSet.add(pageIndex); } addByteSize(ref, byteSize) { const imageData = this._imageCache.get(ref); if (!imageData) { return; } if (imageData.byteSize) { return; } imageData.byteSize = byteSize; } getData(ref, pageIndex) { const pageIndexSet = this._refCache.get(ref); if (!pageIndexSet) { return null; } if (pageIndexSet.size < GlobalImageCache.NUM_PAGES_THRESHOLD) { return null; } const imageData = this._imageCache.get(ref); if (!imageData) { return null; } pageIndexSet.add(pageIndex); return imageData; } setData(ref, data) { if (!this._refCache.has(ref)) { throw new Error('GlobalImageCache.setData - expected "addPageIndex" to have been called.'); } if (this._imageCache.has(ref)) { return; } if (this._cacheLimitReached) { (0, _util.warn)("GlobalImageCache.setData - cache limit reached."); return; } this._imageCache.put(ref, data); } clear(onlyData = false) { if (!onlyData) { this._refCache.clear(); } this._imageCache.clear(); } } exports.GlobalImageCache = GlobalImageCache; /***/ }), /* 59 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.bidi = bidi; var _util = __w_pdfjs_require__(2); const baseTypes = ["BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "S", "B", "S", "WS", "B", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "B", "B", "B", "S", "WS", "ON", "ON", "ET", "ET", "ET", "ON", "ON", "ON", "ON", "ON", "ES", "CS", "ES", "CS", "CS", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "CS", "ON", "ON", "ON", "ON", "ON", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "ON", "ON", "ON", "ON", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "ON", "ON", "ON", "BN", "BN", "BN", "BN", "BN", "BN", "B", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "BN", "CS", "ON", "ET", "ET", "ET", "ET", "ON", "ON", "ON", "ON", "L", "ON", "ON", "BN", "ON", "ON", "ET", "ET", "EN", "EN", "ON", "L", "ON", "ON", "ON", "EN", "L", "ON", "ON", "ON", "ON", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "L", "ON", "L", "L", "L", "L", "L", "L", "L", "L"]; const arabicTypes = ["AN", "AN", "AN", "AN", "AN", "AN", "ON", "ON", "AL", "ET", "ET", "AL", "CS", "AL", "ON", "ON", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AL", "AL", "", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "AN", "ET", "AN", "AN", "AL", "AL", "AL", "NSM", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "AL", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AN", "ON", "NSM", "NSM", "NSM", "NSM", "NSM", "NSM", "AL", "AL", "NSM", "NSM", "ON", "NSM", "NSM", "NSM", "NSM", "AL", "AL", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "EN", "AL", "AL", "AL", "AL", "AL", "AL"]; function isOdd(i) { return (i & 1) !== 0; } function isEven(i) { return (i & 1) === 0; } function findUnequal(arr, start, value) { let j, jj; for (j = start, jj = arr.length; j < jj; ++j) { if (arr[j] !== value) { return j; } } return j; } function setValues(arr, start, end, value) { for (let j = start; j < end; ++j) { arr[j] = value; } } function reverseValues(arr, start, end) { for (let i = start, j = end - 1; i < j; ++i, --j) { const temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } function createBidiText(str, isLTR, vertical = false) { let dir = "ltr"; if (vertical) { dir = "ttb"; } else if (!isLTR) { dir = "rtl"; } return { str, dir }; } const chars = []; const types = []; function bidi(str, startLevel = -1, vertical = false) { let isLTR = true; const strLength = str.length; if (strLength === 0 || vertical) { return createBidiText(str, isLTR, vertical); } chars.length = strLength; types.length = strLength; let numBidi = 0; let i, ii; for (i = 0; i < strLength; ++i) { chars[i] = str.charAt(i); const charCode = str.charCodeAt(i); let charType = "L"; if (charCode <= 0x00ff) { charType = baseTypes[charCode]; } else if (0x0590 <= charCode && charCode <= 0x05f4) { charType = "R"; } else if (0x0600 <= charCode && charCode <= 0x06ff) { charType = arabicTypes[charCode & 0xff]; if (!charType) { (0, _util.warn)("Bidi: invalid Unicode character " + charCode.toString(16)); } } else if (0x0700 <= charCode && charCode <= 0x08ac) { charType = "AL"; } if (charType === "R" || charType === "AL" || charType === "AN") { numBidi++; } types[i] = charType; } if (numBidi === 0) { isLTR = true; return createBidiText(str, isLTR); } if (startLevel === -1) { if (numBidi / strLength < 0.3 && strLength > 4) { isLTR = true; startLevel = 0; } else { isLTR = false; startLevel = 1; } } const levels = []; for (i = 0; i < strLength; ++i) { levels[i] = startLevel; } const e = isOdd(startLevel) ? "R" : "L"; const sor = e; const eor = sor; let lastType = sor; for (i = 0; i < strLength; ++i) { if (types[i] === "NSM") { types[i] = lastType; } else { lastType = types[i]; } } lastType = sor; let t; for (i = 0; i < strLength; ++i) { t = types[i]; if (t === "EN") { types[i] = lastType === "AL" ? "AN" : "EN"; } else if (t === "R" || t === "L" || t === "AL") { lastType = t; } } for (i = 0; i < strLength; ++i) { t = types[i]; if (t === "AL") { types[i] = "R"; } } for (i = 1; i < strLength - 1; ++i) { if (types[i] === "ES" && types[i - 1] === "EN" && types[i + 1] === "EN") { types[i] = "EN"; } if (types[i] === "CS" && (types[i - 1] === "EN" || types[i - 1] === "AN") && types[i + 1] === types[i - 1]) { types[i] = types[i - 1]; } } for (i = 0; i < strLength; ++i) { if (types[i] === "EN") { for (let j = i - 1; j >= 0; --j) { if (types[j] !== "ET") { break; } types[j] = "EN"; } for (let j = i + 1; j < strLength; ++j) { if (types[j] !== "ET") { break; } types[j] = "EN"; } } } for (i = 0; i < strLength; ++i) { t = types[i]; if (t === "WS" || t === "ES" || t === "ET" || t === "CS") { types[i] = "ON"; } } lastType = sor; for (i = 0; i < strLength; ++i) { t = types[i]; if (t === "EN") { types[i] = lastType === "L" ? "L" : "EN"; } else if (t === "R" || t === "L") { lastType = t; } } for (i = 0; i < strLength; ++i) { if (types[i] === "ON") { const end = findUnequal(types, i + 1, "ON"); let before = sor; if (i > 0) { before = types[i - 1]; } let after = eor; if (end + 1 < strLength) { after = types[end + 1]; } if (before !== "L") { before = "R"; } if (after !== "L") { after = "R"; } if (before === after) { setValues(types, i, end, before); } i = end - 1; } } for (i = 0; i < strLength; ++i) { if (types[i] === "ON") { types[i] = e; } } for (i = 0; i < strLength; ++i) { t = types[i]; if (isEven(levels[i])) { if (t === "R") { levels[i] += 1; } else if (t === "AN" || t === "EN") { levels[i] += 2; } } else { if (t === "L" || t === "AN" || t === "EN") { levels[i] += 1; } } } let highestLevel = -1; let lowestOddLevel = 99; let level; for (i = 0, ii = levels.length; i < ii; ++i) { level = levels[i]; if (highestLevel < level) { highestLevel = level; } if (lowestOddLevel > level && isOdd(level)) { lowestOddLevel = level; } } for (level = highestLevel; level >= lowestOddLevel; --level) { let start = -1; for (i = 0, ii = levels.length; i < ii; ++i) { if (levels[i] < level) { if (start >= 0) { reverseValues(chars, start, i); start = -1; } } else if (start < 0) { start = i; } } if (start >= 0) { reverseValues(chars, start, levels.length); } } for (i = 0, ii = chars.length; i < ii; ++i) { const ch = chars[i]; if (ch === "<" || ch === ">") { chars[i] = ""; } } return createBidiText(chars.join(""), isLTR); } /***/ }), /* 60 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.getMetrics = void 0; var _core_utils = __w_pdfjs_require__(9); const getMetrics = (0, _core_utils.getLookupTableFactory)(function (t) { t.Courier = 600; t["Courier-Bold"] = 600; t["Courier-BoldOblique"] = 600; t["Courier-Oblique"] = 600; t.Helvetica = (0, _core_utils.getLookupTableFactory)(function (t) { t.space = 278; t.exclam = 278; t.quotedbl = 355; t.numbersign = 556; t.dollar = 556; t.percent = 889; t.ampersand = 667; t.quoteright = 222; t.parenleft = 333; t.parenright = 333; t.asterisk = 389; t.plus = 584; t.comma = 278; t.hyphen = 333; t.period = 278; t.slash = 278; t.zero = 556; t.one = 556; t.two = 556; t.three = 556; t.four = 556; t.five = 556; t.six = 556; t.seven = 556; t.eight = 556; t.nine = 556; t.colon = 278; t.semicolon = 278; t.less = 584; t.equal = 584; t.greater = 584; t.question = 556; t.at = 1015; t.A = 667; t.B = 667; t.C = 722; t.D = 722; t.E = 667; t.F = 611; t.G = 778; t.H = 722; t.I = 278; t.J = 500; t.K = 667; t.L = 556; t.M = 833; t.N = 722; t.O = 778; t.P = 667; t.Q = 778; t.R = 722; t.S = 667; t.T = 611; t.U = 722; t.V = 667; t.W = 944; t.X = 667; t.Y = 667; t.Z = 611; t.bracketleft = 278; t.backslash = 278; t.bracketright = 278; t.asciicircum = 469; t.underscore = 556; t.quoteleft = 222; t.a = 556; t.b = 556; t.c = 500; t.d = 556; t.e = 556; t.f = 278; t.g = 556; t.h = 556; t.i = 222; t.j = 222; t.k = 500; t.l = 222; t.m = 833; t.n = 556; t.o = 556; t.p = 556; t.q = 556; t.r = 333; t.s = 500; t.t = 278; t.u = 556; t.v = 500; t.w = 722; t.x = 500; t.y = 500; t.z = 500; t.braceleft = 334; t.bar = 260; t.braceright = 334; t.asciitilde = 584; t.exclamdown = 333; t.cent = 556; t.sterling = 556; t.fraction = 167; t.yen = 556; t.florin = 556; t.section = 556; t.currency = 556; t.quotesingle = 191; t.quotedblleft = 333; t.guillemotleft = 556; t.guilsinglleft = 333; t.guilsinglright = 333; t.fi = 500; t.fl = 500; t.endash = 556; t.dagger = 556; t.daggerdbl = 556; t.periodcentered = 278; t.paragraph = 537; t.bullet = 350; t.quotesinglbase = 222; t.quotedblbase = 333; t.quotedblright = 333; t.guillemotright = 556; t.ellipsis = 1000; t.perthousand = 1000; t.questiondown = 611; t.grave = 333; t.acute = 333; t.circumflex = 333; t.tilde = 333; t.macron = 333; t.breve = 333; t.dotaccent = 333; t.dieresis = 333; t.ring = 333; t.cedilla = 333; t.hungarumlaut = 333; t.ogonek = 333; t.caron = 333; t.emdash = 1000; t.AE = 1000; t.ordfeminine = 370; t.Lslash = 556; t.Oslash = 778; t.OE = 1000; t.ordmasculine = 365; t.ae = 889; t.dotlessi = 278; t.lslash = 222; t.oslash = 611; t.oe = 944; t.germandbls = 611; t.Idieresis = 278; t.eacute = 556; t.abreve = 556; t.uhungarumlaut = 556; t.ecaron = 556; t.Ydieresis = 667; t.divide = 584; t.Yacute = 667; t.Acircumflex = 667; t.aacute = 556; t.Ucircumflex = 722; t.yacute = 500; t.scommaaccent = 500; t.ecircumflex = 556; t.Uring = 722; t.Udieresis = 722; t.aogonek = 556; t.Uacute = 722; t.uogonek = 556; t.Edieresis = 667; t.Dcroat = 722; t.commaaccent = 250; t.copyright = 737; t.Emacron = 667; t.ccaron = 500; t.aring = 556; t.Ncommaaccent = 722; t.lacute = 222; t.agrave = 556; t.Tcommaaccent = 611; t.Cacute = 722; t.atilde = 556; t.Edotaccent = 667; t.scaron = 500; t.scedilla = 500; t.iacute = 278; t.lozenge = 471; t.Rcaron = 722; t.Gcommaaccent = 778; t.ucircumflex = 556; t.acircumflex = 556; t.Amacron = 667; t.rcaron = 333; t.ccedilla = 500; t.Zdotaccent = 611; t.Thorn = 667; t.Omacron = 778; t.Racute = 722; t.Sacute = 667; t.dcaron = 643; t.Umacron = 722; t.uring = 556; t.threesuperior = 333; t.Ograve = 778; t.Agrave = 667; t.Abreve = 667; t.multiply = 584; t.uacute = 556; t.Tcaron = 611; t.partialdiff = 476; t.ydieresis = 500; t.Nacute = 722; t.icircumflex = 278; t.Ecircumflex = 667; t.adieresis = 556; t.edieresis = 556; t.cacute = 500; t.nacute = 556; t.umacron = 556; t.Ncaron = 722; t.Iacute = 278; t.plusminus = 584; t.brokenbar = 260; t.registered = 737; t.Gbreve = 778; t.Idotaccent = 278; t.summation = 600; t.Egrave = 667; t.racute = 333; t.omacron = 556; t.Zacute = 611; t.Zcaron = 611; t.greaterequal = 549; t.Eth = 722; t.Ccedilla = 722; t.lcommaaccent = 222; t.tcaron = 317; t.eogonek = 556; t.Uogonek = 722; t.Aacute = 667; t.Adieresis = 667; t.egrave = 556; t.zacute = 500; t.iogonek = 222; t.Oacute = 778; t.oacute = 556; t.amacron = 556; t.sacute = 500; t.idieresis = 278; t.Ocircumflex = 778; t.Ugrave = 722; t.Delta = 612; t.thorn = 556; t.twosuperior = 333; t.Odieresis = 778; t.mu = 556; t.igrave = 278; t.ohungarumlaut = 556; t.Eogonek = 667; t.dcroat = 556; t.threequarters = 834; t.Scedilla = 667; t.lcaron = 299; t.Kcommaaccent = 667; t.Lacute = 556; t.trademark = 1000; t.edotaccent = 556; t.Igrave = 278; t.Imacron = 278; t.Lcaron = 556; t.onehalf = 834; t.lessequal = 549; t.ocircumflex = 556; t.ntilde = 556; t.Uhungarumlaut = 722; t.Eacute = 667; t.emacron = 556; t.gbreve = 556; t.onequarter = 834; t.Scaron = 667; t.Scommaaccent = 667; t.Ohungarumlaut = 778; t.degree = 400; t.ograve = 556; t.Ccaron = 722; t.ugrave = 556; t.radical = 453; t.Dcaron = 722; t.rcommaaccent = 333; t.Ntilde = 722; t.otilde = 556; t.Rcommaaccent = 722; t.Lcommaaccent = 556; t.Atilde = 667; t.Aogonek = 667; t.Aring = 667; t.Otilde = 778; t.zdotaccent = 500; t.Ecaron = 667; t.Iogonek = 278; t.kcommaaccent = 500; t.minus = 584; t.Icircumflex = 278; t.ncaron = 556; t.tcommaaccent = 278; t.logicalnot = 584; t.odieresis = 556; t.udieresis = 556; t.notequal = 549; t.gcommaaccent = 556; t.eth = 556; t.zcaron = 500; t.ncommaaccent = 556; t.onesuperior = 333; t.imacron = 278; t.Euro = 556; }); t["Helvetica-Bold"] = (0, _core_utils.getLookupTableFactory)(function (t) { t.space = 278; t.exclam = 333; t.quotedbl = 474; t.numbersign = 556; t.dollar = 556; t.percent = 889; t.ampersand = 722; t.quoteright = 278; t.parenleft = 333; t.parenright = 333; t.asterisk = 389; t.plus = 584; t.comma = 278; t.hyphen = 333; t.period = 278; t.slash = 278; t.zero = 556; t.one = 556; t.two = 556; t.three = 556; t.four = 556; t.five = 556; t.six = 556; t.seven = 556; t.eight = 556; t.nine = 556; t.colon = 333; t.semicolon = 333; t.less = 584; t.equal = 584; t.greater = 584; t.question = 611; t.at = 975; t.A = 722; t.B = 722; t.C = 722; t.D = 722; t.E = 667; t.F = 611; t.G = 778; t.H = 722; t.I = 278; t.J = 556; t.K = 722; t.L = 611; t.M = 833; t.N = 722; t.O = 778; t.P = 667; t.Q = 778; t.R = 722; t.S = 667; t.T = 611; t.U = 722; t.V = 667; t.W = 944; t.X = 667; t.Y = 667; t.Z = 611; t.bracketleft = 333; t.backslash = 278; t.bracketright = 333; t.asciicircum = 584; t.underscore = 556; t.quoteleft = 278; t.a = 556; t.b = 611; t.c = 556; t.d = 611; t.e = 556; t.f = 333; t.g = 611; t.h = 611; t.i = 278; t.j = 278; t.k = 556; t.l = 278; t.m = 889; t.n = 611; t.o = 611; t.p = 611; t.q = 611; t.r = 389; t.s = 556; t.t = 333; t.u = 611; t.v = 556; t.w = 778; t.x = 556; t.y = 556; t.z = 500; t.braceleft = 389; t.bar = 280; t.braceright = 389; t.asciitilde = 584; t.exclamdown = 333; t.cent = 556; t.sterling = 556; t.fraction = 167; t.yen = 556; t.florin = 556; t.section = 556; t.currency = 556; t.quotesingle = 238; t.quotedblleft = 500; t.guillemotleft = 556; t.guilsinglleft = 333; t.guilsinglright = 333; t.fi = 611; t.fl = 611; t.endash = 556; t.dagger = 556; t.daggerdbl = 556; t.periodcentered = 278; t.paragraph = 556; t.bullet = 350; t.quotesinglbase = 278; t.quotedblbase = 500; t.quotedblright = 500; t.guillemotright = 556; t.ellipsis = 1000; t.perthousand = 1000; t.questiondown = 611; t.grave = 333; t.acute = 333; t.circumflex = 333; t.tilde = 333; t.macron = 333; t.breve = 333; t.dotaccent = 333; t.dieresis = 333; t.ring = 333; t.cedilla = 333; t.hungarumlaut = 333; t.ogonek = 333; t.caron = 333; t.emdash = 1000; t.AE = 1000; t.ordfeminine = 370; t.Lslash = 611; t.Oslash = 778; t.OE = 1000; t.ordmasculine = 365; t.ae = 889; t.dotlessi = 278; t.lslash = 278; t.oslash = 611; t.oe = 944; t.germandbls = 611; t.Idieresis = 278; t.eacute = 556; t.abreve = 556; t.uhungarumlaut = 611; t.ecaron = 556; t.Ydieresis = 667; t.divide = 584; t.Yacute = 667; t.Acircumflex = 722; t.aacute = 556; t.Ucircumflex = 722; t.yacute = 556; t.scommaaccent = 556; t.ecircumflex = 556; t.Uring = 722; t.Udieresis = 722; t.aogonek = 556; t.Uacute = 722; t.uogonek = 611; t.Edieresis = 667; t.Dcroat = 722; t.commaaccent = 250; t.copyright = 737; t.Emacron = 667; t.ccaron = 556; t.aring = 556; t.Ncommaaccent = 722; t.lacute = 278; t.agrave = 556; t.Tcommaaccent = 611; t.Cacute = 722; t.atilde = 556; t.Edotaccent = 667; t.scaron = 556; t.scedilla = 556; t.iacute = 278; t.lozenge = 494; t.Rcaron = 722; t.Gcommaaccent = 778; t.ucircumflex = 611; t.acircumflex = 556; t.Amacron = 722; t.rcaron = 389; t.ccedilla = 556; t.Zdotaccent = 611; t.Thorn = 667; t.Omacron = 778; t.Racute = 722; t.Sacute = 667; t.dcaron = 743; t.Umacron = 722; t.uring = 611; t.threesuperior = 333; t.Ograve = 778; t.Agrave = 722; t.Abreve = 722; t.multiply = 584; t.uacute = 611; t.Tcaron = 611; t.partialdiff = 494; t.ydieresis = 556; t.Nacute = 722; t.icircumflex = 278; t.Ecircumflex = 667; t.adieresis = 556; t.edieresis = 556; t.cacute = 556; t.nacute = 611; t.umacron = 611; t.Ncaron = 722; t.Iacute = 278; t.plusminus = 584; t.brokenbar = 280; t.registered = 737; t.Gbreve = 778; t.Idotaccent = 278; t.summation = 600; t.Egrave = 667; t.racute = 389; t.omacron = 611; t.Zacute = 611; t.Zcaron = 611; t.greaterequal = 549; t.Eth = 722; t.Ccedilla = 722; t.lcommaaccent = 278; t.tcaron = 389; t.eogonek = 556; t.Uogonek = 722; t.Aacute = 722; t.Adieresis = 722; t.egrave = 556; t.zacute = 500; t.iogonek = 278; t.Oacute = 778; t.oacute = 611; t.amacron = 556; t.sacute = 556; t.idieresis = 278; t.Ocircumflex = 778; t.Ugrave = 722; t.Delta = 612; t.thorn = 611; t.twosuperior = 333; t.Odieresis = 778; t.mu = 611; t.igrave = 278; t.ohungarumlaut = 611; t.Eogonek = 667; t.dcroat = 611; t.threequarters = 834; t.Scedilla = 667; t.lcaron = 400; t.Kcommaaccent = 722; t.Lacute = 611; t.trademark = 1000; t.edotaccent = 556; t.Igrave = 278; t.Imacron = 278; t.Lcaron = 611; t.onehalf = 834; t.lessequal = 549; t.ocircumflex = 611; t.ntilde = 611; t.Uhungarumlaut = 722; t.Eacute = 667; t.emacron = 556; t.gbreve = 611; t.onequarter = 834; t.Scaron = 667; t.Scommaaccent = 667; t.Ohungarumlaut = 778; t.degree = 400; t.ograve = 611; t.Ccaron = 722; t.ugrave = 611; t.radical = 549; t.Dcaron = 722; t.rcommaaccent = 389; t.Ntilde = 722; t.otilde = 611; t.Rcommaaccent = 722; t.Lcommaaccent = 611; t.Atilde = 722; t.Aogonek = 722; t.Aring = 722; t.Otilde = 778; t.zdotaccent = 500; t.Ecaron = 667; t.Iogonek = 278; t.kcommaaccent = 556; t.minus = 584; t.Icircumflex = 278; t.ncaron = 611; t.tcommaaccent = 333; t.logicalnot = 584; t.odieresis = 611; t.udieresis = 611; t.notequal = 549; t.gcommaaccent = 611; t.eth = 611; t.zcaron = 500; t.ncommaaccent = 611; t.onesuperior = 333; t.imacron = 278; t.Euro = 556; }); t["Helvetica-BoldOblique"] = (0, _core_utils.getLookupTableFactory)(function (t) { t.space = 278; t.exclam = 333; t.quotedbl = 474; t.numbersign = 556; t.dollar = 556; t.percent = 889; t.ampersand = 722; t.quoteright = 278; t.parenleft = 333; t.parenright = 333; t.asterisk = 389; t.plus = 584; t.comma = 278; t.hyphen = 333; t.period = 278; t.slash = 278; t.zero = 556; t.one = 556; t.two = 556; t.three = 556; t.four = 556; t.five = 556; t.six = 556; t.seven = 556; t.eight = 556; t.nine = 556; t.colon = 333; t.semicolon = 333; t.less = 584; t.equal = 584; t.greater = 584; t.question = 611; t.at = 975; t.A = 722; t.B = 722; t.C = 722; t.D = 722; t.E = 667; t.F = 611; t.G = 778; t.H = 722; t.I = 278; t.J = 556; t.K = 722; t.L = 611; t.M = 833; t.N = 722; t.O = 778; t.P = 667; t.Q = 778; t.R = 722; t.S = 667; t.T = 611; t.U = 722; t.V = 667; t.W = 944; t.X = 667; t.Y = 667; t.Z = 611; t.bracketleft = 333; t.backslash = 278; t.bracketright = 333; t.asciicircum = 584; t.underscore = 556; t.quoteleft = 278; t.a = 556; t.b = 611; t.c = 556; t.d = 611; t.e = 556; t.f = 333; t.g = 611; t.h = 611; t.i = 278; t.j = 278; t.k = 556; t.l = 278; t.m = 889; t.n = 611; t.o = 611; t.p = 611; t.q = 611; t.r = 389; t.s = 556; t.t = 333; t.u = 611; t.v = 556; t.w = 778; t.x = 556; t.y = 556; t.z = 500; t.braceleft = 389; t.bar = 280; t.braceright = 389; t.asciitilde = 584; t.exclamdown = 333; t.cent = 556; t.sterling = 556; t.fraction = 167; t.yen = 556; t.florin = 556; t.section = 556; t.currency = 556; t.quotesingle = 238; t.quotedblleft = 500; t.guillemotleft = 556; t.guilsinglleft = 333; t.guilsinglright = 333; t.fi = 611; t.fl = 611; t.endash = 556; t.dagger = 556; t.daggerdbl = 556; t.periodcentered = 278; t.paragraph = 556; t.bullet = 350; t.quotesinglbase = 278; t.quotedblbase = 500; t.quotedblright = 500; t.guillemotright = 556; t.ellipsis = 1000; t.perthousand = 1000; t.questiondown = 611; t.grave = 333; t.acute = 333; t.circumflex = 333; t.tilde = 333; t.macron = 333; t.breve = 333; t.dotaccent = 333; t.dieresis = 333; t.ring = 333; t.cedilla = 333; t.hungarumlaut = 333; t.ogonek = 333; t.caron = 333; t.emdash = 1000; t.AE = 1000; t.ordfeminine = 370; t.Lslash = 611; t.Oslash = 778; t.OE = 1000; t.ordmasculine = 365; t.ae = 889; t.dotlessi = 278; t.lslash = 278; t.oslash = 611; t.oe = 944; t.germandbls = 611; t.Idieresis = 278; t.eacute = 556; t.abreve = 556; t.uhungarumlaut = 611; t.ecaron = 556; t.Ydieresis = 667; t.divide = 584; t.Yacute = 667; t.Acircumflex = 722; t.aacute = 556; t.Ucircumflex = 722; t.yacute = 556; t.scommaaccent = 556; t.ecircumflex = 556; t.Uring = 722; t.Udieresis = 722; t.aogonek = 556; t.Uacute = 722; t.uogonek = 611; t.Edieresis = 667; t.Dcroat = 722; t.commaaccent = 250; t.copyright = 737; t.Emacron = 667; t.ccaron = 556; t.aring = 556; t.Ncommaaccent = 722; t.lacute = 278; t.agrave = 556; t.Tcommaaccent = 611; t.Cacute = 722; t.atilde = 556; t.Edotaccent = 667; t.scaron = 556; t.scedilla = 556; t.iacute = 278; t.lozenge = 494; t.Rcaron = 722; t.Gcommaaccent = 778; t.ucircumflex = 611; t.acircumflex = 556; t.Amacron = 722; t.rcaron = 389; t.ccedilla = 556; t.Zdotaccent = 611; t.Thorn = 667; t.Omacron = 778; t.Racute = 722; t.Sacute = 667; t.dcaron = 743; t.Umacron = 722; t.uring = 611; t.threesuperior = 333; t.Ograve = 778; t.Agrave = 722; t.Abreve = 722; t.multiply = 584; t.uacute = 611; t.Tcaron = 611; t.partialdiff = 494; t.ydieresis = 556; t.Nacute = 722; t.icircumflex = 278; t.Ecircumflex = 667; t.adieresis = 556; t.edieresis = 556; t.cacute = 556; t.nacute = 611; t.umacron = 611; t.Ncaron = 722; t.Iacute = 278; t.plusminus = 584; t.brokenbar = 280; t.registered = 737; t.Gbreve = 778; t.Idotaccent = 278; t.summation = 600; t.Egrave = 667; t.racute = 389; t.omacron = 611; t.Zacute = 611; t.Zcaron = 611; t.greaterequal = 549; t.Eth = 722; t.Ccedilla = 722; t.lcommaaccent = 278; t.tcaron = 389; t.eogonek = 556; t.Uogonek = 722; t.Aacute = 722; t.Adieresis = 722; t.egrave = 556; t.zacute = 500; t.iogonek = 278; t.Oacute = 778; t.oacute = 611; t.amacron = 556; t.sacute = 556; t.idieresis = 278; t.Ocircumflex = 778; t.Ugrave = 722; t.Delta = 612; t.thorn = 611; t.twosuperior = 333; t.Odieresis = 778; t.mu = 611; t.igrave = 278; t.ohungarumlaut = 611; t.Eogonek = 667; t.dcroat = 611; t.threequarters = 834; t.Scedilla = 667; t.lcaron = 400; t.Kcommaaccent = 722; t.Lacute = 611; t.trademark = 1000; t.edotaccent = 556; t.Igrave = 278; t.Imacron = 278; t.Lcaron = 611; t.onehalf = 834; t.lessequal = 549; t.ocircumflex = 611; t.ntilde = 611; t.Uhungarumlaut = 722; t.Eacute = 667; t.emacron = 556; t.gbreve = 611; t.onequarter = 834; t.Scaron = 667; t.Scommaaccent = 667; t.Ohungarumlaut = 778; t.degree = 400; t.ograve = 611; t.Ccaron = 722; t.ugrave = 611; t.radical = 549; t.Dcaron = 722; t.rcommaaccent = 389; t.Ntilde = 722; t.otilde = 611; t.Rcommaaccent = 722; t.Lcommaaccent = 611; t.Atilde = 722; t.Aogonek = 722; t.Aring = 722; t.Otilde = 778; t.zdotaccent = 500; t.Ecaron = 667; t.Iogonek = 278; t.kcommaaccent = 556; t.minus = 584; t.Icircumflex = 278; t.ncaron = 611; t.tcommaaccent = 333; t.logicalnot = 584; t.odieresis = 611; t.udieresis = 611; t.notequal = 549; t.gcommaaccent = 611; t.eth = 611; t.zcaron = 500; t.ncommaaccent = 611; t.onesuperior = 333; t.imacron = 278; t.Euro = 556; }); t["Helvetica-Oblique"] = (0, _core_utils.getLookupTableFactory)(function (t) { t.space = 278; t.exclam = 278; t.quotedbl = 355; t.numbersign = 556; t.dollar = 556; t.percent = 889; t.ampersand = 667; t.quoteright = 222; t.parenleft = 333; t.parenright = 333; t.asterisk = 389; t.plus = 584; t.comma = 278; t.hyphen = 333; t.period = 278; t.slash = 278; t.zero = 556; t.one = 556; t.two = 556; t.three = 556; t.four = 556; t.five = 556; t.six = 556; t.seven = 556; t.eight = 556; t.nine = 556; t.colon = 278; t.semicolon = 278; t.less = 584; t.equal = 584; t.greater = 584; t.question = 556; t.at = 1015; t.A = 667; t.B = 667; t.C = 722; t.D = 722; t.E = 667; t.F = 611; t.G = 778; t.H = 722; t.I = 278; t.J = 500; t.K = 667; t.L = 556; t.M = 833; t.N = 722; t.O = 778; t.P = 667; t.Q = 778; t.R = 722; t.S = 667; t.T = 611; t.U = 722; t.V = 667; t.W = 944; t.X = 667; t.Y = 667; t.Z = 611; t.bracketleft = 278; t.backslash = 278; t.bracketright = 278; t.asciicircum = 469; t.underscore = 556; t.quoteleft = 222; t.a = 556; t.b = 556; t.c = 500; t.d = 556; t.e = 556; t.f = 278; t.g = 556; t.h = 556; t.i = 222; t.j = 222; t.k = 500; t.l = 222; t.m = 833; t.n = 556; t.o = 556; t.p = 556; t.q = 556; t.r = 333; t.s = 500; t.t = 278; t.u = 556; t.v = 500; t.w = 722; t.x = 500; t.y = 500; t.z = 500; t.braceleft = 334; t.bar = 260; t.braceright = 334; t.asciitilde = 584; t.exclamdown = 333; t.cent = 556; t.sterling = 556; t.fraction = 167; t.yen = 556; t.florin = 556; t.section = 556; t.currency = 556; t.quotesingle = 191; t.quotedblleft = 333; t.guillemotleft = 556; t.guilsinglleft = 333; t.guilsinglright = 333; t.fi = 500; t.fl = 500; t.endash = 556; t.dagger = 556; t.daggerdbl = 556; t.periodcentered = 278; t.paragraph = 537; t.bullet = 350; t.quotesinglbase = 222; t.quotedblbase = 333; t.quotedblright = 333; t.guillemotright = 556; t.ellipsis = 1000; t.perthousand = 1000; t.questiondown = 611; t.grave = 333; t.acute = 333; t.circumflex = 333; t.tilde = 333; t.macron = 333; t.breve = 333; t.dotaccent = 333; t.dieresis = 333; t.ring = 333; t.cedilla = 333; t.hungarumlaut = 333; t.ogonek = 333; t.caron = 333; t.emdash = 1000; t.AE = 1000; t.ordfeminine = 370; t.Lslash = 556; t.Oslash = 778; t.OE = 1000; t.ordmasculine = 365; t.ae = 889; t.dotlessi = 278; t.lslash = 222; t.oslash = 611; t.oe = 944; t.germandbls = 611; t.Idieresis = 278; t.eacute = 556; t.abreve = 556; t.uhungarumlaut = 556; t.ecaron = 556; t.Ydieresis = 667; t.divide = 584; t.Yacute = 667; t.Acircumflex = 667; t.aacute = 556; t.Ucircumflex = 722; t.yacute = 500; t.scommaaccent = 500; t.ecircumflex = 556; t.Uring = 722; t.Udieresis = 722; t.aogonek = 556; t.Uacute = 722; t.uogonek = 556; t.Edieresis = 667; t.Dcroat = 722; t.commaaccent = 250; t.copyright = 737; t.Emacron = 667; t.ccaron = 500; t.aring = 556; t.Ncommaaccent = 722; t.lacute = 222; t.agrave = 556; t.Tcommaaccent = 611; t.Cacute = 722; t.atilde = 556; t.Edotaccent = 667; t.scaron = 500; t.scedilla = 500; t.iacute = 278; t.lozenge = 471; t.Rcaron = 722; t.Gcommaaccent = 778; t.ucircumflex = 556; t.acircumflex = 556; t.Amacron = 667; t.rcaron = 333; t.ccedilla = 500; t.Zdotaccent = 611; t.Thorn = 667; t.Omacron = 778; t.Racute = 722; t.Sacute = 667; t.dcaron = 643; t.Umacron = 722; t.uring = 556; t.threesuperior = 333; t.Ograve = 778; t.Agrave = 667; t.Abreve = 667; t.multiply = 584; t.uacute = 556; t.Tcaron = 611; t.partialdiff = 476; t.ydieresis = 500; t.Nacute = 722; t.icircumflex = 278; t.Ecircumflex = 667; t.adieresis = 556; t.edieresis = 556; t.cacute = 500; t.nacute = 556; t.umacron = 556; t.Ncaron = 722; t.Iacute = 278; t.plusminus = 584; t.brokenbar = 260; t.registered = 737; t.Gbreve = 778; t.Idotaccent = 278; t.summation = 600; t.Egrave = 667; t.racute = 333; t.omacron = 556; t.Zacute = 611; t.Zcaron = 611; t.greaterequal = 549; t.Eth = 722; t.Ccedilla = 722; t.lcommaaccent = 222; t.tcaron = 317; t.eogonek = 556; t.Uogonek = 722; t.Aacute = 667; t.Adieresis = 667; t.egrave = 556; t.zacute = 500; t.iogonek = 222; t.Oacute = 778; t.oacute = 556; t.amacron = 556; t.sacute = 500; t.idieresis = 278; t.Ocircumflex = 778; t.Ugrave = 722; t.Delta = 612; t.thorn = 556; t.twosuperior = 333; t.Odieresis = 778; t.mu = 556; t.igrave = 278; t.ohungarumlaut = 556; t.Eogonek = 667; t.dcroat = 556; t.threequarters = 834; t.Scedilla = 667; t.lcaron = 299; t.Kcommaaccent = 667; t.Lacute = 556; t.trademark = 1000; t.edotaccent = 556; t.Igrave = 278; t.Imacron = 278; t.Lcaron = 556; t.onehalf = 834; t.lessequal = 549; t.ocircumflex = 556; t.ntilde = 556; t.Uhungarumlaut = 722; t.Eacute = 667; t.emacron = 556; t.gbreve = 556; t.onequarter = 834; t.Scaron = 667; t.Scommaaccent = 667; t.Ohungarumlaut = 778; t.degree = 400; t.ograve = 556; t.Ccaron = 722; t.ugrave = 556; t.radical = 453; t.Dcaron = 722; t.rcommaaccent = 333; t.Ntilde = 722; t.otilde = 556; t.Rcommaaccent = 722; t.Lcommaaccent = 556; t.Atilde = 667; t.Aogonek = 667; t.Aring = 667; t.Otilde = 778; t.zdotaccent = 500; t.Ecaron = 667; t.Iogonek = 278; t.kcommaaccent = 500; t.minus = 584; t.Icircumflex = 278; t.ncaron = 556; t.tcommaaccent = 278; t.logicalnot = 584; t.odieresis = 556; t.udieresis = 556; t.notequal = 549; t.gcommaaccent = 556; t.eth = 556; t.zcaron = 500; t.ncommaaccent = 556; t.onesuperior = 333; t.imacron = 278; t.Euro = 556; }); t.Symbol = (0, _core_utils.getLookupTableFactory)(function (t) { t.space = 250; t.exclam = 333; t.universal = 713; t.numbersign = 500; t.existential = 549; t.percent = 833; t.ampersand = 778; t.suchthat = 439; t.parenleft = 333; t.parenright = 333; t.asteriskmath = 500; t.plus = 549; t.comma = 250; t.minus = 549; t.period = 250; t.slash = 278; t.zero = 500; t.one = 500; t.two = 500; t.three = 500; t.four = 500; t.five = 500; t.six = 500; t.seven = 500; t.eight = 500; t.nine = 500; t.colon = 278; t.semicolon = 278; t.less = 549; t.equal = 549; t.greater = 549; t.question = 444; t.congruent = 549; t.Alpha = 722; t.Beta = 667; t.Chi = 722; t.Delta = 612; t.Epsilon = 611; t.Phi = 763; t.Gamma = 603; t.Eta = 722; t.Iota = 333; t.theta1 = 631; t.Kappa = 722; t.Lambda = 686; t.Mu = 889; t.Nu = 722; t.Omicron = 722; t.Pi = 768; t.Theta = 741; t.Rho = 556; t.Sigma = 592; t.Tau = 611; t.Upsilon = 690; t.sigma1 = 439; t.Omega = 768; t.Xi = 645; t.Psi = 795; t.Zeta = 611; t.bracketleft = 333; t.therefore = 863; t.bracketright = 333; t.perpendicular = 658; t.underscore = 500; t.radicalex = 500; t.alpha = 631; t.beta = 549; t.chi = 549; t.delta = 494; t.epsilon = 439; t.phi = 521; t.gamma = 411; t.eta = 603; t.iota = 329; t.phi1 = 603; t.kappa = 549; t.lambda = 549; t.mu = 576; t.nu = 521; t.omicron = 549; t.pi = 549; t.theta = 521; t.rho = 549; t.sigma = 603; t.tau = 439; t.upsilon = 576; t.omega1 = 713; t.omega = 686; t.xi = 493; t.psi = 686; t.zeta = 494; t.braceleft = 480; t.bar = 200; t.braceright = 480; t.similar = 549; t.Euro = 750; t.Upsilon1 = 620; t.minute = 247; t.lessequal = 549; t.fraction = 167; t.infinity = 713; t.florin = 500; t.club = 753; t.diamond = 753; t.heart = 753; t.spade = 753; t.arrowboth = 1042; t.arrowleft = 987; t.arrowup = 603; t.arrowright = 987; t.arrowdown = 603; t.degree = 400; t.plusminus = 549; t.second = 411; t.greaterequal = 549; t.multiply = 549; t.proportional = 713; t.partialdiff = 494; t.bullet = 460; t.divide = 549; t.notequal = 549; t.equivalence = 549; t.approxequal = 549; t.ellipsis = 1000; t.arrowvertex = 603; t.arrowhorizex = 1000; t.carriagereturn = 658; t.aleph = 823; t.Ifraktur = 686; t.Rfraktur = 795; t.weierstrass = 987; t.circlemultiply = 768; t.circleplus = 768; t.emptyset = 823; t.intersection = 768; t.union = 768; t.propersuperset = 713; t.reflexsuperset = 713; t.notsubset = 713; t.propersubset = 713; t.reflexsubset = 713; t.element = 713; t.notelement = 713; t.angle = 768; t.gradient = 713; t.registerserif = 790; t.copyrightserif = 790; t.trademarkserif = 890; t.product = 823; t.radical = 549; t.dotmath = 250; t.logicalnot = 713; t.logicaland = 603; t.logicalor = 603; t.arrowdblboth = 1042; t.arrowdblleft = 987; t.arrowdblup = 603; t.arrowdblright = 987; t.arrowdbldown = 603; t.lozenge = 494; t.angleleft = 329; t.registersans = 790; t.copyrightsans = 790; t.trademarksans = 786; t.summation = 713; t.parenlefttp = 384; t.parenleftex = 384; t.parenleftbt = 384; t.bracketlefttp = 384; t.bracketleftex = 384; t.bracketleftbt = 384; t.bracelefttp = 494; t.braceleftmid = 494; t.braceleftbt = 494; t.braceex = 494; t.angleright = 329; t.integral = 274; t.integraltp = 686; t.integralex = 686; t.integralbt = 686; t.parenrighttp = 384; t.parenrightex = 384; t.parenrightbt = 384; t.bracketrighttp = 384; t.bracketrightex = 384; t.bracketrightbt = 384; t.bracerighttp = 494; t.bracerightmid = 494; t.bracerightbt = 494; t.apple = 790; }); t["Times-Roman"] = (0, _core_utils.getLookupTableFactory)(function (t) { t.space = 250; t.exclam = 333; t.quotedbl = 408; t.numbersign = 500; t.dollar = 500; t.percent = 833; t.ampersand = 778; t.quoteright = 333; t.parenleft = 333; t.parenright = 333; t.asterisk = 500; t.plus = 564; t.comma = 250; t.hyphen = 333; t.period = 250; t.slash = 278; t.zero = 500; t.one = 500; t.two = 500; t.three = 500; t.four = 500; t.five = 500; t.six = 500; t.seven = 500; t.eight = 500; t.nine = 500; t.colon = 278; t.semicolon = 278; t.less = 564; t.equal = 564; t.greater = 564; t.question = 444; t.at = 921; t.A = 722; t.B = 667; t.C = 667; t.D = 722; t.E = 611; t.F = 556; t.G = 722; t.H = 722; t.I = 333; t.J = 389; t.K = 722; t.L = 611; t.M = 889; t.N = 722; t.O = 722; t.P = 556; t.Q = 722; t.R = 667; t.S = 556; t.T = 611; t.U = 722; t.V = 722; t.W = 944; t.X = 722; t.Y = 722; t.Z = 611; t.bracketleft = 333; t.backslash = 278; t.bracketright = 333; t.asciicircum = 469; t.underscore = 500; t.quoteleft = 333; t.a = 444; t.b = 500; t.c = 444; t.d = 500; t.e = 444; t.f = 333; t.g = 500; t.h = 500; t.i = 278; t.j = 278; t.k = 500; t.l = 278; t.m = 778; t.n = 500; t.o = 500; t.p = 500; t.q = 500; t.r = 333; t.s = 389; t.t = 278; t.u = 500; t.v = 500; t.w = 722; t.x = 500; t.y = 500; t.z = 444; t.braceleft = 480; t.bar = 200; t.braceright = 480; t.asciitilde = 541; t.exclamdown = 333; t.cent = 500; t.sterling = 500; t.fraction = 167; t.yen = 500; t.florin = 500; t.section = 500; t.currency = 500; t.quotesingle = 180; t.quotedblleft = 444; t.guillemotleft = 500; t.guilsinglleft = 333; t.guilsinglright = 333; t.fi = 556; t.fl = 556; t.endash = 500; t.dagger = 500; t.daggerdbl = 500; t.periodcentered = 250; t.paragraph = 453; t.bullet = 350; t.quotesinglbase = 333; t.quotedblbase = 444; t.quotedblright = 444; t.guillemotright = 500; t.ellipsis = 1000; t.perthousand = 1000; t.questiondown = 444; t.grave = 333; t.acute = 333; t.circumflex = 333; t.tilde = 333; t.macron = 333; t.breve = 333; t.dotaccent = 333; t.dieresis = 333; t.ring = 333; t.cedilla = 333; t.hungarumlaut = 333; t.ogonek = 333; t.caron = 333; t.emdash = 1000; t.AE = 889; t.ordfeminine = 276; t.Lslash = 611; t.Oslash = 722; t.OE = 889; t.ordmasculine = 310; t.ae = 667; t.dotlessi = 278; t.lslash = 278; t.oslash = 500; t.oe = 722; t.germandbls = 500; t.Idieresis = 333; t.eacute = 444; t.abreve = 444; t.uhungarumlaut = 500; t.ecaron = 444; t.Ydieresis = 722; t.divide = 564; t.Yacute = 722; t.Acircumflex = 722; t.aacute = 444; t.Ucircumflex = 722; t.yacute = 500; t.scommaaccent = 389; t.ecircumflex = 444; t.Uring = 722; t.Udieresis = 722; t.aogonek = 444; t.Uacute = 722; t.uogonek = 500; t.Edieresis = 611; t.Dcroat = 722; t.commaaccent = 250; t.copyright = 760; t.Emacron = 611; t.ccaron = 444; t.aring = 444; t.Ncommaaccent = 722; t.lacute = 278; t.agrave = 444; t.Tcommaaccent = 611; t.Cacute = 667; t.atilde = 444; t.Edotaccent = 611; t.scaron = 389; t.scedilla = 389; t.iacute = 278; t.lozenge = 471; t.Rcaron = 667; t.Gcommaaccent = 722; t.ucircumflex = 500; t.acircumflex = 444; t.Amacron = 722; t.rcaron = 333; t.ccedilla = 444; t.Zdotaccent = 611; t.Thorn = 556; t.Omacron = 722; t.Racute = 667; t.Sacute = 556; t.dcaron = 588; t.Umacron = 722; t.uring = 500; t.threesuperior = 300; t.Ograve = 722; t.Agrave = 722; t.Abreve = 722; t.multiply = 564; t.uacute = 500; t.Tcaron = 611; t.partialdiff = 476; t.ydieresis = 500; t.Nacute = 722; t.icircumflex = 278; t.Ecircumflex = 611; t.adieresis = 444; t.edieresis = 444; t.cacute = 444; t.nacute = 500; t.umacron = 500; t.Ncaron = 722; t.Iacute = 333; t.plusminus = 564; t.brokenbar = 200; t.registered = 760; t.Gbreve = 722; t.Idotaccent = 333; t.summation = 600; t.Egrave = 611; t.racute = 333; t.omacron = 500; t.Zacute = 611; t.Zcaron = 611; t.greaterequal = 549; t.Eth = 722; t.Ccedilla = 667; t.lcommaaccent = 278; t.tcaron = 326; t.eogonek = 444; t.Uogonek = 722; t.Aacute = 722; t.Adieresis = 722; t.egrave = 444; t.zacute = 444; t.iogonek = 278; t.Oacute = 722; t.oacute = 500; t.amacron = 444; t.sacute = 389; t.idieresis = 278; t.Ocircumflex = 722; t.Ugrave = 722; t.Delta = 612; t.thorn = 500; t.twosuperior = 300; t.Odieresis = 722; t.mu = 500; t.igrave = 278; t.ohungarumlaut = 500; t.Eogonek = 611; t.dcroat = 500; t.threequarters = 750; t.Scedilla = 556; t.lcaron = 344; t.Kcommaaccent = 722; t.Lacute = 611; t.trademark = 980; t.edotaccent = 444; t.Igrave = 333; t.Imacron = 333; t.Lcaron = 611; t.onehalf = 750; t.lessequal = 549; t.ocircumflex = 500; t.ntilde = 500; t.Uhungarumlaut = 722; t.Eacute = 611; t.emacron = 444; t.gbreve = 500; t.onequarter = 750; t.Scaron = 556; t.Scommaaccent = 556; t.Ohungarumlaut = 722; t.degree = 400; t.ograve = 500; t.Ccaron = 667; t.ugrave = 500; t.radical = 453; t.Dcaron = 722; t.rcommaaccent = 333; t.Ntilde = 722; t.otilde = 500; t.Rcommaaccent = 667; t.Lcommaaccent = 611; t.Atilde = 722; t.Aogonek = 722; t.Aring = 722; t.Otilde = 722; t.zdotaccent = 444; t.Ecaron = 611; t.Iogonek = 333; t.kcommaaccent = 500; t.minus = 564; t.Icircumflex = 333; t.ncaron = 500; t.tcommaaccent = 278; t.logicalnot = 564; t.odieresis = 500; t.udieresis = 500; t.notequal = 549; t.gcommaaccent = 500; t.eth = 500; t.zcaron = 444; t.ncommaaccent = 500; t.onesuperior = 300; t.imacron = 278; t.Euro = 500; }); t["Times-Bold"] = (0, _core_utils.getLookupTableFactory)(function (t) { t.space = 250; t.exclam = 333; t.quotedbl = 555; t.numbersign = 500; t.dollar = 500; t.percent = 1000; t.ampersand = 833; t.quoteright = 333; t.parenleft = 333; t.parenright = 333; t.asterisk = 500; t.plus = 570; t.comma = 250; t.hyphen = 333; t.period = 250; t.slash = 278; t.zero = 500; t.one = 500; t.two = 500; t.three = 500; t.four = 500; t.five = 500; t.six = 500; t.seven = 500; t.eight = 500; t.nine = 500; t.colon = 333; t.semicolon = 333; t.less = 570; t.equal = 570; t.greater = 570; t.question = 500; t.at = 930; t.A = 722; t.B = 667; t.C = 722; t.D = 722; t.E = 667; t.F = 611; t.G = 778; t.H = 778; t.I = 389; t.J = 500; t.K = 778; t.L = 667; t.M = 944; t.N = 722; t.O = 778; t.P = 611; t.Q = 778; t.R = 722; t.S = 556; t.T = 667; t.U = 722; t.V = 722; t.W = 1000; t.X = 722; t.Y = 722; t.Z = 667; t.bracketleft = 333; t.backslash = 278; t.bracketright = 333; t.asciicircum = 581; t.underscore = 500; t.quoteleft = 333; t.a = 500; t.b = 556; t.c = 444; t.d = 556; t.e = 444; t.f = 333; t.g = 500; t.h = 556; t.i = 278; t.j = 333; t.k = 556; t.l = 278; t.m = 833; t.n = 556; t.o = 500; t.p = 556; t.q = 556; t.r = 444; t.s = 389; t.t = 333; t.u = 556; t.v = 500; t.w = 722; t.x = 500; t.y = 500; t.z = 444; t.braceleft = 394; t.bar = 220; t.braceright = 394; t.asciitilde = 520; t.exclamdown = 333; t.cent = 500; t.sterling = 500; t.fraction = 167; t.yen = 500; t.florin = 500; t.section = 500; t.currency = 500; t.quotesingle = 278; t.quotedblleft = 500; t.guillemotleft = 500; t.guilsinglleft = 333; t.guilsinglright = 333; t.fi = 556; t.fl = 556; t.endash = 500; t.dagger = 500; t.daggerdbl = 500; t.periodcentered = 250; t.paragraph = 540; t.bullet = 350; t.quotesinglbase = 333; t.quotedblbase = 500; t.quotedblright = 500; t.guillemotright = 500; t.ellipsis = 1000; t.perthousand = 1000; t.questiondown = 500; t.grave = 333; t.acute = 333; t.circumflex = 333; t.tilde = 333; t.macron = 333; t.breve = 333; t.dotaccent = 333; t.dieresis = 333; t.ring = 333; t.cedilla = 333; t.hungarumlaut = 333; t.ogonek = 333; t.caron = 333; t.emdash = 1000; t.AE = 1000; t.ordfeminine = 300; t.Lslash = 667; t.Oslash = 778; t.OE = 1000; t.ordmasculine = 330; t.ae = 722; t.dotlessi = 278; t.lslash = 278; t.oslash = 500; t.oe = 722; t.germandbls = 556; t.Idieresis = 389; t.eacute = 444; t.abreve = 500; t.uhungarumlaut = 556; t.ecaron = 444; t.Ydieresis = 722; t.divide = 570; t.Yacute = 722; t.Acircumflex = 722; t.aacute = 500; t.Ucircumflex = 722; t.yacute = 500; t.scommaaccent = 389; t.ecircumflex = 444; t.Uring = 722; t.Udieresis = 722; t.aogonek = 500; t.Uacute = 722; t.uogonek = 556; t.Edieresis = 667; t.Dcroat = 722; t.commaaccent = 250; t.copyright = 747; t.Emacron = 667; t.ccaron = 444; t.aring = 500; t.Ncommaaccent = 722; t.lacute = 278; t.agrave = 500; t.Tcommaaccent = 667; t.Cacute = 722; t.atilde = 500; t.Edotaccent = 667; t.scaron = 389; t.scedilla = 389; t.iacute = 278; t.lozenge = 494; t.Rcaron = 722; t.Gcommaaccent = 778; t.ucircumflex = 556; t.acircumflex = 500; t.Amacron = 722; t.rcaron = 444; t.ccedilla = 444; t.Zdotaccent = 667; t.Thorn = 611; t.Omacron = 778; t.Racute = 722; t.Sacute = 556; t.dcaron = 672; t.Umacron = 722; t.uring = 556; t.threesuperior = 300; t.Ograve = 778; t.Agrave = 722; t.Abreve = 722; t.multiply = 570; t.uacute = 556; t.Tcaron = 667; t.partialdiff = 494; t.ydieresis = 500; t.Nacute = 722; t.icircumflex = 278; t.Ecircumflex = 667; t.adieresis = 500; t.edieresis = 444; t.cacute = 444; t.nacute = 556; t.umacron = 556; t.Ncaron = 722; t.Iacute = 389; t.plusminus = 570; t.brokenbar = 220; t.registered = 747; t.Gbreve = 778; t.Idotaccent = 389; t.summation = 600; t.Egrave = 667; t.racute = 444; t.omacron = 500; t.Zacute = 667; t.Zcaron = 667; t.greaterequal = 549; t.Eth = 722; t.Ccedilla = 722; t.lcommaaccent = 278; t.tcaron = 416; t.eogonek = 444; t.Uogonek = 722; t.Aacute = 722; t.Adieresis = 722; t.egrave = 444; t.zacute = 444; t.iogonek = 278; t.Oacute = 778; t.oacute = 500; t.amacron = 500; t.sacute = 389; t.idieresis = 278; t.Ocircumflex = 778; t.Ugrave = 722; t.Delta = 612; t.thorn = 556; t.twosuperior = 300; t.Odieresis = 778; t.mu = 556; t.igrave = 278; t.ohungarumlaut = 500; t.Eogonek = 667; t.dcroat = 556; t.threequarters = 750; t.Scedilla = 556; t.lcaron = 394; t.Kcommaaccent = 778; t.Lacute = 667; t.trademark = 1000; t.edotaccent = 444; t.Igrave = 389; t.Imacron = 389; t.Lcaron = 667; t.onehalf = 750; t.lessequal = 549; t.ocircumflex = 500; t.ntilde = 556; t.Uhungarumlaut = 722; t.Eacute = 667; t.emacron = 444; t.gbreve = 500; t.onequarter = 750; t.Scaron = 556; t.Scommaaccent = 556; t.Ohungarumlaut = 778; t.degree = 400; t.ograve = 500; t.Ccaron = 722; t.ugrave = 556; t.radical = 549; t.Dcaron = 722; t.rcommaaccent = 444; t.Ntilde = 722; t.otilde = 500; t.Rcommaaccent = 722; t.Lcommaaccent = 667; t.Atilde = 722; t.Aogonek = 722; t.Aring = 722; t.Otilde = 778; t.zdotaccent = 444; t.Ecaron = 667; t.Iogonek = 389; t.kcommaaccent = 556; t.minus = 570; t.Icircumflex = 389; t.ncaron = 556; t.tcommaaccent = 333; t.logicalnot = 570; t.odieresis = 500; t.udieresis = 556; t.notequal = 549; t.gcommaaccent = 500; t.eth = 500; t.zcaron = 444; t.ncommaaccent = 556; t.onesuperior = 300; t.imacron = 278; t.Euro = 500; }); t["Times-BoldItalic"] = (0, _core_utils.getLookupTableFactory)(function (t) { t.space = 250; t.exclam = 389; t.quotedbl = 555; t.numbersign = 500; t.dollar = 500; t.percent = 833; t.ampersand = 778; t.quoteright = 333; t.parenleft = 333; t.parenright = 333; t.asterisk = 500; t.plus = 570; t.comma = 250; t.hyphen = 333; t.period = 250; t.slash = 278; t.zero = 500; t.one = 500; t.two = 500; t.three = 500; t.four = 500; t.five = 500; t.six = 500; t.seven = 500; t.eight = 500; t.nine = 500; t.colon = 333; t.semicolon = 333; t.less = 570; t.equal = 570; t.greater = 570; t.question = 500; t.at = 832; t.A = 667; t.B = 667; t.C = 667; t.D = 722; t.E = 667; t.F = 667; t.G = 722; t.H = 778; t.I = 389; t.J = 500; t.K = 667; t.L = 611; t.M = 889; t.N = 722; t.O = 722; t.P = 611; t.Q = 722; t.R = 667; t.S = 556; t.T = 611; t.U = 722; t.V = 667; t.W = 889; t.X = 667; t.Y = 611; t.Z = 611; t.bracketleft = 333; t.backslash = 278; t.bracketright = 333; t.asciicircum = 570; t.underscore = 500; t.quoteleft = 333; t.a = 500; t.b = 500; t.c = 444; t.d = 500; t.e = 444; t.f = 333; t.g = 500; t.h = 556; t.i = 278; t.j = 278; t.k = 500; t.l = 278; t.m = 778; t.n = 556; t.o = 500; t.p = 500; t.q = 500; t.r = 389; t.s = 389; t.t = 278; t.u = 556; t.v = 444; t.w = 667; t.x = 500; t.y = 444; t.z = 389; t.braceleft = 348; t.bar = 220; t.braceright = 348; t.asciitilde = 570; t.exclamdown = 389; t.cent = 500; t.sterling = 500; t.fraction = 167; t.yen = 500; t.florin = 500; t.section = 500; t.currency = 500; t.quotesingle = 278; t.quotedblleft = 500; t.guillemotleft = 500; t.guilsinglleft = 333; t.guilsinglright = 333; t.fi = 556; t.fl = 556; t.endash = 500; t.dagger = 500; t.daggerdbl = 500; t.periodcentered = 250; t.paragraph = 500; t.bullet = 350; t.quotesinglbase = 333; t.quotedblbase = 500; t.quotedblright = 500; t.guillemotright = 500; t.ellipsis = 1000; t.perthousand = 1000; t.questiondown = 500; t.grave = 333; t.acute = 333; t.circumflex = 333; t.tilde = 333; t.macron = 333; t.breve = 333; t.dotaccent = 333; t.dieresis = 333; t.ring = 333; t.cedilla = 333; t.hungarumlaut = 333; t.ogonek = 333; t.caron = 333; t.emdash = 1000; t.AE = 944; t.ordfeminine = 266; t.Lslash = 611; t.Oslash = 722; t.OE = 944; t.ordmasculine = 300; t.ae = 722; t.dotlessi = 278; t.lslash = 278; t.oslash = 500; t.oe = 722; t.germandbls = 500; t.Idieresis = 389; t.eacute = 444; t.abreve = 500; t.uhungarumlaut = 556; t.ecaron = 444; t.Ydieresis = 611; t.divide = 570; t.Yacute = 611; t.Acircumflex = 667; t.aacute = 500; t.Ucircumflex = 722; t.yacute = 444; t.scommaaccent = 389; t.ecircumflex = 444; t.Uring = 722; t.Udieresis = 722; t.aogonek = 500; t.Uacute = 722; t.uogonek = 556; t.Edieresis = 667; t.Dcroat = 722; t.commaaccent = 250; t.copyright = 747; t.Emacron = 667; t.ccaron = 444; t.aring = 500; t.Ncommaaccent = 722; t.lacute = 278; t.agrave = 500; t.Tcommaaccent = 611; t.Cacute = 667; t.atilde = 500; t.Edotaccent = 667; t.scaron = 389; t.scedilla = 389; t.iacute = 278; t.lozenge = 494; t.Rcaron = 667; t.Gcommaaccent = 722; t.ucircumflex = 556; t.acircumflex = 500; t.Amacron = 667; t.rcaron = 389; t.ccedilla = 444; t.Zdotaccent = 611; t.Thorn = 611; t.Omacron = 722; t.Racute = 667; t.Sacute = 556; t.dcaron = 608; t.Umacron = 722; t.uring = 556; t.threesuperior = 300; t.Ograve = 722; t.Agrave = 667; t.Abreve = 667; t.multiply = 570; t.uacute = 556; t.Tcaron = 611; t.partialdiff = 494; t.ydieresis = 444; t.Nacute = 722; t.icircumflex = 278; t.Ecircumflex = 667; t.adieresis = 500; t.edieresis = 444; t.cacute = 444; t.nacute = 556; t.umacron = 556; t.Ncaron = 722; t.Iacute = 389; t.plusminus = 570; t.brokenbar = 220; t.registered = 747; t.Gbreve = 722; t.Idotaccent = 389; t.summation = 600; t.Egrave = 667; t.racute = 389; t.omacron = 500; t.Zacute = 611; t.Zcaron = 611; t.greaterequal = 549; t.Eth = 722; t.Ccedilla = 667; t.lcommaaccent = 278; t.tcaron = 366; t.eogonek = 444; t.Uogonek = 722; t.Aacute = 667; t.Adieresis = 667; t.egrave = 444; t.zacute = 389; t.iogonek = 278; t.Oacute = 722; t.oacute = 500; t.amacron = 500; t.sacute = 389; t.idieresis = 278; t.Ocircumflex = 722; t.Ugrave = 722; t.Delta = 612; t.thorn = 500; t.twosuperior = 300; t.Odieresis = 722; t.mu = 576; t.igrave = 278; t.ohungarumlaut = 500; t.Eogonek = 667; t.dcroat = 500; t.threequarters = 750; t.Scedilla = 556; t.lcaron = 382; t.Kcommaaccent = 667; t.Lacute = 611; t.trademark = 1000; t.edotaccent = 444; t.Igrave = 389; t.Imacron = 389; t.Lcaron = 611; t.onehalf = 750; t.lessequal = 549; t.ocircumflex = 500; t.ntilde = 556; t.Uhungarumlaut = 722; t.Eacute = 667; t.emacron = 444; t.gbreve = 500; t.onequarter = 750; t.Scaron = 556; t.Scommaaccent = 556; t.Ohungarumlaut = 722; t.degree = 400; t.ograve = 500; t.Ccaron = 667; t.ugrave = 556; t.radical = 549; t.Dcaron = 722; t.rcommaaccent = 389; t.Ntilde = 722; t.otilde = 500; t.Rcommaaccent = 667; t.Lcommaaccent = 611; t.Atilde = 667; t.Aogonek = 667; t.Aring = 667; t.Otilde = 722; t.zdotaccent = 389; t.Ecaron = 667; t.Iogonek = 389; t.kcommaaccent = 500; t.minus = 606; t.Icircumflex = 389; t.ncaron = 556; t.tcommaaccent = 278; t.logicalnot = 606; t.odieresis = 500; t.udieresis = 556; t.notequal = 549; t.gcommaaccent = 500; t.eth = 500; t.zcaron = 389; t.ncommaaccent = 556; t.onesuperior = 300; t.imacron = 278; t.Euro = 500; }); t["Times-Italic"] = (0, _core_utils.getLookupTableFactory)(function (t) { t.space = 250; t.exclam = 333; t.quotedbl = 420; t.numbersign = 500; t.dollar = 500; t.percent = 833; t.ampersand = 778; t.quoteright = 333; t.parenleft = 333; t.parenright = 333; t.asterisk = 500; t.plus = 675; t.comma = 250; t.hyphen = 333; t.period = 250; t.slash = 278; t.zero = 500; t.one = 500; t.two = 500; t.three = 500; t.four = 500; t.five = 500; t.six = 500; t.seven = 500; t.eight = 500; t.nine = 500; t.colon = 333; t.semicolon = 333; t.less = 675; t.equal = 675; t.greater = 675; t.question = 500; t.at = 920; t.A = 611; t.B = 611; t.C = 667; t.D = 722; t.E = 611; t.F = 611; t.G = 722; t.H = 722; t.I = 333; t.J = 444; t.K = 667; t.L = 556; t.M = 833; t.N = 667; t.O = 722; t.P = 611; t.Q = 722; t.R = 611; t.S = 500; t.T = 556; t.U = 722; t.V = 611; t.W = 833; t.X = 611; t.Y = 556; t.Z = 556; t.bracketleft = 389; t.backslash = 278; t.bracketright = 389; t.asciicircum = 422; t.underscore = 500; t.quoteleft = 333; t.a = 500; t.b = 500; t.c = 444; t.d = 500; t.e = 444; t.f = 278; t.g = 500; t.h = 500; t.i = 278; t.j = 278; t.k = 444; t.l = 278; t.m = 722; t.n = 500; t.o = 500; t.p = 500; t.q = 500; t.r = 389; t.s = 389; t.t = 278; t.u = 500; t.v = 444; t.w = 667; t.x = 444; t.y = 444; t.z = 389; t.braceleft = 400; t.bar = 275; t.braceright = 400; t.asciitilde = 541; t.exclamdown = 389; t.cent = 500; t.sterling = 500; t.fraction = 167; t.yen = 500; t.florin = 500; t.section = 500; t.currency = 500; t.quotesingle = 214; t.quotedblleft = 556; t.guillemotleft = 500; t.guilsinglleft = 333; t.guilsinglright = 333; t.fi = 500; t.fl = 500; t.endash = 500; t.dagger = 500; t.daggerdbl = 500; t.periodcentered = 250; t.paragraph = 523; t.bullet = 350; t.quotesinglbase = 333; t.quotedblbase = 556; t.quotedblright = 556; t.guillemotright = 500; t.ellipsis = 889; t.perthousand = 1000; t.questiondown = 500; t.grave = 333; t.acute = 333; t.circumflex = 333; t.tilde = 333; t.macron = 333; t.breve = 333; t.dotaccent = 333; t.dieresis = 333; t.ring = 333; t.cedilla = 333; t.hungarumlaut = 333; t.ogonek = 333; t.caron = 333; t.emdash = 889; t.AE = 889; t.ordfeminine = 276; t.Lslash = 556; t.Oslash = 722; t.OE = 944; t.ordmasculine = 310; t.ae = 667; t.dotlessi = 278; t.lslash = 278; t.oslash = 500; t.oe = 667; t.germandbls = 500; t.Idieresis = 333; t.eacute = 444; t.abreve = 500; t.uhungarumlaut = 500; t.ecaron = 444; t.Ydieresis = 556; t.divide = 675; t.Yacute = 556; t.Acircumflex = 611; t.aacute = 500; t.Ucircumflex = 722; t.yacute = 444; t.scommaaccent = 389; t.ecircumflex = 444; t.Uring = 722; t.Udieresis = 722; t.aogonek = 500; t.Uacute = 722; t.uogonek = 500; t.Edieresis = 611; t.Dcroat = 722; t.commaaccent = 250; t.copyright = 760; t.Emacron = 611; t.ccaron = 444; t.aring = 500; t.Ncommaaccent = 667; t.lacute = 278; t.agrave = 500; t.Tcommaaccent = 556; t.Cacute = 667; t.atilde = 500; t.Edotaccent = 611; t.scaron = 389; t.scedilla = 389; t.iacute = 278; t.lozenge = 471; t.Rcaron = 611; t.Gcommaaccent = 722; t.ucircumflex = 500; t.acircumflex = 500; t.Amacron = 611; t.rcaron = 389; t.ccedilla = 444; t.Zdotaccent = 556; t.Thorn = 611; t.Omacron = 722; t.Racute = 611; t.Sacute = 500; t.dcaron = 544; t.Umacron = 722; t.uring = 500; t.threesuperior = 300; t.Ograve = 722; t.Agrave = 611; t.Abreve = 611; t.multiply = 675; t.uacute = 500; t.Tcaron = 556; t.partialdiff = 476; t.ydieresis = 444; t.Nacute = 667; t.icircumflex = 278; t.Ecircumflex = 611; t.adieresis = 500; t.edieresis = 444; t.cacute = 444; t.nacute = 500; t.umacron = 500; t.Ncaron = 667; t.Iacute = 333; t.plusminus = 675; t.brokenbar = 275; t.registered = 760; t.Gbreve = 722; t.Idotaccent = 333; t.summation = 600; t.Egrave = 611; t.racute = 389; t.omacron = 500; t.Zacute = 556; t.Zcaron = 556; t.greaterequal = 549; t.Eth = 722; t.Ccedilla = 667; t.lcommaaccent = 278; t.tcaron = 300; t.eogonek = 444; t.Uogonek = 722; t.Aacute = 611; t.Adieresis = 611; t.egrave = 444; t.zacute = 389; t.iogonek = 278; t.Oacute = 722; t.oacute = 500; t.amacron = 500; t.sacute = 389; t.idieresis = 278; t.Ocircumflex = 722; t.Ugrave = 722; t.Delta = 612; t.thorn = 500; t.twosuperior = 300; t.Odieresis = 722; t.mu = 500; t.igrave = 278; t.ohungarumlaut = 500; t.Eogonek = 611; t.dcroat = 500; t.threequarters = 750; t.Scedilla = 500; t.lcaron = 300; t.Kcommaaccent = 667; t.Lacute = 556; t.trademark = 980; t.edotaccent = 444; t.Igrave = 333; t.Imacron = 333; t.Lcaron = 611; t.onehalf = 750; t.lessequal = 549; t.ocircumflex = 500; t.ntilde = 500; t.Uhungarumlaut = 722; t.Eacute = 611; t.emacron = 444; t.gbreve = 500; t.onequarter = 750; t.Scaron = 500; t.Scommaaccent = 500; t.Ohungarumlaut = 722; t.degree = 400; t.ograve = 500; t.Ccaron = 667; t.ugrave = 500; t.radical = 453; t.Dcaron = 722; t.rcommaaccent = 389; t.Ntilde = 667; t.otilde = 500; t.Rcommaaccent = 611; t.Lcommaaccent = 556; t.Atilde = 611; t.Aogonek = 611; t.Aring = 611; t.Otilde = 722; t.zdotaccent = 389; t.Ecaron = 611; t.Iogonek = 333; t.kcommaaccent = 444; t.minus = 675; t.Icircumflex = 333; t.ncaron = 500; t.tcommaaccent = 278; t.logicalnot = 675; t.odieresis = 500; t.udieresis = 500; t.notequal = 549; t.gcommaaccent = 500; t.eth = 500; t.zcaron = 389; t.ncommaaccent = 500; t.onesuperior = 300; t.imacron = 278; t.Euro = 500; }); t.ZapfDingbats = (0, _core_utils.getLookupTableFactory)(function (t) { t.space = 278; t.a1 = 974; t.a2 = 961; t.a202 = 974; t.a3 = 980; t.a4 = 719; t.a5 = 789; t.a119 = 790; t.a118 = 791; t.a117 = 690; t.a11 = 960; t.a12 = 939; t.a13 = 549; t.a14 = 855; t.a15 = 911; t.a16 = 933; t.a105 = 911; t.a17 = 945; t.a18 = 974; t.a19 = 755; t.a20 = 846; t.a21 = 762; t.a22 = 761; t.a23 = 571; t.a24 = 677; t.a25 = 763; t.a26 = 760; t.a27 = 759; t.a28 = 754; t.a6 = 494; t.a7 = 552; t.a8 = 537; t.a9 = 577; t.a10 = 692; t.a29 = 786; t.a30 = 788; t.a31 = 788; t.a32 = 790; t.a33 = 793; t.a34 = 794; t.a35 = 816; t.a36 = 823; t.a37 = 789; t.a38 = 841; t.a39 = 823; t.a40 = 833; t.a41 = 816; t.a42 = 831; t.a43 = 923; t.a44 = 744; t.a45 = 723; t.a46 = 749; t.a47 = 790; t.a48 = 792; t.a49 = 695; t.a50 = 776; t.a51 = 768; t.a52 = 792; t.a53 = 759; t.a54 = 707; t.a55 = 708; t.a56 = 682; t.a57 = 701; t.a58 = 826; t.a59 = 815; t.a60 = 789; t.a61 = 789; t.a62 = 707; t.a63 = 687; t.a64 = 696; t.a65 = 689; t.a66 = 786; t.a67 = 787; t.a68 = 713; t.a69 = 791; t.a70 = 785; t.a71 = 791; t.a72 = 873; t.a73 = 761; t.a74 = 762; t.a203 = 762; t.a75 = 759; t.a204 = 759; t.a76 = 892; t.a77 = 892; t.a78 = 788; t.a79 = 784; t.a81 = 438; t.a82 = 138; t.a83 = 277; t.a84 = 415; t.a97 = 392; t.a98 = 392; t.a99 = 668; t.a100 = 668; t.a89 = 390; t.a90 = 390; t.a93 = 317; t.a94 = 317; t.a91 = 276; t.a92 = 276; t.a205 = 509; t.a85 = 509; t.a206 = 410; t.a86 = 410; t.a87 = 234; t.a88 = 234; t.a95 = 334; t.a96 = 334; t.a101 = 732; t.a102 = 544; t.a103 = 544; t.a104 = 910; t.a106 = 667; t.a107 = 760; t.a108 = 760; t.a112 = 776; t.a111 = 595; t.a110 = 694; t.a109 = 626; t.a120 = 788; t.a121 = 788; t.a122 = 788; t.a123 = 788; t.a124 = 788; t.a125 = 788; t.a126 = 788; t.a127 = 788; t.a128 = 788; t.a129 = 788; t.a130 = 788; t.a131 = 788; t.a132 = 788; t.a133 = 788; t.a134 = 788; t.a135 = 788; t.a136 = 788; t.a137 = 788; t.a138 = 788; t.a139 = 788; t.a140 = 788; t.a141 = 788; t.a142 = 788; t.a143 = 788; t.a144 = 788; t.a145 = 788; t.a146 = 788; t.a147 = 788; t.a148 = 788; t.a149 = 788; t.a150 = 788; t.a151 = 788; t.a152 = 788; t.a153 = 788; t.a154 = 788; t.a155 = 788; t.a156 = 788; t.a157 = 788; t.a158 = 788; t.a159 = 788; t.a160 = 894; t.a161 = 838; t.a163 = 1016; t.a164 = 458; t.a196 = 748; t.a165 = 924; t.a192 = 748; t.a166 = 918; t.a167 = 927; t.a168 = 928; t.a169 = 928; t.a170 = 834; t.a171 = 873; t.a172 = 828; t.a173 = 924; t.a162 = 924; t.a174 = 917; t.a175 = 930; t.a176 = 931; t.a177 = 463; t.a178 = 883; t.a179 = 836; t.a193 = 836; t.a180 = 867; t.a199 = 867; t.a181 = 696; t.a200 = 696; t.a182 = 874; t.a201 = 874; t.a183 = 760; t.a184 = 946; t.a197 = 771; t.a185 = 865; t.a194 = 771; t.a198 = 888; t.a186 = 967; t.a195 = 888; t.a187 = 831; t.a188 = 873; t.a189 = 927; t.a190 = 970; t.a191 = 918; }); }); exports.getMetrics = getMetrics; /***/ }), /* 61 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.MurmurHash3_64 = void 0; var _util = __w_pdfjs_require__(2); const SEED = 0xc3d2e1f0; const MASK_HIGH = 0xffff0000; const MASK_LOW = 0xffff; class MurmurHash3_64 { constructor(seed) { this.h1 = seed ? seed & 0xffffffff : SEED; this.h2 = seed ? seed & 0xffffffff : SEED; } update(input) { let data, length; if ((0, _util.isString)(input)) { data = new Uint8Array(input.length * 2); length = 0; for (let i = 0, ii = input.length; i < ii; i++) { const code = input.charCodeAt(i); if (code <= 0xff) { data[length++] = code; } else { data[length++] = code >>> 8; data[length++] = code & 0xff; } } } else if ((0, _util.isArrayBuffer)(input)) { data = input.slice(); length = data.byteLength; } else { throw new Error("Wrong data format in MurmurHash3_64_update. " + "Input must be a string or array."); } const blockCounts = length >> 2; const tailLength = length - blockCounts * 4; const dataUint32 = new Uint32Array(data.buffer, 0, blockCounts); let k1 = 0, k2 = 0; let h1 = this.h1, h2 = this.h2; const C1 = 0xcc9e2d51, C2 = 0x1b873593; const C1_LOW = C1 & MASK_LOW, C2_LOW = C2 & MASK_LOW; for (let i = 0; i < blockCounts; i++) { if (i & 1) { k1 = dataUint32[i]; k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW; k1 = k1 << 15 | k1 >>> 17; k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW; h1 ^= k1; h1 = h1 << 13 | h1 >>> 19; h1 = h1 * 5 + 0xe6546b64; } else { k2 = dataUint32[i]; k2 = k2 * C1 & MASK_HIGH | k2 * C1_LOW & MASK_LOW; k2 = k2 << 15 | k2 >>> 17; k2 = k2 * C2 & MASK_HIGH | k2 * C2_LOW & MASK_LOW; h2 ^= k2; h2 = h2 << 13 | h2 >>> 19; h2 = h2 * 5 + 0xe6546b64; } } k1 = 0; switch (tailLength) { case 3: k1 ^= data[blockCounts * 4 + 2] << 16; case 2: k1 ^= data[blockCounts * 4 + 1] << 8; case 1: k1 ^= data[blockCounts * 4]; k1 = k1 * C1 & MASK_HIGH | k1 * C1_LOW & MASK_LOW; k1 = k1 << 15 | k1 >>> 17; k1 = k1 * C2 & MASK_HIGH | k1 * C2_LOW & MASK_LOW; if (blockCounts & 1) { h1 ^= k1; } else { h2 ^= k1; } } this.h1 = h1; this.h2 = h2; } hexdigest() { let h1 = this.h1, h2 = this.h2; h1 ^= h2 >>> 1; h1 = h1 * 0xed558ccd & MASK_HIGH | h1 * 0x8ccd & MASK_LOW; h2 = h2 * 0xff51afd7 & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xafd7ed55 & MASK_HIGH) >>> 16; h1 ^= h2 >>> 1; h1 = h1 * 0x1a85ec53 & MASK_HIGH | h1 * 0xec53 & MASK_LOW; h2 = h2 * 0xc4ceb9fe & MASK_HIGH | ((h2 << 16 | h1 >>> 16) * 0xb9fe1a85 & MASK_HIGH) >>> 16; h1 ^= h2 >>> 1; const hex1 = (h1 >>> 0).toString(16), hex2 = (h2 >>> 0).toString(16); return hex1.padStart(8, "0") + hex2.padStart(8, "0"); } } exports.MurmurHash3_64 = MurmurHash3_64; /***/ }), /* 62 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.OperatorList = void 0; var _util = __w_pdfjs_require__(2); function addState(parentState, pattern, checkFn, iterateFn, processFn) { let state = parentState; for (let i = 0, ii = pattern.length - 1; i < ii; i++) { const item = pattern[i]; state = state[item] || (state[item] = []); } state[pattern[pattern.length - 1]] = { checkFn, iterateFn, processFn }; } function handlePaintSolidColorImageMask(iFirstSave, count, fnArray, argsArray) { const iFirstPIMXO = iFirstSave + 2; let i; for (i = 0; i < count; i++) { const arg = argsArray[iFirstPIMXO + 4 * i]; const imageMask = arg.length === 1 && arg[0]; if (imageMask && imageMask.width === 1 && imageMask.height === 1 && (!imageMask.data.length || imageMask.data.length === 1 && imageMask.data[0] === 0)) { fnArray[iFirstPIMXO + 4 * i] = _util.OPS.paintSolidColorImageMask; continue; } break; } return count - i; } const InitialState = []; addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintInlineImageXObject, _util.OPS.restore], null, function iterateInlineImageGroup(context, i) { const fnArray = context.fnArray; const iFirstSave = context.iCurr - 3; const pos = (i - iFirstSave) % 4; switch (pos) { case 0: return fnArray[i] === _util.OPS.save; case 1: return fnArray[i] === _util.OPS.transform; case 2: return fnArray[i] === _util.OPS.paintInlineImageXObject; case 3: return fnArray[i] === _util.OPS.restore; } throw new Error(`iterateInlineImageGroup - invalid pos: ${pos}`); }, function foundInlineImageGroup(context, i) { const MIN_IMAGES_IN_INLINE_IMAGES_BLOCK = 10; const MAX_IMAGES_IN_INLINE_IMAGES_BLOCK = 200; const MAX_WIDTH = 1000; const IMAGE_PADDING = 1; const fnArray = context.fnArray, argsArray = context.argsArray; const curr = context.iCurr; const iFirstSave = curr - 3; const iFirstTransform = curr - 2; const iFirstPIIXO = curr - 1; const count = Math.min(Math.floor((i - iFirstSave) / 4), MAX_IMAGES_IN_INLINE_IMAGES_BLOCK); if (count < MIN_IMAGES_IN_INLINE_IMAGES_BLOCK) { return i - (i - iFirstSave) % 4; } let maxX = 0; const map = []; let maxLineHeight = 0; let currentX = IMAGE_PADDING, currentY = IMAGE_PADDING; for (let q = 0; q < count; q++) { const transform = argsArray[iFirstTransform + (q << 2)]; const img = argsArray[iFirstPIIXO + (q << 2)][0]; if (currentX + img.width > MAX_WIDTH) { maxX = Math.max(maxX, currentX); currentY += maxLineHeight + 2 * IMAGE_PADDING; currentX = 0; maxLineHeight = 0; } map.push({ transform, x: currentX, y: currentY, w: img.width, h: img.height }); currentX += img.width + 2 * IMAGE_PADDING; maxLineHeight = Math.max(maxLineHeight, img.height); } const imgWidth = Math.max(maxX, currentX) + IMAGE_PADDING; const imgHeight = currentY + maxLineHeight + IMAGE_PADDING; const imgData = new Uint8ClampedArray(imgWidth * imgHeight * 4); const imgRowSize = imgWidth << 2; for (let q = 0; q < count; q++) { const data = argsArray[iFirstPIIXO + (q << 2)][0].data; const rowSize = map[q].w << 2; let dataOffset = 0; let offset = map[q].x + map[q].y * imgWidth << 2; imgData.set(data.subarray(0, rowSize), offset - imgRowSize); for (let k = 0, kk = map[q].h; k < kk; k++) { imgData.set(data.subarray(dataOffset, dataOffset + rowSize), offset); dataOffset += rowSize; offset += imgRowSize; } imgData.set(data.subarray(dataOffset - rowSize, dataOffset), offset); while (offset >= 0) { data[offset - 4] = data[offset]; data[offset - 3] = data[offset + 1]; data[offset - 2] = data[offset + 2]; data[offset - 1] = data[offset + 3]; data[offset + rowSize] = data[offset + rowSize - 4]; data[offset + rowSize + 1] = data[offset + rowSize - 3]; data[offset + rowSize + 2] = data[offset + rowSize - 2]; data[offset + rowSize + 3] = data[offset + rowSize - 1]; offset -= imgRowSize; } } fnArray.splice(iFirstSave, count * 4, _util.OPS.paintInlineImageXObjectGroup); argsArray.splice(iFirstSave, count * 4, [{ width: imgWidth, height: imgHeight, kind: _util.ImageKind.RGBA_32BPP, data: imgData }, map]); return iFirstSave + 1; }); addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintImageMaskXObject, _util.OPS.restore], null, function iterateImageMaskGroup(context, i) { const fnArray = context.fnArray; const iFirstSave = context.iCurr - 3; const pos = (i - iFirstSave) % 4; switch (pos) { case 0: return fnArray[i] === _util.OPS.save; case 1: return fnArray[i] === _util.OPS.transform; case 2: return fnArray[i] === _util.OPS.paintImageMaskXObject; case 3: return fnArray[i] === _util.OPS.restore; } throw new Error(`iterateImageMaskGroup - invalid pos: ${pos}`); }, function foundImageMaskGroup(context, i) { const MIN_IMAGES_IN_MASKS_BLOCK = 10; const MAX_IMAGES_IN_MASKS_BLOCK = 100; const MAX_SAME_IMAGES_IN_MASKS_BLOCK = 1000; const fnArray = context.fnArray, argsArray = context.argsArray; const curr = context.iCurr; const iFirstSave = curr - 3; const iFirstTransform = curr - 2; const iFirstPIMXO = curr - 1; let count = Math.floor((i - iFirstSave) / 4); count = handlePaintSolidColorImageMask(iFirstSave, count, fnArray, argsArray); if (count < MIN_IMAGES_IN_MASKS_BLOCK) { return i - (i - iFirstSave) % 4; } let isSameImage = false; let iTransform, transformArgs; const firstPIMXOArg0 = argsArray[iFirstPIMXO][0]; const firstTransformArg0 = argsArray[iFirstTransform][0], firstTransformArg1 = argsArray[iFirstTransform][1], firstTransformArg2 = argsArray[iFirstTransform][2], firstTransformArg3 = argsArray[iFirstTransform][3]; if (firstTransformArg1 === firstTransformArg2) { isSameImage = true; iTransform = iFirstTransform + 4; let iPIMXO = iFirstPIMXO + 4; for (let q = 1; q < count; q++, iTransform += 4, iPIMXO += 4) { transformArgs = argsArray[iTransform]; if (argsArray[iPIMXO][0] !== firstPIMXOArg0 || transformArgs[0] !== firstTransformArg0 || transformArgs[1] !== firstTransformArg1 || transformArgs[2] !== firstTransformArg2 || transformArgs[3] !== firstTransformArg3) { if (q < MIN_IMAGES_IN_MASKS_BLOCK) { isSameImage = false; } else { count = q; } break; } } } if (isSameImage) { count = Math.min(count, MAX_SAME_IMAGES_IN_MASKS_BLOCK); const positions = new Float32Array(count * 2); iTransform = iFirstTransform; for (let q = 0; q < count; q++, iTransform += 4) { transformArgs = argsArray[iTransform]; positions[q << 1] = transformArgs[4]; positions[(q << 1) + 1] = transformArgs[5]; } fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageMaskXObjectRepeat); argsArray.splice(iFirstSave, count * 4, [firstPIMXOArg0, firstTransformArg0, firstTransformArg1, firstTransformArg2, firstTransformArg3, positions]); } else { count = Math.min(count, MAX_IMAGES_IN_MASKS_BLOCK); const images = []; for (let q = 0; q < count; q++) { transformArgs = argsArray[iFirstTransform + (q << 2)]; const maskParams = argsArray[iFirstPIMXO + (q << 2)][0]; images.push({ data: maskParams.data, width: maskParams.width, height: maskParams.height, transform: transformArgs }); } fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageMaskXObjectGroup); argsArray.splice(iFirstSave, count * 4, [images]); } return iFirstSave + 1; }); addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintImageXObject, _util.OPS.restore], function (context) { const argsArray = context.argsArray; const iFirstTransform = context.iCurr - 2; return argsArray[iFirstTransform][1] === 0 && argsArray[iFirstTransform][2] === 0; }, function iterateImageGroup(context, i) { const fnArray = context.fnArray, argsArray = context.argsArray; const iFirstSave = context.iCurr - 3; const pos = (i - iFirstSave) % 4; switch (pos) { case 0: return fnArray[i] === _util.OPS.save; case 1: if (fnArray[i] !== _util.OPS.transform) { return false; } const iFirstTransform = context.iCurr - 2; const firstTransformArg0 = argsArray[iFirstTransform][0]; const firstTransformArg3 = argsArray[iFirstTransform][3]; if (argsArray[i][0] !== firstTransformArg0 || argsArray[i][1] !== 0 || argsArray[i][2] !== 0 || argsArray[i][3] !== firstTransformArg3) { return false; } return true; case 2: if (fnArray[i] !== _util.OPS.paintImageXObject) { return false; } const iFirstPIXO = context.iCurr - 1; const firstPIXOArg0 = argsArray[iFirstPIXO][0]; if (argsArray[i][0] !== firstPIXOArg0) { return false; } return true; case 3: return fnArray[i] === _util.OPS.restore; } throw new Error(`iterateImageGroup - invalid pos: ${pos}`); }, function (context, i) { const MIN_IMAGES_IN_BLOCK = 3; const MAX_IMAGES_IN_BLOCK = 1000; const fnArray = context.fnArray, argsArray = context.argsArray; const curr = context.iCurr; const iFirstSave = curr - 3; const iFirstTransform = curr - 2; const iFirstPIXO = curr - 1; const firstPIXOArg0 = argsArray[iFirstPIXO][0]; const firstTransformArg0 = argsArray[iFirstTransform][0]; const firstTransformArg3 = argsArray[iFirstTransform][3]; const count = Math.min(Math.floor((i - iFirstSave) / 4), MAX_IMAGES_IN_BLOCK); if (count < MIN_IMAGES_IN_BLOCK) { return i - (i - iFirstSave) % 4; } const positions = new Float32Array(count * 2); let iTransform = iFirstTransform; for (let q = 0; q < count; q++, iTransform += 4) { const transformArgs = argsArray[iTransform]; positions[q << 1] = transformArgs[4]; positions[(q << 1) + 1] = transformArgs[5]; } const args = [firstPIXOArg0, firstTransformArg0, firstTransformArg3, positions]; fnArray.splice(iFirstSave, count * 4, _util.OPS.paintImageXObjectRepeat); argsArray.splice(iFirstSave, count * 4, args); return iFirstSave + 1; }); addState(InitialState, [_util.OPS.beginText, _util.OPS.setFont, _util.OPS.setTextMatrix, _util.OPS.showText, _util.OPS.endText], null, function iterateShowTextGroup(context, i) { const fnArray = context.fnArray, argsArray = context.argsArray; const iFirstSave = context.iCurr - 4; const pos = (i - iFirstSave) % 5; switch (pos) { case 0: return fnArray[i] === _util.OPS.beginText; case 1: return fnArray[i] === _util.OPS.setFont; case 2: return fnArray[i] === _util.OPS.setTextMatrix; case 3: if (fnArray[i] !== _util.OPS.showText) { return false; } const iFirstSetFont = context.iCurr - 3; const firstSetFontArg0 = argsArray[iFirstSetFont][0]; const firstSetFontArg1 = argsArray[iFirstSetFont][1]; if (argsArray[i][0] !== firstSetFontArg0 || argsArray[i][1] !== firstSetFontArg1) { return false; } return true; case 4: return fnArray[i] === _util.OPS.endText; } throw new Error(`iterateShowTextGroup - invalid pos: ${pos}`); }, function (context, i) { const MIN_CHARS_IN_BLOCK = 3; const MAX_CHARS_IN_BLOCK = 1000; const fnArray = context.fnArray, argsArray = context.argsArray; const curr = context.iCurr; const iFirstBeginText = curr - 4; const iFirstSetFont = curr - 3; const iFirstSetTextMatrix = curr - 2; const iFirstShowText = curr - 1; const iFirstEndText = curr; const firstSetFontArg0 = argsArray[iFirstSetFont][0]; const firstSetFontArg1 = argsArray[iFirstSetFont][1]; let count = Math.min(Math.floor((i - iFirstBeginText) / 5), MAX_CHARS_IN_BLOCK); if (count < MIN_CHARS_IN_BLOCK) { return i - (i - iFirstBeginText) % 5; } let iFirst = iFirstBeginText; if (iFirstBeginText >= 4 && fnArray[iFirstBeginText - 4] === fnArray[iFirstSetFont] && fnArray[iFirstBeginText - 3] === fnArray[iFirstSetTextMatrix] && fnArray[iFirstBeginText - 2] === fnArray[iFirstShowText] && fnArray[iFirstBeginText - 1] === fnArray[iFirstEndText] && argsArray[iFirstBeginText - 4][0] === firstSetFontArg0 && argsArray[iFirstBeginText - 4][1] === firstSetFontArg1) { count++; iFirst -= 5; } let iEndText = iFirst + 4; for (let q = 1; q < count; q++) { fnArray.splice(iEndText, 3); argsArray.splice(iEndText, 3); iEndText += 2; } return iEndText + 1; }); class NullOptimizer { constructor(queue) { this.queue = queue; } _optimize() {} push(fn, args) { this.queue.fnArray.push(fn); this.queue.argsArray.push(args); this._optimize(); } flush() {} reset() {} } class QueueOptimizer extends NullOptimizer { constructor(queue) { super(queue); this.state = null; this.context = { iCurr: 0, fnArray: queue.fnArray, argsArray: queue.argsArray }; this.match = null; this.lastProcessed = 0; } _optimize() { const fnArray = this.queue.fnArray; let i = this.lastProcessed, ii = fnArray.length; let state = this.state; let match = this.match; if (!state && !match && i + 1 === ii && !InitialState[fnArray[i]]) { this.lastProcessed = ii; return; } const context = this.context; while (i < ii) { if (match) { const iterate = (0, match.iterateFn)(context, i); if (iterate) { i++; continue; } i = (0, match.processFn)(context, i + 1); ii = fnArray.length; match = null; state = null; if (i >= ii) { break; } } state = (state || InitialState)[fnArray[i]]; if (!state || Array.isArray(state)) { i++; continue; } context.iCurr = i; i++; if (state.checkFn && !(0, state.checkFn)(context)) { state = null; continue; } match = state; state = null; } this.state = state; this.match = match; this.lastProcessed = i; } flush() { while (this.match) { const length = this.queue.fnArray.length; this.lastProcessed = (0, this.match.processFn)(this.context, length); this.match = null; this.state = null; this._optimize(); } } reset() { this.state = null; this.match = null; this.lastProcessed = 0; } } class OperatorList { static get CHUNK_SIZE() { return (0, _util.shadow)(this, "CHUNK_SIZE", 1000); } static get CHUNK_SIZE_ABOUT() { return (0, _util.shadow)(this, "CHUNK_SIZE_ABOUT", this.CHUNK_SIZE - 5); } constructor(intent = 0, streamSink) { this._streamSink = streamSink; this.fnArray = []; this.argsArray = []; if (streamSink && !(intent & _util.RenderingIntentFlag.OPLIST)) { this.optimizer = new QueueOptimizer(this); } else { this.optimizer = new NullOptimizer(this); } this.dependencies = new Set(); this._totalLength = 0; this.weight = 0; this._resolved = streamSink ? null : Promise.resolve(); } get length() { return this.argsArray.length; } get ready() { return this._resolved || this._streamSink.ready; } get totalLength() { return this._totalLength + this.length; } addOp(fn, args) { this.optimizer.push(fn, args); this.weight++; if (this._streamSink) { if (this.weight >= OperatorList.CHUNK_SIZE) { this.flush(); } else if (this.weight >= OperatorList.CHUNK_SIZE_ABOUT && (fn === _util.OPS.restore || fn === _util.OPS.endText)) { this.flush(); } } } addDependency(dependency) { if (this.dependencies.has(dependency)) { return; } this.dependencies.add(dependency); this.addOp(_util.OPS.dependency, [dependency]); } addDependencies(dependencies) { for (const dependency of dependencies) { this.addDependency(dependency); } } addOpList(opList) { if (!(opList instanceof OperatorList)) { (0, _util.warn)('addOpList - ignoring invalid "opList" parameter.'); return; } for (const dependency of opList.dependencies) { this.dependencies.add(dependency); } for (let i = 0, ii = opList.length; i < ii; i++) { this.addOp(opList.fnArray[i], opList.argsArray[i]); } } getIR() { return { fnArray: this.fnArray, argsArray: this.argsArray, length: this.length }; } get _transfers() { const transfers = []; const { fnArray, argsArray, length } = this; for (let i = 0; i < length; i++) { switch (fnArray[i]) { case _util.OPS.paintInlineImageXObject: case _util.OPS.paintInlineImageXObjectGroup: case _util.OPS.paintImageMaskXObject: const arg = argsArray[i][0]; if (!arg.cached) { transfers.push(arg.data.buffer); } break; } } return transfers; } flush(lastChunk = false) { this.optimizer.flush(); const length = this.length; this._totalLength += length; this._streamSink.enqueue({ fnArray: this.fnArray, argsArray: this.argsArray, lastChunk, length }, 1, this._transfers); this.dependencies.clear(); this.fnArray.length = 0; this.argsArray.length = 0; this.weight = 0; this.optimizer.reset(); } } exports.OperatorList = OperatorList; /***/ }), /* 63 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PDFImage = void 0; var _util = __w_pdfjs_require__(2); var _primitives = __w_pdfjs_require__(5); var _colorspace = __w_pdfjs_require__(24); var _decode_stream = __w_pdfjs_require__(29); var _jpeg_stream = __w_pdfjs_require__(37); var _jpx = __w_pdfjs_require__(40); function decodeAndClamp(value, addend, coefficient, max) { value = addend + value * coefficient; if (value < 0) { value = 0; } else if (value > max) { value = max; } return value; } function resizeImageMask(src, bpc, w1, h1, w2, h2) { const length = w2 * h2; let dest; if (bpc <= 8) { dest = new Uint8Array(length); } else if (bpc <= 16) { dest = new Uint16Array(length); } else { dest = new Uint32Array(length); } const xRatio = w1 / w2; const yRatio = h1 / h2; let i, j, py, newIndex = 0, oldIndex; const xScaled = new Uint16Array(w2); const w1Scanline = w1; for (i = 0; i < w2; i++) { xScaled[i] = Math.floor(i * xRatio); } for (i = 0; i < h2; i++) { py = Math.floor(i * yRatio) * w1Scanline; for (j = 0; j < w2; j++) { oldIndex = py + xScaled[j]; dest[newIndex++] = src[oldIndex]; } } return dest; } class PDFImage { constructor({ xref, res, image, isInline = false, smask = null, mask = null, isMask = false, pdfFunctionFactory, localColorSpaceCache }) { this.image = image; const dict = image.dict; const filter = dict.get("F", "Filter"); if ((0, _primitives.isName)(filter)) { switch (filter.name) { case "JPXDecode": const jpxImage = new _jpx.JpxImage(); jpxImage.parseImageProperties(image.stream); image.stream.reset(); image.width = jpxImage.width; image.height = jpxImage.height; image.bitsPerComponent = jpxImage.bitsPerComponent; image.numComps = jpxImage.componentsCount; break; case "JBIG2Decode": image.bitsPerComponent = 1; image.numComps = 1; break; } } let width = dict.get("W", "Width"); let height = dict.get("H", "Height"); if (Number.isInteger(image.width) && image.width > 0 && Number.isInteger(image.height) && image.height > 0 && (image.width !== width || image.height !== height)) { (0, _util.warn)("PDFImage - using the Width/Height of the image data, " + "rather than the image dictionary."); width = image.width; height = image.height; } if (width < 1 || height < 1) { throw new _util.FormatError(`Invalid image width: ${width} or height: ${height}`); } this.width = width; this.height = height; this.interpolate = dict.get("I", "Interpolate"); this.imageMask = dict.get("IM", "ImageMask") || false; this.matte = dict.get("Matte") || false; let bitsPerComponent = image.bitsPerComponent; if (!bitsPerComponent) { bitsPerComponent = dict.get("BPC", "BitsPerComponent"); if (!bitsPerComponent) { if (this.imageMask) { bitsPerComponent = 1; } else { throw new _util.FormatError(`Bits per component missing in image: ${this.imageMask}`); } } } this.bpc = bitsPerComponent; if (!this.imageMask) { let colorSpace = dict.getRaw("CS") || dict.getRaw("ColorSpace"); if (!colorSpace) { (0, _util.info)("JPX images (which do not require color spaces)"); switch (image.numComps) { case 1: colorSpace = _primitives.Name.get("DeviceGray"); break; case 3: colorSpace = _primitives.Name.get("DeviceRGB"); break; case 4: colorSpace = _primitives.Name.get("DeviceCMYK"); break; default: throw new Error(`JPX images with ${image.numComps} color components not supported.`); } } this.colorSpace = _colorspace.ColorSpace.parse({ cs: colorSpace, xref, resources: isInline ? res : null, pdfFunctionFactory, localColorSpaceCache }); this.numComps = this.colorSpace.numComps; } this.decode = dict.getArray("D", "Decode"); this.needsDecode = false; if (this.decode && (this.colorSpace && !this.colorSpace.isDefaultDecode(this.decode, bitsPerComponent) || isMask && !_colorspace.ColorSpace.isDefaultDecode(this.decode, 1))) { this.needsDecode = true; const max = (1 << bitsPerComponent) - 1; this.decodeCoefficients = []; this.decodeAddends = []; const isIndexed = this.colorSpace && this.colorSpace.name === "Indexed"; for (let i = 0, j = 0; i < this.decode.length; i += 2, ++j) { const dmin = this.decode[i]; const dmax = this.decode[i + 1]; this.decodeCoefficients[j] = isIndexed ? (dmax - dmin) / max : dmax - dmin; this.decodeAddends[j] = isIndexed ? dmin : max * dmin; } } if (smask) { this.smask = new PDFImage({ xref, res, image: smask, isInline, pdfFunctionFactory, localColorSpaceCache }); } else if (mask) { if ((0, _primitives.isStream)(mask)) { const maskDict = mask.dict, imageMask = maskDict.get("IM", "ImageMask"); if (!imageMask) { (0, _util.warn)("Ignoring /Mask in image without /ImageMask."); } else { this.mask = new PDFImage({ xref, res, image: mask, isInline, isMask: true, pdfFunctionFactory, localColorSpaceCache }); } } else { this.mask = mask; } } } static async buildImage({ xref, res, image, isInline = false, pdfFunctionFactory, localColorSpaceCache }) { const imageData = image; let smaskData = null; let maskData = null; const smask = image.dict.get("SMask"); const mask = image.dict.get("Mask"); if (smask) { smaskData = smask; } else if (mask) { if ((0, _primitives.isStream)(mask) || Array.isArray(mask)) { maskData = mask; } else { (0, _util.warn)("Unsupported mask format."); } } return new PDFImage({ xref, res, image: imageData, isInline, smask: smaskData, mask: maskData, pdfFunctionFactory, localColorSpaceCache }); } static createMask({ imgArray, width, height, imageIsFromDecodeStream, inverseDecode, interpolate }) { const computedLength = (width + 7 >> 3) * height; const actualLength = imgArray.byteLength; const haveFullData = computedLength === actualLength; let data, i; if (imageIsFromDecodeStream && (!inverseDecode || haveFullData)) { data = imgArray; } else if (!inverseDecode) { data = new Uint8ClampedArray(actualLength); data.set(imgArray); } else { data = new Uint8ClampedArray(computedLength); data.set(imgArray); for (i = actualLength; i < computedLength; i++) { data[i] = 0xff; } } if (inverseDecode) { for (i = 0; i < actualLength; i++) { data[i] ^= 0xff; } } return { data, width, height, interpolate }; } get drawWidth() { return Math.max(this.width, this.smask && this.smask.width || 0, this.mask && this.mask.width || 0); } get drawHeight() { return Math.max(this.height, this.smask && this.smask.height || 0, this.mask && this.mask.height || 0); } decodeBuffer(buffer) { const bpc = this.bpc; const numComps = this.numComps; const decodeAddends = this.decodeAddends; const decodeCoefficients = this.decodeCoefficients; const max = (1 << bpc) - 1; let i, ii; if (bpc === 1) { for (i = 0, ii = buffer.length; i < ii; i++) { buffer[i] = +!buffer[i]; } return; } let index = 0; for (i = 0, ii = this.width * this.height; i < ii; i++) { for (let j = 0; j < numComps; j++) { buffer[index] = decodeAndClamp(buffer[index], decodeAddends[j], decodeCoefficients[j], max); index++; } } } getComponents(buffer) { const bpc = this.bpc; if (bpc === 8) { return buffer; } const width = this.width; const height = this.height; const numComps = this.numComps; const length = width * height * numComps; let bufferPos = 0; let output; if (bpc <= 8) { output = new Uint8Array(length); } else if (bpc <= 16) { output = new Uint16Array(length); } else { output = new Uint32Array(length); } const rowComps = width * numComps; const max = (1 << bpc) - 1; let i = 0, ii, buf; if (bpc === 1) { let mask, loop1End, loop2End; for (let j = 0; j < height; j++) { loop1End = i + (rowComps & ~7); loop2End = i + rowComps; while (i < loop1End) { buf = buffer[bufferPos++]; output[i] = buf >> 7 & 1; output[i + 1] = buf >> 6 & 1; output[i + 2] = buf >> 5 & 1; output[i + 3] = buf >> 4 & 1; output[i + 4] = buf >> 3 & 1; output[i + 5] = buf >> 2 & 1; output[i + 6] = buf >> 1 & 1; output[i + 7] = buf & 1; i += 8; } if (i < loop2End) { buf = buffer[bufferPos++]; mask = 128; while (i < loop2End) { output[i++] = +!!(buf & mask); mask >>= 1; } } } } else { let bits = 0; buf = 0; for (i = 0, ii = length; i < ii; ++i) { if (i % rowComps === 0) { buf = 0; bits = 0; } while (bits < bpc) { buf = buf << 8 | buffer[bufferPos++]; bits += 8; } const remainingBits = bits - bpc; let value = buf >> remainingBits; if (value < 0) { value = 0; } else if (value > max) { value = max; } output[i] = value; buf &= (1 << remainingBits) - 1; bits = remainingBits; } } return output; } fillOpacity(rgbaBuf, width, height, actualHeight, image) { const smask = this.smask; const mask = this.mask; let alphaBuf, sw, sh, i, ii, j; if (smask) { sw = smask.width; sh = smask.height; alphaBuf = new Uint8ClampedArray(sw * sh); smask.fillGrayBuffer(alphaBuf); if (sw !== width || sh !== height) { alphaBuf = resizeImageMask(alphaBuf, smask.bpc, sw, sh, width, height); } } else if (mask) { if (mask instanceof PDFImage) { sw = mask.width; sh = mask.height; alphaBuf = new Uint8ClampedArray(sw * sh); mask.numComps = 1; mask.fillGrayBuffer(alphaBuf); for (i = 0, ii = sw * sh; i < ii; ++i) { alphaBuf[i] = 255 - alphaBuf[i]; } if (sw !== width || sh !== height) { alphaBuf = resizeImageMask(alphaBuf, mask.bpc, sw, sh, width, height); } } else if (Array.isArray(mask)) { alphaBuf = new Uint8ClampedArray(width * height); const numComps = this.numComps; for (i = 0, ii = width * height; i < ii; ++i) { let opacity = 0; const imageOffset = i * numComps; for (j = 0; j < numComps; ++j) { const color = image[imageOffset + j]; const maskOffset = j * 2; if (color < mask[maskOffset] || color > mask[maskOffset + 1]) { opacity = 255; break; } } alphaBuf[i] = opacity; } } else { throw new _util.FormatError("Unknown mask format."); } } if (alphaBuf) { for (i = 0, j = 3, ii = width * actualHeight; i < ii; ++i, j += 4) { rgbaBuf[j] = alphaBuf[i]; } } else { for (i = 0, j = 3, ii = width * actualHeight; i < ii; ++i, j += 4) { rgbaBuf[j] = 255; } } } undoPreblend(buffer, width, height) { const matte = this.smask && this.smask.matte; if (!matte) { return; } const matteRgb = this.colorSpace.getRgb(matte, 0); const matteR = matteRgb[0]; const matteG = matteRgb[1]; const matteB = matteRgb[2]; const length = width * height * 4; for (let i = 0; i < length; i += 4) { const alpha = buffer[i + 3]; if (alpha === 0) { buffer[i] = 255; buffer[i + 1] = 255; buffer[i + 2] = 255; continue; } const k = 255 / alpha; buffer[i] = (buffer[i] - matteR) * k + matteR; buffer[i + 1] = (buffer[i + 1] - matteG) * k + matteG; buffer[i + 2] = (buffer[i + 2] - matteB) * k + matteB; } } createImageData(forceRGBA = false) { const drawWidth = this.drawWidth; const drawHeight = this.drawHeight; const imgData = { width: drawWidth, height: drawHeight, interpolate: this.interpolate, kind: 0, data: null }; const numComps = this.numComps; const originalWidth = this.width; const originalHeight = this.height; const bpc = this.bpc; const rowBytes = originalWidth * numComps * bpc + 7 >> 3; let imgArray; if (!forceRGBA) { let kind; if (this.colorSpace.name === "DeviceGray" && bpc === 1) { kind = _util.ImageKind.GRAYSCALE_1BPP; } else if (this.colorSpace.name === "DeviceRGB" && bpc === 8 && !this.needsDecode) { kind = _util.ImageKind.RGB_24BPP; } if (kind && !this.smask && !this.mask && drawWidth === originalWidth && drawHeight === originalHeight) { imgData.kind = kind; imgArray = this.getImageBytes(originalHeight * rowBytes); if (this.image instanceof _decode_stream.DecodeStream) { imgData.data = imgArray; } else { const newArray = new Uint8ClampedArray(imgArray.length); newArray.set(imgArray); imgData.data = newArray; } if (this.needsDecode) { (0, _util.assert)(kind === _util.ImageKind.GRAYSCALE_1BPP, "PDFImage.createImageData: The image must be grayscale."); const buffer = imgData.data; for (let i = 0, ii = buffer.length; i < ii; i++) { buffer[i] ^= 0xff; } } return imgData; } if (this.image instanceof _jpeg_stream.JpegStream && !this.smask && !this.mask) { let imageLength = originalHeight * rowBytes; switch (this.colorSpace.name) { case "DeviceGray": imageLength *= 3; case "DeviceRGB": case "DeviceCMYK": imgData.kind = _util.ImageKind.RGB_24BPP; imgData.data = this.getImageBytes(imageLength, drawWidth, drawHeight, true); return imgData; } } } imgArray = this.getImageBytes(originalHeight * rowBytes); const actualHeight = 0 | imgArray.length / rowBytes * drawHeight / originalHeight; const comps = this.getComponents(imgArray); let alpha01, maybeUndoPreblend; if (!forceRGBA && !this.smask && !this.mask) { imgData.kind = _util.ImageKind.RGB_24BPP; imgData.data = new Uint8ClampedArray(drawWidth * drawHeight * 3); alpha01 = 0; maybeUndoPreblend = false; } else { imgData.kind = _util.ImageKind.RGBA_32BPP; imgData.data = new Uint8ClampedArray(drawWidth * drawHeight * 4); alpha01 = 1; maybeUndoPreblend = true; this.fillOpacity(imgData.data, drawWidth, drawHeight, actualHeight, comps); } if (this.needsDecode) { this.decodeBuffer(comps); } this.colorSpace.fillRgb(imgData.data, originalWidth, originalHeight, drawWidth, drawHeight, actualHeight, bpc, comps, alpha01); if (maybeUndoPreblend) { this.undoPreblend(imgData.data, drawWidth, actualHeight); } return imgData; } fillGrayBuffer(buffer) { const numComps = this.numComps; if (numComps !== 1) { throw new _util.FormatError(`Reading gray scale from a color image: ${numComps}`); } const width = this.width; const height = this.height; const bpc = this.bpc; const rowBytes = width * numComps * bpc + 7 >> 3; const imgArray = this.getImageBytes(height * rowBytes); const comps = this.getComponents(imgArray); let i, length; if (bpc === 1) { length = width * height; if (this.needsDecode) { for (i = 0; i < length; ++i) { buffer[i] = comps[i] - 1 & 255; } } else { for (i = 0; i < length; ++i) { buffer[i] = -comps[i] & 255; } } return; } if (this.needsDecode) { this.decodeBuffer(comps); } length = width * height; const scale = 255 / ((1 << bpc) - 1); for (i = 0; i < length; ++i) { buffer[i] = scale * comps[i]; } } getImageBytes(length, drawWidth, drawHeight, forceRGB = false) { this.image.reset(); this.image.drawWidth = drawWidth || this.width; this.image.drawHeight = drawHeight || this.height; this.image.forceRGB = !!forceRGB; return this.image.getBytes(length, true); } } exports.PDFImage = PDFImage; /***/ }), /* 64 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.Catalog = void 0; var _primitives = __w_pdfjs_require__(5); var _core_utils = __w_pdfjs_require__(9); var _util = __w_pdfjs_require__(2); var _name_number_tree = __w_pdfjs_require__(65); var _base_stream = __w_pdfjs_require__(6); var _colorspace = __w_pdfjs_require__(24); var _file_spec = __w_pdfjs_require__(66); var _image_utils = __w_pdfjs_require__(58); var _metadata_parser = __w_pdfjs_require__(67); var _struct_tree = __w_pdfjs_require__(69); function fetchDestination(dest) { if (dest instanceof _primitives.Dict) { dest = dest.get("D"); } return Array.isArray(dest) ? dest : null; } class Catalog { constructor(pdfManager, xref) { this.pdfManager = pdfManager; this.xref = xref; this._catDict = xref.getCatalogObj(); if (!(this._catDict instanceof _primitives.Dict)) { throw new _util.FormatError("Catalog object is not a dictionary."); } this.toplevelPagesDict; this._actualNumPages = null; this.fontCache = new _primitives.RefSetCache(); this.builtInCMapCache = new Map(); this.standardFontDataCache = new Map(); this.globalImageCache = new _image_utils.GlobalImageCache(); this.pageKidsCountCache = new _primitives.RefSetCache(); this.pageIndexCache = new _primitives.RefSetCache(); this.nonBlendModesSet = new _primitives.RefSet(); } get version() { const version = this._catDict.get("Version"); return (0, _util.shadow)(this, "version", version instanceof _primitives.Name ? version.name : null); } get lang() { const lang = this._catDict.get("Lang"); return (0, _util.shadow)(this, "lang", typeof lang === "string" ? (0, _util.stringToPDFString)(lang) : null); } get needsRendering() { const needsRendering = this._catDict.get("NeedsRendering"); return (0, _util.shadow)(this, "needsRendering", typeof needsRendering === "boolean" ? needsRendering : false); } get collection() { let collection = null; try { const obj = this._catDict.get("Collection"); if ((0, _primitives.isDict)(obj) && obj.size > 0) { collection = obj; } } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } (0, _util.info)("Cannot fetch Collection entry; assuming no collection is present."); } return (0, _util.shadow)(this, "collection", collection); } get acroForm() { let acroForm = null; try { const obj = this._catDict.get("AcroForm"); if ((0, _primitives.isDict)(obj) && obj.size > 0) { acroForm = obj; } } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } (0, _util.info)("Cannot fetch AcroForm entry; assuming no forms are present."); } return (0, _util.shadow)(this, "acroForm", acroForm); } get acroFormRef() { const value = this._catDict.getRaw("AcroForm"); return (0, _util.shadow)(this, "acroFormRef", (0, _primitives.isRef)(value) ? value : null); } get metadata() { const streamRef = this._catDict.getRaw("Metadata"); if (!(streamRef instanceof _primitives.Ref)) { return (0, _util.shadow)(this, "metadata", null); } let metadata = null; try { const suppressEncryption = !(this.xref.encrypt && this.xref.encrypt.encryptMetadata); const stream = this.xref.fetch(streamRef, suppressEncryption); if (stream instanceof _base_stream.BaseStream && stream.dict instanceof _primitives.Dict) { const type = stream.dict.get("Type"); const subtype = stream.dict.get("Subtype"); if ((0, _primitives.isName)(type, "Metadata") && (0, _primitives.isName)(subtype, "XML")) { const data = (0, _util.stringToUTF8String)(stream.getString()); if (data) { metadata = new _metadata_parser.MetadataParser(data).serializable; } } } } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } (0, _util.info)(`Skipping invalid Metadata: "${ex}".`); } return (0, _util.shadow)(this, "metadata", metadata); } get markInfo() { let markInfo = null; try { markInfo = this._readMarkInfo(); } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } (0, _util.warn)("Unable to read mark info."); } return (0, _util.shadow)(this, "markInfo", markInfo); } _readMarkInfo() { const obj = this._catDict.get("MarkInfo"); if (!(0, _primitives.isDict)(obj)) { return null; } const markInfo = Object.assign(Object.create(null), { Marked: false, UserProperties: false, Suspects: false }); for (const key in markInfo) { if (!obj.has(key)) { continue; } const value = obj.get(key); if (!(0, _util.isBool)(value)) { continue; } markInfo[key] = value; } return markInfo; } get structTreeRoot() { let structTree = null; try { structTree = this._readStructTreeRoot(); } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } (0, _util.warn)("Unable read to structTreeRoot info."); } return (0, _util.shadow)(this, "structTreeRoot", structTree); } _readStructTreeRoot() { const obj = this._catDict.get("StructTreeRoot"); if (!(0, _primitives.isDict)(obj)) { return null; } const root = new _struct_tree.StructTreeRoot(obj); root.init(); return root; } get toplevelPagesDict() { const pagesObj = this._catDict.get("Pages"); if (!(0, _primitives.isDict)(pagesObj)) { throw new _util.FormatError("Invalid top-level pages dictionary."); } return (0, _util.shadow)(this, "toplevelPagesDict", pagesObj); } get documentOutline() { let obj = null; try { obj = this._readDocumentOutline(); } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } (0, _util.warn)("Unable to read document outline."); } return (0, _util.shadow)(this, "documentOutline", obj); } _readDocumentOutline() { let obj = this._catDict.get("Outlines"); if (!(0, _primitives.isDict)(obj)) { return null; } obj = obj.getRaw("First"); if (!(0, _primitives.isRef)(obj)) { return null; } const root = { items: [] }; const queue = [{ obj, parent: root }]; const processed = new _primitives.RefSet(); processed.put(obj); const xref = this.xref, blackColor = new Uint8ClampedArray(3); while (queue.length > 0) { const i = queue.shift(); const outlineDict = xref.fetchIfRef(i.obj); if (outlineDict === null) { continue; } if (!outlineDict.has("Title")) { throw new _util.FormatError("Invalid outline item encountered."); } const data = { url: null, dest: null }; Catalog.parseDestDictionary({ destDict: outlineDict, resultObj: data, docBaseUrl: this.pdfManager.docBaseUrl }); const title = outlineDict.get("Title"); const flags = outlineDict.get("F") || 0; const color = outlineDict.getArray("C"); const count = outlineDict.get("Count"); let rgbColor = blackColor; if (Array.isArray(color) && color.length === 3 && (color[0] !== 0 || color[1] !== 0 || color[2] !== 0)) { rgbColor = _colorspace.ColorSpace.singletons.rgb.getRgb(color, 0); } const outlineItem = { dest: data.dest, url: data.url, unsafeUrl: data.unsafeUrl, newWindow: data.newWindow, title: (0, _util.stringToPDFString)(title), color: rgbColor, count: Number.isInteger(count) ? count : undefined, bold: !!(flags & 2), italic: !!(flags & 1), items: [] }; i.parent.items.push(outlineItem); obj = outlineDict.getRaw("First"); if ((0, _primitives.isRef)(obj) && !processed.has(obj)) { queue.push({ obj, parent: outlineItem }); processed.put(obj); } obj = outlineDict.getRaw("Next"); if ((0, _primitives.isRef)(obj) && !processed.has(obj)) { queue.push({ obj, parent: i.parent }); processed.put(obj); } } return root.items.length > 0 ? root.items : null; } get permissions() { let permissions = null; try { permissions = this._readPermissions(); } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } (0, _util.warn)("Unable to read permissions."); } return (0, _util.shadow)(this, "permissions", permissions); } _readPermissions() { const encrypt = this.xref.trailer.get("Encrypt"); if (!(0, _primitives.isDict)(encrypt)) { return null; } let flags = encrypt.get("P"); if (!(0, _util.isNum)(flags)) { return null; } flags += 2 ** 32; const permissions = []; for (const key in _util.PermissionFlag) { const value = _util.PermissionFlag[key]; if (flags & value) { permissions.push(value); } } return permissions; } get optionalContentConfig() { let config = null; try { const properties = this._catDict.get("OCProperties"); if (!properties) { return (0, _util.shadow)(this, "optionalContentConfig", null); } const defaultConfig = properties.get("D"); if (!defaultConfig) { return (0, _util.shadow)(this, "optionalContentConfig", null); } const groupsData = properties.get("OCGs"); if (!Array.isArray(groupsData)) { return (0, _util.shadow)(this, "optionalContentConfig", null); } const groups = []; const groupRefs = []; for (const groupRef of groupsData) { if (!(0, _primitives.isRef)(groupRef)) { continue; } groupRefs.push(groupRef); const group = this.xref.fetchIfRef(groupRef); groups.push({ id: groupRef.toString(), name: (0, _util.isString)(group.get("Name")) ? (0, _util.stringToPDFString)(group.get("Name")) : null, intent: (0, _util.isString)(group.get("Intent")) ? (0, _util.stringToPDFString)(group.get("Intent")) : null }); } config = this._readOptionalContentConfig(defaultConfig, groupRefs); config.groups = groups; } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } (0, _util.warn)(`Unable to read optional content config: ${ex}`); } return (0, _util.shadow)(this, "optionalContentConfig", config); } _readOptionalContentConfig(config, contentGroupRefs) { function parseOnOff(refs) { const onParsed = []; if (Array.isArray(refs)) { for (const value of refs) { if (!(0, _primitives.isRef)(value)) { continue; } if (contentGroupRefs.includes(value)) { onParsed.push(value.toString()); } } } return onParsed; } function parseOrder(refs, nestedLevels = 0) { if (!Array.isArray(refs)) { return null; } const order = []; for (const value of refs) { if ((0, _primitives.isRef)(value) && contentGroupRefs.includes(value)) { parsedOrderRefs.put(value); order.push(value.toString()); continue; } const nestedOrder = parseNestedOrder(value, nestedLevels); if (nestedOrder) { order.push(nestedOrder); } } if (nestedLevels > 0) { return order; } const hiddenGroups = []; for (const groupRef of contentGroupRefs) { if (parsedOrderRefs.has(groupRef)) { continue; } hiddenGroups.push(groupRef.toString()); } if (hiddenGroups.length) { order.push({ name: null, order: hiddenGroups }); } return order; } function parseNestedOrder(ref, nestedLevels) { if (++nestedLevels > MAX_NESTED_LEVELS) { (0, _util.warn)("parseNestedOrder - reached MAX_NESTED_LEVELS."); return null; } const value = xref.fetchIfRef(ref); if (!Array.isArray(value)) { return null; } const nestedName = xref.fetchIfRef(value[0]); if (typeof nestedName !== "string") { return null; } const nestedOrder = parseOrder(value.slice(1), nestedLevels); if (!nestedOrder || !nestedOrder.length) { return null; } return { name: (0, _util.stringToPDFString)(nestedName), order: nestedOrder }; } const xref = this.xref, parsedOrderRefs = new _primitives.RefSet(), MAX_NESTED_LEVELS = 10; return { name: (0, _util.isString)(config.get("Name")) ? (0, _util.stringToPDFString)(config.get("Name")) : null, creator: (0, _util.isString)(config.get("Creator")) ? (0, _util.stringToPDFString)(config.get("Creator")) : null, baseState: (0, _primitives.isName)(config.get("BaseState")) ? config.get("BaseState").name : null, on: parseOnOff(config.get("ON")), off: parseOnOff(config.get("OFF")), order: parseOrder(config.get("Order")), groups: null }; } setActualNumPages(num = null) { this._actualNumPages = num; } get hasActualNumPages() { return this._actualNumPages !== null; } get _pagesCount() { const obj = this.toplevelPagesDict.get("Count"); if (!Number.isInteger(obj)) { throw new _util.FormatError("Page count in top-level pages dictionary is not an integer."); } return (0, _util.shadow)(this, "_pagesCount", obj); } get numPages() { return this.hasActualNumPages ? this._actualNumPages : this._pagesCount; } get destinations() { const obj = this._readDests(), dests = Object.create(null); if (obj instanceof _name_number_tree.NameTree) { for (const [key, value] of obj.getAll()) { const dest = fetchDestination(value); if (dest) { dests[key] = dest; } } } else if (obj instanceof _primitives.Dict) { obj.forEach(function (key, value) { const dest = fetchDestination(value); if (dest) { dests[key] = dest; } }); } return (0, _util.shadow)(this, "destinations", dests); } getDestination(id) { const obj = this._readDests(); if (obj instanceof _name_number_tree.NameTree) { const dest = fetchDestination(obj.get(id)); if (dest) { return dest; } const allDest = this.destinations[id]; if (allDest) { (0, _util.warn)(`Found "${id}" at an incorrect position in the NameTree.`); return allDest; } } else if (obj instanceof _primitives.Dict) { const dest = fetchDestination(obj.get(id)); if (dest) { return dest; } } return null; } _readDests() { const obj = this._catDict.get("Names"); if (obj && obj.has("Dests")) { return new _name_number_tree.NameTree(obj.getRaw("Dests"), this.xref); } else if (this._catDict.has("Dests")) { return this._catDict.get("Dests"); } return undefined; } get pageLabels() { let obj = null; try { obj = this._readPageLabels(); } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } (0, _util.warn)("Unable to read page labels."); } return (0, _util.shadow)(this, "pageLabels", obj); } _readPageLabels() { const obj = this._catDict.getRaw("PageLabels"); if (!obj) { return null; } const pageLabels = new Array(this.numPages); let style = null, prefix = ""; const numberTree = new _name_number_tree.NumberTree(obj, this.xref); const nums = numberTree.getAll(); let currentLabel = "", currentIndex = 1; for (let i = 0, ii = this.numPages; i < ii; i++) { const labelDict = nums.get(i); if (labelDict !== undefined) { if (!(0, _primitives.isDict)(labelDict)) { throw new _util.FormatError("PageLabel is not a dictionary."); } if (labelDict.has("Type") && !(0, _primitives.isName)(labelDict.get("Type"), "PageLabel")) { throw new _util.FormatError("Invalid type in PageLabel dictionary."); } if (labelDict.has("S")) { const s = labelDict.get("S"); if (!(0, _primitives.isName)(s)) { throw new _util.FormatError("Invalid style in PageLabel dictionary."); } style = s.name; } else { style = null; } if (labelDict.has("P")) { const p = labelDict.get("P"); if (!(0, _util.isString)(p)) { throw new _util.FormatError("Invalid prefix in PageLabel dictionary."); } prefix = (0, _util.stringToPDFString)(p); } else { prefix = ""; } if (labelDict.has("St")) { const st = labelDict.get("St"); if (!(Number.isInteger(st) && st >= 1)) { throw new _util.FormatError("Invalid start in PageLabel dictionary."); } currentIndex = st; } else { currentIndex = 1; } } switch (style) { case "D": currentLabel = currentIndex; break; case "R": case "r": currentLabel = (0, _core_utils.toRomanNumerals)(currentIndex, style === "r"); break; case "A": case "a": const LIMIT = 26; const A_UPPER_CASE = 0x41, A_LOWER_CASE = 0x61; const baseCharCode = style === "a" ? A_LOWER_CASE : A_UPPER_CASE; const letterIndex = currentIndex - 1; const character = String.fromCharCode(baseCharCode + letterIndex % LIMIT); const charBuf = []; for (let j = 0, jj = letterIndex / LIMIT | 0; j <= jj; j++) { charBuf.push(character); } currentLabel = charBuf.join(""); break; default: if (style) { throw new _util.FormatError(`Invalid style "${style}" in PageLabel dictionary.`); } currentLabel = ""; } pageLabels[i] = prefix + currentLabel; currentIndex++; } return pageLabels; } get pageLayout() { const obj = this._catDict.get("PageLayout"); let pageLayout = ""; if ((0, _primitives.isName)(obj)) { switch (obj.name) { case "SinglePage": case "OneColumn": case "TwoColumnLeft": case "TwoColumnRight": case "TwoPageLeft": case "TwoPageRight": pageLayout = obj.name; } } return (0, _util.shadow)(this, "pageLayout", pageLayout); } get pageMode() { const obj = this._catDict.get("PageMode"); let pageMode = "UseNone"; if ((0, _primitives.isName)(obj)) { switch (obj.name) { case "UseNone": case "UseOutlines": case "UseThumbs": case "FullScreen": case "UseOC": case "UseAttachments": pageMode = obj.name; } } return (0, _util.shadow)(this, "pageMode", pageMode); } get viewerPreferences() { const ViewerPreferencesValidators = { HideToolbar: _util.isBool, HideMenubar: _util.isBool, HideWindowUI: _util.isBool, FitWindow: _util.isBool, CenterWindow: _util.isBool, DisplayDocTitle: _util.isBool, NonFullScreenPageMode: _primitives.isName, Direction: _primitives.isName, ViewArea: _primitives.isName, ViewClip: _primitives.isName, PrintArea: _primitives.isName, PrintClip: _primitives.isName, PrintScaling: _primitives.isName, Duplex: _primitives.isName, PickTrayByPDFSize: _util.isBool, PrintPageRange: Array.isArray, NumCopies: Number.isInteger }; const obj = this._catDict.get("ViewerPreferences"); let prefs = null; if ((0, _primitives.isDict)(obj)) { for (const key in ViewerPreferencesValidators) { if (!obj.has(key)) { continue; } const value = obj.get(key); if (!ViewerPreferencesValidators[key](value)) { (0, _util.info)(`Bad value in ViewerPreferences for "${key}".`); continue; } let prefValue; switch (key) { case "NonFullScreenPageMode": switch (value.name) { case "UseNone": case "UseOutlines": case "UseThumbs": case "UseOC": prefValue = value.name; break; default: prefValue = "UseNone"; } break; case "Direction": switch (value.name) { case "L2R": case "R2L": prefValue = value.name; break; default: prefValue = "L2R"; } break; case "ViewArea": case "ViewClip": case "PrintArea": case "PrintClip": switch (value.name) { case "MediaBox": case "CropBox": case "BleedBox": case "TrimBox": case "ArtBox": prefValue = value.name; break; default: prefValue = "CropBox"; } break; case "PrintScaling": switch (value.name) { case "None": case "AppDefault": prefValue = value.name; break; default: prefValue = "AppDefault"; } break; case "Duplex": switch (value.name) { case "Simplex": case "DuplexFlipShortEdge": case "DuplexFlipLongEdge": prefValue = value.name; break; default: prefValue = "None"; } break; case "PrintPageRange": const length = value.length; if (length % 2 !== 0) { break; } const isValid = value.every((page, i, arr) => { return Number.isInteger(page) && page > 0 && (i === 0 || page >= arr[i - 1]) && page <= this.numPages; }); if (isValid) { prefValue = value; } break; case "NumCopies": if (value > 0) { prefValue = value; } break; default: if (typeof value !== "boolean") { throw new _util.FormatError(`viewerPreferences - expected a boolean value for: ${key}`); } prefValue = value; } if (prefValue !== undefined) { if (!prefs) { prefs = Object.create(null); } prefs[key] = prefValue; } else { (0, _util.info)(`Bad value in ViewerPreferences for "${key}".`); } } } return (0, _util.shadow)(this, "viewerPreferences", prefs); } get openAction() { const obj = this._catDict.get("OpenAction"); const openAction = Object.create(null); if ((0, _primitives.isDict)(obj)) { const destDict = new _primitives.Dict(this.xref); destDict.set("A", obj); const resultObj = { url: null, dest: null, action: null }; Catalog.parseDestDictionary({ destDict, resultObj }); if (Array.isArray(resultObj.dest)) { openAction.dest = resultObj.dest; } else if (resultObj.action) { openAction.action = resultObj.action; } } else if (Array.isArray(obj)) { openAction.dest = obj; } return (0, _util.shadow)(this, "openAction", (0, _util.objectSize)(openAction) > 0 ? openAction : null); } get attachments() { const obj = this._catDict.get("Names"); let attachments = null; if (obj instanceof _primitives.Dict && obj.has("EmbeddedFiles")) { const nameTree = new _name_number_tree.NameTree(obj.getRaw("EmbeddedFiles"), this.xref); for (const [key, value] of nameTree.getAll()) { const fs = new _file_spec.FileSpec(value, this.xref); if (!attachments) { attachments = Object.create(null); } attachments[(0, _util.stringToPDFString)(key)] = fs.serializable; } } return (0, _util.shadow)(this, "attachments", attachments); } get xfaImages() { const obj = this._catDict.get("Names"); let xfaImages = null; if (obj instanceof _primitives.Dict && obj.has("XFAImages")) { const nameTree = new _name_number_tree.NameTree(obj.getRaw("XFAImages"), this.xref); for (const [key, value] of nameTree.getAll()) { if (!xfaImages) { xfaImages = new _primitives.Dict(this.xref); } xfaImages.set(key, value); } } return (0, _util.shadow)(this, "xfaImages", xfaImages); } _collectJavaScript() { const obj = this._catDict.get("Names"); let javaScript = null; function appendIfJavaScriptDict(name, jsDict) { if (!(jsDict instanceof _primitives.Dict)) { return; } if (!(0, _primitives.isName)(jsDict.get("S"), "JavaScript")) { return; } let js = jsDict.get("JS"); if ((0, _primitives.isStream)(js)) { js = js.getString(); } else if (typeof js !== "string") { return; } if (javaScript === null) { javaScript = new Map(); } javaScript.set(name, (0, _util.stringToPDFString)(js)); } if (obj instanceof _primitives.Dict && obj.has("JavaScript")) { const nameTree = new _name_number_tree.NameTree(obj.getRaw("JavaScript"), this.xref); for (const [key, value] of nameTree.getAll()) { appendIfJavaScriptDict(key, value); } } const openAction = this._catDict.get("OpenAction"); if (openAction) { appendIfJavaScriptDict("OpenAction", openAction); } return javaScript; } get javaScript() { const javaScript = this._collectJavaScript(); return (0, _util.shadow)(this, "javaScript", javaScript ? [...javaScript.values()] : null); } get jsActions() { const javaScript = this._collectJavaScript(); let actions = (0, _core_utils.collectActions)(this.xref, this._catDict, _util.DocumentActionEventType); if (javaScript) { if (!actions) { actions = Object.create(null); } for (const [key, val] of javaScript) { if (key in actions) { actions[key].push(val); } else { actions[key] = [val]; } } } return (0, _util.shadow)(this, "jsActions", actions); } fontFallback(id, handler) { const promises = []; this.fontCache.forEach(function (promise) { promises.push(promise); }); return Promise.all(promises).then(translatedFonts => { for (const translatedFont of translatedFonts) { if (translatedFont.loadedName === id) { translatedFont.fallback(handler); return; } } }); } cleanup(manuallyTriggered = false) { (0, _primitives.clearPrimitiveCaches)(); this.globalImageCache.clear(manuallyTriggered); this.pageKidsCountCache.clear(); this.pageIndexCache.clear(); this.nonBlendModesSet.clear(); const promises = []; this.fontCache.forEach(function (promise) { promises.push(promise); }); return Promise.all(promises).then(translatedFonts => { for (const { dict } of translatedFonts) { delete dict.cacheKey; } this.fontCache.clear(); this.builtInCMapCache.clear(); this.standardFontDataCache.clear(); }); } getPageDict(pageIndex) { const capability = (0, _util.createPromiseCapability)(); const nodesToVisit = [this.toplevelPagesDict]; const visitedNodes = new _primitives.RefSet(); const pagesRef = this._catDict.getRaw("Pages"); if (pagesRef instanceof _primitives.Ref) { visitedNodes.put(pagesRef); } const xref = this.xref, pageKidsCountCache = this.pageKidsCountCache; let currentPageIndex = 0; function next() { while (nodesToVisit.length) { const currentNode = nodesToVisit.pop(); if (currentNode instanceof _primitives.Ref) { const count = pageKidsCountCache.get(currentNode); if (count >= 0 && currentPageIndex + count <= pageIndex) { currentPageIndex += count; continue; } if (visitedNodes.has(currentNode)) { capability.reject(new _util.FormatError("Pages tree contains circular reference.")); return; } visitedNodes.put(currentNode); xref.fetchAsync(currentNode).then(function (obj) { if ((0, _primitives.isDict)(obj, "Page") || (0, _primitives.isDict)(obj) && !obj.has("Kids")) { if (currentNode && !pageKidsCountCache.has(currentNode)) { pageKidsCountCache.put(currentNode, 1); } if (pageIndex === currentPageIndex) { capability.resolve([obj, currentNode]); } else { currentPageIndex++; next(); } return; } nodesToVisit.push(obj); next(); }, capability.reject); return; } if (!(currentNode instanceof _primitives.Dict)) { capability.reject(new _util.FormatError("Page dictionary kid reference points to wrong type of object.")); return; } let count; try { count = currentNode.get("Count"); } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } } if (Number.isInteger(count) && count >= 0) { const objId = currentNode.objId; if (objId && !pageKidsCountCache.has(objId)) { pageKidsCountCache.put(objId, count); } if (currentPageIndex + count <= pageIndex) { currentPageIndex += count; continue; } } let kids; try { kids = currentNode.get("Kids"); } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } } if (!Array.isArray(kids)) { let type; try { type = currentNode.get("Type"); } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } } if ((0, _primitives.isName)(type, "Page") || !currentNode.has("Type") && currentNode.has("Contents")) { if (currentPageIndex === pageIndex) { capability.resolve([currentNode, null]); return; } currentPageIndex++; continue; } capability.reject(new _util.FormatError("Page dictionary kids object is not an array.")); return; } for (let last = kids.length - 1; last >= 0; last--) { nodesToVisit.push(kids[last]); } } capability.reject(new Error(`Page index ${pageIndex} not found.`)); } next(); return capability.promise; } getAllPageDicts(recoveryMode = false) { const queue = [{ currentNode: this.toplevelPagesDict, posInKids: 0 }]; const visitedNodes = new _primitives.RefSet(); const pagesRef = this._catDict.getRaw("Pages"); if (pagesRef instanceof _primitives.Ref) { visitedNodes.put(pagesRef); } const map = new Map(); let pageIndex = 0; function addPageDict(pageDict, pageRef) { map.set(pageIndex++, [pageDict, pageRef]); } function addPageError(error) { map.set(pageIndex++, [error, null]); } while (queue.length > 0) { const queueItem = queue[queue.length - 1]; const { currentNode, posInKids } = queueItem; let kids; try { kids = currentNode.get("Kids"); } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } if (ex instanceof _core_utils.XRefEntryException && !recoveryMode) { throw ex; } addPageError(ex); break; } if (!Array.isArray(kids)) { addPageError(new _util.FormatError("Page dictionary kids object is not an array.")); break; } if (posInKids >= kids.length) { queue.pop(); continue; } const kidObj = kids[posInKids]; let obj; if (kidObj instanceof _primitives.Ref) { try { obj = this.xref.fetch(kidObj); } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } if (ex instanceof _core_utils.XRefEntryException && !recoveryMode) { throw ex; } addPageError(ex); break; } if (visitedNodes.has(kidObj)) { addPageError(new _util.FormatError("Pages tree contains circular reference.")); break; } visitedNodes.put(kidObj); } else { obj = kidObj; } if (!(obj instanceof _primitives.Dict)) { addPageError(new _util.FormatError("Page dictionary kid reference points to wrong type of object.")); break; } if ((0, _primitives.isDict)(obj, "Page") || !obj.has("Kids")) { addPageDict(obj, kidObj instanceof _primitives.Ref ? kidObj : null); } else { queue.push({ currentNode: obj, posInKids: 0 }); } queueItem.posInKids++; } return map; } getPageIndex(pageRef) { const cachedPageIndex = this.pageIndexCache.get(pageRef); if (cachedPageIndex !== undefined) { return Promise.resolve(cachedPageIndex); } const xref = this.xref; function pagesBeforeRef(kidRef) { let total = 0, parentRef; return xref.fetchAsync(kidRef).then(function (node) { if ((0, _primitives.isRefsEqual)(kidRef, pageRef) && !(0, _primitives.isDict)(node, "Page") && !((0, _primitives.isDict)(node) && !node.has("Type") && node.has("Contents"))) { throw new _util.FormatError("The reference does not point to a /Page dictionary."); } if (!node) { return null; } if (!(0, _primitives.isDict)(node)) { throw new _util.FormatError("Node must be a dictionary."); } parentRef = node.getRaw("Parent"); return node.getAsync("Parent"); }).then(function (parent) { if (!parent) { return null; } if (!(0, _primitives.isDict)(parent)) { throw new _util.FormatError("Parent must be a dictionary."); } return parent.getAsync("Kids"); }).then(function (kids) { if (!kids) { return null; } const kidPromises = []; let found = false; for (let i = 0, ii = kids.length; i < ii; i++) { const kid = kids[i]; if (!(0, _primitives.isRef)(kid)) { throw new _util.FormatError("Kid must be a reference."); } if ((0, _primitives.isRefsEqual)(kid, kidRef)) { found = true; break; } kidPromises.push(xref.fetchAsync(kid).then(function (obj) { if (!(0, _primitives.isDict)(obj)) { throw new _util.FormatError("Kid node must be a dictionary."); } if (obj.has("Count")) { total += obj.get("Count"); } else { total++; } })); } if (!found) { throw new _util.FormatError("Kid reference not found in parent's kids."); } return Promise.all(kidPromises).then(function () { return [total, parentRef]; }); }); } let total = 0; const next = ref => pagesBeforeRef(ref).then(args => { if (!args) { this.pageIndexCache.put(pageRef, total); return total; } const [count, parentRef] = args; total += count; return next(parentRef); }); return next(pageRef); } static parseDestDictionary(params) { const destDict = params.destDict; if (!(0, _primitives.isDict)(destDict)) { (0, _util.warn)("parseDestDictionary: `destDict` must be a dictionary."); return; } const resultObj = params.resultObj; if (typeof resultObj !== "object") { (0, _util.warn)("parseDestDictionary: `resultObj` must be an object."); return; } const docBaseUrl = params.docBaseUrl || null; let action = destDict.get("A"), url, dest; if (!(0, _primitives.isDict)(action)) { if (destDict.has("Dest")) { action = destDict.get("Dest"); } else { action = destDict.get("AA"); if ((0, _primitives.isDict)(action)) { if (action.has("D")) { action = action.get("D"); } else if (action.has("U")) { action = action.get("U"); } } } } if ((0, _primitives.isDict)(action)) { const actionType = action.get("S"); if (!(0, _primitives.isName)(actionType)) { (0, _util.warn)("parseDestDictionary: Invalid type in Action dictionary."); return; } const actionName = actionType.name; switch (actionName) { case "ResetForm": const flags = action.get("Flags"); const include = (((0, _util.isNum)(flags) ? flags : 0) & 1) === 0; const fields = []; const refs = []; for (const obj of action.get("Fields") || []) { if ((0, _primitives.isRef)(obj)) { refs.push(obj.toString()); } else if ((0, _util.isString)(obj)) { fields.push((0, _util.stringToPDFString)(obj)); } } resultObj.resetForm = { fields, refs, include }; break; case "URI": url = action.get("URI"); if (url instanceof _primitives.Name) { url = "/" + url.name; } break; case "GoTo": dest = action.get("D"); break; case "Launch": case "GoToR": const urlDict = action.get("F"); if ((0, _primitives.isDict)(urlDict)) { url = urlDict.get("F") || null; } else if ((0, _util.isString)(urlDict)) { url = urlDict; } let remoteDest = action.get("D"); if (remoteDest) { if ((0, _primitives.isName)(remoteDest)) { remoteDest = remoteDest.name; } if ((0, _util.isString)(url)) { const baseUrl = url.split("#")[0]; if ((0, _util.isString)(remoteDest)) { url = baseUrl + "#" + remoteDest; } else if (Array.isArray(remoteDest)) { url = baseUrl + "#" + JSON.stringify(remoteDest); } } } const newWindow = action.get("NewWindow"); if ((0, _util.isBool)(newWindow)) { resultObj.newWindow = newWindow; } break; case "Named": const namedAction = action.get("N"); if ((0, _primitives.isName)(namedAction)) { resultObj.action = namedAction.name; } break; case "JavaScript": const jsAction = action.get("JS"); let js; if ((0, _primitives.isStream)(jsAction)) { js = jsAction.getString(); } else if ((0, _util.isString)(jsAction)) { js = jsAction; } const jsURL = js && (0, _core_utils.recoverJsURL)((0, _util.stringToPDFString)(js)); if (jsURL) { url = jsURL.url; resultObj.newWindow = jsURL.newWindow; break; } default: if (actionName === "JavaScript" || actionName === "SubmitForm") { break; } (0, _util.warn)(`parseDestDictionary - unsupported action: "${actionName}".`); break; } } else if (destDict.has("Dest")) { dest = destDict.get("Dest"); } if ((0, _util.isString)(url)) { const absoluteUrl = (0, _util.createValidAbsoluteUrl)(url, docBaseUrl, { addDefaultProtocol: true, tryConvertEncoding: true }); if (absoluteUrl) { resultObj.url = absoluteUrl.href; } resultObj.unsafeUrl = url; } if (dest) { if ((0, _primitives.isName)(dest)) { dest = dest.name; } if ((0, _util.isString)(dest) || Array.isArray(dest)) { resultObj.dest = dest; } } } } exports.Catalog = Catalog; /***/ }), /* 65 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.NumberTree = exports.NameTree = void 0; var _util = __w_pdfjs_require__(2); var _primitives = __w_pdfjs_require__(5); class NameOrNumberTree { constructor(root, xref, type) { if (this.constructor === NameOrNumberTree) { (0, _util.unreachable)("Cannot initialize NameOrNumberTree."); } this.root = root; this.xref = xref; this._type = type; } getAll() { const map = new Map(); if (!this.root) { return map; } const xref = this.xref; const processed = new _primitives.RefSet(); processed.put(this.root); const queue = [this.root]; while (queue.length > 0) { const obj = xref.fetchIfRef(queue.shift()); if (!(0, _primitives.isDict)(obj)) { continue; } if (obj.has("Kids")) { const kids = obj.get("Kids"); for (let i = 0, ii = kids.length; i < ii; i++) { const kid = kids[i]; if (processed.has(kid)) { throw new _util.FormatError(`Duplicate entry in "${this._type}" tree.`); } queue.push(kid); processed.put(kid); } continue; } const entries = obj.get(this._type); if (!Array.isArray(entries)) { continue; } for (let i = 0, ii = entries.length; i < ii; i += 2) { map.set(xref.fetchIfRef(entries[i]), xref.fetchIfRef(entries[i + 1])); } } return map; } get(key) { if (!this.root) { return null; } const xref = this.xref; let kidsOrEntries = xref.fetchIfRef(this.root); let loopCount = 0; const MAX_LEVELS = 10; while (kidsOrEntries.has("Kids")) { if (++loopCount > MAX_LEVELS) { (0, _util.warn)(`Search depth limit reached for "${this._type}" tree.`); return null; } const kids = kidsOrEntries.get("Kids"); if (!Array.isArray(kids)) { return null; } let l = 0, r = kids.length - 1; while (l <= r) { const m = l + r >> 1; const kid = xref.fetchIfRef(kids[m]); const limits = kid.get("Limits"); if (key < xref.fetchIfRef(limits[0])) { r = m - 1; } else if (key > xref.fetchIfRef(limits[1])) { l = m + 1; } else { kidsOrEntries = xref.fetchIfRef(kids[m]); break; } } if (l > r) { return null; } } const entries = kidsOrEntries.get(this._type); if (Array.isArray(entries)) { let l = 0, r = entries.length - 2; while (l <= r) { const tmp = l + r >> 1, m = tmp + (tmp & 1); const currentKey = xref.fetchIfRef(entries[m]); if (key < currentKey) { r = m - 2; } else if (key > currentKey) { l = m + 2; } else { return xref.fetchIfRef(entries[m + 1]); } } } return null; } } class NameTree extends NameOrNumberTree { constructor(root, xref) { super(root, xref, "Names"); } } exports.NameTree = NameTree; class NumberTree extends NameOrNumberTree { constructor(root, xref) { super(root, xref, "Nums"); } } exports.NumberTree = NumberTree; /***/ }), /* 66 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.FileSpec = void 0; var _primitives = __w_pdfjs_require__(5); var _util = __w_pdfjs_require__(2); function pickPlatformItem(dict) { if (dict.has("UF")) { return dict.get("UF"); } else if (dict.has("F")) { return dict.get("F"); } else if (dict.has("Unix")) { return dict.get("Unix"); } else if (dict.has("Mac")) { return dict.get("Mac"); } else if (dict.has("DOS")) { return dict.get("DOS"); } return null; } class FileSpec { constructor(root, xref) { if (!root || !(0, _primitives.isDict)(root)) { return; } this.xref = xref; this.root = root; if (root.has("FS")) { this.fs = root.get("FS"); } this.description = root.has("Desc") ? (0, _util.stringToPDFString)(root.get("Desc")) : ""; if (root.has("RF")) { (0, _util.warn)("Related file specifications are not supported"); } this.contentAvailable = true; if (!root.has("EF")) { this.contentAvailable = false; (0, _util.warn)("Non-embedded file specifications are not supported"); } } get filename() { if (!this._filename && this.root) { const filename = pickPlatformItem(this.root) || "unnamed"; this._filename = (0, _util.stringToPDFString)(filename).replace(/\\\\/g, "\\").replace(/\\\//g, "/").replace(/\\/g, "/"); } return this._filename; } get content() { if (!this.contentAvailable) { return null; } if (!this.contentRef && this.root) { this.contentRef = pickPlatformItem(this.root.get("EF")); } let content = null; if (this.contentRef) { const fileObj = this.xref.fetchIfRef(this.contentRef); if (fileObj && (0, _primitives.isStream)(fileObj)) { content = fileObj.getBytes(); } else { (0, _util.warn)("Embedded file specification points to non-existing/invalid content"); } } else { (0, _util.warn)("Embedded file specification does not have a content"); } return content; } get serializable() { return { filename: this.filename, content: this.content }; } } exports.FileSpec = FileSpec; /***/ }), /* 67 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.MetadataParser = void 0; var _xml_parser = __w_pdfjs_require__(68); class MetadataParser { constructor(data) { data = this._repair(data); const parser = new _xml_parser.SimpleXMLParser({ lowerCaseName: true }); const xmlDocument = parser.parseFromString(data); this._metadataMap = new Map(); this._data = data; if (xmlDocument) { this._parse(xmlDocument); } } _repair(data) { return data.replace(/^[^<]+/, "").replace(/>\\376\\377([^<]+)/g, function (all, codes) { const bytes = codes.replace(/\\([0-3])([0-7])([0-7])/g, function (code, d1, d2, d3) { return String.fromCharCode(d1 * 64 + d2 * 8 + d3 * 1); }).replace(/&(amp|apos|gt|lt|quot);/g, function (str, name) { switch (name) { case "amp": return "&"; case "apos": return "'"; case "gt": return ">"; case "lt": return "<"; case "quot": return '"'; } throw new Error(`_repair: ${name} isn't defined.`); }); const charBuf = []; for (let i = 0, ii = bytes.length; i < ii; i += 2) { const code = bytes.charCodeAt(i) * 256 + bytes.charCodeAt(i + 1); if (code >= 32 && code < 127 && code !== 60 && code !== 62 && code !== 38) { charBuf.push(String.fromCharCode(code)); } else { charBuf.push("&#x" + (0x10000 + code).toString(16).substring(1) + ";"); } } return ">" + charBuf.join(""); }); } _getSequence(entry) { const name = entry.nodeName; if (name !== "rdf:bag" && name !== "rdf:seq" && name !== "rdf:alt") { return null; } return entry.childNodes.filter(node => node.nodeName === "rdf:li"); } _parseArray(entry) { if (!entry.hasChildNodes()) { return; } const [seqNode] = entry.childNodes; const sequence = this._getSequence(seqNode) || []; this._metadataMap.set(entry.nodeName, sequence.map(node => node.textContent.trim())); } _parse(xmlDocument) { let rdf = xmlDocument.documentElement; if (rdf.nodeName !== "rdf:rdf") { rdf = rdf.firstChild; while (rdf && rdf.nodeName !== "rdf:rdf") { rdf = rdf.nextSibling; } } if (!rdf || rdf.nodeName !== "rdf:rdf" || !rdf.hasChildNodes()) { return; } for (const desc of rdf.childNodes) { if (desc.nodeName !== "rdf:description") { continue; } for (const entry of desc.childNodes) { const name = entry.nodeName; switch (name) { case "#text": continue; case "dc:creator": case "dc:subject": this._parseArray(entry); continue; } this._metadataMap.set(name, entry.textContent.trim()); } } } get serializable() { return { parsedData: this._metadataMap, rawData: this._data }; } } exports.MetadataParser = MetadataParser; /***/ }), /* 68 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.XMLParserErrorCode = exports.XMLParserBase = exports.SimpleXMLParser = exports.SimpleDOMNode = void 0; var _core_utils = __w_pdfjs_require__(9); const XMLParserErrorCode = { NoError: 0, EndOfDocument: -1, UnterminatedCdat: -2, UnterminatedXmlDeclaration: -3, UnterminatedDoctypeDeclaration: -4, UnterminatedComment: -5, MalformedElement: -6, OutOfMemory: -7, UnterminatedAttributeValue: -8, UnterminatedElement: -9, ElementNeverBegun: -10 }; exports.XMLParserErrorCode = XMLParserErrorCode; function isWhitespace(s, index) { const ch = s[index]; return ch === " " || ch === "\n" || ch === "\r" || ch === "\t"; } function isWhitespaceString(s) { for (let i = 0, ii = s.length; i < ii; i++) { if (!isWhitespace(s, i)) { return false; } } return true; } class XMLParserBase { _resolveEntities(s) { return s.replace(/&([^;]+);/g, (all, entity) => { if (entity.substring(0, 2) === "#x") { return String.fromCodePoint(parseInt(entity.substring(2), 16)); } else if (entity.substring(0, 1) === "#") { return String.fromCodePoint(parseInt(entity.substring(1), 10)); } switch (entity) { case "lt": return "<"; case "gt": return ">"; case "amp": return "&"; case "quot": return '"'; case "apos": return "'"; } return this.onResolveEntity(entity); }); } _parseContent(s, start) { const attributes = []; let pos = start; function skipWs() { while (pos < s.length && isWhitespace(s, pos)) { ++pos; } } while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== ">" && s[pos] !== "/") { ++pos; } const name = s.substring(start, pos); skipWs(); while (pos < s.length && s[pos] !== ">" && s[pos] !== "/" && s[pos] !== "?") { skipWs(); let attrName = "", attrValue = ""; while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== "=") { attrName += s[pos]; ++pos; } skipWs(); if (s[pos] !== "=") { return null; } ++pos; skipWs(); const attrEndChar = s[pos]; if (attrEndChar !== '"' && attrEndChar !== "'") { return null; } const attrEndIndex = s.indexOf(attrEndChar, ++pos); if (attrEndIndex < 0) { return null; } attrValue = s.substring(pos, attrEndIndex); attributes.push({ name: attrName, value: this._resolveEntities(attrValue) }); pos = attrEndIndex + 1; skipWs(); } return { name, attributes, parsed: pos - start }; } _parseProcessingInstruction(s, start) { let pos = start; function skipWs() { while (pos < s.length && isWhitespace(s, pos)) { ++pos; } } while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== ">" && s[pos] !== "?" && s[pos] !== "/") { ++pos; } const name = s.substring(start, pos); skipWs(); const attrStart = pos; while (pos < s.length && (s[pos] !== "?" || s[pos + 1] !== ">")) { ++pos; } const value = s.substring(attrStart, pos); return { name, value, parsed: pos - start }; } parseXml(s) { let i = 0; while (i < s.length) { const ch = s[i]; let j = i; if (ch === "<") { ++j; const ch2 = s[j]; let q; switch (ch2) { case "/": ++j; q = s.indexOf(">", j); if (q < 0) { this.onError(XMLParserErrorCode.UnterminatedElement); return; } this.onEndElement(s.substring(j, q)); j = q + 1; break; case "?": ++j; const pi = this._parseProcessingInstruction(s, j); if (s.substring(j + pi.parsed, j + pi.parsed + 2) !== "?>") { this.onError(XMLParserErrorCode.UnterminatedXmlDeclaration); return; } this.onPi(pi.name, pi.value); j += pi.parsed + 2; break; case "!": if (s.substring(j + 1, j + 3) === "--") { q = s.indexOf("-->", j + 3); if (q < 0) { this.onError(XMLParserErrorCode.UnterminatedComment); return; } this.onComment(s.substring(j + 3, q)); j = q + 3; } else if (s.substring(j + 1, j + 8) === "[CDATA[") { q = s.indexOf("]]>", j + 8); if (q < 0) { this.onError(XMLParserErrorCode.UnterminatedCdat); return; } this.onCdata(s.substring(j + 8, q)); j = q + 3; } else if (s.substring(j + 1, j + 8) === "DOCTYPE") { const q2 = s.indexOf("[", j + 8); let complexDoctype = false; q = s.indexOf(">", j + 8); if (q < 0) { this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration); return; } if (q2 > 0 && q > q2) { q = s.indexOf("]>", j + 8); if (q < 0) { this.onError(XMLParserErrorCode.UnterminatedDoctypeDeclaration); return; } complexDoctype = true; } const doctypeContent = s.substring(j + 8, q + (complexDoctype ? 1 : 0)); this.onDoctype(doctypeContent); j = q + (complexDoctype ? 2 : 1); } else { this.onError(XMLParserErrorCode.MalformedElement); return; } break; default: const content = this._parseContent(s, j); if (content === null) { this.onError(XMLParserErrorCode.MalformedElement); return; } let isClosed = false; if (s.substring(j + content.parsed, j + content.parsed + 2) === "/>") { isClosed = true; } else if (s.substring(j + content.parsed, j + content.parsed + 1) !== ">") { this.onError(XMLParserErrorCode.UnterminatedElement); return; } this.onBeginElement(content.name, content.attributes, isClosed); j += content.parsed + (isClosed ? 2 : 1); break; } } else { while (j < s.length && s[j] !== "<") { j++; } const text = s.substring(i, j); this.onText(this._resolveEntities(text)); } i = j; } } onResolveEntity(name) { return `&${name};`; } onPi(name, value) {} onComment(text) {} onCdata(text) {} onDoctype(doctypeContent) {} onText(text) {} onBeginElement(name, attributes, isEmpty) {} onEndElement(name) {} onError(code) {} } exports.XMLParserBase = XMLParserBase; class SimpleDOMNode { constructor(nodeName, nodeValue) { this.nodeName = nodeName; this.nodeValue = nodeValue; Object.defineProperty(this, "parentNode", { value: null, writable: true }); } get firstChild() { return this.childNodes && this.childNodes[0]; } get nextSibling() { const childNodes = this.parentNode.childNodes; if (!childNodes) { return undefined; } const index = childNodes.indexOf(this); if (index === -1) { return undefined; } return childNodes[index + 1]; } get textContent() { if (!this.childNodes) { return this.nodeValue || ""; } return this.childNodes.map(function (child) { return child.textContent; }).join(""); } hasChildNodes() { return this.childNodes && this.childNodes.length > 0; } searchNode(paths, pos) { if (pos >= paths.length) { return this; } const component = paths[pos]; const stack = []; let node = this; while (true) { if (component.name === node.nodeName) { if (component.pos === 0) { const res = node.searchNode(paths, pos + 1); if (res !== null) { return res; } } else if (stack.length === 0) { return null; } else { const [parent] = stack.pop(); let siblingPos = 0; for (const child of parent.childNodes) { if (component.name === child.nodeName) { if (siblingPos === component.pos) { return child.searchNode(paths, pos + 1); } siblingPos++; } } return node.searchNode(paths, pos + 1); } } if (node.childNodes && node.childNodes.length !== 0) { stack.push([node, 0]); node = node.childNodes[0]; } else if (stack.length === 0) { return null; } else { while (stack.length !== 0) { const [parent, currentPos] = stack.pop(); const newPos = currentPos + 1; if (newPos < parent.childNodes.length) { stack.push([parent, newPos]); node = parent.childNodes[newPos]; break; } } if (stack.length === 0) { return null; } } } } dump(buffer) { if (this.nodeName === "#text") { buffer.push((0, _core_utils.encodeToXmlString)(this.nodeValue)); return; } buffer.push(`<${this.nodeName}`); if (this.attributes) { for (const attribute of this.attributes) { buffer.push(` ${attribute.name}="${(0, _core_utils.encodeToXmlString)(attribute.value)}"`); } } if (this.hasChildNodes()) { buffer.push(">"); for (const child of this.childNodes) { child.dump(buffer); } buffer.push(``); } else if (this.nodeValue) { buffer.push(`>${(0, _core_utils.encodeToXmlString)(this.nodeValue)}`); } else { buffer.push("/>"); } } } exports.SimpleDOMNode = SimpleDOMNode; class SimpleXMLParser extends XMLParserBase { constructor({ hasAttributes = false, lowerCaseName = false }) { super(); this._currentFragment = null; this._stack = null; this._errorCode = XMLParserErrorCode.NoError; this._hasAttributes = hasAttributes; this._lowerCaseName = lowerCaseName; } parseFromString(data) { this._currentFragment = []; this._stack = []; this._errorCode = XMLParserErrorCode.NoError; this.parseXml(data); if (this._errorCode !== XMLParserErrorCode.NoError) { return undefined; } const [documentElement] = this._currentFragment; if (!documentElement) { return undefined; } return { documentElement }; } onText(text) { if (isWhitespaceString(text)) { return; } const node = new SimpleDOMNode("#text", text); this._currentFragment.push(node); } onCdata(text) { const node = new SimpleDOMNode("#text", text); this._currentFragment.push(node); } onBeginElement(name, attributes, isEmpty) { if (this._lowerCaseName) { name = name.toLowerCase(); } const node = new SimpleDOMNode(name); node.childNodes = []; if (this._hasAttributes) { node.attributes = attributes; } this._currentFragment.push(node); if (isEmpty) { return; } this._stack.push(this._currentFragment); this._currentFragment = node.childNodes; } onEndElement(name) { this._currentFragment = this._stack.pop() || []; const lastElement = this._currentFragment[this._currentFragment.length - 1]; if (!lastElement) { return; } for (let i = 0, ii = lastElement.childNodes.length; i < ii; i++) { lastElement.childNodes[i].parentNode = lastElement; } } onError(code) { this._errorCode = code; } } exports.SimpleXMLParser = SimpleXMLParser; /***/ }), /* 69 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.StructTreeRoot = exports.StructTreePage = void 0; var _primitives = __w_pdfjs_require__(5); var _util = __w_pdfjs_require__(2); var _name_number_tree = __w_pdfjs_require__(65); const MAX_DEPTH = 40; const StructElementType = { PAGE_CONTENT: "PAGE_CONTENT", STREAM_CONTENT: "STREAM_CONTENT", OBJECT: "OBJECT", ELEMENT: "ELEMENT" }; class StructTreeRoot { constructor(rootDict) { this.dict = rootDict; this.roleMap = new Map(); } init() { this.readRoleMap(); } readRoleMap() { const roleMapDict = this.dict.get("RoleMap"); if (!(0, _primitives.isDict)(roleMapDict)) { return; } roleMapDict.forEach((key, value) => { if (!(0, _primitives.isName)(value)) { return; } this.roleMap.set(key, value.name); }); } } exports.StructTreeRoot = StructTreeRoot; class StructElementNode { constructor(tree, dict) { this.tree = tree; this.dict = dict; this.kids = []; this.parseKids(); } get role() { const nameObj = this.dict.get("S"); const name = (0, _primitives.isName)(nameObj) ? nameObj.name : ""; const { root } = this.tree; if (root.roleMap.has(name)) { return root.roleMap.get(name); } return name; } parseKids() { let pageObjId = null; const objRef = this.dict.getRaw("Pg"); if ((0, _primitives.isRef)(objRef)) { pageObjId = objRef.toString(); } const kids = this.dict.get("K"); if (Array.isArray(kids)) { for (const kid of kids) { const element = this.parseKid(pageObjId, kid); if (element) { this.kids.push(element); } } } else { const element = this.parseKid(pageObjId, kids); if (element) { this.kids.push(element); } } } parseKid(pageObjId, kid) { if (Number.isInteger(kid)) { if (this.tree.pageDict.objId !== pageObjId) { return null; } return new StructElement({ type: StructElementType.PAGE_CONTENT, mcid: kid, pageObjId }); } let kidDict = null; if ((0, _primitives.isRef)(kid)) { kidDict = this.dict.xref.fetch(kid); } else if ((0, _primitives.isDict)(kid)) { kidDict = kid; } if (!kidDict) { return null; } const pageRef = kidDict.getRaw("Pg"); if ((0, _primitives.isRef)(pageRef)) { pageObjId = pageRef.toString(); } const type = (0, _primitives.isName)(kidDict.get("Type")) ? kidDict.get("Type").name : null; if (type === "MCR") { if (this.tree.pageDict.objId !== pageObjId) { return null; } return new StructElement({ type: StructElementType.STREAM_CONTENT, refObjId: (0, _primitives.isRef)(kidDict.getRaw("Stm")) ? kidDict.getRaw("Stm").toString() : null, pageObjId, mcid: kidDict.get("MCID") }); } if (type === "OBJR") { if (this.tree.pageDict.objId !== pageObjId) { return null; } return new StructElement({ type: StructElementType.OBJECT, refObjId: (0, _primitives.isRef)(kidDict.getRaw("Obj")) ? kidDict.getRaw("Obj").toString() : null, pageObjId }); } return new StructElement({ type: StructElementType.ELEMENT, dict: kidDict }); } } class StructElement { constructor({ type, dict = null, mcid = null, pageObjId = null, refObjId = null }) { this.type = type; this.dict = dict; this.mcid = mcid; this.pageObjId = pageObjId; this.refObjId = refObjId; this.parentNode = null; } } class StructTreePage { constructor(structTreeRoot, pageDict) { this.root = structTreeRoot; this.rootDict = structTreeRoot ? structTreeRoot.dict : null; this.pageDict = pageDict; this.nodes = []; } parse() { if (!this.root || !this.rootDict) { return; } const parentTree = this.rootDict.get("ParentTree"); if (!parentTree) { return; } const id = this.pageDict.get("StructParents"); if (!Number.isInteger(id)) { return; } const numberTree = new _name_number_tree.NumberTree(parentTree, this.rootDict.xref); const parentArray = numberTree.get(id); if (!Array.isArray(parentArray)) { return; } const map = new Map(); for (const ref of parentArray) { if ((0, _primitives.isRef)(ref)) { this.addNode(this.rootDict.xref.fetch(ref), map); } } } addNode(dict, map, level = 0) { if (level > MAX_DEPTH) { (0, _util.warn)("StructTree MAX_DEPTH reached."); return null; } if (map.has(dict)) { return map.get(dict); } const element = new StructElementNode(this, dict); map.set(dict, element); const parent = dict.get("P"); if (!parent || (0, _primitives.isName)(parent.get("Type"), "StructTreeRoot")) { if (!this.addTopLevelNode(dict, element)) { map.delete(dict); } return element; } const parentNode = this.addNode(parent, map, level + 1); if (!parentNode) { return element; } let save = false; for (const kid of parentNode.kids) { if (kid.type === StructElementType.ELEMENT && kid.dict === dict) { kid.parentNode = element; save = true; } } if (!save) { map.delete(dict); } return element; } addTopLevelNode(dict, element) { const obj = this.rootDict.get("K"); if (!obj) { return false; } if ((0, _primitives.isDict)(obj)) { if (obj.objId !== dict.objId) { return false; } this.nodes[0] = element; return true; } if (!Array.isArray(obj)) { return true; } let save = false; for (let i = 0; i < obj.length; i++) { const kidRef = obj[i]; if (kidRef && kidRef.toString() === dict.objId) { this.nodes[i] = element; save = true; } } return save; } get serializable() { function nodeToSerializable(node, parent, level = 0) { if (level > MAX_DEPTH) { (0, _util.warn)("StructTree too deep to be fully serialized."); return; } const obj = Object.create(null); obj.role = node.role; obj.children = []; parent.children.push(obj); const alt = node.dict.get("Alt"); if ((0, _util.isString)(alt)) { obj.alt = (0, _util.stringToPDFString)(alt); } const lang = node.dict.get("Lang"); if ((0, _util.isString)(lang)) { obj.lang = (0, _util.stringToPDFString)(lang); } for (const kid of node.kids) { const kidElement = kid.type === StructElementType.ELEMENT ? kid.parentNode : null; if (kidElement) { nodeToSerializable(kidElement, obj, level + 1); continue; } else if (kid.type === StructElementType.PAGE_CONTENT || kid.type === StructElementType.STREAM_CONTENT) { obj.children.push({ type: "content", id: `page${kid.pageObjId}_mcid${kid.mcid}` }); } else if (kid.type === StructElementType.OBJECT) { obj.children.push({ type: "object", id: kid.refObjId }); } } } const root = Object.create(null); root.children = []; root.role = "Root"; for (const child of this.nodes) { if (!child) { continue; } nodeToSerializable(child, root); } return root; } } exports.StructTreePage = StructTreePage; /***/ }), /* 70 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.ObjectLoader = void 0; var _primitives = __w_pdfjs_require__(5); var _core_utils = __w_pdfjs_require__(9); var _util = __w_pdfjs_require__(2); function mayHaveChildren(value) { return value instanceof _primitives.Ref || value instanceof _primitives.Dict || Array.isArray(value) || (0, _primitives.isStream)(value); } function addChildren(node, nodesToVisit) { if (node instanceof _primitives.Dict) { node = node.getRawValues(); } else if ((0, _primitives.isStream)(node)) { node = node.dict.getRawValues(); } else if (!Array.isArray(node)) { return; } for (const rawValue of node) { if (mayHaveChildren(rawValue)) { nodesToVisit.push(rawValue); } } } class ObjectLoader { constructor(dict, keys, xref) { this.dict = dict; this.keys = keys; this.xref = xref; this.refSet = null; } async load() { if (this.xref.stream.isDataLoaded) { return undefined; } const { keys, dict } = this; this.refSet = new _primitives.RefSet(); const nodesToVisit = []; for (let i = 0, ii = keys.length; i < ii; i++) { const rawValue = dict.getRaw(keys[i]); if (rawValue !== undefined) { nodesToVisit.push(rawValue); } } return this._walk(nodesToVisit); } async _walk(nodesToVisit) { const nodesToRevisit = []; const pendingRequests = []; while (nodesToVisit.length) { let currentNode = nodesToVisit.pop(); if (currentNode instanceof _primitives.Ref) { if (this.refSet.has(currentNode)) { continue; } try { this.refSet.put(currentNode); currentNode = this.xref.fetch(currentNode); } catch (ex) { if (!(ex instanceof _core_utils.MissingDataException)) { (0, _util.warn)(`ObjectLoader._walk - requesting all data: "${ex}".`); this.refSet = null; const { manager } = this.xref.stream; return manager.requestAllChunks(); } nodesToRevisit.push(currentNode); pendingRequests.push({ begin: ex.begin, end: ex.end }); } } if ((0, _primitives.isStream)(currentNode)) { const baseStreams = currentNode.getBaseStreams(); if (baseStreams) { let foundMissingData = false; for (const stream of baseStreams) { if (stream.isDataLoaded) { continue; } foundMissingData = true; pendingRequests.push({ begin: stream.start, end: stream.end }); } if (foundMissingData) { nodesToRevisit.push(currentNode); } } } addChildren(currentNode, nodesToVisit); } if (pendingRequests.length) { await this.xref.stream.manager.requestRanges(pendingRequests); for (const node of nodesToRevisit) { if (node instanceof _primitives.Ref) { this.refSet.remove(node); } } return this._walk(nodesToRevisit); } this.refSet = null; return undefined; } } exports.ObjectLoader = ObjectLoader; /***/ }), /* 71 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.incrementalUpdate = incrementalUpdate; exports.writeDict = writeDict; var _util = __w_pdfjs_require__(2); var _primitives = __w_pdfjs_require__(5); var _core_utils = __w_pdfjs_require__(9); var _xml_parser = __w_pdfjs_require__(68); var _crypto = __w_pdfjs_require__(72); function writeDict(dict, buffer, transform) { buffer.push("<<"); for (const key of dict.getKeys()) { buffer.push(` /${(0, _core_utils.escapePDFName)(key)} `); writeValue(dict.getRaw(key), buffer, transform); } buffer.push(">>"); } function writeStream(stream, buffer, transform) { writeDict(stream.dict, buffer, transform); buffer.push(" stream\n"); let string = stream.getString(); if (transform !== null) { string = transform.encryptString(string); } buffer.push(string, "\nendstream\n"); } function writeArray(array, buffer, transform) { buffer.push("["); let first = true; for (const val of array) { if (!first) { buffer.push(" "); } else { first = false; } writeValue(val, buffer, transform); } buffer.push("]"); } function numberToString(value) { if (Number.isInteger(value)) { return value.toString(); } const roundedValue = Math.round(value * 100); if (roundedValue % 100 === 0) { return (roundedValue / 100).toString(); } if (roundedValue % 10 === 0) { return value.toFixed(1); } return value.toFixed(2); } function writeValue(value, buffer, transform) { if ((0, _primitives.isName)(value)) { buffer.push(`/${(0, _core_utils.escapePDFName)(value.name)}`); } else if ((0, _primitives.isRef)(value)) { buffer.push(`${value.num} ${value.gen} R`); } else if (Array.isArray(value)) { writeArray(value, buffer, transform); } else if (typeof value === "string") { if (transform !== null) { value = transform.encryptString(value); } buffer.push(`(${(0, _util.escapeString)(value)})`); } else if (typeof value === "number") { buffer.push(numberToString(value)); } else if (typeof value === "boolean") { buffer.push(value.toString()); } else if ((0, _primitives.isDict)(value)) { writeDict(value, buffer, transform); } else if ((0, _primitives.isStream)(value)) { writeStream(value, buffer, transform); } else if (value === null) { buffer.push("null"); } else { (0, _util.warn)(`Unhandled value in writer: ${typeof value}, please file a bug.`); } } function writeInt(number, size, offset, buffer) { for (let i = size + offset - 1; i > offset - 1; i--) { buffer[i] = number & 0xff; number >>= 8; } return offset + size; } function writeString(string, offset, buffer) { for (let i = 0, len = string.length; i < len; i++) { buffer[offset + i] = string.charCodeAt(i) & 0xff; } } function computeMD5(filesize, xrefInfo) { const time = Math.floor(Date.now() / 1000); const filename = xrefInfo.filename || ""; const md5Buffer = [time.toString(), filename, filesize.toString()]; let md5BufferLen = md5Buffer.reduce((a, str) => a + str.length, 0); for (const value of Object.values(xrefInfo.info)) { md5Buffer.push(value); md5BufferLen += value.length; } const array = new Uint8Array(md5BufferLen); let offset = 0; for (const str of md5Buffer) { writeString(str, offset, array); offset += str.length; } return (0, _util.bytesToString)((0, _crypto.calculateMD5)(array)); } function writeXFADataForAcroform(str, newRefs) { const xml = new _xml_parser.SimpleXMLParser({ hasAttributes: true }).parseFromString(str); for (const { xfa } of newRefs) { if (!xfa) { continue; } const { path, value } = xfa; if (!path) { continue; } const node = xml.documentElement.searchNode((0, _core_utils.parseXFAPath)(path), 0); if (node) { node.childNodes = [new _xml_parser.SimpleDOMNode("#text", value)]; } else { (0, _util.warn)(`Node not found for path: ${path}`); } } const buffer = []; xml.documentElement.dump(buffer); return buffer.join(""); } function updateXFA({ xfaData, xfaDatasetsRef, hasXfaDatasetsEntry, acroFormRef, acroForm, newRefs, xref, xrefInfo }) { if (xref === null) { return; } if (!hasXfaDatasetsEntry) { if (!acroFormRef) { (0, _util.warn)("XFA - Cannot save it"); return; } const oldXfa = acroForm.get("XFA"); const newXfa = oldXfa.slice(); newXfa.splice(2, 0, "datasets"); newXfa.splice(3, 0, xfaDatasetsRef); acroForm.set("XFA", newXfa); const encrypt = xref.encrypt; let transform = null; if (encrypt) { transform = encrypt.createCipherTransform(acroFormRef.num, acroFormRef.gen); } const buffer = [`${acroFormRef.num} ${acroFormRef.gen} obj\n`]; writeDict(acroForm, buffer, transform); buffer.push("\n"); acroForm.set("XFA", oldXfa); newRefs.push({ ref: acroFormRef, data: buffer.join("") }); } if (xfaData === null) { const datasets = xref.fetchIfRef(xfaDatasetsRef); xfaData = writeXFADataForAcroform(datasets.getString(), newRefs); } const encrypt = xref.encrypt; if (encrypt) { const transform = encrypt.createCipherTransform(xfaDatasetsRef.num, xfaDatasetsRef.gen); xfaData = transform.encryptString(xfaData); } const data = `${xfaDatasetsRef.num} ${xfaDatasetsRef.gen} obj\n` + `<< /Type /EmbeddedFile /Length ${xfaData.length}>>\nstream\n` + xfaData + "\nendstream\nendobj\n"; newRefs.push({ ref: xfaDatasetsRef, data }); } function incrementalUpdate({ originalData, xrefInfo, newRefs, xref = null, hasXfa = false, xfaDatasetsRef = null, hasXfaDatasetsEntry = false, acroFormRef = null, acroForm = null, xfaData = null }) { if (hasXfa) { updateXFA({ xfaData, xfaDatasetsRef, hasXfaDatasetsEntry, acroFormRef, acroForm, newRefs, xref, xrefInfo }); } const newXref = new _primitives.Dict(null); const refForXrefTable = xrefInfo.newRef; let buffer, baseOffset; const lastByte = originalData[originalData.length - 1]; if (lastByte === 0x0a || lastByte === 0x0d) { buffer = []; baseOffset = originalData.length; } else { buffer = ["\n"]; baseOffset = originalData.length + 1; } newXref.set("Size", refForXrefTable.num + 1); newXref.set("Prev", xrefInfo.startXRef); newXref.set("Type", _primitives.Name.get("XRef")); if (xrefInfo.rootRef !== null) { newXref.set("Root", xrefInfo.rootRef); } if (xrefInfo.infoRef !== null) { newXref.set("Info", xrefInfo.infoRef); } if (xrefInfo.encryptRef !== null) { newXref.set("Encrypt", xrefInfo.encryptRef); } newRefs.push({ ref: refForXrefTable, data: "" }); newRefs = newRefs.sort((a, b) => { return a.ref.num - b.ref.num; }); const xrefTableData = [[0, 1, 0xffff]]; const indexes = [0, 1]; let maxOffset = 0; for (const { ref, data } of newRefs) { maxOffset = Math.max(maxOffset, baseOffset); xrefTableData.push([1, baseOffset, Math.min(ref.gen, 0xffff)]); baseOffset += data.length; indexes.push(ref.num, 1); buffer.push(data); } newXref.set("Index", indexes); if (Array.isArray(xrefInfo.fileIds) && xrefInfo.fileIds.length > 0) { const md5 = computeMD5(baseOffset, xrefInfo); newXref.set("ID", [xrefInfo.fileIds[0], md5]); } const offsetSize = Math.ceil(Math.log2(maxOffset) / 8); const sizes = [1, offsetSize, 2]; const structSize = sizes[0] + sizes[1] + sizes[2]; const tableLength = structSize * xrefTableData.length; newXref.set("W", sizes); newXref.set("Length", tableLength); buffer.push(`${refForXrefTable.num} ${refForXrefTable.gen} obj\n`); writeDict(newXref, buffer, null); buffer.push(" stream\n"); const bufferLen = buffer.reduce((a, str) => a + str.length, 0); const footer = `\nendstream\nendobj\nstartxref\n${baseOffset}\n%%EOF\n`; const array = new Uint8Array(originalData.length + bufferLen + tableLength + footer.length); array.set(originalData); let offset = originalData.length; for (const str of buffer) { writeString(str, offset, array); offset += str.length; } for (const [type, objOffset, gen] of xrefTableData) { offset = writeInt(type, sizes[0], offset, array); offset = writeInt(objOffset, sizes[1], offset, array); offset = writeInt(gen, sizes[2], offset, array); } writeString(footer, offset, array); return array; } /***/ }), /* 72 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.calculateSHA256 = exports.calculateMD5 = exports.PDF20 = exports.PDF17 = exports.CipherTransformFactory = exports.ARCFourCipher = exports.AES256Cipher = exports.AES128Cipher = void 0; exports.calculateSHA384 = calculateSHA384; exports.calculateSHA512 = void 0; var _util = __w_pdfjs_require__(2); var _primitives = __w_pdfjs_require__(5); var _decrypt_stream = __w_pdfjs_require__(73); class ARCFourCipher { constructor(key) { this.a = 0; this.b = 0; const s = new Uint8Array(256); const keyLength = key.length; for (let i = 0; i < 256; ++i) { s[i] = i; } for (let i = 0, j = 0; i < 256; ++i) { const tmp = s[i]; j = j + tmp + key[i % keyLength] & 0xff; s[i] = s[j]; s[j] = tmp; } this.s = s; } encryptBlock(data) { let a = this.a, b = this.b; const s = this.s; const n = data.length; const output = new Uint8Array(n); for (let i = 0; i < n; ++i) { a = a + 1 & 0xff; const tmp = s[a]; b = b + tmp & 0xff; const tmp2 = s[b]; s[a] = tmp2; s[b] = tmp; output[i] = data[i] ^ s[tmp + tmp2 & 0xff]; } this.a = a; this.b = b; return output; } decryptBlock(data) { return this.encryptBlock(data); } encrypt(data) { return this.encryptBlock(data); } } exports.ARCFourCipher = ARCFourCipher; const calculateMD5 = function calculateMD5Closure() { const r = new Uint8Array([7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21]); const k = new Int32Array([-680876936, -389564586, 606105819, -1044525330, -176418897, 1200080426, -1473231341, -45705983, 1770035416, -1958414417, -42063, -1990404162, 1804603682, -40341101, -1502002290, 1236535329, -165796510, -1069501632, 643717713, -373897302, -701558691, 38016083, -660478335, -405537848, 568446438, -1019803690, -187363961, 1163531501, -1444681467, -51403784, 1735328473, -1926607734, -378558, -2022574463, 1839030562, -35309556, -1530992060, 1272893353, -155497632, -1094730640, 681279174, -358537222, -722521979, 76029189, -640364487, -421815835, 530742520, -995338651, -198630844, 1126891415, -1416354905, -57434055, 1700485571, -1894986606, -1051523, -2054922799, 1873313359, -30611744, -1560198380, 1309151649, -145523070, -1120210379, 718787259, -343485551]); function hash(data, offset, length) { let h0 = 1732584193, h1 = -271733879, h2 = -1732584194, h3 = 271733878; const paddedLength = length + 72 & ~63; const padded = new Uint8Array(paddedLength); let i, j; for (i = 0; i < length; ++i) { padded[i] = data[offset++]; } padded[i++] = 0x80; const n = paddedLength - 8; while (i < n) { padded[i++] = 0; } padded[i++] = length << 3 & 0xff; padded[i++] = length >> 5 & 0xff; padded[i++] = length >> 13 & 0xff; padded[i++] = length >> 21 & 0xff; padded[i++] = length >>> 29 & 0xff; padded[i++] = 0; padded[i++] = 0; padded[i++] = 0; const w = new Int32Array(16); for (i = 0; i < paddedLength;) { for (j = 0; j < 16; ++j, i += 4) { w[j] = padded[i] | padded[i + 1] << 8 | padded[i + 2] << 16 | padded[i + 3] << 24; } let a = h0, b = h1, c = h2, d = h3, f, g; for (j = 0; j < 64; ++j) { if (j < 16) { f = b & c | ~b & d; g = j; } else if (j < 32) { f = d & b | ~d & c; g = 5 * j + 1 & 15; } else if (j < 48) { f = b ^ c ^ d; g = 3 * j + 5 & 15; } else { f = c ^ (b | ~d); g = 7 * j & 15; } const tmp = d, rotateArg = a + f + k[j] + w[g] | 0, rotate = r[j]; d = c; c = b; b = b + (rotateArg << rotate | rotateArg >>> 32 - rotate) | 0; a = tmp; } h0 = h0 + a | 0; h1 = h1 + b | 0; h2 = h2 + c | 0; h3 = h3 + d | 0; } return new Uint8Array([h0 & 0xFF, h0 >> 8 & 0xFF, h0 >> 16 & 0xFF, h0 >>> 24 & 0xFF, h1 & 0xFF, h1 >> 8 & 0xFF, h1 >> 16 & 0xFF, h1 >>> 24 & 0xFF, h2 & 0xFF, h2 >> 8 & 0xFF, h2 >> 16 & 0xFF, h2 >>> 24 & 0xFF, h3 & 0xFF, h3 >> 8 & 0xFF, h3 >> 16 & 0xFF, h3 >>> 24 & 0xFF]); } return hash; }(); exports.calculateMD5 = calculateMD5; class Word64 { constructor(highInteger, lowInteger) { this.high = highInteger | 0; this.low = lowInteger | 0; } and(word) { this.high &= word.high; this.low &= word.low; } xor(word) { this.high ^= word.high; this.low ^= word.low; } or(word) { this.high |= word.high; this.low |= word.low; } shiftRight(places) { if (places >= 32) { this.low = this.high >>> places - 32 | 0; this.high = 0; } else { this.low = this.low >>> places | this.high << 32 - places; this.high = this.high >>> places | 0; } } shiftLeft(places) { if (places >= 32) { this.high = this.low << places - 32; this.low = 0; } else { this.high = this.high << places | this.low >>> 32 - places; this.low <<= places; } } rotateRight(places) { let low, high; if (places & 32) { high = this.low; low = this.high; } else { low = this.low; high = this.high; } places &= 31; this.low = low >>> places | high << 32 - places; this.high = high >>> places | low << 32 - places; } not() { this.high = ~this.high; this.low = ~this.low; } add(word) { const lowAdd = (this.low >>> 0) + (word.low >>> 0); let highAdd = (this.high >>> 0) + (word.high >>> 0); if (lowAdd > 0xffffffff) { highAdd += 1; } this.low = lowAdd | 0; this.high = highAdd | 0; } copyTo(bytes, offset) { bytes[offset] = this.high >>> 24 & 0xff; bytes[offset + 1] = this.high >> 16 & 0xff; bytes[offset + 2] = this.high >> 8 & 0xff; bytes[offset + 3] = this.high & 0xff; bytes[offset + 4] = this.low >>> 24 & 0xff; bytes[offset + 5] = this.low >> 16 & 0xff; bytes[offset + 6] = this.low >> 8 & 0xff; bytes[offset + 7] = this.low & 0xff; } assign(word) { this.high = word.high; this.low = word.low; } } const calculateSHA256 = function calculateSHA256Closure() { function rotr(x, n) { return x >>> n | x << 32 - n; } function ch(x, y, z) { return x & y ^ ~x & z; } function maj(x, y, z) { return x & y ^ x & z ^ y & z; } function sigma(x) { return rotr(x, 2) ^ rotr(x, 13) ^ rotr(x, 22); } function sigmaPrime(x) { return rotr(x, 6) ^ rotr(x, 11) ^ rotr(x, 25); } function littleSigma(x) { return rotr(x, 7) ^ rotr(x, 18) ^ x >>> 3; } function littleSigmaPrime(x) { return rotr(x, 17) ^ rotr(x, 19) ^ x >>> 10; } const k = [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2]; function hash(data, offset, length) { let h0 = 0x6a09e667, h1 = 0xbb67ae85, h2 = 0x3c6ef372, h3 = 0xa54ff53a, h4 = 0x510e527f, h5 = 0x9b05688c, h6 = 0x1f83d9ab, h7 = 0x5be0cd19; const paddedLength = Math.ceil((length + 9) / 64) * 64; const padded = new Uint8Array(paddedLength); let i, j; for (i = 0; i < length; ++i) { padded[i] = data[offset++]; } padded[i++] = 0x80; const n = paddedLength - 8; while (i < n) { padded[i++] = 0; } padded[i++] = 0; padded[i++] = 0; padded[i++] = 0; padded[i++] = length >>> 29 & 0xff; padded[i++] = length >> 21 & 0xff; padded[i++] = length >> 13 & 0xff; padded[i++] = length >> 5 & 0xff; padded[i++] = length << 3 & 0xff; const w = new Uint32Array(64); for (i = 0; i < paddedLength;) { for (j = 0; j < 16; ++j) { w[j] = padded[i] << 24 | padded[i + 1] << 16 | padded[i + 2] << 8 | padded[i + 3]; i += 4; } for (j = 16; j < 64; ++j) { w[j] = littleSigmaPrime(w[j - 2]) + w[j - 7] + littleSigma(w[j - 15]) + w[j - 16] | 0; } let a = h0, b = h1, c = h2, d = h3, e = h4, f = h5, g = h6, h = h7, t1, t2; for (j = 0; j < 64; ++j) { t1 = h + sigmaPrime(e) + ch(e, f, g) + k[j] + w[j]; t2 = sigma(a) + maj(a, b, c); h = g; g = f; f = e; e = d + t1 | 0; d = c; c = b; b = a; a = t1 + t2 | 0; } h0 = h0 + a | 0; h1 = h1 + b | 0; h2 = h2 + c | 0; h3 = h3 + d | 0; h4 = h4 + e | 0; h5 = h5 + f | 0; h6 = h6 + g | 0; h7 = h7 + h | 0; } return new Uint8Array([h0 >> 24 & 0xFF, h0 >> 16 & 0xFF, h0 >> 8 & 0xFF, h0 & 0xFF, h1 >> 24 & 0xFF, h1 >> 16 & 0xFF, h1 >> 8 & 0xFF, h1 & 0xFF, h2 >> 24 & 0xFF, h2 >> 16 & 0xFF, h2 >> 8 & 0xFF, h2 & 0xFF, h3 >> 24 & 0xFF, h3 >> 16 & 0xFF, h3 >> 8 & 0xFF, h3 & 0xFF, h4 >> 24 & 0xFF, h4 >> 16 & 0xFF, h4 >> 8 & 0xFF, h4 & 0xFF, h5 >> 24 & 0xFF, h5 >> 16 & 0xFF, h5 >> 8 & 0xFF, h5 & 0xFF, h6 >> 24 & 0xFF, h6 >> 16 & 0xFF, h6 >> 8 & 0xFF, h6 & 0xFF, h7 >> 24 & 0xFF, h7 >> 16 & 0xFF, h7 >> 8 & 0xFF, h7 & 0xFF]); } return hash; }(); exports.calculateSHA256 = calculateSHA256; const calculateSHA512 = function calculateSHA512Closure() { function ch(result, x, y, z, tmp) { result.assign(x); result.and(y); tmp.assign(x); tmp.not(); tmp.and(z); result.xor(tmp); } function maj(result, x, y, z, tmp) { result.assign(x); result.and(y); tmp.assign(x); tmp.and(z); result.xor(tmp); tmp.assign(y); tmp.and(z); result.xor(tmp); } function sigma(result, x, tmp) { result.assign(x); result.rotateRight(28); tmp.assign(x); tmp.rotateRight(34); result.xor(tmp); tmp.assign(x); tmp.rotateRight(39); result.xor(tmp); } function sigmaPrime(result, x, tmp) { result.assign(x); result.rotateRight(14); tmp.assign(x); tmp.rotateRight(18); result.xor(tmp); tmp.assign(x); tmp.rotateRight(41); result.xor(tmp); } function littleSigma(result, x, tmp) { result.assign(x); result.rotateRight(1); tmp.assign(x); tmp.rotateRight(8); result.xor(tmp); tmp.assign(x); tmp.shiftRight(7); result.xor(tmp); } function littleSigmaPrime(result, x, tmp) { result.assign(x); result.rotateRight(19); tmp.assign(x); tmp.rotateRight(61); result.xor(tmp); tmp.assign(x); tmp.shiftRight(6); result.xor(tmp); } const k = [new Word64(0x428a2f98, 0xd728ae22), new Word64(0x71374491, 0x23ef65cd), new Word64(0xb5c0fbcf, 0xec4d3b2f), new Word64(0xe9b5dba5, 0x8189dbbc), new Word64(0x3956c25b, 0xf348b538), new Word64(0x59f111f1, 0xb605d019), new Word64(0x923f82a4, 0xaf194f9b), new Word64(0xab1c5ed5, 0xda6d8118), new Word64(0xd807aa98, 0xa3030242), new Word64(0x12835b01, 0x45706fbe), new Word64(0x243185be, 0x4ee4b28c), new Word64(0x550c7dc3, 0xd5ffb4e2), new Word64(0x72be5d74, 0xf27b896f), new Word64(0x80deb1fe, 0x3b1696b1), new Word64(0x9bdc06a7, 0x25c71235), new Word64(0xc19bf174, 0xcf692694), new Word64(0xe49b69c1, 0x9ef14ad2), new Word64(0xefbe4786, 0x384f25e3), new Word64(0x0fc19dc6, 0x8b8cd5b5), new Word64(0x240ca1cc, 0x77ac9c65), new Word64(0x2de92c6f, 0x592b0275), new Word64(0x4a7484aa, 0x6ea6e483), new Word64(0x5cb0a9dc, 0xbd41fbd4), new Word64(0x76f988da, 0x831153b5), new Word64(0x983e5152, 0xee66dfab), new Word64(0xa831c66d, 0x2db43210), new Word64(0xb00327c8, 0x98fb213f), new Word64(0xbf597fc7, 0xbeef0ee4), new Word64(0xc6e00bf3, 0x3da88fc2), new Word64(0xd5a79147, 0x930aa725), new Word64(0x06ca6351, 0xe003826f), new Word64(0x14292967, 0x0a0e6e70), new Word64(0x27b70a85, 0x46d22ffc), new Word64(0x2e1b2138, 0x5c26c926), new Word64(0x4d2c6dfc, 0x5ac42aed), new Word64(0x53380d13, 0x9d95b3df), new Word64(0x650a7354, 0x8baf63de), new Word64(0x766a0abb, 0x3c77b2a8), new Word64(0x81c2c92e, 0x47edaee6), new Word64(0x92722c85, 0x1482353b), new Word64(0xa2bfe8a1, 0x4cf10364), new Word64(0xa81a664b, 0xbc423001), new Word64(0xc24b8b70, 0xd0f89791), new Word64(0xc76c51a3, 0x0654be30), new Word64(0xd192e819, 0xd6ef5218), new Word64(0xd6990624, 0x5565a910), new Word64(0xf40e3585, 0x5771202a), new Word64(0x106aa070, 0x32bbd1b8), new Word64(0x19a4c116, 0xb8d2d0c8), new Word64(0x1e376c08, 0x5141ab53), new Word64(0x2748774c, 0xdf8eeb99), new Word64(0x34b0bcb5, 0xe19b48a8), new Word64(0x391c0cb3, 0xc5c95a63), new Word64(0x4ed8aa4a, 0xe3418acb), new Word64(0x5b9cca4f, 0x7763e373), new Word64(0x682e6ff3, 0xd6b2b8a3), new Word64(0x748f82ee, 0x5defb2fc), new Word64(0x78a5636f, 0x43172f60), new Word64(0x84c87814, 0xa1f0ab72), new Word64(0x8cc70208, 0x1a6439ec), new Word64(0x90befffa, 0x23631e28), new Word64(0xa4506ceb, 0xde82bde9), new Word64(0xbef9a3f7, 0xb2c67915), new Word64(0xc67178f2, 0xe372532b), new Word64(0xca273ece, 0xea26619c), new Word64(0xd186b8c7, 0x21c0c207), new Word64(0xeada7dd6, 0xcde0eb1e), new Word64(0xf57d4f7f, 0xee6ed178), new Word64(0x06f067aa, 0x72176fba), new Word64(0x0a637dc5, 0xa2c898a6), new Word64(0x113f9804, 0xbef90dae), new Word64(0x1b710b35, 0x131c471b), new Word64(0x28db77f5, 0x23047d84), new Word64(0x32caab7b, 0x40c72493), new Word64(0x3c9ebe0a, 0x15c9bebc), new Word64(0x431d67c4, 0x9c100d4c), new Word64(0x4cc5d4be, 0xcb3e42b6), new Word64(0x597f299c, 0xfc657e2a), new Word64(0x5fcb6fab, 0x3ad6faec), new Word64(0x6c44198c, 0x4a475817)]; function hash(data, offset, length, mode384 = false) { let h0, h1, h2, h3, h4, h5, h6, h7; if (!mode384) { h0 = new Word64(0x6a09e667, 0xf3bcc908); h1 = new Word64(0xbb67ae85, 0x84caa73b); h2 = new Word64(0x3c6ef372, 0xfe94f82b); h3 = new Word64(0xa54ff53a, 0x5f1d36f1); h4 = new Word64(0x510e527f, 0xade682d1); h5 = new Word64(0x9b05688c, 0x2b3e6c1f); h6 = new Word64(0x1f83d9ab, 0xfb41bd6b); h7 = new Word64(0x5be0cd19, 0x137e2179); } else { h0 = new Word64(0xcbbb9d5d, 0xc1059ed8); h1 = new Word64(0x629a292a, 0x367cd507); h2 = new Word64(0x9159015a, 0x3070dd17); h3 = new Word64(0x152fecd8, 0xf70e5939); h4 = new Word64(0x67332667, 0xffc00b31); h5 = new Word64(0x8eb44a87, 0x68581511); h6 = new Word64(0xdb0c2e0d, 0x64f98fa7); h7 = new Word64(0x47b5481d, 0xbefa4fa4); } const paddedLength = Math.ceil((length + 17) / 128) * 128; const padded = new Uint8Array(paddedLength); let i, j; for (i = 0; i < length; ++i) { padded[i] = data[offset++]; } padded[i++] = 0x80; const n = paddedLength - 16; while (i < n) { padded[i++] = 0; } padded[i++] = 0; padded[i++] = 0; padded[i++] = 0; padded[i++] = 0; padded[i++] = 0; padded[i++] = 0; padded[i++] = 0; padded[i++] = 0; padded[i++] = 0; padded[i++] = 0; padded[i++] = 0; padded[i++] = length >>> 29 & 0xff; padded[i++] = length >> 21 & 0xff; padded[i++] = length >> 13 & 0xff; padded[i++] = length >> 5 & 0xff; padded[i++] = length << 3 & 0xff; const w = new Array(80); for (i = 0; i < 80; i++) { w[i] = new Word64(0, 0); } let a = new Word64(0, 0), b = new Word64(0, 0), c = new Word64(0, 0); let d = new Word64(0, 0), e = new Word64(0, 0), f = new Word64(0, 0); let g = new Word64(0, 0), h = new Word64(0, 0); const t1 = new Word64(0, 0), t2 = new Word64(0, 0); const tmp1 = new Word64(0, 0), tmp2 = new Word64(0, 0); let tmp3; for (i = 0; i < paddedLength;) { for (j = 0; j < 16; ++j) { w[j].high = padded[i] << 24 | padded[i + 1] << 16 | padded[i + 2] << 8 | padded[i + 3]; w[j].low = padded[i + 4] << 24 | padded[i + 5] << 16 | padded[i + 6] << 8 | padded[i + 7]; i += 8; } for (j = 16; j < 80; ++j) { tmp3 = w[j]; littleSigmaPrime(tmp3, w[j - 2], tmp2); tmp3.add(w[j - 7]); littleSigma(tmp1, w[j - 15], tmp2); tmp3.add(tmp1); tmp3.add(w[j - 16]); } a.assign(h0); b.assign(h1); c.assign(h2); d.assign(h3); e.assign(h4); f.assign(h5); g.assign(h6); h.assign(h7); for (j = 0; j < 80; ++j) { t1.assign(h); sigmaPrime(tmp1, e, tmp2); t1.add(tmp1); ch(tmp1, e, f, g, tmp2); t1.add(tmp1); t1.add(k[j]); t1.add(w[j]); sigma(t2, a, tmp2); maj(tmp1, a, b, c, tmp2); t2.add(tmp1); tmp3 = h; h = g; g = f; f = e; d.add(t1); e = d; d = c; c = b; b = a; tmp3.assign(t1); tmp3.add(t2); a = tmp3; } h0.add(a); h1.add(b); h2.add(c); h3.add(d); h4.add(e); h5.add(f); h6.add(g); h7.add(h); } let result; if (!mode384) { result = new Uint8Array(64); h0.copyTo(result, 0); h1.copyTo(result, 8); h2.copyTo(result, 16); h3.copyTo(result, 24); h4.copyTo(result, 32); h5.copyTo(result, 40); h6.copyTo(result, 48); h7.copyTo(result, 56); } else { result = new Uint8Array(48); h0.copyTo(result, 0); h1.copyTo(result, 8); h2.copyTo(result, 16); h3.copyTo(result, 24); h4.copyTo(result, 32); h5.copyTo(result, 40); } return result; } return hash; }(); exports.calculateSHA512 = calculateSHA512; function calculateSHA384(data, offset, length) { return calculateSHA512(data, offset, length, true); } class NullCipher { decryptBlock(data) { return data; } encrypt(data) { return data; } } class AESBaseCipher { constructor() { if (this.constructor === AESBaseCipher) { (0, _util.unreachable)("Cannot initialize AESBaseCipher."); } this._s = new Uint8Array([0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16]); this._inv_s = new Uint8Array([0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d]); this._mix = new Uint32Array([0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3]); this._mixCol = new Uint8Array(256); for (let i = 0; i < 256; i++) { if (i < 128) { this._mixCol[i] = i << 1; } else { this._mixCol[i] = i << 1 ^ 0x1b; } } this.buffer = new Uint8Array(16); this.bufferPosition = 0; } _expandKey(cipherKey) { (0, _util.unreachable)("Cannot call `_expandKey` on the base class"); } _decrypt(input, key) { let t, u, v; const state = new Uint8Array(16); state.set(input); for (let j = 0, k = this._keySize; j < 16; ++j, ++k) { state[j] ^= key[k]; } for (let i = this._cyclesOfRepetition - 1; i >= 1; --i) { t = state[13]; state[13] = state[9]; state[9] = state[5]; state[5] = state[1]; state[1] = t; t = state[14]; u = state[10]; state[14] = state[6]; state[10] = state[2]; state[6] = t; state[2] = u; t = state[15]; u = state[11]; v = state[7]; state[15] = state[3]; state[11] = t; state[7] = u; state[3] = v; for (let j = 0; j < 16; ++j) { state[j] = this._inv_s[state[j]]; } for (let j = 0, k = i * 16; j < 16; ++j, ++k) { state[j] ^= key[k]; } for (let j = 0; j < 16; j += 4) { const s0 = this._mix[state[j]]; const s1 = this._mix[state[j + 1]]; const s2 = this._mix[state[j + 2]]; const s3 = this._mix[state[j + 3]]; t = s0 ^ s1 >>> 8 ^ s1 << 24 ^ s2 >>> 16 ^ s2 << 16 ^ s3 >>> 24 ^ s3 << 8; state[j] = t >>> 24 & 0xff; state[j + 1] = t >> 16 & 0xff; state[j + 2] = t >> 8 & 0xff; state[j + 3] = t & 0xff; } } t = state[13]; state[13] = state[9]; state[9] = state[5]; state[5] = state[1]; state[1] = t; t = state[14]; u = state[10]; state[14] = state[6]; state[10] = state[2]; state[6] = t; state[2] = u; t = state[15]; u = state[11]; v = state[7]; state[15] = state[3]; state[11] = t; state[7] = u; state[3] = v; for (let j = 0; j < 16; ++j) { state[j] = this._inv_s[state[j]]; state[j] ^= key[j]; } return state; } _encrypt(input, key) { const s = this._s; let t, u, v; const state = new Uint8Array(16); state.set(input); for (let j = 0; j < 16; ++j) { state[j] ^= key[j]; } for (let i = 1; i < this._cyclesOfRepetition; i++) { for (let j = 0; j < 16; ++j) { state[j] = s[state[j]]; } v = state[1]; state[1] = state[5]; state[5] = state[9]; state[9] = state[13]; state[13] = v; v = state[2]; u = state[6]; state[2] = state[10]; state[6] = state[14]; state[10] = v; state[14] = u; v = state[3]; u = state[7]; t = state[11]; state[3] = state[15]; state[7] = v; state[11] = u; state[15] = t; for (let j = 0; j < 16; j += 4) { const s0 = state[j + 0]; const s1 = state[j + 1]; const s2 = state[j + 2]; const s3 = state[j + 3]; t = s0 ^ s1 ^ s2 ^ s3; state[j + 0] ^= t ^ this._mixCol[s0 ^ s1]; state[j + 1] ^= t ^ this._mixCol[s1 ^ s2]; state[j + 2] ^= t ^ this._mixCol[s2 ^ s3]; state[j + 3] ^= t ^ this._mixCol[s3 ^ s0]; } for (let j = 0, k = i * 16; j < 16; ++j, ++k) { state[j] ^= key[k]; } } for (let j = 0; j < 16; ++j) { state[j] = s[state[j]]; } v = state[1]; state[1] = state[5]; state[5] = state[9]; state[9] = state[13]; state[13] = v; v = state[2]; u = state[6]; state[2] = state[10]; state[6] = state[14]; state[10] = v; state[14] = u; v = state[3]; u = state[7]; t = state[11]; state[3] = state[15]; state[7] = v; state[11] = u; state[15] = t; for (let j = 0, k = this._keySize; j < 16; ++j, ++k) { state[j] ^= key[k]; } return state; } _decryptBlock2(data, finalize) { const sourceLength = data.length; let buffer = this.buffer, bufferLength = this.bufferPosition; const result = []; let iv = this.iv; for (let i = 0; i < sourceLength; ++i) { buffer[bufferLength] = data[i]; ++bufferLength; if (bufferLength < 16) { continue; } const plain = this._decrypt(buffer, this._key); for (let j = 0; j < 16; ++j) { plain[j] ^= iv[j]; } iv = buffer; result.push(plain); buffer = new Uint8Array(16); bufferLength = 0; } this.buffer = buffer; this.bufferLength = bufferLength; this.iv = iv; if (result.length === 0) { return new Uint8Array(0); } let outputLength = 16 * result.length; if (finalize) { const lastBlock = result[result.length - 1]; let psLen = lastBlock[15]; if (psLen <= 16) { for (let i = 15, ii = 16 - psLen; i >= ii; --i) { if (lastBlock[i] !== psLen) { psLen = 0; break; } } outputLength -= psLen; result[result.length - 1] = lastBlock.subarray(0, 16 - psLen); } } const output = new Uint8Array(outputLength); for (let i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) { output.set(result[i], j); } return output; } decryptBlock(data, finalize, iv = null) { const sourceLength = data.length; const buffer = this.buffer; let bufferLength = this.bufferPosition; if (iv) { this.iv = iv; } else { for (let i = 0; bufferLength < 16 && i < sourceLength; ++i, ++bufferLength) { buffer[bufferLength] = data[i]; } if (bufferLength < 16) { this.bufferLength = bufferLength; return new Uint8Array(0); } this.iv = buffer; data = data.subarray(16); } this.buffer = new Uint8Array(16); this.bufferLength = 0; this.decryptBlock = this._decryptBlock2; return this.decryptBlock(data, finalize); } encrypt(data, iv) { const sourceLength = data.length; let buffer = this.buffer, bufferLength = this.bufferPosition; const result = []; if (!iv) { iv = new Uint8Array(16); } for (let i = 0; i < sourceLength; ++i) { buffer[bufferLength] = data[i]; ++bufferLength; if (bufferLength < 16) { continue; } for (let j = 0; j < 16; ++j) { buffer[j] ^= iv[j]; } const cipher = this._encrypt(buffer, this._key); iv = cipher; result.push(cipher); buffer = new Uint8Array(16); bufferLength = 0; } this.buffer = buffer; this.bufferLength = bufferLength; this.iv = iv; if (result.length === 0) { return new Uint8Array(0); } const outputLength = 16 * result.length; const output = new Uint8Array(outputLength); for (let i = 0, j = 0, ii = result.length; i < ii; ++i, j += 16) { output.set(result[i], j); } return output; } } class AES128Cipher extends AESBaseCipher { constructor(key) { super(); this._cyclesOfRepetition = 10; this._keySize = 160; this._rcon = new Uint8Array([0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91, 0x39, 0x72, 0xe4, 0xd3, 0xbd, 0x61, 0xc2, 0x9f, 0x25, 0x4a, 0x94, 0x33, 0x66, 0xcc, 0x83, 0x1d, 0x3a, 0x74, 0xe8, 0xcb, 0x8d]); this._key = this._expandKey(key); } _expandKey(cipherKey) { const b = 176; const s = this._s; const rcon = this._rcon; const result = new Uint8Array(b); result.set(cipherKey); for (let j = 16, i = 1; j < b; ++i) { let t1 = result[j - 3]; let t2 = result[j - 2]; let t3 = result[j - 1]; let t4 = result[j - 4]; t1 = s[t1]; t2 = s[t2]; t3 = s[t3]; t4 = s[t4]; t1 ^= rcon[i]; for (let n = 0; n < 4; ++n) { result[j] = t1 ^= result[j - 16]; j++; result[j] = t2 ^= result[j - 16]; j++; result[j] = t3 ^= result[j - 16]; j++; result[j] = t4 ^= result[j - 16]; j++; } } return result; } } exports.AES128Cipher = AES128Cipher; class AES256Cipher extends AESBaseCipher { constructor(key) { super(); this._cyclesOfRepetition = 14; this._keySize = 224; this._key = this._expandKey(key); } _expandKey(cipherKey) { const b = 240; const s = this._s; const result = new Uint8Array(b); result.set(cipherKey); let r = 1; let t1, t2, t3, t4; for (let j = 32, i = 1; j < b; ++i) { if (j % 32 === 16) { t1 = s[t1]; t2 = s[t2]; t3 = s[t3]; t4 = s[t4]; } else if (j % 32 === 0) { t1 = result[j - 3]; t2 = result[j - 2]; t3 = result[j - 1]; t4 = result[j - 4]; t1 = s[t1]; t2 = s[t2]; t3 = s[t3]; t4 = s[t4]; t1 ^= r; if ((r <<= 1) >= 256) { r = (r ^ 0x1b) & 0xff; } } for (let n = 0; n < 4; ++n) { result[j] = t1 ^= result[j - 32]; j++; result[j] = t2 ^= result[j - 32]; j++; result[j] = t3 ^= result[j - 32]; j++; result[j] = t4 ^= result[j - 32]; j++; } } return result; } } exports.AES256Cipher = AES256Cipher; class PDF17 { checkOwnerPassword(password, ownerValidationSalt, userBytes, ownerPassword) { const hashData = new Uint8Array(password.length + 56); hashData.set(password, 0); hashData.set(ownerValidationSalt, password.length); hashData.set(userBytes, password.length + ownerValidationSalt.length); const result = calculateSHA256(hashData, 0, hashData.length); return (0, _util.isArrayEqual)(result, ownerPassword); } checkUserPassword(password, userValidationSalt, userPassword) { const hashData = new Uint8Array(password.length + 8); hashData.set(password, 0); hashData.set(userValidationSalt, password.length); const result = calculateSHA256(hashData, 0, hashData.length); return (0, _util.isArrayEqual)(result, userPassword); } getOwnerKey(password, ownerKeySalt, userBytes, ownerEncryption) { const hashData = new Uint8Array(password.length + 56); hashData.set(password, 0); hashData.set(ownerKeySalt, password.length); hashData.set(userBytes, password.length + ownerKeySalt.length); const key = calculateSHA256(hashData, 0, hashData.length); const cipher = new AES256Cipher(key); return cipher.decryptBlock(ownerEncryption, false, new Uint8Array(16)); } getUserKey(password, userKeySalt, userEncryption) { const hashData = new Uint8Array(password.length + 8); hashData.set(password, 0); hashData.set(userKeySalt, password.length); const key = calculateSHA256(hashData, 0, hashData.length); const cipher = new AES256Cipher(key); return cipher.decryptBlock(userEncryption, false, new Uint8Array(16)); } } exports.PDF17 = PDF17; const PDF20 = function PDF20Closure() { function calculatePDF20Hash(password, input, userBytes) { let k = calculateSHA256(input, 0, input.length).subarray(0, 32); let e = [0]; let i = 0; while (i < 64 || e[e.length - 1] > i - 32) { const combinedLength = password.length + k.length + userBytes.length, combinedArray = new Uint8Array(combinedLength); let writeOffset = 0; combinedArray.set(password, writeOffset); writeOffset += password.length; combinedArray.set(k, writeOffset); writeOffset += k.length; combinedArray.set(userBytes, writeOffset); const k1 = new Uint8Array(combinedLength * 64); for (let j = 0, pos = 0; j < 64; j++, pos += combinedLength) { k1.set(combinedArray, pos); } const cipher = new AES128Cipher(k.subarray(0, 16)); e = cipher.encrypt(k1, k.subarray(16, 32)); let remainder = 0; for (let z = 0; z < 16; z++) { remainder *= 256 % 3; remainder %= 3; remainder += (e[z] >>> 0) % 3; remainder %= 3; } if (remainder === 0) { k = calculateSHA256(e, 0, e.length); } else if (remainder === 1) { k = calculateSHA384(e, 0, e.length); } else if (remainder === 2) { k = calculateSHA512(e, 0, e.length); } i++; } return k.subarray(0, 32); } class PDF20 { hash(password, concatBytes, userBytes) { return calculatePDF20Hash(password, concatBytes, userBytes); } checkOwnerPassword(password, ownerValidationSalt, userBytes, ownerPassword) { const hashData = new Uint8Array(password.length + 56); hashData.set(password, 0); hashData.set(ownerValidationSalt, password.length); hashData.set(userBytes, password.length + ownerValidationSalt.length); const result = calculatePDF20Hash(password, hashData, userBytes); return (0, _util.isArrayEqual)(result, ownerPassword); } checkUserPassword(password, userValidationSalt, userPassword) { const hashData = new Uint8Array(password.length + 8); hashData.set(password, 0); hashData.set(userValidationSalt, password.length); const result = calculatePDF20Hash(password, hashData, []); return (0, _util.isArrayEqual)(result, userPassword); } getOwnerKey(password, ownerKeySalt, userBytes, ownerEncryption) { const hashData = new Uint8Array(password.length + 56); hashData.set(password, 0); hashData.set(ownerKeySalt, password.length); hashData.set(userBytes, password.length + ownerKeySalt.length); const key = calculatePDF20Hash(password, hashData, userBytes); const cipher = new AES256Cipher(key); return cipher.decryptBlock(ownerEncryption, false, new Uint8Array(16)); } getUserKey(password, userKeySalt, userEncryption) { const hashData = new Uint8Array(password.length + 8); hashData.set(password, 0); hashData.set(userKeySalt, password.length); const key = calculatePDF20Hash(password, hashData, []); const cipher = new AES256Cipher(key); return cipher.decryptBlock(userEncryption, false, new Uint8Array(16)); } } return PDF20; }(); exports.PDF20 = PDF20; class CipherTransform { constructor(stringCipherConstructor, streamCipherConstructor) { this.StringCipherConstructor = stringCipherConstructor; this.StreamCipherConstructor = streamCipherConstructor; } createStream(stream, length) { const cipher = new this.StreamCipherConstructor(); return new _decrypt_stream.DecryptStream(stream, length, function cipherTransformDecryptStream(data, finalize) { return cipher.decryptBlock(data, finalize); }); } decryptString(s) { const cipher = new this.StringCipherConstructor(); let data = (0, _util.stringToBytes)(s); data = cipher.decryptBlock(data, true); return (0, _util.bytesToString)(data); } encryptString(s) { const cipher = new this.StringCipherConstructor(); if (cipher instanceof AESBaseCipher) { const strLen = s.length; const pad = 16 - strLen % 16; s += String.fromCharCode(pad).repeat(pad); const iv = new Uint8Array(16); if (typeof crypto !== "undefined") { crypto.getRandomValues(iv); } else { for (let i = 0; i < 16; i++) { iv[i] = Math.floor(256 * Math.random()); } } let data = (0, _util.stringToBytes)(s); data = cipher.encrypt(data, iv); const buf = new Uint8Array(16 + data.length); buf.set(iv); buf.set(data, 16); return (0, _util.bytesToString)(buf); } let data = (0, _util.stringToBytes)(s); data = cipher.encrypt(data); return (0, _util.bytesToString)(data); } } const CipherTransformFactory = function CipherTransformFactoryClosure() { const defaultPasswordBytes = new Uint8Array([0x28, 0xbf, 0x4e, 0x5e, 0x4e, 0x75, 0x8a, 0x41, 0x64, 0x00, 0x4e, 0x56, 0xff, 0xfa, 0x01, 0x08, 0x2e, 0x2e, 0x00, 0xb6, 0xd0, 0x68, 0x3e, 0x80, 0x2f, 0x0c, 0xa9, 0xfe, 0x64, 0x53, 0x69, 0x7a]); function createEncryptionKey20(revision, password, ownerPassword, ownerValidationSalt, ownerKeySalt, uBytes, userPassword, userValidationSalt, userKeySalt, ownerEncryption, userEncryption, perms) { if (password) { const passwordLength = Math.min(127, password.length); password = password.subarray(0, passwordLength); } else { password = []; } let pdfAlgorithm; if (revision === 6) { pdfAlgorithm = new PDF20(); } else { pdfAlgorithm = new PDF17(); } if (pdfAlgorithm.checkUserPassword(password, userValidationSalt, userPassword)) { return pdfAlgorithm.getUserKey(password, userKeySalt, userEncryption); } else if (password.length && pdfAlgorithm.checkOwnerPassword(password, ownerValidationSalt, uBytes, ownerPassword)) { return pdfAlgorithm.getOwnerKey(password, ownerKeySalt, uBytes, ownerEncryption); } return null; } function prepareKeyData(fileId, password, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata) { const hashDataSize = 40 + ownerPassword.length + fileId.length; const hashData = new Uint8Array(hashDataSize); let i = 0, j, n; if (password) { n = Math.min(32, password.length); for (; i < n; ++i) { hashData[i] = password[i]; } } j = 0; while (i < 32) { hashData[i++] = defaultPasswordBytes[j++]; } for (j = 0, n = ownerPassword.length; j < n; ++j) { hashData[i++] = ownerPassword[j]; } hashData[i++] = flags & 0xff; hashData[i++] = flags >> 8 & 0xff; hashData[i++] = flags >> 16 & 0xff; hashData[i++] = flags >>> 24 & 0xff; for (j = 0, n = fileId.length; j < n; ++j) { hashData[i++] = fileId[j]; } if (revision >= 4 && !encryptMetadata) { hashData[i++] = 0xff; hashData[i++] = 0xff; hashData[i++] = 0xff; hashData[i++] = 0xff; } let hash = calculateMD5(hashData, 0, i); const keyLengthInBytes = keyLength >> 3; if (revision >= 3) { for (j = 0; j < 50; ++j) { hash = calculateMD5(hash, 0, keyLengthInBytes); } } const encryptionKey = hash.subarray(0, keyLengthInBytes); let cipher, checkData; if (revision >= 3) { for (i = 0; i < 32; ++i) { hashData[i] = defaultPasswordBytes[i]; } for (j = 0, n = fileId.length; j < n; ++j) { hashData[i++] = fileId[j]; } cipher = new ARCFourCipher(encryptionKey); checkData = cipher.encryptBlock(calculateMD5(hashData, 0, i)); n = encryptionKey.length; const derivedKey = new Uint8Array(n); for (j = 1; j <= 19; ++j) { for (let k = 0; k < n; ++k) { derivedKey[k] = encryptionKey[k] ^ j; } cipher = new ARCFourCipher(derivedKey); checkData = cipher.encryptBlock(checkData); } for (j = 0, n = checkData.length; j < n; ++j) { if (userPassword[j] !== checkData[j]) { return null; } } } else { cipher = new ARCFourCipher(encryptionKey); checkData = cipher.encryptBlock(defaultPasswordBytes); for (j = 0, n = checkData.length; j < n; ++j) { if (userPassword[j] !== checkData[j]) { return null; } } } return encryptionKey; } function decodeUserPassword(password, ownerPassword, revision, keyLength) { const hashData = new Uint8Array(32); let i = 0; const n = Math.min(32, password.length); for (; i < n; ++i) { hashData[i] = password[i]; } let j = 0; while (i < 32) { hashData[i++] = defaultPasswordBytes[j++]; } let hash = calculateMD5(hashData, 0, i); const keyLengthInBytes = keyLength >> 3; if (revision >= 3) { for (j = 0; j < 50; ++j) { hash = calculateMD5(hash, 0, hash.length); } } let cipher, userPassword; if (revision >= 3) { userPassword = ownerPassword; const derivedKey = new Uint8Array(keyLengthInBytes); for (j = 19; j >= 0; j--) { for (let k = 0; k < keyLengthInBytes; ++k) { derivedKey[k] = hash[k] ^ j; } cipher = new ARCFourCipher(derivedKey); userPassword = cipher.encryptBlock(userPassword); } } else { cipher = new ARCFourCipher(hash.subarray(0, keyLengthInBytes)); userPassword = cipher.encryptBlock(ownerPassword); } return userPassword; } const identityName = _primitives.Name.get("Identity"); function buildObjectKey(num, gen, encryptionKey, isAes = false) { const key = new Uint8Array(encryptionKey.length + 9); const n = encryptionKey.length; let i; for (i = 0; i < n; ++i) { key[i] = encryptionKey[i]; } key[i++] = num & 0xff; key[i++] = num >> 8 & 0xff; key[i++] = num >> 16 & 0xff; key[i++] = gen & 0xff; key[i++] = gen >> 8 & 0xff; if (isAes) { key[i++] = 0x73; key[i++] = 0x41; key[i++] = 0x6c; key[i++] = 0x54; } const hash = calculateMD5(key, 0, i); return hash.subarray(0, Math.min(encryptionKey.length + 5, 16)); } function buildCipherConstructor(cf, name, num, gen, key) { if (!(0, _primitives.isName)(name)) { throw new _util.FormatError("Invalid crypt filter name."); } const cryptFilter = cf.get(name.name); let cfm; if (cryptFilter !== null && cryptFilter !== undefined) { cfm = cryptFilter.get("CFM"); } if (!cfm || cfm.name === "None") { return function cipherTransformFactoryBuildCipherConstructorNone() { return new NullCipher(); }; } if (cfm.name === "V2") { return function cipherTransformFactoryBuildCipherConstructorV2() { return new ARCFourCipher(buildObjectKey(num, gen, key, false)); }; } if (cfm.name === "AESV2") { return function cipherTransformFactoryBuildCipherConstructorAESV2() { return new AES128Cipher(buildObjectKey(num, gen, key, true)); }; } if (cfm.name === "AESV3") { return function cipherTransformFactoryBuildCipherConstructorAESV3() { return new AES256Cipher(key); }; } throw new _util.FormatError("Unknown crypto method"); } class CipherTransformFactory { constructor(dict, fileId, password) { const filter = dict.get("Filter"); if (!(0, _primitives.isName)(filter, "Standard")) { throw new _util.FormatError("unknown encryption method"); } this.filterName = filter.name; this.dict = dict; const algorithm = dict.get("V"); if (!Number.isInteger(algorithm) || algorithm !== 1 && algorithm !== 2 && algorithm !== 4 && algorithm !== 5) { throw new _util.FormatError("unsupported encryption algorithm"); } this.algorithm = algorithm; let keyLength = dict.get("Length"); if (!keyLength) { if (algorithm <= 3) { keyLength = 40; } else { const cfDict = dict.get("CF"); const streamCryptoName = dict.get("StmF"); if ((0, _primitives.isDict)(cfDict) && (0, _primitives.isName)(streamCryptoName)) { cfDict.suppressEncryption = true; const handlerDict = cfDict.get(streamCryptoName.name); keyLength = handlerDict && handlerDict.get("Length") || 128; if (keyLength < 40) { keyLength <<= 3; } } } } if (!Number.isInteger(keyLength) || keyLength < 40 || keyLength % 8 !== 0) { throw new _util.FormatError("invalid key length"); } const ownerPassword = (0, _util.stringToBytes)(dict.get("O")).subarray(0, 32); const userPassword = (0, _util.stringToBytes)(dict.get("U")).subarray(0, 32); const flags = dict.get("P"); const revision = dict.get("R"); const encryptMetadata = (algorithm === 4 || algorithm === 5) && dict.get("EncryptMetadata") !== false; this.encryptMetadata = encryptMetadata; const fileIdBytes = (0, _util.stringToBytes)(fileId); let passwordBytes; if (password) { if (revision === 6) { try { password = (0, _util.utf8StringToString)(password); } catch (ex) { (0, _util.warn)("CipherTransformFactory: " + "Unable to convert UTF8 encoded password."); } } passwordBytes = (0, _util.stringToBytes)(password); } let encryptionKey; if (algorithm !== 5) { encryptionKey = prepareKeyData(fileIdBytes, passwordBytes, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata); } else { const ownerValidationSalt = (0, _util.stringToBytes)(dict.get("O")).subarray(32, 40); const ownerKeySalt = (0, _util.stringToBytes)(dict.get("O")).subarray(40, 48); const uBytes = (0, _util.stringToBytes)(dict.get("U")).subarray(0, 48); const userValidationSalt = (0, _util.stringToBytes)(dict.get("U")).subarray(32, 40); const userKeySalt = (0, _util.stringToBytes)(dict.get("U")).subarray(40, 48); const ownerEncryption = (0, _util.stringToBytes)(dict.get("OE")); const userEncryption = (0, _util.stringToBytes)(dict.get("UE")); (0, _util.stringToBytes)(dict.get("Perms")); encryptionKey = createEncryptionKey20(revision, passwordBytes, ownerPassword, ownerValidationSalt, ownerKeySalt, uBytes, userPassword, userValidationSalt, userKeySalt, ownerEncryption, userEncryption); } if (!encryptionKey && !password) { throw new _util.PasswordException("No password given", _util.PasswordResponses.NEED_PASSWORD); } else if (!encryptionKey && password) { const decodedPassword = decodeUserPassword(passwordBytes, ownerPassword, revision, keyLength); encryptionKey = prepareKeyData(fileIdBytes, decodedPassword, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata); } if (!encryptionKey) { throw new _util.PasswordException("Incorrect Password", _util.PasswordResponses.INCORRECT_PASSWORD); } this.encryptionKey = encryptionKey; if (algorithm >= 4) { const cf = dict.get("CF"); if ((0, _primitives.isDict)(cf)) { cf.suppressEncryption = true; } this.cf = cf; this.stmf = dict.get("StmF") || identityName; this.strf = dict.get("StrF") || identityName; this.eff = dict.get("EFF") || this.stmf; } } createCipherTransform(num, gen) { if (this.algorithm === 4 || this.algorithm === 5) { return new CipherTransform(buildCipherConstructor(this.cf, this.stmf, num, gen, this.encryptionKey), buildCipherConstructor(this.cf, this.strf, num, gen, this.encryptionKey)); } const key = buildObjectKey(num, gen, this.encryptionKey, false); const cipherConstructor = function buildCipherCipherConstructor() { return new ARCFourCipher(key); }; return new CipherTransform(cipherConstructor, cipherConstructor); } } return CipherTransformFactory; }(); exports.CipherTransformFactory = CipherTransformFactory; /***/ }), /* 73 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.DecryptStream = void 0; var _decode_stream = __w_pdfjs_require__(29); const chunkSize = 512; class DecryptStream extends _decode_stream.DecodeStream { constructor(str, maybeLength, decrypt) { super(maybeLength); this.str = str; this.dict = str.dict; this.decrypt = decrypt; this.nextChunk = null; this.initialized = false; } readBlock() { let chunk; if (this.initialized) { chunk = this.nextChunk; } else { chunk = this.str.getBytes(chunkSize); this.initialized = true; } if (!chunk || chunk.length === 0) { this.eof = true; return; } this.nextChunk = this.str.getBytes(chunkSize); const hasMoreData = this.nextChunk && this.nextChunk.length > 0; const decrypt = this.decrypt; chunk = decrypt(chunk, !hasMoreData); let bufferLength = this.bufferLength; const n = chunk.length, buffer = this.ensureBuffer(bufferLength + n); for (let i = 0; i < n; i++) { buffer[bufferLength++] = chunk[i]; } this.bufferLength = bufferLength; } } exports.DecryptStream = DecryptStream; /***/ }), /* 74 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.XFAFactory = void 0; var _xfa_object = __w_pdfjs_require__(75); var _bind = __w_pdfjs_require__(79); var _data = __w_pdfjs_require__(85); var _fonts = __w_pdfjs_require__(83); var _utils = __w_pdfjs_require__(76); var _util = __w_pdfjs_require__(2); var _parser = __w_pdfjs_require__(86); var _xhtml = __w_pdfjs_require__(96); class XFAFactory { constructor(data) { try { this.root = new _parser.XFAParser().parse(XFAFactory._createDocument(data)); const binder = new _bind.Binder(this.root); this.form = binder.bind(); this.dataHandler = new _data.DataHandler(this.root, binder.getData()); this.form[_xfa_object.$globalData].template = this.form; } catch (e) { (0, _util.warn)(`XFA - an error occurred during parsing and binding: ${e}`); } } isValid() { return this.root && this.form; } _createPagesHelper() { const iterator = this.form[_xfa_object.$toPages](); return new Promise((resolve, reject) => { const nextIteration = () => { try { const value = iterator.next(); if (value.done) { resolve(value.value); } else { setTimeout(nextIteration, 0); } } catch (e) { reject(e); } }; setTimeout(nextIteration, 0); }); } async _createPages() { try { this.pages = await this._createPagesHelper(); this.dims = this.pages.children.map(c => { const { width, height } = c.attributes.style; return [0, 0, parseInt(width), parseInt(height)]; }); } catch (e) { (0, _util.warn)(`XFA - an error occurred during layout: ${e}`); } } getBoundingBox(pageIndex) { return this.dims[pageIndex]; } async getNumPages() { if (!this.pages) { await this._createPages(); } return this.dims.length; } setImages(images) { this.form[_xfa_object.$globalData].images = images; } setFonts(fonts) { this.form[_xfa_object.$globalData].fontFinder = new _fonts.FontFinder(fonts); const missingFonts = []; for (let typeface of this.form[_xfa_object.$globalData].usedTypefaces) { typeface = (0, _utils.stripQuotes)(typeface); const font = this.form[_xfa_object.$globalData].fontFinder.find(typeface); if (!font) { missingFonts.push(typeface); } } if (missingFonts.length > 0) { return missingFonts; } return null; } appendFonts(fonts, reallyMissingFonts) { this.form[_xfa_object.$globalData].fontFinder.add(fonts, reallyMissingFonts); } async getPages() { if (!this.pages) { await this._createPages(); } const pages = this.pages; this.pages = null; return pages; } serializeData(storage) { return this.dataHandler.serialize(storage); } static _createDocument(data) { if (!data["/xdp:xdp"]) { return data["xdp:xdp"]; } return Object.values(data).join(""); } static getRichTextAsHtml(rc) { if (!rc || typeof rc !== "string") { return null; } try { let root = new _parser.XFAParser(_xhtml.XhtmlNamespace, true).parse(rc); if (!["body", "xhtml"].includes(root[_xfa_object.$nodeName])) { const newRoot = _xhtml.XhtmlNamespace.body({}); newRoot[_xfa_object.$appendChild](root); root = newRoot; } const result = root[_xfa_object.$toHTML](); if (!result.success) { return null; } const { html } = result; const { attributes } = html; if (attributes) { if (attributes.class) { attributes.class = attributes.class.filter(attr => !attr.startsWith("xfa")); } attributes.dir = "auto"; } return { html, str: root[_xfa_object.$text]() }; } catch (e) { (0, _util.warn)(`XFA - an error occurred during parsing of rich text: ${e}`); } return null; } } exports.XFAFactory = XFAFactory; /***/ }), /* 75 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.XmlObject = exports.XFAObjectArray = exports.XFAObject = exports.XFAAttribute = exports.StringObject = exports.OptionObject = exports.Option10 = exports.Option01 = exports.IntegerObject = exports.ContentObject = exports.$uid = exports.$toStyle = exports.$toString = exports.$toPages = exports.$toHTML = exports.$text = exports.$tabIndex = exports.$setValue = exports.$setSetAttributes = exports.$setId = exports.$searchNode = exports.$root = exports.$resolvePrototypes = exports.$removeChild = exports.$pushPara = exports.$pushGlyphs = exports.$popPara = exports.$onText = exports.$onChildCheck = exports.$onChild = exports.$nsAttributes = exports.$nodeName = exports.$namespaceId = exports.$isUsable = exports.$isTransparent = exports.$isThereMoreWidth = exports.$isSplittable = exports.$isNsAgnostic = exports.$isDescendent = exports.$isDataValue = exports.$isCDATAXml = exports.$isBindable = exports.$insertAt = exports.$indexOf = exports.$ids = exports.$hasSettableValue = exports.$globalData = exports.$getTemplateRoot = exports.$getSubformParent = exports.$getRealChildrenByNameIt = exports.$getParent = exports.$getNextPage = exports.$getExtra = exports.$getDataValue = exports.$getContainedChildren = exports.$getChildrenByNameIt = exports.$getChildrenByName = exports.$getChildrenByClass = exports.$getChildren = exports.$getAvailableSpace = exports.$getAttributes = exports.$getAttributeIt = exports.$flushHTML = exports.$finalize = exports.$extra = exports.$dump = exports.$data = exports.$content = exports.$consumed = exports.$clone = exports.$cleanup = exports.$cleanPage = exports.$clean = exports.$childrenToHTML = exports.$appendChild = exports.$addHTML = exports.$acceptWhitespace = void 0; var _utils = __w_pdfjs_require__(76); var _util = __w_pdfjs_require__(2); var _core_utils = __w_pdfjs_require__(9); var _namespaces = __w_pdfjs_require__(77); var _som = __w_pdfjs_require__(78); const $acceptWhitespace = Symbol(); exports.$acceptWhitespace = $acceptWhitespace; const $addHTML = Symbol(); exports.$addHTML = $addHTML; const $appendChild = Symbol(); exports.$appendChild = $appendChild; const $childrenToHTML = Symbol(); exports.$childrenToHTML = $childrenToHTML; const $clean = Symbol(); exports.$clean = $clean; const $cleanPage = Symbol(); exports.$cleanPage = $cleanPage; const $cleanup = Symbol(); exports.$cleanup = $cleanup; const $clone = Symbol(); exports.$clone = $clone; const $consumed = Symbol(); exports.$consumed = $consumed; const $content = Symbol("content"); exports.$content = $content; const $data = Symbol("data"); exports.$data = $data; const $dump = Symbol(); exports.$dump = $dump; const $extra = Symbol("extra"); exports.$extra = $extra; const $finalize = Symbol(); exports.$finalize = $finalize; const $flushHTML = Symbol(); exports.$flushHTML = $flushHTML; const $getAttributeIt = Symbol(); exports.$getAttributeIt = $getAttributeIt; const $getAttributes = Symbol(); exports.$getAttributes = $getAttributes; const $getAvailableSpace = Symbol(); exports.$getAvailableSpace = $getAvailableSpace; const $getChildrenByClass = Symbol(); exports.$getChildrenByClass = $getChildrenByClass; const $getChildrenByName = Symbol(); exports.$getChildrenByName = $getChildrenByName; const $getChildrenByNameIt = Symbol(); exports.$getChildrenByNameIt = $getChildrenByNameIt; const $getDataValue = Symbol(); exports.$getDataValue = $getDataValue; const $getExtra = Symbol(); exports.$getExtra = $getExtra; const $getRealChildrenByNameIt = Symbol(); exports.$getRealChildrenByNameIt = $getRealChildrenByNameIt; const $getChildren = Symbol(); exports.$getChildren = $getChildren; const $getContainedChildren = Symbol(); exports.$getContainedChildren = $getContainedChildren; const $getNextPage = Symbol(); exports.$getNextPage = $getNextPage; const $getSubformParent = Symbol(); exports.$getSubformParent = $getSubformParent; const $getParent = Symbol(); exports.$getParent = $getParent; const $getTemplateRoot = Symbol(); exports.$getTemplateRoot = $getTemplateRoot; const $globalData = Symbol(); exports.$globalData = $globalData; const $hasSettableValue = Symbol(); exports.$hasSettableValue = $hasSettableValue; const $ids = Symbol(); exports.$ids = $ids; const $indexOf = Symbol(); exports.$indexOf = $indexOf; const $insertAt = Symbol(); exports.$insertAt = $insertAt; const $isCDATAXml = Symbol(); exports.$isCDATAXml = $isCDATAXml; const $isBindable = Symbol(); exports.$isBindable = $isBindable; const $isDataValue = Symbol(); exports.$isDataValue = $isDataValue; const $isDescendent = Symbol(); exports.$isDescendent = $isDescendent; const $isNsAgnostic = Symbol(); exports.$isNsAgnostic = $isNsAgnostic; const $isSplittable = Symbol(); exports.$isSplittable = $isSplittable; const $isThereMoreWidth = Symbol(); exports.$isThereMoreWidth = $isThereMoreWidth; const $isTransparent = Symbol(); exports.$isTransparent = $isTransparent; const $isUsable = Symbol(); exports.$isUsable = $isUsable; const $lastAttribute = Symbol(); const $namespaceId = Symbol("namespaceId"); exports.$namespaceId = $namespaceId; const $nodeName = Symbol("nodeName"); exports.$nodeName = $nodeName; const $nsAttributes = Symbol(); exports.$nsAttributes = $nsAttributes; const $onChild = Symbol(); exports.$onChild = $onChild; const $onChildCheck = Symbol(); exports.$onChildCheck = $onChildCheck; const $onText = Symbol(); exports.$onText = $onText; const $pushGlyphs = Symbol(); exports.$pushGlyphs = $pushGlyphs; const $popPara = Symbol(); exports.$popPara = $popPara; const $pushPara = Symbol(); exports.$pushPara = $pushPara; const $removeChild = Symbol(); exports.$removeChild = $removeChild; const $root = Symbol("root"); exports.$root = $root; const $resolvePrototypes = Symbol(); exports.$resolvePrototypes = $resolvePrototypes; const $searchNode = Symbol(); exports.$searchNode = $searchNode; const $setId = Symbol(); exports.$setId = $setId; const $setSetAttributes = Symbol(); exports.$setSetAttributes = $setSetAttributes; const $setValue = Symbol(); exports.$setValue = $setValue; const $tabIndex = Symbol(); exports.$tabIndex = $tabIndex; const $text = Symbol(); exports.$text = $text; const $toPages = Symbol(); exports.$toPages = $toPages; const $toHTML = Symbol(); exports.$toHTML = $toHTML; const $toString = Symbol(); exports.$toString = $toString; const $toStyle = Symbol(); exports.$toStyle = $toStyle; const $uid = Symbol("uid"); exports.$uid = $uid; const _applyPrototype = Symbol(); const _attributes = Symbol(); const _attributeNames = Symbol(); const _children = Symbol("_children"); const _cloneAttribute = Symbol(); const _dataValue = Symbol(); const _defaultValue = Symbol(); const _filteredChildrenGenerator = Symbol(); const _getPrototype = Symbol(); const _getUnsetAttributes = Symbol(); const _hasChildren = Symbol(); const _max = Symbol(); const _options = Symbol(); const _parent = Symbol("parent"); const _resolvePrototypesHelper = Symbol(); const _setAttributes = Symbol(); const _validator = Symbol(); let uid = 0; const NS_DATASETS = _namespaces.NamespaceIds.datasets.id; class XFAObject { constructor(nsId, name, hasChildren = false) { this[$namespaceId] = nsId; this[$nodeName] = name; this[_hasChildren] = hasChildren; this[_parent] = null; this[_children] = []; this[$uid] = `${name}${uid++}`; this[$globalData] = null; } [$onChild](child) { if (!this[_hasChildren] || !this[$onChildCheck](child)) { return false; } const name = child[$nodeName]; const node = this[name]; if (node instanceof XFAObjectArray) { if (node.push(child)) { this[$appendChild](child); return true; } } else { if (node !== null) { this[$removeChild](node); } this[name] = child; this[$appendChild](child); return true; } let id = ""; if (this.id) { id = ` (id: ${this.id})`; } else if (this.name) { id = ` (name: ${this.name} ${this.h.value})`; } (0, _util.warn)(`XFA - node "${this[$nodeName]}"${id} has already enough "${name}"!`); return false; } [$onChildCheck](child) { return this.hasOwnProperty(child[$nodeName]) && child[$namespaceId] === this[$namespaceId]; } [$isNsAgnostic]() { return false; } [$acceptWhitespace]() { return false; } [$isCDATAXml]() { return false; } [$isBindable]() { return false; } [$popPara]() { if (this.para) { this[$getTemplateRoot]()[$extra].paraStack.pop(); } } [$pushPara]() { this[$getTemplateRoot]()[$extra].paraStack.push(this.para); } [$setId](ids) { if (this.id && this[$namespaceId] === _namespaces.NamespaceIds.template.id) { ids.set(this.id, this); } } [$getTemplateRoot]() { return this[$globalData].template; } [$isSplittable]() { return false; } [$isThereMoreWidth]() { return false; } [$appendChild](child) { child[_parent] = this; this[_children].push(child); if (!child[$globalData] && this[$globalData]) { child[$globalData] = this[$globalData]; } } [$removeChild](child) { const i = this[_children].indexOf(child); this[_children].splice(i, 1); } [$hasSettableValue]() { return this.hasOwnProperty("value"); } [$setValue](_) {} [$onText](_) {} [$finalize]() {} [$clean](builder) { delete this[_hasChildren]; if (this[$cleanup]) { builder.clean(this[$cleanup]); delete this[$cleanup]; } } [$indexOf](child) { return this[_children].indexOf(child); } [$insertAt](i, child) { child[_parent] = this; this[_children].splice(i, 0, child); if (!child[$globalData] && this[$globalData]) { child[$globalData] = this[$globalData]; } } [$isTransparent]() { return !this.name; } [$lastAttribute]() { return ""; } [$text]() { if (this[_children].length === 0) { return this[$content]; } return this[_children].map(c => c[$text]()).join(""); } get [_attributeNames]() { const proto = Object.getPrototypeOf(this); if (!proto._attributes) { const attributes = proto._attributes = new Set(); for (const name of Object.getOwnPropertyNames(this)) { if (this[name] === null || this[name] instanceof XFAObject || this[name] instanceof XFAObjectArray) { break; } attributes.add(name); } } return (0, _util.shadow)(this, _attributeNames, proto._attributes); } [$isDescendent](parent) { let node = this; while (node) { if (node === parent) { return true; } node = node[$getParent](); } return false; } [$getParent]() { return this[_parent]; } [$getSubformParent]() { return this[$getParent](); } [$getChildren](name = null) { if (!name) { return this[_children]; } return this[name]; } [$dump]() { const dumped = Object.create(null); if (this[$content]) { dumped.$content = this[$content]; } for (const name of Object.getOwnPropertyNames(this)) { const value = this[name]; if (value === null) { continue; } if (value instanceof XFAObject) { dumped[name] = value[$dump](); } else if (value instanceof XFAObjectArray) { if (!value.isEmpty()) { dumped[name] = value.dump(); } } else { dumped[name] = value; } } return dumped; } [$toStyle]() { return null; } [$toHTML]() { return _utils.HTMLResult.EMPTY; } *[$getContainedChildren]() { for (const node of this[$getChildren]()) { yield node; } } *[_filteredChildrenGenerator](filter, include) { for (const node of this[$getContainedChildren]()) { if (!filter || include === filter.has(node[$nodeName])) { const availableSpace = this[$getAvailableSpace](); const res = node[$toHTML](availableSpace); if (!res.success) { this[$extra].failingNode = node; } yield res; } } } [$flushHTML]() { return null; } [$addHTML](html, bbox) { this[$extra].children.push(html); } [$getAvailableSpace]() {} [$childrenToHTML]({ filter = null, include = true }) { if (!this[$extra].generator) { this[$extra].generator = this[_filteredChildrenGenerator](filter, include); } else { const availableSpace = this[$getAvailableSpace](); const res = this[$extra].failingNode[$toHTML](availableSpace); if (!res.success) { return res; } if (res.html) { this[$addHTML](res.html, res.bbox); } delete this[$extra].failingNode; } while (true) { const gen = this[$extra].generator.next(); if (gen.done) { break; } const res = gen.value; if (!res.success) { return res; } if (res.html) { this[$addHTML](res.html, res.bbox); } } this[$extra].generator = null; return _utils.HTMLResult.EMPTY; } [$setSetAttributes](attributes) { this[_setAttributes] = new Set(Object.keys(attributes)); } [_getUnsetAttributes](protoAttributes) { const allAttr = this[_attributeNames]; const setAttr = this[_setAttributes]; return [...protoAttributes].filter(x => allAttr.has(x) && !setAttr.has(x)); } [$resolvePrototypes](ids, ancestors = new Set()) { for (const child of this[_children]) { child[_resolvePrototypesHelper](ids, ancestors); } } [_resolvePrototypesHelper](ids, ancestors) { const proto = this[_getPrototype](ids, ancestors); if (proto) { this[_applyPrototype](proto, ids, ancestors); } else { this[$resolvePrototypes](ids, ancestors); } } [_getPrototype](ids, ancestors) { const { use, usehref } = this; if (!use && !usehref) { return null; } let proto = null; let somExpression = null; let id = null; let ref = use; if (usehref) { ref = usehref; if (usehref.startsWith("#som(") && usehref.endsWith(")")) { somExpression = usehref.slice("#som(".length, usehref.length - 1); } else if (usehref.startsWith(".#som(") && usehref.endsWith(")")) { somExpression = usehref.slice(".#som(".length, usehref.length - 1); } else if (usehref.startsWith("#")) { id = usehref.slice(1); } else if (usehref.startsWith(".#")) { id = usehref.slice(2); } } else if (use.startsWith("#")) { id = use.slice(1); } else { somExpression = use; } this.use = this.usehref = ""; if (id) { proto = ids.get(id); } else { proto = (0, _som.searchNode)(ids.get($root), this, somExpression, true, false); if (proto) { proto = proto[0]; } } if (!proto) { (0, _util.warn)(`XFA - Invalid prototype reference: ${ref}.`); return null; } if (proto[$nodeName] !== this[$nodeName]) { (0, _util.warn)(`XFA - Incompatible prototype: ${proto[$nodeName]} !== ${this[$nodeName]}.`); return null; } if (ancestors.has(proto)) { (0, _util.warn)(`XFA - Cycle detected in prototypes use.`); return null; } ancestors.add(proto); const protoProto = proto[_getPrototype](ids, ancestors); if (protoProto) { proto[_applyPrototype](protoProto, ids, ancestors); } proto[$resolvePrototypes](ids, ancestors); ancestors.delete(proto); return proto; } [_applyPrototype](proto, ids, ancestors) { if (ancestors.has(proto)) { (0, _util.warn)(`XFA - Cycle detected in prototypes use.`); return; } if (!this[$content] && proto[$content]) { this[$content] = proto[$content]; } const newAncestors = new Set(ancestors); newAncestors.add(proto); for (const unsetAttrName of this[_getUnsetAttributes](proto[_setAttributes])) { this[unsetAttrName] = proto[unsetAttrName]; if (this[_setAttributes]) { this[_setAttributes].add(unsetAttrName); } } for (const name of Object.getOwnPropertyNames(this)) { if (this[_attributeNames].has(name)) { continue; } const value = this[name]; const protoValue = proto[name]; if (value instanceof XFAObjectArray) { for (const child of value[_children]) { child[_resolvePrototypesHelper](ids, ancestors); } for (let i = value[_children].length, ii = protoValue[_children].length; i < ii; i++) { const child = proto[_children][i][$clone](); if (value.push(child)) { child[_parent] = this; this[_children].push(child); child[_resolvePrototypesHelper](ids, ancestors); } else { break; } } continue; } if (value !== null) { value[$resolvePrototypes](ids, ancestors); if (protoValue) { value[_applyPrototype](protoValue, ids, ancestors); } continue; } if (protoValue !== null) { const child = protoValue[$clone](); child[_parent] = this; this[name] = child; this[_children].push(child); child[_resolvePrototypesHelper](ids, ancestors); } } } static [_cloneAttribute](obj) { if (Array.isArray(obj)) { return obj.map(x => XFAObject[_cloneAttribute](x)); } if (typeof obj === "object" && obj !== null) { return Object.assign({}, obj); } return obj; } [$clone]() { const clone = Object.create(Object.getPrototypeOf(this)); for (const $symbol of Object.getOwnPropertySymbols(this)) { try { clone[$symbol] = this[$symbol]; } catch (_) { (0, _util.shadow)(clone, $symbol, this[$symbol]); } } clone[$uid] = `${clone[$nodeName]}${uid++}`; clone[_children] = []; for (const name of Object.getOwnPropertyNames(this)) { if (this[_attributeNames].has(name)) { clone[name] = XFAObject[_cloneAttribute](this[name]); continue; } const value = this[name]; if (value instanceof XFAObjectArray) { clone[name] = new XFAObjectArray(value[_max]); } else { clone[name] = null; } } for (const child of this[_children]) { const name = child[$nodeName]; const clonedChild = child[$clone](); clone[_children].push(clonedChild); clonedChild[_parent] = clone; if (clone[name] === null) { clone[name] = clonedChild; } else { clone[name][_children].push(clonedChild); } } return clone; } [$getChildren](name = null) { if (!name) { return this[_children]; } return this[_children].filter(c => c[$nodeName] === name); } [$getChildrenByClass](name) { return this[name]; } [$getChildrenByName](name, allTransparent, first = true) { return Array.from(this[$getChildrenByNameIt](name, allTransparent, first)); } *[$getChildrenByNameIt](name, allTransparent, first = true) { if (name === "parent") { yield this[_parent]; return; } for (const child of this[_children]) { if (child[$nodeName] === name) { yield child; } if (child.name === name) { yield child; } if (allTransparent || child[$isTransparent]()) { yield* child[$getChildrenByNameIt](name, allTransparent, false); } } if (first && this[_attributeNames].has(name)) { yield new XFAAttribute(this, name, this[name]); } } } exports.XFAObject = XFAObject; class XFAObjectArray { constructor(max = Infinity) { this[_max] = max; this[_children] = []; } push(child) { const len = this[_children].length; if (len <= this[_max]) { this[_children].push(child); return true; } (0, _util.warn)(`XFA - node "${child[$nodeName]}" accepts no more than ${this[_max]} children`); return false; } isEmpty() { return this[_children].length === 0; } dump() { return this[_children].length === 1 ? this[_children][0][$dump]() : this[_children].map(x => x[$dump]()); } [$clone]() { const clone = new XFAObjectArray(this[_max]); clone[_children] = this[_children].map(c => c[$clone]()); return clone; } get children() { return this[_children]; } clear() { this[_children].length = 0; } } exports.XFAObjectArray = XFAObjectArray; class XFAAttribute { constructor(node, name, value) { this[_parent] = node; this[$nodeName] = name; this[$content] = value; this[$consumed] = false; this[$uid] = `attribute${uid++}`; } [$getParent]() { return this[_parent]; } [$isDataValue]() { return true; } [$getDataValue]() { return this[$content].trim(); } [$setValue](value) { value = value.value || ""; this[$content] = value.toString(); } [$text]() { return this[$content]; } [$isDescendent](parent) { return this[_parent] === parent || this[_parent][$isDescendent](parent); } } exports.XFAAttribute = XFAAttribute; class XmlObject extends XFAObject { constructor(nsId, name, attributes = {}) { super(nsId, name); this[$content] = ""; this[_dataValue] = null; if (name !== "#text") { const map = new Map(); this[_attributes] = map; for (const [attrName, value] of Object.entries(attributes)) { map.set(attrName, new XFAAttribute(this, attrName, value)); } if (attributes.hasOwnProperty($nsAttributes)) { const dataNode = attributes[$nsAttributes].xfa.dataNode; if (dataNode !== undefined) { if (dataNode === "dataGroup") { this[_dataValue] = false; } else if (dataNode === "dataValue") { this[_dataValue] = true; } } } } this[$consumed] = false; } [$toString](buf) { const tagName = this[$nodeName]; if (tagName === "#text") { buf.push((0, _core_utils.encodeToXmlString)(this[$content])); return; } const utf8TagName = (0, _util.utf8StringToString)(tagName); const prefix = this[$namespaceId] === NS_DATASETS ? "xfa:" : ""; buf.push(`<${prefix}${utf8TagName}`); for (const [name, value] of this[_attributes].entries()) { const utf8Name = (0, _util.utf8StringToString)(name); buf.push(` ${utf8Name}="${(0, _core_utils.encodeToXmlString)(value[$content])}"`); } if (this[_dataValue] !== null) { if (this[_dataValue]) { buf.push(` xfa:dataNode="dataValue"`); } else { buf.push(` xfa:dataNode="dataGroup"`); } } if (!this[$content] && this[_children].length === 0) { buf.push("/>"); return; } buf.push(">"); if (this[$content]) { if (typeof this[$content] === "string") { buf.push((0, _core_utils.encodeToXmlString)(this[$content])); } else { this[$content][$toString](buf); } } else { for (const child of this[_children]) { child[$toString](buf); } } buf.push(``); } [$onChild](child) { if (this[$content]) { const node = new XmlObject(this[$namespaceId], "#text"); this[$appendChild](node); node[$content] = this[$content]; this[$content] = ""; } this[$appendChild](child); return true; } [$onText](str) { this[$content] += str; } [$finalize]() { if (this[$content] && this[_children].length > 0) { const node = new XmlObject(this[$namespaceId], "#text"); this[$appendChild](node); node[$content] = this[$content]; delete this[$content]; } } [$toHTML]() { if (this[$nodeName] === "#text") { return _utils.HTMLResult.success({ name: "#text", value: this[$content] }); } return _utils.HTMLResult.EMPTY; } [$getChildren](name = null) { if (!name) { return this[_children]; } return this[_children].filter(c => c[$nodeName] === name); } [$getAttributes]() { return this[_attributes]; } [$getChildrenByClass](name) { const value = this[_attributes].get(name); if (value !== undefined) { return value; } return this[$getChildren](name); } *[$getChildrenByNameIt](name, allTransparent) { const value = this[_attributes].get(name); if (value) { yield value; } for (const child of this[_children]) { if (child[$nodeName] === name) { yield child; } if (allTransparent) { yield* child[$getChildrenByNameIt](name, allTransparent); } } } *[$getAttributeIt](name, skipConsumed) { const value = this[_attributes].get(name); if (value && (!skipConsumed || !value[$consumed])) { yield value; } for (const child of this[_children]) { yield* child[$getAttributeIt](name, skipConsumed); } } *[$getRealChildrenByNameIt](name, allTransparent, skipConsumed) { for (const child of this[_children]) { if (child[$nodeName] === name && (!skipConsumed || !child[$consumed])) { yield child; } if (allTransparent) { yield* child[$getRealChildrenByNameIt](name, allTransparent, skipConsumed); } } } [$isDataValue]() { if (this[_dataValue] === null) { return this[_children].length === 0 || this[_children][0][$namespaceId] === _namespaces.NamespaceIds.xhtml.id; } return this[_dataValue]; } [$getDataValue]() { if (this[_dataValue] === null) { if (this[_children].length === 0) { return this[$content].trim(); } if (this[_children][0][$namespaceId] === _namespaces.NamespaceIds.xhtml.id) { return this[_children][0][$text]().trim(); } return null; } return this[$content].trim(); } [$setValue](value) { value = value.value || ""; this[$content] = value.toString(); } [$dump](hasNS = false) { const dumped = Object.create(null); if (hasNS) { dumped.$ns = this[$namespaceId]; } if (this[$content]) { dumped.$content = this[$content]; } dumped.$name = this[$nodeName]; dumped.children = []; for (const child of this[_children]) { dumped.children.push(child[$dump](hasNS)); } dumped.attributes = Object.create(null); for (const [name, value] of this[_attributes]) { dumped.attributes[name] = value[$content]; } return dumped; } } exports.XmlObject = XmlObject; class ContentObject extends XFAObject { constructor(nsId, name) { super(nsId, name); this[$content] = ""; } [$onText](text) { this[$content] += text; } [$finalize]() {} } exports.ContentObject = ContentObject; class OptionObject extends ContentObject { constructor(nsId, name, options) { super(nsId, name); this[_options] = options; } [$finalize]() { this[$content] = (0, _utils.getKeyword)({ data: this[$content], defaultValue: this[_options][0], validate: k => this[_options].includes(k) }); } [$clean](builder) { super[$clean](builder); delete this[_options]; } } exports.OptionObject = OptionObject; class StringObject extends ContentObject { [$finalize]() { this[$content] = this[$content].trim(); } } exports.StringObject = StringObject; class IntegerObject extends ContentObject { constructor(nsId, name, defaultValue, validator) { super(nsId, name); this[_defaultValue] = defaultValue; this[_validator] = validator; } [$finalize]() { this[$content] = (0, _utils.getInteger)({ data: this[$content], defaultValue: this[_defaultValue], validate: this[_validator] }); } [$clean](builder) { super[$clean](builder); delete this[_defaultValue]; delete this[_validator]; } } exports.IntegerObject = IntegerObject; class Option01 extends IntegerObject { constructor(nsId, name) { super(nsId, name, 0, n => n === 1); } } exports.Option01 = Option01; class Option10 extends IntegerObject { constructor(nsId, name) { super(nsId, name, 1, n => n === 0); } } exports.Option10 = Option10; /***/ }), /* 76 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.HTMLResult = void 0; exports.getBBox = getBBox; exports.getColor = getColor; exports.getFloat = getFloat; exports.getInteger = getInteger; exports.getKeyword = getKeyword; exports.getMeasurement = getMeasurement; exports.getRatio = getRatio; exports.getRelevant = getRelevant; exports.getStringOption = getStringOption; exports.stripQuotes = stripQuotes; var _util = __w_pdfjs_require__(2); const dimConverters = { pt: x => x, cm: x => x / 2.54 * 72, mm: x => x / (10 * 2.54) * 72, in: x => x * 72, px: x => x }; const measurementPattern = /([+-]?\d+\.?\d*)(.*)/; function stripQuotes(str) { if (str.startsWith("'") || str.startsWith('"')) { return str.slice(1, str.length - 1); } return str; } function getInteger({ data, defaultValue, validate }) { if (!data) { return defaultValue; } data = data.trim(); const n = parseInt(data, 10); if (!isNaN(n) && validate(n)) { return n; } return defaultValue; } function getFloat({ data, defaultValue, validate }) { if (!data) { return defaultValue; } data = data.trim(); const n = parseFloat(data); if (!isNaN(n) && validate(n)) { return n; } return defaultValue; } function getKeyword({ data, defaultValue, validate }) { if (!data) { return defaultValue; } data = data.trim(); if (validate(data)) { return data; } return defaultValue; } function getStringOption(data, options) { return getKeyword({ data, defaultValue: options[0], validate: k => options.includes(k) }); } function getMeasurement(str, def = "0") { def = def || "0"; if (!str) { return getMeasurement(def); } const match = str.trim().match(measurementPattern); if (!match) { return getMeasurement(def); } const [, valueStr, unit] = match; const value = parseFloat(valueStr); if (isNaN(value)) { return getMeasurement(def); } if (value === 0) { return 0; } const conv = dimConverters[unit]; if (conv) { return conv(value); } return value; } function getRatio(data) { if (!data) { return { num: 1, den: 1 }; } const ratio = data.trim().split(/\s*:\s*/).map(x => parseFloat(x)).filter(x => !isNaN(x)); if (ratio.length === 1) { ratio.push(1); } if (ratio.length === 0) { return { num: 1, den: 1 }; } const [num, den] = ratio; return { num, den }; } function getRelevant(data) { if (!data) { return []; } return data.trim().split(/\s+/).map(e => { return { excluded: e[0] === "-", viewname: e.substring(1) }; }); } function getColor(data, def = [0, 0, 0]) { let [r, g, b] = def; if (!data) { return { r, g, b }; } const color = data.trim().split(/\s*,\s*/).map(c => Math.min(Math.max(0, parseInt(c.trim(), 10)), 255)).map(c => isNaN(c) ? 0 : c); if (color.length < 3) { return { r, g, b }; } [r, g, b] = color; return { r, g, b }; } function getBBox(data) { const def = -1; if (!data) { return { x: def, y: def, width: def, height: def }; } const bbox = data.trim().split(/\s*,\s*/).map(m => getMeasurement(m, "-1")); if (bbox.length < 4 || bbox[2] < 0 || bbox[3] < 0) { return { x: def, y: def, width: def, height: def }; } const [x, y, width, height] = bbox; return { x, y, width, height }; } class HTMLResult { static get FAILURE() { return (0, _util.shadow)(this, "FAILURE", new HTMLResult(false, null, null, null)); } static get EMPTY() { return (0, _util.shadow)(this, "EMPTY", new HTMLResult(true, null, null, null)); } constructor(success, html, bbox, breakNode) { this.success = success; this.html = html; this.bbox = bbox; this.breakNode = breakNode; } isBreak() { return !!this.breakNode; } static breakNode(node) { return new HTMLResult(false, null, null, node); } static success(html, bbox = null) { return new HTMLResult(true, html, bbox, null); } } exports.HTMLResult = HTMLResult; /***/ }), /* 77 */ /***/ ((__unused_webpack_module, exports) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.NamespaceIds = exports.$buildXFAObject = void 0; const $buildXFAObject = Symbol(); exports.$buildXFAObject = $buildXFAObject; const NamespaceIds = { config: { id: 0, check: ns => ns.startsWith("http://www.xfa.org/schema/xci/") }, connectionSet: { id: 1, check: ns => ns.startsWith("http://www.xfa.org/schema/xfa-connection-set/") }, datasets: { id: 2, check: ns => ns.startsWith("http://www.xfa.org/schema/xfa-data/") }, form: { id: 3, check: ns => ns.startsWith("http://www.xfa.org/schema/xfa-form/") }, localeSet: { id: 4, check: ns => ns.startsWith("http://www.xfa.org/schema/xfa-locale-set/") }, pdf: { id: 5, check: ns => ns === "http://ns.adobe.com/xdp/pdf/" }, signature: { id: 6, check: ns => ns === "http://www.w3.org/2000/09/xmldsig#" }, sourceSet: { id: 7, check: ns => ns.startsWith("http://www.xfa.org/schema/xfa-source-set/") }, stylesheet: { id: 8, check: ns => ns === "http://www.w3.org/1999/XSL/Transform" }, template: { id: 9, check: ns => ns.startsWith("http://www.xfa.org/schema/xfa-template/") }, xdc: { id: 10, check: ns => ns.startsWith("http://www.xfa.org/schema/xdc/") }, xdp: { id: 11, check: ns => ns === "http://ns.adobe.com/xdp/" }, xfdf: { id: 12, check: ns => ns === "http://ns.adobe.com/xfdf/" }, xhtml: { id: 13, check: ns => ns === "http://www.w3.org/1999/xhtml" }, xmpmeta: { id: 14, check: ns => ns === "http://ns.adobe.com/xmpmeta/" } }; exports.NamespaceIds = NamespaceIds; /***/ }), /* 78 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.createDataNode = createDataNode; exports.searchNode = searchNode; var _xfa_object = __w_pdfjs_require__(75); var _namespaces = __w_pdfjs_require__(77); var _util = __w_pdfjs_require__(2); const namePattern = /^[^.[]+/; const indexPattern = /^[^\]]+/; const operators = { dot: 0, dotDot: 1, dotHash: 2, dotBracket: 3, dotParen: 4 }; const shortcuts = new Map([["$data", (root, current) => root.datasets ? root.datasets.data : root], ["$record", (root, current) => (root.datasets ? root.datasets.data : root)[_xfa_object.$getChildren]()[0]], ["$template", (root, current) => root.template], ["$connectionSet", (root, current) => root.connectionSet], ["$form", (root, current) => root.form], ["$layout", (root, current) => root.layout], ["$host", (root, current) => root.host], ["$dataWindow", (root, current) => root.dataWindow], ["$event", (root, current) => root.event], ["!", (root, current) => root.datasets], ["$xfa", (root, current) => root], ["xfa", (root, current) => root], ["$", (root, current) => current]]); const somCache = new WeakMap(); const NS_DATASETS = _namespaces.NamespaceIds.datasets.id; function parseIndex(index) { index = index.trim(); if (index === "*") { return Infinity; } return parseInt(index, 10) || 0; } function parseExpression(expr, dotDotAllowed, noExpr = true) { let match = expr.match(namePattern); if (!match) { return null; } let [name] = match; const parsed = [{ name, cacheName: "." + name, index: 0, js: null, formCalc: null, operator: operators.dot }]; let pos = name.length; while (pos < expr.length) { const spos = pos; const char = expr.charAt(pos++); if (char === "[") { match = expr.slice(pos).match(indexPattern); if (!match) { (0, _util.warn)("XFA - Invalid index in SOM expression"); return null; } parsed[parsed.length - 1].index = parseIndex(match[0]); pos += match[0].length + 1; continue; } let operator; switch (expr.charAt(pos)) { case ".": if (!dotDotAllowed) { return null; } pos++; operator = operators.dotDot; break; case "#": pos++; operator = operators.dotHash; break; case "[": if (noExpr) { (0, _util.warn)("XFA - SOM expression contains a FormCalc subexpression which is not supported for now."); return null; } operator = operators.dotBracket; break; case "(": if (noExpr) { (0, _util.warn)("XFA - SOM expression contains a JavaScript subexpression which is not supported for now."); return null; } operator = operators.dotParen; break; default: operator = operators.dot; break; } match = expr.slice(pos).match(namePattern); if (!match) { break; } [name] = match; pos += name.length; parsed.push({ name, cacheName: expr.slice(spos, pos), operator, index: 0, js: null, formCalc: null }); } return parsed; } function searchNode(root, container, expr, dotDotAllowed = true, useCache = true) { const parsed = parseExpression(expr, dotDotAllowed); if (!parsed) { return null; } const fn = shortcuts.get(parsed[0].name); let i = 0; let isQualified; if (fn) { isQualified = true; root = [fn(root, container)]; i = 1; } else { isQualified = container === null; root = [container || root]; } for (let ii = parsed.length; i < ii; i++) { const { name, cacheName, operator, index } = parsed[i]; const nodes = []; for (const node of root) { if (!(node instanceof _xfa_object.XFAObject)) { continue; } let children, cached; if (useCache) { cached = somCache.get(node); if (!cached) { cached = new Map(); somCache.set(node, cached); } children = cached.get(cacheName); } if (!children) { switch (operator) { case operators.dot: children = node[_xfa_object.$getChildrenByName](name, false); break; case operators.dotDot: children = node[_xfa_object.$getChildrenByName](name, true); break; case operators.dotHash: children = node[_xfa_object.$getChildrenByClass](name); if (children instanceof _xfa_object.XFAObjectArray) { children = children.children; } else { children = [children]; } break; } if (useCache) { cached.set(cacheName, children); } } if (children.length > 0) { nodes.push(children); } } if (nodes.length === 0 && !isQualified && i === 0) { const parent = container[_xfa_object.$getParent](); container = parent; if (!container) { return null; } i = -1; root = [container]; continue; } if (isFinite(index)) { root = nodes.filter(node => index < node.length).map(node => node[index]); } else { root = nodes.reduce((acc, node) => acc.concat(node), []); } } if (root.length === 0) { return null; } return root; } function createNodes(root, path) { let node = null; for (const { name, index } of path) { for (let i = 0, ii = !isFinite(index) ? 0 : index; i <= ii; i++) { const nsId = root[_xfa_object.$namespaceId] === NS_DATASETS ? -1 : root[_xfa_object.$namespaceId]; node = new _xfa_object.XmlObject(nsId, name); root[_xfa_object.$appendChild](node); } root = node; } return node; } function createDataNode(root, container, expr) { const parsed = parseExpression(expr); if (!parsed) { return null; } if (parsed.some(x => x.operator === operators.dotDot)) { return null; } const fn = shortcuts.get(parsed[0].name); let i = 0; if (fn) { root = fn(root, container); i = 1; } else { root = container || root; } for (let ii = parsed.length; i < ii; i++) { const { name, operator, index } = parsed[i]; if (!isFinite(index)) { parsed[i].index = 0; return createNodes(root, parsed.slice(i)); } let children; switch (operator) { case operators.dot: children = root[_xfa_object.$getChildrenByName](name, false); break; case operators.dotDot: children = root[_xfa_object.$getChildrenByName](name, true); break; case operators.dotHash: children = root[_xfa_object.$getChildrenByClass](name); if (children instanceof _xfa_object.XFAObjectArray) { children = children.children; } else { children = [children]; } break; } if (children.length === 0) { return createNodes(root, parsed.slice(i)); } if (index < children.length) { const child = children[index]; if (!(child instanceof _xfa_object.XFAObject)) { (0, _util.warn)(`XFA - Cannot create a node.`); return null; } root = child; } else { parsed[i].index = index - children.length; return createNodes(root, parsed.slice(i)); } } return null; } /***/ }), /* 79 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.Binder = void 0; var _xfa_object = __w_pdfjs_require__(75); var _template = __w_pdfjs_require__(80); var _som = __w_pdfjs_require__(78); var _namespaces = __w_pdfjs_require__(77); var _util = __w_pdfjs_require__(2); const NS_DATASETS = _namespaces.NamespaceIds.datasets.id; function createText(content) { const node = new _template.Text({}); node[_xfa_object.$content] = content; return node; } class Binder { constructor(root) { this.root = root; this.datasets = root.datasets; if (root.datasets && root.datasets.data) { this.data = root.datasets.data; } else { this.data = new _xfa_object.XmlObject(_namespaces.NamespaceIds.datasets.id, "data"); } this.emptyMerge = this.data[_xfa_object.$getChildren]().length === 0; this.root.form = this.form = root.template[_xfa_object.$clone](); } _isConsumeData() { return !this.emptyMerge && this._mergeMode; } _isMatchTemplate() { return !this._isConsumeData(); } bind() { this._bindElement(this.form, this.data); return this.form; } getData() { return this.data; } _bindValue(formNode, data, picture) { formNode[_xfa_object.$data] = data; if (formNode[_xfa_object.$hasSettableValue]()) { if (data[_xfa_object.$isDataValue]()) { const value = data[_xfa_object.$getDataValue](); formNode[_xfa_object.$setValue](createText(value)); } else if (formNode instanceof _template.Field && formNode.ui && formNode.ui.choiceList && formNode.ui.choiceList.open === "multiSelect") { const value = data[_xfa_object.$getChildren]().map(child => child[_xfa_object.$content].trim()).join("\n"); formNode[_xfa_object.$setValue](createText(value)); } else if (this._isConsumeData()) { (0, _util.warn)(`XFA - Nodes haven't the same type.`); } } else if (!data[_xfa_object.$isDataValue]() || this._isMatchTemplate()) { this._bindElement(formNode, data); } else { (0, _util.warn)(`XFA - Nodes haven't the same type.`); } } _findDataByNameToConsume(name, isValue, dataNode, global) { if (!name) { return null; } let generator, match; for (let i = 0; i < 3; i++) { generator = dataNode[_xfa_object.$getRealChildrenByNameIt](name, false, true); while (true) { match = generator.next().value; if (!match) { break; } if (isValue === match[_xfa_object.$isDataValue]()) { return match; } } if (dataNode[_xfa_object.$namespaceId] === _namespaces.NamespaceIds.datasets.id && dataNode[_xfa_object.$nodeName] === "data") { break; } dataNode = dataNode[_xfa_object.$getParent](); } if (!global) { return null; } generator = this.data[_xfa_object.$getRealChildrenByNameIt](name, true, false); match = generator.next().value; if (match) { return match; } generator = this.data[_xfa_object.$getAttributeIt](name, true); match = generator.next().value; if (match && match[_xfa_object.$isDataValue]()) { return match; } return null; } _setProperties(formNode, dataNode) { if (!formNode.hasOwnProperty("setProperty")) { return; } for (const { ref, target, connection } of formNode.setProperty.children) { if (connection) { continue; } if (!ref) { continue; } const nodes = (0, _som.searchNode)(this.root, dataNode, ref, false, false); if (!nodes) { (0, _util.warn)(`XFA - Invalid reference: ${ref}.`); continue; } const [node] = nodes; if (!node[_xfa_object.$isDescendent](this.data)) { (0, _util.warn)(`XFA - Invalid node: must be a data node.`); continue; } const targetNodes = (0, _som.searchNode)(this.root, formNode, target, false, false); if (!targetNodes) { (0, _util.warn)(`XFA - Invalid target: ${target}.`); continue; } const [targetNode] = targetNodes; if (!targetNode[_xfa_object.$isDescendent](formNode)) { (0, _util.warn)(`XFA - Invalid target: must be a property or subproperty.`); continue; } const targetParent = targetNode[_xfa_object.$getParent](); if (targetNode instanceof _template.SetProperty || targetParent instanceof _template.SetProperty) { (0, _util.warn)(`XFA - Invalid target: cannot be a setProperty or one of its properties.`); continue; } if (targetNode instanceof _template.BindItems || targetParent instanceof _template.BindItems) { (0, _util.warn)(`XFA - Invalid target: cannot be a bindItems or one of its properties.`); continue; } const content = node[_xfa_object.$text](); const name = targetNode[_xfa_object.$nodeName]; if (targetNode instanceof _xfa_object.XFAAttribute) { const attrs = Object.create(null); attrs[name] = content; const obj = Reflect.construct(Object.getPrototypeOf(targetParent).constructor, [attrs]); targetParent[name] = obj[name]; continue; } if (!targetNode.hasOwnProperty(_xfa_object.$content)) { (0, _util.warn)(`XFA - Invalid node to use in setProperty`); continue; } targetNode[_xfa_object.$data] = node; targetNode[_xfa_object.$content] = content; targetNode[_xfa_object.$finalize](); } } _bindItems(formNode, dataNode) { if (!formNode.hasOwnProperty("items") || !formNode.hasOwnProperty("bindItems") || formNode.bindItems.isEmpty()) { return; } for (const item of formNode.items.children) { formNode[_xfa_object.$removeChild](item); } formNode.items.clear(); const labels = new _template.Items({}); const values = new _template.Items({}); formNode[_xfa_object.$appendChild](labels); formNode.items.push(labels); formNode[_xfa_object.$appendChild](values); formNode.items.push(values); for (const { ref, labelRef, valueRef, connection } of formNode.bindItems.children) { if (connection) { continue; } if (!ref) { continue; } const nodes = (0, _som.searchNode)(this.root, dataNode, ref, false, false); if (!nodes) { (0, _util.warn)(`XFA - Invalid reference: ${ref}.`); continue; } for (const node of nodes) { if (!node[_xfa_object.$isDescendent](this.datasets)) { (0, _util.warn)(`XFA - Invalid ref (${ref}): must be a datasets child.`); continue; } const labelNodes = (0, _som.searchNode)(this.root, node, labelRef, true, false); if (!labelNodes) { (0, _util.warn)(`XFA - Invalid label: ${labelRef}.`); continue; } const [labelNode] = labelNodes; if (!labelNode[_xfa_object.$isDescendent](this.datasets)) { (0, _util.warn)(`XFA - Invalid label: must be a datasets child.`); continue; } const valueNodes = (0, _som.searchNode)(this.root, node, valueRef, true, false); if (!valueNodes) { (0, _util.warn)(`XFA - Invalid value: ${valueRef}.`); continue; } const [valueNode] = valueNodes; if (!valueNode[_xfa_object.$isDescendent](this.datasets)) { (0, _util.warn)(`XFA - Invalid value: must be a datasets child.`); continue; } const label = createText(labelNode[_xfa_object.$text]()); const value = createText(valueNode[_xfa_object.$text]()); labels[_xfa_object.$appendChild](label); labels.text.push(label); values[_xfa_object.$appendChild](value); values.text.push(value); } } } _bindOccurrences(formNode, matches, picture) { let baseClone; if (matches.length > 1) { baseClone = formNode[_xfa_object.$clone](); baseClone[_xfa_object.$removeChild](baseClone.occur); baseClone.occur = null; } this._bindValue(formNode, matches[0], picture); this._setProperties(formNode, matches[0]); this._bindItems(formNode, matches[0]); if (matches.length === 1) { return; } const parent = formNode[_xfa_object.$getParent](); const name = formNode[_xfa_object.$nodeName]; const pos = parent[_xfa_object.$indexOf](formNode); for (let i = 1, ii = matches.length; i < ii; i++) { const match = matches[i]; const clone = baseClone[_xfa_object.$clone](); parent[name].push(clone); parent[_xfa_object.$insertAt](pos + i, clone); this._bindValue(clone, match, picture); this._setProperties(clone, match); this._bindItems(clone, match); } } _createOccurrences(formNode) { if (!this.emptyMerge) { return; } const { occur } = formNode; if (!occur || occur.initial <= 1) { return; } const parent = formNode[_xfa_object.$getParent](); const name = formNode[_xfa_object.$nodeName]; if (!(parent[name] instanceof _xfa_object.XFAObjectArray)) { return; } let currentNumber; if (formNode.name) { currentNumber = parent[name].children.filter(e => e.name === formNode.name).length; } else { currentNumber = parent[name].children.length; } const pos = parent[_xfa_object.$indexOf](formNode) + 1; const ii = occur.initial - currentNumber; if (ii) { const nodeClone = formNode[_xfa_object.$clone](); nodeClone[_xfa_object.$removeChild](nodeClone.occur); nodeClone.occur = null; parent[name].push(nodeClone); parent[_xfa_object.$insertAt](pos, nodeClone); for (let i = 1; i < ii; i++) { const clone = nodeClone[_xfa_object.$clone](); parent[name].push(clone); parent[_xfa_object.$insertAt](pos + i, clone); } } } _getOccurInfo(formNode) { const { name, occur } = formNode; if (!occur || !name) { return [1, 1]; } const max = occur.max === -1 ? Infinity : occur.max; return [occur.min, max]; } _setAndBind(formNode, dataNode) { this._setProperties(formNode, dataNode); this._bindItems(formNode, dataNode); this._bindElement(formNode, dataNode); } _bindElement(formNode, dataNode) { const uselessNodes = []; this._createOccurrences(formNode); for (const child of formNode[_xfa_object.$getChildren]()) { if (child[_xfa_object.$data]) { continue; } if (this._mergeMode === undefined && child[_xfa_object.$nodeName] === "subform") { this._mergeMode = child.mergeMode === "consumeData"; const dataChildren = dataNode[_xfa_object.$getChildren](); if (dataChildren.length > 0) { this._bindOccurrences(child, [dataChildren[0]], null); } else if (this.emptyMerge) { const nsId = dataNode[_xfa_object.$namespaceId] === NS_DATASETS ? -1 : dataNode[_xfa_object.$namespaceId]; const dataChild = child[_xfa_object.$data] = new _xfa_object.XmlObject(nsId, child.name || "root"); dataNode[_xfa_object.$appendChild](dataChild); this._bindElement(child, dataChild); } continue; } if (!child[_xfa_object.$isBindable]()) { continue; } let global = false; let picture = null; let ref = null; let match = null; if (child.bind) { switch (child.bind.match) { case "none": this._setAndBind(child, dataNode); continue; case "global": global = true; break; case "dataRef": if (!child.bind.ref) { (0, _util.warn)(`XFA - ref is empty in node ${child[_xfa_object.$nodeName]}.`); this._setAndBind(child, dataNode); continue; } ref = child.bind.ref; break; } if (child.bind.picture) { picture = child.bind.picture[_xfa_object.$content]; } } const [min, max] = this._getOccurInfo(child); if (ref) { match = (0, _som.searchNode)(this.root, dataNode, ref, true, false); if (match === null) { match = (0, _som.createDataNode)(this.data, dataNode, ref); if (!match) { continue; } if (this._isConsumeData()) { match[_xfa_object.$consumed] = true; } this._setAndBind(child, match); continue; } else { if (this._isConsumeData()) { match = match.filter(node => !node[_xfa_object.$consumed]); } if (match.length > max) { match = match.slice(0, max); } else if (match.length === 0) { match = null; } if (match && this._isConsumeData()) { match.forEach(node => { node[_xfa_object.$consumed] = true; }); } } } else { if (!child.name) { this._setAndBind(child, dataNode); continue; } if (this._isConsumeData()) { const matches = []; while (matches.length < max) { const found = this._findDataByNameToConsume(child.name, child[_xfa_object.$hasSettableValue](), dataNode, global); if (!found) { break; } found[_xfa_object.$consumed] = true; matches.push(found); } match = matches.length > 0 ? matches : null; } else { match = dataNode[_xfa_object.$getRealChildrenByNameIt](child.name, false, this.emptyMerge).next().value; if (!match) { if (min === 0) { uselessNodes.push(child); continue; } const nsId = dataNode[_xfa_object.$namespaceId] === NS_DATASETS ? -1 : dataNode[_xfa_object.$namespaceId]; match = child[_xfa_object.$data] = new _xfa_object.XmlObject(nsId, child.name); if (this.emptyMerge) { match[_xfa_object.$consumed] = true; } dataNode[_xfa_object.$appendChild](match); this._setAndBind(child, match); continue; } if (this.emptyMerge) { match[_xfa_object.$consumed] = true; } match = [match]; } } if (match) { this._bindOccurrences(child, match, picture); } else if (min > 0) { this._setAndBind(child, dataNode); } else { uselessNodes.push(child); } } uselessNodes.forEach(node => node[_xfa_object.$getParent]()[_xfa_object.$removeChild](node)); } } exports.Binder = Binder; /***/ }), /* 80 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.Value = exports.Text = exports.TemplateNamespace = exports.Template = exports.SetProperty = exports.Items = exports.Field = exports.BindItems = void 0; var _xfa_object = __w_pdfjs_require__(75); var _namespaces = __w_pdfjs_require__(77); var _layout = __w_pdfjs_require__(81); var _html_utils = __w_pdfjs_require__(82); var _utils = __w_pdfjs_require__(76); var _util = __w_pdfjs_require__(2); var _fonts = __w_pdfjs_require__(83); var _core_utils = __w_pdfjs_require__(9); var _som = __w_pdfjs_require__(78); const TEMPLATE_NS_ID = _namespaces.NamespaceIds.template.id; const SVG_NS = "http://www.w3.org/2000/svg"; const MAX_ATTEMPTS_FOR_LRTB_LAYOUT = 2; const MAX_EMPTY_PAGES = 3; const DEFAULT_TAB_INDEX = 5000; const HEADING_PATTERN = /^H(\d+)$/; const MIMES = new Set(["image/gif", "image/jpeg", "image/jpg", "image/pjpeg", "image/png", "image/apng", "image/x-png", "image/bmp", "image/x-ms-bmp", "image/tiff", "image/tif", "application/octet-stream"]); const IMAGES_HEADERS = [[[0x42, 0x4d], "image/bmp"], [[0xff, 0xd8, 0xff], "image/jpeg"], [[0x49, 0x49, 0x2a, 0x00], "image/tiff"], [[0x4d, 0x4d, 0x00, 0x2a], "image/tiff"], [[0x47, 0x49, 0x46, 0x38, 0x39, 0x61], "image/gif"], [[0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a], "image/png"]]; function getBorderDims(node) { if (!node || !node.border) { return { w: 0, h: 0 }; } const borderExtra = node.border[_xfa_object.$getExtra](); if (!borderExtra) { return { w: 0, h: 0 }; } return { w: borderExtra.widths[0] + borderExtra.widths[2] + borderExtra.insets[0] + borderExtra.insets[2], h: borderExtra.widths[1] + borderExtra.widths[3] + borderExtra.insets[1] + borderExtra.insets[3] }; } function hasMargin(node) { return node.margin && (node.margin.topInset || node.margin.rightInset || node.margin.bottomInset || node.margin.leftInset); } function _setValue(templateNode, value) { if (!templateNode.value) { const nodeValue = new Value({}); templateNode[_xfa_object.$appendChild](nodeValue); templateNode.value = nodeValue; } templateNode.value[_xfa_object.$setValue](value); } function* getContainedChildren(node) { for (const child of node[_xfa_object.$getChildren]()) { if (child instanceof SubformSet) { yield* child[_xfa_object.$getContainedChildren](); continue; } yield child; } } function setTabIndex(node) { while (node) { if (!node.traversal) { node[_xfa_object.$tabIndex] = node[_xfa_object.$getParent]()[_xfa_object.$tabIndex]; return; } if (node[_xfa_object.$tabIndex]) { return; } let next = null; for (const child of node.traversal[_xfa_object.$getChildren]()) { if (child.operation === "next") { next = child; break; } } if (!next || !next.ref) { node[_xfa_object.$tabIndex] = node[_xfa_object.$getParent]()[_xfa_object.$tabIndex]; return; } const root = node[_xfa_object.$getTemplateRoot](); node[_xfa_object.$tabIndex] = ++root[_xfa_object.$tabIndex]; const ref = root[_xfa_object.$searchNode](next.ref, node); if (!ref) { return; } node = ref[0]; } } function applyAssist(obj, attributes) { const assist = obj.assist; if (assist) { const assistTitle = assist[_xfa_object.$toHTML](); if (assistTitle) { attributes.title = assistTitle; } const role = assist.role; const match = role.match(HEADING_PATTERN); if (match) { const ariaRole = "heading"; const ariaLevel = match[1]; attributes.role = ariaRole; attributes["aria-level"] = ariaLevel; } } if (obj.layout === "table") { attributes.role = "table"; } else if (obj.layout === "row") { attributes.role = "row"; } else { const parent = obj[_xfa_object.$getParent](); if (parent.layout === "row") { if (parent.assist && parent.assist.role === "TH") { attributes.role = "columnheader"; } else { attributes.role = "cell"; } } } } function ariaLabel(obj) { if (!obj.assist) { return null; } const assist = obj.assist; if (assist.speak && assist.speak[_xfa_object.$content] !== "") { return assist.speak[_xfa_object.$content]; } if (assist.toolTip) { return assist.toolTip[_xfa_object.$content]; } return null; } function valueToHtml(value) { return _utils.HTMLResult.success({ name: "div", attributes: { class: ["xfaRich"], style: Object.create(null) }, children: [{ name: "span", attributes: { style: Object.create(null) }, value }] }); } function setFirstUnsplittable(node) { const root = node[_xfa_object.$getTemplateRoot](); if (root[_xfa_object.$extra].firstUnsplittable === null) { root[_xfa_object.$extra].firstUnsplittable = node; root[_xfa_object.$extra].noLayoutFailure = true; } } function unsetFirstUnsplittable(node) { const root = node[_xfa_object.$getTemplateRoot](); if (root[_xfa_object.$extra].firstUnsplittable === node) { root[_xfa_object.$extra].noLayoutFailure = false; } } function handleBreak(node) { if (node[_xfa_object.$extra]) { return false; } node[_xfa_object.$extra] = Object.create(null); if (node.targetType === "auto") { return false; } const root = node[_xfa_object.$getTemplateRoot](); let target = null; if (node.target) { target = root[_xfa_object.$searchNode](node.target, node[_xfa_object.$getParent]()); if (!target) { return false; } target = target[0]; } const { currentPageArea, currentContentArea } = root[_xfa_object.$extra]; if (node.targetType === "pageArea") { if (!(target instanceof PageArea)) { target = null; } if (node.startNew) { node[_xfa_object.$extra].target = target || currentPageArea; return true; } else if (target && target !== currentPageArea) { node[_xfa_object.$extra].target = target; return true; } return false; } if (!(target instanceof ContentArea)) { target = null; } const pageArea = target && target[_xfa_object.$getParent](); let index; let nextPageArea = pageArea; if (node.startNew) { if (target) { const contentAreas = pageArea.contentArea.children; const indexForCurrent = contentAreas.indexOf(currentContentArea); const indexForTarget = contentAreas.indexOf(target); if (indexForCurrent !== -1 && indexForCurrent < indexForTarget) { nextPageArea = null; } index = indexForTarget - 1; } else { index = currentPageArea.contentArea.children.indexOf(currentContentArea); } } else if (target && target !== currentContentArea) { const contentAreas = pageArea.contentArea.children; index = contentAreas.indexOf(target) - 1; nextPageArea = pageArea === currentPageArea ? null : pageArea; } else { return false; } node[_xfa_object.$extra].target = nextPageArea; node[_xfa_object.$extra].index = index; return true; } function handleOverflow(node, extraNode, space) { const root = node[_xfa_object.$getTemplateRoot](); const saved = root[_xfa_object.$extra].noLayoutFailure; const savedMethod = extraNode[_xfa_object.$getSubformParent]; extraNode[_xfa_object.$getSubformParent] = () => node; root[_xfa_object.$extra].noLayoutFailure = true; const res = extraNode[_xfa_object.$toHTML](space); node[_xfa_object.$addHTML](res.html, res.bbox); root[_xfa_object.$extra].noLayoutFailure = saved; extraNode[_xfa_object.$getSubformParent] = savedMethod; } class AppearanceFilter extends _xfa_object.StringObject { constructor(attributes) { super(TEMPLATE_NS_ID, "appearanceFilter"); this.id = attributes.id || ""; this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; } } class Arc extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "arc", true); this.circular = (0, _utils.getInteger)({ data: attributes.circular, defaultValue: 0, validate: x => x === 1 }); this.hand = (0, _utils.getStringOption)(attributes.hand, ["even", "left", "right"]); this.id = attributes.id || ""; this.startAngle = (0, _utils.getFloat)({ data: attributes.startAngle, defaultValue: 0, validate: x => true }); this.sweepAngle = (0, _utils.getFloat)({ data: attributes.sweepAngle, defaultValue: 360, validate: x => true }); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.edge = null; this.fill = null; } [_xfa_object.$toHTML]() { const edge = this.edge ? this.edge : new Edge({}); const edgeStyle = edge[_xfa_object.$toStyle](); const style = Object.create(null); if (this.fill && this.fill.presence === "visible") { Object.assign(style, this.fill[_xfa_object.$toStyle]()); } else { style.fill = "transparent"; } style.strokeWidth = (0, _html_utils.measureToString)(edge.presence === "visible" ? edge.thickness : 0); style.stroke = edgeStyle.color; let arc; const attributes = { xmlns: SVG_NS, style: { width: "100%", height: "100%", overflow: "visible" } }; if (this.sweepAngle === 360) { arc = { name: "ellipse", attributes: { xmlns: SVG_NS, cx: "50%", cy: "50%", rx: "50%", ry: "50%", style } }; } else { const startAngle = this.startAngle * Math.PI / 180; const sweepAngle = this.sweepAngle * Math.PI / 180; const largeArc = this.sweepAngle > 180 ? 1 : 0; const [x1, y1, x2, y2] = [50 * (1 + Math.cos(startAngle)), 50 * (1 - Math.sin(startAngle)), 50 * (1 + Math.cos(startAngle + sweepAngle)), 50 * (1 - Math.sin(startAngle + sweepAngle))]; arc = { name: "path", attributes: { xmlns: SVG_NS, d: `M ${x1} ${y1} A 50 50 0 ${largeArc} 0 ${x2} ${y2}`, vectorEffect: "non-scaling-stroke", style } }; Object.assign(attributes, { viewBox: "0 0 100 100", preserveAspectRatio: "none" }); } const svg = { name: "svg", children: [arc], attributes }; const parent = this[_xfa_object.$getParent]()[_xfa_object.$getParent](); if (hasMargin(parent)) { return _utils.HTMLResult.success({ name: "div", attributes: { style: { display: "inline", width: "100%", height: "100%" } }, children: [svg] }); } svg.attributes.style.position = "absolute"; return _utils.HTMLResult.success(svg); } } class Area extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "area", true); this.colSpan = (0, _utils.getInteger)({ data: attributes.colSpan, defaultValue: 1, validate: n => n >= 1 || n === -1 }); this.id = attributes.id || ""; this.name = attributes.name || ""; this.relevant = (0, _utils.getRelevant)(attributes.relevant); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.x = (0, _utils.getMeasurement)(attributes.x, "0pt"); this.y = (0, _utils.getMeasurement)(attributes.y, "0pt"); this.desc = null; this.extras = null; this.area = new _xfa_object.XFAObjectArray(); this.draw = new _xfa_object.XFAObjectArray(); this.exObject = new _xfa_object.XFAObjectArray(); this.exclGroup = new _xfa_object.XFAObjectArray(); this.field = new _xfa_object.XFAObjectArray(); this.subform = new _xfa_object.XFAObjectArray(); this.subformSet = new _xfa_object.XFAObjectArray(); } *[_xfa_object.$getContainedChildren]() { yield* getContainedChildren(this); } [_xfa_object.$isTransparent]() { return true; } [_xfa_object.$isBindable]() { return true; } [_xfa_object.$addHTML](html, bbox) { const [x, y, w, h] = bbox; this[_xfa_object.$extra].width = Math.max(this[_xfa_object.$extra].width, x + w); this[_xfa_object.$extra].height = Math.max(this[_xfa_object.$extra].height, y + h); this[_xfa_object.$extra].children.push(html); } [_xfa_object.$getAvailableSpace]() { return this[_xfa_object.$extra].availableSpace; } [_xfa_object.$toHTML](availableSpace) { const style = (0, _html_utils.toStyle)(this, "position"); const attributes = { style, id: this[_xfa_object.$uid], class: ["xfaArea"] }; if ((0, _html_utils.isPrintOnly)(this)) { attributes.class.push("xfaPrintOnly"); } if (this.name) { attributes.xfaName = this.name; } const children = []; this[_xfa_object.$extra] = { children, width: 0, height: 0, availableSpace }; const result = this[_xfa_object.$childrenToHTML]({ filter: new Set(["area", "draw", "field", "exclGroup", "subform", "subformSet"]), include: true }); if (!result.success) { if (result.isBreak()) { return result; } delete this[_xfa_object.$extra]; return _utils.HTMLResult.FAILURE; } style.width = (0, _html_utils.measureToString)(this[_xfa_object.$extra].width); style.height = (0, _html_utils.measureToString)(this[_xfa_object.$extra].height); const html = { name: "div", attributes, children }; const bbox = [this.x, this.y, this[_xfa_object.$extra].width, this[_xfa_object.$extra].height]; delete this[_xfa_object.$extra]; return _utils.HTMLResult.success(html, bbox); } } class Assist extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "assist", true); this.id = attributes.id || ""; this.role = attributes.role || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.speak = null; this.toolTip = null; } [_xfa_object.$toHTML]() { return this.toolTip && this.toolTip[_xfa_object.$content] ? this.toolTip[_xfa_object.$content] : null; } } class Barcode extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "barcode", true); this.charEncoding = (0, _utils.getKeyword)({ data: attributes.charEncoding ? attributes.charEncoding.toLowerCase() : "", defaultValue: "", validate: k => ["utf-8", "big-five", "fontspecific", "gbk", "gb-18030", "gb-2312", "ksc-5601", "none", "shift-jis", "ucs-2", "utf-16"].includes(k) || k.match(/iso-8859-\d{2}/) }); this.checksum = (0, _utils.getStringOption)(attributes.checksum, ["none", "1mod10", "1mod10_1mod11", "2mod10", "auto"]); this.dataColumnCount = (0, _utils.getInteger)({ data: attributes.dataColumnCount, defaultValue: -1, validate: x => x >= 0 }); this.dataLength = (0, _utils.getInteger)({ data: attributes.dataLength, defaultValue: -1, validate: x => x >= 0 }); this.dataPrep = (0, _utils.getStringOption)(attributes.dataPrep, ["none", "flateCompress"]); this.dataRowCount = (0, _utils.getInteger)({ data: attributes.dataRowCount, defaultValue: -1, validate: x => x >= 0 }); this.endChar = attributes.endChar || ""; this.errorCorrectionLevel = (0, _utils.getInteger)({ data: attributes.errorCorrectionLevel, defaultValue: -1, validate: x => x >= 0 && x <= 8 }); this.id = attributes.id || ""; this.moduleHeight = (0, _utils.getMeasurement)(attributes.moduleHeight, "5mm"); this.moduleWidth = (0, _utils.getMeasurement)(attributes.moduleWidth, "0.25mm"); this.printCheckDigit = (0, _utils.getInteger)({ data: attributes.printCheckDigit, defaultValue: 0, validate: x => x === 1 }); this.rowColumnRatio = (0, _utils.getRatio)(attributes.rowColumnRatio); this.startChar = attributes.startChar || ""; this.textLocation = (0, _utils.getStringOption)(attributes.textLocation, ["below", "above", "aboveEmbedded", "belowEmbedded", "none"]); this.truncate = (0, _utils.getInteger)({ data: attributes.truncate, defaultValue: 0, validate: x => x === 1 }); this.type = (0, _utils.getStringOption)(attributes.type ? attributes.type.toLowerCase() : "", ["aztec", "codabar", "code2of5industrial", "code2of5interleaved", "code2of5matrix", "code2of5standard", "code3of9", "code3of9extended", "code11", "code49", "code93", "code128", "code128a", "code128b", "code128c", "code128sscc", "datamatrix", "ean8", "ean8add2", "ean8add5", "ean13", "ean13add2", "ean13add5", "ean13pwcd", "fim", "logmars", "maxicode", "msi", "pdf417", "pdf417macro", "plessey", "postauscust2", "postauscust3", "postausreplypaid", "postausstandard", "postukrm4scc", "postusdpbc", "postusimb", "postusstandard", "postus5zip", "qrcode", "rfid", "rss14", "rss14expanded", "rss14limited", "rss14stacked", "rss14stackedomni", "rss14truncated", "telepen", "ucc128", "ucc128random", "ucc128sscc", "upca", "upcaadd2", "upcaadd5", "upcapwcd", "upce", "upceadd2", "upceadd5", "upcean2", "upcean5", "upsmaxicode"]); this.upsMode = (0, _utils.getStringOption)(attributes.upsMode, ["usCarrier", "internationalCarrier", "secureSymbol", "standardSymbol"]); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.wideNarrowRatio = (0, _utils.getRatio)(attributes.wideNarrowRatio); this.encrypt = null; this.extras = null; } } class Bind extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "bind", true); this.match = (0, _utils.getStringOption)(attributes.match, ["once", "dataRef", "global", "none"]); this.ref = attributes.ref || ""; this.picture = null; } } class BindItems extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "bindItems"); this.connection = attributes.connection || ""; this.labelRef = attributes.labelRef || ""; this.ref = attributes.ref || ""; this.valueRef = attributes.valueRef || ""; } } exports.BindItems = BindItems; class Bookend extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "bookend"); this.id = attributes.id || ""; this.leader = attributes.leader || ""; this.trailer = attributes.trailer || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; } } class BooleanElement extends _xfa_object.Option01 { constructor(attributes) { super(TEMPLATE_NS_ID, "boolean"); this.id = attributes.id || ""; this.name = attributes.name || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; } [_xfa_object.$toHTML](availableSpace) { return valueToHtml(this[_xfa_object.$content] === 1 ? "1" : "0"); } } class Border extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "border", true); this.break = (0, _utils.getStringOption)(attributes.break, ["close", "open"]); this.hand = (0, _utils.getStringOption)(attributes.hand, ["even", "left", "right"]); this.id = attributes.id || ""; this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]); this.relevant = (0, _utils.getRelevant)(attributes.relevant); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.corner = new _xfa_object.XFAObjectArray(4); this.edge = new _xfa_object.XFAObjectArray(4); this.extras = null; this.fill = null; this.margin = null; } [_xfa_object.$getExtra]() { if (!this[_xfa_object.$extra]) { const edges = this.edge.children.slice(); if (edges.length < 4) { const defaultEdge = edges[edges.length - 1] || new Edge({}); for (let i = edges.length; i < 4; i++) { edges.push(defaultEdge); } } const widths = edges.map(edge => edge.thickness); const insets = [0, 0, 0, 0]; if (this.margin) { insets[0] = this.margin.topInset; insets[1] = this.margin.rightInset; insets[2] = this.margin.bottomInset; insets[3] = this.margin.leftInset; } this[_xfa_object.$extra] = { widths, insets, edges }; } return this[_xfa_object.$extra]; } [_xfa_object.$toStyle]() { const { edges } = this[_xfa_object.$getExtra](); const edgeStyles = edges.map(node => { const style = node[_xfa_object.$toStyle](); style.color = style.color || "#000000"; return style; }); const style = Object.create(null); if (this.margin) { Object.assign(style, this.margin[_xfa_object.$toStyle]()); } if (this.fill && this.fill.presence === "visible") { Object.assign(style, this.fill[_xfa_object.$toStyle]()); } if (this.corner.children.some(node => node.radius !== 0)) { const cornerStyles = this.corner.children.map(node => node[_xfa_object.$toStyle]()); if (cornerStyles.length === 2 || cornerStyles.length === 3) { const last = cornerStyles[cornerStyles.length - 1]; for (let i = cornerStyles.length; i < 4; i++) { cornerStyles.push(last); } } style.borderRadius = cornerStyles.map(s => s.radius).join(" "); } switch (this.presence) { case "invisible": case "hidden": style.borderStyle = ""; break; case "inactive": style.borderStyle = "none"; break; default: style.borderStyle = edgeStyles.map(s => s.style).join(" "); break; } style.borderWidth = edgeStyles.map(s => s.width).join(" "); style.borderColor = edgeStyles.map(s => s.color).join(" "); return style; } } class Break extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "break", true); this.after = (0, _utils.getStringOption)(attributes.after, ["auto", "contentArea", "pageArea", "pageEven", "pageOdd"]); this.afterTarget = attributes.afterTarget || ""; this.before = (0, _utils.getStringOption)(attributes.before, ["auto", "contentArea", "pageArea", "pageEven", "pageOdd"]); this.beforeTarget = attributes.beforeTarget || ""; this.bookendLeader = attributes.bookendLeader || ""; this.bookendTrailer = attributes.bookendTrailer || ""; this.id = attributes.id || ""; this.overflowLeader = attributes.overflowLeader || ""; this.overflowTarget = attributes.overflowTarget || ""; this.overflowTrailer = attributes.overflowTrailer || ""; this.startNew = (0, _utils.getInteger)({ data: attributes.startNew, defaultValue: 0, validate: x => x === 1 }); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.extras = null; } } class BreakAfter extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "breakAfter", true); this.id = attributes.id || ""; this.leader = attributes.leader || ""; this.startNew = (0, _utils.getInteger)({ data: attributes.startNew, defaultValue: 0, validate: x => x === 1 }); this.target = attributes.target || ""; this.targetType = (0, _utils.getStringOption)(attributes.targetType, ["auto", "contentArea", "pageArea"]); this.trailer = attributes.trailer || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.script = null; } } class BreakBefore extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "breakBefore", true); this.id = attributes.id || ""; this.leader = attributes.leader || ""; this.startNew = (0, _utils.getInteger)({ data: attributes.startNew, defaultValue: 0, validate: x => x === 1 }); this.target = attributes.target || ""; this.targetType = (0, _utils.getStringOption)(attributes.targetType, ["auto", "contentArea", "pageArea"]); this.trailer = attributes.trailer || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.script = null; } [_xfa_object.$toHTML](availableSpace) { this[_xfa_object.$extra] = {}; return _utils.HTMLResult.FAILURE; } } class Button extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "button", true); this.highlight = (0, _utils.getStringOption)(attributes.highlight, ["inverted", "none", "outline", "push"]); this.id = attributes.id || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.extras = null; } [_xfa_object.$toHTML](availableSpace) { const parent = this[_xfa_object.$getParent](); const grandpa = parent[_xfa_object.$getParent](); const htmlButton = { name: "button", attributes: { id: this[_xfa_object.$uid], class: ["xfaButton"], style: {} }, children: [] }; for (const event of grandpa.event.children) { if (event.activity !== "click" || !event.script) { continue; } const jsURL = (0, _core_utils.recoverJsURL)(event.script[_xfa_object.$content]); if (!jsURL) { continue; } const href = (0, _html_utils.fixURL)(jsURL.url); if (!href) { continue; } htmlButton.children.push({ name: "a", attributes: { id: "link" + this[_xfa_object.$uid], href, newWindow: jsURL.newWindow, class: ["xfaLink"], style: {} }, children: [] }); } return _utils.HTMLResult.success(htmlButton); } } class Calculate extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "calculate", true); this.id = attributes.id || ""; this.override = (0, _utils.getStringOption)(attributes.override, ["disabled", "error", "ignore", "warning"]); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.extras = null; this.message = null; this.script = null; } } class Caption extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "caption", true); this.id = attributes.id || ""; this.placement = (0, _utils.getStringOption)(attributes.placement, ["left", "bottom", "inline", "right", "top"]); this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]); this.reserve = Math.ceil((0, _utils.getMeasurement)(attributes.reserve)); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.extras = null; this.font = null; this.margin = null; this.para = null; this.value = null; } [_xfa_object.$setValue](value) { _setValue(this, value); } [_xfa_object.$getExtra](availableSpace) { if (!this[_xfa_object.$extra]) { let { width, height } = availableSpace; switch (this.placement) { case "left": case "right": case "inline": width = this.reserve <= 0 ? width : this.reserve; break; case "top": case "bottom": height = this.reserve <= 0 ? height : this.reserve; break; } this[_xfa_object.$extra] = (0, _html_utils.layoutNode)(this, { width, height }); } return this[_xfa_object.$extra]; } [_xfa_object.$toHTML](availableSpace) { if (!this.value) { return _utils.HTMLResult.EMPTY; } this[_xfa_object.$pushPara](); const value = this.value[_xfa_object.$toHTML](availableSpace).html; if (!value) { this[_xfa_object.$popPara](); return _utils.HTMLResult.EMPTY; } const savedReserve = this.reserve; if (this.reserve <= 0) { const { w, h } = this[_xfa_object.$getExtra](availableSpace); switch (this.placement) { case "left": case "right": case "inline": this.reserve = w; break; case "top": case "bottom": this.reserve = h; break; } } const children = []; if (typeof value === "string") { children.push({ name: "#text", value }); } else { children.push(value); } const style = (0, _html_utils.toStyle)(this, "font", "margin", "visibility"); switch (this.placement) { case "left": case "right": if (this.reserve > 0) { style.width = (0, _html_utils.measureToString)(this.reserve); } break; case "top": case "bottom": if (this.reserve > 0) { style.height = (0, _html_utils.measureToString)(this.reserve); } break; } (0, _html_utils.setPara)(this, null, value); this[_xfa_object.$popPara](); this.reserve = savedReserve; return _utils.HTMLResult.success({ name: "div", attributes: { style, class: ["xfaCaption"] }, children }); } } class Certificate extends _xfa_object.StringObject { constructor(attributes) { super(TEMPLATE_NS_ID, "certificate"); this.id = attributes.id || ""; this.name = attributes.name || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; } } class Certificates extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "certificates", true); this.credentialServerPolicy = (0, _utils.getStringOption)(attributes.credentialServerPolicy, ["optional", "required"]); this.id = attributes.id || ""; this.url = attributes.url || ""; this.urlPolicy = attributes.urlPolicy || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.encryption = null; this.issuers = null; this.keyUsage = null; this.oids = null; this.signing = null; this.subjectDNs = null; } } class CheckButton extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "checkButton", true); this.id = attributes.id || ""; this.mark = (0, _utils.getStringOption)(attributes.mark, ["default", "check", "circle", "cross", "diamond", "square", "star"]); this.shape = (0, _utils.getStringOption)(attributes.shape, ["square", "round"]); this.size = (0, _utils.getMeasurement)(attributes.size, "10pt"); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.border = null; this.extras = null; this.margin = null; } [_xfa_object.$toHTML](availableSpace) { const style = (0, _html_utils.toStyle)("margin"); const size = (0, _html_utils.measureToString)(this.size); style.width = style.height = size; let type; let className; let groupId; const field = this[_xfa_object.$getParent]()[_xfa_object.$getParent](); const items = field.items.children.length && field.items.children[0][_xfa_object.$toHTML]().html || []; const exportedValue = { on: (items[0] !== undefined ? items[0] : "on").toString(), off: (items[1] !== undefined ? items[1] : "off").toString() }; const value = field.value && field.value[_xfa_object.$text]() || "off"; const checked = value === exportedValue.on || undefined; const container = field[_xfa_object.$getSubformParent](); const fieldId = field[_xfa_object.$uid]; let dataId; if (container instanceof ExclGroup) { groupId = container[_xfa_object.$uid]; type = "radio"; className = "xfaRadio"; dataId = container[_xfa_object.$data] && container[_xfa_object.$data][_xfa_object.$uid] || container[_xfa_object.$uid]; } else { type = "checkbox"; className = "xfaCheckbox"; dataId = field[_xfa_object.$data] && field[_xfa_object.$data][_xfa_object.$uid] || field[_xfa_object.$uid]; } const input = { name: "input", attributes: { class: [className], style, fieldId, dataId, type, checked, xfaOn: exportedValue.on, xfaOff: exportedValue.off, "aria-label": ariaLabel(field) } }; if (groupId) { input.attributes.name = groupId; } return _utils.HTMLResult.success({ name: "label", attributes: { class: ["xfaLabel"] }, children: [input] }); } } class ChoiceList extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "choiceList", true); this.commitOn = (0, _utils.getStringOption)(attributes.commitOn, ["select", "exit"]); this.id = attributes.id || ""; this.open = (0, _utils.getStringOption)(attributes.open, ["userControl", "always", "multiSelect", "onEntry"]); this.textEntry = (0, _utils.getInteger)({ data: attributes.textEntry, defaultValue: 0, validate: x => x === 1 }); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.border = null; this.extras = null; this.margin = null; } [_xfa_object.$toHTML](availableSpace) { const style = (0, _html_utils.toStyle)(this, "border", "margin"); const ui = this[_xfa_object.$getParent](); const field = ui[_xfa_object.$getParent](); const fontSize = field.font && field.font.size || 10; const optionStyle = { fontSize: `calc(${fontSize}px * var(--zoom-factor))` }; const children = []; if (field.items.children.length > 0) { const items = field.items; let displayedIndex = 0; let saveIndex = 0; if (items.children.length === 2) { displayedIndex = items.children[0].save; saveIndex = 1 - displayedIndex; } const displayed = items.children[displayedIndex][_xfa_object.$toHTML]().html; const values = items.children[saveIndex][_xfa_object.$toHTML]().html; let selected = false; const value = field.value && field.value[_xfa_object.$text]() || ""; for (let i = 0, ii = displayed.length; i < ii; i++) { const option = { name: "option", attributes: { value: values[i] || displayed[i], style: optionStyle }, value: displayed[i] }; if (values[i] === value) { option.attributes.selected = selected = true; } children.push(option); } if (!selected) { children.splice(0, 0, { name: "option", attributes: { hidden: true, selected: true }, value: " " }); } } const selectAttributes = { class: ["xfaSelect"], fieldId: field[_xfa_object.$uid], dataId: field[_xfa_object.$data] && field[_xfa_object.$data][_xfa_object.$uid] || field[_xfa_object.$uid], style, "aria-label": ariaLabel(field) }; if (this.open === "multiSelect") { selectAttributes.multiple = true; } return _utils.HTMLResult.success({ name: "label", attributes: { class: ["xfaLabel"] }, children: [{ name: "select", children, attributes: selectAttributes }] }); } } class Color extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "color", true); this.cSpace = (0, _utils.getStringOption)(attributes.cSpace, ["SRGB"]); this.id = attributes.id || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.value = attributes.value ? (0, _utils.getColor)(attributes.value) : ""; this.extras = null; } [_xfa_object.$hasSettableValue]() { return false; } [_xfa_object.$toStyle]() { return this.value ? _util.Util.makeHexColor(this.value.r, this.value.g, this.value.b) : null; } } class Comb extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "comb"); this.id = attributes.id || ""; this.numberOfCells = (0, _utils.getInteger)({ data: attributes.numberOfCells, defaultValue: 0, validate: x => x >= 0 }); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; } } class Connect extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "connect", true); this.connection = attributes.connection || ""; this.id = attributes.id || ""; this.ref = attributes.ref || ""; this.usage = (0, _utils.getStringOption)(attributes.usage, ["exportAndImport", "exportOnly", "importOnly"]); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.picture = null; } } class ContentArea extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "contentArea", true); this.h = (0, _utils.getMeasurement)(attributes.h); this.id = attributes.id || ""; this.name = attributes.name || ""; this.relevant = (0, _utils.getRelevant)(attributes.relevant); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.w = (0, _utils.getMeasurement)(attributes.w); this.x = (0, _utils.getMeasurement)(attributes.x, "0pt"); this.y = (0, _utils.getMeasurement)(attributes.y, "0pt"); this.desc = null; this.extras = null; } [_xfa_object.$toHTML](availableSpace) { const left = (0, _html_utils.measureToString)(this.x); const top = (0, _html_utils.measureToString)(this.y); const style = { left, top, width: (0, _html_utils.measureToString)(this.w), height: (0, _html_utils.measureToString)(this.h) }; const classNames = ["xfaContentarea"]; if ((0, _html_utils.isPrintOnly)(this)) { classNames.push("xfaPrintOnly"); } return _utils.HTMLResult.success({ name: "div", children: [], attributes: { style, class: classNames, id: this[_xfa_object.$uid] } }); } } class Corner extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "corner", true); this.id = attributes.id || ""; this.inverted = (0, _utils.getInteger)({ data: attributes.inverted, defaultValue: 0, validate: x => x === 1 }); this.join = (0, _utils.getStringOption)(attributes.join, ["square", "round"]); this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]); this.radius = (0, _utils.getMeasurement)(attributes.radius); this.stroke = (0, _utils.getStringOption)(attributes.stroke, ["solid", "dashDot", "dashDotDot", "dashed", "dotted", "embossed", "etched", "lowered", "raised"]); this.thickness = (0, _utils.getMeasurement)(attributes.thickness, "0.5pt"); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.color = null; this.extras = null; } [_xfa_object.$toStyle]() { const style = (0, _html_utils.toStyle)(this, "visibility"); style.radius = (0, _html_utils.measureToString)(this.join === "square" ? 0 : this.radius); return style; } } class DateElement extends _xfa_object.ContentObject { constructor(attributes) { super(TEMPLATE_NS_ID, "date"); this.id = attributes.id || ""; this.name = attributes.name || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; } [_xfa_object.$finalize]() { const date = this[_xfa_object.$content].trim(); this[_xfa_object.$content] = date ? new Date(date) : null; } [_xfa_object.$toHTML](availableSpace) { return valueToHtml(this[_xfa_object.$content] ? this[_xfa_object.$content].toString() : ""); } } class DateTime extends _xfa_object.ContentObject { constructor(attributes) { super(TEMPLATE_NS_ID, "dateTime"); this.id = attributes.id || ""; this.name = attributes.name || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; } [_xfa_object.$finalize]() { const date = this[_xfa_object.$content].trim(); this[_xfa_object.$content] = date ? new Date(date) : null; } [_xfa_object.$toHTML](availableSpace) { return valueToHtml(this[_xfa_object.$content] ? this[_xfa_object.$content].toString() : ""); } } class DateTimeEdit extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "dateTimeEdit", true); this.hScrollPolicy = (0, _utils.getStringOption)(attributes.hScrollPolicy, ["auto", "off", "on"]); this.id = attributes.id || ""; this.picker = (0, _utils.getStringOption)(attributes.picker, ["host", "none"]); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.border = null; this.comb = null; this.extras = null; this.margin = null; } [_xfa_object.$toHTML](availableSpace) { const style = (0, _html_utils.toStyle)(this, "border", "font", "margin"); const field = this[_xfa_object.$getParent]()[_xfa_object.$getParent](); const html = { name: "input", attributes: { type: "text", fieldId: field[_xfa_object.$uid], dataId: field[_xfa_object.$data] && field[_xfa_object.$data][_xfa_object.$uid] || field[_xfa_object.$uid], class: ["xfaTextfield"], style, "aria-label": ariaLabel(field) } }; return _utils.HTMLResult.success({ name: "label", attributes: { class: ["xfaLabel"] }, children: [html] }); } } class Decimal extends _xfa_object.ContentObject { constructor(attributes) { super(TEMPLATE_NS_ID, "decimal"); this.fracDigits = (0, _utils.getInteger)({ data: attributes.fracDigits, defaultValue: 2, validate: x => true }); this.id = attributes.id || ""; this.leadDigits = (0, _utils.getInteger)({ data: attributes.leadDigits, defaultValue: -1, validate: x => true }); this.name = attributes.name || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; } [_xfa_object.$finalize]() { const number = parseFloat(this[_xfa_object.$content].trim()); this[_xfa_object.$content] = isNaN(number) ? null : number; } [_xfa_object.$toHTML](availableSpace) { return valueToHtml(this[_xfa_object.$content] !== null ? this[_xfa_object.$content].toString() : ""); } } class DefaultUi extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "defaultUi", true); this.id = attributes.id || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.extras = null; } } class Desc extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "desc", true); this.id = attributes.id || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.boolean = new _xfa_object.XFAObjectArray(); this.date = new _xfa_object.XFAObjectArray(); this.dateTime = new _xfa_object.XFAObjectArray(); this.decimal = new _xfa_object.XFAObjectArray(); this.exData = new _xfa_object.XFAObjectArray(); this.float = new _xfa_object.XFAObjectArray(); this.image = new _xfa_object.XFAObjectArray(); this.integer = new _xfa_object.XFAObjectArray(); this.text = new _xfa_object.XFAObjectArray(); this.time = new _xfa_object.XFAObjectArray(); } } class DigestMethod extends _xfa_object.OptionObject { constructor(attributes) { super(TEMPLATE_NS_ID, "digestMethod", ["", "SHA1", "SHA256", "SHA512", "RIPEMD160"]); this.id = attributes.id || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; } } class DigestMethods extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "digestMethods", true); this.id = attributes.id || ""; this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.digestMethod = new _xfa_object.XFAObjectArray(); } } class Draw extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "draw", true); this.anchorType = (0, _utils.getStringOption)(attributes.anchorType, ["topLeft", "bottomCenter", "bottomLeft", "bottomRight", "middleCenter", "middleLeft", "middleRight", "topCenter", "topRight"]); this.colSpan = (0, _utils.getInteger)({ data: attributes.colSpan, defaultValue: 1, validate: n => n >= 1 || n === -1 }); this.h = attributes.h ? (0, _utils.getMeasurement)(attributes.h) : ""; this.hAlign = (0, _utils.getStringOption)(attributes.hAlign, ["left", "center", "justify", "justifyAll", "radix", "right"]); this.id = attributes.id || ""; this.locale = attributes.locale || ""; this.maxH = (0, _utils.getMeasurement)(attributes.maxH, "0pt"); this.maxW = (0, _utils.getMeasurement)(attributes.maxW, "0pt"); this.minH = (0, _utils.getMeasurement)(attributes.minH, "0pt"); this.minW = (0, _utils.getMeasurement)(attributes.minW, "0pt"); this.name = attributes.name || ""; this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]); this.relevant = (0, _utils.getRelevant)(attributes.relevant); this.rotate = (0, _utils.getInteger)({ data: attributes.rotate, defaultValue: 0, validate: x => x % 90 === 0 }); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.w = attributes.w ? (0, _utils.getMeasurement)(attributes.w) : ""; this.x = (0, _utils.getMeasurement)(attributes.x, "0pt"); this.y = (0, _utils.getMeasurement)(attributes.y, "0pt"); this.assist = null; this.border = null; this.caption = null; this.desc = null; this.extras = null; this.font = null; this.keep = null; this.margin = null; this.para = null; this.traversal = null; this.ui = null; this.value = null; this.setProperty = new _xfa_object.XFAObjectArray(); } [_xfa_object.$setValue](value) { _setValue(this, value); } [_xfa_object.$toHTML](availableSpace) { setTabIndex(this); if (this.presence === "hidden" || this.presence === "inactive") { return _utils.HTMLResult.EMPTY; } (0, _html_utils.fixDimensions)(this); this[_xfa_object.$pushPara](); const savedW = this.w; const savedH = this.h; const { w, h, isBroken } = (0, _html_utils.layoutNode)(this, availableSpace); if (w && this.w === "") { if (isBroken && this[_xfa_object.$getSubformParent]()[_xfa_object.$isThereMoreWidth]()) { this[_xfa_object.$popPara](); return _utils.HTMLResult.FAILURE; } this.w = w; } if (h && this.h === "") { this.h = h; } setFirstUnsplittable(this); if (!(0, _layout.checkDimensions)(this, availableSpace)) { this.w = savedW; this.h = savedH; this[_xfa_object.$popPara](); return _utils.HTMLResult.FAILURE; } unsetFirstUnsplittable(this); const style = (0, _html_utils.toStyle)(this, "font", "hAlign", "dimensions", "position", "presence", "rotate", "anchorType", "border", "margin"); (0, _html_utils.setMinMaxDimensions)(this, style); if (style.margin) { style.padding = style.margin; delete style.margin; } const classNames = ["xfaDraw"]; if (this.font) { classNames.push("xfaFont"); } if ((0, _html_utils.isPrintOnly)(this)) { classNames.push("xfaPrintOnly"); } const attributes = { style, id: this[_xfa_object.$uid], class: classNames }; if (this.name) { attributes.xfaName = this.name; } const html = { name: "div", attributes, children: [] }; applyAssist(this, attributes); const bbox = (0, _html_utils.computeBbox)(this, html, availableSpace); const value = this.value ? this.value[_xfa_object.$toHTML](availableSpace).html : null; if (value === null) { this.w = savedW; this.h = savedH; this[_xfa_object.$popPara](); return _utils.HTMLResult.success((0, _html_utils.createWrapper)(this, html), bbox); } html.children.push(value); (0, _html_utils.setPara)(this, style, value); this.w = savedW; this.h = savedH; this[_xfa_object.$popPara](); return _utils.HTMLResult.success((0, _html_utils.createWrapper)(this, html), bbox); } } class Edge extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "edge", true); this.cap = (0, _utils.getStringOption)(attributes.cap, ["square", "butt", "round"]); this.id = attributes.id || ""; this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]); this.stroke = (0, _utils.getStringOption)(attributes.stroke, ["solid", "dashDot", "dashDotDot", "dashed", "dotted", "embossed", "etched", "lowered", "raised"]); this.thickness = (0, _utils.getMeasurement)(attributes.thickness, "0.5pt"); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.color = null; this.extras = null; } [_xfa_object.$toStyle]() { const style = (0, _html_utils.toStyle)(this, "visibility"); Object.assign(style, { linecap: this.cap, width: (0, _html_utils.measureToString)(this.thickness), color: this.color ? this.color[_xfa_object.$toStyle]() : "#000000", style: "" }); if (this.presence !== "visible") { style.style = "none"; } else { switch (this.stroke) { case "solid": style.style = "solid"; break; case "dashDot": style.style = "dashed"; break; case "dashDotDot": style.style = "dashed"; break; case "dashed": style.style = "dashed"; break; case "dotted": style.style = "dotted"; break; case "embossed": style.style = "ridge"; break; case "etched": style.style = "groove"; break; case "lowered": style.style = "inset"; break; case "raised": style.style = "outset"; break; } } return style; } } class Encoding extends _xfa_object.OptionObject { constructor(attributes) { super(TEMPLATE_NS_ID, "encoding", ["adbe.x509.rsa_sha1", "adbe.pkcs7.detached", "adbe.pkcs7.sha1"]); this.id = attributes.id || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; } } class Encodings extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "encodings", true); this.id = attributes.id || ""; this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.encoding = new _xfa_object.XFAObjectArray(); } } class Encrypt extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "encrypt", true); this.id = attributes.id || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.certificate = null; } } class EncryptData extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "encryptData", true); this.id = attributes.id || ""; this.operation = (0, _utils.getStringOption)(attributes.operation, ["encrypt", "decrypt"]); this.target = attributes.target || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.filter = null; this.manifest = null; } } class Encryption extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "encryption", true); this.id = attributes.id || ""; this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.certificate = new _xfa_object.XFAObjectArray(); } } class EncryptionMethod extends _xfa_object.OptionObject { constructor(attributes) { super(TEMPLATE_NS_ID, "encryptionMethod", ["", "AES256-CBC", "TRIPLEDES-CBC", "AES128-CBC", "AES192-CBC"]); this.id = attributes.id || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; } } class EncryptionMethods extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "encryptionMethods", true); this.id = attributes.id || ""; this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.encryptionMethod = new _xfa_object.XFAObjectArray(); } } class Event extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "event", true); this.activity = (0, _utils.getStringOption)(attributes.activity, ["click", "change", "docClose", "docReady", "enter", "exit", "full", "indexChange", "initialize", "mouseDown", "mouseEnter", "mouseExit", "mouseUp", "postExecute", "postOpen", "postPrint", "postSave", "postSign", "postSubmit", "preExecute", "preOpen", "prePrint", "preSave", "preSign", "preSubmit", "ready", "validationState"]); this.id = attributes.id || ""; this.listen = (0, _utils.getStringOption)(attributes.listen, ["refOnly", "refAndDescendents"]); this.name = attributes.name || ""; this.ref = attributes.ref || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.extras = null; this.encryptData = null; this.execute = null; this.script = null; this.signData = null; this.submit = null; } } class ExData extends _xfa_object.ContentObject { constructor(attributes) { super(TEMPLATE_NS_ID, "exData"); this.contentType = attributes.contentType || ""; this.href = attributes.href || ""; this.id = attributes.id || ""; this.maxLength = (0, _utils.getInteger)({ data: attributes.maxLength, defaultValue: -1, validate: x => x >= -1 }); this.name = attributes.name || ""; this.rid = attributes.rid || ""; this.transferEncoding = (0, _utils.getStringOption)(attributes.transferEncoding, ["none", "base64", "package"]); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; } [_xfa_object.$isCDATAXml]() { return this.contentType === "text/html"; } [_xfa_object.$onChild](child) { if (this.contentType === "text/html" && child[_xfa_object.$namespaceId] === _namespaces.NamespaceIds.xhtml.id) { this[_xfa_object.$content] = child; return true; } if (this.contentType === "text/xml") { this[_xfa_object.$content] = child; return true; } return false; } [_xfa_object.$toHTML](availableSpace) { if (this.contentType !== "text/html" || !this[_xfa_object.$content]) { return _utils.HTMLResult.EMPTY; } return this[_xfa_object.$content][_xfa_object.$toHTML](availableSpace); } } class ExObject extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "exObject", true); this.archive = attributes.archive || ""; this.classId = attributes.classId || ""; this.codeBase = attributes.codeBase || ""; this.codeType = attributes.codeType || ""; this.id = attributes.id || ""; this.name = attributes.name || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.extras = null; this.boolean = new _xfa_object.XFAObjectArray(); this.date = new _xfa_object.XFAObjectArray(); this.dateTime = new _xfa_object.XFAObjectArray(); this.decimal = new _xfa_object.XFAObjectArray(); this.exData = new _xfa_object.XFAObjectArray(); this.exObject = new _xfa_object.XFAObjectArray(); this.float = new _xfa_object.XFAObjectArray(); this.image = new _xfa_object.XFAObjectArray(); this.integer = new _xfa_object.XFAObjectArray(); this.text = new _xfa_object.XFAObjectArray(); this.time = new _xfa_object.XFAObjectArray(); } } class ExclGroup extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "exclGroup", true); this.access = (0, _utils.getStringOption)(attributes.access, ["open", "nonInteractive", "protected", "readOnly"]); this.accessKey = attributes.accessKey || ""; this.anchorType = (0, _utils.getStringOption)(attributes.anchorType, ["topLeft", "bottomCenter", "bottomLeft", "bottomRight", "middleCenter", "middleLeft", "middleRight", "topCenter", "topRight"]); this.colSpan = (0, _utils.getInteger)({ data: attributes.colSpan, defaultValue: 1, validate: n => n >= 1 || n === -1 }); this.h = attributes.h ? (0, _utils.getMeasurement)(attributes.h) : ""; this.hAlign = (0, _utils.getStringOption)(attributes.hAlign, ["left", "center", "justify", "justifyAll", "radix", "right"]); this.id = attributes.id || ""; this.layout = (0, _utils.getStringOption)(attributes.layout, ["position", "lr-tb", "rl-row", "rl-tb", "row", "table", "tb"]); this.maxH = (0, _utils.getMeasurement)(attributes.maxH, "0pt"); this.maxW = (0, _utils.getMeasurement)(attributes.maxW, "0pt"); this.minH = (0, _utils.getMeasurement)(attributes.minH, "0pt"); this.minW = (0, _utils.getMeasurement)(attributes.minW, "0pt"); this.name = attributes.name || ""; this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]); this.relevant = (0, _utils.getRelevant)(attributes.relevant); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.w = attributes.w ? (0, _utils.getMeasurement)(attributes.w) : ""; this.x = (0, _utils.getMeasurement)(attributes.x, "0pt"); this.y = (0, _utils.getMeasurement)(attributes.y, "0pt"); this.assist = null; this.bind = null; this.border = null; this.calculate = null; this.caption = null; this.desc = null; this.extras = null; this.margin = null; this.para = null; this.traversal = null; this.validate = null; this.connect = new _xfa_object.XFAObjectArray(); this.event = new _xfa_object.XFAObjectArray(); this.field = new _xfa_object.XFAObjectArray(); this.setProperty = new _xfa_object.XFAObjectArray(); } [_xfa_object.$isBindable]() { return true; } [_xfa_object.$hasSettableValue]() { return true; } [_xfa_object.$setValue](value) { for (const field of this.field.children) { if (!field.value) { const nodeValue = new Value({}); field[_xfa_object.$appendChild](nodeValue); field.value = nodeValue; } field.value[_xfa_object.$setValue](value); } } [_xfa_object.$isThereMoreWidth]() { return this.layout.endsWith("-tb") && this[_xfa_object.$extra].attempt === 0 && this[_xfa_object.$extra].numberInLine > 0 || this[_xfa_object.$getParent]()[_xfa_object.$isThereMoreWidth](); } [_xfa_object.$isSplittable]() { const parent = this[_xfa_object.$getSubformParent](); if (!parent[_xfa_object.$isSplittable]()) { return false; } if (this[_xfa_object.$extra]._isSplittable !== undefined) { return this[_xfa_object.$extra]._isSplittable; } if (this.layout === "position" || this.layout.includes("row")) { this[_xfa_object.$extra]._isSplittable = false; return false; } if (parent.layout && parent.layout.endsWith("-tb") && parent[_xfa_object.$extra].numberInLine !== 0) { return false; } this[_xfa_object.$extra]._isSplittable = true; return true; } [_xfa_object.$flushHTML]() { return (0, _layout.flushHTML)(this); } [_xfa_object.$addHTML](html, bbox) { (0, _layout.addHTML)(this, html, bbox); } [_xfa_object.$getAvailableSpace]() { return (0, _layout.getAvailableSpace)(this); } [_xfa_object.$toHTML](availableSpace) { setTabIndex(this); if (this.presence === "hidden" || this.presence === "inactive" || this.h === 0 || this.w === 0) { return _utils.HTMLResult.EMPTY; } (0, _html_utils.fixDimensions)(this); const children = []; const attributes = { id: this[_xfa_object.$uid], class: [] }; (0, _html_utils.setAccess)(this, attributes.class); if (!this[_xfa_object.$extra]) { this[_xfa_object.$extra] = Object.create(null); } Object.assign(this[_xfa_object.$extra], { children, attributes, attempt: 0, line: null, numberInLine: 0, availableSpace: { width: Math.min(this.w || Infinity, availableSpace.width), height: Math.min(this.h || Infinity, availableSpace.height) }, width: 0, height: 0, prevHeight: 0, currentWidth: 0 }); const isSplittable = this[_xfa_object.$isSplittable](); if (!isSplittable) { setFirstUnsplittable(this); } if (!(0, _layout.checkDimensions)(this, availableSpace)) { return _utils.HTMLResult.FAILURE; } const filter = new Set(["field"]); if (this.layout.includes("row")) { const columnWidths = this[_xfa_object.$getSubformParent]().columnWidths; if (Array.isArray(columnWidths) && columnWidths.length > 0) { this[_xfa_object.$extra].columnWidths = columnWidths; this[_xfa_object.$extra].currentColumn = 0; } } const style = (0, _html_utils.toStyle)(this, "anchorType", "dimensions", "position", "presence", "border", "margin", "hAlign"); const classNames = ["xfaExclgroup"]; const cl = (0, _html_utils.layoutClass)(this); if (cl) { classNames.push(cl); } if ((0, _html_utils.isPrintOnly)(this)) { classNames.push("xfaPrintOnly"); } attributes.style = style; attributes.class = classNames; if (this.name) { attributes.xfaName = this.name; } this[_xfa_object.$pushPara](); const isLrTb = this.layout === "lr-tb" || this.layout === "rl-tb"; const maxRun = isLrTb ? MAX_ATTEMPTS_FOR_LRTB_LAYOUT : 1; for (; this[_xfa_object.$extra].attempt < maxRun; this[_xfa_object.$extra].attempt++) { if (isLrTb && this[_xfa_object.$extra].attempt === MAX_ATTEMPTS_FOR_LRTB_LAYOUT - 1) { this[_xfa_object.$extra].numberInLine = 0; } const result = this[_xfa_object.$childrenToHTML]({ filter, include: true }); if (result.success) { break; } if (result.isBreak()) { this[_xfa_object.$popPara](); return result; } if (isLrTb && this[_xfa_object.$extra].attempt === 0 && this[_xfa_object.$extra].numberInLine === 0 && !this[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].noLayoutFailure) { this[_xfa_object.$extra].attempt = maxRun; break; } } this[_xfa_object.$popPara](); if (!isSplittable) { unsetFirstUnsplittable(this); } if (this[_xfa_object.$extra].attempt === maxRun) { if (!isSplittable) { delete this[_xfa_object.$extra]; } return _utils.HTMLResult.FAILURE; } let marginH = 0; let marginV = 0; if (this.margin) { marginH = this.margin.leftInset + this.margin.rightInset; marginV = this.margin.topInset + this.margin.bottomInset; } const width = Math.max(this[_xfa_object.$extra].width + marginH, this.w || 0); const height = Math.max(this[_xfa_object.$extra].height + marginV, this.h || 0); const bbox = [this.x, this.y, width, height]; if (this.w === "") { style.width = (0, _html_utils.measureToString)(width); } if (this.h === "") { style.height = (0, _html_utils.measureToString)(height); } const html = { name: "div", attributes, children }; applyAssist(this, attributes); delete this[_xfa_object.$extra]; return _utils.HTMLResult.success((0, _html_utils.createWrapper)(this, html), bbox); } } class Execute extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "execute"); this.connection = attributes.connection || ""; this.executeType = (0, _utils.getStringOption)(attributes.executeType, ["import", "remerge"]); this.id = attributes.id || ""; this.runAt = (0, _utils.getStringOption)(attributes.runAt, ["client", "both", "server"]); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; } } class Extras extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "extras", true); this.id = attributes.id || ""; this.name = attributes.name || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.boolean = new _xfa_object.XFAObjectArray(); this.date = new _xfa_object.XFAObjectArray(); this.dateTime = new _xfa_object.XFAObjectArray(); this.decimal = new _xfa_object.XFAObjectArray(); this.exData = new _xfa_object.XFAObjectArray(); this.extras = new _xfa_object.XFAObjectArray(); this.float = new _xfa_object.XFAObjectArray(); this.image = new _xfa_object.XFAObjectArray(); this.integer = new _xfa_object.XFAObjectArray(); this.text = new _xfa_object.XFAObjectArray(); this.time = new _xfa_object.XFAObjectArray(); } } class Field extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "field", true); this.access = (0, _utils.getStringOption)(attributes.access, ["open", "nonInteractive", "protected", "readOnly"]); this.accessKey = attributes.accessKey || ""; this.anchorType = (0, _utils.getStringOption)(attributes.anchorType, ["topLeft", "bottomCenter", "bottomLeft", "bottomRight", "middleCenter", "middleLeft", "middleRight", "topCenter", "topRight"]); this.colSpan = (0, _utils.getInteger)({ data: attributes.colSpan, defaultValue: 1, validate: n => n >= 1 || n === -1 }); this.h = attributes.h ? (0, _utils.getMeasurement)(attributes.h) : ""; this.hAlign = (0, _utils.getStringOption)(attributes.hAlign, ["left", "center", "justify", "justifyAll", "radix", "right"]); this.id = attributes.id || ""; this.locale = attributes.locale || ""; this.maxH = (0, _utils.getMeasurement)(attributes.maxH, "0pt"); this.maxW = (0, _utils.getMeasurement)(attributes.maxW, "0pt"); this.minH = (0, _utils.getMeasurement)(attributes.minH, "0pt"); this.minW = (0, _utils.getMeasurement)(attributes.minW, "0pt"); this.name = attributes.name || ""; this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]); this.relevant = (0, _utils.getRelevant)(attributes.relevant); this.rotate = (0, _utils.getInteger)({ data: attributes.rotate, defaultValue: 0, validate: x => x % 90 === 0 }); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.w = attributes.w ? (0, _utils.getMeasurement)(attributes.w) : ""; this.x = (0, _utils.getMeasurement)(attributes.x, "0pt"); this.y = (0, _utils.getMeasurement)(attributes.y, "0pt"); this.assist = null; this.bind = null; this.border = null; this.calculate = null; this.caption = null; this.desc = null; this.extras = null; this.font = null; this.format = null; this.items = new _xfa_object.XFAObjectArray(2); this.keep = null; this.margin = null; this.para = null; this.traversal = null; this.ui = null; this.validate = null; this.value = null; this.bindItems = new _xfa_object.XFAObjectArray(); this.connect = new _xfa_object.XFAObjectArray(); this.event = new _xfa_object.XFAObjectArray(); this.setProperty = new _xfa_object.XFAObjectArray(); } [_xfa_object.$isBindable]() { return true; } [_xfa_object.$setValue](value) { _setValue(this, value); } [_xfa_object.$toHTML](availableSpace) { setTabIndex(this); if (!this.ui) { this.ui = new Ui({}); this.ui[_xfa_object.$globalData] = this[_xfa_object.$globalData]; this[_xfa_object.$appendChild](this.ui); let node; switch (this.items.children.length) { case 0: node = new TextEdit({}); this.ui.textEdit = node; break; case 1: node = new CheckButton({}); this.ui.checkButton = node; break; case 2: node = new ChoiceList({}); this.ui.choiceList = node; break; } this.ui[_xfa_object.$appendChild](node); } if (!this.ui || this.presence === "hidden" || this.presence === "inactive" || this.h === 0 || this.w === 0) { return _utils.HTMLResult.EMPTY; } if (this.caption) { delete this.caption[_xfa_object.$extra]; } this[_xfa_object.$pushPara](); const caption = this.caption ? this.caption[_xfa_object.$toHTML](availableSpace).html : null; const savedW = this.w; const savedH = this.h; let marginH = 0; let marginV = 0; if (this.margin) { marginH = this.margin.leftInset + this.margin.rightInset; marginV = this.margin.topInset + this.margin.bottomInset; } let borderDims = null; if (this.w === "" || this.h === "") { let width = null; let height = null; let uiW = 0; let uiH = 0; if (this.ui.checkButton) { uiW = uiH = this.ui.checkButton.size; } else { const { w, h } = (0, _html_utils.layoutNode)(this, availableSpace); if (w !== null) { uiW = w; uiH = h; } else { uiH = (0, _fonts.getMetrics)(this.font, true).lineNoGap; } } borderDims = getBorderDims(this.ui[_xfa_object.$getExtra]()); uiW += borderDims.w; uiH += borderDims.h; if (this.caption) { const { w, h, isBroken } = this.caption[_xfa_object.$getExtra](availableSpace); if (isBroken && this[_xfa_object.$getSubformParent]()[_xfa_object.$isThereMoreWidth]()) { this[_xfa_object.$popPara](); return _utils.HTMLResult.FAILURE; } width = w; height = h; switch (this.caption.placement) { case "left": case "right": case "inline": width += uiW; break; case "top": case "bottom": height += uiH; break; } } else { width = uiW; height = uiH; } if (width && this.w === "") { width += marginH; this.w = Math.min(this.maxW <= 0 ? Infinity : this.maxW, this.minW + 1 < width ? width : this.minW); } if (height && this.h === "") { height += marginV; this.h = Math.min(this.maxH <= 0 ? Infinity : this.maxH, this.minH + 1 < height ? height : this.minH); } } this[_xfa_object.$popPara](); (0, _html_utils.fixDimensions)(this); setFirstUnsplittable(this); if (!(0, _layout.checkDimensions)(this, availableSpace)) { this.w = savedW; this.h = savedH; this[_xfa_object.$popPara](); return _utils.HTMLResult.FAILURE; } unsetFirstUnsplittable(this); const style = (0, _html_utils.toStyle)(this, "font", "dimensions", "position", "rotate", "anchorType", "presence", "margin", "hAlign"); (0, _html_utils.setMinMaxDimensions)(this, style); const classNames = ["xfaField"]; if (this.font) { classNames.push("xfaFont"); } if ((0, _html_utils.isPrintOnly)(this)) { classNames.push("xfaPrintOnly"); } const attributes = { style, id: this[_xfa_object.$uid], class: classNames }; if (style.margin) { style.padding = style.margin; delete style.margin; } (0, _html_utils.setAccess)(this, classNames); if (this.name) { attributes.xfaName = this.name; } const children = []; const html = { name: "div", attributes, children }; applyAssist(this, attributes); const borderStyle = this.border ? this.border[_xfa_object.$toStyle]() : null; const bbox = (0, _html_utils.computeBbox)(this, html, availableSpace); const ui = this.ui[_xfa_object.$toHTML]().html; if (!ui) { Object.assign(style, borderStyle); return _utils.HTMLResult.success((0, _html_utils.createWrapper)(this, html), bbox); } if (this[_xfa_object.$tabIndex]) { if (ui.children && ui.children[0]) { ui.children[0].attributes.tabindex = this[_xfa_object.$tabIndex]; } else { ui.attributes.tabindex = this[_xfa_object.$tabIndex]; } } if (!ui.attributes.style) { ui.attributes.style = Object.create(null); } let aElement = null; if (this.ui.button) { if (ui.children.length === 1) { [aElement] = ui.children.splice(0, 1); } Object.assign(ui.attributes.style, borderStyle); } else { Object.assign(style, borderStyle); } children.push(ui); if (this.value) { if (this.ui.imageEdit) { ui.children.push(this.value[_xfa_object.$toHTML]().html); } else if (!this.ui.button) { let value = ""; if (this.value.exData) { value = this.value.exData[_xfa_object.$text](); } else if (this.value.text) { value = this.value.text[_xfa_object.$getExtra](); } else { const htmlValue = this.value[_xfa_object.$toHTML]().html; if (htmlValue !== null) { value = htmlValue.children[0].value; } } if (this.ui.textEdit && this.value.text && this.value.text.maxChars) { ui.children[0].attributes.maxLength = this.value.text.maxChars; } if (value) { if (this.ui.numericEdit) { value = parseFloat(value); value = isNaN(value) ? "" : value.toString(); } if (ui.children[0].name === "textarea") { ui.children[0].attributes.textContent = value; } else { ui.children[0].attributes.value = value; } } } } if (!this.ui.imageEdit && ui.children && ui.children[0] && this.h) { borderDims = borderDims || getBorderDims(this.ui[_xfa_object.$getExtra]()); let captionHeight = 0; if (this.caption && ["top", "bottom"].includes(this.caption.placement)) { captionHeight = this.caption.reserve; if (captionHeight <= 0) { captionHeight = this.caption[_xfa_object.$getExtra](availableSpace).h; } const inputHeight = this.h - captionHeight - marginV - borderDims.h; ui.children[0].attributes.style.height = (0, _html_utils.measureToString)(inputHeight); } else { ui.children[0].attributes.style.height = "100%"; } } if (aElement) { ui.children.push(aElement); } if (!caption) { if (ui.attributes.class) { ui.attributes.class.push("xfaLeft"); } this.w = savedW; this.h = savedH; return _utils.HTMLResult.success((0, _html_utils.createWrapper)(this, html), bbox); } if (this.ui.button) { if (style.padding) { delete style.padding; } if (caption.name === "div") { caption.name = "span"; } ui.children.push(caption); return _utils.HTMLResult.success(html, bbox); } else if (this.ui.checkButton) { caption.attributes.class[0] = "xfaCaptionForCheckButton"; } if (!ui.attributes.class) { ui.attributes.class = []; } ui.children.splice(0, 0, caption); switch (this.caption.placement) { case "left": ui.attributes.class.push("xfaLeft"); break; case "right": ui.attributes.class.push("xfaRight"); break; case "top": ui.attributes.class.push("xfaTop"); break; case "bottom": ui.attributes.class.push("xfaBottom"); break; case "inline": ui.attributes.class.push("xfaLeft"); break; } this.w = savedW; this.h = savedH; return _utils.HTMLResult.success((0, _html_utils.createWrapper)(this, html), bbox); } } exports.Field = Field; class Fill extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "fill", true); this.id = attributes.id || ""; this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.color = null; this.extras = null; this.linear = null; this.pattern = null; this.radial = null; this.solid = null; this.stipple = null; } [_xfa_object.$toStyle]() { const parent = this[_xfa_object.$getParent](); const grandpa = parent[_xfa_object.$getParent](); const ggrandpa = grandpa[_xfa_object.$getParent](); const style = Object.create(null); let propName = "color"; let altPropName = propName; if (parent instanceof Border) { propName = "background-color"; altPropName = "background"; if (ggrandpa instanceof Ui) { style.backgroundColor = "white"; } } if (parent instanceof Rectangle || parent instanceof Arc) { propName = altPropName = "fill"; style.fill = "white"; } for (const name of Object.getOwnPropertyNames(this)) { if (name === "extras" || name === "color") { continue; } const obj = this[name]; if (!(obj instanceof _xfa_object.XFAObject)) { continue; } const color = obj[_xfa_object.$toStyle](this.color); if (color) { style[color.startsWith("#") ? propName : altPropName] = color; } return style; } if (this.color && this.color.value) { const color = this.color[_xfa_object.$toStyle](); style[color.startsWith("#") ? propName : altPropName] = color; } return style; } } class Filter extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "filter", true); this.addRevocationInfo = (0, _utils.getStringOption)(attributes.addRevocationInfo, ["", "required", "optional", "none"]); this.id = attributes.id || ""; this.name = attributes.name || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.version = (0, _utils.getInteger)({ data: this.version, defaultValue: 5, validate: x => x >= 1 && x <= 5 }); this.appearanceFilter = null; this.certificates = null; this.digestMethods = null; this.encodings = null; this.encryptionMethods = null; this.handler = null; this.lockDocument = null; this.mdp = null; this.reasons = null; this.timeStamp = null; } } class Float extends _xfa_object.ContentObject { constructor(attributes) { super(TEMPLATE_NS_ID, "float"); this.id = attributes.id || ""; this.name = attributes.name || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; } [_xfa_object.$finalize]() { const number = parseFloat(this[_xfa_object.$content].trim()); this[_xfa_object.$content] = isNaN(number) ? null : number; } [_xfa_object.$toHTML](availableSpace) { return valueToHtml(this[_xfa_object.$content] !== null ? this[_xfa_object.$content].toString() : ""); } } class Font extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "font", true); this.baselineShift = (0, _utils.getMeasurement)(attributes.baselineShift); this.fontHorizontalScale = (0, _utils.getFloat)({ data: attributes.fontHorizontalScale, defaultValue: 100, validate: x => x >= 0 }); this.fontVerticalScale = (0, _utils.getFloat)({ data: attributes.fontVerticalScale, defaultValue: 100, validate: x => x >= 0 }); this.id = attributes.id || ""; this.kerningMode = (0, _utils.getStringOption)(attributes.kerningMode, ["none", "pair"]); this.letterSpacing = (0, _utils.getMeasurement)(attributes.letterSpacing, "0"); this.lineThrough = (0, _utils.getInteger)({ data: attributes.lineThrough, defaultValue: 0, validate: x => x === 1 || x === 2 }); this.lineThroughPeriod = (0, _utils.getStringOption)(attributes.lineThroughPeriod, ["all", "word"]); this.overline = (0, _utils.getInteger)({ data: attributes.overline, defaultValue: 0, validate: x => x === 1 || x === 2 }); this.overlinePeriod = (0, _utils.getStringOption)(attributes.overlinePeriod, ["all", "word"]); this.posture = (0, _utils.getStringOption)(attributes.posture, ["normal", "italic"]); this.size = (0, _utils.getMeasurement)(attributes.size, "10pt"); this.typeface = attributes.typeface || "Courier"; this.underline = (0, _utils.getInteger)({ data: attributes.underline, defaultValue: 0, validate: x => x === 1 || x === 2 }); this.underlinePeriod = (0, _utils.getStringOption)(attributes.underlinePeriod, ["all", "word"]); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.weight = (0, _utils.getStringOption)(attributes.weight, ["normal", "bold"]); this.extras = null; this.fill = null; } [_xfa_object.$clean](builder) { super[_xfa_object.$clean](builder); this[_xfa_object.$globalData].usedTypefaces.add(this.typeface); } [_xfa_object.$toStyle]() { const style = (0, _html_utils.toStyle)(this, "fill"); const color = style.color; if (color) { if (color === "#000000") { delete style.color; } else if (!color.startsWith("#")) { style.background = color; style.backgroundClip = "text"; style.color = "transparent"; } } if (this.baselineShift) { style.verticalAlign = (0, _html_utils.measureToString)(this.baselineShift); } style.fontKerning = this.kerningMode === "none" ? "none" : "normal"; style.letterSpacing = (0, _html_utils.measureToString)(this.letterSpacing); if (this.lineThrough !== 0) { style.textDecoration = "line-through"; if (this.lineThrough === 2) { style.textDecorationStyle = "double"; } } if (this.overline !== 0) { style.textDecoration = "overline"; if (this.overline === 2) { style.textDecorationStyle = "double"; } } style.fontStyle = this.posture; style.fontSize = (0, _html_utils.measureToString)(0.99 * this.size); (0, _html_utils.setFontFamily)(this, this, this[_xfa_object.$globalData].fontFinder, style); if (this.underline !== 0) { style.textDecoration = "underline"; if (this.underline === 2) { style.textDecorationStyle = "double"; } } style.fontWeight = this.weight; return style; } } class Format extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "format", true); this.id = attributes.id || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.extras = null; this.picture = null; } } class Handler extends _xfa_object.StringObject { constructor(attributes) { super(TEMPLATE_NS_ID, "handler"); this.id = attributes.id || ""; this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; } } class Hyphenation extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "hyphenation"); this.excludeAllCaps = (0, _utils.getInteger)({ data: attributes.excludeAllCaps, defaultValue: 0, validate: x => x === 1 }); this.excludeInitialCap = (0, _utils.getInteger)({ data: attributes.excludeInitialCap, defaultValue: 0, validate: x => x === 1 }); this.hyphenate = (0, _utils.getInteger)({ data: attributes.hyphenate, defaultValue: 0, validate: x => x === 1 }); this.id = attributes.id || ""; this.pushCharacterCount = (0, _utils.getInteger)({ data: attributes.pushCharacterCount, defaultValue: 3, validate: x => x >= 0 }); this.remainCharacterCount = (0, _utils.getInteger)({ data: attributes.remainCharacterCount, defaultValue: 3, validate: x => x >= 0 }); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.wordCharacterCount = (0, _utils.getInteger)({ data: attributes.wordCharacterCount, defaultValue: 7, validate: x => x >= 0 }); } } class Image extends _xfa_object.StringObject { constructor(attributes) { super(TEMPLATE_NS_ID, "image"); this.aspect = (0, _utils.getStringOption)(attributes.aspect, ["fit", "actual", "height", "none", "width"]); this.contentType = attributes.contentType || ""; this.href = attributes.href || ""; this.id = attributes.id || ""; this.name = attributes.name || ""; this.transferEncoding = (0, _utils.getStringOption)(attributes.transferEncoding, ["base64", "none", "package"]); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; } [_xfa_object.$toHTML]() { if (this.contentType && !MIMES.has(this.contentType.toLowerCase())) { return _utils.HTMLResult.EMPTY; } let buffer = this[_xfa_object.$globalData].images && this[_xfa_object.$globalData].images.get(this.href); if (!buffer && (this.href || !this[_xfa_object.$content])) { return _utils.HTMLResult.EMPTY; } if (!buffer && this.transferEncoding === "base64") { buffer = (0, _util.stringToBytes)(atob(this[_xfa_object.$content])); } if (!buffer) { return _utils.HTMLResult.EMPTY; } if (!this.contentType) { for (const [header, type] of IMAGES_HEADERS) { if (buffer.length > header.length && header.every((x, i) => x === buffer[i])) { this.contentType = type; break; } } if (!this.contentType) { return _utils.HTMLResult.EMPTY; } } const blob = new Blob([buffer], { type: this.contentType }); let style; switch (this.aspect) { case "fit": case "actual": break; case "height": style = { height: "100%", objectFit: "fill" }; break; case "none": style = { width: "100%", height: "100%", objectFit: "fill" }; break; case "width": style = { width: "100%", objectFit: "fill" }; break; } const parent = this[_xfa_object.$getParent](); return _utils.HTMLResult.success({ name: "img", attributes: { class: ["xfaImage"], style, src: URL.createObjectURL(blob), alt: parent ? ariaLabel(parent[_xfa_object.$getParent]()) : null } }); } } class ImageEdit extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "imageEdit", true); this.data = (0, _utils.getStringOption)(attributes.data, ["link", "embed"]); this.id = attributes.id || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.border = null; this.extras = null; this.margin = null; } [_xfa_object.$toHTML](availableSpace) { if (this.data === "embed") { return _utils.HTMLResult.success({ name: "div", children: [], attributes: {} }); } return _utils.HTMLResult.EMPTY; } } class Integer extends _xfa_object.ContentObject { constructor(attributes) { super(TEMPLATE_NS_ID, "integer"); this.id = attributes.id || ""; this.name = attributes.name || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; } [_xfa_object.$finalize]() { const number = parseInt(this[_xfa_object.$content].trim(), 10); this[_xfa_object.$content] = isNaN(number) ? null : number; } [_xfa_object.$toHTML](availableSpace) { return valueToHtml(this[_xfa_object.$content] !== null ? this[_xfa_object.$content].toString() : ""); } } class Issuers extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "issuers", true); this.id = attributes.id || ""; this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.certificate = new _xfa_object.XFAObjectArray(); } } class Items extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "items", true); this.id = attributes.id || ""; this.name = attributes.name || ""; this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]); this.ref = attributes.ref || ""; this.save = (0, _utils.getInteger)({ data: attributes.save, defaultValue: 0, validate: x => x === 1 }); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.boolean = new _xfa_object.XFAObjectArray(); this.date = new _xfa_object.XFAObjectArray(); this.dateTime = new _xfa_object.XFAObjectArray(); this.decimal = new _xfa_object.XFAObjectArray(); this.exData = new _xfa_object.XFAObjectArray(); this.float = new _xfa_object.XFAObjectArray(); this.image = new _xfa_object.XFAObjectArray(); this.integer = new _xfa_object.XFAObjectArray(); this.text = new _xfa_object.XFAObjectArray(); this.time = new _xfa_object.XFAObjectArray(); } [_xfa_object.$toHTML]() { const output = []; for (const child of this[_xfa_object.$getChildren]()) { output.push(child[_xfa_object.$text]()); } return _utils.HTMLResult.success(output); } } exports.Items = Items; class Keep extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "keep", true); this.id = attributes.id || ""; const options = ["none", "contentArea", "pageArea"]; this.intact = (0, _utils.getStringOption)(attributes.intact, options); this.next = (0, _utils.getStringOption)(attributes.next, options); this.previous = (0, _utils.getStringOption)(attributes.previous, options); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.extras = null; } } class KeyUsage extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "keyUsage"); const options = ["", "yes", "no"]; this.crlSign = (0, _utils.getStringOption)(attributes.crlSign, options); this.dataEncipherment = (0, _utils.getStringOption)(attributes.dataEncipherment, options); this.decipherOnly = (0, _utils.getStringOption)(attributes.decipherOnly, options); this.digitalSignature = (0, _utils.getStringOption)(attributes.digitalSignature, options); this.encipherOnly = (0, _utils.getStringOption)(attributes.encipherOnly, options); this.id = attributes.id || ""; this.keyAgreement = (0, _utils.getStringOption)(attributes.keyAgreement, options); this.keyCertSign = (0, _utils.getStringOption)(attributes.keyCertSign, options); this.keyEncipherment = (0, _utils.getStringOption)(attributes.keyEncipherment, options); this.nonRepudiation = (0, _utils.getStringOption)(attributes.nonRepudiation, options); this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; } } class Line extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "line", true); this.hand = (0, _utils.getStringOption)(attributes.hand, ["even", "left", "right"]); this.id = attributes.id || ""; this.slope = (0, _utils.getStringOption)(attributes.slope, ["\\", "/"]); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.edge = null; } [_xfa_object.$toHTML]() { const parent = this[_xfa_object.$getParent]()[_xfa_object.$getParent](); const edge = this.edge ? this.edge : new Edge({}); const edgeStyle = edge[_xfa_object.$toStyle](); const style = Object.create(null); const thickness = edge.presence === "visible" ? edge.thickness : 0; style.strokeWidth = (0, _html_utils.measureToString)(thickness); style.stroke = edgeStyle.color; let x1, y1, x2, y2; let width = "100%"; let height = "100%"; if (parent.w <= thickness) { [x1, y1, x2, y2] = ["50%", 0, "50%", "100%"]; width = style.strokeWidth; } else if (parent.h <= thickness) { [x1, y1, x2, y2] = [0, "50%", "100%", "50%"]; height = style.strokeWidth; } else { if (this.slope === "\\") { [x1, y1, x2, y2] = [0, 0, "100%", "100%"]; } else { [x1, y1, x2, y2] = [0, "100%", "100%", 0]; } } const line = { name: "line", attributes: { xmlns: SVG_NS, x1, y1, x2, y2, style } }; const svg = { name: "svg", children: [line], attributes: { xmlns: SVG_NS, width, height, style: { overflow: "visible" } } }; if (hasMargin(parent)) { return _utils.HTMLResult.success({ name: "div", attributes: { style: { display: "inline", width: "100%", height: "100%" } }, children: [svg] }); } svg.attributes.style.position = "absolute"; return _utils.HTMLResult.success(svg); } } class Linear extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "linear", true); this.id = attributes.id || ""; this.type = (0, _utils.getStringOption)(attributes.type, ["toRight", "toBottom", "toLeft", "toTop"]); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.color = null; this.extras = null; } [_xfa_object.$toStyle](startColor) { startColor = startColor ? startColor[_xfa_object.$toStyle]() : "#FFFFFF"; const transf = this.type.replace(/([RBLT])/, " $1").toLowerCase(); const endColor = this.color ? this.color[_xfa_object.$toStyle]() : "#000000"; return `linear-gradient(${transf}, ${startColor}, ${endColor})`; } } class LockDocument extends _xfa_object.ContentObject { constructor(attributes) { super(TEMPLATE_NS_ID, "lockDocument"); this.id = attributes.id || ""; this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; } [_xfa_object.$finalize]() { this[_xfa_object.$content] = (0, _utils.getStringOption)(this[_xfa_object.$content], ["auto", "0", "1"]); } } class Manifest extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "manifest", true); this.action = (0, _utils.getStringOption)(attributes.action, ["include", "all", "exclude"]); this.id = attributes.id || ""; this.name = attributes.name || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.extras = null; this.ref = new _xfa_object.XFAObjectArray(); } } class Margin extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "margin", true); this.bottomInset = (0, _utils.getMeasurement)(attributes.bottomInset, "0"); this.id = attributes.id || ""; this.leftInset = (0, _utils.getMeasurement)(attributes.leftInset, "0"); this.rightInset = (0, _utils.getMeasurement)(attributes.rightInset, "0"); this.topInset = (0, _utils.getMeasurement)(attributes.topInset, "0"); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.extras = null; } [_xfa_object.$toStyle]() { return { margin: (0, _html_utils.measureToString)(this.topInset) + " " + (0, _html_utils.measureToString)(this.rightInset) + " " + (0, _html_utils.measureToString)(this.bottomInset) + " " + (0, _html_utils.measureToString)(this.leftInset) }; } } class Mdp extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "mdp"); this.id = attributes.id || ""; this.permissions = (0, _utils.getInteger)({ data: attributes.permissions, defaultValue: 2, validate: x => x === 1 || x === 3 }); this.signatureType = (0, _utils.getStringOption)(attributes.signatureType, ["filler", "author"]); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; } } class Medium extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "medium"); this.id = attributes.id || ""; this.imagingBBox = (0, _utils.getBBox)(attributes.imagingBBox); this.long = (0, _utils.getMeasurement)(attributes.long); this.orientation = (0, _utils.getStringOption)(attributes.orientation, ["portrait", "landscape"]); this.short = (0, _utils.getMeasurement)(attributes.short); this.stock = attributes.stock || ""; this.trayIn = (0, _utils.getStringOption)(attributes.trayIn, ["auto", "delegate", "pageFront"]); this.trayOut = (0, _utils.getStringOption)(attributes.trayOut, ["auto", "delegate"]); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; } } class Message extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "message", true); this.id = attributes.id || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.text = new _xfa_object.XFAObjectArray(); } } class NumericEdit extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "numericEdit", true); this.hScrollPolicy = (0, _utils.getStringOption)(attributes.hScrollPolicy, ["auto", "off", "on"]); this.id = attributes.id || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.border = null; this.comb = null; this.extras = null; this.margin = null; } [_xfa_object.$toHTML](availableSpace) { const style = (0, _html_utils.toStyle)(this, "border", "font", "margin"); const field = this[_xfa_object.$getParent]()[_xfa_object.$getParent](); const html = { name: "input", attributes: { type: "text", fieldId: field[_xfa_object.$uid], dataId: field[_xfa_object.$data] && field[_xfa_object.$data][_xfa_object.$uid] || field[_xfa_object.$uid], class: ["xfaTextfield"], style, "aria-label": ariaLabel(field) } }; return _utils.HTMLResult.success({ name: "label", attributes: { class: ["xfaLabel"] }, children: [html] }); } } class Occur extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "occur", true); this.id = attributes.id || ""; this.initial = attributes.initial !== "" ? (0, _utils.getInteger)({ data: attributes.initial, defaultValue: "", validate: x => true }) : ""; this.max = attributes.max !== "" ? (0, _utils.getInteger)({ data: attributes.max, defaultValue: 1, validate: x => true }) : ""; this.min = attributes.min !== "" ? (0, _utils.getInteger)({ data: attributes.min, defaultValue: 1, validate: x => true }) : ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.extras = null; } [_xfa_object.$clean]() { const parent = this[_xfa_object.$getParent](); const originalMin = this.min; if (this.min === "") { this.min = parent instanceof PageArea || parent instanceof PageSet ? 0 : 1; } if (this.max === "") { if (originalMin === "") { this.max = parent instanceof PageArea || parent instanceof PageSet ? -1 : 1; } else { this.max = this.min; } } if (this.max !== -1 && this.max < this.min) { this.max = this.min; } if (this.initial === "") { this.initial = parent instanceof Template ? 1 : this.min; } } } class Oid extends _xfa_object.StringObject { constructor(attributes) { super(TEMPLATE_NS_ID, "oid"); this.id = attributes.id || ""; this.name = attributes.name || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; } } class Oids extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "oids", true); this.id = attributes.id || ""; this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.oid = new _xfa_object.XFAObjectArray(); } } class Overflow extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "overflow"); this.id = attributes.id || ""; this.leader = attributes.leader || ""; this.target = attributes.target || ""; this.trailer = attributes.trailer || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; } [_xfa_object.$getExtra]() { if (!this[_xfa_object.$extra]) { const parent = this[_xfa_object.$getParent](); const root = this[_xfa_object.$getTemplateRoot](); const target = root[_xfa_object.$searchNode](this.target, parent); const leader = root[_xfa_object.$searchNode](this.leader, parent); const trailer = root[_xfa_object.$searchNode](this.trailer, parent); this[_xfa_object.$extra] = { target: target && target[0] || null, leader: leader && leader[0] || null, trailer: trailer && trailer[0] || null, addLeader: false, addTrailer: false }; } return this[_xfa_object.$extra]; } } class PageArea extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "pageArea", true); this.blankOrNotBlank = (0, _utils.getStringOption)(attributes.blankOrNotBlank, ["any", "blank", "notBlank"]); this.id = attributes.id || ""; this.initialNumber = (0, _utils.getInteger)({ data: attributes.initialNumber, defaultValue: 1, validate: x => true }); this.name = attributes.name || ""; this.numbered = (0, _utils.getInteger)({ data: attributes.numbered, defaultValue: 1, validate: x => true }); this.oddOrEven = (0, _utils.getStringOption)(attributes.oddOrEven, ["any", "even", "odd"]); this.pagePosition = (0, _utils.getStringOption)(attributes.pagePosition, ["any", "first", "last", "only", "rest"]); this.relevant = (0, _utils.getRelevant)(attributes.relevant); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.desc = null; this.extras = null; this.medium = null; this.occur = null; this.area = new _xfa_object.XFAObjectArray(); this.contentArea = new _xfa_object.XFAObjectArray(); this.draw = new _xfa_object.XFAObjectArray(); this.exclGroup = new _xfa_object.XFAObjectArray(); this.field = new _xfa_object.XFAObjectArray(); this.subform = new _xfa_object.XFAObjectArray(); } [_xfa_object.$isUsable]() { if (!this[_xfa_object.$extra]) { this[_xfa_object.$extra] = { numberOfUse: 0 }; return true; } return !this.occur || this.occur.max === -1 || this[_xfa_object.$extra].numberOfUse < this.occur.max; } [_xfa_object.$cleanPage]() { delete this[_xfa_object.$extra]; } [_xfa_object.$getNextPage]() { if (!this[_xfa_object.$extra]) { this[_xfa_object.$extra] = { numberOfUse: 0 }; } const parent = this[_xfa_object.$getParent](); if (parent.relation === "orderedOccurrence") { if (this[_xfa_object.$isUsable]()) { this[_xfa_object.$extra].numberOfUse += 1; return this; } } return parent[_xfa_object.$getNextPage](); } [_xfa_object.$getAvailableSpace]() { return this[_xfa_object.$extra].space || { width: 0, height: 0 }; } [_xfa_object.$toHTML]() { if (!this[_xfa_object.$extra]) { this[_xfa_object.$extra] = { numberOfUse: 1 }; } const children = []; this[_xfa_object.$extra].children = children; const style = Object.create(null); if (this.medium && this.medium.short && this.medium.long) { style.width = (0, _html_utils.measureToString)(this.medium.short); style.height = (0, _html_utils.measureToString)(this.medium.long); this[_xfa_object.$extra].space = { width: this.medium.short, height: this.medium.long }; if (this.medium.orientation === "landscape") { const x = style.width; style.width = style.height; style.height = x; this[_xfa_object.$extra].space = { width: this.medium.long, height: this.medium.short }; } } else { (0, _util.warn)("XFA - No medium specified in pageArea: please file a bug."); } this[_xfa_object.$childrenToHTML]({ filter: new Set(["area", "draw", "field", "subform"]), include: true }); this[_xfa_object.$childrenToHTML]({ filter: new Set(["contentArea"]), include: true }); return _utils.HTMLResult.success({ name: "div", children, attributes: { class: ["xfaPage"], id: this[_xfa_object.$uid], style, xfaName: this.name } }); } } class PageSet extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "pageSet", true); this.duplexImposition = (0, _utils.getStringOption)(attributes.duplexImposition, ["longEdge", "shortEdge"]); this.id = attributes.id || ""; this.name = attributes.name || ""; this.relation = (0, _utils.getStringOption)(attributes.relation, ["orderedOccurrence", "duplexPaginated", "simplexPaginated"]); this.relevant = (0, _utils.getRelevant)(attributes.relevant); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.extras = null; this.occur = null; this.pageArea = new _xfa_object.XFAObjectArray(); this.pageSet = new _xfa_object.XFAObjectArray(); } [_xfa_object.$cleanPage]() { for (const page of this.pageArea.children) { page[_xfa_object.$cleanPage](); } for (const page of this.pageSet.children) { page[_xfa_object.$cleanPage](); } } [_xfa_object.$isUsable]() { return !this.occur || this.occur.max === -1 || this[_xfa_object.$extra].numberOfUse < this.occur.max; } [_xfa_object.$getNextPage]() { if (!this[_xfa_object.$extra]) { this[_xfa_object.$extra] = { numberOfUse: 1, pageIndex: -1, pageSetIndex: -1 }; } if (this.relation === "orderedOccurrence") { if (this[_xfa_object.$extra].pageIndex + 1 < this.pageArea.children.length) { this[_xfa_object.$extra].pageIndex += 1; const pageArea = this.pageArea.children[this[_xfa_object.$extra].pageIndex]; return pageArea[_xfa_object.$getNextPage](); } if (this[_xfa_object.$extra].pageSetIndex + 1 < this.pageSet.children.length) { this[_xfa_object.$extra].pageSetIndex += 1; return this.pageSet.children[this[_xfa_object.$extra].pageSetIndex][_xfa_object.$getNextPage](); } if (this[_xfa_object.$isUsable]()) { this[_xfa_object.$extra].numberOfUse += 1; this[_xfa_object.$extra].pageIndex = -1; this[_xfa_object.$extra].pageSetIndex = -1; return this[_xfa_object.$getNextPage](); } const parent = this[_xfa_object.$getParent](); if (parent instanceof PageSet) { return parent[_xfa_object.$getNextPage](); } this[_xfa_object.$cleanPage](); return this[_xfa_object.$getNextPage](); } const pageNumber = this[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].pageNumber; const parity = pageNumber % 2 === 0 ? "even" : "odd"; const position = pageNumber === 0 ? "first" : "rest"; let page = this.pageArea.children.find(p => p.oddOrEven === parity && p.pagePosition === position); if (page) { return page; } page = this.pageArea.children.find(p => p.oddOrEven === "any" && p.pagePosition === position); if (page) { return page; } page = this.pageArea.children.find(p => p.oddOrEven === "any" && p.pagePosition === "any"); if (page) { return page; } return this.pageArea.children[0]; } } class Para extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "para", true); this.hAlign = (0, _utils.getStringOption)(attributes.hAlign, ["left", "center", "justify", "justifyAll", "radix", "right"]); this.id = attributes.id || ""; this.lineHeight = attributes.lineHeight ? (0, _utils.getMeasurement)(attributes.lineHeight, "0pt") : ""; this.marginLeft = attributes.marginLeft ? (0, _utils.getMeasurement)(attributes.marginLeft, "0pt") : ""; this.marginRight = attributes.marginRight ? (0, _utils.getMeasurement)(attributes.marginRight, "0pt") : ""; this.orphans = (0, _utils.getInteger)({ data: attributes.orphans, defaultValue: 0, validate: x => x >= 0 }); this.preserve = attributes.preserve || ""; this.radixOffset = attributes.radixOffset ? (0, _utils.getMeasurement)(attributes.radixOffset, "0pt") : ""; this.spaceAbove = attributes.spaceAbove ? (0, _utils.getMeasurement)(attributes.spaceAbove, "0pt") : ""; this.spaceBelow = attributes.spaceBelow ? (0, _utils.getMeasurement)(attributes.spaceBelow, "0pt") : ""; this.tabDefault = attributes.tabDefault ? (0, _utils.getMeasurement)(this.tabDefault) : ""; this.tabStops = (attributes.tabStops || "").trim().split(/\s+/).map((x, i) => i % 2 === 1 ? (0, _utils.getMeasurement)(x) : x); this.textIndent = attributes.textIndent ? (0, _utils.getMeasurement)(attributes.textIndent, "0pt") : ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.vAlign = (0, _utils.getStringOption)(attributes.vAlign, ["top", "bottom", "middle"]); this.widows = (0, _utils.getInteger)({ data: attributes.widows, defaultValue: 0, validate: x => x >= 0 }); this.hyphenation = null; } [_xfa_object.$toStyle]() { const style = (0, _html_utils.toStyle)(this, "hAlign"); if (this.marginLeft !== "") { style.paddingLeft = (0, _html_utils.measureToString)(this.marginLeft); } if (this.marginRight !== "") { style.paddingight = (0, _html_utils.measureToString)(this.marginRight); } if (this.spaceAbove !== "") { style.paddingTop = (0, _html_utils.measureToString)(this.spaceAbove); } if (this.spaceBelow !== "") { style.paddingBottom = (0, _html_utils.measureToString)(this.spaceBelow); } if (this.textIndent !== "") { style.textIndent = (0, _html_utils.measureToString)(this.textIndent); (0, _html_utils.fixTextIndent)(style); } if (this.lineHeight > 0) { style.lineHeight = (0, _html_utils.measureToString)(this.lineHeight); } if (this.tabDefault !== "") { style.tabSize = (0, _html_utils.measureToString)(this.tabDefault); } if (this.tabStops.length > 0) ; if (this.hyphenatation) { Object.assign(style, this.hyphenatation[_xfa_object.$toStyle]()); } return style; } } class PasswordEdit extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "passwordEdit", true); this.hScrollPolicy = (0, _utils.getStringOption)(attributes.hScrollPolicy, ["auto", "off", "on"]); this.id = attributes.id || ""; this.passwordChar = attributes.passwordChar || "*"; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.border = null; this.extras = null; this.margin = null; } } class Pattern extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "pattern", true); this.id = attributes.id || ""; this.type = (0, _utils.getStringOption)(attributes.type, ["crossHatch", "crossDiagonal", "diagonalLeft", "diagonalRight", "horizontal", "vertical"]); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.color = null; this.extras = null; } [_xfa_object.$toStyle](startColor) { startColor = startColor ? startColor[_xfa_object.$toStyle]() : "#FFFFFF"; const endColor = this.color ? this.color[_xfa_object.$toStyle]() : "#000000"; const width = 5; const cmd = "repeating-linear-gradient"; const colors = `${startColor},${startColor} ${width}px,${endColor} ${width}px,${endColor} ${2 * width}px`; switch (this.type) { case "crossHatch": return `${cmd}(to top,${colors}) ${cmd}(to right,${colors})`; case "crossDiagonal": return `${cmd}(45deg,${colors}) ${cmd}(-45deg,${colors})`; case "diagonalLeft": return `${cmd}(45deg,${colors})`; case "diagonalRight": return `${cmd}(-45deg,${colors})`; case "horizontal": return `${cmd}(to top,${colors})`; case "vertical": return `${cmd}(to right,${colors})`; } return ""; } } class Picture extends _xfa_object.StringObject { constructor(attributes) { super(TEMPLATE_NS_ID, "picture"); this.id = attributes.id || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; } } class Proto extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "proto", true); this.appearanceFilter = new _xfa_object.XFAObjectArray(); this.arc = new _xfa_object.XFAObjectArray(); this.area = new _xfa_object.XFAObjectArray(); this.assist = new _xfa_object.XFAObjectArray(); this.barcode = new _xfa_object.XFAObjectArray(); this.bindItems = new _xfa_object.XFAObjectArray(); this.bookend = new _xfa_object.XFAObjectArray(); this.boolean = new _xfa_object.XFAObjectArray(); this.border = new _xfa_object.XFAObjectArray(); this.break = new _xfa_object.XFAObjectArray(); this.breakAfter = new _xfa_object.XFAObjectArray(); this.breakBefore = new _xfa_object.XFAObjectArray(); this.button = new _xfa_object.XFAObjectArray(); this.calculate = new _xfa_object.XFAObjectArray(); this.caption = new _xfa_object.XFAObjectArray(); this.certificate = new _xfa_object.XFAObjectArray(); this.certificates = new _xfa_object.XFAObjectArray(); this.checkButton = new _xfa_object.XFAObjectArray(); this.choiceList = new _xfa_object.XFAObjectArray(); this.color = new _xfa_object.XFAObjectArray(); this.comb = new _xfa_object.XFAObjectArray(); this.connect = new _xfa_object.XFAObjectArray(); this.contentArea = new _xfa_object.XFAObjectArray(); this.corner = new _xfa_object.XFAObjectArray(); this.date = new _xfa_object.XFAObjectArray(); this.dateTime = new _xfa_object.XFAObjectArray(); this.dateTimeEdit = new _xfa_object.XFAObjectArray(); this.decimal = new _xfa_object.XFAObjectArray(); this.defaultUi = new _xfa_object.XFAObjectArray(); this.desc = new _xfa_object.XFAObjectArray(); this.digestMethod = new _xfa_object.XFAObjectArray(); this.digestMethods = new _xfa_object.XFAObjectArray(); this.draw = new _xfa_object.XFAObjectArray(); this.edge = new _xfa_object.XFAObjectArray(); this.encoding = new _xfa_object.XFAObjectArray(); this.encodings = new _xfa_object.XFAObjectArray(); this.encrypt = new _xfa_object.XFAObjectArray(); this.encryptData = new _xfa_object.XFAObjectArray(); this.encryption = new _xfa_object.XFAObjectArray(); this.encryptionMethod = new _xfa_object.XFAObjectArray(); this.encryptionMethods = new _xfa_object.XFAObjectArray(); this.event = new _xfa_object.XFAObjectArray(); this.exData = new _xfa_object.XFAObjectArray(); this.exObject = new _xfa_object.XFAObjectArray(); this.exclGroup = new _xfa_object.XFAObjectArray(); this.execute = new _xfa_object.XFAObjectArray(); this.extras = new _xfa_object.XFAObjectArray(); this.field = new _xfa_object.XFAObjectArray(); this.fill = new _xfa_object.XFAObjectArray(); this.filter = new _xfa_object.XFAObjectArray(); this.float = new _xfa_object.XFAObjectArray(); this.font = new _xfa_object.XFAObjectArray(); this.format = new _xfa_object.XFAObjectArray(); this.handler = new _xfa_object.XFAObjectArray(); this.hyphenation = new _xfa_object.XFAObjectArray(); this.image = new _xfa_object.XFAObjectArray(); this.imageEdit = new _xfa_object.XFAObjectArray(); this.integer = new _xfa_object.XFAObjectArray(); this.issuers = new _xfa_object.XFAObjectArray(); this.items = new _xfa_object.XFAObjectArray(); this.keep = new _xfa_object.XFAObjectArray(); this.keyUsage = new _xfa_object.XFAObjectArray(); this.line = new _xfa_object.XFAObjectArray(); this.linear = new _xfa_object.XFAObjectArray(); this.lockDocument = new _xfa_object.XFAObjectArray(); this.manifest = new _xfa_object.XFAObjectArray(); this.margin = new _xfa_object.XFAObjectArray(); this.mdp = new _xfa_object.XFAObjectArray(); this.medium = new _xfa_object.XFAObjectArray(); this.message = new _xfa_object.XFAObjectArray(); this.numericEdit = new _xfa_object.XFAObjectArray(); this.occur = new _xfa_object.XFAObjectArray(); this.oid = new _xfa_object.XFAObjectArray(); this.oids = new _xfa_object.XFAObjectArray(); this.overflow = new _xfa_object.XFAObjectArray(); this.pageArea = new _xfa_object.XFAObjectArray(); this.pageSet = new _xfa_object.XFAObjectArray(); this.para = new _xfa_object.XFAObjectArray(); this.passwordEdit = new _xfa_object.XFAObjectArray(); this.pattern = new _xfa_object.XFAObjectArray(); this.picture = new _xfa_object.XFAObjectArray(); this.radial = new _xfa_object.XFAObjectArray(); this.reason = new _xfa_object.XFAObjectArray(); this.reasons = new _xfa_object.XFAObjectArray(); this.rectangle = new _xfa_object.XFAObjectArray(); this.ref = new _xfa_object.XFAObjectArray(); this.script = new _xfa_object.XFAObjectArray(); this.setProperty = new _xfa_object.XFAObjectArray(); this.signData = new _xfa_object.XFAObjectArray(); this.signature = new _xfa_object.XFAObjectArray(); this.signing = new _xfa_object.XFAObjectArray(); this.solid = new _xfa_object.XFAObjectArray(); this.speak = new _xfa_object.XFAObjectArray(); this.stipple = new _xfa_object.XFAObjectArray(); this.subform = new _xfa_object.XFAObjectArray(); this.subformSet = new _xfa_object.XFAObjectArray(); this.subjectDN = new _xfa_object.XFAObjectArray(); this.subjectDNs = new _xfa_object.XFAObjectArray(); this.submit = new _xfa_object.XFAObjectArray(); this.text = new _xfa_object.XFAObjectArray(); this.textEdit = new _xfa_object.XFAObjectArray(); this.time = new _xfa_object.XFAObjectArray(); this.timeStamp = new _xfa_object.XFAObjectArray(); this.toolTip = new _xfa_object.XFAObjectArray(); this.traversal = new _xfa_object.XFAObjectArray(); this.traverse = new _xfa_object.XFAObjectArray(); this.ui = new _xfa_object.XFAObjectArray(); this.validate = new _xfa_object.XFAObjectArray(); this.value = new _xfa_object.XFAObjectArray(); this.variables = new _xfa_object.XFAObjectArray(); } } class Radial extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "radial", true); this.id = attributes.id || ""; this.type = (0, _utils.getStringOption)(attributes.type, ["toEdge", "toCenter"]); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.color = null; this.extras = null; } [_xfa_object.$toStyle](startColor) { startColor = startColor ? startColor[_xfa_object.$toStyle]() : "#FFFFFF"; const endColor = this.color ? this.color[_xfa_object.$toStyle]() : "#000000"; const colors = this.type === "toEdge" ? `${startColor},${endColor}` : `${endColor},${startColor}`; return `radial-gradient(circle at center, ${colors})`; } } class Reason extends _xfa_object.StringObject { constructor(attributes) { super(TEMPLATE_NS_ID, "reason"); this.id = attributes.id || ""; this.name = attributes.name || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; } } class Reasons extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "reasons", true); this.id = attributes.id || ""; this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.reason = new _xfa_object.XFAObjectArray(); } } class Rectangle extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "rectangle", true); this.hand = (0, _utils.getStringOption)(attributes.hand, ["even", "left", "right"]); this.id = attributes.id || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.corner = new _xfa_object.XFAObjectArray(4); this.edge = new _xfa_object.XFAObjectArray(4); this.fill = null; } [_xfa_object.$toHTML]() { const edge = this.edge.children.length ? this.edge.children[0] : new Edge({}); const edgeStyle = edge[_xfa_object.$toStyle](); const style = Object.create(null); if (this.fill && this.fill.presence === "visible") { Object.assign(style, this.fill[_xfa_object.$toStyle]()); } else { style.fill = "transparent"; } style.strokeWidth = (0, _html_utils.measureToString)(edge.presence === "visible" ? edge.thickness : 0); style.stroke = edgeStyle.color; const corner = this.corner.children.length ? this.corner.children[0] : new Corner({}); const cornerStyle = corner[_xfa_object.$toStyle](); const rect = { name: "rect", attributes: { xmlns: SVG_NS, width: "100%", height: "100%", x: 0, y: 0, rx: cornerStyle.radius, ry: cornerStyle.radius, style } }; const svg = { name: "svg", children: [rect], attributes: { xmlns: SVG_NS, style: { overflow: "visible" }, width: "100%", height: "100%" } }; const parent = this[_xfa_object.$getParent]()[_xfa_object.$getParent](); if (hasMargin(parent)) { return _utils.HTMLResult.success({ name: "div", attributes: { style: { display: "inline", width: "100%", height: "100%" } }, children: [svg] }); } svg.attributes.style.position = "absolute"; return _utils.HTMLResult.success(svg); } } class RefElement extends _xfa_object.StringObject { constructor(attributes) { super(TEMPLATE_NS_ID, "ref"); this.id = attributes.id || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; } } class Script extends _xfa_object.StringObject { constructor(attributes) { super(TEMPLATE_NS_ID, "script"); this.binding = attributes.binding || ""; this.contentType = attributes.contentType || ""; this.id = attributes.id || ""; this.name = attributes.name || ""; this.runAt = (0, _utils.getStringOption)(attributes.runAt, ["client", "both", "server"]); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; } } class SetProperty extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "setProperty"); this.connection = attributes.connection || ""; this.ref = attributes.ref || ""; this.target = attributes.target || ""; } } exports.SetProperty = SetProperty; class SignData extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "signData", true); this.id = attributes.id || ""; this.operation = (0, _utils.getStringOption)(attributes.operation, ["sign", "clear", "verify"]); this.ref = attributes.ref || ""; this.target = attributes.target || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.filter = null; this.manifest = null; } } class Signature extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "signature", true); this.id = attributes.id || ""; this.type = (0, _utils.getStringOption)(attributes.type, ["PDF1.3", "PDF1.6"]); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.border = null; this.extras = null; this.filter = null; this.manifest = null; this.margin = null; } } class Signing extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "signing", true); this.id = attributes.id || ""; this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.certificate = new _xfa_object.XFAObjectArray(); } } class Solid extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "solid", true); this.id = attributes.id || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.extras = null; } [_xfa_object.$toStyle](startColor) { return startColor ? startColor[_xfa_object.$toStyle]() : "#FFFFFF"; } } class Speak extends _xfa_object.StringObject { constructor(attributes) { super(TEMPLATE_NS_ID, "speak"); this.disable = (0, _utils.getInteger)({ data: attributes.disable, defaultValue: 0, validate: x => x === 1 }); this.id = attributes.id || ""; this.priority = (0, _utils.getStringOption)(attributes.priority, ["custom", "caption", "name", "toolTip"]); this.rid = attributes.rid || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; } } class Stipple extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "stipple", true); this.id = attributes.id || ""; this.rate = (0, _utils.getInteger)({ data: attributes.rate, defaultValue: 50, validate: x => x >= 0 && x <= 100 }); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.color = null; this.extras = null; } [_xfa_object.$toStyle](bgColor) { const alpha = this.rate / 100; return _util.Util.makeHexColor(Math.round(bgColor.value.r * (1 - alpha) + this.value.r * alpha), Math.round(bgColor.value.g * (1 - alpha) + this.value.g * alpha), Math.round(bgColor.value.b * (1 - alpha) + this.value.b * alpha)); } } class Subform extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "subform", true); this.access = (0, _utils.getStringOption)(attributes.access, ["open", "nonInteractive", "protected", "readOnly"]); this.allowMacro = (0, _utils.getInteger)({ data: attributes.allowMacro, defaultValue: 0, validate: x => x === 1 }); this.anchorType = (0, _utils.getStringOption)(attributes.anchorType, ["topLeft", "bottomCenter", "bottomLeft", "bottomRight", "middleCenter", "middleLeft", "middleRight", "topCenter", "topRight"]); this.colSpan = (0, _utils.getInteger)({ data: attributes.colSpan, defaultValue: 1, validate: n => n >= 1 || n === -1 }); this.columnWidths = (attributes.columnWidths || "").trim().split(/\s+/).map(x => x === "-1" ? -1 : (0, _utils.getMeasurement)(x)); this.h = attributes.h ? (0, _utils.getMeasurement)(attributes.h) : ""; this.hAlign = (0, _utils.getStringOption)(attributes.hAlign, ["left", "center", "justify", "justifyAll", "radix", "right"]); this.id = attributes.id || ""; this.layout = (0, _utils.getStringOption)(attributes.layout, ["position", "lr-tb", "rl-row", "rl-tb", "row", "table", "tb"]); this.locale = attributes.locale || ""; this.maxH = (0, _utils.getMeasurement)(attributes.maxH, "0pt"); this.maxW = (0, _utils.getMeasurement)(attributes.maxW, "0pt"); this.mergeMode = (0, _utils.getStringOption)(attributes.mergeMode, ["consumeData", "matchTemplate"]); this.minH = (0, _utils.getMeasurement)(attributes.minH, "0pt"); this.minW = (0, _utils.getMeasurement)(attributes.minW, "0pt"); this.name = attributes.name || ""; this.presence = (0, _utils.getStringOption)(attributes.presence, ["visible", "hidden", "inactive", "invisible"]); this.relevant = (0, _utils.getRelevant)(attributes.relevant); this.restoreState = (0, _utils.getStringOption)(attributes.restoreState, ["manual", "auto"]); this.scope = (0, _utils.getStringOption)(attributes.scope, ["name", "none"]); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.w = attributes.w ? (0, _utils.getMeasurement)(attributes.w) : ""; this.x = (0, _utils.getMeasurement)(attributes.x, "0pt"); this.y = (0, _utils.getMeasurement)(attributes.y, "0pt"); this.assist = null; this.bind = null; this.bookend = null; this.border = null; this.break = null; this.calculate = null; this.desc = null; this.extras = null; this.keep = null; this.margin = null; this.occur = null; this.overflow = null; this.pageSet = null; this.para = null; this.traversal = null; this.validate = null; this.variables = null; this.area = new _xfa_object.XFAObjectArray(); this.breakAfter = new _xfa_object.XFAObjectArray(); this.breakBefore = new _xfa_object.XFAObjectArray(); this.connect = new _xfa_object.XFAObjectArray(); this.draw = new _xfa_object.XFAObjectArray(); this.event = new _xfa_object.XFAObjectArray(); this.exObject = new _xfa_object.XFAObjectArray(); this.exclGroup = new _xfa_object.XFAObjectArray(); this.field = new _xfa_object.XFAObjectArray(); this.proto = new _xfa_object.XFAObjectArray(); this.setProperty = new _xfa_object.XFAObjectArray(); this.subform = new _xfa_object.XFAObjectArray(); this.subformSet = new _xfa_object.XFAObjectArray(); } [_xfa_object.$getSubformParent]() { const parent = this[_xfa_object.$getParent](); if (parent instanceof SubformSet) { return parent[_xfa_object.$getSubformParent](); } return parent; } [_xfa_object.$isBindable]() { return true; } [_xfa_object.$isThereMoreWidth]() { return this.layout.endsWith("-tb") && this[_xfa_object.$extra].attempt === 0 && this[_xfa_object.$extra].numberInLine > 0 || this[_xfa_object.$getParent]()[_xfa_object.$isThereMoreWidth](); } *[_xfa_object.$getContainedChildren]() { yield* getContainedChildren(this); } [_xfa_object.$flushHTML]() { return (0, _layout.flushHTML)(this); } [_xfa_object.$addHTML](html, bbox) { (0, _layout.addHTML)(this, html, bbox); } [_xfa_object.$getAvailableSpace]() { return (0, _layout.getAvailableSpace)(this); } [_xfa_object.$isSplittable]() { const parent = this[_xfa_object.$getSubformParent](); if (!parent[_xfa_object.$isSplittable]()) { return false; } if (this[_xfa_object.$extra]._isSplittable !== undefined) { return this[_xfa_object.$extra]._isSplittable; } if (this.layout === "position" || this.layout.includes("row")) { this[_xfa_object.$extra]._isSplittable = false; return false; } if (this.keep && this.keep.intact !== "none") { this[_xfa_object.$extra]._isSplittable = false; return false; } if (parent.layout && parent.layout.endsWith("-tb") && parent[_xfa_object.$extra].numberInLine !== 0) { return false; } this[_xfa_object.$extra]._isSplittable = true; return true; } [_xfa_object.$toHTML](availableSpace) { setTabIndex(this); if (this.break) { if (this.break.after !== "auto" || this.break.afterTarget !== "") { const node = new BreakAfter({ targetType: this.break.after, target: this.break.afterTarget, startNew: this.break.startNew.toString() }); node[_xfa_object.$globalData] = this[_xfa_object.$globalData]; this[_xfa_object.$appendChild](node); this.breakAfter.push(node); } if (this.break.before !== "auto" || this.break.beforeTarget !== "") { const node = new BreakBefore({ targetType: this.break.before, target: this.break.beforeTarget, startNew: this.break.startNew.toString() }); node[_xfa_object.$globalData] = this[_xfa_object.$globalData]; this[_xfa_object.$appendChild](node); this.breakBefore.push(node); } if (this.break.overflowTarget !== "") { const node = new Overflow({ target: this.break.overflowTarget, leader: this.break.overflowLeader, trailer: this.break.overflowTrailer }); node[_xfa_object.$globalData] = this[_xfa_object.$globalData]; this[_xfa_object.$appendChild](node); this.overflow.push(node); } this[_xfa_object.$removeChild](this.break); this.break = null; } if (this.presence === "hidden" || this.presence === "inactive") { return _utils.HTMLResult.EMPTY; } if (this.breakBefore.children.length > 1 || this.breakAfter.children.length > 1) { (0, _util.warn)("XFA - Several breakBefore or breakAfter in subforms: please file a bug."); } if (this.breakBefore.children.length >= 1) { const breakBefore = this.breakBefore.children[0]; if (handleBreak(breakBefore)) { return _utils.HTMLResult.breakNode(breakBefore); } } if (this[_xfa_object.$extra] && this[_xfa_object.$extra].afterBreakAfter) { return _utils.HTMLResult.EMPTY; } (0, _html_utils.fixDimensions)(this); const children = []; const attributes = { id: this[_xfa_object.$uid], class: [] }; (0, _html_utils.setAccess)(this, attributes.class); if (!this[_xfa_object.$extra]) { this[_xfa_object.$extra] = Object.create(null); } Object.assign(this[_xfa_object.$extra], { children, line: null, attributes, attempt: 0, numberInLine: 0, availableSpace: { width: Math.min(this.w || Infinity, availableSpace.width), height: Math.min(this.h || Infinity, availableSpace.height) }, width: 0, height: 0, prevHeight: 0, currentWidth: 0 }); const root = this[_xfa_object.$getTemplateRoot](); const savedNoLayoutFailure = root[_xfa_object.$extra].noLayoutFailure; const isSplittable = this[_xfa_object.$isSplittable](); if (!isSplittable) { setFirstUnsplittable(this); } if (!(0, _layout.checkDimensions)(this, availableSpace)) { return _utils.HTMLResult.FAILURE; } const filter = new Set(["area", "draw", "exclGroup", "field", "subform", "subformSet"]); if (this.layout.includes("row")) { const columnWidths = this[_xfa_object.$getSubformParent]().columnWidths; if (Array.isArray(columnWidths) && columnWidths.length > 0) { this[_xfa_object.$extra].columnWidths = columnWidths; this[_xfa_object.$extra].currentColumn = 0; } } const style = (0, _html_utils.toStyle)(this, "anchorType", "dimensions", "position", "presence", "border", "margin", "hAlign"); const classNames = ["xfaSubform"]; const cl = (0, _html_utils.layoutClass)(this); if (cl) { classNames.push(cl); } attributes.style = style; attributes.class = classNames; if (this.name) { attributes.xfaName = this.name; } if (this.overflow) { const overflowExtra = this.overflow[_xfa_object.$getExtra](); if (overflowExtra.addLeader) { overflowExtra.addLeader = false; handleOverflow(this, overflowExtra.leader, availableSpace); } } this[_xfa_object.$pushPara](); const isLrTb = this.layout === "lr-tb" || this.layout === "rl-tb"; const maxRun = isLrTb ? MAX_ATTEMPTS_FOR_LRTB_LAYOUT : 1; for (; this[_xfa_object.$extra].attempt < maxRun; this[_xfa_object.$extra].attempt++) { if (isLrTb && this[_xfa_object.$extra].attempt === MAX_ATTEMPTS_FOR_LRTB_LAYOUT - 1) { this[_xfa_object.$extra].numberInLine = 0; } const result = this[_xfa_object.$childrenToHTML]({ filter, include: true }); if (result.success) { break; } if (result.isBreak()) { this[_xfa_object.$popPara](); return result; } if (isLrTb && this[_xfa_object.$extra].attempt === 0 && this[_xfa_object.$extra].numberInLine === 0 && !root[_xfa_object.$extra].noLayoutFailure) { this[_xfa_object.$extra].attempt = maxRun; break; } } this[_xfa_object.$popPara](); if (!isSplittable) { unsetFirstUnsplittable(this); } root[_xfa_object.$extra].noLayoutFailure = savedNoLayoutFailure; if (this[_xfa_object.$extra].attempt === maxRun) { if (this.overflow) { this[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].overflowNode = this.overflow; } if (!isSplittable) { delete this[_xfa_object.$extra]; } return _utils.HTMLResult.FAILURE; } if (this.overflow) { const overflowExtra = this.overflow[_xfa_object.$getExtra](); if (overflowExtra.addTrailer) { overflowExtra.addTrailer = false; handleOverflow(this, overflowExtra.trailer, availableSpace); } } let marginH = 0; let marginV = 0; if (this.margin) { marginH = this.margin.leftInset + this.margin.rightInset; marginV = this.margin.topInset + this.margin.bottomInset; } const width = Math.max(this[_xfa_object.$extra].width + marginH, this.w || 0); const height = Math.max(this[_xfa_object.$extra].height + marginV, this.h || 0); const bbox = [this.x, this.y, width, height]; if (this.w === "") { style.width = (0, _html_utils.measureToString)(width); } if (this.h === "") { style.height = (0, _html_utils.measureToString)(height); } if ((style.width === "0px" || style.height === "0px") && children.length === 0) { return _utils.HTMLResult.EMPTY; } const html = { name: "div", attributes, children }; applyAssist(this, attributes); const result = _utils.HTMLResult.success((0, _html_utils.createWrapper)(this, html), bbox); if (this.breakAfter.children.length >= 1) { const breakAfter = this.breakAfter.children[0]; if (handleBreak(breakAfter)) { this[_xfa_object.$extra].afterBreakAfter = result; return _utils.HTMLResult.breakNode(breakAfter); } } delete this[_xfa_object.$extra]; return result; } } class SubformSet extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "subformSet", true); this.id = attributes.id || ""; this.name = attributes.name || ""; this.relation = (0, _utils.getStringOption)(attributes.relation, ["ordered", "choice", "unordered"]); this.relevant = (0, _utils.getRelevant)(attributes.relevant); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.bookend = null; this.break = null; this.desc = null; this.extras = null; this.occur = null; this.overflow = null; this.breakAfter = new _xfa_object.XFAObjectArray(); this.breakBefore = new _xfa_object.XFAObjectArray(); this.subform = new _xfa_object.XFAObjectArray(); this.subformSet = new _xfa_object.XFAObjectArray(); } *[_xfa_object.$getContainedChildren]() { yield* getContainedChildren(this); } [_xfa_object.$getSubformParent]() { let parent = this[_xfa_object.$getParent](); while (!(parent instanceof Subform)) { parent = parent[_xfa_object.$getParent](); } return parent; } [_xfa_object.$isBindable]() { return true; } } class SubjectDN extends _xfa_object.ContentObject { constructor(attributes) { super(TEMPLATE_NS_ID, "subjectDN"); this.delimiter = attributes.delimiter || ","; this.id = attributes.id || ""; this.name = attributes.name || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; } [_xfa_object.$finalize]() { this[_xfa_object.$content] = new Map(this[_xfa_object.$content].split(this.delimiter).map(kv => { kv = kv.split("=", 2); kv[0] = kv[0].trim(); return kv; })); } } class SubjectDNs extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "subjectDNs", true); this.id = attributes.id || ""; this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.subjectDN = new _xfa_object.XFAObjectArray(); } } class Submit extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "submit", true); this.embedPDF = (0, _utils.getInteger)({ data: attributes.embedPDF, defaultValue: 0, validate: x => x === 1 }); this.format = (0, _utils.getStringOption)(attributes.format, ["xdp", "formdata", "pdf", "urlencoded", "xfd", "xml"]); this.id = attributes.id || ""; this.target = attributes.target || ""; this.textEncoding = (0, _utils.getKeyword)({ data: attributes.textEncoding ? attributes.textEncoding.toLowerCase() : "", defaultValue: "", validate: k => ["utf-8", "big-five", "fontspecific", "gbk", "gb-18030", "gb-2312", "ksc-5601", "none", "shift-jis", "ucs-2", "utf-16"].includes(k) || k.match(/iso-8859-\d{2}/) }); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.xdpContent = attributes.xdpContent || ""; this.encrypt = null; this.encryptData = new _xfa_object.XFAObjectArray(); this.signData = new _xfa_object.XFAObjectArray(); } } class Template extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "template", true); this.baseProfile = (0, _utils.getStringOption)(attributes.baseProfile, ["full", "interactiveForms"]); this.extras = null; this.subform = new _xfa_object.XFAObjectArray(); } [_xfa_object.$finalize]() { if (this.subform.children.length === 0) { (0, _util.warn)("XFA - No subforms in template node."); } if (this.subform.children.length >= 2) { (0, _util.warn)("XFA - Several subforms in template node: please file a bug."); } this[_xfa_object.$tabIndex] = DEFAULT_TAB_INDEX; } [_xfa_object.$isSplittable]() { return true; } [_xfa_object.$searchNode](expr, container) { if (expr.startsWith("#")) { return [this[_xfa_object.$ids].get(expr.slice(1))]; } return (0, _som.searchNode)(this, container, expr, true, true); } *[_xfa_object.$toPages]() { if (!this.subform.children.length) { return _utils.HTMLResult.success({ name: "div", children: [] }); } this[_xfa_object.$extra] = { overflowNode: null, firstUnsplittable: null, currentContentArea: null, currentPageArea: null, noLayoutFailure: false, pageNumber: 1, pagePosition: "first", oddOrEven: "odd", blankOrNotBlank: "nonBlank", paraStack: [] }; const root = this.subform.children[0]; root.pageSet[_xfa_object.$cleanPage](); const pageAreas = root.pageSet.pageArea.children; const mainHtml = { name: "div", children: [] }; let pageArea = null; let breakBefore = null; let breakBeforeTarget = null; if (root.breakBefore.children.length >= 1) { breakBefore = root.breakBefore.children[0]; breakBeforeTarget = breakBefore.target; } else if (root.subform.children.length >= 1 && root.subform.children[0].breakBefore.children.length >= 1) { breakBefore = root.subform.children[0].breakBefore.children[0]; breakBeforeTarget = breakBefore.target; } else if (root.break && root.break.beforeTarget) { breakBefore = root.break; breakBeforeTarget = breakBefore.beforeTarget; } else if (root.subform.children.length >= 1 && root.subform.children[0].break && root.subform.children[0].break.beforeTarget) { breakBefore = root.subform.children[0].break; breakBeforeTarget = breakBefore.beforeTarget; } if (breakBefore) { const target = this[_xfa_object.$searchNode](breakBeforeTarget, breakBefore[_xfa_object.$getParent]()); if (target instanceof PageArea) { pageArea = target; breakBefore[_xfa_object.$extra] = {}; } } if (!pageArea) { pageArea = pageAreas[0]; } pageArea[_xfa_object.$extra] = { numberOfUse: 1 }; const pageAreaParent = pageArea[_xfa_object.$getParent](); pageAreaParent[_xfa_object.$extra] = { numberOfUse: 1, pageIndex: pageAreaParent.pageArea.children.indexOf(pageArea), pageSetIndex: 0 }; let targetPageArea; let leader = null; let trailer = null; let hasSomething = true; let hasSomethingCounter = 0; let startIndex = 0; while (true) { if (!hasSomething) { mainHtml.children.pop(); if (++hasSomethingCounter === MAX_EMPTY_PAGES) { (0, _util.warn)("XFA - Something goes wrong: please file a bug."); return mainHtml; } } else { hasSomethingCounter = 0; } targetPageArea = null; this[_xfa_object.$extra].currentPageArea = pageArea; const page = pageArea[_xfa_object.$toHTML]().html; mainHtml.children.push(page); if (leader) { this[_xfa_object.$extra].noLayoutFailure = true; page.children.push(leader[_xfa_object.$toHTML](pageArea[_xfa_object.$extra].space).html); leader = null; } if (trailer) { this[_xfa_object.$extra].noLayoutFailure = true; page.children.push(trailer[_xfa_object.$toHTML](pageArea[_xfa_object.$extra].space).html); trailer = null; } const contentAreas = pageArea.contentArea.children; const htmlContentAreas = page.children.filter(node => node.attributes.class.includes("xfaContentarea")); hasSomething = false; this[_xfa_object.$extra].firstUnsplittable = null; this[_xfa_object.$extra].noLayoutFailure = false; const flush = index => { const html = root[_xfa_object.$flushHTML](); if (html) { hasSomething = hasSomething || html.children && html.children.length !== 0; htmlContentAreas[index].children.push(html); } }; for (let i = startIndex, ii = contentAreas.length; i < ii; i++) { const contentArea = this[_xfa_object.$extra].currentContentArea = contentAreas[i]; const space = { width: contentArea.w, height: contentArea.h }; startIndex = 0; if (leader) { htmlContentAreas[i].children.push(leader[_xfa_object.$toHTML](space).html); leader = null; } if (trailer) { htmlContentAreas[i].children.push(trailer[_xfa_object.$toHTML](space).html); trailer = null; } const html = root[_xfa_object.$toHTML](space); if (html.success) { if (html.html) { hasSomething = hasSomething || html.html.children && html.html.children.length !== 0; htmlContentAreas[i].children.push(html.html); } else if (!hasSomething && mainHtml.children.length > 1) { mainHtml.children.pop(); } return mainHtml; } if (html.isBreak()) { const node = html.breakNode; flush(i); if (node.targetType === "auto") { continue; } if (node.leader) { leader = this[_xfa_object.$searchNode](node.leader, node[_xfa_object.$getParent]()); leader = leader ? leader[0] : null; } if (node.trailer) { trailer = this[_xfa_object.$searchNode](node.trailer, node[_xfa_object.$getParent]()); trailer = trailer ? trailer[0] : null; } if (node.targetType === "pageArea") { targetPageArea = node[_xfa_object.$extra].target; i = Infinity; } else if (!node[_xfa_object.$extra].target) { i = node[_xfa_object.$extra].index; } else { targetPageArea = node[_xfa_object.$extra].target; startIndex = node[_xfa_object.$extra].index + 1; i = Infinity; } continue; } if (this[_xfa_object.$extra].overflowNode) { const node = this[_xfa_object.$extra].overflowNode; this[_xfa_object.$extra].overflowNode = null; const overflowExtra = node[_xfa_object.$getExtra](); const target = overflowExtra.target; overflowExtra.addLeader = overflowExtra.leader !== null; overflowExtra.addTrailer = overflowExtra.trailer !== null; flush(i); const currentIndex = i; i = Infinity; if (target instanceof PageArea) { targetPageArea = target; } else if (target instanceof ContentArea) { const index = contentAreas.findIndex(e => e === target); if (index !== -1) { if (index > currentIndex) { i = index - 1; } else { startIndex = index; } } else { targetPageArea = target[_xfa_object.$getParent](); startIndex = targetPageArea.contentArea.children.findIndex(e => e === target); } } continue; } flush(i); } this[_xfa_object.$extra].pageNumber += 1; if (targetPageArea) { if (targetPageArea[_xfa_object.$isUsable]()) { targetPageArea[_xfa_object.$extra].numberOfUse += 1; } else { targetPageArea = null; } } pageArea = targetPageArea || pageArea[_xfa_object.$getNextPage](); yield null; } } } exports.Template = Template; class Text extends _xfa_object.ContentObject { constructor(attributes) { super(TEMPLATE_NS_ID, "text"); this.id = attributes.id || ""; this.maxChars = (0, _utils.getInteger)({ data: attributes.maxChars, defaultValue: 0, validate: x => x >= 0 }); this.name = attributes.name || ""; this.rid = attributes.rid || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; } [_xfa_object.$acceptWhitespace]() { return true; } [_xfa_object.$onChild](child) { if (child[_xfa_object.$namespaceId] === _namespaces.NamespaceIds.xhtml.id) { this[_xfa_object.$content] = child; return true; } (0, _util.warn)(`XFA - Invalid content in Text: ${child[_xfa_object.$nodeName]}.`); return false; } [_xfa_object.$onText](str) { if (this[_xfa_object.$content] instanceof _xfa_object.XFAObject) { return; } super[_xfa_object.$onText](str); } [_xfa_object.$finalize]() { if (typeof this[_xfa_object.$content] === "string") { this[_xfa_object.$content] = this[_xfa_object.$content].replace(/\r\n/g, "\n"); } } [_xfa_object.$getExtra]() { if (typeof this[_xfa_object.$content] === "string") { return this[_xfa_object.$content].split(/[\u2029\u2028\n]/).reduce((acc, line) => { if (line) { acc.push(line); } return acc; }, []).join("\n"); } return this[_xfa_object.$content][_xfa_object.$text](); } [_xfa_object.$toHTML](availableSpace) { if (typeof this[_xfa_object.$content] === "string") { const html = valueToHtml(this[_xfa_object.$content]).html; if (this[_xfa_object.$content].includes("\u2029")) { html.name = "div"; html.children = []; this[_xfa_object.$content].split("\u2029").map(para => para.split(/[\u2028\n]/).reduce((acc, line) => { acc.push({ name: "span", value: line }, { name: "br" }); return acc; }, [])).forEach(lines => { html.children.push({ name: "p", children: lines }); }); } else if (/[\u2028\n]/.test(this[_xfa_object.$content])) { html.name = "div"; html.children = []; this[_xfa_object.$content].split(/[\u2028\n]/).forEach(line => { html.children.push({ name: "span", value: line }, { name: "br" }); }); } return _utils.HTMLResult.success(html); } return this[_xfa_object.$content][_xfa_object.$toHTML](availableSpace); } } exports.Text = Text; class TextEdit extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "textEdit", true); this.allowRichText = (0, _utils.getInteger)({ data: attributes.allowRichText, defaultValue: 0, validate: x => x === 1 }); this.hScrollPolicy = (0, _utils.getStringOption)(attributes.hScrollPolicy, ["auto", "off", "on"]); this.id = attributes.id || ""; this.multiLine = (0, _utils.getInteger)({ data: attributes.multiLine, defaultValue: "", validate: x => x === 0 || x === 1 }); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.vScrollPolicy = (0, _utils.getStringOption)(attributes.vScrollPolicy, ["auto", "off", "on"]); this.border = null; this.comb = null; this.extras = null; this.margin = null; } [_xfa_object.$toHTML](availableSpace) { const style = (0, _html_utils.toStyle)(this, "border", "font", "margin"); let html; const field = this[_xfa_object.$getParent]()[_xfa_object.$getParent](); if (this.multiLine === "") { this.multiLine = field instanceof Draw ? 1 : 0; } if (this.multiLine === 1) { html = { name: "textarea", attributes: { dataId: field[_xfa_object.$data] && field[_xfa_object.$data][_xfa_object.$uid] || field[_xfa_object.$uid], fieldId: field[_xfa_object.$uid], class: ["xfaTextfield"], style, "aria-label": ariaLabel(field) } }; } else { html = { name: "input", attributes: { type: "text", dataId: field[_xfa_object.$data] && field[_xfa_object.$data][_xfa_object.$uid] || field[_xfa_object.$uid], fieldId: field[_xfa_object.$uid], class: ["xfaTextfield"], style, "aria-label": ariaLabel(field) } }; } return _utils.HTMLResult.success({ name: "label", attributes: { class: ["xfaLabel"] }, children: [html] }); } } class Time extends _xfa_object.StringObject { constructor(attributes) { super(TEMPLATE_NS_ID, "time"); this.id = attributes.id || ""; this.name = attributes.name || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; } [_xfa_object.$finalize]() { const date = this[_xfa_object.$content].trim(); this[_xfa_object.$content] = date ? new Date(date) : null; } [_xfa_object.$toHTML](availableSpace) { return valueToHtml(this[_xfa_object.$content] ? this[_xfa_object.$content].toString() : ""); } } class TimeStamp extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "timeStamp"); this.id = attributes.id || ""; this.server = attributes.server || ""; this.type = (0, _utils.getStringOption)(attributes.type, ["optional", "required"]); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; } } class ToolTip extends _xfa_object.StringObject { constructor(attributes) { super(TEMPLATE_NS_ID, "toolTip"); this.id = attributes.id || ""; this.rid = attributes.rid || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; } } class Traversal extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "traversal", true); this.id = attributes.id || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.extras = null; this.traverse = new _xfa_object.XFAObjectArray(); } } class Traverse extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "traverse", true); this.id = attributes.id || ""; this.operation = (0, _utils.getStringOption)(attributes.operation, ["next", "back", "down", "first", "left", "right", "up"]); this.ref = attributes.ref || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.extras = null; this.script = null; } get name() { return this.operation; } [_xfa_object.$isTransparent]() { return false; } } class Ui extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "ui", true); this.id = attributes.id || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.extras = null; this.picture = null; this.barcode = null; this.button = null; this.checkButton = null; this.choiceList = null; this.dateTimeEdit = null; this.defaultUi = null; this.imageEdit = null; this.numericEdit = null; this.passwordEdit = null; this.signature = null; this.textEdit = null; } [_xfa_object.$getExtra]() { if (this[_xfa_object.$extra] === undefined) { for (const name of Object.getOwnPropertyNames(this)) { if (name === "extras" || name === "picture") { continue; } const obj = this[name]; if (!(obj instanceof _xfa_object.XFAObject)) { continue; } this[_xfa_object.$extra] = obj; return obj; } this[_xfa_object.$extra] = null; } return this[_xfa_object.$extra]; } [_xfa_object.$toHTML](availableSpace) { const obj = this[_xfa_object.$getExtra](); if (obj) { return obj[_xfa_object.$toHTML](availableSpace); } return _utils.HTMLResult.EMPTY; } } class Validate extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "validate", true); this.formatTest = (0, _utils.getStringOption)(attributes.formatTest, ["warning", "disabled", "error"]); this.id = attributes.id || ""; this.nullTest = (0, _utils.getStringOption)(attributes.nullTest, ["disabled", "error", "warning"]); this.scriptTest = (0, _utils.getStringOption)(attributes.scriptTest, ["error", "disabled", "warning"]); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.extras = null; this.message = null; this.picture = null; this.script = null; } } class Value extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "value", true); this.id = attributes.id || ""; this.override = (0, _utils.getInteger)({ data: attributes.override, defaultValue: 0, validate: x => x === 1 }); this.relevant = (0, _utils.getRelevant)(attributes.relevant); this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.arc = null; this.boolean = null; this.date = null; this.dateTime = null; this.decimal = null; this.exData = null; this.float = null; this.image = null; this.integer = null; this.line = null; this.rectangle = null; this.text = null; this.time = null; } [_xfa_object.$setValue](value) { const parent = this[_xfa_object.$getParent](); if (parent instanceof Field) { if (parent.ui && parent.ui.imageEdit) { if (!this.image) { this.image = new Image({}); this[_xfa_object.$appendChild](this.image); } this.image[_xfa_object.$content] = value[_xfa_object.$content]; return; } } const valueName = value[_xfa_object.$nodeName]; if (this[valueName] !== null) { this[valueName][_xfa_object.$content] = value[_xfa_object.$content]; return; } for (const name of Object.getOwnPropertyNames(this)) { const obj = this[name]; if (obj instanceof _xfa_object.XFAObject) { this[name] = null; this[_xfa_object.$removeChild](obj); } } this[value[_xfa_object.$nodeName]] = value; this[_xfa_object.$appendChild](value); } [_xfa_object.$text]() { if (this.exData) { if (typeof this.exData[_xfa_object.$content] === "string") { return this.exData[_xfa_object.$content].trim(); } return this.exData[_xfa_object.$content][_xfa_object.$text]().trim(); } for (const name of Object.getOwnPropertyNames(this)) { if (name === "image") { continue; } const obj = this[name]; if (obj instanceof _xfa_object.XFAObject) { return (obj[_xfa_object.$content] || "").toString().trim(); } } return null; } [_xfa_object.$toHTML](availableSpace) { for (const name of Object.getOwnPropertyNames(this)) { const obj = this[name]; if (!(obj instanceof _xfa_object.XFAObject)) { continue; } return obj[_xfa_object.$toHTML](availableSpace); } return _utils.HTMLResult.EMPTY; } } exports.Value = Value; class Variables extends _xfa_object.XFAObject { constructor(attributes) { super(TEMPLATE_NS_ID, "variables", true); this.id = attributes.id || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; this.boolean = new _xfa_object.XFAObjectArray(); this.date = new _xfa_object.XFAObjectArray(); this.dateTime = new _xfa_object.XFAObjectArray(); this.decimal = new _xfa_object.XFAObjectArray(); this.exData = new _xfa_object.XFAObjectArray(); this.float = new _xfa_object.XFAObjectArray(); this.image = new _xfa_object.XFAObjectArray(); this.integer = new _xfa_object.XFAObjectArray(); this.manifest = new _xfa_object.XFAObjectArray(); this.script = new _xfa_object.XFAObjectArray(); this.text = new _xfa_object.XFAObjectArray(); this.time = new _xfa_object.XFAObjectArray(); } [_xfa_object.$isTransparent]() { return true; } } class TemplateNamespace { static [_namespaces.$buildXFAObject](name, attributes) { if (TemplateNamespace.hasOwnProperty(name)) { const node = TemplateNamespace[name](attributes); node[_xfa_object.$setSetAttributes](attributes); return node; } return undefined; } static appearanceFilter(attrs) { return new AppearanceFilter(attrs); } static arc(attrs) { return new Arc(attrs); } static area(attrs) { return new Area(attrs); } static assist(attrs) { return new Assist(attrs); } static barcode(attrs) { return new Barcode(attrs); } static bind(attrs) { return new Bind(attrs); } static bindItems(attrs) { return new BindItems(attrs); } static bookend(attrs) { return new Bookend(attrs); } static boolean(attrs) { return new BooleanElement(attrs); } static border(attrs) { return new Border(attrs); } static break(attrs) { return new Break(attrs); } static breakAfter(attrs) { return new BreakAfter(attrs); } static breakBefore(attrs) { return new BreakBefore(attrs); } static button(attrs) { return new Button(attrs); } static calculate(attrs) { return new Calculate(attrs); } static caption(attrs) { return new Caption(attrs); } static certificate(attrs) { return new Certificate(attrs); } static certificates(attrs) { return new Certificates(attrs); } static checkButton(attrs) { return new CheckButton(attrs); } static choiceList(attrs) { return new ChoiceList(attrs); } static color(attrs) { return new Color(attrs); } static comb(attrs) { return new Comb(attrs); } static connect(attrs) { return new Connect(attrs); } static contentArea(attrs) { return new ContentArea(attrs); } static corner(attrs) { return new Corner(attrs); } static date(attrs) { return new DateElement(attrs); } static dateTime(attrs) { return new DateTime(attrs); } static dateTimeEdit(attrs) { return new DateTimeEdit(attrs); } static decimal(attrs) { return new Decimal(attrs); } static defaultUi(attrs) { return new DefaultUi(attrs); } static desc(attrs) { return new Desc(attrs); } static digestMethod(attrs) { return new DigestMethod(attrs); } static digestMethods(attrs) { return new DigestMethods(attrs); } static draw(attrs) { return new Draw(attrs); } static edge(attrs) { return new Edge(attrs); } static encoding(attrs) { return new Encoding(attrs); } static encodings(attrs) { return new Encodings(attrs); } static encrypt(attrs) { return new Encrypt(attrs); } static encryptData(attrs) { return new EncryptData(attrs); } static encryption(attrs) { return new Encryption(attrs); } static encryptionMethod(attrs) { return new EncryptionMethod(attrs); } static encryptionMethods(attrs) { return new EncryptionMethods(attrs); } static event(attrs) { return new Event(attrs); } static exData(attrs) { return new ExData(attrs); } static exObject(attrs) { return new ExObject(attrs); } static exclGroup(attrs) { return new ExclGroup(attrs); } static execute(attrs) { return new Execute(attrs); } static extras(attrs) { return new Extras(attrs); } static field(attrs) { return new Field(attrs); } static fill(attrs) { return new Fill(attrs); } static filter(attrs) { return new Filter(attrs); } static float(attrs) { return new Float(attrs); } static font(attrs) { return new Font(attrs); } static format(attrs) { return new Format(attrs); } static handler(attrs) { return new Handler(attrs); } static hyphenation(attrs) { return new Hyphenation(attrs); } static image(attrs) { return new Image(attrs); } static imageEdit(attrs) { return new ImageEdit(attrs); } static integer(attrs) { return new Integer(attrs); } static issuers(attrs) { return new Issuers(attrs); } static items(attrs) { return new Items(attrs); } static keep(attrs) { return new Keep(attrs); } static keyUsage(attrs) { return new KeyUsage(attrs); } static line(attrs) { return new Line(attrs); } static linear(attrs) { return new Linear(attrs); } static lockDocument(attrs) { return new LockDocument(attrs); } static manifest(attrs) { return new Manifest(attrs); } static margin(attrs) { return new Margin(attrs); } static mdp(attrs) { return new Mdp(attrs); } static medium(attrs) { return new Medium(attrs); } static message(attrs) { return new Message(attrs); } static numericEdit(attrs) { return new NumericEdit(attrs); } static occur(attrs) { return new Occur(attrs); } static oid(attrs) { return new Oid(attrs); } static oids(attrs) { return new Oids(attrs); } static overflow(attrs) { return new Overflow(attrs); } static pageArea(attrs) { return new PageArea(attrs); } static pageSet(attrs) { return new PageSet(attrs); } static para(attrs) { return new Para(attrs); } static passwordEdit(attrs) { return new PasswordEdit(attrs); } static pattern(attrs) { return new Pattern(attrs); } static picture(attrs) { return new Picture(attrs); } static proto(attrs) { return new Proto(attrs); } static radial(attrs) { return new Radial(attrs); } static reason(attrs) { return new Reason(attrs); } static reasons(attrs) { return new Reasons(attrs); } static rectangle(attrs) { return new Rectangle(attrs); } static ref(attrs) { return new RefElement(attrs); } static script(attrs) { return new Script(attrs); } static setProperty(attrs) { return new SetProperty(attrs); } static signData(attrs) { return new SignData(attrs); } static signature(attrs) { return new Signature(attrs); } static signing(attrs) { return new Signing(attrs); } static solid(attrs) { return new Solid(attrs); } static speak(attrs) { return new Speak(attrs); } static stipple(attrs) { return new Stipple(attrs); } static subform(attrs) { return new Subform(attrs); } static subformSet(attrs) { return new SubformSet(attrs); } static subjectDN(attrs) { return new SubjectDN(attrs); } static subjectDNs(attrs) { return new SubjectDNs(attrs); } static submit(attrs) { return new Submit(attrs); } static template(attrs) { return new Template(attrs); } static text(attrs) { return new Text(attrs); } static textEdit(attrs) { return new TextEdit(attrs); } static time(attrs) { return new Time(attrs); } static timeStamp(attrs) { return new TimeStamp(attrs); } static toolTip(attrs) { return new ToolTip(attrs); } static traversal(attrs) { return new Traversal(attrs); } static traverse(attrs) { return new Traverse(attrs); } static ui(attrs) { return new Ui(attrs); } static validate(attrs) { return new Validate(attrs); } static value(attrs) { return new Value(attrs); } static variables(attrs) { return new Variables(attrs); } } exports.TemplateNamespace = TemplateNamespace; /***/ }), /* 81 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.addHTML = addHTML; exports.checkDimensions = checkDimensions; exports.flushHTML = flushHTML; exports.getAvailableSpace = getAvailableSpace; var _xfa_object = __w_pdfjs_require__(75); var _html_utils = __w_pdfjs_require__(82); function createLine(node, children) { return { name: "div", attributes: { class: [node.layout === "lr-tb" ? "xfaLr" : "xfaRl"] }, children }; } function flushHTML(node) { if (!node[_xfa_object.$extra]) { return null; } const attributes = node[_xfa_object.$extra].attributes; const html = { name: "div", attributes, children: node[_xfa_object.$extra].children }; if (node[_xfa_object.$extra].failingNode) { const htmlFromFailing = node[_xfa_object.$extra].failingNode[_xfa_object.$flushHTML](); if (htmlFromFailing) { if (node.layout.endsWith("-tb")) { html.children.push(createLine(node, [htmlFromFailing])); } else { html.children.push(htmlFromFailing); } } } if (html.children.length === 0) { return null; } return html; } function addHTML(node, html, bbox) { const extra = node[_xfa_object.$extra]; const availableSpace = extra.availableSpace; const [x, y, w, h] = bbox; switch (node.layout) { case "position": { extra.width = Math.max(extra.width, x + w); extra.height = Math.max(extra.height, y + h); extra.children.push(html); break; } case "lr-tb": case "rl-tb": if (!extra.line || extra.attempt === 1) { extra.line = createLine(node, []); extra.children.push(extra.line); extra.numberInLine = 0; } extra.numberInLine += 1; extra.line.children.push(html); if (extra.attempt === 0) { extra.currentWidth += w; extra.height = Math.max(extra.height, extra.prevHeight + h); } else { extra.currentWidth = w; extra.prevHeight = extra.height; extra.height += h; extra.attempt = 0; } extra.width = Math.max(extra.width, extra.currentWidth); break; case "rl-row": case "row": { extra.children.push(html); extra.width += w; extra.height = Math.max(extra.height, h); const height = (0, _html_utils.measureToString)(extra.height); for (const child of extra.children) { child.attributes.style.height = height; } break; } case "table": { extra.width = Math.min(availableSpace.width, Math.max(extra.width, w)); extra.height += h; extra.children.push(html); break; } case "tb": { extra.width = Math.min(availableSpace.width, Math.max(extra.width, w)); extra.height += h; extra.children.push(html); break; } } } function getAvailableSpace(node) { const availableSpace = node[_xfa_object.$extra].availableSpace; const marginV = node.margin ? node.margin.topInset + node.margin.bottomInset : 0; const marginH = node.margin ? node.margin.leftInset + node.margin.rightInset : 0; switch (node.layout) { case "lr-tb": case "rl-tb": if (node[_xfa_object.$extra].attempt === 0) { return { width: availableSpace.width - marginH - node[_xfa_object.$extra].currentWidth, height: availableSpace.height - marginV - node[_xfa_object.$extra].prevHeight }; } return { width: availableSpace.width - marginH, height: availableSpace.height - marginV - node[_xfa_object.$extra].height }; case "rl-row": case "row": const width = node[_xfa_object.$extra].columnWidths.slice(node[_xfa_object.$extra].currentColumn).reduce((a, x) => a + x); return { width, height: availableSpace.height - marginH }; case "table": case "tb": return { width: availableSpace.width - marginH, height: availableSpace.height - marginV - node[_xfa_object.$extra].height }; case "position": default: return availableSpace; } } function getTransformedBBox(node) { let w = node.w === "" ? NaN : node.w; let h = node.h === "" ? NaN : node.h; let [centerX, centerY] = [0, 0]; switch (node.anchorType || "") { case "bottomCenter": [centerX, centerY] = [w / 2, h]; break; case "bottomLeft": [centerX, centerY] = [0, h]; break; case "bottomRight": [centerX, centerY] = [w, h]; break; case "middleCenter": [centerX, centerY] = [w / 2, h / 2]; break; case "middleLeft": [centerX, centerY] = [0, h / 2]; break; case "middleRight": [centerX, centerY] = [w, h / 2]; break; case "topCenter": [centerX, centerY] = [w / 2, 0]; break; case "topRight": [centerX, centerY] = [w, 0]; break; } let x, y; switch (node.rotate || 0) { case 0: [x, y] = [-centerX, -centerY]; break; case 90: [x, y] = [-centerY, centerX]; [w, h] = [h, -w]; break; case 180: [x, y] = [centerX, centerY]; [w, h] = [-w, -h]; break; case 270: [x, y] = [centerY, -centerX]; [w, h] = [-h, w]; break; } return [node.x + x + Math.min(0, w), node.y + y + Math.min(0, h), Math.abs(w), Math.abs(h)]; } function checkDimensions(node, space) { if (node[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].firstUnsplittable === null) { return true; } if (node.w === 0 || node.h === 0) { return true; } const ERROR = 2; const parent = node[_xfa_object.$getSubformParent](); const attempt = parent[_xfa_object.$extra] && parent[_xfa_object.$extra].attempt || 0; const [, y, w, h] = getTransformedBBox(node); switch (parent.layout) { case "lr-tb": case "rl-tb": if (attempt === 0) { if (!node[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].noLayoutFailure) { if (node.h !== "" && Math.round(h - space.height) > ERROR) { return false; } if (node.w !== "") { if (Math.round(w - space.width) <= ERROR) { return true; } if (parent[_xfa_object.$extra].numberInLine === 0) { return space.height > ERROR; } return false; } return space.width > ERROR; } if (node.w !== "") { return Math.round(w - space.width) <= ERROR; } return space.width > ERROR; } if (node[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].noLayoutFailure) { return true; } if (node.h !== "" && Math.round(h - space.height) > ERROR) { return false; } if (node.w === "" || Math.round(w - space.width) <= ERROR) { return space.height > ERROR; } if (parent[_xfa_object.$isThereMoreWidth]()) { return false; } return space.height > ERROR; case "table": case "tb": if (node[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].noLayoutFailure) { return true; } if (node.h !== "" && !node[_xfa_object.$isSplittable]()) { return Math.round(h - space.height) <= ERROR; } if (node.w === "" || Math.round(w - space.width) <= ERROR) { return space.height > ERROR; } if (parent[_xfa_object.$isThereMoreWidth]()) { return false; } return space.height > ERROR; case "position": if (node[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].noLayoutFailure) { return true; } if (node.h === "" || Math.round(h + y - space.height) <= ERROR) { return true; } const area = node[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].currentContentArea; return h + y > area.h; case "rl-row": case "row": if (node[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].noLayoutFailure) { return true; } if (node.h !== "") { return Math.round(h - space.height) <= ERROR; } return true; default: return true; } } /***/ }), /* 82 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.computeBbox = computeBbox; exports.createWrapper = createWrapper; exports.fixDimensions = fixDimensions; exports.fixTextIndent = fixTextIndent; exports.fixURL = fixURL; exports.isPrintOnly = isPrintOnly; exports.layoutClass = layoutClass; exports.layoutNode = layoutNode; exports.measureToString = measureToString; exports.setAccess = setAccess; exports.setFontFamily = setFontFamily; exports.setMinMaxDimensions = setMinMaxDimensions; exports.setPara = setPara; exports.toStyle = toStyle; var _xfa_object = __w_pdfjs_require__(75); var _util = __w_pdfjs_require__(2); var _utils = __w_pdfjs_require__(76); var _fonts = __w_pdfjs_require__(83); var _text = __w_pdfjs_require__(84); function measureToString(m) { if (typeof m === "string") { return "0px"; } return Number.isInteger(m) ? `${m}px` : `${m.toFixed(2)}px`; } const converters = { anchorType(node, style) { const parent = node[_xfa_object.$getSubformParent](); if (!parent || parent.layout && parent.layout !== "position") { return; } if (!("transform" in style)) { style.transform = ""; } switch (node.anchorType) { case "bottomCenter": style.transform += "translate(-50%, -100%)"; break; case "bottomLeft": style.transform += "translate(0,-100%)"; break; case "bottomRight": style.transform += "translate(-100%,-100%)"; break; case "middleCenter": style.transform += "translate(-50%,-50%)"; break; case "middleLeft": style.transform += "translate(0,-50%)"; break; case "middleRight": style.transform += "translate(-100%,-50%)"; break; case "topCenter": style.transform += "translate(-50%,0)"; break; case "topRight": style.transform += "translate(-100%,0)"; break; } }, dimensions(node, style) { const parent = node[_xfa_object.$getSubformParent](); let width = node.w; const height = node.h; if (parent.layout && parent.layout.includes("row")) { const extra = parent[_xfa_object.$extra]; const colSpan = node.colSpan; let w; if (colSpan === -1) { w = extra.columnWidths.slice(extra.currentColumn).reduce((a, x) => a + x, 0); extra.currentColumn = 0; } else { w = extra.columnWidths.slice(extra.currentColumn, extra.currentColumn + colSpan).reduce((a, x) => a + x, 0); extra.currentColumn = (extra.currentColumn + node.colSpan) % extra.columnWidths.length; } if (!isNaN(w)) { width = node.w = w; } } if (width !== "") { style.width = measureToString(width); } else { style.width = "auto"; } if (height !== "") { style.height = measureToString(height); } else { style.height = "auto"; } }, position(node, style) { const parent = node[_xfa_object.$getSubformParent](); if (parent && parent.layout && parent.layout !== "position") { return; } style.position = "absolute"; style.left = measureToString(node.x); style.top = measureToString(node.y); }, rotate(node, style) { if (node.rotate) { if (!("transform" in style)) { style.transform = ""; } style.transform += `rotate(-${node.rotate}deg)`; style.transformOrigin = "top left"; } }, presence(node, style) { switch (node.presence) { case "invisible": style.visibility = "hidden"; break; case "hidden": case "inactive": style.display = "none"; break; } }, hAlign(node, style) { if (node[_xfa_object.$nodeName] === "para") { switch (node.hAlign) { case "justifyAll": style.textAlign = "justify-all"; break; case "radix": style.textAlign = "left"; break; default: style.textAlign = node.hAlign; } } else { switch (node.hAlign) { case "left": style.alignSelf = "start"; break; case "center": style.alignSelf = "center"; break; case "right": style.alignSelf = "end"; break; } } }, margin(node, style) { if (node.margin) { style.margin = node.margin[_xfa_object.$toStyle]().margin; } } }; function setMinMaxDimensions(node, style) { const parent = node[_xfa_object.$getSubformParent](); if (parent.layout === "position") { if (node.minW > 0) { style.minWidth = measureToString(node.minW); } if (node.maxW > 0) { style.maxWidth = measureToString(node.maxW); } if (node.minH > 0) { style.minHeight = measureToString(node.minH); } if (node.maxH > 0) { style.maxHeight = measureToString(node.maxH); } } } function layoutText(text, xfaFont, margin, lineHeight, fontFinder, width) { const measure = new _text.TextMeasure(xfaFont, margin, lineHeight, fontFinder); if (typeof text === "string") { measure.addString(text); } else { text[_xfa_object.$pushGlyphs](measure); } return measure.compute(width); } function layoutNode(node, availableSpace) { let height = null; let width = null; let isBroken = false; if ((!node.w || !node.h) && node.value) { let marginH = 0; let marginV = 0; if (node.margin) { marginH = node.margin.leftInset + node.margin.rightInset; marginV = node.margin.topInset + node.margin.bottomInset; } let lineHeight = null; let margin = null; if (node.para) { margin = Object.create(null); lineHeight = node.para.lineHeight === "" ? null : node.para.lineHeight; margin.top = node.para.spaceAbove === "" ? 0 : node.para.spaceAbove; margin.bottom = node.para.spaceBelow === "" ? 0 : node.para.spaceBelow; margin.left = node.para.marginLeft === "" ? 0 : node.para.marginLeft; margin.right = node.para.marginRight === "" ? 0 : node.para.marginRight; } let font = node.font; if (!font) { const root = node[_xfa_object.$getTemplateRoot](); let parent = node[_xfa_object.$getParent](); while (parent && parent !== root) { if (parent.font) { font = parent.font; break; } parent = parent[_xfa_object.$getParent](); } } const maxWidth = (!node.w ? availableSpace.width : node.w) - marginH; const fontFinder = node[_xfa_object.$globalData].fontFinder; if (node.value.exData && node.value.exData[_xfa_object.$content] && node.value.exData.contentType === "text/html") { const res = layoutText(node.value.exData[_xfa_object.$content], font, margin, lineHeight, fontFinder, maxWidth); width = res.width; height = res.height; isBroken = res.isBroken; } else { const text = node.value[_xfa_object.$text](); if (text) { const res = layoutText(text, font, margin, lineHeight, fontFinder, maxWidth); width = res.width; height = res.height; isBroken = res.isBroken; } } if (width !== null && !node.w) { width += marginH; } if (height !== null && !node.h) { height += marginV; } } return { w: width, h: height, isBroken }; } function computeBbox(node, html, availableSpace) { let bbox; if (node.w !== "" && node.h !== "") { bbox = [node.x, node.y, node.w, node.h]; } else { if (!availableSpace) { return null; } let width = node.w; if (width === "") { if (node.maxW === 0) { const parent = node[_xfa_object.$getSubformParent](); if (parent.layout === "position" && parent.w !== "") { width = 0; } else { width = node.minW; } } else { width = Math.min(node.maxW, availableSpace.width); } html.attributes.style.width = measureToString(width); } let height = node.h; if (height === "") { if (node.maxH === 0) { const parent = node[_xfa_object.$getSubformParent](); if (parent.layout === "position" && parent.h !== "") { height = 0; } else { height = node.minH; } } else { height = Math.min(node.maxH, availableSpace.height); } html.attributes.style.height = measureToString(height); } bbox = [node.x, node.y, width, height]; } return bbox; } function fixDimensions(node) { const parent = node[_xfa_object.$getSubformParent](); if (parent.layout && parent.layout.includes("row")) { const extra = parent[_xfa_object.$extra]; const colSpan = node.colSpan; let width; if (colSpan === -1) { width = extra.columnWidths.slice(extra.currentColumn).reduce((a, w) => a + w, 0); } else { width = extra.columnWidths.slice(extra.currentColumn, extra.currentColumn + colSpan).reduce((a, w) => a + w, 0); } if (!isNaN(width)) { node.w = width; } } if (parent.layout && parent.layout !== "position") { node.x = node.y = 0; } if (node.layout === "table") { if (node.w === "" && Array.isArray(node.columnWidths)) { node.w = node.columnWidths.reduce((a, x) => a + x, 0); } } } function layoutClass(node) { switch (node.layout) { case "position": return "xfaPosition"; case "lr-tb": return "xfaLrTb"; case "rl-row": return "xfaRlRow"; case "rl-tb": return "xfaRlTb"; case "row": return "xfaRow"; case "table": return "xfaTable"; case "tb": return "xfaTb"; default: return "xfaPosition"; } } function toStyle(node, ...names) { const style = Object.create(null); for (const name of names) { const value = node[name]; if (value === null) { continue; } if (converters.hasOwnProperty(name)) { converters[name](node, style); continue; } if (value instanceof _xfa_object.XFAObject) { const newStyle = value[_xfa_object.$toStyle](); if (newStyle) { Object.assign(style, newStyle); } else { (0, _util.warn)(`(DEBUG) - XFA - style for ${name} not implemented yet`); } } } return style; } function createWrapper(node, html) { const { attributes } = html; const { style } = attributes; const wrapper = { name: "div", attributes: { class: ["xfaWrapper"], style: Object.create(null) }, children: [] }; attributes.class.push("xfaWrapped"); if (node.border) { const { widths, insets } = node.border[_xfa_object.$extra]; let width, height; let top = insets[0]; let left = insets[3]; const insetsH = insets[0] + insets[2]; const insetsW = insets[1] + insets[3]; switch (node.border.hand) { case "even": top -= widths[0] / 2; left -= widths[3] / 2; width = `calc(100% + ${(widths[1] + widths[3]) / 2 - insetsW}px)`; height = `calc(100% + ${(widths[0] + widths[2]) / 2 - insetsH}px)`; break; case "left": top -= widths[0]; left -= widths[3]; width = `calc(100% + ${widths[1] + widths[3] - insetsW}px)`; height = `calc(100% + ${widths[0] + widths[2] - insetsH}px)`; break; case "right": width = insetsW ? `calc(100% - ${insetsW}px)` : "100%"; height = insetsH ? `calc(100% - ${insetsH}px)` : "100%"; break; } const classNames = ["xfaBorder"]; if (isPrintOnly(node.border)) { classNames.push("xfaPrintOnly"); } const border = { name: "div", attributes: { class: classNames, style: { top: `${top}px`, left: `${left}px`, width, height } }, children: [] }; for (const key of ["border", "borderWidth", "borderColor", "borderRadius", "borderStyle"]) { if (style[key] !== undefined) { border.attributes.style[key] = style[key]; delete style[key]; } } wrapper.children.push(border, html); } else { wrapper.children.push(html); } for (const key of ["background", "backgroundClip", "top", "left", "width", "height", "minWidth", "minHeight", "maxWidth", "maxHeight", "transform", "transformOrigin", "visibility"]) { if (style[key] !== undefined) { wrapper.attributes.style[key] = style[key]; delete style[key]; } } if (style.position === "absolute") { wrapper.attributes.style.position = "absolute"; } else { wrapper.attributes.style.position = "relative"; } delete style.position; if (style.alignSelf) { wrapper.attributes.style.alignSelf = style.alignSelf; delete style.alignSelf; } return wrapper; } function fixTextIndent(styles) { const indent = (0, _utils.getMeasurement)(styles.textIndent, "0px"); if (indent >= 0) { return; } const align = styles.textAlign === "right" ? "right" : "left"; const name = "padding" + (align === "left" ? "Left" : "Right"); const padding = (0, _utils.getMeasurement)(styles[name], "0px"); styles[name] = `${padding - indent}px`; } function setAccess(node, classNames) { switch (node.access) { case "nonInteractive": classNames.push("xfaNonInteractive"); break; case "readOnly": classNames.push("xfaReadOnly"); break; case "protected": classNames.push("xfaDisabled"); break; } } function isPrintOnly(node) { return node.relevant.length > 0 && !node.relevant[0].excluded && node.relevant[0].viewname === "print"; } function getCurrentPara(node) { const stack = node[_xfa_object.$getTemplateRoot]()[_xfa_object.$extra].paraStack; return stack.length ? stack[stack.length - 1] : null; } function setPara(node, nodeStyle, value) { if (value.attributes.class && value.attributes.class.includes("xfaRich")) { if (nodeStyle) { if (node.h === "") { nodeStyle.height = "auto"; } if (node.w === "") { nodeStyle.width = "auto"; } } const para = getCurrentPara(node); if (para) { const valueStyle = value.attributes.style; valueStyle.display = "flex"; valueStyle.flexDirection = "column"; switch (para.vAlign) { case "top": valueStyle.justifyContent = "start"; break; case "bottom": valueStyle.justifyContent = "end"; break; case "middle": valueStyle.justifyContent = "center"; break; } const paraStyle = para[_xfa_object.$toStyle](); for (const [key, val] of Object.entries(paraStyle)) { if (!(key in valueStyle)) { valueStyle[key] = val; } } } } } function setFontFamily(xfaFont, node, fontFinder, style) { if (!fontFinder) { delete style.fontFamily; return; } const name = (0, _utils.stripQuotes)(xfaFont.typeface); style.fontFamily = `"${name}"`; const typeface = fontFinder.find(name); if (typeface) { const { fontFamily } = typeface.regular.cssFontInfo; if (fontFamily !== name) { style.fontFamily = `"${fontFamily}"`; } const para = getCurrentPara(node); if (para && para.lineHeight !== "") { return; } if (style.lineHeight) { return; } const pdfFont = (0, _fonts.selectFont)(xfaFont, typeface); if (pdfFont) { style.lineHeight = Math.max(1.2, pdfFont.lineHeight); } } } function fixURL(str) { const absoluteUrl = (0, _util.createValidAbsoluteUrl)(str, null, { addDefaultProtocol: true, tryConvertEncoding: true }); return absoluteUrl ? absoluteUrl.href : null; } /***/ }), /* 83 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.FontFinder = void 0; exports.getMetrics = getMetrics; exports.selectFont = selectFont; var _xfa_object = __w_pdfjs_require__(75); var _utils = __w_pdfjs_require__(76); var _util = __w_pdfjs_require__(2); class FontFinder { constructor(pdfFonts) { this.fonts = new Map(); this.cache = new Map(); this.warned = new Set(); this.defaultFont = null; this.add(pdfFonts); } add(pdfFonts, reallyMissingFonts = null) { for (const pdfFont of pdfFonts) { this.addPdfFont(pdfFont); } for (const pdfFont of this.fonts.values()) { if (!pdfFont.regular) { pdfFont.regular = pdfFont.italic || pdfFont.bold || pdfFont.bolditalic; } } if (!reallyMissingFonts || reallyMissingFonts.size === 0) { return; } const myriad = this.fonts.get("PdfJS-Fallback-PdfJS-XFA"); for (const missing of reallyMissingFonts) { this.fonts.set(missing, myriad); } } addPdfFont(pdfFont) { const cssFontInfo = pdfFont.cssFontInfo; const name = cssFontInfo.fontFamily; let font = this.fonts.get(name); if (!font) { font = Object.create(null); this.fonts.set(name, font); if (!this.defaultFont) { this.defaultFont = font; } } let property = ""; const fontWeight = parseFloat(cssFontInfo.fontWeight); if (parseFloat(cssFontInfo.italicAngle) !== 0) { property = fontWeight >= 700 ? "bolditalic" : "italic"; } else if (fontWeight >= 700) { property = "bold"; } if (!property) { if (pdfFont.name.includes("Bold") || pdfFont.psName && pdfFont.psName.includes("Bold")) { property = "bold"; } if (pdfFont.name.includes("Italic") || pdfFont.name.endsWith("It") || pdfFont.psName && (pdfFont.psName.includes("Italic") || pdfFont.psName.endsWith("It"))) { property += "italic"; } } if (!property) { property = "regular"; } font[property] = pdfFont; } getDefault() { return this.defaultFont; } find(fontName, mustWarn = true) { let font = this.fonts.get(fontName) || this.cache.get(fontName); if (font) { return font; } const pattern = /,|-|_| |bolditalic|bold|italic|regular|it/gi; let name = fontName.replace(pattern, ""); font = this.fonts.get(name); if (font) { this.cache.set(fontName, font); return font; } name = name.toLowerCase(); const maybe = []; for (const [family, pdfFont] of this.fonts.entries()) { if (family.replace(pattern, "").toLowerCase().startsWith(name)) { maybe.push(pdfFont); } } if (maybe.length === 0) { for (const [, pdfFont] of this.fonts.entries()) { if (pdfFont.regular.name && pdfFont.regular.name.replace(pattern, "").toLowerCase().startsWith(name)) { maybe.push(pdfFont); } } } if (maybe.length === 0) { name = name.replace(/psmt|mt/gi, ""); for (const [family, pdfFont] of this.fonts.entries()) { if (family.replace(pattern, "").toLowerCase().startsWith(name)) { maybe.push(pdfFont); } } } if (maybe.length === 0) { for (const pdfFont of this.fonts.values()) { if (pdfFont.regular.name && pdfFont.regular.name.replace(pattern, "").toLowerCase().startsWith(name)) { maybe.push(pdfFont); } } } if (maybe.length >= 1) { if (maybe.length !== 1 && mustWarn) { (0, _util.warn)(`XFA - Too many choices to guess the correct font: ${fontName}`); } this.cache.set(fontName, maybe[0]); return maybe[0]; } if (mustWarn && !this.warned.has(fontName)) { this.warned.add(fontName); (0, _util.warn)(`XFA - Cannot find the font: ${fontName}`); } return null; } } exports.FontFinder = FontFinder; function selectFont(xfaFont, typeface) { if (xfaFont.posture === "italic") { if (xfaFont.weight === "bold") { return typeface.bolditalic; } return typeface.italic; } else if (xfaFont.weight === "bold") { return typeface.bold; } return typeface.regular; } function getMetrics(xfaFont, real = false) { let pdfFont = null; if (xfaFont) { const name = (0, _utils.stripQuotes)(xfaFont.typeface); const typeface = xfaFont[_xfa_object.$globalData].fontFinder.find(name); pdfFont = selectFont(xfaFont, typeface); } if (!pdfFont) { return { lineHeight: 12, lineGap: 2, lineNoGap: 10 }; } const size = xfaFont.size || 10; const lineHeight = pdfFont.lineHeight ? Math.max(real ? 0 : 1.2, pdfFont.lineHeight) : 1.2; const lineGap = pdfFont.lineGap === undefined ? 0.2 : pdfFont.lineGap; return { lineHeight: lineHeight * size, lineGap: lineGap * size, lineNoGap: Math.max(1, lineHeight - lineGap) * size }; } /***/ }), /* 84 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.TextMeasure = void 0; var _fonts = __w_pdfjs_require__(83); const WIDTH_FACTOR = 1.02; class FontInfo { constructor(xfaFont, margin, lineHeight, fontFinder) { this.lineHeight = lineHeight; this.paraMargin = margin || { top: 0, bottom: 0, left: 0, right: 0 }; if (!xfaFont) { [this.pdfFont, this.xfaFont] = this.defaultFont(fontFinder); return; } this.xfaFont = { typeface: xfaFont.typeface, posture: xfaFont.posture, weight: xfaFont.weight, size: xfaFont.size, letterSpacing: xfaFont.letterSpacing }; const typeface = fontFinder.find(xfaFont.typeface); if (!typeface) { [this.pdfFont, this.xfaFont] = this.defaultFont(fontFinder); return; } this.pdfFont = (0, _fonts.selectFont)(xfaFont, typeface); if (!this.pdfFont) { [this.pdfFont, this.xfaFont] = this.defaultFont(fontFinder); } } defaultFont(fontFinder) { const font = fontFinder.find("Helvetica", false) || fontFinder.find("Myriad Pro", false) || fontFinder.find("Arial", false) || fontFinder.getDefault(); if (font && font.regular) { const pdfFont = font.regular; const info = pdfFont.cssFontInfo; const xfaFont = { typeface: info.fontFamily, posture: "normal", weight: "normal", size: 10, letterSpacing: 0 }; return [pdfFont, xfaFont]; } const xfaFont = { typeface: "Courier", posture: "normal", weight: "normal", size: 10, letterSpacing: 0 }; return [null, xfaFont]; } } class FontSelector { constructor(defaultXfaFont, defaultParaMargin, defaultLineHeight, fontFinder) { this.fontFinder = fontFinder; this.stack = [new FontInfo(defaultXfaFont, defaultParaMargin, defaultLineHeight, fontFinder)]; } pushData(xfaFont, margin, lineHeight) { const lastFont = this.stack[this.stack.length - 1]; for (const name of ["typeface", "posture", "weight", "size", "letterSpacing"]) { if (!xfaFont[name]) { xfaFont[name] = lastFont.xfaFont[name]; } } for (const name of ["top", "bottom", "left", "right"]) { if (isNaN(margin[name])) { margin[name] = lastFont.paraMargin[name]; } } const fontInfo = new FontInfo(xfaFont, margin, lineHeight || lastFont.lineHeight, this.fontFinder); if (!fontInfo.pdfFont) { fontInfo.pdfFont = lastFont.pdfFont; } this.stack.push(fontInfo); } popFont() { this.stack.pop(); } topFont() { return this.stack[this.stack.length - 1]; } } class TextMeasure { constructor(defaultXfaFont, defaultParaMargin, defaultLineHeight, fonts) { this.glyphs = []; this.fontSelector = new FontSelector(defaultXfaFont, defaultParaMargin, defaultLineHeight, fonts); this.extraHeight = 0; } pushData(xfaFont, margin, lineHeight) { this.fontSelector.pushData(xfaFont, margin, lineHeight); } popFont(xfaFont) { return this.fontSelector.popFont(); } addPara() { const lastFont = this.fontSelector.topFont(); this.extraHeight += lastFont.paraMargin.top + lastFont.paraMargin.bottom; } addString(str) { if (!str) { return; } const lastFont = this.fontSelector.topFont(); const fontSize = lastFont.xfaFont.size; if (lastFont.pdfFont) { const letterSpacing = lastFont.xfaFont.letterSpacing; const pdfFont = lastFont.pdfFont; const fontLineHeight = pdfFont.lineHeight || 1.2; const lineHeight = lastFont.lineHeight || Math.max(1.2, fontLineHeight) * fontSize; const lineGap = pdfFont.lineGap === undefined ? 0.2 : pdfFont.lineGap; const noGap = fontLineHeight - lineGap; const firstLineHeight = Math.max(1, noGap) * fontSize; const scale = fontSize / 1000; const fallbackWidth = pdfFont.defaultWidth || pdfFont.charsToGlyphs(" ")[0].width; for (const line of str.split(/[\u2029\n]/)) { const encodedLine = pdfFont.encodeString(line).join(""); const glyphs = pdfFont.charsToGlyphs(encodedLine); for (const glyph of glyphs) { const width = glyph.width || fallbackWidth; this.glyphs.push([width * scale + letterSpacing, lineHeight, firstLineHeight, glyph.unicode, false]); } this.glyphs.push([0, 0, 0, "\n", true]); } this.glyphs.pop(); return; } for (const line of str.split(/[\u2029\n]/)) { for (const char of line.split("")) { this.glyphs.push([fontSize, 1.2 * fontSize, fontSize, char, false]); } this.glyphs.push([0, 0, 0, "\n", true]); } this.glyphs.pop(); } compute(maxWidth) { let lastSpacePos = -1, lastSpaceWidth = 0, width = 0, height = 0, currentLineWidth = 0, currentLineHeight = 0; let isBroken = false; let isFirstLine = true; for (let i = 0, ii = this.glyphs.length; i < ii; i++) { const [glyphWidth, lineHeight, firstLineHeight, char, isEOL] = this.glyphs[i]; const isSpace = char === " "; const glyphHeight = isFirstLine ? firstLineHeight : lineHeight; if (isEOL) { width = Math.max(width, currentLineWidth); currentLineWidth = 0; height += currentLineHeight; currentLineHeight = glyphHeight; lastSpacePos = -1; lastSpaceWidth = 0; isFirstLine = false; continue; } if (isSpace) { if (currentLineWidth + glyphWidth > maxWidth) { width = Math.max(width, currentLineWidth); currentLineWidth = 0; height += currentLineHeight; currentLineHeight = glyphHeight; lastSpacePos = -1; lastSpaceWidth = 0; isBroken = true; isFirstLine = false; } else { currentLineHeight = Math.max(glyphHeight, currentLineHeight); lastSpaceWidth = currentLineWidth; currentLineWidth += glyphWidth; lastSpacePos = i; } continue; } if (currentLineWidth + glyphWidth > maxWidth) { height += currentLineHeight; currentLineHeight = glyphHeight; if (lastSpacePos !== -1) { i = lastSpacePos; width = Math.max(width, lastSpaceWidth); currentLineWidth = 0; lastSpacePos = -1; lastSpaceWidth = 0; } else { width = Math.max(width, currentLineWidth); currentLineWidth = glyphWidth; } isBroken = true; isFirstLine = false; continue; } currentLineWidth += glyphWidth; currentLineHeight = Math.max(glyphHeight, currentLineHeight); } width = Math.max(width, currentLineWidth); height += currentLineHeight + this.extraHeight; return { width: WIDTH_FACTOR * width, height, isBroken }; } } exports.TextMeasure = TextMeasure; /***/ }), /* 85 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.DataHandler = void 0; var _xfa_object = __w_pdfjs_require__(75); class DataHandler { constructor(root, data) { this.data = data; this.dataset = root.datasets || null; } serialize(storage) { const stack = [[-1, this.data[_xfa_object.$getChildren]()]]; while (stack.length > 0) { const last = stack[stack.length - 1]; const [i, children] = last; if (i + 1 === children.length) { stack.pop(); continue; } const child = children[++last[0]]; const storageEntry = storage.get(child[_xfa_object.$uid]); if (storageEntry) { child[_xfa_object.$setValue](storageEntry); } else { const attributes = child[_xfa_object.$getAttributes](); for (const value of attributes.values()) { const entry = storage.get(value[_xfa_object.$uid]); if (entry) { value[_xfa_object.$setValue](entry); break; } } } const nodes = child[_xfa_object.$getChildren](); if (nodes.length > 0) { stack.push([-1, nodes]); } } const buf = [``]; if (this.dataset) { for (const child of this.dataset[_xfa_object.$getChildren]()) { if (child[_xfa_object.$nodeName] !== "data") { child[_xfa_object.$toString](buf); } } } this.data[_xfa_object.$toString](buf); buf.push(""); return buf.join(""); } } exports.DataHandler = DataHandler; /***/ }), /* 86 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.XFAParser = void 0; var _xfa_object = __w_pdfjs_require__(75); var _xml_parser = __w_pdfjs_require__(68); var _builder = __w_pdfjs_require__(87); var _util = __w_pdfjs_require__(2); class XFAParser extends _xml_parser.XMLParserBase { constructor(rootNameSpace = null, richText = false) { super(); this._builder = new _builder.Builder(rootNameSpace); this._stack = []; this._globalData = { usedTypefaces: new Set() }; this._ids = new Map(); this._current = this._builder.buildRoot(this._ids); this._errorCode = _xml_parser.XMLParserErrorCode.NoError; this._whiteRegex = /^\s+$/; this._nbsps = /\xa0+/g; this._richText = richText; } parse(data) { this.parseXml(data); if (this._errorCode !== _xml_parser.XMLParserErrorCode.NoError) { return undefined; } this._current[_xfa_object.$finalize](); return this._current.element; } onText(text) { text = text.replace(this._nbsps, match => match.slice(1) + " "); if (this._richText || this._current[_xfa_object.$acceptWhitespace]()) { this._current[_xfa_object.$onText](text, this._richText); return; } if (this._whiteRegex.test(text)) { return; } this._current[_xfa_object.$onText](text.trim()); } onCdata(text) { this._current[_xfa_object.$onText](text); } _mkAttributes(attributes, tagName) { let namespace = null; let prefixes = null; const attributeObj = Object.create({}); for (const { name, value } of attributes) { if (name === "xmlns") { if (!namespace) { namespace = value; } else { (0, _util.warn)(`XFA - multiple namespace definition in <${tagName}>`); } } else if (name.startsWith("xmlns:")) { const prefix = name.substring("xmlns:".length); if (!prefixes) { prefixes = []; } prefixes.push({ prefix, value }); } else { const i = name.indexOf(":"); if (i === -1) { attributeObj[name] = value; } else { let nsAttrs = attributeObj[_xfa_object.$nsAttributes]; if (!nsAttrs) { nsAttrs = attributeObj[_xfa_object.$nsAttributes] = Object.create(null); } const [ns, attrName] = [name.slice(0, i), name.slice(i + 1)]; let attrs = nsAttrs[ns]; if (!attrs) { attrs = nsAttrs[ns] = Object.create(null); } attrs[attrName] = value; } } } return [namespace, prefixes, attributeObj]; } _getNameAndPrefix(name, nsAgnostic) { const i = name.indexOf(":"); if (i === -1) { return [name, null]; } return [name.substring(i + 1), nsAgnostic ? "" : name.substring(0, i)]; } onBeginElement(tagName, attributes, isEmpty) { const [namespace, prefixes, attributesObj] = this._mkAttributes(attributes, tagName); const [name, nsPrefix] = this._getNameAndPrefix(tagName, this._builder.isNsAgnostic()); const node = this._builder.build({ nsPrefix, name, attributes: attributesObj, namespace, prefixes }); node[_xfa_object.$globalData] = this._globalData; if (isEmpty) { node[_xfa_object.$finalize](); if (this._current[_xfa_object.$onChild](node)) { node[_xfa_object.$setId](this._ids); } node[_xfa_object.$clean](this._builder); return; } this._stack.push(this._current); this._current = node; } onEndElement(name) { const node = this._current; if (node[_xfa_object.$isCDATAXml]() && typeof node[_xfa_object.$content] === "string") { const parser = new XFAParser(); parser._globalData = this._globalData; const root = parser.parse(node[_xfa_object.$content]); node[_xfa_object.$content] = null; node[_xfa_object.$onChild](root); } node[_xfa_object.$finalize](); this._current = this._stack.pop(); if (this._current[_xfa_object.$onChild](node)) { node[_xfa_object.$setId](this._ids); } node[_xfa_object.$clean](this._builder); } onError(code) { this._errorCode = code; } } exports.XFAParser = XFAParser; /***/ }), /* 87 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.Builder = void 0; var _namespaces = __w_pdfjs_require__(77); var _xfa_object = __w_pdfjs_require__(75); var _setup = __w_pdfjs_require__(88); var _template = __w_pdfjs_require__(80); var _unknown = __w_pdfjs_require__(97); var _util = __w_pdfjs_require__(2); class Root extends _xfa_object.XFAObject { constructor(ids) { super(-1, "root", Object.create(null)); this.element = null; this[_xfa_object.$ids] = ids; } [_xfa_object.$onChild](child) { this.element = child; return true; } [_xfa_object.$finalize]() { super[_xfa_object.$finalize](); if (this.element.template instanceof _template.Template) { this[_xfa_object.$ids].set(_xfa_object.$root, this.element); this.element.template[_xfa_object.$resolvePrototypes](this[_xfa_object.$ids]); this.element.template[_xfa_object.$ids] = this[_xfa_object.$ids]; } } } class Empty extends _xfa_object.XFAObject { constructor() { super(-1, "", Object.create(null)); } [_xfa_object.$onChild](_) { return false; } } class Builder { constructor(rootNameSpace = null) { this._namespaceStack = []; this._nsAgnosticLevel = 0; this._namespacePrefixes = new Map(); this._namespaces = new Map(); this._nextNsId = Math.max(...Object.values(_namespaces.NamespaceIds).map(({ id }) => id)); this._currentNamespace = rootNameSpace || new _unknown.UnknownNamespace(++this._nextNsId); } buildRoot(ids) { return new Root(ids); } build({ nsPrefix, name, attributes, namespace, prefixes }) { const hasNamespaceDef = namespace !== null; if (hasNamespaceDef) { this._namespaceStack.push(this._currentNamespace); this._currentNamespace = this._searchNamespace(namespace); } if (prefixes) { this._addNamespacePrefix(prefixes); } if (attributes.hasOwnProperty(_xfa_object.$nsAttributes)) { const dataTemplate = _setup.NamespaceSetUp.datasets; const nsAttrs = attributes[_xfa_object.$nsAttributes]; let xfaAttrs = null; for (const [ns, attrs] of Object.entries(nsAttrs)) { const nsToUse = this._getNamespaceToUse(ns); if (nsToUse === dataTemplate) { xfaAttrs = { xfa: attrs }; break; } } if (xfaAttrs) { attributes[_xfa_object.$nsAttributes] = xfaAttrs; } else { delete attributes[_xfa_object.$nsAttributes]; } } const namespaceToUse = this._getNamespaceToUse(nsPrefix); const node = namespaceToUse && namespaceToUse[_namespaces.$buildXFAObject](name, attributes) || new Empty(); if (node[_xfa_object.$isNsAgnostic]()) { this._nsAgnosticLevel++; } if (hasNamespaceDef || prefixes || node[_xfa_object.$isNsAgnostic]()) { node[_xfa_object.$cleanup] = { hasNamespace: hasNamespaceDef, prefixes, nsAgnostic: node[_xfa_object.$isNsAgnostic]() }; } return node; } isNsAgnostic() { return this._nsAgnosticLevel > 0; } _searchNamespace(nsName) { let ns = this._namespaces.get(nsName); if (ns) { return ns; } for (const [name, { check }] of Object.entries(_namespaces.NamespaceIds)) { if (check(nsName)) { ns = _setup.NamespaceSetUp[name]; if (ns) { this._namespaces.set(nsName, ns); return ns; } break; } } ns = new _unknown.UnknownNamespace(++this._nextNsId); this._namespaces.set(nsName, ns); return ns; } _addNamespacePrefix(prefixes) { for (const { prefix, value } of prefixes) { const namespace = this._searchNamespace(value); let prefixStack = this._namespacePrefixes.get(prefix); if (!prefixStack) { prefixStack = []; this._namespacePrefixes.set(prefix, prefixStack); } prefixStack.push(namespace); } } _getNamespaceToUse(prefix) { if (!prefix) { return this._currentNamespace; } const prefixStack = this._namespacePrefixes.get(prefix); if (prefixStack && prefixStack.length > 0) { return prefixStack[prefixStack.length - 1]; } (0, _util.warn)(`Unknown namespace prefix: ${prefix}.`); return null; } clean(data) { const { hasNamespace, prefixes, nsAgnostic } = data; if (hasNamespace) { this._currentNamespace = this._namespaceStack.pop(); } if (prefixes) { prefixes.forEach(({ prefix }) => { this._namespacePrefixes.get(prefix).pop(); }); } if (nsAgnostic) { this._nsAgnosticLevel--; } } } exports.Builder = Builder; /***/ }), /* 88 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.NamespaceSetUp = void 0; var _config = __w_pdfjs_require__(89); var _connection_set = __w_pdfjs_require__(90); var _datasets = __w_pdfjs_require__(91); var _locale_set = __w_pdfjs_require__(92); var _signature = __w_pdfjs_require__(93); var _stylesheet = __w_pdfjs_require__(94); var _template = __w_pdfjs_require__(80); var _xdp = __w_pdfjs_require__(95); var _xhtml = __w_pdfjs_require__(96); const NamespaceSetUp = { config: _config.ConfigNamespace, connection: _connection_set.ConnectionSetNamespace, datasets: _datasets.DatasetsNamespace, localeSet: _locale_set.LocaleSetNamespace, signature: _signature.SignatureNamespace, stylesheet: _stylesheet.StylesheetNamespace, template: _template.TemplateNamespace, xdp: _xdp.XdpNamespace, xhtml: _xhtml.XhtmlNamespace }; exports.NamespaceSetUp = NamespaceSetUp; /***/ }), /* 89 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.ConfigNamespace = void 0; var _namespaces = __w_pdfjs_require__(77); var _xfa_object = __w_pdfjs_require__(75); var _utils = __w_pdfjs_require__(76); var _util = __w_pdfjs_require__(2); const CONFIG_NS_ID = _namespaces.NamespaceIds.config.id; class Acrobat extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "acrobat", true); this.acrobat7 = null; this.autoSave = null; this.common = null; this.validate = null; this.validateApprovalSignatures = null; this.submitUrl = new _xfa_object.XFAObjectArray(); } } class Acrobat7 extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "acrobat7", true); this.dynamicRender = null; } } class ADBE_JSConsole extends _xfa_object.OptionObject { constructor(attributes) { super(CONFIG_NS_ID, "ADBE_JSConsole", ["delegate", "Enable", "Disable"]); } } class ADBE_JSDebugger extends _xfa_object.OptionObject { constructor(attributes) { super(CONFIG_NS_ID, "ADBE_JSDebugger", ["delegate", "Enable", "Disable"]); } } class AddSilentPrint extends _xfa_object.Option01 { constructor(attributes) { super(CONFIG_NS_ID, "addSilentPrint"); } } class AddViewerPreferences extends _xfa_object.Option01 { constructor(attributes) { super(CONFIG_NS_ID, "addViewerPreferences"); } } class AdjustData extends _xfa_object.Option10 { constructor(attributes) { super(CONFIG_NS_ID, "adjustData"); } } class AdobeExtensionLevel extends _xfa_object.IntegerObject { constructor(attributes) { super(CONFIG_NS_ID, "adobeExtensionLevel", 0, n => n >= 1 && n <= 8); } } class Agent extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "agent", true); this.name = attributes.name ? attributes.name.trim() : ""; this.common = new _xfa_object.XFAObjectArray(); } } class AlwaysEmbed extends _xfa_object.ContentObject { constructor(attributes) { super(CONFIG_NS_ID, "alwaysEmbed"); } } class Amd extends _xfa_object.StringObject { constructor(attributes) { super(CONFIG_NS_ID, "amd"); } } class Area extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "area"); this.level = (0, _utils.getInteger)({ data: attributes.level, defaultValue: 0, validate: n => n >= 1 && n <= 3 }); this.name = (0, _utils.getStringOption)(attributes.name, ["", "barcode", "coreinit", "deviceDriver", "font", "general", "layout", "merge", "script", "signature", "sourceSet", "templateCache"]); } } class Attributes extends _xfa_object.OptionObject { constructor(attributes) { super(CONFIG_NS_ID, "attributes", ["preserve", "delegate", "ignore"]); } } class AutoSave extends _xfa_object.OptionObject { constructor(attributes) { super(CONFIG_NS_ID, "autoSave", ["disabled", "enabled"]); } } class Base extends _xfa_object.StringObject { constructor(attributes) { super(CONFIG_NS_ID, "base"); } } class BatchOutput extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "batchOutput"); this.format = (0, _utils.getStringOption)(attributes.format, ["none", "concat", "zip", "zipCompress"]); } } class BehaviorOverride extends _xfa_object.ContentObject { constructor(attributes) { super(CONFIG_NS_ID, "behaviorOverride"); } [_xfa_object.$finalize]() { this[_xfa_object.$content] = new Map(this[_xfa_object.$content].trim().split(/\s+/).filter(x => x.includes(":")).map(x => x.split(":", 2))); } } class Cache extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "cache", true); this.templateCache = null; } } class Change extends _xfa_object.Option01 { constructor(attributes) { super(CONFIG_NS_ID, "change"); } } class Common extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "common", true); this.data = null; this.locale = null; this.localeSet = null; this.messaging = null; this.suppressBanner = null; this.template = null; this.validationMessaging = null; this.versionControl = null; this.log = new _xfa_object.XFAObjectArray(); } } class Compress extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "compress"); this.scope = (0, _utils.getStringOption)(attributes.scope, ["imageOnly", "document"]); } } class CompressLogicalStructure extends _xfa_object.Option01 { constructor(attributes) { super(CONFIG_NS_ID, "compressLogicalStructure"); } } class CompressObjectStream extends _xfa_object.Option10 { constructor(attributes) { super(CONFIG_NS_ID, "compressObjectStream"); } } class Compression extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "compression", true); this.compressLogicalStructure = null; this.compressObjectStream = null; this.level = null; this.type = null; } } class Config extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "config", true); this.acrobat = null; this.present = null; this.trace = null; this.agent = new _xfa_object.XFAObjectArray(); } } class Conformance extends _xfa_object.OptionObject { constructor(attributes) { super(CONFIG_NS_ID, "conformance", ["A", "B"]); } } class ContentCopy extends _xfa_object.Option01 { constructor(attributes) { super(CONFIG_NS_ID, "contentCopy"); } } class Copies extends _xfa_object.IntegerObject { constructor(attributes) { super(CONFIG_NS_ID, "copies", 1, n => n >= 1); } } class Creator extends _xfa_object.StringObject { constructor(attributes) { super(CONFIG_NS_ID, "creator"); } } class CurrentPage extends _xfa_object.IntegerObject { constructor(attributes) { super(CONFIG_NS_ID, "currentPage", 0, n => n >= 0); } } class Data extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "data", true); this.adjustData = null; this.attributes = null; this.incrementalLoad = null; this.outputXSL = null; this.range = null; this.record = null; this.startNode = null; this.uri = null; this.window = null; this.xsl = null; this.excludeNS = new _xfa_object.XFAObjectArray(); this.transform = new _xfa_object.XFAObjectArray(); } } class Debug extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "debug", true); this.uri = null; } } class DefaultTypeface extends _xfa_object.ContentObject { constructor(attributes) { super(CONFIG_NS_ID, "defaultTypeface"); this.writingScript = (0, _utils.getStringOption)(attributes.writingScript, ["*", "Arabic", "Cyrillic", "EastEuropeanRoman", "Greek", "Hebrew", "Japanese", "Korean", "Roman", "SimplifiedChinese", "Thai", "TraditionalChinese", "Vietnamese"]); } } class Destination extends _xfa_object.OptionObject { constructor(attributes) { super(CONFIG_NS_ID, "destination", ["pdf", "pcl", "ps", "webClient", "zpl"]); } } class DocumentAssembly extends _xfa_object.Option01 { constructor(attributes) { super(CONFIG_NS_ID, "documentAssembly"); } } class Driver extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "driver", true); this.name = attributes.name ? attributes.name.trim() : ""; this.fontInfo = null; this.xdc = null; } } class DuplexOption extends _xfa_object.OptionObject { constructor(attributes) { super(CONFIG_NS_ID, "duplexOption", ["simplex", "duplexFlipLongEdge", "duplexFlipShortEdge"]); } } class DynamicRender extends _xfa_object.OptionObject { constructor(attributes) { super(CONFIG_NS_ID, "dynamicRender", ["forbidden", "required"]); } } class Embed extends _xfa_object.Option01 { constructor(attributes) { super(CONFIG_NS_ID, "embed"); } } class Encrypt extends _xfa_object.Option01 { constructor(attributes) { super(CONFIG_NS_ID, "encrypt"); } } class Encryption extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "encryption", true); this.encrypt = null; this.encryptionLevel = null; this.permissions = null; } } class EncryptionLevel extends _xfa_object.OptionObject { constructor(attributes) { super(CONFIG_NS_ID, "encryptionLevel", ["40bit", "128bit"]); } } class Enforce extends _xfa_object.StringObject { constructor(attributes) { super(CONFIG_NS_ID, "enforce"); } } class Equate extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "equate"); this.force = (0, _utils.getInteger)({ data: attributes.force, defaultValue: 1, validate: n => n === 0 }); this.from = attributes.from || ""; this.to = attributes.to || ""; } } class EquateRange extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "equateRange"); this.from = attributes.from || ""; this.to = attributes.to || ""; this._unicodeRange = attributes.unicodeRange || ""; } get unicodeRange() { const ranges = []; const unicodeRegex = /U\+([0-9a-fA-F]+)/; const unicodeRange = this._unicodeRange; for (let range of unicodeRange.split(",").map(x => x.trim()).filter(x => !!x)) { range = range.split("-", 2).map(x => { const found = x.match(unicodeRegex); if (!found) { return 0; } return parseInt(found[1], 16); }); if (range.length === 1) { range.push(range[0]); } ranges.push(range); } return (0, _util.shadow)(this, "unicodeRange", ranges); } } class Exclude extends _xfa_object.ContentObject { constructor(attributes) { super(CONFIG_NS_ID, "exclude"); } [_xfa_object.$finalize]() { this[_xfa_object.$content] = this[_xfa_object.$content].trim().split(/\s+/).filter(x => x && ["calculate", "close", "enter", "exit", "initialize", "ready", "validate"].includes(x)); } } class ExcludeNS extends _xfa_object.StringObject { constructor(attributes) { super(CONFIG_NS_ID, "excludeNS"); } } class FlipLabel extends _xfa_object.OptionObject { constructor(attributes) { super(CONFIG_NS_ID, "flipLabel", ["usePrinterSetting", "on", "off"]); } } class FontInfo extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "fontInfo", true); this.embed = null; this.map = null; this.subsetBelow = null; this.alwaysEmbed = new _xfa_object.XFAObjectArray(); this.defaultTypeface = new _xfa_object.XFAObjectArray(); this.neverEmbed = new _xfa_object.XFAObjectArray(); } } class FormFieldFilling extends _xfa_object.Option01 { constructor(attributes) { super(CONFIG_NS_ID, "formFieldFilling"); } } class GroupParent extends _xfa_object.StringObject { constructor(attributes) { super(CONFIG_NS_ID, "groupParent"); } } class IfEmpty extends _xfa_object.OptionObject { constructor(attributes) { super(CONFIG_NS_ID, "ifEmpty", ["dataValue", "dataGroup", "ignore", "remove"]); } } class IncludeXDPContent extends _xfa_object.StringObject { constructor(attributes) { super(CONFIG_NS_ID, "includeXDPContent"); } } class IncrementalLoad extends _xfa_object.OptionObject { constructor(attributes) { super(CONFIG_NS_ID, "incrementalLoad", ["none", "forwardOnly"]); } } class IncrementalMerge extends _xfa_object.Option01 { constructor(attributes) { super(CONFIG_NS_ID, "incrementalMerge"); } } class Interactive extends _xfa_object.Option01 { constructor(attributes) { super(CONFIG_NS_ID, "interactive"); } } class Jog extends _xfa_object.OptionObject { constructor(attributes) { super(CONFIG_NS_ID, "jog", ["usePrinterSetting", "none", "pageSet"]); } } class LabelPrinter extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "labelPrinter", true); this.name = (0, _utils.getStringOption)(attributes.name, ["zpl", "dpl", "ipl", "tcpl"]); this.batchOutput = null; this.flipLabel = null; this.fontInfo = null; this.xdc = null; } } class Layout extends _xfa_object.OptionObject { constructor(attributes) { super(CONFIG_NS_ID, "layout", ["paginate", "panel"]); } } class Level extends _xfa_object.IntegerObject { constructor(attributes) { super(CONFIG_NS_ID, "level", 0, n => n > 0); } } class Linearized extends _xfa_object.Option01 { constructor(attributes) { super(CONFIG_NS_ID, "linearized"); } } class Locale extends _xfa_object.StringObject { constructor(attributes) { super(CONFIG_NS_ID, "locale"); } } class LocaleSet extends _xfa_object.StringObject { constructor(attributes) { super(CONFIG_NS_ID, "localeSet"); } } class Log extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "log", true); this.mode = null; this.threshold = null; this.to = null; this.uri = null; } } class MapElement extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "map", true); this.equate = new _xfa_object.XFAObjectArray(); this.equateRange = new _xfa_object.XFAObjectArray(); } } class MediumInfo extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "mediumInfo", true); this.map = null; } } class Message extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "message", true); this.msgId = null; this.severity = null; } } class Messaging extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "messaging", true); this.message = new _xfa_object.XFAObjectArray(); } } class Mode extends _xfa_object.OptionObject { constructor(attributes) { super(CONFIG_NS_ID, "mode", ["append", "overwrite"]); } } class ModifyAnnots extends _xfa_object.Option01 { constructor(attributes) { super(CONFIG_NS_ID, "modifyAnnots"); } } class MsgId extends _xfa_object.IntegerObject { constructor(attributes) { super(CONFIG_NS_ID, "msgId", 1, n => n >= 1); } } class NameAttr extends _xfa_object.StringObject { constructor(attributes) { super(CONFIG_NS_ID, "nameAttr"); } } class NeverEmbed extends _xfa_object.ContentObject { constructor(attributes) { super(CONFIG_NS_ID, "neverEmbed"); } } class NumberOfCopies extends _xfa_object.IntegerObject { constructor(attributes) { super(CONFIG_NS_ID, "numberOfCopies", null, n => n >= 2 && n <= 5); } } class OpenAction extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "openAction", true); this.destination = null; } } class Output extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "output", true); this.to = null; this.type = null; this.uri = null; } } class OutputBin extends _xfa_object.StringObject { constructor(attributes) { super(CONFIG_NS_ID, "outputBin"); } } class OutputXSL extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "outputXSL", true); this.uri = null; } } class Overprint extends _xfa_object.OptionObject { constructor(attributes) { super(CONFIG_NS_ID, "overprint", ["none", "both", "draw", "field"]); } } class Packets extends _xfa_object.StringObject { constructor(attributes) { super(CONFIG_NS_ID, "packets"); } [_xfa_object.$finalize]() { if (this[_xfa_object.$content] === "*") { return; } this[_xfa_object.$content] = this[_xfa_object.$content].trim().split(/\s+/).filter(x => ["config", "datasets", "template", "xfdf", "xslt"].includes(x)); } } class PageOffset extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "pageOffset"); this.x = (0, _utils.getInteger)({ data: attributes.x, defaultValue: "useXDCSetting", validate: n => true }); this.y = (0, _utils.getInteger)({ data: attributes.y, defaultValue: "useXDCSetting", validate: n => true }); } } class PageRange extends _xfa_object.StringObject { constructor(attributes) { super(CONFIG_NS_ID, "pageRange"); } [_xfa_object.$finalize]() { const numbers = this[_xfa_object.$content].trim().split(/\s+/).map(x => parseInt(x, 10)); const ranges = []; for (let i = 0, ii = numbers.length; i < ii; i += 2) { ranges.push(numbers.slice(i, i + 2)); } this[_xfa_object.$content] = ranges; } } class Pagination extends _xfa_object.OptionObject { constructor(attributes) { super(CONFIG_NS_ID, "pagination", ["simplex", "duplexShortEdge", "duplexLongEdge"]); } } class PaginationOverride extends _xfa_object.OptionObject { constructor(attributes) { super(CONFIG_NS_ID, "paginationOverride", ["none", "forceDuplex", "forceDuplexLongEdge", "forceDuplexShortEdge", "forceSimplex"]); } } class Part extends _xfa_object.IntegerObject { constructor(attributes) { super(CONFIG_NS_ID, "part", 1, n => false); } } class Pcl extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "pcl", true); this.name = attributes.name || ""; this.batchOutput = null; this.fontInfo = null; this.jog = null; this.mediumInfo = null; this.outputBin = null; this.pageOffset = null; this.staple = null; this.xdc = null; } } class Pdf extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "pdf", true); this.name = attributes.name || ""; this.adobeExtensionLevel = null; this.batchOutput = null; this.compression = null; this.creator = null; this.encryption = null; this.fontInfo = null; this.interactive = null; this.linearized = null; this.openAction = null; this.pdfa = null; this.producer = null; this.renderPolicy = null; this.scriptModel = null; this.silentPrint = null; this.submitFormat = null; this.tagged = null; this.version = null; this.viewerPreferences = null; this.xdc = null; } } class Pdfa extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "pdfa", true); this.amd = null; this.conformance = null; this.includeXDPContent = null; this.part = null; } } class Permissions extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "permissions", true); this.accessibleContent = null; this.change = null; this.contentCopy = null; this.documentAssembly = null; this.formFieldFilling = null; this.modifyAnnots = null; this.plaintextMetadata = null; this.print = null; this.printHighQuality = null; } } class PickTrayByPDFSize extends _xfa_object.Option01 { constructor(attributes) { super(CONFIG_NS_ID, "pickTrayByPDFSize"); } } class Picture extends _xfa_object.StringObject { constructor(attributes) { super(CONFIG_NS_ID, "picture"); } } class PlaintextMetadata extends _xfa_object.Option01 { constructor(attributes) { super(CONFIG_NS_ID, "plaintextMetadata"); } } class Presence extends _xfa_object.OptionObject { constructor(attributes) { super(CONFIG_NS_ID, "presence", ["preserve", "dissolve", "dissolveStructure", "ignore", "remove"]); } } class Present extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "present", true); this.behaviorOverride = null; this.cache = null; this.common = null; this.copies = null; this.destination = null; this.incrementalMerge = null; this.layout = null; this.output = null; this.overprint = null; this.pagination = null; this.paginationOverride = null; this.script = null; this.validate = null; this.xdp = null; this.driver = new _xfa_object.XFAObjectArray(); this.labelPrinter = new _xfa_object.XFAObjectArray(); this.pcl = new _xfa_object.XFAObjectArray(); this.pdf = new _xfa_object.XFAObjectArray(); this.ps = new _xfa_object.XFAObjectArray(); this.submitUrl = new _xfa_object.XFAObjectArray(); this.webClient = new _xfa_object.XFAObjectArray(); this.zpl = new _xfa_object.XFAObjectArray(); } } class Print extends _xfa_object.Option01 { constructor(attributes) { super(CONFIG_NS_ID, "print"); } } class PrintHighQuality extends _xfa_object.Option01 { constructor(attributes) { super(CONFIG_NS_ID, "printHighQuality"); } } class PrintScaling extends _xfa_object.OptionObject { constructor(attributes) { super(CONFIG_NS_ID, "printScaling", ["appdefault", "noScaling"]); } } class PrinterName extends _xfa_object.StringObject { constructor(attributes) { super(CONFIG_NS_ID, "printerName"); } } class Producer extends _xfa_object.StringObject { constructor(attributes) { super(CONFIG_NS_ID, "producer"); } } class Ps extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "ps", true); this.name = attributes.name || ""; this.batchOutput = null; this.fontInfo = null; this.jog = null; this.mediumInfo = null; this.outputBin = null; this.staple = null; this.xdc = null; } } class Range extends _xfa_object.ContentObject { constructor(attributes) { super(CONFIG_NS_ID, "range"); } [_xfa_object.$finalize]() { this[_xfa_object.$content] = this[_xfa_object.$content].trim().split(/\s*,\s*/, 2).map(range => range.split("-").map(x => parseInt(x.trim(), 10))).filter(range => range.every(x => !isNaN(x))).map(range => { if (range.length === 1) { range.push(range[0]); } return range; }); } } class Record extends _xfa_object.ContentObject { constructor(attributes) { super(CONFIG_NS_ID, "record"); } [_xfa_object.$finalize]() { this[_xfa_object.$content] = this[_xfa_object.$content].trim(); const n = parseInt(this[_xfa_object.$content], 10); if (!isNaN(n) && n >= 0) { this[_xfa_object.$content] = n; } } } class Relevant extends _xfa_object.ContentObject { constructor(attributes) { super(CONFIG_NS_ID, "relevant"); } [_xfa_object.$finalize]() { this[_xfa_object.$content] = this[_xfa_object.$content].trim().split(/\s+/); } } class Rename extends _xfa_object.ContentObject { constructor(attributes) { super(CONFIG_NS_ID, "rename"); } [_xfa_object.$finalize]() { this[_xfa_object.$content] = this[_xfa_object.$content].trim(); if (this[_xfa_object.$content].toLowerCase().startsWith("xml") || this[_xfa_object.$content].match(new RegExp("[\\p{L}_][\\p{L}\\d._\\p{M}-]*", "u"))) { (0, _util.warn)("XFA - Rename: invalid XFA name"); } } } class RenderPolicy extends _xfa_object.OptionObject { constructor(attributes) { super(CONFIG_NS_ID, "renderPolicy", ["server", "client"]); } } class RunScripts extends _xfa_object.OptionObject { constructor(attributes) { super(CONFIG_NS_ID, "runScripts", ["both", "client", "none", "server"]); } } class Script extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "script", true); this.currentPage = null; this.exclude = null; this.runScripts = null; } } class ScriptModel extends _xfa_object.OptionObject { constructor(attributes) { super(CONFIG_NS_ID, "scriptModel", ["XFA", "none"]); } } class Severity extends _xfa_object.OptionObject { constructor(attributes) { super(CONFIG_NS_ID, "severity", ["ignore", "error", "information", "trace", "warning"]); } } class SilentPrint extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "silentPrint", true); this.addSilentPrint = null; this.printerName = null; } } class Staple extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "staple"); this.mode = (0, _utils.getStringOption)(attributes.mode, ["usePrinterSetting", "on", "off"]); } } class StartNode extends _xfa_object.StringObject { constructor(attributes) { super(CONFIG_NS_ID, "startNode"); } } class StartPage extends _xfa_object.IntegerObject { constructor(attributes) { super(CONFIG_NS_ID, "startPage", 0, n => true); } } class SubmitFormat extends _xfa_object.OptionObject { constructor(attributes) { super(CONFIG_NS_ID, "submitFormat", ["html", "delegate", "fdf", "xml", "pdf"]); } } class SubmitUrl extends _xfa_object.StringObject { constructor(attributes) { super(CONFIG_NS_ID, "submitUrl"); } } class SubsetBelow extends _xfa_object.IntegerObject { constructor(attributes) { super(CONFIG_NS_ID, "subsetBelow", 100, n => n >= 0 && n <= 100); } } class SuppressBanner extends _xfa_object.Option01 { constructor(attributes) { super(CONFIG_NS_ID, "suppressBanner"); } } class Tagged extends _xfa_object.Option01 { constructor(attributes) { super(CONFIG_NS_ID, "tagged"); } } class Template extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "template", true); this.base = null; this.relevant = null; this.startPage = null; this.uri = null; this.xsl = null; } } class Threshold extends _xfa_object.OptionObject { constructor(attributes) { super(CONFIG_NS_ID, "threshold", ["trace", "error", "information", "warning"]); } } class To extends _xfa_object.OptionObject { constructor(attributes) { super(CONFIG_NS_ID, "to", ["null", "memory", "stderr", "stdout", "system", "uri"]); } } class TemplateCache extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "templateCache"); this.maxEntries = (0, _utils.getInteger)({ data: attributes.maxEntries, defaultValue: 5, validate: n => n >= 0 }); } } class Trace extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "trace", true); this.area = new _xfa_object.XFAObjectArray(); } } class Transform extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "transform", true); this.groupParent = null; this.ifEmpty = null; this.nameAttr = null; this.picture = null; this.presence = null; this.rename = null; this.whitespace = null; } } class Type extends _xfa_object.OptionObject { constructor(attributes) { super(CONFIG_NS_ID, "type", ["none", "ascii85", "asciiHex", "ccittfax", "flate", "lzw", "runLength", "native", "xdp", "mergedXDP"]); } } class Uri extends _xfa_object.StringObject { constructor(attributes) { super(CONFIG_NS_ID, "uri"); } } class Validate extends _xfa_object.OptionObject { constructor(attributes) { super(CONFIG_NS_ID, "validate", ["preSubmit", "prePrint", "preExecute", "preSave"]); } } class ValidateApprovalSignatures extends _xfa_object.ContentObject { constructor(attributes) { super(CONFIG_NS_ID, "validateApprovalSignatures"); } [_xfa_object.$finalize]() { this[_xfa_object.$content] = this[_xfa_object.$content].trim().split(/\s+/).filter(x => ["docReady", "postSign"].includes(x)); } } class ValidationMessaging extends _xfa_object.OptionObject { constructor(attributes) { super(CONFIG_NS_ID, "validationMessaging", ["allMessagesIndividually", "allMessagesTogether", "firstMessageOnly", "noMessages"]); } } class Version extends _xfa_object.OptionObject { constructor(attributes) { super(CONFIG_NS_ID, "version", ["1.7", "1.6", "1.5", "1.4", "1.3", "1.2"]); } } class VersionControl extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "VersionControl"); this.outputBelow = (0, _utils.getStringOption)(attributes.outputBelow, ["warn", "error", "update"]); this.sourceAbove = (0, _utils.getStringOption)(attributes.sourceAbove, ["warn", "error"]); this.sourceBelow = (0, _utils.getStringOption)(attributes.sourceBelow, ["update", "maintain"]); } } class ViewerPreferences extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "viewerPreferences", true); this.ADBE_JSConsole = null; this.ADBE_JSDebugger = null; this.addViewerPreferences = null; this.duplexOption = null; this.enforce = null; this.numberOfCopies = null; this.pageRange = null; this.pickTrayByPDFSize = null; this.printScaling = null; } } class WebClient extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "webClient", true); this.name = attributes.name ? attributes.name.trim() : ""; this.fontInfo = null; this.xdc = null; } } class Whitespace extends _xfa_object.OptionObject { constructor(attributes) { super(CONFIG_NS_ID, "whitespace", ["preserve", "ltrim", "normalize", "rtrim", "trim"]); } } class Window extends _xfa_object.ContentObject { constructor(attributes) { super(CONFIG_NS_ID, "window"); } [_xfa_object.$finalize]() { const pair = this[_xfa_object.$content].trim().split(/\s*,\s*/, 2).map(x => parseInt(x, 10)); if (pair.some(x => isNaN(x))) { this[_xfa_object.$content] = [0, 0]; return; } if (pair.length === 1) { pair.push(pair[0]); } this[_xfa_object.$content] = pair; } } class Xdc extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "xdc", true); this.uri = new _xfa_object.XFAObjectArray(); this.xsl = new _xfa_object.XFAObjectArray(); } } class Xdp extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "xdp", true); this.packets = null; } } class Xsl extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "xsl", true); this.debug = null; this.uri = null; } } class Zpl extends _xfa_object.XFAObject { constructor(attributes) { super(CONFIG_NS_ID, "zpl", true); this.name = attributes.name ? attributes.name.trim() : ""; this.batchOutput = null; this.flipLabel = null; this.fontInfo = null; this.xdc = null; } } class ConfigNamespace { static [_namespaces.$buildXFAObject](name, attributes) { if (ConfigNamespace.hasOwnProperty(name)) { return ConfigNamespace[name](attributes); } return undefined; } static acrobat(attrs) { return new Acrobat(attrs); } static acrobat7(attrs) { return new Acrobat7(attrs); } static ADBE_JSConsole(attrs) { return new ADBE_JSConsole(attrs); } static ADBE_JSDebugger(attrs) { return new ADBE_JSDebugger(attrs); } static addSilentPrint(attrs) { return new AddSilentPrint(attrs); } static addViewerPreferences(attrs) { return new AddViewerPreferences(attrs); } static adjustData(attrs) { return new AdjustData(attrs); } static adobeExtensionLevel(attrs) { return new AdobeExtensionLevel(attrs); } static agent(attrs) { return new Agent(attrs); } static alwaysEmbed(attrs) { return new AlwaysEmbed(attrs); } static amd(attrs) { return new Amd(attrs); } static area(attrs) { return new Area(attrs); } static attributes(attrs) { return new Attributes(attrs); } static autoSave(attrs) { return new AutoSave(attrs); } static base(attrs) { return new Base(attrs); } static batchOutput(attrs) { return new BatchOutput(attrs); } static behaviorOverride(attrs) { return new BehaviorOverride(attrs); } static cache(attrs) { return new Cache(attrs); } static change(attrs) { return new Change(attrs); } static common(attrs) { return new Common(attrs); } static compress(attrs) { return new Compress(attrs); } static compressLogicalStructure(attrs) { return new CompressLogicalStructure(attrs); } static compressObjectStream(attrs) { return new CompressObjectStream(attrs); } static compression(attrs) { return new Compression(attrs); } static config(attrs) { return new Config(attrs); } static conformance(attrs) { return new Conformance(attrs); } static contentCopy(attrs) { return new ContentCopy(attrs); } static copies(attrs) { return new Copies(attrs); } static creator(attrs) { return new Creator(attrs); } static currentPage(attrs) { return new CurrentPage(attrs); } static data(attrs) { return new Data(attrs); } static debug(attrs) { return new Debug(attrs); } static defaultTypeface(attrs) { return new DefaultTypeface(attrs); } static destination(attrs) { return new Destination(attrs); } static documentAssembly(attrs) { return new DocumentAssembly(attrs); } static driver(attrs) { return new Driver(attrs); } static duplexOption(attrs) { return new DuplexOption(attrs); } static dynamicRender(attrs) { return new DynamicRender(attrs); } static embed(attrs) { return new Embed(attrs); } static encrypt(attrs) { return new Encrypt(attrs); } static encryption(attrs) { return new Encryption(attrs); } static encryptionLevel(attrs) { return new EncryptionLevel(attrs); } static enforce(attrs) { return new Enforce(attrs); } static equate(attrs) { return new Equate(attrs); } static equateRange(attrs) { return new EquateRange(attrs); } static exclude(attrs) { return new Exclude(attrs); } static excludeNS(attrs) { return new ExcludeNS(attrs); } static flipLabel(attrs) { return new FlipLabel(attrs); } static fontInfo(attrs) { return new FontInfo(attrs); } static formFieldFilling(attrs) { return new FormFieldFilling(attrs); } static groupParent(attrs) { return new GroupParent(attrs); } static ifEmpty(attrs) { return new IfEmpty(attrs); } static includeXDPContent(attrs) { return new IncludeXDPContent(attrs); } static incrementalLoad(attrs) { return new IncrementalLoad(attrs); } static incrementalMerge(attrs) { return new IncrementalMerge(attrs); } static interactive(attrs) { return new Interactive(attrs); } static jog(attrs) { return new Jog(attrs); } static labelPrinter(attrs) { return new LabelPrinter(attrs); } static layout(attrs) { return new Layout(attrs); } static level(attrs) { return new Level(attrs); } static linearized(attrs) { return new Linearized(attrs); } static locale(attrs) { return new Locale(attrs); } static localeSet(attrs) { return new LocaleSet(attrs); } static log(attrs) { return new Log(attrs); } static map(attrs) { return new MapElement(attrs); } static mediumInfo(attrs) { return new MediumInfo(attrs); } static message(attrs) { return new Message(attrs); } static messaging(attrs) { return new Messaging(attrs); } static mode(attrs) { return new Mode(attrs); } static modifyAnnots(attrs) { return new ModifyAnnots(attrs); } static msgId(attrs) { return new MsgId(attrs); } static nameAttr(attrs) { return new NameAttr(attrs); } static neverEmbed(attrs) { return new NeverEmbed(attrs); } static numberOfCopies(attrs) { return new NumberOfCopies(attrs); } static openAction(attrs) { return new OpenAction(attrs); } static output(attrs) { return new Output(attrs); } static outputBin(attrs) { return new OutputBin(attrs); } static outputXSL(attrs) { return new OutputXSL(attrs); } static overprint(attrs) { return new Overprint(attrs); } static packets(attrs) { return new Packets(attrs); } static pageOffset(attrs) { return new PageOffset(attrs); } static pageRange(attrs) { return new PageRange(attrs); } static pagination(attrs) { return new Pagination(attrs); } static paginationOverride(attrs) { return new PaginationOverride(attrs); } static part(attrs) { return new Part(attrs); } static pcl(attrs) { return new Pcl(attrs); } static pdf(attrs) { return new Pdf(attrs); } static pdfa(attrs) { return new Pdfa(attrs); } static permissions(attrs) { return new Permissions(attrs); } static pickTrayByPDFSize(attrs) { return new PickTrayByPDFSize(attrs); } static picture(attrs) { return new Picture(attrs); } static plaintextMetadata(attrs) { return new PlaintextMetadata(attrs); } static presence(attrs) { return new Presence(attrs); } static present(attrs) { return new Present(attrs); } static print(attrs) { return new Print(attrs); } static printHighQuality(attrs) { return new PrintHighQuality(attrs); } static printScaling(attrs) { return new PrintScaling(attrs); } static printerName(attrs) { return new PrinterName(attrs); } static producer(attrs) { return new Producer(attrs); } static ps(attrs) { return new Ps(attrs); } static range(attrs) { return new Range(attrs); } static record(attrs) { return new Record(attrs); } static relevant(attrs) { return new Relevant(attrs); } static rename(attrs) { return new Rename(attrs); } static renderPolicy(attrs) { return new RenderPolicy(attrs); } static runScripts(attrs) { return new RunScripts(attrs); } static script(attrs) { return new Script(attrs); } static scriptModel(attrs) { return new ScriptModel(attrs); } static severity(attrs) { return new Severity(attrs); } static silentPrint(attrs) { return new SilentPrint(attrs); } static staple(attrs) { return new Staple(attrs); } static startNode(attrs) { return new StartNode(attrs); } static startPage(attrs) { return new StartPage(attrs); } static submitFormat(attrs) { return new SubmitFormat(attrs); } static submitUrl(attrs) { return new SubmitUrl(attrs); } static subsetBelow(attrs) { return new SubsetBelow(attrs); } static suppressBanner(attrs) { return new SuppressBanner(attrs); } static tagged(attrs) { return new Tagged(attrs); } static template(attrs) { return new Template(attrs); } static templateCache(attrs) { return new TemplateCache(attrs); } static threshold(attrs) { return new Threshold(attrs); } static to(attrs) { return new To(attrs); } static trace(attrs) { return new Trace(attrs); } static transform(attrs) { return new Transform(attrs); } static type(attrs) { return new Type(attrs); } static uri(attrs) { return new Uri(attrs); } static validate(attrs) { return new Validate(attrs); } static validateApprovalSignatures(attrs) { return new ValidateApprovalSignatures(attrs); } static validationMessaging(attrs) { return new ValidationMessaging(attrs); } static version(attrs) { return new Version(attrs); } static versionControl(attrs) { return new VersionControl(attrs); } static viewerPreferences(attrs) { return new ViewerPreferences(attrs); } static webClient(attrs) { return new WebClient(attrs); } static whitespace(attrs) { return new Whitespace(attrs); } static window(attrs) { return new Window(attrs); } static xdc(attrs) { return new Xdc(attrs); } static xdp(attrs) { return new Xdp(attrs); } static xsl(attrs) { return new Xsl(attrs); } static zpl(attrs) { return new Zpl(attrs); } } exports.ConfigNamespace = ConfigNamespace; /***/ }), /* 90 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.ConnectionSetNamespace = void 0; var _namespaces = __w_pdfjs_require__(77); var _xfa_object = __w_pdfjs_require__(75); const CONNECTION_SET_NS_ID = _namespaces.NamespaceIds.connectionSet.id; class ConnectionSet extends _xfa_object.XFAObject { constructor(attributes) { super(CONNECTION_SET_NS_ID, "connectionSet", true); this.wsdlConnection = new _xfa_object.XFAObjectArray(); this.xmlConnection = new _xfa_object.XFAObjectArray(); this.xsdConnection = new _xfa_object.XFAObjectArray(); } } class EffectiveInputPolicy extends _xfa_object.XFAObject { constructor(attributes) { super(CONNECTION_SET_NS_ID, "effectiveInputPolicy"); this.id = attributes.id || ""; this.name = attributes.name || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; } } class EffectiveOutputPolicy extends _xfa_object.XFAObject { constructor(attributes) { super(CONNECTION_SET_NS_ID, "effectiveOutputPolicy"); this.id = attributes.id || ""; this.name = attributes.name || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; } } class Operation extends _xfa_object.StringObject { constructor(attributes) { super(CONNECTION_SET_NS_ID, "operation"); this.id = attributes.id || ""; this.input = attributes.input || ""; this.name = attributes.name || ""; this.output = attributes.output || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; } } class RootElement extends _xfa_object.StringObject { constructor(attributes) { super(CONNECTION_SET_NS_ID, "rootElement"); this.id = attributes.id || ""; this.name = attributes.name || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; } } class SoapAction extends _xfa_object.StringObject { constructor(attributes) { super(CONNECTION_SET_NS_ID, "soapAction"); this.id = attributes.id || ""; this.name = attributes.name || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; } } class SoapAddress extends _xfa_object.StringObject { constructor(attributes) { super(CONNECTION_SET_NS_ID, "soapAddress"); this.id = attributes.id || ""; this.name = attributes.name || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; } } class Uri extends _xfa_object.StringObject { constructor(attributes) { super(CONNECTION_SET_NS_ID, "uri"); this.id = attributes.id || ""; this.name = attributes.name || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; } } class WsdlAddress extends _xfa_object.StringObject { constructor(attributes) { super(CONNECTION_SET_NS_ID, "wsdlAddress"); this.id = attributes.id || ""; this.name = attributes.name || ""; this.use = attributes.use || ""; this.usehref = attributes.usehref || ""; } } class WsdlConnection extends _xfa_object.XFAObject { constructor(attributes) { super(CONNECTION_SET_NS_ID, "wsdlConnection", true); this.dataDescription = attributes.dataDescription || ""; this.name = attributes.name || ""; this.effectiveInputPolicy = null; this.effectiveOutputPolicy = null; this.operation = null; this.soapAction = null; this.soapAddress = null; this.wsdlAddress = null; } } class XmlConnection extends _xfa_object.XFAObject { constructor(attributes) { super(CONNECTION_SET_NS_ID, "xmlConnection", true); this.dataDescription = attributes.dataDescription || ""; this.name = attributes.name || ""; this.uri = null; } } class XsdConnection extends _xfa_object.XFAObject { constructor(attributes) { super(CONNECTION_SET_NS_ID, "xsdConnection", true); this.dataDescription = attributes.dataDescription || ""; this.name = attributes.name || ""; this.rootElement = null; this.uri = null; } } class ConnectionSetNamespace { static [_namespaces.$buildXFAObject](name, attributes) { if (ConnectionSetNamespace.hasOwnProperty(name)) { return ConnectionSetNamespace[name](attributes); } return undefined; } static connectionSet(attrs) { return new ConnectionSet(attrs); } static effectiveInputPolicy(attrs) { return new EffectiveInputPolicy(attrs); } static effectiveOutputPolicy(attrs) { return new EffectiveOutputPolicy(attrs); } static operation(attrs) { return new Operation(attrs); } static rootElement(attrs) { return new RootElement(attrs); } static soapAction(attrs) { return new SoapAction(attrs); } static soapAddress(attrs) { return new SoapAddress(attrs); } static uri(attrs) { return new Uri(attrs); } static wsdlAddress(attrs) { return new WsdlAddress(attrs); } static wsdlConnection(attrs) { return new WsdlConnection(attrs); } static xmlConnection(attrs) { return new XmlConnection(attrs); } static xsdConnection(attrs) { return new XsdConnection(attrs); } } exports.ConnectionSetNamespace = ConnectionSetNamespace; /***/ }), /* 91 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.DatasetsNamespace = void 0; var _xfa_object = __w_pdfjs_require__(75); var _namespaces = __w_pdfjs_require__(77); const DATASETS_NS_ID = _namespaces.NamespaceIds.datasets.id; class Data extends _xfa_object.XmlObject { constructor(attributes) { super(DATASETS_NS_ID, "data", attributes); } [_xfa_object.$isNsAgnostic]() { return true; } } class Datasets extends _xfa_object.XFAObject { constructor(attributes) { super(DATASETS_NS_ID, "datasets", true); this.data = null; this.Signature = null; } [_xfa_object.$onChild](child) { const name = child[_xfa_object.$nodeName]; if (name === "data" && child[_xfa_object.$namespaceId] === DATASETS_NS_ID || name === "Signature" && child[_xfa_object.$namespaceId] === _namespaces.NamespaceIds.signature.id) { this[name] = child; } this[_xfa_object.$appendChild](child); } } class DatasetsNamespace { static [_namespaces.$buildXFAObject](name, attributes) { if (DatasetsNamespace.hasOwnProperty(name)) { return DatasetsNamespace[name](attributes); } return undefined; } static datasets(attributes) { return new Datasets(attributes); } static data(attributes) { return new Data(attributes); } } exports.DatasetsNamespace = DatasetsNamespace; /***/ }), /* 92 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.LocaleSetNamespace = void 0; var _namespaces = __w_pdfjs_require__(77); var _xfa_object = __w_pdfjs_require__(75); var _utils = __w_pdfjs_require__(76); const LOCALE_SET_NS_ID = _namespaces.NamespaceIds.localeSet.id; class CalendarSymbols extends _xfa_object.XFAObject { constructor(attributes) { super(LOCALE_SET_NS_ID, "calendarSymbols", true); this.name = "gregorian"; this.dayNames = new _xfa_object.XFAObjectArray(2); this.eraNames = null; this.meridiemNames = null; this.monthNames = new _xfa_object.XFAObjectArray(2); } } class CurrencySymbol extends _xfa_object.StringObject { constructor(attributes) { super(LOCALE_SET_NS_ID, "currencySymbol"); this.name = (0, _utils.getStringOption)(attributes.name, ["symbol", "isoname", "decimal"]); } } class CurrencySymbols extends _xfa_object.XFAObject { constructor(attributes) { super(LOCALE_SET_NS_ID, "currencySymbols", true); this.currencySymbol = new _xfa_object.XFAObjectArray(3); } } class DatePattern extends _xfa_object.StringObject { constructor(attributes) { super(LOCALE_SET_NS_ID, "datePattern"); this.name = (0, _utils.getStringOption)(attributes.name, ["full", "long", "med", "short"]); } } class DatePatterns extends _xfa_object.XFAObject { constructor(attributes) { super(LOCALE_SET_NS_ID, "datePatterns", true); this.datePattern = new _xfa_object.XFAObjectArray(4); } } class DateTimeSymbols extends _xfa_object.ContentObject { constructor(attributes) { super(LOCALE_SET_NS_ID, "dateTimeSymbols"); } } class Day extends _xfa_object.StringObject { constructor(attributes) { super(LOCALE_SET_NS_ID, "day"); } } class DayNames extends _xfa_object.XFAObject { constructor(attributes) { super(LOCALE_SET_NS_ID, "dayNames", true); this.abbr = (0, _utils.getInteger)({ data: attributes.abbr, defaultValue: 0, validate: x => x === 1 }); this.day = new _xfa_object.XFAObjectArray(7); } } class Era extends _xfa_object.StringObject { constructor(attributes) { super(LOCALE_SET_NS_ID, "era"); } } class EraNames extends _xfa_object.XFAObject { constructor(attributes) { super(LOCALE_SET_NS_ID, "eraNames", true); this.era = new _xfa_object.XFAObjectArray(2); } } class Locale extends _xfa_object.XFAObject { constructor(attributes) { super(LOCALE_SET_NS_ID, "locale", true); this.desc = attributes.desc || ""; this.name = "isoname"; this.calendarSymbols = null; this.currencySymbols = null; this.datePatterns = null; this.dateTimeSymbols = null; this.numberPatterns = null; this.numberSymbols = null; this.timePatterns = null; this.typeFaces = null; } } class LocaleSet extends _xfa_object.XFAObject { constructor(attributes) { super(LOCALE_SET_NS_ID, "localeSet", true); this.locale = new _xfa_object.XFAObjectArray(); } } class Meridiem extends _xfa_object.StringObject { constructor(attributes) { super(LOCALE_SET_NS_ID, "meridiem"); } } class MeridiemNames extends _xfa_object.XFAObject { constructor(attributes) { super(LOCALE_SET_NS_ID, "meridiemNames", true); this.meridiem = new _xfa_object.XFAObjectArray(2); } } class Month extends _xfa_object.StringObject { constructor(attributes) { super(LOCALE_SET_NS_ID, "month"); } } class MonthNames extends _xfa_object.XFAObject { constructor(attributes) { super(LOCALE_SET_NS_ID, "monthNames", true); this.abbr = (0, _utils.getInteger)({ data: attributes.abbr, defaultValue: 0, validate: x => x === 1 }); this.month = new _xfa_object.XFAObjectArray(12); } } class NumberPattern extends _xfa_object.StringObject { constructor(attributes) { super(LOCALE_SET_NS_ID, "numberPattern"); this.name = (0, _utils.getStringOption)(attributes.name, ["full", "long", "med", "short"]); } } class NumberPatterns extends _xfa_object.XFAObject { constructor(attributes) { super(LOCALE_SET_NS_ID, "numberPatterns", true); this.numberPattern = new _xfa_object.XFAObjectArray(4); } } class NumberSymbol extends _xfa_object.StringObject { constructor(attributes) { super(LOCALE_SET_NS_ID, "numberSymbol"); this.name = (0, _utils.getStringOption)(attributes.name, ["decimal", "grouping", "percent", "minus", "zero"]); } } class NumberSymbols extends _xfa_object.XFAObject { constructor(attributes) { super(LOCALE_SET_NS_ID, "numberSymbols", true); this.numberSymbol = new _xfa_object.XFAObjectArray(5); } } class TimePattern extends _xfa_object.StringObject { constructor(attributes) { super(LOCALE_SET_NS_ID, "timePattern"); this.name = (0, _utils.getStringOption)(attributes.name, ["full", "long", "med", "short"]); } } class TimePatterns extends _xfa_object.XFAObject { constructor(attributes) { super(LOCALE_SET_NS_ID, "timePatterns", true); this.timePattern = new _xfa_object.XFAObjectArray(4); } } class TypeFace extends _xfa_object.XFAObject { constructor(attributes) { super(LOCALE_SET_NS_ID, "typeFace", true); this.name = attributes.name | ""; } } class TypeFaces extends _xfa_object.XFAObject { constructor(attributes) { super(LOCALE_SET_NS_ID, "typeFaces", true); this.typeFace = new _xfa_object.XFAObjectArray(); } } class LocaleSetNamespace { static [_namespaces.$buildXFAObject](name, attributes) { if (LocaleSetNamespace.hasOwnProperty(name)) { return LocaleSetNamespace[name](attributes); } return undefined; } static calendarSymbols(attrs) { return new CalendarSymbols(attrs); } static currencySymbol(attrs) { return new CurrencySymbol(attrs); } static currencySymbols(attrs) { return new CurrencySymbols(attrs); } static datePattern(attrs) { return new DatePattern(attrs); } static datePatterns(attrs) { return new DatePatterns(attrs); } static dateTimeSymbols(attrs) { return new DateTimeSymbols(attrs); } static day(attrs) { return new Day(attrs); } static dayNames(attrs) { return new DayNames(attrs); } static era(attrs) { return new Era(attrs); } static eraNames(attrs) { return new EraNames(attrs); } static locale(attrs) { return new Locale(attrs); } static localeSet(attrs) { return new LocaleSet(attrs); } static meridiem(attrs) { return new Meridiem(attrs); } static meridiemNames(attrs) { return new MeridiemNames(attrs); } static month(attrs) { return new Month(attrs); } static monthNames(attrs) { return new MonthNames(attrs); } static numberPattern(attrs) { return new NumberPattern(attrs); } static numberPatterns(attrs) { return new NumberPatterns(attrs); } static numberSymbol(attrs) { return new NumberSymbol(attrs); } static numberSymbols(attrs) { return new NumberSymbols(attrs); } static timePattern(attrs) { return new TimePattern(attrs); } static timePatterns(attrs) { return new TimePatterns(attrs); } static typeFace(attrs) { return new TypeFace(attrs); } static typeFaces(attrs) { return new TypeFaces(attrs); } } exports.LocaleSetNamespace = LocaleSetNamespace; /***/ }), /* 93 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.SignatureNamespace = void 0; var _namespaces = __w_pdfjs_require__(77); var _xfa_object = __w_pdfjs_require__(75); const SIGNATURE_NS_ID = _namespaces.NamespaceIds.signature.id; class Signature extends _xfa_object.XFAObject { constructor(attributes) { super(SIGNATURE_NS_ID, "signature", true); } } class SignatureNamespace { static [_namespaces.$buildXFAObject](name, attributes) { if (SignatureNamespace.hasOwnProperty(name)) { return SignatureNamespace[name](attributes); } return undefined; } static signature(attributes) { return new Signature(attributes); } } exports.SignatureNamespace = SignatureNamespace; /***/ }), /* 94 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.StylesheetNamespace = void 0; var _namespaces = __w_pdfjs_require__(77); var _xfa_object = __w_pdfjs_require__(75); const STYLESHEET_NS_ID = _namespaces.NamespaceIds.stylesheet.id; class Stylesheet extends _xfa_object.XFAObject { constructor(attributes) { super(STYLESHEET_NS_ID, "stylesheet", true); } } class StylesheetNamespace { static [_namespaces.$buildXFAObject](name, attributes) { if (StylesheetNamespace.hasOwnProperty(name)) { return StylesheetNamespace[name](attributes); } return undefined; } static stylesheet(attributes) { return new Stylesheet(attributes); } } exports.StylesheetNamespace = StylesheetNamespace; /***/ }), /* 95 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.XdpNamespace = void 0; var _namespaces = __w_pdfjs_require__(77); var _xfa_object = __w_pdfjs_require__(75); const XDP_NS_ID = _namespaces.NamespaceIds.xdp.id; class Xdp extends _xfa_object.XFAObject { constructor(attributes) { super(XDP_NS_ID, "xdp", true); this.uuid = attributes.uuid || ""; this.timeStamp = attributes.timeStamp || ""; this.config = null; this.connectionSet = null; this.datasets = null; this.localeSet = null; this.stylesheet = new _xfa_object.XFAObjectArray(); this.template = null; } [_xfa_object.$onChildCheck](child) { const ns = _namespaces.NamespaceIds[child[_xfa_object.$nodeName]]; return ns && child[_xfa_object.$namespaceId] === ns.id; } } class XdpNamespace { static [_namespaces.$buildXFAObject](name, attributes) { if (XdpNamespace.hasOwnProperty(name)) { return XdpNamespace[name](attributes); } return undefined; } static xdp(attributes) { return new Xdp(attributes); } } exports.XdpNamespace = XdpNamespace; /***/ }), /* 96 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.XhtmlNamespace = void 0; var _xfa_object = __w_pdfjs_require__(75); var _namespaces = __w_pdfjs_require__(77); var _html_utils = __w_pdfjs_require__(82); var _utils = __w_pdfjs_require__(76); const XHTML_NS_ID = _namespaces.NamespaceIds.xhtml.id; const $richText = Symbol(); const VALID_STYLES = new Set(["color", "font", "font-family", "font-size", "font-stretch", "font-style", "font-weight", "margin", "margin-bottom", "margin-left", "margin-right", "margin-top", "letter-spacing", "line-height", "orphans", "page-break-after", "page-break-before", "page-break-inside", "tab-interval", "tab-stop", "text-align", "text-decoration", "text-indent", "vertical-align", "widows", "kerning-mode", "xfa-font-horizontal-scale", "xfa-font-vertical-scale", "xfa-spacerun", "xfa-tab-stops"]); const StyleMapping = new Map([["page-break-after", "breakAfter"], ["page-break-before", "breakBefore"], ["page-break-inside", "breakInside"], ["kerning-mode", value => value === "none" ? "none" : "normal"], ["xfa-font-horizontal-scale", value => `scaleX(${Math.max(0, Math.min(parseInt(value) / 100)).toFixed(2)})`], ["xfa-font-vertical-scale", value => `scaleY(${Math.max(0, Math.min(parseInt(value) / 100)).toFixed(2)})`], ["xfa-spacerun", ""], ["xfa-tab-stops", ""], ["font-size", (value, original) => { value = original.fontSize = (0, _utils.getMeasurement)(value); return (0, _html_utils.measureToString)(0.99 * value); }], ["letter-spacing", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["line-height", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["margin", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["margin-bottom", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["margin-left", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["margin-right", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["margin-top", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["text-indent", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))], ["font-family", value => value], ["vertical-align", value => (0, _html_utils.measureToString)((0, _utils.getMeasurement)(value))]]); const spacesRegExp = /\s+/g; const crlfRegExp = /[\r\n]+/g; const crlfForRichTextRegExp = /\r\n?/g; function mapStyle(styleStr, node, richText) { const style = Object.create(null); if (!styleStr) { return style; } const original = Object.create(null); for (const [key, value] of styleStr.split(";").map(s => s.split(":", 2))) { const mapping = StyleMapping.get(key); if (mapping === "") { continue; } let newValue = value; if (mapping) { if (typeof mapping === "string") { newValue = mapping; } else { newValue = mapping(value, original); } } if (key.endsWith("scale")) { if (style.transform) { style.transform = `${style[key]} ${newValue}`; } else { style.transform = newValue; } } else { style[key.replaceAll(/-([a-zA-Z])/g, (_, x) => x.toUpperCase())] = newValue; } } if (style.fontFamily) { (0, _html_utils.setFontFamily)({ typeface: style.fontFamily, weight: style.fontWeight || "normal", posture: style.fontStyle || "normal", size: original.fontSize || 0 }, node, node[_xfa_object.$globalData].fontFinder, style); } if (richText && style.verticalAlign && style.verticalAlign !== "0px" && style.fontSize) { const SUB_SUPER_SCRIPT_FACTOR = 0.583; const VERTICAL_FACTOR = 0.333; const fontSize = (0, _utils.getMeasurement)(style.fontSize); style.fontSize = (0, _html_utils.measureToString)(fontSize * SUB_SUPER_SCRIPT_FACTOR); style.verticalAlign = (0, _html_utils.measureToString)(Math.sign((0, _utils.getMeasurement)(style.verticalAlign)) * fontSize * VERTICAL_FACTOR); } (0, _html_utils.fixTextIndent)(style); return style; } function checkStyle(node) { if (!node.style) { return ""; } return node.style.trim().split(/\s*;\s*/).filter(s => !!s).map(s => s.split(/\s*:\s*/, 2)).filter(([key, value]) => { if (key === "font-family") { node[_xfa_object.$globalData].usedTypefaces.add(value); } return VALID_STYLES.has(key); }).map(kv => kv.join(":")).join(";"); } const NoWhites = new Set(["body", "html"]); class XhtmlObject extends _xfa_object.XmlObject { constructor(attributes, name) { super(XHTML_NS_ID, name); this[$richText] = false; this.style = attributes.style || ""; } [_xfa_object.$clean](builder) { super[_xfa_object.$clean](builder); this.style = checkStyle(this); } [_xfa_object.$acceptWhitespace]() { return !NoWhites.has(this[_xfa_object.$nodeName]); } [_xfa_object.$onText](str, richText = false) { if (!richText) { str = str.replace(crlfRegExp, ""); if (!this.style.includes("xfa-spacerun:yes")) { str = str.replace(spacesRegExp, " "); } } else { this[$richText] = true; } if (str) { this[_xfa_object.$content] += str; } } [_xfa_object.$pushGlyphs](measure, mustPop = true) { const xfaFont = Object.create(null); const margin = { top: NaN, bottom: NaN, left: NaN, right: NaN }; let lineHeight = null; for (const [key, value] of this.style.split(";").map(s => s.split(":", 2))) { switch (key) { case "font-family": xfaFont.typeface = (0, _utils.stripQuotes)(value); break; case "font-size": xfaFont.size = (0, _utils.getMeasurement)(value); break; case "font-weight": xfaFont.weight = value; break; case "font-style": xfaFont.posture = value; break; case "letter-spacing": xfaFont.letterSpacing = (0, _utils.getMeasurement)(value); break; case "margin": const values = value.split(/ \t/).map(x => (0, _utils.getMeasurement)(x)); switch (values.length) { case 1: margin.top = margin.bottom = margin.left = margin.right = values[0]; break; case 2: margin.top = margin.bottom = values[0]; margin.left = margin.right = values[1]; break; case 3: margin.top = values[0]; margin.bottom = values[2]; margin.left = margin.right = values[1]; break; case 4: margin.top = values[0]; margin.left = values[1]; margin.bottom = values[2]; margin.right = values[3]; break; } break; case "margin-top": margin.top = (0, _utils.getMeasurement)(value); break; case "margin-bottom": margin.bottom = (0, _utils.getMeasurement)(value); break; case "margin-left": margin.left = (0, _utils.getMeasurement)(value); break; case "margin-right": margin.right = (0, _utils.getMeasurement)(value); break; case "line-height": lineHeight = (0, _utils.getMeasurement)(value); break; } } measure.pushData(xfaFont, margin, lineHeight); if (this[_xfa_object.$content]) { measure.addString(this[_xfa_object.$content]); } else { for (const child of this[_xfa_object.$getChildren]()) { if (child[_xfa_object.$nodeName] === "#text") { measure.addString(child[_xfa_object.$content]); continue; } child[_xfa_object.$pushGlyphs](measure); } } if (mustPop) { measure.popFont(); } } [_xfa_object.$toHTML](availableSpace) { const children = []; this[_xfa_object.$extra] = { children }; this[_xfa_object.$childrenToHTML]({}); if (children.length === 0 && !this[_xfa_object.$content]) { return _utils.HTMLResult.EMPTY; } let value; if (this[$richText]) { value = this[_xfa_object.$content] ? this[_xfa_object.$content].replace(crlfForRichTextRegExp, "\n") : undefined; } else { value = this[_xfa_object.$content] || undefined; } return _utils.HTMLResult.success({ name: this[_xfa_object.$nodeName], attributes: { href: this.href, style: mapStyle(this.style, this, this[$richText]) }, children, value }); } } class A extends XhtmlObject { constructor(attributes) { super(attributes, "a"); this.href = (0, _html_utils.fixURL)(attributes.href) || ""; } } class B extends XhtmlObject { constructor(attributes) { super(attributes, "b"); } [_xfa_object.$pushGlyphs](measure) { measure.pushFont({ weight: "bold" }); super[_xfa_object.$pushGlyphs](measure); measure.popFont(); } } class Body extends XhtmlObject { constructor(attributes) { super(attributes, "body"); } [_xfa_object.$toHTML](availableSpace) { const res = super[_xfa_object.$toHTML](availableSpace); const { html } = res; if (!html) { return _utils.HTMLResult.EMPTY; } html.name = "div"; html.attributes.class = ["xfaRich"]; return res; } } class Br extends XhtmlObject { constructor(attributes) { super(attributes, "br"); } [_xfa_object.$text]() { return "\n"; } [_xfa_object.$pushGlyphs](measure) { measure.addString("\n"); } [_xfa_object.$toHTML](availableSpace) { return _utils.HTMLResult.success({ name: "br" }); } } class Html extends XhtmlObject { constructor(attributes) { super(attributes, "html"); } [_xfa_object.$toHTML](availableSpace) { const children = []; this[_xfa_object.$extra] = { children }; this[_xfa_object.$childrenToHTML]({}); if (children.length === 0) { return _utils.HTMLResult.success({ name: "div", attributes: { class: ["xfaRich"], style: {} }, value: this[_xfa_object.$content] || "" }); } if (children.length === 1) { const child = children[0]; if (child.attributes && child.attributes.class.includes("xfaRich")) { return _utils.HTMLResult.success(child); } } return _utils.HTMLResult.success({ name: "div", attributes: { class: ["xfaRich"], style: {} }, children }); } } class I extends XhtmlObject { constructor(attributes) { super(attributes, "i"); } [_xfa_object.$pushGlyphs](measure) { measure.pushFont({ posture: "italic" }); super[_xfa_object.$pushGlyphs](measure); measure.popFont(); } } class Li extends XhtmlObject { constructor(attributes) { super(attributes, "li"); } } class Ol extends XhtmlObject { constructor(attributes) { super(attributes, "ol"); } } class P extends XhtmlObject { constructor(attributes) { super(attributes, "p"); } [_xfa_object.$pushGlyphs](measure) { super[_xfa_object.$pushGlyphs](measure, false); measure.addString("\n"); measure.addPara(); measure.popFont(); } [_xfa_object.$text]() { const siblings = this[_xfa_object.$getParent]()[_xfa_object.$getChildren](); if (siblings[siblings.length - 1] === this) { return super[_xfa_object.$text](); } return super[_xfa_object.$text]() + "\n"; } } class Span extends XhtmlObject { constructor(attributes) { super(attributes, "span"); } } class Sub extends XhtmlObject { constructor(attributes) { super(attributes, "sub"); } } class Sup extends XhtmlObject { constructor(attributes) { super(attributes, "sup"); } } class Ul extends XhtmlObject { constructor(attributes) { super(attributes, "ul"); } } class XhtmlNamespace { static [_namespaces.$buildXFAObject](name, attributes) { if (XhtmlNamespace.hasOwnProperty(name)) { return XhtmlNamespace[name](attributes); } return undefined; } static a(attributes) { return new A(attributes); } static b(attributes) { return new B(attributes); } static body(attributes) { return new Body(attributes); } static br(attributes) { return new Br(attributes); } static html(attributes) { return new Html(attributes); } static i(attributes) { return new I(attributes); } static li(attributes) { return new Li(attributes); } static ol(attributes) { return new Ol(attributes); } static p(attributes) { return new P(attributes); } static span(attributes) { return new Span(attributes); } static sub(attributes) { return new Sub(attributes); } static sup(attributes) { return new Sup(attributes); } static ul(attributes) { return new Ul(attributes); } } exports.XhtmlNamespace = XhtmlNamespace; /***/ }), /* 97 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.UnknownNamespace = void 0; var _namespaces = __w_pdfjs_require__(77); var _xfa_object = __w_pdfjs_require__(75); class UnknownNamespace { constructor(nsId) { this.namespaceId = nsId; } [_namespaces.$buildXFAObject](name, attributes) { return new _xfa_object.XmlObject(this.namespaceId, name, attributes); } } exports.UnknownNamespace = UnknownNamespace; /***/ }), /* 98 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.XRef = void 0; var _util = __w_pdfjs_require__(2); var _primitives = __w_pdfjs_require__(5); var _core_utils = __w_pdfjs_require__(9); var _parser = __w_pdfjs_require__(27); var _base_stream = __w_pdfjs_require__(6); var _crypto = __w_pdfjs_require__(72); class XRef { constructor(stream, pdfManager) { this.stream = stream; this.pdfManager = pdfManager; this.entries = []; this.xrefstms = Object.create(null); this._cacheMap = new Map(); this._pendingRefs = new _primitives.RefSet(); this.stats = new _core_utils.DocStats(pdfManager.msgHandler); this._newRefNum = null; } getNewRef() { if (this._newRefNum === null) { this._newRefNum = this.entries.length; } return _primitives.Ref.get(this._newRefNum++, 0); } resetNewRef() { this._newRefNum = null; } setStartXRef(startXRef) { this.startXRefQueue = [startXRef]; } parse(recoveryMode = false) { let trailerDict; if (!recoveryMode) { trailerDict = this.readXRef(); } else { (0, _util.warn)("Indexing all PDF objects"); trailerDict = this.indexObjects(); } trailerDict.assignXref(this); this.trailer = trailerDict; let encrypt; try { encrypt = trailerDict.get("Encrypt"); } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } (0, _util.warn)(`XRef.parse - Invalid "Encrypt" reference: "${ex}".`); } if (encrypt instanceof _primitives.Dict) { const ids = trailerDict.get("ID"); const fileId = ids && ids.length ? ids[0] : ""; encrypt.suppressEncryption = true; this.encrypt = new _crypto.CipherTransformFactory(encrypt, fileId, this.pdfManager.password); } let root; try { root = trailerDict.get("Root"); } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } (0, _util.warn)(`XRef.parse - Invalid "Root" reference: "${ex}".`); } if (root instanceof _primitives.Dict) { try { const pages = root.get("Pages"); if (pages instanceof _primitives.Dict) { this.root = root; return; } } catch (ex) { if (ex instanceof _core_utils.MissingDataException) { throw ex; } (0, _util.warn)(`XRef.parse - Invalid "Pages" reference: "${ex}".`); } } if (!recoveryMode) { throw new _core_utils.XRefParseException(); } throw new _util.InvalidPDFException("Invalid Root reference."); } processXRefTable(parser) { if (!("tableState" in this)) { this.tableState = { entryNum: 0, streamPos: parser.lexer.stream.pos, parserBuf1: parser.buf1, parserBuf2: parser.buf2 }; } const obj = this.readXRefTable(parser); if (!(0, _primitives.isCmd)(obj, "trailer")) { throw new _util.FormatError("Invalid XRef table: could not find trailer dictionary"); } let dict = parser.getObj(); if (!(dict instanceof _primitives.Dict) && dict.dict) { dict = dict.dict; } if (!(dict instanceof _primitives.Dict)) { throw new _util.FormatError("Invalid XRef table: could not parse trailer dictionary"); } delete this.tableState; return dict; } readXRefTable(parser) { const stream = parser.lexer.stream; const tableState = this.tableState; stream.pos = tableState.streamPos; parser.buf1 = tableState.parserBuf1; parser.buf2 = tableState.parserBuf2; let obj; while (true) { if (!("firstEntryNum" in tableState) || !("entryCount" in tableState)) { if ((0, _primitives.isCmd)(obj = parser.getObj(), "trailer")) { break; } tableState.firstEntryNum = obj; tableState.entryCount = parser.getObj(); } let first = tableState.firstEntryNum; const count = tableState.entryCount; if (!Number.isInteger(first) || !Number.isInteger(count)) { throw new _util.FormatError("Invalid XRef table: wrong types in subsection header"); } for (let i = tableState.entryNum; i < count; i++) { tableState.streamPos = stream.pos; tableState.entryNum = i; tableState.parserBuf1 = parser.buf1; tableState.parserBuf2 = parser.buf2; const entry = {}; entry.offset = parser.getObj(); entry.gen = parser.getObj(); const type = parser.getObj(); if (type instanceof _primitives.Cmd) { switch (type.cmd) { case "f": entry.free = true; break; case "n": entry.uncompressed = true; break; } } if (!Number.isInteger(entry.offset) || !Number.isInteger(entry.gen) || !(entry.free || entry.uncompressed)) { throw new _util.FormatError(`Invalid entry in XRef subsection: ${first}, ${count}`); } if (i === 0 && entry.free && first === 1) { first = 0; } if (!this.entries[i + first]) { this.entries[i + first] = entry; } } tableState.entryNum = 0; tableState.streamPos = stream.pos; tableState.parserBuf1 = parser.buf1; tableState.parserBuf2 = parser.buf2; delete tableState.firstEntryNum; delete tableState.entryCount; } if (this.entries[0] && !this.entries[0].free) { throw new _util.FormatError("Invalid XRef table: unexpected first object"); } return obj; } processXRefStream(stream) { if (!("streamState" in this)) { const streamParameters = stream.dict; const byteWidths = streamParameters.get("W"); let range = streamParameters.get("Index"); if (!range) { range = [0, streamParameters.get("Size")]; } this.streamState = { entryRanges: range, byteWidths, entryNum: 0, streamPos: stream.pos }; } this.readXRefStream(stream); delete this.streamState; return stream.dict; } readXRefStream(stream) { const streamState = this.streamState; stream.pos = streamState.streamPos; const [typeFieldWidth, offsetFieldWidth, generationFieldWidth] = streamState.byteWidths; const entryRanges = streamState.entryRanges; while (entryRanges.length > 0) { const [first, n] = entryRanges; if (!Number.isInteger(first) || !Number.isInteger(n)) { throw new _util.FormatError(`Invalid XRef range fields: ${first}, ${n}`); } if (!Number.isInteger(typeFieldWidth) || !Number.isInteger(offsetFieldWidth) || !Number.isInteger(generationFieldWidth)) { throw new _util.FormatError(`Invalid XRef entry fields length: ${first}, ${n}`); } for (let i = streamState.entryNum; i < n; ++i) { streamState.entryNum = i; streamState.streamPos = stream.pos; let type = 0, offset = 0, generation = 0; for (let j = 0; j < typeFieldWidth; ++j) { const typeByte = stream.getByte(); if (typeByte === -1) { throw new _util.FormatError("Invalid XRef byteWidths 'type'."); } type = type << 8 | typeByte; } if (typeFieldWidth === 0) { type = 1; } for (let j = 0; j < offsetFieldWidth; ++j) { const offsetByte = stream.getByte(); if (offsetByte === -1) { throw new _util.FormatError("Invalid XRef byteWidths 'offset'."); } offset = offset << 8 | offsetByte; } for (let j = 0; j < generationFieldWidth; ++j) { const generationByte = stream.getByte(); if (generationByte === -1) { throw new _util.FormatError("Invalid XRef byteWidths 'generation'."); } generation = generation << 8 | generationByte; } const entry = {}; entry.offset = offset; entry.gen = generation; switch (type) { case 0: entry.free = true; break; case 1: entry.uncompressed = true; break; case 2: break; default: throw new _util.FormatError(`Invalid XRef entry type: ${type}`); } if (!this.entries[first + i]) { this.entries[first + i] = entry; } } streamState.entryNum = 0; streamState.streamPos = stream.pos; entryRanges.splice(0, 2); } } indexObjects() { const TAB = 0x9, LF = 0xa, CR = 0xd, SPACE = 0x20; const PERCENT = 0x25, LT = 0x3c; function readToken(data, offset) { let token = "", ch = data[offset]; while (ch !== LF && ch !== CR && ch !== LT) { if (++offset >= data.length) { break; } token += String.fromCharCode(ch); ch = data[offset]; } return token; } function skipUntil(data, offset, what) { const length = what.length, dataLength = data.length; let skipped = 0; while (offset < dataLength) { let i = 0; while (i < length && data[offset + i] === what[i]) { ++i; } if (i >= length) { break; } offset++; skipped++; } return skipped; } const objRegExp = /^(\d+)\s+(\d+)\s+obj\b/; const endobjRegExp = /\bendobj[\b\s]$/; const nestedObjRegExp = /\s+(\d+\s+\d+\s+obj[\b\s<])$/; const CHECK_CONTENT_LENGTH = 25; const trailerBytes = new Uint8Array([116, 114, 97, 105, 108, 101, 114]); const startxrefBytes = new Uint8Array([115, 116, 97, 114, 116, 120, 114, 101, 102]); const objBytes = new Uint8Array([111, 98, 106]); const xrefBytes = new Uint8Array([47, 88, 82, 101, 102]); this.entries.length = 0; this._cacheMap.clear(); const stream = this.stream; stream.pos = 0; const buffer = stream.getBytes(), length = buffer.length; let position = stream.start; const trailers = [], xrefStms = []; while (position < length) { let ch = buffer[position]; if (ch === TAB || ch === LF || ch === CR || ch === SPACE) { ++position; continue; } if (ch === PERCENT) { do { ++position; if (position >= length) { break; } ch = buffer[position]; } while (ch !== LF && ch !== CR); continue; } const token = readToken(buffer, position); let m; if (token.startsWith("xref") && (token.length === 4 || /\s/.test(token[4]))) { position += skipUntil(buffer, position, trailerBytes); trailers.push(position); position += skipUntil(buffer, position, startxrefBytes); } else if (m = objRegExp.exec(token)) { const num = m[1] | 0, gen = m[2] | 0; let contentLength, startPos = position + token.length, updateEntries = false; if (!this.entries[num]) { updateEntries = true; } else if (this.entries[num].gen === gen) { try { const parser = new _parser.Parser({ lexer: new _parser.Lexer(stream.makeSubStream(startPos)) }); parser.getObj(); updateEntries = true; } catch (ex) { if (ex instanceof _core_utils.ParserEOFException) { (0, _util.warn)(`indexObjects -- checking object (${token}): "${ex}".`); } else { updateEntries = true; } } } if (updateEntries) { this.entries[num] = { offset: position - stream.start, gen, uncompressed: true }; } while (startPos < buffer.length) { const endPos = startPos + skipUntil(buffer, startPos, objBytes) + 4; contentLength = endPos - position; const checkPos = Math.max(endPos - CHECK_CONTENT_LENGTH, startPos); const tokenStr = (0, _util.bytesToString)(buffer.subarray(checkPos, endPos)); if (endobjRegExp.test(tokenStr)) { break; } else { const objToken = nestedObjRegExp.exec(tokenStr); if (objToken && objToken[1]) { (0, _util.warn)('indexObjects: Found new "obj" inside of another "obj", ' + 'caused by missing "endobj" -- trying to recover.'); contentLength -= objToken[1].length; break; } } startPos = endPos; } const content = buffer.subarray(position, position + contentLength); const xrefTagOffset = skipUntil(content, 0, xrefBytes); if (xrefTagOffset < contentLength && content[xrefTagOffset + 5] < 64) { xrefStms.push(position - stream.start); this.xrefstms[position - stream.start] = 1; } position += contentLength; } else if (token.startsWith("trailer") && (token.length === 7 || /\s/.test(token[7]))) { trailers.push(position); position += skipUntil(buffer, position, startxrefBytes); } else { position += token.length + 1; } } for (let i = 0, ii = xrefStms.length; i < ii; ++i) { this.startXRefQueue.push(xrefStms[i]); this.readXRef(true); } let trailerDict; for (let i = 0, ii = trailers.length; i < ii; ++i) { stream.pos = trailers[i]; const parser = new _parser.Parser({ lexer: new _parser.Lexer(stream), xref: this, allowStreams: true, recoveryMode: true }); const obj = parser.getObj(); if (!(0, _primitives.isCmd)(obj, "trailer")) { continue; } const dict = parser.getObj(); if (!(dict instanceof _primitives.Dict)) { continue; } try { const rootDict = dict.get("Root"); if (!(rootDict instanceof _primitives.Dict)) { continue; } const pagesDict = rootDict.get("Pages"); if (!(pagesDict instanceof _primitives.Dict)) { continue; } const pagesCount = pagesDict.get("Count"); if (!Number.isInteger(pagesCount)) { continue; } } catch (ex) { continue; } if (dict.has("ID")) { return dict; } trailerDict = dict; } if (trailerDict) { return trailerDict; } if (this.topDict) { return this.topDict; } throw new _util.InvalidPDFException("Invalid PDF structure."); } readXRef(recoveryMode = false) { const stream = this.stream; const startXRefParsedCache = new Set(); try { while (this.startXRefQueue.length) { const startXRef = this.startXRefQueue[0]; if (startXRefParsedCache.has(startXRef)) { (0, _util.warn)("readXRef - skipping XRef table since it was already parsed."); this.startXRefQueue.shift(); continue; } startXRefParsedCache.add(startXRef); stream.pos = startXRef + stream.start; const parser = new _parser.Parser({ lexer: new _parser.Lexer(stream), xref: this, allowStreams: true }); let obj = parser.getObj(); let dict; if ((0, _primitives.isCmd)(obj, "xref")) { dict = this.processXRefTable(parser); if (!this.topDict) { this.topDict = dict; } obj = dict.get("XRefStm"); if (Number.isInteger(obj)) { const pos = obj; if (!(pos in this.xrefstms)) { this.xrefstms[pos] = 1; this.startXRefQueue.push(pos); } } } else if (Number.isInteger(obj)) { if (!Number.isInteger(parser.getObj()) || !(0, _primitives.isCmd)(parser.getObj(), "obj") || !((obj = parser.getObj()) instanceof _base_stream.BaseStream)) { throw new _util.FormatError("Invalid XRef stream"); } dict = this.processXRefStream(obj); if (!this.topDict) { this.topDict = dict; } if (!dict) { throw new _util.FormatError("Failed to read XRef stream"); } } else { throw new _util.FormatError("Invalid XRef stream header"); } obj = dict.get("Prev"); if (Number.isInteger(obj)) { this.startXRefQueue.push(obj); } else if (obj instanceof _primitives.Ref) { this.startXRefQueue.push(obj.num); } this.startXRefQueue.shift(); } return this.topDict; } catch (e) { if (e instanceof _core_utils.MissingDataException) { throw e; } (0, _util.info)("(while reading XRef): " + e); this.startXRefQueue.shift(); } if (recoveryMode) { return undefined; } throw new _core_utils.XRefParseException(); } getEntry(i) { const xrefEntry = this.entries[i]; if (xrefEntry && !xrefEntry.free && xrefEntry.offset) { return xrefEntry; } return null; } fetchIfRef(obj, suppressEncryption = false) { if (obj instanceof _primitives.Ref) { return this.fetch(obj, suppressEncryption); } return obj; } fetch(ref, suppressEncryption = false) { if (!(ref instanceof _primitives.Ref)) { throw new Error("ref object is not a reference"); } const num = ref.num; const cacheEntry = this._cacheMap.get(num); if (cacheEntry !== undefined) { if (cacheEntry instanceof _primitives.Dict && !cacheEntry.objId) { cacheEntry.objId = ref.toString(); } return cacheEntry; } let xrefEntry = this.getEntry(num); if (xrefEntry === null) { this._cacheMap.set(num, xrefEntry); return xrefEntry; } if (this._pendingRefs.has(ref)) { this._pendingRefs.remove(ref); (0, _util.warn)(`Ignoring circular reference: ${ref}.`); return _primitives.CIRCULAR_REF; } this._pendingRefs.put(ref); try { if (xrefEntry.uncompressed) { xrefEntry = this.fetchUncompressed(ref, xrefEntry, suppressEncryption); } else { xrefEntry = this.fetchCompressed(ref, xrefEntry, suppressEncryption); } this._pendingRefs.remove(ref); } catch (ex) { this._pendingRefs.remove(ref); throw ex; } if (xrefEntry instanceof _primitives.Dict) { xrefEntry.objId = ref.toString(); } else if (xrefEntry instanceof _base_stream.BaseStream) { xrefEntry.dict.objId = ref.toString(); } return xrefEntry; } fetchUncompressed(ref, xrefEntry, suppressEncryption = false) { const gen = ref.gen; let num = ref.num; if (xrefEntry.gen !== gen) { throw new _core_utils.XRefEntryException(`Inconsistent generation in XRef: ${ref}`); } const stream = this.stream.makeSubStream(xrefEntry.offset + this.stream.start); const parser = new _parser.Parser({ lexer: new _parser.Lexer(stream), xref: this, allowStreams: true }); const obj1 = parser.getObj(); const obj2 = parser.getObj(); const obj3 = parser.getObj(); if (obj1 !== num || obj2 !== gen || !(obj3 instanceof _primitives.Cmd)) { throw new _core_utils.XRefEntryException(`Bad (uncompressed) XRef entry: ${ref}`); } if (obj3.cmd !== "obj") { if (obj3.cmd.startsWith("obj")) { num = parseInt(obj3.cmd.substring(3), 10); if (!Number.isNaN(num)) { return num; } } throw new _core_utils.XRefEntryException(`Bad (uncompressed) XRef entry: ${ref}`); } if (this.encrypt && !suppressEncryption) { xrefEntry = parser.getObj(this.encrypt.createCipherTransform(num, gen)); } else { xrefEntry = parser.getObj(); } if (!(xrefEntry instanceof _base_stream.BaseStream)) { this._cacheMap.set(num, xrefEntry); } return xrefEntry; } fetchCompressed(ref, xrefEntry, suppressEncryption = false) { const tableOffset = xrefEntry.offset; const stream = this.fetch(_primitives.Ref.get(tableOffset, 0)); if (!(stream instanceof _base_stream.BaseStream)) { throw new _util.FormatError("bad ObjStm stream"); } const first = stream.dict.get("First"); const n = stream.dict.get("N"); if (!Number.isInteger(first) || !Number.isInteger(n)) { throw new _util.FormatError("invalid first and n parameters for ObjStm stream"); } let parser = new _parser.Parser({ lexer: new _parser.Lexer(stream), xref: this, allowStreams: true }); const nums = new Array(n); const offsets = new Array(n); for (let i = 0; i < n; ++i) { const num = parser.getObj(); if (!Number.isInteger(num)) { throw new _util.FormatError(`invalid object number in the ObjStm stream: ${num}`); } const offset = parser.getObj(); if (!Number.isInteger(offset)) { throw new _util.FormatError(`invalid object offset in the ObjStm stream: ${offset}`); } nums[i] = num; offsets[i] = offset; } const start = (stream.start || 0) + first; const entries = new Array(n); for (let i = 0; i < n; ++i) { const length = i < n - 1 ? offsets[i + 1] - offsets[i] : undefined; if (length < 0) { throw new _util.FormatError("Invalid offset in the ObjStm stream."); } parser = new _parser.Parser({ lexer: new _parser.Lexer(stream.makeSubStream(start + offsets[i], length, stream.dict)), xref: this, allowStreams: true }); const obj = parser.getObj(); entries[i] = obj; if (obj instanceof _base_stream.BaseStream) { continue; } const num = nums[i], entry = this.entries[num]; if (entry && entry.offset === tableOffset && entry.gen === i) { this._cacheMap.set(num, obj); } } xrefEntry = entries[xrefEntry.gen]; if (xrefEntry === undefined) { throw new _core_utils.XRefEntryException(`Bad (compressed) XRef entry: ${ref}`); } return xrefEntry; } async fetchIfRefAsync(obj, suppressEncryption) { if (obj instanceof _primitives.Ref) { return this.fetchAsync(obj, suppressEncryption); } return obj; } async fetchAsync(ref, suppressEncryption) { try { return this.fetch(ref, suppressEncryption); } catch (ex) { if (!(ex instanceof _core_utils.MissingDataException)) { throw ex; } await this.pdfManager.requestRange(ex.begin, ex.end); return this.fetchAsync(ref, suppressEncryption); } } getCatalogObj() { return this.root; } } exports.XRef = XRef; /***/ }), /* 99 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.MessageHandler = void 0; var _util = __w_pdfjs_require__(2); const CallbackKind = { UNKNOWN: 0, DATA: 1, ERROR: 2 }; const StreamKind = { UNKNOWN: 0, CANCEL: 1, CANCEL_COMPLETE: 2, CLOSE: 3, ENQUEUE: 4, ERROR: 5, PULL: 6, PULL_COMPLETE: 7, START_COMPLETE: 8 }; function wrapReason(reason) { if (!(reason instanceof Error || typeof reason === "object" && reason !== null)) { (0, _util.warn)('wrapReason: Expected "reason" to be a (possibly cloned) Error.'); return reason; } switch (reason.name) { case "AbortException": return new _util.AbortException(reason.message); case "MissingPDFException": return new _util.MissingPDFException(reason.message); case "PasswordException": return new _util.PasswordException(reason.message, reason.code); case "UnexpectedResponseException": return new _util.UnexpectedResponseException(reason.message, reason.status); case "UnknownErrorException": return new _util.UnknownErrorException(reason.message, reason.details); default: return new _util.UnknownErrorException(reason.message, reason.toString()); } } class MessageHandler { constructor(sourceName, targetName, comObj) { this.sourceName = sourceName; this.targetName = targetName; this.comObj = comObj; this.callbackId = 1; this.streamId = 1; this.streamSinks = Object.create(null); this.streamControllers = Object.create(null); this.callbackCapabilities = Object.create(null); this.actionHandler = Object.create(null); this._onComObjOnMessage = event => { const data = event.data; if (data.targetName !== this.sourceName) { return; } if (data.stream) { this._processStreamMessage(data); return; } if (data.callback) { const callbackId = data.callbackId; const capability = this.callbackCapabilities[callbackId]; if (!capability) { throw new Error(`Cannot resolve callback ${callbackId}`); } delete this.callbackCapabilities[callbackId]; if (data.callback === CallbackKind.DATA) { capability.resolve(data.data); } else if (data.callback === CallbackKind.ERROR) { capability.reject(wrapReason(data.reason)); } else { throw new Error("Unexpected callback case"); } return; } const action = this.actionHandler[data.action]; if (!action) { throw new Error(`Unknown action from worker: ${data.action}`); } if (data.callbackId) { const cbSourceName = this.sourceName; const cbTargetName = data.sourceName; new Promise(function (resolve) { resolve(action(data.data)); }).then(function (result) { comObj.postMessage({ sourceName: cbSourceName, targetName: cbTargetName, callback: CallbackKind.DATA, callbackId: data.callbackId, data: result }); }, function (reason) { comObj.postMessage({ sourceName: cbSourceName, targetName: cbTargetName, callback: CallbackKind.ERROR, callbackId: data.callbackId, reason: wrapReason(reason) }); }); return; } if (data.streamId) { this._createStreamSink(data); return; } action(data.data); }; comObj.addEventListener("message", this._onComObjOnMessage); } on(actionName, handler) { const ah = this.actionHandler; if (ah[actionName]) { throw new Error(`There is already an actionName called "${actionName}"`); } ah[actionName] = handler; } send(actionName, data, transfers) { this.comObj.postMessage({ sourceName: this.sourceName, targetName: this.targetName, action: actionName, data }, transfers); } sendWithPromise(actionName, data, transfers) { const callbackId = this.callbackId++; const capability = (0, _util.createPromiseCapability)(); this.callbackCapabilities[callbackId] = capability; try { this.comObj.postMessage({ sourceName: this.sourceName, targetName: this.targetName, action: actionName, callbackId, data }, transfers); } catch (ex) { capability.reject(ex); } return capability.promise; } sendWithStream(actionName, data, queueingStrategy, transfers) { const streamId = this.streamId++, sourceName = this.sourceName, targetName = this.targetName, comObj = this.comObj; return new ReadableStream({ start: controller => { const startCapability = (0, _util.createPromiseCapability)(); this.streamControllers[streamId] = { controller, startCall: startCapability, pullCall: null, cancelCall: null, isClosed: false }; comObj.postMessage({ sourceName, targetName, action: actionName, streamId, data, desiredSize: controller.desiredSize }, transfers); return startCapability.promise; }, pull: controller => { const pullCapability = (0, _util.createPromiseCapability)(); this.streamControllers[streamId].pullCall = pullCapability; comObj.postMessage({ sourceName, targetName, stream: StreamKind.PULL, streamId, desiredSize: controller.desiredSize }); return pullCapability.promise; }, cancel: reason => { (0, _util.assert)(reason instanceof Error, "cancel must have a valid reason"); const cancelCapability = (0, _util.createPromiseCapability)(); this.streamControllers[streamId].cancelCall = cancelCapability; this.streamControllers[streamId].isClosed = true; comObj.postMessage({ sourceName, targetName, stream: StreamKind.CANCEL, streamId, reason: wrapReason(reason) }); return cancelCapability.promise; } }, queueingStrategy); } _createStreamSink(data) { const streamId = data.streamId, sourceName = this.sourceName, targetName = data.sourceName, comObj = this.comObj; const self = this, action = this.actionHandler[data.action]; const streamSink = { enqueue(chunk, size = 1, transfers) { if (this.isCancelled) { return; } const lastDesiredSize = this.desiredSize; this.desiredSize -= size; if (lastDesiredSize > 0 && this.desiredSize <= 0) { this.sinkCapability = (0, _util.createPromiseCapability)(); this.ready = this.sinkCapability.promise; } comObj.postMessage({ sourceName, targetName, stream: StreamKind.ENQUEUE, streamId, chunk }, transfers); }, close() { if (this.isCancelled) { return; } this.isCancelled = true; comObj.postMessage({ sourceName, targetName, stream: StreamKind.CLOSE, streamId }); delete self.streamSinks[streamId]; }, error(reason) { (0, _util.assert)(reason instanceof Error, "error must have a valid reason"); if (this.isCancelled) { return; } this.isCancelled = true; comObj.postMessage({ sourceName, targetName, stream: StreamKind.ERROR, streamId, reason: wrapReason(reason) }); }, sinkCapability: (0, _util.createPromiseCapability)(), onPull: null, onCancel: null, isCancelled: false, desiredSize: data.desiredSize, ready: null }; streamSink.sinkCapability.resolve(); streamSink.ready = streamSink.sinkCapability.promise; this.streamSinks[streamId] = streamSink; new Promise(function (resolve) { resolve(action(data.data, streamSink)); }).then(function () { comObj.postMessage({ sourceName, targetName, stream: StreamKind.START_COMPLETE, streamId, success: true }); }, function (reason) { comObj.postMessage({ sourceName, targetName, stream: StreamKind.START_COMPLETE, streamId, reason: wrapReason(reason) }); }); } _processStreamMessage(data) { const streamId = data.streamId, sourceName = this.sourceName, targetName = data.sourceName, comObj = this.comObj; const streamController = this.streamControllers[streamId], streamSink = this.streamSinks[streamId]; switch (data.stream) { case StreamKind.START_COMPLETE: if (data.success) { streamController.startCall.resolve(); } else { streamController.startCall.reject(wrapReason(data.reason)); } break; case StreamKind.PULL_COMPLETE: if (data.success) { streamController.pullCall.resolve(); } else { streamController.pullCall.reject(wrapReason(data.reason)); } break; case StreamKind.PULL: if (!streamSink) { comObj.postMessage({ sourceName, targetName, stream: StreamKind.PULL_COMPLETE, streamId, success: true }); break; } if (streamSink.desiredSize <= 0 && data.desiredSize > 0) { streamSink.sinkCapability.resolve(); } streamSink.desiredSize = data.desiredSize; new Promise(function (resolve) { resolve(streamSink.onPull && streamSink.onPull()); }).then(function () { comObj.postMessage({ sourceName, targetName, stream: StreamKind.PULL_COMPLETE, streamId, success: true }); }, function (reason) { comObj.postMessage({ sourceName, targetName, stream: StreamKind.PULL_COMPLETE, streamId, reason: wrapReason(reason) }); }); break; case StreamKind.ENQUEUE: (0, _util.assert)(streamController, "enqueue should have stream controller"); if (streamController.isClosed) { break; } streamController.controller.enqueue(data.chunk); break; case StreamKind.CLOSE: (0, _util.assert)(streamController, "close should have stream controller"); if (streamController.isClosed) { break; } streamController.isClosed = true; streamController.controller.close(); this._deleteStreamController(streamController, streamId); break; case StreamKind.ERROR: (0, _util.assert)(streamController, "error should have stream controller"); streamController.controller.error(wrapReason(data.reason)); this._deleteStreamController(streamController, streamId); break; case StreamKind.CANCEL_COMPLETE: if (data.success) { streamController.cancelCall.resolve(); } else { streamController.cancelCall.reject(wrapReason(data.reason)); } this._deleteStreamController(streamController, streamId); break; case StreamKind.CANCEL: if (!streamSink) { break; } new Promise(function (resolve) { resolve(streamSink.onCancel && streamSink.onCancel(wrapReason(data.reason))); }).then(function () { comObj.postMessage({ sourceName, targetName, stream: StreamKind.CANCEL_COMPLETE, streamId, success: true }); }, function (reason) { comObj.postMessage({ sourceName, targetName, stream: StreamKind.CANCEL_COMPLETE, streamId, reason: wrapReason(reason) }); }); streamSink.sinkCapability.reject(wrapReason(data.reason)); streamSink.isCancelled = true; delete this.streamSinks[streamId]; break; default: throw new Error("Unexpected stream case"); } } async _deleteStreamController(streamController, streamId) { await Promise.allSettled([streamController.startCall && streamController.startCall.promise, streamController.pullCall && streamController.pullCall.promise, streamController.cancelCall && streamController.cancelCall.promise]); delete this.streamControllers[streamId]; } destroy() { this.comObj.removeEventListener("message", this._onComObjOnMessage); } } exports.MessageHandler = MessageHandler; /***/ }), /* 100 */ /***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => { Object.defineProperty(exports, "__esModule", ({ value: true })); exports.PDFWorkerStream = void 0; var _util = __w_pdfjs_require__(2); class PDFWorkerStream { constructor(msgHandler) { this._msgHandler = msgHandler; this._contentLength = null; this._fullRequestReader = null; this._rangeRequestReaders = []; } getFullReader() { (0, _util.assert)(!this._fullRequestReader, "PDFWorkerStream.getFullReader can only be called once."); this._fullRequestReader = new PDFWorkerStreamReader(this._msgHandler); return this._fullRequestReader; } getRangeReader(begin, end) { const reader = new PDFWorkerStreamRangeReader(begin, end, this._msgHandler); this._rangeRequestReaders.push(reader); return reader; } cancelAllRequests(reason) { if (this._fullRequestReader) { this._fullRequestReader.cancel(reason); } for (const reader of this._rangeRequestReaders.slice(0)) { reader.cancel(reason); } } } exports.PDFWorkerStream = PDFWorkerStream; class PDFWorkerStreamReader { constructor(msgHandler) { this._msgHandler = msgHandler; this.onProgress = null; this._contentLength = null; this._isRangeSupported = false; this._isStreamingSupported = false; const readableStream = this._msgHandler.sendWithStream("GetReader"); this._reader = readableStream.getReader(); this._headersReady = this._msgHandler.sendWithPromise("ReaderHeadersReady").then(data => { this._isStreamingSupported = data.isStreamingSupported; this._isRangeSupported = data.isRangeSupported; this._contentLength = data.contentLength; }); } get headersReady() { return this._headersReady; } get contentLength() { return this._contentLength; } get isStreamingSupported() { return this._isStreamingSupported; } get isRangeSupported() { return this._isRangeSupported; } async read() { const { value, done } = await this._reader.read(); if (done) { return { value: undefined, done: true }; } return { value: value.buffer, done: false }; } cancel(reason) { this._reader.cancel(reason); } } class PDFWorkerStreamRangeReader { constructor(begin, end, msgHandler) { this._msgHandler = msgHandler; this.onProgress = null; const readableStream = this._msgHandler.sendWithStream("GetRangeReader", { begin, end }); this._reader = readableStream.getReader(); } get isStreamingSupported() { return false; } async read() { const { value, done } = await this._reader.read(); if (done) { return { value: undefined, done: true }; } return { value: value.buffer, done: false }; } cancel(reason) { this._reader.cancel(reason); } } /***/ }) /******/ ]); /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __w_pdfjs_require__(moduleId) { /******/ // Check if module is in cache /******/ var cachedModule = __webpack_module_cache__[moduleId]; /******/ if (cachedModule !== undefined) { /******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleId] = { /******/ // no module.id needed /******/ // no module.loaded needed /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ __webpack_modules__[moduleId](module, module.exports, __w_pdfjs_require__); /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /************************************************************************/ /******/ /* webpack/runtime/define property getters */ /******/ (() => { /******/ // define getter functions for harmony exports /******/ __w_pdfjs_require__.d = (exports, definition) => { /******/ for(var key in definition) { /******/ if(__w_pdfjs_require__.o(definition, key) && !__w_pdfjs_require__.o(exports, key)) { /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); /******/ } /******/ } /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ (() => { /******/ __w_pdfjs_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)); /******/ })(); /******/ /******/ /* webpack/runtime/make namespace object */ /******/ (() => { /******/ // define __esModule on exports /******/ __w_pdfjs_require__.r = (exports) => { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ })(); /******/ /************************************************************************/ var __webpack_exports__ = {}; // This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. (() => { var exports = __webpack_exports__; Object.defineProperty(exports, "__esModule", ({ value: true })); Object.defineProperty(exports, "WorkerMessageHandler", ({ enumerable: true, get: function () { return _worker.WorkerMessageHandler; } })); var _worker = __w_pdfjs_require__(1); })(); /******/ return __webpack_exports__; /******/ })() ; }); }); /* Copyright 2021 Mozilla Foundation * * 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 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ (typeof window !== "undefined" ? window : {} ).pdfjsWorker = pdf_worker; var pdf_worker_entry = { }; var worker = /*#__PURE__*/Object.freeze(/*#__PURE__*/_mergeNamespaces({ __proto__: null, 'default': pdf_worker_entry }, [pdf_worker_entry])); var BetterPDFPlugin = /** @class */ (function (_super) { __extends(BetterPDFPlugin, _super); function BetterPDFPlugin() { return _super !== null && _super.apply(this, arguments) || this; } BetterPDFPlugin.prototype.onload = function () { return __awaiter(this, void 0, void 0, function () { var _a, _b, _c, _d; var _this = this; return __generator(this, function (_e) { switch (_e.label) { case 0: console.log("Better PDF loading..."); _a = this; _c = (_b = Object).assign; _d = [new BetterPdfSettings()]; return [4 /*yield*/, this.loadData()]; case 1: _a.settings = _c.apply(_b, _d.concat([_e.sent()])); this.addSettingTab(new BetterPdfSettingsTab(this.app, this)); pdf.GlobalWorkerOptions.workerSrc = worker; this.registerMarkdownCodeBlockProcessor("pdf", function (src, el) { return __awaiter(_this, void 0, void 0, function () { var parameters, arrayBuffer, buffer, document_1, _i, _a, pageNumber, page, host, href, offsetX, offsetY, viewport, canvas, context, renderContext, error_1; return __generator(this, function (_b) { switch (_b.label) { case 0: parameters = null; try { parameters = this.readParameters(src); } catch (e) { el.createEl("h2", { text: "PDF Parameters invalid: " + e.message }); } if (!(parameters !== null)) return [3 /*break*/, 10]; _b.label = 1; case 1: _b.trys.push([1, 9, , 10]); return [4 /*yield*/, this.app.vault.adapter.readBinary(parameters.url)]; case 2: arrayBuffer = _b.sent(); buffer = Buffer.from(arrayBuffer); return [4 /*yield*/, pdf.getDocument(buffer).promise]; case 3: document_1 = _b.sent(); _i = 0, _a = parameters.page; _b.label = 4; case 4: if (!(_i < _a.length)) return [3 /*break*/, 8]; pageNumber = _a[_i]; return [4 /*yield*/, document_1.getPage(pageNumber)]; case 5: page = _b.sent(); host = el; // Create hyperlink for Page if (parameters.link) { href = el.createEl("a"); href.href = parameters.url + "#page=" + pageNumber; href.className = "internal-link"; host = href; } offsetX = Math.floor(parameters.rect[0] * -1 * parameters.scale); offsetY = Math.floor(parameters.rect[1] * -1 * parameters.scale); viewport = page.getViewport({ scale: parameters.scale, rotation: parameters.rotation, offsetX: offsetX, offsetY: offsetY, }); canvas = host.createEl("canvas"); if (parameters.fit) { canvas.style.width = "100%"; } context = canvas.getContext("2d"); if (parameters.rect[2] < 1) { canvas.height = viewport.height; canvas.width = viewport.width; } else { canvas.height = Math.floor(parameters.rect[2] * parameters.scale); canvas.width = Math.floor(parameters.rect[3] * parameters.scale); } renderContext = { canvasContext: context, viewport: viewport, }; return [4 /*yield*/, page.render(renderContext)]; case 6: _b.sent(); _b.label = 7; case 7: _i++; return [3 /*break*/, 4]; case 8: return [3 /*break*/, 10]; case 9: error_1 = _b.sent(); el.createEl("h2", { text: error_1 }); return [3 /*break*/, 10]; case 10: return [2 /*return*/]; } }); }); }); return [2 /*return*/]; } }); }); }; BetterPDFPlugin.prototype.readParameters = function (jsonString) { // "url" : [[file.pdf]] is an invalid json since it misses quotation marks in value if (jsonString.contains("[[") && !jsonString.contains('"[[')) { jsonString = jsonString.replace("[[", '"[['); jsonString = jsonString.replace("]]", ']]"'); } var parameters = JSON.parse(jsonString); //Transform internal Link to external if (parameters.url.startsWith("[[")) { parameters.url = parameters.url.substr(2, parameters.url.length - 4); parameters.url = this.app.metadataCache.getFirstLinkpathDest(parameters.url, "").path; } if (parameters.link === undefined) { parameters.link = this.settings.link_by_default; } //Convert Range (if present) and Page to Array if (parameters.range !== undefined) { parameters.page = Array.from({ length: parameters.range[1] - parameters.range[0] + 1 }, function (_, i) { return parameters.range[0] + i; }); } if (typeof parameters.page === "number") { parameters.page = [parameters.page]; } if (parameters.page === undefined) { parameters.page = [1]; } // Flatten ranges for (var i = 0; i < parameters.page.length; i++) { if (Array.isArray(parameters.page[i])) { var range = parameters.page.splice(i, 1)[0]; for (var j = range[0]; j <= range[1]; j++) { parameters.page.splice(i, 0, j); i += 1; } } } if (parameters.scale === undefined || parameters.scale < 0.1 || parameters.scale > 10.0) { parameters.scale = 1.0; } if (parameters.fit === undefined) { parameters.fit = this.settings.fit_by_default; } if (parameters.rotation === undefined) { parameters.rotation = 0; } if (parameters.rect === undefined) { parameters.rect = [0, 0, 0, 0]; } return parameters; }; BetterPDFPlugin.prototype.onunload = function () { console.log("unloading Better PDF plugin..."); }; return BetterPDFPlugin; }(obsidian.Plugin)); module.exports = BetterPDFPlugin; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsInNldHRpbmdzLnRzIiwibm9kZV9tb2R1bGVzL3BkZmpzLWRpc3QvYnVpbGQvcGRmLmpzIiwibm9kZV9tb2R1bGVzL3BkZmpzLWRpc3QvYnVpbGQvcGRmLndvcmtlci5qcyIsIm5vZGVfbW9kdWxlcy9wZGZqcy1kaXN0L2J1aWxkL3BkZi53b3JrZXIuZW50cnkuanMiLCJtYWluLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XHJcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgb1trMl0gPSBtW2tdO1xyXG59KTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xyXG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xyXG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XHJcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcclxuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcclxuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IG4gPT09IFwicmV0dXJuXCIgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xyXG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgIHJldHVybiBjb29rZWQ7XHJcbn07XHJcblxyXG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XHJcbn0pIDogZnVuY3Rpb24obywgdikge1xyXG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcclxuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XHJcbiAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XHJcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICByZXR1cm4ga2luZCA9PT0gXCJtXCIgPyBmIDoga2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZFNldChyZWNlaXZlciwgc3RhdGUsIHZhbHVlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XHJcbn1cclxuIiwiaW1wb3J0IHsgQXBwLCBQbHVnaW4sIFBsdWdpblNldHRpbmdUYWIsIFNldHRpbmcgfSBmcm9tICdvYnNpZGlhbic7XG5cbmRlY2xhcmUgY2xhc3MgQmV0dGVyUERGUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHtcbiAgICBzZXR0aW5nczogQmV0dGVyUGRmU2V0dGluZ3M7XG59XG5cbmV4cG9ydCBjbGFzcyBCZXR0ZXJQZGZTZXR0aW5ncyB7XG4gICAgZml0X2J5X2RlZmF1bHQ6IGJvb2xlYW4gPSB0cnVlO1xuICAgIGxpbmtfYnlfZGVmYXVsdDogYm9vbGVhbiA9IHRydWU7XG59XG5cbmV4cG9ydCBjbGFzcyBCZXR0ZXJQZGZTZXR0aW5nc1RhYiBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xuICAgIHBsdWdpbjogQmV0dGVyUERGUGx1Z2luO1xuXG4gICAgY29uc3RydWN0b3IoYXBwOiBBcHAsIHBsdWdpbjogQmV0dGVyUERGUGx1Z2luKSB7XG4gICAgICAgIHN1cGVyKGFwcCwgcGx1Z2luKTtcbiAgICAgICAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XG4gICAgfVxuXG4gICAgZGlzcGxheSgpOiB2b2lkIHtcbiAgICAgICAgbGV0IHsgY29udGFpbmVyRWwgfSA9IHRoaXM7XG5cbiAgICAgICAgY29udGFpbmVyRWwuZW1wdHkoKTtcblxuICAgICAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKFwiRml0IHBhZ2VzIGJ5IGRlZmF1bHRcIilcbiAgICAgICAgICAgIC5zZXREZXNjKFwiV2hlbiB0dXJuZWQgb24sIHBhZ2VzIHdpbGwgYmUgc2NhbGVkIHRvIHRoZSB2aWV3IGJ5IGRlZmF1bHQuIENhbiBiZSBvdmVycmlkZGVuIHVzaW5nIHRoZSAnZml0JyBwYXJhbWV0ZXJcIilcbiAgICAgICAgICAgIC5hZGRUb2dnbGUodG9nZ2xlID0+IHRvZ2dsZS5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5maXRfYnlfZGVmYXVsdClcbiAgICAgICAgICAgICAgICAub25DaGFuZ2UoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmZpdF9ieV9kZWZhdWx0ID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcbiAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAgICAgICAuc2V0TmFtZShcIkxpbmsgcGFnZXMgYnkgZGVmYXVsdFwiKVxuICAgICAgICAgICAgLnNldERlc2MoXCJXaGVuIHR1cm5lZCBvbiwgcGFnZXMgd2lsbCBiZSBsaW5rZWQgdG8gdGhlaXIgZG9jdW1lbnQgYnkgZGVmYXVsdC4gQ2FuIGJlIG92ZXJyaWRkZW4gdXNpbmcgdGhlICdsaW5rJyBwYXJhbWV0ZXJcIilcbiAgICAgICAgICAgIC5hZGRUb2dnbGUodG9nZ2xlID0+IHRvZ2dsZS5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5saW5rX2J5X2RlZmF1bHQpXG4gICAgICAgICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5saW5rX2J5X2RlZmF1bHQgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICB9XG59IiwiLyoqXG4gKiBAbGljc3RhcnQgVGhlIGZvbGxvd2luZyBpcyB0aGUgZW50aXJlIGxpY2Vuc2Ugbm90aWNlIGZvciB0aGVcbiAqIEphdmFzY3JpcHQgY29kZSBpbiB0aGlzIHBhZ2VcbiAqXG4gKiBDb3B5cmlnaHQgMjAyMSBNb3ppbGxhIEZvdW5kYXRpb25cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKlxuICogQGxpY2VuZCBUaGUgYWJvdmUgaXMgdGhlIGVudGlyZSBsaWNlbnNlIG5vdGljZSBmb3IgdGhlXG4gKiBKYXZhc2NyaXB0IGNvZGUgaW4gdGhpcyBwYWdlXG4gKi9cblxuKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnKVxuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuXHRlbHNlIGlmKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZClcblx0XHRkZWZpbmUoXCJwZGZqcy1kaXN0L2J1aWxkL3BkZlwiLCBbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJwZGZqcy1kaXN0L2J1aWxkL3BkZlwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJwZGZqcy1kaXN0L2J1aWxkL3BkZlwiXSA9IHJvb3QucGRmanNMaWIgPSBmYWN0b3J5KCk7XG59KSh0aGlzLCBmdW5jdGlvbigpIHtcbnJldHVybiAvKioqKioqLyAoKCkgPT4geyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4vKioqKioqLyBcdFwidXNlIHN0cmljdFwiO1xuLyoqKioqKi8gXHR2YXIgX193ZWJwYWNrX21vZHVsZXNfXyA9IChbXG4vKiAwICovLFxuLyogMSAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5TdGF0VGltZXIgPSBleHBvcnRzLlJlbmRlcmluZ0NhbmNlbGxlZEV4Y2VwdGlvbiA9IGV4cG9ydHMuUGl4ZWxzUGVySW5jaCA9IGV4cG9ydHMuUGFnZVZpZXdwb3J0ID0gZXhwb3J0cy5QREZEYXRlU3RyaW5nID0gZXhwb3J0cy5MaW5rVGFyZ2V0ID0gZXhwb3J0cy5ET01TdGFuZGFyZEZvbnREYXRhRmFjdG9yeSA9IGV4cG9ydHMuRE9NU1ZHRmFjdG9yeSA9IGV4cG9ydHMuRE9NQ2FudmFzRmFjdG9yeSA9IGV4cG9ydHMuRE9NQ01hcFJlYWRlckZhY3RvcnkgPSB2b2lkIDA7XG5leHBvcnRzLmFkZExpbmtBdHRyaWJ1dGVzID0gYWRkTGlua0F0dHJpYnV0ZXM7XG5leHBvcnRzLmRlcHJlY2F0ZWQgPSBkZXByZWNhdGVkO1xuZXhwb3J0cy5nZXRGaWxlbmFtZUZyb21VcmwgPSBnZXRGaWxlbmFtZUZyb21Vcmw7XG5leHBvcnRzLmdldFBkZkZpbGVuYW1lRnJvbVVybCA9IGdldFBkZkZpbGVuYW1lRnJvbVVybDtcbmV4cG9ydHMuZ2V0WGZhUGFnZVZpZXdwb3J0ID0gZ2V0WGZhUGFnZVZpZXdwb3J0O1xuZXhwb3J0cy5pc0RhdGFTY2hlbWUgPSBpc0RhdGFTY2hlbWU7XG5leHBvcnRzLmlzUGRmRmlsZSA9IGlzUGRmRmlsZTtcbmV4cG9ydHMuaXNWYWxpZEZldGNoVXJsID0gaXNWYWxpZEZldGNoVXJsO1xuZXhwb3J0cy5sb2FkU2NyaXB0ID0gbG9hZFNjcmlwdDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9iYXNlX2ZhY3RvcnkgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDUpO1xuXG5jb25zdCBERUZBVUxUX0xJTktfUkVMID0gXCJub29wZW5lciBub3JlZmVycmVyIG5vZm9sbG93XCI7XG5jb25zdCBTVkdfTlMgPSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI7XG5jb25zdCBQaXhlbHNQZXJJbmNoID0ge1xuICBDU1M6IDk2LjAsXG4gIFBERjogNzIuMCxcblxuICBnZXQgUERGX1RPX0NTU19VTklUUygpIHtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJQREZfVE9fQ1NTX1VOSVRTXCIsIHRoaXMuQ1NTIC8gdGhpcy5QREYpO1xuICB9XG5cbn07XG5leHBvcnRzLlBpeGVsc1BlckluY2ggPSBQaXhlbHNQZXJJbmNoO1xuXG5jbGFzcyBET01DYW52YXNGYWN0b3J5IGV4dGVuZHMgX2Jhc2VfZmFjdG9yeS5CYXNlQ2FudmFzRmFjdG9yeSB7XG4gIGNvbnN0cnVjdG9yKHtcbiAgICBvd25lckRvY3VtZW50ID0gZ2xvYmFsVGhpcy5kb2N1bWVudFxuICB9ID0ge30pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2RvY3VtZW50ID0gb3duZXJEb2N1bWVudDtcbiAgfVxuXG4gIF9jcmVhdGVDYW52YXMod2lkdGgsIGhlaWdodCkge1xuICAgIGNvbnN0IGNhbnZhcyA9IHRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG5cbiAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgIHJldHVybiBjYW52YXM7XG4gIH1cblxufVxuXG5leHBvcnRzLkRPTUNhbnZhc0ZhY3RvcnkgPSBET01DYW52YXNGYWN0b3J5O1xuXG5hc3luYyBmdW5jdGlvbiBmZXRjaERhdGEodXJsLCBhc1R5cGVkQXJyYXkgPSBmYWxzZSkge1xuICBpZiAoaXNWYWxpZEZldGNoVXJsKHVybCwgZG9jdW1lbnQuYmFzZVVSSSkpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCk7XG5cbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IocmVzcG9uc2Uuc3RhdHVzVGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFzVHlwZWRBcnJheSA/IG5ldyBVaW50OEFycmF5KGF3YWl0IHJlc3BvbnNlLmFycmF5QnVmZmVyKCkpIDogKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKGF3YWl0IHJlc3BvbnNlLnRleHQoKSk7XG4gIH1cblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICByZXF1ZXN0Lm9wZW4oXCJHRVRcIiwgdXJsLCB0cnVlKTtcblxuICAgIGlmIChhc1R5cGVkQXJyYXkpIHtcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gXCJhcnJheWJ1ZmZlclwiO1xuICAgIH1cblxuICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xuICAgICAgaWYgKHJlcXVlc3QucmVhZHlTdGF0ZSAhPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMjAwIHx8IHJlcXVlc3Quc3RhdHVzID09PSAwKSB7XG4gICAgICAgIGxldCBkYXRhO1xuXG4gICAgICAgIGlmIChhc1R5cGVkQXJyYXkgJiYgcmVxdWVzdC5yZXNwb25zZSkge1xuICAgICAgICAgIGRhdGEgPSBuZXcgVWludDhBcnJheShyZXF1ZXN0LnJlc3BvbnNlKTtcbiAgICAgICAgfSBlbHNlIGlmICghYXNUeXBlZEFycmF5ICYmIHJlcXVlc3QucmVzcG9uc2VUZXh0KSB7XG4gICAgICAgICAgZGF0YSA9ICgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShyZXF1ZXN0LnJlc3BvbnNlVGV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJlamVjdChuZXcgRXJyb3IocmVxdWVzdC5zdGF0dXNUZXh0KSk7XG4gICAgfTtcblxuICAgIHJlcXVlc3Quc2VuZChudWxsKTtcbiAgfSk7XG59XG5cbmNsYXNzIERPTUNNYXBSZWFkZXJGYWN0b3J5IGV4dGVuZHMgX2Jhc2VfZmFjdG9yeS5CYXNlQ01hcFJlYWRlckZhY3Rvcnkge1xuICBfZmV0Y2hEYXRhKHVybCwgY29tcHJlc3Npb25UeXBlKSB7XG4gICAgcmV0dXJuIGZldGNoRGF0YSh1cmwsIHRoaXMuaXNDb21wcmVzc2VkKS50aGVuKGRhdGEgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY01hcERhdGE6IGRhdGEsXG4gICAgICAgIGNvbXByZXNzaW9uVHlwZVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuRE9NQ01hcFJlYWRlckZhY3RvcnkgPSBET01DTWFwUmVhZGVyRmFjdG9yeTtcblxuY2xhc3MgRE9NU3RhbmRhcmRGb250RGF0YUZhY3RvcnkgZXh0ZW5kcyBfYmFzZV9mYWN0b3J5LkJhc2VTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSB7XG4gIF9mZXRjaERhdGEodXJsKSB7XG4gICAgcmV0dXJuIGZldGNoRGF0YSh1cmwsIHRydWUpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5ET01TdGFuZGFyZEZvbnREYXRhRmFjdG9yeSA9IERPTVN0YW5kYXJkRm9udERhdGFGYWN0b3J5O1xuXG5jbGFzcyBET01TVkdGYWN0b3J5IGV4dGVuZHMgX2Jhc2VfZmFjdG9yeS5CYXNlU1ZHRmFjdG9yeSB7XG4gIF9jcmVhdGVTVkcodHlwZSkge1xuICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCB0eXBlKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuRE9NU1ZHRmFjdG9yeSA9IERPTVNWR0ZhY3Rvcnk7XG5cbmNsYXNzIFBhZ2VWaWV3cG9ydCB7XG4gIGNvbnN0cnVjdG9yKHtcbiAgICB2aWV3Qm94LFxuICAgIHNjYWxlLFxuICAgIHJvdGF0aW9uLFxuICAgIG9mZnNldFggPSAwLFxuICAgIG9mZnNldFkgPSAwLFxuICAgIGRvbnRGbGlwID0gZmFsc2VcbiAgfSkge1xuICAgIHRoaXMudmlld0JveCA9IHZpZXdCb3g7XG4gICAgdGhpcy5zY2FsZSA9IHNjYWxlO1xuICAgIHRoaXMucm90YXRpb24gPSByb3RhdGlvbjtcbiAgICB0aGlzLm9mZnNldFggPSBvZmZzZXRYO1xuICAgIHRoaXMub2Zmc2V0WSA9IG9mZnNldFk7XG4gICAgY29uc3QgY2VudGVyWCA9ICh2aWV3Qm94WzJdICsgdmlld0JveFswXSkgLyAyO1xuICAgIGNvbnN0IGNlbnRlclkgPSAodmlld0JveFszXSArIHZpZXdCb3hbMV0pIC8gMjtcbiAgICBsZXQgcm90YXRlQSwgcm90YXRlQiwgcm90YXRlQywgcm90YXRlRDtcbiAgICByb3RhdGlvbiAlPSAzNjA7XG5cbiAgICBpZiAocm90YXRpb24gPCAwKSB7XG4gICAgICByb3RhdGlvbiArPSAzNjA7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyb3RhdGlvbikge1xuICAgICAgY2FzZSAxODA6XG4gICAgICAgIHJvdGF0ZUEgPSAtMTtcbiAgICAgICAgcm90YXRlQiA9IDA7XG4gICAgICAgIHJvdGF0ZUMgPSAwO1xuICAgICAgICByb3RhdGVEID0gMTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgOTA6XG4gICAgICAgIHJvdGF0ZUEgPSAwO1xuICAgICAgICByb3RhdGVCID0gMTtcbiAgICAgICAgcm90YXRlQyA9IDE7XG4gICAgICAgIHJvdGF0ZUQgPSAwO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAyNzA6XG4gICAgICAgIHJvdGF0ZUEgPSAwO1xuICAgICAgICByb3RhdGVCID0gLTE7XG4gICAgICAgIHJvdGF0ZUMgPSAtMTtcbiAgICAgICAgcm90YXRlRCA9IDA7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDA6XG4gICAgICAgIHJvdGF0ZUEgPSAxO1xuICAgICAgICByb3RhdGVCID0gMDtcbiAgICAgICAgcm90YXRlQyA9IDA7XG4gICAgICAgIHJvdGF0ZUQgPSAtMTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhZ2VWaWV3cG9ydDogSW52YWxpZCByb3RhdGlvbiwgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDkwIGRlZ3JlZXMuXCIpO1xuICAgIH1cblxuICAgIGlmIChkb250RmxpcCkge1xuICAgICAgcm90YXRlQyA9IC1yb3RhdGVDO1xuICAgICAgcm90YXRlRCA9IC1yb3RhdGVEO1xuICAgIH1cblxuICAgIGxldCBvZmZzZXRDYW52YXNYLCBvZmZzZXRDYW52YXNZO1xuICAgIGxldCB3aWR0aCwgaGVpZ2h0O1xuXG4gICAgaWYgKHJvdGF0ZUEgPT09IDApIHtcbiAgICAgIG9mZnNldENhbnZhc1ggPSBNYXRoLmFicyhjZW50ZXJZIC0gdmlld0JveFsxXSkgKiBzY2FsZSArIG9mZnNldFg7XG4gICAgICBvZmZzZXRDYW52YXNZID0gTWF0aC5hYnMoY2VudGVyWCAtIHZpZXdCb3hbMF0pICogc2NhbGUgKyBvZmZzZXRZO1xuICAgICAgd2lkdGggPSBNYXRoLmFicyh2aWV3Qm94WzNdIC0gdmlld0JveFsxXSkgKiBzY2FsZTtcbiAgICAgIGhlaWdodCA9IE1hdGguYWJzKHZpZXdCb3hbMl0gLSB2aWV3Qm94WzBdKSAqIHNjYWxlO1xuICAgIH0gZWxzZSB7XG4gICAgICBvZmZzZXRDYW52YXNYID0gTWF0aC5hYnMoY2VudGVyWCAtIHZpZXdCb3hbMF0pICogc2NhbGUgKyBvZmZzZXRYO1xuICAgICAgb2Zmc2V0Q2FudmFzWSA9IE1hdGguYWJzKGNlbnRlclkgLSB2aWV3Qm94WzFdKSAqIHNjYWxlICsgb2Zmc2V0WTtcbiAgICAgIHdpZHRoID0gTWF0aC5hYnModmlld0JveFsyXSAtIHZpZXdCb3hbMF0pICogc2NhbGU7XG4gICAgICBoZWlnaHQgPSBNYXRoLmFicyh2aWV3Qm94WzNdIC0gdmlld0JveFsxXSkgKiBzY2FsZTtcbiAgICB9XG5cbiAgICB0aGlzLnRyYW5zZm9ybSA9IFtyb3RhdGVBICogc2NhbGUsIHJvdGF0ZUIgKiBzY2FsZSwgcm90YXRlQyAqIHNjYWxlLCByb3RhdGVEICogc2NhbGUsIG9mZnNldENhbnZhc1ggLSByb3RhdGVBICogc2NhbGUgKiBjZW50ZXJYIC0gcm90YXRlQyAqIHNjYWxlICogY2VudGVyWSwgb2Zmc2V0Q2FudmFzWSAtIHJvdGF0ZUIgKiBzY2FsZSAqIGNlbnRlclggLSByb3RhdGVEICogc2NhbGUgKiBjZW50ZXJZXTtcbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gIH1cblxuICBjbG9uZSh7XG4gICAgc2NhbGUgPSB0aGlzLnNjYWxlLFxuICAgIHJvdGF0aW9uID0gdGhpcy5yb3RhdGlvbixcbiAgICBvZmZzZXRYID0gdGhpcy5vZmZzZXRYLFxuICAgIG9mZnNldFkgPSB0aGlzLm9mZnNldFksXG4gICAgZG9udEZsaXAgPSBmYWxzZVxuICB9ID0ge30pIHtcbiAgICByZXR1cm4gbmV3IFBhZ2VWaWV3cG9ydCh7XG4gICAgICB2aWV3Qm94OiB0aGlzLnZpZXdCb3guc2xpY2UoKSxcbiAgICAgIHNjYWxlLFxuICAgICAgcm90YXRpb24sXG4gICAgICBvZmZzZXRYLFxuICAgICAgb2Zmc2V0WSxcbiAgICAgIGRvbnRGbGlwXG4gICAgfSk7XG4gIH1cblxuICBjb252ZXJ0VG9WaWV3cG9ydFBvaW50KHgsIHkpIHtcbiAgICByZXR1cm4gX3V0aWwuVXRpbC5hcHBseVRyYW5zZm9ybShbeCwgeV0sIHRoaXMudHJhbnNmb3JtKTtcbiAgfVxuXG4gIGNvbnZlcnRUb1ZpZXdwb3J0UmVjdGFuZ2xlKHJlY3QpIHtcbiAgICBjb25zdCB0b3BMZWZ0ID0gX3V0aWwuVXRpbC5hcHBseVRyYW5zZm9ybShbcmVjdFswXSwgcmVjdFsxXV0sIHRoaXMudHJhbnNmb3JtKTtcblxuICAgIGNvbnN0IGJvdHRvbVJpZ2h0ID0gX3V0aWwuVXRpbC5hcHBseVRyYW5zZm9ybShbcmVjdFsyXSwgcmVjdFszXV0sIHRoaXMudHJhbnNmb3JtKTtcblxuICAgIHJldHVybiBbdG9wTGVmdFswXSwgdG9wTGVmdFsxXSwgYm90dG9tUmlnaHRbMF0sIGJvdHRvbVJpZ2h0WzFdXTtcbiAgfVxuXG4gIGNvbnZlcnRUb1BkZlBvaW50KHgsIHkpIHtcbiAgICByZXR1cm4gX3V0aWwuVXRpbC5hcHBseUludmVyc2VUcmFuc2Zvcm0oW3gsIHldLCB0aGlzLnRyYW5zZm9ybSk7XG4gIH1cblxufVxuXG5leHBvcnRzLlBhZ2VWaWV3cG9ydCA9IFBhZ2VWaWV3cG9ydDtcblxuY2xhc3MgUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uIGV4dGVuZHMgX3V0aWwuQmFzZUV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKG1zZywgdHlwZSkge1xuICAgIHN1cGVyKG1zZywgXCJSZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb25cIik7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uID0gUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uO1xuY29uc3QgTGlua1RhcmdldCA9IHtcbiAgTk9ORTogMCxcbiAgU0VMRjogMSxcbiAgQkxBTks6IDIsXG4gIFBBUkVOVDogMyxcbiAgVE9QOiA0XG59O1xuZXhwb3J0cy5MaW5rVGFyZ2V0ID0gTGlua1RhcmdldDtcblxuZnVuY3Rpb24gYWRkTGlua0F0dHJpYnV0ZXMobGluaywge1xuICB1cmwsXG4gIHRhcmdldCxcbiAgcmVsLFxuICBlbmFibGVkID0gdHJ1ZVxufSA9IHt9KSB7XG4gICgwLCBfdXRpbC5hc3NlcnQpKHVybCAmJiB0eXBlb2YgdXJsID09PSBcInN0cmluZ1wiLCAnYWRkTGlua0F0dHJpYnV0ZXM6IEEgdmFsaWQgXCJ1cmxcIiBwYXJhbWV0ZXIgbXVzdCBwcm92aWRlZC4nKTtcbiAgY29uc3QgdXJsTnVsbFJlbW92ZWQgPSAoMCwgX3V0aWwucmVtb3ZlTnVsbENoYXJhY3RlcnMpKHVybCk7XG5cbiAgaWYgKGVuYWJsZWQpIHtcbiAgICBsaW5rLmhyZWYgPSBsaW5rLnRpdGxlID0gdXJsTnVsbFJlbW92ZWQ7XG4gIH0gZWxzZSB7XG4gICAgbGluay5ocmVmID0gXCJcIjtcbiAgICBsaW5rLnRpdGxlID0gYERpc2FibGVkOiAke3VybE51bGxSZW1vdmVkfWA7XG5cbiAgICBsaW5rLm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgfVxuXG4gIGxldCB0YXJnZXRTdHIgPSBcIlwiO1xuXG4gIHN3aXRjaCAodGFyZ2V0KSB7XG4gICAgY2FzZSBMaW5rVGFyZ2V0Lk5PTkU6XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgTGlua1RhcmdldC5TRUxGOlxuICAgICAgdGFyZ2V0U3RyID0gXCJfc2VsZlwiO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIExpbmtUYXJnZXQuQkxBTks6XG4gICAgICB0YXJnZXRTdHIgPSBcIl9ibGFua1wiO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIExpbmtUYXJnZXQuUEFSRU5UOlxuICAgICAgdGFyZ2V0U3RyID0gXCJfcGFyZW50XCI7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgTGlua1RhcmdldC5UT1A6XG4gICAgICB0YXJnZXRTdHIgPSBcIl90b3BcIjtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgbGluay50YXJnZXQgPSB0YXJnZXRTdHI7XG4gIGxpbmsucmVsID0gdHlwZW9mIHJlbCA9PT0gXCJzdHJpbmdcIiA/IHJlbCA6IERFRkFVTFRfTElOS19SRUw7XG59XG5cbmZ1bmN0aW9uIGlzRGF0YVNjaGVtZSh1cmwpIHtcbiAgY29uc3QgaWkgPSB1cmwubGVuZ3RoO1xuICBsZXQgaSA9IDA7XG5cbiAgd2hpbGUgKGkgPCBpaSAmJiB1cmxbaV0udHJpbSgpID09PSBcIlwiKSB7XG4gICAgaSsrO1xuICB9XG5cbiAgcmV0dXJuIHVybC5zdWJzdHJpbmcoaSwgaSArIDUpLnRvTG93ZXJDYXNlKCkgPT09IFwiZGF0YTpcIjtcbn1cblxuZnVuY3Rpb24gaXNQZGZGaWxlKGZpbGVuYW1lKSB7XG4gIHJldHVybiB0eXBlb2YgZmlsZW5hbWUgPT09IFwic3RyaW5nXCIgJiYgL1xcLnBkZiQvaS50ZXN0KGZpbGVuYW1lKTtcbn1cblxuZnVuY3Rpb24gZ2V0RmlsZW5hbWVGcm9tVXJsKHVybCkge1xuICBjb25zdCBhbmNob3IgPSB1cmwuaW5kZXhPZihcIiNcIik7XG4gIGNvbnN0IHF1ZXJ5ID0gdXJsLmluZGV4T2YoXCI/XCIpO1xuICBjb25zdCBlbmQgPSBNYXRoLm1pbihhbmNob3IgPiAwID8gYW5jaG9yIDogdXJsLmxlbmd0aCwgcXVlcnkgPiAwID8gcXVlcnkgOiB1cmwubGVuZ3RoKTtcbiAgcmV0dXJuIHVybC5zdWJzdHJpbmcodXJsLmxhc3RJbmRleE9mKFwiL1wiLCBlbmQpICsgMSwgZW5kKTtcbn1cblxuZnVuY3Rpb24gZ2V0UGRmRmlsZW5hbWVGcm9tVXJsKHVybCwgZGVmYXVsdEZpbGVuYW1lID0gXCJkb2N1bWVudC5wZGZcIikge1xuICBpZiAodHlwZW9mIHVybCAhPT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBkZWZhdWx0RmlsZW5hbWU7XG4gIH1cblxuICBpZiAoaXNEYXRhU2NoZW1lKHVybCkpIHtcbiAgICAoMCwgX3V0aWwud2FybikoJ2dldFBkZkZpbGVuYW1lRnJvbVVybDogaWdub3JlIFwiZGF0YTpcIi1VUkwgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuJyk7XG4gICAgcmV0dXJuIGRlZmF1bHRGaWxlbmFtZTtcbiAgfVxuXG4gIGNvbnN0IHJlVVJJID0gL14oPzooPzpbXjpdKzopP1xcL1xcL1teL10rKT8oW14/I10qKShcXD9bXiNdKik/KCMuKik/JC87XG4gIGNvbnN0IHJlRmlsZW5hbWUgPSAvW14vPyM9XStcXC5wZGZcXGIoPyEuKlxcLnBkZlxcYikvaTtcbiAgY29uc3Qgc3BsaXRVUkkgPSByZVVSSS5leGVjKHVybCk7XG4gIGxldCBzdWdnZXN0ZWRGaWxlbmFtZSA9IHJlRmlsZW5hbWUuZXhlYyhzcGxpdFVSSVsxXSkgfHwgcmVGaWxlbmFtZS5leGVjKHNwbGl0VVJJWzJdKSB8fCByZUZpbGVuYW1lLmV4ZWMoc3BsaXRVUklbM10pO1xuXG4gIGlmIChzdWdnZXN0ZWRGaWxlbmFtZSkge1xuICAgIHN1Z2dlc3RlZEZpbGVuYW1lID0gc3VnZ2VzdGVkRmlsZW5hbWVbMF07XG5cbiAgICBpZiAoc3VnZ2VzdGVkRmlsZW5hbWUuaW5jbHVkZXMoXCIlXCIpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzdWdnZXN0ZWRGaWxlbmFtZSA9IHJlRmlsZW5hbWUuZXhlYyhkZWNvZGVVUklDb21wb25lbnQoc3VnZ2VzdGVkRmlsZW5hbWUpKVswXTtcbiAgICAgIH0gY2F0Y2ggKGV4KSB7fVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdWdnZXN0ZWRGaWxlbmFtZSB8fCBkZWZhdWx0RmlsZW5hbWU7XG59XG5cbmNsYXNzIFN0YXRUaW1lciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc3RhcnRlZCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy50aW1lcyA9IFtdO1xuICB9XG5cbiAgdGltZShuYW1lKSB7XG4gICAgaWYgKG5hbWUgaW4gdGhpcy5zdGFydGVkKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoYFRpbWVyIGlzIGFscmVhZHkgcnVubmluZyBmb3IgJHtuYW1lfWApO1xuICAgIH1cblxuICAgIHRoaXMuc3RhcnRlZFtuYW1lXSA9IERhdGUubm93KCk7XG4gIH1cblxuICB0aW1lRW5kKG5hbWUpIHtcbiAgICBpZiAoIShuYW1lIGluIHRoaXMuc3RhcnRlZCkpIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShgVGltZXIgaGFzIG5vdCBiZWVuIHN0YXJ0ZWQgZm9yICR7bmFtZX1gKTtcbiAgICB9XG5cbiAgICB0aGlzLnRpbWVzLnB1c2goe1xuICAgICAgbmFtZSxcbiAgICAgIHN0YXJ0OiB0aGlzLnN0YXJ0ZWRbbmFtZV0sXG4gICAgICBlbmQ6IERhdGUubm93KClcbiAgICB9KTtcbiAgICBkZWxldGUgdGhpcy5zdGFydGVkW25hbWVdO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgY29uc3Qgb3V0QnVmID0gW107XG4gICAgbGV0IGxvbmdlc3QgPSAwO1xuXG4gICAgZm9yIChjb25zdCB0aW1lIG9mIHRoaXMudGltZXMpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSB0aW1lLm5hbWU7XG5cbiAgICAgIGlmIChuYW1lLmxlbmd0aCA+IGxvbmdlc3QpIHtcbiAgICAgICAgbG9uZ2VzdCA9IG5hbWUubGVuZ3RoO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgdGltZSBvZiB0aGlzLnRpbWVzKSB7XG4gICAgICBjb25zdCBkdXJhdGlvbiA9IHRpbWUuZW5kIC0gdGltZS5zdGFydDtcbiAgICAgIG91dEJ1Zi5wdXNoKGAke3RpbWUubmFtZS5wYWRFbmQobG9uZ2VzdCl9ICR7ZHVyYXRpb259bXNcXG5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0QnVmLmpvaW4oXCJcIik7XG4gIH1cblxufVxuXG5leHBvcnRzLlN0YXRUaW1lciA9IFN0YXRUaW1lcjtcblxuZnVuY3Rpb24gaXNWYWxpZEZldGNoVXJsKHVybCwgYmFzZVVybCkge1xuICB0cnkge1xuICAgIGNvbnN0IHtcbiAgICAgIHByb3RvY29sXG4gICAgfSA9IGJhc2VVcmwgPyBuZXcgVVJMKHVybCwgYmFzZVVybCkgOiBuZXcgVVJMKHVybCk7XG4gICAgcmV0dXJuIHByb3RvY29sID09PSBcImh0dHA6XCIgfHwgcHJvdG9jb2wgPT09IFwiaHR0cHM6XCI7XG4gIH0gY2F0Y2ggKGV4KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGxvYWRTY3JpcHQoc3JjLCByZW1vdmVTY3JpcHRFbGVtZW50ID0gZmFsc2UpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICAgIHNjcmlwdC5zcmMgPSBzcmM7XG5cbiAgICBzY3JpcHQub25sb2FkID0gZnVuY3Rpb24gKGV2dCkge1xuICAgICAgaWYgKHJlbW92ZVNjcmlwdEVsZW1lbnQpIHtcbiAgICAgICAgc2NyaXB0LnJlbW92ZSgpO1xuICAgICAgfVxuXG4gICAgICByZXNvbHZlKGV2dCk7XG4gICAgfTtcblxuICAgIHNjcmlwdC5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcihgQ2Fubm90IGxvYWQgc2NyaXB0IGF0OiAke3NjcmlwdC5zcmN9YCkpO1xuICAgIH07XG5cbiAgICAoZG9jdW1lbnQuaGVhZCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBkZXByZWNhdGVkKGRldGFpbHMpIHtcbiAgY29uc29sZS5sb2coXCJEZXByZWNhdGVkIEFQSSB1c2FnZTogXCIgKyBkZXRhaWxzKTtcbn1cblxubGV0IHBkZkRhdGVTdHJpbmdSZWdleDtcblxuY2xhc3MgUERGRGF0ZVN0cmluZyB7XG4gIHN0YXRpYyB0b0RhdGVPYmplY3QoaW5wdXQpIHtcbiAgICBpZiAoIWlucHV0IHx8ICEoMCwgX3V0aWwuaXNTdHJpbmcpKGlucHV0KSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCFwZGZEYXRlU3RyaW5nUmVnZXgpIHtcbiAgICAgIHBkZkRhdGVTdHJpbmdSZWdleCA9IG5ldyBSZWdFeHAoXCJeRDpcIiArIFwiKFxcXFxkezR9KVwiICsgXCIoXFxcXGR7Mn0pP1wiICsgXCIoXFxcXGR7Mn0pP1wiICsgXCIoXFxcXGR7Mn0pP1wiICsgXCIoXFxcXGR7Mn0pP1wiICsgXCIoXFxcXGR7Mn0pP1wiICsgXCIoW1p8K3wtXSk/XCIgKyBcIihcXFxcZHsyfSk/XCIgKyBcIic/XCIgKyBcIihcXFxcZHsyfSk/XCIgKyBcIic/XCIpO1xuICAgIH1cblxuICAgIGNvbnN0IG1hdGNoZXMgPSBwZGZEYXRlU3RyaW5nUmVnZXguZXhlYyhpbnB1dCk7XG5cbiAgICBpZiAoIW1hdGNoZXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHllYXIgPSBwYXJzZUludChtYXRjaGVzWzFdLCAxMCk7XG4gICAgbGV0IG1vbnRoID0gcGFyc2VJbnQobWF0Y2hlc1syXSwgMTApO1xuICAgIG1vbnRoID0gbW9udGggPj0gMSAmJiBtb250aCA8PSAxMiA/IG1vbnRoIC0gMSA6IDA7XG4gICAgbGV0IGRheSA9IHBhcnNlSW50KG1hdGNoZXNbM10sIDEwKTtcbiAgICBkYXkgPSBkYXkgPj0gMSAmJiBkYXkgPD0gMzEgPyBkYXkgOiAxO1xuICAgIGxldCBob3VyID0gcGFyc2VJbnQobWF0Y2hlc1s0XSwgMTApO1xuICAgIGhvdXIgPSBob3VyID49IDAgJiYgaG91ciA8PSAyMyA/IGhvdXIgOiAwO1xuICAgIGxldCBtaW51dGUgPSBwYXJzZUludChtYXRjaGVzWzVdLCAxMCk7XG4gICAgbWludXRlID0gbWludXRlID49IDAgJiYgbWludXRlIDw9IDU5ID8gbWludXRlIDogMDtcbiAgICBsZXQgc2Vjb25kID0gcGFyc2VJbnQobWF0Y2hlc1s2XSwgMTApO1xuICAgIHNlY29uZCA9IHNlY29uZCA+PSAwICYmIHNlY29uZCA8PSA1OSA/IHNlY29uZCA6IDA7XG4gICAgY29uc3QgdW5pdmVyc2FsVGltZVJlbGF0aW9uID0gbWF0Y2hlc1s3XSB8fCBcIlpcIjtcbiAgICBsZXQgb2Zmc2V0SG91ciA9IHBhcnNlSW50KG1hdGNoZXNbOF0sIDEwKTtcbiAgICBvZmZzZXRIb3VyID0gb2Zmc2V0SG91ciA+PSAwICYmIG9mZnNldEhvdXIgPD0gMjMgPyBvZmZzZXRIb3VyIDogMDtcbiAgICBsZXQgb2Zmc2V0TWludXRlID0gcGFyc2VJbnQobWF0Y2hlc1s5XSwgMTApIHx8IDA7XG4gICAgb2Zmc2V0TWludXRlID0gb2Zmc2V0TWludXRlID49IDAgJiYgb2Zmc2V0TWludXRlIDw9IDU5ID8gb2Zmc2V0TWludXRlIDogMDtcblxuICAgIGlmICh1bml2ZXJzYWxUaW1lUmVsYXRpb24gPT09IFwiLVwiKSB7XG4gICAgICBob3VyICs9IG9mZnNldEhvdXI7XG4gICAgICBtaW51dGUgKz0gb2Zmc2V0TWludXRlO1xuICAgIH0gZWxzZSBpZiAodW5pdmVyc2FsVGltZVJlbGF0aW9uID09PSBcIitcIikge1xuICAgICAgaG91ciAtPSBvZmZzZXRIb3VyO1xuICAgICAgbWludXRlIC09IG9mZnNldE1pbnV0ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQpKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuUERGRGF0ZVN0cmluZyA9IFBERkRhdGVTdHJpbmc7XG5cbmZ1bmN0aW9uIGdldFhmYVBhZ2VWaWV3cG9ydCh4ZmFQYWdlLCB7XG4gIHNjYWxlID0gMSxcbiAgcm90YXRpb24gPSAwXG59KSB7XG4gIGNvbnN0IHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHRcbiAgfSA9IHhmYVBhZ2UuYXR0cmlidXRlcy5zdHlsZTtcbiAgY29uc3Qgdmlld0JveCA9IFswLCAwLCBwYXJzZUludCh3aWR0aCksIHBhcnNlSW50KGhlaWdodCldO1xuICByZXR1cm4gbmV3IFBhZ2VWaWV3cG9ydCh7XG4gICAgdmlld0JveCxcbiAgICBzY2FsZSxcbiAgICByb3RhdGlvblxuICB9KTtcbn1cblxuLyoqKi8gfSksXG4vKiAyICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLlZlcmJvc2l0eUxldmVsID0gZXhwb3J0cy5VdGlsID0gZXhwb3J0cy5Vbmtub3duRXJyb3JFeGNlcHRpb24gPSBleHBvcnRzLlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbiA9IGV4cG9ydHMuVU5TVVBQT1JURURfRkVBVFVSRVMgPSBleHBvcnRzLlRleHRSZW5kZXJpbmdNb2RlID0gZXhwb3J0cy5TdHJlYW1UeXBlID0gZXhwb3J0cy5SZW5kZXJpbmdJbnRlbnRGbGFnID0gZXhwb3J0cy5QZXJtaXNzaW9uRmxhZyA9IGV4cG9ydHMuUGFzc3dvcmRSZXNwb25zZXMgPSBleHBvcnRzLlBhc3N3b3JkRXhjZXB0aW9uID0gZXhwb3J0cy5QYWdlQWN0aW9uRXZlbnRUeXBlID0gZXhwb3J0cy5PUFMgPSBleHBvcnRzLk1pc3NpbmdQREZFeGNlcHRpb24gPSBleHBvcnRzLklzTGl0dGxlRW5kaWFuQ2FjaGVkID0gZXhwb3J0cy5Jc0V2YWxTdXBwb3J0ZWRDYWNoZWQgPSBleHBvcnRzLkludmFsaWRQREZFeGNlcHRpb24gPSBleHBvcnRzLkltYWdlS2luZCA9IGV4cG9ydHMuSURFTlRJVFlfTUFUUklYID0gZXhwb3J0cy5Gb3JtYXRFcnJvciA9IGV4cG9ydHMuRm9udFR5cGUgPSBleHBvcnRzLkZPTlRfSURFTlRJVFlfTUFUUklYID0gZXhwb3J0cy5Eb2N1bWVudEFjdGlvbkV2ZW50VHlwZSA9IGV4cG9ydHMuQ01hcENvbXByZXNzaW9uVHlwZSA9IGV4cG9ydHMuQmFzZUV4Y2VwdGlvbiA9IGV4cG9ydHMuQW5ub3RhdGlvblR5cGUgPSBleHBvcnRzLkFubm90YXRpb25TdGF0ZU1vZGVsVHlwZSA9IGV4cG9ydHMuQW5ub3RhdGlvblJldmlld1N0YXRlID0gZXhwb3J0cy5Bbm5vdGF0aW9uUmVwbHlUeXBlID0gZXhwb3J0cy5Bbm5vdGF0aW9uTW9kZSA9IGV4cG9ydHMuQW5ub3RhdGlvbk1hcmtlZFN0YXRlID0gZXhwb3J0cy5Bbm5vdGF0aW9uRmxhZyA9IGV4cG9ydHMuQW5ub3RhdGlvbkZpZWxkRmxhZyA9IGV4cG9ydHMuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZSA9IGV4cG9ydHMuQW5ub3RhdGlvbkFjdGlvbkV2ZW50VHlwZSA9IGV4cG9ydHMuQWJvcnRFeGNlcHRpb24gPSB2b2lkIDA7XG5leHBvcnRzLmFycmF5Qnl0ZUxlbmd0aCA9IGFycmF5Qnl0ZUxlbmd0aDtcbmV4cG9ydHMuYXJyYXlzVG9CeXRlcyA9IGFycmF5c1RvQnl0ZXM7XG5leHBvcnRzLmFzc2VydCA9IGFzc2VydDtcbmV4cG9ydHMuYnl0ZXNUb1N0cmluZyA9IGJ5dGVzVG9TdHJpbmc7XG5leHBvcnRzLmNyZWF0ZU9iamVjdFVSTCA9IGNyZWF0ZU9iamVjdFVSTDtcbmV4cG9ydHMuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkgPSBjcmVhdGVQcm9taXNlQ2FwYWJpbGl0eTtcbmV4cG9ydHMuY3JlYXRlVmFsaWRBYnNvbHV0ZVVybCA9IGNyZWF0ZVZhbGlkQWJzb2x1dGVVcmw7XG5leHBvcnRzLmVzY2FwZVN0cmluZyA9IGVzY2FwZVN0cmluZztcbmV4cG9ydHMuZ2V0TW9kaWZpY2F0aW9uRGF0ZSA9IGdldE1vZGlmaWNhdGlvbkRhdGU7XG5leHBvcnRzLmdldFZlcmJvc2l0eUxldmVsID0gZ2V0VmVyYm9zaXR5TGV2ZWw7XG5leHBvcnRzLmluZm8gPSBpbmZvO1xuZXhwb3J0cy5pc0FycmF5QnVmZmVyID0gaXNBcnJheUJ1ZmZlcjtcbmV4cG9ydHMuaXNBcnJheUVxdWFsID0gaXNBcnJheUVxdWFsO1xuZXhwb3J0cy5pc0FzY2lpID0gaXNBc2NpaTtcbmV4cG9ydHMuaXNCb29sID0gaXNCb29sO1xuZXhwb3J0cy5pc051bSA9IGlzTnVtO1xuZXhwb3J0cy5pc1NhbWVPcmlnaW4gPSBpc1NhbWVPcmlnaW47XG5leHBvcnRzLmlzU3RyaW5nID0gaXNTdHJpbmc7XG5leHBvcnRzLm9iamVjdEZyb21NYXAgPSBvYmplY3RGcm9tTWFwO1xuZXhwb3J0cy5vYmplY3RTaXplID0gb2JqZWN0U2l6ZTtcbmV4cG9ydHMucmVtb3ZlTnVsbENoYXJhY3RlcnMgPSByZW1vdmVOdWxsQ2hhcmFjdGVycztcbmV4cG9ydHMuc2V0VmVyYm9zaXR5TGV2ZWwgPSBzZXRWZXJib3NpdHlMZXZlbDtcbmV4cG9ydHMuc2hhZG93ID0gc2hhZG93O1xuZXhwb3J0cy5zdHJpbmczMiA9IHN0cmluZzMyO1xuZXhwb3J0cy5zdHJpbmdUb0J5dGVzID0gc3RyaW5nVG9CeXRlcztcbmV4cG9ydHMuc3RyaW5nVG9QREZTdHJpbmcgPSBzdHJpbmdUb1BERlN0cmluZztcbmV4cG9ydHMuc3RyaW5nVG9VVEYxNkJFU3RyaW5nID0gc3RyaW5nVG9VVEYxNkJFU3RyaW5nO1xuZXhwb3J0cy5zdHJpbmdUb1VURjhTdHJpbmcgPSBzdHJpbmdUb1VURjhTdHJpbmc7XG5leHBvcnRzLnVucmVhY2hhYmxlID0gdW5yZWFjaGFibGU7XG5leHBvcnRzLnV0ZjhTdHJpbmdUb1N0cmluZyA9IHV0ZjhTdHJpbmdUb1N0cmluZztcbmV4cG9ydHMud2FybiA9IHdhcm47XG5cbl9fd19wZGZqc19yZXF1aXJlX18oMyk7XG5cbmNvbnN0IElERU5USVRZX01BVFJJWCA9IFsxLCAwLCAwLCAxLCAwLCAwXTtcbmV4cG9ydHMuSURFTlRJVFlfTUFUUklYID0gSURFTlRJVFlfTUFUUklYO1xuY29uc3QgRk9OVF9JREVOVElUWV9NQVRSSVggPSBbMC4wMDEsIDAsIDAsIDAuMDAxLCAwLCAwXTtcbmV4cG9ydHMuRk9OVF9JREVOVElUWV9NQVRSSVggPSBGT05UX0lERU5USVRZX01BVFJJWDtcbmNvbnN0IFJlbmRlcmluZ0ludGVudEZsYWcgPSB7XG4gIEFOWTogMHgwMSxcbiAgRElTUExBWTogMHgwMixcbiAgUFJJTlQ6IDB4MDQsXG4gIEFOTk9UQVRJT05TX0ZPUk1TOiAweDEwLFxuICBBTk5PVEFUSU9OU19TVE9SQUdFOiAweDIwLFxuICBBTk5PVEFUSU9OU19ESVNBQkxFOiAweDQwLFxuICBPUExJU1Q6IDB4MTAwXG59O1xuZXhwb3J0cy5SZW5kZXJpbmdJbnRlbnRGbGFnID0gUmVuZGVyaW5nSW50ZW50RmxhZztcbmNvbnN0IEFubm90YXRpb25Nb2RlID0ge1xuICBESVNBQkxFOiAwLFxuICBFTkFCTEU6IDEsXG4gIEVOQUJMRV9GT1JNUzogMixcbiAgRU5BQkxFX1NUT1JBR0U6IDNcbn07XG5leHBvcnRzLkFubm90YXRpb25Nb2RlID0gQW5ub3RhdGlvbk1vZGU7XG5jb25zdCBQZXJtaXNzaW9uRmxhZyA9IHtcbiAgUFJJTlQ6IDB4MDQsXG4gIE1PRElGWV9DT05URU5UUzogMHgwOCxcbiAgQ09QWTogMHgxMCxcbiAgTU9ESUZZX0FOTk9UQVRJT05TOiAweDIwLFxuICBGSUxMX0lOVEVSQUNUSVZFX0ZPUk1TOiAweDEwMCxcbiAgQ09QWV9GT1JfQUNDRVNTSUJJTElUWTogMHgyMDAsXG4gIEFTU0VNQkxFOiAweDQwMCxcbiAgUFJJTlRfSElHSF9RVUFMSVRZOiAweDgwMFxufTtcbmV4cG9ydHMuUGVybWlzc2lvbkZsYWcgPSBQZXJtaXNzaW9uRmxhZztcbmNvbnN0IFRleHRSZW5kZXJpbmdNb2RlID0ge1xuICBGSUxMOiAwLFxuICBTVFJPS0U6IDEsXG4gIEZJTExfU1RST0tFOiAyLFxuICBJTlZJU0lCTEU6IDMsXG4gIEZJTExfQUREX1RPX1BBVEg6IDQsXG4gIFNUUk9LRV9BRERfVE9fUEFUSDogNSxcbiAgRklMTF9TVFJPS0VfQUREX1RPX1BBVEg6IDYsXG4gIEFERF9UT19QQVRIOiA3LFxuICBGSUxMX1NUUk9LRV9NQVNLOiAzLFxuICBBRERfVE9fUEFUSF9GTEFHOiA0XG59O1xuZXhwb3J0cy5UZXh0UmVuZGVyaW5nTW9kZSA9IFRleHRSZW5kZXJpbmdNb2RlO1xuY29uc3QgSW1hZ2VLaW5kID0ge1xuICBHUkFZU0NBTEVfMUJQUDogMSxcbiAgUkdCXzI0QlBQOiAyLFxuICBSR0JBXzMyQlBQOiAzXG59O1xuZXhwb3J0cy5JbWFnZUtpbmQgPSBJbWFnZUtpbmQ7XG5jb25zdCBBbm5vdGF0aW9uVHlwZSA9IHtcbiAgVEVYVDogMSxcbiAgTElOSzogMixcbiAgRlJFRVRFWFQ6IDMsXG4gIExJTkU6IDQsXG4gIFNRVUFSRTogNSxcbiAgQ0lSQ0xFOiA2LFxuICBQT0xZR09OOiA3LFxuICBQT0xZTElORTogOCxcbiAgSElHSExJR0hUOiA5LFxuICBVTkRFUkxJTkU6IDEwLFxuICBTUVVJR0dMWTogMTEsXG4gIFNUUklLRU9VVDogMTIsXG4gIFNUQU1QOiAxMyxcbiAgQ0FSRVQ6IDE0LFxuICBJTks6IDE1LFxuICBQT1BVUDogMTYsXG4gIEZJTEVBVFRBQ0hNRU5UOiAxNyxcbiAgU09VTkQ6IDE4LFxuICBNT1ZJRTogMTksXG4gIFdJREdFVDogMjAsXG4gIFNDUkVFTjogMjEsXG4gIFBSSU5URVJNQVJLOiAyMixcbiAgVFJBUE5FVDogMjMsXG4gIFdBVEVSTUFSSzogMjQsXG4gIFRIUkVFRDogMjUsXG4gIFJFREFDVDogMjZcbn07XG5leHBvcnRzLkFubm90YXRpb25UeXBlID0gQW5ub3RhdGlvblR5cGU7XG5jb25zdCBBbm5vdGF0aW9uU3RhdGVNb2RlbFR5cGUgPSB7XG4gIE1BUktFRDogXCJNYXJrZWRcIixcbiAgUkVWSUVXOiBcIlJldmlld1wiXG59O1xuZXhwb3J0cy5Bbm5vdGF0aW9uU3RhdGVNb2RlbFR5cGUgPSBBbm5vdGF0aW9uU3RhdGVNb2RlbFR5cGU7XG5jb25zdCBBbm5vdGF0aW9uTWFya2VkU3RhdGUgPSB7XG4gIE1BUktFRDogXCJNYXJrZWRcIixcbiAgVU5NQVJLRUQ6IFwiVW5tYXJrZWRcIlxufTtcbmV4cG9ydHMuQW5ub3RhdGlvbk1hcmtlZFN0YXRlID0gQW5ub3RhdGlvbk1hcmtlZFN0YXRlO1xuY29uc3QgQW5ub3RhdGlvblJldmlld1N0YXRlID0ge1xuICBBQ0NFUFRFRDogXCJBY2NlcHRlZFwiLFxuICBSRUpFQ1RFRDogXCJSZWplY3RlZFwiLFxuICBDQU5DRUxMRUQ6IFwiQ2FuY2VsbGVkXCIsXG4gIENPTVBMRVRFRDogXCJDb21wbGV0ZWRcIixcbiAgTk9ORTogXCJOb25lXCJcbn07XG5leHBvcnRzLkFubm90YXRpb25SZXZpZXdTdGF0ZSA9IEFubm90YXRpb25SZXZpZXdTdGF0ZTtcbmNvbnN0IEFubm90YXRpb25SZXBseVR5cGUgPSB7XG4gIEdST1VQOiBcIkdyb3VwXCIsXG4gIFJFUExZOiBcIlJcIlxufTtcbmV4cG9ydHMuQW5ub3RhdGlvblJlcGx5VHlwZSA9IEFubm90YXRpb25SZXBseVR5cGU7XG5jb25zdCBBbm5vdGF0aW9uRmxhZyA9IHtcbiAgSU5WSVNJQkxFOiAweDAxLFxuICBISURERU46IDB4MDIsXG4gIFBSSU5UOiAweDA0LFxuICBOT1pPT006IDB4MDgsXG4gIE5PUk9UQVRFOiAweDEwLFxuICBOT1ZJRVc6IDB4MjAsXG4gIFJFQURPTkxZOiAweDQwLFxuICBMT0NLRUQ6IDB4ODAsXG4gIFRPR0dMRU5PVklFVzogMHgxMDAsXG4gIExPQ0tFRENPTlRFTlRTOiAweDIwMFxufTtcbmV4cG9ydHMuQW5ub3RhdGlvbkZsYWcgPSBBbm5vdGF0aW9uRmxhZztcbmNvbnN0IEFubm90YXRpb25GaWVsZEZsYWcgPSB7XG4gIFJFQURPTkxZOiAweDAwMDAwMDEsXG4gIFJFUVVJUkVEOiAweDAwMDAwMDIsXG4gIE5PRVhQT1JUOiAweDAwMDAwMDQsXG4gIE1VTFRJTElORTogMHgwMDAxMDAwLFxuICBQQVNTV09SRDogMHgwMDAyMDAwLFxuICBOT1RPR0dMRVRPT0ZGOiAweDAwMDQwMDAsXG4gIFJBRElPOiAweDAwMDgwMDAsXG4gIFBVU0hCVVRUT046IDB4MDAxMDAwMCxcbiAgQ09NQk86IDB4MDAyMDAwMCxcbiAgRURJVDogMHgwMDQwMDAwLFxuICBTT1JUOiAweDAwODAwMDAsXG4gIEZJTEVTRUxFQ1Q6IDB4MDEwMDAwMCxcbiAgTVVMVElTRUxFQ1Q6IDB4MDIwMDAwMCxcbiAgRE9OT1RTUEVMTENIRUNLOiAweDA0MDAwMDAsXG4gIERPTk9UU0NST0xMOiAweDA4MDAwMDAsXG4gIENPTUI6IDB4MTAwMDAwMCxcbiAgUklDSFRFWFQ6IDB4MjAwMDAwMCxcbiAgUkFESU9TSU5VTklTT046IDB4MjAwMDAwMCxcbiAgQ09NTUlUT05TRUxDSEFOR0U6IDB4NDAwMDAwMFxufTtcbmV4cG9ydHMuQW5ub3RhdGlvbkZpZWxkRmxhZyA9IEFubm90YXRpb25GaWVsZEZsYWc7XG5jb25zdCBBbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlID0ge1xuICBTT0xJRDogMSxcbiAgREFTSEVEOiAyLFxuICBCRVZFTEVEOiAzLFxuICBJTlNFVDogNCxcbiAgVU5ERVJMSU5FOiA1XG59O1xuZXhwb3J0cy5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlID0gQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZTtcbmNvbnN0IEFubm90YXRpb25BY3Rpb25FdmVudFR5cGUgPSB7XG4gIEU6IFwiTW91c2UgRW50ZXJcIixcbiAgWDogXCJNb3VzZSBFeGl0XCIsXG4gIEQ6IFwiTW91c2UgRG93blwiLFxuICBVOiBcIk1vdXNlIFVwXCIsXG4gIEZvOiBcIkZvY3VzXCIsXG4gIEJsOiBcIkJsdXJcIixcbiAgUE86IFwiUGFnZU9wZW5cIixcbiAgUEM6IFwiUGFnZUNsb3NlXCIsXG4gIFBWOiBcIlBhZ2VWaXNpYmxlXCIsXG4gIFBJOiBcIlBhZ2VJbnZpc2libGVcIixcbiAgSzogXCJLZXlzdHJva2VcIixcbiAgRjogXCJGb3JtYXRcIixcbiAgVjogXCJWYWxpZGF0ZVwiLFxuICBDOiBcIkNhbGN1bGF0ZVwiXG59O1xuZXhwb3J0cy5Bbm5vdGF0aW9uQWN0aW9uRXZlbnRUeXBlID0gQW5ub3RhdGlvbkFjdGlvbkV2ZW50VHlwZTtcbmNvbnN0IERvY3VtZW50QWN0aW9uRXZlbnRUeXBlID0ge1xuICBXQzogXCJXaWxsQ2xvc2VcIixcbiAgV1M6IFwiV2lsbFNhdmVcIixcbiAgRFM6IFwiRGlkU2F2ZVwiLFxuICBXUDogXCJXaWxsUHJpbnRcIixcbiAgRFA6IFwiRGlkUHJpbnRcIlxufTtcbmV4cG9ydHMuRG9jdW1lbnRBY3Rpb25FdmVudFR5cGUgPSBEb2N1bWVudEFjdGlvbkV2ZW50VHlwZTtcbmNvbnN0IFBhZ2VBY3Rpb25FdmVudFR5cGUgPSB7XG4gIE86IFwiUGFnZU9wZW5cIixcbiAgQzogXCJQYWdlQ2xvc2VcIlxufTtcbmV4cG9ydHMuUGFnZUFjdGlvbkV2ZW50VHlwZSA9IFBhZ2VBY3Rpb25FdmVudFR5cGU7XG5jb25zdCBTdHJlYW1UeXBlID0ge1xuICBVTktOT1dOOiBcIlVOS05PV05cIixcbiAgRkxBVEU6IFwiRkxBVEVcIixcbiAgTFpXOiBcIkxaV1wiLFxuICBEQ1Q6IFwiRENUXCIsXG4gIEpQWDogXCJKUFhcIixcbiAgSkJJRzogXCJKQklHXCIsXG4gIEE4NTogXCJBODVcIixcbiAgQUhYOiBcIkFIWFwiLFxuICBDQ0Y6IFwiQ0NGXCIsXG4gIFJMWDogXCJSTFhcIlxufTtcbmV4cG9ydHMuU3RyZWFtVHlwZSA9IFN0cmVhbVR5cGU7XG5jb25zdCBGb250VHlwZSA9IHtcbiAgVU5LTk9XTjogXCJVTktOT1dOXCIsXG4gIFRZUEUxOiBcIlRZUEUxXCIsXG4gIFRZUEUxU1RBTkRBUkQ6IFwiVFlQRTFTVEFOREFSRFwiLFxuICBUWVBFMUM6IFwiVFlQRTFDXCIsXG4gIENJREZPTlRUWVBFMDogXCJDSURGT05UVFlQRTBcIixcbiAgQ0lERk9OVFRZUEUwQzogXCJDSURGT05UVFlQRTBDXCIsXG4gIFRSVUVUWVBFOiBcIlRSVUVUWVBFXCIsXG4gIENJREZPTlRUWVBFMjogXCJDSURGT05UVFlQRTJcIixcbiAgVFlQRTM6IFwiVFlQRTNcIixcbiAgT1BFTlRZUEU6IFwiT1BFTlRZUEVcIixcbiAgVFlQRTA6IFwiVFlQRTBcIixcbiAgTU1UWVBFMTogXCJNTVRZUEUxXCJcbn07XG5leHBvcnRzLkZvbnRUeXBlID0gRm9udFR5cGU7XG5jb25zdCBWZXJib3NpdHlMZXZlbCA9IHtcbiAgRVJST1JTOiAwLFxuICBXQVJOSU5HUzogMSxcbiAgSU5GT1M6IDVcbn07XG5leHBvcnRzLlZlcmJvc2l0eUxldmVsID0gVmVyYm9zaXR5TGV2ZWw7XG5jb25zdCBDTWFwQ29tcHJlc3Npb25UeXBlID0ge1xuICBOT05FOiAwLFxuICBCSU5BUlk6IDEsXG4gIFNUUkVBTTogMlxufTtcbmV4cG9ydHMuQ01hcENvbXByZXNzaW9uVHlwZSA9IENNYXBDb21wcmVzc2lvblR5cGU7XG5jb25zdCBPUFMgPSB7XG4gIGRlcGVuZGVuY3k6IDEsXG4gIHNldExpbmVXaWR0aDogMixcbiAgc2V0TGluZUNhcDogMyxcbiAgc2V0TGluZUpvaW46IDQsXG4gIHNldE1pdGVyTGltaXQ6IDUsXG4gIHNldERhc2g6IDYsXG4gIHNldFJlbmRlcmluZ0ludGVudDogNyxcbiAgc2V0RmxhdG5lc3M6IDgsXG4gIHNldEdTdGF0ZTogOSxcbiAgc2F2ZTogMTAsXG4gIHJlc3RvcmU6IDExLFxuICB0cmFuc2Zvcm06IDEyLFxuICBtb3ZlVG86IDEzLFxuICBsaW5lVG86IDE0LFxuICBjdXJ2ZVRvOiAxNSxcbiAgY3VydmVUbzI6IDE2LFxuICBjdXJ2ZVRvMzogMTcsXG4gIGNsb3NlUGF0aDogMTgsXG4gIHJlY3RhbmdsZTogMTksXG4gIHN0cm9rZTogMjAsXG4gIGNsb3NlU3Ryb2tlOiAyMSxcbiAgZmlsbDogMjIsXG4gIGVvRmlsbDogMjMsXG4gIGZpbGxTdHJva2U6IDI0LFxuICBlb0ZpbGxTdHJva2U6IDI1LFxuICBjbG9zZUZpbGxTdHJva2U6IDI2LFxuICBjbG9zZUVPRmlsbFN0cm9rZTogMjcsXG4gIGVuZFBhdGg6IDI4LFxuICBjbGlwOiAyOSxcbiAgZW9DbGlwOiAzMCxcbiAgYmVnaW5UZXh0OiAzMSxcbiAgZW5kVGV4dDogMzIsXG4gIHNldENoYXJTcGFjaW5nOiAzMyxcbiAgc2V0V29yZFNwYWNpbmc6IDM0LFxuICBzZXRIU2NhbGU6IDM1LFxuICBzZXRMZWFkaW5nOiAzNixcbiAgc2V0Rm9udDogMzcsXG4gIHNldFRleHRSZW5kZXJpbmdNb2RlOiAzOCxcbiAgc2V0VGV4dFJpc2U6IDM5LFxuICBtb3ZlVGV4dDogNDAsXG4gIHNldExlYWRpbmdNb3ZlVGV4dDogNDEsXG4gIHNldFRleHRNYXRyaXg6IDQyLFxuICBuZXh0TGluZTogNDMsXG4gIHNob3dUZXh0OiA0NCxcbiAgc2hvd1NwYWNlZFRleHQ6IDQ1LFxuICBuZXh0TGluZVNob3dUZXh0OiA0NixcbiAgbmV4dExpbmVTZXRTcGFjaW5nU2hvd1RleHQ6IDQ3LFxuICBzZXRDaGFyV2lkdGg6IDQ4LFxuICBzZXRDaGFyV2lkdGhBbmRCb3VuZHM6IDQ5LFxuICBzZXRTdHJva2VDb2xvclNwYWNlOiA1MCxcbiAgc2V0RmlsbENvbG9yU3BhY2U6IDUxLFxuICBzZXRTdHJva2VDb2xvcjogNTIsXG4gIHNldFN0cm9rZUNvbG9yTjogNTMsXG4gIHNldEZpbGxDb2xvcjogNTQsXG4gIHNldEZpbGxDb2xvck46IDU1LFxuICBzZXRTdHJva2VHcmF5OiA1NixcbiAgc2V0RmlsbEdyYXk6IDU3LFxuICBzZXRTdHJva2VSR0JDb2xvcjogNTgsXG4gIHNldEZpbGxSR0JDb2xvcjogNTksXG4gIHNldFN0cm9rZUNNWUtDb2xvcjogNjAsXG4gIHNldEZpbGxDTVlLQ29sb3I6IDYxLFxuICBzaGFkaW5nRmlsbDogNjIsXG4gIGJlZ2luSW5saW5lSW1hZ2U6IDYzLFxuICBiZWdpbkltYWdlRGF0YTogNjQsXG4gIGVuZElubGluZUltYWdlOiA2NSxcbiAgcGFpbnRYT2JqZWN0OiA2NixcbiAgbWFya1BvaW50OiA2NyxcbiAgbWFya1BvaW50UHJvcHM6IDY4LFxuICBiZWdpbk1hcmtlZENvbnRlbnQ6IDY5LFxuICBiZWdpbk1hcmtlZENvbnRlbnRQcm9wczogNzAsXG4gIGVuZE1hcmtlZENvbnRlbnQ6IDcxLFxuICBiZWdpbkNvbXBhdDogNzIsXG4gIGVuZENvbXBhdDogNzMsXG4gIHBhaW50Rm9ybVhPYmplY3RCZWdpbjogNzQsXG4gIHBhaW50Rm9ybVhPYmplY3RFbmQ6IDc1LFxuICBiZWdpbkdyb3VwOiA3NixcbiAgZW5kR3JvdXA6IDc3LFxuICBiZWdpbkFubm90YXRpb25zOiA3OCxcbiAgZW5kQW5ub3RhdGlvbnM6IDc5LFxuICBiZWdpbkFubm90YXRpb246IDgwLFxuICBlbmRBbm5vdGF0aW9uOiA4MSxcbiAgcGFpbnRKcGVnWE9iamVjdDogODIsXG4gIHBhaW50SW1hZ2VNYXNrWE9iamVjdDogODMsXG4gIHBhaW50SW1hZ2VNYXNrWE9iamVjdEdyb3VwOiA4NCxcbiAgcGFpbnRJbWFnZVhPYmplY3Q6IDg1LFxuICBwYWludElubGluZUltYWdlWE9iamVjdDogODYsXG4gIHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXA6IDg3LFxuICBwYWludEltYWdlWE9iamVjdFJlcGVhdDogODgsXG4gIHBhaW50SW1hZ2VNYXNrWE9iamVjdFJlcGVhdDogODksXG4gIHBhaW50U29saWRDb2xvckltYWdlTWFzazogOTAsXG4gIGNvbnN0cnVjdFBhdGg6IDkxXG59O1xuZXhwb3J0cy5PUFMgPSBPUFM7XG5jb25zdCBVTlNVUFBPUlRFRF9GRUFUVVJFUyA9IHtcbiAgdW5rbm93bjogXCJ1bmtub3duXCIsXG4gIGZvcm1zOiBcImZvcm1zXCIsXG4gIGphdmFTY3JpcHQ6IFwiamF2YVNjcmlwdFwiLFxuICBzaWduYXR1cmVzOiBcInNpZ25hdHVyZXNcIixcbiAgc21hc2s6IFwic21hc2tcIixcbiAgc2hhZGluZ1BhdHRlcm46IFwic2hhZGluZ1BhdHRlcm5cIixcbiAgZm9udDogXCJmb250XCIsXG4gIGVycm9yVGlsaW5nUGF0dGVybjogXCJlcnJvclRpbGluZ1BhdHRlcm5cIixcbiAgZXJyb3JFeHRHU3RhdGU6IFwiZXJyb3JFeHRHU3RhdGVcIixcbiAgZXJyb3JYT2JqZWN0OiBcImVycm9yWE9iamVjdFwiLFxuICBlcnJvckZvbnRMb2FkVHlwZTM6IFwiZXJyb3JGb250TG9hZFR5cGUzXCIsXG4gIGVycm9yRm9udFN0YXRlOiBcImVycm9yRm9udFN0YXRlXCIsXG4gIGVycm9yRm9udE1pc3Npbmc6IFwiZXJyb3JGb250TWlzc2luZ1wiLFxuICBlcnJvckZvbnRUcmFuc2xhdGU6IFwiZXJyb3JGb250VHJhbnNsYXRlXCIsXG4gIGVycm9yQ29sb3JTcGFjZTogXCJlcnJvckNvbG9yU3BhY2VcIixcbiAgZXJyb3JPcGVyYXRvckxpc3Q6IFwiZXJyb3JPcGVyYXRvckxpc3RcIixcbiAgZXJyb3JGb250VG9Vbmljb2RlOiBcImVycm9yRm9udFRvVW5pY29kZVwiLFxuICBlcnJvckZvbnRMb2FkTmF0aXZlOiBcImVycm9yRm9udExvYWROYXRpdmVcIixcbiAgZXJyb3JGb250QnVpbGRQYXRoOiBcImVycm9yRm9udEJ1aWxkUGF0aFwiLFxuICBlcnJvckZvbnRHZXRQYXRoOiBcImVycm9yRm9udEdldFBhdGhcIixcbiAgZXJyb3JNYXJrZWRDb250ZW50OiBcImVycm9yTWFya2VkQ29udGVudFwiLFxuICBlcnJvckNvbnRlbnRTdWJTdHJlYW06IFwiZXJyb3JDb250ZW50U3ViU3RyZWFtXCJcbn07XG5leHBvcnRzLlVOU1VQUE9SVEVEX0ZFQVRVUkVTID0gVU5TVVBQT1JURURfRkVBVFVSRVM7XG5jb25zdCBQYXNzd29yZFJlc3BvbnNlcyA9IHtcbiAgTkVFRF9QQVNTV09SRDogMSxcbiAgSU5DT1JSRUNUX1BBU1NXT1JEOiAyXG59O1xuZXhwb3J0cy5QYXNzd29yZFJlc3BvbnNlcyA9IFBhc3N3b3JkUmVzcG9uc2VzO1xubGV0IHZlcmJvc2l0eSA9IFZlcmJvc2l0eUxldmVsLldBUk5JTkdTO1xuXG5mdW5jdGlvbiBzZXRWZXJib3NpdHlMZXZlbChsZXZlbCkge1xuICBpZiAoTnVtYmVyLmlzSW50ZWdlcihsZXZlbCkpIHtcbiAgICB2ZXJib3NpdHkgPSBsZXZlbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRWZXJib3NpdHlMZXZlbCgpIHtcbiAgcmV0dXJuIHZlcmJvc2l0eTtcbn1cblxuZnVuY3Rpb24gaW5mbyhtc2cpIHtcbiAgaWYgKHZlcmJvc2l0eSA+PSBWZXJib3NpdHlMZXZlbC5JTkZPUykge1xuICAgIGNvbnNvbGUubG9nKGBJbmZvOiAke21zZ31gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuKG1zZykge1xuICBpZiAodmVyYm9zaXR5ID49IFZlcmJvc2l0eUxldmVsLldBUk5JTkdTKSB7XG4gICAgY29uc29sZS5sb2coYFdhcm5pbmc6ICR7bXNnfWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVucmVhY2hhYmxlKG1zZykge1xuICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0KGNvbmQsIG1zZykge1xuICBpZiAoIWNvbmQpIHtcbiAgICB1bnJlYWNoYWJsZShtc2cpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzU2FtZU9yaWdpbihiYXNlVXJsLCBvdGhlclVybCkge1xuICBsZXQgYmFzZTtcblxuICB0cnkge1xuICAgIGJhc2UgPSBuZXcgVVJMKGJhc2VVcmwpO1xuXG4gICAgaWYgKCFiYXNlLm9yaWdpbiB8fCBiYXNlLm9yaWdpbiA9PT0gXCJudWxsXCIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBvdGhlciA9IG5ldyBVUkwob3RoZXJVcmwsIGJhc2UpO1xuICByZXR1cm4gYmFzZS5vcmlnaW4gPT09IG90aGVyLm9yaWdpbjtcbn1cblxuZnVuY3Rpb24gX2lzVmFsaWRQcm90b2NvbCh1cmwpIHtcbiAgaWYgKCF1cmwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzd2l0Y2ggKHVybC5wcm90b2NvbCkge1xuICAgIGNhc2UgXCJodHRwOlwiOlxuICAgIGNhc2UgXCJodHRwczpcIjpcbiAgICBjYXNlIFwiZnRwOlwiOlxuICAgIGNhc2UgXCJtYWlsdG86XCI6XG4gICAgY2FzZSBcInRlbDpcIjpcbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVWYWxpZEFic29sdXRlVXJsKHVybCwgYmFzZVVybCA9IG51bGwsIG9wdGlvbnMgPSBudWxsKSB7XG4gIGlmICghdXJsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB0cnkge1xuICAgIGlmIChvcHRpb25zICYmIHR5cGVvZiB1cmwgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGlmIChvcHRpb25zLmFkZERlZmF1bHRQcm90b2NvbCAmJiB1cmwuc3RhcnRzV2l0aChcInd3dy5cIikpIHtcbiAgICAgICAgY29uc3QgZG90cyA9IHVybC5tYXRjaCgvXFwuL2cpO1xuXG4gICAgICAgIGlmIChkb3RzICYmIGRvdHMubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICB1cmwgPSBgaHR0cDovLyR7dXJsfWA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMudHJ5Q29udmVydEVuY29kaW5nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdXJsID0gc3RyaW5nVG9VVEY4U3RyaW5nKHVybCk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7fVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGFic29sdXRlVXJsID0gYmFzZVVybCA/IG5ldyBVUkwodXJsLCBiYXNlVXJsKSA6IG5ldyBVUkwodXJsKTtcblxuICAgIGlmIChfaXNWYWxpZFByb3RvY29sKGFic29sdXRlVXJsKSkge1xuICAgICAgcmV0dXJuIGFic29sdXRlVXJsO1xuICAgIH1cbiAgfSBjYXRjaCAoZXgpIHt9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIHNoYWRvdyhvYmosIHByb3AsIHZhbHVlKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIHByb3AsIHtcbiAgICB2YWx1ZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuY29uc3QgQmFzZUV4Y2VwdGlvbiA9IGZ1bmN0aW9uIEJhc2VFeGNlcHRpb25DbG9zdXJlKCkge1xuICBmdW5jdGlvbiBCYXNlRXhjZXB0aW9uKG1lc3NhZ2UsIG5hbWUpIHtcbiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gQmFzZUV4Y2VwdGlvbikge1xuICAgICAgdW5yZWFjaGFibGUoXCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlRXhjZXB0aW9uLlwiKTtcbiAgICB9XG5cbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gIH1cblxuICBCYXNlRXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuICBCYXNlRXhjZXB0aW9uLmNvbnN0cnVjdG9yID0gQmFzZUV4Y2VwdGlvbjtcbiAgcmV0dXJuIEJhc2VFeGNlcHRpb247XG59KCk7XG5cbmV4cG9ydHMuQmFzZUV4Y2VwdGlvbiA9IEJhc2VFeGNlcHRpb247XG5cbmNsYXNzIFBhc3N3b3JkRXhjZXB0aW9uIGV4dGVuZHMgQmFzZUV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKG1zZywgY29kZSkge1xuICAgIHN1cGVyKG1zZywgXCJQYXNzd29yZEV4Y2VwdGlvblwiKTtcbiAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICB9XG5cbn1cblxuZXhwb3J0cy5QYXNzd29yZEV4Y2VwdGlvbiA9IFBhc3N3b3JkRXhjZXB0aW9uO1xuXG5jbGFzcyBVbmtub3duRXJyb3JFeGNlcHRpb24gZXh0ZW5kcyBCYXNlRXhjZXB0aW9uIHtcbiAgY29uc3RydWN0b3IobXNnLCBkZXRhaWxzKSB7XG4gICAgc3VwZXIobXNnLCBcIlVua25vd25FcnJvckV4Y2VwdGlvblwiKTtcbiAgICB0aGlzLmRldGFpbHMgPSBkZXRhaWxzO1xuICB9XG5cbn1cblxuZXhwb3J0cy5Vbmtub3duRXJyb3JFeGNlcHRpb24gPSBVbmtub3duRXJyb3JFeGNlcHRpb247XG5cbmNsYXNzIEludmFsaWRQREZFeGNlcHRpb24gZXh0ZW5kcyBCYXNlRXhjZXB0aW9uIHtcbiAgY29uc3RydWN0b3IobXNnKSB7XG4gICAgc3VwZXIobXNnLCBcIkludmFsaWRQREZFeGNlcHRpb25cIik7XG4gIH1cblxufVxuXG5leHBvcnRzLkludmFsaWRQREZFeGNlcHRpb24gPSBJbnZhbGlkUERGRXhjZXB0aW9uO1xuXG5jbGFzcyBNaXNzaW5nUERGRXhjZXB0aW9uIGV4dGVuZHMgQmFzZUV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKG1zZykge1xuICAgIHN1cGVyKG1zZywgXCJNaXNzaW5nUERGRXhjZXB0aW9uXCIpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5NaXNzaW5nUERGRXhjZXB0aW9uID0gTWlzc2luZ1BERkV4Y2VwdGlvbjtcblxuY2xhc3MgVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uIGV4dGVuZHMgQmFzZUV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKG1zZywgc3RhdHVzKSB7XG4gICAgc3VwZXIobXNnLCBcIlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvblwiKTtcbiAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcbiAgfVxuXG59XG5cbmV4cG9ydHMuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uID0gVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uO1xuXG5jbGFzcyBGb3JtYXRFcnJvciBleHRlbmRzIEJhc2VFeGNlcHRpb24ge1xuICBjb25zdHJ1Y3Rvcihtc2cpIHtcbiAgICBzdXBlcihtc2csIFwiRm9ybWF0RXJyb3JcIik7XG4gIH1cblxufVxuXG5leHBvcnRzLkZvcm1hdEVycm9yID0gRm9ybWF0RXJyb3I7XG5cbmNsYXNzIEFib3J0RXhjZXB0aW9uIGV4dGVuZHMgQmFzZUV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKG1zZykge1xuICAgIHN1cGVyKG1zZywgXCJBYm9ydEV4Y2VwdGlvblwiKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuQWJvcnRFeGNlcHRpb24gPSBBYm9ydEV4Y2VwdGlvbjtcbmNvbnN0IE51bGxDaGFyYWN0ZXJzUmVnRXhwID0gL1xceDAwKy9nO1xuY29uc3QgSW52aXNpYmxlQ2hhcmFjdGVyc1JlZ0V4cCA9IC9bXFx4MDEtXFx4MUZdL2c7XG5cbmZ1bmN0aW9uIHJlbW92ZU51bGxDaGFyYWN0ZXJzKHN0ciwgcmVwbGFjZUludmlzaWJsZSA9IGZhbHNlKSB7XG4gIGlmICh0eXBlb2Ygc3RyICE9PSBcInN0cmluZ1wiKSB7XG4gICAgd2FybihcIlRoZSBhcmd1bWVudCBmb3IgcmVtb3ZlTnVsbENoYXJhY3RlcnMgbXVzdCBiZSBhIHN0cmluZy5cIik7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIGlmIChyZXBsYWNlSW52aXNpYmxlKSB7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UoSW52aXNpYmxlQ2hhcmFjdGVyc1JlZ0V4cCwgXCIgXCIpO1xuICB9XG5cbiAgcmV0dXJuIHN0ci5yZXBsYWNlKE51bGxDaGFyYWN0ZXJzUmVnRXhwLCBcIlwiKTtcbn1cblxuZnVuY3Rpb24gYnl0ZXNUb1N0cmluZyhieXRlcykge1xuICBhc3NlcnQoYnl0ZXMgIT09IG51bGwgJiYgdHlwZW9mIGJ5dGVzID09PSBcIm9iamVjdFwiICYmIGJ5dGVzLmxlbmd0aCAhPT0gdW5kZWZpbmVkLCBcIkludmFsaWQgYXJndW1lbnQgZm9yIGJ5dGVzVG9TdHJpbmdcIik7XG4gIGNvbnN0IGxlbmd0aCA9IGJ5dGVzLmxlbmd0aDtcbiAgY29uc3QgTUFYX0FSR1VNRU5UX0NPVU5UID0gODE5MjtcblxuICBpZiAobGVuZ3RoIDwgTUFYX0FSR1VNRU5UX0NPVU5UKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgYnl0ZXMpO1xuICB9XG5cbiAgY29uc3Qgc3RyQnVmID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gTUFYX0FSR1VNRU5UX0NPVU5UKSB7XG4gICAgY29uc3QgY2h1bmtFbmQgPSBNYXRoLm1pbihpICsgTUFYX0FSR1VNRU5UX0NPVU5ULCBsZW5ndGgpO1xuICAgIGNvbnN0IGNodW5rID0gYnl0ZXMuc3ViYXJyYXkoaSwgY2h1bmtFbmQpO1xuICAgIHN0ckJ1Zi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgY2h1bmspKTtcbiAgfVxuXG4gIHJldHVybiBzdHJCdWYuam9pbihcIlwiKTtcbn1cblxuZnVuY3Rpb24gc3RyaW5nVG9CeXRlcyhzdHIpIHtcbiAgYXNzZXJ0KHR5cGVvZiBzdHIgPT09IFwic3RyaW5nXCIsIFwiSW52YWxpZCBhcmd1bWVudCBmb3Igc3RyaW5nVG9CeXRlc1wiKTtcbiAgY29uc3QgbGVuZ3RoID0gc3RyLmxlbmd0aDtcbiAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShsZW5ndGgpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBieXRlc1tpXSA9IHN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZjtcbiAgfVxuXG4gIHJldHVybiBieXRlcztcbn1cblxuZnVuY3Rpb24gYXJyYXlCeXRlTGVuZ3RoKGFycikge1xuICBpZiAoYXJyLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGFyci5sZW5ndGg7XG4gIH1cblxuICBhc3NlcnQoYXJyLmJ5dGVMZW5ndGggIT09IHVuZGVmaW5lZCwgXCJhcnJheUJ5dGVMZW5ndGggLSBpbnZhbGlkIGFyZ3VtZW50LlwiKTtcbiAgcmV0dXJuIGFyci5ieXRlTGVuZ3RoO1xufVxuXG5mdW5jdGlvbiBhcnJheXNUb0J5dGVzKGFycikge1xuICBjb25zdCBsZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gIGlmIChsZW5ndGggPT09IDEgJiYgYXJyWzBdIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgIHJldHVybiBhcnJbMF07XG4gIH1cblxuICBsZXQgcmVzdWx0TGVuZ3RoID0gMDtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgcmVzdWx0TGVuZ3RoICs9IGFycmF5Qnl0ZUxlbmd0aChhcnJbaV0pO1xuICB9XG5cbiAgbGV0IHBvcyA9IDA7XG4gIGNvbnN0IGRhdGEgPSBuZXcgVWludDhBcnJheShyZXN1bHRMZW5ndGgpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgaXRlbSA9IGFycltpXTtcblxuICAgIGlmICghKGl0ZW0gaW5zdGFuY2VvZiBVaW50OEFycmF5KSkge1xuICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGl0ZW0gPSBzdHJpbmdUb0J5dGVzKGl0ZW0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXRlbSA9IG5ldyBVaW50OEFycmF5KGl0ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGl0ZW1MZW5ndGggPSBpdGVtLmJ5dGVMZW5ndGg7XG4gICAgZGF0YS5zZXQoaXRlbSwgcG9zKTtcbiAgICBwb3MgKz0gaXRlbUxlbmd0aDtcbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBzdHJpbmczMih2YWx1ZSkge1xuICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSh2YWx1ZSA+PiAyNCAmIDB4ZmYsIHZhbHVlID4+IDE2ICYgMHhmZiwgdmFsdWUgPj4gOCAmIDB4ZmYsIHZhbHVlICYgMHhmZik7XG59XG5cbmZ1bmN0aW9uIG9iamVjdFNpemUob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aDtcbn1cblxuZnVuY3Rpb24gb2JqZWN0RnJvbU1hcChtYXApIHtcbiAgY29uc3Qgb2JqID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBtYXApIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuZnVuY3Rpb24gaXNMaXR0bGVFbmRpYW4oKSB7XG4gIGNvbnN0IGJ1ZmZlcjggPSBuZXcgVWludDhBcnJheSg0KTtcbiAgYnVmZmVyOFswXSA9IDE7XG4gIGNvbnN0IHZpZXczMiA9IG5ldyBVaW50MzJBcnJheShidWZmZXI4LmJ1ZmZlciwgMCwgMSk7XG4gIHJldHVybiB2aWV3MzJbMF0gPT09IDE7XG59XG5cbmNvbnN0IElzTGl0dGxlRW5kaWFuQ2FjaGVkID0ge1xuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHNoYWRvdyh0aGlzLCBcInZhbHVlXCIsIGlzTGl0dGxlRW5kaWFuKCkpO1xuICB9XG5cbn07XG5leHBvcnRzLklzTGl0dGxlRW5kaWFuQ2FjaGVkID0gSXNMaXR0bGVFbmRpYW5DYWNoZWQ7XG5cbmZ1bmN0aW9uIGlzRXZhbFN1cHBvcnRlZCgpIHtcbiAgdHJ5IHtcbiAgICBuZXcgRnVuY3Rpb24oXCJcIik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuY29uc3QgSXNFdmFsU3VwcG9ydGVkQ2FjaGVkID0ge1xuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHNoYWRvdyh0aGlzLCBcInZhbHVlXCIsIGlzRXZhbFN1cHBvcnRlZCgpKTtcbiAgfVxuXG59O1xuZXhwb3J0cy5Jc0V2YWxTdXBwb3J0ZWRDYWNoZWQgPSBJc0V2YWxTdXBwb3J0ZWRDYWNoZWQ7XG5jb25zdCBoZXhOdW1iZXJzID0gWy4uLkFycmF5KDI1Nikua2V5cygpXS5tYXAobiA9PiBuLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCBcIjBcIikpO1xuXG5jbGFzcyBVdGlsIHtcbiAgc3RhdGljIG1ha2VIZXhDb2xvcihyLCBnLCBiKSB7XG4gICAgcmV0dXJuIGAjJHtoZXhOdW1iZXJzW3JdfSR7aGV4TnVtYmVyc1tnXX0ke2hleE51bWJlcnNbYl19YDtcbiAgfVxuXG4gIHN0YXRpYyB0cmFuc2Zvcm0obTEsIG0yKSB7XG4gICAgcmV0dXJuIFttMVswXSAqIG0yWzBdICsgbTFbMl0gKiBtMlsxXSwgbTFbMV0gKiBtMlswXSArIG0xWzNdICogbTJbMV0sIG0xWzBdICogbTJbMl0gKyBtMVsyXSAqIG0yWzNdLCBtMVsxXSAqIG0yWzJdICsgbTFbM10gKiBtMlszXSwgbTFbMF0gKiBtMls0XSArIG0xWzJdICogbTJbNV0gKyBtMVs0XSwgbTFbMV0gKiBtMls0XSArIG0xWzNdICogbTJbNV0gKyBtMVs1XV07XG4gIH1cblxuICBzdGF0aWMgYXBwbHlUcmFuc2Zvcm0ocCwgbSkge1xuICAgIGNvbnN0IHh0ID0gcFswXSAqIG1bMF0gKyBwWzFdICogbVsyXSArIG1bNF07XG4gICAgY29uc3QgeXQgPSBwWzBdICogbVsxXSArIHBbMV0gKiBtWzNdICsgbVs1XTtcbiAgICByZXR1cm4gW3h0LCB5dF07XG4gIH1cblxuICBzdGF0aWMgYXBwbHlJbnZlcnNlVHJhbnNmb3JtKHAsIG0pIHtcbiAgICBjb25zdCBkID0gbVswXSAqIG1bM10gLSBtWzFdICogbVsyXTtcbiAgICBjb25zdCB4dCA9IChwWzBdICogbVszXSAtIHBbMV0gKiBtWzJdICsgbVsyXSAqIG1bNV0gLSBtWzRdICogbVszXSkgLyBkO1xuICAgIGNvbnN0IHl0ID0gKC1wWzBdICogbVsxXSArIHBbMV0gKiBtWzBdICsgbVs0XSAqIG1bMV0gLSBtWzVdICogbVswXSkgLyBkO1xuICAgIHJldHVybiBbeHQsIHl0XTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRBeGlhbEFsaWduZWRCb3VuZGluZ0JveChyLCBtKSB7XG4gICAgY29uc3QgcDEgPSBVdGlsLmFwcGx5VHJhbnNmb3JtKHIsIG0pO1xuICAgIGNvbnN0IHAyID0gVXRpbC5hcHBseVRyYW5zZm9ybShyLnNsaWNlKDIsIDQpLCBtKTtcbiAgICBjb25zdCBwMyA9IFV0aWwuYXBwbHlUcmFuc2Zvcm0oW3JbMF0sIHJbM11dLCBtKTtcbiAgICBjb25zdCBwNCA9IFV0aWwuYXBwbHlUcmFuc2Zvcm0oW3JbMl0sIHJbMV1dLCBtKTtcbiAgICByZXR1cm4gW01hdGgubWluKHAxWzBdLCBwMlswXSwgcDNbMF0sIHA0WzBdKSwgTWF0aC5taW4ocDFbMV0sIHAyWzFdLCBwM1sxXSwgcDRbMV0pLCBNYXRoLm1heChwMVswXSwgcDJbMF0sIHAzWzBdLCBwNFswXSksIE1hdGgubWF4KHAxWzFdLCBwMlsxXSwgcDNbMV0sIHA0WzFdKV07XG4gIH1cblxuICBzdGF0aWMgaW52ZXJzZVRyYW5zZm9ybShtKSB7XG4gICAgY29uc3QgZCA9IG1bMF0gKiBtWzNdIC0gbVsxXSAqIG1bMl07XG4gICAgcmV0dXJuIFttWzNdIC8gZCwgLW1bMV0gLyBkLCAtbVsyXSAvIGQsIG1bMF0gLyBkLCAobVsyXSAqIG1bNV0gLSBtWzRdICogbVszXSkgLyBkLCAobVs0XSAqIG1bMV0gLSBtWzVdICogbVswXSkgLyBkXTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseTNkVHJhbnNmb3JtKG0sIHYpIHtcbiAgICByZXR1cm4gW21bMF0gKiB2WzBdICsgbVsxXSAqIHZbMV0gKyBtWzJdICogdlsyXSwgbVszXSAqIHZbMF0gKyBtWzRdICogdlsxXSArIG1bNV0gKiB2WzJdLCBtWzZdICogdlswXSArIG1bN10gKiB2WzFdICsgbVs4XSAqIHZbMl1dO1xuICB9XG5cbiAgc3RhdGljIHNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKG0pIHtcbiAgICBjb25zdCB0cmFuc3Bvc2UgPSBbbVswXSwgbVsyXSwgbVsxXSwgbVszXV07XG4gICAgY29uc3QgYSA9IG1bMF0gKiB0cmFuc3Bvc2VbMF0gKyBtWzFdICogdHJhbnNwb3NlWzJdO1xuICAgIGNvbnN0IGIgPSBtWzBdICogdHJhbnNwb3NlWzFdICsgbVsxXSAqIHRyYW5zcG9zZVszXTtcbiAgICBjb25zdCBjID0gbVsyXSAqIHRyYW5zcG9zZVswXSArIG1bM10gKiB0cmFuc3Bvc2VbMl07XG4gICAgY29uc3QgZCA9IG1bMl0gKiB0cmFuc3Bvc2VbMV0gKyBtWzNdICogdHJhbnNwb3NlWzNdO1xuICAgIGNvbnN0IGZpcnN0ID0gKGEgKyBkKSAvIDI7XG4gICAgY29uc3Qgc2Vjb25kID0gTWF0aC5zcXJ0KChhICsgZCkgKiogMiAtIDQgKiAoYSAqIGQgLSBjICogYikpIC8gMjtcbiAgICBjb25zdCBzeCA9IGZpcnN0ICsgc2Vjb25kIHx8IDE7XG4gICAgY29uc3Qgc3kgPSBmaXJzdCAtIHNlY29uZCB8fCAxO1xuICAgIHJldHVybiBbTWF0aC5zcXJ0KHN4KSwgTWF0aC5zcXJ0KHN5KV07XG4gIH1cblxuICBzdGF0aWMgbm9ybWFsaXplUmVjdChyZWN0KSB7XG4gICAgY29uc3QgciA9IHJlY3Quc2xpY2UoMCk7XG5cbiAgICBpZiAocmVjdFswXSA+IHJlY3RbMl0pIHtcbiAgICAgIHJbMF0gPSByZWN0WzJdO1xuICAgICAgclsyXSA9IHJlY3RbMF07XG4gICAgfVxuXG4gICAgaWYgKHJlY3RbMV0gPiByZWN0WzNdKSB7XG4gICAgICByWzFdID0gcmVjdFszXTtcbiAgICAgIHJbM10gPSByZWN0WzFdO1xuICAgIH1cblxuICAgIHJldHVybiByO1xuICB9XG5cbiAgc3RhdGljIGludGVyc2VjdChyZWN0MSwgcmVjdDIpIHtcbiAgICBmdW5jdGlvbiBjb21wYXJlKGEsIGIpIHtcbiAgICAgIHJldHVybiBhIC0gYjtcbiAgICB9XG5cbiAgICBjb25zdCBvcmRlcmVkWCA9IFtyZWN0MVswXSwgcmVjdDFbMl0sIHJlY3QyWzBdLCByZWN0MlsyXV0uc29ydChjb21wYXJlKTtcbiAgICBjb25zdCBvcmRlcmVkWSA9IFtyZWN0MVsxXSwgcmVjdDFbM10sIHJlY3QyWzFdLCByZWN0MlszXV0uc29ydChjb21wYXJlKTtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICByZWN0MSA9IFV0aWwubm9ybWFsaXplUmVjdChyZWN0MSk7XG4gICAgcmVjdDIgPSBVdGlsLm5vcm1hbGl6ZVJlY3QocmVjdDIpO1xuXG4gICAgaWYgKG9yZGVyZWRYWzBdID09PSByZWN0MVswXSAmJiBvcmRlcmVkWFsxXSA9PT0gcmVjdDJbMF0gfHwgb3JkZXJlZFhbMF0gPT09IHJlY3QyWzBdICYmIG9yZGVyZWRYWzFdID09PSByZWN0MVswXSkge1xuICAgICAgcmVzdWx0WzBdID0gb3JkZXJlZFhbMV07XG4gICAgICByZXN1bHRbMl0gPSBvcmRlcmVkWFsyXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKG9yZGVyZWRZWzBdID09PSByZWN0MVsxXSAmJiBvcmRlcmVkWVsxXSA9PT0gcmVjdDJbMV0gfHwgb3JkZXJlZFlbMF0gPT09IHJlY3QyWzFdICYmIG9yZGVyZWRZWzFdID09PSByZWN0MVsxXSkge1xuICAgICAgcmVzdWx0WzFdID0gb3JkZXJlZFlbMV07XG4gICAgICByZXN1bHRbM10gPSBvcmRlcmVkWVsyXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHN0YXRpYyBiZXppZXJCb3VuZGluZ0JveCh4MCwgeTAsIHgxLCB5MSwgeDIsIHkyLCB4MywgeTMpIHtcbiAgICBjb25zdCB0dmFsdWVzID0gW10sXG4gICAgICAgICAgYm91bmRzID0gW1tdLCBbXV07XG4gICAgbGV0IGEsIGIsIGMsIHQsIHQxLCB0MiwgYjJhYywgc3FydGIyYWM7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDI7ICsraSkge1xuICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgYiA9IDYgKiB4MCAtIDEyICogeDEgKyA2ICogeDI7XG4gICAgICAgIGEgPSAtMyAqIHgwICsgOSAqIHgxIC0gOSAqIHgyICsgMyAqIHgzO1xuICAgICAgICBjID0gMyAqIHgxIC0gMyAqIHgwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYiA9IDYgKiB5MCAtIDEyICogeTEgKyA2ICogeTI7XG4gICAgICAgIGEgPSAtMyAqIHkwICsgOSAqIHkxIC0gOSAqIHkyICsgMyAqIHkzO1xuICAgICAgICBjID0gMyAqIHkxIC0gMyAqIHkwO1xuICAgICAgfVxuXG4gICAgICBpZiAoTWF0aC5hYnMoYSkgPCAxZS0xMikge1xuICAgICAgICBpZiAoTWF0aC5hYnMoYikgPCAxZS0xMikge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdCA9IC1jIC8gYjtcblxuICAgICAgICBpZiAoMCA8IHQgJiYgdCA8IDEpIHtcbiAgICAgICAgICB0dmFsdWVzLnB1c2godCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgYjJhYyA9IGIgKiBiIC0gNCAqIGMgKiBhO1xuICAgICAgc3FydGIyYWMgPSBNYXRoLnNxcnQoYjJhYyk7XG5cbiAgICAgIGlmIChiMmFjIDwgMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdDEgPSAoLWIgKyBzcXJ0YjJhYykgLyAoMiAqIGEpO1xuXG4gICAgICBpZiAoMCA8IHQxICYmIHQxIDwgMSkge1xuICAgICAgICB0dmFsdWVzLnB1c2godDEpO1xuICAgICAgfVxuXG4gICAgICB0MiA9ICgtYiAtIHNxcnRiMmFjKSAvICgyICogYSk7XG5cbiAgICAgIGlmICgwIDwgdDIgJiYgdDIgPCAxKSB7XG4gICAgICAgIHR2YWx1ZXMucHVzaCh0Mik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGogPSB0dmFsdWVzLmxlbmd0aCxcbiAgICAgICAgbXQ7XG4gICAgY29uc3QgamxlbiA9IGo7XG5cbiAgICB3aGlsZSAoai0tKSB7XG4gICAgICB0ID0gdHZhbHVlc1tqXTtcbiAgICAgIG10ID0gMSAtIHQ7XG4gICAgICBib3VuZHNbMF1bal0gPSBtdCAqIG10ICogbXQgKiB4MCArIDMgKiBtdCAqIG10ICogdCAqIHgxICsgMyAqIG10ICogdCAqIHQgKiB4MiArIHQgKiB0ICogdCAqIHgzO1xuICAgICAgYm91bmRzWzFdW2pdID0gbXQgKiBtdCAqIG10ICogeTAgKyAzICogbXQgKiBtdCAqIHQgKiB5MSArIDMgKiBtdCAqIHQgKiB0ICogeTIgKyB0ICogdCAqIHQgKiB5MztcbiAgICB9XG5cbiAgICBib3VuZHNbMF1bamxlbl0gPSB4MDtcbiAgICBib3VuZHNbMV1bamxlbl0gPSB5MDtcbiAgICBib3VuZHNbMF1bamxlbiArIDFdID0geDM7XG4gICAgYm91bmRzWzFdW2psZW4gKyAxXSA9IHkzO1xuICAgIGJvdW5kc1swXS5sZW5ndGggPSBib3VuZHNbMV0ubGVuZ3RoID0gamxlbiArIDI7XG4gICAgcmV0dXJuIFtNYXRoLm1pbiguLi5ib3VuZHNbMF0pLCBNYXRoLm1pbiguLi5ib3VuZHNbMV0pLCBNYXRoLm1heCguLi5ib3VuZHNbMF0pLCBNYXRoLm1heCguLi5ib3VuZHNbMV0pXTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuVXRpbCA9IFV0aWw7XG5jb25zdCBQREZTdHJpbmdUcmFuc2xhdGVUYWJsZSA9IFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAweDJkOCwgMHgyYzcsIDB4MmM2LCAweDJkOSwgMHgyZGQsIDB4MmRiLCAweDJkYSwgMHgyZGMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB4MjAyMiwgMHgyMDIwLCAweDIwMjEsIDB4MjAyNiwgMHgyMDE0LCAweDIwMTMsIDB4MTkyLCAweDIwNDQsIDB4MjAzOSwgMHgyMDNhLCAweDIyMTIsIDB4MjAzMCwgMHgyMDFlLCAweDIwMWMsIDB4MjAxZCwgMHgyMDE4LCAweDIwMTksIDB4MjAxYSwgMHgyMTIyLCAweGZiMDEsIDB4ZmIwMiwgMHgxNDEsIDB4MTUyLCAweDE2MCwgMHgxNzgsIDB4MTdkLCAweDEzMSwgMHgxNDIsIDB4MTUzLCAweDE2MSwgMHgxN2UsIDAsIDB4MjBhY107XG5cbmZ1bmN0aW9uIHN0cmluZ1RvUERGU3RyaW5nKHN0cikge1xuICBjb25zdCBsZW5ndGggPSBzdHIubGVuZ3RoLFxuICAgICAgICBzdHJCdWYgPSBbXTtcblxuICBpZiAoc3RyWzBdID09PSBcIlxceEZFXCIgJiYgc3RyWzFdID09PSBcIlxceEZGXCIpIHtcbiAgICBmb3IgKGxldCBpID0gMjsgaSA8IGxlbmd0aDsgaSArPSAyKSB7XG4gICAgICBzdHJCdWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHN0ci5jaGFyQ29kZUF0KGkpIDw8IDggfCBzdHIuY2hhckNvZGVBdChpICsgMSkpKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoc3RyWzBdID09PSBcIlxceEZGXCIgJiYgc3RyWzFdID09PSBcIlxceEZFXCIpIHtcbiAgICBmb3IgKGxldCBpID0gMjsgaSA8IGxlbmd0aDsgaSArPSAyKSB7XG4gICAgICBzdHJCdWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHN0ci5jaGFyQ29kZUF0KGkgKyAxKSA8PCA4IHwgc3RyLmNoYXJDb2RlQXQoaSkpKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgY29uc3QgY29kZSA9IFBERlN0cmluZ1RyYW5zbGF0ZVRhYmxlW3N0ci5jaGFyQ29kZUF0KGkpXTtcbiAgICAgIHN0ckJ1Zi5wdXNoKGNvZGUgPyBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpIDogc3RyLmNoYXJBdChpKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0ckJ1Zi5qb2luKFwiXCIpO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVTdHJpbmcoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvKFsoKVxcXFxcXG5cXHJdKS9nLCBtYXRjaCA9PiB7XG4gICAgaWYgKG1hdGNoID09PSBcIlxcblwiKSB7XG4gICAgICByZXR1cm4gXCJcXFxcblwiO1xuICAgIH0gZWxzZSBpZiAobWF0Y2ggPT09IFwiXFxyXCIpIHtcbiAgICAgIHJldHVybiBcIlxcXFxyXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGBcXFxcJHttYXRjaH1gO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaXNBc2NpaShzdHIpIHtcbiAgcmV0dXJuIC9eW1xceDAwLVxceDdGXSokLy50ZXN0KHN0cik7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ1RvVVRGMTZCRVN0cmluZyhzdHIpIHtcbiAgY29uc3QgYnVmID0gW1wiXFx4RkVcXHhGRlwiXTtcblxuICBmb3IgKGxldCBpID0gMCwgaWkgPSBzdHIubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgIGNvbnN0IGNoYXIgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICBidWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXIgPj4gOCAmIDB4ZmYpLCBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXIgJiAweGZmKSk7XG4gIH1cblxuICByZXR1cm4gYnVmLmpvaW4oXCJcIik7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ1RvVVRGOFN0cmluZyhzdHIpIHtcbiAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoc3RyKSk7XG59XG5cbmZ1bmN0aW9uIHV0ZjhTdHJpbmdUb1N0cmluZyhzdHIpIHtcbiAgcmV0dXJuIHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChzdHIpKTtcbn1cblxuZnVuY3Rpb24gaXNCb29sKHYpIHtcbiAgcmV0dXJuIHR5cGVvZiB2ID09PSBcImJvb2xlYW5cIjtcbn1cblxuZnVuY3Rpb24gaXNOdW0odikge1xuICByZXR1cm4gdHlwZW9mIHYgPT09IFwibnVtYmVyXCI7XG59XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKHYpIHtcbiAgcmV0dXJuIHR5cGVvZiB2ID09PSBcInN0cmluZ1wiO1xufVxuXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyKHYpIHtcbiAgcmV0dXJuIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIHYgIT09IG51bGwgJiYgdi5ieXRlTGVuZ3RoICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXlFcXVhbChhcnIxLCBhcnIyKSB7XG4gIGlmIChhcnIxLmxlbmd0aCAhPT0gYXJyMi5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMCwgaWkgPSBhcnIxLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICBpZiAoYXJyMVtpXSAhPT0gYXJyMltpXSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBnZXRNb2RpZmljYXRpb25EYXRlKGRhdGUgPSBuZXcgRGF0ZSgpKSB7XG4gIGNvbnN0IGJ1ZmZlciA9IFtkYXRlLmdldFVUQ0Z1bGxZZWFyKCkudG9TdHJpbmcoKSwgKGRhdGUuZ2V0VVRDTW9udGgoKSArIDEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgXCIwXCIpLCBkYXRlLmdldFVUQ0RhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKSwgZGF0ZS5nZXRVVENIb3VycygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgXCIwXCIpLCBkYXRlLmdldFVUQ01pbnV0ZXMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKSwgZGF0ZS5nZXRVVENTZWNvbmRzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIildO1xuICByZXR1cm4gYnVmZmVyLmpvaW4oXCJcIik7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KCkge1xuICBjb25zdCBjYXBhYmlsaXR5ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgbGV0IGlzU2V0dGxlZCA9IGZhbHNlO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2FwYWJpbGl0eSwgXCJzZXR0bGVkXCIsIHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gaXNTZXR0bGVkO1xuICAgIH1cblxuICB9KTtcbiAgY2FwYWJpbGl0eS5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIGNhcGFiaWxpdHkucmVzb2x2ZSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICBpc1NldHRsZWQgPSB0cnVlO1xuICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICB9O1xuXG4gICAgY2FwYWJpbGl0eS5yZWplY3QgPSBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICBpc1NldHRsZWQgPSB0cnVlO1xuICAgICAgcmVqZWN0KHJlYXNvbik7XG4gICAgfTtcbiAgfSk7XG4gIHJldHVybiBjYXBhYmlsaXR5O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPYmplY3RVUkwoZGF0YSwgY29udGVudFR5cGUgPSBcIlwiLCBmb3JjZURhdGFTY2hlbWEgPSBmYWxzZSkge1xuICBpZiAoVVJMLmNyZWF0ZU9iamVjdFVSTCAmJiB0eXBlb2YgQmxvYiAhPT0gXCJ1bmRlZmluZWRcIiAmJiAhZm9yY2VEYXRhU2NoZW1hKSB7XG4gICAgcmV0dXJuIFVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW2RhdGFdLCB7XG4gICAgICB0eXBlOiBjb250ZW50VHlwZVxuICAgIH0pKTtcbiAgfVxuXG4gIGNvbnN0IGRpZ2l0cyA9IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIjtcbiAgbGV0IGJ1ZmZlciA9IGBkYXRhOiR7Y29udGVudFR5cGV9O2Jhc2U2NCxgO1xuXG4gIGZvciAobGV0IGkgPSAwLCBpaSA9IGRhdGEubGVuZ3RoOyBpIDwgaWk7IGkgKz0gMykge1xuICAgIGNvbnN0IGIxID0gZGF0YVtpXSAmIDB4ZmY7XG4gICAgY29uc3QgYjIgPSBkYXRhW2kgKyAxXSAmIDB4ZmY7XG4gICAgY29uc3QgYjMgPSBkYXRhW2kgKyAyXSAmIDB4ZmY7XG4gICAgY29uc3QgZDEgPSBiMSA+PiAyLFxuICAgICAgICAgIGQyID0gKGIxICYgMykgPDwgNCB8IGIyID4+IDQ7XG4gICAgY29uc3QgZDMgPSBpICsgMSA8IGlpID8gKGIyICYgMHhmKSA8PCAyIHwgYjMgPj4gNiA6IDY0O1xuICAgIGNvbnN0IGQ0ID0gaSArIDIgPCBpaSA/IGIzICYgMHgzZiA6IDY0O1xuICAgIGJ1ZmZlciArPSBkaWdpdHNbZDFdICsgZGlnaXRzW2QyXSArIGRpZ2l0c1tkM10gKyBkaWdpdHNbZDRdO1xuICB9XG5cbiAgcmV0dXJuIGJ1ZmZlcjtcbn1cblxuLyoqKi8gfSksXG4vKiAzICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbnZhciBfaXNfbm9kZSA9IF9fd19wZGZqc19yZXF1aXJlX18oNCk7XG5cbjtcblxuLyoqKi8gfSksXG4vKiA0ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLmlzTm9kZUpTID0gdm9pZCAwO1xuY29uc3QgaXNOb2RlSlMgPSB0eXBlb2YgcHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJiBwcm9jZXNzICsgXCJcIiA9PT0gXCJbb2JqZWN0IHByb2Nlc3NdXCIgJiYgIXByb2Nlc3MudmVyc2lvbnMubncgJiYgIShwcm9jZXNzLnZlcnNpb25zLmVsZWN0cm9uICYmIHByb2Nlc3MudHlwZSAmJiBwcm9jZXNzLnR5cGUgIT09IFwiYnJvd3NlclwiKTtcbmV4cG9ydHMuaXNOb2RlSlMgPSBpc05vZGVKUztcblxuLyoqKi8gfSksXG4vKiA1ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLkJhc2VTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSA9IGV4cG9ydHMuQmFzZVNWR0ZhY3RvcnkgPSBleHBvcnRzLkJhc2VDYW52YXNGYWN0b3J5ID0gZXhwb3J0cy5CYXNlQ01hcFJlYWRlckZhY3RvcnkgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbmNsYXNzIEJhc2VDYW52YXNGYWN0b3J5IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKHRoaXMuY29uc3RydWN0b3IgPT09IEJhc2VDYW52YXNGYWN0b3J5KSB7XG4gICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQ2Fubm90IGluaXRpYWxpemUgQmFzZUNhbnZhc0ZhY3RvcnkuXCIpO1xuICAgIH1cbiAgfVxuXG4gIGNyZWF0ZSh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY2FudmFzIHNpemVcIik7XG4gICAgfVxuXG4gICAgY29uc3QgY2FudmFzID0gdGhpcy5fY3JlYXRlQ2FudmFzKHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNhbnZhcyxcbiAgICAgIGNvbnRleHQ6IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIilcbiAgICB9O1xuICB9XG5cbiAgcmVzZXQoY2FudmFzQW5kQ29udGV4dCwgd2lkdGgsIGhlaWdodCkge1xuICAgIGlmICghY2FudmFzQW5kQ29udGV4dC5jYW52YXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbnZhcyBpcyBub3Qgc3BlY2lmaWVkXCIpO1xuICAgIH1cblxuICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGNhbnZhcyBzaXplXCIpO1xuICAgIH1cblxuICAgIGNhbnZhc0FuZENvbnRleHQuY2FudmFzLndpZHRoID0gd2lkdGg7XG4gICAgY2FudmFzQW5kQ29udGV4dC5jYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICB9XG5cbiAgZGVzdHJveShjYW52YXNBbmRDb250ZXh0KSB7XG4gICAgaWYgKCFjYW52YXNBbmRDb250ZXh0LmNhbnZhcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FudmFzIGlzIG5vdCBzcGVjaWZpZWRcIik7XG4gICAgfVxuXG4gICAgY2FudmFzQW5kQ29udGV4dC5jYW52YXMud2lkdGggPSAwO1xuICAgIGNhbnZhc0FuZENvbnRleHQuY2FudmFzLmhlaWdodCA9IDA7XG4gICAgY2FudmFzQW5kQ29udGV4dC5jYW52YXMgPSBudWxsO1xuICAgIGNhbnZhc0FuZENvbnRleHQuY29udGV4dCA9IG51bGw7XG4gIH1cblxuICBfY3JlYXRlQ2FudmFzKHdpZHRoLCBoZWlnaHQpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQWJzdHJhY3QgbWV0aG9kIGBfY3JlYXRlQ2FudmFzYCBjYWxsZWQuXCIpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5CYXNlQ2FudmFzRmFjdG9yeSA9IEJhc2VDYW52YXNGYWN0b3J5O1xuXG5jbGFzcyBCYXNlQ01hcFJlYWRlckZhY3Rvcnkge1xuICBjb25zdHJ1Y3Rvcih7XG4gICAgYmFzZVVybCA9IG51bGwsXG4gICAgaXNDb21wcmVzc2VkID0gZmFsc2VcbiAgfSkge1xuICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBCYXNlQ01hcFJlYWRlckZhY3RvcnkpIHtcbiAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlQ01hcFJlYWRlckZhY3RvcnkuXCIpO1xuICAgIH1cblxuICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmw7XG4gICAgdGhpcy5pc0NvbXByZXNzZWQgPSBpc0NvbXByZXNzZWQ7XG4gIH1cblxuICBhc3luYyBmZXRjaCh7XG4gICAgbmFtZVxuICB9KSB7XG4gICAgaWYgKCF0aGlzLmJhc2VVcmwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIENNYXAgXCJiYXNlVXJsXCIgcGFyYW1ldGVyIG11c3QgYmUgc3BlY2lmaWVkLCBlbnN1cmUgdGhhdCAnICsgJ3RoZSBcImNNYXBVcmxcIiBhbmQgXCJjTWFwUGFja2VkXCIgQVBJIHBhcmFtZXRlcnMgYXJlIHByb3ZpZGVkLicpO1xuICAgIH1cblxuICAgIGlmICghbmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ01hcCBuYW1lIG11c3QgYmUgc3BlY2lmaWVkLlwiKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLmJhc2VVcmwgKyBuYW1lICsgKHRoaXMuaXNDb21wcmVzc2VkID8gXCIuYmNtYXBcIiA6IFwiXCIpO1xuICAgIGNvbnN0IGNvbXByZXNzaW9uVHlwZSA9IHRoaXMuaXNDb21wcmVzc2VkID8gX3V0aWwuQ01hcENvbXByZXNzaW9uVHlwZS5CSU5BUlkgOiBfdXRpbC5DTWFwQ29tcHJlc3Npb25UeXBlLk5PTkU7XG4gICAgcmV0dXJuIHRoaXMuX2ZldGNoRGF0YSh1cmwsIGNvbXByZXNzaW9uVHlwZSkuY2F0Y2gocmVhc29uID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIGxvYWQgJHt0aGlzLmlzQ29tcHJlc3NlZCA/IFwiYmluYXJ5IFwiIDogXCJcIn1DTWFwIGF0OiAke3VybH1gKTtcbiAgICB9KTtcbiAgfVxuXG4gIF9mZXRjaERhdGEodXJsLCBjb21wcmVzc2lvblR5cGUpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQWJzdHJhY3QgbWV0aG9kIGBfZmV0Y2hEYXRhYCBjYWxsZWQuXCIpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5CYXNlQ01hcFJlYWRlckZhY3RvcnkgPSBCYXNlQ01hcFJlYWRlckZhY3Rvcnk7XG5cbmNsYXNzIEJhc2VTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSB7XG4gIGNvbnN0cnVjdG9yKHtcbiAgICBiYXNlVXJsID0gbnVsbFxuICB9KSB7XG4gICAgaWYgKHRoaXMuY29uc3RydWN0b3IgPT09IEJhc2VTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSkge1xuICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIkNhbm5vdCBpbml0aWFsaXplIEJhc2VTdGFuZGFyZEZvbnREYXRhRmFjdG9yeS5cIik7XG4gICAgfVxuXG4gICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybDtcbiAgfVxuXG4gIGFzeW5jIGZldGNoKHtcbiAgICBmaWxlbmFtZVxuICB9KSB7XG4gICAgaWYgKCF0aGlzLmJhc2VVcmwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHN0YW5kYXJkIGZvbnQgXCJiYXNlVXJsXCIgcGFyYW1ldGVyIG11c3QgYmUgc3BlY2lmaWVkLCBlbnN1cmUgdGhhdCAnICsgJ3RoZSBcInN0YW5kYXJkRm9udERhdGFVcmxcIiBBUEkgcGFyYW1ldGVyIGlzIHByb3ZpZGVkLicpO1xuICAgIH1cblxuICAgIGlmICghZmlsZW5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkZvbnQgZmlsZW5hbWUgbXVzdCBiZSBzcGVjaWZpZWQuXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuYmFzZVVybH0ke2ZpbGVuYW1lfWA7XG4gICAgcmV0dXJuIHRoaXMuX2ZldGNoRGF0YSh1cmwpLmNhdGNoKHJlYXNvbiA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBsb2FkIGZvbnQgZGF0YSBhdDogJHt1cmx9YCk7XG4gICAgfSk7XG4gIH1cblxuICBfZmV0Y2hEYXRhKHVybCkge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJBYnN0cmFjdCBtZXRob2QgYF9mZXRjaERhdGFgIGNhbGxlZC5cIik7XG4gIH1cblxufVxuXG5leHBvcnRzLkJhc2VTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSA9IEJhc2VTdGFuZGFyZEZvbnREYXRhRmFjdG9yeTtcblxuY2xhc3MgQmFzZVNWR0ZhY3Rvcnkge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gQmFzZVNWR0ZhY3RvcnkpIHtcbiAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlU1ZHRmFjdG9yeS5cIik7XG4gICAgfVxuICB9XG5cbiAgY3JlYXRlKHdpZHRoLCBoZWlnaHQpIHtcbiAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBTVkcgZGltZW5zaW9uc1wiKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdmcgPSB0aGlzLl9jcmVhdGVTVkcoXCJzdmc6c3ZnXCIpO1xuXG4gICAgc3ZnLnNldEF0dHJpYnV0ZShcInZlcnNpb25cIiwgXCIxLjFcIik7XG4gICAgc3ZnLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIGAke3dpZHRofXB4YCk7XG4gICAgc3ZnLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBgJHtoZWlnaHR9cHhgKTtcbiAgICBzdmcuc2V0QXR0cmlidXRlKFwicHJlc2VydmVBc3BlY3RSYXRpb1wiLCBcIm5vbmVcIik7XG4gICAgc3ZnLnNldEF0dHJpYnV0ZShcInZpZXdCb3hcIiwgYDAgMCAke3dpZHRofSAke2hlaWdodH1gKTtcbiAgICByZXR1cm4gc3ZnO1xuICB9XG5cbiAgY3JlYXRlRWxlbWVudCh0eXBlKSB7XG4gICAgaWYgKHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIFNWRyBlbGVtZW50IHR5cGVcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZVNWRyh0eXBlKTtcbiAgfVxuXG4gIF9jcmVhdGVTVkcodHlwZSkge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJBYnN0cmFjdCBtZXRob2QgYF9jcmVhdGVTVkdgIGNhbGxlZC5cIik7XG4gIH1cblxufVxuXG5leHBvcnRzLkJhc2VTVkdGYWN0b3J5ID0gQmFzZVNWR0ZhY3Rvcnk7XG5cbi8qKiovIH0pLFxuLyogNiAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5idWlsZCA9IGV4cG9ydHMuUmVuZGVyVGFzayA9IGV4cG9ydHMuUERGV29ya2VyID0gZXhwb3J0cy5QREZQYWdlUHJveHkgPSBleHBvcnRzLlBERkRvY3VtZW50UHJveHkgPSBleHBvcnRzLlBERkRvY3VtZW50TG9hZGluZ1Rhc2sgPSBleHBvcnRzLlBERkRhdGFSYW5nZVRyYW5zcG9ydCA9IGV4cG9ydHMuTG9vcGJhY2tQb3J0ID0gZXhwb3J0cy5EZWZhdWx0U3RhbmRhcmRGb250RGF0YUZhY3RvcnkgPSBleHBvcnRzLkRlZmF1bHRDYW52YXNGYWN0b3J5ID0gZXhwb3J0cy5EZWZhdWx0Q01hcFJlYWRlckZhY3RvcnkgPSB2b2lkIDA7XG5leHBvcnRzLmdldERvY3VtZW50ID0gZ2V0RG9jdW1lbnQ7XG5leHBvcnRzLnNldFBERk5ldHdvcmtTdHJlYW1GYWN0b3J5ID0gc2V0UERGTmV0d29ya1N0cmVhbUZhY3Rvcnk7XG5leHBvcnRzLnZlcnNpb24gPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfZGlzcGxheV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oMSk7XG5cbnZhciBfZm9udF9sb2FkZXIgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDcpO1xuXG52YXIgX25vZGVfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDgpO1xuXG52YXIgX2Fubm90YXRpb25fc3RvcmFnZSA9IF9fd19wZGZqc19yZXF1aXJlX18oOSk7XG5cbnZhciBfY2FudmFzID0gX193X3BkZmpzX3JlcXVpcmVfXygxMCk7XG5cbnZhciBfd29ya2VyX29wdGlvbnMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEyKTtcblxudmFyIF9pc19ub2RlID0gX193X3BkZmpzX3JlcXVpcmVfXyg0KTtcblxudmFyIF9tZXNzYWdlX2hhbmRsZXIgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEzKTtcblxudmFyIF9tZXRhZGF0YSA9IF9fd19wZGZqc19yZXF1aXJlX18oMTQpO1xuXG52YXIgX29wdGlvbmFsX2NvbnRlbnRfY29uZmlnID0gX193X3BkZmpzX3JlcXVpcmVfXygxNSk7XG5cbnZhciBfdHJhbnNwb3J0X3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oMTYpO1xuXG52YXIgX3hmYV90ZXh0ID0gX193X3BkZmpzX3JlcXVpcmVfXygxNyk7XG5cbmNvbnN0IERFRkFVTFRfUkFOR0VfQ0hVTktfU0laRSA9IDY1NTM2O1xuY29uc3QgUkVOREVSSU5HX0NBTkNFTExFRF9USU1FT1VUID0gMTAwO1xuY29uc3QgRGVmYXVsdENhbnZhc0ZhY3RvcnkgPSBfaXNfbm9kZS5pc05vZGVKUyA/IF9ub2RlX3V0aWxzLk5vZGVDYW52YXNGYWN0b3J5IDogX2Rpc3BsYXlfdXRpbHMuRE9NQ2FudmFzRmFjdG9yeTtcbmV4cG9ydHMuRGVmYXVsdENhbnZhc0ZhY3RvcnkgPSBEZWZhdWx0Q2FudmFzRmFjdG9yeTtcbmNvbnN0IERlZmF1bHRDTWFwUmVhZGVyRmFjdG9yeSA9IF9pc19ub2RlLmlzTm9kZUpTID8gX25vZGVfdXRpbHMuTm9kZUNNYXBSZWFkZXJGYWN0b3J5IDogX2Rpc3BsYXlfdXRpbHMuRE9NQ01hcFJlYWRlckZhY3Rvcnk7XG5leHBvcnRzLkRlZmF1bHRDTWFwUmVhZGVyRmFjdG9yeSA9IERlZmF1bHRDTWFwUmVhZGVyRmFjdG9yeTtcbmNvbnN0IERlZmF1bHRTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSA9IF9pc19ub2RlLmlzTm9kZUpTID8gX25vZGVfdXRpbHMuTm9kZVN0YW5kYXJkRm9udERhdGFGYWN0b3J5IDogX2Rpc3BsYXlfdXRpbHMuRE9NU3RhbmRhcmRGb250RGF0YUZhY3Rvcnk7XG5leHBvcnRzLkRlZmF1bHRTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSA9IERlZmF1bHRTdGFuZGFyZEZvbnREYXRhRmFjdG9yeTtcbmxldCBjcmVhdGVQREZOZXR3b3JrU3RyZWFtO1xuXG5mdW5jdGlvbiBzZXRQREZOZXR3b3JrU3RyZWFtRmFjdG9yeShwZGZOZXR3b3JrU3RyZWFtRmFjdG9yeSkge1xuICBjcmVhdGVQREZOZXR3b3JrU3RyZWFtID0gcGRmTmV0d29ya1N0cmVhbUZhY3Rvcnk7XG59XG5cbmZ1bmN0aW9uIGdldERvY3VtZW50KHNyYykge1xuICBjb25zdCB0YXNrID0gbmV3IFBERkRvY3VtZW50TG9hZGluZ1Rhc2soKTtcbiAgbGV0IHNvdXJjZTtcblxuICBpZiAodHlwZW9mIHNyYyA9PT0gXCJzdHJpbmdcIiB8fCBzcmMgaW5zdGFuY2VvZiBVUkwpIHtcbiAgICBzb3VyY2UgPSB7XG4gICAgICB1cmw6IHNyY1xuICAgIH07XG4gIH0gZWxzZSBpZiAoKDAsIF91dGlsLmlzQXJyYXlCdWZmZXIpKHNyYykpIHtcbiAgICBzb3VyY2UgPSB7XG4gICAgICBkYXRhOiBzcmNcbiAgICB9O1xuICB9IGVsc2UgaWYgKHNyYyBpbnN0YW5jZW9mIFBERkRhdGFSYW5nZVRyYW5zcG9ydCkge1xuICAgIHNvdXJjZSA9IHtcbiAgICAgIHJhbmdlOiBzcmNcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2Ygc3JjICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHBhcmFtZXRlciBpbiBnZXREb2N1bWVudCwgXCIgKyBcIm5lZWQgZWl0aGVyIHN0cmluZywgVVJMLCBVaW50OEFycmF5LCBvciBwYXJhbWV0ZXIgb2JqZWN0LlwiKTtcbiAgICB9XG5cbiAgICBpZiAoIXNyYy51cmwgJiYgIXNyYy5kYXRhICYmICFzcmMucmFuZ2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcGFyYW1ldGVyIG9iamVjdDogbmVlZCBlaXRoZXIgLmRhdGEsIC5yYW5nZSBvciAudXJsXCIpO1xuICAgIH1cblxuICAgIHNvdXJjZSA9IHNyYztcbiAgfVxuXG4gIGNvbnN0IHBhcmFtcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGxldCByYW5nZVRyYW5zcG9ydCA9IG51bGwsXG4gICAgICB3b3JrZXIgPSBudWxsO1xuXG4gIGZvciAoY29uc3Qga2V5IGluIHNvdXJjZSkge1xuICAgIGNvbnN0IHZhbHVlID0gc291cmNlW2tleV07XG5cbiAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgY2FzZSBcInVybFwiOlxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBwYXJhbXNba2V5XSA9IG5ldyBVUkwodmFsdWUsIHdpbmRvdy5sb2NhdGlvbikuaHJlZjtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAoMCwgX3V0aWwud2FybikoYENhbm5vdCBjcmVhdGUgdmFsaWQgVVJMOiBcIiR7ZXh9XCIuYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB2YWx1ZSBpbnN0YW5jZW9mIFVSTCkge1xuICAgICAgICAgIHBhcmFtc1trZXldID0gdmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgUERGIHVybCBkYXRhOiBcIiArIFwiZWl0aGVyIHN0cmluZyBvciBVUkwtb2JqZWN0IGlzIGV4cGVjdGVkIGluIHRoZSB1cmwgcHJvcGVydHkuXCIpO1xuXG4gICAgICBjYXNlIFwicmFuZ2VcIjpcbiAgICAgICAgcmFuZ2VUcmFuc3BvcnQgPSB2YWx1ZTtcbiAgICAgICAgY29udGludWU7XG5cbiAgICAgIGNhc2UgXCJ3b3JrZXJcIjpcbiAgICAgICAgd29ya2VyID0gdmFsdWU7XG4gICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICBjYXNlIFwiZGF0YVwiOlxuICAgICAgICBpZiAoX2lzX25vZGUuaXNOb2RlSlMgJiYgdHlwZW9mIEJ1ZmZlciAhPT0gXCJ1bmRlZmluZWRcIiAmJiB2YWx1ZSBpbnN0YW5jZW9mIEJ1ZmZlcikge1xuICAgICAgICAgIHBhcmFtc1trZXldID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIHBhcmFtc1trZXldID0gKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwgJiYgIWlzTmFOKHZhbHVlLmxlbmd0aCkpIHtcbiAgICAgICAgICBwYXJhbXNba2V5XSA9IG5ldyBVaW50OEFycmF5KHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmICgoMCwgX3V0aWwuaXNBcnJheUJ1ZmZlcikodmFsdWUpKSB7XG4gICAgICAgICAgcGFyYW1zW2tleV0gPSBuZXcgVWludDhBcnJheSh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBQREYgYmluYXJ5IGRhdGE6IGVpdGhlciB0eXBlZCBhcnJheSwgXCIgKyBcInN0cmluZywgb3IgYXJyYXktbGlrZSBvYmplY3QgaXMgZXhwZWN0ZWQgaW4gdGhlIGRhdGEgcHJvcGVydHkuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgcGFyYW1zW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHBhcmFtcy5yYW5nZUNodW5rU2l6ZSA9IHBhcmFtcy5yYW5nZUNodW5rU2l6ZSB8fCBERUZBVUxUX1JBTkdFX0NIVU5LX1NJWkU7XG4gIHBhcmFtcy5DTWFwUmVhZGVyRmFjdG9yeSA9IHBhcmFtcy5DTWFwUmVhZGVyRmFjdG9yeSB8fCBEZWZhdWx0Q01hcFJlYWRlckZhY3Rvcnk7XG4gIHBhcmFtcy5TdGFuZGFyZEZvbnREYXRhRmFjdG9yeSA9IHBhcmFtcy5TdGFuZGFyZEZvbnREYXRhRmFjdG9yeSB8fCBEZWZhdWx0U3RhbmRhcmRGb250RGF0YUZhY3Rvcnk7XG4gIHBhcmFtcy5pZ25vcmVFcnJvcnMgPSBwYXJhbXMuc3RvcEF0RXJyb3JzICE9PSB0cnVlO1xuICBwYXJhbXMuZm9udEV4dHJhUHJvcGVydGllcyA9IHBhcmFtcy5mb250RXh0cmFQcm9wZXJ0aWVzID09PSB0cnVlO1xuICBwYXJhbXMucGRmQnVnID0gcGFyYW1zLnBkZkJ1ZyA9PT0gdHJ1ZTtcbiAgcGFyYW1zLmVuYWJsZVhmYSA9IHBhcmFtcy5lbmFibGVYZmEgPT09IHRydWU7XG5cbiAgaWYgKHR5cGVvZiBwYXJhbXMuZG9jQmFzZVVybCAhPT0gXCJzdHJpbmdcIiB8fCAoMCwgX2Rpc3BsYXlfdXRpbHMuaXNEYXRhU2NoZW1lKShwYXJhbXMuZG9jQmFzZVVybCkpIHtcbiAgICBwYXJhbXMuZG9jQmFzZVVybCA9IG51bGw7XG4gIH1cblxuICBpZiAoIU51bWJlci5pc0ludGVnZXIocGFyYW1zLm1heEltYWdlU2l6ZSkpIHtcbiAgICBwYXJhbXMubWF4SW1hZ2VTaXplID0gLTE7XG4gIH1cblxuICBpZiAodHlwZW9mIHBhcmFtcy51c2VXb3JrZXJGZXRjaCAhPT0gXCJib29sZWFuXCIpIHtcbiAgICBwYXJhbXMudXNlV29ya2VyRmV0Y2ggPSBwYXJhbXMuQ01hcFJlYWRlckZhY3RvcnkgPT09IF9kaXNwbGF5X3V0aWxzLkRPTUNNYXBSZWFkZXJGYWN0b3J5ICYmIHBhcmFtcy5TdGFuZGFyZEZvbnREYXRhRmFjdG9yeSA9PT0gX2Rpc3BsYXlfdXRpbHMuRE9NU3RhbmRhcmRGb250RGF0YUZhY3Rvcnk7XG4gIH1cblxuICBpZiAodHlwZW9mIHBhcmFtcy5pc0V2YWxTdXBwb3J0ZWQgIT09IFwiYm9vbGVhblwiKSB7XG4gICAgcGFyYW1zLmlzRXZhbFN1cHBvcnRlZCA9IHRydWU7XG4gIH1cblxuICBpZiAodHlwZW9mIHBhcmFtcy5kaXNhYmxlRm9udEZhY2UgIT09IFwiYm9vbGVhblwiKSB7XG4gICAgcGFyYW1zLmRpc2FibGVGb250RmFjZSA9IF9pc19ub2RlLmlzTm9kZUpTO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBwYXJhbXMudXNlU3lzdGVtRm9udHMgIT09IFwiYm9vbGVhblwiKSB7XG4gICAgcGFyYW1zLnVzZVN5c3RlbUZvbnRzID0gIV9pc19ub2RlLmlzTm9kZUpTICYmICFwYXJhbXMuZGlzYWJsZUZvbnRGYWNlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBwYXJhbXMub3duZXJEb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHBhcmFtcy5vd25lckRvY3VtZW50ID0gZ2xvYmFsVGhpcy5kb2N1bWVudDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcGFyYW1zLmRpc2FibGVSYW5nZSAhPT0gXCJib29sZWFuXCIpIHtcbiAgICBwYXJhbXMuZGlzYWJsZVJhbmdlID0gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZW9mIHBhcmFtcy5kaXNhYmxlU3RyZWFtICE9PSBcImJvb2xlYW5cIikge1xuICAgIHBhcmFtcy5kaXNhYmxlU3RyZWFtID0gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZW9mIHBhcmFtcy5kaXNhYmxlQXV0b0ZldGNoICE9PSBcImJvb2xlYW5cIikge1xuICAgIHBhcmFtcy5kaXNhYmxlQXV0b0ZldGNoID0gZmFsc2U7XG4gIH1cblxuICAoMCwgX3V0aWwuc2V0VmVyYm9zaXR5TGV2ZWwpKHBhcmFtcy52ZXJib3NpdHkpO1xuXG4gIGlmICghd29ya2VyKSB7XG4gICAgY29uc3Qgd29ya2VyUGFyYW1zID0ge1xuICAgICAgdmVyYm9zaXR5OiBwYXJhbXMudmVyYm9zaXR5LFxuICAgICAgcG9ydDogX3dvcmtlcl9vcHRpb25zLkdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyUG9ydFxuICAgIH07XG4gICAgd29ya2VyID0gd29ya2VyUGFyYW1zLnBvcnQgPyBQREZXb3JrZXIuZnJvbVBvcnQod29ya2VyUGFyYW1zKSA6IG5ldyBQREZXb3JrZXIod29ya2VyUGFyYW1zKTtcbiAgICB0YXNrLl93b3JrZXIgPSB3b3JrZXI7XG4gIH1cblxuICBjb25zdCBkb2NJZCA9IHRhc2suZG9jSWQ7XG4gIHdvcmtlci5wcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgIGlmICh0YXNrLmRlc3Ryb3llZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGluZyBhYm9ydGVkXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHdvcmtlcklkUHJvbWlzZSA9IF9mZXRjaERvY3VtZW50KHdvcmtlciwgcGFyYW1zLCByYW5nZVRyYW5zcG9ydCwgZG9jSWQpO1xuXG4gICAgY29uc3QgbmV0d29ya1N0cmVhbVByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgbGV0IG5ldHdvcmtTdHJlYW07XG5cbiAgICAgIGlmIChyYW5nZVRyYW5zcG9ydCkge1xuICAgICAgICBuZXR3b3JrU3RyZWFtID0gbmV3IF90cmFuc3BvcnRfc3RyZWFtLlBERkRhdGFUcmFuc3BvcnRTdHJlYW0oe1xuICAgICAgICAgIGxlbmd0aDogcGFyYW1zLmxlbmd0aCxcbiAgICAgICAgICBpbml0aWFsRGF0YTogcGFyYW1zLmluaXRpYWxEYXRhLFxuICAgICAgICAgIHByb2dyZXNzaXZlRG9uZTogcGFyYW1zLnByb2dyZXNzaXZlRG9uZSxcbiAgICAgICAgICBjb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZTogcGFyYW1zLmNvbnRlbnREaXNwb3NpdGlvbkZpbGVuYW1lLFxuICAgICAgICAgIGRpc2FibGVSYW5nZTogcGFyYW1zLmRpc2FibGVSYW5nZSxcbiAgICAgICAgICBkaXNhYmxlU3RyZWFtOiBwYXJhbXMuZGlzYWJsZVN0cmVhbVxuICAgICAgICB9LCByYW5nZVRyYW5zcG9ydCk7XG4gICAgICB9IGVsc2UgaWYgKCFwYXJhbXMuZGF0YSkge1xuICAgICAgICBuZXR3b3JrU3RyZWFtID0gY3JlYXRlUERGTmV0d29ya1N0cmVhbSh7XG4gICAgICAgICAgdXJsOiBwYXJhbXMudXJsLFxuICAgICAgICAgIGxlbmd0aDogcGFyYW1zLmxlbmd0aCxcbiAgICAgICAgICBodHRwSGVhZGVyczogcGFyYW1zLmh0dHBIZWFkZXJzLFxuICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogcGFyYW1zLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICByYW5nZUNodW5rU2l6ZTogcGFyYW1zLnJhbmdlQ2h1bmtTaXplLFxuICAgICAgICAgIGRpc2FibGVSYW5nZTogcGFyYW1zLmRpc2FibGVSYW5nZSxcbiAgICAgICAgICBkaXNhYmxlU3RyZWFtOiBwYXJhbXMuZGlzYWJsZVN0cmVhbVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmVzb2x2ZShuZXR3b3JrU3RyZWFtKTtcbiAgICB9KTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoW3dvcmtlcklkUHJvbWlzZSwgbmV0d29ya1N0cmVhbVByb21pc2VdKS50aGVuKGZ1bmN0aW9uIChbd29ya2VySWQsIG5ldHdvcmtTdHJlYW1dKSB7XG4gICAgICBpZiAodGFzay5kZXN0cm95ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGluZyBhYm9ydGVkXCIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXNzYWdlSGFuZGxlciA9IG5ldyBfbWVzc2FnZV9oYW5kbGVyLk1lc3NhZ2VIYW5kbGVyKGRvY0lkLCB3b3JrZXJJZCwgd29ya2VyLnBvcnQpO1xuICAgICAgY29uc3QgdHJhbnNwb3J0ID0gbmV3IFdvcmtlclRyYW5zcG9ydChtZXNzYWdlSGFuZGxlciwgdGFzaywgbmV0d29ya1N0cmVhbSwgcGFyYW1zKTtcbiAgICAgIHRhc2suX3RyYW5zcG9ydCA9IHRyYW5zcG9ydDtcbiAgICAgIG1lc3NhZ2VIYW5kbGVyLnNlbmQoXCJSZWFkeVwiLCBudWxsKTtcbiAgICB9KTtcbiAgfSkuY2F0Y2godGFzay5fY2FwYWJpbGl0eS5yZWplY3QpO1xuICByZXR1cm4gdGFzaztcbn1cblxuYXN5bmMgZnVuY3Rpb24gX2ZldGNoRG9jdW1lbnQod29ya2VyLCBzb3VyY2UsIHBkZkRhdGFSYW5nZVRyYW5zcG9ydCwgZG9jSWQpIHtcbiAgaWYgKHdvcmtlci5kZXN0cm95ZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJXb3JrZXIgd2FzIGRlc3Ryb3llZFwiKTtcbiAgfVxuXG4gIGlmIChwZGZEYXRhUmFuZ2VUcmFuc3BvcnQpIHtcbiAgICBzb3VyY2UubGVuZ3RoID0gcGRmRGF0YVJhbmdlVHJhbnNwb3J0Lmxlbmd0aDtcbiAgICBzb3VyY2UuaW5pdGlhbERhdGEgPSBwZGZEYXRhUmFuZ2VUcmFuc3BvcnQuaW5pdGlhbERhdGE7XG4gICAgc291cmNlLnByb2dyZXNzaXZlRG9uZSA9IHBkZkRhdGFSYW5nZVRyYW5zcG9ydC5wcm9ncmVzc2l2ZURvbmU7XG4gICAgc291cmNlLmNvbnRlbnREaXNwb3NpdGlvbkZpbGVuYW1lID0gcGRmRGF0YVJhbmdlVHJhbnNwb3J0LmNvbnRlbnREaXNwb3NpdGlvbkZpbGVuYW1lO1xuICB9XG5cbiAgY29uc3Qgd29ya2VySWQgPSBhd2FpdCB3b3JrZXIubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiR2V0RG9jUmVxdWVzdFwiLCB7XG4gICAgZG9jSWQsXG4gICAgYXBpVmVyc2lvbjogJzIuMTIuMzEzJyxcbiAgICBzb3VyY2U6IHtcbiAgICAgIGRhdGE6IHNvdXJjZS5kYXRhLFxuICAgICAgdXJsOiBzb3VyY2UudXJsLFxuICAgICAgcGFzc3dvcmQ6IHNvdXJjZS5wYXNzd29yZCxcbiAgICAgIGRpc2FibGVBdXRvRmV0Y2g6IHNvdXJjZS5kaXNhYmxlQXV0b0ZldGNoLFxuICAgICAgcmFuZ2VDaHVua1NpemU6IHNvdXJjZS5yYW5nZUNodW5rU2l6ZSxcbiAgICAgIGxlbmd0aDogc291cmNlLmxlbmd0aFxuICAgIH0sXG4gICAgbWF4SW1hZ2VTaXplOiBzb3VyY2UubWF4SW1hZ2VTaXplLFxuICAgIGRpc2FibGVGb250RmFjZTogc291cmNlLmRpc2FibGVGb250RmFjZSxcbiAgICBkb2NCYXNlVXJsOiBzb3VyY2UuZG9jQmFzZVVybCxcbiAgICBpZ25vcmVFcnJvcnM6IHNvdXJjZS5pZ25vcmVFcnJvcnMsXG4gICAgaXNFdmFsU3VwcG9ydGVkOiBzb3VyY2UuaXNFdmFsU3VwcG9ydGVkLFxuICAgIGZvbnRFeHRyYVByb3BlcnRpZXM6IHNvdXJjZS5mb250RXh0cmFQcm9wZXJ0aWVzLFxuICAgIGVuYWJsZVhmYTogc291cmNlLmVuYWJsZVhmYSxcbiAgICB1c2VTeXN0ZW1Gb250czogc291cmNlLnVzZVN5c3RlbUZvbnRzLFxuICAgIGNNYXBVcmw6IHNvdXJjZS51c2VXb3JrZXJGZXRjaCA/IHNvdXJjZS5jTWFwVXJsIDogbnVsbCxcbiAgICBzdGFuZGFyZEZvbnREYXRhVXJsOiBzb3VyY2UudXNlV29ya2VyRmV0Y2ggPyBzb3VyY2Uuc3RhbmRhcmRGb250RGF0YVVybCA6IG51bGxcbiAgfSk7XG5cbiAgaWYgKHdvcmtlci5kZXN0cm95ZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJXb3JrZXIgd2FzIGRlc3Ryb3llZFwiKTtcbiAgfVxuXG4gIHJldHVybiB3b3JrZXJJZDtcbn1cblxuY2xhc3MgUERGRG9jdW1lbnRMb2FkaW5nVGFzayB7XG4gIHN0YXRpYyBnZXQgaWRDb3VudGVycygpIHtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJpZENvdW50ZXJzXCIsIHtcbiAgICAgIGRvYzogMFxuICAgIH0pO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fY2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICB0aGlzLl90cmFuc3BvcnQgPSBudWxsO1xuICAgIHRoaXMuX3dvcmtlciA9IG51bGw7XG4gICAgdGhpcy5kb2NJZCA9IGBkJHtQREZEb2N1bWVudExvYWRpbmdUYXNrLmlkQ291bnRlcnMuZG9jKyt9YDtcbiAgICB0aGlzLmRlc3Ryb3llZCA9IGZhbHNlO1xuICAgIHRoaXMub25QYXNzd29yZCA9IG51bGw7XG4gICAgdGhpcy5vblByb2dyZXNzID0gbnVsbDtcbiAgICB0aGlzLm9uVW5zdXBwb3J0ZWRGZWF0dXJlID0gbnVsbDtcbiAgfVxuXG4gIGdldCBwcm9taXNlKCkge1xuICAgIHJldHVybiB0aGlzLl9jYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cblxuICBhc3luYyBkZXN0cm95KCkge1xuICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcbiAgICBhd2FpdCB0aGlzLl90cmFuc3BvcnQ/LmRlc3Ryb3koKTtcbiAgICB0aGlzLl90cmFuc3BvcnQgPSBudWxsO1xuXG4gICAgaWYgKHRoaXMuX3dvcmtlcikge1xuICAgICAgdGhpcy5fd29ya2VyLmRlc3Ryb3koKTtcblxuICAgICAgdGhpcy5fd29ya2VyID0gbnVsbDtcbiAgICB9XG4gIH1cblxufVxuXG5leHBvcnRzLlBERkRvY3VtZW50TG9hZGluZ1Rhc2sgPSBQREZEb2N1bWVudExvYWRpbmdUYXNrO1xuXG5jbGFzcyBQREZEYXRhUmFuZ2VUcmFuc3BvcnQge1xuICBjb25zdHJ1Y3RvcihsZW5ndGgsIGluaXRpYWxEYXRhLCBwcm9ncmVzc2l2ZURvbmUgPSBmYWxzZSwgY29udGVudERpc3Bvc2l0aW9uRmlsZW5hbWUgPSBudWxsKSB7XG4gICAgdGhpcy5sZW5ndGggPSBsZW5ndGg7XG4gICAgdGhpcy5pbml0aWFsRGF0YSA9IGluaXRpYWxEYXRhO1xuICAgIHRoaXMucHJvZ3Jlc3NpdmVEb25lID0gcHJvZ3Jlc3NpdmVEb25lO1xuICAgIHRoaXMuY29udGVudERpc3Bvc2l0aW9uRmlsZW5hbWUgPSBjb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZTtcbiAgICB0aGlzLl9yYW5nZUxpc3RlbmVycyA9IFtdO1xuICAgIHRoaXMuX3Byb2dyZXNzTGlzdGVuZXJzID0gW107XG4gICAgdGhpcy5fcHJvZ3Jlc3NpdmVSZWFkTGlzdGVuZXJzID0gW107XG4gICAgdGhpcy5fcHJvZ3Jlc3NpdmVEb25lTGlzdGVuZXJzID0gW107XG4gICAgdGhpcy5fcmVhZHlDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICB9XG5cbiAgYWRkUmFuZ2VMaXN0ZW5lcihsaXN0ZW5lcikge1xuICAgIHRoaXMuX3JhbmdlTGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICB9XG5cbiAgYWRkUHJvZ3Jlc3NMaXN0ZW5lcihsaXN0ZW5lcikge1xuICAgIHRoaXMuX3Byb2dyZXNzTGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICB9XG5cbiAgYWRkUHJvZ3Jlc3NpdmVSZWFkTGlzdGVuZXIobGlzdGVuZXIpIHtcbiAgICB0aGlzLl9wcm9ncmVzc2l2ZVJlYWRMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gIH1cblxuICBhZGRQcm9ncmVzc2l2ZURvbmVMaXN0ZW5lcihsaXN0ZW5lcikge1xuICAgIHRoaXMuX3Byb2dyZXNzaXZlRG9uZUxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgfVxuXG4gIG9uRGF0YVJhbmdlKGJlZ2luLCBjaHVuaykge1xuICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdGhpcy5fcmFuZ2VMaXN0ZW5lcnMpIHtcbiAgICAgIGxpc3RlbmVyKGJlZ2luLCBjaHVuayk7XG4gICAgfVxuICB9XG5cbiAgb25EYXRhUHJvZ3Jlc3MobG9hZGVkLCB0b3RhbCkge1xuICAgIHRoaXMuX3JlYWR5Q2FwYWJpbGl0eS5wcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLl9wcm9ncmVzc0xpc3RlbmVycykge1xuICAgICAgICBsaXN0ZW5lcihsb2FkZWQsIHRvdGFsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9uRGF0YVByb2dyZXNzaXZlUmVhZChjaHVuaykge1xuICAgIHRoaXMuX3JlYWR5Q2FwYWJpbGl0eS5wcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLl9wcm9ncmVzc2l2ZVJlYWRMaXN0ZW5lcnMpIHtcbiAgICAgICAgbGlzdGVuZXIoY2h1bmspO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb25EYXRhUHJvZ3Jlc3NpdmVEb25lKCkge1xuICAgIHRoaXMuX3JlYWR5Q2FwYWJpbGl0eS5wcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiB0aGlzLl9wcm9ncmVzc2l2ZURvbmVMaXN0ZW5lcnMpIHtcbiAgICAgICAgbGlzdGVuZXIoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHRyYW5zcG9ydFJlYWR5KCkge1xuICAgIHRoaXMuX3JlYWR5Q2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gIH1cblxuICByZXF1ZXN0RGF0YVJhbmdlKGJlZ2luLCBlbmQpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQWJzdHJhY3QgbWV0aG9kIFBERkRhdGFSYW5nZVRyYW5zcG9ydC5yZXF1ZXN0RGF0YVJhbmdlXCIpO1xuICB9XG5cbiAgYWJvcnQoKSB7fVxuXG59XG5cbmV4cG9ydHMuUERGRGF0YVJhbmdlVHJhbnNwb3J0ID0gUERGRGF0YVJhbmdlVHJhbnNwb3J0O1xuXG5jbGFzcyBQREZEb2N1bWVudFByb3h5IHtcbiAgY29uc3RydWN0b3IocGRmSW5mbywgdHJhbnNwb3J0KSB7XG4gICAgdGhpcy5fcGRmSW5mbyA9IHBkZkluZm87XG4gICAgdGhpcy5fdHJhbnNwb3J0ID0gdHJhbnNwb3J0O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImZpbmdlcnByaW50XCIsIHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgKDAsIF9kaXNwbGF5X3V0aWxzLmRlcHJlY2F0ZWQpKFwiYFBERkRvY3VtZW50UHJveHkuZmluZ2VycHJpbnRgLCBcIiArIFwicGxlYXNlIHVzZSBgUERGRG9jdW1lbnRQcm94eS5maW5nZXJwcmludHNgIGluc3RlYWQuXCIpO1xuICAgICAgICByZXR1cm4gdGhpcy5maW5nZXJwcmludHNbMF07XG4gICAgICB9XG5cbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJnZXRTdGF0c1wiLCB7XG4gICAgICB2YWx1ZTogYXN5bmMgKCkgPT4ge1xuICAgICAgICAoMCwgX2Rpc3BsYXlfdXRpbHMuZGVwcmVjYXRlZCkoXCJgUERGRG9jdW1lbnRQcm94eS5nZXRTdGF0c2AsIFwiICsgXCJwbGVhc2UgdXNlIHRoZSBgUERGRG9jdW1lbnRQcm94eS5zdGF0c2AtZ2V0dGVyIGluc3RlYWQuXCIpO1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0cyB8fCB7XG4gICAgICAgICAgc3RyZWFtVHlwZXM6IHt9LFxuICAgICAgICAgIGZvbnRUeXBlczoge31cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldCBhbm5vdGF0aW9uU3RvcmFnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmFubm90YXRpb25TdG9yYWdlO1xuICB9XG5cbiAgZ2V0IG51bVBhZ2VzKCkge1xuICAgIHJldHVybiB0aGlzLl9wZGZJbmZvLm51bVBhZ2VzO1xuICB9XG5cbiAgZ2V0IGZpbmdlcnByaW50cygpIHtcbiAgICByZXR1cm4gdGhpcy5fcGRmSW5mby5maW5nZXJwcmludHM7XG4gIH1cblxuICBnZXQgc3RhdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5zdGF0cztcbiAgfVxuXG4gIGdldCBpc1B1cmVYZmEoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5fdHJhbnNwb3J0Ll9odG1sRm9yWGZhO1xuICB9XG5cbiAgZ2V0IGFsbFhmYUh0bWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5faHRtbEZvclhmYTtcbiAgfVxuXG4gIGdldFBhZ2UocGFnZU51bWJlcikge1xuICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0UGFnZShwYWdlTnVtYmVyKTtcbiAgfVxuXG4gIGdldFBhZ2VJbmRleChyZWYpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBhZ2VJbmRleChyZWYpO1xuICB9XG5cbiAgZ2V0RGVzdGluYXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0RGVzdGluYXRpb25zKCk7XG4gIH1cblxuICBnZXREZXN0aW5hdGlvbihpZCkge1xuICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0RGVzdGluYXRpb24oaWQpO1xuICB9XG5cbiAgZ2V0UGFnZUxhYmVscygpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBhZ2VMYWJlbHMoKTtcbiAgfVxuXG4gIGdldFBhZ2VMYXlvdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRQYWdlTGF5b3V0KCk7XG4gIH1cblxuICBnZXRQYWdlTW9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBhZ2VNb2RlKCk7XG4gIH1cblxuICBnZXRWaWV3ZXJQcmVmZXJlbmNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFZpZXdlclByZWZlcmVuY2VzKCk7XG4gIH1cblxuICBnZXRPcGVuQWN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0T3BlbkFjdGlvbigpO1xuICB9XG5cbiAgZ2V0QXR0YWNobWVudHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRBdHRhY2htZW50cygpO1xuICB9XG5cbiAgZ2V0SmF2YVNjcmlwdCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldEphdmFTY3JpcHQoKTtcbiAgfVxuXG4gIGdldEpTQWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldERvY0pTQWN0aW9ucygpO1xuICB9XG5cbiAgZ2V0T3V0bGluZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldE91dGxpbmUoKTtcbiAgfVxuXG4gIGdldE9wdGlvbmFsQ29udGVudENvbmZpZygpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldE9wdGlvbmFsQ29udGVudENvbmZpZygpO1xuICB9XG5cbiAgZ2V0UGVybWlzc2lvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRQZXJtaXNzaW9ucygpO1xuICB9XG5cbiAgZ2V0TWV0YWRhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRNZXRhZGF0YSgpO1xuICB9XG5cbiAgZ2V0TWFya0luZm8oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRNYXJrSW5mbygpO1xuICB9XG5cbiAgZ2V0RGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldERhdGEoKTtcbiAgfVxuXG4gIGdldERvd25sb2FkSW5mbygpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmRvd25sb2FkSW5mb0NhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxuXG4gIGNsZWFudXAoa2VlcExvYWRlZEZvbnRzID0gZmFsc2UpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LnN0YXJ0Q2xlYW51cChrZWVwTG9hZGVkRm9udHMgfHwgdGhpcy5pc1B1cmVYZmEpO1xuICB9XG5cbiAgZGVzdHJveSgpIHtcbiAgICByZXR1cm4gdGhpcy5sb2FkaW5nVGFzay5kZXN0cm95KCk7XG4gIH1cblxuICBnZXQgbG9hZGluZ1BhcmFtcygpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmxvYWRpbmdQYXJhbXM7XG4gIH1cblxuICBnZXQgbG9hZGluZ1Rhc2soKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5sb2FkaW5nVGFzaztcbiAgfVxuXG4gIHNhdmVEb2N1bWVudCgpIHtcbiAgICBpZiAodGhpcy5fdHJhbnNwb3J0LmFubm90YXRpb25TdG9yYWdlLnNpemUgPD0gMCkge1xuICAgICAgKDAsIF9kaXNwbGF5X3V0aWxzLmRlcHJlY2F0ZWQpKFwic2F2ZURvY3VtZW50IGNhbGxlZCB3aGlsZSBgYW5ub3RhdGlvblN0b3JhZ2VgIGlzIGVtcHR5LCBcIiArIFwicGxlYXNlIHVzZSB0aGUgZ2V0RGF0YS1tZXRob2QgaW5zdGVhZC5cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5zYXZlRG9jdW1lbnQoKTtcbiAgfVxuXG4gIGdldEZpZWxkT2JqZWN0cygpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldEZpZWxkT2JqZWN0cygpO1xuICB9XG5cbiAgaGFzSlNBY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuaGFzSlNBY3Rpb25zKCk7XG4gIH1cblxuICBnZXRDYWxjdWxhdGlvbk9yZGVySWRzKCkge1xuICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0Q2FsY3VsYXRpb25PcmRlcklkcygpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5QREZEb2N1bWVudFByb3h5ID0gUERGRG9jdW1lbnRQcm94eTtcblxuY2xhc3MgUERGUGFnZVByb3h5IHtcbiAgY29uc3RydWN0b3IocGFnZUluZGV4LCBwYWdlSW5mbywgdHJhbnNwb3J0LCBvd25lckRvY3VtZW50LCBwZGZCdWcgPSBmYWxzZSkge1xuICAgIHRoaXMuX3BhZ2VJbmRleCA9IHBhZ2VJbmRleDtcbiAgICB0aGlzLl9wYWdlSW5mbyA9IHBhZ2VJbmZvO1xuICAgIHRoaXMuX293bmVyRG9jdW1lbnQgPSBvd25lckRvY3VtZW50O1xuICAgIHRoaXMuX3RyYW5zcG9ydCA9IHRyYW5zcG9ydDtcbiAgICB0aGlzLl9zdGF0cyA9IHBkZkJ1ZyA/IG5ldyBfZGlzcGxheV91dGlscy5TdGF0VGltZXIoKSA6IG51bGw7XG4gICAgdGhpcy5fcGRmQnVnID0gcGRmQnVnO1xuICAgIHRoaXMuY29tbW9uT2JqcyA9IHRyYW5zcG9ydC5jb21tb25PYmpzO1xuICAgIHRoaXMub2JqcyA9IG5ldyBQREZPYmplY3RzKCk7XG4gICAgdGhpcy5jbGVhbnVwQWZ0ZXJSZW5kZXIgPSBmYWxzZTtcbiAgICB0aGlzLnBlbmRpbmdDbGVhbnVwID0gZmFsc2U7XG4gICAgdGhpcy5faW50ZW50U3RhdGVzID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuX2Fubm90YXRpb25Qcm9taXNlcyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLmRlc3Ryb3llZCA9IGZhbHNlO1xuICB9XG5cbiAgZ2V0IHBhZ2VOdW1iZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2VJbmRleCArIDE7XG4gIH1cblxuICBnZXQgcm90YXRlKCkge1xuICAgIHJldHVybiB0aGlzLl9wYWdlSW5mby5yb3RhdGU7XG4gIH1cblxuICBnZXQgcmVmKCkge1xuICAgIHJldHVybiB0aGlzLl9wYWdlSW5mby5yZWY7XG4gIH1cblxuICBnZXQgdXNlclVuaXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2VJbmZvLnVzZXJVbml0O1xuICB9XG5cbiAgZ2V0IHZpZXcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2VJbmZvLnZpZXc7XG4gIH1cblxuICBnZXRWaWV3cG9ydCh7XG4gICAgc2NhbGUsXG4gICAgcm90YXRpb24gPSB0aGlzLnJvdGF0ZSxcbiAgICBvZmZzZXRYID0gMCxcbiAgICBvZmZzZXRZID0gMCxcbiAgICBkb250RmxpcCA9IGZhbHNlXG4gIH0gPSB7fSkge1xuICAgIHJldHVybiBuZXcgX2Rpc3BsYXlfdXRpbHMuUGFnZVZpZXdwb3J0KHtcbiAgICAgIHZpZXdCb3g6IHRoaXMudmlldyxcbiAgICAgIHNjYWxlLFxuICAgICAgcm90YXRpb24sXG4gICAgICBvZmZzZXRYLFxuICAgICAgb2Zmc2V0WSxcbiAgICAgIGRvbnRGbGlwXG4gICAgfSk7XG4gIH1cblxuICBnZXRBbm5vdGF0aW9ucyh7XG4gICAgaW50ZW50ID0gXCJkaXNwbGF5XCJcbiAgfSA9IHt9KSB7XG4gICAgY29uc3QgaW50ZW50QXJncyA9IHRoaXMuX3RyYW5zcG9ydC5nZXRSZW5kZXJpbmdJbnRlbnQoaW50ZW50KTtcblxuICAgIGxldCBwcm9taXNlID0gdGhpcy5fYW5ub3RhdGlvblByb21pc2VzLmdldChpbnRlbnRBcmdzLmNhY2hlS2V5KTtcblxuICAgIGlmICghcHJvbWlzZSkge1xuICAgICAgcHJvbWlzZSA9IHRoaXMuX3RyYW5zcG9ydC5nZXRBbm5vdGF0aW9ucyh0aGlzLl9wYWdlSW5kZXgsIGludGVudEFyZ3MucmVuZGVyaW5nSW50ZW50KTtcblxuICAgICAgdGhpcy5fYW5ub3RhdGlvblByb21pc2VzLnNldChpbnRlbnRBcmdzLmNhY2hlS2V5LCBwcm9taXNlKTtcblxuICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihhbm5vdGF0aW9ucyA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgYW5ub3RhdGlvbiBvZiBhbm5vdGF0aW9ucykge1xuICAgICAgICAgIGlmIChhbm5vdGF0aW9uLnRpdGxlT2JqICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhbm5vdGF0aW9uLCBcInRpdGxlXCIsIHtcbiAgICAgICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgICAgICgwLCBfZGlzcGxheV91dGlscy5kZXByZWNhdGVkKShcImB0aXRsZWAtcHJvcGVydHkgb24gYW5ub3RhdGlvbiwgcGxlYXNlIHVzZSBgdGl0bGVPYmpgIGluc3RlYWQuXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhbm5vdGF0aW9uLnRpdGxlT2JqLnN0cjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoYW5ub3RhdGlvbi5jb250ZW50c09iaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYW5ub3RhdGlvbiwgXCJjb250ZW50c1wiLCB7XG4gICAgICAgICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgICAgICAoMCwgX2Rpc3BsYXlfdXRpbHMuZGVwcmVjYXRlZCkoXCJgY29udGVudHNgLXByb3BlcnR5IG9uIGFubm90YXRpb24sIHBsZWFzZSB1c2UgYGNvbnRlbnRzT2JqYCBpbnN0ZWFkLlwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYW5ub3RhdGlvbi5jb250ZW50c09iai5zdHI7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFubm90YXRpb25zO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuICBnZXRKU0FjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2pzQWN0aW9uc1Byb21pc2UgfHw9IHRoaXMuX3RyYW5zcG9ydC5nZXRQYWdlSlNBY3Rpb25zKHRoaXMuX3BhZ2VJbmRleCk7XG4gIH1cblxuICBhc3luYyBnZXRYZmEoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5faHRtbEZvclhmYT8uY2hpbGRyZW5bdGhpcy5fcGFnZUluZGV4XSB8fCBudWxsO1xuICB9XG5cbiAgcmVuZGVyKHtcbiAgICBjYW52YXNDb250ZXh0LFxuICAgIHZpZXdwb3J0LFxuICAgIGludGVudCA9IFwiZGlzcGxheVwiLFxuICAgIGFubm90YXRpb25Nb2RlID0gX3V0aWwuQW5ub3RhdGlvbk1vZGUuRU5BQkxFLFxuICAgIHRyYW5zZm9ybSA9IG51bGwsXG4gICAgaW1hZ2VMYXllciA9IG51bGwsXG4gICAgY2FudmFzRmFjdG9yeSA9IG51bGwsXG4gICAgYmFja2dyb3VuZCA9IG51bGwsXG4gICAgb3B0aW9uYWxDb250ZW50Q29uZmlnUHJvbWlzZSA9IG51bGwsXG4gICAgYW5ub3RhdGlvbkNhbnZhc01hcCA9IG51bGxcbiAgfSkge1xuICAgIGlmIChhcmd1bWVudHNbMF0/LnJlbmRlckludGVyYWN0aXZlRm9ybXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgKDAsIF9kaXNwbGF5X3V0aWxzLmRlcHJlY2F0ZWQpKFwicmVuZGVyIG5vIGxvbmdlciBhY2NlcHRzIHRoZSBgcmVuZGVySW50ZXJhY3RpdmVGb3Jtc2Atb3B0aW9uLCBcIiArIFwicGxlYXNlIHVzZSB0aGUgYGFubm90YXRpb25Nb2RlYC1vcHRpb24gaW5zdGVhZC5cIik7XG5cbiAgICAgIGlmIChhcmd1bWVudHNbMF0ucmVuZGVySW50ZXJhY3RpdmVGb3JtcyA9PT0gdHJ1ZSAmJiBhbm5vdGF0aW9uTW9kZSA9PT0gX3V0aWwuQW5ub3RhdGlvbk1vZGUuRU5BQkxFKSB7XG4gICAgICAgIGFubm90YXRpb25Nb2RlID0gX3V0aWwuQW5ub3RhdGlvbk1vZGUuRU5BQkxFX0ZPUk1TO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhcmd1bWVudHNbMF0/LmluY2x1ZGVBbm5vdGF0aW9uU3RvcmFnZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAoMCwgX2Rpc3BsYXlfdXRpbHMuZGVwcmVjYXRlZCkoXCJyZW5kZXIgbm8gbG9uZ2VyIGFjY2VwdHMgdGhlIGBpbmNsdWRlQW5ub3RhdGlvblN0b3JhZ2VgLW9wdGlvbiwgXCIgKyBcInBsZWFzZSB1c2UgdGhlIGBhbm5vdGF0aW9uTW9kZWAtb3B0aW9uIGluc3RlYWQuXCIpO1xuXG4gICAgICBpZiAoYXJndW1lbnRzWzBdLmluY2x1ZGVBbm5vdGF0aW9uU3RvcmFnZSA9PT0gdHJ1ZSAmJiBhbm5vdGF0aW9uTW9kZSA9PT0gX3V0aWwuQW5ub3RhdGlvbk1vZGUuRU5BQkxFKSB7XG4gICAgICAgIGFubm90YXRpb25Nb2RlID0gX3V0aWwuQW5ub3RhdGlvbk1vZGUuRU5BQkxFX1NUT1JBR0U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0YXRzKSB7XG4gICAgICB0aGlzLl9zdGF0cy50aW1lKFwiT3ZlcmFsbFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnRlbnRBcmdzID0gdGhpcy5fdHJhbnNwb3J0LmdldFJlbmRlcmluZ0ludGVudChpbnRlbnQsIGFubm90YXRpb25Nb2RlKTtcblxuICAgIHRoaXMucGVuZGluZ0NsZWFudXAgPSBmYWxzZTtcblxuICAgIGlmICghb3B0aW9uYWxDb250ZW50Q29uZmlnUHJvbWlzZSkge1xuICAgICAgb3B0aW9uYWxDb250ZW50Q29uZmlnUHJvbWlzZSA9IHRoaXMuX3RyYW5zcG9ydC5nZXRPcHRpb25hbENvbnRlbnRDb25maWcoKTtcbiAgICB9XG5cbiAgICBsZXQgaW50ZW50U3RhdGUgPSB0aGlzLl9pbnRlbnRTdGF0ZXMuZ2V0KGludGVudEFyZ3MuY2FjaGVLZXkpO1xuXG4gICAgaWYgKCFpbnRlbnRTdGF0ZSkge1xuICAgICAgaW50ZW50U3RhdGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgICB0aGlzLl9pbnRlbnRTdGF0ZXMuc2V0KGludGVudEFyZ3MuY2FjaGVLZXksIGludGVudFN0YXRlKTtcbiAgICB9XG5cbiAgICBpZiAoaW50ZW50U3RhdGUuc3RyZWFtUmVhZGVyQ2FuY2VsVGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KGludGVudFN0YXRlLnN0cmVhbVJlYWRlckNhbmNlbFRpbWVvdXQpO1xuICAgICAgaW50ZW50U3RhdGUuc3RyZWFtUmVhZGVyQ2FuY2VsVGltZW91dCA9IG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgY2FudmFzRmFjdG9yeUluc3RhbmNlID0gY2FudmFzRmFjdG9yeSB8fCBuZXcgRGVmYXVsdENhbnZhc0ZhY3Rvcnkoe1xuICAgICAgb3duZXJEb2N1bWVudDogdGhpcy5fb3duZXJEb2N1bWVudFxuICAgIH0pO1xuICAgIGNvbnN0IGludGVudFByaW50ID0gISEoaW50ZW50QXJncy5yZW5kZXJpbmdJbnRlbnQgJiBfdXRpbC5SZW5kZXJpbmdJbnRlbnRGbGFnLlBSSU5UKTtcblxuICAgIGlmICghaW50ZW50U3RhdGUuZGlzcGxheVJlYWR5Q2FwYWJpbGl0eSkge1xuICAgICAgaW50ZW50U3RhdGUuZGlzcGxheVJlYWR5Q2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgIGludGVudFN0YXRlLm9wZXJhdG9yTGlzdCA9IHtcbiAgICAgICAgZm5BcnJheTogW10sXG4gICAgICAgIGFyZ3NBcnJheTogW10sXG4gICAgICAgIGxhc3RDaHVuazogZmFsc2VcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLl9zdGF0cykge1xuICAgICAgICB0aGlzLl9zdGF0cy50aW1lKFwiUGFnZSBSZXF1ZXN0XCIpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9wdW1wT3BlcmF0b3JMaXN0KGludGVudEFyZ3MpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBsZXRlID0gZXJyb3IgPT4ge1xuICAgICAgaW50ZW50U3RhdGUucmVuZGVyVGFza3MuZGVsZXRlKGludGVybmFsUmVuZGVyVGFzayk7XG5cbiAgICAgIGlmICh0aGlzLmNsZWFudXBBZnRlclJlbmRlciB8fCBpbnRlbnRQcmludCkge1xuICAgICAgICB0aGlzLnBlbmRpbmdDbGVhbnVwID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fdHJ5Q2xlYW51cCgpO1xuXG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgaW50ZXJuYWxSZW5kZXJUYXNrLmNhcGFiaWxpdHkucmVqZWN0KGVycm9yKTtcblxuICAgICAgICB0aGlzLl9hYm9ydE9wZXJhdG9yTGlzdCh7XG4gICAgICAgICAgaW50ZW50U3RhdGUsXG4gICAgICAgICAgcmVhc29uOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoZXJyb3IpXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW50ZXJuYWxSZW5kZXJUYXNrLmNhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fc3RhdHMpIHtcbiAgICAgICAgdGhpcy5fc3RhdHMudGltZUVuZChcIlJlbmRlcmluZ1wiKTtcblxuICAgICAgICB0aGlzLl9zdGF0cy50aW1lRW5kKFwiT3ZlcmFsbFwiKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgaW50ZXJuYWxSZW5kZXJUYXNrID0gbmV3IEludGVybmFsUmVuZGVyVGFzayh7XG4gICAgICBjYWxsYmFjazogY29tcGxldGUsXG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgY2FudmFzQ29udGV4dCxcbiAgICAgICAgdmlld3BvcnQsXG4gICAgICAgIHRyYW5zZm9ybSxcbiAgICAgICAgaW1hZ2VMYXllcixcbiAgICAgICAgYmFja2dyb3VuZFxuICAgICAgfSxcbiAgICAgIG9ianM6IHRoaXMub2JqcyxcbiAgICAgIGNvbW1vbk9ianM6IHRoaXMuY29tbW9uT2JqcyxcbiAgICAgIGFubm90YXRpb25DYW52YXNNYXAsXG4gICAgICBvcGVyYXRvckxpc3Q6IGludGVudFN0YXRlLm9wZXJhdG9yTGlzdCxcbiAgICAgIHBhZ2VJbmRleDogdGhpcy5fcGFnZUluZGV4LFxuICAgICAgY2FudmFzRmFjdG9yeTogY2FudmFzRmFjdG9yeUluc3RhbmNlLFxuICAgICAgdXNlUmVxdWVzdEFuaW1hdGlvbkZyYW1lOiAhaW50ZW50UHJpbnQsXG4gICAgICBwZGZCdWc6IHRoaXMuX3BkZkJ1Z1xuICAgIH0pO1xuICAgIChpbnRlbnRTdGF0ZS5yZW5kZXJUYXNrcyB8fD0gbmV3IFNldCgpKS5hZGQoaW50ZXJuYWxSZW5kZXJUYXNrKTtcbiAgICBjb25zdCByZW5kZXJUYXNrID0gaW50ZXJuYWxSZW5kZXJUYXNrLnRhc2s7XG4gICAgUHJvbWlzZS5hbGwoW2ludGVudFN0YXRlLmRpc3BsYXlSZWFkeUNhcGFiaWxpdHkucHJvbWlzZSwgb3B0aW9uYWxDb250ZW50Q29uZmlnUHJvbWlzZV0pLnRoZW4oKFt0cmFuc3BhcmVuY3ksIG9wdGlvbmFsQ29udGVudENvbmZpZ10pID0+IHtcbiAgICAgIGlmICh0aGlzLnBlbmRpbmdDbGVhbnVwKSB7XG4gICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX3N0YXRzKSB7XG4gICAgICAgIHRoaXMuX3N0YXRzLnRpbWUoXCJSZW5kZXJpbmdcIik7XG4gICAgICB9XG5cbiAgICAgIGludGVybmFsUmVuZGVyVGFzay5pbml0aWFsaXplR3JhcGhpY3Moe1xuICAgICAgICB0cmFuc3BhcmVuY3ksXG4gICAgICAgIG9wdGlvbmFsQ29udGVudENvbmZpZ1xuICAgICAgfSk7XG4gICAgICBpbnRlcm5hbFJlbmRlclRhc2sub3BlcmF0b3JMaXN0Q2hhbmdlZCgpO1xuICAgIH0pLmNhdGNoKGNvbXBsZXRlKTtcbiAgICByZXR1cm4gcmVuZGVyVGFzaztcbiAgfVxuXG4gIGdldE9wZXJhdG9yTGlzdCh7XG4gICAgaW50ZW50ID0gXCJkaXNwbGF5XCIsXG4gICAgYW5ub3RhdGlvbk1vZGUgPSBfdXRpbC5Bbm5vdGF0aW9uTW9kZS5FTkFCTEVcbiAgfSA9IHt9KSB7XG4gICAgZnVuY3Rpb24gb3BlcmF0b3JMaXN0Q2hhbmdlZCgpIHtcbiAgICAgIGlmIChpbnRlbnRTdGF0ZS5vcGVyYXRvckxpc3QubGFzdENodW5rKSB7XG4gICAgICAgIGludGVudFN0YXRlLm9wTGlzdFJlYWRDYXBhYmlsaXR5LnJlc29sdmUoaW50ZW50U3RhdGUub3BlcmF0b3JMaXN0KTtcbiAgICAgICAgaW50ZW50U3RhdGUucmVuZGVyVGFza3MuZGVsZXRlKG9wTGlzdFRhc2spO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGludGVudEFyZ3MgPSB0aGlzLl90cmFuc3BvcnQuZ2V0UmVuZGVyaW5nSW50ZW50KGludGVudCwgYW5ub3RhdGlvbk1vZGUsIHRydWUpO1xuXG4gICAgbGV0IGludGVudFN0YXRlID0gdGhpcy5faW50ZW50U3RhdGVzLmdldChpbnRlbnRBcmdzLmNhY2hlS2V5KTtcblxuICAgIGlmICghaW50ZW50U3RhdGUpIHtcbiAgICAgIGludGVudFN0YXRlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgdGhpcy5faW50ZW50U3RhdGVzLnNldChpbnRlbnRBcmdzLmNhY2hlS2V5LCBpbnRlbnRTdGF0ZSk7XG4gICAgfVxuXG4gICAgbGV0IG9wTGlzdFRhc2s7XG5cbiAgICBpZiAoIWludGVudFN0YXRlLm9wTGlzdFJlYWRDYXBhYmlsaXR5KSB7XG4gICAgICBvcExpc3RUYXNrID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIG9wTGlzdFRhc2sub3BlcmF0b3JMaXN0Q2hhbmdlZCA9IG9wZXJhdG9yTGlzdENoYW5nZWQ7XG4gICAgICBpbnRlbnRTdGF0ZS5vcExpc3RSZWFkQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgIChpbnRlbnRTdGF0ZS5yZW5kZXJUYXNrcyB8fD0gbmV3IFNldCgpKS5hZGQob3BMaXN0VGFzayk7XG4gICAgICBpbnRlbnRTdGF0ZS5vcGVyYXRvckxpc3QgPSB7XG4gICAgICAgIGZuQXJyYXk6IFtdLFxuICAgICAgICBhcmdzQXJyYXk6IFtdLFxuICAgICAgICBsYXN0Q2h1bms6IGZhbHNlXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5fc3RhdHMpIHtcbiAgICAgICAgdGhpcy5fc3RhdHMudGltZShcIlBhZ2UgUmVxdWVzdFwiKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcHVtcE9wZXJhdG9yTGlzdChpbnRlbnRBcmdzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW50ZW50U3RhdGUub3BMaXN0UmVhZENhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxuXG4gIHN0cmVhbVRleHRDb250ZW50KHtcbiAgICBub3JtYWxpemVXaGl0ZXNwYWNlID0gZmFsc2UsXG4gICAgZGlzYWJsZUNvbWJpbmVUZXh0SXRlbXMgPSBmYWxzZSxcbiAgICBpbmNsdWRlTWFya2VkQ29udGVudCA9IGZhbHNlXG4gIH0gPSB7fSkge1xuICAgIGNvbnN0IFRFWFRfQ09OVEVOVF9DSFVOS19TSVpFID0gMTAwO1xuICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhTdHJlYW0oXCJHZXRUZXh0Q29udGVudFwiLCB7XG4gICAgICBwYWdlSW5kZXg6IHRoaXMuX3BhZ2VJbmRleCxcbiAgICAgIG5vcm1hbGl6ZVdoaXRlc3BhY2U6IG5vcm1hbGl6ZVdoaXRlc3BhY2UgPT09IHRydWUsXG4gICAgICBjb21iaW5lVGV4dEl0ZW1zOiBkaXNhYmxlQ29tYmluZVRleHRJdGVtcyAhPT0gdHJ1ZSxcbiAgICAgIGluY2x1ZGVNYXJrZWRDb250ZW50OiBpbmNsdWRlTWFya2VkQ29udGVudCA9PT0gdHJ1ZVxuICAgIH0sIHtcbiAgICAgIGhpZ2hXYXRlck1hcms6IFRFWFRfQ09OVEVOVF9DSFVOS19TSVpFLFxuXG4gICAgICBzaXplKHRleHRDb250ZW50KSB7XG4gICAgICAgIHJldHVybiB0ZXh0Q29udGVudC5pdGVtcy5sZW5ndGg7XG4gICAgICB9XG5cbiAgICB9KTtcbiAgfVxuXG4gIGdldFRleHRDb250ZW50KHBhcmFtcyA9IHt9KSB7XG4gICAgaWYgKHRoaXMuX3RyYW5zcG9ydC5faHRtbEZvclhmYSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0WGZhKCkudGhlbih4ZmEgPT4ge1xuICAgICAgICByZXR1cm4gX3hmYV90ZXh0LlhmYVRleHQudGV4dENvbnRlbnQoeGZhKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHJlYWRhYmxlU3RyZWFtID0gdGhpcy5zdHJlYW1UZXh0Q29udGVudChwYXJhbXMpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBmdW5jdGlvbiBwdW1wKCkge1xuICAgICAgICByZWFkZXIucmVhZCgpLnRoZW4oZnVuY3Rpb24gKHtcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBkb25lXG4gICAgICAgIH0pIHtcbiAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgcmVzb2x2ZSh0ZXh0Q29udGVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbih0ZXh0Q29udGVudC5zdHlsZXMsIHZhbHVlLnN0eWxlcyk7XG4gICAgICAgICAgdGV4dENvbnRlbnQuaXRlbXMucHVzaCguLi52YWx1ZS5pdGVtcyk7XG4gICAgICAgICAgcHVtcCgpO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZWFkZXIgPSByZWFkYWJsZVN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgICAgIGNvbnN0IHRleHRDb250ZW50ID0ge1xuICAgICAgICBpdGVtczogW10sXG4gICAgICAgIHN0eWxlczogT2JqZWN0LmNyZWF0ZShudWxsKVxuICAgICAgfTtcbiAgICAgIHB1bXAoKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFN0cnVjdFRyZWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0cnVjdFRyZWVQcm9taXNlIHx8PSB0aGlzLl90cmFuc3BvcnQuZ2V0U3RydWN0VHJlZSh0aGlzLl9wYWdlSW5kZXgpO1xuICB9XG5cbiAgX2Rlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95ZWQgPSB0cnVlO1xuICAgIGNvbnN0IHdhaXRPbiA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBpbnRlbnRTdGF0ZSBvZiB0aGlzLl9pbnRlbnRTdGF0ZXMudmFsdWVzKCkpIHtcbiAgICAgIHRoaXMuX2Fib3J0T3BlcmF0b3JMaXN0KHtcbiAgICAgICAgaW50ZW50U3RhdGUsXG4gICAgICAgIHJlYXNvbjogbmV3IEVycm9yKFwiUGFnZSB3YXMgZGVzdHJveWVkLlwiKSxcbiAgICAgICAgZm9yY2U6IHRydWVcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoaW50ZW50U3RhdGUub3BMaXN0UmVhZENhcGFiaWxpdHkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgaW50ZXJuYWxSZW5kZXJUYXNrIG9mIGludGVudFN0YXRlLnJlbmRlclRhc2tzKSB7XG4gICAgICAgIHdhaXRPbi5wdXNoKGludGVybmFsUmVuZGVyVGFzay5jb21wbGV0ZWQpO1xuICAgICAgICBpbnRlcm5hbFJlbmRlclRhc2suY2FuY2VsKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5vYmpzLmNsZWFyKCk7XG5cbiAgICB0aGlzLl9hbm5vdGF0aW9uUHJvbWlzZXMuY2xlYXIoKTtcblxuICAgIHRoaXMuX2pzQWN0aW9uc1Byb21pc2UgPSBudWxsO1xuICAgIHRoaXMuX3N0cnVjdFRyZWVQcm9taXNlID0gbnVsbDtcbiAgICB0aGlzLnBlbmRpbmdDbGVhbnVwID0gZmFsc2U7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKHdhaXRPbik7XG4gIH1cblxuICBjbGVhbnVwKHJlc2V0U3RhdHMgPSBmYWxzZSkge1xuICAgIHRoaXMucGVuZGluZ0NsZWFudXAgPSB0cnVlO1xuICAgIHJldHVybiB0aGlzLl90cnlDbGVhbnVwKHJlc2V0U3RhdHMpO1xuICB9XG5cbiAgX3RyeUNsZWFudXAocmVzZXRTdGF0cyA9IGZhbHNlKSB7XG4gICAgaWYgKCF0aGlzLnBlbmRpbmdDbGVhbnVwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB7XG4gICAgICByZW5kZXJUYXNrcyxcbiAgICAgIG9wZXJhdG9yTGlzdFxuICAgIH0gb2YgdGhpcy5faW50ZW50U3RhdGVzLnZhbHVlcygpKSB7XG4gICAgICBpZiAocmVuZGVyVGFza3Muc2l6ZSA+IDAgfHwgIW9wZXJhdG9yTGlzdC5sYXN0Q2h1bmspIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2ludGVudFN0YXRlcy5jbGVhcigpO1xuXG4gICAgdGhpcy5vYmpzLmNsZWFyKCk7XG5cbiAgICB0aGlzLl9hbm5vdGF0aW9uUHJvbWlzZXMuY2xlYXIoKTtcblxuICAgIHRoaXMuX2pzQWN0aW9uc1Byb21pc2UgPSBudWxsO1xuICAgIHRoaXMuX3N0cnVjdFRyZWVQcm9taXNlID0gbnVsbDtcblxuICAgIGlmIChyZXNldFN0YXRzICYmIHRoaXMuX3N0YXRzKSB7XG4gICAgICB0aGlzLl9zdGF0cyA9IG5ldyBfZGlzcGxheV91dGlscy5TdGF0VGltZXIoKTtcbiAgICB9XG5cbiAgICB0aGlzLnBlbmRpbmdDbGVhbnVwID0gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBfc3RhcnRSZW5kZXJQYWdlKHRyYW5zcGFyZW5jeSwgY2FjaGVLZXkpIHtcbiAgICBjb25zdCBpbnRlbnRTdGF0ZSA9IHRoaXMuX2ludGVudFN0YXRlcy5nZXQoY2FjaGVLZXkpO1xuXG4gICAgaWYgKCFpbnRlbnRTdGF0ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdGF0cykge1xuICAgICAgdGhpcy5fc3RhdHMudGltZUVuZChcIlBhZ2UgUmVxdWVzdFwiKTtcbiAgICB9XG5cbiAgICBpZiAoaW50ZW50U3RhdGUuZGlzcGxheVJlYWR5Q2FwYWJpbGl0eSkge1xuICAgICAgaW50ZW50U3RhdGUuZGlzcGxheVJlYWR5Q2FwYWJpbGl0eS5yZXNvbHZlKHRyYW5zcGFyZW5jeSk7XG4gICAgfVxuICB9XG5cbiAgX3JlbmRlclBhZ2VDaHVuayhvcGVyYXRvckxpc3RDaHVuaywgaW50ZW50U3RhdGUpIHtcbiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBvcGVyYXRvckxpc3RDaHVuay5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBpbnRlbnRTdGF0ZS5vcGVyYXRvckxpc3QuZm5BcnJheS5wdXNoKG9wZXJhdG9yTGlzdENodW5rLmZuQXJyYXlbaV0pO1xuICAgICAgaW50ZW50U3RhdGUub3BlcmF0b3JMaXN0LmFyZ3NBcnJheS5wdXNoKG9wZXJhdG9yTGlzdENodW5rLmFyZ3NBcnJheVtpXSk7XG4gICAgfVxuXG4gICAgaW50ZW50U3RhdGUub3BlcmF0b3JMaXN0Lmxhc3RDaHVuayA9IG9wZXJhdG9yTGlzdENodW5rLmxhc3RDaHVuaztcblxuICAgIGZvciAoY29uc3QgaW50ZXJuYWxSZW5kZXJUYXNrIG9mIGludGVudFN0YXRlLnJlbmRlclRhc2tzKSB7XG4gICAgICBpbnRlcm5hbFJlbmRlclRhc2sub3BlcmF0b3JMaXN0Q2hhbmdlZCgpO1xuICAgIH1cblxuICAgIGlmIChvcGVyYXRvckxpc3RDaHVuay5sYXN0Q2h1bmspIHtcbiAgICAgIHRoaXMuX3RyeUNsZWFudXAoKTtcbiAgICB9XG4gIH1cblxuICBfcHVtcE9wZXJhdG9yTGlzdCh7XG4gICAgcmVuZGVyaW5nSW50ZW50LFxuICAgIGNhY2hlS2V5XG4gIH0pIHtcbiAgICBjb25zdCByZWFkYWJsZVN0cmVhbSA9IHRoaXMuX3RyYW5zcG9ydC5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFN0cmVhbShcIkdldE9wZXJhdG9yTGlzdFwiLCB7XG4gICAgICBwYWdlSW5kZXg6IHRoaXMuX3BhZ2VJbmRleCxcbiAgICAgIGludGVudDogcmVuZGVyaW5nSW50ZW50LFxuICAgICAgY2FjaGVLZXksXG4gICAgICBhbm5vdGF0aW9uU3RvcmFnZTogcmVuZGVyaW5nSW50ZW50ICYgX3V0aWwuUmVuZGVyaW5nSW50ZW50RmxhZy5BTk5PVEFUSU9OU19TVE9SQUdFID8gdGhpcy5fdHJhbnNwb3J0LmFubm90YXRpb25TdG9yYWdlLnNlcmlhbGl6YWJsZSA6IG51bGxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlYWRlciA9IHJlYWRhYmxlU3RyZWFtLmdldFJlYWRlcigpO1xuXG4gICAgY29uc3QgaW50ZW50U3RhdGUgPSB0aGlzLl9pbnRlbnRTdGF0ZXMuZ2V0KGNhY2hlS2V5KTtcblxuICAgIGludGVudFN0YXRlLnN0cmVhbVJlYWRlciA9IHJlYWRlcjtcblxuICAgIGNvbnN0IHB1bXAgPSAoKSA9PiB7XG4gICAgICByZWFkZXIucmVhZCgpLnRoZW4oKHtcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGRvbmVcbiAgICAgIH0pID0+IHtcbiAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICBpbnRlbnRTdGF0ZS5zdHJlYW1SZWFkZXIgPSBudWxsO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl90cmFuc3BvcnQuZGVzdHJveWVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcmVuZGVyUGFnZUNodW5rKHZhbHVlLCBpbnRlbnRTdGF0ZSk7XG5cbiAgICAgICAgcHVtcCgpO1xuICAgICAgfSwgcmVhc29uID0+IHtcbiAgICAgICAgaW50ZW50U3RhdGUuc3RyZWFtUmVhZGVyID0gbnVsbDtcblxuICAgICAgICBpZiAodGhpcy5fdHJhbnNwb3J0LmRlc3Ryb3llZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbnRlbnRTdGF0ZS5vcGVyYXRvckxpc3QpIHtcbiAgICAgICAgICBpbnRlbnRTdGF0ZS5vcGVyYXRvckxpc3QubGFzdENodW5rID0gdHJ1ZTtcblxuICAgICAgICAgIGZvciAoY29uc3QgaW50ZXJuYWxSZW5kZXJUYXNrIG9mIGludGVudFN0YXRlLnJlbmRlclRhc2tzKSB7XG4gICAgICAgICAgICBpbnRlcm5hbFJlbmRlclRhc2sub3BlcmF0b3JMaXN0Q2hhbmdlZCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX3RyeUNsZWFudXAoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbnRlbnRTdGF0ZS5kaXNwbGF5UmVhZHlDYXBhYmlsaXR5KSB7XG4gICAgICAgICAgaW50ZW50U3RhdGUuZGlzcGxheVJlYWR5Q2FwYWJpbGl0eS5yZWplY3QocmVhc29uKTtcbiAgICAgICAgfSBlbHNlIGlmIChpbnRlbnRTdGF0ZS5vcExpc3RSZWFkQ2FwYWJpbGl0eSkge1xuICAgICAgICAgIGludGVudFN0YXRlLm9wTGlzdFJlYWRDYXBhYmlsaXR5LnJlamVjdChyZWFzb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IHJlYXNvbjtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHB1bXAoKTtcbiAgfVxuXG4gIF9hYm9ydE9wZXJhdG9yTGlzdCh7XG4gICAgaW50ZW50U3RhdGUsXG4gICAgcmVhc29uLFxuICAgIGZvcmNlID0gZmFsc2VcbiAgfSkge1xuICAgIGlmICghaW50ZW50U3RhdGUuc3RyZWFtUmVhZGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFmb3JjZSkge1xuICAgICAgaWYgKGludGVudFN0YXRlLnJlbmRlclRhc2tzLnNpemUgPiAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlYXNvbiBpbnN0YW5jZW9mIF9kaXNwbGF5X3V0aWxzLlJlbmRlcmluZ0NhbmNlbGxlZEV4Y2VwdGlvbikge1xuICAgICAgICBpbnRlbnRTdGF0ZS5zdHJlYW1SZWFkZXJDYW5jZWxUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fYWJvcnRPcGVyYXRvckxpc3Qoe1xuICAgICAgICAgICAgaW50ZW50U3RhdGUsXG4gICAgICAgICAgICByZWFzb24sXG4gICAgICAgICAgICBmb3JjZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaW50ZW50U3RhdGUuc3RyZWFtUmVhZGVyQ2FuY2VsVGltZW91dCA9IG51bGw7XG4gICAgICAgIH0sIFJFTkRFUklOR19DQU5DRUxMRURfVElNRU9VVCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpbnRlbnRTdGF0ZS5zdHJlYW1SZWFkZXIuY2FuY2VsKG5ldyBfdXRpbC5BYm9ydEV4Y2VwdGlvbihyZWFzb24ubWVzc2FnZSkpLmNhdGNoKCgpID0+IHt9KTtcbiAgICBpbnRlbnRTdGF0ZS5zdHJlYW1SZWFkZXIgPSBudWxsO1xuXG4gICAgaWYgKHRoaXMuX3RyYW5zcG9ydC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtjdXJDYWNoZUtleSwgY3VySW50ZW50U3RhdGVdIG9mIHRoaXMuX2ludGVudFN0YXRlcykge1xuICAgICAgaWYgKGN1ckludGVudFN0YXRlID09PSBpbnRlbnRTdGF0ZSkge1xuICAgICAgICB0aGlzLl9pbnRlbnRTdGF0ZXMuZGVsZXRlKGN1ckNhY2hlS2V5KTtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNsZWFudXAoKTtcbiAgfVxuXG4gIGdldCBzdGF0cygpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdHM7XG4gIH1cblxufVxuXG5leHBvcnRzLlBERlBhZ2VQcm94eSA9IFBERlBhZ2VQcm94eTtcblxuY2xhc3MgTG9vcGJhY2tQb3J0IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzID0gW107XG4gICAgdGhpcy5fZGVmZXJyZWQgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIHBvc3RNZXNzYWdlKG9iaiwgdHJhbnNmZXJzKSB7XG4gICAgZnVuY3Rpb24gY2xvbmVWYWx1ZShvYmplY3QpIHtcbiAgICAgIGlmIChnbG9iYWxUaGlzLnN0cnVjdHVyZWRDbG9uZSkge1xuICAgICAgICByZXR1cm4gZ2xvYmFsVGhpcy5zdHJ1Y3R1cmVkQ2xvbmUob2JqZWN0LCB0cmFuc2ZlcnMpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBmYWxsYmFja0Nsb25lVmFsdWUodmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJzeW1ib2xcIiB8fCB2YWx1ZSBpbnN0YW5jZW9mIFVSTCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTG9vcGJhY2tQb3J0LnBvc3RNZXNzYWdlIC0gY2Fubm90IGNsb25lOiAke3ZhbHVlPy50b1N0cmluZygpfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjbG9uZWQuaGFzKHZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiBjbG9uZWQuZ2V0KHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBidWZmZXIsIHJlc3VsdDtcblxuICAgICAgICBpZiAoKGJ1ZmZlciA9IHZhbHVlLmJ1ZmZlcikgJiYgKDAsIF91dGlsLmlzQXJyYXlCdWZmZXIpKGJ1ZmZlcikpIHtcbiAgICAgICAgICBpZiAodHJhbnNmZXJzPy5pbmNsdWRlcyhidWZmZXIpKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBuZXcgdmFsdWUuY29uc3RydWN0b3IoYnVmZmVyLCB2YWx1ZS5ieXRlT2Zmc2V0LCB2YWx1ZS5ieXRlTGVuZ3RoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0gbmV3IHZhbHVlLmNvbnN0cnVjdG9yKHZhbHVlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjbG9uZWQuc2V0KHZhbHVlLCByZXN1bHQpO1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBNYXApIHtcbiAgICAgICAgICByZXN1bHQgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgY2xvbmVkLnNldCh2YWx1ZSwgcmVzdWx0KTtcblxuICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiB2YWx1ZSkge1xuICAgICAgICAgICAgcmVzdWx0LnNldChrZXksIGZhbGxiYWNrQ2xvbmVWYWx1ZSh2YWwpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgICAgICAgcmVzdWx0ID0gbmV3IFNldCgpO1xuICAgICAgICAgIGNsb25lZC5zZXQodmFsdWUsIHJlc3VsdCk7XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IHZhbCBvZiB2YWx1ZSkge1xuICAgICAgICAgICAgcmVzdWx0LmFkZChmYWxsYmFja0Nsb25lVmFsdWUodmFsKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdCA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gW10gOiBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBjbG9uZWQuc2V0KHZhbHVlLCByZXN1bHQpO1xuXG4gICAgICAgIGZvciAoY29uc3QgaSBpbiB2YWx1ZSkge1xuICAgICAgICAgIGxldCBkZXNjLFxuICAgICAgICAgICAgICBwID0gdmFsdWU7XG5cbiAgICAgICAgICB3aGlsZSAoIShkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwLCBpKSkpIHtcbiAgICAgICAgICAgIHAgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBkZXNjLnZhbHVlID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGRlc2MudmFsdWUgPT09IFwiZnVuY3Rpb25cIiAmJiAhdmFsdWUuaGFzT3duUHJvcGVydHk/LihpKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzdWx0W2ldID0gZmFsbGJhY2tDbG9uZVZhbHVlKGRlc2MudmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2xvbmVkID0gbmV3IFdlYWtNYXAoKTtcbiAgICAgIHJldHVybiBmYWxsYmFja0Nsb25lVmFsdWUob2JqZWN0KTtcbiAgICB9XG5cbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIGRhdGE6IGNsb25lVmFsdWUob2JqKVxuICAgIH07XG5cbiAgICB0aGlzLl9kZWZlcnJlZC50aGVuKCgpID0+IHtcbiAgICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICAgIGxpc3RlbmVyLmNhbGwodGhpcywgZXZlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBsaXN0ZW5lcikge1xuICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgfVxuXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSwgbGlzdGVuZXIpIHtcbiAgICBjb25zdCBpID0gdGhpcy5fbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuXG4gICAgdGhpcy5fbGlzdGVuZXJzLnNwbGljZShpLCAxKTtcbiAgfVxuXG4gIHRlcm1pbmF0ZSgpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMubGVuZ3RoID0gMDtcbiAgfVxuXG59XG5cbmV4cG9ydHMuTG9vcGJhY2tQb3J0ID0gTG9vcGJhY2tQb3J0O1xuY29uc3QgUERGV29ya2VyVXRpbCA9IHtcbiAgaXNXb3JrZXJEaXNhYmxlZDogZmFsc2UsXG4gIGZhbGxiYWNrV29ya2VyU3JjOiBudWxsLFxuICBmYWtlV29ya2VySWQ6IDBcbn07XG57XG4gIGlmIChfaXNfbm9kZS5pc05vZGVKUyAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgUERGV29ya2VyVXRpbC5pc1dvcmtlckRpc2FibGVkID0gdHJ1ZTtcbiAgICBQREZXb3JrZXJVdGlsLmZhbGxiYWNrV29ya2VyU3JjID0gXCIuL3BkZi53b3JrZXIuanNcIjtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09IFwib2JqZWN0XCIpIHtcbiAgICBjb25zdCBwZGZqc0ZpbGVQYXRoID0gZG9jdW1lbnQ/LmN1cnJlbnRTY3JpcHQ/LnNyYztcblxuICAgIGlmIChwZGZqc0ZpbGVQYXRoKSB7XG4gICAgICBQREZXb3JrZXJVdGlsLmZhbGxiYWNrV29ya2VyU3JjID0gcGRmanNGaWxlUGF0aC5yZXBsYWNlKC8oXFwuKD86bWluXFwuKT9qcykoXFw/LiopPyQvaSwgXCIud29ya2VyJDEkMlwiKTtcbiAgICB9XG4gIH1cblxuICBQREZXb3JrZXJVdGlsLmNyZWF0ZUNETldyYXBwZXIgPSBmdW5jdGlvbiAodXJsKSB7XG4gICAgY29uc3Qgd3JhcHBlciA9IGBpbXBvcnRTY3JpcHRzKFwiJHt1cmx9XCIpO2A7XG4gICAgcmV0dXJuIFVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW3dyYXBwZXJdKSk7XG4gIH07XG59XG5cbmNsYXNzIFBERldvcmtlciB7XG4gIHN0YXRpYyBnZXQgX3dvcmtlclBvcnRzKCkge1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIl93b3JrZXJQb3J0c1wiLCBuZXcgV2Vha01hcCgpKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBuYW1lID0gbnVsbCxcbiAgICBwb3J0ID0gbnVsbCxcbiAgICB2ZXJib3NpdHkgPSAoMCwgX3V0aWwuZ2V0VmVyYm9zaXR5TGV2ZWwpKClcbiAgfSA9IHt9KSB7XG4gICAgaWYgKHBvcnQgJiYgUERGV29ya2VyLl93b3JrZXJQb3J0cy5oYXMocG9ydCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCB1c2UgbW9yZSB0aGFuIG9uZSBQREZXb3JrZXIgcGVyIHBvcnQuXCIpO1xuICAgIH1cblxuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB0aGlzLnZlcmJvc2l0eSA9IHZlcmJvc2l0eTtcbiAgICB0aGlzLl9yZWFkeUNhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgdGhpcy5fcG9ydCA9IG51bGw7XG4gICAgdGhpcy5fd2ViV29ya2VyID0gbnVsbDtcbiAgICB0aGlzLl9tZXNzYWdlSGFuZGxlciA9IG51bGw7XG5cbiAgICBpZiAocG9ydCkge1xuICAgICAgUERGV29ya2VyLl93b3JrZXJQb3J0cy5zZXQocG9ydCwgdGhpcyk7XG5cbiAgICAgIHRoaXMuX2luaXRpYWxpemVGcm9tUG9ydChwb3J0KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRpYWxpemUoKTtcbiAgfVxuXG4gIGdldCBwcm9taXNlKCkge1xuICAgIHJldHVybiB0aGlzLl9yZWFkeUNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxuXG4gIGdldCBwb3J0KCkge1xuICAgIHJldHVybiB0aGlzLl9wb3J0O1xuICB9XG5cbiAgZ2V0IG1lc3NhZ2VIYW5kbGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9tZXNzYWdlSGFuZGxlcjtcbiAgfVxuXG4gIF9pbml0aWFsaXplRnJvbVBvcnQocG9ydCkge1xuICAgIHRoaXMuX3BvcnQgPSBwb3J0O1xuICAgIHRoaXMuX21lc3NhZ2VIYW5kbGVyID0gbmV3IF9tZXNzYWdlX2hhbmRsZXIuTWVzc2FnZUhhbmRsZXIoXCJtYWluXCIsIFwid29ya2VyXCIsIHBvcnQpO1xuXG4gICAgdGhpcy5fbWVzc2FnZUhhbmRsZXIub24oXCJyZWFkeVwiLCBmdW5jdGlvbiAoKSB7fSk7XG5cbiAgICB0aGlzLl9yZWFkeUNhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICB9XG5cbiAgX2luaXRpYWxpemUoKSB7XG4gICAgaWYgKHR5cGVvZiBXb3JrZXIgIT09IFwidW5kZWZpbmVkXCIgJiYgIVBERldvcmtlclV0aWwuaXNXb3JrZXJEaXNhYmxlZCAmJiAhUERGV29ya2VyLl9tYWluVGhyZWFkV29ya2VyTWVzc2FnZUhhbmRsZXIpIHtcbiAgICAgIGxldCB3b3JrZXJTcmMgPSBQREZXb3JrZXIud29ya2VyU3JjO1xuXG4gICAgICB0cnkge1xuICAgICAgICBpZiAoISgwLCBfdXRpbC5pc1NhbWVPcmlnaW4pKHdpbmRvdy5sb2NhdGlvbi5ocmVmLCB3b3JrZXJTcmMpKSB7XG4gICAgICAgICAgd29ya2VyU3JjID0gUERGV29ya2VyVXRpbC5jcmVhdGVDRE5XcmFwcGVyKG5ldyBVUkwod29ya2VyU3JjLCB3aW5kb3cubG9jYXRpb24pLmhyZWYpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcih3b3JrZXJTcmMpO1xuICAgICAgICBjb25zdCBtZXNzYWdlSGFuZGxlciA9IG5ldyBfbWVzc2FnZV9oYW5kbGVyLk1lc3NhZ2VIYW5kbGVyKFwibWFpblwiLCBcIndvcmtlclwiLCB3b3JrZXIpO1xuXG4gICAgICAgIGNvbnN0IHRlcm1pbmF0ZUVhcmx5ID0gKCkgPT4ge1xuICAgICAgICAgIHdvcmtlci5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgb25Xb3JrZXJFcnJvcik7XG4gICAgICAgICAgbWVzc2FnZUhhbmRsZXIuZGVzdHJveSgpO1xuICAgICAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcblxuICAgICAgICAgIGlmICh0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgICAgICAgdGhpcy5fcmVhZHlDYXBhYmlsaXR5LnJlamVjdChuZXcgRXJyb3IoXCJXb3JrZXIgd2FzIGRlc3Ryb3llZFwiKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3NldHVwRmFrZVdvcmtlcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBvbldvcmtlckVycm9yID0gKCkgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5fd2ViV29ya2VyKSB7XG4gICAgICAgICAgICB0ZXJtaW5hdGVFYXJseSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB3b3JrZXIuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIG9uV29ya2VyRXJyb3IpO1xuICAgICAgICBtZXNzYWdlSGFuZGxlci5vbihcInRlc3RcIiwgZGF0YSA9PiB7XG4gICAgICAgICAgd29ya2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBvbldvcmtlckVycm9yKTtcblxuICAgICAgICAgIGlmICh0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgICAgICAgdGVybWluYXRlRWFybHkoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgdGhpcy5fbWVzc2FnZUhhbmRsZXIgPSBtZXNzYWdlSGFuZGxlcjtcbiAgICAgICAgICAgIHRoaXMuX3BvcnQgPSB3b3JrZXI7XG4gICAgICAgICAgICB0aGlzLl93ZWJXb3JrZXIgPSB3b3JrZXI7XG5cbiAgICAgICAgICAgIHRoaXMuX3JlYWR5Q2FwYWJpbGl0eS5yZXNvbHZlKCk7XG5cbiAgICAgICAgICAgIG1lc3NhZ2VIYW5kbGVyLnNlbmQoXCJjb25maWd1cmVcIiwge1xuICAgICAgICAgICAgICB2ZXJib3NpdHk6IHRoaXMudmVyYm9zaXR5XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fc2V0dXBGYWtlV29ya2VyKCk7XG5cbiAgICAgICAgICAgIG1lc3NhZ2VIYW5kbGVyLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBtZXNzYWdlSGFuZGxlci5vbihcInJlYWR5XCIsIGRhdGEgPT4ge1xuICAgICAgICAgIHdvcmtlci5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgb25Xb3JrZXJFcnJvcik7XG5cbiAgICAgICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIHRlcm1pbmF0ZUVhcmx5KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHNlbmRUZXN0KCk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy5fc2V0dXBGYWtlV29ya2VyKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBzZW5kVGVzdCA9ICgpID0+IHtcbiAgICAgICAgICBjb25zdCB0ZXN0T2JqID0gbmV3IFVpbnQ4QXJyYXkoWzI1NV0pO1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG1lc3NhZ2VIYW5kbGVyLnNlbmQoXCJ0ZXN0XCIsIHRlc3RPYmosIFt0ZXN0T2JqLmJ1ZmZlcl0pO1xuICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJDYW5ub3QgdXNlIHBvc3RNZXNzYWdlIHRyYW5zZmVycy5cIik7XG4gICAgICAgICAgICB0ZXN0T2JqWzBdID0gMDtcbiAgICAgICAgICAgIG1lc3NhZ2VIYW5kbGVyLnNlbmQoXCJ0ZXN0XCIsIHRlc3RPYmopO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBzZW5kVGVzdCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICgwLCBfdXRpbC5pbmZvKShcIlRoZSB3b3JrZXIgaGFzIGJlZW4gZGlzYWJsZWQuXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3NldHVwRmFrZVdvcmtlcigpO1xuICB9XG5cbiAgX3NldHVwRmFrZVdvcmtlcigpIHtcbiAgICBpZiAoIVBERldvcmtlclV0aWwuaXNXb3JrZXJEaXNhYmxlZCkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKFwiU2V0dGluZyB1cCBmYWtlIHdvcmtlci5cIik7XG4gICAgICBQREZXb3JrZXJVdGlsLmlzV29ya2VyRGlzYWJsZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIFBERldvcmtlci5fc2V0dXBGYWtlV29ya2VyR2xvYmFsLnRoZW4oV29ya2VyTWVzc2FnZUhhbmRsZXIgPT4ge1xuICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAgIHRoaXMuX3JlYWR5Q2FwYWJpbGl0eS5yZWplY3QobmV3IEVycm9yKFwiV29ya2VyIHdhcyBkZXN0cm95ZWRcIikpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcG9ydCA9IG5ldyBMb29wYmFja1BvcnQoKTtcbiAgICAgIHRoaXMuX3BvcnQgPSBwb3J0O1xuICAgICAgY29uc3QgaWQgPSBgZmFrZSR7UERGV29ya2VyVXRpbC5mYWtlV29ya2VySWQrK31gO1xuICAgICAgY29uc3Qgd29ya2VySGFuZGxlciA9IG5ldyBfbWVzc2FnZV9oYW5kbGVyLk1lc3NhZ2VIYW5kbGVyKGlkICsgXCJfd29ya2VyXCIsIGlkLCBwb3J0KTtcbiAgICAgIFdvcmtlck1lc3NhZ2VIYW5kbGVyLnNldHVwKHdvcmtlckhhbmRsZXIsIHBvcnQpO1xuICAgICAgY29uc3QgbWVzc2FnZUhhbmRsZXIgPSBuZXcgX21lc3NhZ2VfaGFuZGxlci5NZXNzYWdlSGFuZGxlcihpZCwgaWQgKyBcIl93b3JrZXJcIiwgcG9ydCk7XG4gICAgICB0aGlzLl9tZXNzYWdlSGFuZGxlciA9IG1lc3NhZ2VIYW5kbGVyO1xuXG4gICAgICB0aGlzLl9yZWFkeUNhcGFiaWxpdHkucmVzb2x2ZSgpO1xuXG4gICAgICBtZXNzYWdlSGFuZGxlci5zZW5kKFwiY29uZmlndXJlXCIsIHtcbiAgICAgICAgdmVyYm9zaXR5OiB0aGlzLnZlcmJvc2l0eVxuICAgICAgfSk7XG4gICAgfSkuY2F0Y2gocmVhc29uID0+IHtcbiAgICAgIHRoaXMuX3JlYWR5Q2FwYWJpbGl0eS5yZWplY3QobmV3IEVycm9yKGBTZXR0aW5nIHVwIGZha2Ugd29ya2VyIGZhaWxlZDogXCIke3JlYXNvbi5tZXNzYWdlfVwiLmApKTtcbiAgICB9KTtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95ZWQgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuX3dlYldvcmtlcikge1xuICAgICAgdGhpcy5fd2ViV29ya2VyLnRlcm1pbmF0ZSgpO1xuXG4gICAgICB0aGlzLl93ZWJXb3JrZXIgPSBudWxsO1xuICAgIH1cblxuICAgIFBERldvcmtlci5fd29ya2VyUG9ydHMuZGVsZXRlKHRoaXMuX3BvcnQpO1xuXG4gICAgdGhpcy5fcG9ydCA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5fbWVzc2FnZUhhbmRsZXIpIHtcbiAgICAgIHRoaXMuX21lc3NhZ2VIYW5kbGVyLmRlc3Ryb3koKTtcblxuICAgICAgdGhpcy5fbWVzc2FnZUhhbmRsZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBmcm9tUG9ydChwYXJhbXMpIHtcbiAgICBpZiAoIXBhcmFtcz8ucG9ydCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUERGV29ya2VyLmZyb21Qb3J0IC0gaW52YWxpZCBtZXRob2Qgc2lnbmF0dXJlLlwiKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fd29ya2VyUG9ydHMuaGFzKHBhcmFtcy5wb3J0KSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3dvcmtlclBvcnRzLmdldChwYXJhbXMucG9ydCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQREZXb3JrZXIocGFyYW1zKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgd29ya2VyU3JjKCkge1xuICAgIGlmIChfd29ya2VyX29wdGlvbnMuR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJTcmMpIHtcbiAgICAgIHJldHVybiBfd29ya2VyX29wdGlvbnMuR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJTcmM7XG4gICAgfVxuXG4gICAgaWYgKFBERldvcmtlclV0aWwuZmFsbGJhY2tXb3JrZXJTcmMgIT09IG51bGwpIHtcbiAgICAgIGlmICghX2lzX25vZGUuaXNOb2RlSlMpIHtcbiAgICAgICAgKDAsIF9kaXNwbGF5X3V0aWxzLmRlcHJlY2F0ZWQpKCdObyBcIkdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjXCIgc3BlY2lmaWVkLicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gUERGV29ya2VyVXRpbC5mYWxsYmFja1dvcmtlclNyYztcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIFwiR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJTcmNcIiBzcGVjaWZpZWQuJyk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IF9tYWluVGhyZWFkV29ya2VyTWVzc2FnZUhhbmRsZXIoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBnbG9iYWxUaGlzLnBkZmpzV29ya2VyPy5Xb3JrZXJNZXNzYWdlSGFuZGxlciB8fCBudWxsO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0IF9zZXR1cEZha2VXb3JrZXJHbG9iYWwoKSB7XG4gICAgY29uc3QgbG9hZGVyID0gYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgbWFpbldvcmtlck1lc3NhZ2VIYW5kbGVyID0gdGhpcy5fbWFpblRocmVhZFdvcmtlck1lc3NhZ2VIYW5kbGVyO1xuXG4gICAgICBpZiAobWFpbldvcmtlck1lc3NhZ2VIYW5kbGVyKSB7XG4gICAgICAgIHJldHVybiBtYWluV29ya2VyTWVzc2FnZUhhbmRsZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChfaXNfbm9kZS5pc05vZGVKUyAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNvbnN0IHdvcmtlciA9IGV2YWwoXCJyZXF1aXJlXCIpKHRoaXMud29ya2VyU3JjKTtcbiAgICAgICAgcmV0dXJuIHdvcmtlci5Xb3JrZXJNZXNzYWdlSGFuZGxlcjtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgKDAsIF9kaXNwbGF5X3V0aWxzLmxvYWRTY3JpcHQpKHRoaXMud29ya2VyU3JjKTtcbiAgICAgIHJldHVybiB3aW5kb3cucGRmanNXb3JrZXIuV29ya2VyTWVzc2FnZUhhbmRsZXI7XG4gICAgfTtcblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIl9zZXR1cEZha2VXb3JrZXJHbG9iYWxcIiwgbG9hZGVyKCkpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5QREZXb3JrZXIgPSBQREZXb3JrZXI7XG57XG4gIFBERldvcmtlci5nZXRXb3JrZXJTcmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgKDAsIF9kaXNwbGF5X3V0aWxzLmRlcHJlY2F0ZWQpKFwiYFBERldvcmtlci5nZXRXb3JrZXJTcmMoKWAsIHBsZWFzZSB1c2UgYFBERldvcmtlci53b3JrZXJTcmNgIGluc3RlYWQuXCIpO1xuICAgIHJldHVybiB0aGlzLndvcmtlclNyYztcbiAgfTtcbn1cblxuY2xhc3MgV29ya2VyVHJhbnNwb3J0IHtcbiAgI2RvY1N0YXRzID0gbnVsbDtcbiAgI3BhZ2VDYWNoZSA9IG5ldyBNYXAoKTtcbiAgI3BhZ2VQcm9taXNlcyA9IG5ldyBNYXAoKTtcbiAgI21ldGFkYXRhUHJvbWlzZSA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IobWVzc2FnZUhhbmRsZXIsIGxvYWRpbmdUYXNrLCBuZXR3b3JrU3RyZWFtLCBwYXJhbXMpIHtcbiAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyID0gbWVzc2FnZUhhbmRsZXI7XG4gICAgdGhpcy5sb2FkaW5nVGFzayA9IGxvYWRpbmdUYXNrO1xuICAgIHRoaXMuY29tbW9uT2JqcyA9IG5ldyBQREZPYmplY3RzKCk7XG4gICAgdGhpcy5mb250TG9hZGVyID0gbmV3IF9mb250X2xvYWRlci5Gb250TG9hZGVyKHtcbiAgICAgIGRvY0lkOiBsb2FkaW5nVGFzay5kb2NJZCxcbiAgICAgIG9uVW5zdXBwb3J0ZWRGZWF0dXJlOiB0aGlzLl9vblVuc3VwcG9ydGVkRmVhdHVyZS5iaW5kKHRoaXMpLFxuICAgICAgb3duZXJEb2N1bWVudDogcGFyYW1zLm93bmVyRG9jdW1lbnQsXG4gICAgICBzdHlsZUVsZW1lbnQ6IHBhcmFtcy5zdHlsZUVsZW1lbnRcbiAgICB9KTtcbiAgICB0aGlzLl9wYXJhbXMgPSBwYXJhbXM7XG5cbiAgICBpZiAoIXBhcmFtcy51c2VXb3JrZXJGZXRjaCkge1xuICAgICAgdGhpcy5DTWFwUmVhZGVyRmFjdG9yeSA9IG5ldyBwYXJhbXMuQ01hcFJlYWRlckZhY3Rvcnkoe1xuICAgICAgICBiYXNlVXJsOiBwYXJhbXMuY01hcFVybCxcbiAgICAgICAgaXNDb21wcmVzc2VkOiBwYXJhbXMuY01hcFBhY2tlZFxuICAgICAgfSk7XG4gICAgICB0aGlzLlN0YW5kYXJkRm9udERhdGFGYWN0b3J5ID0gbmV3IHBhcmFtcy5TdGFuZGFyZEZvbnREYXRhRmFjdG9yeSh7XG4gICAgICAgIGJhc2VVcmw6IHBhcmFtcy5zdGFuZGFyZEZvbnREYXRhVXJsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmRlc3Ryb3llZCA9IGZhbHNlO1xuICAgIHRoaXMuZGVzdHJveUNhcGFiaWxpdHkgPSBudWxsO1xuICAgIHRoaXMuX3Bhc3N3b3JkQ2FwYWJpbGl0eSA9IG51bGw7XG4gICAgdGhpcy5fbmV0d29ya1N0cmVhbSA9IG5ldHdvcmtTdHJlYW07XG4gICAgdGhpcy5fZnVsbFJlYWRlciA9IG51bGw7XG4gICAgdGhpcy5fbGFzdFByb2dyZXNzID0gbnVsbDtcbiAgICB0aGlzLmRvd25sb2FkSW5mb0NhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgdGhpcy5zZXR1cE1lc3NhZ2VIYW5kbGVyKCk7XG4gIH1cblxuICBnZXQgYW5ub3RhdGlvblN0b3JhZ2UoKSB7XG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiYW5ub3RhdGlvblN0b3JhZ2VcIiwgbmV3IF9hbm5vdGF0aW9uX3N0b3JhZ2UuQW5ub3RhdGlvblN0b3JhZ2UoKSk7XG4gIH1cblxuICBnZXQgc3RhdHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2RvY1N0YXRzO1xuICB9XG5cbiAgZ2V0UmVuZGVyaW5nSW50ZW50KGludGVudCwgYW5ub3RhdGlvbk1vZGUgPSBfdXRpbC5Bbm5vdGF0aW9uTW9kZS5FTkFCTEUsIGlzT3BMaXN0ID0gZmFsc2UpIHtcbiAgICBsZXQgcmVuZGVyaW5nSW50ZW50ID0gX3V0aWwuUmVuZGVyaW5nSW50ZW50RmxhZy5ESVNQTEFZO1xuICAgIGxldCBsYXN0TW9kaWZpZWQgPSBcIlwiO1xuXG4gICAgc3dpdGNoIChpbnRlbnQpIHtcbiAgICAgIGNhc2UgXCJhbnlcIjpcbiAgICAgICAgcmVuZGVyaW5nSW50ZW50ID0gX3V0aWwuUmVuZGVyaW5nSW50ZW50RmxhZy5BTlk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiZGlzcGxheVwiOlxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcInByaW50XCI6XG4gICAgICAgIHJlbmRlcmluZ0ludGVudCA9IF91dGlsLlJlbmRlcmluZ0ludGVudEZsYWcuUFJJTlQ7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICAoMCwgX3V0aWwud2FybikoYGdldFJlbmRlcmluZ0ludGVudCAtIGludmFsaWQgaW50ZW50OiAke2ludGVudH1gKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGFubm90YXRpb25Nb2RlKSB7XG4gICAgICBjYXNlIF91dGlsLkFubm90YXRpb25Nb2RlLkRJU0FCTEU6XG4gICAgICAgIHJlbmRlcmluZ0ludGVudCArPSBfdXRpbC5SZW5kZXJpbmdJbnRlbnRGbGFnLkFOTk9UQVRJT05TX0RJU0FCTEU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIF91dGlsLkFubm90YXRpb25Nb2RlLkVOQUJMRTpcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvbk1vZGUuRU5BQkxFX0ZPUk1TOlxuICAgICAgICByZW5kZXJpbmdJbnRlbnQgKz0gX3V0aWwuUmVuZGVyaW5nSW50ZW50RmxhZy5BTk5PVEFUSU9OU19GT1JNUztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvbk1vZGUuRU5BQkxFX1NUT1JBR0U6XG4gICAgICAgIHJlbmRlcmluZ0ludGVudCArPSBfdXRpbC5SZW5kZXJpbmdJbnRlbnRGbGFnLkFOTk9UQVRJT05TX1NUT1JBR0U7XG4gICAgICAgIGxhc3RNb2RpZmllZCA9IHRoaXMuYW5ub3RhdGlvblN0b3JhZ2UubGFzdE1vZGlmaWVkO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKGBnZXRSZW5kZXJpbmdJbnRlbnQgLSBpbnZhbGlkIGFubm90YXRpb25Nb2RlOiAke2Fubm90YXRpb25Nb2RlfWApO1xuICAgIH1cblxuICAgIGlmIChpc09wTGlzdCkge1xuICAgICAgcmVuZGVyaW5nSW50ZW50ICs9IF91dGlsLlJlbmRlcmluZ0ludGVudEZsYWcuT1BMSVNUO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICByZW5kZXJpbmdJbnRlbnQsXG4gICAgICBjYWNoZUtleTogYCR7cmVuZGVyaW5nSW50ZW50fV8ke2xhc3RNb2RpZmllZH1gXG4gICAgfTtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuZGVzdHJveUNhcGFiaWxpdHkpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlc3Ryb3lDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgfVxuXG4gICAgdGhpcy5kZXN0cm95ZWQgPSB0cnVlO1xuICAgIHRoaXMuZGVzdHJveUNhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG5cbiAgICBpZiAodGhpcy5fcGFzc3dvcmRDYXBhYmlsaXR5KSB7XG4gICAgICB0aGlzLl9wYXNzd29yZENhcGFiaWxpdHkucmVqZWN0KG5ldyBFcnJvcihcIldvcmtlciB3YXMgZGVzdHJveWVkIGR1cmluZyBvblBhc3N3b3JkIGNhbGxiYWNrXCIpKTtcbiAgICB9XG5cbiAgICBjb25zdCB3YWl0T24gPSBbXTtcblxuICAgIGZvciAoY29uc3QgcGFnZSBvZiB0aGlzLiNwYWdlQ2FjaGUudmFsdWVzKCkpIHtcbiAgICAgIHdhaXRPbi5wdXNoKHBhZ2UuX2Rlc3Ryb3koKSk7XG4gICAgfVxuXG4gICAgdGhpcy4jcGFnZUNhY2hlLmNsZWFyKCk7XG4gICAgdGhpcy4jcGFnZVByb21pc2VzLmNsZWFyKCk7XG5cbiAgICBpZiAodGhpcy5oYXNPd25Qcm9wZXJ0eShcImFubm90YXRpb25TdG9yYWdlXCIpKSB7XG4gICAgICB0aGlzLmFubm90YXRpb25TdG9yYWdlLnJlc2V0TW9kaWZpZWQoKTtcbiAgICB9XG5cbiAgICBjb25zdCB0ZXJtaW5hdGVkID0gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJUZXJtaW5hdGVcIiwgbnVsbCk7XG4gICAgd2FpdE9uLnB1c2godGVybWluYXRlZCk7XG4gICAgUHJvbWlzZS5hbGwod2FpdE9uKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuY29tbW9uT2Jqcy5jbGVhcigpO1xuICAgICAgdGhpcy5mb250TG9hZGVyLmNsZWFyKCk7XG4gICAgICB0aGlzLiNtZXRhZGF0YVByb21pc2UgPSBudWxsO1xuICAgICAgdGhpcy5fZ2V0RmllbGRPYmplY3RzUHJvbWlzZSA9IG51bGw7XG4gICAgICB0aGlzLl9oYXNKU0FjdGlvbnNQcm9taXNlID0gbnVsbDtcblxuICAgICAgaWYgKHRoaXMuX25ldHdvcmtTdHJlYW0pIHtcbiAgICAgICAgdGhpcy5fbmV0d29ya1N0cmVhbS5jYW5jZWxBbGxSZXF1ZXN0cyhuZXcgX3V0aWwuQWJvcnRFeGNlcHRpb24oXCJXb3JrZXIgd2FzIHRlcm1pbmF0ZWQuXCIpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMubWVzc2FnZUhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmRlc3Ryb3lDYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICB9LCB0aGlzLmRlc3Ryb3lDYXBhYmlsaXR5LnJlamVjdCk7XG4gICAgcmV0dXJuIHRoaXMuZGVzdHJveUNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxuXG4gIHNldHVwTWVzc2FnZUhhbmRsZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgbWVzc2FnZUhhbmRsZXIsXG4gICAgICBsb2FkaW5nVGFza1xuICAgIH0gPSB0aGlzO1xuICAgIG1lc3NhZ2VIYW5kbGVyLm9uKFwiR2V0UmVhZGVyXCIsIChkYXRhLCBzaW5rKSA9PiB7XG4gICAgICAoMCwgX3V0aWwuYXNzZXJ0KSh0aGlzLl9uZXR3b3JrU3RyZWFtLCBcIkdldFJlYWRlciAtIG5vIGBJUERGU3RyZWFtYCBpbnN0YW5jZSBhdmFpbGFibGUuXCIpO1xuICAgICAgdGhpcy5fZnVsbFJlYWRlciA9IHRoaXMuX25ldHdvcmtTdHJlYW0uZ2V0RnVsbFJlYWRlcigpO1xuXG4gICAgICB0aGlzLl9mdWxsUmVhZGVyLm9uUHJvZ3Jlc3MgPSBldnQgPT4ge1xuICAgICAgICB0aGlzLl9sYXN0UHJvZ3Jlc3MgPSB7XG4gICAgICAgICAgbG9hZGVkOiBldnQubG9hZGVkLFxuICAgICAgICAgIHRvdGFsOiBldnQudG90YWxcbiAgICAgICAgfTtcbiAgICAgIH07XG5cbiAgICAgIHNpbmsub25QdWxsID0gKCkgPT4ge1xuICAgICAgICB0aGlzLl9mdWxsUmVhZGVyLnJlYWQoKS50aGVuKGZ1bmN0aW9uICh7XG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgZG9uZVxuICAgICAgICB9KSB7XG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIHNpbmsuY2xvc2UoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KSgoMCwgX3V0aWwuaXNBcnJheUJ1ZmZlcikodmFsdWUpLCBcIkdldFJlYWRlciAtIGV4cGVjdGVkIGFuIEFycmF5QnVmZmVyLlwiKTtcbiAgICAgICAgICBzaW5rLmVucXVldWUobmV3IFVpbnQ4QXJyYXkodmFsdWUpLCAxLCBbdmFsdWVdKTtcbiAgICAgICAgfSkuY2F0Y2gocmVhc29uID0+IHtcbiAgICAgICAgICBzaW5rLmVycm9yKHJlYXNvbik7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgc2luay5vbkNhbmNlbCA9IHJlYXNvbiA9PiB7XG4gICAgICAgIHRoaXMuX2Z1bGxSZWFkZXIuY2FuY2VsKHJlYXNvbik7XG5cbiAgICAgICAgc2luay5yZWFkeS5jYXRjaChyZWFkeVJlYXNvbiA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhyb3cgcmVhZHlSZWFzb247XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9KTtcbiAgICBtZXNzYWdlSGFuZGxlci5vbihcIlJlYWRlckhlYWRlcnNSZWFkeVwiLCBkYXRhID0+IHtcbiAgICAgIGNvbnN0IGhlYWRlcnNDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgY29uc3QgZnVsbFJlYWRlciA9IHRoaXMuX2Z1bGxSZWFkZXI7XG4gICAgICBmdWxsUmVhZGVyLmhlYWRlcnNSZWFkeS50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKCFmdWxsUmVhZGVyLmlzU3RyZWFtaW5nU3VwcG9ydGVkIHx8ICFmdWxsUmVhZGVyLmlzUmFuZ2VTdXBwb3J0ZWQpIHtcbiAgICAgICAgICBpZiAodGhpcy5fbGFzdFByb2dyZXNzKSB7XG4gICAgICAgICAgICBsb2FkaW5nVGFzay5vblByb2dyZXNzPy4odGhpcy5fbGFzdFByb2dyZXNzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmdWxsUmVhZGVyLm9uUHJvZ3Jlc3MgPSBldnQgPT4ge1xuICAgICAgICAgICAgbG9hZGluZ1Rhc2sub25Qcm9ncmVzcz8uKHtcbiAgICAgICAgICAgICAgbG9hZGVkOiBldnQubG9hZGVkLFxuICAgICAgICAgICAgICB0b3RhbDogZXZ0LnRvdGFsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaGVhZGVyc0NhcGFiaWxpdHkucmVzb2x2ZSh7XG4gICAgICAgICAgaXNTdHJlYW1pbmdTdXBwb3J0ZWQ6IGZ1bGxSZWFkZXIuaXNTdHJlYW1pbmdTdXBwb3J0ZWQsXG4gICAgICAgICAgaXNSYW5nZVN1cHBvcnRlZDogZnVsbFJlYWRlci5pc1JhbmdlU3VwcG9ydGVkLFxuICAgICAgICAgIGNvbnRlbnRMZW5ndGg6IGZ1bGxSZWFkZXIuY29udGVudExlbmd0aFxuICAgICAgICB9KTtcbiAgICAgIH0sIGhlYWRlcnNDYXBhYmlsaXR5LnJlamVjdCk7XG4gICAgICByZXR1cm4gaGVhZGVyc0NhcGFiaWxpdHkucHJvbWlzZTtcbiAgICB9KTtcbiAgICBtZXNzYWdlSGFuZGxlci5vbihcIkdldFJhbmdlUmVhZGVyXCIsIChkYXRhLCBzaW5rKSA9PiB7XG4gICAgICAoMCwgX3V0aWwuYXNzZXJ0KSh0aGlzLl9uZXR3b3JrU3RyZWFtLCBcIkdldFJhbmdlUmVhZGVyIC0gbm8gYElQREZTdHJlYW1gIGluc3RhbmNlIGF2YWlsYWJsZS5cIik7XG5cbiAgICAgIGNvbnN0IHJhbmdlUmVhZGVyID0gdGhpcy5fbmV0d29ya1N0cmVhbS5nZXRSYW5nZVJlYWRlcihkYXRhLmJlZ2luLCBkYXRhLmVuZCk7XG5cbiAgICAgIGlmICghcmFuZ2VSZWFkZXIpIHtcbiAgICAgICAgc2luay5jbG9zZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHNpbmsub25QdWxsID0gKCkgPT4ge1xuICAgICAgICByYW5nZVJlYWRlci5yZWFkKCkudGhlbihmdW5jdGlvbiAoe1xuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIGRvbmVcbiAgICAgICAgfSkge1xuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICBzaW5rLmNsb3NlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgKDAsIF91dGlsLmFzc2VydCkoKDAsIF91dGlsLmlzQXJyYXlCdWZmZXIpKHZhbHVlKSwgXCJHZXRSYW5nZVJlYWRlciAtIGV4cGVjdGVkIGFuIEFycmF5QnVmZmVyLlwiKTtcbiAgICAgICAgICBzaW5rLmVucXVldWUobmV3IFVpbnQ4QXJyYXkodmFsdWUpLCAxLCBbdmFsdWVdKTtcbiAgICAgICAgfSkuY2F0Y2gocmVhc29uID0+IHtcbiAgICAgICAgICBzaW5rLmVycm9yKHJlYXNvbik7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgc2luay5vbkNhbmNlbCA9IHJlYXNvbiA9PiB7XG4gICAgICAgIHJhbmdlUmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICAgICAgICBzaW5rLnJlYWR5LmNhdGNoKHJlYWR5UmVhc29uID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aHJvdyByZWFkeVJlYXNvbjtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH0pO1xuICAgIG1lc3NhZ2VIYW5kbGVyLm9uKFwiR2V0RG9jXCIsICh7XG4gICAgICBwZGZJbmZvXG4gICAgfSkgPT4ge1xuICAgICAgdGhpcy5fbnVtUGFnZXMgPSBwZGZJbmZvLm51bVBhZ2VzO1xuICAgICAgdGhpcy5faHRtbEZvclhmYSA9IHBkZkluZm8uaHRtbEZvclhmYTtcbiAgICAgIGRlbGV0ZSBwZGZJbmZvLmh0bWxGb3JYZmE7XG5cbiAgICAgIGxvYWRpbmdUYXNrLl9jYXBhYmlsaXR5LnJlc29sdmUobmV3IFBERkRvY3VtZW50UHJveHkocGRmSW5mbywgdGhpcykpO1xuICAgIH0pO1xuICAgIG1lc3NhZ2VIYW5kbGVyLm9uKFwiRG9jRXhjZXB0aW9uXCIsIGZ1bmN0aW9uIChleCkge1xuICAgICAgbGV0IHJlYXNvbjtcblxuICAgICAgc3dpdGNoIChleC5uYW1lKSB7XG4gICAgICAgIGNhc2UgXCJQYXNzd29yZEV4Y2VwdGlvblwiOlxuICAgICAgICAgIHJlYXNvbiA9IG5ldyBfdXRpbC5QYXNzd29yZEV4Y2VwdGlvbihleC5tZXNzYWdlLCBleC5jb2RlKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiSW52YWxpZFBERkV4Y2VwdGlvblwiOlxuICAgICAgICAgIHJlYXNvbiA9IG5ldyBfdXRpbC5JbnZhbGlkUERGRXhjZXB0aW9uKGV4Lm1lc3NhZ2UpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJNaXNzaW5nUERGRXhjZXB0aW9uXCI6XG4gICAgICAgICAgcmVhc29uID0gbmV3IF91dGlsLk1pc3NpbmdQREZFeGNlcHRpb24oZXgubWVzc2FnZSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvblwiOlxuICAgICAgICAgIHJlYXNvbiA9IG5ldyBfdXRpbC5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24oZXgubWVzc2FnZSwgZXguc3RhdHVzKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiVW5rbm93bkVycm9yRXhjZXB0aW9uXCI6XG4gICAgICAgICAgcmVhc29uID0gbmV3IF91dGlsLlVua25vd25FcnJvckV4Y2VwdGlvbihleC5tZXNzYWdlLCBleC5kZXRhaWxzKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJEb2NFeGNlcHRpb24gLSBleHBlY3RlZCBhIHZhbGlkIEVycm9yLlwiKTtcbiAgICAgIH1cblxuICAgICAgbG9hZGluZ1Rhc2suX2NhcGFiaWxpdHkucmVqZWN0KHJlYXNvbik7XG4gICAgfSk7XG4gICAgbWVzc2FnZUhhbmRsZXIub24oXCJQYXNzd29yZFJlcXVlc3RcIiwgZXhjZXB0aW9uID0+IHtcbiAgICAgIHRoaXMuX3Bhc3N3b3JkQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcblxuICAgICAgaWYgKGxvYWRpbmdUYXNrLm9uUGFzc3dvcmQpIHtcbiAgICAgICAgY29uc3QgdXBkYXRlUGFzc3dvcmQgPSBwYXNzd29yZCA9PiB7XG4gICAgICAgICAgdGhpcy5fcGFzc3dvcmRDYXBhYmlsaXR5LnJlc29sdmUoe1xuICAgICAgICAgICAgcGFzc3dvcmRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGxvYWRpbmdUYXNrLm9uUGFzc3dvcmQodXBkYXRlUGFzc3dvcmQsIGV4Y2VwdGlvbi5jb2RlKTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICB0aGlzLl9wYXNzd29yZENhcGFiaWxpdHkucmVqZWN0KGV4KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fcGFzc3dvcmRDYXBhYmlsaXR5LnJlamVjdChuZXcgX3V0aWwuUGFzc3dvcmRFeGNlcHRpb24oZXhjZXB0aW9uLm1lc3NhZ2UsIGV4Y2VwdGlvbi5jb2RlKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLl9wYXNzd29yZENhcGFiaWxpdHkucHJvbWlzZTtcbiAgICB9KTtcbiAgICBtZXNzYWdlSGFuZGxlci5vbihcIkRhdGFMb2FkZWRcIiwgZGF0YSA9PiB7XG4gICAgICBsb2FkaW5nVGFzay5vblByb2dyZXNzPy4oe1xuICAgICAgICBsb2FkZWQ6IGRhdGEubGVuZ3RoLFxuICAgICAgICB0b3RhbDogZGF0YS5sZW5ndGhcbiAgICAgIH0pO1xuICAgICAgdGhpcy5kb3dubG9hZEluZm9DYXBhYmlsaXR5LnJlc29sdmUoZGF0YSk7XG4gICAgfSk7XG4gICAgbWVzc2FnZUhhbmRsZXIub24oXCJTdGFydFJlbmRlclBhZ2VcIiwgZGF0YSA9PiB7XG4gICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwYWdlID0gdGhpcy4jcGFnZUNhY2hlLmdldChkYXRhLnBhZ2VJbmRleCk7XG5cbiAgICAgIHBhZ2UuX3N0YXJ0UmVuZGVyUGFnZShkYXRhLnRyYW5zcGFyZW5jeSwgZGF0YS5jYWNoZUtleSk7XG4gICAgfSk7XG4gICAgbWVzc2FnZUhhbmRsZXIub24oXCJjb21tb25vYmpcIiwgKFtpZCwgdHlwZSwgZXhwb3J0ZWREYXRhXSkgPT4ge1xuICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuY29tbW9uT2Jqcy5oYXMoaWQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgXCJGb250XCI6XG4gICAgICAgICAgY29uc3QgcGFyYW1zID0gdGhpcy5fcGFyYW1zO1xuXG4gICAgICAgICAgaWYgKFwiZXJyb3JcIiBpbiBleHBvcnRlZERhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cG9ydGVkRXJyb3IgPSBleHBvcnRlZERhdGEuZXJyb3I7XG4gICAgICAgICAgICAoMCwgX3V0aWwud2FybikoYEVycm9yIGR1cmluZyBmb250IGxvYWRpbmc6ICR7ZXhwb3J0ZWRFcnJvcn1gKTtcbiAgICAgICAgICAgIHRoaXMuY29tbW9uT2Jqcy5yZXNvbHZlKGlkLCBleHBvcnRlZEVycm9yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCBmb250UmVnaXN0cnkgPSBudWxsO1xuXG4gICAgICAgICAgaWYgKHBhcmFtcy5wZGZCdWcgJiYgZ2xvYmFsVGhpcy5Gb250SW5zcGVjdG9yPy5lbmFibGVkKSB7XG4gICAgICAgICAgICBmb250UmVnaXN0cnkgPSB7XG4gICAgICAgICAgICAgIHJlZ2lzdGVyRm9udChmb250LCB1cmwpIHtcbiAgICAgICAgICAgICAgICBnbG9iYWxUaGlzLkZvbnRJbnNwZWN0b3IuZm9udEFkZGVkKGZvbnQsIHVybCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBmb250ID0gbmV3IF9mb250X2xvYWRlci5Gb250RmFjZU9iamVjdChleHBvcnRlZERhdGEsIHtcbiAgICAgICAgICAgIGlzRXZhbFN1cHBvcnRlZDogcGFyYW1zLmlzRXZhbFN1cHBvcnRlZCxcbiAgICAgICAgICAgIGRpc2FibGVGb250RmFjZTogcGFyYW1zLmRpc2FibGVGb250RmFjZSxcbiAgICAgICAgICAgIGlnbm9yZUVycm9yczogcGFyYW1zLmlnbm9yZUVycm9ycyxcbiAgICAgICAgICAgIG9uVW5zdXBwb3J0ZWRGZWF0dXJlOiB0aGlzLl9vblVuc3VwcG9ydGVkRmVhdHVyZS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgZm9udFJlZ2lzdHJ5XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5mb250TG9hZGVyLmJpbmQoZm9udCkuY2F0Y2gocmVhc29uID0+IHtcbiAgICAgICAgICAgIHJldHVybiBtZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJGb250RmFsbGJhY2tcIiwge1xuICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSkuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXBhcmFtcy5mb250RXh0cmFQcm9wZXJ0aWVzICYmIGZvbnQuZGF0YSkge1xuICAgICAgICAgICAgICBmb250LmRhdGEgPSBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNvbW1vbk9ianMucmVzb2x2ZShpZCwgZm9udCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIkZvbnRQYXRoXCI6XG4gICAgICAgIGNhc2UgXCJJbWFnZVwiOlxuICAgICAgICAgIHRoaXMuY29tbW9uT2Jqcy5yZXNvbHZlKGlkLCBleHBvcnRlZERhdGEpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBHb3QgdW5rbm93biBjb21tb24gb2JqZWN0IHR5cGUgJHt0eXBlfWApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIG1lc3NhZ2VIYW5kbGVyLm9uKFwib2JqXCIsIChbaWQsIHBhZ2VJbmRleCwgdHlwZSwgaW1hZ2VEYXRhXSkgPT4ge1xuICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFnZVByb3h5ID0gdGhpcy4jcGFnZUNhY2hlLmdldChwYWdlSW5kZXgpO1xuXG4gICAgICBpZiAocGFnZVByb3h5Lm9ianMuaGFzKGlkKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFwiSW1hZ2VcIjpcbiAgICAgICAgICBwYWdlUHJveHkub2Jqcy5yZXNvbHZlKGlkLCBpbWFnZURhdGEpO1xuICAgICAgICAgIGNvbnN0IE1BWF9JTUFHRV9TSVpFX1RPX1NUT1JFID0gODAwMDAwMDtcblxuICAgICAgICAgIGlmIChpbWFnZURhdGE/LmRhdGE/Lmxlbmd0aCA+IE1BWF9JTUFHRV9TSVpFX1RPX1NUT1JFKSB7XG4gICAgICAgICAgICBwYWdlUHJveHkuY2xlYW51cEFmdGVyUmVuZGVyID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiUGF0dGVyblwiOlxuICAgICAgICAgIHBhZ2VQcm94eS5vYmpzLnJlc29sdmUoaWQsIGltYWdlRGF0YSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEdvdCB1bmtub3duIG9iamVjdCB0eXBlICR7dHlwZX1gKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBtZXNzYWdlSGFuZGxlci5vbihcIkRvY1Byb2dyZXNzXCIsIGRhdGEgPT4ge1xuICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbG9hZGluZ1Rhc2sub25Qcm9ncmVzcz8uKHtcbiAgICAgICAgbG9hZGVkOiBkYXRhLmxvYWRlZCxcbiAgICAgICAgdG90YWw6IGRhdGEudG90YWxcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIG1lc3NhZ2VIYW5kbGVyLm9uKFwiRG9jU3RhdHNcIiwgZGF0YSA9PiB7XG4gICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLiNkb2NTdGF0cyA9IE9iamVjdC5mcmVlemUoe1xuICAgICAgICBzdHJlYW1UeXBlczogT2JqZWN0LmZyZWV6ZShkYXRhLnN0cmVhbVR5cGVzKSxcbiAgICAgICAgZm9udFR5cGVzOiBPYmplY3QuZnJlZXplKGRhdGEuZm9udFR5cGVzKVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgbWVzc2FnZUhhbmRsZXIub24oXCJVbnN1cHBvcnRlZEZlYXR1cmVcIiwgdGhpcy5fb25VbnN1cHBvcnRlZEZlYXR1cmUuYmluZCh0aGlzKSk7XG4gICAgbWVzc2FnZUhhbmRsZXIub24oXCJGZXRjaEJ1aWx0SW5DTWFwXCIsIGRhdGEgPT4ge1xuICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJXb3JrZXIgd2FzIGRlc3Ryb3llZC5cIikpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuQ01hcFJlYWRlckZhY3RvcnkpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkNNYXBSZWFkZXJGYWN0b3J5IG5vdCBpbml0aWFsaXplZCwgc2VlIHRoZSBgdXNlV29ya2VyRmV0Y2hgIHBhcmFtZXRlci5cIikpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5DTWFwUmVhZGVyRmFjdG9yeS5mZXRjaChkYXRhKTtcbiAgICB9KTtcbiAgICBtZXNzYWdlSGFuZGxlci5vbihcIkZldGNoU3RhbmRhcmRGb250RGF0YVwiLCBkYXRhID0+IHtcbiAgICAgIGlmICh0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiV29ya2VyIHdhcyBkZXN0cm95ZWQuXCIpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLlN0YW5kYXJkRm9udERhdGFGYWN0b3J5KSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSBub3QgaW5pdGlhbGl6ZWQsIHNlZSB0aGUgYHVzZVdvcmtlckZldGNoYCBwYXJhbWV0ZXIuXCIpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuU3RhbmRhcmRGb250RGF0YUZhY3RvcnkuZmV0Y2goZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICBfb25VbnN1cHBvcnRlZEZlYXR1cmUoe1xuICAgIGZlYXR1cmVJZFxuICB9KSB7XG4gICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2FkaW5nVGFzay5vblVuc3VwcG9ydGVkRmVhdHVyZT8uKGZlYXR1cmVJZCk7XG4gIH1cblxuICBnZXREYXRhKCkge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldERhdGFcIiwgbnVsbCk7XG4gIH1cblxuICBnZXRQYWdlKHBhZ2VOdW1iZXIpIHtcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIocGFnZU51bWJlcikgfHwgcGFnZU51bWJlciA8PSAwIHx8IHBhZ2VOdW1iZXIgPiB0aGlzLl9udW1QYWdlcykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkludmFsaWQgcGFnZSByZXF1ZXN0XCIpKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYWdlSW5kZXggPSBwYWdlTnVtYmVyIC0gMSxcbiAgICAgICAgICBjYWNoZWRQcm9taXNlID0gdGhpcy4jcGFnZVByb21pc2VzLmdldChwYWdlSW5kZXgpO1xuXG4gICAgaWYgKGNhY2hlZFByb21pc2UpIHtcbiAgICAgIHJldHVybiBjYWNoZWRQcm9taXNlO1xuICAgIH1cblxuICAgIGNvbnN0IHByb21pc2UgPSB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldFBhZ2VcIiwge1xuICAgICAgcGFnZUluZGV4XG4gICAgfSkudGhlbihwYWdlSW5mbyA9PiB7XG4gICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVHJhbnNwb3J0IGRlc3Ryb3llZFwiKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFnZSA9IG5ldyBQREZQYWdlUHJveHkocGFnZUluZGV4LCBwYWdlSW5mbywgdGhpcywgdGhpcy5fcGFyYW1zLm93bmVyRG9jdW1lbnQsIHRoaXMuX3BhcmFtcy5wZGZCdWcpO1xuICAgICAgdGhpcy4jcGFnZUNhY2hlLnNldChwYWdlSW5kZXgsIHBhZ2UpO1xuICAgICAgcmV0dXJuIHBhZ2U7XG4gICAgfSk7XG4gICAgdGhpcy4jcGFnZVByb21pc2VzLnNldChwYWdlSW5kZXgsIHByb21pc2UpO1xuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cbiAgZ2V0UGFnZUluZGV4KHJlZikge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldFBhZ2VJbmRleFwiLCB7XG4gICAgICByZWZcbiAgICB9KTtcbiAgfVxuXG4gIGdldEFubm90YXRpb25zKHBhZ2VJbmRleCwgaW50ZW50KSB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiR2V0QW5ub3RhdGlvbnNcIiwge1xuICAgICAgcGFnZUluZGV4LFxuICAgICAgaW50ZW50XG4gICAgfSk7XG4gIH1cblxuICBzYXZlRG9jdW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiU2F2ZURvY3VtZW50XCIsIHtcbiAgICAgIGlzUHVyZVhmYTogISF0aGlzLl9odG1sRm9yWGZhLFxuICAgICAgbnVtUGFnZXM6IHRoaXMuX251bVBhZ2VzLFxuICAgICAgYW5ub3RhdGlvblN0b3JhZ2U6IHRoaXMuYW5ub3RhdGlvblN0b3JhZ2Uuc2VyaWFsaXphYmxlLFxuICAgICAgZmlsZW5hbWU6IHRoaXMuX2Z1bGxSZWFkZXI/LmZpbGVuYW1lID8/IG51bGxcbiAgICB9KS5maW5hbGx5KCgpID0+IHtcbiAgICAgIHRoaXMuYW5ub3RhdGlvblN0b3JhZ2UucmVzZXRNb2RpZmllZCgpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0RmllbGRPYmplY3RzKCkge1xuICAgIHJldHVybiB0aGlzLl9nZXRGaWVsZE9iamVjdHNQcm9taXNlIHx8PSB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldEZpZWxkT2JqZWN0c1wiLCBudWxsKTtcbiAgfVxuXG4gIGhhc0pTQWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5faGFzSlNBY3Rpb25zUHJvbWlzZSB8fD0gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJIYXNKU0FjdGlvbnNcIiwgbnVsbCk7XG4gIH1cblxuICBnZXRDYWxjdWxhdGlvbk9yZGVySWRzKCkge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldENhbGN1bGF0aW9uT3JkZXJJZHNcIiwgbnVsbCk7XG4gIH1cblxuICBnZXREZXN0aW5hdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiR2V0RGVzdGluYXRpb25zXCIsIG51bGwpO1xuICB9XG5cbiAgZ2V0RGVzdGluYXRpb24oaWQpIHtcbiAgICBpZiAodHlwZW9mIGlkICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiSW52YWxpZCBkZXN0aW5hdGlvbiByZXF1ZXN0LlwiKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiR2V0RGVzdGluYXRpb25cIiwge1xuICAgICAgaWRcbiAgICB9KTtcbiAgfVxuXG4gIGdldFBhZ2VMYWJlbHMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiR2V0UGFnZUxhYmVsc1wiLCBudWxsKTtcbiAgfVxuXG4gIGdldFBhZ2VMYXlvdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiR2V0UGFnZUxheW91dFwiLCBudWxsKTtcbiAgfVxuXG4gIGdldFBhZ2VNb2RlKCkge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldFBhZ2VNb2RlXCIsIG51bGwpO1xuICB9XG5cbiAgZ2V0Vmlld2VyUHJlZmVyZW5jZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiR2V0Vmlld2VyUHJlZmVyZW5jZXNcIiwgbnVsbCk7XG4gIH1cblxuICBnZXRPcGVuQWN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldE9wZW5BY3Rpb25cIiwgbnVsbCk7XG4gIH1cblxuICBnZXRBdHRhY2htZW50cygpIHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJHZXRBdHRhY2htZW50c1wiLCBudWxsKTtcbiAgfVxuXG4gIGdldEphdmFTY3JpcHQoKSB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiR2V0SmF2YVNjcmlwdFwiLCBudWxsKTtcbiAgfVxuXG4gIGdldERvY0pTQWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJHZXREb2NKU0FjdGlvbnNcIiwgbnVsbCk7XG4gIH1cblxuICBnZXRQYWdlSlNBY3Rpb25zKHBhZ2VJbmRleCkge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldFBhZ2VKU0FjdGlvbnNcIiwge1xuICAgICAgcGFnZUluZGV4XG4gICAgfSk7XG4gIH1cblxuICBnZXRTdHJ1Y3RUcmVlKHBhZ2VJbmRleCkge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldFN0cnVjdFRyZWVcIiwge1xuICAgICAgcGFnZUluZGV4XG4gICAgfSk7XG4gIH1cblxuICBnZXRPdXRsaW5lKCkge1xuICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldE91dGxpbmVcIiwgbnVsbCk7XG4gIH1cblxuICBnZXRPcHRpb25hbENvbnRlbnRDb25maWcoKSB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiR2V0T3B0aW9uYWxDb250ZW50Q29uZmlnXCIsIG51bGwpLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICByZXR1cm4gbmV3IF9vcHRpb25hbF9jb250ZW50X2NvbmZpZy5PcHRpb25hbENvbnRlbnRDb25maWcocmVzdWx0cyk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRQZXJtaXNzaW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJHZXRQZXJtaXNzaW9uc1wiLCBudWxsKTtcbiAgfVxuXG4gIGdldE1ldGFkYXRhKCkge1xuICAgIHJldHVybiB0aGlzLiNtZXRhZGF0YVByb21pc2UgfHw9IHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiR2V0TWV0YWRhdGFcIiwgbnVsbCkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGluZm86IHJlc3VsdHNbMF0sXG4gICAgICAgIG1ldGFkYXRhOiByZXN1bHRzWzFdID8gbmV3IF9tZXRhZGF0YS5NZXRhZGF0YShyZXN1bHRzWzFdKSA6IG51bGwsXG4gICAgICAgIGNvbnRlbnREaXNwb3NpdGlvbkZpbGVuYW1lOiB0aGlzLl9mdWxsUmVhZGVyPy5maWxlbmFtZSA/PyBudWxsLFxuICAgICAgICBjb250ZW50TGVuZ3RoOiB0aGlzLl9mdWxsUmVhZGVyPy5jb250ZW50TGVuZ3RoID8/IG51bGxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBnZXRNYXJrSW5mbygpIHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJHZXRNYXJrSW5mb1wiLCBudWxsKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0Q2xlYW51cChrZWVwTG9hZGVkRm9udHMgPSBmYWxzZSkge1xuICAgIGF3YWl0IHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiQ2xlYW51cFwiLCBudWxsKTtcblxuICAgIGlmICh0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcGFnZSBvZiB0aGlzLiNwYWdlQ2FjaGUudmFsdWVzKCkpIHtcbiAgICAgIGNvbnN0IGNsZWFudXBTdWNjZXNzZnVsID0gcGFnZS5jbGVhbnVwKCk7XG5cbiAgICAgIGlmICghY2xlYW51cFN1Y2Nlc3NmdWwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBzdGFydENsZWFudXA6IFBhZ2UgJHtwYWdlLnBhZ2VOdW1iZXJ9IGlzIGN1cnJlbnRseSByZW5kZXJpbmcuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jb21tb25PYmpzLmNsZWFyKCk7XG5cbiAgICBpZiAoIWtlZXBMb2FkZWRGb250cykge1xuICAgICAgdGhpcy5mb250TG9hZGVyLmNsZWFyKCk7XG4gICAgfVxuXG4gICAgdGhpcy4jbWV0YWRhdGFQcm9taXNlID0gbnVsbDtcbiAgICB0aGlzLl9nZXRGaWVsZE9iamVjdHNQcm9taXNlID0gbnVsbDtcbiAgICB0aGlzLl9oYXNKU0FjdGlvbnNQcm9taXNlID0gbnVsbDtcbiAgfVxuXG4gIGdldCBsb2FkaW5nUGFyYW1zKCkge1xuICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuX3BhcmFtcztcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJsb2FkaW5nUGFyYW1zXCIsIHtcbiAgICAgIGRpc2FibGVBdXRvRmV0Y2g6IHBhcmFtcy5kaXNhYmxlQXV0b0ZldGNoLFxuICAgICAgZW5hYmxlWGZhOiBwYXJhbXMuZW5hYmxlWGZhXG4gICAgfSk7XG4gIH1cblxufVxuXG5jbGFzcyBQREZPYmplY3RzIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fb2JqcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIH1cblxuICBfZW5zdXJlT2JqKG9iaklkKSB7XG4gICAgaWYgKHRoaXMuX29ianNbb2JqSWRdKSB7XG4gICAgICByZXR1cm4gdGhpcy5fb2Jqc1tvYmpJZF07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX29ianNbb2JqSWRdID0ge1xuICAgICAgY2FwYWJpbGl0eTogKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLFxuICAgICAgZGF0YTogbnVsbCxcbiAgICAgIHJlc29sdmVkOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBnZXQob2JqSWQsIGNhbGxiYWNrID0gbnVsbCkge1xuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgdGhpcy5fZW5zdXJlT2JqKG9iaklkKS5jYXBhYmlsaXR5LnByb21pc2UudGhlbihjYWxsYmFjayk7XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG9iaiA9IHRoaXMuX29ianNbb2JqSWRdO1xuXG4gICAgaWYgKCFvYmogfHwgIW9iai5yZXNvbHZlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZXF1ZXN0aW5nIG9iamVjdCB0aGF0IGlzbid0IHJlc29sdmVkIHlldCAke29iaklkfS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2JqLmRhdGE7XG4gIH1cblxuICBoYXMob2JqSWQpIHtcbiAgICBjb25zdCBvYmogPSB0aGlzLl9vYmpzW29iaklkXTtcbiAgICByZXR1cm4gb2JqPy5yZXNvbHZlZCB8fCBmYWxzZTtcbiAgfVxuXG4gIHJlc29sdmUob2JqSWQsIGRhdGEpIHtcbiAgICBjb25zdCBvYmogPSB0aGlzLl9lbnN1cmVPYmoob2JqSWQpO1xuXG4gICAgb2JqLnJlc29sdmVkID0gdHJ1ZTtcbiAgICBvYmouZGF0YSA9IGRhdGE7XG4gICAgb2JqLmNhcGFiaWxpdHkucmVzb2x2ZShkYXRhKTtcbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIHRoaXMuX29ianMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB9XG5cbn1cblxuY2xhc3MgUmVuZGVyVGFzayB7XG4gIGNvbnN0cnVjdG9yKGludGVybmFsUmVuZGVyVGFzaykge1xuICAgIHRoaXMuX2ludGVybmFsUmVuZGVyVGFzayA9IGludGVybmFsUmVuZGVyVGFzaztcbiAgICB0aGlzLm9uQ29udGludWUgPSBudWxsO1xuICB9XG5cbiAgZ2V0IHByb21pc2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ludGVybmFsUmVuZGVyVGFzay5jYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cblxuICBjYW5jZWwoKSB7XG4gICAgdGhpcy5faW50ZXJuYWxSZW5kZXJUYXNrLmNhbmNlbCgpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5SZW5kZXJUYXNrID0gUmVuZGVyVGFzaztcblxuY2xhc3MgSW50ZXJuYWxSZW5kZXJUYXNrIHtcbiAgc3RhdGljIGdldCBjYW52YXNJblVzZSgpIHtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJjYW52YXNJblVzZVwiLCBuZXcgV2Vha1NldCgpKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBjYWxsYmFjayxcbiAgICBwYXJhbXMsXG4gICAgb2JqcyxcbiAgICBjb21tb25PYmpzLFxuICAgIGFubm90YXRpb25DYW52YXNNYXAsXG4gICAgb3BlcmF0b3JMaXN0LFxuICAgIHBhZ2VJbmRleCxcbiAgICBjYW52YXNGYWN0b3J5LFxuICAgIHVzZVJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZhbHNlLFxuICAgIHBkZkJ1ZyA9IGZhbHNlXG4gIH0pIHtcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7XG4gICAgdGhpcy5vYmpzID0gb2JqcztcbiAgICB0aGlzLmNvbW1vbk9ianMgPSBjb21tb25PYmpzO1xuICAgIHRoaXMuYW5ub3RhdGlvbkNhbnZhc01hcCA9IGFubm90YXRpb25DYW52YXNNYXA7XG4gICAgdGhpcy5vcGVyYXRvckxpc3RJZHggPSBudWxsO1xuICAgIHRoaXMub3BlcmF0b3JMaXN0ID0gb3BlcmF0b3JMaXN0O1xuICAgIHRoaXMuX3BhZ2VJbmRleCA9IHBhZ2VJbmRleDtcbiAgICB0aGlzLmNhbnZhc0ZhY3RvcnkgPSBjYW52YXNGYWN0b3J5O1xuICAgIHRoaXMuX3BkZkJ1ZyA9IHBkZkJ1ZztcbiAgICB0aGlzLnJ1bm5pbmcgPSBmYWxzZTtcbiAgICB0aGlzLmdyYXBoaWNzUmVhZHlDYWxsYmFjayA9IG51bGw7XG4gICAgdGhpcy5ncmFwaGljc1JlYWR5ID0gZmFsc2U7XG4gICAgdGhpcy5fdXNlUmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gdXNlUmVxdWVzdEFuaW1hdGlvbkZyYW1lID09PSB0cnVlICYmIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCI7XG4gICAgdGhpcy5jYW5jZWxsZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgdGhpcy50YXNrID0gbmV3IFJlbmRlclRhc2sodGhpcyk7XG4gICAgdGhpcy5fY2FuY2VsQm91bmQgPSB0aGlzLmNhbmNlbC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2NvbnRpbnVlQm91bmQgPSB0aGlzLl9jb250aW51ZS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX3NjaGVkdWxlTmV4dEJvdW5kID0gdGhpcy5fc2NoZWR1bGVOZXh0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5fbmV4dEJvdW5kID0gdGhpcy5fbmV4dC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX2NhbnZhcyA9IHBhcmFtcy5jYW52YXNDb250ZXh0LmNhbnZhcztcbiAgfVxuXG4gIGdldCBjb21wbGV0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2FwYWJpbGl0eS5wcm9taXNlLmNhdGNoKGZ1bmN0aW9uICgpIHt9KTtcbiAgfVxuXG4gIGluaXRpYWxpemVHcmFwaGljcyh7XG4gICAgdHJhbnNwYXJlbmN5ID0gZmFsc2UsXG4gICAgb3B0aW9uYWxDb250ZW50Q29uZmlnXG4gIH0pIHtcbiAgICBpZiAodGhpcy5jYW5jZWxsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY2FudmFzKSB7XG4gICAgICBpZiAoSW50ZXJuYWxSZW5kZXJUYXNrLmNhbnZhc0luVXNlLmhhcyh0aGlzLl9jYW52YXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCB1c2UgdGhlIHNhbWUgY2FudmFzIGR1cmluZyBtdWx0aXBsZSByZW5kZXIoKSBvcGVyYXRpb25zLiBcIiArIFwiVXNlIGRpZmZlcmVudCBjYW52YXMgb3IgZW5zdXJlIHByZXZpb3VzIG9wZXJhdGlvbnMgd2VyZSBcIiArIFwiY2FuY2VsbGVkIG9yIGNvbXBsZXRlZC5cIik7XG4gICAgICB9XG5cbiAgICAgIEludGVybmFsUmVuZGVyVGFzay5jYW52YXNJblVzZS5hZGQodGhpcy5fY2FudmFzKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcGRmQnVnICYmIGdsb2JhbFRoaXMuU3RlcHBlck1hbmFnZXI/LmVuYWJsZWQpIHtcbiAgICAgIHRoaXMuc3RlcHBlciA9IGdsb2JhbFRoaXMuU3RlcHBlck1hbmFnZXIuY3JlYXRlKHRoaXMuX3BhZ2VJbmRleCk7XG4gICAgICB0aGlzLnN0ZXBwZXIuaW5pdCh0aGlzLm9wZXJhdG9yTGlzdCk7XG4gICAgICB0aGlzLnN0ZXBwZXIubmV4dEJyZWFrUG9pbnQgPSB0aGlzLnN0ZXBwZXIuZ2V0TmV4dEJyZWFrUG9pbnQoKTtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBjYW52YXNDb250ZXh0LFxuICAgICAgdmlld3BvcnQsXG4gICAgICB0cmFuc2Zvcm0sXG4gICAgICBpbWFnZUxheWVyLFxuICAgICAgYmFja2dyb3VuZFxuICAgIH0gPSB0aGlzLnBhcmFtcztcbiAgICB0aGlzLmdmeCA9IG5ldyBfY2FudmFzLkNhbnZhc0dyYXBoaWNzKGNhbnZhc0NvbnRleHQsIHRoaXMuY29tbW9uT2JqcywgdGhpcy5vYmpzLCB0aGlzLmNhbnZhc0ZhY3RvcnksIGltYWdlTGF5ZXIsIG9wdGlvbmFsQ29udGVudENvbmZpZywgdGhpcy5hbm5vdGF0aW9uQ2FudmFzTWFwKTtcbiAgICB0aGlzLmdmeC5iZWdpbkRyYXdpbmcoe1xuICAgICAgdHJhbnNmb3JtLFxuICAgICAgdmlld3BvcnQsXG4gICAgICB0cmFuc3BhcmVuY3ksXG4gICAgICBiYWNrZ3JvdW5kXG4gICAgfSk7XG4gICAgdGhpcy5vcGVyYXRvckxpc3RJZHggPSAwO1xuICAgIHRoaXMuZ3JhcGhpY3NSZWFkeSA9IHRydWU7XG5cbiAgICBpZiAodGhpcy5ncmFwaGljc1JlYWR5Q2FsbGJhY2spIHtcbiAgICAgIHRoaXMuZ3JhcGhpY3NSZWFkeUNhbGxiYWNrKCk7XG4gICAgfVxuICB9XG5cbiAgY2FuY2VsKGVycm9yID0gbnVsbCkge1xuICAgIHRoaXMucnVubmluZyA9IGZhbHNlO1xuICAgIHRoaXMuY2FuY2VsbGVkID0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLmdmeCkge1xuICAgICAgdGhpcy5nZnguZW5kRHJhd2luZygpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jYW52YXMpIHtcbiAgICAgIEludGVybmFsUmVuZGVyVGFzay5jYW52YXNJblVzZS5kZWxldGUodGhpcy5fY2FudmFzKTtcbiAgICB9XG5cbiAgICB0aGlzLmNhbGxiYWNrKGVycm9yIHx8IG5ldyBfZGlzcGxheV91dGlscy5SZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24oYFJlbmRlcmluZyBjYW5jZWxsZWQsIHBhZ2UgJHt0aGlzLl9wYWdlSW5kZXggKyAxfWAsIFwiY2FudmFzXCIpKTtcbiAgfVxuXG4gIG9wZXJhdG9yTGlzdENoYW5nZWQoKSB7XG4gICAgaWYgKCF0aGlzLmdyYXBoaWNzUmVhZHkpIHtcbiAgICAgIGlmICghdGhpcy5ncmFwaGljc1JlYWR5Q2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5ncmFwaGljc1JlYWR5Q2FsbGJhY2sgPSB0aGlzLl9jb250aW51ZUJvdW5kO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RlcHBlcikge1xuICAgICAgdGhpcy5zdGVwcGVyLnVwZGF0ZU9wZXJhdG9yTGlzdCh0aGlzLm9wZXJhdG9yTGlzdCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucnVubmluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2NvbnRpbnVlKCk7XG4gIH1cblxuICBfY29udGludWUoKSB7XG4gICAgdGhpcy5ydW5uaW5nID0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLmNhbmNlbGxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRhc2sub25Db250aW51ZSkge1xuICAgICAgdGhpcy50YXNrLm9uQ29udGludWUodGhpcy5fc2NoZWR1bGVOZXh0Qm91bmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zY2hlZHVsZU5leHQoKTtcbiAgICB9XG4gIH1cblxuICBfc2NoZWR1bGVOZXh0KCkge1xuICAgIGlmICh0aGlzLl91c2VSZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICB0aGlzLl9uZXh0Qm91bmQoKS5jYXRjaCh0aGlzLl9jYW5jZWxCb3VuZCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbih0aGlzLl9uZXh0Qm91bmQpLmNhdGNoKHRoaXMuX2NhbmNlbEJvdW5kKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBfbmV4dCgpIHtcbiAgICBpZiAodGhpcy5jYW5jZWxsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm9wZXJhdG9yTGlzdElkeCA9IHRoaXMuZ2Z4LmV4ZWN1dGVPcGVyYXRvckxpc3QodGhpcy5vcGVyYXRvckxpc3QsIHRoaXMub3BlcmF0b3JMaXN0SWR4LCB0aGlzLl9jb250aW51ZUJvdW5kLCB0aGlzLnN0ZXBwZXIpO1xuXG4gICAgaWYgKHRoaXMub3BlcmF0b3JMaXN0SWR4ID09PSB0aGlzLm9wZXJhdG9yTGlzdC5hcmdzQXJyYXkubGVuZ3RoKSB7XG4gICAgICB0aGlzLnJ1bm5pbmcgPSBmYWxzZTtcblxuICAgICAgaWYgKHRoaXMub3BlcmF0b3JMaXN0Lmxhc3RDaHVuaykge1xuICAgICAgICB0aGlzLmdmeC5lbmREcmF3aW5nKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX2NhbnZhcykge1xuICAgICAgICAgIEludGVybmFsUmVuZGVyVGFzay5jYW52YXNJblVzZS5kZWxldGUodGhpcy5fY2FudmFzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2FsbGJhY2soKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxufVxuXG5jb25zdCB2ZXJzaW9uID0gJzIuMTIuMzEzJztcbmV4cG9ydHMudmVyc2lvbiA9IHZlcnNpb247XG5jb25zdCBidWlsZCA9ICdhMmFlNTZmMzknO1xuZXhwb3J0cy5idWlsZCA9IGJ1aWxkO1xuXG4vKioqLyB9KSxcbi8qIDcgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuRm9udExvYWRlciA9IGV4cG9ydHMuRm9udEZhY2VPYmplY3QgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbmNsYXNzIEJhc2VGb250TG9hZGVyIHtcbiAgY29uc3RydWN0b3Ioe1xuICAgIGRvY0lkLFxuICAgIG9uVW5zdXBwb3J0ZWRGZWF0dXJlLFxuICAgIG93bmVyRG9jdW1lbnQgPSBnbG9iYWxUaGlzLmRvY3VtZW50LFxuICAgIHN0eWxlRWxlbWVudCA9IG51bGxcbiAgfSkge1xuICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBCYXNlRm9udExvYWRlcikge1xuICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIkNhbm5vdCBpbml0aWFsaXplIEJhc2VGb250TG9hZGVyLlwiKTtcbiAgICB9XG5cbiAgICB0aGlzLmRvY0lkID0gZG9jSWQ7XG4gICAgdGhpcy5fb25VbnN1cHBvcnRlZEZlYXR1cmUgPSBvblVuc3VwcG9ydGVkRmVhdHVyZTtcbiAgICB0aGlzLl9kb2N1bWVudCA9IG93bmVyRG9jdW1lbnQ7XG4gICAgdGhpcy5uYXRpdmVGb250RmFjZXMgPSBbXTtcbiAgICB0aGlzLnN0eWxlRWxlbWVudCA9IG51bGw7XG4gIH1cblxuICBhZGROYXRpdmVGb250RmFjZShuYXRpdmVGb250RmFjZSkge1xuICAgIHRoaXMubmF0aXZlRm9udEZhY2VzLnB1c2gobmF0aXZlRm9udEZhY2UpO1xuXG4gICAgdGhpcy5fZG9jdW1lbnQuZm9udHMuYWRkKG5hdGl2ZUZvbnRGYWNlKTtcbiAgfVxuXG4gIGluc2VydFJ1bGUocnVsZSkge1xuICAgIGxldCBzdHlsZUVsZW1lbnQgPSB0aGlzLnN0eWxlRWxlbWVudDtcblxuICAgIGlmICghc3R5bGVFbGVtZW50KSB7XG4gICAgICBzdHlsZUVsZW1lbnQgPSB0aGlzLnN0eWxlRWxlbWVudCA9IHRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgICAgIHN0eWxlRWxlbWVudC5pZCA9IGBQREZKU19GT05UX1NUWUxFX1RBR18ke3RoaXMuZG9jSWR9YDtcblxuICAgICAgdGhpcy5fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXS5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0eWxlU2hlZXQgPSBzdHlsZUVsZW1lbnQuc2hlZXQ7XG4gICAgc3R5bGVTaGVldC5pbnNlcnRSdWxlKHJ1bGUsIHN0eWxlU2hlZXQuY3NzUnVsZXMubGVuZ3RoKTtcbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIGZvciAoY29uc3QgbmF0aXZlRm9udEZhY2Ugb2YgdGhpcy5uYXRpdmVGb250RmFjZXMpIHtcbiAgICAgIHRoaXMuX2RvY3VtZW50LmZvbnRzLmRlbGV0ZShuYXRpdmVGb250RmFjZSk7XG4gICAgfVxuXG4gICAgdGhpcy5uYXRpdmVGb250RmFjZXMubGVuZ3RoID0gMDtcblxuICAgIGlmICh0aGlzLnN0eWxlRWxlbWVudCkge1xuICAgICAgdGhpcy5zdHlsZUVsZW1lbnQucmVtb3ZlKCk7XG4gICAgICB0aGlzLnN0eWxlRWxlbWVudCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYmluZChmb250KSB7XG4gICAgaWYgKGZvbnQuYXR0YWNoZWQgfHwgZm9udC5taXNzaW5nRmlsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvbnQuYXR0YWNoZWQgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuaXNGb250TG9hZGluZ0FQSVN1cHBvcnRlZCkge1xuICAgICAgY29uc3QgbmF0aXZlRm9udEZhY2UgPSBmb250LmNyZWF0ZU5hdGl2ZUZvbnRGYWNlKCk7XG5cbiAgICAgIGlmIChuYXRpdmVGb250RmFjZSkge1xuICAgICAgICB0aGlzLmFkZE5hdGl2ZUZvbnRGYWNlKG5hdGl2ZUZvbnRGYWNlKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IG5hdGl2ZUZvbnRGYWNlLmxvYWRlZDtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICB0aGlzLl9vblVuc3VwcG9ydGVkRmVhdHVyZSh7XG4gICAgICAgICAgICBmZWF0dXJlSWQ6IF91dGlsLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yRm9udExvYWROYXRpdmVcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgRmFpbGVkIHRvIGxvYWQgZm9udCAnJHtuYXRpdmVGb250RmFjZS5mYW1pbHl9JzogJyR7ZXh9Jy5gKTtcbiAgICAgICAgICBmb250LmRpc2FibGVGb250RmFjZSA9IHRydWU7XG4gICAgICAgICAgdGhyb3cgZXg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJ1bGUgPSBmb250LmNyZWF0ZUZvbnRGYWNlUnVsZSgpO1xuXG4gICAgaWYgKHJ1bGUpIHtcbiAgICAgIHRoaXMuaW5zZXJ0UnVsZShydWxlKTtcblxuICAgICAgaWYgKHRoaXMuaXNTeW5jRm9udExvYWRpbmdTdXBwb3J0ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuX3F1ZXVlTG9hZGluZ0NhbGxiYWNrKHJlc29sdmUpO1xuXG4gICAgICAgIHRoaXMuX3ByZXBhcmVGb250TG9hZEV2ZW50KFtydWxlXSwgW2ZvbnRdLCByZXF1ZXN0KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIF9xdWV1ZUxvYWRpbmdDYWxsYmFjayhjYWxsYmFjaykge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJBYnN0cmFjdCBtZXRob2QgYF9xdWV1ZUxvYWRpbmdDYWxsYmFja2AuXCIpO1xuICB9XG5cbiAgZ2V0IGlzRm9udExvYWRpbmdBUElTdXBwb3J0ZWQoKSB7XG4gICAgY29uc3QgaGFzRm9udHMgPSAhIXRoaXMuX2RvY3VtZW50Py5mb250cztcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJpc0ZvbnRMb2FkaW5nQVBJU3VwcG9ydGVkXCIsIGhhc0ZvbnRzKTtcbiAgfVxuXG4gIGdldCBpc1N5bmNGb250TG9hZGluZ1N1cHBvcnRlZCgpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQWJzdHJhY3QgbWV0aG9kIGBpc1N5bmNGb250TG9hZGluZ1N1cHBvcnRlZGAuXCIpO1xuICB9XG5cbiAgZ2V0IF9sb2FkVGVzdEZvbnQoKSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIkFic3RyYWN0IG1ldGhvZCBgX2xvYWRUZXN0Rm9udGAuXCIpO1xuICB9XG5cbiAgX3ByZXBhcmVGb250TG9hZEV2ZW50KHJ1bGVzLCBmb250c1RvTG9hZCwgcmVxdWVzdCkge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJBYnN0cmFjdCBtZXRob2QgYF9wcmVwYXJlRm9udExvYWRFdmVudGAuXCIpO1xuICB9XG5cbn1cblxubGV0IEZvbnRMb2FkZXI7XG5leHBvcnRzLkZvbnRMb2FkZXIgPSBGb250TG9hZGVyO1xue1xuICBleHBvcnRzLkZvbnRMb2FkZXIgPSBGb250TG9hZGVyID0gY2xhc3MgR2VuZXJpY0ZvbnRMb2FkZXIgZXh0ZW5kcyBCYXNlRm9udExvYWRlciB7XG4gICAgY29uc3RydWN0b3IocGFyYW1zKSB7XG4gICAgICBzdXBlcihwYXJhbXMpO1xuICAgICAgdGhpcy5sb2FkaW5nQ29udGV4dCA9IHtcbiAgICAgICAgcmVxdWVzdHM6IFtdLFxuICAgICAgICBuZXh0UmVxdWVzdElkOiAwXG4gICAgICB9O1xuICAgICAgdGhpcy5sb2FkVGVzdEZvbnRJZCA9IDA7XG4gICAgfVxuXG4gICAgZ2V0IGlzU3luY0ZvbnRMb2FkaW5nU3VwcG9ydGVkKCkge1xuICAgICAgbGV0IHN1cHBvcnRlZCA9IGZhbHNlO1xuXG4gICAgICBpZiAodHlwZW9mIG5hdmlnYXRvciA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBzdXBwb3J0ZWQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbSA9IC9Nb3ppbGxhXFwvNS4wLio/cnY6KFxcZCspLio/IEdlY2tvLy5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQpO1xuXG4gICAgICAgIGlmIChtPy5bMV0gPj0gMTQpIHtcbiAgICAgICAgICBzdXBwb3J0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImlzU3luY0ZvbnRMb2FkaW5nU3VwcG9ydGVkXCIsIHN1cHBvcnRlZCk7XG4gICAgfVxuXG4gICAgX3F1ZXVlTG9hZGluZ0NhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgICBmdW5jdGlvbiBjb21wbGV0ZVJlcXVlc3QoKSB7XG4gICAgICAgICgwLCBfdXRpbC5hc3NlcnQpKCFyZXF1ZXN0LmRvbmUsIFwiY29tcGxldGVSZXF1ZXN0KCkgY2Fubm90IGJlIGNhbGxlZCB0d2ljZS5cIik7XG4gICAgICAgIHJlcXVlc3QuZG9uZSA9IHRydWU7XG5cbiAgICAgICAgd2hpbGUgKGNvbnRleHQucmVxdWVzdHMubGVuZ3RoID4gMCAmJiBjb250ZXh0LnJlcXVlc3RzWzBdLmRvbmUpIHtcbiAgICAgICAgICBjb25zdCBvdGhlclJlcXVlc3QgPSBjb250ZXh0LnJlcXVlc3RzLnNoaWZ0KCk7XG4gICAgICAgICAgc2V0VGltZW91dChvdGhlclJlcXVlc3QuY2FsbGJhY2ssIDApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmxvYWRpbmdDb250ZXh0O1xuICAgICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgICAgaWQ6IGBwZGZqcy1mb250LWxvYWRpbmctJHtjb250ZXh0Lm5leHRSZXF1ZXN0SWQrK31gLFxuICAgICAgICBkb25lOiBmYWxzZSxcbiAgICAgICAgY29tcGxldGU6IGNvbXBsZXRlUmVxdWVzdCxcbiAgICAgICAgY2FsbGJhY2tcbiAgICAgIH07XG4gICAgICBjb250ZXh0LnJlcXVlc3RzLnB1c2gocmVxdWVzdCk7XG4gICAgICByZXR1cm4gcmVxdWVzdDtcbiAgICB9XG5cbiAgICBnZXQgX2xvYWRUZXN0Rm9udCgpIHtcbiAgICAgIGNvbnN0IGdldExvYWRUZXN0Rm9udCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGF0b2IoXCJUMVJVVHdBTEFJQUFBd0F3UTBaR0lESHRaZzRBQUFPWUFBQUFnVVpHVkUxbGt6WndBQUFFSEFBQUFCeEhSRVZHQUJRQVwiICsgXCJGUUFBQkRnQUFBQWVUMU12TWxZTll3a0FBQUVnQUFBQVlHTnRZWEFCRFFMVUFBQUNOQUFBQVVKb1pXRmsveFZGRFFBQVwiICsgXCJBTHdBQUFBMmFHaGxZUWRrQStvQUFBRDBBQUFBSkdodGRIZ0Q2QUFBQUFBRVdBQUFBQVp0WVhod0FBSlFBQUFBQVJnQVwiICsgXCJBQUFHYm1GdFpWam1kSDRBQUFHQUFBQUFzWEJ2YzNUL2hnQXpBQUFEZUFBQUFDQUFBUUFBQUFFQUFMWlJGc1JmRHp6MVwiICsgXCJBQXNENkFBQUFBRE9CT1RMQUFBQUFNNEtIRHdBQUFBQUErZ0RJUUFBQUFnQUFnQUFBQUFBQUFBQkFBQURJUUFBQUZvRFwiICsgXCI2QUFBQUFBRDZBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFVQUFBQWdBQUFBUUQ2QUgwQUFVQUFBS0tBcndBQUFDTVwiICsgXCJBb29DdkFBQUFlQUFNUUVDQUFBQ0FBWUpBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUZCbVJXUUF3QUF1QUM0RFwiICsgXCJJUDg0QUZvRElRQUFBQUFBQVFBQUFBQUFBQUFBQUNBQUlBQUJBQUFBRGdDdUFBRUFBQUFBQUFBQUFRQUFBQUVBQUFBQVwiICsgXCJBQUVBQVFBQUFBRUFBQUFBQUFJQUFRQUFBQUVBQUFBQUFBTUFBUUFBQUFFQUFBQUFBQVFBQVFBQUFBRUFBQUFBQUFVQVwiICsgXCJBUUFBQUFFQUFBQUFBQVlBQVFBQUFBTUFBUVFKQUFBQUFnQUJBQU1BQVFRSkFBRUFBZ0FCQUFNQUFRUUpBQUlBQWdBQlwiICsgXCJBQU1BQVFRSkFBTUFBZ0FCQUFNQUFRUUpBQVFBQWdBQkFBTUFBUVFKQUFVQUFnQUJBQU1BQVFRSkFBWUFBZ0FCV0FCWVwiICsgXCJBQUFBQUFBQUF3QUFBQU1BQUFBY0FBRUFBQUFBQUR3QUF3QUJBQUFBSEFBRUFDQUFBQUFFQUFRQUFRQUFBQzcvL3dBQVwiICsgXCJBQzcvLy8vVEFBRUFBQUFBQUFBQkJnQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVwiICsgXCJBQUFBQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVwiICsgXCJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVwiICsgXCJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVwiICsgXCJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVwiICsgXCJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQUFBQUFBQUQvZ3dBeUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQVwiICsgXCJBQUFCQUFRRUFBRUJBUUpZQUFFQkFTSDREd0Q0R3dIRUF2Z2NBL2dYQkl3TUFZdUwrbno1dFFYa0Q1ajNDQkxuRVFBQ1wiICsgXCJBUUVCSVZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlBQUFCQVFBQUR3QUNBUUVFRS90M1wiICsgXCJEb3Y2ZkFINmZBVCtmUHA4K253SERvc01Ddm0xQ3ZtMURBejZmQlFBQUFBQUFBQUJBQUFBQU1tSmJ6RUFBQUFBemdUalwiICsgXCJGUUFBQUFET0JPUXBBQUVBQUFBQUFBQUFEQUFVQUFRQUFBQUJBQUFBQWdBQkFBQUFBQUFBQUFBRDZBQUFBQUFBQUE9PVwiKTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIl9sb2FkVGVzdEZvbnRcIiwgZ2V0TG9hZFRlc3RGb250KCkpO1xuICAgIH1cblxuICAgIF9wcmVwYXJlRm9udExvYWRFdmVudChydWxlcywgZm9udHMsIHJlcXVlc3QpIHtcbiAgICAgIGZ1bmN0aW9uIGludDMyKGRhdGEsIG9mZnNldCkge1xuICAgICAgICByZXR1cm4gZGF0YS5jaGFyQ29kZUF0KG9mZnNldCkgPDwgMjQgfCBkYXRhLmNoYXJDb2RlQXQob2Zmc2V0ICsgMSkgPDwgMTYgfCBkYXRhLmNoYXJDb2RlQXQob2Zmc2V0ICsgMikgPDwgOCB8IGRhdGEuY2hhckNvZGVBdChvZmZzZXQgKyAzKSAmIDB4ZmY7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHNwbGljZVN0cmluZyhzLCBvZmZzZXQsIHJlbW92ZSwgaW5zZXJ0KSB7XG4gICAgICAgIGNvbnN0IGNodW5rMSA9IHMuc3Vic3RyaW5nKDAsIG9mZnNldCk7XG4gICAgICAgIGNvbnN0IGNodW5rMiA9IHMuc3Vic3RyaW5nKG9mZnNldCArIHJlbW92ZSk7XG4gICAgICAgIHJldHVybiBjaHVuazEgKyBpbnNlcnQgKyBjaHVuazI7XG4gICAgICB9XG5cbiAgICAgIGxldCBpLCBpaTtcblxuICAgICAgY29uc3QgY2FudmFzID0gdGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcblxuICAgICAgY2FudmFzLndpZHRoID0gMTtcbiAgICAgIGNhbnZhcy5oZWlnaHQgPSAxO1xuICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICAgIGxldCBjYWxsZWQgPSAwO1xuXG4gICAgICBmdW5jdGlvbiBpc0ZvbnRSZWFkeShuYW1lLCBjYWxsYmFjaykge1xuICAgICAgICBjYWxsZWQrKztcblxuICAgICAgICBpZiAoY2FsbGVkID4gMzApIHtcbiAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJMb2FkIHRlc3QgZm9udCBuZXZlciBsb2FkZWQuXCIpO1xuICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY3R4LmZvbnQgPSBcIjMwcHggXCIgKyBuYW1lO1xuICAgICAgICBjdHguZmlsbFRleHQoXCIuXCIsIDAsIDIwKTtcbiAgICAgICAgY29uc3QgaW1hZ2VEYXRhID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCAxLCAxKTtcblxuICAgICAgICBpZiAoaW1hZ2VEYXRhLmRhdGFbM10gPiAwKSB7XG4gICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzZXRUaW1lb3V0KGlzRm9udFJlYWR5LmJpbmQobnVsbCwgbmFtZSwgY2FsbGJhY2spKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbG9hZFRlc3RGb250SWQgPSBgbHQke0RhdGUubm93KCl9JHt0aGlzLmxvYWRUZXN0Rm9udElkKyt9YDtcbiAgICAgIGxldCBkYXRhID0gdGhpcy5fbG9hZFRlc3RGb250O1xuICAgICAgY29uc3QgQ09NTUVOVF9PRkZTRVQgPSA5NzY7XG4gICAgICBkYXRhID0gc3BsaWNlU3RyaW5nKGRhdGEsIENPTU1FTlRfT0ZGU0VULCBsb2FkVGVzdEZvbnRJZC5sZW5ndGgsIGxvYWRUZXN0Rm9udElkKTtcbiAgICAgIGNvbnN0IENGRl9DSEVDS1NVTV9PRkZTRVQgPSAxNjtcbiAgICAgIGNvbnN0IFhYWFhfVkFMVUUgPSAweDU4NTg1ODU4O1xuICAgICAgbGV0IGNoZWNrc3VtID0gaW50MzIoZGF0YSwgQ0ZGX0NIRUNLU1VNX09GRlNFVCk7XG5cbiAgICAgIGZvciAoaSA9IDAsIGlpID0gbG9hZFRlc3RGb250SWQubGVuZ3RoIC0gMzsgaSA8IGlpOyBpICs9IDQpIHtcbiAgICAgICAgY2hlY2tzdW0gPSBjaGVja3N1bSAtIFhYWFhfVkFMVUUgKyBpbnQzMihsb2FkVGVzdEZvbnRJZCwgaSkgfCAwO1xuICAgICAgfVxuXG4gICAgICBpZiAoaSA8IGxvYWRUZXN0Rm9udElkLmxlbmd0aCkge1xuICAgICAgICBjaGVja3N1bSA9IGNoZWNrc3VtIC0gWFhYWF9WQUxVRSArIGludDMyKGxvYWRUZXN0Rm9udElkICsgXCJYWFhcIiwgaSkgfCAwO1xuICAgICAgfVxuXG4gICAgICBkYXRhID0gc3BsaWNlU3RyaW5nKGRhdGEsIENGRl9DSEVDS1NVTV9PRkZTRVQsIDQsICgwLCBfdXRpbC5zdHJpbmczMikoY2hlY2tzdW0pKTtcbiAgICAgIGNvbnN0IHVybCA9IGB1cmwoZGF0YTpmb250L29wZW50eXBlO2Jhc2U2NCwke2J0b2EoZGF0YSl9KTtgO1xuICAgICAgY29uc3QgcnVsZSA9IGBAZm9udC1mYWNlIHtmb250LWZhbWlseTpcIiR7bG9hZFRlc3RGb250SWR9XCI7c3JjOiR7dXJsfX1gO1xuICAgICAgdGhpcy5pbnNlcnRSdWxlKHJ1bGUpO1xuICAgICAgY29uc3QgbmFtZXMgPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBmb250IG9mIGZvbnRzKSB7XG4gICAgICAgIG5hbWVzLnB1c2goZm9udC5sb2FkZWROYW1lKTtcbiAgICAgIH1cblxuICAgICAgbmFtZXMucHVzaChsb2FkVGVzdEZvbnRJZCk7XG5cbiAgICAgIGNvbnN0IGRpdiA9IHRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG5cbiAgICAgIGRpdi5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcbiAgICAgIGRpdi5zdHlsZS53aWR0aCA9IGRpdi5zdHlsZS5oZWlnaHQgPSBcIjEwcHhcIjtcbiAgICAgIGRpdi5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcbiAgICAgIGRpdi5zdHlsZS50b3AgPSBkaXYuc3R5bGUubGVmdCA9IFwiMHB4XCI7XG5cbiAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBuYW1lcykge1xuICAgICAgICBjb25zdCBzcGFuID0gdGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG5cbiAgICAgICAgc3Bhbi50ZXh0Q29udGVudCA9IFwiSGlcIjtcbiAgICAgICAgc3Bhbi5zdHlsZS5mb250RmFtaWx5ID0gbmFtZTtcbiAgICAgICAgZGl2LmFwcGVuZENoaWxkKHNwYW4pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdik7XG5cbiAgICAgIGlzRm9udFJlYWR5KGxvYWRUZXN0Rm9udElkLCAoKSA9PiB7XG4gICAgICAgIGRpdi5yZW1vdmUoKTtcbiAgICAgICAgcmVxdWVzdC5jb21wbGV0ZSgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gIH07XG59XG5cbmNsYXNzIEZvbnRGYWNlT2JqZWN0IHtcbiAgY29uc3RydWN0b3IodHJhbnNsYXRlZERhdGEsIHtcbiAgICBpc0V2YWxTdXBwb3J0ZWQgPSB0cnVlLFxuICAgIGRpc2FibGVGb250RmFjZSA9IGZhbHNlLFxuICAgIGlnbm9yZUVycm9ycyA9IGZhbHNlLFxuICAgIG9uVW5zdXBwb3J0ZWRGZWF0dXJlLFxuICAgIGZvbnRSZWdpc3RyeSA9IG51bGxcbiAgfSkge1xuICAgIHRoaXMuY29tcGlsZWRHbHlwaHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgZm9yIChjb25zdCBpIGluIHRyYW5zbGF0ZWREYXRhKSB7XG4gICAgICB0aGlzW2ldID0gdHJhbnNsYXRlZERhdGFbaV07XG4gICAgfVxuXG4gICAgdGhpcy5pc0V2YWxTdXBwb3J0ZWQgPSBpc0V2YWxTdXBwb3J0ZWQgIT09IGZhbHNlO1xuICAgIHRoaXMuZGlzYWJsZUZvbnRGYWNlID0gZGlzYWJsZUZvbnRGYWNlID09PSB0cnVlO1xuICAgIHRoaXMuaWdub3JlRXJyb3JzID0gaWdub3JlRXJyb3JzID09PSB0cnVlO1xuICAgIHRoaXMuX29uVW5zdXBwb3J0ZWRGZWF0dXJlID0gb25VbnN1cHBvcnRlZEZlYXR1cmU7XG4gICAgdGhpcy5mb250UmVnaXN0cnkgPSBmb250UmVnaXN0cnk7XG4gIH1cblxuICBjcmVhdGVOYXRpdmVGb250RmFjZSgpIHtcbiAgICBpZiAoIXRoaXMuZGF0YSB8fCB0aGlzLmRpc2FibGVGb250RmFjZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbGV0IG5hdGl2ZUZvbnRGYWNlO1xuXG4gICAgaWYgKCF0aGlzLmNzc0ZvbnRJbmZvKSB7XG4gICAgICBuYXRpdmVGb250RmFjZSA9IG5ldyBGb250RmFjZSh0aGlzLmxvYWRlZE5hbWUsIHRoaXMuZGF0YSwge30pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjc3MgPSB7XG4gICAgICAgIHdlaWdodDogdGhpcy5jc3NGb250SW5mby5mb250V2VpZ2h0XG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5jc3NGb250SW5mby5pdGFsaWNBbmdsZSkge1xuICAgICAgICBjc3Muc3R5bGUgPSBgb2JsaXF1ZSAke3RoaXMuY3NzRm9udEluZm8uaXRhbGljQW5nbGV9ZGVnYDtcbiAgICAgIH1cblxuICAgICAgbmF0aXZlRm9udEZhY2UgPSBuZXcgRm9udEZhY2UodGhpcy5jc3NGb250SW5mby5mb250RmFtaWx5LCB0aGlzLmRhdGEsIGNzcyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZm9udFJlZ2lzdHJ5KSB7XG4gICAgICB0aGlzLmZvbnRSZWdpc3RyeS5yZWdpc3RlckZvbnQodGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5hdGl2ZUZvbnRGYWNlO1xuICB9XG5cbiAgY3JlYXRlRm9udEZhY2VSdWxlKCkge1xuICAgIGlmICghdGhpcy5kYXRhIHx8IHRoaXMuZGlzYWJsZUZvbnRGYWNlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0gKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKHRoaXMuZGF0YSk7XG4gICAgY29uc3QgdXJsID0gYHVybChkYXRhOiR7dGhpcy5taW1ldHlwZX07YmFzZTY0LCR7YnRvYShkYXRhKX0pO2A7XG4gICAgbGV0IHJ1bGU7XG5cbiAgICBpZiAoIXRoaXMuY3NzRm9udEluZm8pIHtcbiAgICAgIHJ1bGUgPSBgQGZvbnQtZmFjZSB7Zm9udC1mYW1pbHk6XCIke3RoaXMubG9hZGVkTmFtZX1cIjtzcmM6JHt1cmx9fWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBjc3MgPSBgZm9udC13ZWlnaHQ6ICR7dGhpcy5jc3NGb250SW5mby5mb250V2VpZ2h0fTtgO1xuXG4gICAgICBpZiAodGhpcy5jc3NGb250SW5mby5pdGFsaWNBbmdsZSkge1xuICAgICAgICBjc3MgKz0gYGZvbnQtc3R5bGU6IG9ibGlxdWUgJHt0aGlzLmNzc0ZvbnRJbmZvLml0YWxpY0FuZ2xlfWRlZztgO1xuICAgICAgfVxuXG4gICAgICBydWxlID0gYEBmb250LWZhY2Uge2ZvbnQtZmFtaWx5OlwiJHt0aGlzLmNzc0ZvbnRJbmZvLmZvbnRGYW1pbHl9XCI7JHtjc3N9c3JjOiR7dXJsfX1gO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZvbnRSZWdpc3RyeSkge1xuICAgICAgdGhpcy5mb250UmVnaXN0cnkucmVnaXN0ZXJGb250KHRoaXMsIHVybCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ1bGU7XG4gIH1cblxuICBnZXRQYXRoR2VuZXJhdG9yKG9ianMsIGNoYXJhY3Rlcikge1xuICAgIGlmICh0aGlzLmNvbXBpbGVkR2x5cGhzW2NoYXJhY3Rlcl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29tcGlsZWRHbHlwaHNbY2hhcmFjdGVyXTtcbiAgICB9XG5cbiAgICBsZXQgY21kcztcblxuICAgIHRyeSB7XG4gICAgICBjbWRzID0gb2Jqcy5nZXQodGhpcy5sb2FkZWROYW1lICsgXCJfcGF0aF9cIiArIGNoYXJhY3Rlcik7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmICghdGhpcy5pZ25vcmVFcnJvcnMpIHtcbiAgICAgICAgdGhyb3cgZXg7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX29uVW5zdXBwb3J0ZWRGZWF0dXJlKHtcbiAgICAgICAgZmVhdHVyZUlkOiBfdXRpbC5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvckZvbnRHZXRQYXRoXG4gICAgICB9KTtcblxuICAgICAgKDAsIF91dGlsLndhcm4pKGBnZXRQYXRoR2VuZXJhdG9yIC0gaWdub3JpbmcgY2hhcmFjdGVyOiBcIiR7ZXh9XCIuYCk7XG4gICAgICByZXR1cm4gdGhpcy5jb21waWxlZEdseXBoc1tjaGFyYWN0ZXJdID0gZnVuY3Rpb24gKGMsIHNpemUpIHt9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzRXZhbFN1cHBvcnRlZCAmJiBfdXRpbC5Jc0V2YWxTdXBwb3J0ZWRDYWNoZWQudmFsdWUpIHtcbiAgICAgIGNvbnN0IGpzQnVmID0gW107XG5cbiAgICAgIGZvciAoY29uc3QgY3VycmVudCBvZiBjbWRzKSB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBjdXJyZW50LmFyZ3MgIT09IHVuZGVmaW5lZCA/IGN1cnJlbnQuYXJncy5qb2luKFwiLFwiKSA6IFwiXCI7XG4gICAgICAgIGpzQnVmLnB1c2goXCJjLlwiLCBjdXJyZW50LmNtZCwgXCIoXCIsIGFyZ3MsIFwiKTtcXG5cIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBpbGVkR2x5cGhzW2NoYXJhY3Rlcl0gPSBuZXcgRnVuY3Rpb24oXCJjXCIsIFwic2l6ZVwiLCBqc0J1Zi5qb2luKFwiXCIpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jb21waWxlZEdseXBoc1tjaGFyYWN0ZXJdID0gZnVuY3Rpb24gKGMsIHNpemUpIHtcbiAgICAgIGZvciAoY29uc3QgY3VycmVudCBvZiBjbWRzKSB7XG4gICAgICAgIGlmIChjdXJyZW50LmNtZCA9PT0gXCJzY2FsZVwiKSB7XG4gICAgICAgICAgY3VycmVudC5hcmdzID0gW3NpemUsIC1zaXplXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNbY3VycmVudC5jbWRdLmFwcGx5KGMsIGN1cnJlbnQuYXJncyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuRm9udEZhY2VPYmplY3QgPSBGb250RmFjZU9iamVjdDtcblxuLyoqKi8gfSksXG4vKiA4ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLk5vZGVTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSA9IGV4cG9ydHMuTm9kZUNhbnZhc0ZhY3RvcnkgPSBleHBvcnRzLk5vZGVDTWFwUmVhZGVyRmFjdG9yeSA9IHZvaWQgMDtcblxudmFyIF9iYXNlX2ZhY3RvcnkgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDUpO1xuXG52YXIgX2lzX25vZGUgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDQpO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5sZXQgTm9kZUNhbnZhc0ZhY3RvcnkgPSBjbGFzcyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJOb3QgaW1wbGVtZW50ZWQ6IE5vZGVDYW52YXNGYWN0b3J5XCIpO1xuICB9XG5cbn07XG5leHBvcnRzLk5vZGVDYW52YXNGYWN0b3J5ID0gTm9kZUNhbnZhc0ZhY3Rvcnk7XG5sZXQgTm9kZUNNYXBSZWFkZXJGYWN0b3J5ID0gY2xhc3Mge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiTm90IGltcGxlbWVudGVkOiBOb2RlQ01hcFJlYWRlckZhY3RvcnlcIik7XG4gIH1cblxufTtcbmV4cG9ydHMuTm9kZUNNYXBSZWFkZXJGYWN0b3J5ID0gTm9kZUNNYXBSZWFkZXJGYWN0b3J5O1xubGV0IE5vZGVTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSA9IGNsYXNzIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIk5vdCBpbXBsZW1lbnRlZDogTm9kZVN0YW5kYXJkRm9udERhdGFGYWN0b3J5XCIpO1xuICB9XG5cbn07XG5leHBvcnRzLk5vZGVTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSA9IE5vZGVTdGFuZGFyZEZvbnREYXRhRmFjdG9yeTtcblxuaWYgKF9pc19ub2RlLmlzTm9kZUpTKSB7XG4gIGNvbnN0IGZldGNoRGF0YSA9IGZ1bmN0aW9uICh1cmwpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XG5cbiAgICAgIGZzLnJlYWRGaWxlKHVybCwgKGVycm9yLCBkYXRhKSA9PiB7XG4gICAgICAgIGlmIChlcnJvciB8fCAhZGF0YSkge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoZXJyb3IpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXNvbHZlKG5ldyBVaW50OEFycmF5KGRhdGEpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIGV4cG9ydHMuTm9kZUNhbnZhc0ZhY3RvcnkgPSBOb2RlQ2FudmFzRmFjdG9yeSA9IGNsYXNzIGV4dGVuZHMgX2Jhc2VfZmFjdG9yeS5CYXNlQ2FudmFzRmFjdG9yeSB7XG4gICAgX2NyZWF0ZUNhbnZhcyh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICBjb25zdCBDYW52YXMgPSByZXF1aXJlKFwiY2FudmFzXCIpO1xuXG4gICAgICByZXR1cm4gQ2FudmFzLmNyZWF0ZUNhbnZhcyh3aWR0aCwgaGVpZ2h0KTtcbiAgICB9XG5cbiAgfTtcbiAgZXhwb3J0cy5Ob2RlQ01hcFJlYWRlckZhY3RvcnkgPSBOb2RlQ01hcFJlYWRlckZhY3RvcnkgPSBjbGFzcyBleHRlbmRzIF9iYXNlX2ZhY3RvcnkuQmFzZUNNYXBSZWFkZXJGYWN0b3J5IHtcbiAgICBfZmV0Y2hEYXRhKHVybCwgY29tcHJlc3Npb25UeXBlKSB7XG4gICAgICByZXR1cm4gZmV0Y2hEYXRhKHVybCkudGhlbihkYXRhID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjTWFwRGF0YTogZGF0YSxcbiAgICAgICAgICBjb21wcmVzc2lvblR5cGVcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cblxuICB9O1xuICBleHBvcnRzLk5vZGVTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSA9IE5vZGVTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSA9IGNsYXNzIGV4dGVuZHMgX2Jhc2VfZmFjdG9yeS5CYXNlU3RhbmRhcmRGb250RGF0YUZhY3Rvcnkge1xuICAgIF9mZXRjaERhdGEodXJsKSB7XG4gICAgICByZXR1cm4gZmV0Y2hEYXRhKHVybCk7XG4gICAgfVxuXG4gIH07XG59XG5cbi8qKiovIH0pLFxuLyogOSAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5Bbm5vdGF0aW9uU3RvcmFnZSA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxuY2xhc3MgQW5ub3RhdGlvblN0b3JhZ2Uge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9zdG9yYWdlID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuX3RpbWVTdGFtcCA9IERhdGUubm93KCk7XG4gICAgdGhpcy5fbW9kaWZpZWQgPSBmYWxzZTtcbiAgICB0aGlzLm9uU2V0TW9kaWZpZWQgPSBudWxsO1xuICAgIHRoaXMub25SZXNldE1vZGlmaWVkID0gbnVsbDtcbiAgfVxuXG4gIGdldFZhbHVlKGtleSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9zdG9yYWdlLmdldChrZXkpO1xuXG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oZGVmYXVsdFZhbHVlLCB2YWx1ZSk7XG4gIH1cblxuICBzZXRWYWx1ZShrZXksIHZhbHVlKSB7XG4gICAgY29uc3Qgb2JqID0gdGhpcy5fc3RvcmFnZS5nZXQoa2V5KTtcblxuICAgIGxldCBtb2RpZmllZCA9IGZhbHNlO1xuXG4gICAgaWYgKG9iaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBmb3IgKGNvbnN0IFtlbnRyeSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSkpIHtcbiAgICAgICAgaWYgKG9ialtlbnRyeV0gIT09IHZhbCkge1xuICAgICAgICAgIG1vZGlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICBvYmpbZW50cnldID0gdmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG1vZGlmaWVkID0gdHJ1ZTtcblxuICAgICAgdGhpcy5fc3RvcmFnZS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKG1vZGlmaWVkKSB7XG4gICAgICB0aGlzLl90aW1lU3RhbXAgPSBEYXRlLm5vdygpO1xuXG4gICAgICB0aGlzLl9zZXRNb2RpZmllZCgpO1xuICAgIH1cbiAgfVxuXG4gIGdldEFsbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RvcmFnZS5zaXplID4gMCA/ICgwLCBfdXRpbC5vYmplY3RGcm9tTWFwKSh0aGlzLl9zdG9yYWdlKSA6IG51bGw7XG4gIH1cblxuICBnZXQgc2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RvcmFnZS5zaXplO1xuICB9XG5cbiAgX3NldE1vZGlmaWVkKCkge1xuICAgIGlmICghdGhpcy5fbW9kaWZpZWQpIHtcbiAgICAgIHRoaXMuX21vZGlmaWVkID0gdHJ1ZTtcblxuICAgICAgaWYgKHR5cGVvZiB0aGlzLm9uU2V0TW9kaWZpZWQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aGlzLm9uU2V0TW9kaWZpZWQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXNldE1vZGlmaWVkKCkge1xuICAgIGlmICh0aGlzLl9tb2RpZmllZCkge1xuICAgICAgdGhpcy5fbW9kaWZpZWQgPSBmYWxzZTtcblxuICAgICAgaWYgKHR5cGVvZiB0aGlzLm9uUmVzZXRNb2RpZmllZCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMub25SZXNldE1vZGlmaWVkKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IHNlcmlhbGl6YWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RvcmFnZS5zaXplID4gMCA/IHRoaXMuX3N0b3JhZ2UgOiBudWxsO1xuICB9XG5cbiAgZ2V0IGxhc3RNb2RpZmllZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdGltZVN0YW1wLnRvU3RyaW5nKCk7XG4gIH1cblxufVxuXG5leHBvcnRzLkFubm90YXRpb25TdG9yYWdlID0gQW5ub3RhdGlvblN0b3JhZ2U7XG5cbi8qKiovIH0pLFxuLyogMTAgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuQ2FudmFzR3JhcGhpY3MgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfcGF0dGVybl9oZWxwZXIgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDExKTtcblxudmFyIF9kaXNwbGF5X3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXygxKTtcblxuY29uc3QgTUlOX0ZPTlRfU0laRSA9IDE2O1xuY29uc3QgTUFYX0ZPTlRfU0laRSA9IDEwMDtcbmNvbnN0IE1BWF9HUk9VUF9TSVpFID0gNDA5NjtcbmNvbnN0IEVYRUNVVElPTl9USU1FID0gMTU7XG5jb25zdCBFWEVDVVRJT05fU1RFUFMgPSAxMDtcbmNvbnN0IENPTVBJTEVfVFlQRTNfR0xZUEhTID0gdHJ1ZTtcbmNvbnN0IE1BWF9TSVpFX1RPX0NPTVBJTEUgPSAxMDAwO1xuY29uc3QgRlVMTF9DSFVOS19IRUlHSFQgPSAxNjtcbmNvbnN0IExJTkVXSURUSF9TQ0FMRV9GQUNUT1IgPSAxLjAwMDAwMTtcblxuZnVuY3Rpb24gbWlycm9yQ29udGV4dE9wZXJhdGlvbnMoY3R4LCBkZXN0Q3R4KSB7XG4gIGlmIChjdHguX3JlbW92ZU1pcnJvcmluZykge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNvbnRleHQgaXMgYWxyZWFkeSBmb3J3YXJkaW5nIG9wZXJhdGlvbnMuXCIpO1xuICB9XG5cbiAgY3R4Ll9fb3JpZ2luYWxTYXZlID0gY3R4LnNhdmU7XG4gIGN0eC5fX29yaWdpbmFsUmVzdG9yZSA9IGN0eC5yZXN0b3JlO1xuICBjdHguX19vcmlnaW5hbFJvdGF0ZSA9IGN0eC5yb3RhdGU7XG4gIGN0eC5fX29yaWdpbmFsU2NhbGUgPSBjdHguc2NhbGU7XG4gIGN0eC5fX29yaWdpbmFsVHJhbnNsYXRlID0gY3R4LnRyYW5zbGF0ZTtcbiAgY3R4Ll9fb3JpZ2luYWxUcmFuc2Zvcm0gPSBjdHgudHJhbnNmb3JtO1xuICBjdHguX19vcmlnaW5hbFNldFRyYW5zZm9ybSA9IGN0eC5zZXRUcmFuc2Zvcm07XG4gIGN0eC5fX29yaWdpbmFsUmVzZXRUcmFuc2Zvcm0gPSBjdHgucmVzZXRUcmFuc2Zvcm07XG4gIGN0eC5fX29yaWdpbmFsQ2xpcCA9IGN0eC5jbGlwO1xuICBjdHguX19vcmlnaW5hbE1vdmVUbyA9IGN0eC5tb3ZlVG87XG4gIGN0eC5fX29yaWdpbmFsTGluZVRvID0gY3R4LmxpbmVUbztcbiAgY3R4Ll9fb3JpZ2luYWxCZXppZXJDdXJ2ZVRvID0gY3R4LmJlemllckN1cnZlVG87XG4gIGN0eC5fX29yaWdpbmFsUmVjdCA9IGN0eC5yZWN0O1xuICBjdHguX19vcmlnaW5hbENsb3NlUGF0aCA9IGN0eC5jbG9zZVBhdGg7XG4gIGN0eC5fX29yaWdpbmFsQmVnaW5QYXRoID0gY3R4LmJlZ2luUGF0aDtcblxuICBjdHguX3JlbW92ZU1pcnJvcmluZyA9ICgpID0+IHtcbiAgICBjdHguc2F2ZSA9IGN0eC5fX29yaWdpbmFsU2F2ZTtcbiAgICBjdHgucmVzdG9yZSA9IGN0eC5fX29yaWdpbmFsUmVzdG9yZTtcbiAgICBjdHgucm90YXRlID0gY3R4Ll9fb3JpZ2luYWxSb3RhdGU7XG4gICAgY3R4LnNjYWxlID0gY3R4Ll9fb3JpZ2luYWxTY2FsZTtcbiAgICBjdHgudHJhbnNsYXRlID0gY3R4Ll9fb3JpZ2luYWxUcmFuc2xhdGU7XG4gICAgY3R4LnRyYW5zZm9ybSA9IGN0eC5fX29yaWdpbmFsVHJhbnNmb3JtO1xuICAgIGN0eC5zZXRUcmFuc2Zvcm0gPSBjdHguX19vcmlnaW5hbFNldFRyYW5zZm9ybTtcbiAgICBjdHgucmVzZXRUcmFuc2Zvcm0gPSBjdHguX19vcmlnaW5hbFJlc2V0VHJhbnNmb3JtO1xuICAgIGN0eC5jbGlwID0gY3R4Ll9fb3JpZ2luYWxDbGlwO1xuICAgIGN0eC5tb3ZlVG8gPSBjdHguX19vcmlnaW5hbE1vdmVUbztcbiAgICBjdHgubGluZVRvID0gY3R4Ll9fb3JpZ2luYWxMaW5lVG87XG4gICAgY3R4LmJlemllckN1cnZlVG8gPSBjdHguX19vcmlnaW5hbEJlemllckN1cnZlVG87XG4gICAgY3R4LnJlY3QgPSBjdHguX19vcmlnaW5hbFJlY3Q7XG4gICAgY3R4LmNsb3NlUGF0aCA9IGN0eC5fX29yaWdpbmFsQ2xvc2VQYXRoO1xuICAgIGN0eC5iZWdpblBhdGggPSBjdHguX19vcmlnaW5hbEJlZ2luUGF0aDtcbiAgICBkZWxldGUgY3R4Ll9yZW1vdmVNaXJyb3Jpbmc7XG4gIH07XG5cbiAgY3R4LnNhdmUgPSBmdW5jdGlvbiBjdHhTYXZlKCkge1xuICAgIGRlc3RDdHguc2F2ZSgpO1xuXG4gICAgdGhpcy5fX29yaWdpbmFsU2F2ZSgpO1xuICB9O1xuXG4gIGN0eC5yZXN0b3JlID0gZnVuY3Rpb24gY3R4UmVzdG9yZSgpIHtcbiAgICBkZXN0Q3R4LnJlc3RvcmUoKTtcblxuICAgIHRoaXMuX19vcmlnaW5hbFJlc3RvcmUoKTtcbiAgfTtcblxuICBjdHgudHJhbnNsYXRlID0gZnVuY3Rpb24gY3R4VHJhbnNsYXRlKHgsIHkpIHtcbiAgICBkZXN0Q3R4LnRyYW5zbGF0ZSh4LCB5KTtcblxuICAgIHRoaXMuX19vcmlnaW5hbFRyYW5zbGF0ZSh4LCB5KTtcbiAgfTtcblxuICBjdHguc2NhbGUgPSBmdW5jdGlvbiBjdHhTY2FsZSh4LCB5KSB7XG4gICAgZGVzdEN0eC5zY2FsZSh4LCB5KTtcblxuICAgIHRoaXMuX19vcmlnaW5hbFNjYWxlKHgsIHkpO1xuICB9O1xuXG4gIGN0eC50cmFuc2Zvcm0gPSBmdW5jdGlvbiBjdHhUcmFuc2Zvcm0oYSwgYiwgYywgZCwgZSwgZikge1xuICAgIGRlc3RDdHgudHJhbnNmb3JtKGEsIGIsIGMsIGQsIGUsIGYpO1xuXG4gICAgdGhpcy5fX29yaWdpbmFsVHJhbnNmb3JtKGEsIGIsIGMsIGQsIGUsIGYpO1xuICB9O1xuXG4gIGN0eC5zZXRUcmFuc2Zvcm0gPSBmdW5jdGlvbiBjdHhTZXRUcmFuc2Zvcm0oYSwgYiwgYywgZCwgZSwgZikge1xuICAgIGRlc3RDdHguc2V0VHJhbnNmb3JtKGEsIGIsIGMsIGQsIGUsIGYpO1xuXG4gICAgdGhpcy5fX29yaWdpbmFsU2V0VHJhbnNmb3JtKGEsIGIsIGMsIGQsIGUsIGYpO1xuICB9O1xuXG4gIGN0eC5yZXNldFRyYW5zZm9ybSA9IGZ1bmN0aW9uIGN0eFJlc2V0VHJhbnNmb3JtKCkge1xuICAgIGRlc3RDdHgucmVzZXRUcmFuc2Zvcm0oKTtcblxuICAgIHRoaXMuX19vcmlnaW5hbFJlc2V0VHJhbnNmb3JtKCk7XG4gIH07XG5cbiAgY3R4LnJvdGF0ZSA9IGZ1bmN0aW9uIGN0eFJvdGF0ZShhbmdsZSkge1xuICAgIGRlc3RDdHgucm90YXRlKGFuZ2xlKTtcblxuICAgIHRoaXMuX19vcmlnaW5hbFJvdGF0ZShhbmdsZSk7XG4gIH07XG5cbiAgY3R4LmNsaXAgPSBmdW5jdGlvbiBjdHhSb3RhdGUocnVsZSkge1xuICAgIGRlc3RDdHguY2xpcChydWxlKTtcblxuICAgIHRoaXMuX19vcmlnaW5hbENsaXAocnVsZSk7XG4gIH07XG5cbiAgY3R4Lm1vdmVUbyA9IGZ1bmN0aW9uICh4LCB5KSB7XG4gICAgZGVzdEN0eC5tb3ZlVG8oeCwgeSk7XG5cbiAgICB0aGlzLl9fb3JpZ2luYWxNb3ZlVG8oeCwgeSk7XG4gIH07XG5cbiAgY3R4LmxpbmVUbyA9IGZ1bmN0aW9uICh4LCB5KSB7XG4gICAgZGVzdEN0eC5saW5lVG8oeCwgeSk7XG5cbiAgICB0aGlzLl9fb3JpZ2luYWxMaW5lVG8oeCwgeSk7XG4gIH07XG5cbiAgY3R4LmJlemllckN1cnZlVG8gPSBmdW5jdGlvbiAoY3AxeCwgY3AxeSwgY3AyeCwgY3AyeSwgeCwgeSkge1xuICAgIGRlc3RDdHguYmV6aWVyQ3VydmVUbyhjcDF4LCBjcDF5LCBjcDJ4LCBjcDJ5LCB4LCB5KTtcblxuICAgIHRoaXMuX19vcmlnaW5hbEJlemllckN1cnZlVG8oY3AxeCwgY3AxeSwgY3AyeCwgY3AyeSwgeCwgeSk7XG4gIH07XG5cbiAgY3R4LnJlY3QgPSBmdW5jdGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodCkge1xuICAgIGRlc3RDdHgucmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgIHRoaXMuX19vcmlnaW5hbFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7XG4gIH07XG5cbiAgY3R4LmNsb3NlUGF0aCA9IGZ1bmN0aW9uICgpIHtcbiAgICBkZXN0Q3R4LmNsb3NlUGF0aCgpO1xuXG4gICAgdGhpcy5fX29yaWdpbmFsQ2xvc2VQYXRoKCk7XG4gIH07XG5cbiAgY3R4LmJlZ2luUGF0aCA9IGZ1bmN0aW9uICgpIHtcbiAgICBkZXN0Q3R4LmJlZ2luUGF0aCgpO1xuXG4gICAgdGhpcy5fX29yaWdpbmFsQmVnaW5QYXRoKCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGFkZENvbnRleHRDdXJyZW50VHJhbnNmb3JtKGN0eCkge1xuICBpZiAoY3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm0pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjdHguX29yaWdpbmFsU2F2ZSA9IGN0eC5zYXZlO1xuICBjdHguX29yaWdpbmFsUmVzdG9yZSA9IGN0eC5yZXN0b3JlO1xuICBjdHguX29yaWdpbmFsUm90YXRlID0gY3R4LnJvdGF0ZTtcbiAgY3R4Ll9vcmlnaW5hbFNjYWxlID0gY3R4LnNjYWxlO1xuICBjdHguX29yaWdpbmFsVHJhbnNsYXRlID0gY3R4LnRyYW5zbGF0ZTtcbiAgY3R4Ll9vcmlnaW5hbFRyYW5zZm9ybSA9IGN0eC50cmFuc2Zvcm07XG4gIGN0eC5fb3JpZ2luYWxTZXRUcmFuc2Zvcm0gPSBjdHguc2V0VHJhbnNmb3JtO1xuICBjdHguX29yaWdpbmFsUmVzZXRUcmFuc2Zvcm0gPSBjdHgucmVzZXRUcmFuc2Zvcm07XG4gIGN0eC5fdHJhbnNmb3JtTWF0cml4ID0gY3R4Ll90cmFuc2Zvcm1NYXRyaXggfHwgWzEsIDAsIDAsIDEsIDAsIDBdO1xuICBjdHguX3RyYW5zZm9ybVN0YWNrID0gW107XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3QuZ2V0UHJvdG90eXBlT2YoY3R4KSwgXCJsaW5lV2lkdGhcIik7XG4gICAgY3R4Ll9zZXRMaW5lV2lkdGggPSBkZXNjLnNldDtcbiAgICBjdHguX2dldExpbmVXaWR0aCA9IGRlc2MuZ2V0O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjdHgsIFwibGluZVdpZHRoXCIsIHtcbiAgICAgIHNldDogZnVuY3Rpb24gc2V0TGluZVdpZHRoKHdpZHRoKSB7XG4gICAgICAgIHRoaXMuX3NldExpbmVXaWR0aCh3aWR0aCAqIExJTkVXSURUSF9TQ0FMRV9GQUNUT1IpO1xuICAgICAgfSxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0TGluZVdpZHRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TGluZVdpZHRoKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0gY2F0Y2ggKF8pIHt9XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGN0eCwgXCJtb3pDdXJyZW50VHJhbnNmb3JtXCIsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldEN1cnJlbnRUcmFuc2Zvcm0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdHJhbnNmb3JtTWF0cml4O1xuICAgIH1cbiAgfSk7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjdHgsIFwibW96Q3VycmVudFRyYW5zZm9ybUludmVyc2VcIiwge1xuICAgIGdldDogZnVuY3Rpb24gZ2V0Q3VycmVudFRyYW5zZm9ybUludmVyc2UoKSB7XG4gICAgICBjb25zdCBbYSwgYiwgYywgZCwgZSwgZl0gPSB0aGlzLl90cmFuc2Zvcm1NYXRyaXg7XG4gICAgICBjb25zdCBhZF9iYyA9IGEgKiBkIC0gYiAqIGM7XG4gICAgICBjb25zdCBiY19hZCA9IGIgKiBjIC0gYSAqIGQ7XG4gICAgICByZXR1cm4gW2QgLyBhZF9iYywgYiAvIGJjX2FkLCBjIC8gYmNfYWQsIGEgLyBhZF9iYywgKGQgKiBlIC0gYyAqIGYpIC8gYmNfYWQsIChiICogZSAtIGEgKiBmKSAvIGFkX2JjXTtcbiAgICB9XG4gIH0pO1xuXG4gIGN0eC5zYXZlID0gZnVuY3Rpb24gY3R4U2F2ZSgpIHtcbiAgICBjb25zdCBvbGQgPSB0aGlzLl90cmFuc2Zvcm1NYXRyaXg7XG5cbiAgICB0aGlzLl90cmFuc2Zvcm1TdGFjay5wdXNoKG9sZCk7XG5cbiAgICB0aGlzLl90cmFuc2Zvcm1NYXRyaXggPSBvbGQuc2xpY2UoMCwgNik7XG5cbiAgICB0aGlzLl9vcmlnaW5hbFNhdmUoKTtcbiAgfTtcblxuICBjdHgucmVzdG9yZSA9IGZ1bmN0aW9uIGN0eFJlc3RvcmUoKSB7XG4gICAgY29uc3QgcHJldiA9IHRoaXMuX3RyYW5zZm9ybVN0YWNrLnBvcCgpO1xuXG4gICAgaWYgKHByZXYpIHtcbiAgICAgIHRoaXMuX3RyYW5zZm9ybU1hdHJpeCA9IHByZXY7XG5cbiAgICAgIHRoaXMuX29yaWdpbmFsUmVzdG9yZSgpO1xuICAgIH1cbiAgfTtcblxuICBjdHgudHJhbnNsYXRlID0gZnVuY3Rpb24gY3R4VHJhbnNsYXRlKHgsIHkpIHtcbiAgICBjb25zdCBtID0gdGhpcy5fdHJhbnNmb3JtTWF0cml4O1xuICAgIG1bNF0gPSBtWzBdICogeCArIG1bMl0gKiB5ICsgbVs0XTtcbiAgICBtWzVdID0gbVsxXSAqIHggKyBtWzNdICogeSArIG1bNV07XG5cbiAgICB0aGlzLl9vcmlnaW5hbFRyYW5zbGF0ZSh4LCB5KTtcbiAgfTtcblxuICBjdHguc2NhbGUgPSBmdW5jdGlvbiBjdHhTY2FsZSh4LCB5KSB7XG4gICAgY29uc3QgbSA9IHRoaXMuX3RyYW5zZm9ybU1hdHJpeDtcbiAgICBtWzBdICo9IHg7XG4gICAgbVsxXSAqPSB4O1xuICAgIG1bMl0gKj0geTtcbiAgICBtWzNdICo9IHk7XG5cbiAgICB0aGlzLl9vcmlnaW5hbFNjYWxlKHgsIHkpO1xuICB9O1xuXG4gIGN0eC50cmFuc2Zvcm0gPSBmdW5jdGlvbiBjdHhUcmFuc2Zvcm0oYSwgYiwgYywgZCwgZSwgZikge1xuICAgIGNvbnN0IG0gPSB0aGlzLl90cmFuc2Zvcm1NYXRyaXg7XG4gICAgdGhpcy5fdHJhbnNmb3JtTWF0cml4ID0gW21bMF0gKiBhICsgbVsyXSAqIGIsIG1bMV0gKiBhICsgbVszXSAqIGIsIG1bMF0gKiBjICsgbVsyXSAqIGQsIG1bMV0gKiBjICsgbVszXSAqIGQsIG1bMF0gKiBlICsgbVsyXSAqIGYgKyBtWzRdLCBtWzFdICogZSArIG1bM10gKiBmICsgbVs1XV07XG5cbiAgICBjdHguX29yaWdpbmFsVHJhbnNmb3JtKGEsIGIsIGMsIGQsIGUsIGYpO1xuICB9O1xuXG4gIGN0eC5zZXRUcmFuc2Zvcm0gPSBmdW5jdGlvbiBjdHhTZXRUcmFuc2Zvcm0oYSwgYiwgYywgZCwgZSwgZikge1xuICAgIHRoaXMuX3RyYW5zZm9ybU1hdHJpeCA9IFthLCBiLCBjLCBkLCBlLCBmXTtcblxuICAgIGN0eC5fb3JpZ2luYWxTZXRUcmFuc2Zvcm0oYSwgYiwgYywgZCwgZSwgZik7XG4gIH07XG5cbiAgY3R4LnJlc2V0VHJhbnNmb3JtID0gZnVuY3Rpb24gY3R4UmVzZXRUcmFuc2Zvcm0oKSB7XG4gICAgdGhpcy5fdHJhbnNmb3JtTWF0cml4ID0gWzEsIDAsIDAsIDEsIDAsIDBdO1xuXG4gICAgY3R4Ll9vcmlnaW5hbFJlc2V0VHJhbnNmb3JtKCk7XG4gIH07XG5cbiAgY3R4LnJvdGF0ZSA9IGZ1bmN0aW9uIGN0eFJvdGF0ZShhbmdsZSkge1xuICAgIGNvbnN0IGNvc1ZhbHVlID0gTWF0aC5jb3MoYW5nbGUpO1xuICAgIGNvbnN0IHNpblZhbHVlID0gTWF0aC5zaW4oYW5nbGUpO1xuICAgIGNvbnN0IG0gPSB0aGlzLl90cmFuc2Zvcm1NYXRyaXg7XG4gICAgdGhpcy5fdHJhbnNmb3JtTWF0cml4ID0gW21bMF0gKiBjb3NWYWx1ZSArIG1bMl0gKiBzaW5WYWx1ZSwgbVsxXSAqIGNvc1ZhbHVlICsgbVszXSAqIHNpblZhbHVlLCBtWzBdICogLXNpblZhbHVlICsgbVsyXSAqIGNvc1ZhbHVlLCBtWzFdICogLXNpblZhbHVlICsgbVszXSAqIGNvc1ZhbHVlLCBtWzRdLCBtWzVdXTtcblxuICAgIHRoaXMuX29yaWdpbmFsUm90YXRlKGFuZ2xlKTtcbiAgfTtcbn1cblxuY2xhc3MgQ2FjaGVkQ2FudmFzZXMge1xuICBjb25zdHJ1Y3RvcihjYW52YXNGYWN0b3J5KSB7XG4gICAgdGhpcy5jYW52YXNGYWN0b3J5ID0gY2FudmFzRmFjdG9yeTtcbiAgICB0aGlzLmNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgfVxuXG4gIGdldENhbnZhcyhpZCwgd2lkdGgsIGhlaWdodCwgdHJhY2tUcmFuc2Zvcm0pIHtcbiAgICBsZXQgY2FudmFzRW50cnk7XG5cbiAgICBpZiAodGhpcy5jYWNoZVtpZF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2FudmFzRW50cnkgPSB0aGlzLmNhY2hlW2lkXTtcbiAgICAgIHRoaXMuY2FudmFzRmFjdG9yeS5yZXNldChjYW52YXNFbnRyeSwgd2lkdGgsIGhlaWdodCk7XG4gICAgICBjYW52YXNFbnRyeS5jb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FudmFzRW50cnkgPSB0aGlzLmNhbnZhc0ZhY3RvcnkuY3JlYXRlKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgdGhpcy5jYWNoZVtpZF0gPSBjYW52YXNFbnRyeTtcbiAgICB9XG5cbiAgICBpZiAodHJhY2tUcmFuc2Zvcm0pIHtcbiAgICAgIGFkZENvbnRleHRDdXJyZW50VHJhbnNmb3JtKGNhbnZhc0VudHJ5LmNvbnRleHQpO1xuICAgIH1cblxuICAgIHJldHVybiBjYW52YXNFbnRyeTtcbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIGZvciAoY29uc3QgaWQgaW4gdGhpcy5jYWNoZSkge1xuICAgICAgY29uc3QgY2FudmFzRW50cnkgPSB0aGlzLmNhY2hlW2lkXTtcbiAgICAgIHRoaXMuY2FudmFzRmFjdG9yeS5kZXN0cm95KGNhbnZhc0VudHJ5KTtcbiAgICAgIGRlbGV0ZSB0aGlzLmNhY2hlW2lkXTtcbiAgICB9XG4gIH1cblxufVxuXG5mdW5jdGlvbiBjb21waWxlVHlwZTNHbHlwaChpbWdEYXRhKSB7XG4gIGNvbnN0IFBPSU5UX1RPX1BST0NFU1NfTElNSVQgPSAxMDAwO1xuICBjb25zdCBQT0lOVF9UWVBFUyA9IG5ldyBVaW50OEFycmF5KFswLCAyLCA0LCAwLCAxLCAwLCA1LCA0LCA4LCAxMCwgMCwgOCwgMCwgMiwgMSwgMF0pO1xuICBjb25zdCB3aWR0aCA9IGltZ0RhdGEud2lkdGgsXG4gICAgICAgIGhlaWdodCA9IGltZ0RhdGEuaGVpZ2h0LFxuICAgICAgICB3aWR0aDEgPSB3aWR0aCArIDE7XG4gIGxldCBpLCBpaSwgaiwgajA7XG4gIGNvbnN0IHBvaW50cyA9IG5ldyBVaW50OEFycmF5KHdpZHRoMSAqIChoZWlnaHQgKyAxKSk7XG4gIGNvbnN0IGxpbmVTaXplID0gd2lkdGggKyA3ICYgfjcsXG4gICAgICAgIGRhdGEwID0gaW1nRGF0YS5kYXRhO1xuICBjb25zdCBkYXRhID0gbmV3IFVpbnQ4QXJyYXkobGluZVNpemUgKiBoZWlnaHQpO1xuICBsZXQgcG9zID0gMDtcblxuICBmb3IgKGkgPSAwLCBpaSA9IGRhdGEwLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICBjb25zdCBlbGVtID0gZGF0YTBbaV07XG4gICAgbGV0IG1hc2sgPSAxMjg7XG5cbiAgICB3aGlsZSAobWFzayA+IDApIHtcbiAgICAgIGRhdGFbcG9zKytdID0gZWxlbSAmIG1hc2sgPyAwIDogMjU1O1xuICAgICAgbWFzayA+Pj0gMTtcbiAgICB9XG4gIH1cblxuICBsZXQgY291bnQgPSAwO1xuICBwb3MgPSAwO1xuXG4gIGlmIChkYXRhW3Bvc10gIT09IDApIHtcbiAgICBwb2ludHNbMF0gPSAxO1xuICAgICsrY291bnQ7XG4gIH1cblxuICBmb3IgKGogPSAxOyBqIDwgd2lkdGg7IGorKykge1xuICAgIGlmIChkYXRhW3Bvc10gIT09IGRhdGFbcG9zICsgMV0pIHtcbiAgICAgIHBvaW50c1tqXSA9IGRhdGFbcG9zXSA/IDIgOiAxO1xuICAgICAgKytjb3VudDtcbiAgICB9XG5cbiAgICBwb3MrKztcbiAgfVxuXG4gIGlmIChkYXRhW3Bvc10gIT09IDApIHtcbiAgICBwb2ludHNbal0gPSAyO1xuICAgICsrY291bnQ7XG4gIH1cblxuICBmb3IgKGkgPSAxOyBpIDwgaGVpZ2h0OyBpKyspIHtcbiAgICBwb3MgPSBpICogbGluZVNpemU7XG4gICAgajAgPSBpICogd2lkdGgxO1xuXG4gICAgaWYgKGRhdGFbcG9zIC0gbGluZVNpemVdICE9PSBkYXRhW3Bvc10pIHtcbiAgICAgIHBvaW50c1tqMF0gPSBkYXRhW3Bvc10gPyAxIDogODtcbiAgICAgICsrY291bnQ7XG4gICAgfVxuXG4gICAgbGV0IHN1bSA9IChkYXRhW3Bvc10gPyA0IDogMCkgKyAoZGF0YVtwb3MgLSBsaW5lU2l6ZV0gPyA4IDogMCk7XG5cbiAgICBmb3IgKGogPSAxOyBqIDwgd2lkdGg7IGorKykge1xuICAgICAgc3VtID0gKHN1bSA+PiAyKSArIChkYXRhW3BvcyArIDFdID8gNCA6IDApICsgKGRhdGFbcG9zIC0gbGluZVNpemUgKyAxXSA/IDggOiAwKTtcblxuICAgICAgaWYgKFBPSU5UX1RZUEVTW3N1bV0pIHtcbiAgICAgICAgcG9pbnRzW2owICsgal0gPSBQT0lOVF9UWVBFU1tzdW1dO1xuICAgICAgICArK2NvdW50O1xuICAgICAgfVxuXG4gICAgICBwb3MrKztcbiAgICB9XG5cbiAgICBpZiAoZGF0YVtwb3MgLSBsaW5lU2l6ZV0gIT09IGRhdGFbcG9zXSkge1xuICAgICAgcG9pbnRzW2owICsgal0gPSBkYXRhW3Bvc10gPyAyIDogNDtcbiAgICAgICsrY291bnQ7XG4gICAgfVxuXG4gICAgaWYgKGNvdW50ID4gUE9JTlRfVE9fUFJPQ0VTU19MSU1JVCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcG9zID0gbGluZVNpemUgKiAoaGVpZ2h0IC0gMSk7XG4gIGowID0gaSAqIHdpZHRoMTtcblxuICBpZiAoZGF0YVtwb3NdICE9PSAwKSB7XG4gICAgcG9pbnRzW2owXSA9IDg7XG4gICAgKytjb3VudDtcbiAgfVxuXG4gIGZvciAoaiA9IDE7IGogPCB3aWR0aDsgaisrKSB7XG4gICAgaWYgKGRhdGFbcG9zXSAhPT0gZGF0YVtwb3MgKyAxXSkge1xuICAgICAgcG9pbnRzW2owICsgal0gPSBkYXRhW3Bvc10gPyA0IDogODtcbiAgICAgICsrY291bnQ7XG4gICAgfVxuXG4gICAgcG9zKys7XG4gIH1cblxuICBpZiAoZGF0YVtwb3NdICE9PSAwKSB7XG4gICAgcG9pbnRzW2owICsgal0gPSA0O1xuICAgICsrY291bnQ7XG4gIH1cblxuICBpZiAoY291bnQgPiBQT0lOVF9UT19QUk9DRVNTX0xJTUlUKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBzdGVwcyA9IG5ldyBJbnQzMkFycmF5KFswLCB3aWR0aDEsIC0xLCAwLCAtd2lkdGgxLCAwLCAwLCAwLCAxXSk7XG4gIGNvbnN0IG91dGxpbmVzID0gW107XG5cbiAgZm9yIChpID0gMDsgY291bnQgJiYgaSA8PSBoZWlnaHQ7IGkrKykge1xuICAgIGxldCBwID0gaSAqIHdpZHRoMTtcbiAgICBjb25zdCBlbmQgPSBwICsgd2lkdGg7XG5cbiAgICB3aGlsZSAocCA8IGVuZCAmJiAhcG9pbnRzW3BdKSB7XG4gICAgICBwKys7XG4gICAgfVxuXG4gICAgaWYgKHAgPT09IGVuZCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgY29vcmRzID0gW3AgJSB3aWR0aDEsIGldO1xuICAgIGNvbnN0IHAwID0gcDtcbiAgICBsZXQgdHlwZSA9IHBvaW50c1twXTtcblxuICAgIGRvIHtcbiAgICAgIGNvbnN0IHN0ZXAgPSBzdGVwc1t0eXBlXTtcblxuICAgICAgZG8ge1xuICAgICAgICBwICs9IHN0ZXA7XG4gICAgICB9IHdoaWxlICghcG9pbnRzW3BdKTtcblxuICAgICAgY29uc3QgcHAgPSBwb2ludHNbcF07XG5cbiAgICAgIGlmIChwcCAhPT0gNSAmJiBwcCAhPT0gMTApIHtcbiAgICAgICAgdHlwZSA9IHBwO1xuICAgICAgICBwb2ludHNbcF0gPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHlwZSA9IHBwICYgMHgzMyAqIHR5cGUgPj4gNDtcbiAgICAgICAgcG9pbnRzW3BdICY9IHR5cGUgPj4gMiB8IHR5cGUgPDwgMjtcbiAgICAgIH1cblxuICAgICAgY29vcmRzLnB1c2gocCAlIHdpZHRoMSwgcCAvIHdpZHRoMSB8IDApO1xuXG4gICAgICBpZiAoIXBvaW50c1twXSkge1xuICAgICAgICAtLWNvdW50O1xuICAgICAgfVxuICAgIH0gd2hpbGUgKHAwICE9PSBwKTtcblxuICAgIG91dGxpbmVzLnB1c2goY29vcmRzKTtcbiAgICAtLWk7XG4gIH1cblxuICBjb25zdCBkcmF3T3V0bGluZSA9IGZ1bmN0aW9uIChjKSB7XG4gICAgYy5zYXZlKCk7XG4gICAgYy5zY2FsZSgxIC8gd2lkdGgsIC0xIC8gaGVpZ2h0KTtcbiAgICBjLnRyYW5zbGF0ZSgwLCAtaGVpZ2h0KTtcbiAgICBjLmJlZ2luUGF0aCgpO1xuXG4gICAgZm9yIChsZXQgayA9IDAsIGtrID0gb3V0bGluZXMubGVuZ3RoOyBrIDwga2s7IGsrKykge1xuICAgICAgY29uc3QgbyA9IG91dGxpbmVzW2tdO1xuICAgICAgYy5tb3ZlVG8ob1swXSwgb1sxXSk7XG5cbiAgICAgIGZvciAobGV0IGwgPSAyLCBsbCA9IG8ubGVuZ3RoOyBsIDwgbGw7IGwgKz0gMikge1xuICAgICAgICBjLmxpbmVUbyhvW2xdLCBvW2wgKyAxXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYy5maWxsKCk7XG4gICAgYy5iZWdpblBhdGgoKTtcbiAgICBjLnJlc3RvcmUoKTtcbiAgfTtcblxuICByZXR1cm4gZHJhd091dGxpbmU7XG59XG5cbmNsYXNzIENhbnZhc0V4dHJhU3RhdGUge1xuICBjb25zdHJ1Y3Rvcih3aWR0aCwgaGVpZ2h0KSB7XG4gICAgdGhpcy5hbHBoYUlzU2hhcGUgPSBmYWxzZTtcbiAgICB0aGlzLmZvbnRTaXplID0gMDtcbiAgICB0aGlzLmZvbnRTaXplU2NhbGUgPSAxO1xuICAgIHRoaXMudGV4dE1hdHJpeCA9IF91dGlsLklERU5USVRZX01BVFJJWDtcbiAgICB0aGlzLnRleHRNYXRyaXhTY2FsZSA9IDE7XG4gICAgdGhpcy5mb250TWF0cml4ID0gX3V0aWwuRk9OVF9JREVOVElUWV9NQVRSSVg7XG4gICAgdGhpcy5sZWFkaW5nID0gMDtcbiAgICB0aGlzLnggPSAwO1xuICAgIHRoaXMueSA9IDA7XG4gICAgdGhpcy5saW5lWCA9IDA7XG4gICAgdGhpcy5saW5lWSA9IDA7XG4gICAgdGhpcy5jaGFyU3BhY2luZyA9IDA7XG4gICAgdGhpcy53b3JkU3BhY2luZyA9IDA7XG4gICAgdGhpcy50ZXh0SFNjYWxlID0gMTtcbiAgICB0aGlzLnRleHRSZW5kZXJpbmdNb2RlID0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuRklMTDtcbiAgICB0aGlzLnRleHRSaXNlID0gMDtcbiAgICB0aGlzLmZpbGxDb2xvciA9IFwiIzAwMDAwMFwiO1xuICAgIHRoaXMuc3Ryb2tlQ29sb3IgPSBcIiMwMDAwMDBcIjtcbiAgICB0aGlzLnBhdHRlcm5GaWxsID0gZmFsc2U7XG4gICAgdGhpcy5maWxsQWxwaGEgPSAxO1xuICAgIHRoaXMuc3Ryb2tlQWxwaGEgPSAxO1xuICAgIHRoaXMubGluZVdpZHRoID0gMTtcbiAgICB0aGlzLmFjdGl2ZVNNYXNrID0gbnVsbDtcbiAgICB0aGlzLnRyYW5zZmVyTWFwcyA9IG51bGw7XG4gICAgdGhpcy5zdGFydE5ld1BhdGhBbmRDbGlwQm94KFswLCAwLCB3aWR0aCwgaGVpZ2h0XSk7XG4gIH1cblxuICBjbG9uZSgpIHtcbiAgICBjb25zdCBjbG9uZSA9IE9iamVjdC5jcmVhdGUodGhpcyk7XG4gICAgY2xvbmUuY2xpcEJveCA9IHRoaXMuY2xpcEJveC5zbGljZSgpO1xuICAgIHJldHVybiBjbG9uZTtcbiAgfVxuXG4gIHNldEN1cnJlbnRQb2ludCh4LCB5KSB7XG4gICAgdGhpcy54ID0geDtcbiAgICB0aGlzLnkgPSB5O1xuICB9XG5cbiAgdXBkYXRlUGF0aE1pbk1heCh0cmFuc2Zvcm0sIHgsIHkpIHtcbiAgICBbeCwgeV0gPSBfdXRpbC5VdGlsLmFwcGx5VHJhbnNmb3JtKFt4LCB5XSwgdHJhbnNmb3JtKTtcbiAgICB0aGlzLm1pblggPSBNYXRoLm1pbih0aGlzLm1pblgsIHgpO1xuICAgIHRoaXMubWluWSA9IE1hdGgubWluKHRoaXMubWluWSwgeSk7XG4gICAgdGhpcy5tYXhYID0gTWF0aC5tYXgodGhpcy5tYXhYLCB4KTtcbiAgICB0aGlzLm1heFkgPSBNYXRoLm1heCh0aGlzLm1heFksIHkpO1xuICB9XG5cbiAgdXBkYXRlQ3VydmVQYXRoTWluTWF4KHRyYW5zZm9ybSwgeDAsIHkwLCB4MSwgeTEsIHgyLCB5MiwgeDMsIHkzKSB7XG4gICAgY29uc3QgYm94ID0gX3V0aWwuVXRpbC5iZXppZXJCb3VuZGluZ0JveCh4MCwgeTAsIHgxLCB5MSwgeDIsIHkyLCB4MywgeTMpO1xuXG4gICAgdGhpcy51cGRhdGVQYXRoTWluTWF4KHRyYW5zZm9ybSwgYm94WzBdLCBib3hbMV0pO1xuICAgIHRoaXMudXBkYXRlUGF0aE1pbk1heCh0cmFuc2Zvcm0sIGJveFsyXSwgYm94WzNdKTtcbiAgfVxuXG4gIGdldFBhdGhCb3VuZGluZ0JveChwYXRoVHlwZSA9IF9wYXR0ZXJuX2hlbHBlci5QYXRoVHlwZS5GSUxMLCB0cmFuc2Zvcm0gPSBudWxsKSB7XG4gICAgY29uc3QgYm94ID0gW3RoaXMubWluWCwgdGhpcy5taW5ZLCB0aGlzLm1heFgsIHRoaXMubWF4WV07XG5cbiAgICBpZiAocGF0aFR5cGUgPT09IF9wYXR0ZXJuX2hlbHBlci5QYXRoVHlwZS5TVFJPS0UpIHtcbiAgICAgIGlmICghdHJhbnNmb3JtKSB7XG4gICAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJTdHJva2UgYm91bmRpbmcgYm94IG11c3QgaW5jbHVkZSB0cmFuc2Zvcm0uXCIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzY2FsZSA9IF91dGlsLlV0aWwuc2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUodHJhbnNmb3JtKTtcblxuICAgICAgY29uc3QgeFN0cm9rZVBhZCA9IHNjYWxlWzBdICogdGhpcy5saW5lV2lkdGggLyAyO1xuICAgICAgY29uc3QgeVN0cm9rZVBhZCA9IHNjYWxlWzFdICogdGhpcy5saW5lV2lkdGggLyAyO1xuICAgICAgYm94WzBdIC09IHhTdHJva2VQYWQ7XG4gICAgICBib3hbMV0gLT0geVN0cm9rZVBhZDtcbiAgICAgIGJveFsyXSArPSB4U3Ryb2tlUGFkO1xuICAgICAgYm94WzNdICs9IHlTdHJva2VQYWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJveDtcbiAgfVxuXG4gIHVwZGF0ZUNsaXBGcm9tUGF0aCgpIHtcbiAgICBjb25zdCBpbnRlcnNlY3QgPSBfdXRpbC5VdGlsLmludGVyc2VjdCh0aGlzLmNsaXBCb3gsIHRoaXMuZ2V0UGF0aEJvdW5kaW5nQm94KCkpO1xuXG4gICAgdGhpcy5zdGFydE5ld1BhdGhBbmRDbGlwQm94KGludGVyc2VjdCB8fCBbMCwgMCwgMCwgMF0pO1xuICB9XG5cbiAgc3RhcnROZXdQYXRoQW5kQ2xpcEJveChib3gpIHtcbiAgICB0aGlzLmNsaXBCb3ggPSBib3g7XG4gICAgdGhpcy5taW5YID0gSW5maW5pdHk7XG4gICAgdGhpcy5taW5ZID0gSW5maW5pdHk7XG4gICAgdGhpcy5tYXhYID0gMDtcbiAgICB0aGlzLm1heFkgPSAwO1xuICB9XG5cbiAgZ2V0Q2xpcHBlZFBhdGhCb3VuZGluZ0JveChwYXRoVHlwZSA9IF9wYXR0ZXJuX2hlbHBlci5QYXRoVHlwZS5GSUxMLCB0cmFuc2Zvcm0gPSBudWxsKSB7XG4gICAgcmV0dXJuIF91dGlsLlV0aWwuaW50ZXJzZWN0KHRoaXMuY2xpcEJveCwgdGhpcy5nZXRQYXRoQm91bmRpbmdCb3gocGF0aFR5cGUsIHRyYW5zZm9ybSkpO1xuICB9XG5cbn1cblxuZnVuY3Rpb24gcHV0QmluYXJ5SW1hZ2VEYXRhKGN0eCwgaW1nRGF0YSwgdHJhbnNmZXJNYXBzID0gbnVsbCkge1xuICBpZiAodHlwZW9mIEltYWdlRGF0YSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBpbWdEYXRhIGluc3RhbmNlb2YgSW1hZ2VEYXRhKSB7XG4gICAgY3R4LnB1dEltYWdlRGF0YShpbWdEYXRhLCAwLCAwKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBoZWlnaHQgPSBpbWdEYXRhLmhlaWdodCxcbiAgICAgICAgd2lkdGggPSBpbWdEYXRhLndpZHRoO1xuICBjb25zdCBwYXJ0aWFsQ2h1bmtIZWlnaHQgPSBoZWlnaHQgJSBGVUxMX0NIVU5LX0hFSUdIVDtcbiAgY29uc3QgZnVsbENodW5rcyA9IChoZWlnaHQgLSBwYXJ0aWFsQ2h1bmtIZWlnaHQpIC8gRlVMTF9DSFVOS19IRUlHSFQ7XG4gIGNvbnN0IHRvdGFsQ2h1bmtzID0gcGFydGlhbENodW5rSGVpZ2h0ID09PSAwID8gZnVsbENodW5rcyA6IGZ1bGxDaHVua3MgKyAxO1xuICBjb25zdCBjaHVua0ltZ0RhdGEgPSBjdHguY3JlYXRlSW1hZ2VEYXRhKHdpZHRoLCBGVUxMX0NIVU5LX0hFSUdIVCk7XG4gIGxldCBzcmNQb3MgPSAwLFxuICAgICAgZGVzdFBvcztcbiAgY29uc3Qgc3JjID0gaW1nRGF0YS5kYXRhO1xuICBjb25zdCBkZXN0ID0gY2h1bmtJbWdEYXRhLmRhdGE7XG4gIGxldCBpLCBqLCB0aGlzQ2h1bmtIZWlnaHQsIGVsZW1zSW5UaGlzQ2h1bms7XG4gIGxldCB0cmFuc2Zlck1hcFJlZCwgdHJhbnNmZXJNYXBHcmVlbiwgdHJhbnNmZXJNYXBCbHVlLCB0cmFuc2Zlck1hcEdyYXk7XG5cbiAgaWYgKHRyYW5zZmVyTWFwcykge1xuICAgIHN3aXRjaCAodHJhbnNmZXJNYXBzLmxlbmd0aCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICB0cmFuc2Zlck1hcFJlZCA9IHRyYW5zZmVyTWFwc1swXTtcbiAgICAgICAgdHJhbnNmZXJNYXBHcmVlbiA9IHRyYW5zZmVyTWFwc1swXTtcbiAgICAgICAgdHJhbnNmZXJNYXBCbHVlID0gdHJhbnNmZXJNYXBzWzBdO1xuICAgICAgICB0cmFuc2Zlck1hcEdyYXkgPSB0cmFuc2Zlck1hcHNbMF07XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDQ6XG4gICAgICAgIHRyYW5zZmVyTWFwUmVkID0gdHJhbnNmZXJNYXBzWzBdO1xuICAgICAgICB0cmFuc2Zlck1hcEdyZWVuID0gdHJhbnNmZXJNYXBzWzFdO1xuICAgICAgICB0cmFuc2Zlck1hcEJsdWUgPSB0cmFuc2Zlck1hcHNbMl07XG4gICAgICAgIHRyYW5zZmVyTWFwR3JheSA9IHRyYW5zZmVyTWFwc1szXTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKGltZ0RhdGEua2luZCA9PT0gX3V0aWwuSW1hZ2VLaW5kLkdSQVlTQ0FMRV8xQlBQKSB7XG4gICAgY29uc3Qgc3JjTGVuZ3RoID0gc3JjLmJ5dGVMZW5ndGg7XG4gICAgY29uc3QgZGVzdDMyID0gbmV3IFVpbnQzMkFycmF5KGRlc3QuYnVmZmVyLCAwLCBkZXN0LmJ5dGVMZW5ndGggPj4gMik7XG4gICAgY29uc3QgZGVzdDMyRGF0YUxlbmd0aCA9IGRlc3QzMi5sZW5ndGg7XG4gICAgY29uc3QgZnVsbFNyY0RpZmYgPSB3aWR0aCArIDcgPj4gMztcbiAgICBsZXQgd2hpdGUgPSAweGZmZmZmZmZmO1xuICAgIGxldCBibGFjayA9IF91dGlsLklzTGl0dGxlRW5kaWFuQ2FjaGVkLnZhbHVlID8gMHhmZjAwMDAwMCA6IDB4MDAwMDAwZmY7XG5cbiAgICBpZiAodHJhbnNmZXJNYXBHcmF5KSB7XG4gICAgICBpZiAodHJhbnNmZXJNYXBHcmF5WzBdID09PSAweGZmICYmIHRyYW5zZmVyTWFwR3JheVsweGZmXSA9PT0gMCkge1xuICAgICAgICBbd2hpdGUsIGJsYWNrXSA9IFtibGFjaywgd2hpdGVdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCB0b3RhbENodW5rczsgaSsrKSB7XG4gICAgICB0aGlzQ2h1bmtIZWlnaHQgPSBpIDwgZnVsbENodW5rcyA/IEZVTExfQ0hVTktfSEVJR0hUIDogcGFydGlhbENodW5rSGVpZ2h0O1xuICAgICAgZGVzdFBvcyA9IDA7XG5cbiAgICAgIGZvciAoaiA9IDA7IGogPCB0aGlzQ2h1bmtIZWlnaHQ7IGorKykge1xuICAgICAgICBjb25zdCBzcmNEaWZmID0gc3JjTGVuZ3RoIC0gc3JjUG9zO1xuICAgICAgICBsZXQgayA9IDA7XG4gICAgICAgIGNvbnN0IGtFbmQgPSBzcmNEaWZmID4gZnVsbFNyY0RpZmYgPyB3aWR0aCA6IHNyY0RpZmYgKiA4IC0gNztcbiAgICAgICAgY29uc3Qga0VuZFVucm9sbGVkID0ga0VuZCAmIH43O1xuICAgICAgICBsZXQgbWFzayA9IDA7XG4gICAgICAgIGxldCBzcmNCeXRlID0gMDtcblxuICAgICAgICBmb3IgKDsgayA8IGtFbmRVbnJvbGxlZDsgayArPSA4KSB7XG4gICAgICAgICAgc3JjQnl0ZSA9IHNyY1tzcmNQb3MrK107XG4gICAgICAgICAgZGVzdDMyW2Rlc3RQb3MrK10gPSBzcmNCeXRlICYgMTI4ID8gd2hpdGUgOiBibGFjaztcbiAgICAgICAgICBkZXN0MzJbZGVzdFBvcysrXSA9IHNyY0J5dGUgJiA2NCA/IHdoaXRlIDogYmxhY2s7XG4gICAgICAgICAgZGVzdDMyW2Rlc3RQb3MrK10gPSBzcmNCeXRlICYgMzIgPyB3aGl0ZSA6IGJsYWNrO1xuICAgICAgICAgIGRlc3QzMltkZXN0UG9zKytdID0gc3JjQnl0ZSAmIDE2ID8gd2hpdGUgOiBibGFjaztcbiAgICAgICAgICBkZXN0MzJbZGVzdFBvcysrXSA9IHNyY0J5dGUgJiA4ID8gd2hpdGUgOiBibGFjaztcbiAgICAgICAgICBkZXN0MzJbZGVzdFBvcysrXSA9IHNyY0J5dGUgJiA0ID8gd2hpdGUgOiBibGFjaztcbiAgICAgICAgICBkZXN0MzJbZGVzdFBvcysrXSA9IHNyY0J5dGUgJiAyID8gd2hpdGUgOiBibGFjaztcbiAgICAgICAgICBkZXN0MzJbZGVzdFBvcysrXSA9IHNyY0J5dGUgJiAxID8gd2hpdGUgOiBibGFjaztcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoOyBrIDwga0VuZDsgaysrKSB7XG4gICAgICAgICAgaWYgKG1hc2sgPT09IDApIHtcbiAgICAgICAgICAgIHNyY0J5dGUgPSBzcmNbc3JjUG9zKytdO1xuICAgICAgICAgICAgbWFzayA9IDEyODtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkZXN0MzJbZGVzdFBvcysrXSA9IHNyY0J5dGUgJiBtYXNrID8gd2hpdGUgOiBibGFjaztcbiAgICAgICAgICBtYXNrID4+PSAxO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChkZXN0UG9zIDwgZGVzdDMyRGF0YUxlbmd0aCkge1xuICAgICAgICBkZXN0MzJbZGVzdFBvcysrXSA9IDA7XG4gICAgICB9XG5cbiAgICAgIGN0eC5wdXRJbWFnZURhdGEoY2h1bmtJbWdEYXRhLCAwLCBpICogRlVMTF9DSFVOS19IRUlHSFQpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpbWdEYXRhLmtpbmQgPT09IF91dGlsLkltYWdlS2luZC5SR0JBXzMyQlBQKSB7XG4gICAgY29uc3QgaGFzVHJhbnNmZXJNYXBzID0gISEodHJhbnNmZXJNYXBSZWQgfHwgdHJhbnNmZXJNYXBHcmVlbiB8fCB0cmFuc2Zlck1hcEJsdWUpO1xuICAgIGogPSAwO1xuICAgIGVsZW1zSW5UaGlzQ2h1bmsgPSB3aWR0aCAqIEZVTExfQ0hVTktfSEVJR0hUICogNDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBmdWxsQ2h1bmtzOyBpKyspIHtcbiAgICAgIGRlc3Quc2V0KHNyYy5zdWJhcnJheShzcmNQb3MsIHNyY1BvcyArIGVsZW1zSW5UaGlzQ2h1bmspKTtcbiAgICAgIHNyY1BvcyArPSBlbGVtc0luVGhpc0NodW5rO1xuXG4gICAgICBpZiAoaGFzVHJhbnNmZXJNYXBzKSB7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgZWxlbXNJblRoaXNDaHVuazsgayArPSA0KSB7XG4gICAgICAgICAgaWYgKHRyYW5zZmVyTWFwUmVkKSB7XG4gICAgICAgICAgICBkZXN0W2sgKyAwXSA9IHRyYW5zZmVyTWFwUmVkW2Rlc3RbayArIDBdXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHJhbnNmZXJNYXBHcmVlbikge1xuICAgICAgICAgICAgZGVzdFtrICsgMV0gPSB0cmFuc2Zlck1hcEdyZWVuW2Rlc3RbayArIDFdXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHJhbnNmZXJNYXBCbHVlKSB7XG4gICAgICAgICAgICBkZXN0W2sgKyAyXSA9IHRyYW5zZmVyTWFwQmx1ZVtkZXN0W2sgKyAyXV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGN0eC5wdXRJbWFnZURhdGEoY2h1bmtJbWdEYXRhLCAwLCBqKTtcbiAgICAgIGogKz0gRlVMTF9DSFVOS19IRUlHSFQ7XG4gICAgfVxuXG4gICAgaWYgKGkgPCB0b3RhbENodW5rcykge1xuICAgICAgZWxlbXNJblRoaXNDaHVuayA9IHdpZHRoICogcGFydGlhbENodW5rSGVpZ2h0ICogNDtcbiAgICAgIGRlc3Quc2V0KHNyYy5zdWJhcnJheShzcmNQb3MsIHNyY1BvcyArIGVsZW1zSW5UaGlzQ2h1bmspKTtcblxuICAgICAgaWYgKGhhc1RyYW5zZmVyTWFwcykge1xuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGVsZW1zSW5UaGlzQ2h1bms7IGsgKz0gNCkge1xuICAgICAgICAgIGlmICh0cmFuc2Zlck1hcFJlZCkge1xuICAgICAgICAgICAgZGVzdFtrICsgMF0gPSB0cmFuc2Zlck1hcFJlZFtkZXN0W2sgKyAwXV07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRyYW5zZmVyTWFwR3JlZW4pIHtcbiAgICAgICAgICAgIGRlc3RbayArIDFdID0gdHJhbnNmZXJNYXBHcmVlbltkZXN0W2sgKyAxXV07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRyYW5zZmVyTWFwQmx1ZSkge1xuICAgICAgICAgICAgZGVzdFtrICsgMl0gPSB0cmFuc2Zlck1hcEJsdWVbZGVzdFtrICsgMl1dO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjdHgucHV0SW1hZ2VEYXRhKGNodW5rSW1nRGF0YSwgMCwgaik7XG4gICAgfVxuICB9IGVsc2UgaWYgKGltZ0RhdGEua2luZCA9PT0gX3V0aWwuSW1hZ2VLaW5kLlJHQl8yNEJQUCkge1xuICAgIGNvbnN0IGhhc1RyYW5zZmVyTWFwcyA9ICEhKHRyYW5zZmVyTWFwUmVkIHx8IHRyYW5zZmVyTWFwR3JlZW4gfHwgdHJhbnNmZXJNYXBCbHVlKTtcbiAgICB0aGlzQ2h1bmtIZWlnaHQgPSBGVUxMX0NIVU5LX0hFSUdIVDtcbiAgICBlbGVtc0luVGhpc0NodW5rID0gd2lkdGggKiB0aGlzQ2h1bmtIZWlnaHQ7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdG90YWxDaHVua3M7IGkrKykge1xuICAgICAgaWYgKGkgPj0gZnVsbENodW5rcykge1xuICAgICAgICB0aGlzQ2h1bmtIZWlnaHQgPSBwYXJ0aWFsQ2h1bmtIZWlnaHQ7XG4gICAgICAgIGVsZW1zSW5UaGlzQ2h1bmsgPSB3aWR0aCAqIHRoaXNDaHVua0hlaWdodDtcbiAgICAgIH1cblxuICAgICAgZGVzdFBvcyA9IDA7XG5cbiAgICAgIGZvciAoaiA9IGVsZW1zSW5UaGlzQ2h1bms7IGotLTspIHtcbiAgICAgICAgZGVzdFtkZXN0UG9zKytdID0gc3JjW3NyY1BvcysrXTtcbiAgICAgICAgZGVzdFtkZXN0UG9zKytdID0gc3JjW3NyY1BvcysrXTtcbiAgICAgICAgZGVzdFtkZXN0UG9zKytdID0gc3JjW3NyY1BvcysrXTtcbiAgICAgICAgZGVzdFtkZXN0UG9zKytdID0gMjU1O1xuICAgICAgfVxuXG4gICAgICBpZiAoaGFzVHJhbnNmZXJNYXBzKSB7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgZGVzdFBvczsgayArPSA0KSB7XG4gICAgICAgICAgaWYgKHRyYW5zZmVyTWFwUmVkKSB7XG4gICAgICAgICAgICBkZXN0W2sgKyAwXSA9IHRyYW5zZmVyTWFwUmVkW2Rlc3RbayArIDBdXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHJhbnNmZXJNYXBHcmVlbikge1xuICAgICAgICAgICAgZGVzdFtrICsgMV0gPSB0cmFuc2Zlck1hcEdyZWVuW2Rlc3RbayArIDFdXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHJhbnNmZXJNYXBCbHVlKSB7XG4gICAgICAgICAgICBkZXN0W2sgKyAyXSA9IHRyYW5zZmVyTWFwQmx1ZVtkZXN0W2sgKyAyXV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGN0eC5wdXRJbWFnZURhdGEoY2h1bmtJbWdEYXRhLCAwLCBpICogRlVMTF9DSFVOS19IRUlHSFQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGJhZCBpbWFnZSBraW5kOiAke2ltZ0RhdGEua2luZH1gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwdXRCaW5hcnlJbWFnZU1hc2soY3R4LCBpbWdEYXRhKSB7XG4gIGNvbnN0IGhlaWdodCA9IGltZ0RhdGEuaGVpZ2h0LFxuICAgICAgICB3aWR0aCA9IGltZ0RhdGEud2lkdGg7XG4gIGNvbnN0IHBhcnRpYWxDaHVua0hlaWdodCA9IGhlaWdodCAlIEZVTExfQ0hVTktfSEVJR0hUO1xuICBjb25zdCBmdWxsQ2h1bmtzID0gKGhlaWdodCAtIHBhcnRpYWxDaHVua0hlaWdodCkgLyBGVUxMX0NIVU5LX0hFSUdIVDtcbiAgY29uc3QgdG90YWxDaHVua3MgPSBwYXJ0aWFsQ2h1bmtIZWlnaHQgPT09IDAgPyBmdWxsQ2h1bmtzIDogZnVsbENodW5rcyArIDE7XG4gIGNvbnN0IGNodW5rSW1nRGF0YSA9IGN0eC5jcmVhdGVJbWFnZURhdGEod2lkdGgsIEZVTExfQ0hVTktfSEVJR0hUKTtcbiAgbGV0IHNyY1BvcyA9IDA7XG4gIGNvbnN0IHNyYyA9IGltZ0RhdGEuZGF0YTtcbiAgY29uc3QgZGVzdCA9IGNodW5rSW1nRGF0YS5kYXRhO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdG90YWxDaHVua3M7IGkrKykge1xuICAgIGNvbnN0IHRoaXNDaHVua0hlaWdodCA9IGkgPCBmdWxsQ2h1bmtzID8gRlVMTF9DSFVOS19IRUlHSFQgOiBwYXJ0aWFsQ2h1bmtIZWlnaHQ7XG4gICAgbGV0IGRlc3RQb3MgPSAzO1xuXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzQ2h1bmtIZWlnaHQ7IGorKykge1xuICAgICAgbGV0IGVsZW0sXG4gICAgICAgICAgbWFzayA9IDA7XG5cbiAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgd2lkdGg7IGsrKykge1xuICAgICAgICBpZiAoIW1hc2spIHtcbiAgICAgICAgICBlbGVtID0gc3JjW3NyY1BvcysrXTtcbiAgICAgICAgICBtYXNrID0gMTI4O1xuICAgICAgICB9XG5cbiAgICAgICAgZGVzdFtkZXN0UG9zXSA9IGVsZW0gJiBtYXNrID8gMCA6IDI1NTtcbiAgICAgICAgZGVzdFBvcyArPSA0O1xuICAgICAgICBtYXNrID4+PSAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIGN0eC5wdXRJbWFnZURhdGEoY2h1bmtJbWdEYXRhLCAwLCBpICogRlVMTF9DSFVOS19IRUlHSFQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvcHlDdHhTdGF0ZShzb3VyY2VDdHgsIGRlc3RDdHgpIHtcbiAgY29uc3QgcHJvcGVydGllcyA9IFtcInN0cm9rZVN0eWxlXCIsIFwiZmlsbFN0eWxlXCIsIFwiZmlsbFJ1bGVcIiwgXCJnbG9iYWxBbHBoYVwiLCBcImxpbmVXaWR0aFwiLCBcImxpbmVDYXBcIiwgXCJsaW5lSm9pblwiLCBcIm1pdGVyTGltaXRcIiwgXCJnbG9iYWxDb21wb3NpdGVPcGVyYXRpb25cIiwgXCJmb250XCJdO1xuXG4gIGZvciAobGV0IGkgPSAwLCBpaSA9IHByb3BlcnRpZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgIGNvbnN0IHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTtcblxuICAgIGlmIChzb3VyY2VDdHhbcHJvcGVydHldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlc3RDdHhbcHJvcGVydHldID0gc291cmNlQ3R4W3Byb3BlcnR5XTtcbiAgICB9XG4gIH1cblxuICBpZiAoc291cmNlQ3R4LnNldExpbmVEYXNoICE9PSB1bmRlZmluZWQpIHtcbiAgICBkZXN0Q3R4LnNldExpbmVEYXNoKHNvdXJjZUN0eC5nZXRMaW5lRGFzaCgpKTtcbiAgICBkZXN0Q3R4LmxpbmVEYXNoT2Zmc2V0ID0gc291cmNlQ3R4LmxpbmVEYXNoT2Zmc2V0O1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc2V0Q3R4VG9EZWZhdWx0KGN0eCkge1xuICBjdHguc3Ryb2tlU3R5bGUgPSBcIiMwMDAwMDBcIjtcbiAgY3R4LmZpbGxTdHlsZSA9IFwiIzAwMDAwMFwiO1xuICBjdHguZmlsbFJ1bGUgPSBcIm5vbnplcm9cIjtcbiAgY3R4Lmdsb2JhbEFscGhhID0gMTtcbiAgY3R4LmxpbmVXaWR0aCA9IDE7XG4gIGN0eC5saW5lQ2FwID0gXCJidXR0XCI7XG4gIGN0eC5saW5lSm9pbiA9IFwibWl0ZXJcIjtcbiAgY3R4Lm1pdGVyTGltaXQgPSAxMDtcbiAgY3R4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IFwic291cmNlLW92ZXJcIjtcbiAgY3R4LmZvbnQgPSBcIjEwcHggc2Fucy1zZXJpZlwiO1xuXG4gIGlmIChjdHguc2V0TGluZURhc2ggIT09IHVuZGVmaW5lZCkge1xuICAgIGN0eC5zZXRMaW5lRGFzaChbXSk7XG4gICAgY3R4LmxpbmVEYXNoT2Zmc2V0ID0gMDtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21wb3NlU01hc2tCYWNrZHJvcChieXRlcywgcjAsIGcwLCBiMCkge1xuICBjb25zdCBsZW5ndGggPSBieXRlcy5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaSA9IDM7IGkgPCBsZW5ndGg7IGkgKz0gNCkge1xuICAgIGNvbnN0IGFscGhhID0gYnl0ZXNbaV07XG5cbiAgICBpZiAoYWxwaGEgPT09IDApIHtcbiAgICAgIGJ5dGVzW2kgLSAzXSA9IHIwO1xuICAgICAgYnl0ZXNbaSAtIDJdID0gZzA7XG4gICAgICBieXRlc1tpIC0gMV0gPSBiMDtcbiAgICB9IGVsc2UgaWYgKGFscGhhIDwgMjU1KSB7XG4gICAgICBjb25zdCBhbHBoYV8gPSAyNTUgLSBhbHBoYTtcbiAgICAgIGJ5dGVzW2kgLSAzXSA9IGJ5dGVzW2kgLSAzXSAqIGFscGhhICsgcjAgKiBhbHBoYV8gPj4gODtcbiAgICAgIGJ5dGVzW2kgLSAyXSA9IGJ5dGVzW2kgLSAyXSAqIGFscGhhICsgZzAgKiBhbHBoYV8gPj4gODtcbiAgICAgIGJ5dGVzW2kgLSAxXSA9IGJ5dGVzW2kgLSAxXSAqIGFscGhhICsgYjAgKiBhbHBoYV8gPj4gODtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcG9zZVNNYXNrQWxwaGEobWFza0RhdGEsIGxheWVyRGF0YSwgdHJhbnNmZXJNYXApIHtcbiAgY29uc3QgbGVuZ3RoID0gbWFza0RhdGEubGVuZ3RoO1xuICBjb25zdCBzY2FsZSA9IDEgLyAyNTU7XG5cbiAgZm9yIChsZXQgaSA9IDM7IGkgPCBsZW5ndGg7IGkgKz0gNCkge1xuICAgIGNvbnN0IGFscGhhID0gdHJhbnNmZXJNYXAgPyB0cmFuc2Zlck1hcFttYXNrRGF0YVtpXV0gOiBtYXNrRGF0YVtpXTtcbiAgICBsYXllckRhdGFbaV0gPSBsYXllckRhdGFbaV0gKiBhbHBoYSAqIHNjYWxlIHwgMDtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21wb3NlU01hc2tMdW1pbm9zaXR5KG1hc2tEYXRhLCBsYXllckRhdGEsIHRyYW5zZmVyTWFwKSB7XG4gIGNvbnN0IGxlbmd0aCA9IG1hc2tEYXRhLmxlbmd0aDtcblxuICBmb3IgKGxldCBpID0gMzsgaSA8IGxlbmd0aDsgaSArPSA0KSB7XG4gICAgY29uc3QgeSA9IG1hc2tEYXRhW2kgLSAzXSAqIDc3ICsgbWFza0RhdGFbaSAtIDJdICogMTUyICsgbWFza0RhdGFbaSAtIDFdICogMjg7XG4gICAgbGF5ZXJEYXRhW2ldID0gdHJhbnNmZXJNYXAgPyBsYXllckRhdGFbaV0gKiB0cmFuc2Zlck1hcFt5ID4+IDhdID4+IDggOiBsYXllckRhdGFbaV0gKiB5ID4+IDE2O1xuICB9XG59XG5cbmZ1bmN0aW9uIGdlbmVyaWNDb21wb3NlU01hc2sobWFza0N0eCwgbGF5ZXJDdHgsIHdpZHRoLCBoZWlnaHQsIHN1YnR5cGUsIGJhY2tkcm9wLCB0cmFuc2Zlck1hcCwgbGF5ZXJPZmZzZXRYLCBsYXllck9mZnNldFksIG1hc2tPZmZzZXRYLCBtYXNrT2Zmc2V0WSkge1xuICBjb25zdCBoYXNCYWNrZHJvcCA9ICEhYmFja2Ryb3A7XG4gIGNvbnN0IHIwID0gaGFzQmFja2Ryb3AgPyBiYWNrZHJvcFswXSA6IDA7XG4gIGNvbnN0IGcwID0gaGFzQmFja2Ryb3AgPyBiYWNrZHJvcFsxXSA6IDA7XG4gIGNvbnN0IGIwID0gaGFzQmFja2Ryb3AgPyBiYWNrZHJvcFsyXSA6IDA7XG4gIGxldCBjb21wb3NlRm47XG5cbiAgaWYgKHN1YnR5cGUgPT09IFwiTHVtaW5vc2l0eVwiKSB7XG4gICAgY29tcG9zZUZuID0gY29tcG9zZVNNYXNrTHVtaW5vc2l0eTtcbiAgfSBlbHNlIHtcbiAgICBjb21wb3NlRm4gPSBjb21wb3NlU01hc2tBbHBoYTtcbiAgfVxuXG4gIGNvbnN0IFBJWEVMU19UT19QUk9DRVNTID0gMTA0ODU3NjtcbiAgY29uc3QgY2h1bmtTaXplID0gTWF0aC5taW4oaGVpZ2h0LCBNYXRoLmNlaWwoUElYRUxTX1RPX1BST0NFU1MgLyB3aWR0aCkpO1xuXG4gIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IGhlaWdodDsgcm93ICs9IGNodW5rU2l6ZSkge1xuICAgIGNvbnN0IGNodW5rSGVpZ2h0ID0gTWF0aC5taW4oY2h1bmtTaXplLCBoZWlnaHQgLSByb3cpO1xuICAgIGNvbnN0IG1hc2tEYXRhID0gbWFza0N0eC5nZXRJbWFnZURhdGEobGF5ZXJPZmZzZXRYIC0gbWFza09mZnNldFgsIHJvdyArIChsYXllck9mZnNldFkgLSBtYXNrT2Zmc2V0WSksIHdpZHRoLCBjaHVua0hlaWdodCk7XG4gICAgY29uc3QgbGF5ZXJEYXRhID0gbGF5ZXJDdHguZ2V0SW1hZ2VEYXRhKGxheWVyT2Zmc2V0WCwgcm93ICsgbGF5ZXJPZmZzZXRZLCB3aWR0aCwgY2h1bmtIZWlnaHQpO1xuXG4gICAgaWYgKGhhc0JhY2tkcm9wKSB7XG4gICAgICBjb21wb3NlU01hc2tCYWNrZHJvcChtYXNrRGF0YS5kYXRhLCByMCwgZzAsIGIwKTtcbiAgICB9XG5cbiAgICBjb21wb3NlRm4obWFza0RhdGEuZGF0YSwgbGF5ZXJEYXRhLmRhdGEsIHRyYW5zZmVyTWFwKTtcbiAgICBsYXllckN0eC5wdXRJbWFnZURhdGEobGF5ZXJEYXRhLCBsYXllck9mZnNldFgsIHJvdyArIGxheWVyT2Zmc2V0WSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcG9zZVNNYXNrKGN0eCwgc21hc2ssIGxheWVyQ3R4LCBsYXllckJveCkge1xuICBjb25zdCBsYXllck9mZnNldFggPSBsYXllckJveFswXTtcbiAgY29uc3QgbGF5ZXJPZmZzZXRZID0gbGF5ZXJCb3hbMV07XG4gIGNvbnN0IGxheWVyV2lkdGggPSBsYXllckJveFsyXSAtIGxheWVyT2Zmc2V0WDtcbiAgY29uc3QgbGF5ZXJIZWlnaHQgPSBsYXllckJveFszXSAtIGxheWVyT2Zmc2V0WTtcblxuICBpZiAobGF5ZXJXaWR0aCA9PT0gMCB8fCBsYXllckhlaWdodCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGdlbmVyaWNDb21wb3NlU01hc2soc21hc2suY29udGV4dCwgbGF5ZXJDdHgsIGxheWVyV2lkdGgsIGxheWVySGVpZ2h0LCBzbWFzay5zdWJ0eXBlLCBzbWFzay5iYWNrZHJvcCwgc21hc2sudHJhbnNmZXJNYXAsIGxheWVyT2Zmc2V0WCwgbGF5ZXJPZmZzZXRZLCBzbWFzay5vZmZzZXRYLCBzbWFzay5vZmZzZXRZKTtcbiAgY3R4LnNhdmUoKTtcbiAgY3R4Lmdsb2JhbEFscGhhID0gMTtcbiAgY3R4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IFwic291cmNlLW92ZXJcIjtcbiAgY3R4LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgY3R4LmRyYXdJbWFnZShsYXllckN0eC5jYW52YXMsIDAsIDApO1xuICBjdHgucmVzdG9yZSgpO1xufVxuXG5mdW5jdGlvbiBnZXRJbWFnZVNtb290aGluZ0VuYWJsZWQodHJhbnNmb3JtLCBpbnRlcnBvbGF0ZSkge1xuICBjb25zdCBzY2FsZSA9IF91dGlsLlV0aWwuc2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUodHJhbnNmb3JtKTtcblxuICBzY2FsZVswXSA9IE1hdGguZnJvdW5kKHNjYWxlWzBdKTtcbiAgc2NhbGVbMV0gPSBNYXRoLmZyb3VuZChzY2FsZVsxXSk7XG4gIGNvbnN0IGFjdHVhbFNjYWxlID0gTWF0aC5mcm91bmQoKGdsb2JhbFRoaXMuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxKSAqIF9kaXNwbGF5X3V0aWxzLlBpeGVsc1BlckluY2guUERGX1RPX0NTU19VTklUUyk7XG5cbiAgaWYgKGludGVycG9sYXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gaW50ZXJwb2xhdGU7XG4gIH0gZWxzZSBpZiAoc2NhbGVbMF0gPD0gYWN0dWFsU2NhbGUgfHwgc2NhbGVbMV0gPD0gYWN0dWFsU2NhbGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuY29uc3QgTElORV9DQVBfU1RZTEVTID0gW1wiYnV0dFwiLCBcInJvdW5kXCIsIFwic3F1YXJlXCJdO1xuY29uc3QgTElORV9KT0lOX1NUWUxFUyA9IFtcIm1pdGVyXCIsIFwicm91bmRcIiwgXCJiZXZlbFwiXTtcbmNvbnN0IE5PUk1BTF9DTElQID0ge307XG5jb25zdCBFT19DTElQID0ge307XG5cbmNsYXNzIENhbnZhc0dyYXBoaWNzIHtcbiAgY29uc3RydWN0b3IoY2FudmFzQ3R4LCBjb21tb25PYmpzLCBvYmpzLCBjYW52YXNGYWN0b3J5LCBpbWFnZUxheWVyLCBvcHRpb25hbENvbnRlbnRDb25maWcsIGFubm90YXRpb25DYW52YXNNYXApIHtcbiAgICB0aGlzLmN0eCA9IGNhbnZhc0N0eDtcbiAgICB0aGlzLmN1cnJlbnQgPSBuZXcgQ2FudmFzRXh0cmFTdGF0ZSh0aGlzLmN0eC5jYW52YXMud2lkdGgsIHRoaXMuY3R4LmNhbnZhcy5oZWlnaHQpO1xuICAgIHRoaXMuc3RhdGVTdGFjayA9IFtdO1xuICAgIHRoaXMucGVuZGluZ0NsaXAgPSBudWxsO1xuICAgIHRoaXMucGVuZGluZ0VPRmlsbCA9IGZhbHNlO1xuICAgIHRoaXMucmVzID0gbnVsbDtcbiAgICB0aGlzLnhvYmpzID0gbnVsbDtcbiAgICB0aGlzLmNvbW1vbk9ianMgPSBjb21tb25PYmpzO1xuICAgIHRoaXMub2JqcyA9IG9ianM7XG4gICAgdGhpcy5jYW52YXNGYWN0b3J5ID0gY2FudmFzRmFjdG9yeTtcbiAgICB0aGlzLmltYWdlTGF5ZXIgPSBpbWFnZUxheWVyO1xuICAgIHRoaXMuZ3JvdXBTdGFjayA9IFtdO1xuICAgIHRoaXMucHJvY2Vzc2luZ1R5cGUzID0gbnVsbDtcbiAgICB0aGlzLmJhc2VUcmFuc2Zvcm0gPSBudWxsO1xuICAgIHRoaXMuYmFzZVRyYW5zZm9ybVN0YWNrID0gW107XG4gICAgdGhpcy5ncm91cExldmVsID0gMDtcbiAgICB0aGlzLnNtYXNrU3RhY2sgPSBbXTtcbiAgICB0aGlzLnNtYXNrQ291bnRlciA9IDA7XG4gICAgdGhpcy50ZW1wU01hc2sgPSBudWxsO1xuICAgIHRoaXMuc3VzcGVuZGVkQ3R4ID0gbnVsbDtcbiAgICB0aGlzLmNvbnRlbnRWaXNpYmxlID0gdHJ1ZTtcbiAgICB0aGlzLm1hcmtlZENvbnRlbnRTdGFjayA9IFtdO1xuICAgIHRoaXMub3B0aW9uYWxDb250ZW50Q29uZmlnID0gb3B0aW9uYWxDb250ZW50Q29uZmlnO1xuICAgIHRoaXMuY2FjaGVkQ2FudmFzZXMgPSBuZXcgQ2FjaGVkQ2FudmFzZXModGhpcy5jYW52YXNGYWN0b3J5KTtcbiAgICB0aGlzLmNhY2hlZFBhdHRlcm5zID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuYW5ub3RhdGlvbkNhbnZhc01hcCA9IGFubm90YXRpb25DYW52YXNNYXA7XG4gICAgdGhpcy52aWV3cG9ydFNjYWxlID0gMTtcbiAgICB0aGlzLm91dHB1dFNjYWxlWCA9IDE7XG4gICAgdGhpcy5vdXRwdXRTY2FsZVkgPSAxO1xuXG4gICAgaWYgKGNhbnZhc0N0eCkge1xuICAgICAgYWRkQ29udGV4dEN1cnJlbnRUcmFuc2Zvcm0oY2FudmFzQ3R4KTtcbiAgICB9XG5cbiAgICB0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoID0gbnVsbDtcbiAgfVxuXG4gIGJlZ2luRHJhd2luZyh7XG4gICAgdHJhbnNmb3JtLFxuICAgIHZpZXdwb3J0LFxuICAgIHRyYW5zcGFyZW5jeSA9IGZhbHNlLFxuICAgIGJhY2tncm91bmQgPSBudWxsXG4gIH0pIHtcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMuY3R4LmNhbnZhcy53aWR0aDtcbiAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmN0eC5jYW52YXMuaGVpZ2h0O1xuICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICB0aGlzLmN0eC5maWxsU3R5bGUgPSBiYWNrZ3JvdW5kIHx8IFwicmdiKDI1NSwgMjU1LCAyNTUpXCI7XG4gICAgdGhpcy5jdHguZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuXG4gICAgaWYgKHRyYW5zcGFyZW5jeSkge1xuICAgICAgY29uc3QgdHJhbnNwYXJlbnRDYW52YXMgPSB0aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcyhcInRyYW5zcGFyZW50XCIsIHdpZHRoLCBoZWlnaHQsIHRydWUpO1xuICAgICAgdGhpcy5jb21wb3NpdGVDdHggPSB0aGlzLmN0eDtcbiAgICAgIHRoaXMudHJhbnNwYXJlbnRDYW52YXMgPSB0cmFuc3BhcmVudENhbnZhcy5jYW52YXM7XG4gICAgICB0aGlzLmN0eCA9IHRyYW5zcGFyZW50Q2FudmFzLmNvbnRleHQ7XG4gICAgICB0aGlzLmN0eC5zYXZlKCk7XG4gICAgICB0aGlzLmN0eC50cmFuc2Zvcm0uYXBwbHkodGhpcy5jdHgsIHRoaXMuY29tcG9zaXRlQ3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm0pO1xuICAgIH1cblxuICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICByZXNldEN0eFRvRGVmYXVsdCh0aGlzLmN0eCk7XG5cbiAgICBpZiAodHJhbnNmb3JtKSB7XG4gICAgICB0aGlzLmN0eC50cmFuc2Zvcm0uYXBwbHkodGhpcy5jdHgsIHRyYW5zZm9ybSk7XG4gICAgICB0aGlzLm91dHB1dFNjYWxlWCA9IHRyYW5zZm9ybVswXTtcbiAgICAgIHRoaXMub3V0cHV0U2NhbGVZID0gdHJhbnNmb3JtWzBdO1xuICAgIH1cblxuICAgIHRoaXMuY3R4LnRyYW5zZm9ybS5hcHBseSh0aGlzLmN0eCwgdmlld3BvcnQudHJhbnNmb3JtKTtcbiAgICB0aGlzLnZpZXdwb3J0U2NhbGUgPSB2aWV3cG9ydC5zY2FsZTtcbiAgICB0aGlzLmJhc2VUcmFuc2Zvcm0gPSB0aGlzLmN0eC5tb3pDdXJyZW50VHJhbnNmb3JtLnNsaWNlKCk7XG4gICAgdGhpcy5fY29tYmluZWRTY2FsZUZhY3RvciA9IE1hdGguaHlwb3QodGhpcy5iYXNlVHJhbnNmb3JtWzBdLCB0aGlzLmJhc2VUcmFuc2Zvcm1bMl0pO1xuXG4gICAgaWYgKHRoaXMuaW1hZ2VMYXllcikge1xuICAgICAgdGhpcy5pbWFnZUxheWVyLmJlZ2luTGF5b3V0KCk7XG4gICAgfVxuICB9XG5cbiAgZXhlY3V0ZU9wZXJhdG9yTGlzdChvcGVyYXRvckxpc3QsIGV4ZWN1dGlvblN0YXJ0SWR4LCBjb250aW51ZUNhbGxiYWNrLCBzdGVwcGVyKSB7XG4gICAgY29uc3QgYXJnc0FycmF5ID0gb3BlcmF0b3JMaXN0LmFyZ3NBcnJheTtcbiAgICBjb25zdCBmbkFycmF5ID0gb3BlcmF0b3JMaXN0LmZuQXJyYXk7XG4gICAgbGV0IGkgPSBleGVjdXRpb25TdGFydElkeCB8fCAwO1xuICAgIGNvbnN0IGFyZ3NBcnJheUxlbiA9IGFyZ3NBcnJheS5sZW5ndGg7XG5cbiAgICBpZiAoYXJnc0FycmF5TGVuID09PSBpKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG5cbiAgICBjb25zdCBjaHVua09wZXJhdGlvbnMgPSBhcmdzQXJyYXlMZW4gLSBpID4gRVhFQ1VUSU9OX1NURVBTICYmIHR5cGVvZiBjb250aW51ZUNhbGxiYWNrID09PSBcImZ1bmN0aW9uXCI7XG4gICAgY29uc3QgZW5kVGltZSA9IGNodW5rT3BlcmF0aW9ucyA/IERhdGUubm93KCkgKyBFWEVDVVRJT05fVElNRSA6IDA7XG4gICAgbGV0IHN0ZXBzID0gMDtcbiAgICBjb25zdCBjb21tb25PYmpzID0gdGhpcy5jb21tb25PYmpzO1xuICAgIGNvbnN0IG9ianMgPSB0aGlzLm9ianM7XG4gICAgbGV0IGZuSWQ7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKHN0ZXBwZXIgIT09IHVuZGVmaW5lZCAmJiBpID09PSBzdGVwcGVyLm5leHRCcmVha1BvaW50KSB7XG4gICAgICAgIHN0ZXBwZXIuYnJlYWtJdChpLCBjb250aW51ZUNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgICB9XG5cbiAgICAgIGZuSWQgPSBmbkFycmF5W2ldO1xuXG4gICAgICBpZiAoZm5JZCAhPT0gX3V0aWwuT1BTLmRlcGVuZGVuY3kpIHtcbiAgICAgICAgdGhpc1tmbklkXS5hcHBseSh0aGlzLCBhcmdzQXJyYXlbaV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChjb25zdCBkZXBPYmpJZCBvZiBhcmdzQXJyYXlbaV0pIHtcbiAgICAgICAgICBjb25zdCBvYmpzUG9vbCA9IGRlcE9iaklkLnN0YXJ0c1dpdGgoXCJnX1wiKSA/IGNvbW1vbk9ianMgOiBvYmpzO1xuXG4gICAgICAgICAgaWYgKCFvYmpzUG9vbC5oYXMoZGVwT2JqSWQpKSB7XG4gICAgICAgICAgICBvYmpzUG9vbC5nZXQoZGVwT2JqSWQsIGNvbnRpbnVlQ2FsbGJhY2spO1xuICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGkrKztcblxuICAgICAgaWYgKGkgPT09IGFyZ3NBcnJheUxlbikge1xuICAgICAgICByZXR1cm4gaTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNodW5rT3BlcmF0aW9ucyAmJiArK3N0ZXBzID4gRVhFQ1VUSU9OX1NURVBTKSB7XG4gICAgICAgIGlmIChEYXRlLm5vdygpID4gZW5kVGltZSkge1xuICAgICAgICAgIGNvbnRpbnVlQ2FsbGJhY2soKTtcbiAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0ZXBzID0gMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBlbmREcmF3aW5nKCkge1xuICAgIHdoaWxlICh0aGlzLnN0YXRlU3RhY2subGVuZ3RoIHx8IHRoaXMuY3VycmVudC5hY3RpdmVTTWFzayAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5yZXN0b3JlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuXG4gICAgaWYgKHRoaXMudHJhbnNwYXJlbnRDYW52YXMpIHtcbiAgICAgIHRoaXMuY3R4ID0gdGhpcy5jb21wb3NpdGVDdHg7XG4gICAgICB0aGlzLmN0eC5zYXZlKCk7XG4gICAgICB0aGlzLmN0eC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG4gICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UodGhpcy50cmFuc3BhcmVudENhbnZhcywgMCwgMCk7XG4gICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgICB0aGlzLnRyYW5zcGFyZW50Q2FudmFzID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLmNhY2hlZENhbnZhc2VzLmNsZWFyKCk7XG4gICAgdGhpcy5jYWNoZWRQYXR0ZXJucy5jbGVhcigpO1xuXG4gICAgaWYgKHRoaXMuaW1hZ2VMYXllcikge1xuICAgICAgdGhpcy5pbWFnZUxheWVyLmVuZExheW91dCgpO1xuICAgIH1cbiAgfVxuXG4gIF9zY2FsZUltYWdlKGltZywgaW52ZXJzZVRyYW5zZm9ybSkge1xuICAgIGNvbnN0IHdpZHRoID0gaW1nLndpZHRoO1xuICAgIGNvbnN0IGhlaWdodCA9IGltZy5oZWlnaHQ7XG4gICAgbGV0IHdpZHRoU2NhbGUgPSBNYXRoLm1heChNYXRoLmh5cG90KGludmVyc2VUcmFuc2Zvcm1bMF0sIGludmVyc2VUcmFuc2Zvcm1bMV0pLCAxKTtcbiAgICBsZXQgaGVpZ2h0U2NhbGUgPSBNYXRoLm1heChNYXRoLmh5cG90KGludmVyc2VUcmFuc2Zvcm1bMl0sIGludmVyc2VUcmFuc2Zvcm1bM10pLCAxKTtcbiAgICBsZXQgcGFpbnRXaWR0aCA9IHdpZHRoLFxuICAgICAgICBwYWludEhlaWdodCA9IGhlaWdodDtcbiAgICBsZXQgdG1wQ2FudmFzSWQgPSBcInByZXNjYWxlMVwiO1xuICAgIGxldCB0bXBDYW52YXMsIHRtcEN0eDtcblxuICAgIHdoaWxlICh3aWR0aFNjYWxlID4gMiAmJiBwYWludFdpZHRoID4gMSB8fCBoZWlnaHRTY2FsZSA+IDIgJiYgcGFpbnRIZWlnaHQgPiAxKSB7XG4gICAgICBsZXQgbmV3V2lkdGggPSBwYWludFdpZHRoLFxuICAgICAgICAgIG5ld0hlaWdodCA9IHBhaW50SGVpZ2h0O1xuXG4gICAgICBpZiAod2lkdGhTY2FsZSA+IDIgJiYgcGFpbnRXaWR0aCA+IDEpIHtcbiAgICAgICAgbmV3V2lkdGggPSBNYXRoLmNlaWwocGFpbnRXaWR0aCAvIDIpO1xuICAgICAgICB3aWR0aFNjYWxlIC89IHBhaW50V2lkdGggLyBuZXdXaWR0aDtcbiAgICAgIH1cblxuICAgICAgaWYgKGhlaWdodFNjYWxlID4gMiAmJiBwYWludEhlaWdodCA+IDEpIHtcbiAgICAgICAgbmV3SGVpZ2h0ID0gTWF0aC5jZWlsKHBhaW50SGVpZ2h0IC8gMik7XG4gICAgICAgIGhlaWdodFNjYWxlIC89IHBhaW50SGVpZ2h0IC8gbmV3SGVpZ2h0O1xuICAgICAgfVxuXG4gICAgICB0bXBDYW52YXMgPSB0aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcyh0bXBDYW52YXNJZCwgbmV3V2lkdGgsIG5ld0hlaWdodCk7XG4gICAgICB0bXBDdHggPSB0bXBDYW52YXMuY29udGV4dDtcbiAgICAgIHRtcEN0eC5jbGVhclJlY3QoMCwgMCwgbmV3V2lkdGgsIG5ld0hlaWdodCk7XG4gICAgICB0bXBDdHguZHJhd0ltYWdlKGltZywgMCwgMCwgcGFpbnRXaWR0aCwgcGFpbnRIZWlnaHQsIDAsIDAsIG5ld1dpZHRoLCBuZXdIZWlnaHQpO1xuICAgICAgaW1nID0gdG1wQ2FudmFzLmNhbnZhcztcbiAgICAgIHBhaW50V2lkdGggPSBuZXdXaWR0aDtcbiAgICAgIHBhaW50SGVpZ2h0ID0gbmV3SGVpZ2h0O1xuICAgICAgdG1wQ2FudmFzSWQgPSB0bXBDYW52YXNJZCA9PT0gXCJwcmVzY2FsZTFcIiA/IFwicHJlc2NhbGUyXCIgOiBcInByZXNjYWxlMVwiO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpbWcsXG4gICAgICBwYWludFdpZHRoLFxuICAgICAgcGFpbnRIZWlnaHRcbiAgICB9O1xuICB9XG5cbiAgX2NyZWF0ZU1hc2tDYW52YXMoaW1nKSB7XG4gICAgY29uc3QgY3R4ID0gdGhpcy5jdHg7XG4gICAgY29uc3Qgd2lkdGggPSBpbWcud2lkdGgsXG4gICAgICAgICAgaGVpZ2h0ID0gaW1nLmhlaWdodDtcbiAgICBjb25zdCBmaWxsQ29sb3IgPSB0aGlzLmN1cnJlbnQuZmlsbENvbG9yO1xuICAgIGNvbnN0IGlzUGF0dGVybkZpbGwgPSB0aGlzLmN1cnJlbnQucGF0dGVybkZpbGw7XG4gICAgY29uc3QgbWFza0NhbnZhcyA9IHRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKFwibWFza0NhbnZhc1wiLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICBjb25zdCBtYXNrQ3R4ID0gbWFza0NhbnZhcy5jb250ZXh0O1xuICAgIHB1dEJpbmFyeUltYWdlTWFzayhtYXNrQ3R4LCBpbWcpO1xuICAgIGNvbnN0IG9ialRvQ2FudmFzID0gY3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm07XG5cbiAgICBsZXQgbWFza1RvQ2FudmFzID0gX3V0aWwuVXRpbC50cmFuc2Zvcm0ob2JqVG9DYW52YXMsIFsxIC8gd2lkdGgsIDAsIDAsIC0xIC8gaGVpZ2h0LCAwLCAwXSk7XG5cbiAgICBtYXNrVG9DYW52YXMgPSBfdXRpbC5VdGlsLnRyYW5zZm9ybShtYXNrVG9DYW52YXMsIFsxLCAwLCAwLCAxLCAwLCAtaGVpZ2h0XSk7XG5cbiAgICBjb25zdCBjb3JkMSA9IF91dGlsLlV0aWwuYXBwbHlUcmFuc2Zvcm0oWzAsIDBdLCBtYXNrVG9DYW52YXMpO1xuXG4gICAgY29uc3QgY29yZDIgPSBfdXRpbC5VdGlsLmFwcGx5VHJhbnNmb3JtKFt3aWR0aCwgaGVpZ2h0XSwgbWFza1RvQ2FudmFzKTtcblxuICAgIGNvbnN0IHJlY3QgPSBfdXRpbC5VdGlsLm5vcm1hbGl6ZVJlY3QoW2NvcmQxWzBdLCBjb3JkMVsxXSwgY29yZDJbMF0sIGNvcmQyWzFdXSk7XG5cbiAgICBjb25zdCBkcmF3bldpZHRoID0gTWF0aC5jZWlsKHJlY3RbMl0gLSByZWN0WzBdKTtcbiAgICBjb25zdCBkcmF3bkhlaWdodCA9IE1hdGguY2VpbChyZWN0WzNdIC0gcmVjdFsxXSk7XG4gICAgY29uc3QgZmlsbENhbnZhcyA9IHRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKFwiZmlsbENhbnZhc1wiLCBkcmF3bldpZHRoLCBkcmF3bkhlaWdodCwgdHJ1ZSk7XG4gICAgY29uc3QgZmlsbEN0eCA9IGZpbGxDYW52YXMuY29udGV4dDtcbiAgICBjb25zdCBvZmZzZXRYID0gTWF0aC5taW4oY29yZDFbMF0sIGNvcmQyWzBdKTtcbiAgICBjb25zdCBvZmZzZXRZID0gTWF0aC5taW4oY29yZDFbMV0sIGNvcmQyWzFdKTtcbiAgICBmaWxsQ3R4LnRyYW5zbGF0ZSgtb2Zmc2V0WCwgLW9mZnNldFkpO1xuICAgIGZpbGxDdHgudHJhbnNmb3JtLmFwcGx5KGZpbGxDdHgsIG1hc2tUb0NhbnZhcyk7XG5cbiAgICBjb25zdCBzY2FsZWQgPSB0aGlzLl9zY2FsZUltYWdlKG1hc2tDYW52YXMuY2FudmFzLCBmaWxsQ3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlKTtcblxuICAgIGZpbGxDdHguaW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gZ2V0SW1hZ2VTbW9vdGhpbmdFbmFibGVkKGZpbGxDdHgubW96Q3VycmVudFRyYW5zZm9ybSwgaW1nLmludGVycG9sYXRlKTtcbiAgICBmaWxsQ3R4LmRyYXdJbWFnZShzY2FsZWQuaW1nLCAwLCAwLCBzY2FsZWQuaW1nLndpZHRoLCBzY2FsZWQuaW1nLmhlaWdodCwgMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgZmlsbEN0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBcInNvdXJjZS1pblwiO1xuXG4gICAgY29uc3QgaW52ZXJzZSA9IF91dGlsLlV0aWwudHJhbnNmb3JtKGZpbGxDdHgubW96Q3VycmVudFRyYW5zZm9ybUludmVyc2UsIFsxLCAwLCAwLCAxLCAtb2Zmc2V0WCwgLW9mZnNldFldKTtcblxuICAgIGZpbGxDdHguZmlsbFN0eWxlID0gaXNQYXR0ZXJuRmlsbCA/IGZpbGxDb2xvci5nZXRQYXR0ZXJuKGN0eCwgdGhpcywgaW52ZXJzZSwgX3BhdHRlcm5faGVscGVyLlBhdGhUeXBlLkZJTEwpIDogZmlsbENvbG9yO1xuICAgIGZpbGxDdHguZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNhbnZhczogZmlsbENhbnZhcy5jYW52YXMsXG4gICAgICBvZmZzZXRYOiBNYXRoLnJvdW5kKG9mZnNldFgpLFxuICAgICAgb2Zmc2V0WTogTWF0aC5yb3VuZChvZmZzZXRZKVxuICAgIH07XG4gIH1cblxuICBzZXRMaW5lV2lkdGgod2lkdGgpIHtcbiAgICB0aGlzLmN1cnJlbnQubGluZVdpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5jdHgubGluZVdpZHRoID0gd2lkdGg7XG4gIH1cblxuICBzZXRMaW5lQ2FwKHN0eWxlKSB7XG4gICAgdGhpcy5jdHgubGluZUNhcCA9IExJTkVfQ0FQX1NUWUxFU1tzdHlsZV07XG4gIH1cblxuICBzZXRMaW5lSm9pbihzdHlsZSkge1xuICAgIHRoaXMuY3R4LmxpbmVKb2luID0gTElORV9KT0lOX1NUWUxFU1tzdHlsZV07XG4gIH1cblxuICBzZXRNaXRlckxpbWl0KGxpbWl0KSB7XG4gICAgdGhpcy5jdHgubWl0ZXJMaW1pdCA9IGxpbWl0O1xuICB9XG5cbiAgc2V0RGFzaChkYXNoQXJyYXksIGRhc2hQaGFzZSkge1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuY3R4O1xuXG4gICAgaWYgKGN0eC5zZXRMaW5lRGFzaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjdHguc2V0TGluZURhc2goZGFzaEFycmF5KTtcbiAgICAgIGN0eC5saW5lRGFzaE9mZnNldCA9IGRhc2hQaGFzZTtcbiAgICB9XG4gIH1cblxuICBzZXRSZW5kZXJpbmdJbnRlbnQoaW50ZW50KSB7fVxuXG4gIHNldEZsYXRuZXNzKGZsYXRuZXNzKSB7fVxuXG4gIHNldEdTdGF0ZShzdGF0ZXMpIHtcbiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBzdGF0ZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgY29uc3Qgc3RhdGUgPSBzdGF0ZXNbaV07XG4gICAgICBjb25zdCBrZXkgPSBzdGF0ZVswXTtcbiAgICAgIGNvbnN0IHZhbHVlID0gc3RhdGVbMV07XG5cbiAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgIGNhc2UgXCJMV1wiOlxuICAgICAgICAgIHRoaXMuc2V0TGluZVdpZHRoKHZhbHVlKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiTENcIjpcbiAgICAgICAgICB0aGlzLnNldExpbmVDYXAodmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJMSlwiOlxuICAgICAgICAgIHRoaXMuc2V0TGluZUpvaW4odmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJNTFwiOlxuICAgICAgICAgIHRoaXMuc2V0TWl0ZXJMaW1pdCh2YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIkRcIjpcbiAgICAgICAgICB0aGlzLnNldERhc2godmFsdWVbMF0sIHZhbHVlWzFdKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiUklcIjpcbiAgICAgICAgICB0aGlzLnNldFJlbmRlcmluZ0ludGVudCh2YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIkZMXCI6XG4gICAgICAgICAgdGhpcy5zZXRGbGF0bmVzcyh2YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIkZvbnRcIjpcbiAgICAgICAgICB0aGlzLnNldEZvbnQodmFsdWVbMF0sIHZhbHVlWzFdKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiQ0FcIjpcbiAgICAgICAgICB0aGlzLmN1cnJlbnQuc3Ryb2tlQWxwaGEgPSBzdGF0ZVsxXTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiY2FcIjpcbiAgICAgICAgICB0aGlzLmN1cnJlbnQuZmlsbEFscGhhID0gc3RhdGVbMV07XG4gICAgICAgICAgdGhpcy5jdHguZ2xvYmFsQWxwaGEgPSBzdGF0ZVsxXTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiQk1cIjpcbiAgICAgICAgICB0aGlzLmN0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSB2YWx1ZTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiU01hc2tcIjpcbiAgICAgICAgICB0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2sgPSB2YWx1ZSA/IHRoaXMudGVtcFNNYXNrIDogbnVsbDtcbiAgICAgICAgICB0aGlzLnRlbXBTTWFzayA9IG51bGw7XG4gICAgICAgICAgdGhpcy5jaGVja1NNYXNrU3RhdGUoKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiVFJcIjpcbiAgICAgICAgICB0aGlzLmN1cnJlbnQudHJhbnNmZXJNYXBzID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2hlY2tTTWFza1N0YXRlKCkge1xuICAgIGNvbnN0IGluU01hc2tNb2RlID0gISF0aGlzLnN1c3BlbmRlZEN0eDtcblxuICAgIGlmICh0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2sgJiYgIWluU01hc2tNb2RlKSB7XG4gICAgICB0aGlzLmJlZ2luU01hc2tNb2RlKCk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrICYmIGluU01hc2tNb2RlKSB7XG4gICAgICB0aGlzLmVuZFNNYXNrTW9kZSgpO1xuICAgIH1cbiAgfVxuXG4gIGJlZ2luU01hc2tNb2RlKCkge1xuICAgIGlmICh0aGlzLnN1c3BlbmRlZEN0eCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYmVnaW5TTWFza01vZGUgY2FsbGVkIHdoaWxlIGFscmVhZHkgaW4gc21hc2sgbW9kZVwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBkcmF3bldpZHRoID0gdGhpcy5jdHguY2FudmFzLndpZHRoO1xuICAgIGNvbnN0IGRyYXduSGVpZ2h0ID0gdGhpcy5jdHguY2FudmFzLmhlaWdodDtcbiAgICBjb25zdCBjYWNoZUlkID0gXCJzbWFza0dyb3VwQXRcIiArIHRoaXMuZ3JvdXBMZXZlbDtcbiAgICBjb25zdCBzY3JhdGNoQ2FudmFzID0gdGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoY2FjaGVJZCwgZHJhd25XaWR0aCwgZHJhd25IZWlnaHQsIHRydWUpO1xuICAgIHRoaXMuc3VzcGVuZGVkQ3R4ID0gdGhpcy5jdHg7XG4gICAgdGhpcy5jdHggPSBzY3JhdGNoQ2FudmFzLmNvbnRleHQ7XG4gICAgY29uc3QgY3R4ID0gdGhpcy5jdHg7XG4gICAgY3R4LnNldFRyYW5zZm9ybS5hcHBseShjdHgsIHRoaXMuc3VzcGVuZGVkQ3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm0pO1xuICAgIGNvcHlDdHhTdGF0ZSh0aGlzLnN1c3BlbmRlZEN0eCwgY3R4KTtcbiAgICBtaXJyb3JDb250ZXh0T3BlcmF0aW9ucyhjdHgsIHRoaXMuc3VzcGVuZGVkQ3R4KTtcbiAgICB0aGlzLnNldEdTdGF0ZShbW1wiQk1cIiwgXCJzb3VyY2Utb3ZlclwiXSwgW1wiY2FcIiwgMV0sIFtcIkNBXCIsIDFdXSk7XG4gIH1cblxuICBlbmRTTWFza01vZGUoKSB7XG4gICAgaWYgKCF0aGlzLnN1c3BlbmRlZEN0eCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZW5kU01hc2tNb2RlIGNhbGxlZCB3aGlsZSBub3QgaW4gc21hc2sgbW9kZVwiKTtcbiAgICB9XG5cbiAgICB0aGlzLmN0eC5fcmVtb3ZlTWlycm9yaW5nKCk7XG5cbiAgICBjb3B5Q3R4U3RhdGUodGhpcy5jdHgsIHRoaXMuc3VzcGVuZGVkQ3R4KTtcbiAgICB0aGlzLmN0eCA9IHRoaXMuc3VzcGVuZGVkQ3R4O1xuICAgIHRoaXMuY3VycmVudC5hY3RpdmVTTWFzayA9IG51bGw7XG4gICAgdGhpcy5zdXNwZW5kZWRDdHggPSBudWxsO1xuICB9XG5cbiAgY29tcG9zZShkaXJ0eUJveCkge1xuICAgIGlmICghdGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFkaXJ0eUJveCkge1xuICAgICAgZGlydHlCb3ggPSBbMCwgMCwgdGhpcy5jdHguY2FudmFzLndpZHRoLCB0aGlzLmN0eC5jYW52YXMuaGVpZ2h0XTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlydHlCb3hbMF0gPSBNYXRoLmZsb29yKGRpcnR5Qm94WzBdKTtcbiAgICAgIGRpcnR5Qm94WzFdID0gTWF0aC5mbG9vcihkaXJ0eUJveFsxXSk7XG4gICAgICBkaXJ0eUJveFsyXSA9IE1hdGguY2VpbChkaXJ0eUJveFsyXSk7XG4gICAgICBkaXJ0eUJveFszXSA9IE1hdGguY2VpbChkaXJ0eUJveFszXSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc21hc2sgPSB0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2s7XG4gICAgY29uc3Qgc3VzcGVuZGVkQ3R4ID0gdGhpcy5zdXNwZW5kZWRDdHg7XG4gICAgY29tcG9zZVNNYXNrKHN1c3BlbmRlZEN0eCwgc21hc2ssIHRoaXMuY3R4LCBkaXJ0eUJveCk7XG4gICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgIHRoaXMuY3R4LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgICB0aGlzLmN0eC5jbGVhclJlY3QoMCwgMCwgdGhpcy5jdHguY2FudmFzLndpZHRoLCB0aGlzLmN0eC5jYW52YXMuaGVpZ2h0KTtcbiAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gIH1cblxuICBzYXZlKCkge1xuICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICBjb25zdCBvbGQgPSB0aGlzLmN1cnJlbnQ7XG4gICAgdGhpcy5zdGF0ZVN0YWNrLnB1c2gob2xkKTtcbiAgICB0aGlzLmN1cnJlbnQgPSBvbGQuY2xvbmUoKTtcbiAgfVxuXG4gIHJlc3RvcmUoKSB7XG4gICAgaWYgKHRoaXMuc3RhdGVTdGFjay5sZW5ndGggPT09IDAgJiYgdGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrKSB7XG4gICAgICB0aGlzLmVuZFNNYXNrTW9kZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnN0YXRlU3RhY2subGVuZ3RoICE9PSAwKSB7XG4gICAgICB0aGlzLmN1cnJlbnQgPSB0aGlzLnN0YXRlU3RhY2sucG9wKCk7XG4gICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgICB0aGlzLmNoZWNrU01hc2tTdGF0ZSgpO1xuICAgICAgdGhpcy5wZW5kaW5nQ2xpcCA9IG51bGw7XG4gICAgICB0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICB0cmFuc2Zvcm0oYSwgYiwgYywgZCwgZSwgZikge1xuICAgIHRoaXMuY3R4LnRyYW5zZm9ybShhLCBiLCBjLCBkLCBlLCBmKTtcbiAgICB0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoID0gbnVsbDtcbiAgfVxuXG4gIGNvbnN0cnVjdFBhdGgob3BzLCBhcmdzKSB7XG4gICAgY29uc3QgY3R4ID0gdGhpcy5jdHg7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuY3VycmVudDtcbiAgICBsZXQgeCA9IGN1cnJlbnQueCxcbiAgICAgICAgeSA9IGN1cnJlbnQueTtcbiAgICBsZXQgc3RhcnRYLCBzdGFydFk7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgaiA9IDAsIGlpID0gb3BzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIHN3aXRjaCAob3BzW2ldIHwgMCkge1xuICAgICAgICBjYXNlIF91dGlsLk9QUy5yZWN0YW5nbGU6XG4gICAgICAgICAgeCA9IGFyZ3NbaisrXTtcbiAgICAgICAgICB5ID0gYXJnc1tqKytdO1xuICAgICAgICAgIGNvbnN0IHdpZHRoID0gYXJnc1tqKytdO1xuICAgICAgICAgIGNvbnN0IGhlaWdodCA9IGFyZ3NbaisrXTtcbiAgICAgICAgICBjb25zdCB4dyA9IHggKyB3aWR0aDtcbiAgICAgICAgICBjb25zdCB5aCA9IHkgKyBoZWlnaHQ7XG4gICAgICAgICAgY3R4Lm1vdmVUbyh4LCB5KTtcblxuICAgICAgICAgIGlmICh3aWR0aCA9PT0gMCB8fCBoZWlnaHQgPT09IDApIHtcbiAgICAgICAgICAgIGN0eC5saW5lVG8oeHcsIHloKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3R4LmxpbmVUbyh4dywgeSk7XG4gICAgICAgICAgICBjdHgubGluZVRvKHh3LCB5aCk7XG4gICAgICAgICAgICBjdHgubGluZVRvKHgsIHloKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjdXJyZW50LnVwZGF0ZVBhdGhNaW5NYXgoY3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm0sIHgsIHkpO1xuICAgICAgICAgIGN1cnJlbnQudXBkYXRlUGF0aE1pbk1heChjdHgubW96Q3VycmVudFRyYW5zZm9ybSwgeHcsIHloKTtcbiAgICAgICAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBfdXRpbC5PUFMubW92ZVRvOlxuICAgICAgICAgIHggPSBhcmdzW2orK107XG4gICAgICAgICAgeSA9IGFyZ3NbaisrXTtcbiAgICAgICAgICBjdHgubW92ZVRvKHgsIHkpO1xuICAgICAgICAgIGN1cnJlbnQudXBkYXRlUGF0aE1pbk1heChjdHgubW96Q3VycmVudFRyYW5zZm9ybSwgeCwgeSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBfdXRpbC5PUFMubGluZVRvOlxuICAgICAgICAgIHggPSBhcmdzW2orK107XG4gICAgICAgICAgeSA9IGFyZ3NbaisrXTtcbiAgICAgICAgICBjdHgubGluZVRvKHgsIHkpO1xuICAgICAgICAgIGN1cnJlbnQudXBkYXRlUGF0aE1pbk1heChjdHgubW96Q3VycmVudFRyYW5zZm9ybSwgeCwgeSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBfdXRpbC5PUFMuY3VydmVUbzpcbiAgICAgICAgICBzdGFydFggPSB4O1xuICAgICAgICAgIHN0YXJ0WSA9IHk7XG4gICAgICAgICAgeCA9IGFyZ3NbaiArIDRdO1xuICAgICAgICAgIHkgPSBhcmdzW2ogKyA1XTtcbiAgICAgICAgICBjdHguYmV6aWVyQ3VydmVUbyhhcmdzW2pdLCBhcmdzW2ogKyAxXSwgYXJnc1tqICsgMl0sIGFyZ3NbaiArIDNdLCB4LCB5KTtcbiAgICAgICAgICBjdXJyZW50LnVwZGF0ZUN1cnZlUGF0aE1pbk1heChjdHgubW96Q3VycmVudFRyYW5zZm9ybSwgc3RhcnRYLCBzdGFydFksIGFyZ3Nbal0sIGFyZ3NbaiArIDFdLCBhcmdzW2ogKyAyXSwgYXJnc1tqICsgM10sIHgsIHkpO1xuICAgICAgICAgIGogKz0gNjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIF91dGlsLk9QUy5jdXJ2ZVRvMjpcbiAgICAgICAgICBzdGFydFggPSB4O1xuICAgICAgICAgIHN0YXJ0WSA9IHk7XG4gICAgICAgICAgY3R4LmJlemllckN1cnZlVG8oeCwgeSwgYXJnc1tqXSwgYXJnc1tqICsgMV0sIGFyZ3NbaiArIDJdLCBhcmdzW2ogKyAzXSk7XG4gICAgICAgICAgY3VycmVudC51cGRhdGVDdXJ2ZVBhdGhNaW5NYXgoY3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm0sIHN0YXJ0WCwgc3RhcnRZLCB4LCB5LCBhcmdzW2pdLCBhcmdzW2ogKyAxXSwgYXJnc1tqICsgMl0sIGFyZ3NbaiArIDNdKTtcbiAgICAgICAgICB4ID0gYXJnc1tqICsgMl07XG4gICAgICAgICAgeSA9IGFyZ3NbaiArIDNdO1xuICAgICAgICAgIGogKz0gNDtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIF91dGlsLk9QUy5jdXJ2ZVRvMzpcbiAgICAgICAgICBzdGFydFggPSB4O1xuICAgICAgICAgIHN0YXJ0WSA9IHk7XG4gICAgICAgICAgeCA9IGFyZ3NbaiArIDJdO1xuICAgICAgICAgIHkgPSBhcmdzW2ogKyAzXTtcbiAgICAgICAgICBjdHguYmV6aWVyQ3VydmVUbyhhcmdzW2pdLCBhcmdzW2ogKyAxXSwgeCwgeSwgeCwgeSk7XG4gICAgICAgICAgY3VycmVudC51cGRhdGVDdXJ2ZVBhdGhNaW5NYXgoY3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm0sIHN0YXJ0WCwgc3RhcnRZLCBhcmdzW2pdLCBhcmdzW2ogKyAxXSwgeCwgeSwgeCwgeSk7XG4gICAgICAgICAgaiArPSA0O1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgX3V0aWwuT1BTLmNsb3NlUGF0aDpcbiAgICAgICAgICBjdHguY2xvc2VQYXRoKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY3VycmVudC5zZXRDdXJyZW50UG9pbnQoeCwgeSk7XG4gIH1cblxuICBjbG9zZVBhdGgoKSB7XG4gICAgdGhpcy5jdHguY2xvc2VQYXRoKCk7XG4gIH1cblxuICBzdHJva2UoY29uc3VtZVBhdGgpIHtcbiAgICBjb25zdW1lUGF0aCA9IHR5cGVvZiBjb25zdW1lUGF0aCAhPT0gXCJ1bmRlZmluZWRcIiA/IGNvbnN1bWVQYXRoIDogdHJ1ZTtcbiAgICBjb25zdCBjdHggPSB0aGlzLmN0eDtcbiAgICBjb25zdCBzdHJva2VDb2xvciA9IHRoaXMuY3VycmVudC5zdHJva2VDb2xvcjtcbiAgICBjdHguZ2xvYmFsQWxwaGEgPSB0aGlzLmN1cnJlbnQuc3Ryb2tlQWxwaGE7XG5cbiAgICBpZiAodGhpcy5jb250ZW50VmlzaWJsZSkge1xuICAgICAgaWYgKHR5cGVvZiBzdHJva2VDb2xvciA9PT0gXCJvYmplY3RcIiAmJiBzdHJva2VDb2xvcj8uZ2V0UGF0dGVybikge1xuICAgICAgICBjb25zdCBsaW5lV2lkdGggPSB0aGlzLmdldFNpbmdsZVBpeGVsV2lkdGgoKTtcbiAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gc3Ryb2tlQ29sb3IuZ2V0UGF0dGVybihjdHgsIHRoaXMsIGN0eC5tb3pDdXJyZW50VHJhbnNmb3JtSW52ZXJzZSwgX3BhdHRlcm5faGVscGVyLlBhdGhUeXBlLlNUUk9LRSk7XG4gICAgICAgIGN0eC5saW5lV2lkdGggPSBNYXRoLm1heChsaW5lV2lkdGgsIHRoaXMuY3VycmVudC5saW5lV2lkdGgpO1xuICAgICAgICBjdHguc3Ryb2tlKCk7XG4gICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBsaW5lV2lkdGggPSB0aGlzLmdldFNpbmdsZVBpeGVsV2lkdGgoKTtcblxuICAgICAgICBpZiAobGluZVdpZHRoIDwgMCAmJiAtbGluZVdpZHRoID49IHRoaXMuY3VycmVudC5saW5lV2lkdGgpIHtcbiAgICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICAgIGN0eC5yZXNldFRyYW5zZm9ybSgpO1xuICAgICAgICAgIGN0eC5saW5lV2lkdGggPSBNYXRoLnJvdW5kKHRoaXMuX2NvbWJpbmVkU2NhbGVGYWN0b3IpO1xuICAgICAgICAgIGN0eC5zdHJva2UoKTtcbiAgICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN0eC5saW5lV2lkdGggPSBNYXRoLm1heChsaW5lV2lkdGgsIHRoaXMuY3VycmVudC5saW5lV2lkdGgpO1xuICAgICAgICAgIGN0eC5zdHJva2UoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjb25zdW1lUGF0aCkge1xuICAgICAgdGhpcy5jb25zdW1lUGF0aCh0aGlzLmN1cnJlbnQuZ2V0Q2xpcHBlZFBhdGhCb3VuZGluZ0JveCgpKTtcbiAgICB9XG5cbiAgICBjdHguZ2xvYmFsQWxwaGEgPSB0aGlzLmN1cnJlbnQuZmlsbEFscGhhO1xuICB9XG5cbiAgY2xvc2VTdHJva2UoKSB7XG4gICAgdGhpcy5jbG9zZVBhdGgoKTtcbiAgICB0aGlzLnN0cm9rZSgpO1xuICB9XG5cbiAgZmlsbChjb25zdW1lUGF0aCkge1xuICAgIGNvbnN1bWVQYXRoID0gdHlwZW9mIGNvbnN1bWVQYXRoICE9PSBcInVuZGVmaW5lZFwiID8gY29uc3VtZVBhdGggOiB0cnVlO1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuY3R4O1xuICAgIGNvbnN0IGZpbGxDb2xvciA9IHRoaXMuY3VycmVudC5maWxsQ29sb3I7XG4gICAgY29uc3QgaXNQYXR0ZXJuRmlsbCA9IHRoaXMuY3VycmVudC5wYXR0ZXJuRmlsbDtcbiAgICBsZXQgbmVlZFJlc3RvcmUgPSBmYWxzZTtcblxuICAgIGlmIChpc1BhdHRlcm5GaWxsKSB7XG4gICAgICBjdHguc2F2ZSgpO1xuICAgICAgY3R4LmZpbGxTdHlsZSA9IGZpbGxDb2xvci5nZXRQYXR0ZXJuKGN0eCwgdGhpcywgY3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlLCBfcGF0dGVybl9oZWxwZXIuUGF0aFR5cGUuRklMTCk7XG4gICAgICBuZWVkUmVzdG9yZSA9IHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgaW50ZXJzZWN0ID0gdGhpcy5jdXJyZW50LmdldENsaXBwZWRQYXRoQm91bmRpbmdCb3goKTtcblxuICAgIGlmICh0aGlzLmNvbnRlbnRWaXNpYmxlICYmIGludGVyc2VjdCAhPT0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMucGVuZGluZ0VPRmlsbCkge1xuICAgICAgICBjdHguZmlsbChcImV2ZW5vZGRcIik7XG4gICAgICAgIHRoaXMucGVuZGluZ0VPRmlsbCA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3R4LmZpbGwoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobmVlZFJlc3RvcmUpIHtcbiAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnN1bWVQYXRoKSB7XG4gICAgICB0aGlzLmNvbnN1bWVQYXRoKGludGVyc2VjdCk7XG4gICAgfVxuICB9XG5cbiAgZW9GaWxsKCkge1xuICAgIHRoaXMucGVuZGluZ0VPRmlsbCA9IHRydWU7XG4gICAgdGhpcy5maWxsKCk7XG4gIH1cblxuICBmaWxsU3Ryb2tlKCkge1xuICAgIHRoaXMuZmlsbChmYWxzZSk7XG4gICAgdGhpcy5zdHJva2UoZmFsc2UpO1xuICAgIHRoaXMuY29uc3VtZVBhdGgoKTtcbiAgfVxuXG4gIGVvRmlsbFN0cm9rZSgpIHtcbiAgICB0aGlzLnBlbmRpbmdFT0ZpbGwgPSB0cnVlO1xuICAgIHRoaXMuZmlsbFN0cm9rZSgpO1xuICB9XG5cbiAgY2xvc2VGaWxsU3Ryb2tlKCkge1xuICAgIHRoaXMuY2xvc2VQYXRoKCk7XG4gICAgdGhpcy5maWxsU3Ryb2tlKCk7XG4gIH1cblxuICBjbG9zZUVPRmlsbFN0cm9rZSgpIHtcbiAgICB0aGlzLnBlbmRpbmdFT0ZpbGwgPSB0cnVlO1xuICAgIHRoaXMuY2xvc2VQYXRoKCk7XG4gICAgdGhpcy5maWxsU3Ryb2tlKCk7XG4gIH1cblxuICBlbmRQYXRoKCkge1xuICAgIHRoaXMuY29uc3VtZVBhdGgoKTtcbiAgfVxuXG4gIGNsaXAoKSB7XG4gICAgdGhpcy5wZW5kaW5nQ2xpcCA9IE5PUk1BTF9DTElQO1xuICB9XG5cbiAgZW9DbGlwKCkge1xuICAgIHRoaXMucGVuZGluZ0NsaXAgPSBFT19DTElQO1xuICB9XG5cbiAgYmVnaW5UZXh0KCkge1xuICAgIHRoaXMuY3VycmVudC50ZXh0TWF0cml4ID0gX3V0aWwuSURFTlRJVFlfTUFUUklYO1xuICAgIHRoaXMuY3VycmVudC50ZXh0TWF0cml4U2NhbGUgPSAxO1xuICAgIHRoaXMuY3VycmVudC54ID0gdGhpcy5jdXJyZW50LmxpbmVYID0gMDtcbiAgICB0aGlzLmN1cnJlbnQueSA9IHRoaXMuY3VycmVudC5saW5lWSA9IDA7XG4gIH1cblxuICBlbmRUZXh0KCkge1xuICAgIGNvbnN0IHBhdGhzID0gdGhpcy5wZW5kaW5nVGV4dFBhdGhzO1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuY3R4O1xuXG4gICAgaWYgKHBhdGhzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjdHguc2F2ZSgpO1xuICAgIGN0eC5iZWdpblBhdGgoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHBhdGggPSBwYXRoc1tpXTtcbiAgICAgIGN0eC5zZXRUcmFuc2Zvcm0uYXBwbHkoY3R4LCBwYXRoLnRyYW5zZm9ybSk7XG4gICAgICBjdHgudHJhbnNsYXRlKHBhdGgueCwgcGF0aC55KTtcbiAgICAgIHBhdGguYWRkVG9QYXRoKGN0eCwgcGF0aC5mb250U2l6ZSk7XG4gICAgfVxuXG4gICAgY3R4LnJlc3RvcmUoKTtcbiAgICBjdHguY2xpcCgpO1xuICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICBkZWxldGUgdGhpcy5wZW5kaW5nVGV4dFBhdGhzO1xuICB9XG5cbiAgc2V0Q2hhclNwYWNpbmcoc3BhY2luZykge1xuICAgIHRoaXMuY3VycmVudC5jaGFyU3BhY2luZyA9IHNwYWNpbmc7XG4gIH1cblxuICBzZXRXb3JkU3BhY2luZyhzcGFjaW5nKSB7XG4gICAgdGhpcy5jdXJyZW50LndvcmRTcGFjaW5nID0gc3BhY2luZztcbiAgfVxuXG4gIHNldEhTY2FsZShzY2FsZSkge1xuICAgIHRoaXMuY3VycmVudC50ZXh0SFNjYWxlID0gc2NhbGUgLyAxMDA7XG4gIH1cblxuICBzZXRMZWFkaW5nKGxlYWRpbmcpIHtcbiAgICB0aGlzLmN1cnJlbnQubGVhZGluZyA9IC1sZWFkaW5nO1xuICB9XG5cbiAgc2V0Rm9udChmb250UmVmTmFtZSwgc2l6ZSkge1xuICAgIGNvbnN0IGZvbnRPYmogPSB0aGlzLmNvbW1vbk9ianMuZ2V0KGZvbnRSZWZOYW1lKTtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jdXJyZW50O1xuXG4gICAgaWYgKCFmb250T2JqKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbid0IGZpbmQgZm9udCBmb3IgJHtmb250UmVmTmFtZX1gKTtcbiAgICB9XG5cbiAgICBjdXJyZW50LmZvbnRNYXRyaXggPSBmb250T2JqLmZvbnRNYXRyaXggfHwgX3V0aWwuRk9OVF9JREVOVElUWV9NQVRSSVg7XG5cbiAgICBpZiAoY3VycmVudC5mb250TWF0cml4WzBdID09PSAwIHx8IGN1cnJlbnQuZm9udE1hdHJpeFszXSA9PT0gMCkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKFwiSW52YWxpZCBmb250IG1hdHJpeCBmb3IgZm9udCBcIiArIGZvbnRSZWZOYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoc2l6ZSA8IDApIHtcbiAgICAgIHNpemUgPSAtc2l6ZTtcbiAgICAgIGN1cnJlbnQuZm9udERpcmVjdGlvbiA9IC0xO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50LmZvbnREaXJlY3Rpb24gPSAxO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudC5mb250ID0gZm9udE9iajtcbiAgICB0aGlzLmN1cnJlbnQuZm9udFNpemUgPSBzaXplO1xuXG4gICAgaWYgKGZvbnRPYmouaXNUeXBlM0ZvbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBuYW1lID0gZm9udE9iai5sb2FkZWROYW1lIHx8IFwic2Fucy1zZXJpZlwiO1xuICAgIGxldCBib2xkID0gXCJub3JtYWxcIjtcblxuICAgIGlmIChmb250T2JqLmJsYWNrKSB7XG4gICAgICBib2xkID0gXCI5MDBcIjtcbiAgICB9IGVsc2UgaWYgKGZvbnRPYmouYm9sZCkge1xuICAgICAgYm9sZCA9IFwiYm9sZFwiO1xuICAgIH1cblxuICAgIGNvbnN0IGl0YWxpYyA9IGZvbnRPYmouaXRhbGljID8gXCJpdGFsaWNcIiA6IFwibm9ybWFsXCI7XG4gICAgY29uc3QgdHlwZWZhY2UgPSBgXCIke25hbWV9XCIsICR7Zm9udE9iai5mYWxsYmFja05hbWV9YDtcbiAgICBsZXQgYnJvd3NlckZvbnRTaXplID0gc2l6ZTtcblxuICAgIGlmIChzaXplIDwgTUlOX0ZPTlRfU0laRSkge1xuICAgICAgYnJvd3NlckZvbnRTaXplID0gTUlOX0ZPTlRfU0laRTtcbiAgICB9IGVsc2UgaWYgKHNpemUgPiBNQVhfRk9OVF9TSVpFKSB7XG4gICAgICBicm93c2VyRm9udFNpemUgPSBNQVhfRk9OVF9TSVpFO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudC5mb250U2l6ZVNjYWxlID0gc2l6ZSAvIGJyb3dzZXJGb250U2l6ZTtcbiAgICB0aGlzLmN0eC5mb250ID0gYCR7aXRhbGljfSAke2JvbGR9ICR7YnJvd3NlckZvbnRTaXplfXB4ICR7dHlwZWZhY2V9YDtcbiAgfVxuXG4gIHNldFRleHRSZW5kZXJpbmdNb2RlKG1vZGUpIHtcbiAgICB0aGlzLmN1cnJlbnQudGV4dFJlbmRlcmluZ01vZGUgPSBtb2RlO1xuICB9XG5cbiAgc2V0VGV4dFJpc2UocmlzZSkge1xuICAgIHRoaXMuY3VycmVudC50ZXh0UmlzZSA9IHJpc2U7XG4gIH1cblxuICBtb3ZlVGV4dCh4LCB5KSB7XG4gICAgdGhpcy5jdXJyZW50LnggPSB0aGlzLmN1cnJlbnQubGluZVggKz0geDtcbiAgICB0aGlzLmN1cnJlbnQueSA9IHRoaXMuY3VycmVudC5saW5lWSArPSB5O1xuICB9XG5cbiAgc2V0TGVhZGluZ01vdmVUZXh0KHgsIHkpIHtcbiAgICB0aGlzLnNldExlYWRpbmcoLXkpO1xuICAgIHRoaXMubW92ZVRleHQoeCwgeSk7XG4gIH1cblxuICBzZXRUZXh0TWF0cml4KGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgICB0aGlzLmN1cnJlbnQudGV4dE1hdHJpeCA9IFthLCBiLCBjLCBkLCBlLCBmXTtcbiAgICB0aGlzLmN1cnJlbnQudGV4dE1hdHJpeFNjYWxlID0gTWF0aC5oeXBvdChhLCBiKTtcbiAgICB0aGlzLmN1cnJlbnQueCA9IHRoaXMuY3VycmVudC5saW5lWCA9IDA7XG4gICAgdGhpcy5jdXJyZW50LnkgPSB0aGlzLmN1cnJlbnQubGluZVkgPSAwO1xuICB9XG5cbiAgbmV4dExpbmUoKSB7XG4gICAgdGhpcy5tb3ZlVGV4dCgwLCB0aGlzLmN1cnJlbnQubGVhZGluZyk7XG4gIH1cblxuICBwYWludENoYXIoY2hhcmFjdGVyLCB4LCB5LCBwYXR0ZXJuVHJhbnNmb3JtLCByZXNldExpbmVXaWR0aFRvT25lKSB7XG4gICAgY29uc3QgY3R4ID0gdGhpcy5jdHg7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuY3VycmVudDtcbiAgICBjb25zdCBmb250ID0gY3VycmVudC5mb250O1xuICAgIGNvbnN0IHRleHRSZW5kZXJpbmdNb2RlID0gY3VycmVudC50ZXh0UmVuZGVyaW5nTW9kZTtcbiAgICBjb25zdCBmb250U2l6ZSA9IGN1cnJlbnQuZm9udFNpemUgLyBjdXJyZW50LmZvbnRTaXplU2NhbGU7XG4gICAgY29uc3QgZmlsbFN0cm9rZU1vZGUgPSB0ZXh0UmVuZGVyaW5nTW9kZSAmIF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLkZJTExfU1RST0tFX01BU0s7XG4gICAgY29uc3QgaXNBZGRUb1BhdGhTZXQgPSAhISh0ZXh0UmVuZGVyaW5nTW9kZSAmIF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLkFERF9UT19QQVRIX0ZMQUcpO1xuICAgIGNvbnN0IHBhdHRlcm5GaWxsID0gY3VycmVudC5wYXR0ZXJuRmlsbCAmJiAhZm9udC5taXNzaW5nRmlsZTtcbiAgICBsZXQgYWRkVG9QYXRoO1xuXG4gICAgaWYgKGZvbnQuZGlzYWJsZUZvbnRGYWNlIHx8IGlzQWRkVG9QYXRoU2V0IHx8IHBhdHRlcm5GaWxsKSB7XG4gICAgICBhZGRUb1BhdGggPSBmb250LmdldFBhdGhHZW5lcmF0b3IodGhpcy5jb21tb25PYmpzLCBjaGFyYWN0ZXIpO1xuICAgIH1cblxuICAgIGlmIChmb250LmRpc2FibGVGb250RmFjZSB8fCBwYXR0ZXJuRmlsbCkge1xuICAgICAgY3R4LnNhdmUoKTtcbiAgICAgIGN0eC50cmFuc2xhdGUoeCwgeSk7XG4gICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICBhZGRUb1BhdGgoY3R4LCBmb250U2l6ZSk7XG5cbiAgICAgIGlmIChwYXR0ZXJuVHJhbnNmb3JtKSB7XG4gICAgICAgIGN0eC5zZXRUcmFuc2Zvcm0uYXBwbHkoY3R4LCBwYXR0ZXJuVHJhbnNmb3JtKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpbGxTdHJva2VNb2RlID09PSBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMIHx8IGZpbGxTdHJva2VNb2RlID09PSBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRSkge1xuICAgICAgICBjdHguZmlsbCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmlsbFN0cm9rZU1vZGUgPT09IF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLlNUUk9LRSB8fCBmaWxsU3Ryb2tlTW9kZSA9PT0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0UpIHtcbiAgICAgICAgaWYgKHJlc2V0TGluZVdpZHRoVG9PbmUpIHtcbiAgICAgICAgICBjdHgucmVzZXRUcmFuc2Zvcm0oKTtcbiAgICAgICAgICBjdHgubGluZVdpZHRoID0gTWF0aC5yb3VuZCh0aGlzLl9jb21iaW5lZFNjYWxlRmFjdG9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGN0eC5zdHJva2UoKTtcbiAgICAgIH1cblxuICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGZpbGxTdHJva2VNb2RlID09PSBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMIHx8IGZpbGxTdHJva2VNb2RlID09PSBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRSkge1xuICAgICAgICBjdHguZmlsbFRleHQoY2hhcmFjdGVyLCB4LCB5KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpbGxTdHJva2VNb2RlID09PSBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5TVFJPS0UgfHwgZmlsbFN0cm9rZU1vZGUgPT09IF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLkZJTExfU1RST0tFKSB7XG4gICAgICAgIGlmIChyZXNldExpbmVXaWR0aFRvT25lKSB7XG4gICAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgICBjdHgubW92ZVRvKHgsIHkpO1xuICAgICAgICAgIGN0eC5yZXNldFRyYW5zZm9ybSgpO1xuICAgICAgICAgIGN0eC5saW5lV2lkdGggPSBNYXRoLnJvdW5kKHRoaXMuX2NvbWJpbmVkU2NhbGVGYWN0b3IpO1xuICAgICAgICAgIGN0eC5zdHJva2VUZXh0KGNoYXJhY3RlciwgMCwgMCk7XG4gICAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdHguc3Ryb2tlVGV4dChjaGFyYWN0ZXIsIHgsIHkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzQWRkVG9QYXRoU2V0KSB7XG4gICAgICBjb25zdCBwYXRocyA9IHRoaXMucGVuZGluZ1RleHRQYXRocyB8fCAodGhpcy5wZW5kaW5nVGV4dFBhdGhzID0gW10pO1xuICAgICAgcGF0aHMucHVzaCh7XG4gICAgICAgIHRyYW5zZm9ybTogY3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm0sXG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIGZvbnRTaXplLFxuICAgICAgICBhZGRUb1BhdGhcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldCBpc0ZvbnRTdWJwaXhlbEFBRW5hYmxlZCgpIHtcbiAgICBjb25zdCB7XG4gICAgICBjb250ZXh0OiBjdHhcbiAgICB9ID0gdGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoXCJpc0ZvbnRTdWJwaXhlbEFBRW5hYmxlZFwiLCAxMCwgMTApO1xuICAgIGN0eC5zY2FsZSgxLjUsIDEpO1xuICAgIGN0eC5maWxsVGV4dChcIklcIiwgMCwgMTApO1xuICAgIGNvbnN0IGRhdGEgPSBjdHguZ2V0SW1hZ2VEYXRhKDAsIDAsIDEwLCAxMCkuZGF0YTtcbiAgICBsZXQgZW5hYmxlZCA9IGZhbHNlO1xuXG4gICAgZm9yIChsZXQgaSA9IDM7IGkgPCBkYXRhLmxlbmd0aDsgaSArPSA0KSB7XG4gICAgICBpZiAoZGF0YVtpXSA+IDAgJiYgZGF0YVtpXSA8IDI1NSkge1xuICAgICAgICBlbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiaXNGb250U3VicGl4ZWxBQUVuYWJsZWRcIiwgZW5hYmxlZCk7XG4gIH1cblxuICBzaG93VGV4dChnbHlwaHMpIHtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jdXJyZW50O1xuICAgIGNvbnN0IGZvbnQgPSBjdXJyZW50LmZvbnQ7XG5cbiAgICBpZiAoZm9udC5pc1R5cGUzRm9udCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2hvd1R5cGUzVGV4dChnbHlwaHMpO1xuICAgIH1cblxuICAgIGNvbnN0IGZvbnRTaXplID0gY3VycmVudC5mb250U2l6ZTtcblxuICAgIGlmIChmb250U2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBjdHggPSB0aGlzLmN0eDtcbiAgICBjb25zdCBmb250U2l6ZVNjYWxlID0gY3VycmVudC5mb250U2l6ZVNjYWxlO1xuICAgIGNvbnN0IGNoYXJTcGFjaW5nID0gY3VycmVudC5jaGFyU3BhY2luZztcbiAgICBjb25zdCB3b3JkU3BhY2luZyA9IGN1cnJlbnQud29yZFNwYWNpbmc7XG4gICAgY29uc3QgZm9udERpcmVjdGlvbiA9IGN1cnJlbnQuZm9udERpcmVjdGlvbjtcbiAgICBjb25zdCB0ZXh0SFNjYWxlID0gY3VycmVudC50ZXh0SFNjYWxlICogZm9udERpcmVjdGlvbjtcbiAgICBjb25zdCBnbHlwaHNMZW5ndGggPSBnbHlwaHMubGVuZ3RoO1xuICAgIGNvbnN0IHZlcnRpY2FsID0gZm9udC52ZXJ0aWNhbDtcbiAgICBjb25zdCBzcGFjaW5nRGlyID0gdmVydGljYWwgPyAxIDogLTE7XG4gICAgY29uc3QgZGVmYXVsdFZNZXRyaWNzID0gZm9udC5kZWZhdWx0Vk1ldHJpY3M7XG4gICAgY29uc3Qgd2lkdGhBZHZhbmNlU2NhbGUgPSBmb250U2l6ZSAqIGN1cnJlbnQuZm9udE1hdHJpeFswXTtcbiAgICBjb25zdCBzaW1wbGVGaWxsVGV4dCA9IGN1cnJlbnQudGV4dFJlbmRlcmluZ01vZGUgPT09IF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLkZJTEwgJiYgIWZvbnQuZGlzYWJsZUZvbnRGYWNlICYmICFjdXJyZW50LnBhdHRlcm5GaWxsO1xuICAgIGN0eC5zYXZlKCk7XG4gICAgY3R4LnRyYW5zZm9ybS5hcHBseShjdHgsIGN1cnJlbnQudGV4dE1hdHJpeCk7XG4gICAgY3R4LnRyYW5zbGF0ZShjdXJyZW50LngsIGN1cnJlbnQueSArIGN1cnJlbnQudGV4dFJpc2UpO1xuXG4gICAgaWYgKGZvbnREaXJlY3Rpb24gPiAwKSB7XG4gICAgICBjdHguc2NhbGUodGV4dEhTY2FsZSwgLTEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdHguc2NhbGUodGV4dEhTY2FsZSwgMSk7XG4gICAgfVxuXG4gICAgbGV0IHBhdHRlcm5UcmFuc2Zvcm07XG5cbiAgICBpZiAoY3VycmVudC5wYXR0ZXJuRmlsbCkge1xuICAgICAgY3R4LnNhdmUoKTtcbiAgICAgIGNvbnN0IHBhdHRlcm4gPSBjdXJyZW50LmZpbGxDb2xvci5nZXRQYXR0ZXJuKGN0eCwgdGhpcywgY3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlLCBfcGF0dGVybl9oZWxwZXIuUGF0aFR5cGUuRklMTCk7XG4gICAgICBwYXR0ZXJuVHJhbnNmb3JtID0gY3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm07XG4gICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgY3R4LmZpbGxTdHlsZSA9IHBhdHRlcm47XG4gICAgfVxuXG4gICAgbGV0IGxpbmVXaWR0aCA9IGN1cnJlbnQubGluZVdpZHRoO1xuICAgIGxldCByZXNldExpbmVXaWR0aFRvT25lID0gZmFsc2U7XG4gICAgY29uc3Qgc2NhbGUgPSBjdXJyZW50LnRleHRNYXRyaXhTY2FsZTtcblxuICAgIGlmIChzY2FsZSA9PT0gMCB8fCBsaW5lV2lkdGggPT09IDApIHtcbiAgICAgIGNvbnN0IGZpbGxTdHJva2VNb2RlID0gY3VycmVudC50ZXh0UmVuZGVyaW5nTW9kZSAmIF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLkZJTExfU1RST0tFX01BU0s7XG5cbiAgICAgIGlmIChmaWxsU3Ryb2tlTW9kZSA9PT0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuU1RST0tFIHx8IGZpbGxTdHJva2VNb2RlID09PSBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRSkge1xuICAgICAgICB0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoID0gbnVsbDtcbiAgICAgICAgbGluZVdpZHRoID0gdGhpcy5nZXRTaW5nbGVQaXhlbFdpZHRoKCk7XG4gICAgICAgIHJlc2V0TGluZVdpZHRoVG9PbmUgPSBsaW5lV2lkdGggPCAwO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsaW5lV2lkdGggLz0gc2NhbGU7XG4gICAgfVxuXG4gICAgaWYgKGZvbnRTaXplU2NhbGUgIT09IDEuMCkge1xuICAgICAgY3R4LnNjYWxlKGZvbnRTaXplU2NhbGUsIGZvbnRTaXplU2NhbGUpO1xuICAgICAgbGluZVdpZHRoIC89IGZvbnRTaXplU2NhbGU7XG4gICAgfVxuXG4gICAgY3R4LmxpbmVXaWR0aCA9IGxpbmVXaWR0aDtcbiAgICBsZXQgeCA9IDAsXG4gICAgICAgIGk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgZ2x5cGhzTGVuZ3RoOyArK2kpIHtcbiAgICAgIGNvbnN0IGdseXBoID0gZ2x5cGhzW2ldO1xuXG4gICAgICBpZiAoKDAsIF91dGlsLmlzTnVtKShnbHlwaCkpIHtcbiAgICAgICAgeCArPSBzcGFjaW5nRGlyICogZ2x5cGggKiBmb250U2l6ZSAvIDEwMDA7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBsZXQgcmVzdG9yZU5lZWRlZCA9IGZhbHNlO1xuICAgICAgY29uc3Qgc3BhY2luZyA9IChnbHlwaC5pc1NwYWNlID8gd29yZFNwYWNpbmcgOiAwKSArIGNoYXJTcGFjaW5nO1xuICAgICAgY29uc3QgY2hhcmFjdGVyID0gZ2x5cGguZm9udENoYXI7XG4gICAgICBjb25zdCBhY2NlbnQgPSBnbHlwaC5hY2NlbnQ7XG4gICAgICBsZXQgc2NhbGVkWCwgc2NhbGVkWTtcbiAgICAgIGxldCB3aWR0aCA9IGdseXBoLndpZHRoO1xuXG4gICAgICBpZiAodmVydGljYWwpIHtcbiAgICAgICAgY29uc3Qgdm1ldHJpYyA9IGdseXBoLnZtZXRyaWMgfHwgZGVmYXVsdFZNZXRyaWNzO1xuICAgICAgICBjb25zdCB2eCA9IC0oZ2x5cGgudm1ldHJpYyA/IHZtZXRyaWNbMV0gOiB3aWR0aCAqIDAuNSkgKiB3aWR0aEFkdmFuY2VTY2FsZTtcbiAgICAgICAgY29uc3QgdnkgPSB2bWV0cmljWzJdICogd2lkdGhBZHZhbmNlU2NhbGU7XG4gICAgICAgIHdpZHRoID0gdm1ldHJpYyA/IC12bWV0cmljWzBdIDogd2lkdGg7XG4gICAgICAgIHNjYWxlZFggPSB2eCAvIGZvbnRTaXplU2NhbGU7XG4gICAgICAgIHNjYWxlZFkgPSAoeCArIHZ5KSAvIGZvbnRTaXplU2NhbGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzY2FsZWRYID0geCAvIGZvbnRTaXplU2NhbGU7XG4gICAgICAgIHNjYWxlZFkgPSAwO1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9udC5yZW1lYXN1cmUgJiYgd2lkdGggPiAwKSB7XG4gICAgICAgIGNvbnN0IG1lYXN1cmVkV2lkdGggPSBjdHgubWVhc3VyZVRleHQoY2hhcmFjdGVyKS53aWR0aCAqIDEwMDAgLyBmb250U2l6ZSAqIGZvbnRTaXplU2NhbGU7XG5cbiAgICAgICAgaWYgKHdpZHRoIDwgbWVhc3VyZWRXaWR0aCAmJiB0aGlzLmlzRm9udFN1YnBpeGVsQUFFbmFibGVkKSB7XG4gICAgICAgICAgY29uc3QgY2hhcmFjdGVyU2NhbGVYID0gd2lkdGggLyBtZWFzdXJlZFdpZHRoO1xuICAgICAgICAgIHJlc3RvcmVOZWVkZWQgPSB0cnVlO1xuICAgICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgICAgY3R4LnNjYWxlKGNoYXJhY3RlclNjYWxlWCwgMSk7XG4gICAgICAgICAgc2NhbGVkWCAvPSBjaGFyYWN0ZXJTY2FsZVg7XG4gICAgICAgIH0gZWxzZSBpZiAod2lkdGggIT09IG1lYXN1cmVkV2lkdGgpIHtcbiAgICAgICAgICBzY2FsZWRYICs9ICh3aWR0aCAtIG1lYXN1cmVkV2lkdGgpIC8gMjAwMCAqIGZvbnRTaXplIC8gZm9udFNpemVTY2FsZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5jb250ZW50VmlzaWJsZSAmJiAoZ2x5cGguaXNJbkZvbnQgfHwgZm9udC5taXNzaW5nRmlsZSkpIHtcbiAgICAgICAgaWYgKHNpbXBsZUZpbGxUZXh0ICYmICFhY2NlbnQpIHtcbiAgICAgICAgICBjdHguZmlsbFRleHQoY2hhcmFjdGVyLCBzY2FsZWRYLCBzY2FsZWRZKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnBhaW50Q2hhcihjaGFyYWN0ZXIsIHNjYWxlZFgsIHNjYWxlZFksIHBhdHRlcm5UcmFuc2Zvcm0sIHJlc2V0TGluZVdpZHRoVG9PbmUpO1xuXG4gICAgICAgICAgaWYgKGFjY2VudCkge1xuICAgICAgICAgICAgY29uc3Qgc2NhbGVkQWNjZW50WCA9IHNjYWxlZFggKyBmb250U2l6ZSAqIGFjY2VudC5vZmZzZXQueCAvIGZvbnRTaXplU2NhbGU7XG4gICAgICAgICAgICBjb25zdCBzY2FsZWRBY2NlbnRZID0gc2NhbGVkWSAtIGZvbnRTaXplICogYWNjZW50Lm9mZnNldC55IC8gZm9udFNpemVTY2FsZTtcbiAgICAgICAgICAgIHRoaXMucGFpbnRDaGFyKGFjY2VudC5mb250Q2hhciwgc2NhbGVkQWNjZW50WCwgc2NhbGVkQWNjZW50WSwgcGF0dGVyblRyYW5zZm9ybSwgcmVzZXRMaW5lV2lkdGhUb09uZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxldCBjaGFyV2lkdGg7XG5cbiAgICAgIGlmICh2ZXJ0aWNhbCkge1xuICAgICAgICBjaGFyV2lkdGggPSB3aWR0aCAqIHdpZHRoQWR2YW5jZVNjYWxlIC0gc3BhY2luZyAqIGZvbnREaXJlY3Rpb247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGFyV2lkdGggPSB3aWR0aCAqIHdpZHRoQWR2YW5jZVNjYWxlICsgc3BhY2luZyAqIGZvbnREaXJlY3Rpb247XG4gICAgICB9XG5cbiAgICAgIHggKz0gY2hhcldpZHRoO1xuXG4gICAgICBpZiAocmVzdG9yZU5lZWRlZCkge1xuICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2ZXJ0aWNhbCkge1xuICAgICAgY3VycmVudC55IC09IHg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnQueCArPSB4ICogdGV4dEhTY2FsZTtcbiAgICB9XG5cbiAgICBjdHgucmVzdG9yZSgpO1xuICAgIHRoaXMuY29tcG9zZSgpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBzaG93VHlwZTNUZXh0KGdseXBocykge1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuY3R4O1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7XG4gICAgY29uc3QgZm9udCA9IGN1cnJlbnQuZm9udDtcbiAgICBjb25zdCBmb250U2l6ZSA9IGN1cnJlbnQuZm9udFNpemU7XG4gICAgY29uc3QgZm9udERpcmVjdGlvbiA9IGN1cnJlbnQuZm9udERpcmVjdGlvbjtcbiAgICBjb25zdCBzcGFjaW5nRGlyID0gZm9udC52ZXJ0aWNhbCA/IDEgOiAtMTtcbiAgICBjb25zdCBjaGFyU3BhY2luZyA9IGN1cnJlbnQuY2hhclNwYWNpbmc7XG4gICAgY29uc3Qgd29yZFNwYWNpbmcgPSBjdXJyZW50LndvcmRTcGFjaW5nO1xuICAgIGNvbnN0IHRleHRIU2NhbGUgPSBjdXJyZW50LnRleHRIU2NhbGUgKiBmb250RGlyZWN0aW9uO1xuICAgIGNvbnN0IGZvbnRNYXRyaXggPSBjdXJyZW50LmZvbnRNYXRyaXggfHwgX3V0aWwuRk9OVF9JREVOVElUWV9NQVRSSVg7XG4gICAgY29uc3QgZ2x5cGhzTGVuZ3RoID0gZ2x5cGhzLmxlbmd0aDtcbiAgICBjb25zdCBpc1RleHRJbnZpc2libGUgPSBjdXJyZW50LnRleHRSZW5kZXJpbmdNb2RlID09PSBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5JTlZJU0lCTEU7XG4gICAgbGV0IGksIGdseXBoLCB3aWR0aCwgc3BhY2luZ0xlbmd0aDtcblxuICAgIGlmIChpc1RleHRJbnZpc2libGUgfHwgZm9udFNpemUgPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoID0gbnVsbDtcbiAgICBjdHguc2F2ZSgpO1xuICAgIGN0eC50cmFuc2Zvcm0uYXBwbHkoY3R4LCBjdXJyZW50LnRleHRNYXRyaXgpO1xuICAgIGN0eC50cmFuc2xhdGUoY3VycmVudC54LCBjdXJyZW50LnkpO1xuICAgIGN0eC5zY2FsZSh0ZXh0SFNjYWxlLCBmb250RGlyZWN0aW9uKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBnbHlwaHNMZW5ndGg7ICsraSkge1xuICAgICAgZ2x5cGggPSBnbHlwaHNbaV07XG5cbiAgICAgIGlmICgoMCwgX3V0aWwuaXNOdW0pKGdseXBoKSkge1xuICAgICAgICBzcGFjaW5nTGVuZ3RoID0gc3BhY2luZ0RpciAqIGdseXBoICogZm9udFNpemUgLyAxMDAwO1xuICAgICAgICB0aGlzLmN0eC50cmFuc2xhdGUoc3BhY2luZ0xlbmd0aCwgMCk7XG4gICAgICAgIGN1cnJlbnQueCArPSBzcGFjaW5nTGVuZ3RoICogdGV4dEhTY2FsZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNwYWNpbmcgPSAoZ2x5cGguaXNTcGFjZSA/IHdvcmRTcGFjaW5nIDogMCkgKyBjaGFyU3BhY2luZztcbiAgICAgIGNvbnN0IG9wZXJhdG9yTGlzdCA9IGZvbnQuY2hhclByb2NPcGVyYXRvckxpc3RbZ2x5cGgub3BlcmF0b3JMaXN0SWRdO1xuXG4gICAgICBpZiAoIW9wZXJhdG9yTGlzdCkge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoYFR5cGUzIGNoYXJhY3RlciBcIiR7Z2x5cGgub3BlcmF0b3JMaXN0SWR9XCIgaXMgbm90IGF2YWlsYWJsZS5gKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmNvbnRlbnRWaXNpYmxlKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc2luZ1R5cGUzID0gZ2x5cGg7XG4gICAgICAgIHRoaXMuc2F2ZSgpO1xuICAgICAgICBjdHguc2NhbGUoZm9udFNpemUsIGZvbnRTaXplKTtcbiAgICAgICAgY3R4LnRyYW5zZm9ybS5hcHBseShjdHgsIGZvbnRNYXRyaXgpO1xuICAgICAgICB0aGlzLmV4ZWN1dGVPcGVyYXRvckxpc3Qob3BlcmF0b3JMaXN0KTtcbiAgICAgICAgdGhpcy5yZXN0b3JlKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRyYW5zZm9ybWVkID0gX3V0aWwuVXRpbC5hcHBseVRyYW5zZm9ybShbZ2x5cGgud2lkdGgsIDBdLCBmb250TWF0cml4KTtcblxuICAgICAgd2lkdGggPSB0cmFuc2Zvcm1lZFswXSAqIGZvbnRTaXplICsgc3BhY2luZztcbiAgICAgIGN0eC50cmFuc2xhdGUod2lkdGgsIDApO1xuICAgICAgY3VycmVudC54ICs9IHdpZHRoICogdGV4dEhTY2FsZTtcbiAgICB9XG5cbiAgICBjdHgucmVzdG9yZSgpO1xuICAgIHRoaXMucHJvY2Vzc2luZ1R5cGUzID0gbnVsbDtcbiAgfVxuXG4gIHNldENoYXJXaWR0aCh4V2lkdGgsIHlXaWR0aCkge31cblxuICBzZXRDaGFyV2lkdGhBbmRCb3VuZHMoeFdpZHRoLCB5V2lkdGgsIGxseCwgbGx5LCB1cngsIHVyeSkge1xuICAgIHRoaXMuY3R4LnJlY3QobGx4LCBsbHksIHVyeCAtIGxseCwgdXJ5IC0gbGx5KTtcbiAgICB0aGlzLmNsaXAoKTtcbiAgICB0aGlzLmVuZFBhdGgoKTtcbiAgfVxuXG4gIGdldENvbG9yTl9QYXR0ZXJuKElSKSB7XG4gICAgbGV0IHBhdHRlcm47XG5cbiAgICBpZiAoSVJbMF0gPT09IFwiVGlsaW5nUGF0dGVyblwiKSB7XG4gICAgICBjb25zdCBjb2xvciA9IElSWzFdO1xuICAgICAgY29uc3QgYmFzZVRyYW5zZm9ybSA9IHRoaXMuYmFzZVRyYW5zZm9ybSB8fCB0aGlzLmN0eC5tb3pDdXJyZW50VHJhbnNmb3JtLnNsaWNlKCk7XG4gICAgICBjb25zdCBjYW52YXNHcmFwaGljc0ZhY3RvcnkgPSB7XG4gICAgICAgIGNyZWF0ZUNhbnZhc0dyYXBoaWNzOiBjdHggPT4ge1xuICAgICAgICAgIHJldHVybiBuZXcgQ2FudmFzR3JhcGhpY3MoY3R4LCB0aGlzLmNvbW1vbk9ianMsIHRoaXMub2JqcywgdGhpcy5jYW52YXNGYWN0b3J5KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHBhdHRlcm4gPSBuZXcgX3BhdHRlcm5faGVscGVyLlRpbGluZ1BhdHRlcm4oSVIsIGNvbG9yLCB0aGlzLmN0eCwgY2FudmFzR3JhcGhpY3NGYWN0b3J5LCBiYXNlVHJhbnNmb3JtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGF0dGVybiA9IHRoaXMuX2dldFBhdHRlcm4oSVJbMV0sIElSWzJdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGF0dGVybjtcbiAgfVxuXG4gIHNldFN0cm9rZUNvbG9yTigpIHtcbiAgICB0aGlzLmN1cnJlbnQuc3Ryb2tlQ29sb3IgPSB0aGlzLmdldENvbG9yTl9QYXR0ZXJuKGFyZ3VtZW50cyk7XG4gIH1cblxuICBzZXRGaWxsQ29sb3JOKCkge1xuICAgIHRoaXMuY3VycmVudC5maWxsQ29sb3IgPSB0aGlzLmdldENvbG9yTl9QYXR0ZXJuKGFyZ3VtZW50cyk7XG4gICAgdGhpcy5jdXJyZW50LnBhdHRlcm5GaWxsID0gdHJ1ZTtcbiAgfVxuXG4gIHNldFN0cm9rZVJHQkNvbG9yKHIsIGcsIGIpIHtcbiAgICBjb25zdCBjb2xvciA9IF91dGlsLlV0aWwubWFrZUhleENvbG9yKHIsIGcsIGIpO1xuXG4gICAgdGhpcy5jdHguc3Ryb2tlU3R5bGUgPSBjb2xvcjtcbiAgICB0aGlzLmN1cnJlbnQuc3Ryb2tlQ29sb3IgPSBjb2xvcjtcbiAgfVxuXG4gIHNldEZpbGxSR0JDb2xvcihyLCBnLCBiKSB7XG4gICAgY29uc3QgY29sb3IgPSBfdXRpbC5VdGlsLm1ha2VIZXhDb2xvcihyLCBnLCBiKTtcblxuICAgIHRoaXMuY3R4LmZpbGxTdHlsZSA9IGNvbG9yO1xuICAgIHRoaXMuY3VycmVudC5maWxsQ29sb3IgPSBjb2xvcjtcbiAgICB0aGlzLmN1cnJlbnQucGF0dGVybkZpbGwgPSBmYWxzZTtcbiAgfVxuXG4gIF9nZXRQYXR0ZXJuKG9iaklkLCBtYXRyaXggPSBudWxsKSB7XG4gICAgbGV0IHBhdHRlcm47XG5cbiAgICBpZiAodGhpcy5jYWNoZWRQYXR0ZXJucy5oYXMob2JqSWQpKSB7XG4gICAgICBwYXR0ZXJuID0gdGhpcy5jYWNoZWRQYXR0ZXJucy5nZXQob2JqSWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXR0ZXJuID0gKDAsIF9wYXR0ZXJuX2hlbHBlci5nZXRTaGFkaW5nUGF0dGVybikodGhpcy5vYmpzLmdldChvYmpJZCkpO1xuICAgICAgdGhpcy5jYWNoZWRQYXR0ZXJucy5zZXQob2JqSWQsIHBhdHRlcm4pO1xuICAgIH1cblxuICAgIGlmIChtYXRyaXgpIHtcbiAgICAgIHBhdHRlcm4ubWF0cml4ID0gbWF0cml4O1xuICAgIH1cblxuICAgIHJldHVybiBwYXR0ZXJuO1xuICB9XG5cbiAgc2hhZGluZ0ZpbGwob2JqSWQpIHtcbiAgICBpZiAoIXRoaXMuY29udGVudFZpc2libGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjdHggPSB0aGlzLmN0eDtcbiAgICB0aGlzLnNhdmUoKTtcblxuICAgIGNvbnN0IHBhdHRlcm4gPSB0aGlzLl9nZXRQYXR0ZXJuKG9iaklkKTtcblxuICAgIGN0eC5maWxsU3R5bGUgPSBwYXR0ZXJuLmdldFBhdHRlcm4oY3R4LCB0aGlzLCBjdHgubW96Q3VycmVudFRyYW5zZm9ybUludmVyc2UsIF9wYXR0ZXJuX2hlbHBlci5QYXRoVHlwZS5TSEFESU5HKTtcbiAgICBjb25zdCBpbnYgPSBjdHgubW96Q3VycmVudFRyYW5zZm9ybUludmVyc2U7XG5cbiAgICBpZiAoaW52KSB7XG4gICAgICBjb25zdCBjYW52YXMgPSBjdHguY2FudmFzO1xuICAgICAgY29uc3Qgd2lkdGggPSBjYW52YXMud2lkdGg7XG4gICAgICBjb25zdCBoZWlnaHQgPSBjYW52YXMuaGVpZ2h0O1xuXG4gICAgICBjb25zdCBibCA9IF91dGlsLlV0aWwuYXBwbHlUcmFuc2Zvcm0oWzAsIDBdLCBpbnYpO1xuXG4gICAgICBjb25zdCBiciA9IF91dGlsLlV0aWwuYXBwbHlUcmFuc2Zvcm0oWzAsIGhlaWdodF0sIGludik7XG5cbiAgICAgIGNvbnN0IHVsID0gX3V0aWwuVXRpbC5hcHBseVRyYW5zZm9ybShbd2lkdGgsIDBdLCBpbnYpO1xuXG4gICAgICBjb25zdCB1ciA9IF91dGlsLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW3dpZHRoLCBoZWlnaHRdLCBpbnYpO1xuXG4gICAgICBjb25zdCB4MCA9IE1hdGgubWluKGJsWzBdLCBiclswXSwgdWxbMF0sIHVyWzBdKTtcbiAgICAgIGNvbnN0IHkwID0gTWF0aC5taW4oYmxbMV0sIGJyWzFdLCB1bFsxXSwgdXJbMV0pO1xuICAgICAgY29uc3QgeDEgPSBNYXRoLm1heChibFswXSwgYnJbMF0sIHVsWzBdLCB1clswXSk7XG4gICAgICBjb25zdCB5MSA9IE1hdGgubWF4KGJsWzFdLCBiclsxXSwgdWxbMV0sIHVyWzFdKTtcbiAgICAgIHRoaXMuY3R4LmZpbGxSZWN0KHgwLCB5MCwgeDEgLSB4MCwgeTEgLSB5MCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3R4LmZpbGxSZWN0KC0xZTEwLCAtMWUxMCwgMmUxMCwgMmUxMCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb21wb3NlKHRoaXMuY3VycmVudC5nZXRDbGlwcGVkUGF0aEJvdW5kaW5nQm94KCkpO1xuICAgIHRoaXMucmVzdG9yZSgpO1xuICB9XG5cbiAgYmVnaW5JbmxpbmVJbWFnZSgpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiU2hvdWxkIG5vdCBjYWxsIGJlZ2luSW5saW5lSW1hZ2VcIik7XG4gIH1cblxuICBiZWdpbkltYWdlRGF0YSgpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiU2hvdWxkIG5vdCBjYWxsIGJlZ2luSW1hZ2VEYXRhXCIpO1xuICB9XG5cbiAgcGFpbnRGb3JtWE9iamVjdEJlZ2luKG1hdHJpeCwgYmJveCkge1xuICAgIGlmICghdGhpcy5jb250ZW50VmlzaWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2F2ZSgpO1xuICAgIHRoaXMuYmFzZVRyYW5zZm9ybVN0YWNrLnB1c2godGhpcy5iYXNlVHJhbnNmb3JtKTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KG1hdHJpeCkgJiYgbWF0cml4Lmxlbmd0aCA9PT0gNikge1xuICAgICAgdGhpcy50cmFuc2Zvcm0uYXBwbHkodGhpcywgbWF0cml4KTtcbiAgICB9XG5cbiAgICB0aGlzLmJhc2VUcmFuc2Zvcm0gPSB0aGlzLmN0eC5tb3pDdXJyZW50VHJhbnNmb3JtO1xuXG4gICAgaWYgKGJib3gpIHtcbiAgICAgIGNvbnN0IHdpZHRoID0gYmJveFsyXSAtIGJib3hbMF07XG4gICAgICBjb25zdCBoZWlnaHQgPSBiYm94WzNdIC0gYmJveFsxXTtcbiAgICAgIHRoaXMuY3R4LnJlY3QoYmJveFswXSwgYmJveFsxXSwgd2lkdGgsIGhlaWdodCk7XG4gICAgICB0aGlzLmN1cnJlbnQudXBkYXRlUGF0aE1pbk1heCh0aGlzLmN0eC5tb3pDdXJyZW50VHJhbnNmb3JtLCBiYm94WzBdLCBiYm94WzFdKTtcbiAgICAgIHRoaXMuY3VycmVudC51cGRhdGVQYXRoTWluTWF4KHRoaXMuY3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm0sIGJib3hbMl0sIGJib3hbM10pO1xuICAgICAgdGhpcy5jbGlwKCk7XG4gICAgICB0aGlzLmVuZFBhdGgoKTtcbiAgICB9XG4gIH1cblxuICBwYWludEZvcm1YT2JqZWN0RW5kKCkge1xuICAgIGlmICghdGhpcy5jb250ZW50VmlzaWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucmVzdG9yZSgpO1xuICAgIHRoaXMuYmFzZVRyYW5zZm9ybSA9IHRoaXMuYmFzZVRyYW5zZm9ybVN0YWNrLnBvcCgpO1xuICB9XG5cbiAgYmVnaW5Hcm91cChncm91cCkge1xuICAgIGlmICghdGhpcy5jb250ZW50VmlzaWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2F2ZSgpO1xuICAgIGNvbnN0IHN1c3BlbmRlZEN0eCA9IHRoaXMuc3VzcGVuZGVkQ3R4O1xuXG4gICAgaWYgKHRoaXMuY3VycmVudC5hY3RpdmVTTWFzaykge1xuICAgICAgdGhpcy5zdXNwZW5kZWRDdHggPSBudWxsO1xuICAgICAgdGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrID0gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50Q3R4ID0gdGhpcy5jdHg7XG5cbiAgICBpZiAoIWdyb3VwLmlzb2xhdGVkKSB7XG4gICAgICAoMCwgX3V0aWwuaW5mbykoXCJUT0RPOiBTdXBwb3J0IG5vbi1pc29sYXRlZCBncm91cHMuXCIpO1xuICAgIH1cblxuICAgIGlmIChncm91cC5rbm9ja291dCkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKFwiS25vY2tvdXQgZ3JvdXBzIG5vdCBzdXBwb3J0ZWQuXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRUcmFuc2Zvcm0gPSBjdXJyZW50Q3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm07XG5cbiAgICBpZiAoZ3JvdXAubWF0cml4KSB7XG4gICAgICBjdXJyZW50Q3R4LnRyYW5zZm9ybS5hcHBseShjdXJyZW50Q3R4LCBncm91cC5tYXRyaXgpO1xuICAgIH1cblxuICAgIGlmICghZ3JvdXAuYmJveCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQm91bmRpbmcgYm94IGlzIHJlcXVpcmVkLlwiKTtcbiAgICB9XG5cbiAgICBsZXQgYm91bmRzID0gX3V0aWwuVXRpbC5nZXRBeGlhbEFsaWduZWRCb3VuZGluZ0JveChncm91cC5iYm94LCBjdXJyZW50Q3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm0pO1xuXG4gICAgY29uc3QgY2FudmFzQm91bmRzID0gWzAsIDAsIGN1cnJlbnRDdHguY2FudmFzLndpZHRoLCBjdXJyZW50Q3R4LmNhbnZhcy5oZWlnaHRdO1xuICAgIGJvdW5kcyA9IF91dGlsLlV0aWwuaW50ZXJzZWN0KGJvdW5kcywgY2FudmFzQm91bmRzKSB8fCBbMCwgMCwgMCwgMF07XG4gICAgY29uc3Qgb2Zmc2V0WCA9IE1hdGguZmxvb3IoYm91bmRzWzBdKTtcbiAgICBjb25zdCBvZmZzZXRZID0gTWF0aC5mbG9vcihib3VuZHNbMV0pO1xuICAgIGxldCBkcmF3bldpZHRoID0gTWF0aC5tYXgoTWF0aC5jZWlsKGJvdW5kc1syXSkgLSBvZmZzZXRYLCAxKTtcbiAgICBsZXQgZHJhd25IZWlnaHQgPSBNYXRoLm1heChNYXRoLmNlaWwoYm91bmRzWzNdKSAtIG9mZnNldFksIDEpO1xuICAgIGxldCBzY2FsZVggPSAxLFxuICAgICAgICBzY2FsZVkgPSAxO1xuXG4gICAgaWYgKGRyYXduV2lkdGggPiBNQVhfR1JPVVBfU0laRSkge1xuICAgICAgc2NhbGVYID0gZHJhd25XaWR0aCAvIE1BWF9HUk9VUF9TSVpFO1xuICAgICAgZHJhd25XaWR0aCA9IE1BWF9HUk9VUF9TSVpFO1xuICAgIH1cblxuICAgIGlmIChkcmF3bkhlaWdodCA+IE1BWF9HUk9VUF9TSVpFKSB7XG4gICAgICBzY2FsZVkgPSBkcmF3bkhlaWdodCAvIE1BWF9HUk9VUF9TSVpFO1xuICAgICAgZHJhd25IZWlnaHQgPSBNQVhfR1JPVVBfU0laRTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnQuc3RhcnROZXdQYXRoQW5kQ2xpcEJveChbMCwgMCwgZHJhd25XaWR0aCwgZHJhd25IZWlnaHRdKTtcbiAgICBsZXQgY2FjaGVJZCA9IFwiZ3JvdXBBdFwiICsgdGhpcy5ncm91cExldmVsO1xuXG4gICAgaWYgKGdyb3VwLnNtYXNrKSB7XG4gICAgICBjYWNoZUlkICs9IFwiX3NtYXNrX1wiICsgdGhpcy5zbWFza0NvdW50ZXIrKyAlIDI7XG4gICAgfVxuXG4gICAgY29uc3Qgc2NyYXRjaENhbnZhcyA9IHRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKGNhY2hlSWQsIGRyYXduV2lkdGgsIGRyYXduSGVpZ2h0LCB0cnVlKTtcbiAgICBjb25zdCBncm91cEN0eCA9IHNjcmF0Y2hDYW52YXMuY29udGV4dDtcbiAgICBncm91cEN0eC5zY2FsZSgxIC8gc2NhbGVYLCAxIC8gc2NhbGVZKTtcbiAgICBncm91cEN0eC50cmFuc2xhdGUoLW9mZnNldFgsIC1vZmZzZXRZKTtcbiAgICBncm91cEN0eC50cmFuc2Zvcm0uYXBwbHkoZ3JvdXBDdHgsIGN1cnJlbnRUcmFuc2Zvcm0pO1xuXG4gICAgaWYgKGdyb3VwLnNtYXNrKSB7XG4gICAgICB0aGlzLnNtYXNrU3RhY2sucHVzaCh7XG4gICAgICAgIGNhbnZhczogc2NyYXRjaENhbnZhcy5jYW52YXMsXG4gICAgICAgIGNvbnRleHQ6IGdyb3VwQ3R4LFxuICAgICAgICBvZmZzZXRYLFxuICAgICAgICBvZmZzZXRZLFxuICAgICAgICBzY2FsZVgsXG4gICAgICAgIHNjYWxlWSxcbiAgICAgICAgc3VidHlwZTogZ3JvdXAuc21hc2suc3VidHlwZSxcbiAgICAgICAgYmFja2Ryb3A6IGdyb3VwLnNtYXNrLmJhY2tkcm9wLFxuICAgICAgICB0cmFuc2Zlck1hcDogZ3JvdXAuc21hc2sudHJhbnNmZXJNYXAgfHwgbnVsbCxcbiAgICAgICAgc3RhcnRUcmFuc2Zvcm1JbnZlcnNlOiBudWxsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudEN0eC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG4gICAgICBjdXJyZW50Q3R4LnRyYW5zbGF0ZShvZmZzZXRYLCBvZmZzZXRZKTtcbiAgICAgIGN1cnJlbnRDdHguc2NhbGUoc2NhbGVYLCBzY2FsZVkpO1xuICAgICAgY3VycmVudEN0eC5zYXZlKCk7XG4gICAgfVxuXG4gICAgY29weUN0eFN0YXRlKGN1cnJlbnRDdHgsIGdyb3VwQ3R4KTtcbiAgICB0aGlzLmN0eCA9IGdyb3VwQ3R4O1xuICAgIHRoaXMuc2V0R1N0YXRlKFtbXCJCTVwiLCBcInNvdXJjZS1vdmVyXCJdLCBbXCJjYVwiLCAxXSwgW1wiQ0FcIiwgMV1dKTtcbiAgICB0aGlzLmdyb3VwU3RhY2sucHVzaCh7XG4gICAgICBjdHg6IGN1cnJlbnRDdHgsXG4gICAgICBzdXNwZW5kZWRDdHhcbiAgICB9KTtcbiAgICB0aGlzLmdyb3VwTGV2ZWwrKztcbiAgfVxuXG4gIGVuZEdyb3VwKGdyb3VwKSB7XG4gICAgaWYgKCF0aGlzLmNvbnRlbnRWaXNpYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5ncm91cExldmVsLS07XG4gICAgY29uc3QgZ3JvdXBDdHggPSB0aGlzLmN0eDtcbiAgICBjb25zdCB7XG4gICAgICBjdHgsXG4gICAgICBzdXNwZW5kZWRDdHhcbiAgICB9ID0gdGhpcy5ncm91cFN0YWNrLnBvcCgpO1xuICAgIHRoaXMuY3R4ID0gY3R4O1xuICAgIHRoaXMuY3R4LmltYWdlU21vb3RoaW5nRW5hYmxlZCA9IGZhbHNlO1xuXG4gICAgaWYgKHN1c3BlbmRlZEN0eCkge1xuICAgICAgdGhpcy5zdXNwZW5kZWRDdHggPSBzdXNwZW5kZWRDdHg7XG4gICAgfVxuXG4gICAgaWYgKGdyb3VwLnNtYXNrKSB7XG4gICAgICB0aGlzLnRlbXBTTWFzayA9IHRoaXMuc21hc2tTdGFjay5wb3AoKTtcbiAgICAgIHRoaXMucmVzdG9yZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgICBjb25zdCBjdXJyZW50TXR4ID0gdGhpcy5jdHgubW96Q3VycmVudFRyYW5zZm9ybTtcbiAgICAgIHRoaXMucmVzdG9yZSgpO1xuICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgdGhpcy5jdHguc2V0VHJhbnNmb3JtLmFwcGx5KHRoaXMuY3R4LCBjdXJyZW50TXR4KTtcblxuICAgICAgY29uc3QgZGlydHlCb3ggPSBfdXRpbC5VdGlsLmdldEF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KFswLCAwLCBncm91cEN0eC5jYW52YXMud2lkdGgsIGdyb3VwQ3R4LmNhbnZhcy5oZWlnaHRdLCBjdXJyZW50TXR4KTtcblxuICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKGdyb3VwQ3R4LmNhbnZhcywgMCwgMCk7XG4gICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgICB0aGlzLmNvbXBvc2UoZGlydHlCb3gpO1xuICAgIH1cbiAgfVxuXG4gIGJlZ2luQW5ub3RhdGlvbnMoKSB7XG4gICAgdGhpcy5zYXZlKCk7XG5cbiAgICBpZiAodGhpcy5iYXNlVHJhbnNmb3JtKSB7XG4gICAgICB0aGlzLmN0eC5zZXRUcmFuc2Zvcm0uYXBwbHkodGhpcy5jdHgsIHRoaXMuYmFzZVRyYW5zZm9ybSk7XG4gICAgfVxuICB9XG5cbiAgZW5kQW5ub3RhdGlvbnMoKSB7XG4gICAgdGhpcy5yZXN0b3JlKCk7XG4gIH1cblxuICBiZWdpbkFubm90YXRpb24oaWQsIHJlY3QsIHRyYW5zZm9ybSwgbWF0cml4LCBoYXNPd25DYW52YXMpIHtcbiAgICB0aGlzLnNhdmUoKTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHJlY3QpICYmIHJlY3QubGVuZ3RoID09PSA0KSB7XG4gICAgICBjb25zdCB3aWR0aCA9IHJlY3RbMl0gLSByZWN0WzBdO1xuICAgICAgY29uc3QgaGVpZ2h0ID0gcmVjdFszXSAtIHJlY3RbMV07XG5cbiAgICAgIGlmIChoYXNPd25DYW52YXMgJiYgdGhpcy5hbm5vdGF0aW9uQ2FudmFzTWFwKSB7XG4gICAgICAgIHRyYW5zZm9ybSA9IHRyYW5zZm9ybS5zbGljZSgpO1xuICAgICAgICB0cmFuc2Zvcm1bNF0gLT0gcmVjdFswXTtcbiAgICAgICAgdHJhbnNmb3JtWzVdIC09IHJlY3RbMV07XG4gICAgICAgIHJlY3QgPSByZWN0LnNsaWNlKCk7XG4gICAgICAgIHJlY3RbMF0gPSByZWN0WzFdID0gMDtcbiAgICAgICAgcmVjdFsyXSA9IHdpZHRoO1xuICAgICAgICByZWN0WzNdID0gaGVpZ2h0O1xuXG4gICAgICAgIGNvbnN0IFtzY2FsZVgsIHNjYWxlWV0gPSBfdXRpbC5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKHRoaXMuY3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm0pO1xuXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICB2aWV3cG9ydFNjYWxlXG4gICAgICAgIH0gPSB0aGlzO1xuICAgICAgICBjb25zdCBjYW52YXNXaWR0aCA9IE1hdGguY2VpbCh3aWR0aCAqIHRoaXMub3V0cHV0U2NhbGVYICogdmlld3BvcnRTY2FsZSk7XG4gICAgICAgIGNvbnN0IGNhbnZhc0hlaWdodCA9IE1hdGguY2VpbChoZWlnaHQgKiB0aGlzLm91dHB1dFNjYWxlWSAqIHZpZXdwb3J0U2NhbGUpO1xuICAgICAgICB0aGlzLmFubm90YXRpb25DYW52YXMgPSB0aGlzLmNhbnZhc0ZhY3RvcnkuY3JlYXRlKGNhbnZhc1dpZHRoLCBjYW52YXNIZWlnaHQpO1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgY2FudmFzLFxuICAgICAgICAgIGNvbnRleHRcbiAgICAgICAgfSA9IHRoaXMuYW5ub3RhdGlvbkNhbnZhcztcbiAgICAgICAgY2FudmFzLnN0eWxlLndpZHRoID0gYGNhbGMoJHt3aWR0aH1weCAqIHZhcigtLXZpZXdwb3J0LXNjYWxlLWZhY3RvcikpYDtcbiAgICAgICAgY2FudmFzLnN0eWxlLmhlaWdodCA9IGBjYWxjKCR7aGVpZ2h0fXB4ICogdmFyKC0tdmlld3BvcnQtc2NhbGUtZmFjdG9yKSlgO1xuICAgICAgICB0aGlzLmFubm90YXRpb25DYW52YXNNYXAuc2V0KGlkLCBjYW52YXMpO1xuICAgICAgICB0aGlzLmFubm90YXRpb25DYW52YXMuc2F2ZWRDdHggPSB0aGlzLmN0eDtcbiAgICAgICAgdGhpcy5jdHggPSBjb250ZXh0O1xuICAgICAgICB0aGlzLmN0eC5zZXRUcmFuc2Zvcm0oc2NhbGVYLCAwLCAwLCAtc2NhbGVZLCAwLCBoZWlnaHQgKiBzY2FsZVkpO1xuICAgICAgICBhZGRDb250ZXh0Q3VycmVudFRyYW5zZm9ybSh0aGlzLmN0eCk7XG4gICAgICAgIHJlc2V0Q3R4VG9EZWZhdWx0KHRoaXMuY3R4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc2V0Q3R4VG9EZWZhdWx0KHRoaXMuY3R4KTtcbiAgICAgICAgdGhpcy5jdHgucmVjdChyZWN0WzBdLCByZWN0WzFdLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5jbGlwKCk7XG4gICAgICAgIHRoaXMuZW5kUGF0aCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY3VycmVudCA9IG5ldyBDYW52YXNFeHRyYVN0YXRlKHRoaXMuY3R4LmNhbnZhcy53aWR0aCwgdGhpcy5jdHguY2FudmFzLmhlaWdodCk7XG4gICAgdGhpcy50cmFuc2Zvcm0uYXBwbHkodGhpcywgdHJhbnNmb3JtKTtcbiAgICB0aGlzLnRyYW5zZm9ybS5hcHBseSh0aGlzLCBtYXRyaXgpO1xuICB9XG5cbiAgZW5kQW5ub3RhdGlvbigpIHtcbiAgICBpZiAodGhpcy5hbm5vdGF0aW9uQ2FudmFzKSB7XG4gICAgICB0aGlzLmN0eCA9IHRoaXMuYW5ub3RhdGlvbkNhbnZhcy5zYXZlZEN0eDtcbiAgICAgIGRlbGV0ZSB0aGlzLmFubm90YXRpb25DYW52YXMuc2F2ZWRDdHg7XG4gICAgICBkZWxldGUgdGhpcy5hbm5vdGF0aW9uQ2FudmFzO1xuICAgIH1cblxuICAgIHRoaXMucmVzdG9yZSgpO1xuICB9XG5cbiAgcGFpbnRJbWFnZU1hc2tYT2JqZWN0KGltZykge1xuICAgIGlmICghdGhpcy5jb250ZW50VmlzaWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGN0eCA9IHRoaXMuY3R4O1xuICAgIGNvbnN0IHdpZHRoID0gaW1nLndpZHRoLFxuICAgICAgICAgIGhlaWdodCA9IGltZy5oZWlnaHQ7XG4gICAgY29uc3QgZ2x5cGggPSB0aGlzLnByb2Nlc3NpbmdUeXBlMztcblxuICAgIGlmIChDT01QSUxFX1RZUEUzX0dMWVBIUyAmJiBnbHlwaCAmJiBnbHlwaC5jb21waWxlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAod2lkdGggPD0gTUFYX1NJWkVfVE9fQ09NUElMRSAmJiBoZWlnaHQgPD0gTUFYX1NJWkVfVE9fQ09NUElMRSkge1xuICAgICAgICBnbHlwaC5jb21waWxlZCA9IGNvbXBpbGVUeXBlM0dseXBoKHtcbiAgICAgICAgICBkYXRhOiBpbWcuZGF0YSxcbiAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICBoZWlnaHRcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnbHlwaC5jb21waWxlZCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGdseXBoPy5jb21waWxlZCkge1xuICAgICAgZ2x5cGguY29tcGlsZWQoY3R4KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtYXNrID0gdGhpcy5fY3JlYXRlTWFza0NhbnZhcyhpbWcpO1xuXG4gICAgY29uc3QgbWFza0NhbnZhcyA9IG1hc2suY2FudmFzO1xuICAgIGN0eC5zYXZlKCk7XG4gICAgY3R4LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgICBjdHguZHJhd0ltYWdlKG1hc2tDYW52YXMsIG1hc2sub2Zmc2V0WCwgbWFzay5vZmZzZXRZKTtcbiAgICBjdHgucmVzdG9yZSgpO1xuICAgIHRoaXMuY29tcG9zZSgpO1xuICB9XG5cbiAgcGFpbnRJbWFnZU1hc2tYT2JqZWN0UmVwZWF0KGltZ0RhdGEsIHNjYWxlWCwgc2tld1ggPSAwLCBza2V3WSA9IDAsIHNjYWxlWSwgcG9zaXRpb25zKSB7XG4gICAgaWYgKCF0aGlzLmNvbnRlbnRWaXNpYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY3R4ID0gdGhpcy5jdHg7XG4gICAgY3R4LnNhdmUoKTtcbiAgICBjb25zdCBjdXJyZW50VHJhbnNmb3JtID0gY3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm07XG4gICAgY3R4LnRyYW5zZm9ybShzY2FsZVgsIHNrZXdYLCBza2V3WSwgc2NhbGVZLCAwLCAwKTtcblxuICAgIGNvbnN0IG1hc2sgPSB0aGlzLl9jcmVhdGVNYXNrQ2FudmFzKGltZ0RhdGEpO1xuXG4gICAgY3R4LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHBvc2l0aW9ucy5sZW5ndGg7IGkgPCBpaTsgaSArPSAyKSB7XG4gICAgICBjb25zdCB0cmFucyA9IF91dGlsLlV0aWwudHJhbnNmb3JtKGN1cnJlbnRUcmFuc2Zvcm0sIFtzY2FsZVgsIHNrZXdYLCBza2V3WSwgc2NhbGVZLCBwb3NpdGlvbnNbaV0sIHBvc2l0aW9uc1tpICsgMV1dKTtcblxuICAgICAgY29uc3QgW3gsIHldID0gX3V0aWwuVXRpbC5hcHBseVRyYW5zZm9ybShbMCwgMF0sIHRyYW5zKTtcblxuICAgICAgY3R4LmRyYXdJbWFnZShtYXNrLmNhbnZhcywgeCwgeSk7XG4gICAgfVxuXG4gICAgY3R4LnJlc3RvcmUoKTtcbiAgICB0aGlzLmNvbXBvc2UoKTtcbiAgfVxuXG4gIHBhaW50SW1hZ2VNYXNrWE9iamVjdEdyb3VwKGltYWdlcykge1xuICAgIGlmICghdGhpcy5jb250ZW50VmlzaWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGN0eCA9IHRoaXMuY3R4O1xuICAgIGNvbnN0IGZpbGxDb2xvciA9IHRoaXMuY3VycmVudC5maWxsQ29sb3I7XG4gICAgY29uc3QgaXNQYXR0ZXJuRmlsbCA9IHRoaXMuY3VycmVudC5wYXR0ZXJuRmlsbDtcblxuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGltYWdlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBjb25zdCBpbWFnZSA9IGltYWdlc1tpXTtcbiAgICAgIGNvbnN0IHdpZHRoID0gaW1hZ2Uud2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQgPSBpbWFnZS5oZWlnaHQ7XG4gICAgICBjb25zdCBtYXNrQ2FudmFzID0gdGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoXCJtYXNrQ2FudmFzXCIsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgY29uc3QgbWFza0N0eCA9IG1hc2tDYW52YXMuY29udGV4dDtcbiAgICAgIG1hc2tDdHguc2F2ZSgpO1xuICAgICAgcHV0QmluYXJ5SW1hZ2VNYXNrKG1hc2tDdHgsIGltYWdlKTtcbiAgICAgIG1hc2tDdHguZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gXCJzb3VyY2UtaW5cIjtcbiAgICAgIG1hc2tDdHguZmlsbFN0eWxlID0gaXNQYXR0ZXJuRmlsbCA/IGZpbGxDb2xvci5nZXRQYXR0ZXJuKG1hc2tDdHgsIHRoaXMsIGN0eC5tb3pDdXJyZW50VHJhbnNmb3JtSW52ZXJzZSwgX3BhdHRlcm5faGVscGVyLlBhdGhUeXBlLkZJTEwpIDogZmlsbENvbG9yO1xuICAgICAgbWFza0N0eC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgIG1hc2tDdHgucmVzdG9yZSgpO1xuICAgICAgY3R4LnNhdmUoKTtcbiAgICAgIGN0eC50cmFuc2Zvcm0uYXBwbHkoY3R4LCBpbWFnZS50cmFuc2Zvcm0pO1xuICAgICAgY3R4LnNjYWxlKDEsIC0xKTtcbiAgICAgIGN0eC5kcmF3SW1hZ2UobWFza0NhbnZhcy5jYW52YXMsIDAsIDAsIHdpZHRoLCBoZWlnaHQsIDAsIC0xLCAxLCAxKTtcbiAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb21wb3NlKCk7XG4gIH1cblxuICBwYWludEltYWdlWE9iamVjdChvYmpJZCkge1xuICAgIGlmICghdGhpcy5jb250ZW50VmlzaWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGltZ0RhdGEgPSBvYmpJZC5zdGFydHNXaXRoKFwiZ19cIikgPyB0aGlzLmNvbW1vbk9ianMuZ2V0KG9iaklkKSA6IHRoaXMub2Jqcy5nZXQob2JqSWQpO1xuXG4gICAgaWYgKCFpbWdEYXRhKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJEZXBlbmRlbnQgaW1hZ2UgaXNuJ3QgcmVhZHkgeWV0XCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3QoaW1nRGF0YSk7XG4gIH1cblxuICBwYWludEltYWdlWE9iamVjdFJlcGVhdChvYmpJZCwgc2NhbGVYLCBzY2FsZVksIHBvc2l0aW9ucykge1xuICAgIGlmICghdGhpcy5jb250ZW50VmlzaWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGltZ0RhdGEgPSBvYmpJZC5zdGFydHNXaXRoKFwiZ19cIikgPyB0aGlzLmNvbW1vbk9ianMuZ2V0KG9iaklkKSA6IHRoaXMub2Jqcy5nZXQob2JqSWQpO1xuXG4gICAgaWYgKCFpbWdEYXRhKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJEZXBlbmRlbnQgaW1hZ2UgaXNuJ3QgcmVhZHkgeWV0XCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHdpZHRoID0gaW1nRGF0YS53aWR0aDtcbiAgICBjb25zdCBoZWlnaHQgPSBpbWdEYXRhLmhlaWdodDtcbiAgICBjb25zdCBtYXAgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHBvc2l0aW9ucy5sZW5ndGg7IGkgPCBpaTsgaSArPSAyKSB7XG4gICAgICBtYXAucHVzaCh7XG4gICAgICAgIHRyYW5zZm9ybTogW3NjYWxlWCwgMCwgMCwgc2NhbGVZLCBwb3NpdGlvbnNbaV0sIHBvc2l0aW9uc1tpICsgMV1dLFxuICAgICAgICB4OiAwLFxuICAgICAgICB5OiAwLFxuICAgICAgICB3OiB3aWR0aCxcbiAgICAgICAgaDogaGVpZ2h0XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXAoaW1nRGF0YSwgbWFwKTtcbiAgfVxuXG4gIHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0KGltZ0RhdGEpIHtcbiAgICBpZiAoIXRoaXMuY29udGVudFZpc2libGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB3aWR0aCA9IGltZ0RhdGEud2lkdGg7XG4gICAgY29uc3QgaGVpZ2h0ID0gaW1nRGF0YS5oZWlnaHQ7XG4gICAgY29uc3QgY3R4ID0gdGhpcy5jdHg7XG4gICAgdGhpcy5zYXZlKCk7XG4gICAgY3R4LnNjYWxlKDEgLyB3aWR0aCwgLTEgLyBoZWlnaHQpO1xuICAgIGxldCBpbWdUb1BhaW50O1xuXG4gICAgaWYgKHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJmdW5jdGlvblwiICYmIGltZ0RhdGEgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCB8fCAhaW1nRGF0YS5kYXRhKSB7XG4gICAgICBpbWdUb1BhaW50ID0gaW1nRGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdG1wQ2FudmFzID0gdGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoXCJpbmxpbmVJbWFnZVwiLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgIGNvbnN0IHRtcEN0eCA9IHRtcENhbnZhcy5jb250ZXh0O1xuICAgICAgcHV0QmluYXJ5SW1hZ2VEYXRhKHRtcEN0eCwgaW1nRGF0YSwgdGhpcy5jdXJyZW50LnRyYW5zZmVyTWFwcyk7XG4gICAgICBpbWdUb1BhaW50ID0gdG1wQ2FudmFzLmNhbnZhcztcbiAgICB9XG5cbiAgICBjb25zdCBzY2FsZWQgPSB0aGlzLl9zY2FsZUltYWdlKGltZ1RvUGFpbnQsIGN0eC5tb3pDdXJyZW50VHJhbnNmb3JtSW52ZXJzZSk7XG5cbiAgICBjdHguaW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gZ2V0SW1hZ2VTbW9vdGhpbmdFbmFibGVkKGN0eC5tb3pDdXJyZW50VHJhbnNmb3JtLCBpbWdEYXRhLmludGVycG9sYXRlKTtcbiAgICBjdHguZHJhd0ltYWdlKHNjYWxlZC5pbWcsIDAsIDAsIHNjYWxlZC5wYWludFdpZHRoLCBzY2FsZWQucGFpbnRIZWlnaHQsIDAsIC1oZWlnaHQsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgaWYgKHRoaXMuaW1hZ2VMYXllcikge1xuICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLmdldENhbnZhc1Bvc2l0aW9uKDAsIC1oZWlnaHQpO1xuICAgICAgdGhpcy5pbWFnZUxheWVyLmFwcGVuZEltYWdlKHtcbiAgICAgICAgaW1nRGF0YSxcbiAgICAgICAgbGVmdDogcG9zaXRpb25bMF0sXG4gICAgICAgIHRvcDogcG9zaXRpb25bMV0sXG4gICAgICAgIHdpZHRoOiB3aWR0aCAvIGN0eC5tb3pDdXJyZW50VHJhbnNmb3JtSW52ZXJzZVswXSxcbiAgICAgICAgaGVpZ2h0OiBoZWlnaHQgLyBjdHgubW96Q3VycmVudFRyYW5zZm9ybUludmVyc2VbM11cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuY29tcG9zZSgpO1xuICAgIHRoaXMucmVzdG9yZSgpO1xuICB9XG5cbiAgcGFpbnRJbmxpbmVJbWFnZVhPYmplY3RHcm91cChpbWdEYXRhLCBtYXApIHtcbiAgICBpZiAoIXRoaXMuY29udGVudFZpc2libGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjdHggPSB0aGlzLmN0eDtcbiAgICBjb25zdCB3ID0gaW1nRGF0YS53aWR0aDtcbiAgICBjb25zdCBoID0gaW1nRGF0YS5oZWlnaHQ7XG4gICAgY29uc3QgdG1wQ2FudmFzID0gdGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoXCJpbmxpbmVJbWFnZVwiLCB3LCBoKTtcbiAgICBjb25zdCB0bXBDdHggPSB0bXBDYW52YXMuY29udGV4dDtcbiAgICBwdXRCaW5hcnlJbWFnZURhdGEodG1wQ3R4LCBpbWdEYXRhLCB0aGlzLmN1cnJlbnQudHJhbnNmZXJNYXBzKTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IG1hcC5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBjb25zdCBlbnRyeSA9IG1hcFtpXTtcbiAgICAgIGN0eC5zYXZlKCk7XG4gICAgICBjdHgudHJhbnNmb3JtLmFwcGx5KGN0eCwgZW50cnkudHJhbnNmb3JtKTtcbiAgICAgIGN0eC5zY2FsZSgxLCAtMSk7XG4gICAgICBjdHguZHJhd0ltYWdlKHRtcENhbnZhcy5jYW52YXMsIGVudHJ5LngsIGVudHJ5LnksIGVudHJ5LncsIGVudHJ5LmgsIDAsIC0xLCAxLCAxKTtcblxuICAgICAgaWYgKHRoaXMuaW1hZ2VMYXllcikge1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuZ2V0Q2FudmFzUG9zaXRpb24oZW50cnkueCwgZW50cnkueSk7XG4gICAgICAgIHRoaXMuaW1hZ2VMYXllci5hcHBlbmRJbWFnZSh7XG4gICAgICAgICAgaW1nRGF0YSxcbiAgICAgICAgICBsZWZ0OiBwb3NpdGlvblswXSxcbiAgICAgICAgICB0b3A6IHBvc2l0aW9uWzFdLFxuICAgICAgICAgIHdpZHRoOiB3LFxuICAgICAgICAgIGhlaWdodDogaFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbXBvc2UoKTtcbiAgfVxuXG4gIHBhaW50U29saWRDb2xvckltYWdlTWFzaygpIHtcbiAgICBpZiAoIXRoaXMuY29udGVudFZpc2libGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmN0eC5maWxsUmVjdCgwLCAwLCAxLCAxKTtcbiAgICB0aGlzLmNvbXBvc2UoKTtcbiAgfVxuXG4gIG1hcmtQb2ludCh0YWcpIHt9XG5cbiAgbWFya1BvaW50UHJvcHModGFnLCBwcm9wZXJ0aWVzKSB7fVxuXG4gIGJlZ2luTWFya2VkQ29udGVudCh0YWcpIHtcbiAgICB0aGlzLm1hcmtlZENvbnRlbnRTdGFjay5wdXNoKHtcbiAgICAgIHZpc2libGU6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIGJlZ2luTWFya2VkQ29udGVudFByb3BzKHRhZywgcHJvcGVydGllcykge1xuICAgIGlmICh0YWcgPT09IFwiT0NcIikge1xuICAgICAgdGhpcy5tYXJrZWRDb250ZW50U3RhY2sucHVzaCh7XG4gICAgICAgIHZpc2libGU6IHRoaXMub3B0aW9uYWxDb250ZW50Q29uZmlnLmlzVmlzaWJsZShwcm9wZXJ0aWVzKVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWFya2VkQ29udGVudFN0YWNrLnB1c2goe1xuICAgICAgICB2aXNpYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRlbnRWaXNpYmxlID0gdGhpcy5pc0NvbnRlbnRWaXNpYmxlKCk7XG4gIH1cblxuICBlbmRNYXJrZWRDb250ZW50KCkge1xuICAgIHRoaXMubWFya2VkQ29udGVudFN0YWNrLnBvcCgpO1xuICAgIHRoaXMuY29udGVudFZpc2libGUgPSB0aGlzLmlzQ29udGVudFZpc2libGUoKTtcbiAgfVxuXG4gIGJlZ2luQ29tcGF0KCkge31cblxuICBlbmRDb21wYXQoKSB7fVxuXG4gIGNvbnN1bWVQYXRoKGNsaXBCb3gpIHtcbiAgICBpZiAodGhpcy5wZW5kaW5nQ2xpcCkge1xuICAgICAgdGhpcy5jdXJyZW50LnVwZGF0ZUNsaXBGcm9tUGF0aCgpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5wZW5kaW5nQ2xpcCkge1xuICAgICAgdGhpcy5jb21wb3NlKGNsaXBCb3gpO1xuICAgIH1cblxuICAgIGNvbnN0IGN0eCA9IHRoaXMuY3R4O1xuXG4gICAgaWYgKHRoaXMucGVuZGluZ0NsaXApIHtcbiAgICAgIGlmICh0aGlzLnBlbmRpbmdDbGlwID09PSBFT19DTElQKSB7XG4gICAgICAgIGN0eC5jbGlwKFwiZXZlbm9kZFwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN0eC5jbGlwKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucGVuZGluZ0NsaXAgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudC5zdGFydE5ld1BhdGhBbmRDbGlwQm94KHRoaXMuY3VycmVudC5jbGlwQm94KTtcbiAgICBjdHguYmVnaW5QYXRoKCk7XG4gIH1cblxuICBnZXRTaW5nbGVQaXhlbFdpZHRoKCkge1xuICAgIGlmICh0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoID09PSBudWxsKSB7XG4gICAgICBjb25zdCBtID0gdGhpcy5jdHgubW96Q3VycmVudFRyYW5zZm9ybTtcbiAgICAgIGNvbnN0IGFic0RldCA9IE1hdGguYWJzKG1bMF0gKiBtWzNdIC0gbVsyXSAqIG1bMV0pO1xuICAgICAgY29uc3Qgc3FOb3JtMSA9IG1bMF0gKiogMiArIG1bMl0gKiogMjtcbiAgICAgIGNvbnN0IHNxTm9ybTIgPSBtWzFdICoqIDIgKyBtWzNdICoqIDI7XG4gICAgICBjb25zdCBwaXhlbEhlaWdodCA9IE1hdGguc3FydChNYXRoLm1heChzcU5vcm0xLCBzcU5vcm0yKSkgLyBhYnNEZXQ7XG5cbiAgICAgIGlmIChzcU5vcm0xICE9PSBzcU5vcm0yICYmIHRoaXMuX2NvbWJpbmVkU2NhbGVGYWN0b3IgKiBwaXhlbEhlaWdodCA+IDEpIHtcbiAgICAgICAgdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aCA9IC0odGhpcy5fY29tYmluZWRTY2FsZUZhY3RvciAqIHBpeGVsSGVpZ2h0KTtcbiAgICAgIH0gZWxzZSBpZiAoYWJzRGV0ID4gTnVtYmVyLkVQU0lMT04pIHtcbiAgICAgICAgdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aCA9IHBpeGVsSGVpZ2h0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aCA9IDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlZEdldFNpbmdsZVBpeGVsV2lkdGg7XG4gIH1cblxuICBnZXRDYW52YXNQb3NpdGlvbih4LCB5KSB7XG4gICAgY29uc3QgdHJhbnNmb3JtID0gdGhpcy5jdHgubW96Q3VycmVudFRyYW5zZm9ybTtcbiAgICByZXR1cm4gW3RyYW5zZm9ybVswXSAqIHggKyB0cmFuc2Zvcm1bMl0gKiB5ICsgdHJhbnNmb3JtWzRdLCB0cmFuc2Zvcm1bMV0gKiB4ICsgdHJhbnNmb3JtWzNdICogeSArIHRyYW5zZm9ybVs1XV07XG4gIH1cblxuICBpc0NvbnRlbnRWaXNpYmxlKCkge1xuICAgIGZvciAobGV0IGkgPSB0aGlzLm1hcmtlZENvbnRlbnRTdGFjay5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgaWYgKCF0aGlzLm1hcmtlZENvbnRlbnRTdGFja1tpXS52aXNpYmxlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuQ2FudmFzR3JhcGhpY3MgPSBDYW52YXNHcmFwaGljcztcblxuZm9yIChjb25zdCBvcCBpbiBfdXRpbC5PUFMpIHtcbiAgaWYgKENhbnZhc0dyYXBoaWNzLnByb3RvdHlwZVtvcF0gIT09IHVuZGVmaW5lZCkge1xuICAgIENhbnZhc0dyYXBoaWNzLnByb3RvdHlwZVtfdXRpbC5PUFNbb3BdXSA9IENhbnZhc0dyYXBoaWNzLnByb3RvdHlwZVtvcF07XG4gIH1cbn1cblxuLyoqKi8gfSksXG4vKiAxMSAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5UaWxpbmdQYXR0ZXJuID0gZXhwb3J0cy5QYXRoVHlwZSA9IHZvaWQgMDtcbmV4cG9ydHMuZ2V0U2hhZGluZ1BhdHRlcm4gPSBnZXRTaGFkaW5nUGF0dGVybjtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxuY29uc3QgUGF0aFR5cGUgPSB7XG4gIEZJTEw6IFwiRmlsbFwiLFxuICBTVFJPS0U6IFwiU3Ryb2tlXCIsXG4gIFNIQURJTkc6IFwiU2hhZGluZ1wiXG59O1xuZXhwb3J0cy5QYXRoVHlwZSA9IFBhdGhUeXBlO1xuXG5mdW5jdGlvbiBhcHBseUJvdW5kaW5nQm94KGN0eCwgYmJveCkge1xuICBpZiAoIWJib3ggfHwgdHlwZW9mIFBhdGgyRCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHdpZHRoID0gYmJveFsyXSAtIGJib3hbMF07XG4gIGNvbnN0IGhlaWdodCA9IGJib3hbM10gLSBiYm94WzFdO1xuICBjb25zdCByZWdpb24gPSBuZXcgUGF0aDJEKCk7XG4gIHJlZ2lvbi5yZWN0KGJib3hbMF0sIGJib3hbMV0sIHdpZHRoLCBoZWlnaHQpO1xuICBjdHguY2xpcChyZWdpb24pO1xufVxuXG5jbGFzcyBCYXNlU2hhZGluZ1BhdHRlcm4ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gQmFzZVNoYWRpbmdQYXR0ZXJuKSB7XG4gICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQ2Fubm90IGluaXRpYWxpemUgQmFzZVNoYWRpbmdQYXR0ZXJuLlwiKTtcbiAgICB9XG4gIH1cblxuICBnZXRQYXR0ZXJuKCkge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJBYnN0cmFjdCBtZXRob2QgYGdldFBhdHRlcm5gIGNhbGxlZC5cIik7XG4gIH1cblxufVxuXG5jbGFzcyBSYWRpYWxBeGlhbFNoYWRpbmdQYXR0ZXJuIGV4dGVuZHMgQmFzZVNoYWRpbmdQYXR0ZXJuIHtcbiAgY29uc3RydWN0b3IoSVIpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX3R5cGUgPSBJUlsxXTtcbiAgICB0aGlzLl9iYm94ID0gSVJbMl07XG4gICAgdGhpcy5fY29sb3JTdG9wcyA9IElSWzNdO1xuICAgIHRoaXMuX3AwID0gSVJbNF07XG4gICAgdGhpcy5fcDEgPSBJUls1XTtcbiAgICB0aGlzLl9yMCA9IElSWzZdO1xuICAgIHRoaXMuX3IxID0gSVJbN107XG4gICAgdGhpcy5tYXRyaXggPSBudWxsO1xuICB9XG5cbiAgX2NyZWF0ZUdyYWRpZW50KGN0eCkge1xuICAgIGxldCBncmFkO1xuXG4gICAgaWYgKHRoaXMuX3R5cGUgPT09IFwiYXhpYWxcIikge1xuICAgICAgZ3JhZCA9IGN0eC5jcmVhdGVMaW5lYXJHcmFkaWVudCh0aGlzLl9wMFswXSwgdGhpcy5fcDBbMV0sIHRoaXMuX3AxWzBdLCB0aGlzLl9wMVsxXSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl90eXBlID09PSBcInJhZGlhbFwiKSB7XG4gICAgICBncmFkID0gY3R4LmNyZWF0ZVJhZGlhbEdyYWRpZW50KHRoaXMuX3AwWzBdLCB0aGlzLl9wMFsxXSwgdGhpcy5fcjAsIHRoaXMuX3AxWzBdLCB0aGlzLl9wMVsxXSwgdGhpcy5fcjEpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY29sb3JTdG9wIG9mIHRoaXMuX2NvbG9yU3RvcHMpIHtcbiAgICAgIGdyYWQuYWRkQ29sb3JTdG9wKGNvbG9yU3RvcFswXSwgY29sb3JTdG9wWzFdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ3JhZDtcbiAgfVxuXG4gIGdldFBhdHRlcm4oY3R4LCBvd25lciwgaW52ZXJzZSwgcGF0aFR5cGUpIHtcbiAgICBsZXQgcGF0dGVybjtcblxuICAgIGlmIChwYXRoVHlwZSA9PT0gUGF0aFR5cGUuU1RST0tFIHx8IHBhdGhUeXBlID09PSBQYXRoVHlwZS5GSUxMKSB7XG4gICAgICBjb25zdCBvd25lckJCb3ggPSBvd25lci5jdXJyZW50LmdldENsaXBwZWRQYXRoQm91bmRpbmdCb3gocGF0aFR5cGUsIGN0eC5tb3pDdXJyZW50VHJhbnNmb3JtKSB8fCBbMCwgMCwgMCwgMF07XG4gICAgICBjb25zdCB3aWR0aCA9IE1hdGguY2VpbChvd25lckJCb3hbMl0gLSBvd25lckJCb3hbMF0pIHx8IDE7XG4gICAgICBjb25zdCBoZWlnaHQgPSBNYXRoLmNlaWwob3duZXJCQm94WzNdIC0gb3duZXJCQm94WzFdKSB8fCAxO1xuICAgICAgY29uc3QgdG1wQ2FudmFzID0gb3duZXIuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKFwicGF0dGVyblwiLCB3aWR0aCwgaGVpZ2h0LCB0cnVlKTtcbiAgICAgIGNvbnN0IHRtcEN0eCA9IHRtcENhbnZhcy5jb250ZXh0O1xuICAgICAgdG1wQ3R4LmNsZWFyUmVjdCgwLCAwLCB0bXBDdHguY2FudmFzLndpZHRoLCB0bXBDdHguY2FudmFzLmhlaWdodCk7XG4gICAgICB0bXBDdHguYmVnaW5QYXRoKCk7XG4gICAgICB0bXBDdHgucmVjdCgwLCAwLCB0bXBDdHguY2FudmFzLndpZHRoLCB0bXBDdHguY2FudmFzLmhlaWdodCk7XG4gICAgICB0bXBDdHgudHJhbnNsYXRlKC1vd25lckJCb3hbMF0sIC1vd25lckJCb3hbMV0pO1xuICAgICAgaW52ZXJzZSA9IF91dGlsLlV0aWwudHJhbnNmb3JtKGludmVyc2UsIFsxLCAwLCAwLCAxLCBvd25lckJCb3hbMF0sIG93bmVyQkJveFsxXV0pO1xuICAgICAgdG1wQ3R4LnRyYW5zZm9ybS5hcHBseSh0bXBDdHgsIG93bmVyLmJhc2VUcmFuc2Zvcm0pO1xuXG4gICAgICBpZiAodGhpcy5tYXRyaXgpIHtcbiAgICAgICAgdG1wQ3R4LnRyYW5zZm9ybS5hcHBseSh0bXBDdHgsIHRoaXMubWF0cml4KTtcbiAgICAgIH1cblxuICAgICAgYXBwbHlCb3VuZGluZ0JveCh0bXBDdHgsIHRoaXMuX2Jib3gpO1xuICAgICAgdG1wQ3R4LmZpbGxTdHlsZSA9IHRoaXMuX2NyZWF0ZUdyYWRpZW50KHRtcEN0eCk7XG4gICAgICB0bXBDdHguZmlsbCgpO1xuICAgICAgcGF0dGVybiA9IGN0eC5jcmVhdGVQYXR0ZXJuKHRtcENhbnZhcy5jYW52YXMsIFwibm8tcmVwZWF0XCIpO1xuICAgICAgY29uc3QgZG9tTWF0cml4ID0gbmV3IERPTU1hdHJpeChpbnZlcnNlKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcGF0dGVybi5zZXRUcmFuc2Zvcm0oZG9tTWF0cml4KTtcbiAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShgUmFkaWFsQXhpYWxTaGFkaW5nUGF0dGVybi5nZXRQYXR0ZXJuOiBcIiR7ZXg/Lm1lc3NhZ2V9XCIuYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwcGx5Qm91bmRpbmdCb3goY3R4LCB0aGlzLl9iYm94KTtcbiAgICAgIHBhdHRlcm4gPSB0aGlzLl9jcmVhdGVHcmFkaWVudChjdHgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXR0ZXJuO1xuICB9XG5cbn1cblxuZnVuY3Rpb24gZHJhd1RyaWFuZ2xlKGRhdGEsIGNvbnRleHQsIHAxLCBwMiwgcDMsIGMxLCBjMiwgYzMpIHtcbiAgY29uc3QgY29vcmRzID0gY29udGV4dC5jb29yZHMsXG4gICAgICAgIGNvbG9ycyA9IGNvbnRleHQuY29sb3JzO1xuICBjb25zdCBieXRlcyA9IGRhdGEuZGF0YSxcbiAgICAgICAgcm93U2l6ZSA9IGRhdGEud2lkdGggKiA0O1xuICBsZXQgdG1wO1xuXG4gIGlmIChjb29yZHNbcDEgKyAxXSA+IGNvb3Jkc1twMiArIDFdKSB7XG4gICAgdG1wID0gcDE7XG4gICAgcDEgPSBwMjtcbiAgICBwMiA9IHRtcDtcbiAgICB0bXAgPSBjMTtcbiAgICBjMSA9IGMyO1xuICAgIGMyID0gdG1wO1xuICB9XG5cbiAgaWYgKGNvb3Jkc1twMiArIDFdID4gY29vcmRzW3AzICsgMV0pIHtcbiAgICB0bXAgPSBwMjtcbiAgICBwMiA9IHAzO1xuICAgIHAzID0gdG1wO1xuICAgIHRtcCA9IGMyO1xuICAgIGMyID0gYzM7XG4gICAgYzMgPSB0bXA7XG4gIH1cblxuICBpZiAoY29vcmRzW3AxICsgMV0gPiBjb29yZHNbcDIgKyAxXSkge1xuICAgIHRtcCA9IHAxO1xuICAgIHAxID0gcDI7XG4gICAgcDIgPSB0bXA7XG4gICAgdG1wID0gYzE7XG4gICAgYzEgPSBjMjtcbiAgICBjMiA9IHRtcDtcbiAgfVxuXG4gIGNvbnN0IHgxID0gKGNvb3Jkc1twMV0gKyBjb250ZXh0Lm9mZnNldFgpICogY29udGV4dC5zY2FsZVg7XG4gIGNvbnN0IHkxID0gKGNvb3Jkc1twMSArIDFdICsgY29udGV4dC5vZmZzZXRZKSAqIGNvbnRleHQuc2NhbGVZO1xuICBjb25zdCB4MiA9IChjb29yZHNbcDJdICsgY29udGV4dC5vZmZzZXRYKSAqIGNvbnRleHQuc2NhbGVYO1xuICBjb25zdCB5MiA9IChjb29yZHNbcDIgKyAxXSArIGNvbnRleHQub2Zmc2V0WSkgKiBjb250ZXh0LnNjYWxlWTtcbiAgY29uc3QgeDMgPSAoY29vcmRzW3AzXSArIGNvbnRleHQub2Zmc2V0WCkgKiBjb250ZXh0LnNjYWxlWDtcbiAgY29uc3QgeTMgPSAoY29vcmRzW3AzICsgMV0gKyBjb250ZXh0Lm9mZnNldFkpICogY29udGV4dC5zY2FsZVk7XG5cbiAgaWYgKHkxID49IHkzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgYzFyID0gY29sb3JzW2MxXSxcbiAgICAgICAgYzFnID0gY29sb3JzW2MxICsgMV0sXG4gICAgICAgIGMxYiA9IGNvbG9yc1tjMSArIDJdO1xuICBjb25zdCBjMnIgPSBjb2xvcnNbYzJdLFxuICAgICAgICBjMmcgPSBjb2xvcnNbYzIgKyAxXSxcbiAgICAgICAgYzJiID0gY29sb3JzW2MyICsgMl07XG4gIGNvbnN0IGMzciA9IGNvbG9yc1tjM10sXG4gICAgICAgIGMzZyA9IGNvbG9yc1tjMyArIDFdLFxuICAgICAgICBjM2IgPSBjb2xvcnNbYzMgKyAyXTtcbiAgY29uc3QgbWluWSA9IE1hdGgucm91bmQoeTEpLFxuICAgICAgICBtYXhZID0gTWF0aC5yb3VuZCh5Myk7XG4gIGxldCB4YSwgY2FyLCBjYWcsIGNhYjtcbiAgbGV0IHhiLCBjYnIsIGNiZywgY2JiO1xuXG4gIGZvciAobGV0IHkgPSBtaW5ZOyB5IDw9IG1heFk7IHkrKykge1xuICAgIGlmICh5IDwgeTIpIHtcbiAgICAgIGxldCBrO1xuXG4gICAgICBpZiAoeSA8IHkxKSB7XG4gICAgICAgIGsgPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgayA9ICh5MSAtIHkpIC8gKHkxIC0geTIpO1xuICAgICAgfVxuXG4gICAgICB4YSA9IHgxIC0gKHgxIC0geDIpICogaztcbiAgICAgIGNhciA9IGMxciAtIChjMXIgLSBjMnIpICogaztcbiAgICAgIGNhZyA9IGMxZyAtIChjMWcgLSBjMmcpICogaztcbiAgICAgIGNhYiA9IGMxYiAtIChjMWIgLSBjMmIpICogaztcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGs7XG5cbiAgICAgIGlmICh5ID4geTMpIHtcbiAgICAgICAgayA9IDE7XG4gICAgICB9IGVsc2UgaWYgKHkyID09PSB5Mykge1xuICAgICAgICBrID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGsgPSAoeTIgLSB5KSAvICh5MiAtIHkzKTtcbiAgICAgIH1cblxuICAgICAgeGEgPSB4MiAtICh4MiAtIHgzKSAqIGs7XG4gICAgICBjYXIgPSBjMnIgLSAoYzJyIC0gYzNyKSAqIGs7XG4gICAgICBjYWcgPSBjMmcgLSAoYzJnIC0gYzNnKSAqIGs7XG4gICAgICBjYWIgPSBjMmIgLSAoYzJiIC0gYzNiKSAqIGs7XG4gICAgfVxuXG4gICAgbGV0IGs7XG5cbiAgICBpZiAoeSA8IHkxKSB7XG4gICAgICBrID0gMDtcbiAgICB9IGVsc2UgaWYgKHkgPiB5Mykge1xuICAgICAgayA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGsgPSAoeTEgLSB5KSAvICh5MSAtIHkzKTtcbiAgICB9XG5cbiAgICB4YiA9IHgxIC0gKHgxIC0geDMpICogaztcbiAgICBjYnIgPSBjMXIgLSAoYzFyIC0gYzNyKSAqIGs7XG4gICAgY2JnID0gYzFnIC0gKGMxZyAtIGMzZykgKiBrO1xuICAgIGNiYiA9IGMxYiAtIChjMWIgLSBjM2IpICogaztcbiAgICBjb25zdCB4MV8gPSBNYXRoLnJvdW5kKE1hdGgubWluKHhhLCB4YikpO1xuICAgIGNvbnN0IHgyXyA9IE1hdGgucm91bmQoTWF0aC5tYXgoeGEsIHhiKSk7XG4gICAgbGV0IGogPSByb3dTaXplICogeSArIHgxXyAqIDQ7XG5cbiAgICBmb3IgKGxldCB4ID0geDFfOyB4IDw9IHgyXzsgeCsrKSB7XG4gICAgICBrID0gKHhhIC0geCkgLyAoeGEgLSB4Yik7XG5cbiAgICAgIGlmIChrIDwgMCkge1xuICAgICAgICBrID0gMDtcbiAgICAgIH0gZWxzZSBpZiAoayA+IDEpIHtcbiAgICAgICAgayA9IDE7XG4gICAgICB9XG5cbiAgICAgIGJ5dGVzW2orK10gPSBjYXIgLSAoY2FyIC0gY2JyKSAqIGsgfCAwO1xuICAgICAgYnl0ZXNbaisrXSA9IGNhZyAtIChjYWcgLSBjYmcpICogayB8IDA7XG4gICAgICBieXRlc1tqKytdID0gY2FiIC0gKGNhYiAtIGNiYikgKiBrIHwgMDtcbiAgICAgIGJ5dGVzW2orK10gPSAyNTU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRyYXdGaWd1cmUoZGF0YSwgZmlndXJlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHBzID0gZmlndXJlLmNvb3JkcztcbiAgY29uc3QgY3MgPSBmaWd1cmUuY29sb3JzO1xuICBsZXQgaSwgaWk7XG5cbiAgc3dpdGNoIChmaWd1cmUudHlwZSkge1xuICAgIGNhc2UgXCJsYXR0aWNlXCI6XG4gICAgICBjb25zdCB2ZXJ0aWNlc1BlclJvdyA9IGZpZ3VyZS52ZXJ0aWNlc1BlclJvdztcbiAgICAgIGNvbnN0IHJvd3MgPSBNYXRoLmZsb29yKHBzLmxlbmd0aCAvIHZlcnRpY2VzUGVyUm93KSAtIDE7XG4gICAgICBjb25zdCBjb2xzID0gdmVydGljZXNQZXJSb3cgLSAxO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgIGxldCBxID0gaSAqIHZlcnRpY2VzUGVyUm93O1xuXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sczsgaisrLCBxKyspIHtcbiAgICAgICAgICBkcmF3VHJpYW5nbGUoZGF0YSwgY29udGV4dCwgcHNbcV0sIHBzW3EgKyAxXSwgcHNbcSArIHZlcnRpY2VzUGVyUm93XSwgY3NbcV0sIGNzW3EgKyAxXSwgY3NbcSArIHZlcnRpY2VzUGVyUm93XSk7XG4gICAgICAgICAgZHJhd1RyaWFuZ2xlKGRhdGEsIGNvbnRleHQsIHBzW3EgKyB2ZXJ0aWNlc1BlclJvdyArIDFdLCBwc1txICsgMV0sIHBzW3EgKyB2ZXJ0aWNlc1BlclJvd10sIGNzW3EgKyB2ZXJ0aWNlc1BlclJvdyArIDFdLCBjc1txICsgMV0sIGNzW3EgKyB2ZXJ0aWNlc1BlclJvd10pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcInRyaWFuZ2xlc1wiOlxuICAgICAgZm9yIChpID0gMCwgaWkgPSBwcy5sZW5ndGg7IGkgPCBpaTsgaSArPSAzKSB7XG4gICAgICAgIGRyYXdUcmlhbmdsZShkYXRhLCBjb250ZXh0LCBwc1tpXSwgcHNbaSArIDFdLCBwc1tpICsgMl0sIGNzW2ldLCBjc1tpICsgMV0sIGNzW2kgKyAyXSk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgZmlndXJlXCIpO1xuICB9XG59XG5cbmNsYXNzIE1lc2hTaGFkaW5nUGF0dGVybiBleHRlbmRzIEJhc2VTaGFkaW5nUGF0dGVybiB7XG4gIGNvbnN0cnVjdG9yKElSKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9jb29yZHMgPSBJUlsyXTtcbiAgICB0aGlzLl9jb2xvcnMgPSBJUlszXTtcbiAgICB0aGlzLl9maWd1cmVzID0gSVJbNF07XG4gICAgdGhpcy5fYm91bmRzID0gSVJbNV07XG4gICAgdGhpcy5fYmJveCA9IElSWzddO1xuICAgIHRoaXMuX2JhY2tncm91bmQgPSBJUls4XTtcbiAgICB0aGlzLm1hdHJpeCA9IG51bGw7XG4gIH1cblxuICBfY3JlYXRlTWVzaENhbnZhcyhjb21iaW5lZFNjYWxlLCBiYWNrZ3JvdW5kQ29sb3IsIGNhY2hlZENhbnZhc2VzKSB7XG4gICAgY29uc3QgRVhQRUNURURfU0NBTEUgPSAxLjE7XG4gICAgY29uc3QgTUFYX1BBVFRFUk5fU0laRSA9IDMwMDA7XG4gICAgY29uc3QgQk9SREVSX1NJWkUgPSAyO1xuICAgIGNvbnN0IG9mZnNldFggPSBNYXRoLmZsb29yKHRoaXMuX2JvdW5kc1swXSk7XG4gICAgY29uc3Qgb2Zmc2V0WSA9IE1hdGguZmxvb3IodGhpcy5fYm91bmRzWzFdKTtcbiAgICBjb25zdCBib3VuZHNXaWR0aCA9IE1hdGguY2VpbCh0aGlzLl9ib3VuZHNbMl0pIC0gb2Zmc2V0WDtcbiAgICBjb25zdCBib3VuZHNIZWlnaHQgPSBNYXRoLmNlaWwodGhpcy5fYm91bmRzWzNdKSAtIG9mZnNldFk7XG4gICAgY29uc3Qgd2lkdGggPSBNYXRoLm1pbihNYXRoLmNlaWwoTWF0aC5hYnMoYm91bmRzV2lkdGggKiBjb21iaW5lZFNjYWxlWzBdICogRVhQRUNURURfU0NBTEUpKSwgTUFYX1BBVFRFUk5fU0laRSk7XG4gICAgY29uc3QgaGVpZ2h0ID0gTWF0aC5taW4oTWF0aC5jZWlsKE1hdGguYWJzKGJvdW5kc0hlaWdodCAqIGNvbWJpbmVkU2NhbGVbMV0gKiBFWFBFQ1RFRF9TQ0FMRSkpLCBNQVhfUEFUVEVSTl9TSVpFKTtcbiAgICBjb25zdCBzY2FsZVggPSBib3VuZHNXaWR0aCAvIHdpZHRoO1xuICAgIGNvbnN0IHNjYWxlWSA9IGJvdW5kc0hlaWdodCAvIGhlaWdodDtcbiAgICBjb25zdCBjb250ZXh0ID0ge1xuICAgICAgY29vcmRzOiB0aGlzLl9jb29yZHMsXG4gICAgICBjb2xvcnM6IHRoaXMuX2NvbG9ycyxcbiAgICAgIG9mZnNldFg6IC1vZmZzZXRYLFxuICAgICAgb2Zmc2V0WTogLW9mZnNldFksXG4gICAgICBzY2FsZVg6IDEgLyBzY2FsZVgsXG4gICAgICBzY2FsZVk6IDEgLyBzY2FsZVlcbiAgICB9O1xuICAgIGNvbnN0IHBhZGRlZFdpZHRoID0gd2lkdGggKyBCT1JERVJfU0laRSAqIDI7XG4gICAgY29uc3QgcGFkZGVkSGVpZ2h0ID0gaGVpZ2h0ICsgQk9SREVSX1NJWkUgKiAyO1xuICAgIGNvbnN0IHRtcENhbnZhcyA9IGNhY2hlZENhbnZhc2VzLmdldENhbnZhcyhcIm1lc2hcIiwgcGFkZGVkV2lkdGgsIHBhZGRlZEhlaWdodCwgZmFsc2UpO1xuICAgIGNvbnN0IHRtcEN0eCA9IHRtcENhbnZhcy5jb250ZXh0O1xuICAgIGNvbnN0IGRhdGEgPSB0bXBDdHguY3JlYXRlSW1hZ2VEYXRhKHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgaWYgKGJhY2tncm91bmRDb2xvcikge1xuICAgICAgY29uc3QgYnl0ZXMgPSBkYXRhLmRhdGE7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGJ5dGVzLmxlbmd0aDsgaSA8IGlpOyBpICs9IDQpIHtcbiAgICAgICAgYnl0ZXNbaV0gPSBiYWNrZ3JvdW5kQ29sb3JbMF07XG4gICAgICAgIGJ5dGVzW2kgKyAxXSA9IGJhY2tncm91bmRDb2xvclsxXTtcbiAgICAgICAgYnl0ZXNbaSArIDJdID0gYmFja2dyb3VuZENvbG9yWzJdO1xuICAgICAgICBieXRlc1tpICsgM10gPSAyNTU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBmaWd1cmUgb2YgdGhpcy5fZmlndXJlcykge1xuICAgICAgZHJhd0ZpZ3VyZShkYXRhLCBmaWd1cmUsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHRtcEN0eC5wdXRJbWFnZURhdGEoZGF0YSwgQk9SREVSX1NJWkUsIEJPUkRFUl9TSVpFKTtcbiAgICBjb25zdCBjYW52YXMgPSB0bXBDYW52YXMuY2FudmFzO1xuICAgIHJldHVybiB7XG4gICAgICBjYW52YXMsXG4gICAgICBvZmZzZXRYOiBvZmZzZXRYIC0gQk9SREVSX1NJWkUgKiBzY2FsZVgsXG4gICAgICBvZmZzZXRZOiBvZmZzZXRZIC0gQk9SREVSX1NJWkUgKiBzY2FsZVksXG4gICAgICBzY2FsZVgsXG4gICAgICBzY2FsZVlcbiAgICB9O1xuICB9XG5cbiAgZ2V0UGF0dGVybihjdHgsIG93bmVyLCBpbnZlcnNlLCBwYXRoVHlwZSkge1xuICAgIGFwcGx5Qm91bmRpbmdCb3goY3R4LCB0aGlzLl9iYm94KTtcbiAgICBsZXQgc2NhbGU7XG5cbiAgICBpZiAocGF0aFR5cGUgPT09IFBhdGhUeXBlLlNIQURJTkcpIHtcbiAgICAgIHNjYWxlID0gX3V0aWwuVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZShjdHgubW96Q3VycmVudFRyYW5zZm9ybSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNjYWxlID0gX3V0aWwuVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZShvd25lci5iYXNlVHJhbnNmb3JtKTtcblxuICAgICAgaWYgKHRoaXMubWF0cml4KSB7XG4gICAgICAgIGNvbnN0IG1hdHJpeFNjYWxlID0gX3V0aWwuVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZSh0aGlzLm1hdHJpeCk7XG5cbiAgICAgICAgc2NhbGUgPSBbc2NhbGVbMF0gKiBtYXRyaXhTY2FsZVswXSwgc2NhbGVbMV0gKiBtYXRyaXhTY2FsZVsxXV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdGVtcG9yYXJ5UGF0dGVybkNhbnZhcyA9IHRoaXMuX2NyZWF0ZU1lc2hDYW52YXMoc2NhbGUsIHBhdGhUeXBlID09PSBQYXRoVHlwZS5TSEFESU5HID8gbnVsbCA6IHRoaXMuX2JhY2tncm91bmQsIG93bmVyLmNhY2hlZENhbnZhc2VzKTtcblxuICAgIGlmIChwYXRoVHlwZSAhPT0gUGF0aFR5cGUuU0hBRElORykge1xuICAgICAgY3R4LnNldFRyYW5zZm9ybS5hcHBseShjdHgsIG93bmVyLmJhc2VUcmFuc2Zvcm0pO1xuXG4gICAgICBpZiAodGhpcy5tYXRyaXgpIHtcbiAgICAgICAgY3R4LnRyYW5zZm9ybS5hcHBseShjdHgsIHRoaXMubWF0cml4KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjdHgudHJhbnNsYXRlKHRlbXBvcmFyeVBhdHRlcm5DYW52YXMub2Zmc2V0WCwgdGVtcG9yYXJ5UGF0dGVybkNhbnZhcy5vZmZzZXRZKTtcbiAgICBjdHguc2NhbGUodGVtcG9yYXJ5UGF0dGVybkNhbnZhcy5zY2FsZVgsIHRlbXBvcmFyeVBhdHRlcm5DYW52YXMuc2NhbGVZKTtcbiAgICByZXR1cm4gY3R4LmNyZWF0ZVBhdHRlcm4odGVtcG9yYXJ5UGF0dGVybkNhbnZhcy5jYW52YXMsIFwibm8tcmVwZWF0XCIpO1xuICB9XG5cbn1cblxuY2xhc3MgRHVtbXlTaGFkaW5nUGF0dGVybiBleHRlbmRzIEJhc2VTaGFkaW5nUGF0dGVybiB7XG4gIGdldFBhdHRlcm4oKSB7XG4gICAgcmV0dXJuIFwiaG90cGlua1wiO1xuICB9XG5cbn1cblxuZnVuY3Rpb24gZ2V0U2hhZGluZ1BhdHRlcm4oSVIpIHtcbiAgc3dpdGNoIChJUlswXSkge1xuICAgIGNhc2UgXCJSYWRpYWxBeGlhbFwiOlxuICAgICAgcmV0dXJuIG5ldyBSYWRpYWxBeGlhbFNoYWRpbmdQYXR0ZXJuKElSKTtcblxuICAgIGNhc2UgXCJNZXNoXCI6XG4gICAgICByZXR1cm4gbmV3IE1lc2hTaGFkaW5nUGF0dGVybihJUik7XG5cbiAgICBjYXNlIFwiRHVtbXlcIjpcbiAgICAgIHJldHVybiBuZXcgRHVtbXlTaGFkaW5nUGF0dGVybigpO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIElSIHR5cGU6ICR7SVJbMF19YCk7XG59XG5cbmNvbnN0IFBhaW50VHlwZSA9IHtcbiAgQ09MT1JFRDogMSxcbiAgVU5DT0xPUkVEOiAyXG59O1xuXG5jbGFzcyBUaWxpbmdQYXR0ZXJuIHtcbiAgc3RhdGljIGdldCBNQVhfUEFUVEVSTl9TSVpFKCkge1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIk1BWF9QQVRURVJOX1NJWkVcIiwgMzAwMCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihJUiwgY29sb3IsIGN0eCwgY2FudmFzR3JhcGhpY3NGYWN0b3J5LCBiYXNlVHJhbnNmb3JtKSB7XG4gICAgdGhpcy5vcGVyYXRvckxpc3QgPSBJUlsyXTtcbiAgICB0aGlzLm1hdHJpeCA9IElSWzNdIHx8IFsxLCAwLCAwLCAxLCAwLCAwXTtcbiAgICB0aGlzLmJib3ggPSBJUls0XTtcbiAgICB0aGlzLnhzdGVwID0gSVJbNV07XG4gICAgdGhpcy55c3RlcCA9IElSWzZdO1xuICAgIHRoaXMucGFpbnRUeXBlID0gSVJbN107XG4gICAgdGhpcy50aWxpbmdUeXBlID0gSVJbOF07XG4gICAgdGhpcy5jb2xvciA9IGNvbG9yO1xuICAgIHRoaXMuY3R4ID0gY3R4O1xuICAgIHRoaXMuY2FudmFzR3JhcGhpY3NGYWN0b3J5ID0gY2FudmFzR3JhcGhpY3NGYWN0b3J5O1xuICAgIHRoaXMuYmFzZVRyYW5zZm9ybSA9IGJhc2VUcmFuc2Zvcm07XG4gIH1cblxuICBjcmVhdGVQYXR0ZXJuQ2FudmFzKG93bmVyKSB7XG4gICAgY29uc3Qgb3BlcmF0b3JMaXN0ID0gdGhpcy5vcGVyYXRvckxpc3Q7XG4gICAgY29uc3QgYmJveCA9IHRoaXMuYmJveDtcbiAgICBjb25zdCB4c3RlcCA9IHRoaXMueHN0ZXA7XG4gICAgY29uc3QgeXN0ZXAgPSB0aGlzLnlzdGVwO1xuICAgIGNvbnN0IHBhaW50VHlwZSA9IHRoaXMucGFpbnRUeXBlO1xuICAgIGNvbnN0IHRpbGluZ1R5cGUgPSB0aGlzLnRpbGluZ1R5cGU7XG4gICAgY29uc3QgY29sb3IgPSB0aGlzLmNvbG9yO1xuICAgIGNvbnN0IGNhbnZhc0dyYXBoaWNzRmFjdG9yeSA9IHRoaXMuY2FudmFzR3JhcGhpY3NGYWN0b3J5O1xuICAgICgwLCBfdXRpbC5pbmZvKShcIlRpbGluZ1R5cGU6IFwiICsgdGlsaW5nVHlwZSk7XG4gICAgY29uc3QgeDAgPSBiYm94WzBdLFxuICAgICAgICAgIHkwID0gYmJveFsxXSxcbiAgICAgICAgICB4MSA9IGJib3hbMl0sXG4gICAgICAgICAgeTEgPSBiYm94WzNdO1xuXG4gICAgY29uc3QgbWF0cml4U2NhbGUgPSBfdXRpbC5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKHRoaXMubWF0cml4KTtcblxuICAgIGNvbnN0IGN1ck1hdHJpeFNjYWxlID0gX3V0aWwuVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZSh0aGlzLmJhc2VUcmFuc2Zvcm0pO1xuXG4gICAgY29uc3QgY29tYmluZWRTY2FsZSA9IFttYXRyaXhTY2FsZVswXSAqIGN1ck1hdHJpeFNjYWxlWzBdLCBtYXRyaXhTY2FsZVsxXSAqIGN1ck1hdHJpeFNjYWxlWzFdXTtcbiAgICBjb25zdCBkaW14ID0gdGhpcy5nZXRTaXplQW5kU2NhbGUoeHN0ZXAsIHRoaXMuY3R4LmNhbnZhcy53aWR0aCwgY29tYmluZWRTY2FsZVswXSk7XG4gICAgY29uc3QgZGlteSA9IHRoaXMuZ2V0U2l6ZUFuZFNjYWxlKHlzdGVwLCB0aGlzLmN0eC5jYW52YXMuaGVpZ2h0LCBjb21iaW5lZFNjYWxlWzFdKTtcbiAgICBjb25zdCB0bXBDYW52YXMgPSBvd25lci5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoXCJwYXR0ZXJuXCIsIGRpbXguc2l6ZSwgZGlteS5zaXplLCB0cnVlKTtcbiAgICBjb25zdCB0bXBDdHggPSB0bXBDYW52YXMuY29udGV4dDtcbiAgICBjb25zdCBncmFwaGljcyA9IGNhbnZhc0dyYXBoaWNzRmFjdG9yeS5jcmVhdGVDYW52YXNHcmFwaGljcyh0bXBDdHgpO1xuICAgIGdyYXBoaWNzLmdyb3VwTGV2ZWwgPSBvd25lci5ncm91cExldmVsO1xuICAgIHRoaXMuc2V0RmlsbEFuZFN0cm9rZVN0eWxlVG9Db250ZXh0KGdyYXBoaWNzLCBwYWludFR5cGUsIGNvbG9yKTtcbiAgICBsZXQgYWRqdXN0ZWRYMCA9IHgwO1xuICAgIGxldCBhZGp1c3RlZFkwID0geTA7XG4gICAgbGV0IGFkanVzdGVkWDEgPSB4MTtcbiAgICBsZXQgYWRqdXN0ZWRZMSA9IHkxO1xuXG4gICAgaWYgKHgwIDwgMCkge1xuICAgICAgYWRqdXN0ZWRYMCA9IDA7XG4gICAgICBhZGp1c3RlZFgxICs9IE1hdGguYWJzKHgwKTtcbiAgICB9XG5cbiAgICBpZiAoeTAgPCAwKSB7XG4gICAgICBhZGp1c3RlZFkwID0gMDtcbiAgICAgIGFkanVzdGVkWTEgKz0gTWF0aC5hYnMoeTApO1xuICAgIH1cblxuICAgIHRtcEN0eC50cmFuc2xhdGUoLShkaW14LnNjYWxlICogYWRqdXN0ZWRYMCksIC0oZGlteS5zY2FsZSAqIGFkanVzdGVkWTApKTtcbiAgICBncmFwaGljcy50cmFuc2Zvcm0oZGlteC5zY2FsZSwgMCwgMCwgZGlteS5zY2FsZSwgMCwgMCk7XG4gICAgdGhpcy5jbGlwQmJveChncmFwaGljcywgYWRqdXN0ZWRYMCwgYWRqdXN0ZWRZMCwgYWRqdXN0ZWRYMSwgYWRqdXN0ZWRZMSk7XG4gICAgZ3JhcGhpY3MuYmFzZVRyYW5zZm9ybSA9IGdyYXBoaWNzLmN0eC5tb3pDdXJyZW50VHJhbnNmb3JtLnNsaWNlKCk7XG4gICAgZ3JhcGhpY3MuZXhlY3V0ZU9wZXJhdG9yTGlzdChvcGVyYXRvckxpc3QpO1xuICAgIGdyYXBoaWNzLmVuZERyYXdpbmcoKTtcbiAgICByZXR1cm4ge1xuICAgICAgY2FudmFzOiB0bXBDYW52YXMuY2FudmFzLFxuICAgICAgc2NhbGVYOiBkaW14LnNjYWxlLFxuICAgICAgc2NhbGVZOiBkaW15LnNjYWxlLFxuICAgICAgb2Zmc2V0WDogYWRqdXN0ZWRYMCxcbiAgICAgIG9mZnNldFk6IGFkanVzdGVkWTBcbiAgICB9O1xuICB9XG5cbiAgZ2V0U2l6ZUFuZFNjYWxlKHN0ZXAsIHJlYWxPdXRwdXRTaXplLCBzY2FsZSkge1xuICAgIHN0ZXAgPSBNYXRoLmFicyhzdGVwKTtcbiAgICBjb25zdCBtYXhTaXplID0gTWF0aC5tYXgoVGlsaW5nUGF0dGVybi5NQVhfUEFUVEVSTl9TSVpFLCByZWFsT3V0cHV0U2l6ZSk7XG4gICAgbGV0IHNpemUgPSBNYXRoLmNlaWwoc3RlcCAqIHNjYWxlKTtcblxuICAgIGlmIChzaXplID49IG1heFNpemUpIHtcbiAgICAgIHNpemUgPSBtYXhTaXplO1xuICAgIH0gZWxzZSB7XG4gICAgICBzY2FsZSA9IHNpemUgLyBzdGVwO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzY2FsZSxcbiAgICAgIHNpemVcbiAgICB9O1xuICB9XG5cbiAgY2xpcEJib3goZ3JhcGhpY3MsIHgwLCB5MCwgeDEsIHkxKSB7XG4gICAgY29uc3QgYmJveFdpZHRoID0geDEgLSB4MDtcbiAgICBjb25zdCBiYm94SGVpZ2h0ID0geTEgLSB5MDtcbiAgICBncmFwaGljcy5jdHgucmVjdCh4MCwgeTAsIGJib3hXaWR0aCwgYmJveEhlaWdodCk7XG4gICAgZ3JhcGhpY3MuY2xpcCgpO1xuICAgIGdyYXBoaWNzLmVuZFBhdGgoKTtcbiAgfVxuXG4gIHNldEZpbGxBbmRTdHJva2VTdHlsZVRvQ29udGV4dChncmFwaGljcywgcGFpbnRUeXBlLCBjb2xvcikge1xuICAgIGNvbnN0IGNvbnRleHQgPSBncmFwaGljcy5jdHgsXG4gICAgICAgICAgY3VycmVudCA9IGdyYXBoaWNzLmN1cnJlbnQ7XG5cbiAgICBzd2l0Y2ggKHBhaW50VHlwZSkge1xuICAgICAgY2FzZSBQYWludFR5cGUuQ09MT1JFRDpcbiAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5jdHg7XG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gY3R4LmZpbGxTdHlsZTtcbiAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9IGN0eC5zdHJva2VTdHlsZTtcbiAgICAgICAgY3VycmVudC5maWxsQ29sb3IgPSBjdHguZmlsbFN0eWxlO1xuICAgICAgICBjdXJyZW50LnN0cm9rZUNvbG9yID0gY3R4LnN0cm9rZVN0eWxlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBQYWludFR5cGUuVU5DT0xPUkVEOlxuICAgICAgICBjb25zdCBjc3NDb2xvciA9IF91dGlsLlV0aWwubWFrZUhleENvbG9yKGNvbG9yWzBdLCBjb2xvclsxXSwgY29sb3JbMl0pO1xuXG4gICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gY3NzQ29sb3I7XG4gICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBjc3NDb2xvcjtcbiAgICAgICAgY3VycmVudC5maWxsQ29sb3IgPSBjc3NDb2xvcjtcbiAgICAgICAgY3VycmVudC5zdHJva2VDb2xvciA9IGNzc0NvbG9yO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBVbnN1cHBvcnRlZCBwYWludCB0eXBlOiAke3BhaW50VHlwZX1gKTtcbiAgICB9XG4gIH1cblxuICBnZXRQYXR0ZXJuKGN0eCwgb3duZXIsIGludmVyc2UsIHBhdGhUeXBlKSB7XG4gICAgbGV0IG1hdHJpeCA9IGludmVyc2U7XG5cbiAgICBpZiAocGF0aFR5cGUgIT09IFBhdGhUeXBlLlNIQURJTkcpIHtcbiAgICAgIG1hdHJpeCA9IF91dGlsLlV0aWwudHJhbnNmb3JtKG1hdHJpeCwgb3duZXIuYmFzZVRyYW5zZm9ybSk7XG5cbiAgICAgIGlmICh0aGlzLm1hdHJpeCkge1xuICAgICAgICBtYXRyaXggPSBfdXRpbC5VdGlsLnRyYW5zZm9ybShtYXRyaXgsIHRoaXMubWF0cml4KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB0ZW1wb3JhcnlQYXR0ZXJuQ2FudmFzID0gdGhpcy5jcmVhdGVQYXR0ZXJuQ2FudmFzKG93bmVyKTtcbiAgICBsZXQgZG9tTWF0cml4ID0gbmV3IERPTU1hdHJpeChtYXRyaXgpO1xuICAgIGRvbU1hdHJpeCA9IGRvbU1hdHJpeC50cmFuc2xhdGUodGVtcG9yYXJ5UGF0dGVybkNhbnZhcy5vZmZzZXRYLCB0ZW1wb3JhcnlQYXR0ZXJuQ2FudmFzLm9mZnNldFkpO1xuICAgIGRvbU1hdHJpeCA9IGRvbU1hdHJpeC5zY2FsZSgxIC8gdGVtcG9yYXJ5UGF0dGVybkNhbnZhcy5zY2FsZVgsIDEgLyB0ZW1wb3JhcnlQYXR0ZXJuQ2FudmFzLnNjYWxlWSk7XG4gICAgY29uc3QgcGF0dGVybiA9IGN0eC5jcmVhdGVQYXR0ZXJuKHRlbXBvcmFyeVBhdHRlcm5DYW52YXMuY2FudmFzLCBcInJlcGVhdFwiKTtcblxuICAgIHRyeSB7XG4gICAgICBwYXR0ZXJuLnNldFRyYW5zZm9ybShkb21NYXRyaXgpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoYFRpbGluZ1BhdHRlcm4uZ2V0UGF0dGVybjogXCIke2V4Py5tZXNzYWdlfVwiLmApO1xuICAgIH1cblxuICAgIHJldHVybiBwYXR0ZXJuO1xuICB9XG5cbn1cblxuZXhwb3J0cy5UaWxpbmdQYXR0ZXJuID0gVGlsaW5nUGF0dGVybjtcblxuLyoqKi8gfSksXG4vKiAxMiAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5HbG9iYWxXb3JrZXJPcHRpb25zID0gdm9pZCAwO1xuY29uc3QgR2xvYmFsV29ya2VyT3B0aW9ucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5leHBvcnRzLkdsb2JhbFdvcmtlck9wdGlvbnMgPSBHbG9iYWxXb3JrZXJPcHRpb25zO1xuR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJQb3J0ID0gR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJQb3J0ID09PSB1bmRlZmluZWQgPyBudWxsIDogR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJQb3J0O1xuR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJTcmMgPSBHbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclNyYyA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IEdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjO1xuXG4vKioqLyB9KSxcbi8qIDEzICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLk1lc3NhZ2VIYW5kbGVyID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5jb25zdCBDYWxsYmFja0tpbmQgPSB7XG4gIFVOS05PV046IDAsXG4gIERBVEE6IDEsXG4gIEVSUk9SOiAyXG59O1xuY29uc3QgU3RyZWFtS2luZCA9IHtcbiAgVU5LTk9XTjogMCxcbiAgQ0FOQ0VMOiAxLFxuICBDQU5DRUxfQ09NUExFVEU6IDIsXG4gIENMT1NFOiAzLFxuICBFTlFVRVVFOiA0LFxuICBFUlJPUjogNSxcbiAgUFVMTDogNixcbiAgUFVMTF9DT01QTEVURTogNyxcbiAgU1RBUlRfQ09NUExFVEU6IDhcbn07XG5cbmZ1bmN0aW9uIHdyYXBSZWFzb24ocmVhc29uKSB7XG4gIGlmICghKHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yIHx8IHR5cGVvZiByZWFzb24gPT09IFwib2JqZWN0XCIgJiYgcmVhc29uICE9PSBudWxsKSkge1xuICAgICgwLCBfdXRpbC53YXJuKSgnd3JhcFJlYXNvbjogRXhwZWN0ZWQgXCJyZWFzb25cIiB0byBiZSBhIChwb3NzaWJseSBjbG9uZWQpIEVycm9yLicpO1xuICAgIHJldHVybiByZWFzb247XG4gIH1cblxuICBzd2l0Y2ggKHJlYXNvbi5uYW1lKSB7XG4gICAgY2FzZSBcIkFib3J0RXhjZXB0aW9uXCI6XG4gICAgICByZXR1cm4gbmV3IF91dGlsLkFib3J0RXhjZXB0aW9uKHJlYXNvbi5tZXNzYWdlKTtcblxuICAgIGNhc2UgXCJNaXNzaW5nUERGRXhjZXB0aW9uXCI6XG4gICAgICByZXR1cm4gbmV3IF91dGlsLk1pc3NpbmdQREZFeGNlcHRpb24ocmVhc29uLm1lc3NhZ2UpO1xuXG4gICAgY2FzZSBcIlBhc3N3b3JkRXhjZXB0aW9uXCI6XG4gICAgICByZXR1cm4gbmV3IF91dGlsLlBhc3N3b3JkRXhjZXB0aW9uKHJlYXNvbi5tZXNzYWdlLCByZWFzb24uY29kZSk7XG5cbiAgICBjYXNlIFwiVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uXCI6XG4gICAgICByZXR1cm4gbmV3IF91dGlsLlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbihyZWFzb24ubWVzc2FnZSwgcmVhc29uLnN0YXR1cyk7XG5cbiAgICBjYXNlIFwiVW5rbm93bkVycm9yRXhjZXB0aW9uXCI6XG4gICAgICByZXR1cm4gbmV3IF91dGlsLlVua25vd25FcnJvckV4Y2VwdGlvbihyZWFzb24ubWVzc2FnZSwgcmVhc29uLmRldGFpbHMpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBuZXcgX3V0aWwuVW5rbm93bkVycm9yRXhjZXB0aW9uKHJlYXNvbi5tZXNzYWdlLCByZWFzb24udG9TdHJpbmcoKSk7XG4gIH1cbn1cblxuY2xhc3MgTWVzc2FnZUhhbmRsZXIge1xuICBjb25zdHJ1Y3Rvcihzb3VyY2VOYW1lLCB0YXJnZXROYW1lLCBjb21PYmopIHtcbiAgICB0aGlzLnNvdXJjZU5hbWUgPSBzb3VyY2VOYW1lO1xuICAgIHRoaXMudGFyZ2V0TmFtZSA9IHRhcmdldE5hbWU7XG4gICAgdGhpcy5jb21PYmogPSBjb21PYmo7XG4gICAgdGhpcy5jYWxsYmFja0lkID0gMTtcbiAgICB0aGlzLnN0cmVhbUlkID0gMTtcbiAgICB0aGlzLnN0cmVhbVNpbmtzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLmNhbGxiYWNrQ2FwYWJpbGl0aWVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLmFjdGlvbkhhbmRsZXIgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgdGhpcy5fb25Db21PYmpPbk1lc3NhZ2UgPSBldmVudCA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gZXZlbnQuZGF0YTtcblxuICAgICAgaWYgKGRhdGEudGFyZ2V0TmFtZSAhPT0gdGhpcy5zb3VyY2VOYW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuc3RyZWFtKSB7XG4gICAgICAgIHRoaXMuX3Byb2Nlc3NTdHJlYW1NZXNzYWdlKGRhdGEpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgY2FsbGJhY2tJZCA9IGRhdGEuY2FsbGJhY2tJZDtcbiAgICAgICAgY29uc3QgY2FwYWJpbGl0eSA9IHRoaXMuY2FsbGJhY2tDYXBhYmlsaXRpZXNbY2FsbGJhY2tJZF07XG5cbiAgICAgICAgaWYgKCFjYXBhYmlsaXR5KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmVzb2x2ZSBjYWxsYmFjayAke2NhbGxiYWNrSWR9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBkZWxldGUgdGhpcy5jYWxsYmFja0NhcGFiaWxpdGllc1tjYWxsYmFja0lkXTtcblxuICAgICAgICBpZiAoZGF0YS5jYWxsYmFjayA9PT0gQ2FsbGJhY2tLaW5kLkRBVEEpIHtcbiAgICAgICAgICBjYXBhYmlsaXR5LnJlc29sdmUoZGF0YS5kYXRhKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLmNhbGxiYWNrID09PSBDYWxsYmFja0tpbmQuRVJST1IpIHtcbiAgICAgICAgICBjYXBhYmlsaXR5LnJlamVjdCh3cmFwUmVhc29uKGRhdGEucmVhc29uKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBjYWxsYmFjayBjYXNlXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLmFjdGlvbkhhbmRsZXJbZGF0YS5hY3Rpb25dO1xuXG4gICAgICBpZiAoIWFjdGlvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gYWN0aW9uIGZyb20gd29ya2VyOiAke2RhdGEuYWN0aW9ufWApO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jYWxsYmFja0lkKSB7XG4gICAgICAgIGNvbnN0IGNiU291cmNlTmFtZSA9IHRoaXMuc291cmNlTmFtZTtcbiAgICAgICAgY29uc3QgY2JUYXJnZXROYW1lID0gZGF0YS5zb3VyY2VOYW1lO1xuICAgICAgICBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgIHJlc29sdmUoYWN0aW9uKGRhdGEuZGF0YSkpO1xuICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgc291cmNlTmFtZTogY2JTb3VyY2VOYW1lLFxuICAgICAgICAgICAgdGFyZ2V0TmFtZTogY2JUYXJnZXROYW1lLFxuICAgICAgICAgICAgY2FsbGJhY2s6IENhbGxiYWNrS2luZC5EQVRBLFxuICAgICAgICAgICAgY2FsbGJhY2tJZDogZGF0YS5jYWxsYmFja0lkLFxuICAgICAgICAgICAgZGF0YTogcmVzdWx0XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgc291cmNlTmFtZTogY2JTb3VyY2VOYW1lLFxuICAgICAgICAgICAgdGFyZ2V0TmFtZTogY2JUYXJnZXROYW1lLFxuICAgICAgICAgICAgY2FsbGJhY2s6IENhbGxiYWNrS2luZC5FUlJPUixcbiAgICAgICAgICAgIGNhbGxiYWNrSWQ6IGRhdGEuY2FsbGJhY2tJZCxcbiAgICAgICAgICAgIHJlYXNvbjogd3JhcFJlYXNvbihyZWFzb24pXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLnN0cmVhbUlkKSB7XG4gICAgICAgIHRoaXMuX2NyZWF0ZVN0cmVhbVNpbmsoZGF0YSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBhY3Rpb24oZGF0YS5kYXRhKTtcbiAgICB9O1xuXG4gICAgY29tT2JqLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuX29uQ29tT2JqT25NZXNzYWdlKTtcbiAgfVxuXG4gIG9uKGFjdGlvbk5hbWUsIGhhbmRsZXIpIHtcbiAgICBjb25zdCBhaCA9IHRoaXMuYWN0aW9uSGFuZGxlcjtcblxuICAgIGlmIChhaFthY3Rpb25OYW1lXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGVyZSBpcyBhbHJlYWR5IGFuIGFjdGlvbk5hbWUgY2FsbGVkIFwiJHthY3Rpb25OYW1lfVwiYCk7XG4gICAgfVxuXG4gICAgYWhbYWN0aW9uTmFtZV0gPSBoYW5kbGVyO1xuICB9XG5cbiAgc2VuZChhY3Rpb25OYW1lLCBkYXRhLCB0cmFuc2ZlcnMpIHtcbiAgICB0aGlzLmNvbU9iai5wb3N0TWVzc2FnZSh7XG4gICAgICBzb3VyY2VOYW1lOiB0aGlzLnNvdXJjZU5hbWUsXG4gICAgICB0YXJnZXROYW1lOiB0aGlzLnRhcmdldE5hbWUsXG4gICAgICBhY3Rpb246IGFjdGlvbk5hbWUsXG4gICAgICBkYXRhXG4gICAgfSwgdHJhbnNmZXJzKTtcbiAgfVxuXG4gIHNlbmRXaXRoUHJvbWlzZShhY3Rpb25OYW1lLCBkYXRhLCB0cmFuc2ZlcnMpIHtcbiAgICBjb25zdCBjYWxsYmFja0lkID0gdGhpcy5jYWxsYmFja0lkKys7XG4gICAgY29uc3QgY2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICB0aGlzLmNhbGxiYWNrQ2FwYWJpbGl0aWVzW2NhbGxiYWNrSWRdID0gY2FwYWJpbGl0eTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmNvbU9iai5wb3N0TWVzc2FnZSh7XG4gICAgICAgIHNvdXJjZU5hbWU6IHRoaXMuc291cmNlTmFtZSxcbiAgICAgICAgdGFyZ2V0TmFtZTogdGhpcy50YXJnZXROYW1lLFxuICAgICAgICBhY3Rpb246IGFjdGlvbk5hbWUsXG4gICAgICAgIGNhbGxiYWNrSWQsXG4gICAgICAgIGRhdGFcbiAgICAgIH0sIHRyYW5zZmVycyk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGNhcGFiaWxpdHkucmVqZWN0KGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG5cbiAgc2VuZFdpdGhTdHJlYW0oYWN0aW9uTmFtZSwgZGF0YSwgcXVldWVpbmdTdHJhdGVneSwgdHJhbnNmZXJzKSB7XG4gICAgY29uc3Qgc3RyZWFtSWQgPSB0aGlzLnN0cmVhbUlkKyssXG4gICAgICAgICAgc291cmNlTmFtZSA9IHRoaXMuc291cmNlTmFtZSxcbiAgICAgICAgICB0YXJnZXROYW1lID0gdGhpcy50YXJnZXROYW1lLFxuICAgICAgICAgIGNvbU9iaiA9IHRoaXMuY29tT2JqO1xuICAgIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe1xuICAgICAgc3RhcnQ6IGNvbnRyb2xsZXIgPT4ge1xuICAgICAgICBjb25zdCBzdGFydENhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdID0ge1xuICAgICAgICAgIGNvbnRyb2xsZXIsXG4gICAgICAgICAgc3RhcnRDYWxsOiBzdGFydENhcGFiaWxpdHksXG4gICAgICAgICAgcHVsbENhbGw6IG51bGwsXG4gICAgICAgICAgY2FuY2VsQ2FsbDogbnVsbCxcbiAgICAgICAgICBpc0Nsb3NlZDogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICBzb3VyY2VOYW1lLFxuICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgYWN0aW9uOiBhY3Rpb25OYW1lLFxuICAgICAgICAgIHN0cmVhbUlkLFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgZGVzaXJlZFNpemU6IGNvbnRyb2xsZXIuZGVzaXJlZFNpemVcbiAgICAgICAgfSwgdHJhbnNmZXJzKTtcbiAgICAgICAgcmV0dXJuIHN0YXJ0Q2FwYWJpbGl0eS5wcm9taXNlO1xuICAgICAgfSxcbiAgICAgIHB1bGw6IGNvbnRyb2xsZXIgPT4ge1xuICAgICAgICBjb25zdCBwdWxsQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgICAgdGhpcy5zdHJlYW1Db250cm9sbGVyc1tzdHJlYW1JZF0ucHVsbENhbGwgPSBwdWxsQ2FwYWJpbGl0eTtcbiAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICBzb3VyY2VOYW1lLFxuICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLlBVTEwsXG4gICAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgICAgZGVzaXJlZFNpemU6IGNvbnRyb2xsZXIuZGVzaXJlZFNpemVcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwdWxsQ2FwYWJpbGl0eS5wcm9taXNlO1xuICAgICAgfSxcbiAgICAgIGNhbmNlbDogcmVhc29uID0+IHtcbiAgICAgICAgKDAsIF91dGlsLmFzc2VydCkocmVhc29uIGluc3RhbmNlb2YgRXJyb3IsIFwiY2FuY2VsIG11c3QgaGF2ZSBhIHZhbGlkIHJlYXNvblwiKTtcbiAgICAgICAgY29uc3QgY2FuY2VsQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgICAgdGhpcy5zdHJlYW1Db250cm9sbGVyc1tzdHJlYW1JZF0uY2FuY2VsQ2FsbCA9IGNhbmNlbENhcGFiaWxpdHk7XG4gICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLmlzQ2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICBzb3VyY2VOYW1lLFxuICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLkNBTkNFTCxcbiAgICAgICAgICBzdHJlYW1JZCxcbiAgICAgICAgICByZWFzb246IHdyYXBSZWFzb24ocmVhc29uKVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNhbmNlbENhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgIH1cbiAgICB9LCBxdWV1ZWluZ1N0cmF0ZWd5KTtcbiAgfVxuXG4gIF9jcmVhdGVTdHJlYW1TaW5rKGRhdGEpIHtcbiAgICBjb25zdCBzdHJlYW1JZCA9IGRhdGEuc3RyZWFtSWQsXG4gICAgICAgICAgc291cmNlTmFtZSA9IHRoaXMuc291cmNlTmFtZSxcbiAgICAgICAgICB0YXJnZXROYW1lID0gZGF0YS5zb3VyY2VOYW1lLFxuICAgICAgICAgIGNvbU9iaiA9IHRoaXMuY29tT2JqO1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzLFxuICAgICAgICAgIGFjdGlvbiA9IHRoaXMuYWN0aW9uSGFuZGxlcltkYXRhLmFjdGlvbl07XG4gICAgY29uc3Qgc3RyZWFtU2luayA9IHtcbiAgICAgIGVucXVldWUoY2h1bmssIHNpemUgPSAxLCB0cmFuc2ZlcnMpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNDYW5jZWxsZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYXN0RGVzaXJlZFNpemUgPSB0aGlzLmRlc2lyZWRTaXplO1xuICAgICAgICB0aGlzLmRlc2lyZWRTaXplIC09IHNpemU7XG5cbiAgICAgICAgaWYgKGxhc3REZXNpcmVkU2l6ZSA+IDAgJiYgdGhpcy5kZXNpcmVkU2l6ZSA8PSAwKSB7XG4gICAgICAgICAgdGhpcy5zaW5rQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgICAgICB0aGlzLnJlYWR5ID0gdGhpcy5zaW5rQ2FwYWJpbGl0eS5wcm9taXNlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICBzb3VyY2VOYW1lLFxuICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLkVOUVVFVUUsXG4gICAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgICAgY2h1bmtcbiAgICAgICAgfSwgdHJhbnNmZXJzKTtcbiAgICAgIH0sXG5cbiAgICAgIGNsb3NlKCkge1xuICAgICAgICBpZiAodGhpcy5pc0NhbmNlbGxlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNDYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgIHNvdXJjZU5hbWUsXG4gICAgICAgICAgdGFyZ2V0TmFtZSxcbiAgICAgICAgICBzdHJlYW06IFN0cmVhbUtpbmQuQ0xPU0UsXG4gICAgICAgICAgc3RyZWFtSWRcbiAgICAgICAgfSk7XG4gICAgICAgIGRlbGV0ZSBzZWxmLnN0cmVhbVNpbmtzW3N0cmVhbUlkXTtcbiAgICAgIH0sXG5cbiAgICAgIGVycm9yKHJlYXNvbikge1xuICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KShyZWFzb24gaW5zdGFuY2VvZiBFcnJvciwgXCJlcnJvciBtdXN0IGhhdmUgYSB2YWxpZCByZWFzb25cIik7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNDYW5jZWxsZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlzQ2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICBzb3VyY2VOYW1lLFxuICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLkVSUk9SLFxuICAgICAgICAgIHN0cmVhbUlkLFxuICAgICAgICAgIHJlYXNvbjogd3JhcFJlYXNvbihyZWFzb24pXG4gICAgICAgIH0pO1xuICAgICAgfSxcblxuICAgICAgc2lua0NhcGFiaWxpdHk6ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSxcbiAgICAgIG9uUHVsbDogbnVsbCxcbiAgICAgIG9uQ2FuY2VsOiBudWxsLFxuICAgICAgaXNDYW5jZWxsZWQ6IGZhbHNlLFxuICAgICAgZGVzaXJlZFNpemU6IGRhdGEuZGVzaXJlZFNpemUsXG4gICAgICByZWFkeTogbnVsbFxuICAgIH07XG4gICAgc3RyZWFtU2luay5zaW5rQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgc3RyZWFtU2luay5yZWFkeSA9IHN0cmVhbVNpbmsuc2lua0NhcGFiaWxpdHkucHJvbWlzZTtcbiAgICB0aGlzLnN0cmVhbVNpbmtzW3N0cmVhbUlkXSA9IHN0cmVhbVNpbms7XG4gICAgbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgIHJlc29sdmUoYWN0aW9uKGRhdGEuZGF0YSwgc3RyZWFtU2luaykpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgc291cmNlTmFtZSxcbiAgICAgICAgdGFyZ2V0TmFtZSxcbiAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLlNUQVJUX0NPTVBMRVRFLFxuICAgICAgICBzdHJlYW1JZCxcbiAgICAgICAgc3VjY2VzczogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgc291cmNlTmFtZSxcbiAgICAgICAgdGFyZ2V0TmFtZSxcbiAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLlNUQVJUX0NPTVBMRVRFLFxuICAgICAgICBzdHJlYW1JZCxcbiAgICAgICAgcmVhc29uOiB3cmFwUmVhc29uKHJlYXNvbilcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgX3Byb2Nlc3NTdHJlYW1NZXNzYWdlKGRhdGEpIHtcbiAgICBjb25zdCBzdHJlYW1JZCA9IGRhdGEuc3RyZWFtSWQsXG4gICAgICAgICAgc291cmNlTmFtZSA9IHRoaXMuc291cmNlTmFtZSxcbiAgICAgICAgICB0YXJnZXROYW1lID0gZGF0YS5zb3VyY2VOYW1lLFxuICAgICAgICAgIGNvbU9iaiA9IHRoaXMuY29tT2JqO1xuICAgIGNvbnN0IHN0cmVhbUNvbnRyb2xsZXIgPSB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXSxcbiAgICAgICAgICBzdHJlYW1TaW5rID0gdGhpcy5zdHJlYW1TaW5rc1tzdHJlYW1JZF07XG5cbiAgICBzd2l0Y2ggKGRhdGEuc3RyZWFtKSB7XG4gICAgICBjYXNlIFN0cmVhbUtpbmQuU1RBUlRfQ09NUExFVEU6XG4gICAgICAgIGlmIChkYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgICBzdHJlYW1Db250cm9sbGVyLnN0YXJ0Q2FsbC5yZXNvbHZlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RyZWFtQ29udHJvbGxlci5zdGFydENhbGwucmVqZWN0KHdyYXBSZWFzb24oZGF0YS5yZWFzb24pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFN0cmVhbUtpbmQuUFVMTF9DT01QTEVURTpcbiAgICAgICAgaWYgKGRhdGEuc3VjY2Vzcykge1xuICAgICAgICAgIHN0cmVhbUNvbnRyb2xsZXIucHVsbENhbGwucmVzb2x2ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0cmVhbUNvbnRyb2xsZXIucHVsbENhbGwucmVqZWN0KHdyYXBSZWFzb24oZGF0YS5yZWFzb24pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFN0cmVhbUtpbmQuUFVMTDpcbiAgICAgICAgaWYgKCFzdHJlYW1TaW5rKSB7XG4gICAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIHNvdXJjZU5hbWUsXG4gICAgICAgICAgICB0YXJnZXROYW1lLFxuICAgICAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLlBVTExfQ09NUExFVEUsXG4gICAgICAgICAgICBzdHJlYW1JZCxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJlYW1TaW5rLmRlc2lyZWRTaXplIDw9IDAgJiYgZGF0YS5kZXNpcmVkU2l6ZSA+IDApIHtcbiAgICAgICAgICBzdHJlYW1TaW5rLnNpbmtDYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0cmVhbVNpbmsuZGVzaXJlZFNpemUgPSBkYXRhLmRlc2lyZWRTaXplO1xuICAgICAgICBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgIHJlc29sdmUoc3RyZWFtU2luay5vblB1bGwgJiYgc3RyZWFtU2luay5vblB1bGwoKSk7XG4gICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbU9iai5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICBzb3VyY2VOYW1lLFxuICAgICAgICAgICAgdGFyZ2V0TmFtZSxcbiAgICAgICAgICAgIHN0cmVhbTogU3RyZWFtS2luZC5QVUxMX0NPTVBMRVRFLFxuICAgICAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgc291cmNlTmFtZSxcbiAgICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgICBzdHJlYW06IFN0cmVhbUtpbmQuUFVMTF9DT01QTEVURSxcbiAgICAgICAgICAgIHN0cmVhbUlkLFxuICAgICAgICAgICAgcmVhc29uOiB3cmFwUmVhc29uKHJlYXNvbilcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFN0cmVhbUtpbmQuRU5RVUVVRTpcbiAgICAgICAgKDAsIF91dGlsLmFzc2VydCkoc3RyZWFtQ29udHJvbGxlciwgXCJlbnF1ZXVlIHNob3VsZCBoYXZlIHN0cmVhbSBjb250cm9sbGVyXCIpO1xuXG4gICAgICAgIGlmIChzdHJlYW1Db250cm9sbGVyLmlzQ2xvc2VkKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBzdHJlYW1Db250cm9sbGVyLmNvbnRyb2xsZXIuZW5xdWV1ZShkYXRhLmNodW5rKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgU3RyZWFtS2luZC5DTE9TRTpcbiAgICAgICAgKDAsIF91dGlsLmFzc2VydCkoc3RyZWFtQ29udHJvbGxlciwgXCJjbG9zZSBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlclwiKTtcblxuICAgICAgICBpZiAoc3RyZWFtQ29udHJvbGxlci5pc0Nsb3NlZCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RyZWFtQ29udHJvbGxlci5pc0Nsb3NlZCA9IHRydWU7XG4gICAgICAgIHN0cmVhbUNvbnRyb2xsZXIuY29udHJvbGxlci5jbG9zZSgpO1xuXG4gICAgICAgIHRoaXMuX2RlbGV0ZVN0cmVhbUNvbnRyb2xsZXIoc3RyZWFtQ29udHJvbGxlciwgc3RyZWFtSWQpO1xuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFN0cmVhbUtpbmQuRVJST1I6XG4gICAgICAgICgwLCBfdXRpbC5hc3NlcnQpKHN0cmVhbUNvbnRyb2xsZXIsIFwiZXJyb3Igc2hvdWxkIGhhdmUgc3RyZWFtIGNvbnRyb2xsZXJcIik7XG4gICAgICAgIHN0cmVhbUNvbnRyb2xsZXIuY29udHJvbGxlci5lcnJvcih3cmFwUmVhc29uKGRhdGEucmVhc29uKSk7XG5cbiAgICAgICAgdGhpcy5fZGVsZXRlU3RyZWFtQ29udHJvbGxlcihzdHJlYW1Db250cm9sbGVyLCBzdHJlYW1JZCk7XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgU3RyZWFtS2luZC5DQU5DRUxfQ09NUExFVEU6XG4gICAgICAgIGlmIChkYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgICBzdHJlYW1Db250cm9sbGVyLmNhbmNlbENhbGwucmVzb2x2ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0cmVhbUNvbnRyb2xsZXIuY2FuY2VsQ2FsbC5yZWplY3Qod3JhcFJlYXNvbihkYXRhLnJlYXNvbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZGVsZXRlU3RyZWFtQ29udHJvbGxlcihzdHJlYW1Db250cm9sbGVyLCBzdHJlYW1JZCk7XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgU3RyZWFtS2luZC5DQU5DRUw6XG4gICAgICAgIGlmICghc3RyZWFtU2luaykge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICByZXNvbHZlKHN0cmVhbVNpbmsub25DYW5jZWwgJiYgc3RyZWFtU2luay5vbkNhbmNlbCh3cmFwUmVhc29uKGRhdGEucmVhc29uKSkpO1xuICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgc291cmNlTmFtZSxcbiAgICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgICBzdHJlYW06IFN0cmVhbUtpbmQuQ0FOQ0VMX0NPTVBMRVRFLFxuICAgICAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgc291cmNlTmFtZSxcbiAgICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgICBzdHJlYW06IFN0cmVhbUtpbmQuQ0FOQ0VMX0NPTVBMRVRFLFxuICAgICAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgICAgICByZWFzb246IHdyYXBSZWFzb24ocmVhc29uKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgc3RyZWFtU2luay5zaW5rQ2FwYWJpbGl0eS5yZWplY3Qod3JhcFJlYXNvbihkYXRhLnJlYXNvbikpO1xuICAgICAgICBzdHJlYW1TaW5rLmlzQ2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgZGVsZXRlIHRoaXMuc3RyZWFtU2lua3Nbc3RyZWFtSWRdO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBzdHJlYW0gY2FzZVwiKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBfZGVsZXRlU3RyZWFtQ29udHJvbGxlcihzdHJlYW1Db250cm9sbGVyLCBzdHJlYW1JZCkge1xuICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChbc3RyZWFtQ29udHJvbGxlci5zdGFydENhbGwgJiYgc3RyZWFtQ29udHJvbGxlci5zdGFydENhbGwucHJvbWlzZSwgc3RyZWFtQ29udHJvbGxlci5wdWxsQ2FsbCAmJiBzdHJlYW1Db250cm9sbGVyLnB1bGxDYWxsLnByb21pc2UsIHN0cmVhbUNvbnRyb2xsZXIuY2FuY2VsQ2FsbCAmJiBzdHJlYW1Db250cm9sbGVyLmNhbmNlbENhbGwucHJvbWlzZV0pO1xuICAgIGRlbGV0ZSB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXTtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5jb21PYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5fb25Db21PYmpPbk1lc3NhZ2UpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5NZXNzYWdlSGFuZGxlciA9IE1lc3NhZ2VIYW5kbGVyO1xuXG4vKioqLyB9KSxcbi8qIDE0ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLk1ldGFkYXRhID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5jbGFzcyBNZXRhZGF0YSB7XG4gICNtZXRhZGF0YU1hcDtcbiAgI2RhdGE7XG5cbiAgY29uc3RydWN0b3Ioe1xuICAgIHBhcnNlZERhdGEsXG4gICAgcmF3RGF0YVxuICB9KSB7XG4gICAgdGhpcy4jbWV0YWRhdGFNYXAgPSBwYXJzZWREYXRhO1xuICAgIHRoaXMuI2RhdGEgPSByYXdEYXRhO1xuICB9XG5cbiAgZ2V0UmF3KCkge1xuICAgIHJldHVybiB0aGlzLiNkYXRhO1xuICB9XG5cbiAgZ2V0KG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy4jbWV0YWRhdGFNYXAuZ2V0KG5hbWUpID8/IG51bGw7XG4gIH1cblxuICBnZXRBbGwoKSB7XG4gICAgcmV0dXJuICgwLCBfdXRpbC5vYmplY3RGcm9tTWFwKSh0aGlzLiNtZXRhZGF0YU1hcCk7XG4gIH1cblxuICBoYXMobmFtZSkge1xuICAgIHJldHVybiB0aGlzLiNtZXRhZGF0YU1hcC5oYXMobmFtZSk7XG4gIH1cblxufVxuXG5leHBvcnRzLk1ldGFkYXRhID0gTWV0YWRhdGE7XG5cbi8qKiovIH0pLFxuLyogMTUgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuT3B0aW9uYWxDb250ZW50Q29uZmlnID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5jbGFzcyBPcHRpb25hbENvbnRlbnRHcm91cCB7XG4gIGNvbnN0cnVjdG9yKG5hbWUsIGludGVudCkge1xuICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLmludGVudCA9IGludGVudDtcbiAgfVxuXG59XG5cbmNsYXNzIE9wdGlvbmFsQ29udGVudENvbmZpZyB7XG4gIGNvbnN0cnVjdG9yKGRhdGEpIHtcbiAgICB0aGlzLm5hbWUgPSBudWxsO1xuICAgIHRoaXMuY3JlYXRvciA9IG51bGw7XG4gICAgdGhpcy5fb3JkZXIgPSBudWxsO1xuICAgIHRoaXMuX2dyb3VwcyA9IG5ldyBNYXAoKTtcblxuICAgIGlmIChkYXRhID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5uYW1lID0gZGF0YS5uYW1lO1xuICAgIHRoaXMuY3JlYXRvciA9IGRhdGEuY3JlYXRvcjtcbiAgICB0aGlzLl9vcmRlciA9IGRhdGEub3JkZXI7XG5cbiAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIGRhdGEuZ3JvdXBzKSB7XG4gICAgICB0aGlzLl9ncm91cHMuc2V0KGdyb3VwLmlkLCBuZXcgT3B0aW9uYWxDb250ZW50R3JvdXAoZ3JvdXAubmFtZSwgZ3JvdXAuaW50ZW50KSk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEuYmFzZVN0YXRlID09PSBcIk9GRlwiKSB7XG4gICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIHRoaXMuX2dyb3Vwcykge1xuICAgICAgICBncm91cC52aXNpYmxlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBvbiBvZiBkYXRhLm9uKSB7XG4gICAgICB0aGlzLl9ncm91cHMuZ2V0KG9uKS52aXNpYmxlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG9mZiBvZiBkYXRhLm9mZikge1xuICAgICAgdGhpcy5fZ3JvdXBzLmdldChvZmYpLnZpc2libGUgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBfZXZhbHVhdGVWaXNpYmlsaXR5RXhwcmVzc2lvbihhcnJheSkge1xuICAgIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICAgIGlmIChsZW5ndGggPCAyKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBvcGVyYXRvciA9IGFycmF5WzBdO1xuXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2ldO1xuICAgICAgbGV0IHN0YXRlO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShlbGVtZW50KSkge1xuICAgICAgICBzdGF0ZSA9IHRoaXMuX2V2YWx1YXRlVmlzaWJpbGl0eUV4cHJlc3Npb24oZWxlbWVudCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2dyb3Vwcy5oYXMoZWxlbWVudCkpIHtcbiAgICAgICAgc3RhdGUgPSB0aGlzLl9ncm91cHMuZ2V0KGVsZW1lbnQpLnZpc2libGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoYE9wdGlvbmFsIGNvbnRlbnQgZ3JvdXAgbm90IGZvdW5kOiAke2VsZW1lbnR9YCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKG9wZXJhdG9yKSB7XG4gICAgICAgIGNhc2UgXCJBbmRcIjpcbiAgICAgICAgICBpZiAoIXN0YXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIk9yXCI6XG4gICAgICAgICAgaWYgKHN0YXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiTm90XCI6XG4gICAgICAgICAgcmV0dXJuICFzdGF0ZTtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvcGVyYXRvciA9PT0gXCJBbmRcIjtcbiAgfVxuXG4gIGlzVmlzaWJsZShncm91cCkge1xuICAgIGlmICh0aGlzLl9ncm91cHMuc2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFncm91cCkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKFwiT3B0aW9uYWwgY29udGVudCBncm91cCBub3QgZGVmaW5lZC5cIik7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoZ3JvdXAudHlwZSA9PT0gXCJPQ0dcIikge1xuICAgICAgaWYgKCF0aGlzLl9ncm91cHMuaGFzKGdyb3VwLmlkKSkge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoYE9wdGlvbmFsIGNvbnRlbnQgZ3JvdXAgbm90IGZvdW5kOiAke2dyb3VwLmlkfWApO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX2dyb3Vwcy5nZXQoZ3JvdXAuaWQpLnZpc2libGU7XG4gICAgfSBlbHNlIGlmIChncm91cC50eXBlID09PSBcIk9DTURcIikge1xuICAgICAgaWYgKGdyb3VwLmV4cHJlc3Npb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V2YWx1YXRlVmlzaWJpbGl0eUV4cHJlc3Npb24oZ3JvdXAuZXhwcmVzc2lvbik7XG4gICAgICB9XG5cbiAgICAgIGlmICghZ3JvdXAucG9saWN5IHx8IGdyb3VwLnBvbGljeSA9PT0gXCJBbnlPblwiKSB7XG4gICAgICAgIGZvciAoY29uc3QgaWQgb2YgZ3JvdXAuaWRzKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLl9ncm91cHMuaGFzKGlkKSkge1xuICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKGBPcHRpb25hbCBjb250ZW50IGdyb3VwIG5vdCBmb3VuZDogJHtpZH1gKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLl9ncm91cHMuZ2V0KGlkKS52aXNpYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKGdyb3VwLnBvbGljeSA9PT0gXCJBbGxPblwiKSB7XG4gICAgICAgIGZvciAoY29uc3QgaWQgb2YgZ3JvdXAuaWRzKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLl9ncm91cHMuaGFzKGlkKSkge1xuICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKGBPcHRpb25hbCBjb250ZW50IGdyb3VwIG5vdCBmb3VuZDogJHtpZH1gKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghdGhpcy5fZ3JvdXBzLmdldChpZCkudmlzaWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChncm91cC5wb2xpY3kgPT09IFwiQW55T2ZmXCIpIHtcbiAgICAgICAgZm9yIChjb25zdCBpZCBvZiBncm91cC5pZHMpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuX2dyb3Vwcy5oYXMoaWQpKSB7XG4gICAgICAgICAgICAoMCwgX3V0aWwud2FybikoYE9wdGlvbmFsIGNvbnRlbnQgZ3JvdXAgbm90IGZvdW5kOiAke2lkfWApO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCF0aGlzLl9ncm91cHMuZ2V0KGlkKS52aXNpYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKGdyb3VwLnBvbGljeSA9PT0gXCJBbGxPZmZcIikge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIGdyb3VwLmlkcykge1xuICAgICAgICAgIGlmICghdGhpcy5fZ3JvdXBzLmhhcyhpZCkpIHtcbiAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgT3B0aW9uYWwgY29udGVudCBncm91cCBub3QgZm91bmQ6ICR7aWR9YCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy5fZ3JvdXBzLmdldChpZCkudmlzaWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAoMCwgX3V0aWwud2FybikoYFVua25vd24gb3B0aW9uYWwgY29udGVudCBwb2xpY3kgJHtncm91cC5wb2xpY3l9LmApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgKDAsIF91dGlsLndhcm4pKGBVbmtub3duIGdyb3VwIHR5cGUgJHtncm91cC50eXBlfS5gKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHNldFZpc2liaWxpdHkoaWQsIHZpc2libGUgPSB0cnVlKSB7XG4gICAgaWYgKCF0aGlzLl9ncm91cHMuaGFzKGlkKSkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKGBPcHRpb25hbCBjb250ZW50IGdyb3VwIG5vdCBmb3VuZDogJHtpZH1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9ncm91cHMuZ2V0KGlkKS52aXNpYmxlID0gISF2aXNpYmxlO1xuICB9XG5cbiAgZ2V0T3JkZXIoKSB7XG4gICAgaWYgKCF0aGlzLl9ncm91cHMuc2l6ZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX29yZGVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5fb3JkZXIuc2xpY2UoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9ncm91cHMua2V5cygpKTtcbiAgfVxuXG4gIGdldEdyb3VwcygpIHtcbiAgICByZXR1cm4gdGhpcy5fZ3JvdXBzLnNpemUgPiAwID8gKDAsIF91dGlsLm9iamVjdEZyb21NYXApKHRoaXMuX2dyb3VwcykgOiBudWxsO1xuICB9XG5cbiAgZ2V0R3JvdXAoaWQpIHtcbiAgICByZXR1cm4gdGhpcy5fZ3JvdXBzLmdldChpZCkgfHwgbnVsbDtcbiAgfVxuXG59XG5cbmV4cG9ydHMuT3B0aW9uYWxDb250ZW50Q29uZmlnID0gT3B0aW9uYWxDb250ZW50Q29uZmlnO1xuXG4vKioqLyB9KSxcbi8qIDE2ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLlBERkRhdGFUcmFuc3BvcnRTdHJlYW0gPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfZGlzcGxheV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oMSk7XG5cbmNsYXNzIFBERkRhdGFUcmFuc3BvcnRTdHJlYW0ge1xuICBjb25zdHJ1Y3RvcihwYXJhbXMsIHBkZkRhdGFSYW5nZVRyYW5zcG9ydCkge1xuICAgICgwLCBfdXRpbC5hc3NlcnQpKHBkZkRhdGFSYW5nZVRyYW5zcG9ydCwgJ1BERkRhdGFUcmFuc3BvcnRTdHJlYW0gLSBtaXNzaW5nIHJlcXVpcmVkIFwicGRmRGF0YVJhbmdlVHJhbnNwb3J0XCIgYXJndW1lbnQuJyk7XG4gICAgdGhpcy5fcXVldWVkQ2h1bmtzID0gW107XG4gICAgdGhpcy5fcHJvZ3Jlc3NpdmVEb25lID0gcGFyYW1zLnByb2dyZXNzaXZlRG9uZSB8fCBmYWxzZTtcbiAgICB0aGlzLl9jb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZSA9IHBhcmFtcy5jb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZSB8fCBudWxsO1xuICAgIGNvbnN0IGluaXRpYWxEYXRhID0gcGFyYW1zLmluaXRpYWxEYXRhO1xuXG4gICAgaWYgKGluaXRpYWxEYXRhPy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheShpbml0aWFsRGF0YSkuYnVmZmVyO1xuXG4gICAgICB0aGlzLl9xdWV1ZWRDaHVua3MucHVzaChidWZmZXIpO1xuICAgIH1cblxuICAgIHRoaXMuX3BkZkRhdGFSYW5nZVRyYW5zcG9ydCA9IHBkZkRhdGFSYW5nZVRyYW5zcG9ydDtcbiAgICB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZCA9ICFwYXJhbXMuZGlzYWJsZVN0cmVhbTtcbiAgICB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkID0gIXBhcmFtcy5kaXNhYmxlUmFuZ2U7XG4gICAgdGhpcy5fY29udGVudExlbmd0aCA9IHBhcmFtcy5sZW5ndGg7XG4gICAgdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIgPSBudWxsO1xuICAgIHRoaXMuX3JhbmdlUmVhZGVycyA9IFtdO1xuXG4gICAgdGhpcy5fcGRmRGF0YVJhbmdlVHJhbnNwb3J0LmFkZFJhbmdlTGlzdGVuZXIoKGJlZ2luLCBjaHVuaykgPT4ge1xuICAgICAgdGhpcy5fb25SZWNlaXZlRGF0YSh7XG4gICAgICAgIGJlZ2luLFxuICAgICAgICBjaHVua1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQuYWRkUHJvZ3Jlc3NMaXN0ZW5lcigobG9hZGVkLCB0b3RhbCkgPT4ge1xuICAgICAgdGhpcy5fb25Qcm9ncmVzcyh7XG4gICAgICAgIGxvYWRlZCxcbiAgICAgICAgdG90YWxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5fcGRmRGF0YVJhbmdlVHJhbnNwb3J0LmFkZFByb2dyZXNzaXZlUmVhZExpc3RlbmVyKGNodW5rID0+IHtcbiAgICAgIHRoaXMuX29uUmVjZWl2ZURhdGEoe1xuICAgICAgICBjaHVua1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQuYWRkUHJvZ3Jlc3NpdmVEb25lTGlzdGVuZXIoKCkgPT4ge1xuICAgICAgdGhpcy5fb25Qcm9ncmVzc2l2ZURvbmUoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3BkZkRhdGFSYW5nZVRyYW5zcG9ydC50cmFuc3BvcnRSZWFkeSgpO1xuICB9XG5cbiAgX29uUmVjZWl2ZURhdGEoYXJncykge1xuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KGFyZ3MuY2h1bmspLmJ1ZmZlcjtcblxuICAgIGlmIChhcmdzLmJlZ2luID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcikge1xuICAgICAgICB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlci5fZW5xdWV1ZShidWZmZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fcXVldWVkQ2h1bmtzLnB1c2goYnVmZmVyKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZm91bmQgPSB0aGlzLl9yYW5nZVJlYWRlcnMuc29tZShmdW5jdGlvbiAocmFuZ2VSZWFkZXIpIHtcbiAgICAgICAgaWYgKHJhbmdlUmVhZGVyLl9iZWdpbiAhPT0gYXJncy5iZWdpbikge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJhbmdlUmVhZGVyLl9lbnF1ZXVlKGJ1ZmZlcik7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcblxuICAgICAgKDAsIF91dGlsLmFzc2VydCkoZm91bmQsIFwiX29uUmVjZWl2ZURhdGEgLSBubyBgUERGRGF0YVRyYW5zcG9ydFN0cmVhbVJhbmdlUmVhZGVyYCBpbnN0YW5jZSBmb3VuZC5cIik7XG4gICAgfVxuICB9XG5cbiAgZ2V0IF9wcm9ncmVzc2l2ZURhdGFMZW5ndGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyPy5fbG9hZGVkID8/IDA7XG4gIH1cblxuICBfb25Qcm9ncmVzcyhldnQpIHtcbiAgICBpZiAoZXZ0LnRvdGFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGZpcnN0UmVhZGVyID0gdGhpcy5fcmFuZ2VSZWFkZXJzWzBdO1xuXG4gICAgICBpZiAoZmlyc3RSZWFkZXI/Lm9uUHJvZ3Jlc3MpIHtcbiAgICAgICAgZmlyc3RSZWFkZXIub25Qcm9ncmVzcyh7XG4gICAgICAgICAgbG9hZGVkOiBldnQubG9hZGVkXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmdWxsUmVhZGVyID0gdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI7XG5cbiAgICAgIGlmIChmdWxsUmVhZGVyPy5vblByb2dyZXNzKSB7XG4gICAgICAgIGZ1bGxSZWFkZXIub25Qcm9ncmVzcyh7XG4gICAgICAgICAgbG9hZGVkOiBldnQubG9hZGVkLFxuICAgICAgICAgIHRvdGFsOiBldnQudG90YWxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgX29uUHJvZ3Jlc3NpdmVEb25lKCkge1xuICAgIGlmICh0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcikge1xuICAgICAgdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIucHJvZ3Jlc3NpdmVEb25lKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcHJvZ3Jlc3NpdmVEb25lID0gdHJ1ZTtcbiAgfVxuXG4gIF9yZW1vdmVSYW5nZVJlYWRlcihyZWFkZXIpIHtcbiAgICBjb25zdCBpID0gdGhpcy5fcmFuZ2VSZWFkZXJzLmluZGV4T2YocmVhZGVyKTtcblxuICAgIGlmIChpID49IDApIHtcbiAgICAgIHRoaXMuX3JhbmdlUmVhZGVycy5zcGxpY2UoaSwgMSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RnVsbFJlYWRlcigpIHtcbiAgICAoMCwgX3V0aWwuYXNzZXJ0KSghdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIsIFwiUERGRGF0YVRyYW5zcG9ydFN0cmVhbS5nZXRGdWxsUmVhZGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlLlwiKTtcbiAgICBjb25zdCBxdWV1ZWRDaHVua3MgPSB0aGlzLl9xdWV1ZWRDaHVua3M7XG4gICAgdGhpcy5fcXVldWVkQ2h1bmtzID0gbnVsbDtcbiAgICByZXR1cm4gbmV3IFBERkRhdGFUcmFuc3BvcnRTdHJlYW1SZWFkZXIodGhpcywgcXVldWVkQ2h1bmtzLCB0aGlzLl9wcm9ncmVzc2l2ZURvbmUsIHRoaXMuX2NvbnRlbnREaXNwb3NpdGlvbkZpbGVuYW1lKTtcbiAgfVxuXG4gIGdldFJhbmdlUmVhZGVyKGJlZ2luLCBlbmQpIHtcbiAgICBpZiAoZW5kIDw9IHRoaXMuX3Byb2dyZXNzaXZlRGF0YUxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmVhZGVyID0gbmV3IFBERkRhdGFUcmFuc3BvcnRTdHJlYW1SYW5nZVJlYWRlcih0aGlzLCBiZWdpbiwgZW5kKTtcblxuICAgIHRoaXMuX3BkZkRhdGFSYW5nZVRyYW5zcG9ydC5yZXF1ZXN0RGF0YVJhbmdlKGJlZ2luLCBlbmQpO1xuXG4gICAgdGhpcy5fcmFuZ2VSZWFkZXJzLnB1c2gocmVhZGVyKTtcblxuICAgIHJldHVybiByZWFkZXI7XG4gIH1cblxuICBjYW5jZWxBbGxSZXF1ZXN0cyhyZWFzb24pIHtcbiAgICBpZiAodGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpIHtcbiAgICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcmVhZGVyIG9mIHRoaXMuX3JhbmdlUmVhZGVycy5zbGljZSgwKSkge1xuICAgICAgcmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICAgIH1cblxuICAgIHRoaXMuX3BkZkRhdGFSYW5nZVRyYW5zcG9ydC5hYm9ydCgpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5QREZEYXRhVHJhbnNwb3J0U3RyZWFtID0gUERGRGF0YVRyYW5zcG9ydFN0cmVhbTtcblxuY2xhc3MgUERGRGF0YVRyYW5zcG9ydFN0cmVhbVJlYWRlciB7XG4gIGNvbnN0cnVjdG9yKHN0cmVhbSwgcXVldWVkQ2h1bmtzLCBwcm9ncmVzc2l2ZURvbmUgPSBmYWxzZSwgY29udGVudERpc3Bvc2l0aW9uRmlsZW5hbWUgPSBudWxsKSB7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICAgIHRoaXMuX2RvbmUgPSBwcm9ncmVzc2l2ZURvbmUgfHwgZmFsc2U7XG4gICAgdGhpcy5fZmlsZW5hbWUgPSAoMCwgX2Rpc3BsYXlfdXRpbHMuaXNQZGZGaWxlKShjb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZSkgPyBjb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZSA6IG51bGw7XG4gICAgdGhpcy5fcXVldWVkQ2h1bmtzID0gcXVldWVkQ2h1bmtzIHx8IFtdO1xuICAgIHRoaXMuX2xvYWRlZCA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IGNodW5rIG9mIHRoaXMuX3F1ZXVlZENodW5rcykge1xuICAgICAgdGhpcy5fbG9hZGVkICs9IGNodW5rLmJ5dGVMZW5ndGg7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVxdWVzdHMgPSBbXTtcbiAgICB0aGlzLl9oZWFkZXJzUmVhZHkgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgICBzdHJlYW0uX2Z1bGxSZXF1ZXN0UmVhZGVyID0gdGhpcztcbiAgICB0aGlzLm9uUHJvZ3Jlc3MgPSBudWxsO1xuICB9XG5cbiAgX2VucXVldWUoY2h1bmspIHtcbiAgICBpZiAodGhpcy5fZG9uZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9yZXF1ZXN0cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCByZXF1ZXN0Q2FwYWJpbGl0eSA9IHRoaXMuX3JlcXVlc3RzLnNoaWZ0KCk7XG5cbiAgICAgIHJlcXVlc3RDYXBhYmlsaXR5LnJlc29sdmUoe1xuICAgICAgICB2YWx1ZTogY2h1bmssXG4gICAgICAgIGRvbmU6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcXVldWVkQ2h1bmtzLnB1c2goY2h1bmspO1xuICAgIH1cblxuICAgIHRoaXMuX2xvYWRlZCArPSBjaHVuay5ieXRlTGVuZ3RoO1xuICB9XG5cbiAgZ2V0IGhlYWRlcnNSZWFkeSgpIHtcbiAgICByZXR1cm4gdGhpcy5faGVhZGVyc1JlYWR5O1xuICB9XG5cbiAgZ2V0IGZpbGVuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLl9maWxlbmFtZTtcbiAgfVxuXG4gIGdldCBpc1JhbmdlU3VwcG9ydGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9zdHJlYW0uX2lzUmFuZ2VTdXBwb3J0ZWQ7XG4gIH1cblxuICBnZXQgaXNTdHJlYW1pbmdTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0cmVhbS5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ7XG4gIH1cblxuICBnZXQgY29udGVudExlbmd0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RyZWFtLl9jb250ZW50TGVuZ3RoO1xuICB9XG5cbiAgYXN5bmMgcmVhZCgpIHtcbiAgICBpZiAodGhpcy5fcXVldWVkQ2h1bmtzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGNodW5rID0gdGhpcy5fcXVldWVkQ2h1bmtzLnNoaWZ0KCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiBjaHVuayxcbiAgICAgICAgZG9uZTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2RvbmUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgIGRvbmU6IHRydWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdENhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG5cbiAgICB0aGlzLl9yZXF1ZXN0cy5wdXNoKHJlcXVlc3RDYXBhYmlsaXR5KTtcblxuICAgIHJldHVybiByZXF1ZXN0Q2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG5cbiAgY2FuY2VsKHJlYXNvbikge1xuICAgIHRoaXMuX2RvbmUgPSB0cnVlO1xuXG4gICAgZm9yIChjb25zdCByZXF1ZXN0Q2FwYWJpbGl0eSBvZiB0aGlzLl9yZXF1ZXN0cykge1xuICAgICAgcmVxdWVzdENhcGFiaWxpdHkucmVzb2x2ZSh7XG4gICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgIGRvbmU6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuX3JlcXVlc3RzLmxlbmd0aCA9IDA7XG4gIH1cblxuICBwcm9ncmVzc2l2ZURvbmUoKSB7XG4gICAgaWYgKHRoaXMuX2RvbmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9kb25lID0gdHJ1ZTtcbiAgfVxuXG59XG5cbmNsYXNzIFBERkRhdGFUcmFuc3BvcnRTdHJlYW1SYW5nZVJlYWRlciB7XG4gIGNvbnN0cnVjdG9yKHN0cmVhbSwgYmVnaW4sIGVuZCkge1xuICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgICB0aGlzLl9iZWdpbiA9IGJlZ2luO1xuICAgIHRoaXMuX2VuZCA9IGVuZDtcbiAgICB0aGlzLl9xdWV1ZWRDaHVuayA9IG51bGw7XG4gICAgdGhpcy5fcmVxdWVzdHMgPSBbXTtcbiAgICB0aGlzLl9kb25lID0gZmFsc2U7XG4gICAgdGhpcy5vblByb2dyZXNzID0gbnVsbDtcbiAgfVxuXG4gIF9lbnF1ZXVlKGNodW5rKSB7XG4gICAgaWYgKHRoaXMuX2RvbmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcmVxdWVzdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLl9xdWV1ZWRDaHVuayA9IGNodW5rO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByZXF1ZXN0c0NhcGFiaWxpdHkgPSB0aGlzLl9yZXF1ZXN0cy5zaGlmdCgpO1xuXG4gICAgICByZXF1ZXN0c0NhcGFiaWxpdHkucmVzb2x2ZSh7XG4gICAgICAgIHZhbHVlOiBjaHVuayxcbiAgICAgICAgZG9uZTogZmFsc2VcbiAgICAgIH0pO1xuXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3RDYXBhYmlsaXR5IG9mIHRoaXMuX3JlcXVlc3RzKSB7XG4gICAgICAgIHJlcXVlc3RDYXBhYmlsaXR5LnJlc29sdmUoe1xuICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgZG9uZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcmVxdWVzdHMubGVuZ3RoID0gMDtcbiAgICB9XG5cbiAgICB0aGlzLl9kb25lID0gdHJ1ZTtcblxuICAgIHRoaXMuX3N0cmVhbS5fcmVtb3ZlUmFuZ2VSZWFkZXIodGhpcyk7XG4gIH1cblxuICBnZXQgaXNTdHJlYW1pbmdTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgcmVhZCgpIHtcbiAgICBpZiAodGhpcy5fcXVldWVkQ2h1bmspIHtcbiAgICAgIGNvbnN0IGNodW5rID0gdGhpcy5fcXVldWVkQ2h1bms7XG4gICAgICB0aGlzLl9xdWV1ZWRDaHVuayA9IG51bGw7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogY2h1bmssXG4gICAgICAgIGRvbmU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9kb25lKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICBkb25lOiB0cnVlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuXG4gICAgdGhpcy5fcmVxdWVzdHMucHVzaChyZXF1ZXN0Q2FwYWJpbGl0eSk7XG5cbiAgICByZXR1cm4gcmVxdWVzdENhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxuXG4gIGNhbmNlbChyZWFzb24pIHtcbiAgICB0aGlzLl9kb25lID0gdHJ1ZTtcblxuICAgIGZvciAoY29uc3QgcmVxdWVzdENhcGFiaWxpdHkgb2YgdGhpcy5fcmVxdWVzdHMpIHtcbiAgICAgIHJlcXVlc3RDYXBhYmlsaXR5LnJlc29sdmUoe1xuICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICBkb25lOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLl9yZXF1ZXN0cy5sZW5ndGggPSAwO1xuXG4gICAgdGhpcy5fc3RyZWFtLl9yZW1vdmVSYW5nZVJlYWRlcih0aGlzKTtcbiAgfVxuXG59XG5cbi8qKiovIH0pLFxuLyogMTcgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMpID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuWGZhVGV4dCA9IHZvaWQgMDtcblxuY2xhc3MgWGZhVGV4dCB7XG4gIHN0YXRpYyB0ZXh0Q29udGVudCh4ZmEpIHtcbiAgICBjb25zdCBpdGVtcyA9IFtdO1xuICAgIGNvbnN0IG91dHB1dCA9IHtcbiAgICAgIGl0ZW1zLFxuICAgICAgc3R5bGVzOiBPYmplY3QuY3JlYXRlKG51bGwpXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHdhbGsobm9kZSkge1xuICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IHN0ciA9IG51bGw7XG4gICAgICBjb25zdCBuYW1lID0gbm9kZS5uYW1lO1xuXG4gICAgICBpZiAobmFtZSA9PT0gXCIjdGV4dFwiKSB7XG4gICAgICAgIHN0ciA9IG5vZGUudmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKCFYZmFUZXh0LnNob3VsZEJ1aWxkVGV4dChuYW1lKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2UgaWYgKG5vZGU/LmF0dHJpYnV0ZXM/LnRleHRDb250ZW50KSB7XG4gICAgICAgIHN0ciA9IG5vZGUuYXR0cmlidXRlcy50ZXh0Q29udGVudDtcbiAgICAgIH0gZWxzZSBpZiAobm9kZS52YWx1ZSkge1xuICAgICAgICBzdHIgPSBub2RlLnZhbHVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RyICE9PSBudWxsKSB7XG4gICAgICAgIGl0ZW1zLnB1c2goe1xuICAgICAgICAgIHN0clxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgIHdhbGsoY2hpbGQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHdhbGsoeGZhKTtcbiAgICByZXR1cm4gb3V0cHV0O1xuICB9XG5cbiAgc3RhdGljIHNob3VsZEJ1aWxkVGV4dChuYW1lKSB7XG4gICAgcmV0dXJuICEobmFtZSA9PT0gXCJ0ZXh0YXJlYVwiIHx8IG5hbWUgPT09IFwiaW5wdXRcIiB8fCBuYW1lID09PSBcIm9wdGlvblwiIHx8IG5hbWUgPT09IFwic2VsZWN0XCIpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5YZmFUZXh0ID0gWGZhVGV4dDtcblxuLyoqKi8gfSksXG4vKiAxOCAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5Bbm5vdGF0aW9uTGF5ZXIgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfZGlzcGxheV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oMSk7XG5cbnZhciBfYW5ub3RhdGlvbl9zdG9yYWdlID0gX193X3BkZmpzX3JlcXVpcmVfXyg5KTtcblxudmFyIF9zY3JpcHRpbmdfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDE5KTtcblxudmFyIF94ZmFfbGF5ZXIgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIwKTtcblxuY29uc3QgREVGQVVMVF9UQUJfSU5ERVggPSAxMDAwO1xuY29uc3QgR2V0RWxlbWVudHNCeU5hbWVTZXQgPSBuZXcgV2Vha1NldCgpO1xuXG5jbGFzcyBBbm5vdGF0aW9uRWxlbWVudEZhY3Rvcnkge1xuICBzdGF0aWMgY3JlYXRlKHBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBzdWJ0eXBlID0gcGFyYW1ldGVycy5kYXRhLmFubm90YXRpb25UeXBlO1xuXG4gICAgc3dpdGNoIChzdWJ0eXBlKSB7XG4gICAgICBjYXNlIF91dGlsLkFubm90YXRpb25UeXBlLkxJTks6XG4gICAgICAgIHJldHVybiBuZXcgTGlua0Fubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIF91dGlsLkFubm90YXRpb25UeXBlLlRFWFQ6XG4gICAgICAgIHJldHVybiBuZXcgVGV4dEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIF91dGlsLkFubm90YXRpb25UeXBlLldJREdFVDpcbiAgICAgICAgY29uc3QgZmllbGRUeXBlID0gcGFyYW1ldGVycy5kYXRhLmZpZWxkVHlwZTtcblxuICAgICAgICBzd2l0Y2ggKGZpZWxkVHlwZSkge1xuICAgICAgICAgIGNhc2UgXCJUeFwiOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBUZXh0V2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG5cbiAgICAgICAgICBjYXNlIFwiQnRuXCI6XG4gICAgICAgICAgICBpZiAocGFyYW1ldGVycy5kYXRhLnJhZGlvQnV0dG9uKSB7XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgUmFkaW9CdXR0b25XaWRnZXRBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW1ldGVycy5kYXRhLmNoZWNrQm94KSB7XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgQ2hlY2tib3hXaWRnZXRBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQdXNoQnV0dG9uV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG5cbiAgICAgICAgICBjYXNlIFwiQ2hcIjpcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ2hvaWNlV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFdpZGdldEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIF91dGlsLkFubm90YXRpb25UeXBlLlBPUFVQOlxuICAgICAgICByZXR1cm4gbmV3IFBvcHVwQW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvblR5cGUuRlJFRVRFWFQ6XG4gICAgICAgIHJldHVybiBuZXcgRnJlZVRleHRBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5MSU5FOlxuICAgICAgICByZXR1cm4gbmV3IExpbmVBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5TUVVBUkU6XG4gICAgICAgIHJldHVybiBuZXcgU3F1YXJlQW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvblR5cGUuQ0lSQ0xFOlxuICAgICAgICByZXR1cm4gbmV3IENpcmNsZUFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIF91dGlsLkFubm90YXRpb25UeXBlLlBPTFlMSU5FOlxuICAgICAgICByZXR1cm4gbmV3IFBvbHlsaW5lQW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvblR5cGUuQ0FSRVQ6XG4gICAgICAgIHJldHVybiBuZXcgQ2FyZXRBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5JTks6XG4gICAgICAgIHJldHVybiBuZXcgSW5rQW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvblR5cGUuUE9MWUdPTjpcbiAgICAgICAgcmV0dXJuIG5ldyBQb2x5Z29uQW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvblR5cGUuSElHSExJR0hUOlxuICAgICAgICByZXR1cm4gbmV3IEhpZ2hsaWdodEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIF91dGlsLkFubm90YXRpb25UeXBlLlVOREVSTElORTpcbiAgICAgICAgcmV0dXJuIG5ldyBVbmRlcmxpbmVBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5TUVVJR0dMWTpcbiAgICAgICAgcmV0dXJuIG5ldyBTcXVpZ2dseUFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIF91dGlsLkFubm90YXRpb25UeXBlLlNUUklLRU9VVDpcbiAgICAgICAgcmV0dXJuIG5ldyBTdHJpa2VPdXRBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5TVEFNUDpcbiAgICAgICAgcmV0dXJuIG5ldyBTdGFtcEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIF91dGlsLkFubm90YXRpb25UeXBlLkZJTEVBVFRBQ0hNRU5UOlxuICAgICAgICByZXR1cm4gbmV3IEZpbGVBdHRhY2htZW50QW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBuZXcgQW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG4gICAgfVxuICB9XG5cbn1cblxuY2xhc3MgQW5ub3RhdGlvbkVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzLCB7XG4gICAgaXNSZW5kZXJhYmxlID0gZmFsc2UsXG4gICAgaWdub3JlQm9yZGVyID0gZmFsc2UsXG4gICAgY3JlYXRlUXVhZHJpbGF0ZXJhbHMgPSBmYWxzZVxuICB9ID0ge30pIHtcbiAgICB0aGlzLmlzUmVuZGVyYWJsZSA9IGlzUmVuZGVyYWJsZTtcbiAgICB0aGlzLmRhdGEgPSBwYXJhbWV0ZXJzLmRhdGE7XG4gICAgdGhpcy5sYXllciA9IHBhcmFtZXRlcnMubGF5ZXI7XG4gICAgdGhpcy5wYWdlID0gcGFyYW1ldGVycy5wYWdlO1xuICAgIHRoaXMudmlld3BvcnQgPSBwYXJhbWV0ZXJzLnZpZXdwb3J0O1xuICAgIHRoaXMubGlua1NlcnZpY2UgPSBwYXJhbWV0ZXJzLmxpbmtTZXJ2aWNlO1xuICAgIHRoaXMuZG93bmxvYWRNYW5hZ2VyID0gcGFyYW1ldGVycy5kb3dubG9hZE1hbmFnZXI7XG4gICAgdGhpcy5pbWFnZVJlc291cmNlc1BhdGggPSBwYXJhbWV0ZXJzLmltYWdlUmVzb3VyY2VzUGF0aDtcbiAgICB0aGlzLnJlbmRlckZvcm1zID0gcGFyYW1ldGVycy5yZW5kZXJGb3JtcztcbiAgICB0aGlzLnN2Z0ZhY3RvcnkgPSBwYXJhbWV0ZXJzLnN2Z0ZhY3Rvcnk7XG4gICAgdGhpcy5hbm5vdGF0aW9uU3RvcmFnZSA9IHBhcmFtZXRlcnMuYW5ub3RhdGlvblN0b3JhZ2U7XG4gICAgdGhpcy5lbmFibGVTY3JpcHRpbmcgPSBwYXJhbWV0ZXJzLmVuYWJsZVNjcmlwdGluZztcbiAgICB0aGlzLmhhc0pTQWN0aW9ucyA9IHBhcmFtZXRlcnMuaGFzSlNBY3Rpb25zO1xuICAgIHRoaXMuX2ZpZWxkT2JqZWN0cyA9IHBhcmFtZXRlcnMuZmllbGRPYmplY3RzO1xuICAgIHRoaXMuX21vdXNlU3RhdGUgPSBwYXJhbWV0ZXJzLm1vdXNlU3RhdGU7XG5cbiAgICBpZiAoaXNSZW5kZXJhYmxlKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lciA9IHRoaXMuX2NyZWF0ZUNvbnRhaW5lcihpZ25vcmVCb3JkZXIpO1xuICAgIH1cblxuICAgIGlmIChjcmVhdGVRdWFkcmlsYXRlcmFscykge1xuICAgICAgdGhpcy5xdWFkcmlsYXRlcmFscyA9IHRoaXMuX2NyZWF0ZVF1YWRyaWxhdGVyYWxzKGlnbm9yZUJvcmRlcik7XG4gICAgfVxuICB9XG5cbiAgX2NyZWF0ZUNvbnRhaW5lcihpZ25vcmVCb3JkZXIgPSBmYWxzZSkge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGEsXG4gICAgICAgICAgcGFnZSA9IHRoaXMucGFnZSxcbiAgICAgICAgICB2aWV3cG9ydCA9IHRoaXMudmlld3BvcnQ7XG4gICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNlY3Rpb25cIik7XG4gICAgbGV0IHdpZHRoID0gZGF0YS5yZWN0WzJdIC0gZGF0YS5yZWN0WzBdO1xuICAgIGxldCBoZWlnaHQgPSBkYXRhLnJlY3RbM10gLSBkYXRhLnJlY3RbMV07XG4gICAgY29udGFpbmVyLnNldEF0dHJpYnV0ZShcImRhdGEtYW5ub3RhdGlvbi1pZFwiLCBkYXRhLmlkKTtcblxuICAgIGNvbnN0IHJlY3QgPSBfdXRpbC5VdGlsLm5vcm1hbGl6ZVJlY3QoW2RhdGEucmVjdFswXSwgcGFnZS52aWV3WzNdIC0gZGF0YS5yZWN0WzFdICsgcGFnZS52aWV3WzFdLCBkYXRhLnJlY3RbMl0sIHBhZ2Uudmlld1szXSAtIGRhdGEucmVjdFszXSArIHBhZ2Uudmlld1sxXV0pO1xuXG4gICAgaWYgKGRhdGEuaGFzT3duQ2FudmFzKSB7XG4gICAgICBjb25zdCB0cmFuc2Zvcm0gPSB2aWV3cG9ydC50cmFuc2Zvcm0uc2xpY2UoKTtcblxuICAgICAgY29uc3QgW3NjYWxlWCwgc2NhbGVZXSA9IF91dGlsLlV0aWwuc2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUodHJhbnNmb3JtKTtcblxuICAgICAgd2lkdGggPSBNYXRoLmNlaWwod2lkdGggKiBzY2FsZVgpO1xuICAgICAgaGVpZ2h0ID0gTWF0aC5jZWlsKGhlaWdodCAqIHNjYWxlWSk7XG4gICAgICByZWN0WzBdICo9IHNjYWxlWDtcbiAgICAgIHJlY3RbMV0gKj0gc2NhbGVZO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgICAgICB0cmFuc2Zvcm1baV0gPSBNYXRoLnNpZ24odHJhbnNmb3JtW2ldKTtcbiAgICAgIH1cblxuICAgICAgY29udGFpbmVyLnN0eWxlLnRyYW5zZm9ybSA9IGBtYXRyaXgoJHt0cmFuc2Zvcm0uam9pbihcIixcIil9KWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRhaW5lci5zdHlsZS50cmFuc2Zvcm0gPSBgbWF0cml4KCR7dmlld3BvcnQudHJhbnNmb3JtLmpvaW4oXCIsXCIpfSlgO1xuICAgIH1cblxuICAgIGNvbnRhaW5lci5zdHlsZS50cmFuc2Zvcm1PcmlnaW4gPSBgJHstcmVjdFswXX1weCAkey1yZWN0WzFdfXB4YDtcblxuICAgIGlmICghaWdub3JlQm9yZGVyICYmIGRhdGEuYm9yZGVyU3R5bGUud2lkdGggPiAwKSB7XG4gICAgICBjb250YWluZXIuc3R5bGUuYm9yZGVyV2lkdGggPSBgJHtkYXRhLmJvcmRlclN0eWxlLndpZHRofXB4YDtcblxuICAgICAgaWYgKGRhdGEuYm9yZGVyU3R5bGUuc3R5bGUgIT09IF91dGlsLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuVU5ERVJMSU5FKSB7XG4gICAgICAgIHdpZHRoIC09IDIgKiBkYXRhLmJvcmRlclN0eWxlLndpZHRoO1xuICAgICAgICBoZWlnaHQgLT0gMiAqIGRhdGEuYm9yZGVyU3R5bGUud2lkdGg7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhvcml6b250YWxSYWRpdXMgPSBkYXRhLmJvcmRlclN0eWxlLmhvcml6b250YWxDb3JuZXJSYWRpdXM7XG4gICAgICBjb25zdCB2ZXJ0aWNhbFJhZGl1cyA9IGRhdGEuYm9yZGVyU3R5bGUudmVydGljYWxDb3JuZXJSYWRpdXM7XG5cbiAgICAgIGlmIChob3Jpem9udGFsUmFkaXVzID4gMCB8fCB2ZXJ0aWNhbFJhZGl1cyA+IDApIHtcbiAgICAgICAgY29uc3QgcmFkaXVzID0gYCR7aG9yaXpvbnRhbFJhZGl1c31weCAvICR7dmVydGljYWxSYWRpdXN9cHhgO1xuICAgICAgICBjb250YWluZXIuc3R5bGUuYm9yZGVyUmFkaXVzID0gcmFkaXVzO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGRhdGEuYm9yZGVyU3R5bGUuc3R5bGUpIHtcbiAgICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLlNPTElEOlxuICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5ib3JkZXJTdHlsZSA9IFwic29saWRcIjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIF91dGlsLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuREFTSEVEOlxuICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5ib3JkZXJTdHlsZSA9IFwiZGFzaGVkXCI7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLkJFVkVMRUQ6XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiVW5pbXBsZW1lbnRlZCBib3JkZXIgc3R5bGU6IGJldmVsZWRcIik7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLklOU0VUOlxuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIlVuaW1wbGVtZW50ZWQgYm9yZGVyIHN0eWxlOiBpbnNldFwiKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIF91dGlsLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuVU5ERVJMSU5FOlxuICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5ib3JkZXJCb3R0b21TdHlsZSA9IFwic29saWRcIjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBib3JkZXJDb2xvciA9IGRhdGEuYm9yZGVyQ29sb3IgfHwgZGF0YS5jb2xvciB8fCBudWxsO1xuXG4gICAgICBpZiAoYm9yZGVyQ29sb3IpIHtcbiAgICAgICAgY29udGFpbmVyLnN0eWxlLmJvcmRlckNvbG9yID0gX3V0aWwuVXRpbC5tYWtlSGV4Q29sb3IoZGF0YS5jb2xvclswXSB8IDAsIGRhdGEuY29sb3JbMV0gfCAwLCBkYXRhLmNvbG9yWzJdIHwgMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250YWluZXIuc3R5bGUuYm9yZGVyV2lkdGggPSAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnRhaW5lci5zdHlsZS5sZWZ0ID0gYCR7cmVjdFswXX1weGA7XG4gICAgY29udGFpbmVyLnN0eWxlLnRvcCA9IGAke3JlY3RbMV19cHhgO1xuXG4gICAgaWYgKGRhdGEuaGFzT3duQ2FudmFzKSB7XG4gICAgICBjb250YWluZXIuc3R5bGUud2lkdGggPSBjb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gXCJhdXRvXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRhaW5lci5zdHlsZS53aWR0aCA9IGAke3dpZHRofXB4YDtcbiAgICAgIGNvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSBgJHtoZWlnaHR9cHhgO1xuICAgIH1cblxuICAgIHJldHVybiBjb250YWluZXI7XG4gIH1cblxuICBfY3JlYXRlUXVhZHJpbGF0ZXJhbHMoaWdub3JlQm9yZGVyID0gZmFsc2UpIHtcbiAgICBpZiAoIXRoaXMuZGF0YS5xdWFkUG9pbnRzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBxdWFkcmlsYXRlcmFscyA9IFtdO1xuICAgIGNvbnN0IHNhdmVkUmVjdCA9IHRoaXMuZGF0YS5yZWN0O1xuXG4gICAgZm9yIChjb25zdCBxdWFkUG9pbnQgb2YgdGhpcy5kYXRhLnF1YWRQb2ludHMpIHtcbiAgICAgIHRoaXMuZGF0YS5yZWN0ID0gW3F1YWRQb2ludFsyXS54LCBxdWFkUG9pbnRbMl0ueSwgcXVhZFBvaW50WzFdLngsIHF1YWRQb2ludFsxXS55XTtcbiAgICAgIHF1YWRyaWxhdGVyYWxzLnB1c2godGhpcy5fY3JlYXRlQ29udGFpbmVyKGlnbm9yZUJvcmRlcikpO1xuICAgIH1cblxuICAgIHRoaXMuZGF0YS5yZWN0ID0gc2F2ZWRSZWN0O1xuICAgIHJldHVybiBxdWFkcmlsYXRlcmFscztcbiAgfVxuXG4gIF9jcmVhdGVQb3B1cCh0cmlnZ2VyLCBkYXRhKSB7XG4gICAgbGV0IGNvbnRhaW5lciA9IHRoaXMuY29udGFpbmVyO1xuXG4gICAgaWYgKHRoaXMucXVhZHJpbGF0ZXJhbHMpIHtcbiAgICAgIHRyaWdnZXIgPSB0cmlnZ2VyIHx8IHRoaXMucXVhZHJpbGF0ZXJhbHM7XG4gICAgICBjb250YWluZXIgPSB0aGlzLnF1YWRyaWxhdGVyYWxzWzBdO1xuICAgIH1cblxuICAgIGlmICghdHJpZ2dlcikge1xuICAgICAgdHJpZ2dlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICB0cmlnZ2VyLnN0eWxlLmhlaWdodCA9IGNvbnRhaW5lci5zdHlsZS5oZWlnaHQ7XG4gICAgICB0cmlnZ2VyLnN0eWxlLndpZHRoID0gY29udGFpbmVyLnN0eWxlLndpZHRoO1xuICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRyaWdnZXIpO1xuICAgIH1cblxuICAgIGNvbnN0IHBvcHVwRWxlbWVudCA9IG5ldyBQb3B1cEVsZW1lbnQoe1xuICAgICAgY29udGFpbmVyLFxuICAgICAgdHJpZ2dlcixcbiAgICAgIGNvbG9yOiBkYXRhLmNvbG9yLFxuICAgICAgdGl0bGVPYmo6IGRhdGEudGl0bGVPYmosXG4gICAgICBtb2RpZmljYXRpb25EYXRlOiBkYXRhLm1vZGlmaWNhdGlvbkRhdGUsXG4gICAgICBjb250ZW50c09iajogZGF0YS5jb250ZW50c09iaixcbiAgICAgIHJpY2hUZXh0OiBkYXRhLnJpY2hUZXh0LFxuICAgICAgaGlkZVdyYXBwZXI6IHRydWVcbiAgICB9KTtcbiAgICBjb25zdCBwb3B1cCA9IHBvcHVwRWxlbWVudC5yZW5kZXIoKTtcbiAgICBwb3B1cC5zdHlsZS5sZWZ0ID0gY29udGFpbmVyLnN0eWxlLndpZHRoO1xuICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChwb3B1cCk7XG4gIH1cblxuICBfcmVuZGVyUXVhZHJpbGF0ZXJhbHMoY2xhc3NOYW1lKSB7XG4gICAgZm9yIChjb25zdCBxdWFkcmlsYXRlcmFsIG9mIHRoaXMucXVhZHJpbGF0ZXJhbHMpIHtcbiAgICAgIHF1YWRyaWxhdGVyYWwuY2xhc3NOYW1lID0gY2xhc3NOYW1lO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnF1YWRyaWxhdGVyYWxzO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJBYnN0cmFjdCBtZXRob2QgYEFubm90YXRpb25FbGVtZW50LnJlbmRlcmAgY2FsbGVkXCIpO1xuICB9XG5cbiAgX2dldEVsZW1lbnRzQnlOYW1lKG5hbWUsIHNraXBJZCA9IG51bGwpIHtcbiAgICBjb25zdCBmaWVsZHMgPSBbXTtcblxuICAgIGlmICh0aGlzLl9maWVsZE9iamVjdHMpIHtcbiAgICAgIGNvbnN0IGZpZWxkT2JqID0gdGhpcy5fZmllbGRPYmplY3RzW25hbWVdO1xuXG4gICAgICBpZiAoZmllbGRPYmopIHtcbiAgICAgICAgZm9yIChjb25zdCB7XG4gICAgICAgICAgcGFnZSxcbiAgICAgICAgICBpZCxcbiAgICAgICAgICBleHBvcnRWYWx1ZXNcbiAgICAgICAgfSBvZiBmaWVsZE9iaikge1xuICAgICAgICAgIGlmIChwYWdlID09PSAtMSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGlkID09PSBza2lwSWQpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGV4cG9ydFZhbHVlID0gdHlwZW9mIGV4cG9ydFZhbHVlcyA9PT0gXCJzdHJpbmdcIiA/IGV4cG9ydFZhbHVlcyA6IG51bGw7XG4gICAgICAgICAgY29uc3QgZG9tRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcblxuICAgICAgICAgIGlmIChkb21FbGVtZW50ICYmICFHZXRFbGVtZW50c0J5TmFtZVNldC5oYXMoZG9tRWxlbWVudCkpIHtcbiAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgX2dldEVsZW1lbnRzQnlOYW1lIC0gZWxlbWVudCBub3QgYWxsb3dlZDogJHtpZH1gKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZpZWxkcy5wdXNoKHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgZXhwb3J0VmFsdWUsXG4gICAgICAgICAgICBkb21FbGVtZW50XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZpZWxkcztcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGRvbUVsZW1lbnQgb2YgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUobmFtZSkpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgaWQsXG4gICAgICAgIGV4cG9ydFZhbHVlXG4gICAgICB9ID0gZG9tRWxlbWVudDtcblxuICAgICAgaWYgKGlkID09PSBza2lwSWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghR2V0RWxlbWVudHNCeU5hbWVTZXQuaGFzKGRvbUVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBmaWVsZHMucHVzaCh7XG4gICAgICAgIGlkLFxuICAgICAgICBleHBvcnRWYWx1ZSxcbiAgICAgICAgZG9tRWxlbWVudFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpZWxkcztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcGxhdGZvcm0oKSB7XG4gICAgY29uc3QgcGxhdGZvcm0gPSB0eXBlb2YgbmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiID8gbmF2aWdhdG9yLnBsYXRmb3JtIDogXCJcIjtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJwbGF0Zm9ybVwiLCB7XG4gICAgICBpc1dpbjogcGxhdGZvcm0uaW5jbHVkZXMoXCJXaW5cIiksXG4gICAgICBpc01hYzogcGxhdGZvcm0uaW5jbHVkZXMoXCJNYWNcIilcbiAgICB9KTtcbiAgfVxuXG59XG5cbmNsYXNzIExpbmtBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycywgb3B0aW9ucyA9IG51bGwpIHtcbiAgICBjb25zdCBpc1JlbmRlcmFibGUgPSAhIShwYXJhbWV0ZXJzLmRhdGEudXJsIHx8IHBhcmFtZXRlcnMuZGF0YS5kZXN0IHx8IHBhcmFtZXRlcnMuZGF0YS5hY3Rpb24gfHwgcGFyYW1ldGVycy5kYXRhLmlzVG9vbHRpcE9ubHkgfHwgcGFyYW1ldGVycy5kYXRhLnJlc2V0Rm9ybSB8fCBwYXJhbWV0ZXJzLmRhdGEuYWN0aW9ucyAmJiAocGFyYW1ldGVycy5kYXRhLmFjdGlvbnMuQWN0aW9uIHx8IHBhcmFtZXRlcnMuZGF0YS5hY3Rpb25zW1wiTW91c2UgVXBcIl0gfHwgcGFyYW1ldGVycy5kYXRhLmFjdGlvbnNbXCJNb3VzZSBEb3duXCJdKSk7XG4gICAgc3VwZXIocGFyYW1ldGVycywge1xuICAgICAgaXNSZW5kZXJhYmxlLFxuICAgICAgaWdub3JlQm9yZGVyOiAhIW9wdGlvbnM/Lmlnbm9yZUJvcmRlcixcbiAgICAgIGNyZWF0ZVF1YWRyaWxhdGVyYWxzOiB0cnVlXG4gICAgfSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgZGF0YSxcbiAgICAgIGxpbmtTZXJ2aWNlXG4gICAgfSA9IHRoaXM7XG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xuXG4gICAgaWYgKGRhdGEudXJsKSB7XG4gICAgICBpZiAoIWxpbmtTZXJ2aWNlLmFkZExpbmtBdHRyaWJ1dGVzKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShcIkxpbmtBbm5vdGF0aW9uRWxlbWVudC5yZW5kZXIgLSBtaXNzaW5nIGBhZGRMaW5rQXR0cmlidXRlc2AtbWV0aG9kIG9uIHRoZSBgbGlua1NlcnZpY2VgLWluc3RhbmNlLlwiKTtcbiAgICAgIH1cblxuICAgICAgbGlua1NlcnZpY2UuYWRkTGlua0F0dHJpYnV0ZXM/LihsaW5rLCBkYXRhLnVybCwgZGF0YS5uZXdXaW5kb3cpO1xuICAgIH0gZWxzZSBpZiAoZGF0YS5hY3Rpb24pIHtcbiAgICAgIHRoaXMuX2JpbmROYW1lZEFjdGlvbihsaW5rLCBkYXRhLmFjdGlvbik7XG4gICAgfSBlbHNlIGlmIChkYXRhLmRlc3QpIHtcbiAgICAgIHRoaXMuX2JpbmRMaW5rKGxpbmssIGRhdGEuZGVzdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBoYXNDbGlja0FjdGlvbiA9IGZhbHNlO1xuXG4gICAgICBpZiAoZGF0YS5hY3Rpb25zICYmIChkYXRhLmFjdGlvbnMuQWN0aW9uIHx8IGRhdGEuYWN0aW9uc1tcIk1vdXNlIFVwXCJdIHx8IGRhdGEuYWN0aW9uc1tcIk1vdXNlIERvd25cIl0pICYmIHRoaXMuZW5hYmxlU2NyaXB0aW5nICYmIHRoaXMuaGFzSlNBY3Rpb25zKSB7XG4gICAgICAgIGhhc0NsaWNrQWN0aW9uID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLl9iaW5kSlNBY3Rpb24obGluaywgZGF0YSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLnJlc2V0Rm9ybSkge1xuICAgICAgICB0aGlzLl9iaW5kUmVzZXRGb3JtQWN0aW9uKGxpbmssIGRhdGEucmVzZXRGb3JtKTtcbiAgICAgIH0gZWxzZSBpZiAoIWhhc0NsaWNrQWN0aW9uKSB7XG4gICAgICAgIHRoaXMuX2JpbmRMaW5rKGxpbmssIFwiXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnF1YWRyaWxhdGVyYWxzKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVuZGVyUXVhZHJpbGF0ZXJhbHMoXCJsaW5rQW5ub3RhdGlvblwiKS5tYXAoKHF1YWRyaWxhdGVyYWwsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGxpbmtFbGVtZW50ID0gaW5kZXggPT09IDAgPyBsaW5rIDogbGluay5jbG9uZU5vZGUoKTtcbiAgICAgICAgcXVhZHJpbGF0ZXJhbC5hcHBlbmRDaGlsZChsaW5rRWxlbWVudCk7XG4gICAgICAgIHJldHVybiBxdWFkcmlsYXRlcmFsO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gXCJsaW5rQW5ub3RhdGlvblwiO1xuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKGxpbmspO1xuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgfVxuXG4gIF9iaW5kTGluayhsaW5rLCBkZXN0aW5hdGlvbikge1xuICAgIGxpbmsuaHJlZiA9IHRoaXMubGlua1NlcnZpY2UuZ2V0RGVzdGluYXRpb25IYXNoKGRlc3RpbmF0aW9uKTtcblxuICAgIGxpbmsub25jbGljayA9ICgpID0+IHtcbiAgICAgIGlmIChkZXN0aW5hdGlvbikge1xuICAgICAgICB0aGlzLmxpbmtTZXJ2aWNlLmdvVG9EZXN0aW5hdGlvbihkZXN0aW5hdGlvbik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuXG4gICAgaWYgKGRlc3RpbmF0aW9uIHx8IGRlc3RpbmF0aW9uID09PSBcIlwiKSB7XG4gICAgICBsaW5rLmNsYXNzTmFtZSA9IFwiaW50ZXJuYWxMaW5rXCI7XG4gICAgfVxuICB9XG5cbiAgX2JpbmROYW1lZEFjdGlvbihsaW5rLCBhY3Rpb24pIHtcbiAgICBsaW5rLmhyZWYgPSB0aGlzLmxpbmtTZXJ2aWNlLmdldEFuY2hvclVybChcIlwiKTtcblxuICAgIGxpbmsub25jbGljayA9ICgpID0+IHtcbiAgICAgIHRoaXMubGlua1NlcnZpY2UuZXhlY3V0ZU5hbWVkQWN0aW9uKGFjdGlvbik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcblxuICAgIGxpbmsuY2xhc3NOYW1lID0gXCJpbnRlcm5hbExpbmtcIjtcbiAgfVxuXG4gIF9iaW5kSlNBY3Rpb24obGluaywgZGF0YSkge1xuICAgIGxpbmsuaHJlZiA9IHRoaXMubGlua1NlcnZpY2UuZ2V0QW5jaG9yVXJsKFwiXCIpO1xuICAgIGNvbnN0IG1hcCA9IG5ldyBNYXAoW1tcIkFjdGlvblwiLCBcIm9uY2xpY2tcIl0sIFtcIk1vdXNlIFVwXCIsIFwib25tb3VzZXVwXCJdLCBbXCJNb3VzZSBEb3duXCIsIFwib25tb3VzZWRvd25cIl1dKTtcblxuICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhkYXRhLmFjdGlvbnMpKSB7XG4gICAgICBjb25zdCBqc05hbWUgPSBtYXAuZ2V0KG5hbWUpO1xuXG4gICAgICBpZiAoIWpzTmFtZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbGlua1tqc05hbWVdID0gKCkgPT4ge1xuICAgICAgICB0aGlzLmxpbmtTZXJ2aWNlLmV2ZW50QnVzPy5kaXNwYXRjaChcImRpc3BhdGNoZXZlbnRpbnNhbmRib3hcIiwge1xuICAgICAgICAgIHNvdXJjZTogdGhpcyxcbiAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgIGlkOiBkYXRhLmlkLFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKCFsaW5rLm9uY2xpY2spIHtcbiAgICAgIGxpbmsub25jbGljayA9ICgpID0+IGZhbHNlO1xuICAgIH1cblxuICAgIGxpbmsuY2xhc3NOYW1lID0gXCJpbnRlcm5hbExpbmtcIjtcbiAgfVxuXG4gIF9iaW5kUmVzZXRGb3JtQWN0aW9uKGxpbmssIHJlc2V0Rm9ybSkge1xuICAgIGNvbnN0IG90aGVyQ2xpY2tBY3Rpb24gPSBsaW5rLm9uY2xpY2s7XG5cbiAgICBpZiAoIW90aGVyQ2xpY2tBY3Rpb24pIHtcbiAgICAgIGxpbmsuaHJlZiA9IHRoaXMubGlua1NlcnZpY2UuZ2V0QW5jaG9yVXJsKFwiXCIpO1xuICAgIH1cblxuICAgIGxpbmsuY2xhc3NOYW1lID0gXCJpbnRlcm5hbExpbmtcIjtcblxuICAgIGlmICghdGhpcy5fZmllbGRPYmplY3RzKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoYF9iaW5kUmVzZXRGb3JtQWN0aW9uIC0gXCJyZXNldEZvcm1cIiBhY3Rpb24gbm90IHN1cHBvcnRlZCwgYCArIFwiZW5zdXJlIHRoYXQgdGhlIGBmaWVsZE9iamVjdHNgIHBhcmFtZXRlciBpcyBwcm92aWRlZC5cIik7XG5cbiAgICAgIGlmICghb3RoZXJDbGlja0FjdGlvbikge1xuICAgICAgICBsaW5rLm9uY2xpY2sgPSAoKSA9PiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxpbmsub25jbGljayA9ICgpID0+IHtcbiAgICAgIGlmIChvdGhlckNsaWNrQWN0aW9uKSB7XG4gICAgICAgIG90aGVyQ2xpY2tBY3Rpb24oKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qge1xuICAgICAgICBmaWVsZHM6IHJlc2V0Rm9ybUZpZWxkcyxcbiAgICAgICAgcmVmczogcmVzZXRGb3JtUmVmcyxcbiAgICAgICAgaW5jbHVkZVxuICAgICAgfSA9IHJlc2V0Rm9ybTtcbiAgICAgIGNvbnN0IGFsbEZpZWxkcyA9IFtdO1xuXG4gICAgICBpZiAocmVzZXRGb3JtRmllbGRzLmxlbmd0aCAhPT0gMCB8fCByZXNldEZvcm1SZWZzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICBjb25zdCBmaWVsZElkcyA9IG5ldyBTZXQocmVzZXRGb3JtUmVmcyk7XG5cbiAgICAgICAgZm9yIChjb25zdCBmaWVsZE5hbWUgb2YgcmVzZXRGb3JtRmllbGRzKSB7XG4gICAgICAgICAgY29uc3QgZmllbGRzID0gdGhpcy5fZmllbGRPYmplY3RzW2ZpZWxkTmFtZV0gfHwgW107XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgfSBvZiBmaWVsZHMpIHtcbiAgICAgICAgICAgIGZpZWxkSWRzLmFkZChpZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBmaWVsZHMgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLl9maWVsZE9iamVjdHMpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgICAgIGlmIChmaWVsZElkcy5oYXMoZmllbGQuaWQpID09PSBpbmNsdWRlKSB7XG4gICAgICAgICAgICAgIGFsbEZpZWxkcy5wdXNoKGZpZWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoY29uc3QgZmllbGRzIG9mIE9iamVjdC52YWx1ZXModGhpcy5fZmllbGRPYmplY3RzKSkge1xuICAgICAgICAgIGFsbEZpZWxkcy5wdXNoKC4uLmZpZWxkcyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RvcmFnZSA9IHRoaXMuYW5ub3RhdGlvblN0b3JhZ2U7XG4gICAgICBjb25zdCBhbGxJZHMgPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBhbGxGaWVsZHMpIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGlkXG4gICAgICAgIH0gPSBmaWVsZDtcbiAgICAgICAgYWxsSWRzLnB1c2goaWQpO1xuXG4gICAgICAgIHN3aXRjaCAoZmllbGQudHlwZSkge1xuICAgICAgICAgIGNhc2UgXCJ0ZXh0XCI6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZmllbGQuZGVmYXVsdFZhbHVlIHx8IFwiXCI7XG4gICAgICAgICAgICAgIHN0b3JhZ2Uuc2V0VmFsdWUoaWQsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZUFzU3RyaW5nOiB2YWx1ZVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlIFwiY2hlY2tib3hcIjpcbiAgICAgICAgICBjYXNlIFwicmFkaW9idXR0b25cIjpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWVsZC5kZWZhdWx0VmFsdWUgPT09IGZpZWxkLmV4cG9ydFZhbHVlcztcbiAgICAgICAgICAgICAgc3RvcmFnZS5zZXRWYWx1ZShpZCwge1xuICAgICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgXCJjb21ib2JveFwiOlxuICAgICAgICAgIGNhc2UgXCJsaXN0Ym94XCI6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZmllbGQuZGVmYXVsdFZhbHVlIHx8IFwiXCI7XG4gICAgICAgICAgICAgIHN0b3JhZ2Uuc2V0VmFsdWUoaWQsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkb21FbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuXG4gICAgICAgIGlmICghZG9tRWxlbWVudCB8fCAhR2V0RWxlbWVudHNCeU5hbWVTZXQuaGFzKGRvbUVsZW1lbnQpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBkb21FbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwicmVzZXRmb3JtXCIpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZW5hYmxlU2NyaXB0aW5nKSB7XG4gICAgICAgIHRoaXMubGlua1NlcnZpY2UuZXZlbnRCdXM/LmRpc3BhdGNoKFwiZGlzcGF0Y2hldmVudGluc2FuZGJveFwiLCB7XG4gICAgICAgICAgc291cmNlOiB0aGlzLFxuICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgaWQ6IFwiYXBwXCIsXG4gICAgICAgICAgICBpZHM6IGFsbElkcyxcbiAgICAgICAgICAgIG5hbWU6IFwiUmVzZXRGb3JtXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgfVxuXG59XG5cbmNsYXNzIFRleHRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIGNvbnN0IGlzUmVuZGVyYWJsZSA9ICEhKHBhcmFtZXRlcnMuZGF0YS5oYXNQb3B1cCB8fCBwYXJhbWV0ZXJzLmRhdGEudGl0bGVPYmo/LnN0ciB8fCBwYXJhbWV0ZXJzLmRhdGEuY29udGVudHNPYmo/LnN0ciB8fCBwYXJhbWV0ZXJzLmRhdGEucmljaFRleHQ/LnN0cik7XG4gICAgc3VwZXIocGFyYW1ldGVycywge1xuICAgICAgaXNSZW5kZXJhYmxlXG4gICAgfSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gXCJ0ZXh0QW5ub3RhdGlvblwiO1xuICAgIGNvbnN0IGltYWdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImltZ1wiKTtcbiAgICBpbWFnZS5zdHlsZS5oZWlnaHQgPSB0aGlzLmNvbnRhaW5lci5zdHlsZS5oZWlnaHQ7XG4gICAgaW1hZ2Uuc3R5bGUud2lkdGggPSB0aGlzLmNvbnRhaW5lci5zdHlsZS53aWR0aDtcbiAgICBpbWFnZS5zcmMgPSB0aGlzLmltYWdlUmVzb3VyY2VzUGF0aCArIFwiYW5ub3RhdGlvbi1cIiArIHRoaXMuZGF0YS5uYW1lLnRvTG93ZXJDYXNlKCkgKyBcIi5zdmdcIjtcbiAgICBpbWFnZS5hbHQgPSBcIlt7e3R5cGV9fSBBbm5vdGF0aW9uXVwiO1xuICAgIGltYWdlLmRhdGFzZXQubDEwbklkID0gXCJ0ZXh0X2Fubm90YXRpb25fdHlwZVwiO1xuICAgIGltYWdlLmRhdGFzZXQubDEwbkFyZ3MgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICB0eXBlOiB0aGlzLmRhdGEubmFtZVxuICAgIH0pO1xuXG4gICAgaWYgKCF0aGlzLmRhdGEuaGFzUG9wdXApIHtcbiAgICAgIHRoaXMuX2NyZWF0ZVBvcHVwKGltYWdlLCB0aGlzLmRhdGEpO1xuICAgIH1cblxuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKGltYWdlKTtcbiAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gIH1cblxufVxuXG5jbGFzcyBXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHtcbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmRhdGEuYWx0ZXJuYXRpdmVUZXh0KSB7XG4gICAgICB0aGlzLmNvbnRhaW5lci50aXRsZSA9IHRoaXMuZGF0YS5hbHRlcm5hdGl2ZVRleHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICB9XG5cbiAgX2dldEtleU1vZGlmaWVyKGV2ZW50KSB7XG4gICAgY29uc3Qge1xuICAgICAgaXNXaW4sXG4gICAgICBpc01hY1xuICAgIH0gPSBBbm5vdGF0aW9uRWxlbWVudC5wbGF0Zm9ybTtcbiAgICByZXR1cm4gaXNXaW4gJiYgZXZlbnQuY3RybEtleSB8fCBpc01hYyAmJiBldmVudC5tZXRhS2V5O1xuICB9XG5cbiAgX3NldEV2ZW50TGlzdGVuZXIoZWxlbWVudCwgYmFzZU5hbWUsIGV2ZW50TmFtZSwgdmFsdWVHZXR0ZXIpIHtcbiAgICBpZiAoYmFzZU5hbWUuaW5jbHVkZXMoXCJtb3VzZVwiKSkge1xuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGJhc2VOYW1lLCBldmVudCA9PiB7XG4gICAgICAgIHRoaXMubGlua1NlcnZpY2UuZXZlbnRCdXM/LmRpc3BhdGNoKFwiZGlzcGF0Y2hldmVudGluc2FuZGJveFwiLCB7XG4gICAgICAgICAgc291cmNlOiB0aGlzLFxuICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgaWQ6IHRoaXMuZGF0YS5pZCxcbiAgICAgICAgICAgIG5hbWU6IGV2ZW50TmFtZSxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZUdldHRlcihldmVudCksXG4gICAgICAgICAgICBzaGlmdDogZXZlbnQuc2hpZnRLZXksXG4gICAgICAgICAgICBtb2RpZmllcjogdGhpcy5fZ2V0S2V5TW9kaWZpZXIoZXZlbnQpXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoYmFzZU5hbWUsIGV2ZW50ID0+IHtcbiAgICAgICAgdGhpcy5saW5rU2VydmljZS5ldmVudEJ1cz8uZGlzcGF0Y2goXCJkaXNwYXRjaGV2ZW50aW5zYW5kYm94XCIsIHtcbiAgICAgICAgICBzb3VyY2U6IHRoaXMsXG4gICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICBpZDogdGhpcy5kYXRhLmlkLFxuICAgICAgICAgICAgbmFtZTogZXZlbnROYW1lLFxuICAgICAgICAgICAgdmFsdWU6IGV2ZW50LnRhcmdldC5jaGVja2VkXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIF9zZXRFdmVudExpc3RlbmVycyhlbGVtZW50LCBuYW1lcywgZ2V0dGVyKSB7XG4gICAgZm9yIChjb25zdCBbYmFzZU5hbWUsIGV2ZW50TmFtZV0gb2YgbmFtZXMpIHtcbiAgICAgIGlmIChldmVudE5hbWUgPT09IFwiQWN0aW9uXCIgfHwgdGhpcy5kYXRhLmFjdGlvbnM/LltldmVudE5hbWVdKSB7XG4gICAgICAgIHRoaXMuX3NldEV2ZW50TGlzdGVuZXIoZWxlbWVudCwgYmFzZU5hbWUsIGV2ZW50TmFtZSwgZ2V0dGVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfc2V0QmFja2dyb3VuZENvbG9yKGVsZW1lbnQpIHtcbiAgICBjb25zdCBjb2xvciA9IHRoaXMuZGF0YS5iYWNrZ3JvdW5kQ29sb3IgfHwgbnVsbDtcbiAgICBlbGVtZW50LnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGNvbG9yID09PSBudWxsID8gXCJ0cmFuc3BhcmVudFwiIDogX3V0aWwuVXRpbC5tYWtlSGV4Q29sb3IoY29sb3JbMF0sIGNvbG9yWzFdLCBjb2xvclsyXSk7XG4gIH1cblxuICBfZGlzcGF0Y2hFdmVudEZyb21TYW5kYm94KGFjdGlvbnMsIGpzRXZlbnQpIHtcbiAgICBjb25zdCBzZXRDb2xvciA9IChqc05hbWUsIHN0eWxlTmFtZSwgZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGNvbG9yID0gZXZlbnQuZGV0YWlsW2pzTmFtZV07XG4gICAgICBldmVudC50YXJnZXQuc3R5bGVbc3R5bGVOYW1lXSA9IF9zY3JpcHRpbmdfdXRpbHMuQ29sb3JDb252ZXJ0ZXJzW2Ake2NvbG9yWzBdfV9IVE1MYF0oY29sb3Iuc2xpY2UoMSkpO1xuICAgIH07XG5cbiAgICBjb25zdCBjb21tb25BY3Rpb25zID0ge1xuICAgICAgZGlzcGxheTogZXZlbnQgPT4ge1xuICAgICAgICBjb25zdCBoaWRkZW4gPSBldmVudC5kZXRhaWwuZGlzcGxheSAlIDIgPT09IDE7XG4gICAgICAgIGV2ZW50LnRhcmdldC5zdHlsZS52aXNpYmlsaXR5ID0gaGlkZGVuID8gXCJoaWRkZW5cIiA6IFwidmlzaWJsZVwiO1xuICAgICAgICB0aGlzLmFubm90YXRpb25TdG9yYWdlLnNldFZhbHVlKHRoaXMuZGF0YS5pZCwge1xuICAgICAgICAgIGhpZGRlbixcbiAgICAgICAgICBwcmludDogZXZlbnQuZGV0YWlsLmRpc3BsYXkgPT09IDAgfHwgZXZlbnQuZGV0YWlsLmRpc3BsYXkgPT09IDNcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgcHJpbnQ6IGV2ZW50ID0+IHtcbiAgICAgICAgdGhpcy5hbm5vdGF0aW9uU3RvcmFnZS5zZXRWYWx1ZSh0aGlzLmRhdGEuaWQsIHtcbiAgICAgICAgICBwcmludDogZXZlbnQuZGV0YWlsLnByaW50XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGhpZGRlbjogZXZlbnQgPT4ge1xuICAgICAgICBldmVudC50YXJnZXQuc3R5bGUudmlzaWJpbGl0eSA9IGV2ZW50LmRldGFpbC5oaWRkZW4gPyBcImhpZGRlblwiIDogXCJ2aXNpYmxlXCI7XG4gICAgICAgIHRoaXMuYW5ub3RhdGlvblN0b3JhZ2Uuc2V0VmFsdWUodGhpcy5kYXRhLmlkLCB7XG4gICAgICAgICAgaGlkZGVuOiBldmVudC5kZXRhaWwuaGlkZGVuXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGZvY3VzOiBldmVudCA9PiB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZXZlbnQudGFyZ2V0LmZvY3VzKHtcbiAgICAgICAgICBwcmV2ZW50U2Nyb2xsOiBmYWxzZVxuICAgICAgICB9KSwgMCk7XG4gICAgICB9LFxuICAgICAgdXNlck5hbWU6IGV2ZW50ID0+IHtcbiAgICAgICAgZXZlbnQudGFyZ2V0LnRpdGxlID0gZXZlbnQuZGV0YWlsLnVzZXJOYW1lO1xuICAgICAgfSxcbiAgICAgIHJlYWRvbmx5OiBldmVudCA9PiB7XG4gICAgICAgIGlmIChldmVudC5kZXRhaWwucmVhZG9ubHkpIHtcbiAgICAgICAgICBldmVudC50YXJnZXQuc2V0QXR0cmlidXRlKFwicmVhZG9ubHlcIiwgXCJcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXZlbnQudGFyZ2V0LnJlbW92ZUF0dHJpYnV0ZShcInJlYWRvbmx5XCIpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmRldGFpbC5yZXF1aXJlZCkge1xuICAgICAgICAgIGV2ZW50LnRhcmdldC5zZXRBdHRyaWJ1dGUoXCJyZXF1aXJlZFwiLCBcIlwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBldmVudC50YXJnZXQucmVtb3ZlQXR0cmlidXRlKFwicmVxdWlyZWRcIik7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBiZ0NvbG9yOiBldmVudCA9PiB7XG4gICAgICAgIHNldENvbG9yKFwiYmdDb2xvclwiLCBcImJhY2tncm91bmRDb2xvclwiLCBldmVudCk7XG4gICAgICB9LFxuICAgICAgZmlsbENvbG9yOiBldmVudCA9PiB7XG4gICAgICAgIHNldENvbG9yKFwiZmlsbENvbG9yXCIsIFwiYmFja2dyb3VuZENvbG9yXCIsIGV2ZW50KTtcbiAgICAgIH0sXG4gICAgICBmZ0NvbG9yOiBldmVudCA9PiB7XG4gICAgICAgIHNldENvbG9yKFwiZmdDb2xvclwiLCBcImNvbG9yXCIsIGV2ZW50KTtcbiAgICAgIH0sXG4gICAgICB0ZXh0Q29sb3I6IGV2ZW50ID0+IHtcbiAgICAgICAgc2V0Q29sb3IoXCJ0ZXh0Q29sb3JcIiwgXCJjb2xvclwiLCBldmVudCk7XG4gICAgICB9LFxuICAgICAgYm9yZGVyQ29sb3I6IGV2ZW50ID0+IHtcbiAgICAgICAgc2V0Q29sb3IoXCJib3JkZXJDb2xvclwiLCBcImJvcmRlckNvbG9yXCIsIGV2ZW50KTtcbiAgICAgIH0sXG4gICAgICBzdHJva2VDb2xvcjogZXZlbnQgPT4ge1xuICAgICAgICBzZXRDb2xvcihcInN0cm9rZUNvbG9yXCIsIFwiYm9yZGVyQ29sb3JcIiwgZXZlbnQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXMoanNFdmVudC5kZXRhaWwpKSB7XG4gICAgICBjb25zdCBhY3Rpb24gPSBhY3Rpb25zW25hbWVdIHx8IGNvbW1vbkFjdGlvbnNbbmFtZV07XG5cbiAgICAgIGlmIChhY3Rpb24pIHtcbiAgICAgICAgYWN0aW9uKGpzRXZlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG59XG5cbmNsYXNzIFRleHRXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIFdpZGdldEFubm90YXRpb25FbGVtZW50IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIGNvbnN0IGlzUmVuZGVyYWJsZSA9IHBhcmFtZXRlcnMucmVuZGVyRm9ybXMgfHwgIXBhcmFtZXRlcnMuZGF0YS5oYXNBcHBlYXJhbmNlICYmICEhcGFyYW1ldGVycy5kYXRhLmZpZWxkVmFsdWU7XG4gICAgc3VwZXIocGFyYW1ldGVycywge1xuICAgICAgaXNSZW5kZXJhYmxlXG4gICAgfSk7XG4gIH1cblxuICBzZXRQcm9wZXJ0eU9uU2libGluZ3MoYmFzZSwga2V5LCB2YWx1ZSwga2V5SW5TdG9yYWdlKSB7XG4gICAgY29uc3Qgc3RvcmFnZSA9IHRoaXMuYW5ub3RhdGlvblN0b3JhZ2U7XG5cbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdGhpcy5fZ2V0RWxlbWVudHNCeU5hbWUoYmFzZS5uYW1lLCBiYXNlLmlkKSkge1xuICAgICAgaWYgKGVsZW1lbnQuZG9tRWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LmRvbUVsZW1lbnRba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuXG4gICAgICBzdG9yYWdlLnNldFZhbHVlKGVsZW1lbnQuaWQsIHtcbiAgICAgICAgW2tleUluU3RvcmFnZV06IHZhbHVlXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qgc3RvcmFnZSA9IHRoaXMuYW5ub3RhdGlvblN0b3JhZ2U7XG4gICAgY29uc3QgaWQgPSB0aGlzLmRhdGEuaWQ7XG4gICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gXCJ0ZXh0V2lkZ2V0QW5ub3RhdGlvblwiO1xuICAgIGxldCBlbGVtZW50ID0gbnVsbDtcblxuICAgIGlmICh0aGlzLnJlbmRlckZvcm1zKSB7XG4gICAgICBjb25zdCBzdG9yZWREYXRhID0gc3RvcmFnZS5nZXRWYWx1ZShpZCwge1xuICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLmZpZWxkVmFsdWUsXG4gICAgICAgIHZhbHVlQXNTdHJpbmc6IHRoaXMuZGF0YS5maWVsZFZhbHVlXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHRleHRDb250ZW50ID0gc3RvcmVkRGF0YS52YWx1ZUFzU3RyaW5nIHx8IHN0b3JlZERhdGEudmFsdWUgfHwgXCJcIjtcbiAgICAgIGNvbnN0IGVsZW1lbnREYXRhID0ge1xuICAgICAgICB1c2VyVmFsdWU6IG51bGwsXG4gICAgICAgIGZvcm1hdHRlZFZhbHVlOiBudWxsLFxuICAgICAgICBiZWZvcmVJbnB1dFNlbGVjdGlvblJhbmdlOiBudWxsLFxuICAgICAgICBiZWZvcmVJbnB1dFZhbHVlOiBudWxsXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5kYXRhLm11bHRpTGluZSkge1xuICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRleHRhcmVhXCIpO1xuICAgICAgICBlbGVtZW50LnRleHRDb250ZW50ID0gdGV4dENvbnRlbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgICAgICBlbGVtZW50LnR5cGUgPSBcInRleHRcIjtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiLCB0ZXh0Q29udGVudCk7XG4gICAgICB9XG5cbiAgICAgIEdldEVsZW1lbnRzQnlOYW1lU2V0LmFkZChlbGVtZW50KTtcbiAgICAgIGVsZW1lbnQuZGlzYWJsZWQgPSB0aGlzLmRhdGEucmVhZE9ubHk7XG4gICAgICBlbGVtZW50Lm5hbWUgPSB0aGlzLmRhdGEuZmllbGROYW1lO1xuICAgICAgZWxlbWVudC50YWJJbmRleCA9IERFRkFVTFRfVEFCX0lOREVYO1xuICAgICAgZWxlbWVudERhdGEudXNlclZhbHVlID0gdGV4dENvbnRlbnQ7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcImlkXCIsIGlkKTtcbiAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsIGV2ZW50ID0+IHtcbiAgICAgICAgc3RvcmFnZS5zZXRWYWx1ZShpZCwge1xuICAgICAgICAgIHZhbHVlOiBldmVudC50YXJnZXQudmFsdWVcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc2V0UHJvcGVydHlPblNpYmxpbmdzKGVsZW1lbnQsIFwidmFsdWVcIiwgZXZlbnQudGFyZ2V0LnZhbHVlLCBcInZhbHVlXCIpO1xuICAgICAgfSk7XG4gICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNldGZvcm1cIiwgZXZlbnQgPT4ge1xuICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSB0aGlzLmRhdGEuZGVmYXVsdEZpZWxkVmFsdWUgfHwgXCJcIjtcbiAgICAgICAgZWxlbWVudC52YWx1ZSA9IGVsZW1lbnREYXRhLnVzZXJWYWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgZGVsZXRlIGVsZW1lbnREYXRhLmZvcm1hdHRlZFZhbHVlO1xuICAgICAgfSk7XG5cbiAgICAgIGxldCBibHVyTGlzdGVuZXIgPSBldmVudCA9PiB7XG4gICAgICAgIGlmIChlbGVtZW50RGF0YS5mb3JtYXR0ZWRWYWx1ZSkge1xuICAgICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IGVsZW1lbnREYXRhLmZvcm1hdHRlZFZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgZXZlbnQudGFyZ2V0LnNjcm9sbExlZnQgPSAwO1xuICAgICAgICBlbGVtZW50RGF0YS5iZWZvcmVJbnB1dFNlbGVjdGlvblJhbmdlID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLmVuYWJsZVNjcmlwdGluZyAmJiB0aGlzLmhhc0pTQWN0aW9ucykge1xuICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLCBldmVudCA9PiB7XG4gICAgICAgICAgaWYgKGVsZW1lbnREYXRhLnVzZXJWYWx1ZSkge1xuICAgICAgICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gZWxlbWVudERhdGEudXNlclZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInVwZGF0ZWZyb21zYW5kYm94XCIsIGpzRXZlbnQgPT4ge1xuICAgICAgICAgIGNvbnN0IGFjdGlvbnMgPSB7XG4gICAgICAgICAgICB2YWx1ZShldmVudCkge1xuICAgICAgICAgICAgICBlbGVtZW50RGF0YS51c2VyVmFsdWUgPSBldmVudC5kZXRhaWwudmFsdWUgfHwgXCJcIjtcbiAgICAgICAgICAgICAgc3RvcmFnZS5zZXRWYWx1ZShpZCwge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBlbGVtZW50RGF0YS51c2VyVmFsdWUudG9TdHJpbmcoKVxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBpZiAoIWVsZW1lbnREYXRhLmZvcm1hdHRlZFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gZWxlbWVudERhdGEudXNlclZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB2YWx1ZUFzU3RyaW5nKGV2ZW50KSB7XG4gICAgICAgICAgICAgIGVsZW1lbnREYXRhLmZvcm1hdHRlZFZhbHVlID0gZXZlbnQuZGV0YWlsLnZhbHVlQXNTdHJpbmcgfHwgXCJcIjtcblxuICAgICAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0ICE9PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgZXZlbnQudGFyZ2V0LnZhbHVlID0gZWxlbWVudERhdGEuZm9ybWF0dGVkVmFsdWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBzdG9yYWdlLnNldFZhbHVlKGlkLCB7XG4gICAgICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWU6IGVsZW1lbnREYXRhLmZvcm1hdHRlZFZhbHVlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgc2VsUmFuZ2UoZXZlbnQpIHtcbiAgICAgICAgICAgICAgY29uc3QgW3NlbFN0YXJ0LCBzZWxFbmRdID0gZXZlbnQuZGV0YWlsLnNlbFJhbmdlO1xuXG4gICAgICAgICAgICAgIGlmIChzZWxTdGFydCA+PSAwICYmIHNlbEVuZCA8IGV2ZW50LnRhcmdldC52YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBldmVudC50YXJnZXQuc2V0U2VsZWN0aW9uUmFuZ2Uoc2VsU3RhcnQsIHNlbEVuZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH07XG5cbiAgICAgICAgICB0aGlzLl9kaXNwYXRjaEV2ZW50RnJvbVNhbmRib3goYWN0aW9ucywganNFdmVudCk7XG4gICAgICAgIH0pO1xuICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIGV2ZW50ID0+IHtcbiAgICAgICAgICBlbGVtZW50RGF0YS5iZWZvcmVJbnB1dFZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgICAgICAgIGxldCBjb21taXRLZXkgPSAtMTtcblxuICAgICAgICAgIGlmIChldmVudC5rZXkgPT09IFwiRXNjYXBlXCIpIHtcbiAgICAgICAgICAgIGNvbW1pdEtleSA9IDA7XG4gICAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09IFwiRW50ZXJcIikge1xuICAgICAgICAgICAgY29tbWl0S2V5ID0gMjtcbiAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gXCJUYWJcIikge1xuICAgICAgICAgICAgY29tbWl0S2V5ID0gMztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY29tbWl0S2V5ID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVsZW1lbnREYXRhLnVzZXJWYWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgICAgICB0aGlzLmxpbmtTZXJ2aWNlLmV2ZW50QnVzPy5kaXNwYXRjaChcImRpc3BhdGNoZXZlbnRpbnNhbmRib3hcIiwge1xuICAgICAgICAgICAgc291cmNlOiB0aGlzLFxuICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICBuYW1lOiBcIktleXN0cm9rZVwiLFxuICAgICAgICAgICAgICB2YWx1ZTogZXZlbnQudGFyZ2V0LnZhbHVlLFxuICAgICAgICAgICAgICB3aWxsQ29tbWl0OiB0cnVlLFxuICAgICAgICAgICAgICBjb21taXRLZXksXG4gICAgICAgICAgICAgIHNlbFN0YXJ0OiBldmVudC50YXJnZXQuc2VsZWN0aW9uU3RhcnQsXG4gICAgICAgICAgICAgIHNlbEVuZDogZXZlbnQudGFyZ2V0LnNlbGVjdGlvbkVuZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgX2JsdXJMaXN0ZW5lciA9IGJsdXJMaXN0ZW5lcjtcbiAgICAgICAgYmx1ckxpc3RlbmVyID0gbnVsbDtcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLCBldmVudCA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX21vdXNlU3RhdGUuaXNEb3duKSB7XG4gICAgICAgICAgICBlbGVtZW50RGF0YS51c2VyVmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgICAgICAgICB0aGlzLmxpbmtTZXJ2aWNlLmV2ZW50QnVzPy5kaXNwYXRjaChcImRpc3BhdGNoZXZlbnRpbnNhbmRib3hcIiwge1xuICAgICAgICAgICAgICBzb3VyY2U6IHRoaXMsXG4gICAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgIG5hbWU6IFwiS2V5c3Ryb2tlXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGV2ZW50LnRhcmdldC52YWx1ZSxcbiAgICAgICAgICAgICAgICB3aWxsQ29tbWl0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGNvbW1pdEtleTogMSxcbiAgICAgICAgICAgICAgICBzZWxTdGFydDogZXZlbnQudGFyZ2V0LnNlbGVjdGlvblN0YXJ0LFxuICAgICAgICAgICAgICAgIHNlbEVuZDogZXZlbnQudGFyZ2V0LnNlbGVjdGlvbkVuZFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfYmx1ckxpc3RlbmVyKGV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLCBldmVudCA9PiB7XG4gICAgICAgICAgZWxlbWVudERhdGEuYmVmb3JlSW5wdXRWYWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgICAgICBlbGVtZW50RGF0YS5iZWZvcmVJbnB1dFNlbGVjdGlvblJhbmdlID0gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIGV2ZW50ID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQudGFyZ2V0LnNlbGVjdGlvblN0YXJ0ID09PSBldmVudC50YXJnZXQuc2VsZWN0aW9uRW5kKSB7XG4gICAgICAgICAgICBlbGVtZW50RGF0YS5iZWZvcmVJbnB1dFNlbGVjdGlvblJhbmdlID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJzZWxlY3RcIiwgZXZlbnQgPT4ge1xuICAgICAgICAgIGVsZW1lbnREYXRhLmJlZm9yZUlucHV0U2VsZWN0aW9uUmFuZ2UgPSBbZXZlbnQudGFyZ2V0LnNlbGVjdGlvblN0YXJ0LCBldmVudC50YXJnZXQuc2VsZWN0aW9uRW5kXTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuZGF0YS5hY3Rpb25zPy5LZXlzdHJva2UpIHtcbiAgICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCBldmVudCA9PiB7XG4gICAgICAgICAgICBsZXQgc2VsU3RhcnQgPSAtMTtcbiAgICAgICAgICAgIGxldCBzZWxFbmQgPSAtMTtcblxuICAgICAgICAgICAgaWYgKGVsZW1lbnREYXRhLmJlZm9yZUlucHV0U2VsZWN0aW9uUmFuZ2UpIHtcbiAgICAgICAgICAgICAgW3NlbFN0YXJ0LCBzZWxFbmRdID0gZWxlbWVudERhdGEuYmVmb3JlSW5wdXRTZWxlY3Rpb25SYW5nZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5saW5rU2VydmljZS5ldmVudEJ1cz8uZGlzcGF0Y2goXCJkaXNwYXRjaGV2ZW50aW5zYW5kYm94XCIsIHtcbiAgICAgICAgICAgICAgc291cmNlOiB0aGlzLFxuICAgICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICBuYW1lOiBcIktleXN0cm9rZVwiLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBlbGVtZW50RGF0YS5iZWZvcmVJbnB1dFZhbHVlLFxuICAgICAgICAgICAgICAgIGNoYW5nZTogZXZlbnQuZGF0YSxcbiAgICAgICAgICAgICAgICB3aWxsQ29tbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzZWxTdGFydCxcbiAgICAgICAgICAgICAgICBzZWxFbmRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zZXRFdmVudExpc3RlbmVycyhlbGVtZW50LCBbW1wiZm9jdXNcIiwgXCJGb2N1c1wiXSwgW1wiYmx1clwiLCBcIkJsdXJcIl0sIFtcIm1vdXNlZG93blwiLCBcIk1vdXNlIERvd25cIl0sIFtcIm1vdXNlZW50ZXJcIiwgXCJNb3VzZSBFbnRlclwiXSwgW1wibW91c2VsZWF2ZVwiLCBcIk1vdXNlIEV4aXRcIl0sIFtcIm1vdXNldXBcIiwgXCJNb3VzZSBVcFwiXV0sIGV2ZW50ID0+IGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChibHVyTGlzdGVuZXIpIHtcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLCBibHVyTGlzdGVuZXIpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5kYXRhLm1heExlbiAhPT0gbnVsbCkge1xuICAgICAgICBlbGVtZW50Lm1heExlbmd0aCA9IHRoaXMuZGF0YS5tYXhMZW47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmRhdGEuY29tYikge1xuICAgICAgICBjb25zdCBmaWVsZFdpZHRoID0gdGhpcy5kYXRhLnJlY3RbMl0gLSB0aGlzLmRhdGEucmVjdFswXTtcbiAgICAgICAgY29uc3QgY29tYldpZHRoID0gZmllbGRXaWR0aCAvIHRoaXMuZGF0YS5tYXhMZW47XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChcImNvbWJcIik7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUubGV0dGVyU3BhY2luZyA9IGBjYWxjKCR7Y29tYldpZHRofXB4IC0gMWNoKWA7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgZWxlbWVudC50ZXh0Q29udGVudCA9IHRoaXMuZGF0YS5maWVsZFZhbHVlO1xuICAgICAgZWxlbWVudC5zdHlsZS52ZXJ0aWNhbEFsaWduID0gXCJtaWRkbGVcIjtcbiAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IFwidGFibGUtY2VsbFwiO1xuICAgIH1cblxuICAgIHRoaXMuX3NldFRleHRTdHlsZShlbGVtZW50KTtcblxuICAgIHRoaXMuX3NldEJhY2tncm91bmRDb2xvcihlbGVtZW50KTtcblxuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgfVxuXG4gIF9zZXRUZXh0U3R5bGUoZWxlbWVudCkge1xuICAgIGNvbnN0IFRFWFRfQUxJR05NRU5UID0gW1wibGVmdFwiLCBcImNlbnRlclwiLCBcInJpZ2h0XCJdO1xuICAgIGNvbnN0IHtcbiAgICAgIGZvbnRTaXplLFxuICAgICAgZm9udENvbG9yXG4gICAgfSA9IHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGE7XG4gICAgY29uc3Qgc3R5bGUgPSBlbGVtZW50LnN0eWxlO1xuXG4gICAgaWYgKGZvbnRTaXplKSB7XG4gICAgICBzdHlsZS5mb250U2l6ZSA9IGAke2ZvbnRTaXplfXB4YDtcbiAgICB9XG5cbiAgICBzdHlsZS5jb2xvciA9IF91dGlsLlV0aWwubWFrZUhleENvbG9yKGZvbnRDb2xvclswXSwgZm9udENvbG9yWzFdLCBmb250Q29sb3JbMl0pO1xuXG4gICAgaWYgKHRoaXMuZGF0YS50ZXh0QWxpZ25tZW50ICE9PSBudWxsKSB7XG4gICAgICBzdHlsZS50ZXh0QWxpZ24gPSBURVhUX0FMSUdOTUVOVFt0aGlzLmRhdGEudGV4dEFsaWdubWVudF07XG4gICAgfVxuICB9XG5cbn1cblxuY2xhc3MgQ2hlY2tib3hXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIFdpZGdldEFubm90YXRpb25FbGVtZW50IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIHN1cGVyKHBhcmFtZXRlcnMsIHtcbiAgICAgIGlzUmVuZGVyYWJsZTogcGFyYW1ldGVycy5yZW5kZXJGb3Jtc1xuICAgIH0pO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHN0b3JhZ2UgPSB0aGlzLmFubm90YXRpb25TdG9yYWdlO1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgY29uc3QgaWQgPSBkYXRhLmlkO1xuICAgIGxldCB2YWx1ZSA9IHN0b3JhZ2UuZ2V0VmFsdWUoaWQsIHtcbiAgICAgIHZhbHVlOiBkYXRhLmV4cG9ydFZhbHVlID09PSBkYXRhLmZpZWxkVmFsdWVcbiAgICB9KS52YWx1ZTtcblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUgIT09IFwiT2ZmXCI7XG4gICAgICBzdG9yYWdlLnNldFZhbHVlKGlkLCB7XG4gICAgICAgIHZhbHVlXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWUgPSBcImJ1dHRvbldpZGdldEFubm90YXRpb24gY2hlY2tCb3hcIjtcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgIEdldEVsZW1lbnRzQnlOYW1lU2V0LmFkZChlbGVtZW50KTtcbiAgICBlbGVtZW50LmRpc2FibGVkID0gZGF0YS5yZWFkT25seTtcbiAgICBlbGVtZW50LnR5cGUgPSBcImNoZWNrYm94XCI7XG4gICAgZWxlbWVudC5uYW1lID0gZGF0YS5maWVsZE5hbWU7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFwiY2hlY2tlZFwiLCB0cnVlKTtcbiAgICB9XG5cbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcImlkXCIsIGlkKTtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcImV4cG9ydFZhbHVlXCIsIGRhdGEuZXhwb3J0VmFsdWUpO1xuICAgIGVsZW1lbnQudGFiSW5kZXggPSBERUZBVUxUX1RBQl9JTkRFWDtcbiAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgZXZlbnQgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBuYW1lLFxuICAgICAgICBjaGVja2VkXG4gICAgICB9ID0gZXZlbnQudGFyZ2V0O1xuXG4gICAgICBmb3IgKGNvbnN0IGNoZWNrYm94IG9mIHRoaXMuX2dldEVsZW1lbnRzQnlOYW1lKG5hbWUsIGlkKSkge1xuICAgICAgICBjb25zdCBjdXJDaGVja2VkID0gY2hlY2tlZCAmJiBjaGVja2JveC5leHBvcnRWYWx1ZSA9PT0gZGF0YS5leHBvcnRWYWx1ZTtcblxuICAgICAgICBpZiAoY2hlY2tib3guZG9tRWxlbWVudCkge1xuICAgICAgICAgIGNoZWNrYm94LmRvbUVsZW1lbnQuY2hlY2tlZCA9IGN1ckNoZWNrZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBzdG9yYWdlLnNldFZhbHVlKGNoZWNrYm94LmlkLCB7XG4gICAgICAgICAgdmFsdWU6IGN1ckNoZWNrZWRcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHN0b3JhZ2Uuc2V0VmFsdWUoaWQsIHtcbiAgICAgICAgdmFsdWU6IGNoZWNrZWRcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2V0Zm9ybVwiLCBldmVudCA9PiB7XG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBkYXRhLmRlZmF1bHRGaWVsZFZhbHVlIHx8IFwiT2ZmXCI7XG4gICAgICBldmVudC50YXJnZXQuY2hlY2tlZCA9IGRlZmF1bHRWYWx1ZSA9PT0gZGF0YS5leHBvcnRWYWx1ZTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmVuYWJsZVNjcmlwdGluZyAmJiB0aGlzLmhhc0pTQWN0aW9ucykge1xuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwidXBkYXRlZnJvbXNhbmRib3hcIiwganNFdmVudCA9PiB7XG4gICAgICAgIGNvbnN0IGFjdGlvbnMgPSB7XG4gICAgICAgICAgdmFsdWUoZXZlbnQpIHtcbiAgICAgICAgICAgIGV2ZW50LnRhcmdldC5jaGVja2VkID0gZXZlbnQuZGV0YWlsLnZhbHVlICE9PSBcIk9mZlwiO1xuICAgICAgICAgICAgc3RvcmFnZS5zZXRWYWx1ZShpZCwge1xuICAgICAgICAgICAgICB2YWx1ZTogZXZlbnQudGFyZ2V0LmNoZWNrZWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuX2Rpc3BhdGNoRXZlbnRGcm9tU2FuZGJveChhY3Rpb25zLCBqc0V2ZW50KTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLl9zZXRFdmVudExpc3RlbmVycyhlbGVtZW50LCBbW1wiY2hhbmdlXCIsIFwiVmFsaWRhdGVcIl0sIFtcImNoYW5nZVwiLCBcIkFjdGlvblwiXSwgW1wiZm9jdXNcIiwgXCJGb2N1c1wiXSwgW1wiYmx1clwiLCBcIkJsdXJcIl0sIFtcIm1vdXNlZG93blwiLCBcIk1vdXNlIERvd25cIl0sIFtcIm1vdXNlZW50ZXJcIiwgXCJNb3VzZSBFbnRlclwiXSwgW1wibW91c2VsZWF2ZVwiLCBcIk1vdXNlIEV4aXRcIl0sIFtcIm1vdXNldXBcIiwgXCJNb3VzZSBVcFwiXV0sIGV2ZW50ID0+IGV2ZW50LnRhcmdldC5jaGVja2VkKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zZXRCYWNrZ3JvdW5kQ29sb3IoZWxlbWVudCk7XG5cbiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZChlbGVtZW50KTtcbiAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gIH1cblxufVxuXG5jbGFzcyBSYWRpb0J1dHRvbldpZGdldEFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgc3VwZXIocGFyYW1ldGVycywge1xuICAgICAgaXNSZW5kZXJhYmxlOiBwYXJhbWV0ZXJzLnJlbmRlckZvcm1zXG4gICAgfSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gXCJidXR0b25XaWRnZXRBbm5vdGF0aW9uIHJhZGlvQnV0dG9uXCI7XG4gICAgY29uc3Qgc3RvcmFnZSA9IHRoaXMuYW5ub3RhdGlvblN0b3JhZ2U7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICBjb25zdCBpZCA9IGRhdGEuaWQ7XG4gICAgbGV0IHZhbHVlID0gc3RvcmFnZS5nZXRWYWx1ZShpZCwge1xuICAgICAgdmFsdWU6IGRhdGEuZmllbGRWYWx1ZSA9PT0gZGF0YS5idXR0b25WYWx1ZVxuICAgIH0pLnZhbHVlO1xuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgdmFsdWUgPSB2YWx1ZSAhPT0gZGF0YS5idXR0b25WYWx1ZTtcbiAgICAgIHN0b3JhZ2Uuc2V0VmFsdWUoaWQsIHtcbiAgICAgICAgdmFsdWVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgR2V0RWxlbWVudHNCeU5hbWVTZXQuYWRkKGVsZW1lbnQpO1xuICAgIGVsZW1lbnQuZGlzYWJsZWQgPSBkYXRhLnJlYWRPbmx5O1xuICAgIGVsZW1lbnQudHlwZSA9IFwicmFkaW9cIjtcbiAgICBlbGVtZW50Lm5hbWUgPSBkYXRhLmZpZWxkTmFtZTtcblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJjaGVja2VkXCIsIHRydWUpO1xuICAgIH1cblxuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKFwiaWRcIiwgaWQpO1xuICAgIGVsZW1lbnQudGFiSW5kZXggPSBERUZBVUxUX1RBQl9JTkRFWDtcbiAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgZXZlbnQgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBuYW1lLFxuICAgICAgICBjaGVja2VkXG4gICAgICB9ID0gZXZlbnQudGFyZ2V0O1xuXG4gICAgICBmb3IgKGNvbnN0IHJhZGlvIG9mIHRoaXMuX2dldEVsZW1lbnRzQnlOYW1lKG5hbWUsIGlkKSkge1xuICAgICAgICBzdG9yYWdlLnNldFZhbHVlKHJhZGlvLmlkLCB7XG4gICAgICAgICAgdmFsdWU6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBzdG9yYWdlLnNldFZhbHVlKGlkLCB7XG4gICAgICAgIHZhbHVlOiBjaGVja2VkXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNldGZvcm1cIiwgZXZlbnQgPT4ge1xuICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gZGF0YS5kZWZhdWx0RmllbGRWYWx1ZTtcbiAgICAgIGV2ZW50LnRhcmdldC5jaGVja2VkID0gZGVmYXVsdFZhbHVlICE9PSBudWxsICYmIGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIGRlZmF1bHRWYWx1ZSA9PT0gZGF0YS5idXR0b25WYWx1ZTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmVuYWJsZVNjcmlwdGluZyAmJiB0aGlzLmhhc0pTQWN0aW9ucykge1xuICAgICAgY29uc3QgcGRmQnV0dG9uVmFsdWUgPSBkYXRhLmJ1dHRvblZhbHVlO1xuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwidXBkYXRlZnJvbXNhbmRib3hcIiwganNFdmVudCA9PiB7XG4gICAgICAgIGNvbnN0IGFjdGlvbnMgPSB7XG4gICAgICAgICAgdmFsdWU6IGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNoZWNrZWQgPSBwZGZCdXR0b25WYWx1ZSA9PT0gZXZlbnQuZGV0YWlsLnZhbHVlO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJhZGlvIG9mIHRoaXMuX2dldEVsZW1lbnRzQnlOYW1lKGV2ZW50LnRhcmdldC5uYW1lKSkge1xuICAgICAgICAgICAgICBjb25zdCBjdXJDaGVja2VkID0gY2hlY2tlZCAmJiByYWRpby5pZCA9PT0gaWQ7XG5cbiAgICAgICAgICAgICAgaWYgKHJhZGlvLmRvbUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByYWRpby5kb21FbGVtZW50LmNoZWNrZWQgPSBjdXJDaGVja2VkO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgc3RvcmFnZS5zZXRWYWx1ZShyYWRpby5pZCwge1xuICAgICAgICAgICAgICAgIHZhbHVlOiBjdXJDaGVja2VkXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLl9kaXNwYXRjaEV2ZW50RnJvbVNhbmRib3goYWN0aW9ucywganNFdmVudCk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5fc2V0RXZlbnRMaXN0ZW5lcnMoZWxlbWVudCwgW1tcImNoYW5nZVwiLCBcIlZhbGlkYXRlXCJdLCBbXCJjaGFuZ2VcIiwgXCJBY3Rpb25cIl0sIFtcImZvY3VzXCIsIFwiRm9jdXNcIl0sIFtcImJsdXJcIiwgXCJCbHVyXCJdLCBbXCJtb3VzZWRvd25cIiwgXCJNb3VzZSBEb3duXCJdLCBbXCJtb3VzZWVudGVyXCIsIFwiTW91c2UgRW50ZXJcIl0sIFtcIm1vdXNlbGVhdmVcIiwgXCJNb3VzZSBFeGl0XCJdLCBbXCJtb3VzZXVwXCIsIFwiTW91c2UgVXBcIl1dLCBldmVudCA9PiBldmVudC50YXJnZXQuY2hlY2tlZCk7XG4gICAgfVxuXG4gICAgdGhpcy5fc2V0QmFja2dyb3VuZENvbG9yKGVsZW1lbnQpO1xuXG4gICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG4gICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICB9XG5cbn1cblxuY2xhc3MgUHVzaEJ1dHRvbldpZGdldEFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgTGlua0Fubm90YXRpb25FbGVtZW50IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIHN1cGVyKHBhcmFtZXRlcnMsIHtcbiAgICAgIGlnbm9yZUJvcmRlcjogcGFyYW1ldGVycy5kYXRhLmhhc0FwcGVhcmFuY2VcbiAgICB9KTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBjb250YWluZXIgPSBzdXBlci5yZW5kZXIoKTtcbiAgICBjb250YWluZXIuY2xhc3NOYW1lID0gXCJidXR0b25XaWRnZXRBbm5vdGF0aW9uIHB1c2hCdXR0b25cIjtcblxuICAgIGlmICh0aGlzLmRhdGEuYWx0ZXJuYXRpdmVUZXh0KSB7XG4gICAgICBjb250YWluZXIudGl0bGUgPSB0aGlzLmRhdGEuYWx0ZXJuYXRpdmVUZXh0O1xuICAgIH1cblxuICAgIHJldHVybiBjb250YWluZXI7XG4gIH1cblxufVxuXG5jbGFzcyBDaG9pY2VXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIFdpZGdldEFubm90YXRpb25FbGVtZW50IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIHN1cGVyKHBhcmFtZXRlcnMsIHtcbiAgICAgIGlzUmVuZGVyYWJsZTogcGFyYW1ldGVycy5yZW5kZXJGb3Jtc1xuICAgIH0pO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZSA9IFwiY2hvaWNlV2lkZ2V0QW5ub3RhdGlvblwiO1xuICAgIGNvbnN0IHN0b3JhZ2UgPSB0aGlzLmFubm90YXRpb25TdG9yYWdlO1xuICAgIGNvbnN0IGlkID0gdGhpcy5kYXRhLmlkO1xuICAgIHN0b3JhZ2UuZ2V0VmFsdWUoaWQsIHtcbiAgICAgIHZhbHVlOiB0aGlzLmRhdGEuZmllbGRWYWx1ZS5sZW5ndGggPiAwID8gdGhpcy5kYXRhLmZpZWxkVmFsdWVbMF0gOiB1bmRlZmluZWRcbiAgICB9KTtcbiAgICBsZXQge1xuICAgICAgZm9udFNpemVcbiAgICB9ID0gdGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YTtcblxuICAgIGlmICghZm9udFNpemUpIHtcbiAgICAgIGZvbnRTaXplID0gOTtcbiAgICB9XG5cbiAgICBjb25zdCBmb250U2l6ZVN0eWxlID0gYGNhbGMoJHtmb250U2l6ZX1weCAqIHZhcigtLXpvb20tZmFjdG9yKSlgO1xuICAgIGNvbnN0IHNlbGVjdEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIpO1xuICAgIEdldEVsZW1lbnRzQnlOYW1lU2V0LmFkZChzZWxlY3RFbGVtZW50KTtcbiAgICBzZWxlY3RFbGVtZW50LmRpc2FibGVkID0gdGhpcy5kYXRhLnJlYWRPbmx5O1xuICAgIHNlbGVjdEVsZW1lbnQubmFtZSA9IHRoaXMuZGF0YS5maWVsZE5hbWU7XG4gICAgc2VsZWN0RWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBpZCk7XG4gICAgc2VsZWN0RWxlbWVudC50YWJJbmRleCA9IERFRkFVTFRfVEFCX0lOREVYO1xuICAgIHNlbGVjdEVsZW1lbnQuc3R5bGUuZm9udFNpemUgPSBgJHtmb250U2l6ZX1weGA7XG5cbiAgICBpZiAoIXRoaXMuZGF0YS5jb21ibykge1xuICAgICAgc2VsZWN0RWxlbWVudC5zaXplID0gdGhpcy5kYXRhLm9wdGlvbnMubGVuZ3RoO1xuXG4gICAgICBpZiAodGhpcy5kYXRhLm11bHRpU2VsZWN0KSB7XG4gICAgICAgIHNlbGVjdEVsZW1lbnQubXVsdGlwbGUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNlbGVjdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2V0Zm9ybVwiLCBldmVudCA9PiB7XG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSB0aGlzLmRhdGEuZGVmYXVsdEZpZWxkVmFsdWU7XG5cbiAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIHNlbGVjdEVsZW1lbnQub3B0aW9ucykge1xuICAgICAgICBvcHRpb24uc2VsZWN0ZWQgPSBvcHRpb24udmFsdWUgPT09IGRlZmF1bHRWYWx1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIHRoaXMuZGF0YS5vcHRpb25zKSB7XG4gICAgICBjb25zdCBvcHRpb25FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIm9wdGlvblwiKTtcbiAgICAgIG9wdGlvbkVsZW1lbnQudGV4dENvbnRlbnQgPSBvcHRpb24uZGlzcGxheVZhbHVlO1xuICAgICAgb3B0aW9uRWxlbWVudC52YWx1ZSA9IG9wdGlvbi5leHBvcnRWYWx1ZTtcblxuICAgICAgaWYgKHRoaXMuZGF0YS5jb21ibykge1xuICAgICAgICBvcHRpb25FbGVtZW50LnN0eWxlLmZvbnRTaXplID0gZm9udFNpemVTdHlsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZGF0YS5maWVsZFZhbHVlLmluY2x1ZGVzKG9wdGlvbi5leHBvcnRWYWx1ZSkpIHtcbiAgICAgICAgb3B0aW9uRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJzZWxlY3RlZFwiLCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgc2VsZWN0RWxlbWVudC5hcHBlbmRDaGlsZChvcHRpb25FbGVtZW50KTtcbiAgICB9XG5cbiAgICBjb25zdCBnZXRWYWx1ZSA9IChldmVudCwgaXNFeHBvcnQpID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSBpc0V4cG9ydCA/IFwidmFsdWVcIiA6IFwidGV4dENvbnRlbnRcIjtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBldmVudC50YXJnZXQub3B0aW9ucztcblxuICAgICAgaWYgKCFldmVudC50YXJnZXQubXVsdGlwbGUpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuc2VsZWN0ZWRJbmRleCA9PT0gLTEgPyBudWxsIDogb3B0aW9uc1tvcHRpb25zLnNlbGVjdGVkSW5kZXhdW25hbWVdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmZpbHRlci5jYWxsKG9wdGlvbnMsIG9wdGlvbiA9PiBvcHRpb24uc2VsZWN0ZWQpLm1hcChvcHRpb24gPT4gb3B0aW9uW25hbWVdKTtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0SXRlbXMgPSBldmVudCA9PiB7XG4gICAgICBjb25zdCBvcHRpb25zID0gZXZlbnQudGFyZ2V0Lm9wdGlvbnM7XG4gICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKG9wdGlvbnMsIG9wdGlvbiA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGlzcGxheVZhbHVlOiBvcHRpb24udGV4dENvbnRlbnQsXG4gICAgICAgICAgZXhwb3J0VmFsdWU6IG9wdGlvbi52YWx1ZVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGlmICh0aGlzLmVuYWJsZVNjcmlwdGluZyAmJiB0aGlzLmhhc0pTQWN0aW9ucykge1xuICAgICAgc2VsZWN0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwidXBkYXRlZnJvbXNhbmRib3hcIiwganNFdmVudCA9PiB7XG4gICAgICAgIGNvbnN0IGFjdGlvbnMgPSB7XG4gICAgICAgICAgdmFsdWUoZXZlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZXZlbnQuZGV0YWlsLnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gbmV3IFNldChBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXSk7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIHNlbGVjdEVsZW1lbnQub3B0aW9ucykge1xuICAgICAgICAgICAgICBvcHRpb24uc2VsZWN0ZWQgPSB2YWx1ZXMuaGFzKG9wdGlvbi52YWx1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0b3JhZ2Uuc2V0VmFsdWUoaWQsIHtcbiAgICAgICAgICAgICAgdmFsdWU6IGdldFZhbHVlKGV2ZW50LCB0cnVlKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSxcblxuICAgICAgICAgIG11bHRpcGxlU2VsZWN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICBzZWxlY3RFbGVtZW50Lm11bHRpcGxlID0gdHJ1ZTtcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgcmVtb3ZlKGV2ZW50KSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gc2VsZWN0RWxlbWVudC5vcHRpb25zO1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBldmVudC5kZXRhaWwucmVtb3ZlO1xuICAgICAgICAgICAgb3B0aW9uc1tpbmRleF0uc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQucmVtb3ZlKGluZGV4KTtcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBjb25zdCBpID0gQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleC5jYWxsKG9wdGlvbnMsIG9wdGlvbiA9PiBvcHRpb24uc2VsZWN0ZWQpO1xuXG4gICAgICAgICAgICAgIGlmIChpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnNbMF0uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0b3JhZ2Uuc2V0VmFsdWUoaWQsIHtcbiAgICAgICAgICAgICAgdmFsdWU6IGdldFZhbHVlKGV2ZW50LCB0cnVlKSxcbiAgICAgICAgICAgICAgaXRlbXM6IGdldEl0ZW1zKGV2ZW50KVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGNsZWFyKGV2ZW50KSB7XG4gICAgICAgICAgICB3aGlsZSAoc2VsZWN0RWxlbWVudC5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5yZW1vdmUoMCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0b3JhZ2Uuc2V0VmFsdWUoaWQsIHtcbiAgICAgICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgICAgICAgIGl0ZW1zOiBbXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGluc2VydChldmVudCkge1xuICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgZGlzcGxheVZhbHVlLFxuICAgICAgICAgICAgICBleHBvcnRWYWx1ZVxuICAgICAgICAgICAgfSA9IGV2ZW50LmRldGFpbC5pbnNlcnQ7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIm9wdGlvblwiKTtcbiAgICAgICAgICAgIG9wdGlvbkVsZW1lbnQudGV4dENvbnRlbnQgPSBkaXNwbGF5VmFsdWU7XG4gICAgICAgICAgICBvcHRpb25FbGVtZW50LnZhbHVlID0gZXhwb3J0VmFsdWU7XG4gICAgICAgICAgICBzZWxlY3RFbGVtZW50Lmluc2VydEJlZm9yZShvcHRpb25FbGVtZW50LCBzZWxlY3RFbGVtZW50LmNoaWxkcmVuW2luZGV4XSk7XG4gICAgICAgICAgICBzdG9yYWdlLnNldFZhbHVlKGlkLCB7XG4gICAgICAgICAgICAgIHZhbHVlOiBnZXRWYWx1ZShldmVudCwgdHJ1ZSksXG4gICAgICAgICAgICAgIGl0ZW1zOiBnZXRJdGVtcyhldmVudClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBpdGVtcyhldmVudCkge1xuICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICBpdGVtc1xuICAgICAgICAgICAgfSA9IGV2ZW50LmRldGFpbDtcblxuICAgICAgICAgICAgd2hpbGUgKHNlbGVjdEVsZW1lbnQubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQucmVtb3ZlKDApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgIGRpc3BsYXlWYWx1ZSxcbiAgICAgICAgICAgICAgICBleHBvcnRWYWx1ZVxuICAgICAgICAgICAgICB9ID0gaXRlbTtcbiAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIik7XG4gICAgICAgICAgICAgIG9wdGlvbkVsZW1lbnQudGV4dENvbnRlbnQgPSBkaXNwbGF5VmFsdWU7XG4gICAgICAgICAgICAgIG9wdGlvbkVsZW1lbnQudmFsdWUgPSBleHBvcnRWYWx1ZTtcbiAgICAgICAgICAgICAgc2VsZWN0RWxlbWVudC5hcHBlbmRDaGlsZChvcHRpb25FbGVtZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNlbGVjdEVsZW1lbnQub3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQub3B0aW9uc1swXS5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0b3JhZ2Uuc2V0VmFsdWUoaWQsIHtcbiAgICAgICAgICAgICAgdmFsdWU6IGdldFZhbHVlKGV2ZW50LCB0cnVlKSxcbiAgICAgICAgICAgICAgaXRlbXM6IGdldEl0ZW1zKGV2ZW50KVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGluZGljZXMoZXZlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGljZXMgPSBuZXcgU2V0KGV2ZW50LmRldGFpbC5pbmRpY2VzKTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2YgZXZlbnQudGFyZ2V0Lm9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gaW5kaWNlcy5oYXMob3B0aW9uLmluZGV4KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3RvcmFnZS5zZXRWYWx1ZShpZCwge1xuICAgICAgICAgICAgICB2YWx1ZTogZ2V0VmFsdWUoZXZlbnQsIHRydWUpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgZWRpdGFibGUoZXZlbnQpIHtcbiAgICAgICAgICAgIGV2ZW50LnRhcmdldC5kaXNhYmxlZCA9ICFldmVudC5kZXRhaWwuZWRpdGFibGU7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fZGlzcGF0Y2hFdmVudEZyb21TYW5kYm94KGFjdGlvbnMsIGpzRXZlbnQpO1xuICAgICAgfSk7XG4gICAgICBzZWxlY3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCBldmVudCA9PiB7XG4gICAgICAgIGNvbnN0IGV4cG9ydFZhbHVlID0gZ2V0VmFsdWUoZXZlbnQsIHRydWUpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGdldFZhbHVlKGV2ZW50LCBmYWxzZSk7XG4gICAgICAgIHN0b3JhZ2Uuc2V0VmFsdWUoaWQsIHtcbiAgICAgICAgICB2YWx1ZTogZXhwb3J0VmFsdWVcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubGlua1NlcnZpY2UuZXZlbnRCdXM/LmRpc3BhdGNoKFwiZGlzcGF0Y2hldmVudGluc2FuZGJveFwiLCB7XG4gICAgICAgICAgc291cmNlOiB0aGlzLFxuICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICBuYW1lOiBcIktleXN0cm9rZVwiLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBjaGFuZ2VFeDogZXhwb3J0VmFsdWUsXG4gICAgICAgICAgICB3aWxsQ29tbWl0OiB0cnVlLFxuICAgICAgICAgICAgY29tbWl0S2V5OiAxLFxuICAgICAgICAgICAga2V5RG93bjogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuX3NldEV2ZW50TGlzdGVuZXJzKHNlbGVjdEVsZW1lbnQsIFtbXCJmb2N1c1wiLCBcIkZvY3VzXCJdLCBbXCJibHVyXCIsIFwiQmx1clwiXSwgW1wibW91c2Vkb3duXCIsIFwiTW91c2UgRG93blwiXSwgW1wibW91c2VlbnRlclwiLCBcIk1vdXNlIEVudGVyXCJdLCBbXCJtb3VzZWxlYXZlXCIsIFwiTW91c2UgRXhpdFwiXSwgW1wibW91c2V1cFwiLCBcIk1vdXNlIFVwXCJdLCBbXCJpbnB1dFwiLCBcIkFjdGlvblwiXV0sIGV2ZW50ID0+IGV2ZW50LnRhcmdldC5jaGVja2VkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VsZWN0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwiaW5wdXRcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHN0b3JhZ2Uuc2V0VmFsdWUoaWQsIHtcbiAgICAgICAgICB2YWx1ZTogZ2V0VmFsdWUoZXZlbnQpXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fc2V0QmFja2dyb3VuZENvbG9yKHNlbGVjdEVsZW1lbnQpO1xuXG4gICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQoc2VsZWN0RWxlbWVudCk7XG4gICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICB9XG5cbn1cblxuY2xhc3MgUG9wdXBBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIGNvbnN0IGlzUmVuZGVyYWJsZSA9ICEhKHBhcmFtZXRlcnMuZGF0YS50aXRsZU9iaj8uc3RyIHx8IHBhcmFtZXRlcnMuZGF0YS5jb250ZW50c09iaj8uc3RyIHx8IHBhcmFtZXRlcnMuZGF0YS5yaWNoVGV4dD8uc3RyKTtcbiAgICBzdXBlcihwYXJhbWV0ZXJzLCB7XG4gICAgICBpc1JlbmRlcmFibGVcbiAgICB9KTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBJR05PUkVfVFlQRVMgPSBbXCJMaW5lXCIsIFwiU3F1YXJlXCIsIFwiQ2lyY2xlXCIsIFwiUG9seUxpbmVcIiwgXCJQb2x5Z29uXCIsIFwiSW5rXCJdO1xuICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZSA9IFwicG9wdXBBbm5vdGF0aW9uXCI7XG5cbiAgICBpZiAoSUdOT1JFX1RZUEVTLmluY2x1ZGVzKHRoaXMuZGF0YS5wYXJlbnRUeXBlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICAgIH1cblxuICAgIGNvbnN0IHNlbGVjdG9yID0gYFtkYXRhLWFubm90YXRpb24taWQ9XCIke3RoaXMuZGF0YS5wYXJlbnRJZH1cIl1gO1xuICAgIGNvbnN0IHBhcmVudEVsZW1lbnRzID0gdGhpcy5sYXllci5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcblxuICAgIGlmIChwYXJlbnRFbGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgICB9XG5cbiAgICBjb25zdCBwb3B1cCA9IG5ldyBQb3B1cEVsZW1lbnQoe1xuICAgICAgY29udGFpbmVyOiB0aGlzLmNvbnRhaW5lcixcbiAgICAgIHRyaWdnZXI6IEFycmF5LmZyb20ocGFyZW50RWxlbWVudHMpLFxuICAgICAgY29sb3I6IHRoaXMuZGF0YS5jb2xvcixcbiAgICAgIHRpdGxlT2JqOiB0aGlzLmRhdGEudGl0bGVPYmosXG4gICAgICBtb2RpZmljYXRpb25EYXRlOiB0aGlzLmRhdGEubW9kaWZpY2F0aW9uRGF0ZSxcbiAgICAgIGNvbnRlbnRzT2JqOiB0aGlzLmRhdGEuY29udGVudHNPYmosXG4gICAgICByaWNoVGV4dDogdGhpcy5kYXRhLnJpY2hUZXh0XG4gICAgfSk7XG4gICAgY29uc3QgcGFnZSA9IHRoaXMucGFnZTtcblxuICAgIGNvbnN0IHJlY3QgPSBfdXRpbC5VdGlsLm5vcm1hbGl6ZVJlY3QoW3RoaXMuZGF0YS5wYXJlbnRSZWN0WzBdLCBwYWdlLnZpZXdbM10gLSB0aGlzLmRhdGEucGFyZW50UmVjdFsxXSArIHBhZ2Uudmlld1sxXSwgdGhpcy5kYXRhLnBhcmVudFJlY3RbMl0sIHBhZ2Uudmlld1szXSAtIHRoaXMuZGF0YS5wYXJlbnRSZWN0WzNdICsgcGFnZS52aWV3WzFdXSk7XG5cbiAgICBjb25zdCBwb3B1cExlZnQgPSByZWN0WzBdICsgdGhpcy5kYXRhLnBhcmVudFJlY3RbMl0gLSB0aGlzLmRhdGEucGFyZW50UmVjdFswXTtcbiAgICBjb25zdCBwb3B1cFRvcCA9IHJlY3RbMV07XG4gICAgdGhpcy5jb250YWluZXIuc3R5bGUudHJhbnNmb3JtT3JpZ2luID0gYCR7LXBvcHVwTGVmdH1weCAkey1wb3B1cFRvcH1weGA7XG4gICAgdGhpcy5jb250YWluZXIuc3R5bGUubGVmdCA9IGAke3BvcHVwTGVmdH1weGA7XG4gICAgdGhpcy5jb250YWluZXIuc3R5bGUudG9wID0gYCR7cG9wdXBUb3B9cHhgO1xuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHBvcHVwLnJlbmRlcigpKTtcbiAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gIH1cblxufVxuXG5jbGFzcyBQb3B1cEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgdGhpcy5jb250YWluZXIgPSBwYXJhbWV0ZXJzLmNvbnRhaW5lcjtcbiAgICB0aGlzLnRyaWdnZXIgPSBwYXJhbWV0ZXJzLnRyaWdnZXI7XG4gICAgdGhpcy5jb2xvciA9IHBhcmFtZXRlcnMuY29sb3I7XG4gICAgdGhpcy50aXRsZU9iaiA9IHBhcmFtZXRlcnMudGl0bGVPYmo7XG4gICAgdGhpcy5tb2RpZmljYXRpb25EYXRlID0gcGFyYW1ldGVycy5tb2RpZmljYXRpb25EYXRlO1xuICAgIHRoaXMuY29udGVudHNPYmogPSBwYXJhbWV0ZXJzLmNvbnRlbnRzT2JqO1xuICAgIHRoaXMucmljaFRleHQgPSBwYXJhbWV0ZXJzLnJpY2hUZXh0O1xuICAgIHRoaXMuaGlkZVdyYXBwZXIgPSBwYXJhbWV0ZXJzLmhpZGVXcmFwcGVyIHx8IGZhbHNlO1xuICAgIHRoaXMucGlubmVkID0gZmFsc2U7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgQkFDS0dST1VORF9FTkxJR0hUID0gMC43O1xuICAgIGNvbnN0IHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHdyYXBwZXIuY2xhc3NOYW1lID0gXCJwb3B1cFdyYXBwZXJcIjtcbiAgICB0aGlzLmhpZGVFbGVtZW50ID0gdGhpcy5oaWRlV3JhcHBlciA/IHdyYXBwZXIgOiB0aGlzLmNvbnRhaW5lcjtcbiAgICB0aGlzLmhpZGVFbGVtZW50LmhpZGRlbiA9IHRydWU7XG4gICAgY29uc3QgcG9wdXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHBvcHVwLmNsYXNzTmFtZSA9IFwicG9wdXBcIjtcbiAgICBjb25zdCBjb2xvciA9IHRoaXMuY29sb3I7XG5cbiAgICBpZiAoY29sb3IpIHtcbiAgICAgIGNvbnN0IHIgPSBCQUNLR1JPVU5EX0VOTElHSFQgKiAoMjU1IC0gY29sb3JbMF0pICsgY29sb3JbMF07XG4gICAgICBjb25zdCBnID0gQkFDS0dST1VORF9FTkxJR0hUICogKDI1NSAtIGNvbG9yWzFdKSArIGNvbG9yWzFdO1xuICAgICAgY29uc3QgYiA9IEJBQ0tHUk9VTkRfRU5MSUdIVCAqICgyNTUgLSBjb2xvclsyXSkgKyBjb2xvclsyXTtcbiAgICAgIHBvcHVwLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IF91dGlsLlV0aWwubWFrZUhleENvbG9yKHIgfCAwLCBnIHwgMCwgYiB8IDApO1xuICAgIH1cblxuICAgIGNvbnN0IHRpdGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImgxXCIpO1xuICAgIHRpdGxlLmRpciA9IHRoaXMudGl0bGVPYmouZGlyO1xuICAgIHRpdGxlLnRleHRDb250ZW50ID0gdGhpcy50aXRsZU9iai5zdHI7XG4gICAgcG9wdXAuYXBwZW5kQ2hpbGQodGl0bGUpO1xuXG4gICAgY29uc3QgZGF0ZU9iamVjdCA9IF9kaXNwbGF5X3V0aWxzLlBERkRhdGVTdHJpbmcudG9EYXRlT2JqZWN0KHRoaXMubW9kaWZpY2F0aW9uRGF0ZSk7XG5cbiAgICBpZiAoZGF0ZU9iamVjdCkge1xuICAgICAgY29uc3QgbW9kaWZpY2F0aW9uRGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuICAgICAgbW9kaWZpY2F0aW9uRGF0ZS5jbGFzc05hbWUgPSBcInBvcHVwRGF0ZVwiO1xuICAgICAgbW9kaWZpY2F0aW9uRGF0ZS50ZXh0Q29udGVudCA9IFwie3tkYXRlfX0sIHt7dGltZX19XCI7XG4gICAgICBtb2RpZmljYXRpb25EYXRlLmRhdGFzZXQubDEwbklkID0gXCJhbm5vdGF0aW9uX2RhdGVfc3RyaW5nXCI7XG4gICAgICBtb2RpZmljYXRpb25EYXRlLmRhdGFzZXQubDEwbkFyZ3MgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGRhdGU6IGRhdGVPYmplY3QudG9Mb2NhbGVEYXRlU3RyaW5nKCksXG4gICAgICAgIHRpbWU6IGRhdGVPYmplY3QudG9Mb2NhbGVUaW1lU3RyaW5nKClcbiAgICAgIH0pO1xuICAgICAgcG9wdXAuYXBwZW5kQ2hpbGQobW9kaWZpY2F0aW9uRGF0ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmljaFRleHQ/LnN0ciAmJiAoIXRoaXMuY29udGVudHNPYmo/LnN0ciB8fCB0aGlzLmNvbnRlbnRzT2JqLnN0ciA9PT0gdGhpcy5yaWNoVGV4dC5zdHIpKSB7XG4gICAgICBfeGZhX2xheWVyLlhmYUxheWVyLnJlbmRlcih7XG4gICAgICAgIHhmYUh0bWw6IHRoaXMucmljaFRleHQuaHRtbCxcbiAgICAgICAgaW50ZW50OiBcInJpY2hUZXh0XCIsXG4gICAgICAgIGRpdjogcG9wdXBcbiAgICAgIH0pO1xuXG4gICAgICBwb3B1cC5sYXN0Q2hpbGQuY2xhc3NOYW1lID0gXCJyaWNoVGV4dCBwb3B1cENvbnRlbnRcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY29udGVudHMgPSB0aGlzLl9mb3JtYXRDb250ZW50cyh0aGlzLmNvbnRlbnRzT2JqKTtcblxuICAgICAgcG9wdXAuYXBwZW5kQ2hpbGQoY29udGVudHMpO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnRyaWdnZXIpKSB7XG4gICAgICB0aGlzLnRyaWdnZXIgPSBbdGhpcy50cmlnZ2VyXTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdGhpcy50cmlnZ2VyKSB7XG4gICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLl90b2dnbGUuYmluZCh0aGlzKSk7XG4gICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW92ZXJcIiwgdGhpcy5fc2hvdy5iaW5kKHRoaXMsIGZhbHNlKSk7XG4gICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW91dFwiLCB0aGlzLl9oaWRlLmJpbmQodGhpcywgZmFsc2UpKTtcbiAgICB9XG5cbiAgICBwb3B1cC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5faGlkZS5iaW5kKHRoaXMsIHRydWUpKTtcbiAgICB3cmFwcGVyLmFwcGVuZENoaWxkKHBvcHVwKTtcbiAgICByZXR1cm4gd3JhcHBlcjtcbiAgfVxuXG4gIF9mb3JtYXRDb250ZW50cyh7XG4gICAgc3RyLFxuICAgIGRpclxuICB9KSB7XG4gICAgY29uc3QgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJwXCIpO1xuICAgIHAuY2xhc3NOYW1lID0gXCJwb3B1cENvbnRlbnRcIjtcbiAgICBwLmRpciA9IGRpcjtcbiAgICBjb25zdCBsaW5lcyA9IHN0ci5zcGxpdCgvKD86XFxyXFxuP3xcXG4pLyk7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBsaW5lcy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICBjb25zdCBsaW5lID0gbGluZXNbaV07XG4gICAgICBwLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGxpbmUpKTtcblxuICAgICAgaWYgKGkgPCBpaSAtIDEpIHtcbiAgICAgICAgcC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYnJcIikpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwO1xuICB9XG5cbiAgX3RvZ2dsZSgpIHtcbiAgICBpZiAodGhpcy5waW5uZWQpIHtcbiAgICAgIHRoaXMuX2hpZGUodHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3Nob3codHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgX3Nob3cocGluID0gZmFsc2UpIHtcbiAgICBpZiAocGluKSB7XG4gICAgICB0aGlzLnBpbm5lZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGlkZUVsZW1lbnQuaGlkZGVuKSB7XG4gICAgICB0aGlzLmhpZGVFbGVtZW50LmhpZGRlbiA9IGZhbHNlO1xuICAgICAgdGhpcy5jb250YWluZXIuc3R5bGUuekluZGV4ICs9IDE7XG4gICAgfVxuICB9XG5cbiAgX2hpZGUodW5waW4gPSB0cnVlKSB7XG4gICAgaWYgKHVucGluKSB7XG4gICAgICB0aGlzLnBpbm5lZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5oaWRlRWxlbWVudC5oaWRkZW4gJiYgIXRoaXMucGlubmVkKSB7XG4gICAgICB0aGlzLmhpZGVFbGVtZW50LmhpZGRlbiA9IHRydWU7XG4gICAgICB0aGlzLmNvbnRhaW5lci5zdHlsZS56SW5kZXggLT0gMTtcbiAgICB9XG4gIH1cblxufVxuXG5jbGFzcyBGcmVlVGV4dEFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgQW5ub3RhdGlvbkVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgaXNSZW5kZXJhYmxlID0gISEocGFyYW1ldGVycy5kYXRhLmhhc1BvcHVwIHx8IHBhcmFtZXRlcnMuZGF0YS50aXRsZU9iaj8uc3RyIHx8IHBhcmFtZXRlcnMuZGF0YS5jb250ZW50c09iaj8uc3RyIHx8IHBhcmFtZXRlcnMuZGF0YS5yaWNoVGV4dD8uc3RyKTtcbiAgICBzdXBlcihwYXJhbWV0ZXJzLCB7XG4gICAgICBpc1JlbmRlcmFibGUsXG4gICAgICBpZ25vcmVCb3JkZXI6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWUgPSBcImZyZWVUZXh0QW5ub3RhdGlvblwiO1xuXG4gICAgaWYgKCF0aGlzLmRhdGEuaGFzUG9wdXApIHtcbiAgICAgIHRoaXMuX2NyZWF0ZVBvcHVwKG51bGwsIHRoaXMuZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICB9XG5cbn1cblxuY2xhc3MgTGluZUFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgQW5ub3RhdGlvbkVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgaXNSZW5kZXJhYmxlID0gISEocGFyYW1ldGVycy5kYXRhLmhhc1BvcHVwIHx8IHBhcmFtZXRlcnMuZGF0YS50aXRsZU9iaj8uc3RyIHx8IHBhcmFtZXRlcnMuZGF0YS5jb250ZW50c09iaj8uc3RyIHx8IHBhcmFtZXRlcnMuZGF0YS5yaWNoVGV4dD8uc3RyKTtcbiAgICBzdXBlcihwYXJhbWV0ZXJzLCB7XG4gICAgICBpc1JlbmRlcmFibGUsXG4gICAgICBpZ25vcmVCb3JkZXI6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWUgPSBcImxpbmVBbm5vdGF0aW9uXCI7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICBjb25zdCB3aWR0aCA9IGRhdGEucmVjdFsyXSAtIGRhdGEucmVjdFswXTtcbiAgICBjb25zdCBoZWlnaHQgPSBkYXRhLnJlY3RbM10gLSBkYXRhLnJlY3RbMV07XG4gICAgY29uc3Qgc3ZnID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICBjb25zdCBsaW5lID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6bGluZVwiKTtcbiAgICBsaW5lLnNldEF0dHJpYnV0ZShcIngxXCIsIGRhdGEucmVjdFsyXSAtIGRhdGEubGluZUNvb3JkaW5hdGVzWzBdKTtcbiAgICBsaW5lLnNldEF0dHJpYnV0ZShcInkxXCIsIGRhdGEucmVjdFszXSAtIGRhdGEubGluZUNvb3JkaW5hdGVzWzFdKTtcbiAgICBsaW5lLnNldEF0dHJpYnV0ZShcIngyXCIsIGRhdGEucmVjdFsyXSAtIGRhdGEubGluZUNvb3JkaW5hdGVzWzJdKTtcbiAgICBsaW5lLnNldEF0dHJpYnV0ZShcInkyXCIsIGRhdGEucmVjdFszXSAtIGRhdGEubGluZUNvb3JkaW5hdGVzWzNdKTtcbiAgICBsaW5lLnNldEF0dHJpYnV0ZShcInN0cm9rZS13aWR0aFwiLCBkYXRhLmJvcmRlclN0eWxlLndpZHRoIHx8IDEpO1xuICAgIGxpbmUuc2V0QXR0cmlidXRlKFwic3Ryb2tlXCIsIFwidHJhbnNwYXJlbnRcIik7XG4gICAgbGluZS5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIFwidHJhbnNwYXJlbnRcIik7XG4gICAgc3ZnLmFwcGVuZENoaWxkKGxpbmUpO1xuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZChzdmcpO1xuXG4gICAgdGhpcy5fY3JlYXRlUG9wdXAobGluZSwgZGF0YSk7XG5cbiAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gIH1cblxufVxuXG5jbGFzcyBTcXVhcmVBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIGNvbnN0IGlzUmVuZGVyYWJsZSA9ICEhKHBhcmFtZXRlcnMuZGF0YS5oYXNQb3B1cCB8fCBwYXJhbWV0ZXJzLmRhdGEudGl0bGVPYmo/LnN0ciB8fCBwYXJhbWV0ZXJzLmRhdGEuY29udGVudHNPYmo/LnN0ciB8fCBwYXJhbWV0ZXJzLmRhdGEucmljaFRleHQ/LnN0cik7XG4gICAgc3VwZXIocGFyYW1ldGVycywge1xuICAgICAgaXNSZW5kZXJhYmxlLFxuICAgICAgaWdub3JlQm9yZGVyOiB0cnVlXG4gICAgfSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gXCJzcXVhcmVBbm5vdGF0aW9uXCI7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICBjb25zdCB3aWR0aCA9IGRhdGEucmVjdFsyXSAtIGRhdGEucmVjdFswXTtcbiAgICBjb25zdCBoZWlnaHQgPSBkYXRhLnJlY3RbM10gLSBkYXRhLnJlY3RbMV07XG4gICAgY29uc3Qgc3ZnID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICBjb25zdCBib3JkZXJXaWR0aCA9IGRhdGEuYm9yZGVyU3R5bGUud2lkdGg7XG4gICAgY29uc3Qgc3F1YXJlID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6cmVjdFwiKTtcbiAgICBzcXVhcmUuc2V0QXR0cmlidXRlKFwieFwiLCBib3JkZXJXaWR0aCAvIDIpO1xuICAgIHNxdWFyZS5zZXRBdHRyaWJ1dGUoXCJ5XCIsIGJvcmRlcldpZHRoIC8gMik7XG4gICAgc3F1YXJlLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIHdpZHRoIC0gYm9yZGVyV2lkdGgpO1xuICAgIHNxdWFyZS5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgaGVpZ2h0IC0gYm9yZGVyV2lkdGgpO1xuICAgIHNxdWFyZS5zZXRBdHRyaWJ1dGUoXCJzdHJva2Utd2lkdGhcIiwgYm9yZGVyV2lkdGggfHwgMSk7XG4gICAgc3F1YXJlLnNldEF0dHJpYnV0ZShcInN0cm9rZVwiLCBcInRyYW5zcGFyZW50XCIpO1xuICAgIHNxdWFyZS5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIFwidHJhbnNwYXJlbnRcIik7XG4gICAgc3ZnLmFwcGVuZENoaWxkKHNxdWFyZSk7XG4gICAgdGhpcy5jb250YWluZXIuYXBwZW5kKHN2Zyk7XG5cbiAgICB0aGlzLl9jcmVhdGVQb3B1cChzcXVhcmUsIGRhdGEpO1xuXG4gICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICB9XG5cbn1cblxuY2xhc3MgQ2lyY2xlQW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBBbm5vdGF0aW9uRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBpc1JlbmRlcmFibGUgPSAhIShwYXJhbWV0ZXJzLmRhdGEuaGFzUG9wdXAgfHwgcGFyYW1ldGVycy5kYXRhLnRpdGxlT2JqPy5zdHIgfHwgcGFyYW1ldGVycy5kYXRhLmNvbnRlbnRzT2JqPy5zdHIgfHwgcGFyYW1ldGVycy5kYXRhLnJpY2hUZXh0Py5zdHIpO1xuICAgIHN1cGVyKHBhcmFtZXRlcnMsIHtcbiAgICAgIGlzUmVuZGVyYWJsZSxcbiAgICAgIGlnbm9yZUJvcmRlcjogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZSA9IFwiY2lyY2xlQW5ub3RhdGlvblwiO1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgY29uc3Qgd2lkdGggPSBkYXRhLnJlY3RbMl0gLSBkYXRhLnJlY3RbMF07XG4gICAgY29uc3QgaGVpZ2h0ID0gZGF0YS5yZWN0WzNdIC0gZGF0YS5yZWN0WzFdO1xuICAgIGNvbnN0IHN2ZyA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUod2lkdGgsIGhlaWdodCk7XG4gICAgY29uc3QgYm9yZGVyV2lkdGggPSBkYXRhLmJvcmRlclN0eWxlLndpZHRoO1xuICAgIGNvbnN0IGNpcmNsZSA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOmVsbGlwc2VcIik7XG4gICAgY2lyY2xlLnNldEF0dHJpYnV0ZShcImN4XCIsIHdpZHRoIC8gMik7XG4gICAgY2lyY2xlLnNldEF0dHJpYnV0ZShcImN5XCIsIGhlaWdodCAvIDIpO1xuICAgIGNpcmNsZS5zZXRBdHRyaWJ1dGUoXCJyeFwiLCB3aWR0aCAvIDIgLSBib3JkZXJXaWR0aCAvIDIpO1xuICAgIGNpcmNsZS5zZXRBdHRyaWJ1dGUoXCJyeVwiLCBoZWlnaHQgLyAyIC0gYm9yZGVyV2lkdGggLyAyKTtcbiAgICBjaXJjbGUuc2V0QXR0cmlidXRlKFwic3Ryb2tlLXdpZHRoXCIsIGJvcmRlcldpZHRoIHx8IDEpO1xuICAgIGNpcmNsZS5zZXRBdHRyaWJ1dGUoXCJzdHJva2VcIiwgXCJ0cmFuc3BhcmVudFwiKTtcbiAgICBjaXJjbGUuc2V0QXR0cmlidXRlKFwiZmlsbFwiLCBcInRyYW5zcGFyZW50XCIpO1xuICAgIHN2Zy5hcHBlbmRDaGlsZChjaXJjbGUpO1xuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZChzdmcpO1xuXG4gICAgdGhpcy5fY3JlYXRlUG9wdXAoY2lyY2xlLCBkYXRhKTtcblxuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgfVxuXG59XG5cbmNsYXNzIFBvbHlsaW5lQW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBBbm5vdGF0aW9uRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBpc1JlbmRlcmFibGUgPSAhIShwYXJhbWV0ZXJzLmRhdGEuaGFzUG9wdXAgfHwgcGFyYW1ldGVycy5kYXRhLnRpdGxlT2JqPy5zdHIgfHwgcGFyYW1ldGVycy5kYXRhLmNvbnRlbnRzT2JqPy5zdHIgfHwgcGFyYW1ldGVycy5kYXRhLnJpY2hUZXh0Py5zdHIpO1xuICAgIHN1cGVyKHBhcmFtZXRlcnMsIHtcbiAgICAgIGlzUmVuZGVyYWJsZSxcbiAgICAgIGlnbm9yZUJvcmRlcjogdHJ1ZVxuICAgIH0pO1xuICAgIHRoaXMuY29udGFpbmVyQ2xhc3NOYW1lID0gXCJwb2x5bGluZUFubm90YXRpb25cIjtcbiAgICB0aGlzLnN2Z0VsZW1lbnROYW1lID0gXCJzdmc6cG9seWxpbmVcIjtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWUgPSB0aGlzLmNvbnRhaW5lckNsYXNzTmFtZTtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhO1xuICAgIGNvbnN0IHdpZHRoID0gZGF0YS5yZWN0WzJdIC0gZGF0YS5yZWN0WzBdO1xuICAgIGNvbnN0IGhlaWdodCA9IGRhdGEucmVjdFszXSAtIGRhdGEucmVjdFsxXTtcbiAgICBjb25zdCBzdmcgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlKHdpZHRoLCBoZWlnaHQpO1xuICAgIGxldCBwb2ludHMgPSBbXTtcblxuICAgIGZvciAoY29uc3QgY29vcmRpbmF0ZSBvZiBkYXRhLnZlcnRpY2VzKSB7XG4gICAgICBjb25zdCB4ID0gY29vcmRpbmF0ZS54IC0gZGF0YS5yZWN0WzBdO1xuICAgICAgY29uc3QgeSA9IGRhdGEucmVjdFszXSAtIGNvb3JkaW5hdGUueTtcbiAgICAgIHBvaW50cy5wdXNoKHggKyBcIixcIiArIHkpO1xuICAgIH1cblxuICAgIHBvaW50cyA9IHBvaW50cy5qb2luKFwiIFwiKTtcbiAgICBjb25zdCBwb2x5bGluZSA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KHRoaXMuc3ZnRWxlbWVudE5hbWUpO1xuICAgIHBvbHlsaW5lLnNldEF0dHJpYnV0ZShcInBvaW50c1wiLCBwb2ludHMpO1xuICAgIHBvbHlsaW5lLnNldEF0dHJpYnV0ZShcInN0cm9rZS13aWR0aFwiLCBkYXRhLmJvcmRlclN0eWxlLndpZHRoIHx8IDEpO1xuICAgIHBvbHlsaW5lLnNldEF0dHJpYnV0ZShcInN0cm9rZVwiLCBcInRyYW5zcGFyZW50XCIpO1xuICAgIHBvbHlsaW5lLnNldEF0dHJpYnV0ZShcImZpbGxcIiwgXCJ0cmFuc3BhcmVudFwiKTtcbiAgICBzdmcuYXBwZW5kQ2hpbGQocG9seWxpbmUpO1xuICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZChzdmcpO1xuXG4gICAgdGhpcy5fY3JlYXRlUG9wdXAocG9seWxpbmUsIGRhdGEpO1xuXG4gICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICB9XG5cbn1cblxuY2xhc3MgUG9seWdvbkFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgUG9seWxpbmVBbm5vdGF0aW9uRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcbiAgICBzdXBlcihwYXJhbWV0ZXJzKTtcbiAgICB0aGlzLmNvbnRhaW5lckNsYXNzTmFtZSA9IFwicG9seWdvbkFubm90YXRpb25cIjtcbiAgICB0aGlzLnN2Z0VsZW1lbnROYW1lID0gXCJzdmc6cG9seWdvblwiO1xuICB9XG5cbn1cblxuY2xhc3MgQ2FyZXRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIGNvbnN0IGlzUmVuZGVyYWJsZSA9ICEhKHBhcmFtZXRlcnMuZGF0YS5oYXNQb3B1cCB8fCBwYXJhbWV0ZXJzLmRhdGEudGl0bGVPYmo/LnN0ciB8fCBwYXJhbWV0ZXJzLmRhdGEuY29udGVudHNPYmo/LnN0ciB8fCBwYXJhbWV0ZXJzLmRhdGEucmljaFRleHQ/LnN0cik7XG4gICAgc3VwZXIocGFyYW1ldGVycywge1xuICAgICAgaXNSZW5kZXJhYmxlLFxuICAgICAgaWdub3JlQm9yZGVyOiB0cnVlXG4gICAgfSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gXCJjYXJldEFubm90YXRpb25cIjtcblxuICAgIGlmICghdGhpcy5kYXRhLmhhc1BvcHVwKSB7XG4gICAgICB0aGlzLl9jcmVhdGVQb3B1cChudWxsLCB0aGlzLmRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgfVxuXG59XG5cbmNsYXNzIElua0Fubm90YXRpb25FbGVtZW50IGV4dGVuZHMgQW5ub3RhdGlvbkVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgaXNSZW5kZXJhYmxlID0gISEocGFyYW1ldGVycy5kYXRhLmhhc1BvcHVwIHx8IHBhcmFtZXRlcnMuZGF0YS50aXRsZU9iaj8uc3RyIHx8IHBhcmFtZXRlcnMuZGF0YS5jb250ZW50c09iaj8uc3RyIHx8IHBhcmFtZXRlcnMuZGF0YS5yaWNoVGV4dD8uc3RyKTtcbiAgICBzdXBlcihwYXJhbWV0ZXJzLCB7XG4gICAgICBpc1JlbmRlcmFibGUsXG4gICAgICBpZ25vcmVCb3JkZXI6IHRydWVcbiAgICB9KTtcbiAgICB0aGlzLmNvbnRhaW5lckNsYXNzTmFtZSA9IFwiaW5rQW5ub3RhdGlvblwiO1xuICAgIHRoaXMuc3ZnRWxlbWVudE5hbWUgPSBcInN2Zzpwb2x5bGluZVwiO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZSA9IHRoaXMuY29udGFpbmVyQ2xhc3NOYW1lO1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgY29uc3Qgd2lkdGggPSBkYXRhLnJlY3RbMl0gLSBkYXRhLnJlY3RbMF07XG4gICAgY29uc3QgaGVpZ2h0ID0gZGF0YS5yZWN0WzNdIC0gZGF0YS5yZWN0WzFdO1xuICAgIGNvbnN0IHN2ZyA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUod2lkdGgsIGhlaWdodCk7XG5cbiAgICBmb3IgKGNvbnN0IGlua0xpc3Qgb2YgZGF0YS5pbmtMaXN0cykge1xuICAgICAgbGV0IHBvaW50cyA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IGNvb3JkaW5hdGUgb2YgaW5rTGlzdCkge1xuICAgICAgICBjb25zdCB4ID0gY29vcmRpbmF0ZS54IC0gZGF0YS5yZWN0WzBdO1xuICAgICAgICBjb25zdCB5ID0gZGF0YS5yZWN0WzNdIC0gY29vcmRpbmF0ZS55O1xuICAgICAgICBwb2ludHMucHVzaChgJHt4fSwke3l9YCk7XG4gICAgICB9XG5cbiAgICAgIHBvaW50cyA9IHBvaW50cy5qb2luKFwiIFwiKTtcbiAgICAgIGNvbnN0IHBvbHlsaW5lID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQodGhpcy5zdmdFbGVtZW50TmFtZSk7XG4gICAgICBwb2x5bGluZS5zZXRBdHRyaWJ1dGUoXCJwb2ludHNcIiwgcG9pbnRzKTtcbiAgICAgIHBvbHlsaW5lLnNldEF0dHJpYnV0ZShcInN0cm9rZS13aWR0aFwiLCBkYXRhLmJvcmRlclN0eWxlLndpZHRoIHx8IDEpO1xuICAgICAgcG9seWxpbmUuc2V0QXR0cmlidXRlKFwic3Ryb2tlXCIsIFwidHJhbnNwYXJlbnRcIik7XG4gICAgICBwb2x5bGluZS5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIFwidHJhbnNwYXJlbnRcIik7XG5cbiAgICAgIHRoaXMuX2NyZWF0ZVBvcHVwKHBvbHlsaW5lLCBkYXRhKTtcblxuICAgICAgc3ZnLmFwcGVuZENoaWxkKHBvbHlsaW5lKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmQoc3ZnKTtcbiAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gIH1cblxufVxuXG5jbGFzcyBIaWdobGlnaHRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIGNvbnN0IGlzUmVuZGVyYWJsZSA9ICEhKHBhcmFtZXRlcnMuZGF0YS5oYXNQb3B1cCB8fCBwYXJhbWV0ZXJzLmRhdGEudGl0bGVPYmo/LnN0ciB8fCBwYXJhbWV0ZXJzLmRhdGEuY29udGVudHNPYmo/LnN0ciB8fCBwYXJhbWV0ZXJzLmRhdGEucmljaFRleHQ/LnN0cik7XG4gICAgc3VwZXIocGFyYW1ldGVycywge1xuICAgICAgaXNSZW5kZXJhYmxlLFxuICAgICAgaWdub3JlQm9yZGVyOiB0cnVlLFxuICAgICAgY3JlYXRlUXVhZHJpbGF0ZXJhbHM6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAoIXRoaXMuZGF0YS5oYXNQb3B1cCkge1xuICAgICAgdGhpcy5fY3JlYXRlUG9wdXAobnVsbCwgdGhpcy5kYXRhKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5xdWFkcmlsYXRlcmFscykge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlclF1YWRyaWxhdGVyYWxzKFwiaGlnaGxpZ2h0QW5ub3RhdGlvblwiKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWUgPSBcImhpZ2hsaWdodEFubm90YXRpb25cIjtcbiAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gIH1cblxufVxuXG5jbGFzcyBVbmRlcmxpbmVBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIGNvbnN0IGlzUmVuZGVyYWJsZSA9ICEhKHBhcmFtZXRlcnMuZGF0YS5oYXNQb3B1cCB8fCBwYXJhbWV0ZXJzLmRhdGEudGl0bGVPYmo/LnN0ciB8fCBwYXJhbWV0ZXJzLmRhdGEuY29udGVudHNPYmo/LnN0ciB8fCBwYXJhbWV0ZXJzLmRhdGEucmljaFRleHQ/LnN0cik7XG4gICAgc3VwZXIocGFyYW1ldGVycywge1xuICAgICAgaXNSZW5kZXJhYmxlLFxuICAgICAgaWdub3JlQm9yZGVyOiB0cnVlLFxuICAgICAgY3JlYXRlUXVhZHJpbGF0ZXJhbHM6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAoIXRoaXMuZGF0YS5oYXNQb3B1cCkge1xuICAgICAgdGhpcy5fY3JlYXRlUG9wdXAobnVsbCwgdGhpcy5kYXRhKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5xdWFkcmlsYXRlcmFscykge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlclF1YWRyaWxhdGVyYWxzKFwidW5kZXJsaW5lQW5ub3RhdGlvblwiKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWUgPSBcInVuZGVybGluZUFubm90YXRpb25cIjtcbiAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gIH1cblxufVxuXG5jbGFzcyBTcXVpZ2dseUFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgQW5ub3RhdGlvbkVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgaXNSZW5kZXJhYmxlID0gISEocGFyYW1ldGVycy5kYXRhLmhhc1BvcHVwIHx8IHBhcmFtZXRlcnMuZGF0YS50aXRsZU9iaj8uc3RyIHx8IHBhcmFtZXRlcnMuZGF0YS5jb250ZW50c09iaj8uc3RyIHx8IHBhcmFtZXRlcnMuZGF0YS5yaWNoVGV4dD8uc3RyKTtcbiAgICBzdXBlcihwYXJhbWV0ZXJzLCB7XG4gICAgICBpc1JlbmRlcmFibGUsXG4gICAgICBpZ25vcmVCb3JkZXI6IHRydWUsXG4gICAgICBjcmVhdGVRdWFkcmlsYXRlcmFsczogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICghdGhpcy5kYXRhLmhhc1BvcHVwKSB7XG4gICAgICB0aGlzLl9jcmVhdGVQb3B1cChudWxsLCB0aGlzLmRhdGEpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnF1YWRyaWxhdGVyYWxzKSB7XG4gICAgICByZXR1cm4gdGhpcy5fcmVuZGVyUXVhZHJpbGF0ZXJhbHMoXCJzcXVpZ2dseUFubm90YXRpb25cIik7XG4gICAgfVxuXG4gICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gXCJzcXVpZ2dseUFubm90YXRpb25cIjtcbiAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gIH1cblxufVxuXG5jbGFzcyBTdHJpa2VPdXRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIGNvbnN0IGlzUmVuZGVyYWJsZSA9ICEhKHBhcmFtZXRlcnMuZGF0YS5oYXNQb3B1cCB8fCBwYXJhbWV0ZXJzLmRhdGEudGl0bGVPYmo/LnN0ciB8fCBwYXJhbWV0ZXJzLmRhdGEuY29udGVudHNPYmo/LnN0ciB8fCBwYXJhbWV0ZXJzLmRhdGEucmljaFRleHQ/LnN0cik7XG4gICAgc3VwZXIocGFyYW1ldGVycywge1xuICAgICAgaXNSZW5kZXJhYmxlLFxuICAgICAgaWdub3JlQm9yZGVyOiB0cnVlLFxuICAgICAgY3JlYXRlUXVhZHJpbGF0ZXJhbHM6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAoIXRoaXMuZGF0YS5oYXNQb3B1cCkge1xuICAgICAgdGhpcy5fY3JlYXRlUG9wdXAobnVsbCwgdGhpcy5kYXRhKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5xdWFkcmlsYXRlcmFscykge1xuICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlclF1YWRyaWxhdGVyYWxzKFwic3RyaWtlb3V0QW5ub3RhdGlvblwiKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWUgPSBcInN0cmlrZW91dEFubm90YXRpb25cIjtcbiAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gIH1cblxufVxuXG5jbGFzcyBTdGFtcEFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgQW5ub3RhdGlvbkVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgaXNSZW5kZXJhYmxlID0gISEocGFyYW1ldGVycy5kYXRhLmhhc1BvcHVwIHx8IHBhcmFtZXRlcnMuZGF0YS50aXRsZU9iaj8uc3RyIHx8IHBhcmFtZXRlcnMuZGF0YS5jb250ZW50c09iaj8uc3RyIHx8IHBhcmFtZXRlcnMuZGF0YS5yaWNoVGV4dD8uc3RyKTtcbiAgICBzdXBlcihwYXJhbWV0ZXJzLCB7XG4gICAgICBpc1JlbmRlcmFibGUsXG4gICAgICBpZ25vcmVCb3JkZXI6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWUgPSBcInN0YW1wQW5ub3RhdGlvblwiO1xuXG4gICAgaWYgKCF0aGlzLmRhdGEuaGFzUG9wdXApIHtcbiAgICAgIHRoaXMuX2NyZWF0ZVBvcHVwKG51bGwsIHRoaXMuZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICB9XG5cbn1cblxuY2xhc3MgRmlsZUF0dGFjaG1lbnRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIHN1cGVyKHBhcmFtZXRlcnMsIHtcbiAgICAgIGlzUmVuZGVyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGNvbnN0IHtcbiAgICAgIGZpbGVuYW1lLFxuICAgICAgY29udGVudFxuICAgIH0gPSB0aGlzLmRhdGEuZmlsZTtcbiAgICB0aGlzLmZpbGVuYW1lID0gKDAsIF9kaXNwbGF5X3V0aWxzLmdldEZpbGVuYW1lRnJvbVVybCkoZmlsZW5hbWUpO1xuICAgIHRoaXMuY29udGVudCA9IGNvbnRlbnQ7XG4gICAgdGhpcy5saW5rU2VydmljZS5ldmVudEJ1cz8uZGlzcGF0Y2goXCJmaWxlYXR0YWNobWVudGFubm90YXRpb25cIiwge1xuICAgICAgc291cmNlOiB0aGlzLFxuICAgICAgaWQ6ICgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykoZmlsZW5hbWUpLFxuICAgICAgZmlsZW5hbWUsXG4gICAgICBjb250ZW50XG4gICAgfSk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gXCJmaWxlQXR0YWNobWVudEFubm90YXRpb25cIjtcbiAgICBjb25zdCB0cmlnZ2VyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICB0cmlnZ2VyLnN0eWxlLmhlaWdodCA9IHRoaXMuY29udGFpbmVyLnN0eWxlLmhlaWdodDtcbiAgICB0cmlnZ2VyLnN0eWxlLndpZHRoID0gdGhpcy5jb250YWluZXIuc3R5bGUud2lkdGg7XG4gICAgdHJpZ2dlci5hZGRFdmVudExpc3RlbmVyKFwiZGJsY2xpY2tcIiwgdGhpcy5fZG93bmxvYWQuYmluZCh0aGlzKSk7XG5cbiAgICBpZiAoIXRoaXMuZGF0YS5oYXNQb3B1cCAmJiAodGhpcy5kYXRhLnRpdGxlT2JqPy5zdHIgfHwgdGhpcy5kYXRhLmNvbnRlbnRzT2JqPy5zdHIgfHwgdGhpcy5kYXRhLnJpY2hUZXh0KSkge1xuICAgICAgdGhpcy5fY3JlYXRlUG9wdXAodHJpZ2dlciwgdGhpcy5kYXRhKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0cmlnZ2VyKTtcbiAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gIH1cblxuICBfZG93bmxvYWQoKSB7XG4gICAgdGhpcy5kb3dubG9hZE1hbmFnZXI/Lm9wZW5PckRvd25sb2FkRGF0YSh0aGlzLmNvbnRhaW5lciwgdGhpcy5jb250ZW50LCB0aGlzLmZpbGVuYW1lKTtcbiAgfVxuXG59XG5cbmNsYXNzIEFubm90YXRpb25MYXllciB7XG4gIHN0YXRpYyByZW5kZXIocGFyYW1ldGVycykge1xuICAgIGNvbnN0IHNvcnRlZEFubm90YXRpb25zID0gW10sXG4gICAgICAgICAgcG9wdXBBbm5vdGF0aW9ucyA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBkYXRhIG9mIHBhcmFtZXRlcnMuYW5ub3RhdGlvbnMpIHtcbiAgICAgIGlmICghZGF0YSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuYW5ub3RhdGlvblR5cGUgPT09IF91dGlsLkFubm90YXRpb25UeXBlLlBPUFVQKSB7XG4gICAgICAgIHBvcHVwQW5ub3RhdGlvbnMucHVzaChkYXRhKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHNvcnRlZEFubm90YXRpb25zLnB1c2goZGF0YSk7XG4gICAgfVxuXG4gICAgaWYgKHBvcHVwQW5ub3RhdGlvbnMubGVuZ3RoKSB7XG4gICAgICBzb3J0ZWRBbm5vdGF0aW9ucy5wdXNoKC4uLnBvcHVwQW5ub3RhdGlvbnMpO1xuICAgIH1cblxuICAgIGNvbnN0IGRpdiA9IHBhcmFtZXRlcnMuZGl2O1xuXG4gICAgZm9yIChjb25zdCBkYXRhIG9mIHNvcnRlZEFubm90YXRpb25zKSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gQW5ub3RhdGlvbkVsZW1lbnRGYWN0b3J5LmNyZWF0ZSh7XG4gICAgICAgIGRhdGEsXG4gICAgICAgIGxheWVyOiBkaXYsXG4gICAgICAgIHBhZ2U6IHBhcmFtZXRlcnMucGFnZSxcbiAgICAgICAgdmlld3BvcnQ6IHBhcmFtZXRlcnMudmlld3BvcnQsXG4gICAgICAgIGxpbmtTZXJ2aWNlOiBwYXJhbWV0ZXJzLmxpbmtTZXJ2aWNlLFxuICAgICAgICBkb3dubG9hZE1hbmFnZXI6IHBhcmFtZXRlcnMuZG93bmxvYWRNYW5hZ2VyLFxuICAgICAgICBpbWFnZVJlc291cmNlc1BhdGg6IHBhcmFtZXRlcnMuaW1hZ2VSZXNvdXJjZXNQYXRoIHx8IFwiXCIsXG4gICAgICAgIHJlbmRlckZvcm1zOiBwYXJhbWV0ZXJzLnJlbmRlckZvcm1zICE9PSBmYWxzZSxcbiAgICAgICAgc3ZnRmFjdG9yeTogbmV3IF9kaXNwbGF5X3V0aWxzLkRPTVNWR0ZhY3RvcnkoKSxcbiAgICAgICAgYW5ub3RhdGlvblN0b3JhZ2U6IHBhcmFtZXRlcnMuYW5ub3RhdGlvblN0b3JhZ2UgfHwgbmV3IF9hbm5vdGF0aW9uX3N0b3JhZ2UuQW5ub3RhdGlvblN0b3JhZ2UoKSxcbiAgICAgICAgZW5hYmxlU2NyaXB0aW5nOiBwYXJhbWV0ZXJzLmVuYWJsZVNjcmlwdGluZyxcbiAgICAgICAgaGFzSlNBY3Rpb25zOiBwYXJhbWV0ZXJzLmhhc0pTQWN0aW9ucyxcbiAgICAgICAgZmllbGRPYmplY3RzOiBwYXJhbWV0ZXJzLmZpZWxkT2JqZWN0cyxcbiAgICAgICAgbW91c2VTdGF0ZTogcGFyYW1ldGVycy5tb3VzZVN0YXRlIHx8IHtcbiAgICAgICAgICBpc0Rvd246IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZWxlbWVudC5pc1JlbmRlcmFibGUpIHtcbiAgICAgICAgY29uc3QgcmVuZGVyZWQgPSBlbGVtZW50LnJlbmRlcigpO1xuXG4gICAgICAgIGlmIChkYXRhLmhpZGRlbikge1xuICAgICAgICAgIHJlbmRlcmVkLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVuZGVyZWQpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCByZW5kZXJlZEVsZW1lbnQgb2YgcmVuZGVyZWQpIHtcbiAgICAgICAgICAgIGRpdi5hcHBlbmRDaGlsZChyZW5kZXJlZEVsZW1lbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFBvcHVwQW5ub3RhdGlvbkVsZW1lbnQpIHtcbiAgICAgICAgICAgIGRpdi5wcmVwZW5kKHJlbmRlcmVkKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGl2LmFwcGVuZENoaWxkKHJlbmRlcmVkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLiNzZXRBbm5vdGF0aW9uQ2FudmFzTWFwKGRpdiwgcGFyYW1ldGVycy5hbm5vdGF0aW9uQ2FudmFzTWFwKTtcbiAgfVxuXG4gIHN0YXRpYyB1cGRhdGUocGFyYW1ldGVycykge1xuICAgIGNvbnN0IHtcbiAgICAgIHBhZ2UsXG4gICAgICB2aWV3cG9ydCxcbiAgICAgIGFubm90YXRpb25zLFxuICAgICAgYW5ub3RhdGlvbkNhbnZhc01hcCxcbiAgICAgIGRpdlxuICAgIH0gPSBwYXJhbWV0ZXJzO1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IHZpZXdwb3J0LnRyYW5zZm9ybTtcbiAgICBjb25zdCBtYXRyaXggPSBgbWF0cml4KCR7dHJhbnNmb3JtLmpvaW4oXCIsXCIpfSlgO1xuICAgIGxldCBzY2FsZSwgb3duTWF0cml4O1xuXG4gICAgZm9yIChjb25zdCBkYXRhIG9mIGFubm90YXRpb25zKSB7XG4gICAgICBjb25zdCBlbGVtZW50cyA9IGRpdi5xdWVyeVNlbGVjdG9yQWxsKGBbZGF0YS1hbm5vdGF0aW9uLWlkPVwiJHtkYXRhLmlkfVwiXWApO1xuXG4gICAgICBpZiAoZWxlbWVudHMpIHtcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7XG4gICAgICAgICAgaWYgKGRhdGEuaGFzT3duQ2FudmFzKSB7XG4gICAgICAgICAgICBjb25zdCByZWN0ID0gX3V0aWwuVXRpbC5ub3JtYWxpemVSZWN0KFtkYXRhLnJlY3RbMF0sIHBhZ2Uudmlld1szXSAtIGRhdGEucmVjdFsxXSArIHBhZ2Uudmlld1sxXSwgZGF0YS5yZWN0WzJdLCBwYWdlLnZpZXdbM10gLSBkYXRhLnJlY3RbM10gKyBwYWdlLnZpZXdbMV1dKTtcblxuICAgICAgICAgICAgaWYgKCFvd25NYXRyaXgpIHtcbiAgICAgICAgICAgICAgc2NhbGUgPSBNYXRoLmFicyh0cmFuc2Zvcm1bMF0gfHwgdHJhbnNmb3JtWzFdKTtcbiAgICAgICAgICAgICAgY29uc3Qgb3duVHJhbnNmb3JtID0gdHJhbnNmb3JtLnNsaWNlKCk7XG5cbiAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICAgICAgICAgICAgICBvd25UcmFuc2Zvcm1baV0gPSBNYXRoLnNpZ24ob3duVHJhbnNmb3JtW2ldKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIG93bk1hdHJpeCA9IGBtYXRyaXgoJHtvd25UcmFuc2Zvcm0uam9pbihcIixcIil9KWA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGxlZnQgPSByZWN0WzBdICogc2NhbGU7XG4gICAgICAgICAgICBjb25zdCB0b3AgPSByZWN0WzFdICogc2NhbGU7XG4gICAgICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtsZWZ0fXB4YDtcbiAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUudG9wID0gYCR7dG9wfXB4YDtcbiAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUudHJhbnNmb3JtT3JpZ2luID0gYCR7LWxlZnR9cHggJHstdG9wfXB4YDtcbiAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gb3duTWF0cml4O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9IG1hdHJpeDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLiNzZXRBbm5vdGF0aW9uQ2FudmFzTWFwKGRpdiwgYW5ub3RhdGlvbkNhbnZhc01hcCk7XG4gICAgZGl2LmhpZGRlbiA9IGZhbHNlO1xuICB9XG5cbiAgc3RhdGljICNzZXRBbm5vdGF0aW9uQ2FudmFzTWFwKGRpdiwgYW5ub3RhdGlvbkNhbnZhc01hcCkge1xuICAgIGlmICghYW5ub3RhdGlvbkNhbnZhc01hcCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2lkLCBjYW52YXNdIG9mIGFubm90YXRpb25DYW52YXNNYXApIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBkaXYucXVlcnlTZWxlY3RvcihgW2RhdGEtYW5ub3RhdGlvbi1pZD1cIiR7aWR9XCJdYCk7XG5cbiAgICAgIGlmICghZWxlbWVudCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qge1xuICAgICAgICBmaXJzdENoaWxkXG4gICAgICB9ID0gZWxlbWVudDtcblxuICAgICAgaWYgKGZpcnN0Q2hpbGQubm9kZU5hbWUgPT09IFwiQ0FOVkFTXCIpIHtcbiAgICAgICAgZWxlbWVudC5yZXBsYWNlQ2hpbGQoY2FudmFzLCBmaXJzdENoaWxkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuaW5zZXJ0QmVmb3JlKGNhbnZhcywgZmlyc3RDaGlsZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYW5ub3RhdGlvbkNhbnZhc01hcC5jbGVhcigpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5Bbm5vdGF0aW9uTGF5ZXIgPSBBbm5vdGF0aW9uTGF5ZXI7XG5cbi8qKiovIH0pLFxuLyogMTkgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMpID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuQ29sb3JDb252ZXJ0ZXJzID0gdm9pZCAwO1xuXG5mdW5jdGlvbiBtYWtlQ29sb3JDb21wKG4pIHtcbiAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgbikpICogMjU1KS50b1N0cmluZygxNikucGFkU3RhcnQoMiwgXCIwXCIpO1xufVxuXG5jbGFzcyBDb2xvckNvbnZlcnRlcnMge1xuICBzdGF0aWMgQ01ZS19HKFtjLCB5LCBtLCBrXSkge1xuICAgIHJldHVybiBbXCJHXCIsIDEgLSBNYXRoLm1pbigxLCAwLjMgKiBjICsgMC41OSAqIG0gKyAwLjExICogeSArIGspXTtcbiAgfVxuXG4gIHN0YXRpYyBHX0NNWUsoW2ddKSB7XG4gICAgcmV0dXJuIFtcIkNNWUtcIiwgMCwgMCwgMCwgMSAtIGddO1xuICB9XG5cbiAgc3RhdGljIEdfUkdCKFtnXSkge1xuICAgIHJldHVybiBbXCJSR0JcIiwgZywgZywgZ107XG4gIH1cblxuICBzdGF0aWMgR19IVE1MKFtnXSkge1xuICAgIGNvbnN0IEcgPSBtYWtlQ29sb3JDb21wKGcpO1xuICAgIHJldHVybiBgIyR7R30ke0d9JHtHfWA7XG4gIH1cblxuICBzdGF0aWMgUkdCX0coW3IsIGcsIGJdKSB7XG4gICAgcmV0dXJuIFtcIkdcIiwgMC4zICogciArIDAuNTkgKiBnICsgMC4xMSAqIGJdO1xuICB9XG5cbiAgc3RhdGljIFJHQl9IVE1MKFtyLCBnLCBiXSkge1xuICAgIGNvbnN0IFIgPSBtYWtlQ29sb3JDb21wKHIpO1xuICAgIGNvbnN0IEcgPSBtYWtlQ29sb3JDb21wKGcpO1xuICAgIGNvbnN0IEIgPSBtYWtlQ29sb3JDb21wKGIpO1xuICAgIHJldHVybiBgIyR7Un0ke0d9JHtCfWA7XG4gIH1cblxuICBzdGF0aWMgVF9IVE1MKCkge1xuICAgIHJldHVybiBcIiMwMDAwMDAwMFwiO1xuICB9XG5cbiAgc3RhdGljIENNWUtfUkdCKFtjLCB5LCBtLCBrXSkge1xuICAgIHJldHVybiBbXCJSR0JcIiwgMSAtIE1hdGgubWluKDEsIGMgKyBrKSwgMSAtIE1hdGgubWluKDEsIG0gKyBrKSwgMSAtIE1hdGgubWluKDEsIHkgKyBrKV07XG4gIH1cblxuICBzdGF0aWMgQ01ZS19IVE1MKGNvbXBvbmVudHMpIHtcbiAgICByZXR1cm4gdGhpcy5SR0JfSFRNTCh0aGlzLkNNWUtfUkdCKGNvbXBvbmVudHMpKTtcbiAgfVxuXG4gIHN0YXRpYyBSR0JfQ01ZSyhbciwgZywgYl0pIHtcbiAgICBjb25zdCBjID0gMSAtIHI7XG4gICAgY29uc3QgbSA9IDEgLSBnO1xuICAgIGNvbnN0IHkgPSAxIC0gYjtcbiAgICBjb25zdCBrID0gTWF0aC5taW4oYywgbSwgeSk7XG4gICAgcmV0dXJuIFtcIkNNWUtcIiwgYywgbSwgeSwga107XG4gIH1cblxufVxuXG5leHBvcnRzLkNvbG9yQ29udmVydGVycyA9IENvbG9yQ29udmVydGVycztcblxuLyoqKi8gfSksXG4vKiAyMCAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5YZmFMYXllciA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF94ZmFfdGV4dCA9IF9fd19wZGZqc19yZXF1aXJlX18oMTcpO1xuXG5jbGFzcyBYZmFMYXllciB7XG4gIHN0YXRpYyBzZXR1cFN0b3JhZ2UoaHRtbCwgaWQsIGVsZW1lbnQsIHN0b3JhZ2UsIGludGVudCkge1xuICAgIGNvbnN0IHN0b3JlZERhdGEgPSBzdG9yYWdlLmdldFZhbHVlKGlkLCB7XG4gICAgICB2YWx1ZTogbnVsbFxuICAgIH0pO1xuXG4gICAgc3dpdGNoIChlbGVtZW50Lm5hbWUpIHtcbiAgICAgIGNhc2UgXCJ0ZXh0YXJlYVwiOlxuICAgICAgICBpZiAoc3RvcmVkRGF0YS52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGh0bWwudGV4dENvbnRlbnQgPSBzdG9yZWREYXRhLnZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGludGVudCA9PT0gXCJwcmludFwiKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBodG1sLmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCBldmVudCA9PiB7XG4gICAgICAgICAgc3RvcmFnZS5zZXRWYWx1ZShpZCwge1xuICAgICAgICAgICAgdmFsdWU6IGV2ZW50LnRhcmdldC52YWx1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJpbnB1dFwiOlxuICAgICAgICBpZiAoZWxlbWVudC5hdHRyaWJ1dGVzLnR5cGUgPT09IFwicmFkaW9cIiB8fCBlbGVtZW50LmF0dHJpYnV0ZXMudHlwZSA9PT0gXCJjaGVja2JveFwiKSB7XG4gICAgICAgICAgaWYgKHN0b3JlZERhdGEudmFsdWUgPT09IGVsZW1lbnQuYXR0cmlidXRlcy54ZmFPbikge1xuICAgICAgICAgICAgaHRtbC5zZXRBdHRyaWJ1dGUoXCJjaGVja2VkXCIsIHRydWUpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RvcmVkRGF0YS52YWx1ZSA9PT0gZWxlbWVudC5hdHRyaWJ1dGVzLnhmYU9mZikge1xuICAgICAgICAgICAgaHRtbC5yZW1vdmVBdHRyaWJ1dGUoXCJjaGVja2VkXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpbnRlbnQgPT09IFwicHJpbnRcIikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaHRtbC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIGV2ZW50ID0+IHtcbiAgICAgICAgICAgIHN0b3JhZ2Uuc2V0VmFsdWUoaWQsIHtcbiAgICAgICAgICAgICAgdmFsdWU6IGV2ZW50LnRhcmdldC5jaGVja2VkID8gZXZlbnQudGFyZ2V0LmdldEF0dHJpYnV0ZShcInhmYU9uXCIpIDogZXZlbnQudGFyZ2V0LmdldEF0dHJpYnV0ZShcInhmYU9mZlwiKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHN0b3JlZERhdGEudmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGh0bWwuc2V0QXR0cmlidXRlKFwidmFsdWVcIiwgc3RvcmVkRGF0YS52YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGludGVudCA9PT0gXCJwcmludFwiKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBodG1sLmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCBldmVudCA9PiB7XG4gICAgICAgICAgICBzdG9yYWdlLnNldFZhbHVlKGlkLCB7XG4gICAgICAgICAgICAgIHZhbHVlOiBldmVudC50YXJnZXQudmFsdWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJzZWxlY3RcIjpcbiAgICAgICAgaWYgKHN0b3JlZERhdGEudmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBlbGVtZW50LmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9uLmF0dHJpYnV0ZXMudmFsdWUgPT09IHN0b3JlZERhdGEudmFsdWUpIHtcbiAgICAgICAgICAgICAgb3B0aW9uLmF0dHJpYnV0ZXMuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGh0bWwuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsIGV2ZW50ID0+IHtcbiAgICAgICAgICBjb25zdCBvcHRpb25zID0gZXZlbnQudGFyZ2V0Lm9wdGlvbnM7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBvcHRpb25zLnNlbGVjdGVkSW5kZXggPT09IC0xID8gXCJcIiA6IG9wdGlvbnNbb3B0aW9ucy5zZWxlY3RlZEluZGV4XS52YWx1ZTtcbiAgICAgICAgICBzdG9yYWdlLnNldFZhbHVlKGlkLCB7XG4gICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIHNldEF0dHJpYnV0ZXMoe1xuICAgIGh0bWwsXG4gICAgZWxlbWVudCxcbiAgICBzdG9yYWdlID0gbnVsbCxcbiAgICBpbnRlbnQsXG4gICAgbGlua1NlcnZpY2VcbiAgfSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGF0dHJpYnV0ZXNcbiAgICB9ID0gZWxlbWVudDtcbiAgICBjb25zdCBpc0hUTUxBbmNob3JFbGVtZW50ID0gaHRtbCBpbnN0YW5jZW9mIEhUTUxBbmNob3JFbGVtZW50O1xuXG4gICAgaWYgKGF0dHJpYnV0ZXMudHlwZSA9PT0gXCJyYWRpb1wiKSB7XG4gICAgICBhdHRyaWJ1dGVzLm5hbWUgPSBgJHthdHRyaWJ1dGVzLm5hbWV9LSR7aW50ZW50fWA7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cmlidXRlcykpIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGtleSA9PT0gXCJkYXRhSWRcIikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGtleSAhPT0gXCJzdHlsZVwiKSB7XG4gICAgICAgIGlmIChrZXkgPT09IFwidGV4dENvbnRlbnRcIikge1xuICAgICAgICAgIGh0bWwudGV4dENvbnRlbnQgPSB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09IFwiY2xhc3NcIikge1xuICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGh0bWwuc2V0QXR0cmlidXRlKGtleSwgdmFsdWUuam9pbihcIiBcIikpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoaXNIVE1MQW5jaG9yRWxlbWVudCAmJiAoa2V5ID09PSBcImhyZWZcIiB8fCBrZXkgPT09IFwibmV3V2luZG93XCIpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBodG1sLnNldEF0dHJpYnV0ZShrZXksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihodG1sLnN0eWxlLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzSFRNTEFuY2hvckVsZW1lbnQpIHtcbiAgICAgIGlmICghbGlua1NlcnZpY2UuYWRkTGlua0F0dHJpYnV0ZXMpIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiWGZhTGF5ZXIuc2V0QXR0cmlidXRlIC0gbWlzc2luZyBgYWRkTGlua0F0dHJpYnV0ZXNgLW1ldGhvZCBvbiB0aGUgYGxpbmtTZXJ2aWNlYC1pbnN0YW5jZS5cIik7XG4gICAgICB9XG5cbiAgICAgIGxpbmtTZXJ2aWNlLmFkZExpbmtBdHRyaWJ1dGVzPy4oaHRtbCwgYXR0cmlidXRlcy5ocmVmLCBhdHRyaWJ1dGVzLm5ld1dpbmRvdyk7XG4gICAgfVxuXG4gICAgaWYgKHN0b3JhZ2UgJiYgYXR0cmlidXRlcy5kYXRhSWQpIHtcbiAgICAgIHRoaXMuc2V0dXBTdG9yYWdlKGh0bWwsIGF0dHJpYnV0ZXMuZGF0YUlkLCBlbGVtZW50LCBzdG9yYWdlKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgcmVuZGVyKHBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBzdG9yYWdlID0gcGFyYW1ldGVycy5hbm5vdGF0aW9uU3RvcmFnZTtcbiAgICBjb25zdCBsaW5rU2VydmljZSA9IHBhcmFtZXRlcnMubGlua1NlcnZpY2U7XG4gICAgY29uc3Qgcm9vdCA9IHBhcmFtZXRlcnMueGZhSHRtbDtcbiAgICBjb25zdCBpbnRlbnQgPSBwYXJhbWV0ZXJzLmludGVudCB8fCBcImRpc3BsYXlcIjtcbiAgICBjb25zdCByb290SHRtbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocm9vdC5uYW1lKTtcblxuICAgIGlmIChyb290LmF0dHJpYnV0ZXMpIHtcbiAgICAgIHRoaXMuc2V0QXR0cmlidXRlcyh7XG4gICAgICAgIGh0bWw6IHJvb3RIdG1sLFxuICAgICAgICBlbGVtZW50OiByb290LFxuICAgICAgICBpbnRlbnQsXG4gICAgICAgIGxpbmtTZXJ2aWNlXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFjayA9IFtbcm9vdCwgLTEsIHJvb3RIdG1sXV07XG4gICAgY29uc3Qgcm9vdERpdiA9IHBhcmFtZXRlcnMuZGl2O1xuICAgIHJvb3REaXYuYXBwZW5kQ2hpbGQocm9vdEh0bWwpO1xuXG4gICAgaWYgKHBhcmFtZXRlcnMudmlld3BvcnQpIHtcbiAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IGBtYXRyaXgoJHtwYXJhbWV0ZXJzLnZpZXdwb3J0LnRyYW5zZm9ybS5qb2luKFwiLFwiKX0pYDtcbiAgICAgIHJvb3REaXYuc3R5bGUudHJhbnNmb3JtID0gdHJhbnNmb3JtO1xuICAgIH1cblxuICAgIGlmIChpbnRlbnQgIT09IFwicmljaFRleHRcIikge1xuICAgICAgcm9vdERpdi5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCBcInhmYUxheWVyIHhmYUZvbnRcIik7XG4gICAgfVxuXG4gICAgY29uc3QgdGV4dERpdnMgPSBbXTtcblxuICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBbcGFyZW50LCBpLCBodG1sXSA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuXG4gICAgICBpZiAoaSArIDEgPT09IHBhcmVudC5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgc3RhY2sucG9wKCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjaGlsZCA9IHBhcmVudC5jaGlsZHJlblsrK3N0YWNrW3N0YWNrLmxlbmd0aCAtIDFdWzFdXTtcblxuICAgICAgaWYgKGNoaWxkID09PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7XG4gICAgICAgIG5hbWVcbiAgICAgIH0gPSBjaGlsZDtcblxuICAgICAgaWYgKG5hbWUgPT09IFwiI3RleHRcIikge1xuICAgICAgICBjb25zdCBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY2hpbGQudmFsdWUpO1xuICAgICAgICB0ZXh0RGl2cy5wdXNoKG5vZGUpO1xuICAgICAgICBodG1sLmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbGV0IGNoaWxkSHRtbDtcblxuICAgICAgaWYgKGNoaWxkPy5hdHRyaWJ1dGVzPy54bWxucykge1xuICAgICAgICBjaGlsZEh0bWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoY2hpbGQuYXR0cmlidXRlcy54bWxucywgbmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGlsZEh0bWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KG5hbWUpO1xuICAgICAgfVxuXG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNoaWxkSHRtbCk7XG5cbiAgICAgIGlmIChjaGlsZC5hdHRyaWJ1dGVzKSB7XG4gICAgICAgIHRoaXMuc2V0QXR0cmlidXRlcyh7XG4gICAgICAgICAgaHRtbDogY2hpbGRIdG1sLFxuICAgICAgICAgIGVsZW1lbnQ6IGNoaWxkLFxuICAgICAgICAgIHN0b3JhZ2UsXG4gICAgICAgICAgaW50ZW50LFxuICAgICAgICAgIGxpbmtTZXJ2aWNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2hpbGQuY2hpbGRyZW4gJiYgY2hpbGQuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICBzdGFjay5wdXNoKFtjaGlsZCwgLTEsIGNoaWxkSHRtbF0pO1xuICAgICAgfSBlbHNlIGlmIChjaGlsZC52YWx1ZSkge1xuICAgICAgICBjb25zdCBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY2hpbGQudmFsdWUpO1xuXG4gICAgICAgIGlmIChfeGZhX3RleHQuWGZhVGV4dC5zaG91bGRCdWlsZFRleHQobmFtZSkpIHtcbiAgICAgICAgICB0ZXh0RGl2cy5wdXNoKG5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGRIdG1sLmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgZWwgb2Ygcm9vdERpdi5xdWVyeVNlbGVjdG9yQWxsKFwiLnhmYU5vbkludGVyYWN0aXZlIGlucHV0LCAueGZhTm9uSW50ZXJhY3RpdmUgdGV4dGFyZWFcIikpIHtcbiAgICAgIGVsLnNldEF0dHJpYnV0ZShcInJlYWRPbmx5XCIsIHRydWUpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0ZXh0RGl2c1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgdXBkYXRlKHBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBgbWF0cml4KCR7cGFyYW1ldGVycy52aWV3cG9ydC50cmFuc2Zvcm0uam9pbihcIixcIil9KWA7XG4gICAgcGFyYW1ldGVycy5kaXYuc3R5bGUudHJhbnNmb3JtID0gdHJhbnNmb3JtO1xuICAgIHBhcmFtZXRlcnMuZGl2LmhpZGRlbiA9IGZhbHNlO1xuICB9XG5cbn1cblxuZXhwb3J0cy5YZmFMYXllciA9IFhmYUxheWVyO1xuXG4vKioqLyB9KSxcbi8qIDIxICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLnJlbmRlclRleHRMYXllciA9IHJlbmRlclRleHRMYXllcjtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxuY29uc3QgTUFYX1RFWFRfRElWU19UT19SRU5ERVIgPSAxMDAwMDA7XG5jb25zdCBERUZBVUxUX0ZPTlRfU0laRSA9IDMwO1xuY29uc3QgREVGQVVMVF9GT05UX0FTQ0VOVCA9IDAuODtcbmNvbnN0IGFzY2VudENhY2hlID0gbmV3IE1hcCgpO1xuY29uc3QgQWxsV2hpdGVzcGFjZVJlZ2V4cCA9IC9eXFxzKyQvZztcblxuZnVuY3Rpb24gZ2V0QXNjZW50KGZvbnRGYW1pbHksIGN0eCkge1xuICBjb25zdCBjYWNoZWRBc2NlbnQgPSBhc2NlbnRDYWNoZS5nZXQoZm9udEZhbWlseSk7XG5cbiAgaWYgKGNhY2hlZEFzY2VudCkge1xuICAgIHJldHVybiBjYWNoZWRBc2NlbnQ7XG4gIH1cblxuICBjdHguc2F2ZSgpO1xuICBjdHguZm9udCA9IGAke0RFRkFVTFRfRk9OVF9TSVpFfXB4ICR7Zm9udEZhbWlseX1gO1xuICBjb25zdCBtZXRyaWNzID0gY3R4Lm1lYXN1cmVUZXh0KFwiXCIpO1xuICBsZXQgYXNjZW50ID0gbWV0cmljcy5mb250Qm91bmRpbmdCb3hBc2NlbnQ7XG4gIGxldCBkZXNjZW50ID0gTWF0aC5hYnMobWV0cmljcy5mb250Qm91bmRpbmdCb3hEZXNjZW50KTtcblxuICBpZiAoYXNjZW50KSB7XG4gICAgY3R4LnJlc3RvcmUoKTtcbiAgICBjb25zdCByYXRpbyA9IGFzY2VudCAvIChhc2NlbnQgKyBkZXNjZW50KTtcbiAgICBhc2NlbnRDYWNoZS5zZXQoZm9udEZhbWlseSwgcmF0aW8pO1xuICAgIHJldHVybiByYXRpbztcbiAgfVxuXG4gIGN0eC5zdHJva2VTdHlsZSA9IFwicmVkXCI7XG4gIGN0eC5jbGVhclJlY3QoMCwgMCwgREVGQVVMVF9GT05UX1NJWkUsIERFRkFVTFRfRk9OVF9TSVpFKTtcbiAgY3R4LnN0cm9rZVRleHQoXCJnXCIsIDAsIDApO1xuICBsZXQgcGl4ZWxzID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCBERUZBVUxUX0ZPTlRfU0laRSwgREVGQVVMVF9GT05UX1NJWkUpLmRhdGE7XG4gIGRlc2NlbnQgPSAwO1xuXG4gIGZvciAobGV0IGkgPSBwaXhlbHMubGVuZ3RoIC0gMSAtIDM7IGkgPj0gMDsgaSAtPSA0KSB7XG4gICAgaWYgKHBpeGVsc1tpXSA+IDApIHtcbiAgICAgIGRlc2NlbnQgPSBNYXRoLmNlaWwoaSAvIDQgLyBERUZBVUxUX0ZPTlRfU0laRSk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBjdHguY2xlYXJSZWN0KDAsIDAsIERFRkFVTFRfRk9OVF9TSVpFLCBERUZBVUxUX0ZPTlRfU0laRSk7XG4gIGN0eC5zdHJva2VUZXh0KFwiQVwiLCAwLCBERUZBVUxUX0ZPTlRfU0laRSk7XG4gIHBpeGVscyA9IGN0eC5nZXRJbWFnZURhdGEoMCwgMCwgREVGQVVMVF9GT05UX1NJWkUsIERFRkFVTFRfRk9OVF9TSVpFKS5kYXRhO1xuICBhc2NlbnQgPSAwO1xuXG4gIGZvciAobGV0IGkgPSAwLCBpaSA9IHBpeGVscy5sZW5ndGg7IGkgPCBpaTsgaSArPSA0KSB7XG4gICAgaWYgKHBpeGVsc1tpXSA+IDApIHtcbiAgICAgIGFzY2VudCA9IERFRkFVTFRfRk9OVF9TSVpFIC0gTWF0aC5mbG9vcihpIC8gNCAvIERFRkFVTFRfRk9OVF9TSVpFKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGN0eC5yZXN0b3JlKCk7XG5cbiAgaWYgKGFzY2VudCkge1xuICAgIGNvbnN0IHJhdGlvID0gYXNjZW50IC8gKGFzY2VudCArIGRlc2NlbnQpO1xuICAgIGFzY2VudENhY2hlLnNldChmb250RmFtaWx5LCByYXRpbyk7XG4gICAgcmV0dXJuIHJhdGlvO1xuICB9XG5cbiAgYXNjZW50Q2FjaGUuc2V0KGZvbnRGYW1pbHksIERFRkFVTFRfRk9OVF9BU0NFTlQpO1xuICByZXR1cm4gREVGQVVMVF9GT05UX0FTQ0VOVDtcbn1cblxuZnVuY3Rpb24gYXBwZW5kVGV4dCh0YXNrLCBnZW9tLCBzdHlsZXMsIGN0eCkge1xuICBjb25zdCB0ZXh0RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG4gIGNvbnN0IHRleHREaXZQcm9wZXJ0aWVzID0gdGFzay5fZW5oYW5jZVRleHRTZWxlY3Rpb24gPyB7XG4gICAgYW5nbGU6IDAsXG4gICAgY2FudmFzV2lkdGg6IDAsXG4gICAgaGFzVGV4dDogZ2VvbS5zdHIgIT09IFwiXCIsXG4gICAgaGFzRU9MOiBnZW9tLmhhc0VPTCxcbiAgICBvcmlnaW5hbFRyYW5zZm9ybTogbnVsbCxcbiAgICBwYWRkaW5nQm90dG9tOiAwLFxuICAgIHBhZGRpbmdMZWZ0OiAwLFxuICAgIHBhZGRpbmdSaWdodDogMCxcbiAgICBwYWRkaW5nVG9wOiAwLFxuICAgIHNjYWxlOiAxXG4gIH0gOiB7XG4gICAgYW5nbGU6IDAsXG4gICAgY2FudmFzV2lkdGg6IDAsXG4gICAgaGFzVGV4dDogZ2VvbS5zdHIgIT09IFwiXCIsXG4gICAgaGFzRU9MOiBnZW9tLmhhc0VPTFxuICB9O1xuXG4gIHRhc2suX3RleHREaXZzLnB1c2godGV4dERpdik7XG5cbiAgY29uc3QgdHggPSBfdXRpbC5VdGlsLnRyYW5zZm9ybSh0YXNrLl92aWV3cG9ydC50cmFuc2Zvcm0sIGdlb20udHJhbnNmb3JtKTtcblxuICBsZXQgYW5nbGUgPSBNYXRoLmF0YW4yKHR4WzFdLCB0eFswXSk7XG4gIGNvbnN0IHN0eWxlID0gc3R5bGVzW2dlb20uZm9udE5hbWVdO1xuXG4gIGlmIChzdHlsZS52ZXJ0aWNhbCkge1xuICAgIGFuZ2xlICs9IE1hdGguUEkgLyAyO1xuICB9XG5cbiAgY29uc3QgZm9udEhlaWdodCA9IE1hdGguaHlwb3QodHhbMl0sIHR4WzNdKTtcbiAgY29uc3QgZm9udEFzY2VudCA9IGZvbnRIZWlnaHQgKiBnZXRBc2NlbnQoc3R5bGUuZm9udEZhbWlseSwgY3R4KTtcbiAgbGV0IGxlZnQsIHRvcDtcblxuICBpZiAoYW5nbGUgPT09IDApIHtcbiAgICBsZWZ0ID0gdHhbNF07XG4gICAgdG9wID0gdHhbNV0gLSBmb250QXNjZW50O1xuICB9IGVsc2Uge1xuICAgIGxlZnQgPSB0eFs0XSArIGZvbnRBc2NlbnQgKiBNYXRoLnNpbihhbmdsZSk7XG4gICAgdG9wID0gdHhbNV0gLSBmb250QXNjZW50ICogTWF0aC5jb3MoYW5nbGUpO1xuICB9XG5cbiAgdGV4dERpdi5zdHlsZS5sZWZ0ID0gYCR7bGVmdH1weGA7XG4gIHRleHREaXYuc3R5bGUudG9wID0gYCR7dG9wfXB4YDtcbiAgdGV4dERpdi5zdHlsZS5mb250U2l6ZSA9IGAke2ZvbnRIZWlnaHR9cHhgO1xuICB0ZXh0RGl2LnN0eWxlLmZvbnRGYW1pbHkgPSBzdHlsZS5mb250RmFtaWx5O1xuICB0ZXh0RGl2LnNldEF0dHJpYnV0ZShcInJvbGVcIiwgXCJwcmVzZW50YXRpb25cIik7XG4gIHRleHREaXYudGV4dENvbnRlbnQgPSBnZW9tLnN0cjtcbiAgdGV4dERpdi5kaXIgPSBnZW9tLmRpcjtcblxuICBpZiAodGFzay5fZm9udEluc3BlY3RvckVuYWJsZWQpIHtcbiAgICB0ZXh0RGl2LmRhdGFzZXQuZm9udE5hbWUgPSBnZW9tLmZvbnROYW1lO1xuICB9XG5cbiAgaWYgKGFuZ2xlICE9PSAwKSB7XG4gICAgdGV4dERpdlByb3BlcnRpZXMuYW5nbGUgPSBhbmdsZSAqICgxODAgLyBNYXRoLlBJKTtcbiAgfVxuXG4gIGxldCBzaG91bGRTY2FsZVRleHQgPSBmYWxzZTtcblxuICBpZiAoZ2VvbS5zdHIubGVuZ3RoID4gMSB8fCB0YXNrLl9lbmhhbmNlVGV4dFNlbGVjdGlvbiAmJiBBbGxXaGl0ZXNwYWNlUmVnZXhwLnRlc3QoZ2VvbS5zdHIpKSB7XG4gICAgc2hvdWxkU2NhbGVUZXh0ID0gdHJ1ZTtcbiAgfSBlbHNlIGlmIChnZW9tLnN0ciAhPT0gXCIgXCIgJiYgZ2VvbS50cmFuc2Zvcm1bMF0gIT09IGdlb20udHJhbnNmb3JtWzNdKSB7XG4gICAgY29uc3QgYWJzU2NhbGVYID0gTWF0aC5hYnMoZ2VvbS50cmFuc2Zvcm1bMF0pLFxuICAgICAgICAgIGFic1NjYWxlWSA9IE1hdGguYWJzKGdlb20udHJhbnNmb3JtWzNdKTtcblxuICAgIGlmIChhYnNTY2FsZVggIT09IGFic1NjYWxlWSAmJiBNYXRoLm1heChhYnNTY2FsZVgsIGFic1NjYWxlWSkgLyBNYXRoLm1pbihhYnNTY2FsZVgsIGFic1NjYWxlWSkgPiAxLjUpIHtcbiAgICAgIHNob3VsZFNjYWxlVGV4dCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKHNob3VsZFNjYWxlVGV4dCkge1xuICAgIGlmIChzdHlsZS52ZXJ0aWNhbCkge1xuICAgICAgdGV4dERpdlByb3BlcnRpZXMuY2FudmFzV2lkdGggPSBnZW9tLmhlaWdodCAqIHRhc2suX3ZpZXdwb3J0LnNjYWxlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0ZXh0RGl2UHJvcGVydGllcy5jYW52YXNXaWR0aCA9IGdlb20ud2lkdGggKiB0YXNrLl92aWV3cG9ydC5zY2FsZTtcbiAgICB9XG4gIH1cblxuICB0YXNrLl90ZXh0RGl2UHJvcGVydGllcy5zZXQodGV4dERpdiwgdGV4dERpdlByb3BlcnRpZXMpO1xuXG4gIGlmICh0YXNrLl90ZXh0Q29udGVudFN0cmVhbSkge1xuICAgIHRhc2suX2xheW91dFRleHQodGV4dERpdik7XG4gIH1cblxuICBpZiAodGFzay5fZW5oYW5jZVRleHRTZWxlY3Rpb24gJiYgdGV4dERpdlByb3BlcnRpZXMuaGFzVGV4dCkge1xuICAgIGxldCBhbmdsZUNvcyA9IDEsXG4gICAgICAgIGFuZ2xlU2luID0gMDtcblxuICAgIGlmIChhbmdsZSAhPT0gMCkge1xuICAgICAgYW5nbGVDb3MgPSBNYXRoLmNvcyhhbmdsZSk7XG4gICAgICBhbmdsZVNpbiA9IE1hdGguc2luKGFuZ2xlKTtcbiAgICB9XG5cbiAgICBjb25zdCBkaXZXaWR0aCA9IChzdHlsZS52ZXJ0aWNhbCA/IGdlb20uaGVpZ2h0IDogZ2VvbS53aWR0aCkgKiB0YXNrLl92aWV3cG9ydC5zY2FsZTtcbiAgICBjb25zdCBkaXZIZWlnaHQgPSBmb250SGVpZ2h0O1xuICAgIGxldCBtLCBiO1xuXG4gICAgaWYgKGFuZ2xlICE9PSAwKSB7XG4gICAgICBtID0gW2FuZ2xlQ29zLCBhbmdsZVNpbiwgLWFuZ2xlU2luLCBhbmdsZUNvcywgbGVmdCwgdG9wXTtcbiAgICAgIGIgPSBfdXRpbC5VdGlsLmdldEF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KFswLCAwLCBkaXZXaWR0aCwgZGl2SGVpZ2h0XSwgbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGIgPSBbbGVmdCwgdG9wLCBsZWZ0ICsgZGl2V2lkdGgsIHRvcCArIGRpdkhlaWdodF07XG4gICAgfVxuXG4gICAgdGFzay5fYm91bmRzLnB1c2goe1xuICAgICAgbGVmdDogYlswXSxcbiAgICAgIHRvcDogYlsxXSxcbiAgICAgIHJpZ2h0OiBiWzJdLFxuICAgICAgYm90dG9tOiBiWzNdLFxuICAgICAgZGl2OiB0ZXh0RGl2LFxuICAgICAgc2l6ZTogW2RpdldpZHRoLCBkaXZIZWlnaHRdLFxuICAgICAgbVxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbmRlcih0YXNrKSB7XG4gIGlmICh0YXNrLl9jYW5jZWxlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHRleHREaXZzID0gdGFzay5fdGV4dERpdnM7XG4gIGNvbnN0IGNhcGFiaWxpdHkgPSB0YXNrLl9jYXBhYmlsaXR5O1xuICBjb25zdCB0ZXh0RGl2c0xlbmd0aCA9IHRleHREaXZzLmxlbmd0aDtcblxuICBpZiAodGV4dERpdnNMZW5ndGggPiBNQVhfVEVYVF9ESVZTX1RPX1JFTkRFUikge1xuICAgIHRhc2suX3JlbmRlcmluZ0RvbmUgPSB0cnVlO1xuICAgIGNhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICghdGFzay5fdGV4dENvbnRlbnRTdHJlYW0pIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHREaXZzTGVuZ3RoOyBpKyspIHtcbiAgICAgIHRhc2suX2xheW91dFRleHQodGV4dERpdnNbaV0pO1xuICAgIH1cbiAgfVxuXG4gIHRhc2suX3JlbmRlcmluZ0RvbmUgPSB0cnVlO1xuICBjYXBhYmlsaXR5LnJlc29sdmUoKTtcbn1cblxuZnVuY3Rpb24gZmluZFBvc2l0aXZlTWluKHRzLCBvZmZzZXQsIGNvdW50KSB7XG4gIGxldCByZXN1bHQgPSAwO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgIGNvbnN0IHQgPSB0c1tvZmZzZXQrK107XG5cbiAgICBpZiAodCA+IDApIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdCA/IE1hdGgubWluKHQsIHJlc3VsdCkgOiB0O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGV4cGFuZCh0YXNrKSB7XG4gIGNvbnN0IGJvdW5kcyA9IHRhc2suX2JvdW5kcztcbiAgY29uc3Qgdmlld3BvcnQgPSB0YXNrLl92aWV3cG9ydDtcbiAgY29uc3QgZXhwYW5kZWQgPSBleHBhbmRCb3VuZHModmlld3BvcnQud2lkdGgsIHZpZXdwb3J0LmhlaWdodCwgYm91bmRzKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGV4cGFuZGVkLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgZGl2ID0gYm91bmRzW2ldLmRpdjtcblxuICAgIGNvbnN0IGRpdlByb3BlcnRpZXMgPSB0YXNrLl90ZXh0RGl2UHJvcGVydGllcy5nZXQoZGl2KTtcblxuICAgIGlmIChkaXZQcm9wZXJ0aWVzLmFuZ2xlID09PSAwKSB7XG4gICAgICBkaXZQcm9wZXJ0aWVzLnBhZGRpbmdMZWZ0ID0gYm91bmRzW2ldLmxlZnQgLSBleHBhbmRlZFtpXS5sZWZ0O1xuICAgICAgZGl2UHJvcGVydGllcy5wYWRkaW5nVG9wID0gYm91bmRzW2ldLnRvcCAtIGV4cGFuZGVkW2ldLnRvcDtcbiAgICAgIGRpdlByb3BlcnRpZXMucGFkZGluZ1JpZ2h0ID0gZXhwYW5kZWRbaV0ucmlnaHQgLSBib3VuZHNbaV0ucmlnaHQ7XG4gICAgICBkaXZQcm9wZXJ0aWVzLnBhZGRpbmdCb3R0b20gPSBleHBhbmRlZFtpXS5ib3R0b20gLSBib3VuZHNbaV0uYm90dG9tO1xuXG4gICAgICB0YXNrLl90ZXh0RGl2UHJvcGVydGllcy5zZXQoZGl2LCBkaXZQcm9wZXJ0aWVzKTtcblxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgZSA9IGV4cGFuZGVkW2ldLFxuICAgICAgICAgIGIgPSBib3VuZHNbaV07XG4gICAgY29uc3QgbSA9IGIubSxcbiAgICAgICAgICBjID0gbVswXSxcbiAgICAgICAgICBzID0gbVsxXTtcbiAgICBjb25zdCBwb2ludHMgPSBbWzAsIDBdLCBbMCwgYi5zaXplWzFdXSwgW2Iuc2l6ZVswXSwgMF0sIGIuc2l6ZV07XG4gICAgY29uc3QgdHMgPSBuZXcgRmxvYXQ2NEFycmF5KDY0KTtcblxuICAgIGZvciAobGV0IGogPSAwLCBqaiA9IHBvaW50cy5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICBjb25zdCB0ID0gX3V0aWwuVXRpbC5hcHBseVRyYW5zZm9ybShwb2ludHNbal0sIG0pO1xuXG4gICAgICB0c1tqICsgMF0gPSBjICYmIChlLmxlZnQgLSB0WzBdKSAvIGM7XG4gICAgICB0c1tqICsgNF0gPSBzICYmIChlLnRvcCAtIHRbMV0pIC8gcztcbiAgICAgIHRzW2ogKyA4XSA9IGMgJiYgKGUucmlnaHQgLSB0WzBdKSAvIGM7XG4gICAgICB0c1tqICsgMTJdID0gcyAmJiAoZS5ib3R0b20gLSB0WzFdKSAvIHM7XG4gICAgICB0c1tqICsgMTZdID0gcyAmJiAoZS5sZWZ0IC0gdFswXSkgLyAtcztcbiAgICAgIHRzW2ogKyAyMF0gPSBjICYmIChlLnRvcCAtIHRbMV0pIC8gYztcbiAgICAgIHRzW2ogKyAyNF0gPSBzICYmIChlLnJpZ2h0IC0gdFswXSkgLyAtcztcbiAgICAgIHRzW2ogKyAyOF0gPSBjICYmIChlLmJvdHRvbSAtIHRbMV0pIC8gYztcbiAgICAgIHRzW2ogKyAzMl0gPSBjICYmIChlLmxlZnQgLSB0WzBdKSAvIC1jO1xuICAgICAgdHNbaiArIDM2XSA9IHMgJiYgKGUudG9wIC0gdFsxXSkgLyAtcztcbiAgICAgIHRzW2ogKyA0MF0gPSBjICYmIChlLnJpZ2h0IC0gdFswXSkgLyAtYztcbiAgICAgIHRzW2ogKyA0NF0gPSBzICYmIChlLmJvdHRvbSAtIHRbMV0pIC8gLXM7XG4gICAgICB0c1tqICsgNDhdID0gcyAmJiAoZS5sZWZ0IC0gdFswXSkgLyBzO1xuICAgICAgdHNbaiArIDUyXSA9IGMgJiYgKGUudG9wIC0gdFsxXSkgLyAtYztcbiAgICAgIHRzW2ogKyA1Nl0gPSBzICYmIChlLnJpZ2h0IC0gdFswXSkgLyBzO1xuICAgICAgdHNbaiArIDYwXSA9IGMgJiYgKGUuYm90dG9tIC0gdFsxXSkgLyAtYztcbiAgICB9XG5cbiAgICBjb25zdCBib3hTY2FsZSA9IDEgKyBNYXRoLm1pbihNYXRoLmFicyhjKSwgTWF0aC5hYnMocykpO1xuICAgIGRpdlByb3BlcnRpZXMucGFkZGluZ0xlZnQgPSBmaW5kUG9zaXRpdmVNaW4odHMsIDMyLCAxNikgLyBib3hTY2FsZTtcbiAgICBkaXZQcm9wZXJ0aWVzLnBhZGRpbmdUb3AgPSBmaW5kUG9zaXRpdmVNaW4odHMsIDQ4LCAxNikgLyBib3hTY2FsZTtcbiAgICBkaXZQcm9wZXJ0aWVzLnBhZGRpbmdSaWdodCA9IGZpbmRQb3NpdGl2ZU1pbih0cywgMCwgMTYpIC8gYm94U2NhbGU7XG4gICAgZGl2UHJvcGVydGllcy5wYWRkaW5nQm90dG9tID0gZmluZFBvc2l0aXZlTWluKHRzLCAxNiwgMTYpIC8gYm94U2NhbGU7XG5cbiAgICB0YXNrLl90ZXh0RGl2UHJvcGVydGllcy5zZXQoZGl2LCBkaXZQcm9wZXJ0aWVzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBleHBhbmRCb3VuZHMod2lkdGgsIGhlaWdodCwgYm94ZXMpIHtcbiAgY29uc3QgYm91bmRzID0gYm94ZXMubWFwKGZ1bmN0aW9uIChib3gsIGkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDE6IGJveC5sZWZ0LFxuICAgICAgeTE6IGJveC50b3AsXG4gICAgICB4MjogYm94LnJpZ2h0LFxuICAgICAgeTI6IGJveC5ib3R0b20sXG4gICAgICBpbmRleDogaSxcbiAgICAgIHgxTmV3OiB1bmRlZmluZWQsXG4gICAgICB4Mk5ldzogdW5kZWZpbmVkXG4gICAgfTtcbiAgfSk7XG4gIGV4cGFuZEJvdW5kc0xUUih3aWR0aCwgYm91bmRzKTtcbiAgY29uc3QgZXhwYW5kZWQgPSBuZXcgQXJyYXkoYm94ZXMubGVuZ3RoKTtcblxuICBmb3IgKGNvbnN0IGIgb2YgYm91bmRzKSB7XG4gICAgY29uc3QgaSA9IGIuaW5kZXg7XG4gICAgZXhwYW5kZWRbaV0gPSB7XG4gICAgICBsZWZ0OiBiLngxTmV3LFxuICAgICAgdG9wOiAwLFxuICAgICAgcmlnaHQ6IGIueDJOZXcsXG4gICAgICBib3R0b206IDBcbiAgICB9O1xuICB9XG5cbiAgYm94ZXMubWFwKGZ1bmN0aW9uIChib3gsIGkpIHtcbiAgICBjb25zdCBlID0gZXhwYW5kZWRbaV0sXG4gICAgICAgICAgYiA9IGJvdW5kc1tpXTtcbiAgICBiLngxID0gYm94LnRvcDtcbiAgICBiLnkxID0gd2lkdGggLSBlLnJpZ2h0O1xuICAgIGIueDIgPSBib3guYm90dG9tO1xuICAgIGIueTIgPSB3aWR0aCAtIGUubGVmdDtcbiAgICBiLmluZGV4ID0gaTtcbiAgICBiLngxTmV3ID0gdW5kZWZpbmVkO1xuICAgIGIueDJOZXcgPSB1bmRlZmluZWQ7XG4gIH0pO1xuICBleHBhbmRCb3VuZHNMVFIoaGVpZ2h0LCBib3VuZHMpO1xuXG4gIGZvciAoY29uc3QgYiBvZiBib3VuZHMpIHtcbiAgICBjb25zdCBpID0gYi5pbmRleDtcbiAgICBleHBhbmRlZFtpXS50b3AgPSBiLngxTmV3O1xuICAgIGV4cGFuZGVkW2ldLmJvdHRvbSA9IGIueDJOZXc7XG4gIH1cblxuICByZXR1cm4gZXhwYW5kZWQ7XG59XG5cbmZ1bmN0aW9uIGV4cGFuZEJvdW5kc0xUUih3aWR0aCwgYm91bmRzKSB7XG4gIGJvdW5kcy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIGEueDEgLSBiLngxIHx8IGEuaW5kZXggLSBiLmluZGV4O1xuICB9KTtcbiAgY29uc3QgZmFrZUJvdW5kYXJ5ID0ge1xuICAgIHgxOiAtSW5maW5pdHksXG4gICAgeTE6IC1JbmZpbml0eSxcbiAgICB4MjogMCxcbiAgICB5MjogSW5maW5pdHksXG4gICAgaW5kZXg6IC0xLFxuICAgIHgxTmV3OiAwLFxuICAgIHgyTmV3OiAwXG4gIH07XG4gIGNvbnN0IGhvcml6b24gPSBbe1xuICAgIHN0YXJ0OiAtSW5maW5pdHksXG4gICAgZW5kOiBJbmZpbml0eSxcbiAgICBib3VuZGFyeTogZmFrZUJvdW5kYXJ5XG4gIH1dO1xuXG4gIGZvciAoY29uc3QgYm91bmRhcnkgb2YgYm91bmRzKSB7XG4gICAgbGV0IGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBob3Jpem9uLmxlbmd0aCAmJiBob3Jpem9uW2ldLmVuZCA8PSBib3VuZGFyeS55MSkge1xuICAgICAgaSsrO1xuICAgIH1cblxuICAgIGxldCBqID0gaG9yaXpvbi5sZW5ndGggLSAxO1xuXG4gICAgd2hpbGUgKGogPj0gMCAmJiBob3Jpem9uW2pdLnN0YXJ0ID49IGJvdW5kYXJ5LnkyKSB7XG4gICAgICBqLS07XG4gICAgfVxuXG4gICAgbGV0IGhvcml6b25QYXJ0LCBhZmZlY3RlZEJvdW5kYXJ5O1xuICAgIGxldCBxLFxuICAgICAgICBrLFxuICAgICAgICBtYXhYTmV3ID0gLUluZmluaXR5O1xuXG4gICAgZm9yIChxID0gaTsgcSA8PSBqOyBxKyspIHtcbiAgICAgIGhvcml6b25QYXJ0ID0gaG9yaXpvbltxXTtcbiAgICAgIGFmZmVjdGVkQm91bmRhcnkgPSBob3Jpem9uUGFydC5ib3VuZGFyeTtcbiAgICAgIGxldCB4TmV3O1xuXG4gICAgICBpZiAoYWZmZWN0ZWRCb3VuZGFyeS54MiA+IGJvdW5kYXJ5LngxKSB7XG4gICAgICAgIHhOZXcgPSBhZmZlY3RlZEJvdW5kYXJ5LmluZGV4ID4gYm91bmRhcnkuaW5kZXggPyBhZmZlY3RlZEJvdW5kYXJ5LngxTmV3IDogYm91bmRhcnkueDE7XG4gICAgICB9IGVsc2UgaWYgKGFmZmVjdGVkQm91bmRhcnkueDJOZXcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB4TmV3ID0gKGFmZmVjdGVkQm91bmRhcnkueDIgKyBib3VuZGFyeS54MSkgLyAyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgeE5ldyA9IGFmZmVjdGVkQm91bmRhcnkueDJOZXc7XG4gICAgICB9XG5cbiAgICAgIGlmICh4TmV3ID4gbWF4WE5ldykge1xuICAgICAgICBtYXhYTmV3ID0geE5ldztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBib3VuZGFyeS54MU5ldyA9IG1heFhOZXc7XG5cbiAgICBmb3IgKHEgPSBpOyBxIDw9IGo7IHErKykge1xuICAgICAgaG9yaXpvblBhcnQgPSBob3Jpem9uW3FdO1xuICAgICAgYWZmZWN0ZWRCb3VuZGFyeSA9IGhvcml6b25QYXJ0LmJvdW5kYXJ5O1xuXG4gICAgICBpZiAoYWZmZWN0ZWRCb3VuZGFyeS54Mk5ldyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChhZmZlY3RlZEJvdW5kYXJ5LngyID4gYm91bmRhcnkueDEpIHtcbiAgICAgICAgICBpZiAoYWZmZWN0ZWRCb3VuZGFyeS5pbmRleCA+IGJvdW5kYXJ5LmluZGV4KSB7XG4gICAgICAgICAgICBhZmZlY3RlZEJvdW5kYXJ5LngyTmV3ID0gYWZmZWN0ZWRCb3VuZGFyeS54MjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWZmZWN0ZWRCb3VuZGFyeS54Mk5ldyA9IG1heFhOZXc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoYWZmZWN0ZWRCb3VuZGFyeS54Mk5ldyA+IG1heFhOZXcpIHtcbiAgICAgICAgYWZmZWN0ZWRCb3VuZGFyeS54Mk5ldyA9IE1hdGgubWF4KG1heFhOZXcsIGFmZmVjdGVkQm91bmRhcnkueDIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNoYW5nZWRIb3Jpem9uID0gW107XG4gICAgbGV0IGxhc3RCb3VuZGFyeSA9IG51bGw7XG5cbiAgICBmb3IgKHEgPSBpOyBxIDw9IGo7IHErKykge1xuICAgICAgaG9yaXpvblBhcnQgPSBob3Jpem9uW3FdO1xuICAgICAgYWZmZWN0ZWRCb3VuZGFyeSA9IGhvcml6b25QYXJ0LmJvdW5kYXJ5O1xuICAgICAgY29uc3QgdXNlQm91bmRhcnkgPSBhZmZlY3RlZEJvdW5kYXJ5LngyID4gYm91bmRhcnkueDIgPyBhZmZlY3RlZEJvdW5kYXJ5IDogYm91bmRhcnk7XG5cbiAgICAgIGlmIChsYXN0Qm91bmRhcnkgPT09IHVzZUJvdW5kYXJ5KSB7XG4gICAgICAgIGNoYW5nZWRIb3Jpem9uW2NoYW5nZWRIb3Jpem9uLmxlbmd0aCAtIDFdLmVuZCA9IGhvcml6b25QYXJ0LmVuZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoYW5nZWRIb3Jpem9uLnB1c2goe1xuICAgICAgICAgIHN0YXJ0OiBob3Jpem9uUGFydC5zdGFydCxcbiAgICAgICAgICBlbmQ6IGhvcml6b25QYXJ0LmVuZCxcbiAgICAgICAgICBib3VuZGFyeTogdXNlQm91bmRhcnlcbiAgICAgICAgfSk7XG4gICAgICAgIGxhc3RCb3VuZGFyeSA9IHVzZUJvdW5kYXJ5O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChob3Jpem9uW2ldLnN0YXJ0IDwgYm91bmRhcnkueTEpIHtcbiAgICAgIGNoYW5nZWRIb3Jpem9uWzBdLnN0YXJ0ID0gYm91bmRhcnkueTE7XG4gICAgICBjaGFuZ2VkSG9yaXpvbi51bnNoaWZ0KHtcbiAgICAgICAgc3RhcnQ6IGhvcml6b25baV0uc3RhcnQsXG4gICAgICAgIGVuZDogYm91bmRhcnkueTEsXG4gICAgICAgIGJvdW5kYXJ5OiBob3Jpem9uW2ldLmJvdW5kYXJ5XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoYm91bmRhcnkueTIgPCBob3Jpem9uW2pdLmVuZCkge1xuICAgICAgY2hhbmdlZEhvcml6b25bY2hhbmdlZEhvcml6b24ubGVuZ3RoIC0gMV0uZW5kID0gYm91bmRhcnkueTI7XG4gICAgICBjaGFuZ2VkSG9yaXpvbi5wdXNoKHtcbiAgICAgICAgc3RhcnQ6IGJvdW5kYXJ5LnkyLFxuICAgICAgICBlbmQ6IGhvcml6b25bal0uZW5kLFxuICAgICAgICBib3VuZGFyeTogaG9yaXpvbltqXS5ib3VuZGFyeVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yIChxID0gaTsgcSA8PSBqOyBxKyspIHtcbiAgICAgIGhvcml6b25QYXJ0ID0gaG9yaXpvbltxXTtcbiAgICAgIGFmZmVjdGVkQm91bmRhcnkgPSBob3Jpem9uUGFydC5ib3VuZGFyeTtcblxuICAgICAgaWYgKGFmZmVjdGVkQm91bmRhcnkueDJOZXcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbGV0IHVzZWQgPSBmYWxzZTtcblxuICAgICAgZm9yIChrID0gaSAtIDE7ICF1c2VkICYmIGsgPj0gMCAmJiBob3Jpem9uW2tdLnN0YXJ0ID49IGFmZmVjdGVkQm91bmRhcnkueTE7IGstLSkge1xuICAgICAgICB1c2VkID0gaG9yaXpvbltrXS5ib3VuZGFyeSA9PT0gYWZmZWN0ZWRCb3VuZGFyeTtcbiAgICAgIH1cblxuICAgICAgZm9yIChrID0gaiArIDE7ICF1c2VkICYmIGsgPCBob3Jpem9uLmxlbmd0aCAmJiBob3Jpem9uW2tdLmVuZCA8PSBhZmZlY3RlZEJvdW5kYXJ5LnkyOyBrKyspIHtcbiAgICAgICAgdXNlZCA9IGhvcml6b25ba10uYm91bmRhcnkgPT09IGFmZmVjdGVkQm91bmRhcnk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoayA9IDA7ICF1c2VkICYmIGsgPCBjaGFuZ2VkSG9yaXpvbi5sZW5ndGg7IGsrKykge1xuICAgICAgICB1c2VkID0gY2hhbmdlZEhvcml6b25ba10uYm91bmRhcnkgPT09IGFmZmVjdGVkQm91bmRhcnk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdXNlZCkge1xuICAgICAgICBhZmZlY3RlZEJvdW5kYXJ5LngyTmV3ID0gbWF4WE5ldztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmFwcGx5KGhvcml6b24sIFtpLCBqIC0gaSArIDFdLmNvbmNhdChjaGFuZ2VkSG9yaXpvbikpO1xuICB9XG5cbiAgZm9yIChjb25zdCBob3Jpem9uUGFydCBvZiBob3Jpem9uKSB7XG4gICAgY29uc3QgYWZmZWN0ZWRCb3VuZGFyeSA9IGhvcml6b25QYXJ0LmJvdW5kYXJ5O1xuXG4gICAgaWYgKGFmZmVjdGVkQm91bmRhcnkueDJOZXcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgYWZmZWN0ZWRCb3VuZGFyeS54Mk5ldyA9IE1hdGgubWF4KHdpZHRoLCBhZmZlY3RlZEJvdW5kYXJ5LngyKTtcbiAgICB9XG4gIH1cbn1cblxuY2xhc3MgVGV4dExheWVyUmVuZGVyVGFzayB7XG4gIGNvbnN0cnVjdG9yKHtcbiAgICB0ZXh0Q29udGVudCxcbiAgICB0ZXh0Q29udGVudFN0cmVhbSxcbiAgICBjb250YWluZXIsXG4gICAgdmlld3BvcnQsXG4gICAgdGV4dERpdnMsXG4gICAgdGV4dENvbnRlbnRJdGVtc1N0cixcbiAgICBlbmhhbmNlVGV4dFNlbGVjdGlvblxuICB9KSB7XG4gICAgdGhpcy5fdGV4dENvbnRlbnQgPSB0ZXh0Q29udGVudDtcbiAgICB0aGlzLl90ZXh0Q29udGVudFN0cmVhbSA9IHRleHRDb250ZW50U3RyZWFtO1xuICAgIHRoaXMuX2NvbnRhaW5lciA9IGNvbnRhaW5lcjtcbiAgICB0aGlzLl9kb2N1bWVudCA9IGNvbnRhaW5lci5vd25lckRvY3VtZW50O1xuICAgIHRoaXMuX3ZpZXdwb3J0ID0gdmlld3BvcnQ7XG4gICAgdGhpcy5fdGV4dERpdnMgPSB0ZXh0RGl2cyB8fCBbXTtcbiAgICB0aGlzLl90ZXh0Q29udGVudEl0ZW1zU3RyID0gdGV4dENvbnRlbnRJdGVtc1N0ciB8fCBbXTtcbiAgICB0aGlzLl9lbmhhbmNlVGV4dFNlbGVjdGlvbiA9ICEhZW5oYW5jZVRleHRTZWxlY3Rpb247XG4gICAgdGhpcy5fZm9udEluc3BlY3RvckVuYWJsZWQgPSAhIWdsb2JhbFRoaXMuRm9udEluc3BlY3Rvcj8uZW5hYmxlZDtcbiAgICB0aGlzLl9yZWFkZXIgPSBudWxsO1xuICAgIHRoaXMuX2xheW91dFRleHRMYXN0Rm9udFNpemUgPSBudWxsO1xuICAgIHRoaXMuX2xheW91dFRleHRMYXN0Rm9udEZhbWlseSA9IG51bGw7XG4gICAgdGhpcy5fbGF5b3V0VGV4dEN0eCA9IG51bGw7XG4gICAgdGhpcy5fdGV4dERpdlByb3BlcnRpZXMgPSBuZXcgV2Vha01hcCgpO1xuICAgIHRoaXMuX3JlbmRlcmluZ0RvbmUgPSBmYWxzZTtcbiAgICB0aGlzLl9jYW5jZWxlZCA9IGZhbHNlO1xuICAgIHRoaXMuX2NhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgdGhpcy5fcmVuZGVyVGltZXIgPSBudWxsO1xuICAgIHRoaXMuX2JvdW5kcyA9IFtdO1xuXG4gICAgdGhpcy5fY2FwYWJpbGl0eS5wcm9taXNlLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9lbmhhbmNlVGV4dFNlbGVjdGlvbikge1xuICAgICAgICB0aGlzLl90ZXh0RGl2UHJvcGVydGllcyA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9sYXlvdXRUZXh0Q3R4KSB7XG4gICAgICAgIHRoaXMuX2xheW91dFRleHRDdHguY2FudmFzLndpZHRoID0gMDtcbiAgICAgICAgdGhpcy5fbGF5b3V0VGV4dEN0eC5jYW52YXMuaGVpZ2h0ID0gMDtcbiAgICAgICAgdGhpcy5fbGF5b3V0VGV4dEN0eCA9IG51bGw7XG4gICAgICB9XG4gICAgfSkuY2F0Y2goKCkgPT4ge30pO1xuICB9XG5cbiAgZ2V0IHByb21pc2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxuXG4gIGNhbmNlbCgpIHtcbiAgICB0aGlzLl9jYW5jZWxlZCA9IHRydWU7XG5cbiAgICBpZiAodGhpcy5fcmVhZGVyKSB7XG4gICAgICB0aGlzLl9yZWFkZXIuY2FuY2VsKG5ldyBfdXRpbC5BYm9ydEV4Y2VwdGlvbihcIlRleHRMYXllciB0YXNrIGNhbmNlbGxlZC5cIikpLmNhdGNoKCgpID0+IHt9KTtcblxuICAgICAgdGhpcy5fcmVhZGVyID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcmVuZGVyVGltZXIgIT09IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9yZW5kZXJUaW1lcik7XG4gICAgICB0aGlzLl9yZW5kZXJUaW1lciA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fY2FwYWJpbGl0eS5yZWplY3QobmV3IEVycm9yKFwiVGV4dExheWVyIHRhc2sgY2FuY2VsbGVkLlwiKSk7XG4gIH1cblxuICBfcHJvY2Vzc0l0ZW1zKGl0ZW1zLCBzdHlsZUNhY2hlKSB7XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGl0ZW1zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBpZiAoaXRlbXNbaV0uc3RyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKGl0ZW1zW2ldLnR5cGUgPT09IFwiYmVnaW5NYXJrZWRDb250ZW50UHJvcHNcIiB8fCBpdGVtc1tpXS50eXBlID09PSBcImJlZ2luTWFya2VkQ29udGVudFwiKSB7XG4gICAgICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5fY29udGFpbmVyO1xuICAgICAgICAgIHRoaXMuX2NvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuXG4gICAgICAgICAgdGhpcy5fY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJtYXJrZWRDb250ZW50XCIpO1xuXG4gICAgICAgICAgaWYgKGl0ZW1zW2ldLmlkICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXIuc2V0QXR0cmlidXRlKFwiaWRcIiwgYCR7aXRlbXNbaV0uaWR9YCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGFyZW50LmFwcGVuZENoaWxkKHRoaXMuX2NvbnRhaW5lcik7XG4gICAgICAgIH0gZWxzZSBpZiAoaXRlbXNbaV0udHlwZSA9PT0gXCJlbmRNYXJrZWRDb250ZW50XCIpIHtcbiAgICAgICAgICB0aGlzLl9jb250YWluZXIgPSB0aGlzLl9jb250YWluZXIucGFyZW50Tm9kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl90ZXh0Q29udGVudEl0ZW1zU3RyLnB1c2goaXRlbXNbaV0uc3RyKTtcblxuICAgICAgYXBwZW5kVGV4dCh0aGlzLCBpdGVtc1tpXSwgc3R5bGVDYWNoZSwgdGhpcy5fbGF5b3V0VGV4dEN0eCk7XG4gICAgfVxuICB9XG5cbiAgX2xheW91dFRleHQodGV4dERpdikge1xuICAgIGNvbnN0IHRleHREaXZQcm9wZXJ0aWVzID0gdGhpcy5fdGV4dERpdlByb3BlcnRpZXMuZ2V0KHRleHREaXYpO1xuXG4gICAgbGV0IHRyYW5zZm9ybSA9IFwiXCI7XG5cbiAgICBpZiAodGV4dERpdlByb3BlcnRpZXMuY2FudmFzV2lkdGggIT09IDAgJiYgdGV4dERpdlByb3BlcnRpZXMuaGFzVGV4dCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBmb250U2l6ZSxcbiAgICAgICAgZm9udEZhbWlseVxuICAgICAgfSA9IHRleHREaXYuc3R5bGU7XG5cbiAgICAgIGlmIChmb250U2l6ZSAhPT0gdGhpcy5fbGF5b3V0VGV4dExhc3RGb250U2l6ZSB8fCBmb250RmFtaWx5ICE9PSB0aGlzLl9sYXlvdXRUZXh0TGFzdEZvbnRGYW1pbHkpIHtcbiAgICAgICAgdGhpcy5fbGF5b3V0VGV4dEN0eC5mb250ID0gYCR7Zm9udFNpemV9ICR7Zm9udEZhbWlseX1gO1xuICAgICAgICB0aGlzLl9sYXlvdXRUZXh0TGFzdEZvbnRTaXplID0gZm9udFNpemU7XG4gICAgICAgIHRoaXMuX2xheW91dFRleHRMYXN0Rm9udEZhbWlseSA9IGZvbnRGYW1pbHk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgd2lkdGhcbiAgICAgIH0gPSB0aGlzLl9sYXlvdXRUZXh0Q3R4Lm1lYXN1cmVUZXh0KHRleHREaXYudGV4dENvbnRlbnQpO1xuXG4gICAgICBpZiAod2lkdGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHNjYWxlID0gdGV4dERpdlByb3BlcnRpZXMuY2FudmFzV2lkdGggLyB3aWR0aDtcblxuICAgICAgICBpZiAodGhpcy5fZW5oYW5jZVRleHRTZWxlY3Rpb24pIHtcbiAgICAgICAgICB0ZXh0RGl2UHJvcGVydGllcy5zY2FsZSA9IHNjYWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJhbnNmb3JtID0gYHNjYWxlWCgke3NjYWxlfSlgO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0ZXh0RGl2UHJvcGVydGllcy5hbmdsZSAhPT0gMCkge1xuICAgICAgdHJhbnNmb3JtID0gYHJvdGF0ZSgke3RleHREaXZQcm9wZXJ0aWVzLmFuZ2xlfWRlZykgJHt0cmFuc2Zvcm19YDtcbiAgICB9XG5cbiAgICBpZiAodHJhbnNmb3JtLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmICh0aGlzLl9lbmhhbmNlVGV4dFNlbGVjdGlvbikge1xuICAgICAgICB0ZXh0RGl2UHJvcGVydGllcy5vcmlnaW5hbFRyYW5zZm9ybSA9IHRyYW5zZm9ybTtcbiAgICAgIH1cblxuICAgICAgdGV4dERpdi5zdHlsZS50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG4gICAgfVxuXG4gICAgaWYgKHRleHREaXZQcm9wZXJ0aWVzLmhhc1RleHQpIHtcbiAgICAgIHRoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZCh0ZXh0RGl2KTtcbiAgICB9XG5cbiAgICBpZiAodGV4dERpdlByb3BlcnRpZXMuaGFzRU9MKSB7XG4gICAgICBjb25zdCBiciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJiclwiKTtcbiAgICAgIGJyLnNldEF0dHJpYnV0ZShcInJvbGVcIiwgXCJwcmVzZW50YXRpb25cIik7XG5cbiAgICAgIHRoaXMuX2NvbnRhaW5lci5hcHBlbmRDaGlsZChicik7XG4gICAgfVxuICB9XG5cbiAgX3JlbmRlcih0aW1lb3V0ID0gMCkge1xuICAgIGNvbnN0IGNhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgbGV0IHN0eWxlQ2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgY29uc3QgY2FudmFzID0gdGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcblxuICAgIGNhbnZhcy5oZWlnaHQgPSBjYW52YXMud2lkdGggPSBERUZBVUxUX0ZPTlRfU0laRTtcbiAgICBjYW52YXMubW96T3BhcXVlID0gdHJ1ZTtcbiAgICB0aGlzLl9sYXlvdXRUZXh0Q3R4ID0gY2FudmFzLmdldENvbnRleHQoXCIyZFwiLCB7XG4gICAgICBhbHBoYTogZmFsc2VcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLl90ZXh0Q29udGVudCkge1xuICAgICAgY29uc3QgdGV4dEl0ZW1zID0gdGhpcy5fdGV4dENvbnRlbnQuaXRlbXM7XG4gICAgICBjb25zdCB0ZXh0U3R5bGVzID0gdGhpcy5fdGV4dENvbnRlbnQuc3R5bGVzO1xuXG4gICAgICB0aGlzLl9wcm9jZXNzSXRlbXModGV4dEl0ZW1zLCB0ZXh0U3R5bGVzKTtcblxuICAgICAgY2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl90ZXh0Q29udGVudFN0cmVhbSkge1xuICAgICAgY29uc3QgcHVtcCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5fcmVhZGVyLnJlYWQoKS50aGVuKCh7XG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgZG9uZVxuICAgICAgICB9KSA9PiB7XG4gICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgIGNhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oc3R5bGVDYWNoZSwgdmFsdWUuc3R5bGVzKTtcblxuICAgICAgICAgIHRoaXMuX3Byb2Nlc3NJdGVtcyh2YWx1ZS5pdGVtcywgc3R5bGVDYWNoZSk7XG5cbiAgICAgICAgICBwdW1wKCk7XG4gICAgICAgIH0sIGNhcGFiaWxpdHkucmVqZWN0KTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuX3JlYWRlciA9IHRoaXMuX3RleHRDb250ZW50U3RyZWFtLmdldFJlYWRlcigpO1xuICAgICAgcHVtcCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05laXRoZXIgXCJ0ZXh0Q29udGVudFwiIG5vciBcInRleHRDb250ZW50U3RyZWFtXCIgcGFyYW1ldGVycyBzcGVjaWZpZWQuJyk7XG4gICAgfVxuXG4gICAgY2FwYWJpbGl0eS5wcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgc3R5bGVDYWNoZSA9IG51bGw7XG5cbiAgICAgIGlmICghdGltZW91dCkge1xuICAgICAgICByZW5kZXIodGhpcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9yZW5kZXJUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHJlbmRlcih0aGlzKTtcbiAgICAgICAgICB0aGlzLl9yZW5kZXJUaW1lciA9IG51bGw7XG4gICAgICAgIH0sIHRpbWVvdXQpO1xuICAgICAgfVxuICAgIH0sIHRoaXMuX2NhcGFiaWxpdHkucmVqZWN0KTtcbiAgfVxuXG4gIGV4cGFuZFRleHREaXZzKGV4cGFuZERpdnMgPSBmYWxzZSkge1xuICAgIGlmICghdGhpcy5fZW5oYW5jZVRleHRTZWxlY3Rpb24gfHwgIXRoaXMuX3JlbmRlcmluZ0RvbmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fYm91bmRzICE9PSBudWxsKSB7XG4gICAgICBleHBhbmQodGhpcyk7XG4gICAgICB0aGlzLl9ib3VuZHMgPSBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHRyYW5zZm9ybUJ1ZiA9IFtdLFxuICAgICAgICAgIHBhZGRpbmdCdWYgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHRoaXMuX3RleHREaXZzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGNvbnN0IGRpdiA9IHRoaXMuX3RleHREaXZzW2ldO1xuXG4gICAgICBjb25zdCBkaXZQcm9wcyA9IHRoaXMuX3RleHREaXZQcm9wZXJ0aWVzLmdldChkaXYpO1xuXG4gICAgICBpZiAoIWRpdlByb3BzLmhhc1RleHQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChleHBhbmREaXZzKSB7XG4gICAgICAgIHRyYW5zZm9ybUJ1Zi5sZW5ndGggPSAwO1xuICAgICAgICBwYWRkaW5nQnVmLmxlbmd0aCA9IDA7XG5cbiAgICAgICAgaWYgKGRpdlByb3BzLm9yaWdpbmFsVHJhbnNmb3JtKSB7XG4gICAgICAgICAgdHJhbnNmb3JtQnVmLnB1c2goZGl2UHJvcHMub3JpZ2luYWxUcmFuc2Zvcm0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRpdlByb3BzLnBhZGRpbmdUb3AgPiAwKSB7XG4gICAgICAgICAgcGFkZGluZ0J1Zi5wdXNoKGAke2RpdlByb3BzLnBhZGRpbmdUb3B9cHhgKTtcbiAgICAgICAgICB0cmFuc2Zvcm1CdWYucHVzaChgdHJhbnNsYXRlWSgkey1kaXZQcm9wcy5wYWRkaW5nVG9wfXB4KWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhZGRpbmdCdWYucHVzaCgwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXZQcm9wcy5wYWRkaW5nUmlnaHQgPiAwKSB7XG4gICAgICAgICAgcGFkZGluZ0J1Zi5wdXNoKGAke2RpdlByb3BzLnBhZGRpbmdSaWdodCAvIGRpdlByb3BzLnNjYWxlfXB4YCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFkZGluZ0J1Zi5wdXNoKDApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRpdlByb3BzLnBhZGRpbmdCb3R0b20gPiAwKSB7XG4gICAgICAgICAgcGFkZGluZ0J1Zi5wdXNoKGAke2RpdlByb3BzLnBhZGRpbmdCb3R0b219cHhgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYWRkaW5nQnVmLnB1c2goMCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGl2UHJvcHMucGFkZGluZ0xlZnQgPiAwKSB7XG4gICAgICAgICAgcGFkZGluZ0J1Zi5wdXNoKGAke2RpdlByb3BzLnBhZGRpbmdMZWZ0IC8gZGl2UHJvcHMuc2NhbGV9cHhgKTtcbiAgICAgICAgICB0cmFuc2Zvcm1CdWYucHVzaChgdHJhbnNsYXRlWCgkey1kaXZQcm9wcy5wYWRkaW5nTGVmdCAvIGRpdlByb3BzLnNjYWxlfXB4KWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhZGRpbmdCdWYucHVzaCgwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRpdi5zdHlsZS5wYWRkaW5nID0gcGFkZGluZ0J1Zi5qb2luKFwiIFwiKTtcblxuICAgICAgICBpZiAodHJhbnNmb3JtQnVmLmxlbmd0aCkge1xuICAgICAgICAgIGRpdi5zdHlsZS50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1CdWYuam9pbihcIiBcIik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRpdi5zdHlsZS5wYWRkaW5nID0gbnVsbDtcbiAgICAgICAgZGl2LnN0eWxlLnRyYW5zZm9ybSA9IGRpdlByb3BzLm9yaWdpbmFsVHJhbnNmb3JtO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG59XG5cbmZ1bmN0aW9uIHJlbmRlclRleHRMYXllcihyZW5kZXJQYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IHRhc2sgPSBuZXcgVGV4dExheWVyUmVuZGVyVGFzayh7XG4gICAgdGV4dENvbnRlbnQ6IHJlbmRlclBhcmFtZXRlcnMudGV4dENvbnRlbnQsXG4gICAgdGV4dENvbnRlbnRTdHJlYW06IHJlbmRlclBhcmFtZXRlcnMudGV4dENvbnRlbnRTdHJlYW0sXG4gICAgY29udGFpbmVyOiByZW5kZXJQYXJhbWV0ZXJzLmNvbnRhaW5lcixcbiAgICB2aWV3cG9ydDogcmVuZGVyUGFyYW1ldGVycy52aWV3cG9ydCxcbiAgICB0ZXh0RGl2czogcmVuZGVyUGFyYW1ldGVycy50ZXh0RGl2cyxcbiAgICB0ZXh0Q29udGVudEl0ZW1zU3RyOiByZW5kZXJQYXJhbWV0ZXJzLnRleHRDb250ZW50SXRlbXNTdHIsXG4gICAgZW5oYW5jZVRleHRTZWxlY3Rpb246IHJlbmRlclBhcmFtZXRlcnMuZW5oYW5jZVRleHRTZWxlY3Rpb25cbiAgfSk7XG5cbiAgdGFzay5fcmVuZGVyKHJlbmRlclBhcmFtZXRlcnMudGltZW91dCk7XG5cbiAgcmV0dXJuIHRhc2s7XG59XG5cbi8qKiovIH0pLFxuLyogMjIgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuU1ZHR3JhcGhpY3MgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfZGlzcGxheV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oMSk7XG5cbnZhciBfaXNfbm9kZSA9IF9fd19wZGZqc19yZXF1aXJlX18oNCk7XG5cbmxldCBTVkdHcmFwaGljcyA9IGNsYXNzIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIk5vdCBpbXBsZW1lbnRlZDogU1ZHR3JhcGhpY3NcIik7XG4gIH1cblxufTtcbmV4cG9ydHMuU1ZHR3JhcGhpY3MgPSBTVkdHcmFwaGljcztcbntcbiAgY29uc3QgU1ZHX0RFRkFVTFRTID0ge1xuICAgIGZvbnRTdHlsZTogXCJub3JtYWxcIixcbiAgICBmb250V2VpZ2h0OiBcIm5vcm1hbFwiLFxuICAgIGZpbGxDb2xvcjogXCIjMDAwMDAwXCJcbiAgfTtcbiAgY29uc3QgWE1MX05TID0gXCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2VcIjtcbiAgY29uc3QgWExJTktfTlMgPSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIjtcbiAgY29uc3QgTElORV9DQVBfU1RZTEVTID0gW1wiYnV0dFwiLCBcInJvdW5kXCIsIFwic3F1YXJlXCJdO1xuICBjb25zdCBMSU5FX0pPSU5fU1RZTEVTID0gW1wibWl0ZXJcIiwgXCJyb3VuZFwiLCBcImJldmVsXCJdO1xuXG4gIGNvbnN0IGNvbnZlcnRJbWdEYXRhVG9QbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgUE5HX0hFQURFUiA9IG5ldyBVaW50OEFycmF5KFsweDg5LCAweDUwLCAweDRlLCAweDQ3LCAweDBkLCAweDBhLCAweDFhLCAweDBhXSk7XG4gICAgY29uc3QgQ0hVTktfV1JBUFBFUl9TSVpFID0gMTI7XG4gICAgY29uc3QgY3JjVGFibGUgPSBuZXcgSW50MzJBcnJheSgyNTYpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgICAgbGV0IGMgPSBpO1xuXG4gICAgICBmb3IgKGxldCBoID0gMDsgaCA8IDg7IGgrKykge1xuICAgICAgICBpZiAoYyAmIDEpIHtcbiAgICAgICAgICBjID0gMHhlZGI4ODMyMCBeIGMgPj4gMSAmIDB4N2ZmZmZmZmY7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYyA9IGMgPj4gMSAmIDB4N2ZmZmZmZmY7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY3JjVGFibGVbaV0gPSBjO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyYzMyKGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgICAgIGxldCBjcmMgPSAtMTtcblxuICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHtcbiAgICAgICAgY29uc3QgYSA9IChjcmMgXiBkYXRhW2ldKSAmIDB4ZmY7XG4gICAgICAgIGNvbnN0IGIgPSBjcmNUYWJsZVthXTtcbiAgICAgICAgY3JjID0gY3JjID4+PiA4IF4gYjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNyYyBeIC0xO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdyaXRlUG5nQ2h1bmsodHlwZSwgYm9keSwgZGF0YSwgb2Zmc2V0KSB7XG4gICAgICBsZXQgcCA9IG9mZnNldDtcbiAgICAgIGNvbnN0IGxlbiA9IGJvZHkubGVuZ3RoO1xuICAgICAgZGF0YVtwXSA9IGxlbiA+PiAyNCAmIDB4ZmY7XG4gICAgICBkYXRhW3AgKyAxXSA9IGxlbiA+PiAxNiAmIDB4ZmY7XG4gICAgICBkYXRhW3AgKyAyXSA9IGxlbiA+PiA4ICYgMHhmZjtcbiAgICAgIGRhdGFbcCArIDNdID0gbGVuICYgMHhmZjtcbiAgICAgIHAgKz0gNDtcbiAgICAgIGRhdGFbcF0gPSB0eXBlLmNoYXJDb2RlQXQoMCkgJiAweGZmO1xuICAgICAgZGF0YVtwICsgMV0gPSB0eXBlLmNoYXJDb2RlQXQoMSkgJiAweGZmO1xuICAgICAgZGF0YVtwICsgMl0gPSB0eXBlLmNoYXJDb2RlQXQoMikgJiAweGZmO1xuICAgICAgZGF0YVtwICsgM10gPSB0eXBlLmNoYXJDb2RlQXQoMykgJiAweGZmO1xuICAgICAgcCArPSA0O1xuICAgICAgZGF0YS5zZXQoYm9keSwgcCk7XG4gICAgICBwICs9IGJvZHkubGVuZ3RoO1xuICAgICAgY29uc3QgY3JjID0gY3JjMzIoZGF0YSwgb2Zmc2V0ICsgNCwgcCk7XG4gICAgICBkYXRhW3BdID0gY3JjID4+IDI0ICYgMHhmZjtcbiAgICAgIGRhdGFbcCArIDFdID0gY3JjID4+IDE2ICYgMHhmZjtcbiAgICAgIGRhdGFbcCArIDJdID0gY3JjID4+IDggJiAweGZmO1xuICAgICAgZGF0YVtwICsgM10gPSBjcmMgJiAweGZmO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkbGVyMzIoZGF0YSwgc3RhcnQsIGVuZCkge1xuICAgICAgbGV0IGEgPSAxO1xuICAgICAgbGV0IGIgPSAwO1xuXG4gICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgICAgICBhID0gKGEgKyAoZGF0YVtpXSAmIDB4ZmYpKSAlIDY1NTIxO1xuICAgICAgICBiID0gKGIgKyBhKSAlIDY1NTIxO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYiA8PCAxNiB8IGE7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVmbGF0ZVN5bmMobGl0ZXJhbHMpIHtcbiAgICAgIGlmICghX2lzX25vZGUuaXNOb2RlSlMpIHtcbiAgICAgICAgcmV0dXJuIGRlZmxhdGVTeW5jVW5jb21wcmVzc2VkKGxpdGVyYWxzKTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgbGV0IGlucHV0O1xuXG4gICAgICAgIGlmIChwYXJzZUludChwcm9jZXNzLnZlcnNpb25zLm5vZGUpID49IDgpIHtcbiAgICAgICAgICBpbnB1dCA9IGxpdGVyYWxzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlucHV0ID0gQnVmZmVyLmZyb20obGl0ZXJhbHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gcmVxdWlyZShcInpsaWJcIikuZGVmbGF0ZVN5bmMoaW5wdXQsIHtcbiAgICAgICAgICBsZXZlbDogOVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gb3V0cHV0IGluc3RhbmNlb2YgVWludDhBcnJheSA/IG91dHB1dCA6IG5ldyBVaW50OEFycmF5KG91dHB1dCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShcIk5vdCBjb21wcmVzc2luZyBQTkcgYmVjYXVzZSB6bGliLmRlZmxhdGVTeW5jIGlzIHVuYXZhaWxhYmxlOiBcIiArIGUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGVmbGF0ZVN5bmNVbmNvbXByZXNzZWQobGl0ZXJhbHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlZmxhdGVTeW5jVW5jb21wcmVzc2VkKGxpdGVyYWxzKSB7XG4gICAgICBsZXQgbGVuID0gbGl0ZXJhbHMubGVuZ3RoO1xuICAgICAgY29uc3QgbWF4QmxvY2tMZW5ndGggPSAweGZmZmY7XG4gICAgICBjb25zdCBkZWZsYXRlQmxvY2tzID0gTWF0aC5jZWlsKGxlbiAvIG1heEJsb2NrTGVuZ3RoKTtcbiAgICAgIGNvbnN0IGlkYXQgPSBuZXcgVWludDhBcnJheSgyICsgbGVuICsgZGVmbGF0ZUJsb2NrcyAqIDUgKyA0KTtcbiAgICAgIGxldCBwaSA9IDA7XG4gICAgICBpZGF0W3BpKytdID0gMHg3ODtcbiAgICAgIGlkYXRbcGkrK10gPSAweDljO1xuICAgICAgbGV0IHBvcyA9IDA7XG5cbiAgICAgIHdoaWxlIChsZW4gPiBtYXhCbG9ja0xlbmd0aCkge1xuICAgICAgICBpZGF0W3BpKytdID0gMHgwMDtcbiAgICAgICAgaWRhdFtwaSsrXSA9IDB4ZmY7XG4gICAgICAgIGlkYXRbcGkrK10gPSAweGZmO1xuICAgICAgICBpZGF0W3BpKytdID0gMHgwMDtcbiAgICAgICAgaWRhdFtwaSsrXSA9IDB4MDA7XG4gICAgICAgIGlkYXQuc2V0KGxpdGVyYWxzLnN1YmFycmF5KHBvcywgcG9zICsgbWF4QmxvY2tMZW5ndGgpLCBwaSk7XG4gICAgICAgIHBpICs9IG1heEJsb2NrTGVuZ3RoO1xuICAgICAgICBwb3MgKz0gbWF4QmxvY2tMZW5ndGg7XG4gICAgICAgIGxlbiAtPSBtYXhCbG9ja0xlbmd0aDtcbiAgICAgIH1cblxuICAgICAgaWRhdFtwaSsrXSA9IDB4MDE7XG4gICAgICBpZGF0W3BpKytdID0gbGVuICYgMHhmZjtcbiAgICAgIGlkYXRbcGkrK10gPSBsZW4gPj4gOCAmIDB4ZmY7XG4gICAgICBpZGF0W3BpKytdID0gfmxlbiAmIDB4ZmZmZiAmIDB4ZmY7XG4gICAgICBpZGF0W3BpKytdID0gKH5sZW4gJiAweGZmZmYpID4+IDggJiAweGZmO1xuICAgICAgaWRhdC5zZXQobGl0ZXJhbHMuc3ViYXJyYXkocG9zKSwgcGkpO1xuICAgICAgcGkgKz0gbGl0ZXJhbHMubGVuZ3RoIC0gcG9zO1xuICAgICAgY29uc3QgYWRsZXIgPSBhZGxlcjMyKGxpdGVyYWxzLCAwLCBsaXRlcmFscy5sZW5ndGgpO1xuICAgICAgaWRhdFtwaSsrXSA9IGFkbGVyID4+IDI0ICYgMHhmZjtcbiAgICAgIGlkYXRbcGkrK10gPSBhZGxlciA+PiAxNiAmIDB4ZmY7XG4gICAgICBpZGF0W3BpKytdID0gYWRsZXIgPj4gOCAmIDB4ZmY7XG4gICAgICBpZGF0W3BpKytdID0gYWRsZXIgJiAweGZmO1xuICAgICAgcmV0dXJuIGlkYXQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW5jb2RlKGltZ0RhdGEsIGtpbmQsIGZvcmNlRGF0YVNjaGVtYSwgaXNNYXNrKSB7XG4gICAgICBjb25zdCB3aWR0aCA9IGltZ0RhdGEud2lkdGg7XG4gICAgICBjb25zdCBoZWlnaHQgPSBpbWdEYXRhLmhlaWdodDtcbiAgICAgIGxldCBiaXREZXB0aCwgY29sb3JUeXBlLCBsaW5lU2l6ZTtcbiAgICAgIGNvbnN0IGJ5dGVzID0gaW1nRGF0YS5kYXRhO1xuXG4gICAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgICAgY2FzZSBfdXRpbC5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFA6XG4gICAgICAgICAgY29sb3JUeXBlID0gMDtcbiAgICAgICAgICBiaXREZXB0aCA9IDE7XG4gICAgICAgICAgbGluZVNpemUgPSB3aWR0aCArIDcgPj4gMztcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIF91dGlsLkltYWdlS2luZC5SR0JfMjRCUFA6XG4gICAgICAgICAgY29sb3JUeXBlID0gMjtcbiAgICAgICAgICBiaXREZXB0aCA9IDg7XG4gICAgICAgICAgbGluZVNpemUgPSB3aWR0aCAqIDM7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBfdXRpbC5JbWFnZUtpbmQuUkdCQV8zMkJQUDpcbiAgICAgICAgICBjb2xvclR5cGUgPSA2O1xuICAgICAgICAgIGJpdERlcHRoID0gODtcbiAgICAgICAgICBsaW5lU2l6ZSA9IHdpZHRoICogNDtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZm9ybWF0XCIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsaXRlcmFscyA9IG5ldyBVaW50OEFycmF5KCgxICsgbGluZVNpemUpICogaGVpZ2h0KTtcbiAgICAgIGxldCBvZmZzZXRMaXRlcmFscyA9IDAsXG4gICAgICAgICAgb2Zmc2V0Qnl0ZXMgPSAwO1xuXG4gICAgICBmb3IgKGxldCB5ID0gMDsgeSA8IGhlaWdodDsgKyt5KSB7XG4gICAgICAgIGxpdGVyYWxzW29mZnNldExpdGVyYWxzKytdID0gMDtcbiAgICAgICAgbGl0ZXJhbHMuc2V0KGJ5dGVzLnN1YmFycmF5KG9mZnNldEJ5dGVzLCBvZmZzZXRCeXRlcyArIGxpbmVTaXplKSwgb2Zmc2V0TGl0ZXJhbHMpO1xuICAgICAgICBvZmZzZXRCeXRlcyArPSBsaW5lU2l6ZTtcbiAgICAgICAgb2Zmc2V0TGl0ZXJhbHMgKz0gbGluZVNpemU7XG4gICAgICB9XG5cbiAgICAgIGlmIChraW5kID09PSBfdXRpbC5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFAgJiYgaXNNYXNrKSB7XG4gICAgICAgIG9mZnNldExpdGVyYWxzID0gMDtcblxuICAgICAgICBmb3IgKGxldCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7XG4gICAgICAgICAgb2Zmc2V0TGl0ZXJhbHMrKztcblxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZVNpemU7IGkrKykge1xuICAgICAgICAgICAgbGl0ZXJhbHNbb2Zmc2V0TGl0ZXJhbHMrK10gXj0gMHhmZjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgaWhkciA9IG5ldyBVaW50OEFycmF5KFt3aWR0aCA+PiAyNCAmIDB4ZmYsIHdpZHRoID4+IDE2ICYgMHhmZiwgd2lkdGggPj4gOCAmIDB4ZmYsIHdpZHRoICYgMHhmZiwgaGVpZ2h0ID4+IDI0ICYgMHhmZiwgaGVpZ2h0ID4+IDE2ICYgMHhmZiwgaGVpZ2h0ID4+IDggJiAweGZmLCBoZWlnaHQgJiAweGZmLCBiaXREZXB0aCwgY29sb3JUeXBlLCAweDAwLCAweDAwLCAweDAwXSk7XG4gICAgICBjb25zdCBpZGF0ID0gZGVmbGF0ZVN5bmMobGl0ZXJhbHMpO1xuICAgICAgY29uc3QgcG5nTGVuZ3RoID0gUE5HX0hFQURFUi5sZW5ndGggKyBDSFVOS19XUkFQUEVSX1NJWkUgKiAzICsgaWhkci5sZW5ndGggKyBpZGF0Lmxlbmd0aDtcbiAgICAgIGNvbnN0IGRhdGEgPSBuZXcgVWludDhBcnJheShwbmdMZW5ndGgpO1xuICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICBkYXRhLnNldChQTkdfSEVBREVSLCBvZmZzZXQpO1xuICAgICAgb2Zmc2V0ICs9IFBOR19IRUFERVIubGVuZ3RoO1xuICAgICAgd3JpdGVQbmdDaHVuayhcIklIRFJcIiwgaWhkciwgZGF0YSwgb2Zmc2V0KTtcbiAgICAgIG9mZnNldCArPSBDSFVOS19XUkFQUEVSX1NJWkUgKyBpaGRyLmxlbmd0aDtcbiAgICAgIHdyaXRlUG5nQ2h1bmsoXCJJREFUQVwiLCBpZGF0LCBkYXRhLCBvZmZzZXQpO1xuICAgICAgb2Zmc2V0ICs9IENIVU5LX1dSQVBQRVJfU0laRSArIGlkYXQubGVuZ3RoO1xuICAgICAgd3JpdGVQbmdDaHVuayhcIklFTkRcIiwgbmV3IFVpbnQ4QXJyYXkoMCksIGRhdGEsIG9mZnNldCk7XG4gICAgICByZXR1cm4gKDAsIF91dGlsLmNyZWF0ZU9iamVjdFVSTCkoZGF0YSwgXCJpbWFnZS9wbmdcIiwgZm9yY2VEYXRhU2NoZW1hKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gY29udmVydEltZ0RhdGFUb1BuZyhpbWdEYXRhLCBmb3JjZURhdGFTY2hlbWEsIGlzTWFzaykge1xuICAgICAgY29uc3Qga2luZCA9IGltZ0RhdGEua2luZCA9PT0gdW5kZWZpbmVkID8gX3V0aWwuSW1hZ2VLaW5kLkdSQVlTQ0FMRV8xQlBQIDogaW1nRGF0YS5raW5kO1xuICAgICAgcmV0dXJuIGVuY29kZShpbWdEYXRhLCBraW5kLCBmb3JjZURhdGFTY2hlbWEsIGlzTWFzayk7XG4gICAgfTtcbiAgfSgpO1xuXG4gIGNsYXNzIFNWR0V4dHJhU3RhdGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgdGhpcy5mb250U2l6ZVNjYWxlID0gMTtcbiAgICAgIHRoaXMuZm9udFdlaWdodCA9IFNWR19ERUZBVUxUUy5mb250V2VpZ2h0O1xuICAgICAgdGhpcy5mb250U2l6ZSA9IDA7XG4gICAgICB0aGlzLnRleHRNYXRyaXggPSBfdXRpbC5JREVOVElUWV9NQVRSSVg7XG4gICAgICB0aGlzLmZvbnRNYXRyaXggPSBfdXRpbC5GT05UX0lERU5USVRZX01BVFJJWDtcbiAgICAgIHRoaXMubGVhZGluZyA9IDA7XG4gICAgICB0aGlzLnRleHRSZW5kZXJpbmdNb2RlID0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuRklMTDtcbiAgICAgIHRoaXMudGV4dE1hdHJpeFNjYWxlID0gMTtcbiAgICAgIHRoaXMueCA9IDA7XG4gICAgICB0aGlzLnkgPSAwO1xuICAgICAgdGhpcy5saW5lWCA9IDA7XG4gICAgICB0aGlzLmxpbmVZID0gMDtcbiAgICAgIHRoaXMuY2hhclNwYWNpbmcgPSAwO1xuICAgICAgdGhpcy53b3JkU3BhY2luZyA9IDA7XG4gICAgICB0aGlzLnRleHRIU2NhbGUgPSAxO1xuICAgICAgdGhpcy50ZXh0UmlzZSA9IDA7XG4gICAgICB0aGlzLmZpbGxDb2xvciA9IFNWR19ERUZBVUxUUy5maWxsQ29sb3I7XG4gICAgICB0aGlzLnN0cm9rZUNvbG9yID0gXCIjMDAwMDAwXCI7XG4gICAgICB0aGlzLmZpbGxBbHBoYSA9IDE7XG4gICAgICB0aGlzLnN0cm9rZUFscGhhID0gMTtcbiAgICAgIHRoaXMubGluZVdpZHRoID0gMTtcbiAgICAgIHRoaXMubGluZUpvaW4gPSBcIlwiO1xuICAgICAgdGhpcy5saW5lQ2FwID0gXCJcIjtcbiAgICAgIHRoaXMubWl0ZXJMaW1pdCA9IDA7XG4gICAgICB0aGlzLmRhc2hBcnJheSA9IFtdO1xuICAgICAgdGhpcy5kYXNoUGhhc2UgPSAwO1xuICAgICAgdGhpcy5kZXBlbmRlbmNpZXMgPSBbXTtcbiAgICAgIHRoaXMuYWN0aXZlQ2xpcFVybCA9IG51bGw7XG4gICAgICB0aGlzLmNsaXBHcm91cCA9IG51bGw7XG4gICAgICB0aGlzLm1hc2tJZCA9IFwiXCI7XG4gICAgfVxuXG4gICAgY2xvbmUoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmNyZWF0ZSh0aGlzKTtcbiAgICB9XG5cbiAgICBzZXRDdXJyZW50UG9pbnQoeCwgeSkge1xuICAgICAgdGhpcy54ID0geDtcbiAgICAgIHRoaXMueSA9IHk7XG4gICAgfVxuXG4gIH1cblxuICBmdW5jdGlvbiBvcExpc3RUb1RyZWUob3BMaXN0KSB7XG4gICAgbGV0IG9wVHJlZSA9IFtdO1xuICAgIGNvbnN0IHRtcCA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBvcExpc3RFbGVtZW50IG9mIG9wTGlzdCkge1xuICAgICAgaWYgKG9wTGlzdEVsZW1lbnQuZm4gPT09IFwic2F2ZVwiKSB7XG4gICAgICAgIG9wVHJlZS5wdXNoKHtcbiAgICAgICAgICBmbklkOiA5MixcbiAgICAgICAgICBmbjogXCJncm91cFwiLFxuICAgICAgICAgIGl0ZW1zOiBbXVxuICAgICAgICB9KTtcbiAgICAgICAgdG1wLnB1c2gob3BUcmVlKTtcbiAgICAgICAgb3BUcmVlID0gb3BUcmVlW29wVHJlZS5sZW5ndGggLSAxXS5pdGVtcztcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcExpc3RFbGVtZW50LmZuID09PSBcInJlc3RvcmVcIikge1xuICAgICAgICBvcFRyZWUgPSB0bXAucG9wKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvcFRyZWUucHVzaChvcExpc3RFbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb3BUcmVlO1xuICB9XG5cbiAgZnVuY3Rpb24gcGYodmFsdWUpIHtcbiAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGNvbnN0IHMgPSB2YWx1ZS50b0ZpeGVkKDEwKTtcbiAgICBsZXQgaSA9IHMubGVuZ3RoIC0gMTtcblxuICAgIGlmIChzW2ldICE9PSBcIjBcIikge1xuICAgICAgcmV0dXJuIHM7XG4gICAgfVxuXG4gICAgZG8ge1xuICAgICAgaS0tO1xuICAgIH0gd2hpbGUgKHNbaV0gPT09IFwiMFwiKTtcblxuICAgIHJldHVybiBzLnN1YnN0cmluZygwLCBzW2ldID09PSBcIi5cIiA/IGkgOiBpICsgMSk7XG4gIH1cblxuICBmdW5jdGlvbiBwbShtKSB7XG4gICAgaWYgKG1bNF0gPT09IDAgJiYgbVs1XSA9PT0gMCkge1xuICAgICAgaWYgKG1bMV0gPT09IDAgJiYgbVsyXSA9PT0gMCkge1xuICAgICAgICBpZiAobVswXSA9PT0gMSAmJiBtWzNdID09PSAxKSB7XG4gICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYHNjYWxlKCR7cGYobVswXSl9ICR7cGYobVszXSl9KWA7XG4gICAgICB9XG5cbiAgICAgIGlmIChtWzBdID09PSBtWzNdICYmIG1bMV0gPT09IC1tWzJdKSB7XG4gICAgICAgIGNvbnN0IGEgPSBNYXRoLmFjb3MobVswXSkgKiAxODAgLyBNYXRoLlBJO1xuICAgICAgICByZXR1cm4gYHJvdGF0ZSgke3BmKGEpfSlgO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAobVswXSA9PT0gMSAmJiBtWzFdID09PSAwICYmIG1bMl0gPT09IDAgJiYgbVszXSA9PT0gMSkge1xuICAgICAgICByZXR1cm4gYHRyYW5zbGF0ZSgke3BmKG1bNF0pfSAke3BmKG1bNV0pfSlgO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBgbWF0cml4KCR7cGYobVswXSl9ICR7cGYobVsxXSl9ICR7cGYobVsyXSl9ICR7cGYobVszXSl9ICR7cGYobVs0XSl9IGAgKyBgJHtwZihtWzVdKX0pYDtcbiAgfVxuXG4gIGxldCBjbGlwQ291bnQgPSAwO1xuICBsZXQgbWFza0NvdW50ID0gMDtcbiAgbGV0IHNoYWRpbmdDb3VudCA9IDA7XG4gIGV4cG9ydHMuU1ZHR3JhcGhpY3MgPSBTVkdHcmFwaGljcyA9IGNsYXNzIHtcbiAgICBjb25zdHJ1Y3Rvcihjb21tb25PYmpzLCBvYmpzLCBmb3JjZURhdGFTY2hlbWEgPSBmYWxzZSkge1xuICAgICAgdGhpcy5zdmdGYWN0b3J5ID0gbmV3IF9kaXNwbGF5X3V0aWxzLkRPTVNWR0ZhY3RvcnkoKTtcbiAgICAgIHRoaXMuY3VycmVudCA9IG5ldyBTVkdFeHRyYVN0YXRlKCk7XG4gICAgICB0aGlzLnRyYW5zZm9ybU1hdHJpeCA9IF91dGlsLklERU5USVRZX01BVFJJWDtcbiAgICAgIHRoaXMudHJhbnNmb3JtU3RhY2sgPSBbXTtcbiAgICAgIHRoaXMuZXh0cmFTdGFjayA9IFtdO1xuICAgICAgdGhpcy5jb21tb25PYmpzID0gY29tbW9uT2JqcztcbiAgICAgIHRoaXMub2JqcyA9IG9ianM7XG4gICAgICB0aGlzLnBlbmRpbmdDbGlwID0gbnVsbDtcbiAgICAgIHRoaXMucGVuZGluZ0VPRmlsbCA9IGZhbHNlO1xuICAgICAgdGhpcy5lbWJlZEZvbnRzID0gZmFsc2U7XG4gICAgICB0aGlzLmVtYmVkZGVkRm9udHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgdGhpcy5jc3NTdHlsZSA9IG51bGw7XG4gICAgICB0aGlzLmZvcmNlRGF0YVNjaGVtYSA9ICEhZm9yY2VEYXRhU2NoZW1hO1xuICAgICAgdGhpcy5fb3BlcmF0b3JJZE1hcHBpbmcgPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBvcCBpbiBfdXRpbC5PUFMpIHtcbiAgICAgICAgdGhpcy5fb3BlcmF0b3JJZE1hcHBpbmdbX3V0aWwuT1BTW29wXV0gPSBvcDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzYXZlKCkge1xuICAgICAgdGhpcy50cmFuc2Zvcm1TdGFjay5wdXNoKHRoaXMudHJhbnNmb3JtTWF0cml4KTtcbiAgICAgIGNvbnN0IG9sZCA9IHRoaXMuY3VycmVudDtcbiAgICAgIHRoaXMuZXh0cmFTdGFjay5wdXNoKG9sZCk7XG4gICAgICB0aGlzLmN1cnJlbnQgPSBvbGQuY2xvbmUoKTtcbiAgICB9XG5cbiAgICByZXN0b3JlKCkge1xuICAgICAgdGhpcy50cmFuc2Zvcm1NYXRyaXggPSB0aGlzLnRyYW5zZm9ybVN0YWNrLnBvcCgpO1xuICAgICAgdGhpcy5jdXJyZW50ID0gdGhpcy5leHRyYVN0YWNrLnBvcCgpO1xuICAgICAgdGhpcy5wZW5kaW5nQ2xpcCA9IG51bGw7XG4gICAgICB0aGlzLnRncnAgPSBudWxsO1xuICAgIH1cblxuICAgIGdyb3VwKGl0ZW1zKSB7XG4gICAgICB0aGlzLnNhdmUoKTtcbiAgICAgIHRoaXMuZXhlY3V0ZU9wVHJlZShpdGVtcyk7XG4gICAgICB0aGlzLnJlc3RvcmUoKTtcbiAgICB9XG5cbiAgICBsb2FkRGVwZW5kZW5jaWVzKG9wZXJhdG9yTGlzdCkge1xuICAgICAgY29uc3QgZm5BcnJheSA9IG9wZXJhdG9yTGlzdC5mbkFycmF5O1xuICAgICAgY29uc3QgYXJnc0FycmF5ID0gb3BlcmF0b3JMaXN0LmFyZ3NBcnJheTtcblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gZm5BcnJheS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIGlmIChmbkFycmF5W2ldICE9PSBfdXRpbC5PUFMuZGVwZW5kZW5jeSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBvYmogb2YgYXJnc0FycmF5W2ldKSB7XG4gICAgICAgICAgY29uc3Qgb2Jqc1Bvb2wgPSBvYmouc3RhcnRzV2l0aChcImdfXCIpID8gdGhpcy5jb21tb25PYmpzIDogdGhpcy5vYmpzO1xuICAgICAgICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgIG9ianNQb29sLmdldChvYmosIHJlc29sdmUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuY3VycmVudC5kZXBlbmRlbmNpZXMucHVzaChwcm9taXNlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwodGhpcy5jdXJyZW50LmRlcGVuZGVuY2llcyk7XG4gICAgfVxuXG4gICAgdHJhbnNmb3JtKGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgICAgIGNvbnN0IHRyYW5zZm9ybU1hdHJpeCA9IFthLCBiLCBjLCBkLCBlLCBmXTtcbiAgICAgIHRoaXMudHJhbnNmb3JtTWF0cml4ID0gX3V0aWwuVXRpbC50cmFuc2Zvcm0odGhpcy50cmFuc2Zvcm1NYXRyaXgsIHRyYW5zZm9ybU1hdHJpeCk7XG4gICAgICB0aGlzLnRncnAgPSBudWxsO1xuICAgIH1cblxuICAgIGdldFNWRyhvcGVyYXRvckxpc3QsIHZpZXdwb3J0KSB7XG4gICAgICB0aGlzLnZpZXdwb3J0ID0gdmlld3BvcnQ7XG5cbiAgICAgIGNvbnN0IHN2Z0VsZW1lbnQgPSB0aGlzLl9pbml0aWFsaXplKHZpZXdwb3J0KTtcblxuICAgICAgcmV0dXJuIHRoaXMubG9hZERlcGVuZGVuY2llcyhvcGVyYXRvckxpc3QpLnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLnRyYW5zZm9ybU1hdHJpeCA9IF91dGlsLklERU5USVRZX01BVFJJWDtcbiAgICAgICAgdGhpcy5leGVjdXRlT3BUcmVlKHRoaXMuY29udmVydE9wTGlzdChvcGVyYXRvckxpc3QpKTtcbiAgICAgICAgcmV0dXJuIHN2Z0VsZW1lbnQ7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb252ZXJ0T3BMaXN0KG9wZXJhdG9yTGlzdCkge1xuICAgICAgY29uc3Qgb3BlcmF0b3JJZE1hcHBpbmcgPSB0aGlzLl9vcGVyYXRvcklkTWFwcGluZztcbiAgICAgIGNvbnN0IGFyZ3NBcnJheSA9IG9wZXJhdG9yTGlzdC5hcmdzQXJyYXk7XG4gICAgICBjb25zdCBmbkFycmF5ID0gb3BlcmF0b3JMaXN0LmZuQXJyYXk7XG4gICAgICBjb25zdCBvcExpc3QgPSBbXTtcblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gZm5BcnJheS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGZuSWQgPSBmbkFycmF5W2ldO1xuICAgICAgICBvcExpc3QucHVzaCh7XG4gICAgICAgICAgZm5JZCxcbiAgICAgICAgICBmbjogb3BlcmF0b3JJZE1hcHBpbmdbZm5JZF0sXG4gICAgICAgICAgYXJnczogYXJnc0FycmF5W2ldXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb3BMaXN0VG9UcmVlKG9wTGlzdCk7XG4gICAgfVxuXG4gICAgZXhlY3V0ZU9wVHJlZShvcFRyZWUpIHtcbiAgICAgIGZvciAoY29uc3Qgb3BUcmVlRWxlbWVudCBvZiBvcFRyZWUpIHtcbiAgICAgICAgY29uc3QgZm4gPSBvcFRyZWVFbGVtZW50LmZuO1xuICAgICAgICBjb25zdCBmbklkID0gb3BUcmVlRWxlbWVudC5mbklkO1xuICAgICAgICBjb25zdCBhcmdzID0gb3BUcmVlRWxlbWVudC5hcmdzO1xuXG4gICAgICAgIHN3aXRjaCAoZm5JZCB8IDApIHtcbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5iZWdpblRleHQ6XG4gICAgICAgICAgICB0aGlzLmJlZ2luVGV4dCgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5kZXBlbmRlbmN5OlxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRMZWFkaW5nOlxuICAgICAgICAgICAgdGhpcy5zZXRMZWFkaW5nKGFyZ3MpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRMZWFkaW5nTW92ZVRleHQ6XG4gICAgICAgICAgICB0aGlzLnNldExlYWRpbmdNb3ZlVGV4dChhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0Rm9udDpcbiAgICAgICAgICAgIHRoaXMuc2V0Rm9udChhcmdzKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2hvd1RleHQ6XG4gICAgICAgICAgICB0aGlzLnNob3dUZXh0KGFyZ3NbMF0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zaG93U3BhY2VkVGV4dDpcbiAgICAgICAgICAgIHRoaXMuc2hvd1RleHQoYXJnc1swXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmVuZFRleHQ6XG4gICAgICAgICAgICB0aGlzLmVuZFRleHQoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMubW92ZVRleHQ6XG4gICAgICAgICAgICB0aGlzLm1vdmVUZXh0KGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRDaGFyU3BhY2luZzpcbiAgICAgICAgICAgIHRoaXMuc2V0Q2hhclNwYWNpbmcoYXJnc1swXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFdvcmRTcGFjaW5nOlxuICAgICAgICAgICAgdGhpcy5zZXRXb3JkU3BhY2luZyhhcmdzWzBdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0SFNjYWxlOlxuICAgICAgICAgICAgdGhpcy5zZXRIU2NhbGUoYXJnc1swXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFRleHRNYXRyaXg6XG4gICAgICAgICAgICB0aGlzLnNldFRleHRNYXRyaXgoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSwgYXJnc1s1XSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFRleHRSaXNlOlxuICAgICAgICAgICAgdGhpcy5zZXRUZXh0UmlzZShhcmdzWzBdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0VGV4dFJlbmRlcmluZ01vZGU6XG4gICAgICAgICAgICB0aGlzLnNldFRleHRSZW5kZXJpbmdNb2RlKGFyZ3NbMF0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRMaW5lV2lkdGg6XG4gICAgICAgICAgICB0aGlzLnNldExpbmVXaWR0aChhcmdzWzBdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0TGluZUpvaW46XG4gICAgICAgICAgICB0aGlzLnNldExpbmVKb2luKGFyZ3NbMF0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRMaW5lQ2FwOlxuICAgICAgICAgICAgdGhpcy5zZXRMaW5lQ2FwKGFyZ3NbMF0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRNaXRlckxpbWl0OlxuICAgICAgICAgICAgdGhpcy5zZXRNaXRlckxpbWl0KGFyZ3NbMF0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRGaWxsUkdCQ29sb3I6XG4gICAgICAgICAgICB0aGlzLnNldEZpbGxSR0JDb2xvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0U3Ryb2tlUkdCQ29sb3I6XG4gICAgICAgICAgICB0aGlzLnNldFN0cm9rZVJHQkNvbG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRTdHJva2VDb2xvck46XG4gICAgICAgICAgICB0aGlzLnNldFN0cm9rZUNvbG9yTihhcmdzKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0RmlsbENvbG9yTjpcbiAgICAgICAgICAgIHRoaXMuc2V0RmlsbENvbG9yTihhcmdzKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2hhZGluZ0ZpbGw6XG4gICAgICAgICAgICB0aGlzLnNoYWRpbmdGaWxsKGFyZ3NbMF0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXREYXNoOlxuICAgICAgICAgICAgdGhpcy5zZXREYXNoKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRSZW5kZXJpbmdJbnRlbnQ6XG4gICAgICAgICAgICB0aGlzLnNldFJlbmRlcmluZ0ludGVudChhcmdzWzBdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0RmxhdG5lc3M6XG4gICAgICAgICAgICB0aGlzLnNldEZsYXRuZXNzKGFyZ3NbMF0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRHU3RhdGU6XG4gICAgICAgICAgICB0aGlzLnNldEdTdGF0ZShhcmdzWzBdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuZmlsbDpcbiAgICAgICAgICAgIHRoaXMuZmlsbCgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5lb0ZpbGw6XG4gICAgICAgICAgICB0aGlzLmVvRmlsbCgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zdHJva2U6XG4gICAgICAgICAgICB0aGlzLnN0cm9rZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5maWxsU3Ryb2tlOlxuICAgICAgICAgICAgdGhpcy5maWxsU3Ryb2tlKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmVvRmlsbFN0cm9rZTpcbiAgICAgICAgICAgIHRoaXMuZW9GaWxsU3Ryb2tlKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmNsaXA6XG4gICAgICAgICAgICB0aGlzLmNsaXAoXCJub256ZXJvXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5lb0NsaXA6XG4gICAgICAgICAgICB0aGlzLmNsaXAoXCJldmVub2RkXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5wYWludFNvbGlkQ29sb3JJbWFnZU1hc2s6XG4gICAgICAgICAgICB0aGlzLnBhaW50U29saWRDb2xvckltYWdlTWFzaygpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5wYWludEltYWdlWE9iamVjdDpcbiAgICAgICAgICAgIHRoaXMucGFpbnRJbWFnZVhPYmplY3QoYXJnc1swXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0OlxuICAgICAgICAgICAgdGhpcy5wYWludElubGluZUltYWdlWE9iamVjdChhcmdzWzBdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0OlxuICAgICAgICAgICAgdGhpcy5wYWludEltYWdlTWFza1hPYmplY3QoYXJnc1swXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnBhaW50Rm9ybVhPYmplY3RCZWdpbjpcbiAgICAgICAgICAgIHRoaXMucGFpbnRGb3JtWE9iamVjdEJlZ2luKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5wYWludEZvcm1YT2JqZWN0RW5kOlxuICAgICAgICAgICAgdGhpcy5wYWludEZvcm1YT2JqZWN0RW5kKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmNsb3NlUGF0aDpcbiAgICAgICAgICAgIHRoaXMuY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmNsb3NlU3Ryb2tlOlxuICAgICAgICAgICAgdGhpcy5jbG9zZVN0cm9rZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5jbG9zZUZpbGxTdHJva2U6XG4gICAgICAgICAgICB0aGlzLmNsb3NlRmlsbFN0cm9rZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5jbG9zZUVPRmlsbFN0cm9rZTpcbiAgICAgICAgICAgIHRoaXMuY2xvc2VFT0ZpbGxTdHJva2UoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMubmV4dExpbmU6XG4gICAgICAgICAgICB0aGlzLm5leHRMaW5lKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnRyYW5zZm9ybTpcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0sIGFyZ3NbNV0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5jb25zdHJ1Y3RQYXRoOlxuICAgICAgICAgICAgdGhpcy5jb25zdHJ1Y3RQYXRoKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5lbmRQYXRoOlxuICAgICAgICAgICAgdGhpcy5lbmRQYXRoKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgOTI6XG4gICAgICAgICAgICB0aGlzLmdyb3VwKG9wVHJlZUVsZW1lbnQuaXRlbXMpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKGBVbmltcGxlbWVudGVkIG9wZXJhdG9yICR7Zm59YCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHNldFdvcmRTcGFjaW5nKHdvcmRTcGFjaW5nKSB7XG4gICAgICB0aGlzLmN1cnJlbnQud29yZFNwYWNpbmcgPSB3b3JkU3BhY2luZztcbiAgICB9XG5cbiAgICBzZXRDaGFyU3BhY2luZyhjaGFyU3BhY2luZykge1xuICAgICAgdGhpcy5jdXJyZW50LmNoYXJTcGFjaW5nID0gY2hhclNwYWNpbmc7XG4gICAgfVxuXG4gICAgbmV4dExpbmUoKSB7XG4gICAgICB0aGlzLm1vdmVUZXh0KDAsIHRoaXMuY3VycmVudC5sZWFkaW5nKTtcbiAgICB9XG5cbiAgICBzZXRUZXh0TWF0cml4KGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICBjdXJyZW50LnRleHRNYXRyaXggPSBjdXJyZW50LmxpbmVNYXRyaXggPSBbYSwgYiwgYywgZCwgZSwgZl07XG4gICAgICBjdXJyZW50LnRleHRNYXRyaXhTY2FsZSA9IE1hdGguaHlwb3QoYSwgYik7XG4gICAgICBjdXJyZW50LnggPSBjdXJyZW50LmxpbmVYID0gMDtcbiAgICAgIGN1cnJlbnQueSA9IGN1cnJlbnQubGluZVkgPSAwO1xuICAgICAgY3VycmVudC54Y29vcmRzID0gW107XG4gICAgICBjdXJyZW50Lnljb29yZHMgPSBbXTtcbiAgICAgIGN1cnJlbnQudHNwYW4gPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudChcInN2Zzp0c3BhblwiKTtcbiAgICAgIGN1cnJlbnQudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmb250LWZhbWlseVwiLCBjdXJyZW50LmZvbnRGYW1pbHkpO1xuICAgICAgY3VycmVudC50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImZvbnQtc2l6ZVwiLCBgJHtwZihjdXJyZW50LmZvbnRTaXplKX1weGApO1xuICAgICAgY3VycmVudC50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInlcIiwgcGYoLWN1cnJlbnQueSkpO1xuICAgICAgY3VycmVudC50eHRFbGVtZW50ID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6dGV4dFwiKTtcbiAgICAgIGN1cnJlbnQudHh0RWxlbWVudC5hcHBlbmRDaGlsZChjdXJyZW50LnRzcGFuKTtcbiAgICB9XG5cbiAgICBiZWdpblRleHQoKSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jdXJyZW50O1xuICAgICAgY3VycmVudC54ID0gY3VycmVudC5saW5lWCA9IDA7XG4gICAgICBjdXJyZW50LnkgPSBjdXJyZW50LmxpbmVZID0gMDtcbiAgICAgIGN1cnJlbnQudGV4dE1hdHJpeCA9IF91dGlsLklERU5USVRZX01BVFJJWDtcbiAgICAgIGN1cnJlbnQubGluZU1hdHJpeCA9IF91dGlsLklERU5USVRZX01BVFJJWDtcbiAgICAgIGN1cnJlbnQudGV4dE1hdHJpeFNjYWxlID0gMTtcbiAgICAgIGN1cnJlbnQudHNwYW4gPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudChcInN2Zzp0c3BhblwiKTtcbiAgICAgIGN1cnJlbnQudHh0RWxlbWVudCA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOnRleHRcIik7XG4gICAgICBjdXJyZW50LnR4dGdycCA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOmdcIik7XG4gICAgICBjdXJyZW50Lnhjb29yZHMgPSBbXTtcbiAgICAgIGN1cnJlbnQueWNvb3JkcyA9IFtdO1xuICAgIH1cblxuICAgIG1vdmVUZXh0KHgsIHkpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICBjdXJyZW50LnggPSBjdXJyZW50LmxpbmVYICs9IHg7XG4gICAgICBjdXJyZW50LnkgPSBjdXJyZW50LmxpbmVZICs9IHk7XG4gICAgICBjdXJyZW50Lnhjb29yZHMgPSBbXTtcbiAgICAgIGN1cnJlbnQueWNvb3JkcyA9IFtdO1xuICAgICAgY3VycmVudC50c3BhbiA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOnRzcGFuXCIpO1xuICAgICAgY3VycmVudC50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImZvbnQtZmFtaWx5XCIsIGN1cnJlbnQuZm9udEZhbWlseSk7XG4gICAgICBjdXJyZW50LnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZm9udC1zaXplXCIsIGAke3BmKGN1cnJlbnQuZm9udFNpemUpfXB4YCk7XG4gICAgICBjdXJyZW50LnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwieVwiLCBwZigtY3VycmVudC55KSk7XG4gICAgfVxuXG4gICAgc2hvd1RleHQoZ2x5cGhzKSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jdXJyZW50O1xuICAgICAgY29uc3QgZm9udCA9IGN1cnJlbnQuZm9udDtcbiAgICAgIGNvbnN0IGZvbnRTaXplID0gY3VycmVudC5mb250U2l6ZTtcblxuICAgICAgaWYgKGZvbnRTaXplID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm9udFNpemVTY2FsZSA9IGN1cnJlbnQuZm9udFNpemVTY2FsZTtcbiAgICAgIGNvbnN0IGNoYXJTcGFjaW5nID0gY3VycmVudC5jaGFyU3BhY2luZztcbiAgICAgIGNvbnN0IHdvcmRTcGFjaW5nID0gY3VycmVudC53b3JkU3BhY2luZztcbiAgICAgIGNvbnN0IGZvbnREaXJlY3Rpb24gPSBjdXJyZW50LmZvbnREaXJlY3Rpb247XG4gICAgICBjb25zdCB0ZXh0SFNjYWxlID0gY3VycmVudC50ZXh0SFNjYWxlICogZm9udERpcmVjdGlvbjtcbiAgICAgIGNvbnN0IHZlcnRpY2FsID0gZm9udC52ZXJ0aWNhbDtcbiAgICAgIGNvbnN0IHNwYWNpbmdEaXIgPSB2ZXJ0aWNhbCA/IDEgOiAtMTtcbiAgICAgIGNvbnN0IGRlZmF1bHRWTWV0cmljcyA9IGZvbnQuZGVmYXVsdFZNZXRyaWNzO1xuICAgICAgY29uc3Qgd2lkdGhBZHZhbmNlU2NhbGUgPSBmb250U2l6ZSAqIGN1cnJlbnQuZm9udE1hdHJpeFswXTtcbiAgICAgIGxldCB4ID0gMDtcblxuICAgICAgZm9yIChjb25zdCBnbHlwaCBvZiBnbHlwaHMpIHtcbiAgICAgICAgaWYgKGdseXBoID09PSBudWxsKSB7XG4gICAgICAgICAgeCArPSBmb250RGlyZWN0aW9uICogd29yZFNwYWNpbmc7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSBpZiAoKDAsIF91dGlsLmlzTnVtKShnbHlwaCkpIHtcbiAgICAgICAgICB4ICs9IHNwYWNpbmdEaXIgKiBnbHlwaCAqIGZvbnRTaXplIC8gMTAwMDtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNwYWNpbmcgPSAoZ2x5cGguaXNTcGFjZSA/IHdvcmRTcGFjaW5nIDogMCkgKyBjaGFyU3BhY2luZztcbiAgICAgICAgY29uc3QgY2hhcmFjdGVyID0gZ2x5cGguZm9udENoYXI7XG4gICAgICAgIGxldCBzY2FsZWRYLCBzY2FsZWRZO1xuICAgICAgICBsZXQgd2lkdGggPSBnbHlwaC53aWR0aDtcblxuICAgICAgICBpZiAodmVydGljYWwpIHtcbiAgICAgICAgICBsZXQgdng7XG4gICAgICAgICAgY29uc3Qgdm1ldHJpYyA9IGdseXBoLnZtZXRyaWMgfHwgZGVmYXVsdFZNZXRyaWNzO1xuICAgICAgICAgIHZ4ID0gZ2x5cGgudm1ldHJpYyA/IHZtZXRyaWNbMV0gOiB3aWR0aCAqIDAuNTtcbiAgICAgICAgICB2eCA9IC12eCAqIHdpZHRoQWR2YW5jZVNjYWxlO1xuICAgICAgICAgIGNvbnN0IHZ5ID0gdm1ldHJpY1syXSAqIHdpZHRoQWR2YW5jZVNjYWxlO1xuICAgICAgICAgIHdpZHRoID0gdm1ldHJpYyA/IC12bWV0cmljWzBdIDogd2lkdGg7XG4gICAgICAgICAgc2NhbGVkWCA9IHZ4IC8gZm9udFNpemVTY2FsZTtcbiAgICAgICAgICBzY2FsZWRZID0gKHggKyB2eSkgLyBmb250U2l6ZVNjYWxlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNjYWxlZFggPSB4IC8gZm9udFNpemVTY2FsZTtcbiAgICAgICAgICBzY2FsZWRZID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChnbHlwaC5pc0luRm9udCB8fCBmb250Lm1pc3NpbmdGaWxlKSB7XG4gICAgICAgICAgY3VycmVudC54Y29vcmRzLnB1c2goY3VycmVudC54ICsgc2NhbGVkWCk7XG5cbiAgICAgICAgICBpZiAodmVydGljYWwpIHtcbiAgICAgICAgICAgIGN1cnJlbnQueWNvb3Jkcy5wdXNoKC1jdXJyZW50LnkgKyBzY2FsZWRZKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjdXJyZW50LnRzcGFuLnRleHRDb250ZW50ICs9IGNoYXJhY3RlcjtcbiAgICAgICAgfSBlbHNlIHt9XG5cbiAgICAgICAgbGV0IGNoYXJXaWR0aDtcblxuICAgICAgICBpZiAodmVydGljYWwpIHtcbiAgICAgICAgICBjaGFyV2lkdGggPSB3aWR0aCAqIHdpZHRoQWR2YW5jZVNjYWxlIC0gc3BhY2luZyAqIGZvbnREaXJlY3Rpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2hhcldpZHRoID0gd2lkdGggKiB3aWR0aEFkdmFuY2VTY2FsZSArIHNwYWNpbmcgKiBmb250RGlyZWN0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgeCArPSBjaGFyV2lkdGg7XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnQudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ4XCIsIGN1cnJlbnQueGNvb3Jkcy5tYXAocGYpLmpvaW4oXCIgXCIpKTtcblxuICAgICAgaWYgKHZlcnRpY2FsKSB7XG4gICAgICAgIGN1cnJlbnQudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ5XCIsIGN1cnJlbnQueWNvb3Jkcy5tYXAocGYpLmpvaW4oXCIgXCIpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnJlbnQudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ5XCIsIHBmKC1jdXJyZW50LnkpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHZlcnRpY2FsKSB7XG4gICAgICAgIGN1cnJlbnQueSAtPSB4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3VycmVudC54ICs9IHggKiB0ZXh0SFNjYWxlO1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50LnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZm9udC1mYW1pbHlcIiwgY3VycmVudC5mb250RmFtaWx5KTtcbiAgICAgIGN1cnJlbnQudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmb250LXNpemVcIiwgYCR7cGYoY3VycmVudC5mb250U2l6ZSl9cHhgKTtcblxuICAgICAgaWYgKGN1cnJlbnQuZm9udFN0eWxlICE9PSBTVkdfREVGQVVMVFMuZm9udFN0eWxlKSB7XG4gICAgICAgIGN1cnJlbnQudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmb250LXN0eWxlXCIsIGN1cnJlbnQuZm9udFN0eWxlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGN1cnJlbnQuZm9udFdlaWdodCAhPT0gU1ZHX0RFRkFVTFRTLmZvbnRXZWlnaHQpIHtcbiAgICAgICAgY3VycmVudC50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImZvbnQtd2VpZ2h0XCIsIGN1cnJlbnQuZm9udFdlaWdodCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbGxTdHJva2VNb2RlID0gY3VycmVudC50ZXh0UmVuZGVyaW5nTW9kZSAmIF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLkZJTExfU1RST0tFX01BU0s7XG5cbiAgICAgIGlmIChmaWxsU3Ryb2tlTW9kZSA9PT0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuRklMTCB8fCBmaWxsU3Ryb2tlTW9kZSA9PT0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0UpIHtcbiAgICAgICAgaWYgKGN1cnJlbnQuZmlsbENvbG9yICE9PSBTVkdfREVGQVVMVFMuZmlsbENvbG9yKSB7XG4gICAgICAgICAgY3VycmVudC50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImZpbGxcIiwgY3VycmVudC5maWxsQ29sb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN1cnJlbnQuZmlsbEFscGhhIDwgMSkge1xuICAgICAgICAgIGN1cnJlbnQudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmaWxsLW9wYWNpdHlcIiwgY3VycmVudC5maWxsQWxwaGEpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnQudGV4dFJlbmRlcmluZ01vZGUgPT09IF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLkFERF9UT19QQVRIKSB7XG4gICAgICAgIGN1cnJlbnQudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmaWxsXCIsIFwidHJhbnNwYXJlbnRcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdXJyZW50LnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZmlsbFwiLCBcIm5vbmVcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChmaWxsU3Ryb2tlTW9kZSA9PT0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuU1RST0tFIHx8IGZpbGxTdHJva2VNb2RlID09PSBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRSkge1xuICAgICAgICBjb25zdCBsaW5lV2lkdGhTY2FsZSA9IDEgLyAoY3VycmVudC50ZXh0TWF0cml4U2NhbGUgfHwgMSk7XG5cbiAgICAgICAgdGhpcy5fc2V0U3Ryb2tlQXR0cmlidXRlcyhjdXJyZW50LnRzcGFuLCBsaW5lV2lkdGhTY2FsZSk7XG4gICAgICB9XG5cbiAgICAgIGxldCB0ZXh0TWF0cml4ID0gY3VycmVudC50ZXh0TWF0cml4O1xuXG4gICAgICBpZiAoY3VycmVudC50ZXh0UmlzZSAhPT0gMCkge1xuICAgICAgICB0ZXh0TWF0cml4ID0gdGV4dE1hdHJpeC5zbGljZSgpO1xuICAgICAgICB0ZXh0TWF0cml4WzVdICs9IGN1cnJlbnQudGV4dFJpc2U7XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnQudHh0RWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInRyYW5zZm9ybVwiLCBgJHtwbSh0ZXh0TWF0cml4KX0gc2NhbGUoJHtwZih0ZXh0SFNjYWxlKX0sIC0xKWApO1xuICAgICAgY3VycmVudC50eHRFbGVtZW50LnNldEF0dHJpYnV0ZU5TKFhNTF9OUywgXCJ4bWw6c3BhY2VcIiwgXCJwcmVzZXJ2ZVwiKTtcbiAgICAgIGN1cnJlbnQudHh0RWxlbWVudC5hcHBlbmRDaGlsZChjdXJyZW50LnRzcGFuKTtcbiAgICAgIGN1cnJlbnQudHh0Z3JwLmFwcGVuZENoaWxkKGN1cnJlbnQudHh0RWxlbWVudCk7XG5cbiAgICAgIHRoaXMuX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkuYXBwZW5kQ2hpbGQoY3VycmVudC50eHRFbGVtZW50KTtcbiAgICB9XG5cbiAgICBzZXRMZWFkaW5nTW92ZVRleHQoeCwgeSkge1xuICAgICAgdGhpcy5zZXRMZWFkaW5nKC15KTtcbiAgICAgIHRoaXMubW92ZVRleHQoeCwgeSk7XG4gICAgfVxuXG4gICAgYWRkRm9udFN0eWxlKGZvbnRPYmopIHtcbiAgICAgIGlmICghZm9udE9iai5kYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImFkZEZvbnRTdHlsZTogTm8gZm9udCBkYXRhIGF2YWlsYWJsZSwgXCIgKyAnZW5zdXJlIHRoYXQgdGhlIFwiZm9udEV4dHJhUHJvcGVydGllc1wiIEFQSSBwYXJhbWV0ZXIgaXMgc2V0LicpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuY3NzU3R5bGUpIHtcbiAgICAgICAgdGhpcy5jc3NTdHlsZSA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOnN0eWxlXCIpO1xuICAgICAgICB0aGlzLmNzc1N0eWxlLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwidHlwZVwiLCBcInRleHQvY3NzXCIpO1xuICAgICAgICB0aGlzLmRlZnMuYXBwZW5kQ2hpbGQodGhpcy5jc3NTdHlsZSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHVybCA9ICgwLCBfdXRpbC5jcmVhdGVPYmplY3RVUkwpKGZvbnRPYmouZGF0YSwgZm9udE9iai5taW1ldHlwZSwgdGhpcy5mb3JjZURhdGFTY2hlbWEpO1xuICAgICAgdGhpcy5jc3NTdHlsZS50ZXh0Q29udGVudCArPSBgQGZvbnQtZmFjZSB7IGZvbnQtZmFtaWx5OiBcIiR7Zm9udE9iai5sb2FkZWROYW1lfVwiO2AgKyBgIHNyYzogdXJsKCR7dXJsfSk7IH1cXG5gO1xuICAgIH1cblxuICAgIHNldEZvbnQoZGV0YWlscykge1xuICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuY3VycmVudDtcbiAgICAgIGNvbnN0IGZvbnRPYmogPSB0aGlzLmNvbW1vbk9ianMuZ2V0KGRldGFpbHNbMF0pO1xuICAgICAgbGV0IHNpemUgPSBkZXRhaWxzWzFdO1xuICAgICAgY3VycmVudC5mb250ID0gZm9udE9iajtcblxuICAgICAgaWYgKHRoaXMuZW1iZWRGb250cyAmJiAhZm9udE9iai5taXNzaW5nRmlsZSAmJiAhdGhpcy5lbWJlZGRlZEZvbnRzW2ZvbnRPYmoubG9hZGVkTmFtZV0pIHtcbiAgICAgICAgdGhpcy5hZGRGb250U3R5bGUoZm9udE9iaik7XG4gICAgICAgIHRoaXMuZW1iZWRkZWRGb250c1tmb250T2JqLmxvYWRlZE5hbWVdID0gZm9udE9iajtcbiAgICAgIH1cblxuICAgICAgY3VycmVudC5mb250TWF0cml4ID0gZm9udE9iai5mb250TWF0cml4IHx8IF91dGlsLkZPTlRfSURFTlRJVFlfTUFUUklYO1xuICAgICAgbGV0IGJvbGQgPSBcIm5vcm1hbFwiO1xuXG4gICAgICBpZiAoZm9udE9iai5ibGFjaykge1xuICAgICAgICBib2xkID0gXCI5MDBcIjtcbiAgICAgIH0gZWxzZSBpZiAoZm9udE9iai5ib2xkKSB7XG4gICAgICAgIGJvbGQgPSBcImJvbGRcIjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaXRhbGljID0gZm9udE9iai5pdGFsaWMgPyBcIml0YWxpY1wiIDogXCJub3JtYWxcIjtcblxuICAgICAgaWYgKHNpemUgPCAwKSB7XG4gICAgICAgIHNpemUgPSAtc2l6ZTtcbiAgICAgICAgY3VycmVudC5mb250RGlyZWN0aW9uID0gLTE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdXJyZW50LmZvbnREaXJlY3Rpb24gPSAxO1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50LmZvbnRTaXplID0gc2l6ZTtcbiAgICAgIGN1cnJlbnQuZm9udEZhbWlseSA9IGZvbnRPYmoubG9hZGVkTmFtZTtcbiAgICAgIGN1cnJlbnQuZm9udFdlaWdodCA9IGJvbGQ7XG4gICAgICBjdXJyZW50LmZvbnRTdHlsZSA9IGl0YWxpYztcbiAgICAgIGN1cnJlbnQudHNwYW4gPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudChcInN2Zzp0c3BhblwiKTtcbiAgICAgIGN1cnJlbnQudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ5XCIsIHBmKC1jdXJyZW50LnkpKTtcbiAgICAgIGN1cnJlbnQueGNvb3JkcyA9IFtdO1xuICAgICAgY3VycmVudC55Y29vcmRzID0gW107XG4gICAgfVxuXG4gICAgZW5kVGV4dCgpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7XG5cbiAgICAgIGlmIChjdXJyZW50LnRleHRSZW5kZXJpbmdNb2RlICYgX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuQUREX1RPX1BBVEhfRkxBRyAmJiBjdXJyZW50LnR4dEVsZW1lbnQ/Lmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgICBjdXJyZW50LmVsZW1lbnQgPSBjdXJyZW50LnR4dEVsZW1lbnQ7XG4gICAgICAgIHRoaXMuY2xpcChcIm5vbnplcm9cIik7XG4gICAgICAgIHRoaXMuZW5kUGF0aCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNldExpbmVXaWR0aCh3aWR0aCkge1xuICAgICAgaWYgKHdpZHRoID4gMCkge1xuICAgICAgICB0aGlzLmN1cnJlbnQubGluZVdpZHRoID0gd2lkdGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2V0TGluZUNhcChzdHlsZSkge1xuICAgICAgdGhpcy5jdXJyZW50LmxpbmVDYXAgPSBMSU5FX0NBUF9TVFlMRVNbc3R5bGVdO1xuICAgIH1cblxuICAgIHNldExpbmVKb2luKHN0eWxlKSB7XG4gICAgICB0aGlzLmN1cnJlbnQubGluZUpvaW4gPSBMSU5FX0pPSU5fU1RZTEVTW3N0eWxlXTtcbiAgICB9XG5cbiAgICBzZXRNaXRlckxpbWl0KGxpbWl0KSB7XG4gICAgICB0aGlzLmN1cnJlbnQubWl0ZXJMaW1pdCA9IGxpbWl0O1xuICAgIH1cblxuICAgIHNldFN0cm9rZUFscGhhKHN0cm9rZUFscGhhKSB7XG4gICAgICB0aGlzLmN1cnJlbnQuc3Ryb2tlQWxwaGEgPSBzdHJva2VBbHBoYTtcbiAgICB9XG5cbiAgICBzZXRTdHJva2VSR0JDb2xvcihyLCBnLCBiKSB7XG4gICAgICB0aGlzLmN1cnJlbnQuc3Ryb2tlQ29sb3IgPSBfdXRpbC5VdGlsLm1ha2VIZXhDb2xvcihyLCBnLCBiKTtcbiAgICB9XG5cbiAgICBzZXRGaWxsQWxwaGEoZmlsbEFscGhhKSB7XG4gICAgICB0aGlzLmN1cnJlbnQuZmlsbEFscGhhID0gZmlsbEFscGhhO1xuICAgIH1cblxuICAgIHNldEZpbGxSR0JDb2xvcihyLCBnLCBiKSB7XG4gICAgICB0aGlzLmN1cnJlbnQuZmlsbENvbG9yID0gX3V0aWwuVXRpbC5tYWtlSGV4Q29sb3IociwgZywgYik7XG4gICAgICB0aGlzLmN1cnJlbnQudHNwYW4gPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudChcInN2Zzp0c3BhblwiKTtcbiAgICAgIHRoaXMuY3VycmVudC54Y29vcmRzID0gW107XG4gICAgICB0aGlzLmN1cnJlbnQueWNvb3JkcyA9IFtdO1xuICAgIH1cblxuICAgIHNldFN0cm9rZUNvbG9yTihhcmdzKSB7XG4gICAgICB0aGlzLmN1cnJlbnQuc3Ryb2tlQ29sb3IgPSB0aGlzLl9tYWtlQ29sb3JOX1BhdHRlcm4oYXJncyk7XG4gICAgfVxuXG4gICAgc2V0RmlsbENvbG9yTihhcmdzKSB7XG4gICAgICB0aGlzLmN1cnJlbnQuZmlsbENvbG9yID0gdGhpcy5fbWFrZUNvbG9yTl9QYXR0ZXJuKGFyZ3MpO1xuICAgIH1cblxuICAgIHNoYWRpbmdGaWxsKGFyZ3MpIHtcbiAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy52aWV3cG9ydC53aWR0aDtcbiAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMudmlld3BvcnQuaGVpZ2h0O1xuXG4gICAgICBjb25zdCBpbnYgPSBfdXRpbC5VdGlsLmludmVyc2VUcmFuc2Zvcm0odGhpcy50cmFuc2Zvcm1NYXRyaXgpO1xuXG4gICAgICBjb25zdCBibCA9IF91dGlsLlV0aWwuYXBwbHlUcmFuc2Zvcm0oWzAsIDBdLCBpbnYpO1xuXG4gICAgICBjb25zdCBiciA9IF91dGlsLlV0aWwuYXBwbHlUcmFuc2Zvcm0oWzAsIGhlaWdodF0sIGludik7XG5cbiAgICAgIGNvbnN0IHVsID0gX3V0aWwuVXRpbC5hcHBseVRyYW5zZm9ybShbd2lkdGgsIDBdLCBpbnYpO1xuXG4gICAgICBjb25zdCB1ciA9IF91dGlsLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW3dpZHRoLCBoZWlnaHRdLCBpbnYpO1xuXG4gICAgICBjb25zdCB4MCA9IE1hdGgubWluKGJsWzBdLCBiclswXSwgdWxbMF0sIHVyWzBdKTtcbiAgICAgIGNvbnN0IHkwID0gTWF0aC5taW4oYmxbMV0sIGJyWzFdLCB1bFsxXSwgdXJbMV0pO1xuICAgICAgY29uc3QgeDEgPSBNYXRoLm1heChibFswXSwgYnJbMF0sIHVsWzBdLCB1clswXSk7XG4gICAgICBjb25zdCB5MSA9IE1hdGgubWF4KGJsWzFdLCBiclsxXSwgdWxbMV0sIHVyWzFdKTtcbiAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudChcInN2ZzpyZWN0XCIpO1xuICAgICAgcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInhcIiwgeDApO1xuICAgICAgcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInlcIiwgeTApO1xuICAgICAgcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcIndpZHRoXCIsIHgxIC0geDApO1xuICAgICAgcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImhlaWdodFwiLCB5MSAtIHkwKTtcbiAgICAgIHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmaWxsXCIsIHRoaXMuX21ha2VTaGFkaW5nUGF0dGVybihhcmdzKSk7XG5cbiAgICAgIGlmICh0aGlzLmN1cnJlbnQuZmlsbEFscGhhIDwgMSkge1xuICAgICAgICByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZmlsbC1vcGFjaXR5XCIsIHRoaXMuY3VycmVudC5maWxsQWxwaGEpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9lbnN1cmVUcmFuc2Zvcm1Hcm91cCgpLmFwcGVuZENoaWxkKHJlY3QpO1xuICAgIH1cblxuICAgIF9tYWtlQ29sb3JOX1BhdHRlcm4oYXJncykge1xuICAgICAgaWYgKGFyZ3NbMF0gPT09IFwiVGlsaW5nUGF0dGVyblwiKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYWtlVGlsaW5nUGF0dGVybihhcmdzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX21ha2VTaGFkaW5nUGF0dGVybihhcmdzKTtcbiAgICB9XG5cbiAgICBfbWFrZVRpbGluZ1BhdHRlcm4oYXJncykge1xuICAgICAgY29uc3QgY29sb3IgPSBhcmdzWzFdO1xuICAgICAgY29uc3Qgb3BlcmF0b3JMaXN0ID0gYXJnc1syXTtcbiAgICAgIGNvbnN0IG1hdHJpeCA9IGFyZ3NbM10gfHwgX3V0aWwuSURFTlRJVFlfTUFUUklYO1xuICAgICAgY29uc3QgW3gwLCB5MCwgeDEsIHkxXSA9IGFyZ3NbNF07XG4gICAgICBjb25zdCB4c3RlcCA9IGFyZ3NbNV07XG4gICAgICBjb25zdCB5c3RlcCA9IGFyZ3NbNl07XG4gICAgICBjb25zdCBwYWludFR5cGUgPSBhcmdzWzddO1xuICAgICAgY29uc3QgdGlsaW5nSWQgPSBgc2hhZGluZyR7c2hhZGluZ0NvdW50Kyt9YDtcblxuICAgICAgY29uc3QgW3R4MCwgdHkwLCB0eDEsIHR5MV0gPSBfdXRpbC5VdGlsLm5vcm1hbGl6ZVJlY3QoWy4uLl91dGlsLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW3gwLCB5MF0sIG1hdHJpeCksIC4uLl91dGlsLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW3gxLCB5MV0sIG1hdHJpeCldKTtcblxuICAgICAgY29uc3QgW3hzY2FsZSwgeXNjYWxlXSA9IF91dGlsLlV0aWwuc2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUobWF0cml4KTtcblxuICAgICAgY29uc3QgdHhzdGVwID0geHN0ZXAgKiB4c2NhbGU7XG4gICAgICBjb25zdCB0eXN0ZXAgPSB5c3RlcCAqIHlzY2FsZTtcbiAgICAgIGNvbnN0IHRpbGluZyA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOnBhdHRlcm5cIik7XG4gICAgICB0aWxpbmcuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJpZFwiLCB0aWxpbmdJZCk7XG4gICAgICB0aWxpbmcuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJwYXR0ZXJuVW5pdHNcIiwgXCJ1c2VyU3BhY2VPblVzZVwiKTtcbiAgICAgIHRpbGluZy5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcIndpZHRoXCIsIHR4c3RlcCk7XG4gICAgICB0aWxpbmcuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJoZWlnaHRcIiwgdHlzdGVwKTtcbiAgICAgIHRpbGluZy5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInhcIiwgYCR7dHgwfWApO1xuICAgICAgdGlsaW5nLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwieVwiLCBgJHt0eTB9YCk7XG4gICAgICBjb25zdCBzdmcgPSB0aGlzLnN2ZztcbiAgICAgIGNvbnN0IHRyYW5zZm9ybU1hdHJpeCA9IHRoaXMudHJhbnNmb3JtTWF0cml4O1xuICAgICAgY29uc3QgZmlsbENvbG9yID0gdGhpcy5jdXJyZW50LmZpbGxDb2xvcjtcbiAgICAgIGNvbnN0IHN0cm9rZUNvbG9yID0gdGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yO1xuICAgICAgY29uc3QgYmJveCA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUodHgxIC0gdHgwLCB0eTEgLSB0eTApO1xuICAgICAgdGhpcy5zdmcgPSBiYm94O1xuICAgICAgdGhpcy50cmFuc2Zvcm1NYXRyaXggPSBtYXRyaXg7XG5cbiAgICAgIGlmIChwYWludFR5cGUgPT09IDIpIHtcbiAgICAgICAgY29uc3QgY3NzQ29sb3IgPSBfdXRpbC5VdGlsLm1ha2VIZXhDb2xvciguLi5jb2xvcik7XG5cbiAgICAgICAgdGhpcy5jdXJyZW50LmZpbGxDb2xvciA9IGNzc0NvbG9yO1xuICAgICAgICB0aGlzLmN1cnJlbnQuc3Ryb2tlQ29sb3IgPSBjc3NDb2xvcjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5leGVjdXRlT3BUcmVlKHRoaXMuY29udmVydE9wTGlzdChvcGVyYXRvckxpc3QpKTtcbiAgICAgIHRoaXMuc3ZnID0gc3ZnO1xuICAgICAgdGhpcy50cmFuc2Zvcm1NYXRyaXggPSB0cmFuc2Zvcm1NYXRyaXg7XG4gICAgICB0aGlzLmN1cnJlbnQuZmlsbENvbG9yID0gZmlsbENvbG9yO1xuICAgICAgdGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yID0gc3Ryb2tlQ29sb3I7XG4gICAgICB0aWxpbmcuYXBwZW5kQ2hpbGQoYmJveC5jaGlsZE5vZGVzWzBdKTtcbiAgICAgIHRoaXMuZGVmcy5hcHBlbmRDaGlsZCh0aWxpbmcpO1xuICAgICAgcmV0dXJuIGB1cmwoIyR7dGlsaW5nSWR9KWA7XG4gICAgfVxuXG4gICAgX21ha2VTaGFkaW5nUGF0dGVybihhcmdzKSB7XG4gICAgICBpZiAodHlwZW9mIGFyZ3MgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgYXJncyA9IHRoaXMub2Jqcy5nZXQoYXJncyk7XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoYXJnc1swXSkge1xuICAgICAgICBjYXNlIFwiUmFkaWFsQXhpYWxcIjpcbiAgICAgICAgICBjb25zdCBzaGFkaW5nSWQgPSBgc2hhZGluZyR7c2hhZGluZ0NvdW50Kyt9YDtcbiAgICAgICAgICBjb25zdCBjb2xvclN0b3BzID0gYXJnc1szXTtcbiAgICAgICAgICBsZXQgZ3JhZGllbnQ7XG5cbiAgICAgICAgICBzd2l0Y2ggKGFyZ3NbMV0pIHtcbiAgICAgICAgICAgIGNhc2UgXCJheGlhbFwiOlxuICAgICAgICAgICAgICBjb25zdCBwb2ludDAgPSBhcmdzWzRdO1xuICAgICAgICAgICAgICBjb25zdCBwb2ludDEgPSBhcmdzWzVdO1xuICAgICAgICAgICAgICBncmFkaWVudCA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOmxpbmVhckdyYWRpZW50XCIpO1xuICAgICAgICAgICAgICBncmFkaWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImlkXCIsIHNoYWRpbmdJZCk7XG4gICAgICAgICAgICAgIGdyYWRpZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZ3JhZGllbnRVbml0c1wiLCBcInVzZXJTcGFjZU9uVXNlXCIpO1xuICAgICAgICAgICAgICBncmFkaWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcIngxXCIsIHBvaW50MFswXSk7XG4gICAgICAgICAgICAgIGdyYWRpZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwieTFcIiwgcG9pbnQwWzFdKTtcbiAgICAgICAgICAgICAgZ3JhZGllbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ4MlwiLCBwb2ludDFbMF0pO1xuICAgICAgICAgICAgICBncmFkaWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInkyXCIsIHBvaW50MVsxXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIFwicmFkaWFsXCI6XG4gICAgICAgICAgICAgIGNvbnN0IGZvY2FsUG9pbnQgPSBhcmdzWzRdO1xuICAgICAgICAgICAgICBjb25zdCBjaXJjbGVQb2ludCA9IGFyZ3NbNV07XG4gICAgICAgICAgICAgIGNvbnN0IGZvY2FsUmFkaXVzID0gYXJnc1s2XTtcbiAgICAgICAgICAgICAgY29uc3QgY2lyY2xlUmFkaXVzID0gYXJnc1s3XTtcbiAgICAgICAgICAgICAgZ3JhZGllbnQgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudChcInN2ZzpyYWRpYWxHcmFkaWVudFwiKTtcbiAgICAgICAgICAgICAgZ3JhZGllbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJpZFwiLCBzaGFkaW5nSWQpO1xuICAgICAgICAgICAgICBncmFkaWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImdyYWRpZW50VW5pdHNcIiwgXCJ1c2VyU3BhY2VPblVzZVwiKTtcbiAgICAgICAgICAgICAgZ3JhZGllbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJjeFwiLCBjaXJjbGVQb2ludFswXSk7XG4gICAgICAgICAgICAgIGdyYWRpZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiY3lcIiwgY2lyY2xlUG9pbnRbMV0pO1xuICAgICAgICAgICAgICBncmFkaWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInJcIiwgY2lyY2xlUmFkaXVzKTtcbiAgICAgICAgICAgICAgZ3JhZGllbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmeFwiLCBmb2NhbFBvaW50WzBdKTtcbiAgICAgICAgICAgICAgZ3JhZGllbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmeVwiLCBmb2NhbFBvaW50WzFdKTtcbiAgICAgICAgICAgICAgZ3JhZGllbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmclwiLCBmb2NhbFJhZGl1cyk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gUmFkaWFsQXhpYWwgdHlwZTogJHthcmdzWzFdfWApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZvciAoY29uc3QgY29sb3JTdG9wIG9mIGNvbG9yU3RvcHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0b3AgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudChcInN2ZzpzdG9wXCIpO1xuICAgICAgICAgICAgc3RvcC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcIm9mZnNldFwiLCBjb2xvclN0b3BbMF0pO1xuICAgICAgICAgICAgc3RvcC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInN0b3AtY29sb3JcIiwgY29sb3JTdG9wWzFdKTtcbiAgICAgICAgICAgIGdyYWRpZW50LmFwcGVuZENoaWxkKHN0b3ApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuZGVmcy5hcHBlbmRDaGlsZChncmFkaWVudCk7XG4gICAgICAgICAgcmV0dXJuIGB1cmwoIyR7c2hhZGluZ0lkfSlgO1xuXG4gICAgICAgIGNhc2UgXCJNZXNoXCI6XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiVW5pbXBsZW1lbnRlZCBwYXR0ZXJuIE1lc2hcIik7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgY2FzZSBcIkR1bW15XCI6XG4gICAgICAgICAgcmV0dXJuIFwiaG90cGlua1wiO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIElSIHR5cGU6ICR7YXJnc1swXX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXREYXNoKGRhc2hBcnJheSwgZGFzaFBoYXNlKSB7XG4gICAgICB0aGlzLmN1cnJlbnQuZGFzaEFycmF5ID0gZGFzaEFycmF5O1xuICAgICAgdGhpcy5jdXJyZW50LmRhc2hQaGFzZSA9IGRhc2hQaGFzZTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RQYXRoKG9wcywgYXJncykge1xuICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuY3VycmVudDtcbiAgICAgIGxldCB4ID0gY3VycmVudC54LFxuICAgICAgICAgIHkgPSBjdXJyZW50Lnk7XG4gICAgICBsZXQgZCA9IFtdO1xuICAgICAgbGV0IGogPSAwO1xuXG4gICAgICBmb3IgKGNvbnN0IG9wIG9mIG9wcykge1xuICAgICAgICBzd2l0Y2ggKG9wIHwgMCkge1xuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnJlY3RhbmdsZTpcbiAgICAgICAgICAgIHggPSBhcmdzW2orK107XG4gICAgICAgICAgICB5ID0gYXJnc1tqKytdO1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBhcmdzW2orK107XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSBhcmdzW2orK107XG4gICAgICAgICAgICBjb25zdCB4dyA9IHggKyB3aWR0aDtcbiAgICAgICAgICAgIGNvbnN0IHloID0geSArIGhlaWdodDtcbiAgICAgICAgICAgIGQucHVzaChcIk1cIiwgcGYoeCksIHBmKHkpLCBcIkxcIiwgcGYoeHcpLCBwZih5KSwgXCJMXCIsIHBmKHh3KSwgcGYoeWgpLCBcIkxcIiwgcGYoeCksIHBmKHloKSwgXCJaXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5tb3ZlVG86XG4gICAgICAgICAgICB4ID0gYXJnc1tqKytdO1xuICAgICAgICAgICAgeSA9IGFyZ3NbaisrXTtcbiAgICAgICAgICAgIGQucHVzaChcIk1cIiwgcGYoeCksIHBmKHkpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMubGluZVRvOlxuICAgICAgICAgICAgeCA9IGFyZ3NbaisrXTtcbiAgICAgICAgICAgIHkgPSBhcmdzW2orK107XG4gICAgICAgICAgICBkLnB1c2goXCJMXCIsIHBmKHgpLCBwZih5KSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmN1cnZlVG86XG4gICAgICAgICAgICB4ID0gYXJnc1tqICsgNF07XG4gICAgICAgICAgICB5ID0gYXJnc1tqICsgNV07XG4gICAgICAgICAgICBkLnB1c2goXCJDXCIsIHBmKGFyZ3Nbal0pLCBwZihhcmdzW2ogKyAxXSksIHBmKGFyZ3NbaiArIDJdKSwgcGYoYXJnc1tqICsgM10pLCBwZih4KSwgcGYoeSkpO1xuICAgICAgICAgICAgaiArPSA2O1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5jdXJ2ZVRvMjpcbiAgICAgICAgICAgIGQucHVzaChcIkNcIiwgcGYoeCksIHBmKHkpLCBwZihhcmdzW2pdKSwgcGYoYXJnc1tqICsgMV0pLCBwZihhcmdzW2ogKyAyXSksIHBmKGFyZ3NbaiArIDNdKSk7XG4gICAgICAgICAgICB4ID0gYXJnc1tqICsgMl07XG4gICAgICAgICAgICB5ID0gYXJnc1tqICsgM107XG4gICAgICAgICAgICBqICs9IDQ7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmN1cnZlVG8zOlxuICAgICAgICAgICAgeCA9IGFyZ3NbaiArIDJdO1xuICAgICAgICAgICAgeSA9IGFyZ3NbaiArIDNdO1xuICAgICAgICAgICAgZC5wdXNoKFwiQ1wiLCBwZihhcmdzW2pdKSwgcGYoYXJnc1tqICsgMV0pLCBwZih4KSwgcGYoeSksIHBmKHgpLCBwZih5KSk7XG4gICAgICAgICAgICBqICs9IDQ7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmNsb3NlUGF0aDpcbiAgICAgICAgICAgIGQucHVzaChcIlpcIik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBkID0gZC5qb2luKFwiIFwiKTtcblxuICAgICAgaWYgKGN1cnJlbnQucGF0aCAmJiBvcHMubGVuZ3RoID4gMCAmJiBvcHNbMF0gIT09IF91dGlsLk9QUy5yZWN0YW5nbGUgJiYgb3BzWzBdICE9PSBfdXRpbC5PUFMubW92ZVRvKSB7XG4gICAgICAgIGQgPSBjdXJyZW50LnBhdGguZ2V0QXR0cmlidXRlTlMobnVsbCwgXCJkXCIpICsgZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnJlbnQucGF0aCA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOnBhdGhcIik7XG5cbiAgICAgICAgdGhpcy5fZW5zdXJlVHJhbnNmb3JtR3JvdXAoKS5hcHBlbmRDaGlsZChjdXJyZW50LnBhdGgpO1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50LnBhdGguc2V0QXR0cmlidXRlTlMobnVsbCwgXCJkXCIsIGQpO1xuICAgICAgY3VycmVudC5wYXRoLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZmlsbFwiLCBcIm5vbmVcIik7XG4gICAgICBjdXJyZW50LmVsZW1lbnQgPSBjdXJyZW50LnBhdGg7XG4gICAgICBjdXJyZW50LnNldEN1cnJlbnRQb2ludCh4LCB5KTtcbiAgICB9XG5cbiAgICBlbmRQYXRoKCkge1xuICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuY3VycmVudDtcbiAgICAgIGN1cnJlbnQucGF0aCA9IG51bGw7XG5cbiAgICAgIGlmICghdGhpcy5wZW5kaW5nQ2xpcCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghY3VycmVudC5lbGVtZW50KSB7XG4gICAgICAgIHRoaXMucGVuZGluZ0NsaXAgPSBudWxsO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNsaXBJZCA9IGBjbGlwcGF0aCR7Y2xpcENvdW50Kyt9YDtcbiAgICAgIGNvbnN0IGNsaXBQYXRoID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6Y2xpcFBhdGhcIik7XG4gICAgICBjbGlwUGF0aC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImlkXCIsIGNsaXBJZCk7XG4gICAgICBjbGlwUGF0aC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInRyYW5zZm9ybVwiLCBwbSh0aGlzLnRyYW5zZm9ybU1hdHJpeCkpO1xuICAgICAgY29uc3QgY2xpcEVsZW1lbnQgPSBjdXJyZW50LmVsZW1lbnQuY2xvbmVOb2RlKHRydWUpO1xuXG4gICAgICBpZiAodGhpcy5wZW5kaW5nQ2xpcCA9PT0gXCJldmVub2RkXCIpIHtcbiAgICAgICAgY2xpcEVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJjbGlwLXJ1bGVcIiwgXCJldmVub2RkXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2xpcEVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJjbGlwLXJ1bGVcIiwgXCJub256ZXJvXCIpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnBlbmRpbmdDbGlwID0gbnVsbDtcbiAgICAgIGNsaXBQYXRoLmFwcGVuZENoaWxkKGNsaXBFbGVtZW50KTtcbiAgICAgIHRoaXMuZGVmcy5hcHBlbmRDaGlsZChjbGlwUGF0aCk7XG5cbiAgICAgIGlmIChjdXJyZW50LmFjdGl2ZUNsaXBVcmwpIHtcbiAgICAgICAgY3VycmVudC5jbGlwR3JvdXAgPSBudWxsO1xuXG4gICAgICAgIGZvciAoY29uc3QgcHJldiBvZiB0aGlzLmV4dHJhU3RhY2spIHtcbiAgICAgICAgICBwcmV2LmNsaXBHcm91cCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjbGlwUGF0aC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImNsaXAtcGF0aFwiLCBjdXJyZW50LmFjdGl2ZUNsaXBVcmwpO1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50LmFjdGl2ZUNsaXBVcmwgPSBgdXJsKCMke2NsaXBJZH0pYDtcbiAgICAgIHRoaXMudGdycCA9IG51bGw7XG4gICAgfVxuXG4gICAgY2xpcCh0eXBlKSB7XG4gICAgICB0aGlzLnBlbmRpbmdDbGlwID0gdHlwZTtcbiAgICB9XG5cbiAgICBjbG9zZVBhdGgoKSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5jdXJyZW50O1xuXG4gICAgICBpZiAoY3VycmVudC5wYXRoKSB7XG4gICAgICAgIGNvbnN0IGQgPSBgJHtjdXJyZW50LnBhdGguZ2V0QXR0cmlidXRlTlMobnVsbCwgXCJkXCIpfVpgO1xuICAgICAgICBjdXJyZW50LnBhdGguc2V0QXR0cmlidXRlTlMobnVsbCwgXCJkXCIsIGQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNldExlYWRpbmcobGVhZGluZykge1xuICAgICAgdGhpcy5jdXJyZW50LmxlYWRpbmcgPSAtbGVhZGluZztcbiAgICB9XG5cbiAgICBzZXRUZXh0UmlzZSh0ZXh0UmlzZSkge1xuICAgICAgdGhpcy5jdXJyZW50LnRleHRSaXNlID0gdGV4dFJpc2U7XG4gICAgfVxuXG4gICAgc2V0VGV4dFJlbmRlcmluZ01vZGUodGV4dFJlbmRlcmluZ01vZGUpIHtcbiAgICAgIHRoaXMuY3VycmVudC50ZXh0UmVuZGVyaW5nTW9kZSA9IHRleHRSZW5kZXJpbmdNb2RlO1xuICAgIH1cblxuICAgIHNldEhTY2FsZShzY2FsZSkge1xuICAgICAgdGhpcy5jdXJyZW50LnRleHRIU2NhbGUgPSBzY2FsZSAvIDEwMDtcbiAgICB9XG5cbiAgICBzZXRSZW5kZXJpbmdJbnRlbnQoaW50ZW50KSB7fVxuXG4gICAgc2V0RmxhdG5lc3MoZmxhdG5lc3MpIHt9XG5cbiAgICBzZXRHU3RhdGUoc3RhdGVzKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBzdGF0ZXMpIHtcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICBjYXNlIFwiTFdcIjpcbiAgICAgICAgICAgIHRoaXMuc2V0TGluZVdpZHRoKHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIkxDXCI6XG4gICAgICAgICAgICB0aGlzLnNldExpbmVDYXAodmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiTEpcIjpcbiAgICAgICAgICAgIHRoaXMuc2V0TGluZUpvaW4odmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiTUxcIjpcbiAgICAgICAgICAgIHRoaXMuc2V0TWl0ZXJMaW1pdCh2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJEXCI6XG4gICAgICAgICAgICB0aGlzLnNldERhc2godmFsdWVbMF0sIHZhbHVlWzFdKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIlJJXCI6XG4gICAgICAgICAgICB0aGlzLnNldFJlbmRlcmluZ0ludGVudCh2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJGTFwiOlxuICAgICAgICAgICAgdGhpcy5zZXRGbGF0bmVzcyh2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJGb250XCI6XG4gICAgICAgICAgICB0aGlzLnNldEZvbnQodmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiQ0FcIjpcbiAgICAgICAgICAgIHRoaXMuc2V0U3Ryb2tlQWxwaGEodmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiY2FcIjpcbiAgICAgICAgICAgIHRoaXMuc2V0RmlsbEFscGhhKHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgVW5pbXBsZW1lbnRlZCBncmFwaGljIHN0YXRlIG9wZXJhdG9yICR7a2V5fWApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmaWxsKCkge1xuICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuY3VycmVudDtcblxuICAgICAgaWYgKGN1cnJlbnQuZWxlbWVudCkge1xuICAgICAgICBjdXJyZW50LmVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmaWxsXCIsIGN1cnJlbnQuZmlsbENvbG9yKTtcbiAgICAgICAgY3VycmVudC5lbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZmlsbC1vcGFjaXR5XCIsIGN1cnJlbnQuZmlsbEFscGhhKTtcbiAgICAgICAgdGhpcy5lbmRQYXRoKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3Ryb2tlKCkge1xuICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuY3VycmVudDtcblxuICAgICAgaWYgKGN1cnJlbnQuZWxlbWVudCkge1xuICAgICAgICB0aGlzLl9zZXRTdHJva2VBdHRyaWJ1dGVzKGN1cnJlbnQuZWxlbWVudCk7XG5cbiAgICAgICAgY3VycmVudC5lbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZmlsbFwiLCBcIm5vbmVcIik7XG4gICAgICAgIHRoaXMuZW5kUGF0aCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIF9zZXRTdHJva2VBdHRyaWJ1dGVzKGVsZW1lbnQsIGxpbmVXaWR0aFNjYWxlID0gMSkge1xuICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuY3VycmVudDtcbiAgICAgIGxldCBkYXNoQXJyYXkgPSBjdXJyZW50LmRhc2hBcnJheTtcblxuICAgICAgaWYgKGxpbmVXaWR0aFNjYWxlICE9PSAxICYmIGRhc2hBcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGRhc2hBcnJheSA9IGRhc2hBcnJheS5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIGxpbmVXaWR0aFNjYWxlICogdmFsdWU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwic3Ryb2tlXCIsIGN1cnJlbnQuc3Ryb2tlQ29sb3IpO1xuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInN0cm9rZS1vcGFjaXR5XCIsIGN1cnJlbnQuc3Ryb2tlQWxwaGEpO1xuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInN0cm9rZS1taXRlcmxpbWl0XCIsIHBmKGN1cnJlbnQubWl0ZXJMaW1pdCkpO1xuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInN0cm9rZS1saW5lY2FwXCIsIGN1cnJlbnQubGluZUNhcCk7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwic3Ryb2tlLWxpbmVqb2luXCIsIGN1cnJlbnQubGluZUpvaW4pO1xuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInN0cm9rZS13aWR0aFwiLCBwZihsaW5lV2lkdGhTY2FsZSAqIGN1cnJlbnQubGluZVdpZHRoKSArIFwicHhcIik7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwic3Ryb2tlLWRhc2hhcnJheVwiLCBkYXNoQXJyYXkubWFwKHBmKS5qb2luKFwiIFwiKSk7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwic3Ryb2tlLWRhc2hvZmZzZXRcIiwgcGYobGluZVdpZHRoU2NhbGUgKiBjdXJyZW50LmRhc2hQaGFzZSkgKyBcInB4XCIpO1xuICAgIH1cblxuICAgIGVvRmlsbCgpIHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnQuZWxlbWVudCkge1xuICAgICAgICB0aGlzLmN1cnJlbnQuZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImZpbGwtcnVsZVwiLCBcImV2ZW5vZGRcIik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZmlsbCgpO1xuICAgIH1cblxuICAgIGZpbGxTdHJva2UoKSB7XG4gICAgICB0aGlzLnN0cm9rZSgpO1xuICAgICAgdGhpcy5maWxsKCk7XG4gICAgfVxuXG4gICAgZW9GaWxsU3Ryb2tlKCkge1xuICAgICAgaWYgKHRoaXMuY3VycmVudC5lbGVtZW50KSB7XG4gICAgICAgIHRoaXMuY3VycmVudC5lbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZmlsbC1ydWxlXCIsIFwiZXZlbm9kZFwiKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5maWxsU3Ryb2tlKCk7XG4gICAgfVxuXG4gICAgY2xvc2VTdHJva2UoKSB7XG4gICAgICB0aGlzLmNsb3NlUGF0aCgpO1xuICAgICAgdGhpcy5zdHJva2UoKTtcbiAgICB9XG5cbiAgICBjbG9zZUZpbGxTdHJva2UoKSB7XG4gICAgICB0aGlzLmNsb3NlUGF0aCgpO1xuICAgICAgdGhpcy5maWxsU3Ryb2tlKCk7XG4gICAgfVxuXG4gICAgY2xvc2VFT0ZpbGxTdHJva2UoKSB7XG4gICAgICB0aGlzLmNsb3NlUGF0aCgpO1xuICAgICAgdGhpcy5lb0ZpbGxTdHJva2UoKTtcbiAgICB9XG5cbiAgICBwYWludFNvbGlkQ29sb3JJbWFnZU1hc2soKSB7XG4gICAgICBjb25zdCByZWN0ID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6cmVjdFwiKTtcbiAgICAgIHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ4XCIsIFwiMFwiKTtcbiAgICAgIHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ5XCIsIFwiMFwiKTtcbiAgICAgIHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ3aWR0aFwiLCBcIjFweFwiKTtcbiAgICAgIHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgXCJoZWlnaHRcIiwgXCIxcHhcIik7XG4gICAgICByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZmlsbFwiLCB0aGlzLmN1cnJlbnQuZmlsbENvbG9yKTtcblxuICAgICAgdGhpcy5fZW5zdXJlVHJhbnNmb3JtR3JvdXAoKS5hcHBlbmRDaGlsZChyZWN0KTtcbiAgICB9XG5cbiAgICBwYWludEltYWdlWE9iamVjdChvYmpJZCkge1xuICAgICAgY29uc3QgaW1nRGF0YSA9IG9iaklkLnN0YXJ0c1dpdGgoXCJnX1wiKSA/IHRoaXMuY29tbW9uT2Jqcy5nZXQob2JqSWQpIDogdGhpcy5vYmpzLmdldChvYmpJZCk7XG5cbiAgICAgIGlmICghaW1nRGF0YSkge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoYERlcGVuZGVudCBpbWFnZSB3aXRoIG9iamVjdCBJRCAke29iaklkfSBpcyBub3QgcmVhZHkgeWV0YCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wYWludElubGluZUltYWdlWE9iamVjdChpbWdEYXRhKTtcbiAgICB9XG5cbiAgICBwYWludElubGluZUltYWdlWE9iamVjdChpbWdEYXRhLCBtYXNrKSB7XG4gICAgICBjb25zdCB3aWR0aCA9IGltZ0RhdGEud2lkdGg7XG4gICAgICBjb25zdCBoZWlnaHQgPSBpbWdEYXRhLmhlaWdodDtcbiAgICAgIGNvbnN0IGltZ1NyYyA9IGNvbnZlcnRJbWdEYXRhVG9QbmcoaW1nRGF0YSwgdGhpcy5mb3JjZURhdGFTY2hlbWEsICEhbWFzayk7XG4gICAgICBjb25zdCBjbGlwcmVjdCA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOnJlY3RcIik7XG4gICAgICBjbGlwcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInhcIiwgXCIwXCIpO1xuICAgICAgY2xpcHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ5XCIsIFwiMFwiKTtcbiAgICAgIGNsaXByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwid2lkdGhcIiwgcGYod2lkdGgpKTtcbiAgICAgIGNsaXByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiaGVpZ2h0XCIsIHBmKGhlaWdodCkpO1xuICAgICAgdGhpcy5jdXJyZW50LmVsZW1lbnQgPSBjbGlwcmVjdDtcbiAgICAgIHRoaXMuY2xpcChcIm5vbnplcm9cIik7XG4gICAgICBjb25zdCBpbWdFbCA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOmltYWdlXCIpO1xuICAgICAgaW1nRWwuc2V0QXR0cmlidXRlTlMoWExJTktfTlMsIFwieGxpbms6aHJlZlwiLCBpbWdTcmMpO1xuICAgICAgaW1nRWwuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ4XCIsIFwiMFwiKTtcbiAgICAgIGltZ0VsLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwieVwiLCBwZigtaGVpZ2h0KSk7XG4gICAgICBpbWdFbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcIndpZHRoXCIsIHBmKHdpZHRoKSArIFwicHhcIik7XG4gICAgICBpbWdFbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImhlaWdodFwiLCBwZihoZWlnaHQpICsgXCJweFwiKTtcbiAgICAgIGltZ0VsLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwidHJhbnNmb3JtXCIsIGBzY2FsZSgke3BmKDEgLyB3aWR0aCl9ICR7cGYoLTEgLyBoZWlnaHQpfSlgKTtcblxuICAgICAgaWYgKG1hc2spIHtcbiAgICAgICAgbWFzay5hcHBlbmRDaGlsZChpbWdFbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9lbnN1cmVUcmFuc2Zvcm1Hcm91cCgpLmFwcGVuZENoaWxkKGltZ0VsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYWludEltYWdlTWFza1hPYmplY3QoaW1nRGF0YSkge1xuICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuY3VycmVudDtcbiAgICAgIGNvbnN0IHdpZHRoID0gaW1nRGF0YS53aWR0aDtcbiAgICAgIGNvbnN0IGhlaWdodCA9IGltZ0RhdGEuaGVpZ2h0O1xuICAgICAgY29uc3QgZmlsbENvbG9yID0gY3VycmVudC5maWxsQ29sb3I7XG4gICAgICBjdXJyZW50Lm1hc2tJZCA9IGBtYXNrJHttYXNrQ291bnQrK31gO1xuICAgICAgY29uc3QgbWFzayA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOm1hc2tcIik7XG4gICAgICBtYXNrLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiaWRcIiwgY3VycmVudC5tYXNrSWQpO1xuICAgICAgY29uc3QgcmVjdCA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOnJlY3RcIik7XG4gICAgICByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwieFwiLCBcIjBcIik7XG4gICAgICByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwieVwiLCBcIjBcIik7XG4gICAgICByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwid2lkdGhcIiwgcGYod2lkdGgpKTtcbiAgICAgIHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgXCJoZWlnaHRcIiwgcGYoaGVpZ2h0KSk7XG4gICAgICByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZmlsbFwiLCBmaWxsQ29sb3IpO1xuICAgICAgcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcIm1hc2tcIiwgYHVybCgjJHtjdXJyZW50Lm1hc2tJZH0pYCk7XG4gICAgICB0aGlzLmRlZnMuYXBwZW5kQ2hpbGQobWFzayk7XG5cbiAgICAgIHRoaXMuX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkuYXBwZW5kQ2hpbGQocmVjdCk7XG5cbiAgICAgIHRoaXMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3QoaW1nRGF0YSwgbWFzayk7XG4gICAgfVxuXG4gICAgcGFpbnRGb3JtWE9iamVjdEJlZ2luKG1hdHJpeCwgYmJveCkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobWF0cml4KSAmJiBtYXRyaXgubGVuZ3RoID09PSA2KSB7XG4gICAgICAgIHRoaXMudHJhbnNmb3JtKG1hdHJpeFswXSwgbWF0cml4WzFdLCBtYXRyaXhbMl0sIG1hdHJpeFszXSwgbWF0cml4WzRdLCBtYXRyaXhbNV0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoYmJveCkge1xuICAgICAgICBjb25zdCB3aWR0aCA9IGJib3hbMl0gLSBiYm94WzBdO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSBiYm94WzNdIC0gYmJveFsxXTtcbiAgICAgICAgY29uc3QgY2xpcHJlY3QgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudChcInN2ZzpyZWN0XCIpO1xuICAgICAgICBjbGlwcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInhcIiwgYmJveFswXSk7XG4gICAgICAgIGNsaXByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwieVwiLCBiYm94WzFdKTtcbiAgICAgICAgY2xpcHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ3aWR0aFwiLCBwZih3aWR0aCkpO1xuICAgICAgICBjbGlwcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImhlaWdodFwiLCBwZihoZWlnaHQpKTtcbiAgICAgICAgdGhpcy5jdXJyZW50LmVsZW1lbnQgPSBjbGlwcmVjdDtcbiAgICAgICAgdGhpcy5jbGlwKFwibm9uemVyb1wiKTtcbiAgICAgICAgdGhpcy5lbmRQYXRoKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcGFpbnRGb3JtWE9iamVjdEVuZCgpIHt9XG5cbiAgICBfaW5pdGlhbGl6ZSh2aWV3cG9ydCkge1xuICAgICAgY29uc3Qgc3ZnID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZSh2aWV3cG9ydC53aWR0aCwgdmlld3BvcnQuaGVpZ2h0KTtcbiAgICAgIGNvbnN0IGRlZmluaXRpb25zID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6ZGVmc1wiKTtcbiAgICAgIHN2Zy5hcHBlbmRDaGlsZChkZWZpbml0aW9ucyk7XG4gICAgICB0aGlzLmRlZnMgPSBkZWZpbml0aW9ucztcbiAgICAgIGNvbnN0IHJvb3RHcm91cCA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOmdcIik7XG4gICAgICByb290R3JvdXAuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ0cmFuc2Zvcm1cIiwgcG0odmlld3BvcnQudHJhbnNmb3JtKSk7XG4gICAgICBzdmcuYXBwZW5kQ2hpbGQocm9vdEdyb3VwKTtcbiAgICAgIHRoaXMuc3ZnID0gcm9vdEdyb3VwO1xuICAgICAgcmV0dXJuIHN2ZztcbiAgICB9XG5cbiAgICBfZW5zdXJlQ2xpcEdyb3VwKCkge1xuICAgICAgaWYgKCF0aGlzLmN1cnJlbnQuY2xpcEdyb3VwKSB7XG4gICAgICAgIGNvbnN0IGNsaXBHcm91cCA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOmdcIik7XG4gICAgICAgIGNsaXBHcm91cC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImNsaXAtcGF0aFwiLCB0aGlzLmN1cnJlbnQuYWN0aXZlQ2xpcFVybCk7XG4gICAgICAgIHRoaXMuc3ZnLmFwcGVuZENoaWxkKGNsaXBHcm91cCk7XG4gICAgICAgIHRoaXMuY3VycmVudC5jbGlwR3JvdXAgPSBjbGlwR3JvdXA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmN1cnJlbnQuY2xpcEdyb3VwO1xuICAgIH1cblxuICAgIF9lbnN1cmVUcmFuc2Zvcm1Hcm91cCgpIHtcbiAgICAgIGlmICghdGhpcy50Z3JwKSB7XG4gICAgICAgIHRoaXMudGdycCA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOmdcIik7XG4gICAgICAgIHRoaXMudGdycC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInRyYW5zZm9ybVwiLCBwbSh0aGlzLnRyYW5zZm9ybU1hdHJpeCkpO1xuXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnQuYWN0aXZlQ2xpcFVybCkge1xuICAgICAgICAgIHRoaXMuX2Vuc3VyZUNsaXBHcm91cCgpLmFwcGVuZENoaWxkKHRoaXMudGdycCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zdmcuYXBwZW5kQ2hpbGQodGhpcy50Z3JwKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy50Z3JwO1xuICAgIH1cblxuICB9O1xufVxuXG4vKioqLyB9KSxcbi8qIDIzICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLlBERk5vZGVTdHJlYW0gPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfbmV0d29ya191dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oMjQpO1xuXG47XG5cbmNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpO1xuXG5jb25zdCBodHRwID0gcmVxdWlyZShcImh0dHBcIik7XG5cbmNvbnN0IGh0dHBzID0gcmVxdWlyZShcImh0dHBzXCIpO1xuXG5jb25zdCB1cmwgPSByZXF1aXJlKFwidXJsXCIpO1xuXG5jb25zdCBmaWxlVXJpUmVnZXggPSAvXmZpbGU6XFwvXFwvXFwvW2EtekEtWl06XFwvLztcblxuZnVuY3Rpb24gcGFyc2VVcmwoc291cmNlVXJsKSB7XG4gIGNvbnN0IHBhcnNlZFVybCA9IHVybC5wYXJzZShzb3VyY2VVcmwpO1xuXG4gIGlmIChwYXJzZWRVcmwucHJvdG9jb2wgPT09IFwiZmlsZTpcIiB8fCBwYXJzZWRVcmwuaG9zdCkge1xuICAgIHJldHVybiBwYXJzZWRVcmw7XG4gIH1cblxuICBpZiAoL15bYS16XTpbL1xcXFxdL2kudGVzdChzb3VyY2VVcmwpKSB7XG4gICAgcmV0dXJuIHVybC5wYXJzZShgZmlsZTovLy8ke3NvdXJjZVVybH1gKTtcbiAgfVxuXG4gIGlmICghcGFyc2VkVXJsLmhvc3QpIHtcbiAgICBwYXJzZWRVcmwucHJvdG9jb2wgPSBcImZpbGU6XCI7XG4gIH1cblxuICByZXR1cm4gcGFyc2VkVXJsO1xufVxuXG5jbGFzcyBQREZOb2RlU3RyZWFtIHtcbiAgY29uc3RydWN0b3Ioc291cmNlKSB7XG4gICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgdGhpcy51cmwgPSBwYXJzZVVybChzb3VyY2UudXJsKTtcbiAgICB0aGlzLmlzSHR0cCA9IHRoaXMudXJsLnByb3RvY29sID09PSBcImh0dHA6XCIgfHwgdGhpcy51cmwucHJvdG9jb2wgPT09IFwiaHR0cHM6XCI7XG4gICAgdGhpcy5pc0ZzVXJsID0gdGhpcy51cmwucHJvdG9jb2wgPT09IFwiZmlsZTpcIjtcbiAgICB0aGlzLmh0dHBIZWFkZXJzID0gdGhpcy5pc0h0dHAgJiYgc291cmNlLmh0dHBIZWFkZXJzIHx8IHt9O1xuICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyID0gbnVsbDtcbiAgICB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzID0gW107XG4gIH1cblxuICBnZXQgX3Byb2dyZXNzaXZlRGF0YUxlbmd0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI/Ll9sb2FkZWQgPz8gMDtcbiAgfVxuXG4gIGdldEZ1bGxSZWFkZXIoKSB7XG4gICAgKDAsIF91dGlsLmFzc2VydCkoIXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLCBcIlBERk5vZGVTdHJlYW0uZ2V0RnVsbFJlYWRlciBjYW4gb25seSBiZSBjYWxsZWQgb25jZS5cIik7XG4gICAgdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIgPSB0aGlzLmlzRnNVcmwgPyBuZXcgUERGTm9kZVN0cmVhbUZzRnVsbFJlYWRlcih0aGlzKSA6IG5ldyBQREZOb2RlU3RyZWFtRnVsbFJlYWRlcih0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI7XG4gIH1cblxuICBnZXRSYW5nZVJlYWRlcihzdGFydCwgZW5kKSB7XG4gICAgaWYgKGVuZCA8PSB0aGlzLl9wcm9ncmVzc2l2ZURhdGFMZW5ndGgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHJhbmdlUmVhZGVyID0gdGhpcy5pc0ZzVXJsID8gbmV3IFBERk5vZGVTdHJlYW1Gc1JhbmdlUmVhZGVyKHRoaXMsIHN0YXJ0LCBlbmQpIDogbmV3IFBERk5vZGVTdHJlYW1SYW5nZVJlYWRlcih0aGlzLCBzdGFydCwgZW5kKTtcblxuICAgIHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMucHVzaChyYW5nZVJlYWRlcik7XG5cbiAgICByZXR1cm4gcmFuZ2VSZWFkZXI7XG4gIH1cblxuICBjYW5jZWxBbGxSZXF1ZXN0cyhyZWFzb24pIHtcbiAgICBpZiAodGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpIHtcbiAgICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcmVhZGVyIG9mIHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMuc2xpY2UoMCkpIHtcbiAgICAgIHJlYWRlci5jYW5jZWwocmVhc29uKTtcbiAgICB9XG4gIH1cblxufVxuXG5leHBvcnRzLlBERk5vZGVTdHJlYW0gPSBQREZOb2RlU3RyZWFtO1xuXG5jbGFzcyBCYXNlRnVsbFJlYWRlciB7XG4gIGNvbnN0cnVjdG9yKHN0cmVhbSkge1xuICAgIHRoaXMuX3VybCA9IHN0cmVhbS51cmw7XG4gICAgdGhpcy5fZG9uZSA9IGZhbHNlO1xuICAgIHRoaXMuX3N0b3JlZEVycm9yID0gbnVsbDtcbiAgICB0aGlzLm9uUHJvZ3Jlc3MgPSBudWxsO1xuICAgIGNvbnN0IHNvdXJjZSA9IHN0cmVhbS5zb3VyY2U7XG4gICAgdGhpcy5fY29udGVudExlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG4gICAgdGhpcy5fbG9hZGVkID0gMDtcbiAgICB0aGlzLl9maWxlbmFtZSA9IG51bGw7XG4gICAgdGhpcy5fZGlzYWJsZVJhbmdlID0gc291cmNlLmRpc2FibGVSYW5nZSB8fCBmYWxzZTtcbiAgICB0aGlzLl9yYW5nZUNodW5rU2l6ZSA9IHNvdXJjZS5yYW5nZUNodW5rU2l6ZTtcblxuICAgIGlmICghdGhpcy5fcmFuZ2VDaHVua1NpemUgJiYgIXRoaXMuX2Rpc2FibGVSYW5nZSkge1xuICAgICAgdGhpcy5fZGlzYWJsZVJhbmdlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZCA9ICFzb3VyY2UuZGlzYWJsZVN0cmVhbTtcbiAgICB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkID0gIXNvdXJjZS5kaXNhYmxlUmFuZ2U7XG4gICAgdGhpcy5fcmVhZGFibGVTdHJlYW0gPSBudWxsO1xuICAgIHRoaXMuX3JlYWRDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgIHRoaXMuX2hlYWRlcnNDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICB9XG5cbiAgZ2V0IGhlYWRlcnNSZWFkeSgpIHtcbiAgICByZXR1cm4gdGhpcy5faGVhZGVyc0NhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxuXG4gIGdldCBmaWxlbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsZW5hbWU7XG4gIH1cblxuICBnZXQgY29udGVudExlbmd0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29udGVudExlbmd0aDtcbiAgfVxuXG4gIGdldCBpc1JhbmdlU3VwcG9ydGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkO1xuICB9XG5cbiAgZ2V0IGlzU3RyZWFtaW5nU3VwcG9ydGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZDtcbiAgfVxuXG4gIGFzeW5jIHJlYWQoKSB7XG4gICAgYXdhaXQgdGhpcy5fcmVhZENhcGFiaWxpdHkucHJvbWlzZTtcblxuICAgIGlmICh0aGlzLl9kb25lKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICBkb25lOiB0cnVlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdG9yZWRFcnJvcikge1xuICAgICAgdGhyb3cgdGhpcy5fc3RvcmVkRXJyb3I7XG4gICAgfVxuXG4gICAgY29uc3QgY2h1bmsgPSB0aGlzLl9yZWFkYWJsZVN0cmVhbS5yZWFkKCk7XG5cbiAgICBpZiAoY2h1bmsgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuX3JlYWRDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgcmV0dXJuIHRoaXMucmVhZCgpO1xuICAgIH1cblxuICAgIHRoaXMuX2xvYWRlZCArPSBjaHVuay5sZW5ndGg7XG5cbiAgICBpZiAodGhpcy5vblByb2dyZXNzKSB7XG4gICAgICB0aGlzLm9uUHJvZ3Jlc3Moe1xuICAgICAgICBsb2FkZWQ6IHRoaXMuX2xvYWRlZCxcbiAgICAgICAgdG90YWw6IHRoaXMuX2NvbnRlbnRMZW5ndGhcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KGNodW5rKS5idWZmZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiBidWZmZXIsXG4gICAgICBkb25lOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBjYW5jZWwocmVhc29uKSB7XG4gICAgaWYgKCF0aGlzLl9yZWFkYWJsZVN0cmVhbSkge1xuICAgICAgdGhpcy5fZXJyb3IocmVhc29uKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3JlYWRhYmxlU3RyZWFtLmRlc3Ryb3kocmVhc29uKTtcbiAgfVxuXG4gIF9lcnJvcihyZWFzb24pIHtcbiAgICB0aGlzLl9zdG9yZWRFcnJvciA9IHJlYXNvbjtcblxuICAgIHRoaXMuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgfVxuXG4gIF9zZXRSZWFkYWJsZVN0cmVhbShyZWFkYWJsZVN0cmVhbSkge1xuICAgIHRoaXMuX3JlYWRhYmxlU3RyZWFtID0gcmVhZGFibGVTdHJlYW07XG4gICAgcmVhZGFibGVTdHJlYW0ub24oXCJyZWFkYWJsZVwiLCAoKSA9PiB7XG4gICAgICB0aGlzLl9yZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgfSk7XG4gICAgcmVhZGFibGVTdHJlYW0ub24oXCJlbmRcIiwgKCkgPT4ge1xuICAgICAgcmVhZGFibGVTdHJlYW0uZGVzdHJveSgpO1xuICAgICAgdGhpcy5fZG9uZSA9IHRydWU7XG5cbiAgICAgIHRoaXMuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICB9KTtcbiAgICByZWFkYWJsZVN0cmVhbS5vbihcImVycm9yXCIsIHJlYXNvbiA9PiB7XG4gICAgICB0aGlzLl9lcnJvcihyZWFzb24pO1xuICAgIH0pO1xuXG4gICAgaWYgKCF0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZCAmJiB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkKSB7XG4gICAgICB0aGlzLl9lcnJvcihuZXcgX3V0aWwuQWJvcnRFeGNlcHRpb24oXCJzdHJlYW1pbmcgaXMgZGlzYWJsZWRcIikpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdG9yZWRFcnJvcikge1xuICAgICAgdGhpcy5fcmVhZGFibGVTdHJlYW0uZGVzdHJveSh0aGlzLl9zdG9yZWRFcnJvcik7XG4gICAgfVxuICB9XG5cbn1cblxuY2xhc3MgQmFzZVJhbmdlUmVhZGVyIHtcbiAgY29uc3RydWN0b3Ioc3RyZWFtKSB7XG4gICAgdGhpcy5fdXJsID0gc3RyZWFtLnVybDtcbiAgICB0aGlzLl9kb25lID0gZmFsc2U7XG4gICAgdGhpcy5fc3RvcmVkRXJyb3IgPSBudWxsO1xuICAgIHRoaXMub25Qcm9ncmVzcyA9IG51bGw7XG4gICAgdGhpcy5fbG9hZGVkID0gMDtcbiAgICB0aGlzLl9yZWFkYWJsZVN0cmVhbSA9IG51bGw7XG4gICAgdGhpcy5fcmVhZENhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgY29uc3Qgc291cmNlID0gc3RyZWFtLnNvdXJjZTtcbiAgICB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZCA9ICFzb3VyY2UuZGlzYWJsZVN0cmVhbTtcbiAgfVxuXG4gIGdldCBpc1N0cmVhbWluZ1N1cHBvcnRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ7XG4gIH1cblxuICBhc3luYyByZWFkKCkge1xuICAgIGF3YWl0IHRoaXMuX3JlYWRDYXBhYmlsaXR5LnByb21pc2U7XG5cbiAgICBpZiAodGhpcy5fZG9uZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgZG9uZTogdHJ1ZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RvcmVkRXJyb3IpIHtcbiAgICAgIHRocm93IHRoaXMuX3N0b3JlZEVycm9yO1xuICAgIH1cblxuICAgIGNvbnN0IGNodW5rID0gdGhpcy5fcmVhZGFibGVTdHJlYW0ucmVhZCgpO1xuXG4gICAgaWYgKGNodW5rID09PSBudWxsKSB7XG4gICAgICB0aGlzLl9yZWFkQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgIHJldHVybiB0aGlzLnJlYWQoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2FkZWQgKz0gY2h1bmsubGVuZ3RoO1xuXG4gICAgaWYgKHRoaXMub25Qcm9ncmVzcykge1xuICAgICAgdGhpcy5vblByb2dyZXNzKHtcbiAgICAgICAgbG9hZGVkOiB0aGlzLl9sb2FkZWRcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KGNodW5rKS5idWZmZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiBidWZmZXIsXG4gICAgICBkb25lOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBjYW5jZWwocmVhc29uKSB7XG4gICAgaWYgKCF0aGlzLl9yZWFkYWJsZVN0cmVhbSkge1xuICAgICAgdGhpcy5fZXJyb3IocmVhc29uKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3JlYWRhYmxlU3RyZWFtLmRlc3Ryb3kocmVhc29uKTtcbiAgfVxuXG4gIF9lcnJvcihyZWFzb24pIHtcbiAgICB0aGlzLl9zdG9yZWRFcnJvciA9IHJlYXNvbjtcblxuICAgIHRoaXMuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgfVxuXG4gIF9zZXRSZWFkYWJsZVN0cmVhbShyZWFkYWJsZVN0cmVhbSkge1xuICAgIHRoaXMuX3JlYWRhYmxlU3RyZWFtID0gcmVhZGFibGVTdHJlYW07XG4gICAgcmVhZGFibGVTdHJlYW0ub24oXCJyZWFkYWJsZVwiLCAoKSA9PiB7XG4gICAgICB0aGlzLl9yZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgfSk7XG4gICAgcmVhZGFibGVTdHJlYW0ub24oXCJlbmRcIiwgKCkgPT4ge1xuICAgICAgcmVhZGFibGVTdHJlYW0uZGVzdHJveSgpO1xuICAgICAgdGhpcy5fZG9uZSA9IHRydWU7XG5cbiAgICAgIHRoaXMuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICB9KTtcbiAgICByZWFkYWJsZVN0cmVhbS5vbihcImVycm9yXCIsIHJlYXNvbiA9PiB7XG4gICAgICB0aGlzLl9lcnJvcihyZWFzb24pO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuX3N0b3JlZEVycm9yKSB7XG4gICAgICB0aGlzLl9yZWFkYWJsZVN0cmVhbS5kZXN0cm95KHRoaXMuX3N0b3JlZEVycm9yKTtcbiAgICB9XG4gIH1cblxufVxuXG5mdW5jdGlvbiBjcmVhdGVSZXF1ZXN0T3B0aW9ucyhwYXJzZWRVcmwsIGhlYWRlcnMpIHtcbiAgcmV0dXJuIHtcbiAgICBwcm90b2NvbDogcGFyc2VkVXJsLnByb3RvY29sLFxuICAgIGF1dGg6IHBhcnNlZFVybC5hdXRoLFxuICAgIGhvc3Q6IHBhcnNlZFVybC5ob3N0bmFtZSxcbiAgICBwb3J0OiBwYXJzZWRVcmwucG9ydCxcbiAgICBwYXRoOiBwYXJzZWRVcmwucGF0aCxcbiAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgaGVhZGVyc1xuICB9O1xufVxuXG5jbGFzcyBQREZOb2RlU3RyZWFtRnVsbFJlYWRlciBleHRlbmRzIEJhc2VGdWxsUmVhZGVyIHtcbiAgY29uc3RydWN0b3Ioc3RyZWFtKSB7XG4gICAgc3VwZXIoc3RyZWFtKTtcblxuICAgIGNvbnN0IGhhbmRsZVJlc3BvbnNlID0gcmVzcG9uc2UgPT4ge1xuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1c0NvZGUgPT09IDQwNCkge1xuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBfdXRpbC5NaXNzaW5nUERGRXhjZXB0aW9uKGBNaXNzaW5nIFBERiBcIiR7dGhpcy5fdXJsfVwiLmApO1xuICAgICAgICB0aGlzLl9zdG9yZWRFcnJvciA9IGVycm9yO1xuXG4gICAgICAgIHRoaXMuX2hlYWRlcnNDYXBhYmlsaXR5LnJlamVjdChlcnJvcik7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG5cbiAgICAgIHRoaXMuX3NldFJlYWRhYmxlU3RyZWFtKHJlc3BvbnNlKTtcblxuICAgICAgY29uc3QgZ2V0UmVzcG9uc2VIZWFkZXIgPSBuYW1lID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RyZWFtLmhlYWRlcnNbbmFtZS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgYWxsb3dSYW5nZVJlcXVlc3RzLFxuICAgICAgICBzdWdnZXN0ZWRMZW5ndGhcbiAgICAgIH0gPSAoMCwgX25ldHdvcmtfdXRpbHMudmFsaWRhdGVSYW5nZVJlcXVlc3RDYXBhYmlsaXRpZXMpKHtcbiAgICAgICAgZ2V0UmVzcG9uc2VIZWFkZXIsXG4gICAgICAgIGlzSHR0cDogc3RyZWFtLmlzSHR0cCxcbiAgICAgICAgcmFuZ2VDaHVua1NpemU6IHRoaXMuX3JhbmdlQ2h1bmtTaXplLFxuICAgICAgICBkaXNhYmxlUmFuZ2U6IHRoaXMuX2Rpc2FibGVSYW5nZVxuICAgICAgfSk7XG4gICAgICB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkID0gYWxsb3dSYW5nZVJlcXVlc3RzO1xuICAgICAgdGhpcy5fY29udGVudExlbmd0aCA9IHN1Z2dlc3RlZExlbmd0aCB8fCB0aGlzLl9jb250ZW50TGVuZ3RoO1xuICAgICAgdGhpcy5fZmlsZW5hbWUgPSAoMCwgX25ldHdvcmtfdXRpbHMuZXh0cmFjdEZpbGVuYW1lRnJvbUhlYWRlcikoZ2V0UmVzcG9uc2VIZWFkZXIpO1xuICAgIH07XG5cbiAgICB0aGlzLl9yZXF1ZXN0ID0gbnVsbDtcblxuICAgIGlmICh0aGlzLl91cmwucHJvdG9jb2wgPT09IFwiaHR0cDpcIikge1xuICAgICAgdGhpcy5fcmVxdWVzdCA9IGh0dHAucmVxdWVzdChjcmVhdGVSZXF1ZXN0T3B0aW9ucyh0aGlzLl91cmwsIHN0cmVhbS5odHRwSGVhZGVycyksIGhhbmRsZVJlc3BvbnNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcmVxdWVzdCA9IGh0dHBzLnJlcXVlc3QoY3JlYXRlUmVxdWVzdE9wdGlvbnModGhpcy5fdXJsLCBzdHJlYW0uaHR0cEhlYWRlcnMpLCBoYW5kbGVSZXNwb25zZSk7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVxdWVzdC5vbihcImVycm9yXCIsIHJlYXNvbiA9PiB7XG4gICAgICB0aGlzLl9zdG9yZWRFcnJvciA9IHJlYXNvbjtcblxuICAgICAgdGhpcy5faGVhZGVyc0NhcGFiaWxpdHkucmVqZWN0KHJlYXNvbik7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9yZXF1ZXN0LmVuZCgpO1xuICB9XG5cbn1cblxuY2xhc3MgUERGTm9kZVN0cmVhbVJhbmdlUmVhZGVyIGV4dGVuZHMgQmFzZVJhbmdlUmVhZGVyIHtcbiAgY29uc3RydWN0b3Ioc3RyZWFtLCBzdGFydCwgZW5kKSB7XG4gICAgc3VwZXIoc3RyZWFtKTtcbiAgICB0aGlzLl9odHRwSGVhZGVycyA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBzdHJlYW0uaHR0cEhlYWRlcnMpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gc3RyZWFtLmh0dHBIZWFkZXJzW3Byb3BlcnR5XTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5faHR0cEhlYWRlcnNbcHJvcGVydHldID0gdmFsdWU7XG4gICAgfVxuXG4gICAgdGhpcy5faHR0cEhlYWRlcnMuUmFuZ2UgPSBgYnl0ZXM9JHtzdGFydH0tJHtlbmQgLSAxfWA7XG5cbiAgICBjb25zdCBoYW5kbGVSZXNwb25zZSA9IHJlc3BvbnNlID0+IHtcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlID09PSA0MDQpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgX3V0aWwuTWlzc2luZ1BERkV4Y2VwdGlvbihgTWlzc2luZyBQREYgXCIke3RoaXMuX3VybH1cIi5gKTtcbiAgICAgICAgdGhpcy5fc3RvcmVkRXJyb3IgPSBlcnJvcjtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9zZXRSZWFkYWJsZVN0cmVhbShyZXNwb25zZSk7XG4gICAgfTtcblxuICAgIHRoaXMuX3JlcXVlc3QgPSBudWxsO1xuXG4gICAgaWYgKHRoaXMuX3VybC5wcm90b2NvbCA9PT0gXCJodHRwOlwiKSB7XG4gICAgICB0aGlzLl9yZXF1ZXN0ID0gaHR0cC5yZXF1ZXN0KGNyZWF0ZVJlcXVlc3RPcHRpb25zKHRoaXMuX3VybCwgdGhpcy5faHR0cEhlYWRlcnMpLCBoYW5kbGVSZXNwb25zZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3JlcXVlc3QgPSBodHRwcy5yZXF1ZXN0KGNyZWF0ZVJlcXVlc3RPcHRpb25zKHRoaXMuX3VybCwgdGhpcy5faHR0cEhlYWRlcnMpLCBoYW5kbGVSZXNwb25zZSk7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVxdWVzdC5vbihcImVycm9yXCIsIHJlYXNvbiA9PiB7XG4gICAgICB0aGlzLl9zdG9yZWRFcnJvciA9IHJlYXNvbjtcbiAgICB9KTtcblxuICAgIHRoaXMuX3JlcXVlc3QuZW5kKCk7XG4gIH1cblxufVxuXG5jbGFzcyBQREZOb2RlU3RyZWFtRnNGdWxsUmVhZGVyIGV4dGVuZHMgQmFzZUZ1bGxSZWFkZXIge1xuICBjb25zdHJ1Y3RvcihzdHJlYW0pIHtcbiAgICBzdXBlcihzdHJlYW0pO1xuICAgIGxldCBwYXRoID0gZGVjb2RlVVJJQ29tcG9uZW50KHRoaXMuX3VybC5wYXRoKTtcblxuICAgIGlmIChmaWxlVXJpUmVnZXgudGVzdCh0aGlzLl91cmwuaHJlZikpIHtcbiAgICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoL15cXC8vLCBcIlwiKTtcbiAgICB9XG5cbiAgICBmcy5sc3RhdChwYXRoLCAoZXJyb3IsIHN0YXQpID0+IHtcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IuY29kZSA9PT0gXCJFTk9FTlRcIikge1xuICAgICAgICAgIGVycm9yID0gbmV3IF91dGlsLk1pc3NpbmdQREZFeGNlcHRpb24oYE1pc3NpbmcgUERGIFwiJHtwYXRofVwiLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc3RvcmVkRXJyb3IgPSBlcnJvcjtcblxuICAgICAgICB0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5yZWplY3QoZXJyb3IpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY29udGVudExlbmd0aCA9IHN0YXQuc2l6ZTtcblxuICAgICAgdGhpcy5fc2V0UmVhZGFibGVTdHJlYW0oZnMuY3JlYXRlUmVhZFN0cmVhbShwYXRoKSk7XG5cbiAgICAgIHRoaXMuX2hlYWRlcnNDYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICB9KTtcbiAgfVxuXG59XG5cbmNsYXNzIFBERk5vZGVTdHJlYW1Gc1JhbmdlUmVhZGVyIGV4dGVuZHMgQmFzZVJhbmdlUmVhZGVyIHtcbiAgY29uc3RydWN0b3Ioc3RyZWFtLCBzdGFydCwgZW5kKSB7XG4gICAgc3VwZXIoc3RyZWFtKTtcbiAgICBsZXQgcGF0aCA9IGRlY29kZVVSSUNvbXBvbmVudCh0aGlzLl91cmwucGF0aCk7XG5cbiAgICBpZiAoZmlsZVVyaVJlZ2V4LnRlc3QodGhpcy5fdXJsLmhyZWYpKSB7XG4gICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKC9eXFwvLywgXCJcIik7XG4gICAgfVxuXG4gICAgdGhpcy5fc2V0UmVhZGFibGVTdHJlYW0oZnMuY3JlYXRlUmVhZFN0cmVhbShwYXRoLCB7XG4gICAgICBzdGFydCxcbiAgICAgIGVuZDogZW5kIC0gMVxuICAgIH0pKTtcbiAgfVxuXG59XG5cbi8qKiovIH0pLFxuLyogMjQgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuY3JlYXRlUmVzcG9uc2VTdGF0dXNFcnJvciA9IGNyZWF0ZVJlc3BvbnNlU3RhdHVzRXJyb3I7XG5leHBvcnRzLmV4dHJhY3RGaWxlbmFtZUZyb21IZWFkZXIgPSBleHRyYWN0RmlsZW5hbWVGcm9tSGVhZGVyO1xuZXhwb3J0cy52YWxpZGF0ZVJhbmdlUmVxdWVzdENhcGFiaWxpdGllcyA9IHZhbGlkYXRlUmFuZ2VSZXF1ZXN0Q2FwYWJpbGl0aWVzO1xuZXhwb3J0cy52YWxpZGF0ZVJlc3BvbnNlU3RhdHVzID0gdmFsaWRhdGVSZXNwb25zZVN0YXR1cztcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9jb250ZW50X2Rpc3Bvc2l0aW9uID0gX193X3BkZmpzX3JlcXVpcmVfXygyNSk7XG5cbnZhciBfZGlzcGxheV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oMSk7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUmFuZ2VSZXF1ZXN0Q2FwYWJpbGl0aWVzKHtcbiAgZ2V0UmVzcG9uc2VIZWFkZXIsXG4gIGlzSHR0cCxcbiAgcmFuZ2VDaHVua1NpemUsXG4gIGRpc2FibGVSYW5nZVxufSkge1xuICAoMCwgX3V0aWwuYXNzZXJ0KShyYW5nZUNodW5rU2l6ZSA+IDAsIFwiUmFuZ2UgY2h1bmsgc2l6ZSBtdXN0IGJlIGxhcmdlciB0aGFuIHplcm9cIik7XG4gIGNvbnN0IHJldHVyblZhbHVlcyA9IHtcbiAgICBhbGxvd1JhbmdlUmVxdWVzdHM6IGZhbHNlLFxuICAgIHN1Z2dlc3RlZExlbmd0aDogdW5kZWZpbmVkXG4gIH07XG4gIGNvbnN0IGxlbmd0aCA9IHBhcnNlSW50KGdldFJlc3BvbnNlSGVhZGVyKFwiQ29udGVudC1MZW5ndGhcIiksIDEwKTtcblxuICBpZiAoIU51bWJlci5pc0ludGVnZXIobGVuZ3RoKSkge1xuICAgIHJldHVybiByZXR1cm5WYWx1ZXM7XG4gIH1cblxuICByZXR1cm5WYWx1ZXMuc3VnZ2VzdGVkTGVuZ3RoID0gbGVuZ3RoO1xuXG4gIGlmIChsZW5ndGggPD0gMiAqIHJhbmdlQ2h1bmtTaXplKSB7XG4gICAgcmV0dXJuIHJldHVyblZhbHVlcztcbiAgfVxuXG4gIGlmIChkaXNhYmxlUmFuZ2UgfHwgIWlzSHR0cCkge1xuICAgIHJldHVybiByZXR1cm5WYWx1ZXM7XG4gIH1cblxuICBpZiAoZ2V0UmVzcG9uc2VIZWFkZXIoXCJBY2NlcHQtUmFuZ2VzXCIpICE9PSBcImJ5dGVzXCIpIHtcbiAgICByZXR1cm4gcmV0dXJuVmFsdWVzO1xuICB9XG5cbiAgY29uc3QgY29udGVudEVuY29kaW5nID0gZ2V0UmVzcG9uc2VIZWFkZXIoXCJDb250ZW50LUVuY29kaW5nXCIpIHx8IFwiaWRlbnRpdHlcIjtcblxuICBpZiAoY29udGVudEVuY29kaW5nICE9PSBcImlkZW50aXR5XCIpIHtcbiAgICByZXR1cm4gcmV0dXJuVmFsdWVzO1xuICB9XG5cbiAgcmV0dXJuVmFsdWVzLmFsbG93UmFuZ2VSZXF1ZXN0cyA9IHRydWU7XG4gIHJldHVybiByZXR1cm5WYWx1ZXM7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RGaWxlbmFtZUZyb21IZWFkZXIoZ2V0UmVzcG9uc2VIZWFkZXIpIHtcbiAgY29uc3QgY29udGVudERpc3Bvc2l0aW9uID0gZ2V0UmVzcG9uc2VIZWFkZXIoXCJDb250ZW50LURpc3Bvc2l0aW9uXCIpO1xuXG4gIGlmIChjb250ZW50RGlzcG9zaXRpb24pIHtcbiAgICBsZXQgZmlsZW5hbWUgPSAoMCwgX2NvbnRlbnRfZGlzcG9zaXRpb24uZ2V0RmlsZW5hbWVGcm9tQ29udGVudERpc3Bvc2l0aW9uSGVhZGVyKShjb250ZW50RGlzcG9zaXRpb24pO1xuXG4gICAgaWYgKGZpbGVuYW1lLmluY2x1ZGVzKFwiJVwiKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZmlsZW5hbWUgPSBkZWNvZGVVUklDb21wb25lbnQoZmlsZW5hbWUpO1xuICAgICAgfSBjYXRjaCAoZXgpIHt9XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfZGlzcGxheV91dGlscy5pc1BkZkZpbGUpKGZpbGVuYW1lKSkge1xuICAgICAgcmV0dXJuIGZpbGVuYW1lO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVSZXNwb25zZVN0YXR1c0Vycm9yKHN0YXR1cywgdXJsKSB7XG4gIGlmIChzdGF0dXMgPT09IDQwNCB8fCBzdGF0dXMgPT09IDAgJiYgdXJsLnN0YXJ0c1dpdGgoXCJmaWxlOlwiKSkge1xuICAgIHJldHVybiBuZXcgX3V0aWwuTWlzc2luZ1BERkV4Y2VwdGlvbignTWlzc2luZyBQREYgXCInICsgdXJsICsgJ1wiLicpO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBfdXRpbC5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24oYFVuZXhwZWN0ZWQgc2VydmVyIHJlc3BvbnNlICgke3N0YXR1c30pIHdoaWxlIHJldHJpZXZpbmcgUERGIFwiJHt1cmx9XCIuYCwgc3RhdHVzKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVSZXNwb25zZVN0YXR1cyhzdGF0dXMpIHtcbiAgcmV0dXJuIHN0YXR1cyA9PT0gMjAwIHx8IHN0YXR1cyA9PT0gMjA2O1xufVxuXG4vKioqLyB9KSxcbi8qIDI1ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLmdldEZpbGVuYW1lRnJvbUNvbnRlbnREaXNwb3NpdGlvbkhlYWRlciA9IGdldEZpbGVuYW1lRnJvbUNvbnRlbnREaXNwb3NpdGlvbkhlYWRlcjtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxuZnVuY3Rpb24gZ2V0RmlsZW5hbWVGcm9tQ29udGVudERpc3Bvc2l0aW9uSGVhZGVyKGNvbnRlbnREaXNwb3NpdGlvbikge1xuICBsZXQgbmVlZHNFbmNvZGluZ0ZpeHVwID0gdHJ1ZTtcbiAgbGV0IHRtcCA9IHRvUGFyYW1SZWdFeHAoXCJmaWxlbmFtZVxcXFwqXCIsIFwiaVwiKS5leGVjKGNvbnRlbnREaXNwb3NpdGlvbik7XG5cbiAgaWYgKHRtcCkge1xuICAgIHRtcCA9IHRtcFsxXTtcbiAgICBsZXQgZmlsZW5hbWUgPSByZmMyNjE2dW5xdW90ZSh0bXApO1xuICAgIGZpbGVuYW1lID0gdW5lc2NhcGUoZmlsZW5hbWUpO1xuICAgIGZpbGVuYW1lID0gcmZjNTk4N2RlY29kZShmaWxlbmFtZSk7XG4gICAgZmlsZW5hbWUgPSByZmMyMDQ3ZGVjb2RlKGZpbGVuYW1lKTtcbiAgICByZXR1cm4gZml4dXBFbmNvZGluZyhmaWxlbmFtZSk7XG4gIH1cblxuICB0bXAgPSByZmMyMjMxZ2V0cGFyYW0oY29udGVudERpc3Bvc2l0aW9uKTtcblxuICBpZiAodG1wKSB7XG4gICAgY29uc3QgZmlsZW5hbWUgPSByZmMyMDQ3ZGVjb2RlKHRtcCk7XG4gICAgcmV0dXJuIGZpeHVwRW5jb2RpbmcoZmlsZW5hbWUpO1xuICB9XG5cbiAgdG1wID0gdG9QYXJhbVJlZ0V4cChcImZpbGVuYW1lXCIsIFwiaVwiKS5leGVjKGNvbnRlbnREaXNwb3NpdGlvbik7XG5cbiAgaWYgKHRtcCkge1xuICAgIHRtcCA9IHRtcFsxXTtcbiAgICBsZXQgZmlsZW5hbWUgPSByZmMyNjE2dW5xdW90ZSh0bXApO1xuICAgIGZpbGVuYW1lID0gcmZjMjA0N2RlY29kZShmaWxlbmFtZSk7XG4gICAgcmV0dXJuIGZpeHVwRW5jb2RpbmcoZmlsZW5hbWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9QYXJhbVJlZ0V4cChhdHRyaWJ1dGVQYXR0ZXJuLCBmbGFncykge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKFwiKD86Xnw7KVxcXFxzKlwiICsgYXR0cmlidXRlUGF0dGVybiArIFwiXFxcXHMqPVxcXFxzKlwiICsgXCIoXCIgKyAnW15cIjtcXFxcc11bXjtcXFxcc10qJyArIFwifFwiICsgJ1wiKD86W15cIlxcXFxcXFxcXXxcXFxcXFxcXFwiPykrXCI/JyArIFwiKVwiLCBmbGFncyk7XG4gIH1cblxuICBmdW5jdGlvbiB0ZXh0ZGVjb2RlKGVuY29kaW5nLCB2YWx1ZSkge1xuICAgIGlmIChlbmNvZGluZykge1xuICAgICAgaWYgKCEvXltcXHgwMC1cXHhGRl0rJC8udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKGVuY29kaW5nLCB7XG4gICAgICAgICAgZmF0YWw6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9ICgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKSh2YWx1ZSk7XG4gICAgICAgIHZhbHVlID0gZGVjb2Rlci5kZWNvZGUoYnVmZmVyKTtcbiAgICAgICAgbmVlZHNFbmNvZGluZ0ZpeHVwID0gZmFsc2U7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmICgvXnV0Zi0/OCQvaS50ZXN0KGVuY29kaW5nKSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUodmFsdWUpKTtcbiAgICAgICAgICAgIG5lZWRzRW5jb2RpbmdGaXh1cCA9IGZhbHNlO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge31cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpeHVwRW5jb2RpbmcodmFsdWUpIHtcbiAgICBpZiAobmVlZHNFbmNvZGluZ0ZpeHVwICYmIC9bXFx4ODAtXFx4ZmZdLy50ZXN0KHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSB0ZXh0ZGVjb2RlKFwidXRmLThcIiwgdmFsdWUpO1xuXG4gICAgICBpZiAobmVlZHNFbmNvZGluZ0ZpeHVwKSB7XG4gICAgICAgIHZhbHVlID0gdGV4dGRlY29kZShcImlzby04ODU5LTFcIiwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJmYzIyMzFnZXRwYXJhbShjb250ZW50RGlzcG9zaXRpb25TdHIpIHtcbiAgICBjb25zdCBtYXRjaGVzID0gW107XG4gICAgbGV0IG1hdGNoO1xuICAgIGNvbnN0IGl0ZXIgPSB0b1BhcmFtUmVnRXhwKFwiZmlsZW5hbWVcXFxcKigoPyEwXFxcXGQpXFxcXGQrKShcXFxcKj8pXCIsIFwiaWdcIik7XG5cbiAgICB3aGlsZSAoKG1hdGNoID0gaXRlci5leGVjKGNvbnRlbnREaXNwb3NpdGlvblN0cikpICE9PSBudWxsKSB7XG4gICAgICBsZXQgWywgbiwgcXVvdCwgcGFydF0gPSBtYXRjaDtcbiAgICAgIG4gPSBwYXJzZUludChuLCAxMCk7XG5cbiAgICAgIGlmIChuIGluIG1hdGNoZXMpIHtcbiAgICAgICAgaWYgKG4gPT09IDApIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBtYXRjaGVzW25dID0gW3F1b3QsIHBhcnRdO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnRzID0gW107XG5cbiAgICBmb3IgKGxldCBuID0gMDsgbiA8IG1hdGNoZXMubGVuZ3RoOyArK24pIHtcbiAgICAgIGlmICghKG4gaW4gbWF0Y2hlcykpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGxldCBbcXVvdCwgcGFydF0gPSBtYXRjaGVzW25dO1xuICAgICAgcGFydCA9IHJmYzI2MTZ1bnF1b3RlKHBhcnQpO1xuXG4gICAgICBpZiAocXVvdCkge1xuICAgICAgICBwYXJ0ID0gdW5lc2NhcGUocGFydCk7XG5cbiAgICAgICAgaWYgKG4gPT09IDApIHtcbiAgICAgICAgICBwYXJ0ID0gcmZjNTk4N2RlY29kZShwYXJ0KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwYXJ0cy5wdXNoKHBhcnQpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJ0cy5qb2luKFwiXCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmZjMjYxNnVucXVvdGUodmFsdWUpIHtcbiAgICBpZiAodmFsdWUuc3RhcnRzV2l0aCgnXCInKSkge1xuICAgICAgY29uc3QgcGFydHMgPSB2YWx1ZS5zbGljZSgxKS5zcGxpdCgnXFxcXFwiJyk7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgY29uc3QgcXVvdGluZGV4ID0gcGFydHNbaV0uaW5kZXhPZignXCInKTtcblxuICAgICAgICBpZiAocXVvdGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIHBhcnRzW2ldID0gcGFydHNbaV0uc2xpY2UoMCwgcXVvdGluZGV4KTtcbiAgICAgICAgICBwYXJ0cy5sZW5ndGggPSBpICsgMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcnRzW2ldID0gcGFydHNbaV0ucmVwbGFjZSgvXFxcXCguKS9nLCBcIiQxXCIpO1xuICAgICAgfVxuXG4gICAgICB2YWx1ZSA9IHBhcnRzLmpvaW4oJ1wiJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgZnVuY3Rpb24gcmZjNTk4N2RlY29kZShleHR2YWx1ZSkge1xuICAgIGNvbnN0IGVuY29kaW5nZW5kID0gZXh0dmFsdWUuaW5kZXhPZihcIidcIik7XG5cbiAgICBpZiAoZW5jb2RpbmdlbmQgPT09IC0xKSB7XG4gICAgICByZXR1cm4gZXh0dmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3QgZW5jb2RpbmcgPSBleHR2YWx1ZS5zbGljZSgwLCBlbmNvZGluZ2VuZCk7XG4gICAgY29uc3QgbGFuZ3ZhbHVlID0gZXh0dmFsdWUuc2xpY2UoZW5jb2RpbmdlbmQgKyAxKTtcbiAgICBjb25zdCB2YWx1ZSA9IGxhbmd2YWx1ZS5yZXBsYWNlKC9eW14nXSonLywgXCJcIik7XG4gICAgcmV0dXJuIHRleHRkZWNvZGUoZW5jb2RpbmcsIHZhbHVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJmYzIwNDdkZWNvZGUodmFsdWUpIHtcbiAgICBpZiAoIXZhbHVlLnN0YXJ0c1dpdGgoXCI9P1wiKSB8fCAvW1xceDAwLVxceDE5XFx4ODAtXFx4ZmZdLy50ZXN0KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC89XFw/KFtcXHctXSopXFw/KFtRcUJiXSlcXD8oKD86W14/XXxcXD8oPyE9KSkqKVxcPz0vZywgZnVuY3Rpb24gKG1hdGNoZXMsIGNoYXJzZXQsIGVuY29kaW5nLCB0ZXh0KSB7XG4gICAgICBpZiAoZW5jb2RpbmcgPT09IFwicVwiIHx8IGVuY29kaW5nID09PSBcIlFcIikge1xuICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9fL2csIFwiIFwiKTtcbiAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgvPShbMC05YS1mQS1GXXsyfSkvZywgZnVuY3Rpb24gKG1hdGNoLCBoZXgpIHtcbiAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChoZXgsIDE2KSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGV4dGRlY29kZShjaGFyc2V0LCB0ZXh0KTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgdGV4dCA9IGF0b2IodGV4dCk7XG4gICAgICB9IGNhdGNoIChlKSB7fVxuXG4gICAgICByZXR1cm4gdGV4dGRlY29kZShjaGFyc2V0LCB0ZXh0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBcIlwiO1xufVxuXG4vKioqLyB9KSxcbi8qIDI2ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLlBERk5ldHdvcmtTdHJlYW0gPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfbmV0d29ya191dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oMjQpO1xuXG47XG5jb25zdCBPS19SRVNQT05TRSA9IDIwMDtcbmNvbnN0IFBBUlRJQUxfQ09OVEVOVF9SRVNQT05TRSA9IDIwNjtcblxuZnVuY3Rpb24gZ2V0QXJyYXlCdWZmZXIoeGhyKSB7XG4gIGNvbnN0IGRhdGEgPSB4aHIucmVzcG9uc2U7XG5cbiAgaWYgKHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBjb25zdCBhcnJheSA9ICgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShkYXRhKTtcbiAgcmV0dXJuIGFycmF5LmJ1ZmZlcjtcbn1cblxuY2xhc3MgTmV0d29ya01hbmFnZXIge1xuICBjb25zdHJ1Y3Rvcih1cmwsIGFyZ3MgPSB7fSkge1xuICAgIHRoaXMudXJsID0gdXJsO1xuICAgIHRoaXMuaXNIdHRwID0gL15odHRwcz86L2kudGVzdCh1cmwpO1xuICAgIHRoaXMuaHR0cEhlYWRlcnMgPSB0aGlzLmlzSHR0cCAmJiBhcmdzLmh0dHBIZWFkZXJzIHx8IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy53aXRoQ3JlZGVudGlhbHMgPSBhcmdzLndpdGhDcmVkZW50aWFscyB8fCBmYWxzZTtcblxuICAgIHRoaXMuZ2V0WGhyID0gYXJncy5nZXRYaHIgfHwgZnVuY3Rpb24gTmV0d29ya01hbmFnZXJfZ2V0WGhyKCkge1xuICAgICAgcmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgIH07XG5cbiAgICB0aGlzLmN1cnJYaHJJZCA9IDA7XG4gICAgdGhpcy5wZW5kaW5nUmVxdWVzdHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB9XG5cbiAgcmVxdWVzdFJhbmdlKGJlZ2luLCBlbmQsIGxpc3RlbmVycykge1xuICAgIGNvbnN0IGFyZ3MgPSB7XG4gICAgICBiZWdpbixcbiAgICAgIGVuZFxuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IHByb3AgaW4gbGlzdGVuZXJzKSB7XG4gICAgICBhcmdzW3Byb3BdID0gbGlzdGVuZXJzW3Byb3BdO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnJlcXVlc3QoYXJncyk7XG4gIH1cblxuICByZXF1ZXN0RnVsbChsaXN0ZW5lcnMpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KGxpc3RlbmVycyk7XG4gIH1cblxuICByZXF1ZXN0KGFyZ3MpIHtcbiAgICBjb25zdCB4aHIgPSB0aGlzLmdldFhocigpO1xuICAgIGNvbnN0IHhocklkID0gdGhpcy5jdXJyWGhySWQrKztcbiAgICBjb25zdCBwZW5kaW5nUmVxdWVzdCA9IHRoaXMucGVuZGluZ1JlcXVlc3RzW3hocklkXSA9IHtcbiAgICAgIHhoclxuICAgIH07XG4gICAgeGhyLm9wZW4oXCJHRVRcIiwgdGhpcy51cmwpO1xuICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0aGlzLndpdGhDcmVkZW50aWFscztcblxuICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gdGhpcy5odHRwSGVhZGVycykge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmh0dHBIZWFkZXJzW3Byb3BlcnR5XTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIocHJvcGVydHksIHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0h0dHAgJiYgXCJiZWdpblwiIGluIGFyZ3MgJiYgXCJlbmRcIiBpbiBhcmdzKSB7XG4gICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIlJhbmdlXCIsIGBieXRlcz0ke2FyZ3MuYmVnaW59LSR7YXJncy5lbmQgLSAxfWApO1xuICAgICAgcGVuZGluZ1JlcXVlc3QuZXhwZWN0ZWRTdGF0dXMgPSBQQVJUSUFMX0NPTlRFTlRfUkVTUE9OU0U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlbmRpbmdSZXF1ZXN0LmV4cGVjdGVkU3RhdHVzID0gT0tfUkVTUE9OU0U7XG4gICAgfVxuXG4gICAgeGhyLnJlc3BvbnNlVHlwZSA9IFwiYXJyYXlidWZmZXJcIjtcblxuICAgIGlmIChhcmdzLm9uRXJyb3IpIHtcbiAgICAgIHhoci5vbmVycm9yID0gZnVuY3Rpb24gKGV2dCkge1xuICAgICAgICBhcmdzLm9uRXJyb3IoeGhyLnN0YXR1cyk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSB0aGlzLm9uU3RhdGVDaGFuZ2UuYmluZCh0aGlzLCB4aHJJZCk7XG4gICAgeGhyLm9ucHJvZ3Jlc3MgPSB0aGlzLm9uUHJvZ3Jlc3MuYmluZCh0aGlzLCB4aHJJZCk7XG4gICAgcGVuZGluZ1JlcXVlc3Qub25IZWFkZXJzUmVjZWl2ZWQgPSBhcmdzLm9uSGVhZGVyc1JlY2VpdmVkO1xuICAgIHBlbmRpbmdSZXF1ZXN0Lm9uRG9uZSA9IGFyZ3Mub25Eb25lO1xuICAgIHBlbmRpbmdSZXF1ZXN0Lm9uRXJyb3IgPSBhcmdzLm9uRXJyb3I7XG4gICAgcGVuZGluZ1JlcXVlc3Qub25Qcm9ncmVzcyA9IGFyZ3Mub25Qcm9ncmVzcztcbiAgICB4aHIuc2VuZChudWxsKTtcbiAgICByZXR1cm4geGhySWQ7XG4gIH1cblxuICBvblByb2dyZXNzKHhocklkLCBldnQpIHtcbiAgICBjb25zdCBwZW5kaW5nUmVxdWVzdCA9IHRoaXMucGVuZGluZ1JlcXVlc3RzW3hocklkXTtcblxuICAgIGlmICghcGVuZGluZ1JlcXVlc3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwZW5kaW5nUmVxdWVzdC5vblByb2dyZXNzPy4oZXZ0KTtcbiAgfVxuXG4gIG9uU3RhdGVDaGFuZ2UoeGhySWQsIGV2dCkge1xuICAgIGNvbnN0IHBlbmRpbmdSZXF1ZXN0ID0gdGhpcy5wZW5kaW5nUmVxdWVzdHNbeGhySWRdO1xuXG4gICAgaWYgKCFwZW5kaW5nUmVxdWVzdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHhociA9IHBlbmRpbmdSZXF1ZXN0LnhocjtcblxuICAgIGlmICh4aHIucmVhZHlTdGF0ZSA+PSAyICYmIHBlbmRpbmdSZXF1ZXN0Lm9uSGVhZGVyc1JlY2VpdmVkKSB7XG4gICAgICBwZW5kaW5nUmVxdWVzdC5vbkhlYWRlcnNSZWNlaXZlZCgpO1xuICAgICAgZGVsZXRlIHBlbmRpbmdSZXF1ZXN0Lm9uSGVhZGVyc1JlY2VpdmVkO1xuICAgIH1cblxuICAgIGlmICh4aHIucmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghKHhocklkIGluIHRoaXMucGVuZGluZ1JlcXVlc3RzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRlbGV0ZSB0aGlzLnBlbmRpbmdSZXF1ZXN0c1t4aHJJZF07XG5cbiAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMCAmJiB0aGlzLmlzSHR0cCkge1xuICAgICAgcGVuZGluZ1JlcXVlc3Qub25FcnJvcj8uKHhoci5zdGF0dXMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHhoclN0YXR1cyA9IHhoci5zdGF0dXMgfHwgT0tfUkVTUE9OU0U7XG4gICAgY29uc3Qgb2tfcmVzcG9uc2Vfb25fcmFuZ2VfcmVxdWVzdCA9IHhoclN0YXR1cyA9PT0gT0tfUkVTUE9OU0UgJiYgcGVuZGluZ1JlcXVlc3QuZXhwZWN0ZWRTdGF0dXMgPT09IFBBUlRJQUxfQ09OVEVOVF9SRVNQT05TRTtcblxuICAgIGlmICghb2tfcmVzcG9uc2Vfb25fcmFuZ2VfcmVxdWVzdCAmJiB4aHJTdGF0dXMgIT09IHBlbmRpbmdSZXF1ZXN0LmV4cGVjdGVkU3RhdHVzKSB7XG4gICAgICBwZW5kaW5nUmVxdWVzdC5vbkVycm9yPy4oeGhyLnN0YXR1cyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY2h1bmsgPSBnZXRBcnJheUJ1ZmZlcih4aHIpO1xuXG4gICAgaWYgKHhoclN0YXR1cyA9PT0gUEFSVElBTF9DT05URU5UX1JFU1BPTlNFKSB7XG4gICAgICBjb25zdCByYW5nZUhlYWRlciA9IHhoci5nZXRSZXNwb25zZUhlYWRlcihcIkNvbnRlbnQtUmFuZ2VcIik7XG4gICAgICBjb25zdCBtYXRjaGVzID0gL2J5dGVzIChcXGQrKS0oXFxkKylcXC8oXFxkKykvLmV4ZWMocmFuZ2VIZWFkZXIpO1xuICAgICAgcGVuZGluZ1JlcXVlc3Qub25Eb25lKHtcbiAgICAgICAgYmVnaW46IHBhcnNlSW50KG1hdGNoZXNbMV0sIDEwKSxcbiAgICAgICAgY2h1bmtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoY2h1bmspIHtcbiAgICAgIHBlbmRpbmdSZXF1ZXN0Lm9uRG9uZSh7XG4gICAgICAgIGJlZ2luOiAwLFxuICAgICAgICBjaHVua1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlbmRpbmdSZXF1ZXN0Lm9uRXJyb3I/Lih4aHIuc3RhdHVzKTtcbiAgICB9XG4gIH1cblxuICBnZXRSZXF1ZXN0WGhyKHhocklkKSB7XG4gICAgcmV0dXJuIHRoaXMucGVuZGluZ1JlcXVlc3RzW3hocklkXS54aHI7XG4gIH1cblxuICBpc1BlbmRpbmdSZXF1ZXN0KHhocklkKSB7XG4gICAgcmV0dXJuIHhocklkIGluIHRoaXMucGVuZGluZ1JlcXVlc3RzO1xuICB9XG5cbiAgYWJvcnRSZXF1ZXN0KHhocklkKSB7XG4gICAgY29uc3QgeGhyID0gdGhpcy5wZW5kaW5nUmVxdWVzdHNbeGhySWRdLnhocjtcbiAgICBkZWxldGUgdGhpcy5wZW5kaW5nUmVxdWVzdHNbeGhySWRdO1xuICAgIHhoci5hYm9ydCgpO1xuICB9XG5cbn1cblxuY2xhc3MgUERGTmV0d29ya1N0cmVhbSB7XG4gIGNvbnN0cnVjdG9yKHNvdXJjZSkge1xuICAgIHRoaXMuX3NvdXJjZSA9IHNvdXJjZTtcbiAgICB0aGlzLl9tYW5hZ2VyID0gbmV3IE5ldHdvcmtNYW5hZ2VyKHNvdXJjZS51cmwsIHtcbiAgICAgIGh0dHBIZWFkZXJzOiBzb3VyY2UuaHR0cEhlYWRlcnMsXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHNvdXJjZS53aXRoQ3JlZGVudGlhbHNcbiAgICB9KTtcbiAgICB0aGlzLl9yYW5nZUNodW5rU2l6ZSA9IHNvdXJjZS5yYW5nZUNodW5rU2l6ZTtcbiAgICB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciA9IG51bGw7XG4gICAgdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycyA9IFtdO1xuICB9XG5cbiAgX29uUmFuZ2VSZXF1ZXN0UmVhZGVyQ2xvc2VkKHJlYWRlcikge1xuICAgIGNvbnN0IGkgPSB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLmluZGV4T2YocmVhZGVyKTtcblxuICAgIGlmIChpID49IDApIHtcbiAgICAgIHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMuc3BsaWNlKGksIDEpO1xuICAgIH1cbiAgfVxuXG4gIGdldEZ1bGxSZWFkZXIoKSB7XG4gICAgKDAsIF91dGlsLmFzc2VydCkoIXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLCBcIlBERk5ldHdvcmtTdHJlYW0uZ2V0RnVsbFJlYWRlciBjYW4gb25seSBiZSBjYWxsZWQgb25jZS5cIik7XG4gICAgdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIgPSBuZXcgUERGTmV0d29ya1N0cmVhbUZ1bGxSZXF1ZXN0UmVhZGVyKHRoaXMuX21hbmFnZXIsIHRoaXMuX3NvdXJjZSk7XG4gICAgcmV0dXJuIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyO1xuICB9XG5cbiAgZ2V0UmFuZ2VSZWFkZXIoYmVnaW4sIGVuZCkge1xuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBQREZOZXR3b3JrU3RyZWFtUmFuZ2VSZXF1ZXN0UmVhZGVyKHRoaXMuX21hbmFnZXIsIGJlZ2luLCBlbmQpO1xuICAgIHJlYWRlci5vbkNsb3NlZCA9IHRoaXMuX29uUmFuZ2VSZXF1ZXN0UmVhZGVyQ2xvc2VkLmJpbmQodGhpcyk7XG5cbiAgICB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnB1c2gocmVhZGVyKTtcblxuICAgIHJldHVybiByZWFkZXI7XG4gIH1cblxuICBjYW5jZWxBbGxSZXF1ZXN0cyhyZWFzb24pIHtcbiAgICB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj8uY2FuY2VsKHJlYXNvbik7XG5cbiAgICBmb3IgKGNvbnN0IHJlYWRlciBvZiB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnNsaWNlKDApKSB7XG4gICAgICByZWFkZXIuY2FuY2VsKHJlYXNvbik7XG4gICAgfVxuICB9XG5cbn1cblxuZXhwb3J0cy5QREZOZXR3b3JrU3RyZWFtID0gUERGTmV0d29ya1N0cmVhbTtcblxuY2xhc3MgUERGTmV0d29ya1N0cmVhbUZ1bGxSZXF1ZXN0UmVhZGVyIHtcbiAgY29uc3RydWN0b3IobWFuYWdlciwgc291cmNlKSB7XG4gICAgdGhpcy5fbWFuYWdlciA9IG1hbmFnZXI7XG4gICAgY29uc3QgYXJncyA9IHtcbiAgICAgIG9uSGVhZGVyc1JlY2VpdmVkOiB0aGlzLl9vbkhlYWRlcnNSZWNlaXZlZC5iaW5kKHRoaXMpLFxuICAgICAgb25Eb25lOiB0aGlzLl9vbkRvbmUuYmluZCh0aGlzKSxcbiAgICAgIG9uRXJyb3I6IHRoaXMuX29uRXJyb3IuYmluZCh0aGlzKSxcbiAgICAgIG9uUHJvZ3Jlc3M6IHRoaXMuX29uUHJvZ3Jlc3MuYmluZCh0aGlzKVxuICAgIH07XG4gICAgdGhpcy5fdXJsID0gc291cmNlLnVybDtcbiAgICB0aGlzLl9mdWxsUmVxdWVzdElkID0gbWFuYWdlci5yZXF1ZXN0RnVsbChhcmdzKTtcbiAgICB0aGlzLl9oZWFkZXJzUmVjZWl2ZWRDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgIHRoaXMuX2Rpc2FibGVSYW5nZSA9IHNvdXJjZS5kaXNhYmxlUmFuZ2UgfHwgZmFsc2U7XG4gICAgdGhpcy5fY29udGVudExlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG4gICAgdGhpcy5fcmFuZ2VDaHVua1NpemUgPSBzb3VyY2UucmFuZ2VDaHVua1NpemU7XG5cbiAgICBpZiAoIXRoaXMuX3JhbmdlQ2h1bmtTaXplICYmICF0aGlzLl9kaXNhYmxlUmFuZ2UpIHtcbiAgICAgIHRoaXMuX2Rpc2FibGVSYW5nZSA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkID0gZmFsc2U7XG4gICAgdGhpcy5fY2FjaGVkQ2h1bmtzID0gW107XG4gICAgdGhpcy5fcmVxdWVzdHMgPSBbXTtcbiAgICB0aGlzLl9kb25lID0gZmFsc2U7XG4gICAgdGhpcy5fc3RvcmVkRXJyb3IgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fZmlsZW5hbWUgPSBudWxsO1xuICAgIHRoaXMub25Qcm9ncmVzcyA9IG51bGw7XG4gIH1cblxuICBfb25IZWFkZXJzUmVjZWl2ZWQoKSB7XG4gICAgY29uc3QgZnVsbFJlcXVlc3RYaHJJZCA9IHRoaXMuX2Z1bGxSZXF1ZXN0SWQ7XG5cbiAgICBjb25zdCBmdWxsUmVxdWVzdFhociA9IHRoaXMuX21hbmFnZXIuZ2V0UmVxdWVzdFhocihmdWxsUmVxdWVzdFhocklkKTtcblxuICAgIGNvbnN0IGdldFJlc3BvbnNlSGVhZGVyID0gbmFtZSA9PiB7XG4gICAgICByZXR1cm4gZnVsbFJlcXVlc3RYaHIuZ2V0UmVzcG9uc2VIZWFkZXIobmFtZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHtcbiAgICAgIGFsbG93UmFuZ2VSZXF1ZXN0cyxcbiAgICAgIHN1Z2dlc3RlZExlbmd0aFxuICAgIH0gPSAoMCwgX25ldHdvcmtfdXRpbHMudmFsaWRhdGVSYW5nZVJlcXVlc3RDYXBhYmlsaXRpZXMpKHtcbiAgICAgIGdldFJlc3BvbnNlSGVhZGVyLFxuICAgICAgaXNIdHRwOiB0aGlzLl9tYW5hZ2VyLmlzSHR0cCxcbiAgICAgIHJhbmdlQ2h1bmtTaXplOiB0aGlzLl9yYW5nZUNodW5rU2l6ZSxcbiAgICAgIGRpc2FibGVSYW5nZTogdGhpcy5fZGlzYWJsZVJhbmdlXG4gICAgfSk7XG5cbiAgICBpZiAoYWxsb3dSYW5nZVJlcXVlc3RzKSB7XG4gICAgICB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLl9jb250ZW50TGVuZ3RoID0gc3VnZ2VzdGVkTGVuZ3RoIHx8IHRoaXMuX2NvbnRlbnRMZW5ndGg7XG4gICAgdGhpcy5fZmlsZW5hbWUgPSAoMCwgX25ldHdvcmtfdXRpbHMuZXh0cmFjdEZpbGVuYW1lRnJvbUhlYWRlcikoZ2V0UmVzcG9uc2VIZWFkZXIpO1xuXG4gICAgaWYgKHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQpIHtcbiAgICAgIHRoaXMuX21hbmFnZXIuYWJvcnRSZXF1ZXN0KGZ1bGxSZXF1ZXN0WGhySWQpO1xuICAgIH1cblxuICAgIHRoaXMuX2hlYWRlcnNSZWNlaXZlZENhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICB9XG5cbiAgX29uRG9uZShkYXRhKSB7XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmICh0aGlzLl9yZXF1ZXN0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RDYXBhYmlsaXR5ID0gdGhpcy5fcmVxdWVzdHMuc2hpZnQoKTtcblxuICAgICAgICByZXF1ZXN0Q2FwYWJpbGl0eS5yZXNvbHZlKHtcbiAgICAgICAgICB2YWx1ZTogZGF0YS5jaHVuayxcbiAgICAgICAgICBkb25lOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2NhY2hlZENodW5rcy5wdXNoKGRhdGEuY2h1bmspO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2RvbmUgPSB0cnVlO1xuXG4gICAgaWYgKHRoaXMuX2NhY2hlZENodW5rcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCByZXF1ZXN0Q2FwYWJpbGl0eSBvZiB0aGlzLl9yZXF1ZXN0cykge1xuICAgICAgcmVxdWVzdENhcGFiaWxpdHkucmVzb2x2ZSh7XG4gICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgIGRvbmU6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuX3JlcXVlc3RzLmxlbmd0aCA9IDA7XG4gIH1cblxuICBfb25FcnJvcihzdGF0dXMpIHtcbiAgICB0aGlzLl9zdG9yZWRFcnJvciA9ICgwLCBfbmV0d29ya191dGlscy5jcmVhdGVSZXNwb25zZVN0YXR1c0Vycm9yKShzdGF0dXMsIHRoaXMuX3VybCk7XG5cbiAgICB0aGlzLl9oZWFkZXJzUmVjZWl2ZWRDYXBhYmlsaXR5LnJlamVjdCh0aGlzLl9zdG9yZWRFcnJvcik7XG5cbiAgICBmb3IgKGNvbnN0IHJlcXVlc3RDYXBhYmlsaXR5IG9mIHRoaXMuX3JlcXVlc3RzKSB7XG4gICAgICByZXF1ZXN0Q2FwYWJpbGl0eS5yZWplY3QodGhpcy5fc3RvcmVkRXJyb3IpO1xuICAgIH1cblxuICAgIHRoaXMuX3JlcXVlc3RzLmxlbmd0aCA9IDA7XG4gICAgdGhpcy5fY2FjaGVkQ2h1bmtzLmxlbmd0aCA9IDA7XG4gIH1cblxuICBfb25Qcm9ncmVzcyhldnQpIHtcbiAgICB0aGlzLm9uUHJvZ3Jlc3M/Lih7XG4gICAgICBsb2FkZWQ6IGV2dC5sb2FkZWQsXG4gICAgICB0b3RhbDogZXZ0Lmxlbmd0aENvbXB1dGFibGUgPyBldnQudG90YWwgOiB0aGlzLl9jb250ZW50TGVuZ3RoXG4gICAgfSk7XG4gIH1cblxuICBnZXQgZmlsZW5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbGVuYW1lO1xuICB9XG5cbiAgZ2V0IGlzUmFuZ2VTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQ7XG4gIH1cblxuICBnZXQgaXNTdHJlYW1pbmdTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkO1xuICB9XG5cbiAgZ2V0IGNvbnRlbnRMZW5ndGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRlbnRMZW5ndGg7XG4gIH1cblxuICBnZXQgaGVhZGVyc1JlYWR5KCkge1xuICAgIHJldHVybiB0aGlzLl9oZWFkZXJzUmVjZWl2ZWRDYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cblxuICBhc3luYyByZWFkKCkge1xuICAgIGlmICh0aGlzLl9zdG9yZWRFcnJvcikge1xuICAgICAgdGhyb3cgdGhpcy5fc3RvcmVkRXJyb3I7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NhY2hlZENodW5rcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBjaHVuayA9IHRoaXMuX2NhY2hlZENodW5rcy5zaGlmdCgpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogY2h1bmssXG4gICAgICAgIGRvbmU6IGZhbHNlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9kb25lKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICBkb25lOiB0cnVlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuXG4gICAgdGhpcy5fcmVxdWVzdHMucHVzaChyZXF1ZXN0Q2FwYWJpbGl0eSk7XG5cbiAgICByZXR1cm4gcmVxdWVzdENhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxuXG4gIGNhbmNlbChyZWFzb24pIHtcbiAgICB0aGlzLl9kb25lID0gdHJ1ZTtcblxuICAgIHRoaXMuX2hlYWRlcnNSZWNlaXZlZENhcGFiaWxpdHkucmVqZWN0KHJlYXNvbik7XG5cbiAgICBmb3IgKGNvbnN0IHJlcXVlc3RDYXBhYmlsaXR5IG9mIHRoaXMuX3JlcXVlc3RzKSB7XG4gICAgICByZXF1ZXN0Q2FwYWJpbGl0eS5yZXNvbHZlKHtcbiAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgZG9uZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVxdWVzdHMubGVuZ3RoID0gMDtcblxuICAgIGlmICh0aGlzLl9tYW5hZ2VyLmlzUGVuZGluZ1JlcXVlc3QodGhpcy5fZnVsbFJlcXVlc3RJZCkpIHtcbiAgICAgIHRoaXMuX21hbmFnZXIuYWJvcnRSZXF1ZXN0KHRoaXMuX2Z1bGxSZXF1ZXN0SWQpO1xuICAgIH1cblxuICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIFBERk5ldHdvcmtTdHJlYW1SYW5nZVJlcXVlc3RSZWFkZXIge1xuICBjb25zdHJ1Y3RvcihtYW5hZ2VyLCBiZWdpbiwgZW5kKSB7XG4gICAgdGhpcy5fbWFuYWdlciA9IG1hbmFnZXI7XG4gICAgY29uc3QgYXJncyA9IHtcbiAgICAgIG9uRG9uZTogdGhpcy5fb25Eb25lLmJpbmQodGhpcyksXG4gICAgICBvbkVycm9yOiB0aGlzLl9vbkVycm9yLmJpbmQodGhpcyksXG4gICAgICBvblByb2dyZXNzOiB0aGlzLl9vblByb2dyZXNzLmJpbmQodGhpcylcbiAgICB9O1xuICAgIHRoaXMuX3VybCA9IG1hbmFnZXIudXJsO1xuICAgIHRoaXMuX3JlcXVlc3RJZCA9IG1hbmFnZXIucmVxdWVzdFJhbmdlKGJlZ2luLCBlbmQsIGFyZ3MpO1xuICAgIHRoaXMuX3JlcXVlc3RzID0gW107XG4gICAgdGhpcy5fcXVldWVkQ2h1bmsgPSBudWxsO1xuICAgIHRoaXMuX2RvbmUgPSBmYWxzZTtcbiAgICB0aGlzLl9zdG9yZWRFcnJvciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLm9uUHJvZ3Jlc3MgPSBudWxsO1xuICAgIHRoaXMub25DbG9zZWQgPSBudWxsO1xuICB9XG5cbiAgX2Nsb3NlKCkge1xuICAgIHRoaXMub25DbG9zZWQ/Lih0aGlzKTtcbiAgfVxuXG4gIF9vbkRvbmUoZGF0YSkge1xuICAgIGNvbnN0IGNodW5rID0gZGF0YS5jaHVuaztcblxuICAgIGlmICh0aGlzLl9yZXF1ZXN0cy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCByZXF1ZXN0Q2FwYWJpbGl0eSA9IHRoaXMuX3JlcXVlc3RzLnNoaWZ0KCk7XG5cbiAgICAgIHJlcXVlc3RDYXBhYmlsaXR5LnJlc29sdmUoe1xuICAgICAgICB2YWx1ZTogY2h1bmssXG4gICAgICAgIGRvbmU6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcXVldWVkQ2h1bmsgPSBjaHVuaztcbiAgICB9XG5cbiAgICB0aGlzLl9kb25lID0gdHJ1ZTtcblxuICAgIGZvciAoY29uc3QgcmVxdWVzdENhcGFiaWxpdHkgb2YgdGhpcy5fcmVxdWVzdHMpIHtcbiAgICAgIHJlcXVlc3RDYXBhYmlsaXR5LnJlc29sdmUoe1xuICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICBkb25lOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLl9yZXF1ZXN0cy5sZW5ndGggPSAwO1xuXG4gICAgdGhpcy5fY2xvc2UoKTtcbiAgfVxuXG4gIF9vbkVycm9yKHN0YXR1cykge1xuICAgIHRoaXMuX3N0b3JlZEVycm9yID0gKDAsIF9uZXR3b3JrX3V0aWxzLmNyZWF0ZVJlc3BvbnNlU3RhdHVzRXJyb3IpKHN0YXR1cywgdGhpcy5fdXJsKTtcblxuICAgIGZvciAoY29uc3QgcmVxdWVzdENhcGFiaWxpdHkgb2YgdGhpcy5fcmVxdWVzdHMpIHtcbiAgICAgIHJlcXVlc3RDYXBhYmlsaXR5LnJlamVjdCh0aGlzLl9zdG9yZWRFcnJvcik7XG4gICAgfVxuXG4gICAgdGhpcy5fcmVxdWVzdHMubGVuZ3RoID0gMDtcbiAgICB0aGlzLl9xdWV1ZWRDaHVuayA9IG51bGw7XG4gIH1cblxuICBfb25Qcm9ncmVzcyhldnQpIHtcbiAgICBpZiAoIXRoaXMuaXNTdHJlYW1pbmdTdXBwb3J0ZWQpIHtcbiAgICAgIHRoaXMub25Qcm9ncmVzcz8uKHtcbiAgICAgICAgbG9hZGVkOiBldnQubG9hZGVkXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBnZXQgaXNTdHJlYW1pbmdTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgcmVhZCgpIHtcbiAgICBpZiAodGhpcy5fc3RvcmVkRXJyb3IpIHtcbiAgICAgIHRocm93IHRoaXMuX3N0b3JlZEVycm9yO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9xdWV1ZWRDaHVuayAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgY2h1bmsgPSB0aGlzLl9xdWV1ZWRDaHVuaztcbiAgICAgIHRoaXMuX3F1ZXVlZENodW5rID0gbnVsbDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiBjaHVuayxcbiAgICAgICAgZG9uZTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2RvbmUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgIGRvbmU6IHRydWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdENhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG5cbiAgICB0aGlzLl9yZXF1ZXN0cy5wdXNoKHJlcXVlc3RDYXBhYmlsaXR5KTtcblxuICAgIHJldHVybiByZXF1ZXN0Q2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG5cbiAgY2FuY2VsKHJlYXNvbikge1xuICAgIHRoaXMuX2RvbmUgPSB0cnVlO1xuXG4gICAgZm9yIChjb25zdCByZXF1ZXN0Q2FwYWJpbGl0eSBvZiB0aGlzLl9yZXF1ZXN0cykge1xuICAgICAgcmVxdWVzdENhcGFiaWxpdHkucmVzb2x2ZSh7XG4gICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgIGRvbmU6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuX3JlcXVlc3RzLmxlbmd0aCA9IDA7XG5cbiAgICBpZiAodGhpcy5fbWFuYWdlci5pc1BlbmRpbmdSZXF1ZXN0KHRoaXMuX3JlcXVlc3RJZCkpIHtcbiAgICAgIHRoaXMuX21hbmFnZXIuYWJvcnRSZXF1ZXN0KHRoaXMuX3JlcXVlc3RJZCk7XG4gICAgfVxuXG4gICAgdGhpcy5fY2xvc2UoKTtcbiAgfVxuXG59XG5cbi8qKiovIH0pLFxuLyogMjcgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuUERGRmV0Y2hTdHJlYW0gPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfbmV0d29ya191dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oMjQpO1xuXG47XG5cbmZ1bmN0aW9uIGNyZWF0ZUZldGNoT3B0aW9ucyhoZWFkZXJzLCB3aXRoQ3JlZGVudGlhbHMsIGFib3J0Q29udHJvbGxlcikge1xuICByZXR1cm4ge1xuICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICBoZWFkZXJzLFxuICAgIHNpZ25hbDogYWJvcnRDb250cm9sbGVyPy5zaWduYWwsXG4gICAgbW9kZTogXCJjb3JzXCIsXG4gICAgY3JlZGVudGlhbHM6IHdpdGhDcmVkZW50aWFscyA/IFwiaW5jbHVkZVwiIDogXCJzYW1lLW9yaWdpblwiLFxuICAgIHJlZGlyZWN0OiBcImZvbGxvd1wiXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUhlYWRlcnMoaHR0cEhlYWRlcnMpIHtcbiAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKCk7XG5cbiAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBodHRwSGVhZGVycykge1xuICAgIGNvbnN0IHZhbHVlID0gaHR0cEhlYWRlcnNbcHJvcGVydHldO1xuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaGVhZGVycy5hcHBlbmQocHJvcGVydHksIHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiBoZWFkZXJzO1xufVxuXG5jbGFzcyBQREZGZXRjaFN0cmVhbSB7XG4gIGNvbnN0cnVjdG9yKHNvdXJjZSkge1xuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuICAgIHRoaXMuaXNIdHRwID0gL15odHRwcz86L2kudGVzdChzb3VyY2UudXJsKTtcbiAgICB0aGlzLmh0dHBIZWFkZXJzID0gdGhpcy5pc0h0dHAgJiYgc291cmNlLmh0dHBIZWFkZXJzIHx8IHt9O1xuICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyID0gbnVsbDtcbiAgICB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzID0gW107XG4gIH1cblxuICBnZXQgX3Byb2dyZXNzaXZlRGF0YUxlbmd0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI/Ll9sb2FkZWQgPz8gMDtcbiAgfVxuXG4gIGdldEZ1bGxSZWFkZXIoKSB7XG4gICAgKDAsIF91dGlsLmFzc2VydCkoIXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLCBcIlBERkZldGNoU3RyZWFtLmdldEZ1bGxSZWFkZXIgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UuXCIpO1xuICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyID0gbmV3IFBERkZldGNoU3RyZWFtUmVhZGVyKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcjtcbiAgfVxuXG4gIGdldFJhbmdlUmVhZGVyKGJlZ2luLCBlbmQpIHtcbiAgICBpZiAoZW5kIDw9IHRoaXMuX3Byb2dyZXNzaXZlRGF0YUxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmVhZGVyID0gbmV3IFBERkZldGNoU3RyZWFtUmFuZ2VSZWFkZXIodGhpcywgYmVnaW4sIGVuZCk7XG5cbiAgICB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnB1c2gocmVhZGVyKTtcblxuICAgIHJldHVybiByZWFkZXI7XG4gIH1cblxuICBjYW5jZWxBbGxSZXF1ZXN0cyhyZWFzb24pIHtcbiAgICBpZiAodGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpIHtcbiAgICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcmVhZGVyIG9mIHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMuc2xpY2UoMCkpIHtcbiAgICAgIHJlYWRlci5jYW5jZWwocmVhc29uKTtcbiAgICB9XG4gIH1cblxufVxuXG5leHBvcnRzLlBERkZldGNoU3RyZWFtID0gUERGRmV0Y2hTdHJlYW07XG5cbmNsYXNzIFBERkZldGNoU3RyZWFtUmVhZGVyIHtcbiAgY29uc3RydWN0b3Ioc3RyZWFtKSB7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICAgIHRoaXMuX3JlYWRlciA9IG51bGw7XG4gICAgdGhpcy5fbG9hZGVkID0gMDtcbiAgICB0aGlzLl9maWxlbmFtZSA9IG51bGw7XG4gICAgY29uc3Qgc291cmNlID0gc3RyZWFtLnNvdXJjZTtcbiAgICB0aGlzLl93aXRoQ3JlZGVudGlhbHMgPSBzb3VyY2Uud2l0aENyZWRlbnRpYWxzIHx8IGZhbHNlO1xuICAgIHRoaXMuX2NvbnRlbnRMZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuICAgIHRoaXMuX2hlYWRlcnNDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgIHRoaXMuX2Rpc2FibGVSYW5nZSA9IHNvdXJjZS5kaXNhYmxlUmFuZ2UgfHwgZmFsc2U7XG4gICAgdGhpcy5fcmFuZ2VDaHVua1NpemUgPSBzb3VyY2UucmFuZ2VDaHVua1NpemU7XG5cbiAgICBpZiAoIXRoaXMuX3JhbmdlQ2h1bmtTaXplICYmICF0aGlzLl9kaXNhYmxlUmFuZ2UpIHtcbiAgICAgIHRoaXMuX2Rpc2FibGVSYW5nZSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBBYm9ydENvbnRyb2xsZXIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRoaXMuX2Fib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZCA9ICFzb3VyY2UuZGlzYWJsZVN0cmVhbTtcbiAgICB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkID0gIXNvdXJjZS5kaXNhYmxlUmFuZ2U7XG4gICAgdGhpcy5faGVhZGVycyA9IGNyZWF0ZUhlYWRlcnModGhpcy5fc3RyZWFtLmh0dHBIZWFkZXJzKTtcbiAgICBjb25zdCB1cmwgPSBzb3VyY2UudXJsO1xuICAgIGZldGNoKHVybCwgY3JlYXRlRmV0Y2hPcHRpb25zKHRoaXMuX2hlYWRlcnMsIHRoaXMuX3dpdGhDcmVkZW50aWFscywgdGhpcy5fYWJvcnRDb250cm9sbGVyKSkudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICBpZiAoISgwLCBfbmV0d29ya191dGlscy52YWxpZGF0ZVJlc3BvbnNlU3RhdHVzKShyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgICAgIHRocm93ICgwLCBfbmV0d29ya191dGlscy5jcmVhdGVSZXNwb25zZVN0YXR1c0Vycm9yKShyZXNwb25zZS5zdGF0dXMsIHVybCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3JlYWRlciA9IHJlc3BvbnNlLmJvZHkuZ2V0UmVhZGVyKCk7XG5cbiAgICAgIHRoaXMuX2hlYWRlcnNDYXBhYmlsaXR5LnJlc29sdmUoKTtcblxuICAgICAgY29uc3QgZ2V0UmVzcG9uc2VIZWFkZXIgPSBuYW1lID0+IHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmhlYWRlcnMuZ2V0KG5hbWUpO1xuICAgICAgfTtcblxuICAgICAgY29uc3Qge1xuICAgICAgICBhbGxvd1JhbmdlUmVxdWVzdHMsXG4gICAgICAgIHN1Z2dlc3RlZExlbmd0aFxuICAgICAgfSA9ICgwLCBfbmV0d29ya191dGlscy52YWxpZGF0ZVJhbmdlUmVxdWVzdENhcGFiaWxpdGllcykoe1xuICAgICAgICBnZXRSZXNwb25zZUhlYWRlcixcbiAgICAgICAgaXNIdHRwOiB0aGlzLl9zdHJlYW0uaXNIdHRwLFxuICAgICAgICByYW5nZUNodW5rU2l6ZTogdGhpcy5fcmFuZ2VDaHVua1NpemUsXG4gICAgICAgIGRpc2FibGVSYW5nZTogdGhpcy5fZGlzYWJsZVJhbmdlXG4gICAgICB9KTtcbiAgICAgIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQgPSBhbGxvd1JhbmdlUmVxdWVzdHM7XG4gICAgICB0aGlzLl9jb250ZW50TGVuZ3RoID0gc3VnZ2VzdGVkTGVuZ3RoIHx8IHRoaXMuX2NvbnRlbnRMZW5ndGg7XG4gICAgICB0aGlzLl9maWxlbmFtZSA9ICgwLCBfbmV0d29ya191dGlscy5leHRyYWN0RmlsZW5hbWVGcm9tSGVhZGVyKShnZXRSZXNwb25zZUhlYWRlcik7XG5cbiAgICAgIGlmICghdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQgJiYgdGhpcy5faXNSYW5nZVN1cHBvcnRlZCkge1xuICAgICAgICB0aGlzLmNhbmNlbChuZXcgX3V0aWwuQWJvcnRFeGNlcHRpb24oXCJTdHJlYW1pbmcgaXMgZGlzYWJsZWQuXCIpKTtcbiAgICAgIH1cbiAgICB9KS5jYXRjaCh0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5yZWplY3QpO1xuICAgIHRoaXMub25Qcm9ncmVzcyA9IG51bGw7XG4gIH1cblxuICBnZXQgaGVhZGVyc1JlYWR5KCkge1xuICAgIHJldHVybiB0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG5cbiAgZ2V0IGZpbGVuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLl9maWxlbmFtZTtcbiAgfVxuXG4gIGdldCBjb250ZW50TGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLl9jb250ZW50TGVuZ3RoO1xuICB9XG5cbiAgZ2V0IGlzUmFuZ2VTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQ7XG4gIH1cblxuICBnZXQgaXNTdHJlYW1pbmdTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkO1xuICB9XG5cbiAgYXN5bmMgcmVhZCgpIHtcbiAgICBhd2FpdCB0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5wcm9taXNlO1xuICAgIGNvbnN0IHtcbiAgICAgIHZhbHVlLFxuICAgICAgZG9uZVxuICAgIH0gPSBhd2FpdCB0aGlzLl9yZWFkZXIucmVhZCgpO1xuXG4gICAgaWYgKGRvbmUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICBkb25lXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMuX2xvYWRlZCArPSB2YWx1ZS5ieXRlTGVuZ3RoO1xuXG4gICAgaWYgKHRoaXMub25Qcm9ncmVzcykge1xuICAgICAgdGhpcy5vblByb2dyZXNzKHtcbiAgICAgICAgbG9hZGVkOiB0aGlzLl9sb2FkZWQsXG4gICAgICAgIHRvdGFsOiB0aGlzLl9jb250ZW50TGVuZ3RoXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheSh2YWx1ZSkuYnVmZmVyO1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogYnVmZmVyLFxuICAgICAgZG9uZTogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgY2FuY2VsKHJlYXNvbikge1xuICAgIGlmICh0aGlzLl9yZWFkZXIpIHtcbiAgICAgIHRoaXMuX3JlYWRlci5jYW5jZWwocmVhc29uKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fYWJvcnRDb250cm9sbGVyKSB7XG4gICAgICB0aGlzLl9hYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICB9XG4gIH1cblxufVxuXG5jbGFzcyBQREZGZXRjaFN0cmVhbVJhbmdlUmVhZGVyIHtcbiAgY29uc3RydWN0b3Ioc3RyZWFtLCBiZWdpbiwgZW5kKSB7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICAgIHRoaXMuX3JlYWRlciA9IG51bGw7XG4gICAgdGhpcy5fbG9hZGVkID0gMDtcbiAgICBjb25zdCBzb3VyY2UgPSBzdHJlYW0uc291cmNlO1xuICAgIHRoaXMuX3dpdGhDcmVkZW50aWFscyA9IHNvdXJjZS53aXRoQ3JlZGVudGlhbHMgfHwgZmFsc2U7XG4gICAgdGhpcy5fcmVhZENhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQgPSAhc291cmNlLmRpc2FibGVTdHJlYW07XG5cbiAgICBpZiAodHlwZW9mIEFib3J0Q29udHJvbGxlciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgdGhpcy5fYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIH1cblxuICAgIHRoaXMuX2hlYWRlcnMgPSBjcmVhdGVIZWFkZXJzKHRoaXMuX3N0cmVhbS5odHRwSGVhZGVycyk7XG5cbiAgICB0aGlzLl9oZWFkZXJzLmFwcGVuZChcIlJhbmdlXCIsIGBieXRlcz0ke2JlZ2lufS0ke2VuZCAtIDF9YCk7XG5cbiAgICBjb25zdCB1cmwgPSBzb3VyY2UudXJsO1xuICAgIGZldGNoKHVybCwgY3JlYXRlRmV0Y2hPcHRpb25zKHRoaXMuX2hlYWRlcnMsIHRoaXMuX3dpdGhDcmVkZW50aWFscywgdGhpcy5fYWJvcnRDb250cm9sbGVyKSkudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICBpZiAoISgwLCBfbmV0d29ya191dGlscy52YWxpZGF0ZVJlc3BvbnNlU3RhdHVzKShyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgICAgIHRocm93ICgwLCBfbmV0d29ya191dGlscy5jcmVhdGVSZXNwb25zZVN0YXR1c0Vycm9yKShyZXNwb25zZS5zdGF0dXMsIHVybCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKTtcblxuICAgICAgdGhpcy5fcmVhZGVyID0gcmVzcG9uc2UuYm9keS5nZXRSZWFkZXIoKTtcbiAgICB9KS5jYXRjaCh0aGlzLl9yZWFkQ2FwYWJpbGl0eS5yZWplY3QpO1xuICAgIHRoaXMub25Qcm9ncmVzcyA9IG51bGw7XG4gIH1cblxuICBnZXQgaXNTdHJlYW1pbmdTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkO1xuICB9XG5cbiAgYXN5bmMgcmVhZCgpIHtcbiAgICBhd2FpdCB0aGlzLl9yZWFkQ2FwYWJpbGl0eS5wcm9taXNlO1xuICAgIGNvbnN0IHtcbiAgICAgIHZhbHVlLFxuICAgICAgZG9uZVxuICAgIH0gPSBhd2FpdCB0aGlzLl9yZWFkZXIucmVhZCgpO1xuXG4gICAgaWYgKGRvbmUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICBkb25lXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMuX2xvYWRlZCArPSB2YWx1ZS5ieXRlTGVuZ3RoO1xuXG4gICAgaWYgKHRoaXMub25Qcm9ncmVzcykge1xuICAgICAgdGhpcy5vblByb2dyZXNzKHtcbiAgICAgICAgbG9hZGVkOiB0aGlzLl9sb2FkZWRcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHZhbHVlKS5idWZmZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiBidWZmZXIsXG4gICAgICBkb25lOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBjYW5jZWwocmVhc29uKSB7XG4gICAgaWYgKHRoaXMuX3JlYWRlcikge1xuICAgICAgdGhpcy5fcmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9hYm9ydENvbnRyb2xsZXIpIHtcbiAgICAgIHRoaXMuX2Fib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgIH1cbiAgfVxuXG59XG5cbi8qKiovIH0pXG4vKioqKioqLyBcdF0pO1xuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuLyoqKioqKi8gXHR2YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dfcGRmanNfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4vKioqKioqLyBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4vKioqKioqLyBcdFx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG4vKioqKioqLyBcdFx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG4vKioqKioqLyBcdFx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdFx0fVxuLyoqKioqKi8gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4vKioqKioqLyBcdFx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG4vKioqKioqLyBcdFx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG4vKioqKioqLyBcdFx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbi8qKioqKiovIFx0XHR9O1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbi8qKioqKiovIFx0XHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbi8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4vKioqKioqLyBcdH1cbi8qKioqKiovIFx0XG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xudmFyIF9fd2VicGFja19leHBvcnRzX18gPSB7fTtcbi8vIFRoaXMgZW50cnkgbmVlZCB0byBiZSB3cmFwcGVkIGluIGFuIElJRkUgYmVjYXVzZSBpdCBuZWVkIHRvIGJlIGlzb2xhdGVkIGFnYWluc3Qgb3RoZXIgbW9kdWxlcyBpbiB0aGUgY2h1bmsuXG4oKCkgPT4ge1xudmFyIGV4cG9ydHMgPSBfX3dlYnBhY2tfZXhwb3J0c19fO1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkFubm90YXRpb25MYXllclwiLCAoe1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX2Fubm90YXRpb25fbGF5ZXIuQW5ub3RhdGlvbkxheWVyO1xuICB9XG59KSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBbm5vdGF0aW9uTW9kZVwiLCAoe1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3V0aWwuQW5ub3RhdGlvbk1vZGU7XG4gIH1cbn0pKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNNYXBDb21wcmVzc2lvblR5cGVcIiwgKHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF91dGlsLkNNYXBDb21wcmVzc2lvblR5cGU7XG4gIH1cbn0pKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkdsb2JhbFdvcmtlck9wdGlvbnNcIiwgKHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF93b3JrZXJfb3B0aW9ucy5HbG9iYWxXb3JrZXJPcHRpb25zO1xuICB9XG59KSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJJbnZhbGlkUERGRXhjZXB0aW9uXCIsICh7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdXRpbC5JbnZhbGlkUERGRXhjZXB0aW9uO1xuICB9XG59KSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJMaW5rVGFyZ2V0XCIsICh7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfZGlzcGxheV91dGlscy5MaW5rVGFyZ2V0O1xuICB9XG59KSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJMb29wYmFja1BvcnRcIiwgKHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9hcGkuTG9vcGJhY2tQb3J0O1xuICB9XG59KSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJNaXNzaW5nUERGRXhjZXB0aW9uXCIsICh7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdXRpbC5NaXNzaW5nUERGRXhjZXB0aW9uO1xuICB9XG59KSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJPUFNcIiwgKHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF91dGlsLk9QUztcbiAgfVxufSkpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUERGRGF0YVJhbmdlVHJhbnNwb3J0XCIsICh7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfYXBpLlBERkRhdGFSYW5nZVRyYW5zcG9ydDtcbiAgfVxufSkpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUERGRGF0ZVN0cmluZ1wiLCAoe1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX2Rpc3BsYXlfdXRpbHMuUERGRGF0ZVN0cmluZztcbiAgfVxufSkpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUERGV29ya2VyXCIsICh7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfYXBpLlBERldvcmtlcjtcbiAgfVxufSkpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUGFzc3dvcmRSZXNwb25zZXNcIiwgKHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF91dGlsLlBhc3N3b3JkUmVzcG9uc2VzO1xuICB9XG59KSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJQZXJtaXNzaW9uRmxhZ1wiLCAoe1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3V0aWwuUGVybWlzc2lvbkZsYWc7XG4gIH1cbn0pKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlBpeGVsc1BlckluY2hcIiwgKHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9kaXNwbGF5X3V0aWxzLlBpeGVsc1BlckluY2g7XG4gIH1cbn0pKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJlbmRlcmluZ0NhbmNlbGxlZEV4Y2VwdGlvblwiLCAoe1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX2Rpc3BsYXlfdXRpbHMuUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uO1xuICB9XG59KSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTVkdHcmFwaGljc1wiLCAoe1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3N2Zy5TVkdHcmFwaGljcztcbiAgfVxufSkpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVU5TVVBQT1JURURfRkVBVFVSRVNcIiwgKHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF91dGlsLlVOU1VQUE9SVEVEX0ZFQVRVUkVTO1xuICB9XG59KSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb25cIiwgKHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF91dGlsLlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbjtcbiAgfVxufSkpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVXRpbFwiLCAoe1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3V0aWwuVXRpbDtcbiAgfVxufSkpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVmVyYm9zaXR5TGV2ZWxcIiwgKHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF91dGlsLlZlcmJvc2l0eUxldmVsO1xuICB9XG59KSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJYZmFMYXllclwiLCAoe1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3hmYV9sYXllci5YZmFMYXllcjtcbiAgfVxufSkpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYWRkTGlua0F0dHJpYnV0ZXNcIiwgKHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9kaXNwbGF5X3V0aWxzLmFkZExpbmtBdHRyaWJ1dGVzO1xuICB9XG59KSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJidWlsZFwiLCAoe1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX2FwaS5idWlsZDtcbiAgfVxufSkpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlT2JqZWN0VVJMXCIsICh7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdXRpbC5jcmVhdGVPYmplY3RVUkw7XG4gIH1cbn0pKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVByb21pc2VDYXBhYmlsaXR5XCIsICh7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eTtcbiAgfVxufSkpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVmFsaWRBYnNvbHV0ZVVybFwiLCAoe1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3V0aWwuY3JlYXRlVmFsaWRBYnNvbHV0ZVVybDtcbiAgfVxufSkpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0RG9jdW1lbnRcIiwgKHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9hcGkuZ2V0RG9jdW1lbnQ7XG4gIH1cbn0pKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldEZpbGVuYW1lRnJvbVVybFwiLCAoe1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX2Rpc3BsYXlfdXRpbHMuZ2V0RmlsZW5hbWVGcm9tVXJsO1xuICB9XG59KSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRQZGZGaWxlbmFtZUZyb21VcmxcIiwgKHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9kaXNwbGF5X3V0aWxzLmdldFBkZkZpbGVuYW1lRnJvbVVybDtcbiAgfVxufSkpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2V0WGZhUGFnZVZpZXdwb3J0XCIsICh7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfZGlzcGxheV91dGlscy5nZXRYZmFQYWdlVmlld3BvcnQ7XG4gIH1cbn0pKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzUGRmRmlsZVwiLCAoe1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX2Rpc3BsYXlfdXRpbHMuaXNQZGZGaWxlO1xuICB9XG59KSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsb2FkU2NyaXB0XCIsICh7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfZGlzcGxheV91dGlscy5sb2FkU2NyaXB0O1xuICB9XG59KSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZW1vdmVOdWxsQ2hhcmFjdGVyc1wiLCAoe1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3V0aWwucmVtb3ZlTnVsbENoYXJhY3RlcnM7XG4gIH1cbn0pKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlbmRlclRleHRMYXllclwiLCAoe1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3RleHRfbGF5ZXIucmVuZGVyVGV4dExheWVyO1xuICB9XG59KSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzaGFkb3dcIiwgKHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF91dGlsLnNoYWRvdztcbiAgfVxufSkpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidmVyc2lvblwiLCAoe1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX2FwaS52ZXJzaW9uO1xuICB9XG59KSk7XG5cbnZhciBfZGlzcGxheV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oMSk7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfYXBpID0gX193X3BkZmpzX3JlcXVpcmVfXyg2KTtcblxudmFyIF9hbm5vdGF0aW9uX2xheWVyID0gX193X3BkZmpzX3JlcXVpcmVfXygxOCk7XG5cbnZhciBfd29ya2VyX29wdGlvbnMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEyKTtcblxudmFyIF9pc19ub2RlID0gX193X3BkZmpzX3JlcXVpcmVfXyg0KTtcblxudmFyIF90ZXh0X2xheWVyID0gX193X3BkZmpzX3JlcXVpcmVfXygyMSk7XG5cbnZhciBfc3ZnID0gX193X3BkZmpzX3JlcXVpcmVfXygyMik7XG5cbnZhciBfeGZhX2xheWVyID0gX193X3BkZmpzX3JlcXVpcmVfXygyMCk7XG5cbmNvbnN0IHBkZmpzVmVyc2lvbiA9ICcyLjEyLjMxMyc7XG5jb25zdCBwZGZqc0J1aWxkID0gJ2EyYWU1NmYzOSc7XG57XG4gIGlmIChfaXNfbm9kZS5pc05vZGVKUykge1xuICAgIGNvbnN0IHtcbiAgICAgIFBERk5vZGVTdHJlYW1cbiAgICB9ID0gX193X3BkZmpzX3JlcXVpcmVfXygyMyk7XG5cbiAgICAoMCwgX2FwaS5zZXRQREZOZXR3b3JrU3RyZWFtRmFjdG9yeSkocGFyYW1zID0+IHtcbiAgICAgIHJldHVybiBuZXcgUERGTm9kZVN0cmVhbShwYXJhbXMpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHtcbiAgICAgIFBERk5ldHdvcmtTdHJlYW1cbiAgICB9ID0gX193X3BkZmpzX3JlcXVpcmVfXygyNik7XG5cbiAgICBjb25zdCB7XG4gICAgICBQREZGZXRjaFN0cmVhbVxuICAgIH0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDI3KTtcblxuICAgICgwLCBfYXBpLnNldFBERk5ldHdvcmtTdHJlYW1GYWN0b3J5KShwYXJhbXMgPT4ge1xuICAgICAgaWYgKCgwLCBfZGlzcGxheV91dGlscy5pc1ZhbGlkRmV0Y2hVcmwpKHBhcmFtcy51cmwpKSB7XG4gICAgICAgIHJldHVybiBuZXcgUERGRmV0Y2hTdHJlYW0ocGFyYW1zKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBQREZOZXR3b3JrU3RyZWFtKHBhcmFtcyk7XG4gICAgfSk7XG4gIH1cbn1cbn0pKCk7XG5cbi8qKioqKiovIFx0cmV0dXJuIF9fd2VicGFja19leHBvcnRzX187XG4vKioqKioqLyB9KSgpXG47XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBkZi5qcy5tYXAiLCIvKipcbiAqIEBsaWNzdGFydCBUaGUgZm9sbG93aW5nIGlzIHRoZSBlbnRpcmUgbGljZW5zZSBub3RpY2UgZm9yIHRoZVxuICogSmF2YXNjcmlwdCBjb2RlIGluIHRoaXMgcGFnZVxuICpcbiAqIENvcHlyaWdodCAyMDIxIE1vemlsbGEgRm91bmRhdGlvblxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKiBAbGljZW5kIFRoZSBhYm92ZSBpcyB0aGUgZW50aXJlIGxpY2Vuc2Ugbm90aWNlIGZvciB0aGVcbiAqIEphdmFzY3JpcHQgY29kZSBpbiB0aGlzIHBhZ2VcbiAqL1xuXG4oZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShcInBkZmpzLWRpc3QvYnVpbGQvcGRmLndvcmtlclwiLCBbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJwZGZqcy1kaXN0L2J1aWxkL3BkZi53b3JrZXJcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wicGRmanMtZGlzdC9idWlsZC9wZGYud29ya2VyXCJdID0gcm9vdC5wZGZqc1dvcmtlciA9IGZhY3RvcnkoKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKCkge1xucmV0dXJuIC8qKioqKiovICgoKSA9PiB7IC8vIHdlYnBhY2tCb290c3RyYXBcbi8qKioqKiovIFx0XCJ1c2Ugc3RyaWN0XCI7XG4vKioqKioqLyBcdHZhciBfX3dlYnBhY2tfbW9kdWxlc19fID0gKFtcbi8qIDAgKi8sXG4vKiAxICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLldvcmtlclRhc2sgPSBleHBvcnRzLldvcmtlck1lc3NhZ2VIYW5kbGVyID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX3ByaW1pdGl2ZXMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDUpO1xuXG52YXIgX3BkZl9tYW5hZ2VyID0gX193X3BkZmpzX3JlcXVpcmVfXyg3KTtcblxudmFyIF93cml0ZXIgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDcxKTtcblxudmFyIF9pc19ub2RlID0gX193X3BkZmpzX3JlcXVpcmVfXyg0KTtcblxudmFyIF9tZXNzYWdlX2hhbmRsZXIgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDk5KTtcblxudmFyIF93b3JrZXJfc3RyZWFtID0gX193X3BkZmpzX3JlcXVpcmVfXygxMDApO1xuXG52YXIgX2NvcmVfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDkpO1xuXG5jbGFzcyBXb3JrZXJUYXNrIHtcbiAgY29uc3RydWN0b3IobmFtZSkge1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy50ZXJtaW5hdGVkID0gZmFsc2U7XG4gICAgdGhpcy5fY2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgfVxuXG4gIGdldCBmaW5pc2hlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG5cbiAgZmluaXNoKCkge1xuICAgIHRoaXMuX2NhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICB9XG5cbiAgdGVybWluYXRlKCkge1xuICAgIHRoaXMudGVybWluYXRlZCA9IHRydWU7XG4gIH1cblxuICBlbnN1cmVOb3RUZXJtaW5hdGVkKCkge1xuICAgIGlmICh0aGlzLnRlcm1pbmF0ZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIldvcmtlciB0YXNrIHdhcyB0ZXJtaW5hdGVkXCIpO1xuICAgIH1cbiAgfVxuXG59XG5cbmV4cG9ydHMuV29ya2VyVGFzayA9IFdvcmtlclRhc2s7XG5cbmNsYXNzIFdvcmtlck1lc3NhZ2VIYW5kbGVyIHtcbiAgc3RhdGljIHNldHVwKGhhbmRsZXIsIHBvcnQpIHtcbiAgICBsZXQgdGVzdE1lc3NhZ2VQcm9jZXNzZWQgPSBmYWxzZTtcbiAgICBoYW5kbGVyLm9uKFwidGVzdFwiLCBmdW5jdGlvbiB3cGhTZXR1cFRlc3QoZGF0YSkge1xuICAgICAgaWYgKHRlc3RNZXNzYWdlUHJvY2Vzc2VkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGVzdE1lc3NhZ2VQcm9jZXNzZWQgPSB0cnVlO1xuICAgICAgaGFuZGxlci5zZW5kKFwidGVzdFwiLCBkYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSAmJiBkYXRhWzBdID09PSAyNTUpO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJjb25maWd1cmVcIiwgZnVuY3Rpb24gd3BoQ29uZmlndXJlKGRhdGEpIHtcbiAgICAgICgwLCBfdXRpbC5zZXRWZXJib3NpdHlMZXZlbCkoZGF0YS52ZXJib3NpdHkpO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJHZXREb2NSZXF1ZXN0XCIsIGZ1bmN0aW9uIHdwaFNldHVwRG9jKGRhdGEpIHtcbiAgICAgIHJldHVybiBXb3JrZXJNZXNzYWdlSGFuZGxlci5jcmVhdGVEb2N1bWVudEhhbmRsZXIoZGF0YSwgcG9ydCk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlRG9jdW1lbnRIYW5kbGVyKGRvY1BhcmFtcywgcG9ydCkge1xuICAgIGxldCBwZGZNYW5hZ2VyO1xuICAgIGxldCB0ZXJtaW5hdGVkID0gZmFsc2U7XG4gICAgbGV0IGNhbmNlbFhIUnMgPSBudWxsO1xuICAgIGNvbnN0IFdvcmtlclRhc2tzID0gW107XG4gICAgY29uc3QgdmVyYm9zaXR5ID0gKDAsIF91dGlsLmdldFZlcmJvc2l0eUxldmVsKSgpO1xuICAgIGNvbnN0IGFwaVZlcnNpb24gPSBkb2NQYXJhbXMuYXBpVmVyc2lvbjtcbiAgICBjb25zdCB3b3JrZXJWZXJzaW9uID0gJzIuMTIuMzEzJztcblxuICAgIGlmIChhcGlWZXJzaW9uICE9PSB3b3JrZXJWZXJzaW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBBUEkgdmVyc2lvbiBcIiR7YXBpVmVyc2lvbn1cIiBkb2VzIG5vdCBtYXRjaCBgICsgYHRoZSBXb3JrZXIgdmVyc2lvbiBcIiR7d29ya2VyVmVyc2lvbn1cIi5gKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbnVtZXJhYmxlUHJvcGVydGllcyA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBbXSkge1xuICAgICAgZW51bWVyYWJsZVByb3BlcnRpZXMucHVzaChwcm9wZXJ0eSk7XG4gICAgfVxuXG4gICAgaWYgKGVudW1lcmFibGVQcm9wZXJ0aWVzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIGBBcnJheS5wcm90b3R5cGVgIGNvbnRhaW5zIHVuZXhwZWN0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0aWVzOiBcIiArIGVudW1lcmFibGVQcm9wZXJ0aWVzLmpvaW4oXCIsIFwiKSArIFwiOyB0aHVzIGJyZWFraW5nIGUuZy4gYGZvci4uLmluYCBpdGVyYXRpb24gb2YgYEFycmF5YHMuXCIpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgUmVhZGFibGVTdHJlYW0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBicm93c2VyL2Vudmlyb25tZW50IGxhY2tzIG5hdGl2ZSBzdXBwb3J0IGZvciBjcml0aWNhbCBcIiArIFwiZnVuY3Rpb25hbGl0eSB1c2VkIGJ5IHRoZSBQREYuanMgbGlicmFyeSAoZS5nLiBgUmVhZGFibGVTdHJlYW1gKTsgXCIgKyBcInBsZWFzZSB1c2UgYSBgbGVnYWN5YC1idWlsZCBpbnN0ZWFkLlwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBkb2NJZCA9IGRvY1BhcmFtcy5kb2NJZDtcbiAgICBjb25zdCBkb2NCYXNlVXJsID0gZG9jUGFyYW1zLmRvY0Jhc2VVcmw7XG4gICAgY29uc3Qgd29ya2VySGFuZGxlck5hbWUgPSBkb2NQYXJhbXMuZG9jSWQgKyBcIl93b3JrZXJcIjtcbiAgICBsZXQgaGFuZGxlciA9IG5ldyBfbWVzc2FnZV9oYW5kbGVyLk1lc3NhZ2VIYW5kbGVyKHdvcmtlckhhbmRsZXJOYW1lLCBkb2NJZCwgcG9ydCk7XG5cbiAgICBmdW5jdGlvbiBlbnN1cmVOb3RUZXJtaW5hdGVkKCkge1xuICAgICAgaWYgKHRlcm1pbmF0ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiV29ya2VyIHdhcyB0ZXJtaW5hdGVkXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0YXJ0V29ya2VyVGFzayh0YXNrKSB7XG4gICAgICBXb3JrZXJUYXNrcy5wdXNoKHRhc2spO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpbmlzaFdvcmtlclRhc2sodGFzaykge1xuICAgICAgdGFzay5maW5pc2goKTtcbiAgICAgIGNvbnN0IGkgPSBXb3JrZXJUYXNrcy5pbmRleE9mKHRhc2spO1xuICAgICAgV29ya2VyVGFza3Muc3BsaWNlKGksIDEpO1xuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIGxvYWREb2N1bWVudChyZWNvdmVyeU1vZGUpIHtcbiAgICAgIGF3YWl0IHBkZk1hbmFnZXIuZW5zdXJlRG9jKFwiY2hlY2tIZWFkZXJcIik7XG4gICAgICBhd2FpdCBwZGZNYW5hZ2VyLmVuc3VyZURvYyhcInBhcnNlU3RhcnRYUmVmXCIpO1xuICAgICAgYXdhaXQgcGRmTWFuYWdlci5lbnN1cmVEb2MoXCJwYXJzZVwiLCBbcmVjb3ZlcnlNb2RlXSk7XG4gICAgICBhd2FpdCBwZGZNYW5hZ2VyLmVuc3VyZURvYyhcImNoZWNrRmlyc3RQYWdlXCIsIFtyZWNvdmVyeU1vZGVdKTtcbiAgICAgIGF3YWl0IHBkZk1hbmFnZXIuZW5zdXJlRG9jKFwiY2hlY2tMYXN0UGFnZVwiLCBbcmVjb3ZlcnlNb2RlXSk7XG4gICAgICBjb25zdCBpc1B1cmVYZmEgPSBhd2FpdCBwZGZNYW5hZ2VyLmVuc3VyZURvYyhcImlzUHVyZVhmYVwiKTtcblxuICAgICAgaWYgKGlzUHVyZVhmYSkge1xuICAgICAgICBjb25zdCB0YXNrID0gbmV3IFdvcmtlclRhc2soXCJsb2FkWGZhRm9udHNcIik7XG4gICAgICAgIHN0YXJ0V29ya2VyVGFzayh0YXNrKTtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW3BkZk1hbmFnZXIubG9hZFhmYUZvbnRzKGhhbmRsZXIsIHRhc2spLmNhdGNoKHJlYXNvbiA9PiB7fSkudGhlbigoKSA9PiBmaW5pc2hXb3JrZXJUYXNrKHRhc2spKSwgcGRmTWFuYWdlci5sb2FkWGZhSW1hZ2VzKCldKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgW251bVBhZ2VzLCBmaW5nZXJwcmludHNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW3BkZk1hbmFnZXIuZW5zdXJlRG9jKFwibnVtUGFnZXNcIiksIHBkZk1hbmFnZXIuZW5zdXJlRG9jKFwiZmluZ2VycHJpbnRzXCIpXSk7XG4gICAgICBjb25zdCBodG1sRm9yWGZhID0gaXNQdXJlWGZhID8gYXdhaXQgcGRmTWFuYWdlci5lbnN1cmVEb2MoXCJodG1sRm9yWGZhXCIpIDogbnVsbDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG51bVBhZ2VzLFxuICAgICAgICBmaW5nZXJwcmludHMsXG4gICAgICAgIGh0bWxGb3JYZmFcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGRmTWFuYWdlcihkYXRhLCBldmFsdWF0b3JPcHRpb25zLCBlbmFibGVYZmEpIHtcbiAgICAgIGNvbnN0IHBkZk1hbmFnZXJDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgbGV0IG5ld1BkZk1hbmFnZXI7XG4gICAgICBjb25zdCBzb3VyY2UgPSBkYXRhLnNvdXJjZTtcblxuICAgICAgaWYgKHNvdXJjZS5kYXRhKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbmV3UGRmTWFuYWdlciA9IG5ldyBfcGRmX21hbmFnZXIuTG9jYWxQZGZNYW5hZ2VyKGRvY0lkLCBzb3VyY2UuZGF0YSwgc291cmNlLnBhc3N3b3JkLCBoYW5kbGVyLCBldmFsdWF0b3JPcHRpb25zLCBlbmFibGVYZmEsIGRvY0Jhc2VVcmwpO1xuICAgICAgICAgIHBkZk1hbmFnZXJDYXBhYmlsaXR5LnJlc29sdmUobmV3UGRmTWFuYWdlcik7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgcGRmTWFuYWdlckNhcGFiaWxpdHkucmVqZWN0KGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwZGZNYW5hZ2VyQ2FwYWJpbGl0eS5wcm9taXNlO1xuICAgICAgfVxuXG4gICAgICBsZXQgcGRmU3RyZWFtLFxuICAgICAgICAgIGNhY2hlZENodW5rcyA9IFtdO1xuXG4gICAgICB0cnkge1xuICAgICAgICBwZGZTdHJlYW0gPSBuZXcgX3dvcmtlcl9zdHJlYW0uUERGV29ya2VyU3RyZWFtKGhhbmRsZXIpO1xuICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgcGRmTWFuYWdlckNhcGFiaWxpdHkucmVqZWN0KGV4KTtcbiAgICAgICAgcmV0dXJuIHBkZk1hbmFnZXJDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZ1bGxSZXF1ZXN0ID0gcGRmU3RyZWFtLmdldEZ1bGxSZWFkZXIoKTtcbiAgICAgIGZ1bGxSZXF1ZXN0LmhlYWRlcnNSZWFkeS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFmdWxsUmVxdWVzdC5pc1JhbmdlU3VwcG9ydGVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGlzYWJsZUF1dG9GZXRjaCA9IHNvdXJjZS5kaXNhYmxlQXV0b0ZldGNoIHx8IGZ1bGxSZXF1ZXN0LmlzU3RyZWFtaW5nU3VwcG9ydGVkO1xuICAgICAgICBuZXdQZGZNYW5hZ2VyID0gbmV3IF9wZGZfbWFuYWdlci5OZXR3b3JrUGRmTWFuYWdlcihkb2NJZCwgcGRmU3RyZWFtLCB7XG4gICAgICAgICAgbXNnSGFuZGxlcjogaGFuZGxlcixcbiAgICAgICAgICBwYXNzd29yZDogc291cmNlLnBhc3N3b3JkLFxuICAgICAgICAgIGxlbmd0aDogZnVsbFJlcXVlc3QuY29udGVudExlbmd0aCxcbiAgICAgICAgICBkaXNhYmxlQXV0b0ZldGNoLFxuICAgICAgICAgIHJhbmdlQ2h1bmtTaXplOiBzb3VyY2UucmFuZ2VDaHVua1NpemVcbiAgICAgICAgfSwgZXZhbHVhdG9yT3B0aW9ucywgZW5hYmxlWGZhLCBkb2NCYXNlVXJsKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNhY2hlZENodW5rcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIG5ld1BkZk1hbmFnZXIuc2VuZFByb2dyZXNzaXZlRGF0YShjYWNoZWRDaHVua3NbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FjaGVkQ2h1bmtzID0gW107XG4gICAgICAgIHBkZk1hbmFnZXJDYXBhYmlsaXR5LnJlc29sdmUobmV3UGRmTWFuYWdlcik7XG4gICAgICAgIGNhbmNlbFhIUnMgPSBudWxsO1xuICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICBwZGZNYW5hZ2VyQ2FwYWJpbGl0eS5yZWplY3QocmVhc29uKTtcbiAgICAgICAgY2FuY2VsWEhScyA9IG51bGw7XG4gICAgICB9KTtcbiAgICAgIGxldCBsb2FkZWQgPSAwO1xuXG4gICAgICBjb25zdCBmbHVzaENodW5rcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcGRmRmlsZSA9ICgwLCBfdXRpbC5hcnJheXNUb0J5dGVzKShjYWNoZWRDaHVua3MpO1xuXG4gICAgICAgIGlmIChzb3VyY2UubGVuZ3RoICYmIHBkZkZpbGUubGVuZ3RoICE9PSBzb3VyY2UubGVuZ3RoKSB7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwicmVwb3J0ZWQgSFRUUCBsZW5ndGggaXMgZGlmZmVyZW50IGZyb20gYWN0dWFsXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBuZXdQZGZNYW5hZ2VyID0gbmV3IF9wZGZfbWFuYWdlci5Mb2NhbFBkZk1hbmFnZXIoZG9jSWQsIHBkZkZpbGUsIHNvdXJjZS5wYXNzd29yZCwgaGFuZGxlciwgZXZhbHVhdG9yT3B0aW9ucywgZW5hYmxlWGZhLCBkb2NCYXNlVXJsKTtcbiAgICAgICAgICBwZGZNYW5hZ2VyQ2FwYWJpbGl0eS5yZXNvbHZlKG5ld1BkZk1hbmFnZXIpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIHBkZk1hbmFnZXJDYXBhYmlsaXR5LnJlamVjdChleCk7XG4gICAgICAgIH1cblxuICAgICAgICBjYWNoZWRDaHVua3MgPSBbXTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlYWRQcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBjb25zdCByZWFkQ2h1bmsgPSBmdW5jdGlvbiAoe1xuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIGRvbmVcbiAgICAgICAgfSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBlbnN1cmVOb3RUZXJtaW5hdGVkKCk7XG5cbiAgICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICAgIGlmICghbmV3UGRmTWFuYWdlcikge1xuICAgICAgICAgICAgICAgIGZsdXNoQ2h1bmtzKCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjYW5jZWxYSFJzID0gbnVsbDtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsb2FkZWQgKz0gKDAsIF91dGlsLmFycmF5Qnl0ZUxlbmd0aCkodmFsdWUpO1xuXG4gICAgICAgICAgICBpZiAoIWZ1bGxSZXF1ZXN0LmlzU3RyZWFtaW5nU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICAgIGhhbmRsZXIuc2VuZChcIkRvY1Byb2dyZXNzXCIsIHtcbiAgICAgICAgICAgICAgICBsb2FkZWQsXG4gICAgICAgICAgICAgICAgdG90YWw6IE1hdGgubWF4KGxvYWRlZCwgZnVsbFJlcXVlc3QuY29udGVudExlbmd0aCB8fCAwKVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG5ld1BkZk1hbmFnZXIpIHtcbiAgICAgICAgICAgICAgbmV3UGRmTWFuYWdlci5zZW5kUHJvZ3Jlc3NpdmVEYXRhKHZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNhY2hlZENodW5rcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVsbFJlcXVlc3QucmVhZCgpLnRoZW4ocmVhZENodW5rLCByZWplY3QpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgZnVsbFJlcXVlc3QucmVhZCgpLnRoZW4ocmVhZENodW5rLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgICByZWFkUHJvbWlzZS5jYXRjaChmdW5jdGlvbiAoZSkge1xuICAgICAgICBwZGZNYW5hZ2VyQ2FwYWJpbGl0eS5yZWplY3QoZSk7XG4gICAgICAgIGNhbmNlbFhIUnMgPSBudWxsO1xuICAgICAgfSk7XG5cbiAgICAgIGNhbmNlbFhIUnMgPSBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgIHBkZlN0cmVhbS5jYW5jZWxBbGxSZXF1ZXN0cyhyZWFzb24pO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHBkZk1hbmFnZXJDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0dXBEb2MoZGF0YSkge1xuICAgICAgZnVuY3Rpb24gb25TdWNjZXNzKGRvYykge1xuICAgICAgICBlbnN1cmVOb3RUZXJtaW5hdGVkKCk7XG4gICAgICAgIGhhbmRsZXIuc2VuZChcIkdldERvY1wiLCB7XG4gICAgICAgICAgcGRmSW5mbzogZG9jXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBvbkZhaWx1cmUoZXgpIHtcbiAgICAgICAgZW5zdXJlTm90VGVybWluYXRlZCgpO1xuXG4gICAgICAgIGlmIChleCBpbnN0YW5jZW9mIF91dGlsLlBhc3N3b3JkRXhjZXB0aW9uKSB7XG4gICAgICAgICAgY29uc3QgdGFzayA9IG5ldyBXb3JrZXJUYXNrKGBQYXNzd29yZEV4Y2VwdGlvbjogcmVzcG9uc2UgJHtleC5jb2RlfWApO1xuICAgICAgICAgIHN0YXJ0V29ya2VyVGFzayh0YXNrKTtcbiAgICAgICAgICBoYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIlBhc3N3b3JkUmVxdWVzdFwiLCBleCkudGhlbihmdW5jdGlvbiAoe1xuICAgICAgICAgICAgcGFzc3dvcmRcbiAgICAgICAgICB9KSB7XG4gICAgICAgICAgICBmaW5pc2hXb3JrZXJUYXNrKHRhc2spO1xuICAgICAgICAgICAgcGRmTWFuYWdlci51cGRhdGVQYXNzd29yZChwYXNzd29yZCk7XG4gICAgICAgICAgICBwZGZNYW5hZ2VyUmVhZHkoKTtcbiAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBmaW5pc2hXb3JrZXJUYXNrKHRhc2spO1xuICAgICAgICAgICAgaGFuZGxlci5zZW5kKFwiRG9jRXhjZXB0aW9uXCIsIGV4KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChleCBpbnN0YW5jZW9mIF91dGlsLkludmFsaWRQREZFeGNlcHRpb24gfHwgZXggaW5zdGFuY2VvZiBfdXRpbC5NaXNzaW5nUERGRXhjZXB0aW9uIHx8IGV4IGluc3RhbmNlb2YgX3V0aWwuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uIHx8IGV4IGluc3RhbmNlb2YgX3V0aWwuVW5rbm93bkVycm9yRXhjZXB0aW9uKSB7XG4gICAgICAgICAgaGFuZGxlci5zZW5kKFwiRG9jRXhjZXB0aW9uXCIsIGV4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoYW5kbGVyLnNlbmQoXCJEb2NFeGNlcHRpb25cIiwgbmV3IF91dGlsLlVua25vd25FcnJvckV4Y2VwdGlvbihleC5tZXNzYWdlLCBleC50b1N0cmluZygpKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gcGRmTWFuYWdlclJlYWR5KCkge1xuICAgICAgICBlbnN1cmVOb3RUZXJtaW5hdGVkKCk7XG4gICAgICAgIGxvYWREb2N1bWVudChmYWxzZSkudGhlbihvblN1Y2Nlc3MsIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICBlbnN1cmVOb3RUZXJtaW5hdGVkKCk7XG5cbiAgICAgICAgICBpZiAoIShyZWFzb24gaW5zdGFuY2VvZiBfY29yZV91dGlscy5YUmVmUGFyc2VFeGNlcHRpb24pKSB7XG4gICAgICAgICAgICBvbkZhaWx1cmUocmVhc29uKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwZGZNYW5hZ2VyLnJlcXVlc3RMb2FkZWRTdHJlYW0oKTtcbiAgICAgICAgICBwZGZNYW5hZ2VyLm9uTG9hZGVkU3RyZWFtKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBlbnN1cmVOb3RUZXJtaW5hdGVkKCk7XG4gICAgICAgICAgICBsb2FkRG9jdW1lbnQodHJ1ZSkudGhlbihvblN1Y2Nlc3MsIG9uRmFpbHVyZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBlbnN1cmVOb3RUZXJtaW5hdGVkKCk7XG4gICAgICBjb25zdCBldmFsdWF0b3JPcHRpb25zID0ge1xuICAgICAgICBtYXhJbWFnZVNpemU6IGRhdGEubWF4SW1hZ2VTaXplLFxuICAgICAgICBkaXNhYmxlRm9udEZhY2U6IGRhdGEuZGlzYWJsZUZvbnRGYWNlLFxuICAgICAgICBpZ25vcmVFcnJvcnM6IGRhdGEuaWdub3JlRXJyb3JzLFxuICAgICAgICBpc0V2YWxTdXBwb3J0ZWQ6IGRhdGEuaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgICBmb250RXh0cmFQcm9wZXJ0aWVzOiBkYXRhLmZvbnRFeHRyYVByb3BlcnRpZXMsXG4gICAgICAgIHVzZVN5c3RlbUZvbnRzOiBkYXRhLnVzZVN5c3RlbUZvbnRzLFxuICAgICAgICBjTWFwVXJsOiBkYXRhLmNNYXBVcmwsXG4gICAgICAgIHN0YW5kYXJkRm9udERhdGFVcmw6IGRhdGEuc3RhbmRhcmRGb250RGF0YVVybFxuICAgICAgfTtcbiAgICAgIGdldFBkZk1hbmFnZXIoZGF0YSwgZXZhbHVhdG9yT3B0aW9ucywgZGF0YS5lbmFibGVYZmEpLnRoZW4oZnVuY3Rpb24gKG5ld1BkZk1hbmFnZXIpIHtcbiAgICAgICAgaWYgKHRlcm1pbmF0ZWQpIHtcbiAgICAgICAgICBuZXdQZGZNYW5hZ2VyLnRlcm1pbmF0ZShuZXcgX3V0aWwuQWJvcnRFeGNlcHRpb24oXCJXb3JrZXIgd2FzIHRlcm1pbmF0ZWQuXCIpKTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXb3JrZXIgd2FzIHRlcm1pbmF0ZWRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBwZGZNYW5hZ2VyID0gbmV3UGRmTWFuYWdlcjtcbiAgICAgICAgcGRmTWFuYWdlci5vbkxvYWRlZFN0cmVhbSgpLnRoZW4oZnVuY3Rpb24gKHN0cmVhbSkge1xuICAgICAgICAgIGhhbmRsZXIuc2VuZChcIkRhdGFMb2FkZWRcIiwge1xuICAgICAgICAgICAgbGVuZ3RoOiBzdHJlYW0uYnl0ZXMuYnl0ZUxlbmd0aFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pLnRoZW4ocGRmTWFuYWdlclJlYWR5LCBvbkZhaWx1cmUpO1xuICAgIH1cblxuICAgIGhhbmRsZXIub24oXCJHZXRQYWdlXCIsIGZ1bmN0aW9uIHdwaFNldHVwR2V0UGFnZShkYXRhKSB7XG4gICAgICByZXR1cm4gcGRmTWFuYWdlci5nZXRQYWdlKGRhdGEucGFnZUluZGV4KS50aGVuKGZ1bmN0aW9uIChwYWdlKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbcGRmTWFuYWdlci5lbnN1cmUocGFnZSwgXCJyb3RhdGVcIiksIHBkZk1hbmFnZXIuZW5zdXJlKHBhZ2UsIFwicmVmXCIpLCBwZGZNYW5hZ2VyLmVuc3VyZShwYWdlLCBcInVzZXJVbml0XCIpLCBwZGZNYW5hZ2VyLmVuc3VyZShwYWdlLCBcInZpZXdcIildKS50aGVuKGZ1bmN0aW9uIChbcm90YXRlLCByZWYsIHVzZXJVbml0LCB2aWV3XSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByb3RhdGUsXG4gICAgICAgICAgICByZWYsXG4gICAgICAgICAgICB1c2VyVW5pdCxcbiAgICAgICAgICAgIHZpZXdcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJHZXRQYWdlSW5kZXhcIiwgZnVuY3Rpb24gd3BoU2V0dXBHZXRQYWdlSW5kZXgoe1xuICAgICAgcmVmXG4gICAgfSkge1xuICAgICAgY29uc3QgcGFnZVJlZiA9IF9wcmltaXRpdmVzLlJlZi5nZXQocmVmLm51bSwgcmVmLmdlbik7XG5cbiAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coXCJnZXRQYWdlSW5kZXhcIiwgW3BhZ2VSZWZdKTtcbiAgICB9KTtcbiAgICBoYW5kbGVyLm9uKFwiR2V0RGVzdGluYXRpb25zXCIsIGZ1bmN0aW9uIHdwaFNldHVwR2V0RGVzdGluYXRpb25zKGRhdGEpIHtcbiAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coXCJkZXN0aW5hdGlvbnNcIik7XG4gICAgfSk7XG4gICAgaGFuZGxlci5vbihcIkdldERlc3RpbmF0aW9uXCIsIGZ1bmN0aW9uIHdwaFNldHVwR2V0RGVzdGluYXRpb24oZGF0YSkge1xuICAgICAgcmV0dXJuIHBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZyhcImdldERlc3RpbmF0aW9uXCIsIFtkYXRhLmlkXSk7XG4gICAgfSk7XG4gICAgaGFuZGxlci5vbihcIkdldFBhZ2VMYWJlbHNcIiwgZnVuY3Rpb24gd3BoU2V0dXBHZXRQYWdlTGFiZWxzKGRhdGEpIHtcbiAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coXCJwYWdlTGFiZWxzXCIpO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJHZXRQYWdlTGF5b3V0XCIsIGZ1bmN0aW9uIHdwaFNldHVwR2V0UGFnZUxheW91dChkYXRhKSB7XG4gICAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKFwicGFnZUxheW91dFwiKTtcbiAgICB9KTtcbiAgICBoYW5kbGVyLm9uKFwiR2V0UGFnZU1vZGVcIiwgZnVuY3Rpb24gd3BoU2V0dXBHZXRQYWdlTW9kZShkYXRhKSB7XG4gICAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKFwicGFnZU1vZGVcIik7XG4gICAgfSk7XG4gICAgaGFuZGxlci5vbihcIkdldFZpZXdlclByZWZlcmVuY2VzXCIsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKFwidmlld2VyUHJlZmVyZW5jZXNcIik7XG4gICAgfSk7XG4gICAgaGFuZGxlci5vbihcIkdldE9wZW5BY3Rpb25cIiwgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coXCJvcGVuQWN0aW9uXCIpO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJHZXRBdHRhY2htZW50c1wiLCBmdW5jdGlvbiB3cGhTZXR1cEdldEF0dGFjaG1lbnRzKGRhdGEpIHtcbiAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coXCJhdHRhY2htZW50c1wiKTtcbiAgICB9KTtcbiAgICBoYW5kbGVyLm9uKFwiR2V0SmF2YVNjcmlwdFwiLCBmdW5jdGlvbiB3cGhTZXR1cEdldEphdmFTY3JpcHQoZGF0YSkge1xuICAgICAgcmV0dXJuIHBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZyhcImphdmFTY3JpcHRcIik7XG4gICAgfSk7XG4gICAgaGFuZGxlci5vbihcIkdldERvY0pTQWN0aW9uc1wiLCBmdW5jdGlvbiB3cGhTZXR1cEdldERvY0pTQWN0aW9ucyhkYXRhKSB7XG4gICAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKFwianNBY3Rpb25zXCIpO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJHZXRQYWdlSlNBY3Rpb25zXCIsIGZ1bmN0aW9uICh7XG4gICAgICBwYWdlSW5kZXhcbiAgICB9KSB7XG4gICAgICByZXR1cm4gcGRmTWFuYWdlci5nZXRQYWdlKHBhZ2VJbmRleCkudGhlbihmdW5jdGlvbiAocGFnZSkge1xuICAgICAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmUocGFnZSwgXCJqc0FjdGlvbnNcIik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBoYW5kbGVyLm9uKFwiR2V0T3V0bGluZVwiLCBmdW5jdGlvbiB3cGhTZXR1cEdldE91dGxpbmUoZGF0YSkge1xuICAgICAgcmV0dXJuIHBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZyhcImRvY3VtZW50T3V0bGluZVwiKTtcbiAgICB9KTtcbiAgICBoYW5kbGVyLm9uKFwiR2V0T3B0aW9uYWxDb250ZW50Q29uZmlnXCIsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKFwib3B0aW9uYWxDb250ZW50Q29uZmlnXCIpO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJHZXRQZXJtaXNzaW9uc1wiLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgcmV0dXJuIHBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZyhcInBlcm1pc3Npb25zXCIpO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJHZXRNZXRhZGF0YVwiLCBmdW5jdGlvbiB3cGhTZXR1cEdldE1ldGFkYXRhKGRhdGEpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLmFsbChbcGRmTWFuYWdlci5lbnN1cmVEb2MoXCJkb2N1bWVudEluZm9cIiksIHBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZyhcIm1ldGFkYXRhXCIpXSk7XG4gICAgfSk7XG4gICAgaGFuZGxlci5vbihcIkdldE1hcmtJbmZvXCIsIGZ1bmN0aW9uIHdwaFNldHVwR2V0TWFya0luZm8oZGF0YSkge1xuICAgICAgcmV0dXJuIHBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZyhcIm1hcmtJbmZvXCIpO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJHZXREYXRhXCIsIGZ1bmN0aW9uIHdwaFNldHVwR2V0RGF0YShkYXRhKSB7XG4gICAgICBwZGZNYW5hZ2VyLnJlcXVlc3RMb2FkZWRTdHJlYW0oKTtcbiAgICAgIHJldHVybiBwZGZNYW5hZ2VyLm9uTG9hZGVkU3RyZWFtKCkudGhlbihmdW5jdGlvbiAoc3RyZWFtKSB7XG4gICAgICAgIHJldHVybiBzdHJlYW0uYnl0ZXM7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBoYW5kbGVyLm9uKFwiR2V0QW5ub3RhdGlvbnNcIiwgZnVuY3Rpb24gKHtcbiAgICAgIHBhZ2VJbmRleCxcbiAgICAgIGludGVudFxuICAgIH0pIHtcbiAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmdldFBhZ2UocGFnZUluZGV4KS50aGVuKGZ1bmN0aW9uIChwYWdlKSB7XG4gICAgICAgIHJldHVybiBwYWdlLmdldEFubm90YXRpb25zRGF0YShpbnRlbnQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaGFuZGxlci5vbihcIkdldEZpZWxkT2JqZWN0c1wiLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgcmV0dXJuIHBkZk1hbmFnZXIuZW5zdXJlRG9jKFwiZmllbGRPYmplY3RzXCIpO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJIYXNKU0FjdGlvbnNcIiwgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmVuc3VyZURvYyhcImhhc0pTQWN0aW9uc1wiKTtcbiAgICB9KTtcbiAgICBoYW5kbGVyLm9uKFwiR2V0Q2FsY3VsYXRpb25PcmRlcklkc1wiLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgcmV0dXJuIHBkZk1hbmFnZXIuZW5zdXJlRG9jKFwiY2FsY3VsYXRpb25PcmRlcklkc1wiKTtcbiAgICB9KTtcbiAgICBoYW5kbGVyLm9uKFwiU2F2ZURvY3VtZW50XCIsIGZ1bmN0aW9uICh7XG4gICAgICBpc1B1cmVYZmEsXG4gICAgICBudW1QYWdlcyxcbiAgICAgIGFubm90YXRpb25TdG9yYWdlLFxuICAgICAgZmlsZW5hbWVcbiAgICB9KSB7XG4gICAgICBwZGZNYW5hZ2VyLnJlcXVlc3RMb2FkZWRTdHJlYW0oKTtcbiAgICAgIGNvbnN0IHByb21pc2VzID0gW3BkZk1hbmFnZXIub25Mb2FkZWRTdHJlYW0oKSwgcGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKFwiYWNyb0Zvcm1cIiksIHBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZyhcImFjcm9Gb3JtUmVmXCIpLCBwZGZNYW5hZ2VyLmVuc3VyZURvYyhcInhyZWZcIiksIHBkZk1hbmFnZXIuZW5zdXJlRG9jKFwic3RhcnRYUmVmXCIpXTtcblxuICAgICAgaWYgKGlzUHVyZVhmYSkge1xuICAgICAgICBwcm9taXNlcy5wdXNoKHBkZk1hbmFnZXIuc2VyaWFsaXplWGZhRGF0YShhbm5vdGF0aW9uU3RvcmFnZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChsZXQgcGFnZUluZGV4ID0gMDsgcGFnZUluZGV4IDwgbnVtUGFnZXM7IHBhZ2VJbmRleCsrKSB7XG4gICAgICAgICAgcHJvbWlzZXMucHVzaChwZGZNYW5hZ2VyLmdldFBhZ2UocGFnZUluZGV4KS50aGVuKGZ1bmN0aW9uIChwYWdlKSB7XG4gICAgICAgICAgICBjb25zdCB0YXNrID0gbmV3IFdvcmtlclRhc2soYFNhdmU6IHBhZ2UgJHtwYWdlSW5kZXh9YCk7XG4gICAgICAgICAgICByZXR1cm4gcGFnZS5zYXZlKGhhbmRsZXIsIHRhc2ssIGFubm90YXRpb25TdG9yYWdlKS5maW5hbGx5KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgZmluaXNoV29ya2VyVGFzayh0YXNrKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24gKFtzdHJlYW0sIGFjcm9Gb3JtLCBhY3JvRm9ybVJlZiwgeHJlZiwgc3RhcnRYUmVmLCAuLi5yZWZzXSkge1xuICAgICAgICBsZXQgbmV3UmVmcyA9IFtdO1xuICAgICAgICBsZXQgeGZhRGF0YSA9IG51bGw7XG5cbiAgICAgICAgaWYgKGlzUHVyZVhmYSkge1xuICAgICAgICAgIHhmYURhdGEgPSByZWZzWzBdO1xuXG4gICAgICAgICAgaWYgKCF4ZmFEYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyZWFtLmJ5dGVzO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHJlZiBvZiByZWZzKSB7XG4gICAgICAgICAgICBuZXdSZWZzID0gcmVmLmZpbHRlcih4ID0+IHggIT09IG51bGwpLnJlZHVjZSgoYSwgYikgPT4gYS5jb25jYXQoYiksIG5ld1JlZnMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChuZXdSZWZzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0cmVhbS5ieXRlcztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB4ZmEgPSBhY3JvRm9ybSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QgJiYgYWNyb0Zvcm0uZ2V0KFwiWEZBXCIpIHx8IG51bGw7XG4gICAgICAgIGxldCB4ZmFEYXRhc2V0c1JlZiA9IG51bGw7XG4gICAgICAgIGxldCBoYXNYZmFEYXRhc2V0c0VudHJ5ID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoeGZhKSkge1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHhmYS5sZW5ndGg7IGkgPCBpaTsgaSArPSAyKSB7XG4gICAgICAgICAgICBpZiAoeGZhW2ldID09PSBcImRhdGFzZXRzXCIpIHtcbiAgICAgICAgICAgICAgeGZhRGF0YXNldHNSZWYgPSB4ZmFbaSArIDFdO1xuICAgICAgICAgICAgICBhY3JvRm9ybVJlZiA9IG51bGw7XG4gICAgICAgICAgICAgIGhhc1hmYURhdGFzZXRzRW50cnkgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh4ZmFEYXRhc2V0c1JlZiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgeGZhRGF0YXNldHNSZWYgPSB4cmVmLmdldE5ld1JlZigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh4ZmEpIHtcbiAgICAgICAgICBhY3JvRm9ybVJlZiA9IG51bGw7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiVW5zdXBwb3J0ZWQgWEZBIHR5cGUuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG5ld1hyZWZJbmZvID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgICBpZiAoeHJlZi50cmFpbGVyKSB7XG4gICAgICAgICAgY29uc3QgaW5mb09iaiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgY29uc3QgeHJlZkluZm8gPSB4cmVmLnRyYWlsZXIuZ2V0KFwiSW5mb1wiKSB8fCBudWxsO1xuXG4gICAgICAgICAgaWYgKHhyZWZJbmZvIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCkge1xuICAgICAgICAgICAgeHJlZkluZm8uZm9yRWFjaCgoa2V5LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoKDAsIF91dGlsLmlzU3RyaW5nKShrZXkpICYmICgwLCBfdXRpbC5pc1N0cmluZykodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgaW5mb09ialtrZXldID0gKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKSh2YWx1ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG5ld1hyZWZJbmZvID0ge1xuICAgICAgICAgICAgcm9vdFJlZjogeHJlZi50cmFpbGVyLmdldFJhdyhcIlJvb3RcIikgfHwgbnVsbCxcbiAgICAgICAgICAgIGVuY3J5cHRSZWY6IHhyZWYudHJhaWxlci5nZXRSYXcoXCJFbmNyeXB0XCIpIHx8IG51bGwsXG4gICAgICAgICAgICBuZXdSZWY6IHhyZWYuZ2V0TmV3UmVmKCksXG4gICAgICAgICAgICBpbmZvUmVmOiB4cmVmLnRyYWlsZXIuZ2V0UmF3KFwiSW5mb1wiKSB8fCBudWxsLFxuICAgICAgICAgICAgaW5mbzogaW5mb09iaixcbiAgICAgICAgICAgIGZpbGVJZHM6IHhyZWYudHJhaWxlci5nZXQoXCJJRFwiKSB8fCBudWxsLFxuICAgICAgICAgICAgc3RhcnRYUmVmLFxuICAgICAgICAgICAgZmlsZW5hbWVcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgeHJlZi5yZXNldE5ld1JlZigpO1xuICAgICAgICByZXR1cm4gKDAsIF93cml0ZXIuaW5jcmVtZW50YWxVcGRhdGUpKHtcbiAgICAgICAgICBvcmlnaW5hbERhdGE6IHN0cmVhbS5ieXRlcyxcbiAgICAgICAgICB4cmVmSW5mbzogbmV3WHJlZkluZm8sXG4gICAgICAgICAgbmV3UmVmcyxcbiAgICAgICAgICB4cmVmLFxuICAgICAgICAgIGhhc1hmYTogISF4ZmEsXG4gICAgICAgICAgeGZhRGF0YXNldHNSZWYsXG4gICAgICAgICAgaGFzWGZhRGF0YXNldHNFbnRyeSxcbiAgICAgICAgICBhY3JvRm9ybVJlZixcbiAgICAgICAgICBhY3JvRm9ybSxcbiAgICAgICAgICB4ZmFEYXRhXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaGFuZGxlci5vbihcIkdldE9wZXJhdG9yTGlzdFwiLCBmdW5jdGlvbiB3cGhTZXR1cFJlbmRlclBhZ2UoZGF0YSwgc2luaykge1xuICAgICAgY29uc3QgcGFnZUluZGV4ID0gZGF0YS5wYWdlSW5kZXg7XG4gICAgICBwZGZNYW5hZ2VyLmdldFBhZ2UocGFnZUluZGV4KS50aGVuKGZ1bmN0aW9uIChwYWdlKSB7XG4gICAgICAgIGNvbnN0IHRhc2sgPSBuZXcgV29ya2VyVGFzayhgR2V0T3BlcmF0b3JMaXN0OiBwYWdlICR7cGFnZUluZGV4fWApO1xuICAgICAgICBzdGFydFdvcmtlclRhc2sodGFzayk7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdmVyYm9zaXR5ID49IF91dGlsLlZlcmJvc2l0eUxldmVsLklORk9TID8gRGF0ZS5ub3coKSA6IDA7XG4gICAgICAgIHBhZ2UuZ2V0T3BlcmF0b3JMaXN0KHtcbiAgICAgICAgICBoYW5kbGVyLFxuICAgICAgICAgIHNpbmssXG4gICAgICAgICAgdGFzayxcbiAgICAgICAgICBpbnRlbnQ6IGRhdGEuaW50ZW50LFxuICAgICAgICAgIGNhY2hlS2V5OiBkYXRhLmNhY2hlS2V5LFxuICAgICAgICAgIGFubm90YXRpb25TdG9yYWdlOiBkYXRhLmFubm90YXRpb25TdG9yYWdlXG4gICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKG9wZXJhdG9yTGlzdEluZm8pIHtcbiAgICAgICAgICBmaW5pc2hXb3JrZXJUYXNrKHRhc2spO1xuXG4gICAgICAgICAgaWYgKHN0YXJ0KSB7XG4gICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoYHBhZ2U9JHtwYWdlSW5kZXggKyAxfSAtIGdldE9wZXJhdG9yTGlzdDogdGltZT1gICsgYCR7RGF0ZS5ub3coKSAtIHN0YXJ0fW1zLCBsZW49JHtvcGVyYXRvckxpc3RJbmZvLmxlbmd0aH1gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzaW5rLmNsb3NlKCk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICBmaW5pc2hXb3JrZXJUYXNrKHRhc2spO1xuXG4gICAgICAgICAgaWYgKHRhc2sudGVybWluYXRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGhhbmRsZXIuc2VuZChcIlVuc3VwcG9ydGVkRmVhdHVyZVwiLCB7XG4gICAgICAgICAgICBmZWF0dXJlSWQ6IF91dGlsLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yT3BlcmF0b3JMaXN0XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgc2luay5lcnJvcihyZWFzb24pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJHZXRUZXh0Q29udGVudFwiLCBmdW5jdGlvbiB3cGhFeHRyYWN0VGV4dChkYXRhLCBzaW5rKSB7XG4gICAgICBjb25zdCBwYWdlSW5kZXggPSBkYXRhLnBhZ2VJbmRleDtcbiAgICAgIHBkZk1hbmFnZXIuZ2V0UGFnZShwYWdlSW5kZXgpLnRoZW4oZnVuY3Rpb24gKHBhZ2UpIHtcbiAgICAgICAgY29uc3QgdGFzayA9IG5ldyBXb3JrZXJUYXNrKFwiR2V0VGV4dENvbnRlbnQ6IHBhZ2UgXCIgKyBwYWdlSW5kZXgpO1xuICAgICAgICBzdGFydFdvcmtlclRhc2sodGFzayk7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gdmVyYm9zaXR5ID49IF91dGlsLlZlcmJvc2l0eUxldmVsLklORk9TID8gRGF0ZS5ub3coKSA6IDA7XG4gICAgICAgIHBhZ2UuZXh0cmFjdFRleHRDb250ZW50KHtcbiAgICAgICAgICBoYW5kbGVyLFxuICAgICAgICAgIHRhc2ssXG4gICAgICAgICAgc2luayxcbiAgICAgICAgICBub3JtYWxpemVXaGl0ZXNwYWNlOiBkYXRhLm5vcm1hbGl6ZVdoaXRlc3BhY2UsXG4gICAgICAgICAgaW5jbHVkZU1hcmtlZENvbnRlbnQ6IGRhdGEuaW5jbHVkZU1hcmtlZENvbnRlbnQsXG4gICAgICAgICAgY29tYmluZVRleHRJdGVtczogZGF0YS5jb21iaW5lVGV4dEl0ZW1zXG4gICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGZpbmlzaFdvcmtlclRhc2sodGFzayk7XG5cbiAgICAgICAgICBpZiAoc3RhcnQpIHtcbiAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShgcGFnZT0ke3BhZ2VJbmRleCArIDF9IC0gZ2V0VGV4dENvbnRlbnQ6IHRpbWU9YCArIGAke0RhdGUubm93KCkgLSBzdGFydH1tc2ApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNpbmsuY2xvc2UoKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgIGZpbmlzaFdvcmtlclRhc2sodGFzayk7XG5cbiAgICAgICAgICBpZiAodGFzay50ZXJtaW5hdGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2luay5lcnJvcihyZWFzb24pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJHZXRTdHJ1Y3RUcmVlXCIsIGZ1bmN0aW9uIHdwaEdldFN0cnVjdFRyZWUoZGF0YSkge1xuICAgICAgcmV0dXJuIHBkZk1hbmFnZXIuZ2V0UGFnZShkYXRhLnBhZ2VJbmRleCkudGhlbihmdW5jdGlvbiAocGFnZSkge1xuICAgICAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmUocGFnZSwgXCJnZXRTdHJ1Y3RUcmVlXCIpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaGFuZGxlci5vbihcIkZvbnRGYWxsYmFja1wiLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgcmV0dXJuIHBkZk1hbmFnZXIuZm9udEZhbGxiYWNrKGRhdGEuaWQsIGhhbmRsZXIpO1xuICAgIH0pO1xuICAgIGhhbmRsZXIub24oXCJDbGVhbnVwXCIsIGZ1bmN0aW9uIHdwaENsZWFudXAoZGF0YSkge1xuICAgICAgcmV0dXJuIHBkZk1hbmFnZXIuY2xlYW51cCh0cnVlKTtcbiAgICB9KTtcbiAgICBoYW5kbGVyLm9uKFwiVGVybWluYXRlXCIsIGZ1bmN0aW9uIHdwaFRlcm1pbmF0ZShkYXRhKSB7XG4gICAgICB0ZXJtaW5hdGVkID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHdhaXRPbiA9IFtdO1xuXG4gICAgICBpZiAocGRmTWFuYWdlcikge1xuICAgICAgICBwZGZNYW5hZ2VyLnRlcm1pbmF0ZShuZXcgX3V0aWwuQWJvcnRFeGNlcHRpb24oXCJXb3JrZXIgd2FzIHRlcm1pbmF0ZWQuXCIpKTtcbiAgICAgICAgY29uc3QgY2xlYW51cFByb21pc2UgPSBwZGZNYW5hZ2VyLmNsZWFudXAoKTtcbiAgICAgICAgd2FpdE9uLnB1c2goY2xlYW51cFByb21pc2UpO1xuICAgICAgICBwZGZNYW5hZ2VyID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICgwLCBfcHJpbWl0aXZlcy5jbGVhclByaW1pdGl2ZUNhY2hlcykoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNhbmNlbFhIUnMpIHtcbiAgICAgICAgY2FuY2VsWEhScyhuZXcgX3V0aWwuQWJvcnRFeGNlcHRpb24oXCJXb3JrZXIgd2FzIHRlcm1pbmF0ZWQuXCIpKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCB0YXNrIG9mIFdvcmtlclRhc2tzKSB7XG4gICAgICAgIHdhaXRPbi5wdXNoKHRhc2suZmluaXNoZWQpO1xuICAgICAgICB0YXNrLnRlcm1pbmF0ZSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwod2FpdE9uKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaGFuZGxlci5kZXN0cm95KCk7XG4gICAgICAgIGhhbmRsZXIgPSBudWxsO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaGFuZGxlci5vbihcIlJlYWR5XCIsIGZ1bmN0aW9uIHdwaFJlYWR5KGRhdGEpIHtcbiAgICAgIHNldHVwRG9jKGRvY1BhcmFtcyk7XG4gICAgICBkb2NQYXJhbXMgPSBudWxsO1xuICAgIH0pO1xuICAgIHJldHVybiB3b3JrZXJIYW5kbGVyTmFtZTtcbiAgfVxuXG4gIHN0YXRpYyBpbml0aWFsaXplRnJvbVBvcnQocG9ydCkge1xuICAgIGNvbnN0IGhhbmRsZXIgPSBuZXcgX21lc3NhZ2VfaGFuZGxlci5NZXNzYWdlSGFuZGxlcihcIndvcmtlclwiLCBcIm1haW5cIiwgcG9ydCk7XG4gICAgV29ya2VyTWVzc2FnZUhhbmRsZXIuc2V0dXAoaGFuZGxlciwgcG9ydCk7XG4gICAgaGFuZGxlci5zZW5kKFwicmVhZHlcIiwgbnVsbCk7XG4gIH1cblxufVxuXG5leHBvcnRzLldvcmtlck1lc3NhZ2VIYW5kbGVyID0gV29ya2VyTWVzc2FnZUhhbmRsZXI7XG5cbmZ1bmN0aW9uIGlzTWVzc2FnZVBvcnQobWF5YmVQb3J0KSB7XG4gIHJldHVybiB0eXBlb2YgbWF5YmVQb3J0LnBvc3RNZXNzYWdlID09PSBcImZ1bmN0aW9uXCIgJiYgXCJvbm1lc3NhZ2VcIiBpbiBtYXliZVBvcnQ7XG59XG5cbmlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiICYmICFfaXNfbm9kZS5pc05vZGVKUyAmJiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBpc01lc3NhZ2VQb3J0KHNlbGYpKSB7XG4gIFdvcmtlck1lc3NhZ2VIYW5kbGVyLmluaXRpYWxpemVGcm9tUG9ydChzZWxmKTtcbn1cblxuLyoqKi8gfSksXG4vKiAyICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLlZlcmJvc2l0eUxldmVsID0gZXhwb3J0cy5VdGlsID0gZXhwb3J0cy5Vbmtub3duRXJyb3JFeGNlcHRpb24gPSBleHBvcnRzLlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbiA9IGV4cG9ydHMuVU5TVVBQT1JURURfRkVBVFVSRVMgPSBleHBvcnRzLlRleHRSZW5kZXJpbmdNb2RlID0gZXhwb3J0cy5TdHJlYW1UeXBlID0gZXhwb3J0cy5SZW5kZXJpbmdJbnRlbnRGbGFnID0gZXhwb3J0cy5QZXJtaXNzaW9uRmxhZyA9IGV4cG9ydHMuUGFzc3dvcmRSZXNwb25zZXMgPSBleHBvcnRzLlBhc3N3b3JkRXhjZXB0aW9uID0gZXhwb3J0cy5QYWdlQWN0aW9uRXZlbnRUeXBlID0gZXhwb3J0cy5PUFMgPSBleHBvcnRzLk1pc3NpbmdQREZFeGNlcHRpb24gPSBleHBvcnRzLklzTGl0dGxlRW5kaWFuQ2FjaGVkID0gZXhwb3J0cy5Jc0V2YWxTdXBwb3J0ZWRDYWNoZWQgPSBleHBvcnRzLkludmFsaWRQREZFeGNlcHRpb24gPSBleHBvcnRzLkltYWdlS2luZCA9IGV4cG9ydHMuSURFTlRJVFlfTUFUUklYID0gZXhwb3J0cy5Gb3JtYXRFcnJvciA9IGV4cG9ydHMuRm9udFR5cGUgPSBleHBvcnRzLkZPTlRfSURFTlRJVFlfTUFUUklYID0gZXhwb3J0cy5Eb2N1bWVudEFjdGlvbkV2ZW50VHlwZSA9IGV4cG9ydHMuQ01hcENvbXByZXNzaW9uVHlwZSA9IGV4cG9ydHMuQmFzZUV4Y2VwdGlvbiA9IGV4cG9ydHMuQW5ub3RhdGlvblR5cGUgPSBleHBvcnRzLkFubm90YXRpb25TdGF0ZU1vZGVsVHlwZSA9IGV4cG9ydHMuQW5ub3RhdGlvblJldmlld1N0YXRlID0gZXhwb3J0cy5Bbm5vdGF0aW9uUmVwbHlUeXBlID0gZXhwb3J0cy5Bbm5vdGF0aW9uTW9kZSA9IGV4cG9ydHMuQW5ub3RhdGlvbk1hcmtlZFN0YXRlID0gZXhwb3J0cy5Bbm5vdGF0aW9uRmxhZyA9IGV4cG9ydHMuQW5ub3RhdGlvbkZpZWxkRmxhZyA9IGV4cG9ydHMuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZSA9IGV4cG9ydHMuQW5ub3RhdGlvbkFjdGlvbkV2ZW50VHlwZSA9IGV4cG9ydHMuQWJvcnRFeGNlcHRpb24gPSB2b2lkIDA7XG5leHBvcnRzLmFycmF5Qnl0ZUxlbmd0aCA9IGFycmF5Qnl0ZUxlbmd0aDtcbmV4cG9ydHMuYXJyYXlzVG9CeXRlcyA9IGFycmF5c1RvQnl0ZXM7XG5leHBvcnRzLmFzc2VydCA9IGFzc2VydDtcbmV4cG9ydHMuYnl0ZXNUb1N0cmluZyA9IGJ5dGVzVG9TdHJpbmc7XG5leHBvcnRzLmNyZWF0ZU9iamVjdFVSTCA9IGNyZWF0ZU9iamVjdFVSTDtcbmV4cG9ydHMuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkgPSBjcmVhdGVQcm9taXNlQ2FwYWJpbGl0eTtcbmV4cG9ydHMuY3JlYXRlVmFsaWRBYnNvbHV0ZVVybCA9IGNyZWF0ZVZhbGlkQWJzb2x1dGVVcmw7XG5leHBvcnRzLmVzY2FwZVN0cmluZyA9IGVzY2FwZVN0cmluZztcbmV4cG9ydHMuZ2V0TW9kaWZpY2F0aW9uRGF0ZSA9IGdldE1vZGlmaWNhdGlvbkRhdGU7XG5leHBvcnRzLmdldFZlcmJvc2l0eUxldmVsID0gZ2V0VmVyYm9zaXR5TGV2ZWw7XG5leHBvcnRzLmluZm8gPSBpbmZvO1xuZXhwb3J0cy5pc0FycmF5QnVmZmVyID0gaXNBcnJheUJ1ZmZlcjtcbmV4cG9ydHMuaXNBcnJheUVxdWFsID0gaXNBcnJheUVxdWFsO1xuZXhwb3J0cy5pc0FzY2lpID0gaXNBc2NpaTtcbmV4cG9ydHMuaXNCb29sID0gaXNCb29sO1xuZXhwb3J0cy5pc051bSA9IGlzTnVtO1xuZXhwb3J0cy5pc1NhbWVPcmlnaW4gPSBpc1NhbWVPcmlnaW47XG5leHBvcnRzLmlzU3RyaW5nID0gaXNTdHJpbmc7XG5leHBvcnRzLm9iamVjdEZyb21NYXAgPSBvYmplY3RGcm9tTWFwO1xuZXhwb3J0cy5vYmplY3RTaXplID0gb2JqZWN0U2l6ZTtcbmV4cG9ydHMucmVtb3ZlTnVsbENoYXJhY3RlcnMgPSByZW1vdmVOdWxsQ2hhcmFjdGVycztcbmV4cG9ydHMuc2V0VmVyYm9zaXR5TGV2ZWwgPSBzZXRWZXJib3NpdHlMZXZlbDtcbmV4cG9ydHMuc2hhZG93ID0gc2hhZG93O1xuZXhwb3J0cy5zdHJpbmczMiA9IHN0cmluZzMyO1xuZXhwb3J0cy5zdHJpbmdUb0J5dGVzID0gc3RyaW5nVG9CeXRlcztcbmV4cG9ydHMuc3RyaW5nVG9QREZTdHJpbmcgPSBzdHJpbmdUb1BERlN0cmluZztcbmV4cG9ydHMuc3RyaW5nVG9VVEYxNkJFU3RyaW5nID0gc3RyaW5nVG9VVEYxNkJFU3RyaW5nO1xuZXhwb3J0cy5zdHJpbmdUb1VURjhTdHJpbmcgPSBzdHJpbmdUb1VURjhTdHJpbmc7XG5leHBvcnRzLnVucmVhY2hhYmxlID0gdW5yZWFjaGFibGU7XG5leHBvcnRzLnV0ZjhTdHJpbmdUb1N0cmluZyA9IHV0ZjhTdHJpbmdUb1N0cmluZztcbmV4cG9ydHMud2FybiA9IHdhcm47XG5cbl9fd19wZGZqc19yZXF1aXJlX18oMyk7XG5cbmNvbnN0IElERU5USVRZX01BVFJJWCA9IFsxLCAwLCAwLCAxLCAwLCAwXTtcbmV4cG9ydHMuSURFTlRJVFlfTUFUUklYID0gSURFTlRJVFlfTUFUUklYO1xuY29uc3QgRk9OVF9JREVOVElUWV9NQVRSSVggPSBbMC4wMDEsIDAsIDAsIDAuMDAxLCAwLCAwXTtcbmV4cG9ydHMuRk9OVF9JREVOVElUWV9NQVRSSVggPSBGT05UX0lERU5USVRZX01BVFJJWDtcbmNvbnN0IFJlbmRlcmluZ0ludGVudEZsYWcgPSB7XG4gIEFOWTogMHgwMSxcbiAgRElTUExBWTogMHgwMixcbiAgUFJJTlQ6IDB4MDQsXG4gIEFOTk9UQVRJT05TX0ZPUk1TOiAweDEwLFxuICBBTk5PVEFUSU9OU19TVE9SQUdFOiAweDIwLFxuICBBTk5PVEFUSU9OU19ESVNBQkxFOiAweDQwLFxuICBPUExJU1Q6IDB4MTAwXG59O1xuZXhwb3J0cy5SZW5kZXJpbmdJbnRlbnRGbGFnID0gUmVuZGVyaW5nSW50ZW50RmxhZztcbmNvbnN0IEFubm90YXRpb25Nb2RlID0ge1xuICBESVNBQkxFOiAwLFxuICBFTkFCTEU6IDEsXG4gIEVOQUJMRV9GT1JNUzogMixcbiAgRU5BQkxFX1NUT1JBR0U6IDNcbn07XG5leHBvcnRzLkFubm90YXRpb25Nb2RlID0gQW5ub3RhdGlvbk1vZGU7XG5jb25zdCBQZXJtaXNzaW9uRmxhZyA9IHtcbiAgUFJJTlQ6IDB4MDQsXG4gIE1PRElGWV9DT05URU5UUzogMHgwOCxcbiAgQ09QWTogMHgxMCxcbiAgTU9ESUZZX0FOTk9UQVRJT05TOiAweDIwLFxuICBGSUxMX0lOVEVSQUNUSVZFX0ZPUk1TOiAweDEwMCxcbiAgQ09QWV9GT1JfQUNDRVNTSUJJTElUWTogMHgyMDAsXG4gIEFTU0VNQkxFOiAweDQwMCxcbiAgUFJJTlRfSElHSF9RVUFMSVRZOiAweDgwMFxufTtcbmV4cG9ydHMuUGVybWlzc2lvbkZsYWcgPSBQZXJtaXNzaW9uRmxhZztcbmNvbnN0IFRleHRSZW5kZXJpbmdNb2RlID0ge1xuICBGSUxMOiAwLFxuICBTVFJPS0U6IDEsXG4gIEZJTExfU1RST0tFOiAyLFxuICBJTlZJU0lCTEU6IDMsXG4gIEZJTExfQUREX1RPX1BBVEg6IDQsXG4gIFNUUk9LRV9BRERfVE9fUEFUSDogNSxcbiAgRklMTF9TVFJPS0VfQUREX1RPX1BBVEg6IDYsXG4gIEFERF9UT19QQVRIOiA3LFxuICBGSUxMX1NUUk9LRV9NQVNLOiAzLFxuICBBRERfVE9fUEFUSF9GTEFHOiA0XG59O1xuZXhwb3J0cy5UZXh0UmVuZGVyaW5nTW9kZSA9IFRleHRSZW5kZXJpbmdNb2RlO1xuY29uc3QgSW1hZ2VLaW5kID0ge1xuICBHUkFZU0NBTEVfMUJQUDogMSxcbiAgUkdCXzI0QlBQOiAyLFxuICBSR0JBXzMyQlBQOiAzXG59O1xuZXhwb3J0cy5JbWFnZUtpbmQgPSBJbWFnZUtpbmQ7XG5jb25zdCBBbm5vdGF0aW9uVHlwZSA9IHtcbiAgVEVYVDogMSxcbiAgTElOSzogMixcbiAgRlJFRVRFWFQ6IDMsXG4gIExJTkU6IDQsXG4gIFNRVUFSRTogNSxcbiAgQ0lSQ0xFOiA2LFxuICBQT0xZR09OOiA3LFxuICBQT0xZTElORTogOCxcbiAgSElHSExJR0hUOiA5LFxuICBVTkRFUkxJTkU6IDEwLFxuICBTUVVJR0dMWTogMTEsXG4gIFNUUklLRU9VVDogMTIsXG4gIFNUQU1QOiAxMyxcbiAgQ0FSRVQ6IDE0LFxuICBJTks6IDE1LFxuICBQT1BVUDogMTYsXG4gIEZJTEVBVFRBQ0hNRU5UOiAxNyxcbiAgU09VTkQ6IDE4LFxuICBNT1ZJRTogMTksXG4gIFdJREdFVDogMjAsXG4gIFNDUkVFTjogMjEsXG4gIFBSSU5URVJNQVJLOiAyMixcbiAgVFJBUE5FVDogMjMsXG4gIFdBVEVSTUFSSzogMjQsXG4gIFRIUkVFRDogMjUsXG4gIFJFREFDVDogMjZcbn07XG5leHBvcnRzLkFubm90YXRpb25UeXBlID0gQW5ub3RhdGlvblR5cGU7XG5jb25zdCBBbm5vdGF0aW9uU3RhdGVNb2RlbFR5cGUgPSB7XG4gIE1BUktFRDogXCJNYXJrZWRcIixcbiAgUkVWSUVXOiBcIlJldmlld1wiXG59O1xuZXhwb3J0cy5Bbm5vdGF0aW9uU3RhdGVNb2RlbFR5cGUgPSBBbm5vdGF0aW9uU3RhdGVNb2RlbFR5cGU7XG5jb25zdCBBbm5vdGF0aW9uTWFya2VkU3RhdGUgPSB7XG4gIE1BUktFRDogXCJNYXJrZWRcIixcbiAgVU5NQVJLRUQ6IFwiVW5tYXJrZWRcIlxufTtcbmV4cG9ydHMuQW5ub3RhdGlvbk1hcmtlZFN0YXRlID0gQW5ub3RhdGlvbk1hcmtlZFN0YXRlO1xuY29uc3QgQW5ub3RhdGlvblJldmlld1N0YXRlID0ge1xuICBBQ0NFUFRFRDogXCJBY2NlcHRlZFwiLFxuICBSRUpFQ1RFRDogXCJSZWplY3RlZFwiLFxuICBDQU5DRUxMRUQ6IFwiQ2FuY2VsbGVkXCIsXG4gIENPTVBMRVRFRDogXCJDb21wbGV0ZWRcIixcbiAgTk9ORTogXCJOb25lXCJcbn07XG5leHBvcnRzLkFubm90YXRpb25SZXZpZXdTdGF0ZSA9IEFubm90YXRpb25SZXZpZXdTdGF0ZTtcbmNvbnN0IEFubm90YXRpb25SZXBseVR5cGUgPSB7XG4gIEdST1VQOiBcIkdyb3VwXCIsXG4gIFJFUExZOiBcIlJcIlxufTtcbmV4cG9ydHMuQW5ub3RhdGlvblJlcGx5VHlwZSA9IEFubm90YXRpb25SZXBseVR5cGU7XG5jb25zdCBBbm5vdGF0aW9uRmxhZyA9IHtcbiAgSU5WSVNJQkxFOiAweDAxLFxuICBISURERU46IDB4MDIsXG4gIFBSSU5UOiAweDA0LFxuICBOT1pPT006IDB4MDgsXG4gIE5PUk9UQVRFOiAweDEwLFxuICBOT1ZJRVc6IDB4MjAsXG4gIFJFQURPTkxZOiAweDQwLFxuICBMT0NLRUQ6IDB4ODAsXG4gIFRPR0dMRU5PVklFVzogMHgxMDAsXG4gIExPQ0tFRENPTlRFTlRTOiAweDIwMFxufTtcbmV4cG9ydHMuQW5ub3RhdGlvbkZsYWcgPSBBbm5vdGF0aW9uRmxhZztcbmNvbnN0IEFubm90YXRpb25GaWVsZEZsYWcgPSB7XG4gIFJFQURPTkxZOiAweDAwMDAwMDEsXG4gIFJFUVVJUkVEOiAweDAwMDAwMDIsXG4gIE5PRVhQT1JUOiAweDAwMDAwMDQsXG4gIE1VTFRJTElORTogMHgwMDAxMDAwLFxuICBQQVNTV09SRDogMHgwMDAyMDAwLFxuICBOT1RPR0dMRVRPT0ZGOiAweDAwMDQwMDAsXG4gIFJBRElPOiAweDAwMDgwMDAsXG4gIFBVU0hCVVRUT046IDB4MDAxMDAwMCxcbiAgQ09NQk86IDB4MDAyMDAwMCxcbiAgRURJVDogMHgwMDQwMDAwLFxuICBTT1JUOiAweDAwODAwMDAsXG4gIEZJTEVTRUxFQ1Q6IDB4MDEwMDAwMCxcbiAgTVVMVElTRUxFQ1Q6IDB4MDIwMDAwMCxcbiAgRE9OT1RTUEVMTENIRUNLOiAweDA0MDAwMDAsXG4gIERPTk9UU0NST0xMOiAweDA4MDAwMDAsXG4gIENPTUI6IDB4MTAwMDAwMCxcbiAgUklDSFRFWFQ6IDB4MjAwMDAwMCxcbiAgUkFESU9TSU5VTklTT046IDB4MjAwMDAwMCxcbiAgQ09NTUlUT05TRUxDSEFOR0U6IDB4NDAwMDAwMFxufTtcbmV4cG9ydHMuQW5ub3RhdGlvbkZpZWxkRmxhZyA9IEFubm90YXRpb25GaWVsZEZsYWc7XG5jb25zdCBBbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlID0ge1xuICBTT0xJRDogMSxcbiAgREFTSEVEOiAyLFxuICBCRVZFTEVEOiAzLFxuICBJTlNFVDogNCxcbiAgVU5ERVJMSU5FOiA1XG59O1xuZXhwb3J0cy5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlID0gQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZTtcbmNvbnN0IEFubm90YXRpb25BY3Rpb25FdmVudFR5cGUgPSB7XG4gIEU6IFwiTW91c2UgRW50ZXJcIixcbiAgWDogXCJNb3VzZSBFeGl0XCIsXG4gIEQ6IFwiTW91c2UgRG93blwiLFxuICBVOiBcIk1vdXNlIFVwXCIsXG4gIEZvOiBcIkZvY3VzXCIsXG4gIEJsOiBcIkJsdXJcIixcbiAgUE86IFwiUGFnZU9wZW5cIixcbiAgUEM6IFwiUGFnZUNsb3NlXCIsXG4gIFBWOiBcIlBhZ2VWaXNpYmxlXCIsXG4gIFBJOiBcIlBhZ2VJbnZpc2libGVcIixcbiAgSzogXCJLZXlzdHJva2VcIixcbiAgRjogXCJGb3JtYXRcIixcbiAgVjogXCJWYWxpZGF0ZVwiLFxuICBDOiBcIkNhbGN1bGF0ZVwiXG59O1xuZXhwb3J0cy5Bbm5vdGF0aW9uQWN0aW9uRXZlbnRUeXBlID0gQW5ub3RhdGlvbkFjdGlvbkV2ZW50VHlwZTtcbmNvbnN0IERvY3VtZW50QWN0aW9uRXZlbnRUeXBlID0ge1xuICBXQzogXCJXaWxsQ2xvc2VcIixcbiAgV1M6IFwiV2lsbFNhdmVcIixcbiAgRFM6IFwiRGlkU2F2ZVwiLFxuICBXUDogXCJXaWxsUHJpbnRcIixcbiAgRFA6IFwiRGlkUHJpbnRcIlxufTtcbmV4cG9ydHMuRG9jdW1lbnRBY3Rpb25FdmVudFR5cGUgPSBEb2N1bWVudEFjdGlvbkV2ZW50VHlwZTtcbmNvbnN0IFBhZ2VBY3Rpb25FdmVudFR5cGUgPSB7XG4gIE86IFwiUGFnZU9wZW5cIixcbiAgQzogXCJQYWdlQ2xvc2VcIlxufTtcbmV4cG9ydHMuUGFnZUFjdGlvbkV2ZW50VHlwZSA9IFBhZ2VBY3Rpb25FdmVudFR5cGU7XG5jb25zdCBTdHJlYW1UeXBlID0ge1xuICBVTktOT1dOOiBcIlVOS05PV05cIixcbiAgRkxBVEU6IFwiRkxBVEVcIixcbiAgTFpXOiBcIkxaV1wiLFxuICBEQ1Q6IFwiRENUXCIsXG4gIEpQWDogXCJKUFhcIixcbiAgSkJJRzogXCJKQklHXCIsXG4gIEE4NTogXCJBODVcIixcbiAgQUhYOiBcIkFIWFwiLFxuICBDQ0Y6IFwiQ0NGXCIsXG4gIFJMWDogXCJSTFhcIlxufTtcbmV4cG9ydHMuU3RyZWFtVHlwZSA9IFN0cmVhbVR5cGU7XG5jb25zdCBGb250VHlwZSA9IHtcbiAgVU5LTk9XTjogXCJVTktOT1dOXCIsXG4gIFRZUEUxOiBcIlRZUEUxXCIsXG4gIFRZUEUxU1RBTkRBUkQ6IFwiVFlQRTFTVEFOREFSRFwiLFxuICBUWVBFMUM6IFwiVFlQRTFDXCIsXG4gIENJREZPTlRUWVBFMDogXCJDSURGT05UVFlQRTBcIixcbiAgQ0lERk9OVFRZUEUwQzogXCJDSURGT05UVFlQRTBDXCIsXG4gIFRSVUVUWVBFOiBcIlRSVUVUWVBFXCIsXG4gIENJREZPTlRUWVBFMjogXCJDSURGT05UVFlQRTJcIixcbiAgVFlQRTM6IFwiVFlQRTNcIixcbiAgT1BFTlRZUEU6IFwiT1BFTlRZUEVcIixcbiAgVFlQRTA6IFwiVFlQRTBcIixcbiAgTU1UWVBFMTogXCJNTVRZUEUxXCJcbn07XG5leHBvcnRzLkZvbnRUeXBlID0gRm9udFR5cGU7XG5jb25zdCBWZXJib3NpdHlMZXZlbCA9IHtcbiAgRVJST1JTOiAwLFxuICBXQVJOSU5HUzogMSxcbiAgSU5GT1M6IDVcbn07XG5leHBvcnRzLlZlcmJvc2l0eUxldmVsID0gVmVyYm9zaXR5TGV2ZWw7XG5jb25zdCBDTWFwQ29tcHJlc3Npb25UeXBlID0ge1xuICBOT05FOiAwLFxuICBCSU5BUlk6IDEsXG4gIFNUUkVBTTogMlxufTtcbmV4cG9ydHMuQ01hcENvbXByZXNzaW9uVHlwZSA9IENNYXBDb21wcmVzc2lvblR5cGU7XG5jb25zdCBPUFMgPSB7XG4gIGRlcGVuZGVuY3k6IDEsXG4gIHNldExpbmVXaWR0aDogMixcbiAgc2V0TGluZUNhcDogMyxcbiAgc2V0TGluZUpvaW46IDQsXG4gIHNldE1pdGVyTGltaXQ6IDUsXG4gIHNldERhc2g6IDYsXG4gIHNldFJlbmRlcmluZ0ludGVudDogNyxcbiAgc2V0RmxhdG5lc3M6IDgsXG4gIHNldEdTdGF0ZTogOSxcbiAgc2F2ZTogMTAsXG4gIHJlc3RvcmU6IDExLFxuICB0cmFuc2Zvcm06IDEyLFxuICBtb3ZlVG86IDEzLFxuICBsaW5lVG86IDE0LFxuICBjdXJ2ZVRvOiAxNSxcbiAgY3VydmVUbzI6IDE2LFxuICBjdXJ2ZVRvMzogMTcsXG4gIGNsb3NlUGF0aDogMTgsXG4gIHJlY3RhbmdsZTogMTksXG4gIHN0cm9rZTogMjAsXG4gIGNsb3NlU3Ryb2tlOiAyMSxcbiAgZmlsbDogMjIsXG4gIGVvRmlsbDogMjMsXG4gIGZpbGxTdHJva2U6IDI0LFxuICBlb0ZpbGxTdHJva2U6IDI1LFxuICBjbG9zZUZpbGxTdHJva2U6IDI2LFxuICBjbG9zZUVPRmlsbFN0cm9rZTogMjcsXG4gIGVuZFBhdGg6IDI4LFxuICBjbGlwOiAyOSxcbiAgZW9DbGlwOiAzMCxcbiAgYmVnaW5UZXh0OiAzMSxcbiAgZW5kVGV4dDogMzIsXG4gIHNldENoYXJTcGFjaW5nOiAzMyxcbiAgc2V0V29yZFNwYWNpbmc6IDM0LFxuICBzZXRIU2NhbGU6IDM1LFxuICBzZXRMZWFkaW5nOiAzNixcbiAgc2V0Rm9udDogMzcsXG4gIHNldFRleHRSZW5kZXJpbmdNb2RlOiAzOCxcbiAgc2V0VGV4dFJpc2U6IDM5LFxuICBtb3ZlVGV4dDogNDAsXG4gIHNldExlYWRpbmdNb3ZlVGV4dDogNDEsXG4gIHNldFRleHRNYXRyaXg6IDQyLFxuICBuZXh0TGluZTogNDMsXG4gIHNob3dUZXh0OiA0NCxcbiAgc2hvd1NwYWNlZFRleHQ6IDQ1LFxuICBuZXh0TGluZVNob3dUZXh0OiA0NixcbiAgbmV4dExpbmVTZXRTcGFjaW5nU2hvd1RleHQ6IDQ3LFxuICBzZXRDaGFyV2lkdGg6IDQ4LFxuICBzZXRDaGFyV2lkdGhBbmRCb3VuZHM6IDQ5LFxuICBzZXRTdHJva2VDb2xvclNwYWNlOiA1MCxcbiAgc2V0RmlsbENvbG9yU3BhY2U6IDUxLFxuICBzZXRTdHJva2VDb2xvcjogNTIsXG4gIHNldFN0cm9rZUNvbG9yTjogNTMsXG4gIHNldEZpbGxDb2xvcjogNTQsXG4gIHNldEZpbGxDb2xvck46IDU1LFxuICBzZXRTdHJva2VHcmF5OiA1NixcbiAgc2V0RmlsbEdyYXk6IDU3LFxuICBzZXRTdHJva2VSR0JDb2xvcjogNTgsXG4gIHNldEZpbGxSR0JDb2xvcjogNTksXG4gIHNldFN0cm9rZUNNWUtDb2xvcjogNjAsXG4gIHNldEZpbGxDTVlLQ29sb3I6IDYxLFxuICBzaGFkaW5nRmlsbDogNjIsXG4gIGJlZ2luSW5saW5lSW1hZ2U6IDYzLFxuICBiZWdpbkltYWdlRGF0YTogNjQsXG4gIGVuZElubGluZUltYWdlOiA2NSxcbiAgcGFpbnRYT2JqZWN0OiA2NixcbiAgbWFya1BvaW50OiA2NyxcbiAgbWFya1BvaW50UHJvcHM6IDY4LFxuICBiZWdpbk1hcmtlZENvbnRlbnQ6IDY5LFxuICBiZWdpbk1hcmtlZENvbnRlbnRQcm9wczogNzAsXG4gIGVuZE1hcmtlZENvbnRlbnQ6IDcxLFxuICBiZWdpbkNvbXBhdDogNzIsXG4gIGVuZENvbXBhdDogNzMsXG4gIHBhaW50Rm9ybVhPYmplY3RCZWdpbjogNzQsXG4gIHBhaW50Rm9ybVhPYmplY3RFbmQ6IDc1LFxuICBiZWdpbkdyb3VwOiA3NixcbiAgZW5kR3JvdXA6IDc3LFxuICBiZWdpbkFubm90YXRpb25zOiA3OCxcbiAgZW5kQW5ub3RhdGlvbnM6IDc5LFxuICBiZWdpbkFubm90YXRpb246IDgwLFxuICBlbmRBbm5vdGF0aW9uOiA4MSxcbiAgcGFpbnRKcGVnWE9iamVjdDogODIsXG4gIHBhaW50SW1hZ2VNYXNrWE9iamVjdDogODMsXG4gIHBhaW50SW1hZ2VNYXNrWE9iamVjdEdyb3VwOiA4NCxcbiAgcGFpbnRJbWFnZVhPYmplY3Q6IDg1LFxuICBwYWludElubGluZUltYWdlWE9iamVjdDogODYsXG4gIHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXA6IDg3LFxuICBwYWludEltYWdlWE9iamVjdFJlcGVhdDogODgsXG4gIHBhaW50SW1hZ2VNYXNrWE9iamVjdFJlcGVhdDogODksXG4gIHBhaW50U29saWRDb2xvckltYWdlTWFzazogOTAsXG4gIGNvbnN0cnVjdFBhdGg6IDkxXG59O1xuZXhwb3J0cy5PUFMgPSBPUFM7XG5jb25zdCBVTlNVUFBPUlRFRF9GRUFUVVJFUyA9IHtcbiAgdW5rbm93bjogXCJ1bmtub3duXCIsXG4gIGZvcm1zOiBcImZvcm1zXCIsXG4gIGphdmFTY3JpcHQ6IFwiamF2YVNjcmlwdFwiLFxuICBzaWduYXR1cmVzOiBcInNpZ25hdHVyZXNcIixcbiAgc21hc2s6IFwic21hc2tcIixcbiAgc2hhZGluZ1BhdHRlcm46IFwic2hhZGluZ1BhdHRlcm5cIixcbiAgZm9udDogXCJmb250XCIsXG4gIGVycm9yVGlsaW5nUGF0dGVybjogXCJlcnJvclRpbGluZ1BhdHRlcm5cIixcbiAgZXJyb3JFeHRHU3RhdGU6IFwiZXJyb3JFeHRHU3RhdGVcIixcbiAgZXJyb3JYT2JqZWN0OiBcImVycm9yWE9iamVjdFwiLFxuICBlcnJvckZvbnRMb2FkVHlwZTM6IFwiZXJyb3JGb250TG9hZFR5cGUzXCIsXG4gIGVycm9yRm9udFN0YXRlOiBcImVycm9yRm9udFN0YXRlXCIsXG4gIGVycm9yRm9udE1pc3Npbmc6IFwiZXJyb3JGb250TWlzc2luZ1wiLFxuICBlcnJvckZvbnRUcmFuc2xhdGU6IFwiZXJyb3JGb250VHJhbnNsYXRlXCIsXG4gIGVycm9yQ29sb3JTcGFjZTogXCJlcnJvckNvbG9yU3BhY2VcIixcbiAgZXJyb3JPcGVyYXRvckxpc3Q6IFwiZXJyb3JPcGVyYXRvckxpc3RcIixcbiAgZXJyb3JGb250VG9Vbmljb2RlOiBcImVycm9yRm9udFRvVW5pY29kZVwiLFxuICBlcnJvckZvbnRMb2FkTmF0aXZlOiBcImVycm9yRm9udExvYWROYXRpdmVcIixcbiAgZXJyb3JGb250QnVpbGRQYXRoOiBcImVycm9yRm9udEJ1aWxkUGF0aFwiLFxuICBlcnJvckZvbnRHZXRQYXRoOiBcImVycm9yRm9udEdldFBhdGhcIixcbiAgZXJyb3JNYXJrZWRDb250ZW50OiBcImVycm9yTWFya2VkQ29udGVudFwiLFxuICBlcnJvckNvbnRlbnRTdWJTdHJlYW06IFwiZXJyb3JDb250ZW50U3ViU3RyZWFtXCJcbn07XG5leHBvcnRzLlVOU1VQUE9SVEVEX0ZFQVRVUkVTID0gVU5TVVBQT1JURURfRkVBVFVSRVM7XG5jb25zdCBQYXNzd29yZFJlc3BvbnNlcyA9IHtcbiAgTkVFRF9QQVNTV09SRDogMSxcbiAgSU5DT1JSRUNUX1BBU1NXT1JEOiAyXG59O1xuZXhwb3J0cy5QYXNzd29yZFJlc3BvbnNlcyA9IFBhc3N3b3JkUmVzcG9uc2VzO1xubGV0IHZlcmJvc2l0eSA9IFZlcmJvc2l0eUxldmVsLldBUk5JTkdTO1xuXG5mdW5jdGlvbiBzZXRWZXJib3NpdHlMZXZlbChsZXZlbCkge1xuICBpZiAoTnVtYmVyLmlzSW50ZWdlcihsZXZlbCkpIHtcbiAgICB2ZXJib3NpdHkgPSBsZXZlbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRWZXJib3NpdHlMZXZlbCgpIHtcbiAgcmV0dXJuIHZlcmJvc2l0eTtcbn1cblxuZnVuY3Rpb24gaW5mbyhtc2cpIHtcbiAgaWYgKHZlcmJvc2l0eSA+PSBWZXJib3NpdHlMZXZlbC5JTkZPUykge1xuICAgIGNvbnNvbGUubG9nKGBJbmZvOiAke21zZ31gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuKG1zZykge1xuICBpZiAodmVyYm9zaXR5ID49IFZlcmJvc2l0eUxldmVsLldBUk5JTkdTKSB7XG4gICAgY29uc29sZS5sb2coYFdhcm5pbmc6ICR7bXNnfWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVucmVhY2hhYmxlKG1zZykge1xuICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0KGNvbmQsIG1zZykge1xuICBpZiAoIWNvbmQpIHtcbiAgICB1bnJlYWNoYWJsZShtc2cpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzU2FtZU9yaWdpbihiYXNlVXJsLCBvdGhlclVybCkge1xuICBsZXQgYmFzZTtcblxuICB0cnkge1xuICAgIGJhc2UgPSBuZXcgVVJMKGJhc2VVcmwpO1xuXG4gICAgaWYgKCFiYXNlLm9yaWdpbiB8fCBiYXNlLm9yaWdpbiA9PT0gXCJudWxsXCIpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBvdGhlciA9IG5ldyBVUkwob3RoZXJVcmwsIGJhc2UpO1xuICByZXR1cm4gYmFzZS5vcmlnaW4gPT09IG90aGVyLm9yaWdpbjtcbn1cblxuZnVuY3Rpb24gX2lzVmFsaWRQcm90b2NvbCh1cmwpIHtcbiAgaWYgKCF1cmwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzd2l0Y2ggKHVybC5wcm90b2NvbCkge1xuICAgIGNhc2UgXCJodHRwOlwiOlxuICAgIGNhc2UgXCJodHRwczpcIjpcbiAgICBjYXNlIFwiZnRwOlwiOlxuICAgIGNhc2UgXCJtYWlsdG86XCI6XG4gICAgY2FzZSBcInRlbDpcIjpcbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVWYWxpZEFic29sdXRlVXJsKHVybCwgYmFzZVVybCA9IG51bGwsIG9wdGlvbnMgPSBudWxsKSB7XG4gIGlmICghdXJsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB0cnkge1xuICAgIGlmIChvcHRpb25zICYmIHR5cGVvZiB1cmwgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGlmIChvcHRpb25zLmFkZERlZmF1bHRQcm90b2NvbCAmJiB1cmwuc3RhcnRzV2l0aChcInd3dy5cIikpIHtcbiAgICAgICAgY29uc3QgZG90cyA9IHVybC5tYXRjaCgvXFwuL2cpO1xuXG4gICAgICAgIGlmIChkb3RzICYmIGRvdHMubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICB1cmwgPSBgaHR0cDovLyR7dXJsfWA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMudHJ5Q29udmVydEVuY29kaW5nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdXJsID0gc3RyaW5nVG9VVEY4U3RyaW5nKHVybCk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7fVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGFic29sdXRlVXJsID0gYmFzZVVybCA/IG5ldyBVUkwodXJsLCBiYXNlVXJsKSA6IG5ldyBVUkwodXJsKTtcblxuICAgIGlmIChfaXNWYWxpZFByb3RvY29sKGFic29sdXRlVXJsKSkge1xuICAgICAgcmV0dXJuIGFic29sdXRlVXJsO1xuICAgIH1cbiAgfSBjYXRjaCAoZXgpIHt9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIHNoYWRvdyhvYmosIHByb3AsIHZhbHVlKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIHByb3AsIHtcbiAgICB2YWx1ZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSk7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuY29uc3QgQmFzZUV4Y2VwdGlvbiA9IGZ1bmN0aW9uIEJhc2VFeGNlcHRpb25DbG9zdXJlKCkge1xuICBmdW5jdGlvbiBCYXNlRXhjZXB0aW9uKG1lc3NhZ2UsIG5hbWUpIHtcbiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gQmFzZUV4Y2VwdGlvbikge1xuICAgICAgdW5yZWFjaGFibGUoXCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlRXhjZXB0aW9uLlwiKTtcbiAgICB9XG5cbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gIH1cblxuICBCYXNlRXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuICBCYXNlRXhjZXB0aW9uLmNvbnN0cnVjdG9yID0gQmFzZUV4Y2VwdGlvbjtcbiAgcmV0dXJuIEJhc2VFeGNlcHRpb247XG59KCk7XG5cbmV4cG9ydHMuQmFzZUV4Y2VwdGlvbiA9IEJhc2VFeGNlcHRpb247XG5cbmNsYXNzIFBhc3N3b3JkRXhjZXB0aW9uIGV4dGVuZHMgQmFzZUV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKG1zZywgY29kZSkge1xuICAgIHN1cGVyKG1zZywgXCJQYXNzd29yZEV4Y2VwdGlvblwiKTtcbiAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICB9XG5cbn1cblxuZXhwb3J0cy5QYXNzd29yZEV4Y2VwdGlvbiA9IFBhc3N3b3JkRXhjZXB0aW9uO1xuXG5jbGFzcyBVbmtub3duRXJyb3JFeGNlcHRpb24gZXh0ZW5kcyBCYXNlRXhjZXB0aW9uIHtcbiAgY29uc3RydWN0b3IobXNnLCBkZXRhaWxzKSB7XG4gICAgc3VwZXIobXNnLCBcIlVua25vd25FcnJvckV4Y2VwdGlvblwiKTtcbiAgICB0aGlzLmRldGFpbHMgPSBkZXRhaWxzO1xuICB9XG5cbn1cblxuZXhwb3J0cy5Vbmtub3duRXJyb3JFeGNlcHRpb24gPSBVbmtub3duRXJyb3JFeGNlcHRpb247XG5cbmNsYXNzIEludmFsaWRQREZFeGNlcHRpb24gZXh0ZW5kcyBCYXNlRXhjZXB0aW9uIHtcbiAgY29uc3RydWN0b3IobXNnKSB7XG4gICAgc3VwZXIobXNnLCBcIkludmFsaWRQREZFeGNlcHRpb25cIik7XG4gIH1cblxufVxuXG5leHBvcnRzLkludmFsaWRQREZFeGNlcHRpb24gPSBJbnZhbGlkUERGRXhjZXB0aW9uO1xuXG5jbGFzcyBNaXNzaW5nUERGRXhjZXB0aW9uIGV4dGVuZHMgQmFzZUV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKG1zZykge1xuICAgIHN1cGVyKG1zZywgXCJNaXNzaW5nUERGRXhjZXB0aW9uXCIpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5NaXNzaW5nUERGRXhjZXB0aW9uID0gTWlzc2luZ1BERkV4Y2VwdGlvbjtcblxuY2xhc3MgVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uIGV4dGVuZHMgQmFzZUV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKG1zZywgc3RhdHVzKSB7XG4gICAgc3VwZXIobXNnLCBcIlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvblwiKTtcbiAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcbiAgfVxuXG59XG5cbmV4cG9ydHMuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uID0gVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uO1xuXG5jbGFzcyBGb3JtYXRFcnJvciBleHRlbmRzIEJhc2VFeGNlcHRpb24ge1xuICBjb25zdHJ1Y3Rvcihtc2cpIHtcbiAgICBzdXBlcihtc2csIFwiRm9ybWF0RXJyb3JcIik7XG4gIH1cblxufVxuXG5leHBvcnRzLkZvcm1hdEVycm9yID0gRm9ybWF0RXJyb3I7XG5cbmNsYXNzIEFib3J0RXhjZXB0aW9uIGV4dGVuZHMgQmFzZUV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKG1zZykge1xuICAgIHN1cGVyKG1zZywgXCJBYm9ydEV4Y2VwdGlvblwiKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuQWJvcnRFeGNlcHRpb24gPSBBYm9ydEV4Y2VwdGlvbjtcbmNvbnN0IE51bGxDaGFyYWN0ZXJzUmVnRXhwID0gL1xceDAwKy9nO1xuY29uc3QgSW52aXNpYmxlQ2hhcmFjdGVyc1JlZ0V4cCA9IC9bXFx4MDEtXFx4MUZdL2c7XG5cbmZ1bmN0aW9uIHJlbW92ZU51bGxDaGFyYWN0ZXJzKHN0ciwgcmVwbGFjZUludmlzaWJsZSA9IGZhbHNlKSB7XG4gIGlmICh0eXBlb2Ygc3RyICE9PSBcInN0cmluZ1wiKSB7XG4gICAgd2FybihcIlRoZSBhcmd1bWVudCBmb3IgcmVtb3ZlTnVsbENoYXJhY3RlcnMgbXVzdCBiZSBhIHN0cmluZy5cIik7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIGlmIChyZXBsYWNlSW52aXNpYmxlKSB7XG4gICAgc3RyID0gc3RyLnJlcGxhY2UoSW52aXNpYmxlQ2hhcmFjdGVyc1JlZ0V4cCwgXCIgXCIpO1xuICB9XG5cbiAgcmV0dXJuIHN0ci5yZXBsYWNlKE51bGxDaGFyYWN0ZXJzUmVnRXhwLCBcIlwiKTtcbn1cblxuZnVuY3Rpb24gYnl0ZXNUb1N0cmluZyhieXRlcykge1xuICBhc3NlcnQoYnl0ZXMgIT09IG51bGwgJiYgdHlwZW9mIGJ5dGVzID09PSBcIm9iamVjdFwiICYmIGJ5dGVzLmxlbmd0aCAhPT0gdW5kZWZpbmVkLCBcIkludmFsaWQgYXJndW1lbnQgZm9yIGJ5dGVzVG9TdHJpbmdcIik7XG4gIGNvbnN0IGxlbmd0aCA9IGJ5dGVzLmxlbmd0aDtcbiAgY29uc3QgTUFYX0FSR1VNRU5UX0NPVU5UID0gODE5MjtcblxuICBpZiAobGVuZ3RoIDwgTUFYX0FSR1VNRU5UX0NPVU5UKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgYnl0ZXMpO1xuICB9XG5cbiAgY29uc3Qgc3RyQnVmID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gTUFYX0FSR1VNRU5UX0NPVU5UKSB7XG4gICAgY29uc3QgY2h1bmtFbmQgPSBNYXRoLm1pbihpICsgTUFYX0FSR1VNRU5UX0NPVU5ULCBsZW5ndGgpO1xuICAgIGNvbnN0IGNodW5rID0gYnl0ZXMuc3ViYXJyYXkoaSwgY2h1bmtFbmQpO1xuICAgIHN0ckJ1Zi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgY2h1bmspKTtcbiAgfVxuXG4gIHJldHVybiBzdHJCdWYuam9pbihcIlwiKTtcbn1cblxuZnVuY3Rpb24gc3RyaW5nVG9CeXRlcyhzdHIpIHtcbiAgYXNzZXJ0KHR5cGVvZiBzdHIgPT09IFwic3RyaW5nXCIsIFwiSW52YWxpZCBhcmd1bWVudCBmb3Igc3RyaW5nVG9CeXRlc1wiKTtcbiAgY29uc3QgbGVuZ3RoID0gc3RyLmxlbmd0aDtcbiAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShsZW5ndGgpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBieXRlc1tpXSA9IHN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZjtcbiAgfVxuXG4gIHJldHVybiBieXRlcztcbn1cblxuZnVuY3Rpb24gYXJyYXlCeXRlTGVuZ3RoKGFycikge1xuICBpZiAoYXJyLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGFyci5sZW5ndGg7XG4gIH1cblxuICBhc3NlcnQoYXJyLmJ5dGVMZW5ndGggIT09IHVuZGVmaW5lZCwgXCJhcnJheUJ5dGVMZW5ndGggLSBpbnZhbGlkIGFyZ3VtZW50LlwiKTtcbiAgcmV0dXJuIGFyci5ieXRlTGVuZ3RoO1xufVxuXG5mdW5jdGlvbiBhcnJheXNUb0J5dGVzKGFycikge1xuICBjb25zdCBsZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gIGlmIChsZW5ndGggPT09IDEgJiYgYXJyWzBdIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgIHJldHVybiBhcnJbMF07XG4gIH1cblxuICBsZXQgcmVzdWx0TGVuZ3RoID0gMDtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgcmVzdWx0TGVuZ3RoICs9IGFycmF5Qnl0ZUxlbmd0aChhcnJbaV0pO1xuICB9XG5cbiAgbGV0IHBvcyA9IDA7XG4gIGNvbnN0IGRhdGEgPSBuZXcgVWludDhBcnJheShyZXN1bHRMZW5ndGgpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgaXRlbSA9IGFycltpXTtcblxuICAgIGlmICghKGl0ZW0gaW5zdGFuY2VvZiBVaW50OEFycmF5KSkge1xuICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGl0ZW0gPSBzdHJpbmdUb0J5dGVzKGl0ZW0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXRlbSA9IG5ldyBVaW50OEFycmF5KGl0ZW0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGl0ZW1MZW5ndGggPSBpdGVtLmJ5dGVMZW5ndGg7XG4gICAgZGF0YS5zZXQoaXRlbSwgcG9zKTtcbiAgICBwb3MgKz0gaXRlbUxlbmd0aDtcbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBzdHJpbmczMih2YWx1ZSkge1xuICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSh2YWx1ZSA+PiAyNCAmIDB4ZmYsIHZhbHVlID4+IDE2ICYgMHhmZiwgdmFsdWUgPj4gOCAmIDB4ZmYsIHZhbHVlICYgMHhmZik7XG59XG5cbmZ1bmN0aW9uIG9iamVjdFNpemUob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aDtcbn1cblxuZnVuY3Rpb24gb2JqZWN0RnJvbU1hcChtYXApIHtcbiAgY29uc3Qgb2JqID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBtYXApIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuZnVuY3Rpb24gaXNMaXR0bGVFbmRpYW4oKSB7XG4gIGNvbnN0IGJ1ZmZlcjggPSBuZXcgVWludDhBcnJheSg0KTtcbiAgYnVmZmVyOFswXSA9IDE7XG4gIGNvbnN0IHZpZXczMiA9IG5ldyBVaW50MzJBcnJheShidWZmZXI4LmJ1ZmZlciwgMCwgMSk7XG4gIHJldHVybiB2aWV3MzJbMF0gPT09IDE7XG59XG5cbmNvbnN0IElzTGl0dGxlRW5kaWFuQ2FjaGVkID0ge1xuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHNoYWRvdyh0aGlzLCBcInZhbHVlXCIsIGlzTGl0dGxlRW5kaWFuKCkpO1xuICB9XG5cbn07XG5leHBvcnRzLklzTGl0dGxlRW5kaWFuQ2FjaGVkID0gSXNMaXR0bGVFbmRpYW5DYWNoZWQ7XG5cbmZ1bmN0aW9uIGlzRXZhbFN1cHBvcnRlZCgpIHtcbiAgdHJ5IHtcbiAgICBuZXcgRnVuY3Rpb24oXCJcIik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuY29uc3QgSXNFdmFsU3VwcG9ydGVkQ2FjaGVkID0ge1xuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHNoYWRvdyh0aGlzLCBcInZhbHVlXCIsIGlzRXZhbFN1cHBvcnRlZCgpKTtcbiAgfVxuXG59O1xuZXhwb3J0cy5Jc0V2YWxTdXBwb3J0ZWRDYWNoZWQgPSBJc0V2YWxTdXBwb3J0ZWRDYWNoZWQ7XG5jb25zdCBoZXhOdW1iZXJzID0gWy4uLkFycmF5KDI1Nikua2V5cygpXS5tYXAobiA9PiBuLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCBcIjBcIikpO1xuXG5jbGFzcyBVdGlsIHtcbiAgc3RhdGljIG1ha2VIZXhDb2xvcihyLCBnLCBiKSB7XG4gICAgcmV0dXJuIGAjJHtoZXhOdW1iZXJzW3JdfSR7aGV4TnVtYmVyc1tnXX0ke2hleE51bWJlcnNbYl19YDtcbiAgfVxuXG4gIHN0YXRpYyB0cmFuc2Zvcm0obTEsIG0yKSB7XG4gICAgcmV0dXJuIFttMVswXSAqIG0yWzBdICsgbTFbMl0gKiBtMlsxXSwgbTFbMV0gKiBtMlswXSArIG0xWzNdICogbTJbMV0sIG0xWzBdICogbTJbMl0gKyBtMVsyXSAqIG0yWzNdLCBtMVsxXSAqIG0yWzJdICsgbTFbM10gKiBtMlszXSwgbTFbMF0gKiBtMls0XSArIG0xWzJdICogbTJbNV0gKyBtMVs0XSwgbTFbMV0gKiBtMls0XSArIG0xWzNdICogbTJbNV0gKyBtMVs1XV07XG4gIH1cblxuICBzdGF0aWMgYXBwbHlUcmFuc2Zvcm0ocCwgbSkge1xuICAgIGNvbnN0IHh0ID0gcFswXSAqIG1bMF0gKyBwWzFdICogbVsyXSArIG1bNF07XG4gICAgY29uc3QgeXQgPSBwWzBdICogbVsxXSArIHBbMV0gKiBtWzNdICsgbVs1XTtcbiAgICByZXR1cm4gW3h0LCB5dF07XG4gIH1cblxuICBzdGF0aWMgYXBwbHlJbnZlcnNlVHJhbnNmb3JtKHAsIG0pIHtcbiAgICBjb25zdCBkID0gbVswXSAqIG1bM10gLSBtWzFdICogbVsyXTtcbiAgICBjb25zdCB4dCA9IChwWzBdICogbVszXSAtIHBbMV0gKiBtWzJdICsgbVsyXSAqIG1bNV0gLSBtWzRdICogbVszXSkgLyBkO1xuICAgIGNvbnN0IHl0ID0gKC1wWzBdICogbVsxXSArIHBbMV0gKiBtWzBdICsgbVs0XSAqIG1bMV0gLSBtWzVdICogbVswXSkgLyBkO1xuICAgIHJldHVybiBbeHQsIHl0XTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRBeGlhbEFsaWduZWRCb3VuZGluZ0JveChyLCBtKSB7XG4gICAgY29uc3QgcDEgPSBVdGlsLmFwcGx5VHJhbnNmb3JtKHIsIG0pO1xuICAgIGNvbnN0IHAyID0gVXRpbC5hcHBseVRyYW5zZm9ybShyLnNsaWNlKDIsIDQpLCBtKTtcbiAgICBjb25zdCBwMyA9IFV0aWwuYXBwbHlUcmFuc2Zvcm0oW3JbMF0sIHJbM11dLCBtKTtcbiAgICBjb25zdCBwNCA9IFV0aWwuYXBwbHlUcmFuc2Zvcm0oW3JbMl0sIHJbMV1dLCBtKTtcbiAgICByZXR1cm4gW01hdGgubWluKHAxWzBdLCBwMlswXSwgcDNbMF0sIHA0WzBdKSwgTWF0aC5taW4ocDFbMV0sIHAyWzFdLCBwM1sxXSwgcDRbMV0pLCBNYXRoLm1heChwMVswXSwgcDJbMF0sIHAzWzBdLCBwNFswXSksIE1hdGgubWF4KHAxWzFdLCBwMlsxXSwgcDNbMV0sIHA0WzFdKV07XG4gIH1cblxuICBzdGF0aWMgaW52ZXJzZVRyYW5zZm9ybShtKSB7XG4gICAgY29uc3QgZCA9IG1bMF0gKiBtWzNdIC0gbVsxXSAqIG1bMl07XG4gICAgcmV0dXJuIFttWzNdIC8gZCwgLW1bMV0gLyBkLCAtbVsyXSAvIGQsIG1bMF0gLyBkLCAobVsyXSAqIG1bNV0gLSBtWzRdICogbVszXSkgLyBkLCAobVs0XSAqIG1bMV0gLSBtWzVdICogbVswXSkgLyBkXTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseTNkVHJhbnNmb3JtKG0sIHYpIHtcbiAgICByZXR1cm4gW21bMF0gKiB2WzBdICsgbVsxXSAqIHZbMV0gKyBtWzJdICogdlsyXSwgbVszXSAqIHZbMF0gKyBtWzRdICogdlsxXSArIG1bNV0gKiB2WzJdLCBtWzZdICogdlswXSArIG1bN10gKiB2WzFdICsgbVs4XSAqIHZbMl1dO1xuICB9XG5cbiAgc3RhdGljIHNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKG0pIHtcbiAgICBjb25zdCB0cmFuc3Bvc2UgPSBbbVswXSwgbVsyXSwgbVsxXSwgbVszXV07XG4gICAgY29uc3QgYSA9IG1bMF0gKiB0cmFuc3Bvc2VbMF0gKyBtWzFdICogdHJhbnNwb3NlWzJdO1xuICAgIGNvbnN0IGIgPSBtWzBdICogdHJhbnNwb3NlWzFdICsgbVsxXSAqIHRyYW5zcG9zZVszXTtcbiAgICBjb25zdCBjID0gbVsyXSAqIHRyYW5zcG9zZVswXSArIG1bM10gKiB0cmFuc3Bvc2VbMl07XG4gICAgY29uc3QgZCA9IG1bMl0gKiB0cmFuc3Bvc2VbMV0gKyBtWzNdICogdHJhbnNwb3NlWzNdO1xuICAgIGNvbnN0IGZpcnN0ID0gKGEgKyBkKSAvIDI7XG4gICAgY29uc3Qgc2Vjb25kID0gTWF0aC5zcXJ0KChhICsgZCkgKiogMiAtIDQgKiAoYSAqIGQgLSBjICogYikpIC8gMjtcbiAgICBjb25zdCBzeCA9IGZpcnN0ICsgc2Vjb25kIHx8IDE7XG4gICAgY29uc3Qgc3kgPSBmaXJzdCAtIHNlY29uZCB8fCAxO1xuICAgIHJldHVybiBbTWF0aC5zcXJ0KHN4KSwgTWF0aC5zcXJ0KHN5KV07XG4gIH1cblxuICBzdGF0aWMgbm9ybWFsaXplUmVjdChyZWN0KSB7XG4gICAgY29uc3QgciA9IHJlY3Quc2xpY2UoMCk7XG5cbiAgICBpZiAocmVjdFswXSA+IHJlY3RbMl0pIHtcbiAgICAgIHJbMF0gPSByZWN0WzJdO1xuICAgICAgclsyXSA9IHJlY3RbMF07XG4gICAgfVxuXG4gICAgaWYgKHJlY3RbMV0gPiByZWN0WzNdKSB7XG4gICAgICByWzFdID0gcmVjdFszXTtcbiAgICAgIHJbM10gPSByZWN0WzFdO1xuICAgIH1cblxuICAgIHJldHVybiByO1xuICB9XG5cbiAgc3RhdGljIGludGVyc2VjdChyZWN0MSwgcmVjdDIpIHtcbiAgICBmdW5jdGlvbiBjb21wYXJlKGEsIGIpIHtcbiAgICAgIHJldHVybiBhIC0gYjtcbiAgICB9XG5cbiAgICBjb25zdCBvcmRlcmVkWCA9IFtyZWN0MVswXSwgcmVjdDFbMl0sIHJlY3QyWzBdLCByZWN0MlsyXV0uc29ydChjb21wYXJlKTtcbiAgICBjb25zdCBvcmRlcmVkWSA9IFtyZWN0MVsxXSwgcmVjdDFbM10sIHJlY3QyWzFdLCByZWN0MlszXV0uc29ydChjb21wYXJlKTtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICByZWN0MSA9IFV0aWwubm9ybWFsaXplUmVjdChyZWN0MSk7XG4gICAgcmVjdDIgPSBVdGlsLm5vcm1hbGl6ZVJlY3QocmVjdDIpO1xuXG4gICAgaWYgKG9yZGVyZWRYWzBdID09PSByZWN0MVswXSAmJiBvcmRlcmVkWFsxXSA9PT0gcmVjdDJbMF0gfHwgb3JkZXJlZFhbMF0gPT09IHJlY3QyWzBdICYmIG9yZGVyZWRYWzFdID09PSByZWN0MVswXSkge1xuICAgICAgcmVzdWx0WzBdID0gb3JkZXJlZFhbMV07XG4gICAgICByZXN1bHRbMl0gPSBvcmRlcmVkWFsyXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKG9yZGVyZWRZWzBdID09PSByZWN0MVsxXSAmJiBvcmRlcmVkWVsxXSA9PT0gcmVjdDJbMV0gfHwgb3JkZXJlZFlbMF0gPT09IHJlY3QyWzFdICYmIG9yZGVyZWRZWzFdID09PSByZWN0MVsxXSkge1xuICAgICAgcmVzdWx0WzFdID0gb3JkZXJlZFlbMV07XG4gICAgICByZXN1bHRbM10gPSBvcmRlcmVkWVsyXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHN0YXRpYyBiZXppZXJCb3VuZGluZ0JveCh4MCwgeTAsIHgxLCB5MSwgeDIsIHkyLCB4MywgeTMpIHtcbiAgICBjb25zdCB0dmFsdWVzID0gW10sXG4gICAgICAgICAgYm91bmRzID0gW1tdLCBbXV07XG4gICAgbGV0IGEsIGIsIGMsIHQsIHQxLCB0MiwgYjJhYywgc3FydGIyYWM7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDI7ICsraSkge1xuICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgYiA9IDYgKiB4MCAtIDEyICogeDEgKyA2ICogeDI7XG4gICAgICAgIGEgPSAtMyAqIHgwICsgOSAqIHgxIC0gOSAqIHgyICsgMyAqIHgzO1xuICAgICAgICBjID0gMyAqIHgxIC0gMyAqIHgwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYiA9IDYgKiB5MCAtIDEyICogeTEgKyA2ICogeTI7XG4gICAgICAgIGEgPSAtMyAqIHkwICsgOSAqIHkxIC0gOSAqIHkyICsgMyAqIHkzO1xuICAgICAgICBjID0gMyAqIHkxIC0gMyAqIHkwO1xuICAgICAgfVxuXG4gICAgICBpZiAoTWF0aC5hYnMoYSkgPCAxZS0xMikge1xuICAgICAgICBpZiAoTWF0aC5hYnMoYikgPCAxZS0xMikge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdCA9IC1jIC8gYjtcblxuICAgICAgICBpZiAoMCA8IHQgJiYgdCA8IDEpIHtcbiAgICAgICAgICB0dmFsdWVzLnB1c2godCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgYjJhYyA9IGIgKiBiIC0gNCAqIGMgKiBhO1xuICAgICAgc3FydGIyYWMgPSBNYXRoLnNxcnQoYjJhYyk7XG5cbiAgICAgIGlmIChiMmFjIDwgMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdDEgPSAoLWIgKyBzcXJ0YjJhYykgLyAoMiAqIGEpO1xuXG4gICAgICBpZiAoMCA8IHQxICYmIHQxIDwgMSkge1xuICAgICAgICB0dmFsdWVzLnB1c2godDEpO1xuICAgICAgfVxuXG4gICAgICB0MiA9ICgtYiAtIHNxcnRiMmFjKSAvICgyICogYSk7XG5cbiAgICAgIGlmICgwIDwgdDIgJiYgdDIgPCAxKSB7XG4gICAgICAgIHR2YWx1ZXMucHVzaCh0Mik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGogPSB0dmFsdWVzLmxlbmd0aCxcbiAgICAgICAgbXQ7XG4gICAgY29uc3QgamxlbiA9IGo7XG5cbiAgICB3aGlsZSAoai0tKSB7XG4gICAgICB0ID0gdHZhbHVlc1tqXTtcbiAgICAgIG10ID0gMSAtIHQ7XG4gICAgICBib3VuZHNbMF1bal0gPSBtdCAqIG10ICogbXQgKiB4MCArIDMgKiBtdCAqIG10ICogdCAqIHgxICsgMyAqIG10ICogdCAqIHQgKiB4MiArIHQgKiB0ICogdCAqIHgzO1xuICAgICAgYm91bmRzWzFdW2pdID0gbXQgKiBtdCAqIG10ICogeTAgKyAzICogbXQgKiBtdCAqIHQgKiB5MSArIDMgKiBtdCAqIHQgKiB0ICogeTIgKyB0ICogdCAqIHQgKiB5MztcbiAgICB9XG5cbiAgICBib3VuZHNbMF1bamxlbl0gPSB4MDtcbiAgICBib3VuZHNbMV1bamxlbl0gPSB5MDtcbiAgICBib3VuZHNbMF1bamxlbiArIDFdID0geDM7XG4gICAgYm91bmRzWzFdW2psZW4gKyAxXSA9IHkzO1xuICAgIGJvdW5kc1swXS5sZW5ndGggPSBib3VuZHNbMV0ubGVuZ3RoID0gamxlbiArIDI7XG4gICAgcmV0dXJuIFtNYXRoLm1pbiguLi5ib3VuZHNbMF0pLCBNYXRoLm1pbiguLi5ib3VuZHNbMV0pLCBNYXRoLm1heCguLi5ib3VuZHNbMF0pLCBNYXRoLm1heCguLi5ib3VuZHNbMV0pXTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuVXRpbCA9IFV0aWw7XG5jb25zdCBQREZTdHJpbmdUcmFuc2xhdGVUYWJsZSA9IFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAweDJkOCwgMHgyYzcsIDB4MmM2LCAweDJkOSwgMHgyZGQsIDB4MmRiLCAweDJkYSwgMHgyZGMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB4MjAyMiwgMHgyMDIwLCAweDIwMjEsIDB4MjAyNiwgMHgyMDE0LCAweDIwMTMsIDB4MTkyLCAweDIwNDQsIDB4MjAzOSwgMHgyMDNhLCAweDIyMTIsIDB4MjAzMCwgMHgyMDFlLCAweDIwMWMsIDB4MjAxZCwgMHgyMDE4LCAweDIwMTksIDB4MjAxYSwgMHgyMTIyLCAweGZiMDEsIDB4ZmIwMiwgMHgxNDEsIDB4MTUyLCAweDE2MCwgMHgxNzgsIDB4MTdkLCAweDEzMSwgMHgxNDIsIDB4MTUzLCAweDE2MSwgMHgxN2UsIDAsIDB4MjBhY107XG5cbmZ1bmN0aW9uIHN0cmluZ1RvUERGU3RyaW5nKHN0cikge1xuICBjb25zdCBsZW5ndGggPSBzdHIubGVuZ3RoLFxuICAgICAgICBzdHJCdWYgPSBbXTtcblxuICBpZiAoc3RyWzBdID09PSBcIlxceEZFXCIgJiYgc3RyWzFdID09PSBcIlxceEZGXCIpIHtcbiAgICBmb3IgKGxldCBpID0gMjsgaSA8IGxlbmd0aDsgaSArPSAyKSB7XG4gICAgICBzdHJCdWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHN0ci5jaGFyQ29kZUF0KGkpIDw8IDggfCBzdHIuY2hhckNvZGVBdChpICsgMSkpKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoc3RyWzBdID09PSBcIlxceEZGXCIgJiYgc3RyWzFdID09PSBcIlxceEZFXCIpIHtcbiAgICBmb3IgKGxldCBpID0gMjsgaSA8IGxlbmd0aDsgaSArPSAyKSB7XG4gICAgICBzdHJCdWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHN0ci5jaGFyQ29kZUF0KGkgKyAxKSA8PCA4IHwgc3RyLmNoYXJDb2RlQXQoaSkpKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgY29uc3QgY29kZSA9IFBERlN0cmluZ1RyYW5zbGF0ZVRhYmxlW3N0ci5jaGFyQ29kZUF0KGkpXTtcbiAgICAgIHN0ckJ1Zi5wdXNoKGNvZGUgPyBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUpIDogc3RyLmNoYXJBdChpKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0ckJ1Zi5qb2luKFwiXCIpO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVTdHJpbmcoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvKFsoKVxcXFxcXG5cXHJdKS9nLCBtYXRjaCA9PiB7XG4gICAgaWYgKG1hdGNoID09PSBcIlxcblwiKSB7XG4gICAgICByZXR1cm4gXCJcXFxcblwiO1xuICAgIH0gZWxzZSBpZiAobWF0Y2ggPT09IFwiXFxyXCIpIHtcbiAgICAgIHJldHVybiBcIlxcXFxyXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGBcXFxcJHttYXRjaH1gO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaXNBc2NpaShzdHIpIHtcbiAgcmV0dXJuIC9eW1xceDAwLVxceDdGXSokLy50ZXN0KHN0cik7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ1RvVVRGMTZCRVN0cmluZyhzdHIpIHtcbiAgY29uc3QgYnVmID0gW1wiXFx4RkVcXHhGRlwiXTtcblxuICBmb3IgKGxldCBpID0gMCwgaWkgPSBzdHIubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgIGNvbnN0IGNoYXIgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICBidWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXIgPj4gOCAmIDB4ZmYpLCBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXIgJiAweGZmKSk7XG4gIH1cblxuICByZXR1cm4gYnVmLmpvaW4oXCJcIik7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ1RvVVRGOFN0cmluZyhzdHIpIHtcbiAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoc3RyKSk7XG59XG5cbmZ1bmN0aW9uIHV0ZjhTdHJpbmdUb1N0cmluZyhzdHIpIHtcbiAgcmV0dXJuIHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChzdHIpKTtcbn1cblxuZnVuY3Rpb24gaXNCb29sKHYpIHtcbiAgcmV0dXJuIHR5cGVvZiB2ID09PSBcImJvb2xlYW5cIjtcbn1cblxuZnVuY3Rpb24gaXNOdW0odikge1xuICByZXR1cm4gdHlwZW9mIHYgPT09IFwibnVtYmVyXCI7XG59XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKHYpIHtcbiAgcmV0dXJuIHR5cGVvZiB2ID09PSBcInN0cmluZ1wiO1xufVxuXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyKHYpIHtcbiAgcmV0dXJuIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIHYgIT09IG51bGwgJiYgdi5ieXRlTGVuZ3RoICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXlFcXVhbChhcnIxLCBhcnIyKSB7XG4gIGlmIChhcnIxLmxlbmd0aCAhPT0gYXJyMi5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMCwgaWkgPSBhcnIxLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICBpZiAoYXJyMVtpXSAhPT0gYXJyMltpXSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBnZXRNb2RpZmljYXRpb25EYXRlKGRhdGUgPSBuZXcgRGF0ZSgpKSB7XG4gIGNvbnN0IGJ1ZmZlciA9IFtkYXRlLmdldFVUQ0Z1bGxZZWFyKCkudG9TdHJpbmcoKSwgKGRhdGUuZ2V0VVRDTW9udGgoKSArIDEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgXCIwXCIpLCBkYXRlLmdldFVUQ0RhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKSwgZGF0ZS5nZXRVVENIb3VycygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgXCIwXCIpLCBkYXRlLmdldFVUQ01pbnV0ZXMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKSwgZGF0ZS5nZXRVVENTZWNvbmRzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIildO1xuICByZXR1cm4gYnVmZmVyLmpvaW4oXCJcIik7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KCkge1xuICBjb25zdCBjYXBhYmlsaXR5ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgbGV0IGlzU2V0dGxlZCA9IGZhbHNlO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2FwYWJpbGl0eSwgXCJzZXR0bGVkXCIsIHtcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gaXNTZXR0bGVkO1xuICAgIH1cblxuICB9KTtcbiAgY2FwYWJpbGl0eS5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgIGNhcGFiaWxpdHkucmVzb2x2ZSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICBpc1NldHRsZWQgPSB0cnVlO1xuICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICB9O1xuXG4gICAgY2FwYWJpbGl0eS5yZWplY3QgPSBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICBpc1NldHRsZWQgPSB0cnVlO1xuICAgICAgcmVqZWN0KHJlYXNvbik7XG4gICAgfTtcbiAgfSk7XG4gIHJldHVybiBjYXBhYmlsaXR5O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPYmplY3RVUkwoZGF0YSwgY29udGVudFR5cGUgPSBcIlwiLCBmb3JjZURhdGFTY2hlbWEgPSBmYWxzZSkge1xuICBpZiAoVVJMLmNyZWF0ZU9iamVjdFVSTCAmJiB0eXBlb2YgQmxvYiAhPT0gXCJ1bmRlZmluZWRcIiAmJiAhZm9yY2VEYXRhU2NoZW1hKSB7XG4gICAgcmV0dXJuIFVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW2RhdGFdLCB7XG4gICAgICB0eXBlOiBjb250ZW50VHlwZVxuICAgIH0pKTtcbiAgfVxuXG4gIGNvbnN0IGRpZ2l0cyA9IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIjtcbiAgbGV0IGJ1ZmZlciA9IGBkYXRhOiR7Y29udGVudFR5cGV9O2Jhc2U2NCxgO1xuXG4gIGZvciAobGV0IGkgPSAwLCBpaSA9IGRhdGEubGVuZ3RoOyBpIDwgaWk7IGkgKz0gMykge1xuICAgIGNvbnN0IGIxID0gZGF0YVtpXSAmIDB4ZmY7XG4gICAgY29uc3QgYjIgPSBkYXRhW2kgKyAxXSAmIDB4ZmY7XG4gICAgY29uc3QgYjMgPSBkYXRhW2kgKyAyXSAmIDB4ZmY7XG4gICAgY29uc3QgZDEgPSBiMSA+PiAyLFxuICAgICAgICAgIGQyID0gKGIxICYgMykgPDwgNCB8IGIyID4+IDQ7XG4gICAgY29uc3QgZDMgPSBpICsgMSA8IGlpID8gKGIyICYgMHhmKSA8PCAyIHwgYjMgPj4gNiA6IDY0O1xuICAgIGNvbnN0IGQ0ID0gaSArIDIgPCBpaSA/IGIzICYgMHgzZiA6IDY0O1xuICAgIGJ1ZmZlciArPSBkaWdpdHNbZDFdICsgZGlnaXRzW2QyXSArIGRpZ2l0c1tkM10gKyBkaWdpdHNbZDRdO1xuICB9XG5cbiAgcmV0dXJuIGJ1ZmZlcjtcbn1cblxuLyoqKi8gfSksXG4vKiAzICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbnZhciBfaXNfbm9kZSA9IF9fd19wZGZqc19yZXF1aXJlX18oNCk7XG5cbjtcblxuLyoqKi8gfSksXG4vKiA0ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLmlzTm9kZUpTID0gdm9pZCAwO1xuY29uc3QgaXNOb2RlSlMgPSB0eXBlb2YgcHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJiBwcm9jZXNzICsgXCJcIiA9PT0gXCJbb2JqZWN0IHByb2Nlc3NdXCIgJiYgIXByb2Nlc3MudmVyc2lvbnMubncgJiYgIShwcm9jZXNzLnZlcnNpb25zLmVsZWN0cm9uICYmIHByb2Nlc3MudHlwZSAmJiBwcm9jZXNzLnR5cGUgIT09IFwiYnJvd3NlclwiKTtcbmV4cG9ydHMuaXNOb2RlSlMgPSBpc05vZGVKUztcblxuLyoqKi8gfSksXG4vKiA1ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLlJlZlNldENhY2hlID0gZXhwb3J0cy5SZWZTZXQgPSBleHBvcnRzLlJlZiA9IGV4cG9ydHMuTmFtZSA9IGV4cG9ydHMuRU9GID0gZXhwb3J0cy5EaWN0ID0gZXhwb3J0cy5DbWQgPSBleHBvcnRzLkNJUkNVTEFSX1JFRiA9IHZvaWQgMDtcbmV4cG9ydHMuY2xlYXJQcmltaXRpdmVDYWNoZXMgPSBjbGVhclByaW1pdGl2ZUNhY2hlcztcbmV4cG9ydHMuaXNDbWQgPSBpc0NtZDtcbmV4cG9ydHMuaXNEaWN0ID0gaXNEaWN0O1xuZXhwb3J0cy5pc05hbWUgPSBpc05hbWU7XG5leHBvcnRzLmlzUmVmID0gaXNSZWY7XG5leHBvcnRzLmlzUmVmc0VxdWFsID0gaXNSZWZzRXF1YWw7XG5leHBvcnRzLmlzU3RyZWFtID0gaXNTdHJlYW07XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfYmFzZV9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDYpO1xuXG5jb25zdCBDSVJDVUxBUl9SRUYgPSBTeW1ib2woXCJDSVJDVUxBUl9SRUZcIik7XG5leHBvcnRzLkNJUkNVTEFSX1JFRiA9IENJUkNVTEFSX1JFRjtcbmNvbnN0IEVPRiA9IFN5bWJvbChcIkVPRlwiKTtcbmV4cG9ydHMuRU9GID0gRU9GO1xuXG5jb25zdCBOYW1lID0gZnVuY3Rpb24gTmFtZUNsb3N1cmUoKSB7XG4gIGxldCBuYW1lQ2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIGNsYXNzIE5hbWUge1xuICAgIGNvbnN0cnVjdG9yKG5hbWUpIHtcbiAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldChuYW1lKSB7XG4gICAgICBjb25zdCBuYW1lVmFsdWUgPSBuYW1lQ2FjaGVbbmFtZV07XG4gICAgICByZXR1cm4gbmFtZVZhbHVlID8gbmFtZVZhbHVlIDogbmFtZUNhY2hlW25hbWVdID0gbmV3IE5hbWUobmFtZSk7XG4gICAgfVxuXG4gICAgc3RhdGljIF9jbGVhckNhY2hlKCkge1xuICAgICAgbmFtZUNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB9XG5cbiAgfVxuXG4gIHJldHVybiBOYW1lO1xufSgpO1xuXG5leHBvcnRzLk5hbWUgPSBOYW1lO1xuXG5jb25zdCBDbWQgPSBmdW5jdGlvbiBDbWRDbG9zdXJlKCkge1xuICBsZXQgY21kQ2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIGNsYXNzIENtZCB7XG4gICAgY29uc3RydWN0b3IoY21kKSB7XG4gICAgICB0aGlzLmNtZCA9IGNtZDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0KGNtZCkge1xuICAgICAgY29uc3QgY21kVmFsdWUgPSBjbWRDYWNoZVtjbWRdO1xuICAgICAgcmV0dXJuIGNtZFZhbHVlID8gY21kVmFsdWUgOiBjbWRDYWNoZVtjbWRdID0gbmV3IENtZChjbWQpO1xuICAgIH1cblxuICAgIHN0YXRpYyBfY2xlYXJDYWNoZSgpIHtcbiAgICAgIGNtZENhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB9XG5cbiAgfVxuXG4gIHJldHVybiBDbWQ7XG59KCk7XG5cbmV4cG9ydHMuQ21kID0gQ21kO1xuXG5jb25zdCBub25TZXJpYWxpemFibGUgPSBmdW5jdGlvbiBub25TZXJpYWxpemFibGVDbG9zdXJlKCkge1xuICByZXR1cm4gbm9uU2VyaWFsaXphYmxlO1xufTtcblxuY2xhc3MgRGljdCB7XG4gIGNvbnN0cnVjdG9yKHhyZWYgPSBudWxsKSB7XG4gICAgdGhpcy5fbWFwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLnhyZWYgPSB4cmVmO1xuICAgIHRoaXMub2JqSWQgPSBudWxsO1xuICAgIHRoaXMuc3VwcHJlc3NFbmNyeXB0aW9uID0gZmFsc2U7XG4gICAgdGhpcy5fX25vblNlcmlhbGl6YWJsZV9fID0gbm9uU2VyaWFsaXphYmxlO1xuICB9XG5cbiAgYXNzaWduWHJlZihuZXdYcmVmKSB7XG4gICAgdGhpcy54cmVmID0gbmV3WHJlZjtcbiAgfVxuXG4gIGdldCBzaXplKCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLl9tYXApLmxlbmd0aDtcbiAgfVxuXG4gIGdldChrZXkxLCBrZXkyLCBrZXkzKSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5fbWFwW2tleTFdO1xuXG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYga2V5MiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWx1ZSA9IHRoaXMuX21hcFtrZXkyXTtcblxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYga2V5MyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhbHVlID0gdGhpcy5fbWFwW2tleTNdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFJlZiAmJiB0aGlzLnhyZWYpIHtcbiAgICAgIHJldHVybiB0aGlzLnhyZWYuZmV0Y2godmFsdWUsIHRoaXMuc3VwcHJlc3NFbmNyeXB0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBhc3luYyBnZXRBc3luYyhrZXkxLCBrZXkyLCBrZXkzKSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5fbWFwW2tleTFdO1xuXG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYga2V5MiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWx1ZSA9IHRoaXMuX21hcFtrZXkyXTtcblxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYga2V5MyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhbHVlID0gdGhpcy5fbWFwW2tleTNdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFJlZiAmJiB0aGlzLnhyZWYpIHtcbiAgICAgIHJldHVybiB0aGlzLnhyZWYuZmV0Y2hBc3luYyh2YWx1ZSwgdGhpcy5zdXBwcmVzc0VuY3J5cHRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGdldEFycmF5KGtleTEsIGtleTIsIGtleTMpIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLl9tYXBba2V5MV07XG5cbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBrZXkyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhbHVlID0gdGhpcy5fbWFwW2tleTJdO1xuXG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBrZXkzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFsdWUgPSB0aGlzLl9tYXBba2V5M107XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgUmVmICYmIHRoaXMueHJlZikge1xuICAgICAgdmFsdWUgPSB0aGlzLnhyZWYuZmV0Y2godmFsdWUsIHRoaXMuc3VwcHJlc3NFbmNyeXB0aW9uKTtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoKTtcblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gdmFsdWUubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICBpZiAodmFsdWVbaV0gaW5zdGFuY2VvZiBSZWYgJiYgdGhpcy54cmVmKSB7XG4gICAgICAgICAgdmFsdWVbaV0gPSB0aGlzLnhyZWYuZmV0Y2godmFsdWVbaV0sIHRoaXMuc3VwcHJlc3NFbmNyeXB0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGdldFJhdyhrZXkpIHtcbiAgICByZXR1cm4gdGhpcy5fbWFwW2tleV07XG4gIH1cblxuICBnZXRLZXlzKCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLl9tYXApO1xuICB9XG5cbiAgZ2V0UmF3VmFsdWVzKCkge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuX21hcCk7XG4gIH1cblxuICBzZXQoa2V5LCB2YWx1ZSkge1xuICAgIHRoaXMuX21hcFtrZXldID0gdmFsdWU7XG4gIH1cblxuICBoYXMoa2V5KSB7XG4gICAgcmV0dXJuIHRoaXMuX21hcFtrZXldICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBmb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5fbWFwKSB7XG4gICAgICBjYWxsYmFjayhrZXksIHRoaXMuZ2V0KGtleSkpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXQgZW1wdHkoKSB7XG4gICAgY29uc3QgZW1wdHlEaWN0ID0gbmV3IERpY3QobnVsbCk7XG5cbiAgICBlbXB0eURpY3Quc2V0ID0gKGtleSwgdmFsdWUpID0+IHtcbiAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJTaG91bGQgbm90IGNhbGwgYHNldGAgb24gdGhlIGVtcHR5IGRpY3Rpb25hcnkuXCIpO1xuICAgIH07XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJlbXB0eVwiLCBlbXB0eURpY3QpO1xuICB9XG5cbiAgc3RhdGljIG1lcmdlKHtcbiAgICB4cmVmLFxuICAgIGRpY3RBcnJheSxcbiAgICBtZXJnZVN1YkRpY3RzID0gZmFsc2VcbiAgfSkge1xuICAgIGNvbnN0IG1lcmdlZERpY3QgPSBuZXcgRGljdCh4cmVmKSxcbiAgICAgICAgICBwcm9wZXJ0aWVzID0gbmV3IE1hcCgpO1xuXG4gICAgZm9yIChjb25zdCBkaWN0IG9mIGRpY3RBcnJheSkge1xuICAgICAgaWYgKCEoZGljdCBpbnN0YW5jZW9mIERpY3QpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkaWN0Ll9tYXApKSB7XG4gICAgICAgIGxldCBwcm9wZXJ0eSA9IHByb3BlcnRpZXMuZ2V0KGtleSk7XG5cbiAgICAgICAgaWYgKHByb3BlcnR5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwcm9wZXJ0eSA9IFtdO1xuICAgICAgICAgIHByb3BlcnRpZXMuc2V0KGtleSwgcHJvcGVydHkpO1xuICAgICAgICB9IGVsc2UgaWYgKCFtZXJnZVN1YkRpY3RzIHx8ICEodmFsdWUgaW5zdGFuY2VvZiBEaWN0KSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydHkucHVzaCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVzXSBvZiBwcm9wZXJ0aWVzKSB7XG4gICAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMSB8fCAhKHZhbHVlc1swXSBpbnN0YW5jZW9mIERpY3QpKSB7XG4gICAgICAgIG1lcmdlZERpY3QuX21hcFtuYW1lXSA9IHZhbHVlc1swXTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN1YkRpY3QgPSBuZXcgRGljdCh4cmVmKTtcblxuICAgICAgZm9yIChjb25zdCBkaWN0IG9mIHZhbHVlcykge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkaWN0Ll9tYXApKSB7XG4gICAgICAgICAgaWYgKHN1YkRpY3QuX21hcFtrZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN1YkRpY3QuX21hcFtrZXldID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzdWJEaWN0LnNpemUgPiAwKSB7XG4gICAgICAgIG1lcmdlZERpY3QuX21hcFtuYW1lXSA9IHN1YkRpY3Q7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvcGVydGllcy5jbGVhcigpO1xuICAgIHJldHVybiBtZXJnZWREaWN0LnNpemUgPiAwID8gbWVyZ2VkRGljdCA6IERpY3QuZW1wdHk7XG4gIH1cblxufVxuXG5leHBvcnRzLkRpY3QgPSBEaWN0O1xuXG5jb25zdCBSZWYgPSBmdW5jdGlvbiBSZWZDbG9zdXJlKCkge1xuICBsZXQgcmVmQ2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIGNsYXNzIFJlZiB7XG4gICAgY29uc3RydWN0b3IobnVtLCBnZW4pIHtcbiAgICAgIHRoaXMubnVtID0gbnVtO1xuICAgICAgdGhpcy5nZW4gPSBnZW47XG4gICAgfVxuXG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICBpZiAodGhpcy5nZW4gPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMubnVtfVJgO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYCR7dGhpcy5udW19UiR7dGhpcy5nZW59YDtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0KG51bSwgZ2VuKSB7XG4gICAgICBjb25zdCBrZXkgPSBnZW4gPT09IDAgPyBgJHtudW19UmAgOiBgJHtudW19UiR7Z2VufWA7XG4gICAgICBjb25zdCByZWZWYWx1ZSA9IHJlZkNhY2hlW2tleV07XG4gICAgICByZXR1cm4gcmVmVmFsdWUgPyByZWZWYWx1ZSA6IHJlZkNhY2hlW2tleV0gPSBuZXcgUmVmKG51bSwgZ2VuKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgX2NsZWFyQ2FjaGUoKSB7XG4gICAgICByZWZDYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgfVxuXG4gIH1cblxuICByZXR1cm4gUmVmO1xufSgpO1xuXG5leHBvcnRzLlJlZiA9IFJlZjtcblxuY2xhc3MgUmVmU2V0IHtcbiAgY29uc3RydWN0b3IocGFyZW50ID0gbnVsbCkge1xuICAgIHRoaXMuX3NldCA9IG5ldyBTZXQocGFyZW50ICYmIHBhcmVudC5fc2V0KTtcbiAgfVxuXG4gIGhhcyhyZWYpIHtcbiAgICByZXR1cm4gdGhpcy5fc2V0LmhhcyhyZWYudG9TdHJpbmcoKSk7XG4gIH1cblxuICBwdXQocmVmKSB7XG4gICAgdGhpcy5fc2V0LmFkZChyZWYudG9TdHJpbmcoKSk7XG4gIH1cblxuICByZW1vdmUocmVmKSB7XG4gICAgdGhpcy5fc2V0LmRlbGV0ZShyZWYudG9TdHJpbmcoKSk7XG4gIH1cblxuICBmb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgZm9yIChjb25zdCByZWYgb2YgdGhpcy5fc2V0LnZhbHVlcygpKSB7XG4gICAgICBjYWxsYmFjayhyZWYpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIHRoaXMuX3NldC5jbGVhcigpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5SZWZTZXQgPSBSZWZTZXQ7XG5cbmNsYXNzIFJlZlNldENhY2hlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fbWFwID0gbmV3IE1hcCgpO1xuICB9XG5cbiAgZ2V0IHNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21hcC5zaXplO1xuICB9XG5cbiAgZ2V0KHJlZikge1xuICAgIHJldHVybiB0aGlzLl9tYXAuZ2V0KHJlZi50b1N0cmluZygpKTtcbiAgfVxuXG4gIGhhcyhyZWYpIHtcbiAgICByZXR1cm4gdGhpcy5fbWFwLmhhcyhyZWYudG9TdHJpbmcoKSk7XG4gIH1cblxuICBwdXQocmVmLCBvYmopIHtcbiAgICB0aGlzLl9tYXAuc2V0KHJlZi50b1N0cmluZygpLCBvYmopO1xuICB9XG5cbiAgcHV0QWxpYXMocmVmLCBhbGlhc1JlZikge1xuICAgIHRoaXMuX21hcC5zZXQocmVmLnRvU3RyaW5nKCksIHRoaXMuZ2V0KGFsaWFzUmVmKSk7XG4gIH1cblxuICBmb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiB0aGlzLl9tYXAudmFsdWVzKCkpIHtcbiAgICAgIGNhbGxiYWNrKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBjbGVhcigpIHtcbiAgICB0aGlzLl9tYXAuY2xlYXIoKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuUmVmU2V0Q2FjaGUgPSBSZWZTZXRDYWNoZTtcblxuZnVuY3Rpb24gaXNOYW1lKHYsIG5hbWUpIHtcbiAgcmV0dXJuIHYgaW5zdGFuY2VvZiBOYW1lICYmIChuYW1lID09PSB1bmRlZmluZWQgfHwgdi5uYW1lID09PSBuYW1lKTtcbn1cblxuZnVuY3Rpb24gaXNDbWQodiwgY21kKSB7XG4gIHJldHVybiB2IGluc3RhbmNlb2YgQ21kICYmIChjbWQgPT09IHVuZGVmaW5lZCB8fCB2LmNtZCA9PT0gY21kKTtcbn1cblxuZnVuY3Rpb24gaXNEaWN0KHYsIHR5cGUpIHtcbiAgcmV0dXJuIHYgaW5zdGFuY2VvZiBEaWN0ICYmICh0eXBlID09PSB1bmRlZmluZWQgfHwgaXNOYW1lKHYuZ2V0KFwiVHlwZVwiKSwgdHlwZSkpO1xufVxuXG5mdW5jdGlvbiBpc1JlZih2KSB7XG4gIHJldHVybiB2IGluc3RhbmNlb2YgUmVmO1xufVxuXG5mdW5jdGlvbiBpc1JlZnNFcXVhbCh2MSwgdjIpIHtcbiAgcmV0dXJuIHYxLm51bSA9PT0gdjIubnVtICYmIHYxLmdlbiA9PT0gdjIuZ2VuO1xufVxuXG5mdW5jdGlvbiBpc1N0cmVhbSh2KSB7XG4gIHJldHVybiB2IGluc3RhbmNlb2YgX2Jhc2Vfc3RyZWFtLkJhc2VTdHJlYW07XG59XG5cbmZ1bmN0aW9uIGNsZWFyUHJpbWl0aXZlQ2FjaGVzKCkge1xuICBDbWQuX2NsZWFyQ2FjaGUoKTtcblxuICBOYW1lLl9jbGVhckNhY2hlKCk7XG5cbiAgUmVmLl9jbGVhckNhY2hlKCk7XG59XG5cbi8qKiovIH0pLFxuLyogNiAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5CYXNlU3RyZWFtID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5jbGFzcyBCYXNlU3RyZWFtIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKHRoaXMuY29uc3RydWN0b3IgPT09IEJhc2VTdHJlYW0pIHtcbiAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlU3RyZWFtLlwiKTtcbiAgICB9XG4gIH1cblxuICBnZXQgbGVuZ3RoKCkge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJBYnN0cmFjdCBnZXR0ZXIgYGxlbmd0aGAgYWNjZXNzZWRcIik7XG4gIH1cblxuICBnZXQgaXNFbXB0eSgpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQWJzdHJhY3QgZ2V0dGVyIGBpc0VtcHR5YCBhY2Nlc3NlZFwiKTtcbiAgfVxuXG4gIGdldCBpc0RhdGFMb2FkZWQoKSB7XG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiaXNEYXRhTG9hZGVkXCIsIHRydWUpO1xuICB9XG5cbiAgZ2V0Qnl0ZSgpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQWJzdHJhY3QgbWV0aG9kIGBnZXRCeXRlYCBjYWxsZWRcIik7XG4gIH1cblxuICBnZXRCeXRlcyhsZW5ndGgsIGZvcmNlQ2xhbXBlZCA9IGZhbHNlKSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIkFic3RyYWN0IG1ldGhvZCBgZ2V0Qnl0ZXNgIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHBlZWtCeXRlKCkge1xuICAgIGNvbnN0IHBlZWtlZEJ5dGUgPSB0aGlzLmdldEJ5dGUoKTtcblxuICAgIGlmIChwZWVrZWRCeXRlICE9PSAtMSkge1xuICAgICAgdGhpcy5wb3MtLTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGVla2VkQnl0ZTtcbiAgfVxuXG4gIHBlZWtCeXRlcyhsZW5ndGgsIGZvcmNlQ2xhbXBlZCA9IGZhbHNlKSB7XG4gICAgY29uc3QgYnl0ZXMgPSB0aGlzLmdldEJ5dGVzKGxlbmd0aCwgZm9yY2VDbGFtcGVkKTtcbiAgICB0aGlzLnBvcyAtPSBieXRlcy5sZW5ndGg7XG4gICAgcmV0dXJuIGJ5dGVzO1xuICB9XG5cbiAgZ2V0VWludDE2KCkge1xuICAgIGNvbnN0IGIwID0gdGhpcy5nZXRCeXRlKCk7XG4gICAgY29uc3QgYjEgPSB0aGlzLmdldEJ5dGUoKTtcblxuICAgIGlmIChiMCA9PT0gLTEgfHwgYjEgPT09IC0xKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgcmV0dXJuIChiMCA8PCA4KSArIGIxO1xuICB9XG5cbiAgZ2V0SW50MzIoKSB7XG4gICAgY29uc3QgYjAgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICBjb25zdCBiMSA9IHRoaXMuZ2V0Qnl0ZSgpO1xuICAgIGNvbnN0IGIyID0gdGhpcy5nZXRCeXRlKCk7XG4gICAgY29uc3QgYjMgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICByZXR1cm4gKGIwIDw8IDI0KSArIChiMSA8PCAxNikgKyAoYjIgPDwgOCkgKyBiMztcbiAgfVxuXG4gIGdldEJ5dGVSYW5nZShiZWdpbiwgZW5kKSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIkFic3RyYWN0IG1ldGhvZCBgZ2V0Qnl0ZVJhbmdlYCBjYWxsZWRcIik7XG4gIH1cblxuICBnZXRTdHJpbmcobGVuZ3RoKSB7XG4gICAgcmV0dXJuICgwLCBfdXRpbC5ieXRlc1RvU3RyaW5nKSh0aGlzLmdldEJ5dGVzKGxlbmd0aCwgZmFsc2UpKTtcbiAgfVxuXG4gIHNraXAobikge1xuICAgIHRoaXMucG9zICs9IG4gfHwgMTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJBYnN0cmFjdCBtZXRob2QgYHJlc2V0YCBjYWxsZWRcIik7XG4gIH1cblxuICBtb3ZlU3RhcnQoKSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIkFic3RyYWN0IG1ldGhvZCBgbW92ZVN0YXJ0YCBjYWxsZWRcIik7XG4gIH1cblxuICBtYWtlU3ViU3RyZWFtKHN0YXJ0LCBsZW5ndGgsIGRpY3QgPSBudWxsKSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIkFic3RyYWN0IG1ldGhvZCBgbWFrZVN1YlN0cmVhbWAgY2FsbGVkXCIpO1xuICB9XG5cbiAgZ2V0QmFzZVN0cmVhbXMoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxufVxuXG5leHBvcnRzLkJhc2VTdHJlYW0gPSBCYXNlU3RyZWFtO1xuXG4vKioqLyB9KSxcbi8qIDcgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuTmV0d29ya1BkZk1hbmFnZXIgPSBleHBvcnRzLkxvY2FsUGRmTWFuYWdlciA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9jaHVua2VkX3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oOCk7XG5cbnZhciBfY29yZV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oOSk7XG5cbnZhciBfZG9jdW1lbnQgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDExKTtcblxudmFyIF9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEwKTtcblxuZnVuY3Rpb24gcGFyc2VEb2NCYXNlVXJsKHVybCkge1xuICBpZiAodXJsKSB7XG4gICAgY29uc3QgYWJzb2x1dGVVcmwgPSAoMCwgX3V0aWwuY3JlYXRlVmFsaWRBYnNvbHV0ZVVybCkodXJsKTtcblxuICAgIGlmIChhYnNvbHV0ZVVybCkge1xuICAgICAgcmV0dXJuIGFic29sdXRlVXJsLmhyZWY7XG4gICAgfVxuXG4gICAgKDAsIF91dGlsLndhcm4pKGBJbnZhbGlkIGFic29sdXRlIGRvY0Jhc2VVcmw6IFwiJHt1cmx9XCIuYCk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuY2xhc3MgQmFzZVBkZk1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gQmFzZVBkZk1hbmFnZXIpIHtcbiAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlUGRmTWFuYWdlci5cIik7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGRvY0lkKCkge1xuICAgIHJldHVybiB0aGlzLl9kb2NJZDtcbiAgfVxuXG4gIGdldCBwYXNzd29yZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcGFzc3dvcmQ7XG4gIH1cblxuICBnZXQgZG9jQmFzZVVybCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZG9jQmFzZVVybDtcbiAgfVxuXG4gIG9uTG9hZGVkU3RyZWFtKCkge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJBYnN0cmFjdCBtZXRob2QgYG9uTG9hZGVkU3RyZWFtYCBjYWxsZWRcIik7XG4gIH1cblxuICBlbnN1cmVEb2MocHJvcCwgYXJncykge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZSh0aGlzLnBkZkRvY3VtZW50LCBwcm9wLCBhcmdzKTtcbiAgfVxuXG4gIGVuc3VyZVhSZWYocHJvcCwgYXJncykge1xuICAgIHJldHVybiB0aGlzLmVuc3VyZSh0aGlzLnBkZkRvY3VtZW50LnhyZWYsIHByb3AsIGFyZ3MpO1xuICB9XG5cbiAgZW5zdXJlQ2F0YWxvZyhwcm9wLCBhcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5zdXJlKHRoaXMucGRmRG9jdW1lbnQuY2F0YWxvZywgcHJvcCwgYXJncyk7XG4gIH1cblxuICBnZXRQYWdlKHBhZ2VJbmRleCkge1xuICAgIHJldHVybiB0aGlzLnBkZkRvY3VtZW50LmdldFBhZ2UocGFnZUluZGV4KTtcbiAgfVxuXG4gIGZvbnRGYWxsYmFjayhpZCwgaGFuZGxlcikge1xuICAgIHJldHVybiB0aGlzLnBkZkRvY3VtZW50LmZvbnRGYWxsYmFjayhpZCwgaGFuZGxlcik7XG4gIH1cblxuICBsb2FkWGZhRm9udHMoaGFuZGxlciwgdGFzaykge1xuICAgIHJldHVybiB0aGlzLnBkZkRvY3VtZW50LmxvYWRYZmFGb250cyhoYW5kbGVyLCB0YXNrKTtcbiAgfVxuXG4gIGxvYWRYZmFJbWFnZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMucGRmRG9jdW1lbnQubG9hZFhmYUltYWdlcygpO1xuICB9XG5cbiAgc2VyaWFsaXplWGZhRGF0YShhbm5vdGF0aW9uU3RvcmFnZSkge1xuICAgIHJldHVybiB0aGlzLnBkZkRvY3VtZW50LnNlcmlhbGl6ZVhmYURhdGEoYW5ub3RhdGlvblN0b3JhZ2UpO1xuICB9XG5cbiAgY2xlYW51cChtYW51YWxseVRyaWdnZXJlZCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIHRoaXMucGRmRG9jdW1lbnQuY2xlYW51cChtYW51YWxseVRyaWdnZXJlZCk7XG4gIH1cblxuICBhc3luYyBlbnN1cmUob2JqLCBwcm9wLCBhcmdzKSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIkFic3RyYWN0IG1ldGhvZCBgZW5zdXJlYCBjYWxsZWRcIik7XG4gIH1cblxuICByZXF1ZXN0UmFuZ2UoYmVnaW4sIGVuZCkge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJBYnN0cmFjdCBtZXRob2QgYHJlcXVlc3RSYW5nZWAgY2FsbGVkXCIpO1xuICB9XG5cbiAgcmVxdWVzdExvYWRlZFN0cmVhbSgpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQWJzdHJhY3QgbWV0aG9kIGByZXF1ZXN0TG9hZGVkU3RyZWFtYCBjYWxsZWRcIik7XG4gIH1cblxuICBzZW5kUHJvZ3Jlc3NpdmVEYXRhKGNodW5rKSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIkFic3RyYWN0IG1ldGhvZCBgc2VuZFByb2dyZXNzaXZlRGF0YWAgY2FsbGVkXCIpO1xuICB9XG5cbiAgdXBkYXRlUGFzc3dvcmQocGFzc3dvcmQpIHtcbiAgICB0aGlzLl9wYXNzd29yZCA9IHBhc3N3b3JkO1xuICB9XG5cbiAgdGVybWluYXRlKHJlYXNvbikge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJBYnN0cmFjdCBtZXRob2QgYHRlcm1pbmF0ZWAgY2FsbGVkXCIpO1xuICB9XG5cbn1cblxuY2xhc3MgTG9jYWxQZGZNYW5hZ2VyIGV4dGVuZHMgQmFzZVBkZk1hbmFnZXIge1xuICBjb25zdHJ1Y3Rvcihkb2NJZCwgZGF0YSwgcGFzc3dvcmQsIG1zZ0hhbmRsZXIsIGV2YWx1YXRvck9wdGlvbnMsIGVuYWJsZVhmYSwgZG9jQmFzZVVybCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fZG9jSWQgPSBkb2NJZDtcbiAgICB0aGlzLl9wYXNzd29yZCA9IHBhc3N3b3JkO1xuICAgIHRoaXMuX2RvY0Jhc2VVcmwgPSBwYXJzZURvY0Jhc2VVcmwoZG9jQmFzZVVybCk7XG4gICAgdGhpcy5tc2dIYW5kbGVyID0gbXNnSGFuZGxlcjtcbiAgICB0aGlzLmV2YWx1YXRvck9wdGlvbnMgPSBldmFsdWF0b3JPcHRpb25zO1xuICAgIHRoaXMuZW5hYmxlWGZhID0gZW5hYmxlWGZhO1xuICAgIGNvbnN0IHN0cmVhbSA9IG5ldyBfc3RyZWFtLlN0cmVhbShkYXRhKTtcbiAgICB0aGlzLnBkZkRvY3VtZW50ID0gbmV3IF9kb2N1bWVudC5QREZEb2N1bWVudCh0aGlzLCBzdHJlYW0pO1xuICAgIHRoaXMuX2xvYWRlZFN0cmVhbVByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoc3RyZWFtKTtcbiAgfVxuXG4gIGFzeW5jIGVuc3VyZShvYmosIHByb3AsIGFyZ3MpIHtcbiAgICBjb25zdCB2YWx1ZSA9IG9ialtwcm9wXTtcblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIHZhbHVlLmFwcGx5KG9iaiwgYXJncyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcmVxdWVzdFJhbmdlKGJlZ2luLCBlbmQpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICByZXF1ZXN0TG9hZGVkU3RyZWFtKCkge31cblxuICBvbkxvYWRlZFN0cmVhbSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbG9hZGVkU3RyZWFtUHJvbWlzZTtcbiAgfVxuXG4gIHRlcm1pbmF0ZShyZWFzb24pIHt9XG5cbn1cblxuZXhwb3J0cy5Mb2NhbFBkZk1hbmFnZXIgPSBMb2NhbFBkZk1hbmFnZXI7XG5cbmNsYXNzIE5ldHdvcmtQZGZNYW5hZ2VyIGV4dGVuZHMgQmFzZVBkZk1hbmFnZXIge1xuICBjb25zdHJ1Y3Rvcihkb2NJZCwgcGRmTmV0d29ya1N0cmVhbSwgYXJncywgZXZhbHVhdG9yT3B0aW9ucywgZW5hYmxlWGZhLCBkb2NCYXNlVXJsKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9kb2NJZCA9IGRvY0lkO1xuICAgIHRoaXMuX3Bhc3N3b3JkID0gYXJncy5wYXNzd29yZDtcbiAgICB0aGlzLl9kb2NCYXNlVXJsID0gcGFyc2VEb2NCYXNlVXJsKGRvY0Jhc2VVcmwpO1xuICAgIHRoaXMubXNnSGFuZGxlciA9IGFyZ3MubXNnSGFuZGxlcjtcbiAgICB0aGlzLmV2YWx1YXRvck9wdGlvbnMgPSBldmFsdWF0b3JPcHRpb25zO1xuICAgIHRoaXMuZW5hYmxlWGZhID0gZW5hYmxlWGZhO1xuICAgIHRoaXMuc3RyZWFtTWFuYWdlciA9IG5ldyBfY2h1bmtlZF9zdHJlYW0uQ2h1bmtlZFN0cmVhbU1hbmFnZXIocGRmTmV0d29ya1N0cmVhbSwge1xuICAgICAgbXNnSGFuZGxlcjogYXJncy5tc2dIYW5kbGVyLFxuICAgICAgbGVuZ3RoOiBhcmdzLmxlbmd0aCxcbiAgICAgIGRpc2FibGVBdXRvRmV0Y2g6IGFyZ3MuZGlzYWJsZUF1dG9GZXRjaCxcbiAgICAgIHJhbmdlQ2h1bmtTaXplOiBhcmdzLnJhbmdlQ2h1bmtTaXplXG4gICAgfSk7XG4gICAgdGhpcy5wZGZEb2N1bWVudCA9IG5ldyBfZG9jdW1lbnQuUERGRG9jdW1lbnQodGhpcywgdGhpcy5zdHJlYW1NYW5hZ2VyLmdldFN0cmVhbSgpKTtcbiAgfVxuXG4gIGFzeW5jIGVuc3VyZShvYmosIHByb3AsIGFyZ3MpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdmFsdWUgPSBvYmpbcHJvcF07XG5cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gdmFsdWUuYXBwbHkob2JqLCBhcmdzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoIShleCBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSkge1xuICAgICAgICB0aHJvdyBleDtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5yZXF1ZXN0UmFuZ2UoZXguYmVnaW4sIGV4LmVuZCk7XG4gICAgICByZXR1cm4gdGhpcy5lbnN1cmUob2JqLCBwcm9wLCBhcmdzKTtcbiAgICB9XG4gIH1cblxuICByZXF1ZXN0UmFuZ2UoYmVnaW4sIGVuZCkge1xuICAgIHJldHVybiB0aGlzLnN0cmVhbU1hbmFnZXIucmVxdWVzdFJhbmdlKGJlZ2luLCBlbmQpO1xuICB9XG5cbiAgcmVxdWVzdExvYWRlZFN0cmVhbSgpIHtcbiAgICB0aGlzLnN0cmVhbU1hbmFnZXIucmVxdWVzdEFsbENodW5rcygpO1xuICB9XG5cbiAgc2VuZFByb2dyZXNzaXZlRGF0YShjaHVuaykge1xuICAgIHRoaXMuc3RyZWFtTWFuYWdlci5vblJlY2VpdmVEYXRhKHtcbiAgICAgIGNodW5rXG4gICAgfSk7XG4gIH1cblxuICBvbkxvYWRlZFN0cmVhbSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdHJlYW1NYW5hZ2VyLm9uTG9hZGVkU3RyZWFtKCk7XG4gIH1cblxuICB0ZXJtaW5hdGUocmVhc29uKSB7XG4gICAgdGhpcy5zdHJlYW1NYW5hZ2VyLmFib3J0KHJlYXNvbik7XG4gIH1cblxufVxuXG5leHBvcnRzLk5ldHdvcmtQZGZNYW5hZ2VyID0gTmV0d29ya1BkZk1hbmFnZXI7XG5cbi8qKiovIH0pLFxuLyogOCAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5DaHVua2VkU3RyZWFtTWFuYWdlciA9IGV4cG9ydHMuQ2h1bmtlZFN0cmVhbSA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9jb3JlX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXyg5KTtcblxudmFyIF9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEwKTtcblxuY2xhc3MgQ2h1bmtlZFN0cmVhbSBleHRlbmRzIF9zdHJlYW0uU3RyZWFtIHtcbiAgY29uc3RydWN0b3IobGVuZ3RoLCBjaHVua1NpemUsIG1hbmFnZXIpIHtcbiAgICBzdXBlcihuZXcgVWludDhBcnJheShsZW5ndGgpLCAwLCBsZW5ndGgsIG51bGwpO1xuICAgIHRoaXMuY2h1bmtTaXplID0gY2h1bmtTaXplO1xuICAgIHRoaXMuX2xvYWRlZENodW5rcyA9IG5ldyBTZXQoKTtcbiAgICB0aGlzLm51bUNodW5rcyA9IE1hdGguY2VpbChsZW5ndGggLyBjaHVua1NpemUpO1xuICAgIHRoaXMubWFuYWdlciA9IG1hbmFnZXI7XG4gICAgdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGggPSAwO1xuICAgIHRoaXMubGFzdFN1Y2Nlc3NmdWxFbnN1cmVCeXRlQ2h1bmsgPSAtMTtcbiAgfVxuXG4gIGdldE1pc3NpbmdDaHVua3MoKSB7XG4gICAgY29uc3QgY2h1bmtzID0gW107XG5cbiAgICBmb3IgKGxldCBjaHVuayA9IDAsIG4gPSB0aGlzLm51bUNodW5rczsgY2h1bmsgPCBuOyArK2NodW5rKSB7XG4gICAgICBpZiAoIXRoaXMuX2xvYWRlZENodW5rcy5oYXMoY2h1bmspKSB7XG4gICAgICAgIGNodW5rcy5wdXNoKGNodW5rKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2h1bmtzO1xuICB9XG5cbiAgZ2V0IG51bUNodW5rc0xvYWRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbG9hZGVkQ2h1bmtzLnNpemU7XG4gIH1cblxuICBnZXQgaXNEYXRhTG9hZGVkKCkge1xuICAgIHJldHVybiB0aGlzLm51bUNodW5rc0xvYWRlZCA9PT0gdGhpcy5udW1DaHVua3M7XG4gIH1cblxuICBvblJlY2VpdmVEYXRhKGJlZ2luLCBjaHVuaykge1xuICAgIGNvbnN0IGNodW5rU2l6ZSA9IHRoaXMuY2h1bmtTaXplO1xuXG4gICAgaWYgKGJlZ2luICUgY2h1bmtTaXplICE9PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEJhZCBiZWdpbiBvZmZzZXQ6ICR7YmVnaW59YCk7XG4gICAgfVxuXG4gICAgY29uc3QgZW5kID0gYmVnaW4gKyBjaHVuay5ieXRlTGVuZ3RoO1xuXG4gICAgaWYgKGVuZCAlIGNodW5rU2l6ZSAhPT0gMCAmJiBlbmQgIT09IHRoaXMuYnl0ZXMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEJhZCBlbmQgb2Zmc2V0OiAke2VuZH1gKTtcbiAgICB9XG5cbiAgICB0aGlzLmJ5dGVzLnNldChuZXcgVWludDhBcnJheShjaHVuayksIGJlZ2luKTtcbiAgICBjb25zdCBiZWdpbkNodW5rID0gTWF0aC5mbG9vcihiZWdpbiAvIGNodW5rU2l6ZSk7XG4gICAgY29uc3QgZW5kQ2h1bmsgPSBNYXRoLmZsb29yKChlbmQgLSAxKSAvIGNodW5rU2l6ZSkgKyAxO1xuXG4gICAgZm9yIChsZXQgY3VyQ2h1bmsgPSBiZWdpbkNodW5rOyBjdXJDaHVuayA8IGVuZENodW5rOyArK2N1ckNodW5rKSB7XG4gICAgICB0aGlzLl9sb2FkZWRDaHVua3MuYWRkKGN1ckNodW5rKTtcbiAgICB9XG4gIH1cblxuICBvblJlY2VpdmVQcm9ncmVzc2l2ZURhdGEoZGF0YSkge1xuICAgIGxldCBwb3NpdGlvbiA9IHRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoO1xuICAgIGNvbnN0IGJlZ2luQ2h1bmsgPSBNYXRoLmZsb29yKHBvc2l0aW9uIC8gdGhpcy5jaHVua1NpemUpO1xuICAgIHRoaXMuYnl0ZXMuc2V0KG5ldyBVaW50OEFycmF5KGRhdGEpLCBwb3NpdGlvbik7XG4gICAgcG9zaXRpb24gKz0gZGF0YS5ieXRlTGVuZ3RoO1xuICAgIHRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoID0gcG9zaXRpb247XG4gICAgY29uc3QgZW5kQ2h1bmsgPSBwb3NpdGlvbiA+PSB0aGlzLmVuZCA/IHRoaXMubnVtQ2h1bmtzIDogTWF0aC5mbG9vcihwb3NpdGlvbiAvIHRoaXMuY2h1bmtTaXplKTtcblxuICAgIGZvciAobGV0IGN1ckNodW5rID0gYmVnaW5DaHVuazsgY3VyQ2h1bmsgPCBlbmRDaHVuazsgKytjdXJDaHVuaykge1xuICAgICAgdGhpcy5fbG9hZGVkQ2h1bmtzLmFkZChjdXJDaHVuayk7XG4gICAgfVxuICB9XG5cbiAgZW5zdXJlQnl0ZShwb3MpIHtcbiAgICBpZiAocG9zIDwgdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjaHVuayA9IE1hdGguZmxvb3IocG9zIC8gdGhpcy5jaHVua1NpemUpO1xuXG4gICAgaWYgKGNodW5rID4gdGhpcy5udW1DaHVua3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY2h1bmsgPT09IHRoaXMubGFzdFN1Y2Nlc3NmdWxFbnN1cmVCeXRlQ2h1bmspIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX2xvYWRlZENodW5rcy5oYXMoY2h1bmspKSB7XG4gICAgICB0aHJvdyBuZXcgX2NvcmVfdXRpbHMuTWlzc2luZ0RhdGFFeGNlcHRpb24ocG9zLCBwb3MgKyAxKTtcbiAgICB9XG5cbiAgICB0aGlzLmxhc3RTdWNjZXNzZnVsRW5zdXJlQnl0ZUNodW5rID0gY2h1bms7XG4gIH1cblxuICBlbnN1cmVSYW5nZShiZWdpbiwgZW5kKSB7XG4gICAgaWYgKGJlZ2luID49IGVuZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChlbmQgPD0gdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBiZWdpbkNodW5rID0gTWF0aC5mbG9vcihiZWdpbiAvIHRoaXMuY2h1bmtTaXplKTtcblxuICAgIGlmIChiZWdpbkNodW5rID4gdGhpcy5udW1DaHVua3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBlbmRDaHVuayA9IE1hdGgubWluKE1hdGguZmxvb3IoKGVuZCAtIDEpIC8gdGhpcy5jaHVua1NpemUpICsgMSwgdGhpcy5udW1DaHVua3MpO1xuXG4gICAgZm9yIChsZXQgY2h1bmsgPSBiZWdpbkNodW5rOyBjaHVuayA8IGVuZENodW5rOyArK2NodW5rKSB7XG4gICAgICBpZiAoIXRoaXMuX2xvYWRlZENodW5rcy5oYXMoY2h1bmspKSB7XG4gICAgICAgIHRocm93IG5ldyBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbihiZWdpbiwgZW5kKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZXh0RW1wdHlDaHVuayhiZWdpbkNodW5rKSB7XG4gICAgY29uc3QgbnVtQ2h1bmtzID0gdGhpcy5udW1DaHVua3M7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bUNodW5rczsgKytpKSB7XG4gICAgICBjb25zdCBjaHVuayA9IChiZWdpbkNodW5rICsgaSkgJSBudW1DaHVua3M7XG5cbiAgICAgIGlmICghdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyhjaHVuaykpIHtcbiAgICAgICAgcmV0dXJuIGNodW5rO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaGFzQ2h1bmsoY2h1bmspIHtcbiAgICByZXR1cm4gdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyhjaHVuayk7XG4gIH1cblxuICBnZXRCeXRlKCkge1xuICAgIGNvbnN0IHBvcyA9IHRoaXMucG9zO1xuXG4gICAgaWYgKHBvcyA+PSB0aGlzLmVuZCkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIGlmIChwb3MgPj0gdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgpIHtcbiAgICAgIHRoaXMuZW5zdXJlQnl0ZShwb3MpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmJ5dGVzW3RoaXMucG9zKytdO1xuICB9XG5cbiAgZ2V0Qnl0ZXMobGVuZ3RoLCBmb3JjZUNsYW1wZWQgPSBmYWxzZSkge1xuICAgIGNvbnN0IGJ5dGVzID0gdGhpcy5ieXRlcztcbiAgICBjb25zdCBwb3MgPSB0aGlzLnBvcztcbiAgICBjb25zdCBzdHJFbmQgPSB0aGlzLmVuZDtcblxuICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICBpZiAoc3RyRW5kID4gdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgpIHtcbiAgICAgICAgdGhpcy5lbnN1cmVSYW5nZShwb3MsIHN0ckVuZCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN1YmFycmF5ID0gYnl0ZXMuc3ViYXJyYXkocG9zLCBzdHJFbmQpO1xuICAgICAgcmV0dXJuIGZvcmNlQ2xhbXBlZCA/IG5ldyBVaW50OENsYW1wZWRBcnJheShzdWJhcnJheSkgOiBzdWJhcnJheTtcbiAgICB9XG5cbiAgICBsZXQgZW5kID0gcG9zICsgbGVuZ3RoO1xuXG4gICAgaWYgKGVuZCA+IHN0ckVuZCkge1xuICAgICAgZW5kID0gc3RyRW5kO1xuICAgIH1cblxuICAgIGlmIChlbmQgPiB0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aCkge1xuICAgICAgdGhpcy5lbnN1cmVSYW5nZShwb3MsIGVuZCk7XG4gICAgfVxuXG4gICAgdGhpcy5wb3MgPSBlbmQ7XG4gICAgY29uc3Qgc3ViYXJyYXkgPSBieXRlcy5zdWJhcnJheShwb3MsIGVuZCk7XG4gICAgcmV0dXJuIGZvcmNlQ2xhbXBlZCA/IG5ldyBVaW50OENsYW1wZWRBcnJheShzdWJhcnJheSkgOiBzdWJhcnJheTtcbiAgfVxuXG4gIGdldEJ5dGVSYW5nZShiZWdpbiwgZW5kKSB7XG4gICAgaWYgKGJlZ2luIDwgMCkge1xuICAgICAgYmVnaW4gPSAwO1xuICAgIH1cblxuICAgIGlmIChlbmQgPiB0aGlzLmVuZCkge1xuICAgICAgZW5kID0gdGhpcy5lbmQ7XG4gICAgfVxuXG4gICAgaWYgKGVuZCA+IHRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoKSB7XG4gICAgICB0aGlzLmVuc3VyZVJhbmdlKGJlZ2luLCBlbmQpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmJ5dGVzLnN1YmFycmF5KGJlZ2luLCBlbmQpO1xuICB9XG5cbiAgbWFrZVN1YlN0cmVhbShzdGFydCwgbGVuZ3RoLCBkaWN0ID0gbnVsbCkge1xuICAgIGlmIChsZW5ndGgpIHtcbiAgICAgIGlmIChzdGFydCArIGxlbmd0aCA+IHRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuZW5zdXJlUmFuZ2Uoc3RhcnQsIHN0YXJ0ICsgbGVuZ3RoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHN0YXJ0ID49IHRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuZW5zdXJlQnl0ZShzdGFydCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gQ2h1bmtlZFN0cmVhbVN1YnN0cmVhbSgpIHt9XG5cbiAgICBDaHVua2VkU3RyZWFtU3Vic3RyZWFtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUodGhpcyk7XG5cbiAgICBDaHVua2VkU3RyZWFtU3Vic3RyZWFtLnByb3RvdHlwZS5nZXRNaXNzaW5nQ2h1bmtzID0gZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY2h1bmtTaXplID0gdGhpcy5jaHVua1NpemU7XG4gICAgICBjb25zdCBiZWdpbkNodW5rID0gTWF0aC5mbG9vcih0aGlzLnN0YXJ0IC8gY2h1bmtTaXplKTtcbiAgICAgIGNvbnN0IGVuZENodW5rID0gTWF0aC5mbG9vcigodGhpcy5lbmQgLSAxKSAvIGNodW5rU2l6ZSkgKyAxO1xuICAgICAgY29uc3QgbWlzc2luZ0NodW5rcyA9IFtdO1xuXG4gICAgICBmb3IgKGxldCBjaHVuayA9IGJlZ2luQ2h1bms7IGNodW5rIDwgZW5kQ2h1bms7ICsrY2h1bmspIHtcbiAgICAgICAgaWYgKCF0aGlzLl9sb2FkZWRDaHVua3MuaGFzKGNodW5rKSkge1xuICAgICAgICAgIG1pc3NpbmdDaHVua3MucHVzaChjaHVuayk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1pc3NpbmdDaHVua3M7XG4gICAgfTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDaHVua2VkU3RyZWFtU3Vic3RyZWFtLnByb3RvdHlwZSwgXCJpc0RhdGFMb2FkZWRcIiwge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBpZiAodGhpcy5udW1DaHVua3NMb2FkZWQgPT09IHRoaXMubnVtQ2h1bmtzKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5nZXRNaXNzaW5nQ2h1bmtzKCkubGVuZ3RoID09PSAwO1xuICAgICAgfSxcblxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgY29uc3Qgc3ViU3RyZWFtID0gbmV3IENodW5rZWRTdHJlYW1TdWJzdHJlYW0oKTtcbiAgICBzdWJTdHJlYW0ucG9zID0gc3ViU3RyZWFtLnN0YXJ0ID0gc3RhcnQ7XG4gICAgc3ViU3RyZWFtLmVuZCA9IHN0YXJ0ICsgbGVuZ3RoIHx8IHRoaXMuZW5kO1xuICAgIHN1YlN0cmVhbS5kaWN0ID0gZGljdDtcbiAgICByZXR1cm4gc3ViU3RyZWFtO1xuICB9XG5cbiAgZ2V0QmFzZVN0cmVhbXMoKSB7XG4gICAgcmV0dXJuIFt0aGlzXTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuQ2h1bmtlZFN0cmVhbSA9IENodW5rZWRTdHJlYW07XG5cbmNsYXNzIENodW5rZWRTdHJlYW1NYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IocGRmTmV0d29ya1N0cmVhbSwgYXJncykge1xuICAgIHRoaXMubGVuZ3RoID0gYXJncy5sZW5ndGg7XG4gICAgdGhpcy5jaHVua1NpemUgPSBhcmdzLnJhbmdlQ2h1bmtTaXplO1xuICAgIHRoaXMuc3RyZWFtID0gbmV3IENodW5rZWRTdHJlYW0odGhpcy5sZW5ndGgsIHRoaXMuY2h1bmtTaXplLCB0aGlzKTtcbiAgICB0aGlzLnBkZk5ldHdvcmtTdHJlYW0gPSBwZGZOZXR3b3JrU3RyZWFtO1xuICAgIHRoaXMuZGlzYWJsZUF1dG9GZXRjaCA9IGFyZ3MuZGlzYWJsZUF1dG9GZXRjaDtcbiAgICB0aGlzLm1zZ0hhbmRsZXIgPSBhcmdzLm1zZ0hhbmRsZXI7XG4gICAgdGhpcy5jdXJyUmVxdWVzdElkID0gMDtcbiAgICB0aGlzLl9jaHVua3NOZWVkZWRCeVJlcXVlc3QgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5fcmVxdWVzdHNCeUNodW5rID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuX3Byb21pc2VzQnlSZXF1ZXN0ID0gbmV3IE1hcCgpO1xuICAgIHRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoID0gMDtcbiAgICB0aGlzLmFib3J0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9sb2FkZWRTdHJlYW1DYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICB9XG5cbiAgb25Mb2FkZWRTdHJlYW0oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxuXG4gIHNlbmRSZXF1ZXN0KGJlZ2luLCBlbmQpIHtcbiAgICBjb25zdCByYW5nZVJlYWRlciA9IHRoaXMucGRmTmV0d29ya1N0cmVhbS5nZXRSYW5nZVJlYWRlcihiZWdpbiwgZW5kKTtcblxuICAgIGlmICghcmFuZ2VSZWFkZXIuaXNTdHJlYW1pbmdTdXBwb3J0ZWQpIHtcbiAgICAgIHJhbmdlUmVhZGVyLm9uUHJvZ3Jlc3MgPSB0aGlzLm9uUHJvZ3Jlc3MuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBsZXQgY2h1bmtzID0gW10sXG4gICAgICAgIGxvYWRlZCA9IDA7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHJlYWRDaHVuayA9IGNodW5rID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoIWNodW5rLmRvbmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBjaHVuay52YWx1ZTtcbiAgICAgICAgICAgIGNodW5rcy5wdXNoKGRhdGEpO1xuICAgICAgICAgICAgbG9hZGVkICs9ICgwLCBfdXRpbC5hcnJheUJ5dGVMZW5ndGgpKGRhdGEpO1xuXG4gICAgICAgICAgICBpZiAocmFuZ2VSZWFkZXIuaXNTdHJlYW1pbmdTdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5vblByb2dyZXNzKHtcbiAgICAgICAgICAgICAgICBsb2FkZWRcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJhbmdlUmVhZGVyLnJlYWQoKS50aGVuKHJlYWRDaHVuaywgcmVqZWN0KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBjaHVua0RhdGEgPSAoMCwgX3V0aWwuYXJyYXlzVG9CeXRlcykoY2h1bmtzKTtcbiAgICAgICAgICBjaHVua3MgPSBudWxsO1xuICAgICAgICAgIHJlc29sdmUoY2h1bmtEYXRhKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgcmFuZ2VSZWFkZXIucmVhZCgpLnRoZW4ocmVhZENodW5rLCByZWplY3QpO1xuICAgIH0pLnRoZW4oZGF0YSA9PiB7XG4gICAgICBpZiAodGhpcy5hYm9ydGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5vblJlY2VpdmVEYXRhKHtcbiAgICAgICAgY2h1bms6IGRhdGEsXG4gICAgICAgIGJlZ2luXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlcXVlc3RBbGxDaHVua3MoKSB7XG4gICAgY29uc3QgbWlzc2luZ0NodW5rcyA9IHRoaXMuc3RyZWFtLmdldE1pc3NpbmdDaHVua3MoKTtcblxuICAgIHRoaXMuX3JlcXVlc3RDaHVua3MobWlzc2luZ0NodW5rcyk7XG5cbiAgICByZXR1cm4gdGhpcy5fbG9hZGVkU3RyZWFtQ2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG5cbiAgX3JlcXVlc3RDaHVua3MoY2h1bmtzKSB7XG4gICAgY29uc3QgcmVxdWVzdElkID0gdGhpcy5jdXJyUmVxdWVzdElkKys7XG4gICAgY29uc3QgY2h1bmtzTmVlZGVkID0gbmV3IFNldCgpO1xuXG4gICAgdGhpcy5fY2h1bmtzTmVlZGVkQnlSZXF1ZXN0LnNldChyZXF1ZXN0SWQsIGNodW5rc05lZWRlZCk7XG5cbiAgICBmb3IgKGNvbnN0IGNodW5rIG9mIGNodW5rcykge1xuICAgICAgaWYgKCF0aGlzLnN0cmVhbS5oYXNDaHVuayhjaHVuaykpIHtcbiAgICAgICAgY2h1bmtzTmVlZGVkLmFkZChjaHVuayk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNodW5rc05lZWRlZC5zaXplID09PSAwKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgY29uc3QgY2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcblxuICAgIHRoaXMuX3Byb21pc2VzQnlSZXF1ZXN0LnNldChyZXF1ZXN0SWQsIGNhcGFiaWxpdHkpO1xuXG4gICAgY29uc3QgY2h1bmtzVG9SZXF1ZXN0ID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGNodW5rIG9mIGNodW5rc05lZWRlZCkge1xuICAgICAgbGV0IHJlcXVlc3RJZHMgPSB0aGlzLl9yZXF1ZXN0c0J5Q2h1bmsuZ2V0KGNodW5rKTtcblxuICAgICAgaWYgKCFyZXF1ZXN0SWRzKSB7XG4gICAgICAgIHJlcXVlc3RJZHMgPSBbXTtcblxuICAgICAgICB0aGlzLl9yZXF1ZXN0c0J5Q2h1bmsuc2V0KGNodW5rLCByZXF1ZXN0SWRzKTtcblxuICAgICAgICBjaHVua3NUb1JlcXVlc3QucHVzaChjaHVuayk7XG4gICAgICB9XG5cbiAgICAgIHJlcXVlc3RJZHMucHVzaChyZXF1ZXN0SWQpO1xuICAgIH1cblxuICAgIGlmIChjaHVua3NUb1JlcXVlc3QubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZ3JvdXBlZENodW5rc1RvUmVxdWVzdCA9IHRoaXMuZ3JvdXBDaHVua3MoY2h1bmtzVG9SZXF1ZXN0KTtcblxuICAgICAgZm9yIChjb25zdCBncm91cGVkQ2h1bmsgb2YgZ3JvdXBlZENodW5rc1RvUmVxdWVzdCkge1xuICAgICAgICBjb25zdCBiZWdpbiA9IGdyb3VwZWRDaHVuay5iZWdpbkNodW5rICogdGhpcy5jaHVua1NpemU7XG4gICAgICAgIGNvbnN0IGVuZCA9IE1hdGgubWluKGdyb3VwZWRDaHVuay5lbmRDaHVuayAqIHRoaXMuY2h1bmtTaXplLCB0aGlzLmxlbmd0aCk7XG4gICAgICAgIHRoaXMuc2VuZFJlcXVlc3QoYmVnaW4sIGVuZCkuY2F0Y2goY2FwYWJpbGl0eS5yZWplY3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2UuY2F0Y2gocmVhc29uID0+IHtcbiAgICAgIGlmICh0aGlzLmFib3J0ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyByZWFzb247XG4gICAgfSk7XG4gIH1cblxuICBnZXRTdHJlYW0oKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RyZWFtO1xuICB9XG5cbiAgcmVxdWVzdFJhbmdlKGJlZ2luLCBlbmQpIHtcbiAgICBlbmQgPSBNYXRoLm1pbihlbmQsIHRoaXMubGVuZ3RoKTtcbiAgICBjb25zdCBiZWdpbkNodW5rID0gdGhpcy5nZXRCZWdpbkNodW5rKGJlZ2luKTtcbiAgICBjb25zdCBlbmRDaHVuayA9IHRoaXMuZ2V0RW5kQ2h1bmsoZW5kKTtcbiAgICBjb25zdCBjaHVua3MgPSBbXTtcblxuICAgIGZvciAobGV0IGNodW5rID0gYmVnaW5DaHVuazsgY2h1bmsgPCBlbmRDaHVuazsgKytjaHVuaykge1xuICAgICAgY2h1bmtzLnB1c2goY2h1bmspO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0Q2h1bmtzKGNodW5rcyk7XG4gIH1cblxuICByZXF1ZXN0UmFuZ2VzKHJhbmdlcyA9IFtdKSB7XG4gICAgY29uc3QgY2h1bmtzVG9SZXF1ZXN0ID0gW107XG5cbiAgICBmb3IgKGNvbnN0IHJhbmdlIG9mIHJhbmdlcykge1xuICAgICAgY29uc3QgYmVnaW5DaHVuayA9IHRoaXMuZ2V0QmVnaW5DaHVuayhyYW5nZS5iZWdpbik7XG4gICAgICBjb25zdCBlbmRDaHVuayA9IHRoaXMuZ2V0RW5kQ2h1bmsocmFuZ2UuZW5kKTtcblxuICAgICAgZm9yIChsZXQgY2h1bmsgPSBiZWdpbkNodW5rOyBjaHVuayA8IGVuZENodW5rOyArK2NodW5rKSB7XG4gICAgICAgIGlmICghY2h1bmtzVG9SZXF1ZXN0LmluY2x1ZGVzKGNodW5rKSkge1xuICAgICAgICAgIGNodW5rc1RvUmVxdWVzdC5wdXNoKGNodW5rKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNodW5rc1RvUmVxdWVzdC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gYSAtIGI7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuX3JlcXVlc3RDaHVua3MoY2h1bmtzVG9SZXF1ZXN0KTtcbiAgfVxuXG4gIGdyb3VwQ2h1bmtzKGNodW5rcykge1xuICAgIGNvbnN0IGdyb3VwZWRDaHVua3MgPSBbXTtcbiAgICBsZXQgYmVnaW5DaHVuayA9IC0xO1xuICAgIGxldCBwcmV2Q2h1bmsgPSAtMTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGNodW5rcy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICBjb25zdCBjaHVuayA9IGNodW5rc1tpXTtcblxuICAgICAgaWYgKGJlZ2luQ2h1bmsgPCAwKSB7XG4gICAgICAgIGJlZ2luQ2h1bmsgPSBjaHVuaztcbiAgICAgIH1cblxuICAgICAgaWYgKHByZXZDaHVuayA+PSAwICYmIHByZXZDaHVuayArIDEgIT09IGNodW5rKSB7XG4gICAgICAgIGdyb3VwZWRDaHVua3MucHVzaCh7XG4gICAgICAgICAgYmVnaW5DaHVuayxcbiAgICAgICAgICBlbmRDaHVuazogcHJldkNodW5rICsgMVxuICAgICAgICB9KTtcbiAgICAgICAgYmVnaW5DaHVuayA9IGNodW5rO1xuICAgICAgfVxuXG4gICAgICBpZiAoaSArIDEgPT09IGNodW5rcy5sZW5ndGgpIHtcbiAgICAgICAgZ3JvdXBlZENodW5rcy5wdXNoKHtcbiAgICAgICAgICBiZWdpbkNodW5rLFxuICAgICAgICAgIGVuZENodW5rOiBjaHVuayArIDFcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHByZXZDaHVuayA9IGNodW5rO1xuICAgIH1cblxuICAgIHJldHVybiBncm91cGVkQ2h1bmtzO1xuICB9XG5cbiAgb25Qcm9ncmVzcyhhcmdzKSB7XG4gICAgdGhpcy5tc2dIYW5kbGVyLnNlbmQoXCJEb2NQcm9ncmVzc1wiLCB7XG4gICAgICBsb2FkZWQ6IHRoaXMuc3RyZWFtLm51bUNodW5rc0xvYWRlZCAqIHRoaXMuY2h1bmtTaXplICsgYXJncy5sb2FkZWQsXG4gICAgICB0b3RhbDogdGhpcy5sZW5ndGhcbiAgICB9KTtcbiAgfVxuXG4gIG9uUmVjZWl2ZURhdGEoYXJncykge1xuICAgIGNvbnN0IGNodW5rID0gYXJncy5jaHVuaztcbiAgICBjb25zdCBpc1Byb2dyZXNzaXZlID0gYXJncy5iZWdpbiA9PT0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGJlZ2luID0gaXNQcm9ncmVzc2l2ZSA/IHRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoIDogYXJncy5iZWdpbjtcbiAgICBjb25zdCBlbmQgPSBiZWdpbiArIGNodW5rLmJ5dGVMZW5ndGg7XG4gICAgY29uc3QgYmVnaW5DaHVuayA9IE1hdGguZmxvb3IoYmVnaW4gLyB0aGlzLmNodW5rU2l6ZSk7XG4gICAgY29uc3QgZW5kQ2h1bmsgPSBlbmQgPCB0aGlzLmxlbmd0aCA/IE1hdGguZmxvb3IoZW5kIC8gdGhpcy5jaHVua1NpemUpIDogTWF0aC5jZWlsKGVuZCAvIHRoaXMuY2h1bmtTaXplKTtcblxuICAgIGlmIChpc1Byb2dyZXNzaXZlKSB7XG4gICAgICB0aGlzLnN0cmVhbS5vblJlY2VpdmVQcm9ncmVzc2l2ZURhdGEoY2h1bmspO1xuICAgICAgdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGggPSBlbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RyZWFtLm9uUmVjZWl2ZURhdGEoYmVnaW4sIGNodW5rKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdHJlYW0uaXNEYXRhTG9hZGVkKSB7XG4gICAgICB0aGlzLl9sb2FkZWRTdHJlYW1DYXBhYmlsaXR5LnJlc29sdmUodGhpcy5zdHJlYW0pO1xuICAgIH1cblxuICAgIGNvbnN0IGxvYWRlZFJlcXVlc3RzID0gW107XG5cbiAgICBmb3IgKGxldCBjdXJDaHVuayA9IGJlZ2luQ2h1bms7IGN1ckNodW5rIDwgZW5kQ2h1bms7ICsrY3VyQ2h1bmspIHtcbiAgICAgIGNvbnN0IHJlcXVlc3RJZHMgPSB0aGlzLl9yZXF1ZXN0c0J5Q2h1bmsuZ2V0KGN1ckNodW5rKTtcblxuICAgICAgaWYgKCFyZXF1ZXN0SWRzKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9yZXF1ZXN0c0J5Q2h1bmsuZGVsZXRlKGN1ckNodW5rKTtcblxuICAgICAgZm9yIChjb25zdCByZXF1ZXN0SWQgb2YgcmVxdWVzdElkcykge1xuICAgICAgICBjb25zdCBjaHVua3NOZWVkZWQgPSB0aGlzLl9jaHVua3NOZWVkZWRCeVJlcXVlc3QuZ2V0KHJlcXVlc3RJZCk7XG5cbiAgICAgICAgaWYgKGNodW5rc05lZWRlZC5oYXMoY3VyQ2h1bmspKSB7XG4gICAgICAgICAgY2h1bmtzTmVlZGVkLmRlbGV0ZShjdXJDaHVuayk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2h1bmtzTmVlZGVkLnNpemUgPiAwKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBsb2FkZWRSZXF1ZXN0cy5wdXNoKHJlcXVlc3RJZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmRpc2FibGVBdXRvRmV0Y2ggJiYgdGhpcy5fcmVxdWVzdHNCeUNodW5rLnNpemUgPT09IDApIHtcbiAgICAgIGxldCBuZXh0RW1wdHlDaHVuaztcblxuICAgICAgaWYgKHRoaXMuc3RyZWFtLm51bUNodW5rc0xvYWRlZCA9PT0gMSkge1xuICAgICAgICBjb25zdCBsYXN0Q2h1bmsgPSB0aGlzLnN0cmVhbS5udW1DaHVua3MgLSAxO1xuXG4gICAgICAgIGlmICghdGhpcy5zdHJlYW0uaGFzQ2h1bmsobGFzdENodW5rKSkge1xuICAgICAgICAgIG5leHRFbXB0eUNodW5rID0gbGFzdENodW5rO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0RW1wdHlDaHVuayA9IHRoaXMuc3RyZWFtLm5leHRFbXB0eUNodW5rKGVuZENodW5rKTtcbiAgICAgIH1cblxuICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIobmV4dEVtcHR5Q2h1bmspKSB7XG4gICAgICAgIHRoaXMuX3JlcXVlc3RDaHVua3MoW25leHRFbXB0eUNodW5rXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCByZXF1ZXN0SWQgb2YgbG9hZGVkUmVxdWVzdHMpIHtcbiAgICAgIGNvbnN0IGNhcGFiaWxpdHkgPSB0aGlzLl9wcm9taXNlc0J5UmVxdWVzdC5nZXQocmVxdWVzdElkKTtcblxuICAgICAgdGhpcy5fcHJvbWlzZXNCeVJlcXVlc3QuZGVsZXRlKHJlcXVlc3RJZCk7XG5cbiAgICAgIGNhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIHRoaXMubXNnSGFuZGxlci5zZW5kKFwiRG9jUHJvZ3Jlc3NcIiwge1xuICAgICAgbG9hZGVkOiB0aGlzLnN0cmVhbS5udW1DaHVua3NMb2FkZWQgKiB0aGlzLmNodW5rU2l6ZSxcbiAgICAgIHRvdGFsOiB0aGlzLmxlbmd0aFxuICAgIH0pO1xuICB9XG5cbiAgb25FcnJvcihlcnIpIHtcbiAgICB0aGlzLl9sb2FkZWRTdHJlYW1DYXBhYmlsaXR5LnJlamVjdChlcnIpO1xuICB9XG5cbiAgZ2V0QmVnaW5DaHVuayhiZWdpbikge1xuICAgIHJldHVybiBNYXRoLmZsb29yKGJlZ2luIC8gdGhpcy5jaHVua1NpemUpO1xuICB9XG5cbiAgZ2V0RW5kQ2h1bmsoZW5kKSB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IoKGVuZCAtIDEpIC8gdGhpcy5jaHVua1NpemUpICsgMTtcbiAgfVxuXG4gIGFib3J0KHJlYXNvbikge1xuICAgIHRoaXMuYWJvcnRlZCA9IHRydWU7XG5cbiAgICBpZiAodGhpcy5wZGZOZXR3b3JrU3RyZWFtKSB7XG4gICAgICB0aGlzLnBkZk5ldHdvcmtTdHJlYW0uY2FuY2VsQWxsUmVxdWVzdHMocmVhc29uKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNhcGFiaWxpdHkgb2YgdGhpcy5fcHJvbWlzZXNCeVJlcXVlc3QudmFsdWVzKCkpIHtcbiAgICAgIGNhcGFiaWxpdHkucmVqZWN0KHJlYXNvbik7XG4gICAgfVxuICB9XG5cbn1cblxuZXhwb3J0cy5DaHVua2VkU3RyZWFtTWFuYWdlciA9IENodW5rZWRTdHJlYW1NYW5hZ2VyO1xuXG4vKioqLyB9KSxcbi8qIDkgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuWFJlZlBhcnNlRXhjZXB0aW9uID0gZXhwb3J0cy5YUmVmRW50cnlFeGNlcHRpb24gPSBleHBvcnRzLlBhcnNlckVPRkV4Y2VwdGlvbiA9IGV4cG9ydHMuTWlzc2luZ0RhdGFFeGNlcHRpb24gPSBleHBvcnRzLkRvY1N0YXRzID0gdm9pZCAwO1xuZXhwb3J0cy5jb2xsZWN0QWN0aW9ucyA9IGNvbGxlY3RBY3Rpb25zO1xuZXhwb3J0cy5lbmNvZGVUb1htbFN0cmluZyA9IGVuY29kZVRvWG1sU3RyaW5nO1xuZXhwb3J0cy5lc2NhcGVQREZOYW1lID0gZXNjYXBlUERGTmFtZTtcbmV4cG9ydHMuZ2V0QXJyYXlMb29rdXBUYWJsZUZhY3RvcnkgPSBnZXRBcnJheUxvb2t1cFRhYmxlRmFjdG9yeTtcbmV4cG9ydHMuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSA9IGdldEluaGVyaXRhYmxlUHJvcGVydHk7XG5leHBvcnRzLmdldExvb2t1cFRhYmxlRmFjdG9yeSA9IGdldExvb2t1cFRhYmxlRmFjdG9yeTtcbmV4cG9ydHMuaXNXaGl0ZVNwYWNlID0gaXNXaGl0ZVNwYWNlO1xuZXhwb3J0cy5sb2cyID0gbG9nMjtcbmV4cG9ydHMucGFyc2VYRkFQYXRoID0gcGFyc2VYRkFQYXRoO1xuZXhwb3J0cy5yZWFkSW50OCA9IHJlYWRJbnQ4O1xuZXhwb3J0cy5yZWFkVWludDE2ID0gcmVhZFVpbnQxNjtcbmV4cG9ydHMucmVhZFVpbnQzMiA9IHJlYWRVaW50MzI7XG5leHBvcnRzLnJlY292ZXJKc1VSTCA9IHJlY292ZXJKc1VSTDtcbmV4cG9ydHMudG9Sb21hbk51bWVyYWxzID0gdG9Sb21hbk51bWVyYWxzO1xuZXhwb3J0cy52YWxpZGF0ZUNTU0ZvbnQgPSB2YWxpZGF0ZUNTU0ZvbnQ7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfcHJpbWl0aXZlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNSk7XG5cbmZ1bmN0aW9uIGdldExvb2t1cFRhYmxlRmFjdG9yeShpbml0aWFsaXplcikge1xuICBsZXQgbG9va3VwO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmIChpbml0aWFsaXplcikge1xuICAgICAgbG9va3VwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIGluaXRpYWxpemVyKGxvb2t1cCk7XG4gICAgICBpbml0aWFsaXplciA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxvb2t1cDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0QXJyYXlMb29rdXBUYWJsZUZhY3RvcnkoaW5pdGlhbGl6ZXIpIHtcbiAgbGV0IGxvb2t1cDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoaW5pdGlhbGl6ZXIpIHtcbiAgICAgIGxldCBhcnIgPSBpbml0aWFsaXplcigpO1xuICAgICAgaW5pdGlhbGl6ZXIgPSBudWxsO1xuICAgICAgbG9va3VwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gYXJyLmxlbmd0aDsgaSA8IGlpOyBpICs9IDIpIHtcbiAgICAgICAgbG9va3VwW2FycltpXV0gPSBhcnJbaSArIDFdO1xuICAgICAgfVxuXG4gICAgICBhcnIgPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBsb29rdXA7XG4gIH07XG59XG5cbmNsYXNzIE1pc3NpbmdEYXRhRXhjZXB0aW9uIGV4dGVuZHMgX3V0aWwuQmFzZUV4Y2VwdGlvbiB7XG4gIGNvbnN0cnVjdG9yKGJlZ2luLCBlbmQpIHtcbiAgICBzdXBlcihgTWlzc2luZyBkYXRhIFske2JlZ2lufSwgJHtlbmR9KWAsIFwiTWlzc2luZ0RhdGFFeGNlcHRpb25cIik7XG4gICAgdGhpcy5iZWdpbiA9IGJlZ2luO1xuICAgIHRoaXMuZW5kID0gZW5kO1xuICB9XG5cbn1cblxuZXhwb3J0cy5NaXNzaW5nRGF0YUV4Y2VwdGlvbiA9IE1pc3NpbmdEYXRhRXhjZXB0aW9uO1xuXG5jbGFzcyBQYXJzZXJFT0ZFeGNlcHRpb24gZXh0ZW5kcyBfdXRpbC5CYXNlRXhjZXB0aW9uIHtcbiAgY29uc3RydWN0b3IobXNnKSB7XG4gICAgc3VwZXIobXNnLCBcIlBhcnNlckVPRkV4Y2VwdGlvblwiKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuUGFyc2VyRU9GRXhjZXB0aW9uID0gUGFyc2VyRU9GRXhjZXB0aW9uO1xuXG5jbGFzcyBYUmVmRW50cnlFeGNlcHRpb24gZXh0ZW5kcyBfdXRpbC5CYXNlRXhjZXB0aW9uIHtcbiAgY29uc3RydWN0b3IobXNnKSB7XG4gICAgc3VwZXIobXNnLCBcIlhSZWZFbnRyeUV4Y2VwdGlvblwiKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuWFJlZkVudHJ5RXhjZXB0aW9uID0gWFJlZkVudHJ5RXhjZXB0aW9uO1xuXG5jbGFzcyBYUmVmUGFyc2VFeGNlcHRpb24gZXh0ZW5kcyBfdXRpbC5CYXNlRXhjZXB0aW9uIHtcbiAgY29uc3RydWN0b3IobXNnKSB7XG4gICAgc3VwZXIobXNnLCBcIlhSZWZQYXJzZUV4Y2VwdGlvblwiKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuWFJlZlBhcnNlRXhjZXB0aW9uID0gWFJlZlBhcnNlRXhjZXB0aW9uO1xuXG5jbGFzcyBEb2NTdGF0cyB7XG4gIGNvbnN0cnVjdG9yKGhhbmRsZXIpIHtcbiAgICB0aGlzLl9oYW5kbGVyID0gaGFuZGxlcjtcbiAgICB0aGlzLl9zdHJlYW1UeXBlcyA9IG5ldyBTZXQoKTtcbiAgICB0aGlzLl9mb250VHlwZXMgPSBuZXcgU2V0KCk7XG4gIH1cblxuICBfc2VuZCgpIHtcbiAgICBjb25zdCBzdHJlYW1UeXBlcyA9IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgZm9udFR5cGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0aGlzLl9zdHJlYW1UeXBlcykge1xuICAgICAgc3RyZWFtVHlwZXNbdHlwZV0gPSB0cnVlO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0aGlzLl9mb250VHlwZXMpIHtcbiAgICAgIGZvbnRUeXBlc1t0eXBlXSA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5faGFuZGxlci5zZW5kKFwiRG9jU3RhdHNcIiwge1xuICAgICAgc3RyZWFtVHlwZXMsXG4gICAgICBmb250VHlwZXNcbiAgICB9KTtcbiAgfVxuXG4gIGFkZFN0cmVhbVR5cGUodHlwZSkge1xuICAgIGlmICh0aGlzLl9zdHJlYW1UeXBlcy5oYXModHlwZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9zdHJlYW1UeXBlcy5hZGQodHlwZSk7XG5cbiAgICB0aGlzLl9zZW5kKCk7XG4gIH1cblxuICBhZGRGb250VHlwZSh0eXBlKSB7XG4gICAgaWYgKHRoaXMuX2ZvbnRUeXBlcy5oYXModHlwZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9mb250VHlwZXMuYWRkKHR5cGUpO1xuXG4gICAgdGhpcy5fc2VuZCgpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5Eb2NTdGF0cyA9IERvY1N0YXRzO1xuXG5mdW5jdGlvbiBnZXRJbmhlcml0YWJsZVByb3BlcnR5KHtcbiAgZGljdCxcbiAga2V5LFxuICBnZXRBcnJheSA9IGZhbHNlLFxuICBzdG9wV2hlbkZvdW5kID0gdHJ1ZVxufSkge1xuICBsZXQgdmFsdWVzO1xuICBjb25zdCB2aXNpdGVkID0gbmV3IF9wcmltaXRpdmVzLlJlZlNldCgpO1xuXG4gIHdoaWxlIChkaWN0IGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCAmJiAhKGRpY3Qub2JqSWQgJiYgdmlzaXRlZC5oYXMoZGljdC5vYmpJZCkpKSB7XG4gICAgaWYgKGRpY3Qub2JqSWQpIHtcbiAgICAgIHZpc2l0ZWQucHV0KGRpY3Qub2JqSWQpO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gZ2V0QXJyYXkgPyBkaWN0LmdldEFycmF5KGtleSkgOiBkaWN0LmdldChrZXkpO1xuXG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChzdG9wV2hlbkZvdW5kKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF2YWx1ZXMpIHtcbiAgICAgICAgdmFsdWVzID0gW107XG4gICAgICB9XG5cbiAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICB9XG5cbiAgICBkaWN0ID0gZGljdC5nZXQoXCJQYXJlbnRcIik7XG4gIH1cblxuICByZXR1cm4gdmFsdWVzO1xufVxuXG5jb25zdCBST01BTl9OVU1CRVJfTUFQID0gW1wiXCIsIFwiQ1wiLCBcIkNDXCIsIFwiQ0NDXCIsIFwiQ0RcIiwgXCJEXCIsIFwiRENcIiwgXCJEQ0NcIiwgXCJEQ0NDXCIsIFwiQ01cIiwgXCJcIiwgXCJYXCIsIFwiWFhcIiwgXCJYWFhcIiwgXCJYTFwiLCBcIkxcIiwgXCJMWFwiLCBcIkxYWFwiLCBcIkxYWFhcIiwgXCJYQ1wiLCBcIlwiLCBcIklcIiwgXCJJSVwiLCBcIklJSVwiLCBcIklWXCIsIFwiVlwiLCBcIlZJXCIsIFwiVklJXCIsIFwiVklJSVwiLCBcIklYXCJdO1xuXG5mdW5jdGlvbiB0b1JvbWFuTnVtZXJhbHMobnVtYmVyLCBsb3dlckNhc2UgPSBmYWxzZSkge1xuICAoMCwgX3V0aWwuYXNzZXJ0KShOdW1iZXIuaXNJbnRlZ2VyKG51bWJlcikgJiYgbnVtYmVyID4gMCwgXCJUaGUgbnVtYmVyIHNob3VsZCBiZSBhIHBvc2l0aXZlIGludGVnZXIuXCIpO1xuICBjb25zdCByb21hbkJ1ZiA9IFtdO1xuICBsZXQgcG9zO1xuXG4gIHdoaWxlIChudW1iZXIgPj0gMTAwMCkge1xuICAgIG51bWJlciAtPSAxMDAwO1xuICAgIHJvbWFuQnVmLnB1c2goXCJNXCIpO1xuICB9XG5cbiAgcG9zID0gbnVtYmVyIC8gMTAwIHwgMDtcbiAgbnVtYmVyICU9IDEwMDtcbiAgcm9tYW5CdWYucHVzaChST01BTl9OVU1CRVJfTUFQW3Bvc10pO1xuICBwb3MgPSBudW1iZXIgLyAxMCB8IDA7XG4gIG51bWJlciAlPSAxMDtcbiAgcm9tYW5CdWYucHVzaChST01BTl9OVU1CRVJfTUFQWzEwICsgcG9zXSk7XG4gIHJvbWFuQnVmLnB1c2goUk9NQU5fTlVNQkVSX01BUFsyMCArIG51bWJlcl0pO1xuICBjb25zdCByb21hblN0ciA9IHJvbWFuQnVmLmpvaW4oXCJcIik7XG4gIHJldHVybiBsb3dlckNhc2UgPyByb21hblN0ci50b0xvd2VyQ2FzZSgpIDogcm9tYW5TdHI7XG59XG5cbmZ1bmN0aW9uIGxvZzIoeCkge1xuICBpZiAoeCA8PSAwKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICByZXR1cm4gTWF0aC5jZWlsKE1hdGgubG9nMih4KSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRJbnQ4KGRhdGEsIG9mZnNldCkge1xuICByZXR1cm4gZGF0YVtvZmZzZXRdIDw8IDI0ID4+IDI0O1xufVxuXG5mdW5jdGlvbiByZWFkVWludDE2KGRhdGEsIG9mZnNldCkge1xuICByZXR1cm4gZGF0YVtvZmZzZXRdIDw8IDggfCBkYXRhW29mZnNldCArIDFdO1xufVxuXG5mdW5jdGlvbiByZWFkVWludDMyKGRhdGEsIG9mZnNldCkge1xuICByZXR1cm4gKGRhdGFbb2Zmc2V0XSA8PCAyNCB8IGRhdGFbb2Zmc2V0ICsgMV0gPDwgMTYgfCBkYXRhW29mZnNldCArIDJdIDw8IDggfCBkYXRhW29mZnNldCArIDNdKSA+Pj4gMDtcbn1cblxuZnVuY3Rpb24gaXNXaGl0ZVNwYWNlKGNoKSB7XG4gIHJldHVybiBjaCA9PT0gMHgyMCB8fCBjaCA9PT0gMHgwOSB8fCBjaCA9PT0gMHgwZCB8fCBjaCA9PT0gMHgwYTtcbn1cblxuZnVuY3Rpb24gcGFyc2VYRkFQYXRoKHBhdGgpIHtcbiAgY29uc3QgcG9zaXRpb25QYXR0ZXJuID0gLyguKylcXFsoXFxkKylcXF0kLztcbiAgcmV0dXJuIHBhdGguc3BsaXQoXCIuXCIpLm1hcChjb21wb25lbnQgPT4ge1xuICAgIGNvbnN0IG0gPSBjb21wb25lbnQubWF0Y2gocG9zaXRpb25QYXR0ZXJuKTtcblxuICAgIGlmIChtKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBtWzFdLFxuICAgICAgICBwb3M6IHBhcnNlSW50KG1bMl0sIDEwKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogY29tcG9uZW50LFxuICAgICAgcG9zOiAwXG4gICAgfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGVzY2FwZVBERk5hbWUoc3RyKSB7XG4gIGNvbnN0IGJ1ZmZlciA9IFtdO1xuICBsZXQgc3RhcnQgPSAwO1xuXG4gIGZvciAobGV0IGkgPSAwLCBpaSA9IHN0ci5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgY29uc3QgY2hhciA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuXG4gICAgaWYgKGNoYXIgPCAweDIxIHx8IGNoYXIgPiAweDdlIHx8IGNoYXIgPT09IDB4MjMgfHwgY2hhciA9PT0gMHgyOCB8fCBjaGFyID09PSAweDI5IHx8IGNoYXIgPT09IDB4M2MgfHwgY2hhciA9PT0gMHgzZSB8fCBjaGFyID09PSAweDViIHx8IGNoYXIgPT09IDB4NWQgfHwgY2hhciA9PT0gMHg3YiB8fCBjaGFyID09PSAweDdkIHx8IGNoYXIgPT09IDB4MmYgfHwgY2hhciA9PT0gMHgyNSkge1xuICAgICAgaWYgKHN0YXJ0IDwgaSkge1xuICAgICAgICBidWZmZXIucHVzaChzdHIuc3Vic3RyaW5nKHN0YXJ0LCBpKSk7XG4gICAgICB9XG5cbiAgICAgIGJ1ZmZlci5wdXNoKGAjJHtjaGFyLnRvU3RyaW5nKDE2KX1gKTtcbiAgICAgIHN0YXJ0ID0gaSArIDE7XG4gICAgfVxuICB9XG5cbiAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgaWYgKHN0YXJ0IDwgc3RyLmxlbmd0aCkge1xuICAgIGJ1ZmZlci5wdXNoKHN0ci5zdWJzdHJpbmcoc3RhcnQsIHN0ci5sZW5ndGgpKTtcbiAgfVxuXG4gIHJldHVybiBidWZmZXIuam9pbihcIlwiKTtcbn1cblxuZnVuY3Rpb24gX2NvbGxlY3RKUyhlbnRyeSwgeHJlZiwgbGlzdCwgcGFyZW50cykge1xuICBpZiAoIWVudHJ5KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IHBhcmVudCA9IG51bGw7XG5cbiAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1JlZikoZW50cnkpKSB7XG4gICAgaWYgKHBhcmVudHMuaGFzKGVudHJ5KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHBhcmVudCA9IGVudHJ5O1xuICAgIHBhcmVudHMucHV0KHBhcmVudCk7XG4gICAgZW50cnkgPSB4cmVmLmZldGNoKGVudHJ5KTtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KGVudHJ5KSkge1xuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBlbnRyeSkge1xuICAgICAgX2NvbGxlY3RKUyhlbGVtZW50LCB4cmVmLCBsaXN0LCBwYXJlbnRzKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoZW50cnkgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5EaWN0KSB7XG4gICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGVudHJ5LmdldChcIlNcIiksIFwiSmF2YVNjcmlwdFwiKSAmJiBlbnRyeS5oYXMoXCJKU1wiKSkge1xuICAgICAgY29uc3QganMgPSBlbnRyeS5nZXQoXCJKU1wiKTtcbiAgICAgIGxldCBjb2RlO1xuXG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShqcykpIHtcbiAgICAgICAgY29kZSA9IGpzLmdldFN0cmluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29kZSA9IGpzO1xuICAgICAgfVxuXG4gICAgICBjb2RlID0gKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShjb2RlKTtcblxuICAgICAgaWYgKGNvZGUpIHtcbiAgICAgICAgbGlzdC5wdXNoKGNvZGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIF9jb2xsZWN0SlMoZW50cnkuZ2V0UmF3KFwiTmV4dFwiKSwgeHJlZiwgbGlzdCwgcGFyZW50cyk7XG4gIH1cblxuICBpZiAocGFyZW50KSB7XG4gICAgcGFyZW50cy5yZW1vdmUocGFyZW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb2xsZWN0QWN0aW9ucyh4cmVmLCBkaWN0LCBldmVudFR5cGUpIHtcbiAgY29uc3QgYWN0aW9ucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGNvbnN0IGFkZGl0aW9uYWxBY3Rpb25zRGljdHMgPSBnZXRJbmhlcml0YWJsZVByb3BlcnR5KHtcbiAgICBkaWN0LFxuICAgIGtleTogXCJBQVwiLFxuICAgIHN0b3BXaGVuRm91bmQ6IGZhbHNlXG4gIH0pO1xuXG4gIGlmIChhZGRpdGlvbmFsQWN0aW9uc0RpY3RzKSB7XG4gICAgZm9yIChsZXQgaSA9IGFkZGl0aW9uYWxBY3Rpb25zRGljdHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IGFkZGl0aW9uYWxBY3Rpb25zID0gYWRkaXRpb25hbEFjdGlvbnNEaWN0c1tpXTtcblxuICAgICAgaWYgKCEoYWRkaXRpb25hbEFjdGlvbnMgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5EaWN0KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBrZXkgb2YgYWRkaXRpb25hbEFjdGlvbnMuZ2V0S2V5cygpKSB7XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IGV2ZW50VHlwZVtrZXldO1xuXG4gICAgICAgIGlmICghYWN0aW9uKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhY3Rpb25EaWN0ID0gYWRkaXRpb25hbEFjdGlvbnMuZ2V0UmF3KGtleSk7XG4gICAgICAgIGNvbnN0IHBhcmVudHMgPSBuZXcgX3ByaW1pdGl2ZXMuUmVmU2V0KCk7XG4gICAgICAgIGNvbnN0IGxpc3QgPSBbXTtcblxuICAgICAgICBfY29sbGVjdEpTKGFjdGlvbkRpY3QsIHhyZWYsIGxpc3QsIHBhcmVudHMpO1xuXG4gICAgICAgIGlmIChsaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBhY3Rpb25zW2FjdGlvbl0gPSBsaXN0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGRpY3QuaGFzKFwiQVwiKSkge1xuICAgIGNvbnN0IGFjdGlvbkRpY3QgPSBkaWN0LmdldChcIkFcIik7XG4gICAgY29uc3QgcGFyZW50cyA9IG5ldyBfcHJpbWl0aXZlcy5SZWZTZXQoKTtcbiAgICBjb25zdCBsaXN0ID0gW107XG5cbiAgICBfY29sbGVjdEpTKGFjdGlvbkRpY3QsIHhyZWYsIGxpc3QsIHBhcmVudHMpO1xuXG4gICAgaWYgKGxpc3QubGVuZ3RoID4gMCkge1xuICAgICAgYWN0aW9ucy5BY3Rpb24gPSBsaXN0O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoMCwgX3V0aWwub2JqZWN0U2l6ZSkoYWN0aW9ucykgPiAwID8gYWN0aW9ucyA6IG51bGw7XG59XG5cbmNvbnN0IFhNTEVudGl0aWVzID0ge1xuICAweDNjOiBcIiZsdDtcIixcbiAgMHgzZTogXCImZ3Q7XCIsXG4gIDB4MjY6IFwiJmFtcDtcIixcbiAgMHgyMjogXCImcXVvdDtcIixcbiAgMHgyNzogXCImYXBvcztcIlxufTtcblxuZnVuY3Rpb24gZW5jb2RlVG9YbWxTdHJpbmcoc3RyKSB7XG4gIGNvbnN0IGJ1ZmZlciA9IFtdO1xuICBsZXQgc3RhcnQgPSAwO1xuXG4gIGZvciAobGV0IGkgPSAwLCBpaSA9IHN0ci5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgY29uc3QgY2hhciA9IHN0ci5jb2RlUG9pbnRBdChpKTtcblxuICAgIGlmICgweDIwIDw9IGNoYXIgJiYgY2hhciA8PSAweDdlKSB7XG4gICAgICBjb25zdCBlbnRpdHkgPSBYTUxFbnRpdGllc1tjaGFyXTtcblxuICAgICAgaWYgKGVudGl0eSkge1xuICAgICAgICBpZiAoc3RhcnQgPCBpKSB7XG4gICAgICAgICAgYnVmZmVyLnB1c2goc3RyLnN1YnN0cmluZyhzdGFydCwgaSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnVmZmVyLnB1c2goZW50aXR5KTtcbiAgICAgICAgc3RhcnQgPSBpICsgMTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHN0YXJ0IDwgaSkge1xuICAgICAgICBidWZmZXIucHVzaChzdHIuc3Vic3RyaW5nKHN0YXJ0LCBpKSk7XG4gICAgICB9XG5cbiAgICAgIGJ1ZmZlci5wdXNoKGAmI3gke2NoYXIudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9O2ApO1xuXG4gICAgICBpZiAoY2hhciA+IDB4ZDdmZiAmJiAoY2hhciA8IDB4ZTAwMCB8fCBjaGFyID4gMHhmZmZkKSkge1xuICAgICAgICBpKys7XG4gICAgICB9XG5cbiAgICAgIHN0YXJ0ID0gaSArIDE7XG4gICAgfVxuICB9XG5cbiAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgaWYgKHN0YXJ0IDwgc3RyLmxlbmd0aCkge1xuICAgIGJ1ZmZlci5wdXNoKHN0ci5zdWJzdHJpbmcoc3RhcnQsIHN0ci5sZW5ndGgpKTtcbiAgfVxuXG4gIHJldHVybiBidWZmZXIuam9pbihcIlwiKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVDU1NGb250KGNzc0ZvbnRJbmZvKSB7XG4gIGNvbnN0IERFRkFVTFRfQ1NTX0ZPTlRfT0JMSVFVRSA9IFwiMTRcIjtcbiAgY29uc3QgREVGQVVMVF9DU1NfRk9OVF9XRUlHSFQgPSBcIjQwMFwiO1xuICBjb25zdCBDU1NfRk9OVF9XRUlHSFRfVkFMVUVTID0gbmV3IFNldChbXCIxMDBcIiwgXCIyMDBcIiwgXCIzMDBcIiwgXCI0MDBcIiwgXCI1MDBcIiwgXCI2MDBcIiwgXCI3MDBcIiwgXCI4MDBcIiwgXCI5MDBcIiwgXCIxMDAwXCIsIFwibm9ybWFsXCIsIFwiYm9sZFwiLCBcImJvbGRlclwiLCBcImxpZ2h0ZXJcIl0pO1xuICBjb25zdCB7XG4gICAgZm9udEZhbWlseSxcbiAgICBmb250V2VpZ2h0LFxuICAgIGl0YWxpY0FuZ2xlXG4gIH0gPSBjc3NGb250SW5mbztcblxuICBpZiAoL15cIi4qXCIkLy50ZXN0KGZvbnRGYW1pbHkpKSB7XG4gICAgaWYgKC9bXlxcXFxdXCIvLnRlc3QoZm9udEZhbWlseS5zbGljZSgxLCBmb250RmFtaWx5Lmxlbmd0aCAtIDEpKSkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKGBYRkEgLSBGb250RmFtaWx5IGNvbnRhaW5zIHNvbWUgdW5lc2NhcGVkIFwiOiAke2ZvbnRGYW1pbHl9LmApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSBlbHNlIGlmICgvXicuKickLy50ZXN0KGZvbnRGYW1pbHkpKSB7XG4gICAgaWYgKC9bXlxcXFxdJy8udGVzdChmb250RmFtaWx5LnNsaWNlKDEsIGZvbnRGYW1pbHkubGVuZ3RoIC0gMSkpKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoYFhGQSAtIEZvbnRGYW1pbHkgY29udGFpbnMgc29tZSB1bmVzY2FwZWQgJzogJHtmb250RmFtaWx5fS5gKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yIChjb25zdCBpZGVudCBvZiBmb250RmFtaWx5LnNwbGl0KC9bIFxcdF0rLykpIHtcbiAgICAgIGlmICgvXihcXGR8KC0oXFxkfC0pKSkvLnRlc3QoaWRlbnQpIHx8ICEvXltcXHctXFxcXF0rJC8udGVzdChpZGVudCkpIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKGBYRkEgLSBGb250RmFtaWx5IGNvbnRhaW5zIHNvbWUgaW52YWxpZCA8Y3VzdG9tLWlkZW50PjogJHtmb250RmFtaWx5fS5gKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHdlaWdodCA9IGZvbnRXZWlnaHQgPyBmb250V2VpZ2h0LnRvU3RyaW5nKCkgOiBcIlwiO1xuICBjc3NGb250SW5mby5mb250V2VpZ2h0ID0gQ1NTX0ZPTlRfV0VJR0hUX1ZBTFVFUy5oYXMod2VpZ2h0KSA/IHdlaWdodCA6IERFRkFVTFRfQ1NTX0ZPTlRfV0VJR0hUO1xuICBjb25zdCBhbmdsZSA9IHBhcnNlRmxvYXQoaXRhbGljQW5nbGUpO1xuICBjc3NGb250SW5mby5pdGFsaWNBbmdsZSA9IGlzTmFOKGFuZ2xlKSB8fCBhbmdsZSA8IC05MCB8fCBhbmdsZSA+IDkwID8gREVGQVVMVF9DU1NfRk9OVF9PQkxJUVVFIDogaXRhbGljQW5nbGUudG9TdHJpbmcoKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJlY292ZXJKc1VSTChzdHIpIHtcbiAgY29uc3QgVVJMX09QRU5fTUVUSE9EUyA9IFtcImFwcC5sYXVuY2hVUkxcIiwgXCJ3aW5kb3cub3BlblwiLCBcInhmYS5ob3N0LmdvdG9VUkxcIl07XG4gIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChcIl5cXFxccyooXCIgKyBVUkxfT1BFTl9NRVRIT0RTLmpvaW4oXCJ8XCIpLnNwbGl0KFwiLlwiKS5qb2luKFwiXFxcXC5cIikgKyBcIilcXFxcKCg/Oid8XFxcIikoW14nXFxcIl0qKSg/Oid8XFxcIikoPzosXFxcXHMqKFxcXFx3KylcXFxcKXxcXFxcKSlcIiwgXCJpXCIpO1xuICBjb25zdCBqc1VybCA9IHJlZ2V4LmV4ZWMoc3RyKTtcblxuICBpZiAoanNVcmwgJiYganNVcmxbMl0pIHtcbiAgICBjb25zdCB1cmwgPSBqc1VybFsyXTtcbiAgICBsZXQgbmV3V2luZG93ID0gZmFsc2U7XG5cbiAgICBpZiAoanNVcmxbM10gPT09IFwidHJ1ZVwiICYmIGpzVXJsWzFdID09PSBcImFwcC5sYXVuY2hVUkxcIikge1xuICAgICAgbmV3V2luZG93ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdXJsLFxuICAgICAgbmV3V2luZG93XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKioqLyB9KSxcbi8qIDEwICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLlN0cmluZ1N0cmVhbSA9IGV4cG9ydHMuU3RyZWFtID0gZXhwb3J0cy5OdWxsU3RyZWFtID0gdm9pZCAwO1xuXG52YXIgX2Jhc2Vfc3RyZWFtID0gX193X3BkZmpzX3JlcXVpcmVfXyg2KTtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxuY2xhc3MgU3RyZWFtIGV4dGVuZHMgX2Jhc2Vfc3RyZWFtLkJhc2VTdHJlYW0ge1xuICBjb25zdHJ1Y3RvcihhcnJheUJ1ZmZlciwgc3RhcnQsIGxlbmd0aCwgZGljdCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5ieXRlcyA9IGFycmF5QnVmZmVyIGluc3RhbmNlb2YgVWludDhBcnJheSA/IGFycmF5QnVmZmVyIDogbmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpO1xuICAgIHRoaXMuc3RhcnQgPSBzdGFydCB8fCAwO1xuICAgIHRoaXMucG9zID0gdGhpcy5zdGFydDtcbiAgICB0aGlzLmVuZCA9IHN0YXJ0ICsgbGVuZ3RoIHx8IHRoaXMuYnl0ZXMubGVuZ3RoO1xuICAgIHRoaXMuZGljdCA9IGRpY3Q7XG4gIH1cblxuICBnZXQgbGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLmVuZCAtIHRoaXMuc3RhcnQ7XG4gIH1cblxuICBnZXQgaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5sZW5ndGggPT09IDA7XG4gIH1cblxuICBnZXRCeXRlKCkge1xuICAgIGlmICh0aGlzLnBvcyA+PSB0aGlzLmVuZCkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmJ5dGVzW3RoaXMucG9zKytdO1xuICB9XG5cbiAgZ2V0Qnl0ZXMobGVuZ3RoLCBmb3JjZUNsYW1wZWQgPSBmYWxzZSkge1xuICAgIGNvbnN0IGJ5dGVzID0gdGhpcy5ieXRlcztcbiAgICBjb25zdCBwb3MgPSB0aGlzLnBvcztcbiAgICBjb25zdCBzdHJFbmQgPSB0aGlzLmVuZDtcblxuICAgIGlmICghbGVuZ3RoKSB7XG4gICAgICBjb25zdCBzdWJhcnJheSA9IGJ5dGVzLnN1YmFycmF5KHBvcywgc3RyRW5kKTtcbiAgICAgIHJldHVybiBmb3JjZUNsYW1wZWQgPyBuZXcgVWludDhDbGFtcGVkQXJyYXkoc3ViYXJyYXkpIDogc3ViYXJyYXk7XG4gICAgfVxuXG4gICAgbGV0IGVuZCA9IHBvcyArIGxlbmd0aDtcblxuICAgIGlmIChlbmQgPiBzdHJFbmQpIHtcbiAgICAgIGVuZCA9IHN0ckVuZDtcbiAgICB9XG5cbiAgICB0aGlzLnBvcyA9IGVuZDtcbiAgICBjb25zdCBzdWJhcnJheSA9IGJ5dGVzLnN1YmFycmF5KHBvcywgZW5kKTtcbiAgICByZXR1cm4gZm9yY2VDbGFtcGVkID8gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHN1YmFycmF5KSA6IHN1YmFycmF5O1xuICB9XG5cbiAgZ2V0Qnl0ZVJhbmdlKGJlZ2luLCBlbmQpIHtcbiAgICBpZiAoYmVnaW4gPCAwKSB7XG4gICAgICBiZWdpbiA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGVuZCA+IHRoaXMuZW5kKSB7XG4gICAgICBlbmQgPSB0aGlzLmVuZDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5ieXRlcy5zdWJhcnJheShiZWdpbiwgZW5kKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMucG9zID0gdGhpcy5zdGFydDtcbiAgfVxuXG4gIG1vdmVTdGFydCgpIHtcbiAgICB0aGlzLnN0YXJ0ID0gdGhpcy5wb3M7XG4gIH1cblxuICBtYWtlU3ViU3RyZWFtKHN0YXJ0LCBsZW5ndGgsIGRpY3QgPSBudWxsKSB7XG4gICAgcmV0dXJuIG5ldyBTdHJlYW0odGhpcy5ieXRlcy5idWZmZXIsIHN0YXJ0LCBsZW5ndGgsIGRpY3QpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5TdHJlYW0gPSBTdHJlYW07XG5cbmNsYXNzIFN0cmluZ1N0cmVhbSBleHRlbmRzIFN0cmVhbSB7XG4gIGNvbnN0cnVjdG9yKHN0cikge1xuICAgIHN1cGVyKCgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShzdHIpKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuU3RyaW5nU3RyZWFtID0gU3RyaW5nU3RyZWFtO1xuXG5jbGFzcyBOdWxsU3RyZWFtIGV4dGVuZHMgU3RyZWFtIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIobmV3IFVpbnQ4QXJyYXkoMCkpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5OdWxsU3RyZWFtID0gTnVsbFN0cmVhbTtcblxuLyoqKi8gfSksXG4vKiAxMSAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5QYWdlID0gZXhwb3J0cy5QREZEb2N1bWVudCA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9wcmltaXRpdmVzID0gX193X3BkZmpzX3JlcXVpcmVfXyg1KTtcblxudmFyIF9jb3JlX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXyg5KTtcblxudmFyIF94ZmFfZm9udHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEyKTtcblxudmFyIF9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEwKTtcblxudmFyIF9hbm5vdGF0aW9uID0gX193X3BkZmpzX3JlcXVpcmVfXygyMik7XG5cbnZhciBfYmFzZV9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDYpO1xuXG52YXIgX2NyeXB0byA9IF9fd19wZGZqc19yZXF1aXJlX18oNzIpO1xuXG52YXIgX2NhdGFsb2cgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDY0KTtcblxudmFyIF9wYXJzZXIgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDI3KTtcblxudmFyIF9vYmplY3RfbG9hZGVyID0gX193X3BkZmpzX3JlcXVpcmVfXyg3MCk7XG5cbnZhciBfb3BlcmF0b3JfbGlzdCA9IF9fd19wZGZqc19yZXF1aXJlX18oNjIpO1xuXG52YXIgX2V2YWx1YXRvciA9IF9fd19wZGZqc19yZXF1aXJlX18oMjUpO1xuXG52YXIgX2RlY29kZV9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDI5KTtcblxudmFyIF9zdHJ1Y3RfdHJlZSA9IF9fd19wZGZqc19yZXF1aXJlX18oNjkpO1xuXG52YXIgX2ZhY3RvcnkgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDc0KTtcblxudmFyIF94cmVmID0gX193X3BkZmpzX3JlcXVpcmVfXyg5OCk7XG5cbmNvbnN0IERFRkFVTFRfVVNFUl9VTklUID0gMS4wO1xuY29uc3QgTEVUVEVSX1NJWkVfTUVESUFCT1ggPSBbMCwgMCwgNjEyLCA3OTJdO1xuXG5jbGFzcyBQYWdlIHtcbiAgY29uc3RydWN0b3Ioe1xuICAgIHBkZk1hbmFnZXIsXG4gICAgeHJlZixcbiAgICBwYWdlSW5kZXgsXG4gICAgcGFnZURpY3QsXG4gICAgcmVmLFxuICAgIGdsb2JhbElkRmFjdG9yeSxcbiAgICBmb250Q2FjaGUsXG4gICAgYnVpbHRJbkNNYXBDYWNoZSxcbiAgICBzdGFuZGFyZEZvbnREYXRhQ2FjaGUsXG4gICAgZ2xvYmFsSW1hZ2VDYWNoZSxcbiAgICBub25CbGVuZE1vZGVzU2V0LFxuICAgIHhmYUZhY3RvcnlcbiAgfSkge1xuICAgIHRoaXMucGRmTWFuYWdlciA9IHBkZk1hbmFnZXI7XG4gICAgdGhpcy5wYWdlSW5kZXggPSBwYWdlSW5kZXg7XG4gICAgdGhpcy5wYWdlRGljdCA9IHBhZ2VEaWN0O1xuICAgIHRoaXMueHJlZiA9IHhyZWY7XG4gICAgdGhpcy5yZWYgPSByZWY7XG4gICAgdGhpcy5mb250Q2FjaGUgPSBmb250Q2FjaGU7XG4gICAgdGhpcy5idWlsdEluQ01hcENhY2hlID0gYnVpbHRJbkNNYXBDYWNoZTtcbiAgICB0aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZSA9IHN0YW5kYXJkRm9udERhdGFDYWNoZTtcbiAgICB0aGlzLmdsb2JhbEltYWdlQ2FjaGUgPSBnbG9iYWxJbWFnZUNhY2hlO1xuICAgIHRoaXMubm9uQmxlbmRNb2Rlc1NldCA9IG5vbkJsZW5kTW9kZXNTZXQ7XG4gICAgdGhpcy5ldmFsdWF0b3JPcHRpb25zID0gcGRmTWFuYWdlci5ldmFsdWF0b3JPcHRpb25zO1xuICAgIHRoaXMucmVzb3VyY2VzUHJvbWlzZSA9IG51bGw7XG4gICAgdGhpcy54ZmFGYWN0b3J5ID0geGZhRmFjdG9yeTtcbiAgICBjb25zdCBpZENvdW50ZXJzID0ge1xuICAgICAgb2JqOiAwXG4gICAgfTtcbiAgICB0aGlzLl9sb2NhbElkRmFjdG9yeSA9IGNsYXNzIGV4dGVuZHMgZ2xvYmFsSWRGYWN0b3J5IHtcbiAgICAgIHN0YXRpYyBjcmVhdGVPYmpJZCgpIHtcbiAgICAgICAgcmV0dXJuIGBwJHtwYWdlSW5kZXh9XyR7KytpZENvdW50ZXJzLm9ian1gO1xuICAgICAgfVxuXG4gICAgICBzdGF0aWMgZ2V0UGFnZU9iaklkKCkge1xuICAgICAgICByZXR1cm4gYHBhZ2Uke3JlZi50b1N0cmluZygpfWA7XG4gICAgICB9XG5cbiAgICB9O1xuICB9XG5cbiAgX2dldEluaGVyaXRhYmxlUHJvcGVydHkoa2V5LCBnZXRBcnJheSA9IGZhbHNlKSB7XG4gICAgY29uc3QgdmFsdWUgPSAoMCwgX2NvcmVfdXRpbHMuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe1xuICAgICAgZGljdDogdGhpcy5wYWdlRGljdCxcbiAgICAgIGtleSxcbiAgICAgIGdldEFycmF5LFxuICAgICAgc3RvcFdoZW5Gb3VuZDogZmFsc2VcbiAgICB9KTtcblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUubGVuZ3RoID09PSAxIHx8ICEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KSh2YWx1ZVswXSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZVswXTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3ByaW1pdGl2ZXMuRGljdC5tZXJnZSh7XG4gICAgICB4cmVmOiB0aGlzLnhyZWYsXG4gICAgICBkaWN0QXJyYXk6IHZhbHVlXG4gICAgfSk7XG4gIH1cblxuICBnZXQgY29udGVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5wYWdlRGljdC5nZXRBcnJheShcIkNvbnRlbnRzXCIpO1xuICB9XG5cbiAgZ2V0IHJlc291cmNlcygpIHtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJyZXNvdXJjZXNcIiwgdGhpcy5fZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eShcIlJlc291cmNlc1wiKSB8fCBfcHJpbWl0aXZlcy5EaWN0LmVtcHR5KTtcbiAgfVxuXG4gIF9nZXRCb3VuZGluZ0JveChuYW1lKSB7XG4gICAgaWYgKHRoaXMueGZhRGF0YSkge1xuICAgICAgcmV0dXJuIHRoaXMueGZhRGF0YS5iYm94O1xuICAgIH1cblxuICAgIGNvbnN0IGJveCA9IHRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkobmFtZSwgdHJ1ZSk7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShib3gpICYmIGJveC5sZW5ndGggPT09IDQpIHtcbiAgICAgIGlmIChib3hbMl0gLSBib3hbMF0gIT09IDAgJiYgYm94WzNdIC0gYm94WzFdICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBib3g7XG4gICAgICB9XG5cbiAgICAgICgwLCBfdXRpbC53YXJuKShgRW1wdHkgLyR7bmFtZX0gZW50cnkuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXQgbWVkaWFCb3goKSB7XG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwibWVkaWFCb3hcIiwgdGhpcy5fZ2V0Qm91bmRpbmdCb3goXCJNZWRpYUJveFwiKSB8fCBMRVRURVJfU0laRV9NRURJQUJPWCk7XG4gIH1cblxuICBnZXQgY3JvcEJveCgpIHtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJjcm9wQm94XCIsIHRoaXMuX2dldEJvdW5kaW5nQm94KFwiQ3JvcEJveFwiKSB8fCB0aGlzLm1lZGlhQm94KTtcbiAgfVxuXG4gIGdldCB1c2VyVW5pdCgpIHtcbiAgICBsZXQgb2JqID0gdGhpcy5wYWdlRGljdC5nZXQoXCJVc2VyVW5pdFwiKTtcblxuICAgIGlmICghKDAsIF91dGlsLmlzTnVtKShvYmopIHx8IG9iaiA8PSAwKSB7XG4gICAgICBvYmogPSBERUZBVUxUX1VTRVJfVU5JVDtcbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJ1c2VyVW5pdFwiLCBvYmopO1xuICB9XG5cbiAgZ2V0IHZpZXcoKSB7XG4gICAgY29uc3Qge1xuICAgICAgY3JvcEJveCxcbiAgICAgIG1lZGlhQm94XG4gICAgfSA9IHRoaXM7XG4gICAgbGV0IHZpZXc7XG5cbiAgICBpZiAoY3JvcEJveCA9PT0gbWVkaWFCb3ggfHwgKDAsIF91dGlsLmlzQXJyYXlFcXVhbCkoY3JvcEJveCwgbWVkaWFCb3gpKSB7XG4gICAgICB2aWV3ID0gbWVkaWFCb3g7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGJveCA9IF91dGlsLlV0aWwuaW50ZXJzZWN0KGNyb3BCb3gsIG1lZGlhQm94KTtcblxuICAgICAgaWYgKGJveCAmJiBib3hbMl0gLSBib3hbMF0gIT09IDAgJiYgYm94WzNdIC0gYm94WzFdICE9PSAwKSB7XG4gICAgICAgIHZpZXcgPSBib3g7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoXCJFbXB0eSAvQ3JvcEJveCBhbmQgL01lZGlhQm94IGludGVyc2VjdGlvbi5cIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwidmlld1wiLCB2aWV3IHx8IG1lZGlhQm94KTtcbiAgfVxuXG4gIGdldCByb3RhdGUoKSB7XG4gICAgbGV0IHJvdGF0ZSA9IHRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkoXCJSb3RhdGVcIikgfHwgMDtcblxuICAgIGlmIChyb3RhdGUgJSA5MCAhPT0gMCkge1xuICAgICAgcm90YXRlID0gMDtcbiAgICB9IGVsc2UgaWYgKHJvdGF0ZSA+PSAzNjApIHtcbiAgICAgIHJvdGF0ZSAlPSAzNjA7XG4gICAgfSBlbHNlIGlmIChyb3RhdGUgPCAwKSB7XG4gICAgICByb3RhdGUgPSAocm90YXRlICUgMzYwICsgMzYwKSAlIDM2MDtcbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJyb3RhdGVcIiwgcm90YXRlKTtcbiAgfVxuXG4gIF9vblN1YlN0cmVhbUVycm9yKGhhbmRsZXIsIHJlYXNvbiwgb2JqSWQpIHtcbiAgICBpZiAodGhpcy5ldmFsdWF0b3JPcHRpb25zLmlnbm9yZUVycm9ycykge1xuICAgICAgaGFuZGxlci5zZW5kKFwiVW5zdXBwb3J0ZWRGZWF0dXJlXCIsIHtcbiAgICAgICAgZmVhdHVyZUlkOiBfdXRpbC5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvckNvbnRlbnRTdWJTdHJlYW1cbiAgICAgIH0pO1xuICAgICAgKDAsIF91dGlsLndhcm4pKGBnZXRDb250ZW50U3RyZWFtIC0gaWdub3Jpbmcgc3ViLXN0cmVhbSAoJHtvYmpJZH0pOiBcIiR7cmVhc29ufVwiLmApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRocm93IHJlYXNvbjtcbiAgfVxuXG4gIGdldENvbnRlbnRTdHJlYW0oaGFuZGxlcikge1xuICAgIHJldHVybiB0aGlzLnBkZk1hbmFnZXIuZW5zdXJlKHRoaXMsIFwiY29udGVudFwiKS50aGVuKGNvbnRlbnQgPT4ge1xuICAgICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBfYmFzZV9zdHJlYW0uQmFzZVN0cmVhbSkge1xuICAgICAgICByZXR1cm4gY29udGVudDtcbiAgICAgIH1cblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29udGVudCkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBfZGVjb2RlX3N0cmVhbS5TdHJlYW1zU2VxdWVuY2VTdHJlYW0oY29udGVudCwgdGhpcy5fb25TdWJTdHJlYW1FcnJvci5iaW5kKHRoaXMsIGhhbmRsZXIpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBfc3RyZWFtLk51bGxTdHJlYW0oKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldCB4ZmFEYXRhKCkge1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcInhmYURhdGFcIiwgdGhpcy54ZmFGYWN0b3J5ID8ge1xuICAgICAgYmJveDogdGhpcy54ZmFGYWN0b3J5LmdldEJvdW5kaW5nQm94KHRoaXMucGFnZUluZGV4KVxuICAgIH0gOiBudWxsKTtcbiAgfVxuXG4gIHNhdmUoaGFuZGxlciwgdGFzaywgYW5ub3RhdGlvblN0b3JhZ2UpIHtcbiAgICBjb25zdCBwYXJ0aWFsRXZhbHVhdG9yID0gbmV3IF9ldmFsdWF0b3IuUGFydGlhbEV2YWx1YXRvcih7XG4gICAgICB4cmVmOiB0aGlzLnhyZWYsXG4gICAgICBoYW5kbGVyLFxuICAgICAgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCxcbiAgICAgIGlkRmFjdG9yeTogdGhpcy5fbG9jYWxJZEZhY3RvcnksXG4gICAgICBmb250Q2FjaGU6IHRoaXMuZm9udENhY2hlLFxuICAgICAgYnVpbHRJbkNNYXBDYWNoZTogdGhpcy5idWlsdEluQ01hcENhY2hlLFxuICAgICAgc3RhbmRhcmRGb250RGF0YUNhY2hlOiB0aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZSxcbiAgICAgIGdsb2JhbEltYWdlQ2FjaGU6IHRoaXMuZ2xvYmFsSW1hZ2VDYWNoZSxcbiAgICAgIG9wdGlvbnM6IHRoaXMuZXZhbHVhdG9yT3B0aW9uc1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLl9wYXJzZWRBbm5vdGF0aW9ucy50aGVuKGZ1bmN0aW9uIChhbm5vdGF0aW9ucykge1xuICAgICAgY29uc3QgbmV3UmVmc1Byb21pc2VzID0gW107XG5cbiAgICAgIGZvciAoY29uc3QgYW5ub3RhdGlvbiBvZiBhbm5vdGF0aW9ucykge1xuICAgICAgICBpZiAoIWFubm90YXRpb24ubXVzdEJlUHJpbnRlZChhbm5vdGF0aW9uU3RvcmFnZSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5ld1JlZnNQcm9taXNlcy5wdXNoKGFubm90YXRpb24uc2F2ZShwYXJ0aWFsRXZhbHVhdG9yLCB0YXNrLCBhbm5vdGF0aW9uU3RvcmFnZSkuY2F0Y2goZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcInNhdmUgLSBpZ25vcmluZyBhbm5vdGF0aW9uIGRhdGEgZHVyaW5nIFwiICsgYFwiJHt0YXNrLm5hbWV9XCIgdGFzazogXCIke3JlYXNvbn1cIi5gKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwobmV3UmVmc1Byb21pc2VzKTtcbiAgICB9KTtcbiAgfVxuXG4gIGxvYWRSZXNvdXJjZXMoa2V5cykge1xuICAgIGlmICghdGhpcy5yZXNvdXJjZXNQcm9taXNlKSB7XG4gICAgICB0aGlzLnJlc291cmNlc1Byb21pc2UgPSB0aGlzLnBkZk1hbmFnZXIuZW5zdXJlKHRoaXMsIFwicmVzb3VyY2VzXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnJlc291cmNlc1Byb21pc2UudGhlbigoKSA9PiB7XG4gICAgICBjb25zdCBvYmplY3RMb2FkZXIgPSBuZXcgX29iamVjdF9sb2FkZXIuT2JqZWN0TG9hZGVyKHRoaXMucmVzb3VyY2VzLCBrZXlzLCB0aGlzLnhyZWYpO1xuICAgICAgcmV0dXJuIG9iamVjdExvYWRlci5sb2FkKCk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRPcGVyYXRvckxpc3Qoe1xuICAgIGhhbmRsZXIsXG4gICAgc2luayxcbiAgICB0YXNrLFxuICAgIGludGVudCxcbiAgICBjYWNoZUtleSxcbiAgICBhbm5vdGF0aW9uU3RvcmFnZSA9IG51bGxcbiAgfSkge1xuICAgIGNvbnN0IGNvbnRlbnRTdHJlYW1Qcm9taXNlID0gdGhpcy5nZXRDb250ZW50U3RyZWFtKGhhbmRsZXIpO1xuICAgIGNvbnN0IHJlc291cmNlc1Byb21pc2UgPSB0aGlzLmxvYWRSZXNvdXJjZXMoW1wiQ29sb3JTcGFjZVwiLCBcIkV4dEdTdGF0ZVwiLCBcIkZvbnRcIiwgXCJQYXR0ZXJuXCIsIFwiUHJvcGVydGllc1wiLCBcIlNoYWRpbmdcIiwgXCJYT2JqZWN0XCJdKTtcbiAgICBjb25zdCBwYXJ0aWFsRXZhbHVhdG9yID0gbmV3IF9ldmFsdWF0b3IuUGFydGlhbEV2YWx1YXRvcih7XG4gICAgICB4cmVmOiB0aGlzLnhyZWYsXG4gICAgICBoYW5kbGVyLFxuICAgICAgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCxcbiAgICAgIGlkRmFjdG9yeTogdGhpcy5fbG9jYWxJZEZhY3RvcnksXG4gICAgICBmb250Q2FjaGU6IHRoaXMuZm9udENhY2hlLFxuICAgICAgYnVpbHRJbkNNYXBDYWNoZTogdGhpcy5idWlsdEluQ01hcENhY2hlLFxuICAgICAgc3RhbmRhcmRGb250RGF0YUNhY2hlOiB0aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZSxcbiAgICAgIGdsb2JhbEltYWdlQ2FjaGU6IHRoaXMuZ2xvYmFsSW1hZ2VDYWNoZSxcbiAgICAgIG9wdGlvbnM6IHRoaXMuZXZhbHVhdG9yT3B0aW9uc1xuICAgIH0pO1xuICAgIGNvbnN0IGRhdGFQcm9taXNlcyA9IFByb21pc2UuYWxsKFtjb250ZW50U3RyZWFtUHJvbWlzZSwgcmVzb3VyY2VzUHJvbWlzZV0pO1xuICAgIGNvbnN0IHBhZ2VMaXN0UHJvbWlzZSA9IGRhdGFQcm9taXNlcy50aGVuKChbY29udGVudFN0cmVhbV0pID0+IHtcbiAgICAgIGNvbnN0IG9wTGlzdCA9IG5ldyBfb3BlcmF0b3JfbGlzdC5PcGVyYXRvckxpc3QoaW50ZW50LCBzaW5rKTtcbiAgICAgIGhhbmRsZXIuc2VuZChcIlN0YXJ0UmVuZGVyUGFnZVwiLCB7XG4gICAgICAgIHRyYW5zcGFyZW5jeTogcGFydGlhbEV2YWx1YXRvci5oYXNCbGVuZE1vZGVzKHRoaXMucmVzb3VyY2VzLCB0aGlzLm5vbkJsZW5kTW9kZXNTZXQpLFxuICAgICAgICBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4LFxuICAgICAgICBjYWNoZUtleVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcGFydGlhbEV2YWx1YXRvci5nZXRPcGVyYXRvckxpc3Qoe1xuICAgICAgICBzdHJlYW06IGNvbnRlbnRTdHJlYW0sXG4gICAgICAgIHRhc2ssXG4gICAgICAgIHJlc291cmNlczogdGhpcy5yZXNvdXJjZXMsXG4gICAgICAgIG9wZXJhdG9yTGlzdDogb3BMaXN0XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG9wTGlzdDtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChbcGFnZUxpc3RQcm9taXNlLCB0aGlzLl9wYXJzZWRBbm5vdGF0aW9uc10pLnRoZW4oZnVuY3Rpb24gKFtwYWdlT3BMaXN0LCBhbm5vdGF0aW9uc10pIHtcbiAgICAgIGlmIChhbm5vdGF0aW9ucy5sZW5ndGggPT09IDAgfHwgaW50ZW50ICYgX3V0aWwuUmVuZGVyaW5nSW50ZW50RmxhZy5BTk5PVEFUSU9OU19ESVNBQkxFKSB7XG4gICAgICAgIHBhZ2VPcExpc3QuZmx1c2godHJ1ZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGVuZ3RoOiBwYWdlT3BMaXN0LnRvdGFsTGVuZ3RoXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlbmRlckZvcm1zID0gISEoaW50ZW50ICYgX3V0aWwuUmVuZGVyaW5nSW50ZW50RmxhZy5BTk5PVEFUSU9OU19GT1JNUyksXG4gICAgICAgICAgICBpbnRlbnRBbnkgPSAhIShpbnRlbnQgJiBfdXRpbC5SZW5kZXJpbmdJbnRlbnRGbGFnLkFOWSksXG4gICAgICAgICAgICBpbnRlbnREaXNwbGF5ID0gISEoaW50ZW50ICYgX3V0aWwuUmVuZGVyaW5nSW50ZW50RmxhZy5ESVNQTEFZKSxcbiAgICAgICAgICAgIGludGVudFByaW50ID0gISEoaW50ZW50ICYgX3V0aWwuUmVuZGVyaW5nSW50ZW50RmxhZy5QUklOVCk7XG4gICAgICBjb25zdCBvcExpc3RQcm9taXNlcyA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IGFubm90YXRpb24gb2YgYW5ub3RhdGlvbnMpIHtcbiAgICAgICAgaWYgKGludGVudEFueSB8fCBpbnRlbnREaXNwbGF5ICYmIGFubm90YXRpb24ubXVzdEJlVmlld2VkKGFubm90YXRpb25TdG9yYWdlKSB8fCBpbnRlbnRQcmludCAmJiBhbm5vdGF0aW9uLm11c3RCZVByaW50ZWQoYW5ub3RhdGlvblN0b3JhZ2UpKSB7XG4gICAgICAgICAgb3BMaXN0UHJvbWlzZXMucHVzaChhbm5vdGF0aW9uLmdldE9wZXJhdG9yTGlzdChwYXJ0aWFsRXZhbHVhdG9yLCB0YXNrLCBpbnRlbnQsIHJlbmRlckZvcm1zLCBhbm5vdGF0aW9uU3RvcmFnZSkuY2F0Y2goZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiZ2V0T3BlcmF0b3JMaXN0IC0gaWdub3JpbmcgYW5ub3RhdGlvbiBkYXRhIGR1cmluZyBcIiArIGBcIiR7dGFzay5uYW1lfVwiIHRhc2s6IFwiJHtyZWFzb259XCIuYCk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKG9wTGlzdFByb21pc2VzKS50aGVuKGZ1bmN0aW9uIChvcExpc3RzKSB7XG4gICAgICAgIHBhZ2VPcExpc3QuYWRkT3AoX3V0aWwuT1BTLmJlZ2luQW5ub3RhdGlvbnMsIFtdKTtcblxuICAgICAgICBmb3IgKGNvbnN0IG9wTGlzdCBvZiBvcExpc3RzKSB7XG4gICAgICAgICAgcGFnZU9wTGlzdC5hZGRPcExpc3Qob3BMaXN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhZ2VPcExpc3QuYWRkT3AoX3V0aWwuT1BTLmVuZEFubm90YXRpb25zLCBbXSk7XG4gICAgICAgIHBhZ2VPcExpc3QuZmx1c2godHJ1ZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGVuZ3RoOiBwYWdlT3BMaXN0LnRvdGFsTGVuZ3RoXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGV4dHJhY3RUZXh0Q29udGVudCh7XG4gICAgaGFuZGxlcixcbiAgICB0YXNrLFxuICAgIG5vcm1hbGl6ZVdoaXRlc3BhY2UsXG4gICAgaW5jbHVkZU1hcmtlZENvbnRlbnQsXG4gICAgc2luayxcbiAgICBjb21iaW5lVGV4dEl0ZW1zXG4gIH0pIHtcbiAgICBjb25zdCBjb250ZW50U3RyZWFtUHJvbWlzZSA9IHRoaXMuZ2V0Q29udGVudFN0cmVhbShoYW5kbGVyKTtcbiAgICBjb25zdCByZXNvdXJjZXNQcm9taXNlID0gdGhpcy5sb2FkUmVzb3VyY2VzKFtcIkV4dEdTdGF0ZVwiLCBcIkZvbnRcIiwgXCJQcm9wZXJ0aWVzXCIsIFwiWE9iamVjdFwiXSk7XG4gICAgY29uc3QgZGF0YVByb21pc2VzID0gUHJvbWlzZS5hbGwoW2NvbnRlbnRTdHJlYW1Qcm9taXNlLCByZXNvdXJjZXNQcm9taXNlXSk7XG4gICAgcmV0dXJuIGRhdGFQcm9taXNlcy50aGVuKChbY29udGVudFN0cmVhbV0pID0+IHtcbiAgICAgIGNvbnN0IHBhcnRpYWxFdmFsdWF0b3IgPSBuZXcgX2V2YWx1YXRvci5QYXJ0aWFsRXZhbHVhdG9yKHtcbiAgICAgICAgeHJlZjogdGhpcy54cmVmLFxuICAgICAgICBoYW5kbGVyLFxuICAgICAgICBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4LFxuICAgICAgICBpZEZhY3Rvcnk6IHRoaXMuX2xvY2FsSWRGYWN0b3J5LFxuICAgICAgICBmb250Q2FjaGU6IHRoaXMuZm9udENhY2hlLFxuICAgICAgICBidWlsdEluQ01hcENhY2hlOiB0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUsXG4gICAgICAgIHN0YW5kYXJkRm9udERhdGFDYWNoZTogdGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsXG4gICAgICAgIGdsb2JhbEltYWdlQ2FjaGU6IHRoaXMuZ2xvYmFsSW1hZ2VDYWNoZSxcbiAgICAgICAgb3B0aW9uczogdGhpcy5ldmFsdWF0b3JPcHRpb25zXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBwYXJ0aWFsRXZhbHVhdG9yLmdldFRleHRDb250ZW50KHtcbiAgICAgICAgc3RyZWFtOiBjb250ZW50U3RyZWFtLFxuICAgICAgICB0YXNrLFxuICAgICAgICByZXNvdXJjZXM6IHRoaXMucmVzb3VyY2VzLFxuICAgICAgICBub3JtYWxpemVXaGl0ZXNwYWNlLFxuICAgICAgICBpbmNsdWRlTWFya2VkQ29udGVudCxcbiAgICAgICAgY29tYmluZVRleHRJdGVtcyxcbiAgICAgICAgc2lua1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBnZXRTdHJ1Y3RUcmVlKCkge1xuICAgIGNvbnN0IHN0cnVjdFRyZWVSb290ID0gYXdhaXQgdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coXCJzdHJ1Y3RUcmVlUm9vdFwiKTtcblxuICAgIGlmICghc3RydWN0VHJlZVJvb3QpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHN0cnVjdFRyZWUgPSBhd2FpdCB0aGlzLnBkZk1hbmFnZXIuZW5zdXJlKHRoaXMsIFwiX3BhcnNlU3RydWN0VHJlZVwiLCBbc3RydWN0VHJlZVJvb3RdKTtcbiAgICByZXR1cm4gc3RydWN0VHJlZS5zZXJpYWxpemFibGU7XG4gIH1cblxuICBfcGFyc2VTdHJ1Y3RUcmVlKHN0cnVjdFRyZWVSb290KSB7XG4gICAgY29uc3QgdHJlZSA9IG5ldyBfc3RydWN0X3RyZWUuU3RydWN0VHJlZVBhZ2Uoc3RydWN0VHJlZVJvb3QsIHRoaXMucGFnZURpY3QpO1xuICAgIHRyZWUucGFyc2UoKTtcbiAgICByZXR1cm4gdHJlZTtcbiAgfVxuXG4gIGdldEFubm90YXRpb25zRGF0YShpbnRlbnQpIHtcbiAgICByZXR1cm4gdGhpcy5fcGFyc2VkQW5ub3RhdGlvbnMudGhlbihmdW5jdGlvbiAoYW5ub3RhdGlvbnMpIHtcbiAgICAgIGNvbnN0IGFubm90YXRpb25zRGF0YSA9IFtdO1xuXG4gICAgICBpZiAoYW5ub3RhdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBhbm5vdGF0aW9uc0RhdGE7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGludGVudEFueSA9ICEhKGludGVudCAmIF91dGlsLlJlbmRlcmluZ0ludGVudEZsYWcuQU5ZKSxcbiAgICAgICAgICAgIGludGVudERpc3BsYXkgPSAhIShpbnRlbnQgJiBfdXRpbC5SZW5kZXJpbmdJbnRlbnRGbGFnLkRJU1BMQVkpLFxuICAgICAgICAgICAgaW50ZW50UHJpbnQgPSAhIShpbnRlbnQgJiBfdXRpbC5SZW5kZXJpbmdJbnRlbnRGbGFnLlBSSU5UKTtcblxuICAgICAgZm9yIChjb25zdCBhbm5vdGF0aW9uIG9mIGFubm90YXRpb25zKSB7XG4gICAgICAgIGlmIChpbnRlbnRBbnkgfHwgaW50ZW50RGlzcGxheSAmJiBhbm5vdGF0aW9uLnZpZXdhYmxlIHx8IGludGVudFByaW50ICYmIGFubm90YXRpb24ucHJpbnRhYmxlKSB7XG4gICAgICAgICAgYW5ub3RhdGlvbnNEYXRhLnB1c2goYW5ub3RhdGlvbi5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYW5ub3RhdGlvbnNEYXRhO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGFubm90YXRpb25zKCkge1xuICAgIGNvbnN0IGFubm90cyA9IHRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkoXCJBbm5vdHNcIik7XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJhbm5vdGF0aW9uc1wiLCBBcnJheS5pc0FycmF5KGFubm90cykgPyBhbm5vdHMgOiBbXSk7XG4gIH1cblxuICBnZXQgX3BhcnNlZEFubm90YXRpb25zKCkge1xuICAgIGNvbnN0IHBhcnNlZEFubm90YXRpb25zID0gdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCBcImFubm90YXRpb25zXCIpLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgYW5ub3RhdGlvblByb21pc2VzID0gW107XG5cbiAgICAgIGZvciAoY29uc3QgYW5ub3RhdGlvblJlZiBvZiB0aGlzLmFubm90YXRpb25zKSB7XG4gICAgICAgIGFubm90YXRpb25Qcm9taXNlcy5wdXNoKF9hbm5vdGF0aW9uLkFubm90YXRpb25GYWN0b3J5LmNyZWF0ZSh0aGlzLnhyZWYsIGFubm90YXRpb25SZWYsIHRoaXMucGRmTWFuYWdlciwgdGhpcy5fbG9jYWxJZEZhY3RvcnksIGZhbHNlKS5jYXRjaChmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKGBfcGFyc2VkQW5ub3RhdGlvbnM6IFwiJHtyZWFzb259XCIuYCk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGFubm90YXRpb25Qcm9taXNlcykudGhlbihmdW5jdGlvbiAoYW5ub3RhdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGFubm90YXRpb25zLmZpbHRlcihhbm5vdGF0aW9uID0+ICEhYW5ub3RhdGlvbik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJfcGFyc2VkQW5ub3RhdGlvbnNcIiwgcGFyc2VkQW5ub3RhdGlvbnMpO1xuICB9XG5cbiAgZ2V0IGpzQWN0aW9ucygpIHtcbiAgICBjb25zdCBhY3Rpb25zID0gKDAsIF9jb3JlX3V0aWxzLmNvbGxlY3RBY3Rpb25zKSh0aGlzLnhyZWYsIHRoaXMucGFnZURpY3QsIF91dGlsLlBhZ2VBY3Rpb25FdmVudFR5cGUpO1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImpzQWN0aW9uc1wiLCBhY3Rpb25zKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuUGFnZSA9IFBhZ2U7XG5jb25zdCBQREZfSEVBREVSX1NJR05BVFVSRSA9IG5ldyBVaW50OEFycmF5KFsweDI1LCAweDUwLCAweDQ0LCAweDQ2LCAweDJkXSk7XG5jb25zdCBTVEFSVFhSRUZfU0lHTkFUVVJFID0gbmV3IFVpbnQ4QXJyYXkoWzB4NzMsIDB4NzQsIDB4NjEsIDB4NzIsIDB4NzQsIDB4NzgsIDB4NzIsIDB4NjUsIDB4NjZdKTtcbmNvbnN0IEVORE9CSl9TSUdOQVRVUkUgPSBuZXcgVWludDhBcnJheShbMHg2NSwgMHg2ZSwgMHg2NCwgMHg2ZiwgMHg2MiwgMHg2YV0pO1xuY29uc3QgRklOR0VSUFJJTlRfRklSU1RfQllURVMgPSAxMDI0O1xuY29uc3QgRU1QVFlfRklOR0VSUFJJTlQgPSBcIlxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXCI7XG5jb25zdCBQREZfSEVBREVSX1ZFUlNJT05fUkVHRVhQID0gL15bMS05XVxcLlxcZCQvO1xuXG5mdW5jdGlvbiBmaW5kKHN0cmVhbSwgc2lnbmF0dXJlLCBsaW1pdCA9IDEwMjQsIGJhY2t3YXJkcyA9IGZhbHNlKSB7XG4gIGNvbnN0IHNpZ25hdHVyZUxlbmd0aCA9IHNpZ25hdHVyZS5sZW5ndGg7XG4gIGNvbnN0IHNjYW5CeXRlcyA9IHN0cmVhbS5wZWVrQnl0ZXMobGltaXQpO1xuICBjb25zdCBzY2FuTGVuZ3RoID0gc2NhbkJ5dGVzLmxlbmd0aCAtIHNpZ25hdHVyZUxlbmd0aDtcblxuICBpZiAoc2Nhbkxlbmd0aCA8PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGJhY2t3YXJkcykge1xuICAgIGNvbnN0IHNpZ25hdHVyZUVuZCA9IHNpZ25hdHVyZUxlbmd0aCAtIDE7XG4gICAgbGV0IHBvcyA9IHNjYW5CeXRlcy5sZW5ndGggLSAxO1xuXG4gICAgd2hpbGUgKHBvcyA+PSBzaWduYXR1cmVFbmQpIHtcbiAgICAgIGxldCBqID0gMDtcblxuICAgICAgd2hpbGUgKGogPCBzaWduYXR1cmVMZW5ndGggJiYgc2NhbkJ5dGVzW3BvcyAtIGpdID09PSBzaWduYXR1cmVbc2lnbmF0dXJlRW5kIC0gal0pIHtcbiAgICAgICAgaisrO1xuICAgICAgfVxuXG4gICAgICBpZiAoaiA+PSBzaWduYXR1cmVMZW5ndGgpIHtcbiAgICAgICAgc3RyZWFtLnBvcyArPSBwb3MgLSBzaWduYXR1cmVFbmQ7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBwb3MtLTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGV0IHBvcyA9IDA7XG5cbiAgICB3aGlsZSAocG9zIDw9IHNjYW5MZW5ndGgpIHtcbiAgICAgIGxldCBqID0gMDtcblxuICAgICAgd2hpbGUgKGogPCBzaWduYXR1cmVMZW5ndGggJiYgc2NhbkJ5dGVzW3BvcyArIGpdID09PSBzaWduYXR1cmVbal0pIHtcbiAgICAgICAgaisrO1xuICAgICAgfVxuXG4gICAgICBpZiAoaiA+PSBzaWduYXR1cmVMZW5ndGgpIHtcbiAgICAgICAgc3RyZWFtLnBvcyArPSBwb3M7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBwb3MrKztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmNsYXNzIFBERkRvY3VtZW50IHtcbiAgY29uc3RydWN0b3IocGRmTWFuYWdlciwgYXJnKSB7XG4gICAgbGV0IHN0cmVhbTtcblxuICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKGFyZykpIHtcbiAgICAgIHN0cmVhbSA9IGFyZztcbiAgICB9IGVsc2UgaWYgKCgwLCBfdXRpbC5pc0FycmF5QnVmZmVyKShhcmcpKSB7XG4gICAgICBzdHJlYW0gPSBuZXcgX3N0cmVhbS5TdHJlYW0oYXJnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUERGRG9jdW1lbnQ6IFVua25vd24gYXJndW1lbnQgdHlwZVwiKTtcbiAgICB9XG5cbiAgICBpZiAoc3RyZWFtLmxlbmd0aCA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgX3V0aWwuSW52YWxpZFBERkV4Y2VwdGlvbihcIlRoZSBQREYgZmlsZSBpcyBlbXB0eSwgaS5lLiBpdHMgc2l6ZSBpcyB6ZXJvIGJ5dGVzLlwiKTtcbiAgICB9XG5cbiAgICB0aGlzLnBkZk1hbmFnZXIgPSBwZGZNYW5hZ2VyO1xuICAgIHRoaXMuc3RyZWFtID0gc3RyZWFtO1xuICAgIHRoaXMueHJlZiA9IG5ldyBfeHJlZi5YUmVmKHN0cmVhbSwgcGRmTWFuYWdlcik7XG4gICAgdGhpcy5fcGFnZVByb21pc2VzID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuX3ZlcnNpb24gPSBudWxsO1xuICAgIGNvbnN0IGlkQ291bnRlcnMgPSB7XG4gICAgICBmb250OiAwXG4gICAgfTtcbiAgICB0aGlzLl9nbG9iYWxJZEZhY3RvcnkgPSBjbGFzcyB7XG4gICAgICBzdGF0aWMgZ2V0RG9jSWQoKSB7XG4gICAgICAgIHJldHVybiBgZ18ke3BkZk1hbmFnZXIuZG9jSWR9YDtcbiAgICAgIH1cblxuICAgICAgc3RhdGljIGNyZWF0ZUZvbnRJZCgpIHtcbiAgICAgICAgcmV0dXJuIGBmJHsrK2lkQ291bnRlcnMuZm9udH1gO1xuICAgICAgfVxuXG4gICAgICBzdGF0aWMgY3JlYXRlT2JqSWQoKSB7XG4gICAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJBYnN0cmFjdCBtZXRob2QgYGNyZWF0ZU9iaklkYCBjYWxsZWQuXCIpO1xuICAgICAgfVxuXG4gICAgICBzdGF0aWMgZ2V0UGFnZU9iaklkKCkge1xuICAgICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQWJzdHJhY3QgbWV0aG9kIGBnZXRQYWdlT2JqSWRgIGNhbGxlZC5cIik7XG4gICAgICB9XG5cbiAgICB9O1xuICB9XG5cbiAgcGFyc2UocmVjb3ZlcnlNb2RlKSB7XG4gICAgdGhpcy54cmVmLnBhcnNlKHJlY292ZXJ5TW9kZSk7XG4gICAgdGhpcy5jYXRhbG9nID0gbmV3IF9jYXRhbG9nLkNhdGFsb2codGhpcy5wZGZNYW5hZ2VyLCB0aGlzLnhyZWYpO1xuXG4gICAgaWYgKHRoaXMuY2F0YWxvZy52ZXJzaW9uKSB7XG4gICAgICB0aGlzLl92ZXJzaW9uID0gdGhpcy5jYXRhbG9nLnZlcnNpb247XG4gICAgfVxuICB9XG5cbiAgZ2V0IGxpbmVhcml6YXRpb24oKSB7XG4gICAgbGV0IGxpbmVhcml6YXRpb24gPSBudWxsO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxpbmVhcml6YXRpb24gPSBfcGFyc2VyLkxpbmVhcml6YXRpb24uY3JlYXRlKHRoaXMuc3RyZWFtKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG5cbiAgICAgICgwLCBfdXRpbC5pbmZvKShlcnIpO1xuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImxpbmVhcml6YXRpb25cIiwgbGluZWFyaXphdGlvbik7XG4gIH1cblxuICBnZXQgc3RhcnRYUmVmKCkge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtO1xuICAgIGxldCBzdGFydFhSZWYgPSAwO1xuXG4gICAgaWYgKHRoaXMubGluZWFyaXphdGlvbikge1xuICAgICAgc3RyZWFtLnJlc2V0KCk7XG5cbiAgICAgIGlmIChmaW5kKHN0cmVhbSwgRU5ET0JKX1NJR05BVFVSRSkpIHtcbiAgICAgICAgc3RhcnRYUmVmID0gc3RyZWFtLnBvcyArIDYgLSBzdHJlYW0uc3RhcnQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHN0ZXAgPSAxMDI0O1xuICAgICAgY29uc3Qgc3RhcnRYUmVmTGVuZ3RoID0gU1RBUlRYUkVGX1NJR05BVFVSRS5sZW5ndGg7XG4gICAgICBsZXQgZm91bmQgPSBmYWxzZSxcbiAgICAgICAgICBwb3MgPSBzdHJlYW0uZW5kO1xuXG4gICAgICB3aGlsZSAoIWZvdW5kICYmIHBvcyA+IDApIHtcbiAgICAgICAgcG9zIC09IHN0ZXAgLSBzdGFydFhSZWZMZW5ndGg7XG5cbiAgICAgICAgaWYgKHBvcyA8IDApIHtcbiAgICAgICAgICBwb3MgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RyZWFtLnBvcyA9IHBvcztcbiAgICAgICAgZm91bmQgPSBmaW5kKHN0cmVhbSwgU1RBUlRYUkVGX1NJR05BVFVSRSwgc3RlcCwgdHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICBzdHJlYW0uc2tpcCg5KTtcbiAgICAgICAgbGV0IGNoO1xuXG4gICAgICAgIGRvIHtcbiAgICAgICAgICBjaCA9IHN0cmVhbS5nZXRCeXRlKCk7XG4gICAgICAgIH0gd2hpbGUgKCgwLCBfY29yZV91dGlscy5pc1doaXRlU3BhY2UpKGNoKSk7XG5cbiAgICAgICAgbGV0IHN0ciA9IFwiXCI7XG5cbiAgICAgICAgd2hpbGUgKGNoID49IDB4MjAgJiYgY2ggPD0gMHgzOSkge1xuICAgICAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTtcbiAgICAgICAgICBjaCA9IHN0cmVhbS5nZXRCeXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGFydFhSZWYgPSBwYXJzZUludChzdHIsIDEwKTtcblxuICAgICAgICBpZiAoaXNOYU4oc3RhcnRYUmVmKSkge1xuICAgICAgICAgIHN0YXJ0WFJlZiA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJzdGFydFhSZWZcIiwgc3RhcnRYUmVmKTtcbiAgfVxuXG4gIGNoZWNrSGVhZGVyKCkge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtO1xuICAgIHN0cmVhbS5yZXNldCgpO1xuXG4gICAgaWYgKCFmaW5kKHN0cmVhbSwgUERGX0hFQURFUl9TSUdOQVRVUkUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3RyZWFtLm1vdmVTdGFydCgpO1xuICAgIGNvbnN0IE1BWF9QREZfVkVSU0lPTl9MRU5HVEggPSAxMjtcbiAgICBsZXQgdmVyc2lvbiA9IFwiXCIsXG4gICAgICAgIGNoO1xuXG4gICAgd2hpbGUgKChjaCA9IHN0cmVhbS5nZXRCeXRlKCkpID4gMHgyMCkge1xuICAgICAgaWYgKHZlcnNpb24ubGVuZ3RoID49IE1BWF9QREZfVkVSU0lPTl9MRU5HVEgpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHZlcnNpb24gKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl92ZXJzaW9uKSB7XG4gICAgICB0aGlzLl92ZXJzaW9uID0gdmVyc2lvbi5zdWJzdHJpbmcoNSk7XG4gICAgfVxuICB9XG5cbiAgcGFyc2VTdGFydFhSZWYoKSB7XG4gICAgdGhpcy54cmVmLnNldFN0YXJ0WFJlZih0aGlzLnN0YXJ0WFJlZik7XG4gIH1cblxuICBnZXQgbnVtUGFnZXMoKSB7XG4gICAgbGV0IG51bSA9IDA7XG5cbiAgICBpZiAodGhpcy5jYXRhbG9nLmhhc0FjdHVhbE51bVBhZ2VzKSB7XG4gICAgICBudW0gPSB0aGlzLmNhdGFsb2cubnVtUGFnZXM7XG4gICAgfSBlbHNlIGlmICh0aGlzLnhmYUZhY3RvcnkpIHtcbiAgICAgIG51bSA9IHRoaXMueGZhRmFjdG9yeS5nZXROdW1QYWdlcygpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5saW5lYXJpemF0aW9uKSB7XG4gICAgICBudW0gPSB0aGlzLmxpbmVhcml6YXRpb24ubnVtUGFnZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIG51bSA9IHRoaXMuY2F0YWxvZy5udW1QYWdlcztcbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJudW1QYWdlc1wiLCBudW0pO1xuICB9XG5cbiAgX2hhc09ubHlEb2N1bWVudFNpZ25hdHVyZXMoZmllbGRzLCByZWN1cnNpb25EZXB0aCA9IDApIHtcbiAgICBjb25zdCBSRUNVUlNJT05fTElNSVQgPSAxMDtcblxuICAgIGlmICghQXJyYXkuaXNBcnJheShmaWVsZHMpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpZWxkcy5ldmVyeShmaWVsZCA9PiB7XG4gICAgICBmaWVsZCA9IHRoaXMueHJlZi5mZXRjaElmUmVmKGZpZWxkKTtcblxuICAgICAgaWYgKCEoZmllbGQgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5EaWN0KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChmaWVsZC5oYXMoXCJLaWRzXCIpKSB7XG4gICAgICAgIGlmICgrK3JlY3Vyc2lvbkRlcHRoID4gUkVDVVJTSU9OX0xJTUlUKSB7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiX2hhc09ubHlEb2N1bWVudFNpZ25hdHVyZXM6IG1heGltdW0gcmVjdXJzaW9uIGRlcHRoIHJlYWNoZWRcIik7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc09ubHlEb2N1bWVudFNpZ25hdHVyZXMoZmllbGQuZ2V0KFwiS2lkc1wiKSwgcmVjdXJzaW9uRGVwdGgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpc1NpZ25hdHVyZSA9ICgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGZpZWxkLmdldChcIkZUXCIpLCBcIlNpZ1wiKTtcbiAgICAgIGNvbnN0IHJlY3RhbmdsZSA9IGZpZWxkLmdldChcIlJlY3RcIik7XG4gICAgICBjb25zdCBpc0ludmlzaWJsZSA9IEFycmF5LmlzQXJyYXkocmVjdGFuZ2xlKSAmJiByZWN0YW5nbGUuZXZlcnkodmFsdWUgPT4gdmFsdWUgPT09IDApO1xuICAgICAgcmV0dXJuIGlzU2lnbmF0dXJlICYmIGlzSW52aXNpYmxlO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IHhmYURhdGEoKSB7XG4gICAgY29uc3QgYWNyb0Zvcm0gPSB0aGlzLmNhdGFsb2cuYWNyb0Zvcm07XG5cbiAgICBpZiAoIWFjcm9Gb3JtKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCB4ZmEgPSBhY3JvRm9ybS5nZXQoXCJYRkFcIik7XG4gICAgY29uc3QgZW50cmllcyA9IHtcbiAgICAgIFwieGRwOnhkcFwiOiBcIlwiLFxuICAgICAgdGVtcGxhdGU6IFwiXCIsXG4gICAgICBkYXRhc2V0czogXCJcIixcbiAgICAgIGNvbmZpZzogXCJcIixcbiAgICAgIGNvbm5lY3Rpb25TZXQ6IFwiXCIsXG4gICAgICBsb2NhbGVTZXQ6IFwiXCIsXG4gICAgICBzdHlsZXNoZWV0OiBcIlwiLFxuICAgICAgXCIveGRwOnhkcFwiOiBcIlwiXG4gICAgfTtcblxuICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKHhmYSkgJiYgIXhmYS5pc0VtcHR5KSB7XG4gICAgICB0cnkge1xuICAgICAgICBlbnRyaWVzW1wieGRwOnhkcFwiXSA9ICgwLCBfdXRpbC5zdHJpbmdUb1VURjhTdHJpbmcpKHhmYS5nZXRTdHJpbmcoKSk7XG4gICAgICAgIHJldHVybiBlbnRyaWVzO1xuICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoXCJYRkEgLSBJbnZhbGlkIHV0Zi04IHN0cmluZy5cIik7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh4ZmEpIHx8IHhmYS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHhmYS5sZW5ndGg7IGkgPCBpaTsgaSArPSAyKSB7XG4gICAgICBsZXQgbmFtZTtcblxuICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgbmFtZSA9IFwieGRwOnhkcFwiO1xuICAgICAgfSBlbHNlIGlmIChpID09PSBpaSAtIDIpIHtcbiAgICAgICAgbmFtZSA9IFwiL3hkcDp4ZHBcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5hbWUgPSB4ZmFbaV07XG4gICAgICB9XG5cbiAgICAgIGlmICghZW50cmllcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YSA9IHRoaXMueHJlZi5mZXRjaElmUmVmKHhmYVtpICsgMV0pO1xuXG4gICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkoZGF0YSkgfHwgZGF0YS5pc0VtcHR5KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBlbnRyaWVzW25hbWVdID0gKDAsIF91dGlsLnN0cmluZ1RvVVRGOFN0cmluZykoZGF0YS5nZXRTdHJpbmcoKSk7XG4gICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShcIlhGQSAtIEludmFsaWQgdXRmLTggc3RyaW5nLlwiKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVudHJpZXM7XG4gIH1cblxuICBnZXQgeGZhRmFjdG9yeSgpIHtcbiAgICBsZXQgZGF0YTtcblxuICAgIGlmICh0aGlzLnBkZk1hbmFnZXIuZW5hYmxlWGZhICYmIHRoaXMuY2F0YWxvZy5uZWVkc1JlbmRlcmluZyAmJiB0aGlzLmZvcm1JbmZvLmhhc1hmYSAmJiAhdGhpcy5mb3JtSW5mby5oYXNBY3JvRm9ybSkge1xuICAgICAgZGF0YSA9IHRoaXMueGZhRGF0YTtcbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJ4ZmFGYWN0b3J5XCIsIGRhdGEgPyBuZXcgX2ZhY3RvcnkuWEZBRmFjdG9yeShkYXRhKSA6IG51bGwpO1xuICB9XG5cbiAgZ2V0IGlzUHVyZVhmYSgpIHtcbiAgICByZXR1cm4gdGhpcy54ZmFGYWN0b3J5ID8gdGhpcy54ZmFGYWN0b3J5LmlzVmFsaWQoKSA6IGZhbHNlO1xuICB9XG5cbiAgZ2V0IGh0bWxGb3JYZmEoKSB7XG4gICAgcmV0dXJuIHRoaXMueGZhRmFjdG9yeSA/IHRoaXMueGZhRmFjdG9yeS5nZXRQYWdlcygpIDogbnVsbDtcbiAgfVxuXG4gIGFzeW5jIGxvYWRYZmFJbWFnZXMoKSB7XG4gICAgY29uc3QgeGZhSW1hZ2VzRGljdCA9IGF3YWl0IHRoaXMucGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKFwieGZhSW1hZ2VzXCIpO1xuXG4gICAgaWYgKCF4ZmFJbWFnZXNEaWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qga2V5cyA9IHhmYUltYWdlc0RpY3QuZ2V0S2V5cygpO1xuICAgIGNvbnN0IG9iamVjdExvYWRlciA9IG5ldyBfb2JqZWN0X2xvYWRlci5PYmplY3RMb2FkZXIoeGZhSW1hZ2VzRGljdCwga2V5cywgdGhpcy54cmVmKTtcbiAgICBhd2FpdCBvYmplY3RMb2FkZXIubG9hZCgpO1xuICAgIGNvbnN0IHhmYUltYWdlcyA9IG5ldyBNYXAoKTtcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IHhmYUltYWdlc0RpY3QuZ2V0KGtleSk7XG5cbiAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShzdHJlYW0pKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB4ZmFJbWFnZXMuc2V0KGtleSwgc3RyZWFtLmdldEJ5dGVzKCkpO1xuICAgIH1cblxuICAgIHRoaXMueGZhRmFjdG9yeS5zZXRJbWFnZXMoeGZhSW1hZ2VzKTtcbiAgfVxuXG4gIGFzeW5jIGxvYWRYZmFGb250cyhoYW5kbGVyLCB0YXNrKSB7XG4gICAgY29uc3QgYWNyb0Zvcm0gPSBhd2FpdCB0aGlzLnBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZyhcImFjcm9Gb3JtXCIpO1xuXG4gICAgaWYgKCFhY3JvRm9ybSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc291cmNlcyA9IGF3YWl0IGFjcm9Gb3JtLmdldEFzeW5jKFwiRFJcIik7XG5cbiAgICBpZiAoIShyZXNvdXJjZXMgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5EaWN0KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG9iamVjdExvYWRlciA9IG5ldyBfb2JqZWN0X2xvYWRlci5PYmplY3RMb2FkZXIocmVzb3VyY2VzLCBbXCJGb250XCJdLCB0aGlzLnhyZWYpO1xuICAgIGF3YWl0IG9iamVjdExvYWRlci5sb2FkKCk7XG4gICAgY29uc3QgZm9udFJlcyA9IHJlc291cmNlcy5nZXQoXCJGb250XCIpO1xuXG4gICAgaWYgKCEoZm9udFJlcyBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSwgdGhpcy5wZGZNYW5hZ2VyLmV2YWx1YXRvck9wdGlvbnMpO1xuICAgIG9wdGlvbnMudXNlU3lzdGVtRm9udHMgPSBmYWxzZTtcbiAgICBjb25zdCBwYXJ0aWFsRXZhbHVhdG9yID0gbmV3IF9ldmFsdWF0b3IuUGFydGlhbEV2YWx1YXRvcih7XG4gICAgICB4cmVmOiB0aGlzLnhyZWYsXG4gICAgICBoYW5kbGVyLFxuICAgICAgcGFnZUluZGV4OiAtMSxcbiAgICAgIGlkRmFjdG9yeTogdGhpcy5fZ2xvYmFsSWRGYWN0b3J5LFxuICAgICAgZm9udENhY2hlOiB0aGlzLmNhdGFsb2cuZm9udENhY2hlLFxuICAgICAgYnVpbHRJbkNNYXBDYWNoZTogdGhpcy5jYXRhbG9nLmJ1aWx0SW5DTWFwQ2FjaGUsXG4gICAgICBzdGFuZGFyZEZvbnREYXRhQ2FjaGU6IHRoaXMuY2F0YWxvZy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsXG4gICAgICBvcHRpb25zXG4gICAgfSk7XG4gICAgY29uc3Qgb3BlcmF0b3JMaXN0ID0gbmV3IF9vcGVyYXRvcl9saXN0Lk9wZXJhdG9yTGlzdCgpO1xuICAgIGNvbnN0IHBkZkZvbnRzID0gW107XG4gICAgY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICAgICAgZ2V0IGZvbnQoKSB7XG4gICAgICAgIHJldHVybiBwZGZGb250c1twZGZGb250cy5sZW5ndGggLSAxXTtcbiAgICAgIH0sXG5cbiAgICAgIHNldCBmb250KGZvbnQpIHtcbiAgICAgICAgcGRmRm9udHMucHVzaChmb250KTtcbiAgICAgIH0sXG5cbiAgICAgIGNsb25lKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgIH07XG4gICAgY29uc3QgZm9udHMgPSBuZXcgTWFwKCk7XG4gICAgZm9udFJlcy5mb3JFYWNoKChmb250TmFtZSwgZm9udCkgPT4ge1xuICAgICAgZm9udHMuc2V0KGZvbnROYW1lLCBmb250KTtcbiAgICB9KTtcbiAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBbZm9udE5hbWUsIGZvbnRdIG9mIGZvbnRzKSB7XG4gICAgICBjb25zdCBkZXNjcmlwdG9yID0gZm9udC5nZXQoXCJGb250RGVzY3JpcHRvclwiKTtcblxuICAgICAgaWYgKCEoZGVzY3JpcHRvciBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBsZXQgZm9udEZhbWlseSA9IGRlc2NyaXB0b3IuZ2V0KFwiRm9udEZhbWlseVwiKTtcbiAgICAgIGZvbnRGYW1pbHkgPSBmb250RmFtaWx5LnJlcGxhY2UoL1sgXSsoXFxkKS9nLCBcIiQxXCIpO1xuICAgICAgY29uc3QgZm9udFdlaWdodCA9IGRlc2NyaXB0b3IuZ2V0KFwiRm9udFdlaWdodFwiKTtcbiAgICAgIGNvbnN0IGl0YWxpY0FuZ2xlID0gLWRlc2NyaXB0b3IuZ2V0KFwiSXRhbGljQW5nbGVcIik7XG4gICAgICBjb25zdCBjc3NGb250SW5mbyA9IHtcbiAgICAgICAgZm9udEZhbWlseSxcbiAgICAgICAgZm9udFdlaWdodCxcbiAgICAgICAgaXRhbGljQW5nbGVcbiAgICAgIH07XG5cbiAgICAgIGlmICghKDAsIF9jb3JlX3V0aWxzLnZhbGlkYXRlQ1NTRm9udCkoY3NzRm9udEluZm8pKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBwcm9taXNlcy5wdXNoKHBhcnRpYWxFdmFsdWF0b3IuaGFuZGxlU2V0Rm9udChyZXNvdXJjZXMsIFtfcHJpbWl0aXZlcy5OYW1lLmdldChmb250TmFtZSksIDFdLCBudWxsLCBvcGVyYXRvckxpc3QsIHRhc2ssIGluaXRpYWxTdGF0ZSwgbnVsbCwgY3NzRm9udEluZm8pLmNhdGNoKGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKGBsb2FkWGZhRm9udHM6IFwiJHtyZWFzb259XCIuYCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSkpO1xuICAgIH1cblxuICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgICBjb25zdCBtaXNzaW5nRm9udHMgPSB0aGlzLnhmYUZhY3Rvcnkuc2V0Rm9udHMocGRmRm9udHMpO1xuXG4gICAgaWYgKCFtaXNzaW5nRm9udHMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBvcHRpb25zLmlnbm9yZUVycm9ycyA9IHRydWU7XG4gICAgcHJvbWlzZXMubGVuZ3RoID0gMDtcbiAgICBwZGZGb250cy5sZW5ndGggPSAwO1xuICAgIGNvbnN0IHJlYWxseU1pc3NpbmdGb250cyA9IG5ldyBTZXQoKTtcblxuICAgIGZvciAoY29uc3QgbWlzc2luZyBvZiBtaXNzaW5nRm9udHMpIHtcbiAgICAgIGlmICghKDAsIF94ZmFfZm9udHMuZ2V0WGZhRm9udE5hbWUpKGAke21pc3Npbmd9LVJlZ3VsYXJgKSkge1xuICAgICAgICByZWFsbHlNaXNzaW5nRm9udHMuYWRkKG1pc3NpbmcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZWFsbHlNaXNzaW5nRm9udHMuc2l6ZSkge1xuICAgICAgbWlzc2luZ0ZvbnRzLnB1c2goXCJQZGZKUy1GYWxsYmFja1wiKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG1pc3Npbmcgb2YgbWlzc2luZ0ZvbnRzKSB7XG4gICAgICBpZiAocmVhbGx5TWlzc2luZ0ZvbnRzLmhhcyhtaXNzaW5nKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBmb250SW5mbyBvZiBbe1xuICAgICAgICBuYW1lOiBcIlJlZ3VsYXJcIixcbiAgICAgICAgZm9udFdlaWdodDogNDAwLFxuICAgICAgICBpdGFsaWNBbmdsZTogMFxuICAgICAgfSwge1xuICAgICAgICBuYW1lOiBcIkJvbGRcIixcbiAgICAgICAgZm9udFdlaWdodDogNzAwLFxuICAgICAgICBpdGFsaWNBbmdsZTogMFxuICAgICAgfSwge1xuICAgICAgICBuYW1lOiBcIkl0YWxpY1wiLFxuICAgICAgICBmb250V2VpZ2h0OiA0MDAsXG4gICAgICAgIGl0YWxpY0FuZ2xlOiAxMlxuICAgICAgfSwge1xuICAgICAgICBuYW1lOiBcIkJvbGRJdGFsaWNcIixcbiAgICAgICAgZm9udFdlaWdodDogNzAwLFxuICAgICAgICBpdGFsaWNBbmdsZTogMTJcbiAgICAgIH1dKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBgJHttaXNzaW5nfS0ke2ZvbnRJbmZvLm5hbWV9YDtcbiAgICAgICAgY29uc3QgZGljdCA9ICgwLCBfeGZhX2ZvbnRzLmdldFhmYUZvbnREaWN0KShuYW1lKTtcbiAgICAgICAgcHJvbWlzZXMucHVzaChwYXJ0aWFsRXZhbHVhdG9yLmhhbmRsZVNldEZvbnQocmVzb3VyY2VzLCBbX3ByaW1pdGl2ZXMuTmFtZS5nZXQobmFtZSksIDFdLCBudWxsLCBvcGVyYXRvckxpc3QsIHRhc2ssIGluaXRpYWxTdGF0ZSwgZGljdCwge1xuICAgICAgICAgIGZvbnRGYW1pbHk6IG1pc3NpbmcsXG4gICAgICAgICAgZm9udFdlaWdodDogZm9udEluZm8uZm9udFdlaWdodCxcbiAgICAgICAgICBpdGFsaWNBbmdsZTogZm9udEluZm8uaXRhbGljQW5nbGVcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgbG9hZFhmYUZvbnRzOiBcIiR7cmVhc29ufVwiLmApO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgIHRoaXMueGZhRmFjdG9yeS5hcHBlbmRGb250cyhwZGZGb250cywgcmVhbGx5TWlzc2luZ0ZvbnRzKTtcbiAgfVxuXG4gIGFzeW5jIHNlcmlhbGl6ZVhmYURhdGEoYW5ub3RhdGlvblN0b3JhZ2UpIHtcbiAgICByZXR1cm4gdGhpcy54ZmFGYWN0b3J5ID8gdGhpcy54ZmFGYWN0b3J5LnNlcmlhbGl6ZURhdGEoYW5ub3RhdGlvblN0b3JhZ2UpIDogbnVsbDtcbiAgfVxuXG4gIGdldCBmb3JtSW5mbygpIHtcbiAgICBjb25zdCBmb3JtSW5mbyA9IHtcbiAgICAgIGhhc0ZpZWxkczogZmFsc2UsXG4gICAgICBoYXNBY3JvRm9ybTogZmFsc2UsXG4gICAgICBoYXNYZmE6IGZhbHNlLFxuICAgICAgaGFzU2lnbmF0dXJlczogZmFsc2VcbiAgICB9O1xuICAgIGNvbnN0IGFjcm9Gb3JtID0gdGhpcy5jYXRhbG9nLmFjcm9Gb3JtO1xuXG4gICAgaWYgKCFhY3JvRm9ybSkge1xuICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiZm9ybUluZm9cIiwgZm9ybUluZm8pO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWVsZHMgPSBhY3JvRm9ybS5nZXQoXCJGaWVsZHNcIik7XG4gICAgICBjb25zdCBoYXNGaWVsZHMgPSBBcnJheS5pc0FycmF5KGZpZWxkcykgJiYgZmllbGRzLmxlbmd0aCA+IDA7XG4gICAgICBmb3JtSW5mby5oYXNGaWVsZHMgPSBoYXNGaWVsZHM7XG4gICAgICBjb25zdCB4ZmEgPSBhY3JvRm9ybS5nZXQoXCJYRkFcIik7XG4gICAgICBmb3JtSW5mby5oYXNYZmEgPSBBcnJheS5pc0FycmF5KHhmYSkgJiYgeGZhLmxlbmd0aCA+IDAgfHwgKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKSh4ZmEpICYmICF4ZmEuaXNFbXB0eTtcbiAgICAgIGNvbnN0IHNpZ0ZsYWdzID0gYWNyb0Zvcm0uZ2V0KFwiU2lnRmxhZ3NcIik7XG4gICAgICBjb25zdCBoYXNTaWduYXR1cmVzID0gISEoc2lnRmxhZ3MgJiAweDEpO1xuXG4gICAgICBjb25zdCBoYXNPbmx5RG9jdW1lbnRTaWduYXR1cmVzID0gaGFzU2lnbmF0dXJlcyAmJiB0aGlzLl9oYXNPbmx5RG9jdW1lbnRTaWduYXR1cmVzKGZpZWxkcyk7XG5cbiAgICAgIGZvcm1JbmZvLmhhc0Fjcm9Gb3JtID0gaGFzRmllbGRzICYmICFoYXNPbmx5RG9jdW1lbnRTaWduYXR1cmVzO1xuICAgICAgZm9ybUluZm8uaGFzU2lnbmF0dXJlcyA9IGhhc1NpZ25hdHVyZXM7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmIChleCBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgIHRocm93IGV4O1xuICAgICAgfVxuXG4gICAgICAoMCwgX3V0aWwud2FybikoYENhbm5vdCBmZXRjaCBmb3JtIGluZm9ybWF0aW9uOiBcIiR7ZXh9XCIuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiZm9ybUluZm9cIiwgZm9ybUluZm8pO1xuICB9XG5cbiAgZ2V0IGRvY3VtZW50SW5mbygpIHtcbiAgICBjb25zdCBEb2N1bWVudEluZm9WYWxpZGF0b3JzID0ge1xuICAgICAgVGl0bGU6IF91dGlsLmlzU3RyaW5nLFxuICAgICAgQXV0aG9yOiBfdXRpbC5pc1N0cmluZyxcbiAgICAgIFN1YmplY3Q6IF91dGlsLmlzU3RyaW5nLFxuICAgICAgS2V5d29yZHM6IF91dGlsLmlzU3RyaW5nLFxuICAgICAgQ3JlYXRvcjogX3V0aWwuaXNTdHJpbmcsXG4gICAgICBQcm9kdWNlcjogX3V0aWwuaXNTdHJpbmcsXG4gICAgICBDcmVhdGlvbkRhdGU6IF91dGlsLmlzU3RyaW5nLFxuICAgICAgTW9kRGF0ZTogX3V0aWwuaXNTdHJpbmcsXG4gICAgICBUcmFwcGVkOiBfcHJpbWl0aXZlcy5pc05hbWVcbiAgICB9O1xuICAgIGxldCB2ZXJzaW9uID0gdGhpcy5fdmVyc2lvbjtcblxuICAgIGlmICh0eXBlb2YgdmVyc2lvbiAhPT0gXCJzdHJpbmdcIiB8fCAhUERGX0hFQURFUl9WRVJTSU9OX1JFR0VYUC50ZXN0KHZlcnNpb24pKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoYEludmFsaWQgUERGIGhlYWRlciB2ZXJzaW9uIG51bWJlcjogJHt2ZXJzaW9ufWApO1xuICAgICAgdmVyc2lvbiA9IG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgZG9jSW5mbyA9IHtcbiAgICAgIFBERkZvcm1hdFZlcnNpb246IHZlcnNpb24sXG4gICAgICBMYW5ndWFnZTogdGhpcy5jYXRhbG9nLmxhbmcsXG4gICAgICBFbmNyeXB0RmlsdGVyTmFtZTogdGhpcy54cmVmLmVuY3J5cHQgPyB0aGlzLnhyZWYuZW5jcnlwdC5maWx0ZXJOYW1lIDogbnVsbCxcbiAgICAgIElzTGluZWFyaXplZDogISF0aGlzLmxpbmVhcml6YXRpb24sXG4gICAgICBJc0Fjcm9Gb3JtUHJlc2VudDogdGhpcy5mb3JtSW5mby5oYXNBY3JvRm9ybSxcbiAgICAgIElzWEZBUHJlc2VudDogdGhpcy5mb3JtSW5mby5oYXNYZmEsXG4gICAgICBJc0NvbGxlY3Rpb25QcmVzZW50OiAhIXRoaXMuY2F0YWxvZy5jb2xsZWN0aW9uLFxuICAgICAgSXNTaWduYXR1cmVzUHJlc2VudDogdGhpcy5mb3JtSW5mby5oYXNTaWduYXR1cmVzXG4gICAgfTtcbiAgICBsZXQgaW5mb0RpY3Q7XG5cbiAgICB0cnkge1xuICAgICAgaW5mb0RpY3QgPSB0aGlzLnhyZWYudHJhaWxlci5nZXQoXCJJbmZvXCIpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cblxuICAgICAgKDAsIF91dGlsLmluZm8pKFwiVGhlIGRvY3VtZW50IGluZm9ybWF0aW9uIGRpY3Rpb25hcnkgaXMgaW52YWxpZC5cIik7XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGluZm9EaWN0KSkge1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgaW5mb0RpY3QuZ2V0S2V5cygpKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gaW5mb0RpY3QuZ2V0KGtleSk7XG5cbiAgICAgICAgaWYgKERvY3VtZW50SW5mb1ZhbGlkYXRvcnNba2V5XSkge1xuICAgICAgICAgIGlmIChEb2N1bWVudEluZm9WYWxpZGF0b3JzW2tleV0odmFsdWUpKSB7XG4gICAgICAgICAgICBkb2NJbmZvW2tleV0gPSB0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIgPyB2YWx1ZSA6ICgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykodmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoYEJhZCB2YWx1ZSBpbiBkb2N1bWVudCBpbmZvIGZvciBcIiR7a2V5fVwiLmApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Yga2V5ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgbGV0IGN1c3RvbVZhbHVlO1xuXG4gICAgICAgICAgaWYgKCgwLCBfdXRpbC5pc1N0cmluZykodmFsdWUpKSB7XG4gICAgICAgICAgICBjdXN0b21WYWx1ZSA9ICgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykodmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkodmFsdWUpIHx8ICgwLCBfdXRpbC5pc051bSkodmFsdWUpIHx8ICgwLCBfdXRpbC5pc0Jvb2wpKHZhbHVlKSkge1xuICAgICAgICAgICAgY3VzdG9tVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgKDAsIF91dGlsLmluZm8pKGBVbnN1cHBvcnRlZCB2YWx1ZSBpbiBkb2N1bWVudCBpbmZvIGZvciAoY3VzdG9tKSBcIiR7a2V5fVwiLmApO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFkb2NJbmZvLkN1c3RvbSkge1xuICAgICAgICAgICAgZG9jSW5mby5DdXN0b20gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRvY0luZm8uQ3VzdG9tW2tleV0gPSBjdXN0b21WYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImRvY3VtZW50SW5mb1wiLCBkb2NJbmZvKTtcbiAgfVxuXG4gIGdldCBmaW5nZXJwcmludHMoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUoZGF0YSkge1xuICAgICAgcmV0dXJuIHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiICYmIGRhdGEubGVuZ3RoID4gMCAmJiBkYXRhICE9PSBFTVBUWV9GSU5HRVJQUklOVDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoZXhTdHJpbmcoaGFzaCkge1xuICAgICAgY29uc3QgYnVmID0gW107XG5cbiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGhhc2gubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICBjb25zdCBoZXggPSBoYXNoW2ldLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgYnVmLnB1c2goaGV4LnBhZFN0YXJ0KDIsIFwiMFwiKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBidWYuam9pbihcIlwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBpZEFycmF5ID0gdGhpcy54cmVmLnRyYWlsZXIuZ2V0KFwiSURcIik7XG4gICAgbGV0IGhhc2hPcmlnaW5hbCwgaGFzaE1vZGlmaWVkO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaWRBcnJheSkgJiYgdmFsaWRhdGUoaWRBcnJheVswXSkpIHtcbiAgICAgIGhhc2hPcmlnaW5hbCA9ICgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShpZEFycmF5WzBdKTtcblxuICAgICAgaWYgKGlkQXJyYXlbMV0gIT09IGlkQXJyYXlbMF0gJiYgdmFsaWRhdGUoaWRBcnJheVsxXSkpIHtcbiAgICAgICAgaGFzaE1vZGlmaWVkID0gKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKGlkQXJyYXlbMV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBoYXNoT3JpZ2luYWwgPSAoMCwgX2NyeXB0by5jYWxjdWxhdGVNRDUpKHRoaXMuc3RyZWFtLmdldEJ5dGVSYW5nZSgwLCBGSU5HRVJQUklOVF9GSVJTVF9CWVRFUyksIDAsIEZJTkdFUlBSSU5UX0ZJUlNUX0JZVEVTKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJmaW5nZXJwcmludHNcIiwgW2hleFN0cmluZyhoYXNoT3JpZ2luYWwpLCBoYXNoTW9kaWZpZWQgPyBoZXhTdHJpbmcoaGFzaE1vZGlmaWVkKSA6IG51bGxdKTtcbiAgfVxuXG4gIGFzeW5jIF9nZXRMaW5lYXJpemF0aW9uUGFnZShwYWdlSW5kZXgpIHtcbiAgICBjb25zdCB7XG4gICAgICBjYXRhbG9nLFxuICAgICAgbGluZWFyaXphdGlvblxuICAgIH0gPSB0aGlzO1xuXG4gICAgY29uc3QgcmVmID0gX3ByaW1pdGl2ZXMuUmVmLmdldChsaW5lYXJpemF0aW9uLm9iamVjdE51bWJlckZpcnN0LCAwKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBvYmogPSBhd2FpdCB0aGlzLnhyZWYuZmV0Y2hBc3luYyhyZWYpO1xuXG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkob2JqLCBcIlBhZ2VcIikgfHwgKDAsIF9wcmltaXRpdmVzLmlzRGljdCkob2JqKSAmJiAhb2JqLmhhcyhcIlR5cGVcIikgJiYgb2JqLmhhcyhcIkNvbnRlbnRzXCIpKSB7XG4gICAgICAgIGlmIChyZWYgJiYgIWNhdGFsb2cucGFnZUtpZHNDb3VudENhY2hlLmhhcyhyZWYpKSB7XG4gICAgICAgICAgY2F0YWxvZy5wYWdlS2lkc0NvdW50Q2FjaGUucHV0KHJlZiwgMSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW29iaiwgcmVmXTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiVGhlIExpbmVhcml6YXRpb24gZGljdGlvbmFyeSBkb2Vzbid0IHBvaW50IHRvIGEgdmFsaWQgUGFnZSBkaWN0aW9uYXJ5LlwiKTtcbiAgICB9IGNhdGNoIChyZWFzb24pIHtcbiAgICAgICgwLCBfdXRpbC5pbmZvKShyZWFzb24pO1xuICAgICAgcmV0dXJuIGNhdGFsb2cuZ2V0UGFnZURpY3QocGFnZUluZGV4KTtcbiAgICB9XG4gIH1cblxuICBnZXRQYWdlKHBhZ2VJbmRleCkge1xuICAgIGNvbnN0IGNhY2hlZFByb21pc2UgPSB0aGlzLl9wYWdlUHJvbWlzZXMuZ2V0KHBhZ2VJbmRleCk7XG5cbiAgICBpZiAoY2FjaGVkUHJvbWlzZSkge1xuICAgICAgcmV0dXJuIGNhY2hlZFByb21pc2U7XG4gICAgfVxuXG4gICAgY29uc3Qge1xuICAgICAgY2F0YWxvZyxcbiAgICAgIGxpbmVhcml6YXRpb24sXG4gICAgICB4ZmFGYWN0b3J5XG4gICAgfSA9IHRoaXM7XG4gICAgbGV0IHByb21pc2U7XG5cbiAgICBpZiAoeGZhRmFjdG9yeSkge1xuICAgICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShbX3ByaW1pdGl2ZXMuRGljdC5lbXB0eSwgbnVsbF0pO1xuICAgIH0gZWxzZSBpZiAobGluZWFyaXphdGlvbiAmJiBsaW5lYXJpemF0aW9uLnBhZ2VGaXJzdCA9PT0gcGFnZUluZGV4KSB7XG4gICAgICBwcm9taXNlID0gdGhpcy5fZ2V0TGluZWFyaXphdGlvblBhZ2UocGFnZUluZGV4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvbWlzZSA9IGNhdGFsb2cuZ2V0UGFnZURpY3QocGFnZUluZGV4KTtcbiAgICB9XG5cbiAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKChbcGFnZURpY3QsIHJlZl0pID0+IHtcbiAgICAgIHJldHVybiBuZXcgUGFnZSh7XG4gICAgICAgIHBkZk1hbmFnZXI6IHRoaXMucGRmTWFuYWdlcixcbiAgICAgICAgeHJlZjogdGhpcy54cmVmLFxuICAgICAgICBwYWdlSW5kZXgsXG4gICAgICAgIHBhZ2VEaWN0LFxuICAgICAgICByZWYsXG4gICAgICAgIGdsb2JhbElkRmFjdG9yeTogdGhpcy5fZ2xvYmFsSWRGYWN0b3J5LFxuICAgICAgICBmb250Q2FjaGU6IGNhdGFsb2cuZm9udENhY2hlLFxuICAgICAgICBidWlsdEluQ01hcENhY2hlOiBjYXRhbG9nLmJ1aWx0SW5DTWFwQ2FjaGUsXG4gICAgICAgIHN0YW5kYXJkRm9udERhdGFDYWNoZTogY2F0YWxvZy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsXG4gICAgICAgIGdsb2JhbEltYWdlQ2FjaGU6IGNhdGFsb2cuZ2xvYmFsSW1hZ2VDYWNoZSxcbiAgICAgICAgbm9uQmxlbmRNb2Rlc1NldDogY2F0YWxvZy5ub25CbGVuZE1vZGVzU2V0LFxuICAgICAgICB4ZmFGYWN0b3J5XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuX3BhZ2VQcm9taXNlcy5zZXQocGFnZUluZGV4LCBwcm9taXNlKTtcblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cbiAgYXN5bmMgY2hlY2tGaXJzdFBhZ2UocmVjb3ZlcnlNb2RlID0gZmFsc2UpIHtcbiAgICBpZiAocmVjb3ZlcnlNb2RlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuZ2V0UGFnZSgwKTtcbiAgICB9IGNhdGNoIChyZWFzb24pIHtcbiAgICAgIGlmIChyZWFzb24gaW5zdGFuY2VvZiBfY29yZV91dGlscy5YUmVmRW50cnlFeGNlcHRpb24pIHtcbiAgICAgICAgdGhpcy5fcGFnZVByb21pc2VzLmRlbGV0ZSgwKTtcblxuICAgICAgICBhd2FpdCB0aGlzLmNsZWFudXAoKTtcbiAgICAgICAgdGhyb3cgbmV3IF9jb3JlX3V0aWxzLlhSZWZQYXJzZUV4Y2VwdGlvbigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNoZWNrTGFzdFBhZ2UocmVjb3ZlcnlNb2RlID0gZmFsc2UpIHtcbiAgICBjb25zdCB7XG4gICAgICBjYXRhbG9nLFxuICAgICAgcGRmTWFuYWdlclxuICAgIH0gPSB0aGlzO1xuICAgIGNhdGFsb2cuc2V0QWN0dWFsTnVtUGFnZXMoKTtcbiAgICBsZXQgbnVtUGFnZXM7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW3BkZk1hbmFnZXIuZW5zdXJlRG9jKFwieGZhRmFjdG9yeVwiKSwgcGRmTWFuYWdlci5lbnN1cmVEb2MoXCJsaW5lYXJpemF0aW9uXCIpLCBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coXCJudW1QYWdlc1wiKV0pO1xuXG4gICAgICBpZiAodGhpcy54ZmFGYWN0b3J5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5saW5lYXJpemF0aW9uKSB7XG4gICAgICAgIG51bVBhZ2VzID0gdGhpcy5saW5lYXJpemF0aW9uLm51bVBhZ2VzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbnVtUGFnZXMgPSBjYXRhbG9nLm51bVBhZ2VzO1xuICAgICAgfVxuXG4gICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIobnVtUGFnZXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIlBhZ2UgY291bnQgaXMgbm90IGFuIGludGVnZXIuXCIpO1xuICAgICAgfSBlbHNlIGlmIChudW1QYWdlcyA8PSAxKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5nZXRQYWdlKG51bVBhZ2VzIC0gMSk7XG4gICAgfSBjYXRjaCAocmVhc29uKSB7XG4gICAgICB0aGlzLl9wYWdlUHJvbWlzZXMuZGVsZXRlKG51bVBhZ2VzIC0gMSk7XG5cbiAgICAgIGF3YWl0IHRoaXMuY2xlYW51cCgpO1xuXG4gICAgICBpZiAocmVhc29uIGluc3RhbmNlb2YgX2NvcmVfdXRpbHMuWFJlZkVudHJ5RXhjZXB0aW9uICYmICFyZWNvdmVyeU1vZGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IF9jb3JlX3V0aWxzLlhSZWZQYXJzZUV4Y2VwdGlvbigpO1xuICAgICAgfVxuXG4gICAgICAoMCwgX3V0aWwud2FybikoYGNoZWNrTGFzdFBhZ2UgLSBpbnZhbGlkIC9QYWdlcyB0cmVlIC9Db3VudDogJHtudW1QYWdlc30uYCk7XG4gICAgICBsZXQgcGFnZXNUcmVlO1xuXG4gICAgICB0cnkge1xuICAgICAgICBwYWdlc1RyZWUgPSBhd2FpdCBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coXCJnZXRBbGxQYWdlRGljdHNcIiwgW3JlY292ZXJ5TW9kZV0pO1xuICAgICAgfSBjYXRjaCAocmVhc29uQWxsKSB7XG4gICAgICAgIGlmIChyZWFzb25BbGwgaW5zdGFuY2VvZiBfY29yZV91dGlscy5YUmVmRW50cnlFeGNlcHRpb24gJiYgIXJlY292ZXJ5TW9kZSkge1xuICAgICAgICAgIHRocm93IG5ldyBfY29yZV91dGlscy5YUmVmUGFyc2VFeGNlcHRpb24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNhdGFsb2cuc2V0QWN0dWFsTnVtUGFnZXMoMSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBbcGFnZUluZGV4LCBbcGFnZURpY3QsIHJlZl1dIG9mIHBhZ2VzVHJlZSkge1xuICAgICAgICBsZXQgcHJvbWlzZTtcblxuICAgICAgICBpZiAocGFnZURpY3QgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHByb21pc2UgPSBQcm9taXNlLnJlamVjdChwYWdlRGljdCk7XG4gICAgICAgICAgcHJvbWlzZS5jYXRjaCgoKSA9PiB7fSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShuZXcgUGFnZSh7XG4gICAgICAgICAgICBwZGZNYW5hZ2VyLFxuICAgICAgICAgICAgeHJlZjogdGhpcy54cmVmLFxuICAgICAgICAgICAgcGFnZUluZGV4LFxuICAgICAgICAgICAgcGFnZURpY3QsXG4gICAgICAgICAgICByZWYsXG4gICAgICAgICAgICBnbG9iYWxJZEZhY3Rvcnk6IHRoaXMuX2dsb2JhbElkRmFjdG9yeSxcbiAgICAgICAgICAgIGZvbnRDYWNoZTogY2F0YWxvZy5mb250Q2FjaGUsXG4gICAgICAgICAgICBidWlsdEluQ01hcENhY2hlOiBjYXRhbG9nLmJ1aWx0SW5DTWFwQ2FjaGUsXG4gICAgICAgICAgICBzdGFuZGFyZEZvbnREYXRhQ2FjaGU6IGNhdGFsb2cuc3RhbmRhcmRGb250RGF0YUNhY2hlLFxuICAgICAgICAgICAgZ2xvYmFsSW1hZ2VDYWNoZTogY2F0YWxvZy5nbG9iYWxJbWFnZUNhY2hlLFxuICAgICAgICAgICAgbm9uQmxlbmRNb2Rlc1NldDogY2F0YWxvZy5ub25CbGVuZE1vZGVzU2V0LFxuICAgICAgICAgICAgeGZhRmFjdG9yeTogbnVsbFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3BhZ2VQcm9taXNlcy5zZXQocGFnZUluZGV4LCBwcm9taXNlKTtcbiAgICAgIH1cblxuICAgICAgY2F0YWxvZy5zZXRBY3R1YWxOdW1QYWdlcyhwYWdlc1RyZWUuc2l6ZSk7XG4gICAgfVxuICB9XG5cbiAgZm9udEZhbGxiYWNrKGlkLCBoYW5kbGVyKSB7XG4gICAgcmV0dXJuIHRoaXMuY2F0YWxvZy5mb250RmFsbGJhY2soaWQsIGhhbmRsZXIpO1xuICB9XG5cbiAgYXN5bmMgY2xlYW51cChtYW51YWxseVRyaWdnZXJlZCA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIHRoaXMuY2F0YWxvZyA/IHRoaXMuY2F0YWxvZy5jbGVhbnVwKG1hbnVhbGx5VHJpZ2dlcmVkKSA6ICgwLCBfcHJpbWl0aXZlcy5jbGVhclByaW1pdGl2ZUNhY2hlcykoKTtcbiAgfVxuXG4gIF9jb2xsZWN0RmllbGRPYmplY3RzKG5hbWUsIGZpZWxkUmVmLCBwcm9taXNlcykge1xuICAgIGNvbnN0IGZpZWxkID0gdGhpcy54cmVmLmZldGNoSWZSZWYoZmllbGRSZWYpO1xuXG4gICAgaWYgKGZpZWxkLmhhcyhcIlRcIikpIHtcbiAgICAgIGNvbnN0IHBhcnROYW1lID0gKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShmaWVsZC5nZXQoXCJUXCIpKTtcblxuICAgICAgaWYgKG5hbWUgPT09IFwiXCIpIHtcbiAgICAgICAgbmFtZSA9IHBhcnROYW1lO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmFtZSA9IGAke25hbWV9LiR7cGFydE5hbWV9YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXByb21pc2VzLmhhcyhuYW1lKSkge1xuICAgICAgcHJvbWlzZXMuc2V0KG5hbWUsIFtdKTtcbiAgICB9XG5cbiAgICBwcm9taXNlcy5nZXQobmFtZSkucHVzaChfYW5ub3RhdGlvbi5Bbm5vdGF0aW9uRmFjdG9yeS5jcmVhdGUodGhpcy54cmVmLCBmaWVsZFJlZiwgdGhpcy5wZGZNYW5hZ2VyLCB0aGlzLl9sb2NhbElkRmFjdG9yeSwgdHJ1ZSkudGhlbihhbm5vdGF0aW9uID0+IGFubm90YXRpb24gJiYgYW5ub3RhdGlvbi5nZXRGaWVsZE9iamVjdCgpKS5jYXRjaChmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoYF9jb2xsZWN0RmllbGRPYmplY3RzOiBcIiR7cmVhc29ufVwiLmApO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSkpO1xuXG4gICAgaWYgKGZpZWxkLmhhcyhcIktpZHNcIikpIHtcbiAgICAgIGNvbnN0IGtpZHMgPSBmaWVsZC5nZXQoXCJLaWRzXCIpO1xuXG4gICAgICBmb3IgKGNvbnN0IGtpZCBvZiBraWRzKSB7XG4gICAgICAgIHRoaXMuX2NvbGxlY3RGaWVsZE9iamVjdHMobmFtZSwga2lkLCBwcm9taXNlcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IGZpZWxkT2JqZWN0cygpIHtcbiAgICBpZiAoIXRoaXMuZm9ybUluZm8uaGFzRmllbGRzKSB7XG4gICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJmaWVsZE9iamVjdHNcIiwgUHJvbWlzZS5yZXNvbHZlKG51bGwpKTtcbiAgICB9XG5cbiAgICBjb25zdCBhbGxGaWVsZHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIGNvbnN0IGZpZWxkUHJvbWlzZXMgPSBuZXcgTWFwKCk7XG5cbiAgICBmb3IgKGNvbnN0IGZpZWxkUmVmIG9mIHRoaXMuY2F0YWxvZy5hY3JvRm9ybS5nZXQoXCJGaWVsZHNcIikpIHtcbiAgICAgIHRoaXMuX2NvbGxlY3RGaWVsZE9iamVjdHMoXCJcIiwgZmllbGRSZWYsIGZpZWxkUHJvbWlzZXMpO1xuICAgIH1cblxuICAgIGNvbnN0IGFsbFByb21pc2VzID0gW107XG5cbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBwcm9taXNlc10gb2YgZmllbGRQcm9taXNlcykge1xuICAgICAgYWxsUHJvbWlzZXMucHVzaChQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihmaWVsZHMgPT4ge1xuICAgICAgICBmaWVsZHMgPSBmaWVsZHMuZmlsdGVyKGZpZWxkID0+ICEhZmllbGQpO1xuXG4gICAgICAgIGlmIChmaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGFsbEZpZWxkc1tuYW1lXSA9IGZpZWxkcztcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImZpZWxkT2JqZWN0c1wiLCBQcm9taXNlLmFsbChhbGxQcm9taXNlcykudGhlbigoKSA9PiBhbGxGaWVsZHMpKTtcbiAgfVxuXG4gIGdldCBoYXNKU0FjdGlvbnMoKSB7XG4gICAgY29uc3QgcHJvbWlzZSA9IHRoaXMucGRmTWFuYWdlci5lbnN1cmVEb2MoXCJfcGFyc2VIYXNKU0FjdGlvbnNcIik7XG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiaGFzSlNBY3Rpb25zXCIsIHByb21pc2UpO1xuICB9XG5cbiAgYXN5bmMgX3BhcnNlSGFzSlNBY3Rpb25zKCkge1xuICAgIGNvbnN0IFtjYXRhbG9nSnNBY3Rpb25zLCBmaWVsZE9iamVjdHNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW3RoaXMucGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKFwianNBY3Rpb25zXCIpLCB0aGlzLnBkZk1hbmFnZXIuZW5zdXJlRG9jKFwiZmllbGRPYmplY3RzXCIpXSk7XG5cbiAgICBpZiAoY2F0YWxvZ0pzQWN0aW9ucykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGZpZWxkT2JqZWN0cykge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZmllbGRPYmplY3RzKS5zb21lKGZpZWxkT2JqZWN0ID0+IGZpZWxkT2JqZWN0LnNvbWUob2JqZWN0ID0+IG9iamVjdC5hY3Rpb25zICE9PSBudWxsKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0IGNhbGN1bGF0aW9uT3JkZXJJZHMoKSB7XG4gICAgY29uc3QgYWNyb0Zvcm0gPSB0aGlzLmNhdGFsb2cuYWNyb0Zvcm07XG5cbiAgICBpZiAoIWFjcm9Gb3JtIHx8ICFhY3JvRm9ybS5oYXMoXCJDT1wiKSkge1xuICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiY2FsY3VsYXRpb25PcmRlcklkc1wiLCBudWxsKTtcbiAgICB9XG5cbiAgICBjb25zdCBjYWxjdWxhdGlvbk9yZGVyID0gYWNyb0Zvcm0uZ2V0KFwiQ09cIik7XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2FsY3VsYXRpb25PcmRlcikgfHwgY2FsY3VsYXRpb25PcmRlci5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImNhbGN1bGF0aW9uT3JkZXJJZHNcIiwgbnVsbCk7XG4gICAgfVxuXG4gICAgY29uc3QgaWRzID0gY2FsY3VsYXRpb25PcmRlci5maWx0ZXIoX3ByaW1pdGl2ZXMuaXNSZWYpLm1hcChyZWYgPT4gcmVmLnRvU3RyaW5nKCkpO1xuXG4gICAgaWYgKGlkcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImNhbGN1bGF0aW9uT3JkZXJJZHNcIiwgbnVsbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiY2FsY3VsYXRpb25PcmRlcklkc1wiLCBpZHMpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5QREZEb2N1bWVudCA9IFBERkRvY3VtZW50O1xuXG4vKioqLyB9KSxcbi8qIDEyICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLmdldFhmYUZvbnREaWN0ID0gZ2V0WGZhRm9udERpY3Q7XG5leHBvcnRzLmdldFhmYUZvbnROYW1lID0gZ2V0WGZhRm9udE5hbWU7XG5cbnZhciBfY2FsaWJyaV9mYWN0b3JzID0gX193X3BkZmpzX3JlcXVpcmVfXygxMyk7XG5cbnZhciBfcHJpbWl0aXZlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNSk7XG5cbnZhciBfaGVsdmV0aWNhX2ZhY3RvcnMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDE0KTtcblxudmFyIF9saWJlcmF0aW9uc2Fuc193aWR0aHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDE1KTtcblxudmFyIF9teXJpYWRwcm9fZmFjdG9ycyA9IF9fd19wZGZqc19yZXF1aXJlX18oMTYpO1xuXG52YXIgX3NlZ29ldWlfZmFjdG9ycyA9IF9fd19wZGZqc19yZXF1aXJlX18oMTcpO1xuXG52YXIgX2NvcmVfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDkpO1xuXG52YXIgX2ZvbnRzX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXygxOCk7XG5cbmNvbnN0IGdldFhGQUZvbnRNYXAgPSAoMCwgX2NvcmVfdXRpbHMuZ2V0TG9va3VwVGFibGVGYWN0b3J5KShmdW5jdGlvbiAodCkge1xuICB0W1wiTXlyaWFkUHJvLVJlZ3VsYXJcIl0gPSB0W1wiUGRmSlMtRmFsbGJhY2stUmVndWxhclwiXSA9IHtcbiAgICBuYW1lOiBcIkxpYmVyYXRpb25TYW5zLVJlZ3VsYXJcIixcbiAgICBmYWN0b3JzOiBfbXlyaWFkcHJvX2ZhY3RvcnMuTXlyaWFkUHJvUmVndWxhckZhY3RvcnMsXG4gICAgYmFzZVdpZHRoczogX2xpYmVyYXRpb25zYW5zX3dpZHRocy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJXaWR0aHMsXG4gICAgYmFzZU1hcHBpbmc6IF9saWJlcmF0aW9uc2Fuc193aWR0aHMuTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZyxcbiAgICBtZXRyaWNzOiBfbXlyaWFkcHJvX2ZhY3RvcnMuTXlyaWFkUHJvUmVndWxhck1ldHJpY3NcbiAgfTtcbiAgdFtcIk15cmlhZFByby1Cb2xkXCJdID0gdFtcIlBkZkpTLUZhbGxiYWNrLUJvbGRcIl0gPSB7XG4gICAgbmFtZTogXCJMaWJlcmF0aW9uU2Fucy1Cb2xkXCIsXG4gICAgZmFjdG9yczogX215cmlhZHByb19mYWN0b3JzLk15cmlhZFByb0JvbGRGYWN0b3JzLFxuICAgIGJhc2VXaWR0aHM6IF9saWJlcmF0aW9uc2Fuc193aWR0aHMuTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzLFxuICAgIGJhc2VNYXBwaW5nOiBfbGliZXJhdGlvbnNhbnNfd2lkdGhzLkxpYmVyYXRpb25TYW5zQm9sZE1hcHBpbmcsXG4gICAgbWV0cmljczogX215cmlhZHByb19mYWN0b3JzLk15cmlhZFByb0JvbGRNZXRyaWNzXG4gIH07XG4gIHRbXCJNeXJpYWRQcm8tSXRcIl0gPSB0W1wiTXlyaWFkUHJvLUl0YWxpY1wiXSA9IHRbXCJQZGZKUy1GYWxsYmFjay1JdGFsaWNcIl0gPSB7XG4gICAgbmFtZTogXCJMaWJlcmF0aW9uU2Fucy1JdGFsaWNcIixcbiAgICBmYWN0b3JzOiBfbXlyaWFkcHJvX2ZhY3RvcnMuTXlyaWFkUHJvSXRhbGljRmFjdG9ycyxcbiAgICBiYXNlV2lkdGhzOiBfbGliZXJhdGlvbnNhbnNfd2lkdGhzLkxpYmVyYXRpb25TYW5zSXRhbGljV2lkdGhzLFxuICAgIGJhc2VNYXBwaW5nOiBfbGliZXJhdGlvbnNhbnNfd2lkdGhzLkxpYmVyYXRpb25TYW5zSXRhbGljTWFwcGluZyxcbiAgICBtZXRyaWNzOiBfbXlyaWFkcHJvX2ZhY3RvcnMuTXlyaWFkUHJvSXRhbGljTWV0cmljc1xuICB9O1xuICB0W1wiTXlyaWFkUHJvLUJvbGRJdFwiXSA9IHRbXCJNeXJpYWRQcm8tQm9sZEl0YWxpY1wiXSA9IHRbXCJQZGZKUy1GYWxsYmFjay1Cb2xkSXRhbGljXCJdID0ge1xuICAgIG5hbWU6IFwiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpY1wiLFxuICAgIGZhY3RvcnM6IF9teXJpYWRwcm9fZmFjdG9ycy5NeXJpYWRQcm9Cb2xkSXRhbGljRmFjdG9ycyxcbiAgICBiYXNlV2lkdGhzOiBfbGliZXJhdGlvbnNhbnNfd2lkdGhzLkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY1dpZHRocyxcbiAgICBiYXNlTWFwcGluZzogX2xpYmVyYXRpb25zYW5zX3dpZHRocy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNNYXBwaW5nLFxuICAgIG1ldHJpY3M6IF9teXJpYWRwcm9fZmFjdG9ycy5NeXJpYWRQcm9Cb2xkSXRhbGljTWV0cmljc1xuICB9O1xuICB0LkFyaWFsTVQgPSB0LkFyaWFsID0gdFtcIkFyaWFsLVJlZ3VsYXJcIl0gPSB7XG4gICAgbmFtZTogXCJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyXCIsXG4gICAgYmFzZVdpZHRoczogX2xpYmVyYXRpb25zYW5zX3dpZHRocy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJXaWR0aHMsXG4gICAgYmFzZU1hcHBpbmc6IF9saWJlcmF0aW9uc2Fuc193aWR0aHMuTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZ1xuICB9O1xuICB0W1wiQXJpYWwtQm9sZE1UXCJdID0gdFtcIkFyaWFsLUJvbGRcIl0gPSB7XG4gICAgbmFtZTogXCJMaWJlcmF0aW9uU2Fucy1Cb2xkXCIsXG4gICAgYmFzZVdpZHRoczogX2xpYmVyYXRpb25zYW5zX3dpZHRocy5MaWJlcmF0aW9uU2Fuc0JvbGRXaWR0aHMsXG4gICAgYmFzZU1hcHBpbmc6IF9saWJlcmF0aW9uc2Fuc193aWR0aHMuTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZ1xuICB9O1xuICB0W1wiQXJpYWwtSXRhbGljTVRcIl0gPSB0W1wiQXJpYWwtSXRhbGljXCJdID0ge1xuICAgIG5hbWU6IFwiTGliZXJhdGlvblNhbnMtSXRhbGljXCIsXG4gICAgYmFzZVdpZHRoczogX2xpYmVyYXRpb25zYW5zX3dpZHRocy5MaWJlcmF0aW9uU2Fuc0l0YWxpY1dpZHRocyxcbiAgICBiYXNlTWFwcGluZzogX2xpYmVyYXRpb25zYW5zX3dpZHRocy5MaWJlcmF0aW9uU2Fuc0l0YWxpY01hcHBpbmdcbiAgfTtcbiAgdFtcIkFyaWFsLUJvbGRJdGFsaWNNVFwiXSA9IHRbXCJBcmlhbC1Cb2xkSXRhbGljXCJdID0ge1xuICAgIG5hbWU6IFwiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpY1wiLFxuICAgIGJhc2VXaWR0aHM6IF9saWJlcmF0aW9uc2Fuc193aWR0aHMuTGliZXJhdGlvblNhbnNCb2xkSXRhbGljV2lkdGhzLFxuICAgIGJhc2VNYXBwaW5nOiBfbGliZXJhdGlvbnNhbnNfd2lkdGhzLkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY01hcHBpbmdcbiAgfTtcbiAgdFtcIkNhbGlicmktUmVndWxhclwiXSA9IHtcbiAgICBuYW1lOiBcIkxpYmVyYXRpb25TYW5zLVJlZ3VsYXJcIixcbiAgICBmYWN0b3JzOiBfY2FsaWJyaV9mYWN0b3JzLkNhbGlicmlSZWd1bGFyRmFjdG9ycyxcbiAgICBiYXNlV2lkdGhzOiBfbGliZXJhdGlvbnNhbnNfd2lkdGhzLkxpYmVyYXRpb25TYW5zUmVndWxhcldpZHRocyxcbiAgICBiYXNlTWFwcGluZzogX2xpYmVyYXRpb25zYW5zX3dpZHRocy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJNYXBwaW5nLFxuICAgIG1ldHJpY3M6IF9jYWxpYnJpX2ZhY3RvcnMuQ2FsaWJyaVJlZ3VsYXJNZXRyaWNzXG4gIH07XG4gIHRbXCJDYWxpYnJpLUJvbGRcIl0gPSB7XG4gICAgbmFtZTogXCJMaWJlcmF0aW9uU2Fucy1Cb2xkXCIsXG4gICAgZmFjdG9yczogX2NhbGlicmlfZmFjdG9ycy5DYWxpYnJpQm9sZEZhY3RvcnMsXG4gICAgYmFzZVdpZHRoczogX2xpYmVyYXRpb25zYW5zX3dpZHRocy5MaWJlcmF0aW9uU2Fuc0JvbGRXaWR0aHMsXG4gICAgYmFzZU1hcHBpbmc6IF9saWJlcmF0aW9uc2Fuc193aWR0aHMuTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZyxcbiAgICBtZXRyaWNzOiBfY2FsaWJyaV9mYWN0b3JzLkNhbGlicmlCb2xkTWV0cmljc1xuICB9O1xuICB0W1wiQ2FsaWJyaS1JdGFsaWNcIl0gPSB7XG4gICAgbmFtZTogXCJMaWJlcmF0aW9uU2Fucy1JdGFsaWNcIixcbiAgICBmYWN0b3JzOiBfY2FsaWJyaV9mYWN0b3JzLkNhbGlicmlJdGFsaWNGYWN0b3JzLFxuICAgIGJhc2VXaWR0aHM6IF9saWJlcmF0aW9uc2Fuc193aWR0aHMuTGliZXJhdGlvblNhbnNJdGFsaWNXaWR0aHMsXG4gICAgYmFzZU1hcHBpbmc6IF9saWJlcmF0aW9uc2Fuc193aWR0aHMuTGliZXJhdGlvblNhbnNJdGFsaWNNYXBwaW5nLFxuICAgIG1ldHJpY3M6IF9jYWxpYnJpX2ZhY3RvcnMuQ2FsaWJyaUl0YWxpY01ldHJpY3NcbiAgfTtcbiAgdFtcIkNhbGlicmktQm9sZEl0YWxpY1wiXSA9IHtcbiAgICBuYW1lOiBcIkxpYmVyYXRpb25TYW5zLUJvbGRJdGFsaWNcIixcbiAgICBmYWN0b3JzOiBfY2FsaWJyaV9mYWN0b3JzLkNhbGlicmlCb2xkSXRhbGljRmFjdG9ycyxcbiAgICBiYXNlV2lkdGhzOiBfbGliZXJhdGlvbnNhbnNfd2lkdGhzLkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY1dpZHRocyxcbiAgICBiYXNlTWFwcGluZzogX2xpYmVyYXRpb25zYW5zX3dpZHRocy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNNYXBwaW5nLFxuICAgIG1ldHJpY3M6IF9jYWxpYnJpX2ZhY3RvcnMuQ2FsaWJyaUJvbGRJdGFsaWNNZXRyaWNzXG4gIH07XG4gIHRbXCJTZWdvZXVpLVJlZ3VsYXJcIl0gPSB7XG4gICAgbmFtZTogXCJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyXCIsXG4gICAgZmFjdG9yczogX3NlZ29ldWlfZmFjdG9ycy5TZWdvZXVpUmVndWxhckZhY3RvcnMsXG4gICAgYmFzZVdpZHRoczogX2xpYmVyYXRpb25zYW5zX3dpZHRocy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJXaWR0aHMsXG4gICAgYmFzZU1hcHBpbmc6IF9saWJlcmF0aW9uc2Fuc193aWR0aHMuTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZyxcbiAgICBtZXRyaWNzOiBfc2Vnb2V1aV9mYWN0b3JzLlNlZ29ldWlSZWd1bGFyTWV0cmljc1xuICB9O1xuICB0W1wiU2Vnb2V1aS1Cb2xkXCJdID0ge1xuICAgIG5hbWU6IFwiTGliZXJhdGlvblNhbnMtQm9sZFwiLFxuICAgIGZhY3RvcnM6IF9zZWdvZXVpX2ZhY3RvcnMuU2Vnb2V1aUJvbGRGYWN0b3JzLFxuICAgIGJhc2VXaWR0aHM6IF9saWJlcmF0aW9uc2Fuc193aWR0aHMuTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzLFxuICAgIGJhc2VNYXBwaW5nOiBfbGliZXJhdGlvbnNhbnNfd2lkdGhzLkxpYmVyYXRpb25TYW5zQm9sZE1hcHBpbmcsXG4gICAgbWV0cmljczogX3NlZ29ldWlfZmFjdG9ycy5TZWdvZXVpQm9sZE1ldHJpY3NcbiAgfTtcbiAgdFtcIlNlZ29ldWktSXRhbGljXCJdID0ge1xuICAgIG5hbWU6IFwiTGliZXJhdGlvblNhbnMtSXRhbGljXCIsXG4gICAgZmFjdG9yczogX3NlZ29ldWlfZmFjdG9ycy5TZWdvZXVpSXRhbGljRmFjdG9ycyxcbiAgICBiYXNlV2lkdGhzOiBfbGliZXJhdGlvbnNhbnNfd2lkdGhzLkxpYmVyYXRpb25TYW5zSXRhbGljV2lkdGhzLFxuICAgIGJhc2VNYXBwaW5nOiBfbGliZXJhdGlvbnNhbnNfd2lkdGhzLkxpYmVyYXRpb25TYW5zSXRhbGljTWFwcGluZyxcbiAgICBtZXRyaWNzOiBfc2Vnb2V1aV9mYWN0b3JzLlNlZ29ldWlJdGFsaWNNZXRyaWNzXG4gIH07XG4gIHRbXCJTZWdvZXVpLUJvbGRJdGFsaWNcIl0gPSB7XG4gICAgbmFtZTogXCJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljXCIsXG4gICAgZmFjdG9yczogX3NlZ29ldWlfZmFjdG9ycy5TZWdvZXVpQm9sZEl0YWxpY0ZhY3RvcnMsXG4gICAgYmFzZVdpZHRoczogX2xpYmVyYXRpb25zYW5zX3dpZHRocy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNXaWR0aHMsXG4gICAgYmFzZU1hcHBpbmc6IF9saWJlcmF0aW9uc2Fuc193aWR0aHMuTGliZXJhdGlvblNhbnNCb2xkSXRhbGljTWFwcGluZyxcbiAgICBtZXRyaWNzOiBfc2Vnb2V1aV9mYWN0b3JzLlNlZ29ldWlCb2xkSXRhbGljTWV0cmljc1xuICB9O1xuICB0W1wiSGVsdmV0aWNhLVJlZ3VsYXJcIl0gPSB0LkhlbHZldGljYSA9IHtcbiAgICBuYW1lOiBcIkxpYmVyYXRpb25TYW5zLVJlZ3VsYXJcIixcbiAgICBmYWN0b3JzOiBfaGVsdmV0aWNhX2ZhY3RvcnMuSGVsdmV0aWNhUmVndWxhckZhY3RvcnMsXG4gICAgYmFzZVdpZHRoczogX2xpYmVyYXRpb25zYW5zX3dpZHRocy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJXaWR0aHMsXG4gICAgYmFzZU1hcHBpbmc6IF9saWJlcmF0aW9uc2Fuc193aWR0aHMuTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZyxcbiAgICBtZXRyaWNzOiBfaGVsdmV0aWNhX2ZhY3RvcnMuSGVsdmV0aWNhUmVndWxhck1ldHJpY3NcbiAgfTtcbiAgdFtcIkhlbHZldGljYS1Cb2xkXCJdID0ge1xuICAgIG5hbWU6IFwiTGliZXJhdGlvblNhbnMtQm9sZFwiLFxuICAgIGZhY3RvcnM6IF9oZWx2ZXRpY2FfZmFjdG9ycy5IZWx2ZXRpY2FCb2xkRmFjdG9ycyxcbiAgICBiYXNlV2lkdGhzOiBfbGliZXJhdGlvbnNhbnNfd2lkdGhzLkxpYmVyYXRpb25TYW5zQm9sZFdpZHRocyxcbiAgICBiYXNlTWFwcGluZzogX2xpYmVyYXRpb25zYW5zX3dpZHRocy5MaWJlcmF0aW9uU2Fuc0JvbGRNYXBwaW5nLFxuICAgIG1ldHJpY3M6IF9oZWx2ZXRpY2FfZmFjdG9ycy5IZWx2ZXRpY2FCb2xkTWV0cmljc1xuICB9O1xuICB0W1wiSGVsdmV0aWNhLUl0YWxpY1wiXSA9IHtcbiAgICBuYW1lOiBcIkxpYmVyYXRpb25TYW5zLUl0YWxpY1wiLFxuICAgIGZhY3RvcnM6IF9oZWx2ZXRpY2FfZmFjdG9ycy5IZWx2ZXRpY2FJdGFsaWNGYWN0b3JzLFxuICAgIGJhc2VXaWR0aHM6IF9saWJlcmF0aW9uc2Fuc193aWR0aHMuTGliZXJhdGlvblNhbnNJdGFsaWNXaWR0aHMsXG4gICAgYmFzZU1hcHBpbmc6IF9saWJlcmF0aW9uc2Fuc193aWR0aHMuTGliZXJhdGlvblNhbnNJdGFsaWNNYXBwaW5nLFxuICAgIG1ldHJpY3M6IF9oZWx2ZXRpY2FfZmFjdG9ycy5IZWx2ZXRpY2FJdGFsaWNNZXRyaWNzXG4gIH07XG4gIHRbXCJIZWx2ZXRpY2EtQm9sZEl0YWxpY1wiXSA9IHtcbiAgICBuYW1lOiBcIkxpYmVyYXRpb25TYW5zLUJvbGRJdGFsaWNcIixcbiAgICBmYWN0b3JzOiBfaGVsdmV0aWNhX2ZhY3RvcnMuSGVsdmV0aWNhQm9sZEl0YWxpY0ZhY3RvcnMsXG4gICAgYmFzZVdpZHRoczogX2xpYmVyYXRpb25zYW5zX3dpZHRocy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNXaWR0aHMsXG4gICAgYmFzZU1hcHBpbmc6IF9saWJlcmF0aW9uc2Fuc193aWR0aHMuTGliZXJhdGlvblNhbnNCb2xkSXRhbGljTWFwcGluZyxcbiAgICBtZXRyaWNzOiBfaGVsdmV0aWNhX2ZhY3RvcnMuSGVsdmV0aWNhQm9sZEl0YWxpY01ldHJpY3NcbiAgfTtcbn0pO1xuXG5mdW5jdGlvbiBnZXRYZmFGb250TmFtZShuYW1lKSB7XG4gIGNvbnN0IGZvbnROYW1lID0gKDAsIF9mb250c191dGlscy5ub3JtYWxpemVGb250TmFtZSkobmFtZSk7XG4gIGNvbnN0IGZvbnRNYXAgPSBnZXRYRkFGb250TWFwKCk7XG4gIHJldHVybiBmb250TWFwW2ZvbnROYW1lXTtcbn1cblxuZnVuY3Rpb24gZ2V0WGZhRm9udFdpZHRocyhuYW1lKSB7XG4gIGNvbnN0IGluZm8gPSBnZXRYZmFGb250TmFtZShuYW1lKTtcblxuICBpZiAoIWluZm8pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBiYXNlV2lkdGhzLFxuICAgIGJhc2VNYXBwaW5nLFxuICAgIGZhY3RvcnNcbiAgfSA9IGluZm87XG4gIGxldCByZXNjYWxlZEJhc2VXaWR0aHM7XG5cbiAgaWYgKCFmYWN0b3JzKSB7XG4gICAgcmVzY2FsZWRCYXNlV2lkdGhzID0gYmFzZVdpZHRocztcbiAgfSBlbHNlIHtcbiAgICByZXNjYWxlZEJhc2VXaWR0aHMgPSBiYXNlV2lkdGhzLm1hcCgodywgaSkgPT4gdyAqIGZhY3RvcnNbaV0pO1xuICB9XG5cbiAgbGV0IGN1cnJlbnRDb2RlID0gLTI7XG4gIGxldCBjdXJyZW50QXJyYXk7XG4gIGNvbnN0IG5ld1dpZHRocyA9IFtdO1xuXG4gIGZvciAoY29uc3QgW3VuaWNvZGUsIGdseXBoSW5kZXhdIG9mIGJhc2VNYXBwaW5nLm1hcCgoY2hhclVuaWNvZGUsIGluZGV4KSA9PiBbY2hhclVuaWNvZGUsIGluZGV4XSkuc29ydCgoW3VuaWNvZGUxXSwgW3VuaWNvZGUyXSkgPT4gdW5pY29kZTEgLSB1bmljb2RlMikpIHtcbiAgICBpZiAodW5pY29kZSA9PT0gLTEpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICh1bmljb2RlID09PSBjdXJyZW50Q29kZSArIDEpIHtcbiAgICAgIGN1cnJlbnRBcnJheS5wdXNoKHJlc2NhbGVkQmFzZVdpZHRoc1tnbHlwaEluZGV4XSk7XG4gICAgICBjdXJyZW50Q29kZSArPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50Q29kZSA9IHVuaWNvZGU7XG4gICAgICBjdXJyZW50QXJyYXkgPSBbcmVzY2FsZWRCYXNlV2lkdGhzW2dseXBoSW5kZXhdXTtcbiAgICAgIG5ld1dpZHRocy5wdXNoKHVuaWNvZGUsIGN1cnJlbnRBcnJheSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld1dpZHRocztcbn1cblxuZnVuY3Rpb24gZ2V0WGZhRm9udERpY3QobmFtZSkge1xuICBjb25zdCB3aWR0aHMgPSBnZXRYZmFGb250V2lkdGhzKG5hbWUpO1xuICBjb25zdCBkaWN0ID0gbmV3IF9wcmltaXRpdmVzLkRpY3QobnVsbCk7XG4gIGRpY3Quc2V0KFwiQmFzZUZvbnRcIiwgX3ByaW1pdGl2ZXMuTmFtZS5nZXQobmFtZSkpO1xuICBkaWN0LnNldChcIlR5cGVcIiwgX3ByaW1pdGl2ZXMuTmFtZS5nZXQoXCJGb250XCIpKTtcbiAgZGljdC5zZXQoXCJTdWJ0eXBlXCIsIF9wcmltaXRpdmVzLk5hbWUuZ2V0KFwiQ0lERm9udFR5cGUyXCIpKTtcbiAgZGljdC5zZXQoXCJFbmNvZGluZ1wiLCBfcHJpbWl0aXZlcy5OYW1lLmdldChcIklkZW50aXR5LUhcIikpO1xuICBkaWN0LnNldChcIkNJRFRvR0lETWFwXCIsIF9wcmltaXRpdmVzLk5hbWUuZ2V0KFwiSWRlbnRpdHlcIikpO1xuICBkaWN0LnNldChcIldcIiwgd2lkdGhzKTtcbiAgZGljdC5zZXQoXCJGaXJzdENoYXJcIiwgd2lkdGhzWzBdKTtcbiAgZGljdC5zZXQoXCJMYXN0Q2hhclwiLCB3aWR0aHNbd2lkdGhzLmxlbmd0aCAtIDJdICsgd2lkdGhzW3dpZHRocy5sZW5ndGggLSAxXS5sZW5ndGggLSAxKTtcbiAgY29uc3QgZGVzY3JpcHRvciA9IG5ldyBfcHJpbWl0aXZlcy5EaWN0KG51bGwpO1xuICBkaWN0LnNldChcIkZvbnREZXNjcmlwdG9yXCIsIGRlc2NyaXB0b3IpO1xuICBjb25zdCBzeXN0ZW1JbmZvID0gbmV3IF9wcmltaXRpdmVzLkRpY3QobnVsbCk7XG4gIHN5c3RlbUluZm8uc2V0KFwiT3JkZXJpbmdcIiwgXCJJZGVudGl0eVwiKTtcbiAgc3lzdGVtSW5mby5zZXQoXCJSZWdpc3RyeVwiLCBcIkFkb2JlXCIpO1xuICBzeXN0ZW1JbmZvLnNldChcIlN1cHBsZW1lbnRcIiwgMCk7XG4gIGRpY3Quc2V0KFwiQ0lEU3lzdGVtSW5mb1wiLCBzeXN0ZW1JbmZvKTtcbiAgcmV0dXJuIGRpY3Q7XG59XG5cbi8qKiovIH0pLFxuLyogMTMgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMpID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuQ2FsaWJyaVJlZ3VsYXJNZXRyaWNzID0gZXhwb3J0cy5DYWxpYnJpUmVndWxhckZhY3RvcnMgPSBleHBvcnRzLkNhbGlicmlJdGFsaWNNZXRyaWNzID0gZXhwb3J0cy5DYWxpYnJpSXRhbGljRmFjdG9ycyA9IGV4cG9ydHMuQ2FsaWJyaUJvbGRNZXRyaWNzID0gZXhwb3J0cy5DYWxpYnJpQm9sZEl0YWxpY01ldHJpY3MgPSBleHBvcnRzLkNhbGlicmlCb2xkSXRhbGljRmFjdG9ycyA9IGV4cG9ydHMuQ2FsaWJyaUJvbGRGYWN0b3JzID0gdm9pZCAwO1xuY29uc3QgQ2FsaWJyaUJvbGRGYWN0b3JzID0gWzEuMzg3NywgMSwgMSwgMSwgMC45NzgwMSwgMC45MjQ4MiwgMC44OTU1MiwgMC45MTEzMywgMC44MTk4OCwgMC45NzU2NiwgMC45ODE1MiwgMC45MzU0OCwgMC45MzU0OCwgMS4yNzk4LCAwLjg1Mjg0LCAwLjkyNzk0LCAxLCAwLjk2MTM0LCAxLjU0NjU3LCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjgyODQ1LCAwLjgyODQ1LCAwLjg1Mjg0LCAwLjg1Mjg0LCAwLjg1Mjg0LCAwLjc1ODU5LCAwLjkyMTM4LCAwLjgzOTA4LCAwLjc3NjIsIDAuNzMyOTMsIDAuODcyODksIDAuNzMxMzMsIDAuNzUxNCwgMC44MTkyMSwgMC44NzM1NiwgMC45NTk1OCwgMC41OTUyNiwgMC43NTcyNywgMC42OTIyNSwgMS4wNDkyNCwgMC45MTIxLCAwLjg2OTQzLCAwLjc5Nzk1LCAwLjg4MTk4LCAwLjc3OTU4LCAwLjcwODY0LCAwLjgxMDU1LCAwLjkwMzk5LCAwLjg4NjUzLCAwLjk2MDE3LCAwLjgyNTc3LCAwLjc3ODkyLCAwLjc4MjU3LCAwLjk3NTA3LCAxLjU0NjU3LCAwLjk3NTA3LCAwLjg1Mjg0LCAwLjg5NTUyLCAwLjkwMTc2LCAwLjg4NzYyLCAwLjg3ODUsIDAuNzUyNDEsIDAuODc4NSwgMC45MDUxOCwgMC45NTAxNSwgMC43NzYxOCwgMC44Nzg1LCAwLjg4NDAxLCAwLjkxOTE2LCAwLjg2MzA0LCAwLjg4NDAxLCAwLjkxNDg4LCAwLjg3ODUsIDAuODgwMSwgMC44Nzg1LCAwLjg3ODUsIDAuOTEzNDMsIDAuNzE3MywgMS4wNDEwNiwgMC44Nzg1LCAwLjg1MDc1LCAwLjk1Nzk0LCAwLjgyNjE2LCAwLjg1MTYyLCAwLjc5NDkyLCAwLjg4MzMxLCAxLjY5ODA4LCAwLjg4MzMxLCAwLjg1Mjg0LCAwLjk3ODAxLCAwLjg5NTUyLCAwLjkxMTMzLCAwLjg5NTUyLCAwLjkxMTMzLCAxLjc4MDEsIDAuODk1NTIsIDEuMjQ0ODcsIDEuMTMyNTQsIDEuMTI0MDEsIDAuOTY4MzksIDAuODUyODQsIDAuNjg3ODcsIDAuNzA2NDUsIDAuODU1OTIsIDAuOTA3NDcsIDEuMDE0NjYsIDEuMDA4OCwgMC45MDMyMywgMSwgMS4wNzQ2MywgMSwgMC45MTA1NiwgMC43NTgwNiwgMS4xOTExOCwgMC45NjgzOSwgMC43ODg2NCwgMC44Mjg0NSwgMC44NDEzMywgMC43NTg1OSwgMC44MzkwOCwgMC44MzkwOCwgMC44MzkwOCwgMC44MzkwOCwgMC44MzkwOCwgMC44MzkwOCwgMC43NzUzOSwgMC43MzI5MywgMC43MzEzMywgMC43MzEzMywgMC43MzEzMywgMC43MzEzMywgMC45NTk1OCwgMC45NTk1OCwgMC45NTk1OCwgMC45NTk1OCwgMC44ODUwNiwgMC45MTIxLCAwLjg2OTQzLCAwLjg2OTQzLCAwLjg2OTQzLCAwLjg2OTQzLCAwLjg2OTQzLCAwLjg1Mjg0LCAwLjg3NTA4LCAwLjkwMzk5LCAwLjkwMzk5LCAwLjkwMzk5LCAwLjkwMzk5LCAwLjc3ODkyLCAwLjc5Nzk1LCAwLjkwODA3LCAwLjg4NzYyLCAwLjg4NzYyLCAwLjg4NzYyLCAwLjg4NzYyLCAwLjg4NzYyLCAwLjg4NzYyLCAwLjg3MTUsIDAuNzUyNDEsIDAuOTA1MTgsIDAuOTA1MTgsIDAuOTA1MTgsIDAuOTA1MTgsIDAuODg0MDEsIDAuODg0MDEsIDAuODg0MDEsIDAuODg0MDEsIDAuODc4NSwgMC44Nzg1LCAwLjg4MDEsIDAuODgwMSwgMC44ODAxLCAwLjg4MDEsIDAuODgwMSwgMC45MDc0NywgMC44OTA0OSwgMC44Nzg1LCAwLjg3ODUsIDAuODc4NSwgMC44Nzg1LCAwLjg1MTYyLCAwLjg3ODUsIDAuODUxNjIsIDAuODM5MDgsIDAuODg3NjIsIDAuODM5MDgsIDAuODg3NjIsIDAuODM5MDgsIDAuODg3NjIsIDAuNzMyOTMsIDAuNzUyNDEsIDAuNzMyOTMsIDAuNzUyNDEsIDAuNzMyOTMsIDAuNzUyNDEsIDAuNzMyOTMsIDAuNzUyNDEsIDAuODcyODksIDAuODMwMTYsIDAuODg1MDYsIDAuOTMxMjUsIDAuNzMxMzMsIDAuOTA1MTgsIDAuNzMxMzMsIDAuOTA1MTgsIDAuNzMxMzMsIDAuOTA1MTgsIDAuNzMxMzMsIDAuOTA1MTgsIDAuNzMxMzMsIDAuOTA1MTgsIDAuODE5MjEsIDAuNzc2MTgsIDAuODE5MjEsIDAuNzc2MTgsIDAuODE5MjEsIDAuNzc2MTgsIDEsIDEsIDAuODczNTYsIDAuODc4NSwgMC45MTA3NSwgMC44OTYwOCwgMC45NTk1OCwgMC44ODQwMSwgMC45NTk1OCwgMC44ODQwMSwgMC45NTk1OCwgMC44ODQwMSwgMC45NTk1OCwgMC44ODQwMSwgMC45NTk1OCwgMC44ODQwMSwgMC43NjIyOSwgMC45MDE2NywgMC41OTUyNiwgMC45MTkxNiwgMSwgMSwgMC44NjMwNCwgMC42OTIyNSwgMC44ODQwMSwgMSwgMSwgMC43MDQyNCwgMC43OTQ2OCwgMC45MTkyNiwgMC44ODE3NSwgMC43MDgyMywgMC45NDkwMywgMC45MTIxLCAwLjg3ODUsIDEsIDEsIDAuOTEyMSwgMC44Nzg1LCAwLjg3ODAyLCAwLjg4NjU2LCAwLjg3ODUsIDAuODY5NDMsIDAuODgwMSwgMC44Njk0MywgMC44ODAxLCAwLjg2OTQzLCAwLjg4MDEsIDAuODc0MDIsIDAuODkyOTEsIDAuNzc5NTgsIDAuOTEzNDMsIDEsIDEsIDAuNzc5NTgsIDAuOTEzNDMsIDAuNzA4NjQsIDAuNzE3MywgMC43MDg2NCwgMC43MTczLCAwLjcwODY0LCAwLjcxNzMsIDAuNzA4NjQsIDAuNzE3MywgMSwgMSwgMC44MTA1NSwgMC43NTg0MSwgMC44MTA1NSwgMS4wNjQ1MiwgMC45MDM5OSwgMC44Nzg1LCAwLjkwMzk5LCAwLjg3ODUsIDAuOTAzOTksIDAuODc4NSwgMC45MDM5OSwgMC44Nzg1LCAwLjkwMzk5LCAwLjg3ODUsIDAuOTAzOTksIDAuODc4NSwgMC45NjAxNywgMC45NTc5NCwgMC43Nzg5MiwgMC44NTE2MiwgMC43Nzg5MiwgMC43ODI1NywgMC43OTQ5MiwgMC43ODI1NywgMC43OTQ5MiwgMC43ODI1NywgMC43OTQ5MiwgMC45Mjk3LCAwLjU2ODkyLCAwLjgzOTA4LCAwLjg4NzYyLCAwLjc3NTM5LCAwLjg3MTUsIDAuODc1MDgsIDAuODkwNDksIDEsIDEsIDAuODEwNTUsIDEuMDQxMDYsIDEuMjA1MjgsIDEuMjA1MjgsIDEsIDEuMTU1NDMsIDAuNzA2NzQsIDAuOTgzODcsIDAuOTQ3MjEsIDEuMzM0MzEsIDEuNDU4OTQsIDAuOTUxNjEsIDEuMDYzMDMsIDAuODM5MDgsIDAuODAzNTIsIDAuNTcxODQsIDAuNjk2NSwgMC41NjI4OSwgMC44MjAwMSwgMC41NjAyOSwgMC44MTIzNSwgMS4wMjk4OCwgMC44MzkwOCwgMC43NzYyLCAwLjY4MTU2LCAwLjgwMzY3LCAwLjczMTMzLCAwLjc4MjU3LCAwLjg3MzU2LCAwLjg2OTQzLCAwLjk1OTU4LCAwLjc1NzI3LCAwLjg5MDE5LCAxLjA0OTI0LCAwLjkxMjEsIDAuNzY0OCwgMC44Njk0MywgMC44NzM1NiwgMC43OTc5NSwgMC43ODI3NSwgMC44MTA1NSwgMC43Nzg5MiwgMC45NzYyLCAwLjgyNTc3LCAwLjk5ODE5LCAwLjg0ODk2LCAwLjk1OTU4LCAwLjc3ODkyLCAwLjk2MTA4LCAxLjAxNDA3LCAwLjg5MDQ5LCAxLjAyOTg4LCAwLjk0MjExLCAwLjk2MTA4LCAwLjg5MzYsIDAuODQwMjEsIDAuODc4NDIsIDAuOTYzOTksIDAuNzkxMDksIDAuODkwNDksIDEuMDA4MTMsIDEuMDI5ODgsIDAuODYwNzcsIDAuODc0NDUsIDAuOTIwOTksIDAuODQ3MjMsIDAuODY1MTMsIDAuODgwMSwgMC43NTYzOCwgMC44NTcxNCwgMC43ODIxNiwgMC43OTU4NiwgMC44Nzk2NSwgMC45NDIxMSwgMC45Nzc0NywgMC43ODI4NywgMC45NzkyNiwgMC44NDk3MSwgMS4wMjk4OCwgMC45NDIxMSwgMC44ODAxLCAwLjk0MjExLCAwLjg0OTcxLCAwLjczMTMzLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjkwMjY0LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjkwNTE4LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjkwNTQ4LCAxLCAxLCAxLCAxLCAxLCAxLCAwLjk2MDE3LCAwLjk1Nzk0LCAwLjk2MDE3LCAwLjk1Nzk0LCAwLjk2MDE3LCAwLjk1Nzk0LCAwLjc3ODkyLCAwLjg1MTYyLCAxLCAxLCAwLjg5NTUyLCAwLjkwNTI3LCAxLCAwLjkwMzYzLCAwLjkyNzk0LCAwLjkyNzk0LCAwLjkyNzk0LCAwLjkyNzk0LCAwLjg3MDEyLCAwLjg3MDEyLCAwLjg3MDEyLCAwLjg5NTUyLCAwLjg5NTUyLCAxLjQyMjU5LCAwLjcxMTQzLCAxLjA2MTUyLCAxLCAxLCAxLjAzMzcyLCAxLjAzMzcyLCAwLjk3MTcxLCAxLjQ5NTYsIDIuMjgwNywgMC45MzgzNSwgMC44MzQwNiwgMC45MTEzMywgMC44NDEwNywgMC45MTEzMywgMSwgMSwgMSwgMC43MjAyMSwgMSwgMS4yMzEwOCwgMC44MzQ4OSwgMC44ODUyNSwgMC44ODUyNSwgMC44MTQ5OSwgMC45MDUyNywgMS44MTA1NSwgMC45MDUyNywgMS44MTA1NSwgMS4zMTAwNiwgMS41MzcxMSwgMC45NDQzNCwgMS4wODY5NiwgMSwgMC45NTAxOCwgMC43NzE5MiwgMC44NTI4NCwgMC45MDc0NywgMS4xNzUzNCwgMC42OTgyNSwgMC45NzE2LCAxLjM3MDc3LCAwLjkwNzQ3LCAwLjkwNzQ3LCAwLjg1MzU2LCAwLjkwNzQ3LCAwLjkwNzQ3LCAxLjQ0OTQ3LCAwLjg1Mjg0LCAwLjg5NDEsIDAuODk0MSwgMC43MDU3MiwgMC44LCAwLjcwNTcyLCAwLjcwNTcyLCAwLjcwNTcyLCAwLjcwNTcyLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjk5ODYyLCAwLjk5ODYyLCAxLCAxLCAxLCAxLCAxLCAxLjA4MDA0LCAwLjkxMDI3LCAxLCAxLCAxLCAwLjk5ODYyLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjkwNzI3LCAwLjkwNzI3LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxXTtcbmV4cG9ydHMuQ2FsaWJyaUJvbGRGYWN0b3JzID0gQ2FsaWJyaUJvbGRGYWN0b3JzO1xuY29uc3QgQ2FsaWJyaUJvbGRNZXRyaWNzID0ge1xuICBsaW5lSGVpZ2h0OiAxLjIyMDcsXG4gIGxpbmVHYXA6IDAuMjIwN1xufTtcbmV4cG9ydHMuQ2FsaWJyaUJvbGRNZXRyaWNzID0gQ2FsaWJyaUJvbGRNZXRyaWNzO1xuY29uc3QgQ2FsaWJyaUJvbGRJdGFsaWNGYWN0b3JzID0gWzEuMzg3NywgMSwgMSwgMSwgMC45NzgwMSwgMC45MjQ4MiwgMC44OTU1MiwgMC45MTEzMywgMC44MTk4OCwgMC45NzU2NiwgMC45ODE1MiwgMC45MzU0OCwgMC45MzU0OCwgMS4yNzk4LCAwLjg1Mjg0LCAwLjkyNzk0LCAxLCAwLjk2MTM0LCAxLjU2MjM5LCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjkxMTMzLCAwLjgyODQ1LCAwLjgyODQ1LCAwLjg1Mjg0LCAwLjg1Mjg0LCAwLjg1Mjg0LCAwLjc1ODU5LCAwLjkyMTM4LCAwLjgzOTA4LCAwLjc3NjIsIDAuNzE4MDUsIDAuODcyODksIDAuNzMxMzMsIDAuNzUxNCwgMC44MTkyMSwgMC44NzM1NiwgMC45NTk1OCwgMC41OTUyNiwgMC43NTcyNywgMC42OTIyNSwgMS4wNDkyNCwgMC45MDg3MiwgMC44NTkzOCwgMC43OTc5NSwgMC44NzA2OCwgMC43Nzk1OCwgMC42OTc2NiwgMC44MTA1NSwgMC45MDM5OSwgMC44ODY1MywgMC45NjA2OCwgMC44MjU3NywgMC43Nzg5MiwgMC43ODI1NywgMC45NzUwNywgMS41MjksIDAuOTc1MDcsIDAuODUyODQsIDAuODk1NTIsIDAuOTAxNzYsIDAuOTQ5MDgsIDAuODY0MTEsIDAuNzQwMTIsIDAuODY0MTEsIDAuODgzMjMsIDAuOTUwMTUsIDAuODY0MTEsIDAuODYzMzEsIDAuODg0MDEsIDAuOTE5MTYsIDAuODYzMDQsIDAuODg0MDEsIDAuOTAzOSwgMC44NjMzMSwgMC44NjMzMSwgMC44NjQxMSwgMC44NjQxMSwgMC45MDQ2NCwgMC43MDg1MiwgMS4wNDEwNiwgMC44NjMzMSwgMC44NDM3MiwgMC45NTc5NCwgMC44MjYxNiwgMC44NDU0OCwgMC43OTQ5MiwgMC44ODMzMSwgMS42OTgwOCwgMC44ODMzMSwgMC44NTI4NCwgMC45NzgwMSwgMC44OTU1MiwgMC45MTEzMywgMC44OTU1MiwgMC45MTEzMywgMS43ODAxLCAwLjg5NTUyLCAxLjI0NDg3LCAxLjEzMjU0LCAxLjE5MTI5LCAwLjk2ODM5LCAwLjg1Mjg0LCAwLjY4Nzg3LCAwLjcwNjQ1LCAwLjg1NTkyLCAwLjkwNzQ3LCAxLjAxNDY2LCAxLjAwODgsIDAuOTAzMjMsIDEsIDEuMDc0NjMsIDEsIDAuOTEwNTYsIDAuNzU4MDYsIDEuMTkxMTgsIDAuOTY4MzksIDAuNzg4NjQsIDAuODI4NDUsIDAuODQxMzMsIDAuNzU4NTksIDAuODM5MDgsIDAuODM5MDgsIDAuODM5MDgsIDAuODM5MDgsIDAuODM5MDgsIDAuODM5MDgsIDAuNzc1MzksIDAuNzE4MDUsIDAuNzMxMzMsIDAuNzMxMzMsIDAuNzMxMzMsIDAuNzMxMzMsIDAuOTU5NTgsIDAuOTU5NTgsIDAuOTU5NTgsIDAuOTU5NTgsIDAuODg1MDYsIDAuOTA4NzIsIDAuODU5MzgsIDAuODU5MzgsIDAuODU5MzgsIDAuODU5MzgsIDAuODU5MzgsIDAuODUyODQsIDAuODcwNjgsIDAuOTAzOTksIDAuOTAzOTksIDAuOTAzOTksIDAuOTAzOTksIDAuNzc4OTIsIDAuNzk3OTUsIDAuOTA4MDcsIDAuOTQ5MDgsIDAuOTQ5MDgsIDAuOTQ5MDgsIDAuOTQ5MDgsIDAuOTQ5MDgsIDAuOTQ5MDgsIDAuODU4ODcsIDAuNzQwMTIsIDAuODgzMjMsIDAuODgzMjMsIDAuODgzMjMsIDAuODgzMjMsIDAuODg0MDEsIDAuODg0MDEsIDAuODg0MDEsIDAuODg0MDEsIDAuODc4NSwgMC44NjMzMSwgMC44NjMzMSwgMC44NjMzMSwgMC44NjMzMSwgMC44NjMzMSwgMC44NjMzMSwgMC45MDc0NywgMC44OTA0OSwgMC44NjMzMSwgMC44NjMzMSwgMC44NjMzMSwgMC44NjMzMSwgMC44NDU0OCwgMC44NjQxMSwgMC44NDU0OCwgMC44MzkwOCwgMC45NDkwOCwgMC44MzkwOCwgMC45NDkwOCwgMC44MzkwOCwgMC45NDkwOCwgMC43MTgwNSwgMC43NDAxMiwgMC43MTgwNSwgMC43NDAxMiwgMC43MTgwNSwgMC43NDAxMiwgMC43MTgwNSwgMC43NDAxMiwgMC44NzI4OSwgMC43OTUzOCwgMC44ODUwNiwgMC45MjcyNiwgMC43MzEzMywgMC44ODMyMywgMC43MzEzMywgMC44ODMyMywgMC43MzEzMywgMC44ODMyMywgMC43MzEzMywgMC44ODMyMywgMC43MzEzMywgMC44ODMyMywgMC44MTkyMSwgMC44NjQxMSwgMC44MTkyMSwgMC44NjQxMSwgMC44MTkyMSwgMC44NjQxMSwgMSwgMSwgMC44NzM1NiwgMC44NjMzMSwgMC45MTA3NSwgMC44Nzc3LCAwLjk1OTU4LCAwLjg4NDAxLCAwLjk1OTU4LCAwLjg4NDAxLCAwLjk1OTU4LCAwLjg4NDAxLCAwLjk1OTU4LCAwLjg4NDAxLCAwLjk1OTU4LCAwLjg4NDAxLCAwLjc2NDY3LCAwLjkwMTY3LCAwLjU5NTI2LCAwLjkxOTE2LCAxLCAxLCAwLjg2MzA0LCAwLjY5MjI1LCAwLjg4NDAxLCAxLCAxLCAwLjcwNDI0LCAwLjc3MzEyLCAwLjkxOTI2LCAwLjg4MTc1LCAwLjcwODIzLCAwLjk0OTAzLCAwLjkwODcyLCAwLjg2MzMxLCAxLCAxLCAwLjkwODcyLCAwLjg2MzMxLCAwLjg2OTA2LCAwLjg4MTE2LCAwLjg2MzMxLCAwLjg1OTM4LCAwLjg2MzMxLCAwLjg1OTM4LCAwLjg2MzMxLCAwLjg1OTM4LCAwLjg2MzMxLCAwLjg3NDAyLCAwLjg2NTQ5LCAwLjc3OTU4LCAwLjkwNDY0LCAxLCAxLCAwLjc3OTU4LCAwLjkwNDY0LCAwLjY5NzY2LCAwLjcwODUyLCAwLjY5NzY2LCAwLjcwODUyLCAwLjY5NzY2LCAwLjcwODUyLCAwLjY5NzY2LCAwLjcwODUyLCAxLCAxLCAwLjgxMDU1LCAwLjc1ODQxLCAwLjgxMDU1LCAxLjA2NDUyLCAwLjkwMzk5LCAwLjg2MzMxLCAwLjkwMzk5LCAwLjg2MzMxLCAwLjkwMzk5LCAwLjg2MzMxLCAwLjkwMzk5LCAwLjg2MzMxLCAwLjkwMzk5LCAwLjg2MzMxLCAwLjkwMzk5LCAwLjg2MzMxLCAwLjk2MDY4LCAwLjk1Nzk0LCAwLjc3ODkyLCAwLjg0NTQ4LCAwLjc3ODkyLCAwLjc4MjU3LCAwLjc5NDkyLCAwLjc4MjU3LCAwLjc5NDkyLCAwLjc4MjU3LCAwLjc5NDkyLCAwLjkyOTcsIDAuNTY4OTIsIDAuODM5MDgsIDAuOTQ5MDgsIDAuNzc1MzksIDAuODU4ODcsIDAuODcwNjgsIDAuODkwNDksIDEsIDEsIDAuODEwNTUsIDEuMDQxMDYsIDEuMjA1MjgsIDEuMjA1MjgsIDEsIDEuMTU1NDMsIDAuNzAwODgsIDAuOTgzODcsIDAuOTQ3MjEsIDEuMzM0MzEsIDEuNDU4OTQsIDAuOTUxNjEsIDEuNDgzODcsIDAuODM5MDgsIDAuODAzNTIsIDAuNTcxMTgsIDAuNjk2NSwgMC41NjM0NywgMC43OTE3OSwgMC41NTg1MywgMC44MDM0NiwgMS4wMjk4OCwgMC44MzkwOCwgMC43NzYyLCAwLjY3MTc0LCAwLjg2MDM2LCAwLjczMTMzLCAwLjc4MjU3LCAwLjg3MzU2LCAwLjg2NDQxLCAwLjk1OTU4LCAwLjc1NzI3LCAwLjg5MDE5LCAxLjA0OTI0LCAwLjkwODcyLCAwLjc0ODg5LCAwLjg1OTM4LCAwLjg3ODkxLCAwLjc5Nzk1LCAwLjc5NTcsIDAuODEwNTUsIDAuNzc4OTIsIDAuOTc0NDcsIDAuODI1NzcsIDAuOTc0NjYsIDAuODcxNzksIDAuOTU5NTgsIDAuNzc4OTIsIDAuOTQyNTIsIDAuOTU2MTIsIDAuODc1MywgMS4wMjk4OCwgMC45MjczMywgMC45NDI1MiwgMC44NzQxMSwgMC44NDAyMSwgMC44NzI4LCAwLjk1NjEyLCAwLjc0MDgxLCAwLjg3NTMsIDEuMDIxODksIDEuMDI5ODgsIDAuODQ4MTQsIDAuODc0NDUsIDAuOTE4MjIsIDAuODQ3MjMsIDAuODU2NjgsIDAuODYzMzEsIDAuODEzNDQsIDAuODc1ODEsIDAuNzY0MjIsIDAuODIwNDYsIDAuOTYwNTcsIDAuOTI3MzMsIDAuOTkzNzUsIDAuNzgwMjIsIDAuOTU0NTIsIDAuODYwMTUsIDEuMDI5ODgsIDAuOTI3MzMsIDAuODYzMzEsIDAuOTI3MzMsIDAuODYwMTUsIDAuNzMxMzMsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAuOTA2MzEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAuODgzMjMsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAuODUxNzQsIDEsIDEsIDEsIDEsIDEsIDEsIDAuOTYwNjgsIDAuOTU3OTQsIDAuOTYwNjgsIDAuOTU3OTQsIDAuOTYwNjgsIDAuOTU3OTQsIDAuNzc4OTIsIDAuODQ1NDgsIDEsIDEsIDAuODk1NTIsIDAuOTA1MjcsIDEsIDAuOTAzNjMsIDAuOTI3OTQsIDAuOTI3OTQsIDAuOTI3OTQsIDAuODk4MDcsIDAuODcwMTIsIDAuODcwMTIsIDAuODcwMTIsIDAuODk1NTIsIDAuODk1NTIsIDEuNDIyNTksIDAuNzEwOTQsIDEuMDYxNTIsIDEsIDEsIDEuMDMzNzIsIDEuMDMzNzIsIDAuOTcxNzEsIDEuNDk1NiwgMi4yODA3LCAwLjkyOTcyLCAwLjgzNDA2LCAwLjkxMTMzLCAwLjgzMzI2LCAwLjkxMTMzLCAxLCAxLCAxLCAwLjcyMDIxLCAxLCAxLjIzMTA4LCAwLjgzNDg5LCAwLjg4NTI1LCAwLjg4NTI1LCAwLjgxNDk5LCAwLjkwNjE2LCAxLjgxMDU1LCAwLjkwNTI3LCAxLjgxMDU1LCAxLjMxMDcsIDEuNTM3MTEsIDAuOTQ0MzQsIDEuMDg2OTYsIDEsIDAuOTUwMTgsIDAuNzcxOTIsIDAuODUyODQsIDAuOTA3NDcsIDEuMTc1MzQsIDAuNjk4MjUsIDAuOTcxNiwgMS4zNzA3NywgMC45MDc0NywgMC45MDc0NywgMC44NTM1NiwgMC45MDc0NywgMC45MDc0NywgMS40NDk0NywgMC44NTI4NCwgMC44OTQxLCAwLjg5NDEsIDAuNzA1NzIsIDAuOCwgMC43MDU3MiwgMC43MDU3MiwgMC43MDU3MiwgMC43MDU3MiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMC45OTg2MiwgMC45OTg2MiwgMSwgMSwgMSwgMSwgMSwgMS4wODAwNCwgMC45MTAyNywgMSwgMSwgMSwgMC45OTg2MiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMC45MDcyNywgMC45MDcyNywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMV07XG5leHBvcnRzLkNhbGlicmlCb2xkSXRhbGljRmFjdG9ycyA9IENhbGlicmlCb2xkSXRhbGljRmFjdG9ycztcbmNvbnN0IENhbGlicmlCb2xkSXRhbGljTWV0cmljcyA9IHtcbiAgbGluZUhlaWdodDogMS4yMjA3LFxuICBsaW5lR2FwOiAwLjIyMDdcbn07XG5leHBvcnRzLkNhbGlicmlCb2xkSXRhbGljTWV0cmljcyA9IENhbGlicmlCb2xkSXRhbGljTWV0cmljcztcbmNvbnN0IENhbGlicmlJdGFsaWNGYWN0b3JzID0gWzEuMzg3NywgMSwgMSwgMSwgMS4xNzIyMywgMS4xMjkzLCAwLjg5NTUyLCAwLjkxMTMzLCAwLjgwMzk1LCAxLjAyMjY5LCAxLjE1NjAxLCAwLjkxMDU2LCAwLjkxMDU2LCAxLjI3OTgsIDAuODUyODQsIDAuODk4MDcsIDEsIDAuOTA4NjEsIDEuMzk1NDMsIDAuOTExMzMsIDAuOTExMzMsIDAuOTExMzMsIDAuOTExMzMsIDAuOTExMzMsIDAuOTExMzMsIDAuOTExMzMsIDAuOTExMzMsIDAuOTExMzMsIDAuOTExMzMsIDAuOTYzMDksIDAuOTYzMDksIDAuODUyODQsIDAuODUyODQsIDAuODUyODQsIDAuODMzMTksIDAuODgwNzEsIDAuODY3NSwgMC44MTU1MiwgMC43MjM0NiwgMC44NTE5MywgMC43MzIwNiwgMC43NTIyLCAwLjgxMTA1LCAwLjg2Mjc1LCAwLjkwNjg1LCAwLjYzNzcsIDAuNzc4OTIsIDAuNzU1OTMsIDEuMDI2MzgsIDAuODkyNDksIDAuODQxMTgsIDAuNzc0NTIsIDAuODUzNzQsIDAuNzUxODYsIDAuNjc3ODksIDAuNzk3NzYsIDAuODg4NDQsIDAuODUwNjYsIDAuOTQzMDksIDAuNzc4MTgsIDAuNzMwNiwgMC43NjY1OSwgMS4xMDM2OSwgMS4zODMxMywgMS4xMDM2OSwgMS4wNjEzOSwgMC44OTU1MiwgMC44NzM5LCAwLjkyNDUsIDAuOTI0NSwgMC44MzIwMywgMC45MjQ1LCAwLjg1ODY1LCAxLjA5ODQyLCAwLjkyNDUsIDAuOTI0NSwgMS4wMzI5NywgMS4wNzY5MiwgMC45MDkxOCwgMS4wMzI5NywgMC45NDk1OSwgMC45MjQ1LCAwLjkyMjc0LCAwLjkyNDUsIDAuOTI0NSwgMS4wMjkzMywgMC43NzgzMiwgMS4yMDU2MiwgMC45MjQ1LCAwLjg5MTYsIDAuOTg5ODYsIDAuODY2MjEsIDAuODk0NTMsIDAuNzkwMDQsIDAuOTQxNTIsIDEuNzcyNTYsIDAuOTQxNTIsIDAuODUyODQsIDAuOTc4MDEsIDAuODk1NTIsIDAuOTExMzMsIDAuODk1NTIsIDAuOTExMzMsIDEuOTE3MjksIDAuODk1NTIsIDEuMTc4ODksIDEuMTMyNTQsIDEuMTYzNTksIDAuOTIwOTgsIDAuODUyODQsIDAuNjg3ODcsIDAuNzEzNTMsIDAuODQ3MzcsIDAuOTA3NDcsIDEuMDA4OCwgMS4wMDQ0LCAwLjg3NjgzLCAxLCAxLjA5MDkxLCAxLCAwLjkyMjI5LCAwLjczOSwgMS4xNTY0MiwgMC45MjA5OCwgMC43NjI4OCwgMC44MDUwNCwgMC44MDk3MiwgMC43NTg1OSwgMC44Njc1LCAwLjg2NzUsIDAuODY3NSwgMC44Njc1LCAwLjg2NzUsIDAuODY3NSwgMC43NjMxOCwgMC43MjM0NiwgMC43MzIwNiwgMC43MzIwNiwgMC43MzIwNiwgMC43MzIwNiwgMC45MDY4NSwgMC45MDY4NSwgMC45MDY4NSwgMC45MDY4NSwgMC44NjQ3NywgMC44OTI0OSwgMC44NDExOCwgMC44NDExOCwgMC44NDExOCwgMC44NDExOCwgMC44NDExOCwgMC44NTI4NCwgMC44NDU1NywgMC44ODg0NCwgMC44ODg0NCwgMC44ODg0NCwgMC44ODg0NCwgMC43MzA2LCAwLjc3NDUyLCAwLjg2MzMxLCAwLjkyNDUsIDAuOTI0NSwgMC45MjQ1LCAwLjkyNDUsIDAuOTI0NSwgMC45MjQ1LCAwLjg0ODQzLCAwLjgzMjAzLCAwLjg1ODY1LCAwLjg1ODY1LCAwLjg1ODY1LCAwLjg1ODY1LCAwLjgyNjAxLCAwLjgyNjAxLCAwLjgyNjAxLCAwLjgyNjAxLCAwLjk0NDY5LCAwLjkyNDUsIDAuOTIyNzQsIDAuOTIyNzQsIDAuOTIyNzQsIDAuOTIyNzQsIDAuOTIyNzQsIDAuOTA3NDcsIDAuODY2NTEsIDAuOTI0NSwgMC45MjQ1LCAwLjkyNDUsIDAuOTI0NSwgMC44OTQ1MywgMC45MjQ1LCAwLjg5NDUzLCAwLjg2NzUsIDAuOTI0NSwgMC44Njc1LCAwLjkyNDUsIDAuODY3NSwgMC45MjQ1LCAwLjcyMzQ2LCAwLjgzMjAzLCAwLjcyMzQ2LCAwLjgzMjAzLCAwLjcyMzQ2LCAwLjgzMjAzLCAwLjcyMzQ2LCAwLjgzMjAzLCAwLjg1MTkzLCAwLjg4NzUsIDAuODY0NzcsIDAuOTkwMzQsIDAuNzMyMDYsIDAuODU4NjUsIDAuNzMyMDYsIDAuODU4NjUsIDAuNzMyMDYsIDAuODU4NjUsIDAuNzMyMDYsIDAuODU4NjUsIDAuNzMyMDYsIDAuODU4NjUsIDAuODExMDUsIDAuOTI0NSwgMC44MTEwNSwgMC45MjQ1LCAwLjgxMTA1LCAwLjkyNDUsIDEsIDEsIDAuODYyNzUsIDAuOTI0NSwgMC45MDg3MiwgMC45MzU5MSwgMC45MDY4NSwgMC44MjYwMSwgMC45MDY4NSwgMC44MjYwMSwgMC45MDY4NSwgMC44MjYwMSwgMC45MDY4NSwgMS4wMzI5NywgMC45MDY4NSwgMC44MjYwMSwgMC43Nzg5NiwgMS4wNTYxMSwgMC42Mzc3LCAxLjA3NjkyLCAxLCAxLCAwLjkwOTE4LCAwLjc1NTkzLCAxLjAzMjk3LCAxLCAxLCAwLjc2MDMyLCAwLjkzNzUsIDAuOTgxNTYsIDAuOTM0MDcsIDAuNzcyNjEsIDEuMTE0MjksIDAuODkyNDksIDAuOTI0NSwgMSwgMSwgMC44OTI0OSwgMC45MjQ1LCAwLjkyNTM0LCAwLjg2Njk4LCAwLjkyNDUsIDAuODQxMTgsIDAuOTIyNzQsIDAuODQxMTgsIDAuOTIyNzQsIDAuODQxMTgsIDAuOTIyNzQsIDAuODY2NywgMC44NjI5MSwgMC43NTE4NiwgMS4wMjkzMywgMSwgMSwgMC43NTE4NiwgMS4wMjkzMywgMC42Nzc4OSwgMC43NzgzMiwgMC42Nzc4OSwgMC43NzgzMiwgMC42Nzc4OSwgMC43NzgzMiwgMC42Nzc4OSwgMC43NzgzMiwgMSwgMSwgMC43OTc3NiwgMC45NzY1NSwgMC43OTc3NiwgMS4yMzAyMywgMC44ODg0NCwgMC45MjQ1LCAwLjg4ODQ0LCAwLjkyNDUsIDAuODg4NDQsIDAuOTI0NSwgMC44ODg0NCwgMC45MjQ1LCAwLjg4ODQ0LCAwLjkyNDUsIDAuODg4NDQsIDAuOTI0NSwgMC45NDMwOSwgMC45ODk4NiwgMC43MzA2LCAwLjg5NDUzLCAwLjczMDYsIDAuNzY2NTksIDAuNzkwMDQsIDAuNzY2NTksIDAuNzkwMDQsIDAuNzY2NTksIDAuNzkwMDQsIDEuMDkyMzEsIDAuNTQ4NzMsIDAuODY3NSwgMC45MjQ1LCAwLjc2MzE4LCAwLjg0ODQzLCAwLjg0NTU3LCAwLjg2NjUxLCAxLCAxLCAwLjc5Nzc2LCAxLjIwNTYyLCAxLjE4NjIyLCAxLjE4NjIyLCAxLCAxLjE0MzcsIDAuNjcwMDksIDAuOTYzMzQsIDAuOTM2OTUsIDEuMzUxOTEsIDEuNDA5MDksIDAuOTUxNjEsIDEuNDgzODcsIDAuODY3NSwgMC45MDg2MSwgMC42MTkyLCAwLjczNjMsIDAuNjQ4MjQsIDAuODI0MTEsIDAuNTYzMjEsIDAuODU2OTYsIDEuMjM1MTYsIDAuODY3NSwgMC44MTU1MiwgMC43Mjg2LCAwLjg0MTM0LCAwLjczMjA2LCAwLjc2NjU5LCAwLjg2Mjc1LCAwLjg0MzY5LCAwLjkwNjg1LCAwLjc3ODkyLCAwLjg1ODcxLCAxLjAyNjM4LCAwLjg5MjQ5LCAwLjc1ODI4LCAwLjg0MTE4LCAwLjg1OTg0LCAwLjc3NDUyLCAwLjc2NDY2LCAwLjc5Nzc2LCAwLjczMDYsIDAuOTA3ODIsIDAuNzc4MTgsIDAuOTAzLCAwLjg3MjkxLCAwLjkwNjg1LCAwLjczMDYsIDAuOTkwNTgsIDEuMDM2NjcsIDAuOTQ2MzUsIDEuMjM1MTYsIDAuOTg0OSwgMC45OTA1OCwgMC45MjM5MywgMC44OTE2LCAwLjk0MiwgMS4wMzY2NywgMC43NTAyNiwgMC45NDYzNSwgMS4wMjk3LCAxLjIzNTE2LCAwLjkwOTE4LCAwLjk0MDQ4LCAwLjk4MjE3LCAwLjg5NzQ2LCAwLjg0MTUzLCAwLjkyMjc0LCAwLjgyNTA3LCAwLjg4ODMyLCAwLjg0NDM4LCAwLjg4MTc4LCAxLjAzNTI1LCAwLjk4NDksIDEuMDAyMjUsIDAuNzgwODYsIDAuOTcyNDgsIDAuODk0MDQsIDEuMjM1MTYsIDAuOTg0OSwgMC45MjI3NCwgMC45ODQ5LCAwLjg5NDA0LCAwLjczMjA2LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjg5NjkzLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjg1ODY1LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjkwOTMzLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjk0MzA5LCAwLjk4OTg2LCAwLjk0MzA5LCAwLjk4OTg2LCAwLjk0MzA5LCAwLjk4OTg2LCAwLjczMDYsIDAuODk0NTMsIDEsIDEsIDAuODk1NTIsIDAuOTA1MjcsIDEsIDAuOTAxODYsIDEuMTIzMDgsIDEuMTIzMDgsIDEuMTIzMDgsIDEuMTIzMDgsIDEuMjU2NiwgMS4yNTY2LCAxLjI1NjYsIDAuODk1NTIsIDAuODk1NTIsIDEuNDIyNTksIDAuNjg5OTQsIDEuMDM4MDksIDEsIDEsIDEuMDE3NiwgMS4wMTc2LCAxLjExNTIzLCAxLjQ5NTYsIDIuMDE0NjIsIDAuOTc4NTgsIDAuODI2MTYsIDAuOTExMzMsIDAuODM0MzcsIDAuOTExMzMsIDEsIDEsIDEsIDAuNzA1MDgsIDEsIDEuMjMxMDgsIDAuNzk4MDEsIDAuODQ0MjYsIDAuODQ0MjYsIDAuNzc0LCAwLjkwNTcyLCAxLjgxMDU1LCAwLjkwNzQ5LCAxLjgxMDU1LCAxLjI4ODA5LCAxLjU1NDY5LCAwLjk0NDM0LCAxLjA3ODA2LCAxLCAwLjk3MDk0LCAwLjc1ODksIDAuODUyODQsIDAuOTA3NDcsIDEuMTk2NTgsIDAuNjk4MjUsIDAuOTc2MjIsIDEuMzM1MTIsIDAuOTA3NDcsIDAuOTA3NDcsIDAuODUyODQsIDAuOTA3NDcsIDAuOTA3NDcsIDEuNDQ5NDcsIDAuODUyODQsIDAuODk0MSwgMC44OTQxLCAwLjcwNTcyLCAwLjgsIDAuNzA1NzIsIDAuNzA1NzIsIDAuNzA1NzIsIDAuNzA1NzIsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAuOTk4NjIsIDAuOTk4NjIsIDEsIDEsIDEsIDEsIDEsIDEuMDMzNiwgMC45MTAyNywgMSwgMSwgMSwgMC45OTg2MiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMS4wNTg1OSwgMS4wNTg1OSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMV07XG5leHBvcnRzLkNhbGlicmlJdGFsaWNGYWN0b3JzID0gQ2FsaWJyaUl0YWxpY0ZhY3RvcnM7XG5jb25zdCBDYWxpYnJpSXRhbGljTWV0cmljcyA9IHtcbiAgbGluZUhlaWdodDogMS4yMjA3LFxuICBsaW5lR2FwOiAwLjIyMDdcbn07XG5leHBvcnRzLkNhbGlicmlJdGFsaWNNZXRyaWNzID0gQ2FsaWJyaUl0YWxpY01ldHJpY3M7XG5jb25zdCBDYWxpYnJpUmVndWxhckZhY3RvcnMgPSBbMS4zODc3LCAxLCAxLCAxLCAxLjE3MjIzLCAxLjEyOTMsIDAuODk1NTIsIDAuOTExMzMsIDAuODAzOTUsIDEuMDIyNjksIDEuMTU2MDEsIDAuOTEwNTYsIDAuOTEwNTYsIDEuMjc5OCwgMC44NTI4NCwgMC44OTgwNywgMSwgMC45MDg2MSwgMS4zOTAxNiwgMC45MTEzMywgMC45MTEzMywgMC45MTEzMywgMC45MTEzMywgMC45MTEzMywgMC45MTEzMywgMC45MTEzMywgMC45MTEzMywgMC45MTEzMywgMC45MTEzMywgMC45NjMwOSwgMC45NjMwOSwgMC44NTI4NCwgMC44NTI4NCwgMC44NTI4NCwgMC44MzMxOSwgMC44ODA3MSwgMC44Njc1LCAwLjgxNTUyLCAwLjczODM0LCAwLjg1MTkzLCAwLjczMjA2LCAwLjc1MjIsIDAuODExMDUsIDAuODYyNzUsIDAuOTA2ODUsIDAuNjM3NywgMC43Nzg5MiwgMC43NTU5MywgMS4wMjYzOCwgMC44OTM4NSwgMC44NTEyMiwgMC43NzQ1MiwgMC44NjUwMywgMC43NTE4NiwgMC42ODg4NywgMC43OTc3NiwgMC44ODg0NCwgMC44NTA2NiwgMC45NDI1OCwgMC43NzgxOCwgMC43MzA2LCAwLjc2NjU5LCAxLjEwMzY5LCAxLjM5MDE2LCAxLjEwMzY5LCAxLjA2MTM5LCAwLjg5NTUyLCAwLjg3MzksIDAuODYxMjgsIDAuOTQ0NjksIDAuODQ1NywgMC45NDQ2OSwgMC44OTQ2NCwgMS4wOTg0MiwgMC44NDYzNiwgMC45NDQ2OSwgMS4wMzI5NywgMS4wNzY5MiwgMC45MDkxOCwgMS4wMzI5NywgMC45NTg5NywgMC45NDQ2OSwgMC45NDgyLCAwLjk0NDY5LCAwLjk0NDY5LCAxLjA0NjkyLCAwLjc4MjIzLCAxLjIwNTYyLCAwLjk0NDY5LCAwLjkwMzMyLCAwLjk4OTg2LCAwLjg2NjIxLCAwLjkwNTI3LCAwLjc5MDA0LCAwLjk0MTUyLCAxLjc3MjU2LCAwLjk0MTUyLCAwLjg1Mjg0LCAwLjk3ODAxLCAwLjg5NTUyLCAwLjkxMTMzLCAwLjg5NTUyLCAwLjkxMTMzLCAxLjkxNzI5LCAwLjg5NTUyLCAxLjE3ODg5LCAxLjEzMjU0LCAxLjA4NzA3LCAwLjkyMDk4LCAwLjg1Mjg0LCAwLjY4Nzg3LCAwLjcxMzUzLCAwLjg0NzM3LCAwLjkwNzQ3LCAxLjAwODgsIDEuMDA0NCwgMC44NzY4MywgMSwgMS4wOTA5MSwgMSwgMC45MjIyOSwgMC43MzksIDEuMTU2NDIsIDAuOTIwOTgsIDAuNzYyODgsIDAuODA1MDQsIDAuODA5NzIsIDAuNzU4NTksIDAuODY3NSwgMC44Njc1LCAwLjg2NzUsIDAuODY3NSwgMC44Njc1LCAwLjg2NzUsIDAuNzYzMTgsIDAuNzM4MzQsIDAuNzMyMDYsIDAuNzMyMDYsIDAuNzMyMDYsIDAuNzMyMDYsIDAuOTA2ODUsIDAuOTA2ODUsIDAuOTA2ODUsIDAuOTA2ODUsIDAuODY0NzcsIDAuODkzODUsIDAuODUxMjIsIDAuODUxMjIsIDAuODUxMjIsIDAuODUxMjIsIDAuODUxMjIsIDAuODUyODQsIDAuODUzMTEsIDAuODg4NDQsIDAuODg4NDQsIDAuODg4NDQsIDAuODg4NDQsIDAuNzMwNiwgMC43NzQ1MiwgMC44NjMzMSwgMC44NjEyOCwgMC44NjEyOCwgMC44NjEyOCwgMC44NjEyOCwgMC44NjEyOCwgMC44NjEyOCwgMC44NjkzLCAwLjg0NTcsIDAuODk0NjQsIDAuODk0NjQsIDAuODk0NjQsIDAuODk0NjQsIDAuODI2MDEsIDAuODI2MDEsIDAuODI2MDEsIDAuODI2MDEsIDAuOTQ0NjksIDAuOTQ0NjksIDAuOTQ4MiwgMC45NDgyLCAwLjk0ODIsIDAuOTQ4MiwgMC45NDgyLCAwLjkwNzQ3LCAwLjg2NjUxLCAwLjk0NDY5LCAwLjk0NDY5LCAwLjk0NDY5LCAwLjk0NDY5LCAwLjkwNTI3LCAwLjk0NDY5LCAwLjkwNTI3LCAwLjg2NzUsIDAuODYxMjgsIDAuODY3NSwgMC44NjEyOCwgMC44Njc1LCAwLjg2MTI4LCAwLjczODM0LCAwLjg0NTcsIDAuNzM4MzQsIDAuODQ1NywgMC43MzgzNCwgMC44NDU3LCAwLjczODM0LCAwLjg0NTcsIDAuODUxOTMsIDAuOTI0NTQsIDAuODY0NzcsIDAuOTkyMSwgMC43MzIwNiwgMC44OTQ2NCwgMC43MzIwNiwgMC44OTQ2NCwgMC43MzIwNiwgMC44OTQ2NCwgMC43MzIwNiwgMC44OTQ2NCwgMC43MzIwNiwgMC44OTQ2NCwgMC44MTEwNSwgMC44NDYzNiwgMC44MTEwNSwgMC44NDYzNiwgMC44MTEwNSwgMC44NDYzNiwgMSwgMSwgMC44NjI3NSwgMC45NDQ2OSwgMC45MDg3MiwgMC45NTc4NiwgMC45MDY4NSwgMC44MjYwMSwgMC45MDY4NSwgMC44MjYwMSwgMC45MDY4NSwgMC44MjYwMSwgMC45MDY4NSwgMS4wMzI5NywgMC45MDY4NSwgMC44MjYwMSwgMC43Nzc0MSwgMS4wNTYxMSwgMC42Mzc3LCAxLjA3NjkyLCAxLCAxLCAwLjkwOTE4LCAwLjc1NTkzLCAxLjAzMjk3LCAxLCAxLCAwLjc2MDMyLCAwLjkwNDUyLCAwLjk4MTU2LCAxLjExODQyLCAwLjc3MjYxLCAxLjExNDI5LCAwLjg5Mzg1LCAwLjk0NDY5LCAxLCAxLCAwLjg5Mzg1LCAwLjk0NDY5LCAwLjk1ODc3LCAwLjg2OTAxLCAwLjk0NDY5LCAwLjg1MTIyLCAwLjk0ODIsIDAuODUxMjIsIDAuOTQ4MiwgMC44NTEyMiwgMC45NDgyLCAwLjg2NjcsIDAuOTAwMTYsIDAuNzUxODYsIDEuMDQ2OTIsIDEsIDEsIDAuNzUxODYsIDEuMDQ2OTIsIDAuNjg4ODcsIDAuNzgyMjMsIDAuNjg4ODcsIDAuNzgyMjMsIDAuNjg4ODcsIDAuNzgyMjMsIDAuNjg4ODcsIDAuNzgyMjMsIDEsIDEsIDAuNzk3NzYsIDAuOTIxODgsIDAuNzk3NzYsIDEuMjMwMjMsIDAuODg4NDQsIDAuOTQ0NjksIDAuODg4NDQsIDAuOTQ0NjksIDAuODg4NDQsIDAuOTQ0NjksIDAuODg4NDQsIDAuOTQ0NjksIDAuODg4NDQsIDAuOTQ0NjksIDAuODg4NDQsIDAuOTQ0NjksIDAuOTQyNTgsIDAuOTg5ODYsIDAuNzMwNiwgMC45MDUyNywgMC43MzA2LCAwLjc2NjU5LCAwLjc5MDA0LCAwLjc2NjU5LCAwLjc5MDA0LCAwLjc2NjU5LCAwLjc5MDA0LCAxLjA5MjMxLCAwLjU0ODczLCAwLjg2NzUsIDAuODYxMjgsIDAuNzYzMTgsIDAuODY5MywgMC44NTMxMSwgMC44NjY1MSwgMSwgMSwgMC43OTc3NiwgMS4yMDU2MiwgMS4xODYyMiwgMS4xODYyMiwgMSwgMS4xNDM3LCAwLjY3NzQyLCAwLjk2MzM0LCAwLjkzNjk1LCAxLjM1MTkxLCAxLjQwOTA5LCAwLjk1MTYxLCAxLjQ4Mzg3LCAwLjg2Njg2LCAwLjkwODYxLCAwLjYyMjY3LCAwLjc0MzU5LCAwLjY1NjQ5LCAwLjg1NDk4LCAwLjU2OTYzLCAwLjg4MjU0LCAxLjIzNTE2LCAwLjg2NzUsIDAuODE1NTIsIDAuNzU0NDMsIDAuODQ1MDMsIDAuNzMyMDYsIDAuNzY2NTksIDAuODYyNzUsIDAuODUxMjIsIDAuOTA2ODUsIDAuNzc4OTIsIDAuODU3NDYsIDEuMDI2MzgsIDAuODkzODUsIDAuNzU2NTcsIDAuODUxMjIsIDAuODYyNzUsIDAuNzc0NTIsIDAuNzQxNzEsIDAuNzk3NzYsIDAuNzMwNiwgMC45NTE2NSwgMC43NzgxOCwgMC44OTc3MiwgMC44ODgzMSwgMC45MDY4NSwgMC43MzA2LCAwLjk4MTQyLCAxLjAyMTkxLCAwLjk2NTc2LCAxLjIzNTE2LCAwLjk5MDE4LCAwLjk4MTQyLCAwLjkyMzYsIDAuODkyNTgsIDAuOTQwMzUsIDEuMDIxOTEsIDAuNzg4NDgsIDAuOTY1NzYsIDAuOTU2MSwgMS4yMzUxNiwgMC45MDkxOCwgMC45MjU3OCwgMC45NTQyNCwgMC44OTc0NiwgMC44Mzk2OSwgMC45NDgyLCAwLjgwMTEzLCAwLjg5NDQyLCAwLjg1MjA4LCAwLjg2MTU1LCAwLjk4MDIyLCAwLjk5MDE4LCAxLjAwNDUyLCAwLjgxMjA5LCAwLjk5MjQ3LCAwLjg5MTgxLCAxLjIzNTE2LCAwLjk5MDE4LCAwLjk0ODIsIDAuOTkwMTgsIDAuODkxODEsIDAuNzMyMDYsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAuODg4NDQsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAuODk0NjQsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAuOTY3NjYsIDEsIDEsIDEsIDEsIDEsIDEsIDAuOTQyNTgsIDAuOTg5ODYsIDAuOTQyNTgsIDAuOTg5ODYsIDAuOTQyNTgsIDAuOTg5ODYsIDAuNzMwNiwgMC45MDUyNywgMSwgMSwgMC44OTU1MiwgMC45MDUyNywgMSwgMC45MDE4NiwgMS4xMjMwOCwgMS4xMjMwOCwgMS4xMjMwOCwgMS4xMjMwOCwgMS4yNTY2LCAxLjI1NjYsIDEuMjU2NiwgMC44OTU1MiwgMC44OTU1MiwgMS40MjI1OSwgMC42OTA0MywgMS4wMzgwOSwgMSwgMSwgMS4wMTc2LCAxLjAxNzYsIDEuMTE1MjMsIDEuNDk1NiwgMi4wMTQ2MiwgMC45OTMzMSwgMC44MjYxNiwgMC45MTEzMywgMC44NDI4NiwgMC45MTEzMywgMSwgMSwgMSwgMC43MDUwOCwgMSwgMS4yMzEwOCwgMC43OTgwMSwgMC44NDQyNiwgMC44NDQyNiwgMC43NzQsIDAuOTA1MjcsIDEuODEwNTUsIDAuOTA1MjcsIDEuODEwNTUsIDEuMjg4MDksIDEuNTU0NjksIDAuOTQ0MzQsIDEuMDc4MDYsIDEsIDAuOTcwOTQsIDAuNzU4OSwgMC44NTI4NCwgMC45MDc0NywgMS4xOTY1OCwgMC42OTgyNSwgMC45NzYyMiwgMS4zMzUxMiwgMC45MDc0NywgMC45MDc0NywgMC44NTM1NiwgMC45MDc0NywgMC45MDc0NywgMS40NDk0NywgMC44NTI4NCwgMC44OTQxLCAwLjg5NDEsIDAuNzA1NzIsIDAuOCwgMC43MDU3MiwgMC43MDU3MiwgMC43MDU3MiwgMC43MDU3MiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMC45OTg2MiwgMC45OTg2MiwgMSwgMSwgMSwgMSwgMSwgMS4wMzM2LCAwLjkxMDI3LCAxLCAxLCAxLCAwLjk5ODYyLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLjA1ODU5LCAxLjA1ODU5LCAxLCAxLCAxLCAxLjA3MTg1LCAwLjk5NDEzLCAwLjk2MzM0LCAxLjA4MDY1LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxXTtcbmV4cG9ydHMuQ2FsaWJyaVJlZ3VsYXJGYWN0b3JzID0gQ2FsaWJyaVJlZ3VsYXJGYWN0b3JzO1xuY29uc3QgQ2FsaWJyaVJlZ3VsYXJNZXRyaWNzID0ge1xuICBsaW5lSGVpZ2h0OiAxLjIyMDcsXG4gIGxpbmVHYXA6IDAuMjIwN1xufTtcbmV4cG9ydHMuQ2FsaWJyaVJlZ3VsYXJNZXRyaWNzID0gQ2FsaWJyaVJlZ3VsYXJNZXRyaWNzO1xuXG4vKioqLyB9KSxcbi8qIDE0ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLkhlbHZldGljYVJlZ3VsYXJNZXRyaWNzID0gZXhwb3J0cy5IZWx2ZXRpY2FSZWd1bGFyRmFjdG9ycyA9IGV4cG9ydHMuSGVsdmV0aWNhSXRhbGljTWV0cmljcyA9IGV4cG9ydHMuSGVsdmV0aWNhSXRhbGljRmFjdG9ycyA9IGV4cG9ydHMuSGVsdmV0aWNhQm9sZE1ldHJpY3MgPSBleHBvcnRzLkhlbHZldGljYUJvbGRJdGFsaWNNZXRyaWNzID0gZXhwb3J0cy5IZWx2ZXRpY2FCb2xkSXRhbGljRmFjdG9ycyA9IGV4cG9ydHMuSGVsdmV0aWNhQm9sZEZhY3RvcnMgPSB2b2lkIDA7XG5jb25zdCBIZWx2ZXRpY2FCb2xkRmFjdG9ycyA9IFswLjc2MTE2LCAxLCAxLCAxLjAwMDYsIDAuOTk5OTgsIDAuOTk5NzQsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5ODIsIDAuOTk5NzcsIDEuMDAwODcsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5NTksIDEuMDAwMDMsIDEuMDAwNiwgMC45OTk5OCwgMS4wMDA2LCAxLjAwMDYsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5OTgsIDEsIDEuMDAwMDMsIDEuMDAwMDMsIDEuMDAwMDMsIDEuMDAwMjYsIDAuOTk5OSwgMC45OTk3NywgMC45OTk3NywgMC45OTk3NywgMC45OTk3NywgMS4wMDAwMSwgMS4wMDAyNiwgMS4wMDAyMiwgMC45OTk3NywgMS4wMDA2LCAwLjk5OTczLCAwLjk5OTc3LCAxLjAwMDI2LCAwLjk5OTk5LCAwLjk5OTc3LCAxLjAwMDIyLCAxLjAwMDAxLCAxLjAwMDIyLCAwLjk5OTc3LCAxLjAwMDAxLCAxLjAwMDI2LCAwLjk5OTc3LCAxLjAwMDAxLCAxLjAwMDE2LCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDI2LCAwLjk5OTk4LCAxLjAwMDYsIDAuOTk5OTgsIDEuMDAwMDMsIDAuOTk5NzMsIDAuOTk5OTgsIDAuOTk5NzMsIDEuMDAwMjYsIDAuOTk5NzMsIDEuMDAwMjYsIDAuOTk5NzMsIDAuOTk5OTgsIDEuMDAwMjYsIDEuMDAwMjYsIDEuMDAwNiwgMS4wMDA2LCAwLjk5OTczLCAxLjAwMDYsIDAuOTk5ODIsIDEuMDAwMjYsIDEuMDAwMjYsIDEuMDAwMjYsIDEuMDAwMjYsIDAuOTk5NTksIDAuOTk5NzMsIDAuOTk5OTgsIDEuMDAwMjYsIDAuOTk5NzMsIDEuMDAwMjIsIDAuOTk5NzMsIDAuOTk5NzMsIDEsIDAuOTk5NTksIDEuMDAwNzcsIDAuOTk5NTksIDEuMDAwMDMsIDAuOTk5OTgsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDEuMDAwNzcsIDAuOTk5NzMsIDAuOTk5OTgsIDEuMDAwMjUsIDAuOTk5NjgsIDAuOTk5NzMsIDEuMDAwMDMsIDEuMDAwMjUsIDAuNjAyOTksIDEuMDAwMjQsIDEuMDY0MDksIDEsIDEsIDAuOTk5OTgsIDEsIDAuOTk5NzMsIDEuMDAwNiwgMC45OTk5OCwgMSwgMC45OTkzNiwgMC45OTk3MywgMS4wMDAwMiwgMS4wMDAwMiwgMS4wMDAwMiwgMS4wMDAyNiwgMC45OTk3NywgMC45OTk3NywgMC45OTk3NywgMC45OTk3NywgMC45OTk3NywgMC45OTk3NywgMSwgMC45OTk3NywgMS4wMDAwMSwgMS4wMDAwMSwgMS4wMDAwMSwgMS4wMDAwMSwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAwLjk5OTc3LCAwLjk5OTc3LCAxLjAwMDIyLCAxLjAwMDIyLCAxLjAwMDIyLCAxLjAwMDIyLCAxLjAwMDIyLCAxLjAwMDAzLCAxLjAwMDIyLCAwLjk5OTc3LCAwLjk5OTc3LCAwLjk5OTc3LCAwLjk5OTc3LCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDI2LCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTgyLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwMjYsIDEuMDAwMjYsIDEuMDAwMjYsIDEuMDAwMjYsIDEuMDAwMjYsIDEuMDAwMjYsIDEuMDAwMjYsIDEuMDY0MDksIDEuMDAwMjYsIDEuMDAwMjYsIDEuMDAwMjYsIDEuMDAwMjYsIDEuMDAwMjYsIDAuOTk5NzMsIDEuMDAwMjYsIDAuOTk5NzMsIDAuOTk5NzcsIDAuOTk5NzMsIDAuOTk5NzcsIDAuOTk5NzMsIDAuOTk5NzcsIDAuOTk5NzMsIDAuOTk5NzcsIDAuOTk5NzMsIDAuOTk5NzcsIDAuOTk5NzMsIDAuOTk5NzcsIDAuOTk5NzMsIDAuOTk5NzcsIDAuOTk5NzMsIDAuOTk5NzcsIDEuMDMzNzQsIDAuOTk5NzcsIDEuMDAwMjYsIDEuMDAwMDEsIDAuOTk5NzMsIDEuMDAwMDEsIDAuOTk5NzMsIDEuMDAwMDEsIDAuOTk5NzMsIDEuMDAwMDEsIDAuOTk5NzMsIDEuMDAwMDEsIDAuOTk5NzMsIDEuMDAwMjIsIDEuMDAwMjYsIDEuMDAwMjIsIDEuMDAwMjYsIDEuMDAwMjIsIDEuMDAwMjYsIDEuMDAwMjIsIDEuMDAwMjYsIDAuOTk5NzcsIDEuMDAwMjYsIDAuOTk5NzcsIDEuMDAwMjYsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA0MiwgMC45OTk3MywgMC45OTk3MywgMS4wMDA2LCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTczLCAxLjAwMDI2LCAxLjAwMDYsIDEuMDAwMjYsIDEuMDAwNiwgMS4wMDAyNiwgMS4wMzgyOCwgMS4wMDAyNiwgMC45OTk5OSwgMS4wMDAyNiwgMS4wMDA2LCAwLjk5OTc3LCAxLjAwMDI2LCAwLjk5OTc3LCAxLjAwMDI2LCAwLjk5OTc3LCAxLjAwMDI2LCAwLjk5OTMsIDAuOTk5OCwgMS4wMDAyNiwgMS4wMDAyMiwgMS4wMDAyNiwgMS4wMDAyMiwgMS4wMDAyNiwgMS4wMDAyMiwgMS4wMDAyNiwgMSwgMS4wMDAxNiwgMC45OTk3NywgMC45OTk1OSwgMC45OTk3NywgMC45OTk1OSwgMC45OTk3NywgMC45OTk1OSwgMS4wMDAwMSwgMC45OTk3MywgMS4wMDAwMSwgMC45OTk3MywgMS4wMDAwMSwgMC45OTk3MywgMS4wMDAwMSwgMC45OTk3MywgMS4wMDAyNiwgMC45OTk5OCwgMS4wMDAyNiwgMC44MTIxLCAxLjAwMDI2LCAwLjk5OTk4LCAwLjk5OTc3LCAxLjAwMDI2LCAwLjk5OTc3LCAxLjAwMDI2LCAwLjk5OTc3LCAxLjAwMDI2LCAwLjk5OTc3LCAxLjAwMDI2LCAwLjk5OTc3LCAxLjAwMDI2LCAwLjk5OTc3LCAxLjAwMDI2LCAxLjAwMDE2LCAxLjAwMDIyLCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDAxLCAxLjAwMDI2LCAxLCAxLjAwMDI2LCAxLCAxLjAwMDI2LCAxLCAxLjAwMDYsIDAuOTk5NzMsIDAuOTk5NzcsIDAuOTk5NzMsIDEsIDAuOTk5ODIsIDEuMDAwMjIsIDEuMDAwMjYsIDEuMDAwMDEsIDAuOTk5NzMsIDEuMDAwMjYsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDEuMDAwMzQsIDAuOTk5NzcsIDEsIDAuOTk5OTcsIDEuMDAwMjYsIDEuMDAwNzgsIDEuMDAwMzYsIDAuOTk5NzMsIDEuMDAwMTMsIDEuMDAwNiwgMC45OTk3NywgMC45OTk3NywgMC45OTk4OCwgMC44NTE0OCwgMS4wMDAwMSwgMS4wMDAyNiwgMC45OTk3NywgMS4wMDAyMiwgMS4wMDA2LCAwLjk5OTc3LCAxLjAwMDAxLCAwLjk5OTk5LCAwLjk5OTc3LCAxLjAwMDY5LCAxLjAwMDIyLCAwLjk5OTc3LCAxLjAwMDAxLCAwLjk5OTg0LCAxLjAwMDI2LCAxLjAwMDAxLCAxLjAwMDI0LCAxLjAwMDAxLCAwLjk5OTksIDEsIDEuMDAwNiwgMS4wMDAwMSwgMS4wMDA0MSwgMC45OTk2MiwgMS4wMDAyNiwgMS4wMDA2LCAwLjk5OTk1LCAxLjAwMDQxLCAwLjk5OTQyLCAwLjk5OTczLCAwLjk5OTI3LCAxLjAwMDgyLCAwLjk5OTAyLCAxLjAwMDI2LCAxLjAwMDg3LCAxLjAwMDYsIDEuMDAwNjksIDAuOTk5NzMsIDAuOTk4NjcsIDAuOTk5NzMsIDAuOTk5MywgMS4wMDAyNiwgMS4wMDA0OSwgMS4wMDA1NiwgMSwgMC45OTk4OCwgMC45OTkzNSwgMC45OTk5NSwgMC45OTk1NCwgMS4wMDA1NSwgMC45OTk0NSwgMS4wMDAzMiwgMS4wMDA2LCAwLjk5OTk1LCAxLjAwMDI2LCAwLjk5OTk1LCAxLjAwMDMyLCAxLjAwMDAxLCAxLjAwMDA4LCAwLjk5OTcxLCAxLjAwMDE5LCAwLjk5OTQsIDEuMDAwMDEsIDEuMDAwNiwgMS4wMDA0NCwgMC45OTk3MywgMS4wMDAyMywgMS4wMDA0NywgMSwgMC45OTk0MiwgMC45OTU2MSwgMC45OTk4OSwgMS4wMDAzNSwgMC45OTk3NywgMS4wMDAzNSwgMC45OTk3NywgMS4wMDAxOSwgMC45OTk0NCwgMS4wMDAwMSwgMS4wMDAyMSwgMC45OTkyNiwgMS4wMDAzNSwgMS4wMDAzNSwgMC45OTk0MiwgMS4wMDA0OCwgMC45OTk5OSwgMC45OTk3NywgMS4wMDAyMiwgMS4wMDAzNSwgMS4wMDAwMSwgMC45OTk3NywgMS4wMDAyNiwgMC45OTk4OSwgMS4wMDA1NywgMS4wMDAwMSwgMC45OTkzNiwgMS4wMDA1MiwgMS4wMDAxMiwgMC45OTk5NiwgMS4wMDA0MywgMSwgMS4wMDAzNSwgMC45OTk0LCAwLjk5OTc2LCAxLjAwMDM1LCAwLjk5OTczLCAxLjAwMDUyLCAxLjAwMDQxLCAxLjAwMTE5LCAxLjAwMDM3LCAwLjk5OTczLCAxLjAwMDAyLCAwLjk5OTg2LCAxLjAwMDQxLCAxLjAwMDQxLCAwLjk5OTAyLCAwLjk5OTYsIDEuMDAwMzQsIDAuOTk5OTksIDEuMDAwMjYsIDAuOTk5OTksIDEuMDAwMjYsIDAuOTk5NzMsIDEuMDAwNTIsIDAuOTk5NzMsIDEsIDAuOTk5NzMsIDEuMDAwNDEsIDEuMDAwNzUsIDAuOTk5NCwgMS4wMDAzLCAwLjk5OTk5LCAxLCAxLjAwMDQxLCAwLjk5OTU1LCAxLCAwLjk5OTE1LCAwLjk5OTczLCAwLjk5OTczLCAxLjAwMDI2LCAxLjAwMTE5LCAwLjk5OTU1LCAwLjk5OTczLCAxLjAwMDYsIDAuOTk5MTEsIDEuMDAwNiwgMS4wMDAyNiwgMC45OTk3MiwgMS4wMDAyNiwgMC45OTkwMiwgMS4wMDA0MSwgMC45OTk3MywgMC45OTk5OSwgMSwgMSwgMS4wMDAzOCwgMS4wMDA1LCAxLjAwMDE2LCAxLjAwMDIyLCAxLjAwMDE2LCAxLjAwMDIyLCAxLjAwMDE2LCAxLjAwMDIyLCAxLjAwMDAxLCAwLjk5OTczLCAxLCAxLCAwLjk5OTczLCAxLCAxLCAwLjk5OTU1LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDEsIDEsIDEsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzIsIDEsIDEsIDEuMDAxMDYsIDAuOTk5OTksIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTksIDAuOTk5OTgsIDEuNjY0NzUsIDEsIDAuOTk5NzMsIDAuOTk5NzMsIDEuMDAwMjMsIDAuOTk5NzMsIDAuOTk5NzEsIDEuMDAwNDcsIDEuMDAwMjMsIDEsIDAuOTk5OTEsIDAuOTk5ODQsIDEuMDAwMDIsIDEuMDAwMDIsIDEuMDAwMDIsIDEuMDAwMDIsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAuOTk5NzIsIDEsIDEuMjA5ODUsIDEuMzk3MTMsIDEuMDAwMDMsIDEuMDAwMzEsIDEuMDAwMTUsIDEsIDAuOTk1NjEsIDEuMDAwMjcsIDEuMDAwMzEsIDEuMDAwMzEsIDAuOTk5MTUsIDEuMDAwMzEsIDEuMDAwMzEsIDAuOTk5OTksIDEuMDAwMDMsIDAuOTk5OTksIDAuOTk5OTksIDEuNDExNDQsIDEuNiwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MDU3OSwgMS40MDU3OSwgMS4zNjYyNSwgMC45OTk5OSwgMSwgMC45OTg2MSwgMC45OTg2MSwgMSwgMS4wMDAyNiwgMS4wMDAyNiwgMS4wMDAyNiwgMS4wMDAyNiwgMC45OTk3MiwgMC45OTk5OSwgMC45OTk5OSwgMC45OTk5OSwgMC45OTk5OSwgMS40MDQ4MywgMSwgMC45OTk3NywgMS4wMDA1NCwgMSwgMSwgMC45OTk1MywgMC45OTk2MiwgMS4wMDA0MiwgMC45OTk1LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxXTtcbmV4cG9ydHMuSGVsdmV0aWNhQm9sZEZhY3RvcnMgPSBIZWx2ZXRpY2FCb2xkRmFjdG9ycztcbmNvbnN0IEhlbHZldGljYUJvbGRNZXRyaWNzID0ge1xuICBsaW5lSGVpZ2h0OiAxLjIsXG4gIGxpbmVHYXA6IDAuMlxufTtcbmV4cG9ydHMuSGVsdmV0aWNhQm9sZE1ldHJpY3MgPSBIZWx2ZXRpY2FCb2xkTWV0cmljcztcbmNvbnN0IEhlbHZldGljYUJvbGRJdGFsaWNGYWN0b3JzID0gWzAuNzYxMTYsIDEsIDEsIDEuMDAwNiwgMC45OTk5OCwgMC45OTk3NCwgMC45OTk3MywgMC45OTk3MywgMC45OTk4MiwgMC45OTk3NywgMS4wMDA4NywgMC45OTk5OCwgMC45OTk5OCwgMC45OTk1OSwgMS4wMDAwMywgMS4wMDA2LCAwLjk5OTk4LCAxLjAwMDYsIDEuMDAwNiwgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk5OCwgMSwgMS4wMDAwMywgMS4wMDAwMywgMS4wMDAwMywgMS4wMDAyNiwgMC45OTk5LCAwLjk5OTc3LCAwLjk5OTc3LCAwLjk5OTc3LCAwLjk5OTc3LCAxLjAwMDAxLCAxLjAwMDI2LCAxLjAwMDIyLCAwLjk5OTc3LCAxLjAwMDYsIDAuOTk5NzMsIDAuOTk5NzcsIDEuMDAwMjYsIDAuOTk5OTksIDAuOTk5NzcsIDEuMDAwMjIsIDEuMDAwMDEsIDEuMDAwMjIsIDAuOTk5NzcsIDEuMDAwMDEsIDEuMDAwMjYsIDAuOTk5NzcsIDEuMDAwMDEsIDEuMDAwMTYsIDEuMDAwMDEsIDEuMDAwMDEsIDEuMDAwMjYsIDAuOTk5OTgsIDEuMDAwNiwgMC45OTk5OCwgMS4wMDAwMywgMC45OTk3MywgMC45OTk5OCwgMC45OTk3MywgMS4wMDAyNiwgMC45OTk3MywgMS4wMDAyNiwgMC45OTk3MywgMC45OTk5OCwgMS4wMDAyNiwgMS4wMDAyNiwgMS4wMDA2LCAxLjAwMDYsIDAuOTk5NzMsIDEuMDAwNiwgMC45OTk4MiwgMS4wMDAyNiwgMS4wMDAyNiwgMS4wMDAyNiwgMS4wMDAyNiwgMC45OTk1OSwgMC45OTk3MywgMC45OTk5OCwgMS4wMDAyNiwgMC45OTk3MywgMS4wMDAyMiwgMC45OTk3MywgMC45OTk3MywgMSwgMC45OTk1OSwgMS4wMDA3NywgMC45OTk1OSwgMS4wMDAwMywgMC45OTk5OCwgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMS4wMDA3NywgMC45OTk3MywgMC45OTk5OCwgMS4wMDAyNSwgMC45OTk2OCwgMC45OTk3MywgMS4wMDAwMywgMS4wMDAyNSwgMC42MDI5OSwgMS4wMDAyNCwgMS4wNjQwOSwgMSwgMSwgMC45OTk5OCwgMSwgMC45OTk3MywgMS4wMDA2LCAwLjk5OTk4LCAxLCAwLjk5OTM2LCAwLjk5OTczLCAxLjAwMDAyLCAxLjAwMDAyLCAxLjAwMDAyLCAxLjAwMDI2LCAwLjk5OTc3LCAwLjk5OTc3LCAwLjk5OTc3LCAwLjk5OTc3LCAwLjk5OTc3LCAwLjk5OTc3LCAxLCAwLjk5OTc3LCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDAuOTk5NzcsIDAuOTk5NzcsIDEuMDAwMjIsIDEuMDAwMjIsIDEuMDAwMjIsIDEuMDAwMjIsIDEuMDAwMjIsIDEuMDAwMDMsIDEuMDAwMjIsIDAuOTk5NzcsIDAuOTk5NzcsIDAuOTk5NzcsIDAuOTk5NzcsIDEuMDAwMDEsIDEuMDAwMDEsIDEuMDAwMjYsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5ODIsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDAyNiwgMS4wMDAyNiwgMS4wMDAyNiwgMS4wMDAyNiwgMS4wMDAyNiwgMS4wMDAyNiwgMS4wMDAyNiwgMS4wNjQwOSwgMS4wMDAyNiwgMS4wMDAyNiwgMS4wMDAyNiwgMS4wMDAyNiwgMS4wMDAyNiwgMC45OTk3MywgMS4wMDAyNiwgMC45OTk3MywgMC45OTk3NywgMC45OTk3MywgMC45OTk3NywgMC45OTk3MywgMC45OTk3NywgMC45OTk3MywgMC45OTk3NywgMC45OTk3MywgMC45OTk3NywgMC45OTk3MywgMC45OTk3NywgMC45OTk3MywgMC45OTk3NywgMC45OTk3MywgMC45OTk3NywgMS4wMDQ0LCAwLjk5OTc3LCAxLjAwMDI2LCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDIyLCAxLjAwMDI2LCAxLjAwMDIyLCAxLjAwMDI2LCAxLjAwMDIyLCAxLjAwMDI2LCAxLjAwMDIyLCAxLjAwMDI2LCAwLjk5OTc3LCAxLjAwMDI2LCAwLjk5OTc3LCAxLjAwMDI2LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDAuOTk5NzEsIDAuOTk5NzMsIDAuOTk5NzMsIDEuMDAwNiwgMC45OTk3NywgMC45OTk3MywgMC45OTk3MywgMS4wMDAyNiwgMS4wMDA2LCAxLjAwMDI2LCAxLjAwMDYsIDEuMDAwMjYsIDEuMDEwMTEsIDEuMDAwMjYsIDAuOTk5OTksIDEuMDAwMjYsIDEuMDAwNiwgMC45OTk3NywgMS4wMDAyNiwgMC45OTk3NywgMS4wMDAyNiwgMC45OTk3NywgMS4wMDAyNiwgMC45OTkzLCAwLjk5OTgsIDEuMDAwMjYsIDEuMDAwMjIsIDEuMDAwMjYsIDEuMDAwMjIsIDEuMDAwMjYsIDEuMDAwMjIsIDEuMDAwMjYsIDEsIDEuMDAwMTYsIDAuOTk5NzcsIDAuOTk5NTksIDAuOTk5NzcsIDAuOTk5NTksIDAuOTk5NzcsIDAuOTk5NTksIDEuMDAwMDEsIDAuOTk5NzMsIDEuMDAwMDEsIDAuOTk5NzMsIDEuMDAwMDEsIDAuOTk5NzMsIDEuMDAwMDEsIDAuOTk5NzMsIDEuMDAwMjYsIDAuOTk5OTgsIDEuMDAwMjYsIDAuODEyMSwgMS4wMDAyNiwgMC45OTk5OCwgMC45OTk3NywgMS4wMDAyNiwgMC45OTk3NywgMS4wMDAyNiwgMC45OTk3NywgMS4wMDAyNiwgMC45OTk3NywgMS4wMDAyNiwgMC45OTk3NywgMS4wMDAyNiwgMC45OTk3NywgMS4wMDAyNiwgMS4wMDAxNiwgMS4wMDAyMiwgMS4wMDAwMSwgMC45OTk3MywgMS4wMDAwMSwgMS4wMDAyNiwgMSwgMS4wMDAyNiwgMSwgMS4wMDAyNiwgMSwgMS4wMDA2LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAxLCAwLjk5OTgyLCAxLjAwMDIyLCAxLjAwMDI2LCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDI2LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTc3LCAxLCAxLCAxLjAwMDI2LCAwLjk5OTY5LCAwLjk5OTcyLCAwLjk5OTgxLCAwLjk5OTgsIDEuMDAwNiwgMC45OTk3NywgMC45OTk3NywgMS4wMDAyMiwgMC45MTE1NSwgMS4wMDAwMSwgMS4wMDAyNiwgMC45OTk3NywgMS4wMDAyMiwgMS4wMDA2LCAwLjk5OTc3LCAxLjAwMDAxLCAwLjk5OTk5LCAwLjk5OTc3LCAwLjk5OTY2LCAxLjAwMDIyLCAxLjAwMDMyLCAxLjAwMDAxLCAwLjk5OTQ0LCAxLjAwMDI2LCAxLjAwMDAxLCAwLjk5OTY4LCAxLjAwMDAxLCAxLjAwMDQ3LCAxLCAxLjAwMDYsIDEuMDAwMDEsIDAuOTk5ODEsIDEuMDAxMDEsIDEuMDAwMjYsIDEuMDAwNiwgMC45OTk0OCwgMC45OTk4MSwgMS4wMDA2NCwgMC45OTk3MywgMC45OTk0MiwgMS4wMDEwMSwgMS4wMDA2MSwgMS4wMDAyNiwgMS4wMDA2OSwgMS4wMDA2LCAxLjAwMDE0LCAwLjk5OTczLCAxLjAxMzIyLCAwLjk5OTczLCAxLjAwMDY1LCAxLjAwMDI2LCAxLjAwMDEyLCAwLjk5OTIzLCAxLCAxLjAwMDY0LCAxLjAwMDc2LCAwLjk5OTQ4LCAxLjAwMDU1LCAxLjAwMDYzLCAxLjAwMDA3LCAwLjk5OTQzLCAxLjAwMDYsIDAuOTk5NDgsIDEuMDAwMjYsIDAuOTk5NDgsIDAuOTk5NDMsIDEuMDAwMDEsIDEuMDAwMDEsIDEuMDAwMjksIDEuMDAwMzgsIDEuMDAwMzUsIDEuMDAwMDEsIDEuMDAwNiwgMS4wMDA2LCAwLjk5OTczLCAwLjk5OTc4LCAxLjAwMDAxLCAxLjAwMDU3LCAwLjk5OTg5LCAwLjk5OTY3LCAwLjk5OTY0LCAwLjk5OTY3LCAwLjk5OTc3LCAwLjk5OTk5LCAwLjk5OTc3LCAxLjAwMDM4LCAwLjk5OTc3LCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDY2LCAwLjk5OTY3LCAwLjk5OTY3LCAxLjAwMDQxLCAwLjk5OTk4LCAwLjk5OTk5LCAwLjk5OTc3LCAxLjAwMDIyLCAwLjk5OTY3LCAxLjAwMDAxLCAwLjk5OTc3LCAxLjAwMDI2LCAwLjk5OTY0LCAxLjAwMDMxLCAxLjAwMDAxLCAwLjk5OTk5LCAwLjk5OTk5LCAxLCAxLjAwMDIzLCAxLCAxLCAwLjk5OTk5LCAxLjAwMDM1LCAxLjAwMDAxLCAwLjk5OTk5LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTk5LCAxLjAwMDU4LCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTU1LCAwLjk5OTUsIDEuMDAwMjYsIDEuMDAwMjYsIDEuMDAwMzIsIDAuOTk5ODksIDEuMDAwMzQsIDAuOTk5OTksIDEuMDAwMjYsIDEuMDAwMjYsIDEuMDAwMjYsIDAuOTk5NzMsIDAuNDU5OTgsIDAuOTk5NzMsIDEuMDAwMjYsIDAuOTk5NzMsIDEuMDAwMDEsIDAuOTk5OTksIDAuOTk5ODIsIDAuOTk5OTQsIDAuOTk5OTYsIDEsIDEuMDAwNDIsIDEuMDAwNDQsIDEuMDAwMjksIDEuMDAwMjMsIDAuOTk5NzMsIDAuOTk5NzMsIDEuMDAwMjYsIDAuOTk5NDksIDEuMDAwMDIsIDAuOTk5NzMsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDAuOTk5NzUsIDEuMDAwMjYsIDEuMDAwMjYsIDEuMDAwMzIsIDAuOTg2ODUsIDAuOTk5NzMsIDEuMDAwMjYsIDEsIDEsIDAuOTk5NjYsIDEuMDAwNDQsIDEuMDAwMTYsIDEuMDAwMjIsIDEuMDAwMTYsIDEuMDAwMjIsIDEuMDAwMTYsIDEuMDAwMjIsIDEuMDAwMDEsIDAuOTk5NzMsIDEsIDEsIDAuOTk5NzMsIDEsIDEsIDAuOTk5NTUsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMSwgMSwgMSwgMC45OTk3MywgMC45OTk3MywgMC45OTk3MiwgMSwgMSwgMS4wMDEwNiwgMC45OTk5OSwgMC45OTk5OCwgMC45OTk5OCwgMC45OTk5OSwgMC45OTk5OCwgMS42NjQ3NSwgMSwgMC45OTk3MywgMC45OTk3MywgMSwgMC45OTk3MywgMC45OTk3MSwgMC45OTk3OCwgMSwgMSwgMC45OTk5MSwgMC45OTk4NCwgMS4wMDAwMiwgMS4wMDAwMiwgMS4wMDAwMiwgMS4wMDAwMiwgMS4wMDA5OCwgMSwgMSwgMSwgMS4wMDA0OSwgMSwgMSwgMC45OTk3MiwgMSwgMS4yMDk4NSwgMS4zOTcxMywgMS4wMDAwMywgMS4wMDAzMSwgMS4wMDAxNSwgMSwgMC45OTU2MSwgMS4wMDAyNywgMS4wMDAzMSwgMS4wMDAzMSwgMC45OTkxNSwgMS4wMDAzMSwgMS4wMDAzMSwgMC45OTk5OSwgMS4wMDAwMywgMC45OTk5OSwgMC45OTk5OSwgMS40MTE0NCwgMS42LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQxMTQ0LCAxLjQwNTc5LCAxLjQwNTc5LCAxLjM2NjI1LCAwLjk5OTk5LCAxLCAwLjk5ODYxLCAwLjk5ODYxLCAxLCAxLjAwMDI2LCAxLjAwMDI2LCAxLjAwMDI2LCAxLjAwMDI2LCAwLjk5OTcyLCAwLjk5OTk5LCAwLjk5OTk5LCAwLjk5OTk5LCAwLjk5OTk5LCAxLjQwNDgzLCAxLCAwLjk5OTc3LCAxLjAwMDU0LCAxLCAxLCAwLjk5OTUzLCAwLjk5OTYyLCAxLjAwMDQyLCAwLjk5OTUsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDFdO1xuZXhwb3J0cy5IZWx2ZXRpY2FCb2xkSXRhbGljRmFjdG9ycyA9IEhlbHZldGljYUJvbGRJdGFsaWNGYWN0b3JzO1xuY29uc3QgSGVsdmV0aWNhQm9sZEl0YWxpY01ldHJpY3MgPSB7XG4gIGxpbmVIZWlnaHQ6IDEuMzUsXG4gIGxpbmVHYXA6IDAuMlxufTtcbmV4cG9ydHMuSGVsdmV0aWNhQm9sZEl0YWxpY01ldHJpY3MgPSBIZWx2ZXRpY2FCb2xkSXRhbGljTWV0cmljcztcbmNvbnN0IEhlbHZldGljYUl0YWxpY0ZhY3RvcnMgPSBbMC43NjExNiwgMSwgMSwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwMDYsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5ODIsIDEuMDAwMDEsIDEuMDAwNDMsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5NTksIDEuMDAwMDMsIDEuMDAwNiwgMC45OTk5OCwgMS4wMDA2LCAxLjAwMDYsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDEuMDAwNiwgMSwgMS4wMDAwMywgMS4wMDAwMywgMS4wMDAwMywgMC45OTk3MywgMC45OTk4NywgMS4wMDAwMSwgMS4wMDAwMSwgMC45OTk3NywgMC45OTk3NywgMS4wMDAwMSwgMS4wMDAyNiwgMS4wMDAyMiwgMC45OTk3NywgMS4wMDA2LCAxLCAxLjAwMDAxLCAwLjk5OTczLCAwLjk5OTk5LCAwLjk5OTc3LCAxLjAwMDIyLCAxLjAwMDAxLCAxLjAwMDIyLCAwLjk5OTc3LCAxLjAwMDAxLCAxLjAwMDI2LCAwLjk5OTc3LCAxLjAwMDAxLCAxLjAwMDE2LCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDI2LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAwLjk5OTQ5LCAwLjk5OTczLCAwLjk5OTk4LCAwLjk5OTczLCAwLjk5OTczLCAxLCAwLjk5OTczLCAwLjk5OTczLCAxLjAwMDYsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5MjQsIDAuOTk5MjQsIDEsIDAuOTk5MjQsIDAuOTk5OTksIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5OTgsIDEsIDEuMDAwNiwgMC45OTk3MywgMSwgMC45OTk3NywgMSwgMSwgMSwgMS4wMDAwNSwgMS4wMDA5LCAxLjAwMDA1LCAxLjAwMDAzLCAwLjk5OTk4LCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAxLjAwMDksIDAuOTk5NzMsIDAuOTk5OTgsIDEuMDAwMjUsIDAuOTk5NjgsIDAuOTk5NzMsIDEuMDAwMDMsIDEuMDAwMjUsIDAuNjAyOTksIDEuMDAwMjQsIDEuMDY0MDksIDEsIDEsIDAuOTk5OTgsIDEsIDAuOTk5OCwgMS4wMDA2LCAwLjk5OTk4LCAxLCAwLjk5OTM2LCAwLjk5OTczLCAxLjAwMDAyLCAxLjAwMDAyLCAxLjAwMDAyLCAxLjAwMDI2LCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDAxLCAxLCAwLjk5OTc3LCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDAuOTk5NzcsIDAuOTk5NzcsIDEuMDAwMjIsIDEuMDAwMjIsIDEuMDAwMjIsIDEuMDAwMjIsIDEuMDAwMjIsIDEuMDAwMDMsIDEuMDAwMjIsIDAuOTk5NzcsIDAuOTk5NzcsIDAuOTk5NzcsIDAuOTk5NzcsIDEuMDAwMDEsIDEuMDAwMDEsIDEuMDAwMjYsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5ODIsIDEsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMS4wNjQwOSwgMS4wMDAyNiwgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMSwgMC45OTk3MywgMSwgMS4wMDAwMSwgMC45OTk3MywgMS4wMDAwMSwgMC45OTk3MywgMS4wMDAwMSwgMC45OTk3MywgMC45OTk3NywgMSwgMC45OTk3NywgMSwgMC45OTk3NywgMSwgMC45OTk3NywgMSwgMC45OTk3NywgMS4wMjg4LCAwLjk5OTc3LCAwLjk5OTczLCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDAxLCAwLjk5OTczLCAxLjAwMDIyLCAwLjk5OTczLCAxLjAwMDIyLCAwLjk5OTczLCAxLjAwMDIyLCAwLjk5OTczLCAxLjAwMDIyLCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDAuOTk5MjQsIDEuMDAwNiwgMS4wMDA2LCAwLjk5OTQ2LCAxLjAwMDM0LCAxLCAwLjk5OTI0LCAxLjAwMDAxLCAxLCAxLCAwLjk5OTczLCAwLjk5OTI0LCAwLjk5OTczLCAwLjk5OTI0LCAwLjk5OTczLCAxLjA2MzExLCAwLjk5OTczLCAxLjAwMDI0LCAwLjk5OTczLCAwLjk5OTI0LCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAxLjAwMDQxLCAwLjk5OTgsIDAuOTk5NzMsIDEuMDAwMjIsIDAuOTk5NzMsIDEuMDAwMjIsIDAuOTk5NzMsIDEuMDAwMjIsIDAuOTk5NzMsIDEsIDEuMDAwMTYsIDAuOTk5NzcsIDAuOTk5OTgsIDAuOTk5NzcsIDAuOTk5OTgsIDAuOTk5NzcsIDAuOTk5OTgsIDEuMDAwMDEsIDEsIDEuMDAwMDEsIDEsIDEuMDAwMDEsIDEsIDEuMDAwMDEsIDEsIDEuMDAwMjYsIDEuMDAwNiwgMS4wMDAyNiwgMC44OTU0NywgMS4wMDAyNiwgMS4wMDA2LCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAwLjk5OTc3LCAwLjk5OTczLCAxLjAwMDE2LCAwLjk5OTc3LCAxLjAwMDAxLCAxLCAxLjAwMDAxLCAxLjAwMDI2LCAxLCAxLjAwMDI2LCAxLCAxLjAwMDI2LCAxLCAwLjk5OTI0LCAwLjk5OTczLCAxLjAwMDAxLCAwLjk5OTczLCAxLCAwLjk5OTgyLCAxLjAwMDIyLCAxLjAwMDI2LCAxLjAwMDAxLCAxLCAxLjAwMDI2LCAxLjAwMDYsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5OTgsIDEuMDAwMDEsIDEsIDEuMDAwNTQsIDAuOTk5NzcsIDEuMDAwODQsIDEuMDAwMDcsIDAuOTk5NzMsIDEuMDAwMTMsIDAuOTk5MjQsIDEuMDAwMDEsIDEuMDAwMDEsIDAuOTk5NDUsIDAuOTEyMjEsIDEuMDAwMDEsIDEuMDAwMjYsIDAuOTk5NzcsIDEuMDAwMjIsIDEuMDAwNiwgMS4wMDAwMSwgMS4wMDAwMSwgMC45OTk5OSwgMC45OTk3NywgMC45OTkzMywgMS4wMDAyMiwgMS4wMDA1NCwgMS4wMDAwMSwgMS4wMDA2NSwgMS4wMDAyNiwgMS4wMDAwMSwgMS4wMDAxLCAxLjAwMDAxLCAxLjAwMDUyLCAxLCAxLjAwMDYsIDEuMDAwMDEsIDAuOTk5NDUsIDAuOTk4OTcsIDAuOTk5NjgsIDAuOTk5MjQsIDEuMDAwMzYsIDAuOTk5NDUsIDAuOTk5NDksIDEsIDEuMDAwNiwgMC45OTg5NywgMC45OTkxOCwgMC45OTk2OCwgMC45OTkxMSwgMC45OTkyNCwgMSwgMC45OTk2MiwgMS4wMTQ4NywgMSwgMS4wMDA1LCAwLjk5OTczLCAxLjAwMDEyLCAxLjAwMDQzLCAxLCAwLjk5OTk1LCAwLjk5OTk0LCAxLjAwMDM2LCAwLjk5OTQ3LCAxLjAwMDE5LCAxLjAwMDYzLCAxLjAwMDI1LCAwLjk5OTI0LCAxLjAwMDM2LCAwLjk5OTczLCAxLjAwMDM2LCAxLjAwMDI1LCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDI3LCAxLjAwMDEsIDEuMDAwNjgsIDEuMDAwMDEsIDEuMDAwNiwgMS4wMDA2LCAxLCAxLjAwMDA4LCAwLjk5OTU3LCAwLjk5OTcyLCAwLjk5OTQsIDAuOTk5NTQsIDAuOTk5NzUsIDEuMDAwNTEsIDEuMDAwMDEsIDEuMDAwMTksIDEuMDAwMDEsIDEuMDAwMSwgMC45OTk4NiwgMS4wMDAwMSwgMS4wMDAwMSwgMS4wMDAzOCwgMC45OTk1NCwgMC45OTk1NCwgMC45OTk0LCAxLjAwMDY2LCAwLjk5OTk5LCAwLjk5OTc3LCAxLjAwMDIyLCAxLjAwMDU0LCAxLjAwMDAxLCAwLjk5OTc3LCAxLjAwMDI2LCAwLjk5OTc1LCAxLjAwMDEsIDEuMDAwMDEsIDAuOTk5OTMsIDAuOTk5NSwgMC45OTk1NSwgMS4wMDAxNiwgMC45OTk3OCwgMC45OTk3NCwgMS4wMDAxOSwgMS4wMDAyMiwgMC45OTk1NSwgMS4wMDA1MywgMC45OTk3MywgMS4wMDA4OSwgMS4wMDAwNSwgMC45OTk2NywgMS4wMDA0OCwgMC45OTk3MywgMS4wMDAwMiwgMS4wMDAzNCwgMC45OTk3MywgMC45OTk3MywgMC45OTk2NCwgMS4wMDAwNiwgMS4wMDA2NiwgMC45OTk0NywgMC45OTk3MywgMC45ODg5NCwgMC45OTk3MywgMSwgMC40NDg5OCwgMSwgMC45OTk0NiwgMSwgMS4wMDAzOSwgMS4wMDA4MiwgMC45OTk5MSwgMC45OTk5MSwgMC45OTk4NSwgMS4wMDAyMiwgMS4wMDAyMywgMS4wMDA2MSwgMS4wMDAwNiwgMC45OTk2NiwgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMS4wMDAxOSwgMS4wMDA4LCAxLCAwLjk5OTI0LCAwLjk5OTI0LCAwLjk5OTI0LCAwLjk5OTgzLCAxLjAwMDQ0LCAwLjk5OTczLCAwLjk5OTY0LCAwLjk4MzMyLCAxLCAwLjk5OTczLCAxLCAxLCAwLjk5OTYyLCAwLjk5ODk1LCAxLjAwMDE2LCAwLjk5OTc3LCAxLjAwMDE2LCAwLjk5OTc3LCAxLjAwMDE2LCAwLjk5OTc3LCAxLjAwMDAxLCAxLCAxLCAxLCAwLjk5OTczLCAxLCAxLCAwLjk5OTU1LCAwLjk5OTI0LCAwLjk5OTI0LCAwLjk5OTI0LCAwLjk5OTI0LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTcyLCAxLCAxLCAxLjAwMjY3LCAwLjk5OTk5LCAwLjk5OTk4LCAwLjk5OTk4LCAxLCAwLjk5OTk4LCAxLjY2NDc1LCAxLCAwLjk5OTczLCAwLjk5OTczLCAxLjAwMDIzLCAwLjk5OTczLCAxLjAwNDIzLCAwLjk5OTI1LCAwLjk5OTk5LCAxLCAwLjk5OTkxLCAwLjk5OTg0LCAxLjAwMDAyLCAxLjAwMDAyLCAxLjAwMDAyLCAxLjAwMDAyLCAxLjAwMDQ5LCAxLCAxLjAwMjQ1LCAxLCAxLCAxLCAxLCAwLjk2MzI5LCAxLCAxLjIwOTg1LCAxLjM5NzEzLCAxLjAwMDAzLCAwLjgyNTQsIDEuMDAwMTUsIDEsIDEuMDAwMzUsIDEuMDAwMjcsIDEuMDAwMzEsIDEuMDAwMzEsIDEuMDAwMDMsIDEuMDAwMzEsIDEuMDAwMzEsIDAuOTk5OTksIDEuMDAwMDMsIDAuOTk5OTksIDAuOTk5OTksIDEuNDExNDQsIDEuNiwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MDU3OSwgMS40MDU3OSwgMS4zNjYyNSwgMC45OTk5OSwgMSwgMC45OTg2MSwgMC45OTg2MSwgMSwgMS4wMDAyNiwgMS4wMDAyNiwgMS4wMDAyNiwgMS4wMDAyNiwgMC45NTMxNywgMC45OTk5OSwgMC45OTk5OSwgMC45OTk5OSwgMC45OTk5OSwgMS40MDQ4MywgMSwgMC45OTk3NywgMS4wMDA1NCwgMSwgMSwgMC45OTk1MywgMC45OTk2MiwgMS4wMDA0MiwgMC45OTk1LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxXTtcbmV4cG9ydHMuSGVsdmV0aWNhSXRhbGljRmFjdG9ycyA9IEhlbHZldGljYUl0YWxpY0ZhY3RvcnM7XG5jb25zdCBIZWx2ZXRpY2FJdGFsaWNNZXRyaWNzID0ge1xuICBsaW5lSGVpZ2h0OiAxLjM1LFxuICBsaW5lR2FwOiAwLjJcbn07XG5leHBvcnRzLkhlbHZldGljYUl0YWxpY01ldHJpY3MgPSBIZWx2ZXRpY2FJdGFsaWNNZXRyaWNzO1xuY29uc3QgSGVsdmV0aWNhUmVndWxhckZhY3RvcnMgPSBbMC43NjExNiwgMSwgMSwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwMDYsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5ODIsIDEuMDAwMDEsIDEuMDAwNDMsIDAuOTk5OTgsIDAuOTk5OTgsIDAuOTk5NTksIDEuMDAwMDMsIDEuMDAwNiwgMC45OTk5OCwgMS4wMDA2LCAxLjAwMDYsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDEuMDAwNiwgMSwgMS4wMDAwMywgMS4wMDAwMywgMS4wMDAwMywgMC45OTk3MywgMC45OTk4NywgMS4wMDAwMSwgMS4wMDAwMSwgMC45OTk3NywgMC45OTk3NywgMS4wMDAwMSwgMS4wMDAyNiwgMS4wMDAyMiwgMC45OTk3NywgMS4wMDA2LCAxLCAxLjAwMDAxLCAwLjk5OTczLCAwLjk5OTk5LCAwLjk5OTc3LCAxLjAwMDIyLCAxLjAwMDAxLCAxLjAwMDIyLCAwLjk5OTc3LCAxLjAwMDAxLCAxLjAwMDI2LCAwLjk5OTc3LCAxLjAwMDAxLCAxLjAwMDE2LCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDI2LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAwLjk5OTQ5LCAwLjk5OTczLCAwLjk5OTk4LCAwLjk5OTczLCAwLjk5OTczLCAxLCAwLjk5OTczLCAwLjk5OTczLCAxLjAwMDYsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5MjQsIDAuOTk5MjQsIDEsIDAuOTk5MjQsIDAuOTk5OTksIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5OTgsIDEsIDEuMDAwNiwgMC45OTk3MywgMSwgMC45OTk3NywgMSwgMSwgMSwgMS4wMDAwNSwgMS4wMDA5LCAxLjAwMDA1LCAxLjAwMDAzLCAwLjk5OTk4LCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAxLjAwMDksIDAuOTk5NzMsIDAuOTk5OTgsIDEuMDAwMjUsIDAuOTk5NjgsIDAuOTk5NzMsIDEuMDAwMDMsIDEuMDAwMjUsIDAuNjAyOTksIDEuMDAwMjQsIDEuMDY0MDksIDEsIDEsIDAuOTk5OTgsIDEsIDAuOTk5OCwgMS4wMDA2LCAwLjk5OTk4LCAxLCAwLjk5OTM2LCAwLjk5OTczLCAxLjAwMDAyLCAxLjAwMDAyLCAxLjAwMDAyLCAxLjAwMDI2LCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDAxLCAxLCAwLjk5OTc3LCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDAuOTk5NzcsIDAuOTk5NzcsIDEuMDAwMjIsIDEuMDAwMjIsIDEuMDAwMjIsIDEuMDAwMjIsIDEuMDAwMjIsIDEuMDAwMDMsIDEuMDAwMjIsIDAuOTk5NzcsIDAuOTk5NzcsIDAuOTk5NzcsIDAuOTk5NzcsIDEuMDAwMDEsIDEuMDAwMDEsIDEuMDAwMjYsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5ODIsIDEsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDAuOTk5NzMsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMS4wNjQwOSwgMS4wMDAyNiwgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMC45OTk3MywgMSwgMC45OTk3MywgMSwgMS4wMDAwMSwgMC45OTk3MywgMS4wMDAwMSwgMC45OTk3MywgMS4wMDAwMSwgMC45OTk3MywgMC45OTk3NywgMSwgMC45OTk3NywgMSwgMC45OTk3NywgMSwgMC45OTk3NywgMSwgMC45OTk3NywgMS4wNDU5NiwgMC45OTk3NywgMC45OTk3MywgMS4wMDAwMSwgMC45OTk3MywgMS4wMDAwMSwgMC45OTk3MywgMS4wMDAwMSwgMC45OTk3MywgMS4wMDAwMSwgMC45OTk3MywgMS4wMDAwMSwgMC45OTk3MywgMS4wMDAyMiwgMC45OTk3MywgMS4wMDAyMiwgMC45OTk3MywgMS4wMDAyMiwgMC45OTk3MywgMS4wMDAyMiwgMC45OTk3MywgMC45OTk3NywgMC45OTk3MywgMC45OTk3NywgMC45OTk3MywgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDA2LCAwLjk5OTI0LCAxLjAwMDYsIDEuMDAwNiwgMS4wMDAxOSwgMS4wMDAzNCwgMSwgMC45OTkyNCwgMS4wMDAwMSwgMSwgMSwgMC45OTk3MywgMC45OTkyNCwgMC45OTk3MywgMC45OTkyNCwgMC45OTk3MywgMS4wMjU3MiwgMC45OTk3MywgMS4wMDAwNSwgMC45OTk3MywgMC45OTkyNCwgMC45OTk3NywgMC45OTk3MywgMC45OTk3NywgMC45OTk3MywgMC45OTk3NywgMC45OTk3MywgMC45OTk5OSwgMC45OTk4LCAwLjk5OTczLCAxLjAwMDIyLCAwLjk5OTczLCAxLjAwMDIyLCAwLjk5OTczLCAxLjAwMDIyLCAwLjk5OTczLCAxLCAxLjAwMDE2LCAwLjk5OTc3LCAwLjk5OTk4LCAwLjk5OTc3LCAwLjk5OTk4LCAwLjk5OTc3LCAwLjk5OTk4LCAxLjAwMDAxLCAxLCAxLjAwMDAxLCAxLCAxLjAwMDAxLCAxLCAxLjAwMDAxLCAxLCAxLjAwMDI2LCAxLjAwMDYsIDEuMDAwMjYsIDAuODQ1MzMsIDEuMDAwMjYsIDEuMDAwNiwgMC45OTk3NywgMC45OTk3MywgMC45OTk3NywgMC45OTk3MywgMC45OTk3NywgMC45OTk3MywgMC45OTk3NywgMC45OTk3MywgMC45OTk3NywgMC45OTk3MywgMC45OTk3NywgMC45OTk3MywgMS4wMDAxNiwgMC45OTk3NywgMS4wMDAwMSwgMSwgMS4wMDAwMSwgMS4wMDAyNiwgMSwgMS4wMDAyNiwgMSwgMS4wMDAyNiwgMSwgMC45OTkyNCwgMC45OTk3MywgMS4wMDAwMSwgMC45OTk3MywgMSwgMC45OTk4MiwgMS4wMDAyMiwgMS4wMDAyNiwgMS4wMDAwMSwgMSwgMS4wMDAyNiwgMS4wMDA2LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTI4LCAxLCAwLjk5OTc3LCAxLjAwMDEzLCAxLjAwMDU1LCAwLjk5OTQ3LCAwLjk5OTQ1LCAwLjk5OTQxLCAwLjk5OTI0LCAxLjAwMDAxLCAxLjAwMDAxLCAxLjAwMDQsIDAuOTE2MjEsIDEuMDAwMDEsIDEuMDAwMjYsIDAuOTk5NzcsIDEuMDAwMjIsIDEuMDAwNiwgMS4wMDAwMSwgMS4wMDAwNSwgMC45OTk5OSwgMC45OTk3NywgMS4wMDAxNSwgMS4wMDAyMiwgMC45OTk3NywgMS4wMDAwMSwgMC45OTk3MywgMS4wMDAyNiwgMS4wMDAwMSwgMS4wMDAxOSwgMS4wMDAwMSwgMC45OTk0NiwgMSwgMS4wMDA2LCAxLjAwMDAxLCAwLjk5OTc4LCAxLjAwMDQ1LCAwLjk5OTczLCAwLjk5OTI0LCAxLjAwMDIzLCAwLjk5OTc4LCAwLjk5OTY2LCAxLCAxLjAwMDY1LCAxLjAwMDQ1LCAxLjAwMDE5LCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTI0LCAxLCAxLCAwLjk2NDk5LCAxLCAxLjAwMDU1LCAwLjk5OTczLCAxLjAwMDA4LCAxLjAwMDI3LCAxLCAwLjk5OTcsIDAuOTk5OTUsIDEuMDAwMjMsIDAuOTk5MzMsIDEuMDAwMTksIDEuMDAwMTUsIDEuMDAwMzEsIDAuOTk5MjQsIDEuMDAwMjMsIDAuOTk5NzMsIDEuMDAwMjMsIDEuMDAwMzEsIDEuMDAwMDEsIDAuOTk5MjgsIDEuMDAwMjksIDEuMDAwOTIsIDEuMDAwMzUsIDEuMDAwMDEsIDEuMDAwNiwgMS4wMDA2LCAxLCAwLjk5OTg4LCAwLjk5OTc1LCAxLCAxLjAwMDgyLCAwLjk5NTYxLCAwLjk5OTYsIDEuMDAwMzUsIDEuMDAwMDEsIDAuOTk5NjIsIDEuMDAwMDEsIDEuMDAwOTIsIDAuOTk5NjQsIDEuMDAwMDEsIDAuOTk5NjMsIDAuOTk5OTksIDEuMDAwMzUsIDEuMDAwMzUsIDEuMDAwODIsIDAuOTk5NjIsIDAuOTk5OTksIDAuOTk5NzcsIDEuMDAwMjIsIDEuMDAwMzUsIDEuMDAwMDEsIDAuOTk5NzcsIDEuMDAwMjYsIDAuOTk5NiwgMC45OTk2NywgMS4wMDAwMSwgMS4wMDAzNCwgMS4wMDA3NCwgMS4wMDA1NCwgMS4wMDA1MywgMS4wMDA2MywgMC45OTk3MSwgMC45OTk2MiwgMS4wMDAzNSwgMC45OTk3NSwgMC45OTk3NywgMC45OTk3MywgMS4wMDA0MywgMC45OTk1MywgMS4wMDA3LCAwLjk5OTE1LCAwLjk5OTczLCAxLjAwMDA4LCAwLjk5ODkyLCAxLjAwMDczLCAxLjAwMDczLCAxLjAwMTE0LCAwLjk5OTE1LCAxLjAwMDczLCAwLjk5OTU1LCAwLjk5OTczLCAxLjAwMDkyLCAwLjk5OTczLCAxLCAwLjk5OTk4LCAxLCAxLjAwMDMsIDEsIDEuMDAwNDMsIDEuMDAwMDEsIDAuOTk5NjksIDEuMDAwMywgMSwgMS4wMDAzNSwgMS4wMDAwMSwgMC45OTk1LCAxLCAxLjAwMDkyLCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTczLCAxLjAwMDcsIDAuOTk5NSwgMSwgMC45OTkyNCwgMS4wMDA2LCAwLjk5OTI0LCAwLjk5OTcyLCAxLjAwMDYyLCAwLjk5OTczLCAxLjAwMTE0LCAxLjAwMDczLCAxLCAwLjk5OTU1LCAxLCAxLCAxLjAwMDQ3LCAwLjk5OTY4LCAxLjAwMDE2LCAwLjk5OTc3LCAxLjAwMDE2LCAwLjk5OTc3LCAxLjAwMDE2LCAwLjk5OTc3LCAxLjAwMDAxLCAxLCAxLCAxLCAwLjk5OTczLCAxLCAxLCAwLjk5OTU1LCAwLjk5OTI0LCAwLjk5OTI0LCAwLjk5OTI0LCAwLjk5OTI0LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTk4LCAwLjk5OTczLCAwLjk5OTczLCAwLjk5OTcyLCAxLCAxLCAxLjAwMjY3LCAwLjk5OTk5LCAwLjk5OTk4LCAwLjk5OTk4LCAxLCAwLjk5OTk4LCAxLjY2NDc1LCAxLCAwLjk5OTczLCAwLjk5OTczLCAxLjAwMDIzLCAwLjk5OTczLCAwLjk5OTcxLCAwLjk5OTI1LCAxLjAwMDIzLCAxLCAwLjk5OTkxLCAwLjk5OTg0LCAxLjAwMDAyLCAxLjAwMDAyLCAxLjAwMDAyLCAxLjAwMDAyLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjk2MzI5LCAxLCAxLjIwOTg1LCAxLjM5NzEzLCAxLjAwMDAzLCAwLjgyNTQsIDEuMDAwMTUsIDEsIDEuMDAwMzUsIDEuMDAwMjcsIDEuMDAwMzEsIDEuMDAwMzEsIDAuOTk5MTUsIDEuMDAwMzEsIDEuMDAwMzEsIDAuOTk5OTksIDEuMDAwMDMsIDAuOTk5OTksIDAuOTk5OTksIDEuNDExNDQsIDEuNiwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MTE0NCwgMS40MDU3OSwgMS40MDU3OSwgMS4zNjYyNSwgMC45OTk5OSwgMSwgMC45OTg2MSwgMC45OTg2MSwgMSwgMS4wMDAyNiwgMS4wMDAyNiwgMS4wMDAyNiwgMS4wMDAyNiwgMC45NTMxNywgMC45OTk5OSwgMC45OTk5OSwgMC45OTk5OSwgMC45OTk5OSwgMS40MDQ4MywgMSwgMC45OTk3NywgMS4wMDA1NCwgMSwgMSwgMC45OTk1MywgMC45OTk2MiwgMS4wMDA0MiwgMC45OTk1LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxXTtcbmV4cG9ydHMuSGVsdmV0aWNhUmVndWxhckZhY3RvcnMgPSBIZWx2ZXRpY2FSZWd1bGFyRmFjdG9ycztcbmNvbnN0IEhlbHZldGljYVJlZ3VsYXJNZXRyaWNzID0ge1xuICBsaW5lSGVpZ2h0OiAxLjIsXG4gIGxpbmVHYXA6IDAuMlxufTtcbmV4cG9ydHMuSGVsdmV0aWNhUmVndWxhck1ldHJpY3MgPSBIZWx2ZXRpY2FSZWd1bGFyTWV0cmljcztcblxuLyoqKi8gfSksXG4vKiAxNSAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJXaWR0aHMgPSBleHBvcnRzLkxpYmVyYXRpb25TYW5zUmVndWxhck1hcHBpbmcgPSBleHBvcnRzLkxpYmVyYXRpb25TYW5zSXRhbGljV2lkdGhzID0gZXhwb3J0cy5MaWJlcmF0aW9uU2Fuc0l0YWxpY01hcHBpbmcgPSBleHBvcnRzLkxpYmVyYXRpb25TYW5zQm9sZFdpZHRocyA9IGV4cG9ydHMuTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZyA9IGV4cG9ydHMuTGliZXJhdGlvblNhbnNCb2xkSXRhbGljV2lkdGhzID0gZXhwb3J0cy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNNYXBwaW5nID0gdm9pZCAwO1xuY29uc3QgTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzID0gWzM2NSwgMCwgMzMzLCAyNzgsIDMzMywgNDc0LCA1NTYsIDU1NiwgODg5LCA3MjIsIDIzOCwgMzMzLCAzMzMsIDM4OSwgNTg0LCAyNzgsIDMzMywgMjc4LCAyNzgsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMzMzLCAzMzMsIDU4NCwgNTg0LCA1ODQsIDYxMSwgOTc1LCA3MjIsIDcyMiwgNzIyLCA3MjIsIDY2NywgNjExLCA3NzgsIDcyMiwgMjc4LCA1NTYsIDcyMiwgNjExLCA4MzMsIDcyMiwgNzc4LCA2NjcsIDc3OCwgNzIyLCA2NjcsIDYxMSwgNzIyLCA2NjcsIDk0NCwgNjY3LCA2NjcsIDYxMSwgMzMzLCAyNzgsIDMzMywgNTg0LCA1NTYsIDMzMywgNTU2LCA2MTEsIDU1NiwgNjExLCA1NTYsIDMzMywgNjExLCA2MTEsIDI3OCwgMjc4LCA1NTYsIDI3OCwgODg5LCA2MTEsIDYxMSwgNjExLCA2MTEsIDM4OSwgNTU2LCAzMzMsIDYxMSwgNTU2LCA3NzgsIDU1NiwgNTU2LCA1MDAsIDM4OSwgMjgwLCAzODksIDU4NCwgMzMzLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDI4MCwgNTU2LCAzMzMsIDczNywgMzcwLCA1NTYsIDU4NCwgNzM3LCA1NTIsIDQwMCwgNTQ5LCAzMzMsIDMzMywgMzMzLCA1NzYsIDU1NiwgMjc4LCAzMzMsIDMzMywgMzY1LCA1NTYsIDgzNCwgODM0LCA4MzQsIDYxMSwgNzIyLCA3MjIsIDcyMiwgNzIyLCA3MjIsIDcyMiwgMTAwMCwgNzIyLCA2NjcsIDY2NywgNjY3LCA2NjcsIDI3OCwgMjc4LCAyNzgsIDI3OCwgNzIyLCA3MjIsIDc3OCwgNzc4LCA3NzgsIDc3OCwgNzc4LCA1ODQsIDc3OCwgNzIyLCA3MjIsIDcyMiwgNzIyLCA2NjcsIDY2NywgNjExLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA4ODksIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDYxMSwgNjExLCA2MTEsIDYxMSwgNjExLCA2MTEsIDYxMSwgNTQ5LCA2MTEsIDYxMSwgNjExLCA2MTEsIDYxMSwgNTU2LCA2MTEsIDU1NiwgNzIyLCA1NTYsIDcyMiwgNTU2LCA3MjIsIDU1NiwgNzIyLCA1NTYsIDcyMiwgNTU2LCA3MjIsIDU1NiwgNzIyLCA1NTYsIDcyMiwgNzE5LCA3MjIsIDYxMSwgNjY3LCA1NTYsIDY2NywgNTU2LCA2NjcsIDU1NiwgNjY3LCA1NTYsIDY2NywgNTU2LCA3NzgsIDYxMSwgNzc4LCA2MTEsIDc3OCwgNjExLCA3NzgsIDYxMSwgNzIyLCA2MTEsIDcyMiwgNjExLCAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDc4NSwgNTU2LCA1NTYsIDI3OCwgNzIyLCA1NTYsIDU1NiwgNjExLCAyNzgsIDYxMSwgMjc4LCA2MTEsIDM4NSwgNjExLCA0NzksIDYxMSwgMjc4LCA3MjIsIDYxMSwgNzIyLCA2MTEsIDcyMiwgNjExLCA3MDgsIDcyMywgNjExLCA3NzgsIDYxMSwgNzc4LCA2MTEsIDc3OCwgNjExLCAxMDAwLCA5NDQsIDcyMiwgMzg5LCA3MjIsIDM4OSwgNzIyLCAzODksIDY2NywgNTU2LCA2NjcsIDU1NiwgNjY3LCA1NTYsIDY2NywgNTU2LCA2MTEsIDMzMywgNjExLCA0NzksIDYxMSwgMzMzLCA3MjIsIDYxMSwgNzIyLCA2MTEsIDcyMiwgNjExLCA3MjIsIDYxMSwgNzIyLCA2MTEsIDcyMiwgNjExLCA5NDQsIDc3OCwgNjY3LCA1NTYsIDY2NywgNjExLCA1MDAsIDYxMSwgNTAwLCA2MTEsIDUwMCwgMjc4LCA1NTYsIDcyMiwgNTU2LCAxMDAwLCA4ODksIDc3OCwgNjExLCA2NjcsIDU1NiwgNjExLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgNDY1LCA3MjIsIDMzMywgODUzLCA5MDYsIDQ3NCwgODI1LCA5MjcsIDgzOCwgMjc4LCA3MjIsIDcyMiwgNjAxLCA3MTksIDY2NywgNjExLCA3MjIsIDc3OCwgMjc4LCA3MjIsIDY2NywgODMzLCA3MjIsIDY0NCwgNzc4LCA3MjIsIDY2NywgNjAwLCA2MTEsIDY2NywgODIxLCA2NjcsIDgwOSwgODAyLCAyNzgsIDY2NywgNjE1LCA0NTEsIDYxMSwgMjc4LCA1ODIsIDYxNSwgNjEwLCA1NTYsIDYwNiwgNDc1LCA0NjAsIDYxMSwgNTQxLCAyNzgsIDU1OCwgNTU2LCA2MTIsIDU1NiwgNDQ1LCA2MTEsIDc2NiwgNjE5LCA1MjAsIDY4NCwgNDQ2LCA1ODIsIDcxNSwgNTc2LCA3NTMsIDg0NSwgMjc4LCA1ODIsIDYxMSwgNTgyLCA4NDUsIDY2NywgNjY5LCA4ODUsIDU2NywgNzExLCA2NjcsIDI3OCwgMjc2LCA1NTYsIDEwOTQsIDEwNjIsIDg3NSwgNjEwLCA3MjIsIDYyMiwgNzE5LCA3MjIsIDcxOSwgNzIyLCA1NjcsIDcxMiwgNjY3LCA5MDQsIDYyNiwgNzE5LCA3MTksIDYxMCwgNzAyLCA4MzMsIDcyMiwgNzc4LCA3MTksIDY2NywgNzIyLCA2MTEsIDYyMiwgODU0LCA2NjcsIDczMCwgNzAzLCAxMDA1LCAxMDE5LCA4NzAsIDk3OSwgNzE5LCA3MTEsIDEwMzEsIDcxOSwgNTU2LCA2MTgsIDYxNSwgNDE3LCA2MzUsIDU1NiwgNzA5LCA0OTcsIDYxNSwgNjE1LCA1MDAsIDYzNSwgNzQwLCA2MDQsIDYxMSwgNjA0LCA2MTEsIDU1NiwgNDkwLCA1NTYsIDg3NSwgNTU2LCA2MTUsIDU4MSwgODMzLCA4NDQsIDcyOSwgODU0LCA2MTUsIDU1MiwgODU0LCA1ODMsIDU1NiwgNTU2LCA2MTEsIDQxNywgNTUyLCA1NTYsIDI3OCwgMjgxLCAyNzgsIDk2OSwgOTA2LCA2MTEsIDUwMCwgNjE1LCA1NTYsIDYwNCwgNzc4LCA2MTEsIDQ4NywgNDQ3LCA5NDQsIDc3OCwgOTQ0LCA3NzgsIDk0NCwgNzc4LCA2NjcsIDU1NiwgMzMzLCAzMzMsIDU1NiwgMTAwMCwgMTAwMCwgNTUyLCAyNzgsIDI3OCwgMjc4LCAyNzgsIDUwMCwgNTAwLCA1MDAsIDU1NiwgNTU2LCAzNTAsIDEwMDAsIDEwMDAsIDI0MCwgNDc5LCAzMzMsIDMzMywgNjA0LCAzMzMsIDE2NywgMzk2LCA1NTYsIDU1NiwgMTA5NCwgNTU2LCA4ODUsIDQ4OSwgMTExNSwgMTAwMCwgNzY4LCA2MDAsIDgzNCwgODM0LCA4MzQsIDgzNCwgMTAwMCwgNTAwLCAxMDAwLCA1MDAsIDEwMDAsIDUwMCwgNTAwLCA0OTQsIDYxMiwgODIzLCA3MTMsIDU4NCwgNTQ5LCA3MTMsIDk3OSwgNzIyLCAyNzQsIDU0OSwgNTQ5LCA1ODMsIDU0OSwgNTQ5LCA2MDQsIDU4NCwgNjA0LCA2MDQsIDcwOCwgNjI1LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MjksIDYwNCwgNjA0LCAzNTQsIDM1NCwgMTAwMCwgOTkwLCA5OTAsIDk5MCwgOTkwLCA0OTQsIDYwNCwgNjA0LCA2MDQsIDYwNCwgMzU0LCAxMDIxLCAxMDUyLCA5MTcsIDc1MCwgNzUwLCA1MzEsIDY1NiwgNTk0LCA1MTAsIDUwMCwgNzUwLCA3NTAsIDYxMSwgNjExLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMjIyLCAyMjIsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzXTtcbmV4cG9ydHMuTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzID0gTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzO1xuY29uc3QgTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZyA9IFstMSwgLTEsIC0xLCAzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LCAzOCwgMzksIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsIDY0LCA2NSwgNjYsIDY3LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NCwgNzUsIDc2LCA3NywgNzgsIDc5LCA4MCwgODEsIDgyLCA4MywgODQsIDg1LCA4NiwgODcsIDg4LCA4OSwgOTAsIDkxLCA5MiwgOTMsIDk0LCA5NSwgOTYsIDk3LCA5OCwgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsIDExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDE2MSwgMTYyLCAxNjMsIDE2NCwgMTY1LCAxNjYsIDE2NywgMTY4LCAxNjksIDE3MCwgMTcxLCAxNzIsIDE3NCwgMTc1LCAxNzYsIDE3NywgMTc4LCAxNzksIDE4MCwgMTgxLCAxODIsIDE4MywgMTg0LCAxODUsIDE4NiwgMTg3LCAxODgsIDE4OSwgMTkwLCAxOTEsIDE5MiwgMTkzLCAxOTQsIDE5NSwgMTk2LCAxOTcsIDE5OCwgMTk5LCAyMDAsIDIwMSwgMjAyLCAyMDMsIDIwNCwgMjA1LCAyMDYsIDIwNywgMjA4LCAyMDksIDIxMCwgMjExLCAyMTIsIDIxMywgMjE0LCAyMTUsIDIxNiwgMjE3LCAyMTgsIDIxOSwgMjIwLCAyMjEsIDIyMiwgMjIzLCAyMjQsIDIyNSwgMjI2LCAyMjcsIDIyOCwgMjI5LCAyMzAsIDIzMSwgMjMyLCAyMzMsIDIzNCwgMjM1LCAyMzYsIDIzNywgMjM4LCAyMzksIDI0MCwgMjQxLCAyNDIsIDI0MywgMjQ0LCAyNDUsIDI0NiwgMjQ3LCAyNDgsIDI0OSwgMjUwLCAyNTEsIDI1MiwgMjUzLCAyNTQsIDI1NSwgMjU2LCAyNTcsIDI1OCwgMjU5LCAyNjAsIDI2MSwgMjYyLCAyNjMsIDI2NCwgMjY1LCAyNjYsIDI2NywgMjY4LCAyNjksIDI3MCwgMjcxLCAyNzIsIDI3MywgMjc0LCAyNzUsIDI3NiwgMjc3LCAyNzgsIDI3OSwgMjgwLCAyODEsIDI4MiwgMjgzLCAyODQsIDI4NSwgMjg2LCAyODcsIDI4OCwgMjg5LCAyOTAsIDI5MSwgMjkyLCAyOTMsIDI5NCwgMjk1LCAyOTYsIDI5NywgMjk4LCAyOTksIDMwMCwgMzAxLCAzMDIsIDMwMywgMzA0LCAzMDUsIDMwNiwgMzA3LCAzMDgsIDMwOSwgMzEwLCAzMTEsIDMxMiwgMzEzLCAzMTQsIDMxNSwgMzE2LCAzMTcsIDMxOCwgMzE5LCAzMjAsIDMyMSwgMzIyLCAzMjMsIDMyNCwgMzI1LCAzMjYsIDMyNywgMzI4LCAzMjksIDMzMCwgMzMxLCAzMzIsIDMzMywgMzM0LCAzMzUsIDMzNiwgMzM3LCAzMzgsIDMzOSwgMzQwLCAzNDEsIDM0MiwgMzQzLCAzNDQsIDM0NSwgMzQ2LCAzNDcsIDM0OCwgMzQ5LCAzNTAsIDM1MSwgMzUyLCAzNTMsIDM1NCwgMzU1LCAzNTYsIDM1NywgMzU4LCAzNTksIDM2MCwgMzYxLCAzNjIsIDM2MywgMzY0LCAzNjUsIDM2NiwgMzY3LCAzNjgsIDM2OSwgMzcwLCAzNzEsIDM3MiwgMzczLCAzNzQsIDM3NSwgMzc2LCAzNzcsIDM3OCwgMzc5LCAzODAsIDM4MSwgMzgyLCAzODMsIDQwMiwgNTA2LCA1MDcsIDUwOCwgNTA5LCA1MTAsIDUxMSwgNTM2LCA1MzcsIDUzOCwgNTM5LCA3MTAsIDcxMSwgNzEzLCA3MjgsIDcyOSwgNzMwLCA3MzEsIDczMiwgNzMzLCA5MDAsIDkwMSwgOTAyLCA5MDMsIDkwNCwgOTA1LCA5MDYsIDkwOCwgOTEwLCA5MTEsIDkxMiwgOTEzLCA5MTQsIDkxNSwgOTE2LCA5MTcsIDkxOCwgOTE5LCA5MjAsIDkyMSwgOTIyLCA5MjMsIDkyNCwgOTI1LCA5MjYsIDkyNywgOTI4LCA5MjksIDkzMSwgOTMyLCA5MzMsIDkzNCwgOTM1LCA5MzYsIDkzNywgOTM4LCA5MzksIDk0MCwgOTQxLCA5NDIsIDk0MywgOTQ0LCA5NDUsIDk0NiwgOTQ3LCA5NDgsIDk0OSwgOTUwLCA5NTEsIDk1MiwgOTUzLCA5NTQsIDk1NSwgOTU2LCA5NTcsIDk1OCwgOTU5LCA5NjAsIDk2MSwgOTYyLCA5NjMsIDk2NCwgOTY1LCA5NjYsIDk2NywgOTY4LCA5NjksIDk3MCwgOTcxLCA5NzIsIDk3MywgOTc0LCAxMDI0LCAxMDI1LCAxMDI2LCAxMDI3LCAxMDI4LCAxMDI5LCAxMDMwLCAxMDMxLCAxMDMyLCAxMDMzLCAxMDM0LCAxMDM1LCAxMDM2LCAxMDM3LCAxMDM4LCAxMDM5LCAxMDQwLCAxMDQxLCAxMDQyLCAxMDQzLCAxMDQ0LCAxMDQ1LCAxMDQ2LCAxMDQ3LCAxMDQ4LCAxMDQ5LCAxMDUwLCAxMDUxLCAxMDUyLCAxMDUzLCAxMDU0LCAxMDU1LCAxMDU2LCAxMDU3LCAxMDU4LCAxMDU5LCAxMDYwLCAxMDYxLCAxMDYyLCAxMDYzLCAxMDY0LCAxMDY1LCAxMDY2LCAxMDY3LCAxMDY4LCAxMDY5LCAxMDcwLCAxMDcxLCAxMDcyLCAxMDczLCAxMDc0LCAxMDc1LCAxMDc2LCAxMDc3LCAxMDc4LCAxMDc5LCAxMDgwLCAxMDgxLCAxMDgyLCAxMDgzLCAxMDg0LCAxMDg1LCAxMDg2LCAxMDg3LCAxMDg4LCAxMDg5LCAxMDkwLCAxMDkxLCAxMDkyLCAxMDkzLCAxMDk0LCAxMDk1LCAxMDk2LCAxMDk3LCAxMDk4LCAxMDk5LCAxMTAwLCAxMTAxLCAxMTAyLCAxMTAzLCAxMTA0LCAxMTA1LCAxMTA2LCAxMTA3LCAxMTA4LCAxMTA5LCAxMTEwLCAxMTExLCAxMTEyLCAxMTEzLCAxMTE0LCAxMTE1LCAxMTE2LCAxMTE3LCAxMTE4LCAxMTE5LCAxMTM4LCAxMTM5LCAxMTY4LCAxMTY5LCA3ODA4LCA3ODA5LCA3ODEwLCA3ODExLCA3ODEyLCA3ODEzLCA3OTIyLCA3OTIzLCA4MjA4LCA4MjA5LCA4MjExLCA4MjEyLCA4MjEzLCA4MjE1LCA4MjE2LCA4MjE3LCA4MjE4LCA4MjE5LCA4MjIwLCA4MjIxLCA4MjIyLCA4MjI0LCA4MjI1LCA4MjI2LCA4MjMwLCA4MjQwLCA4MjQyLCA4MjQzLCA4MjQ5LCA4MjUwLCA4MjUyLCA4MjU0LCA4MjYwLCA4MzE5LCA4MzU1LCA4MzU2LCA4MzU5LCA4MzY0LCA4NDUzLCA4NDY3LCA4NDcwLCA4NDgyLCA4NDg2LCA4NDk0LCA4NTM5LCA4NTQwLCA4NTQxLCA4NTQyLCA4NTkyLCA4NTkzLCA4NTk0LCA4NTk1LCA4NTk2LCA4NTk3LCA4NjE2LCA4NzA2LCA4NzEwLCA4NzE5LCA4NzIxLCA4NzIyLCA4NzMwLCA4NzM0LCA4NzM1LCA4NzQ1LCA4NzQ3LCA4Nzc2LCA4ODAwLCA4ODAxLCA4ODA0LCA4ODA1LCA4OTYyLCA4OTc2LCA4OTkyLCA4OTkzLCA5NDcyLCA5NDc0LCA5NDg0LCA5NDg4LCA5NDkyLCA5NDk2LCA5NTAwLCA5NTA4LCA5NTE2LCA5NTI0LCA5NTMyLCA5NTUyLCA5NTUzLCA5NTU0LCA5NTU1LCA5NTU2LCA5NTU3LCA5NTU4LCA5NTU5LCA5NTYwLCA5NTYxLCA5NTYyLCA5NTYzLCA5NTY0LCA5NTY1LCA5NTY2LCA5NTY3LCA5NTY4LCA5NTY5LCA5NTcwLCA5NTcxLCA5NTcyLCA5NTczLCA5NTc0LCA5NTc1LCA5NTc2LCA5NTc3LCA5NTc4LCA5NTc5LCA5NTgwLCA5NjAwLCA5NjA0LCA5NjA4LCA5NjEyLCA5NjE2LCA5NjE3LCA5NjE4LCA5NjE5LCA5NjMyLCA5NjMzLCA5NjQyLCA5NjQzLCA5NjQ0LCA5NjUwLCA5NjU4LCA5NjYwLCA5NjY4LCA5Njc0LCA5Njc1LCA5Njc5LCA5Njg4LCA5Njg5LCA5NzAyLCA5Nzg2LCA5Nzg3LCA5Nzg4LCA5NzkyLCA5Nzk0LCA5ODI0LCA5ODI3LCA5ODI5LCA5ODMwLCA5ODM0LCA5ODM1LCA5ODM2LCA2MTQ0MSwgNjE0NDIsIDYxNDQ1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTFdO1xuZXhwb3J0cy5MaWJlcmF0aW9uU2Fuc0JvbGRNYXBwaW5nID0gTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZztcbmNvbnN0IExpYmVyYXRpb25TYW5zQm9sZEl0YWxpY1dpZHRocyA9IFszNjUsIDAsIDMzMywgMjc4LCAzMzMsIDQ3NCwgNTU2LCA1NTYsIDg4OSwgNzIyLCAyMzgsIDMzMywgMzMzLCAzODksIDU4NCwgMjc4LCAzMzMsIDI3OCwgMjc4LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDMzMywgMzMzLCA1ODQsIDU4NCwgNTg0LCA2MTEsIDk3NSwgNzIyLCA3MjIsIDcyMiwgNzIyLCA2NjcsIDYxMSwgNzc4LCA3MjIsIDI3OCwgNTU2LCA3MjIsIDYxMSwgODMzLCA3MjIsIDc3OCwgNjY3LCA3NzgsIDcyMiwgNjY3LCA2MTEsIDcyMiwgNjY3LCA5NDQsIDY2NywgNjY3LCA2MTEsIDMzMywgMjc4LCAzMzMsIDU4NCwgNTU2LCAzMzMsIDU1NiwgNjExLCA1NTYsIDYxMSwgNTU2LCAzMzMsIDYxMSwgNjExLCAyNzgsIDI3OCwgNTU2LCAyNzgsIDg4OSwgNjExLCA2MTEsIDYxMSwgNjExLCAzODksIDU1NiwgMzMzLCA2MTEsIDU1NiwgNzc4LCA1NTYsIDU1NiwgNTAwLCAzODksIDI4MCwgMzg5LCA1ODQsIDMzMywgNTU2LCA1NTYsIDU1NiwgNTU2LCAyODAsIDU1NiwgMzMzLCA3MzcsIDM3MCwgNTU2LCA1ODQsIDczNywgNTUyLCA0MDAsIDU0OSwgMzMzLCAzMzMsIDMzMywgNTc2LCA1NTYsIDI3OCwgMzMzLCAzMzMsIDM2NSwgNTU2LCA4MzQsIDgzNCwgODM0LCA2MTEsIDcyMiwgNzIyLCA3MjIsIDcyMiwgNzIyLCA3MjIsIDEwMDAsIDcyMiwgNjY3LCA2NjcsIDY2NywgNjY3LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDcyMiwgNzIyLCA3NzgsIDc3OCwgNzc4LCA3NzgsIDc3OCwgNTg0LCA3NzgsIDcyMiwgNzIyLCA3MjIsIDcyMiwgNjY3LCA2NjcsIDYxMSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgODg5LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjc4LCAyNzgsIDI3OCwgMjc4LCA2MTEsIDYxMSwgNjExLCA2MTEsIDYxMSwgNjExLCA2MTEsIDU0OSwgNjExLCA2MTEsIDYxMSwgNjExLCA2MTEsIDU1NiwgNjExLCA1NTYsIDcyMiwgNTU2LCA3MjIsIDU1NiwgNzIyLCA1NTYsIDcyMiwgNTU2LCA3MjIsIDU1NiwgNzIyLCA1NTYsIDcyMiwgNTU2LCA3MjIsIDc0MCwgNzIyLCA2MTEsIDY2NywgNTU2LCA2NjcsIDU1NiwgNjY3LCA1NTYsIDY2NywgNTU2LCA2NjcsIDU1NiwgNzc4LCA2MTEsIDc3OCwgNjExLCA3NzgsIDYxMSwgNzc4LCA2MTEsIDcyMiwgNjExLCA3MjIsIDYxMSwgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCA3ODIsIDU1NiwgNTU2LCAyNzgsIDcyMiwgNTU2LCA1NTYsIDYxMSwgMjc4LCA2MTEsIDI3OCwgNjExLCAzOTYsIDYxMSwgNDc5LCA2MTEsIDI3OCwgNzIyLCA2MTEsIDcyMiwgNjExLCA3MjIsIDYxMSwgNzA4LCA3MjMsIDYxMSwgNzc4LCA2MTEsIDc3OCwgNjExLCA3NzgsIDYxMSwgMTAwMCwgOTQ0LCA3MjIsIDM4OSwgNzIyLCAzODksIDcyMiwgMzg5LCA2NjcsIDU1NiwgNjY3LCA1NTYsIDY2NywgNTU2LCA2NjcsIDU1NiwgNjExLCAzMzMsIDYxMSwgNDc5LCA2MTEsIDMzMywgNzIyLCA2MTEsIDcyMiwgNjExLCA3MjIsIDYxMSwgNzIyLCA2MTEsIDcyMiwgNjExLCA3MjIsIDYxMSwgOTQ0LCA3NzgsIDY2NywgNTU2LCA2NjcsIDYxMSwgNTAwLCA2MTEsIDUwMCwgNjExLCA1MDAsIDI3OCwgNTU2LCA3MjIsIDU1NiwgMTAwMCwgODg5LCA3NzgsIDYxMSwgNjY3LCA1NTYsIDYxMSwgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgNzIyLCAzMzMsIDg1NCwgOTA2LCA0NzMsIDg0NCwgOTMwLCA4NDcsIDI3OCwgNzIyLCA3MjIsIDYxMCwgNjcxLCA2NjcsIDYxMSwgNzIyLCA3NzgsIDI3OCwgNzIyLCA2NjcsIDgzMywgNzIyLCA2NTcsIDc3OCwgNzE4LCA2NjcsIDU5MCwgNjExLCA2NjcsIDgyMiwgNjY3LCA4MjksIDc4MSwgMjc4LCA2NjcsIDYyMCwgNDc5LCA2MTEsIDI3OCwgNTkxLCA2MjAsIDYyMSwgNTU2LCA2MTAsIDQ3OSwgNDkyLCA2MTEsIDU1OCwgMjc4LCA1NjYsIDU1NiwgNjAzLCA1NTYsIDQ1MCwgNjExLCA3MTIsIDYwNSwgNTMyLCA2NjQsIDQwOSwgNTkxLCA3MDQsIDU3OCwgNzczLCA4MzQsIDI3OCwgNTkxLCA2MTEsIDU5MSwgODM0LCA2NjcsIDY2NywgODg2LCA2MTQsIDcxOSwgNjY3LCAyNzgsIDI3OCwgNTU2LCAxMDk0LCAxMDQyLCA4NTQsIDYyMiwgNzE5LCA2NzcsIDcxOSwgNzIyLCA3MDgsIDcyMiwgNjE0LCA3MjIsIDY2NywgOTI3LCA2NDMsIDcxOSwgNzE5LCA2MTUsIDY4NywgODMzLCA3MjIsIDc3OCwgNzE5LCA2NjcsIDcyMiwgNjExLCA2NzcsIDc4MSwgNjY3LCA3MjksIDcwOCwgOTc5LCA5ODksIDg1NCwgMTAwMCwgNzA4LCA3MTksIDEwNDIsIDcyOSwgNTU2LCA2MTksIDYwNCwgNTM0LCA2MTgsIDU1NiwgNzM2LCA1MTAsIDYxMSwgNjExLCA1MDcsIDYyMiwgNzQwLCA2MDQsIDYxMSwgNjExLCA2MTEsIDU1NiwgODg5LCA1NTYsIDg4NSwgNTU2LCA2NDYsIDU4MywgODg5LCA5MzUsIDcwNywgODU0LCA1OTQsIDU1MiwgODY1LCA1ODksIDU1NiwgNTU2LCA2MTEsIDQ2OSwgNTYzLCA1NTYsIDI3OCwgMjc4LCAyNzgsIDk2OSwgOTA2LCA2MTEsIDUwNywgNjE5LCA1NTYsIDYxMSwgNzc4LCA2MTEsIDU3NSwgNDY3LCA5NDQsIDc3OCwgOTQ0LCA3NzgsIDk0NCwgNzc4LCA2NjcsIDU1NiwgMzMzLCAzMzMsIDU1NiwgMTAwMCwgMTAwMCwgNTUyLCAyNzgsIDI3OCwgMjc4LCAyNzgsIDUwMCwgNTAwLCA1MDAsIDU1NiwgNTU2LCAzNTAsIDEwMDAsIDEwMDAsIDI0MCwgNDc5LCAzMzMsIDMzMywgNjA0LCAzMzMsIDE2NywgMzk2LCA1NTYsIDU1NiwgMTEwNCwgNTU2LCA4ODUsIDUxNiwgMTE0NiwgMTAwMCwgNzY4LCA2MDAsIDgzNCwgODM0LCA4MzQsIDgzNCwgOTk5LCA1MDAsIDEwMDAsIDUwMCwgMTAwMCwgNTAwLCA1MDAsIDQ5NCwgNjEyLCA4MjMsIDcxMywgNTg0LCA1NDksIDcxMywgOTc5LCA3MjIsIDI3NCwgNTQ5LCA1NDksIDU4MywgNTQ5LCA1NDksIDYwNCwgNTg0LCA2MDQsIDYwNCwgNzA4LCA2MjUsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcyOSwgNjA0LCA2MDQsIDM1NCwgMzU0LCAxMDAwLCA5OTAsIDk5MCwgOTkwLCA5OTAsIDQ5NCwgNjA0LCA2MDQsIDYwNCwgNjA0LCAzNTQsIDEwMjEsIDEwNTIsIDkxNywgNzUwLCA3NTAsIDUzMSwgNjU2LCA1OTQsIDUxMCwgNTAwLCA3NTAsIDc1MCwgNjExLCA2MTEsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAyMjIsIDIyMiwgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzNdO1xuZXhwb3J0cy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNXaWR0aHMgPSBMaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNXaWR0aHM7XG5jb25zdCBMaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNNYXBwaW5nID0gWy0xLCAtMSwgLTEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCA1NywgNTgsIDU5LCA2MCwgNjEsIDYyLCA2MywgNjQsIDY1LCA2NiwgNjcsIDY4LCA2OSwgNzAsIDcxLCA3MiwgNzMsIDc0LCA3NSwgNzYsIDc3LCA3OCwgNzksIDgwLCA4MSwgODIsIDgzLCA4NCwgODUsIDg2LCA4NywgODgsIDg5LCA5MCwgOTEsIDkyLCA5MywgOTQsIDk1LCA5NiwgOTcsIDk4LCA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwgMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTYxLCAxNjIsIDE2MywgMTY0LCAxNjUsIDE2NiwgMTY3LCAxNjgsIDE2OSwgMTcwLCAxNzEsIDE3MiwgMTc0LCAxNzUsIDE3NiwgMTc3LCAxNzgsIDE3OSwgMTgwLCAxODEsIDE4MiwgMTgzLCAxODQsIDE4NSwgMTg2LCAxODcsIDE4OCwgMTg5LCAxOTAsIDE5MSwgMTkyLCAxOTMsIDE5NCwgMTk1LCAxOTYsIDE5NywgMTk4LCAxOTksIDIwMCwgMjAxLCAyMDIsIDIwMywgMjA0LCAyMDUsIDIwNiwgMjA3LCAyMDgsIDIwOSwgMjEwLCAyMTEsIDIxMiwgMjEzLCAyMTQsIDIxNSwgMjE2LCAyMTcsIDIxOCwgMjE5LCAyMjAsIDIyMSwgMjIyLCAyMjMsIDIyNCwgMjI1LCAyMjYsIDIyNywgMjI4LCAyMjksIDIzMCwgMjMxLCAyMzIsIDIzMywgMjM0LCAyMzUsIDIzNiwgMjM3LCAyMzgsIDIzOSwgMjQwLCAyNDEsIDI0MiwgMjQzLCAyNDQsIDI0NSwgMjQ2LCAyNDcsIDI0OCwgMjQ5LCAyNTAsIDI1MSwgMjUyLCAyNTMsIDI1NCwgMjU1LCAyNTYsIDI1NywgMjU4LCAyNTksIDI2MCwgMjYxLCAyNjIsIDI2MywgMjY0LCAyNjUsIDI2NiwgMjY3LCAyNjgsIDI2OSwgMjcwLCAyNzEsIDI3MiwgMjczLCAyNzQsIDI3NSwgMjc2LCAyNzcsIDI3OCwgMjc5LCAyODAsIDI4MSwgMjgyLCAyODMsIDI4NCwgMjg1LCAyODYsIDI4NywgMjg4LCAyODksIDI5MCwgMjkxLCAyOTIsIDI5MywgMjk0LCAyOTUsIDI5NiwgMjk3LCAyOTgsIDI5OSwgMzAwLCAzMDEsIDMwMiwgMzAzLCAzMDQsIDMwNSwgMzA2LCAzMDcsIDMwOCwgMzA5LCAzMTAsIDMxMSwgMzEyLCAzMTMsIDMxNCwgMzE1LCAzMTYsIDMxNywgMzE4LCAzMTksIDMyMCwgMzIxLCAzMjIsIDMyMywgMzI0LCAzMjUsIDMyNiwgMzI3LCAzMjgsIDMyOSwgMzMwLCAzMzEsIDMzMiwgMzMzLCAzMzQsIDMzNSwgMzM2LCAzMzcsIDMzOCwgMzM5LCAzNDAsIDM0MSwgMzQyLCAzNDMsIDM0NCwgMzQ1LCAzNDYsIDM0NywgMzQ4LCAzNDksIDM1MCwgMzUxLCAzNTIsIDM1MywgMzU0LCAzNTUsIDM1NiwgMzU3LCAzNTgsIDM1OSwgMzYwLCAzNjEsIDM2MiwgMzYzLCAzNjQsIDM2NSwgMzY2LCAzNjcsIDM2OCwgMzY5LCAzNzAsIDM3MSwgMzcyLCAzNzMsIDM3NCwgMzc1LCAzNzYsIDM3NywgMzc4LCAzNzksIDM4MCwgMzgxLCAzODIsIDM4MywgNDAyLCA1MDYsIDUwNywgNTA4LCA1MDksIDUxMCwgNTExLCA1MzYsIDUzNywgNTM4LCA1MzksIDcxMCwgNzExLCA3MTMsIDcyOCwgNzI5LCA3MzAsIDczMSwgNzMyLCA3MzMsIDkwMCwgOTAxLCA5MDIsIDkwMywgOTA0LCA5MDUsIDkwNiwgOTA4LCA5MTAsIDkxMSwgOTEyLCA5MTMsIDkxNCwgOTE1LCA5MTYsIDkxNywgOTE4LCA5MTksIDkyMCwgOTIxLCA5MjIsIDkyMywgOTI0LCA5MjUsIDkyNiwgOTI3LCA5MjgsIDkyOSwgOTMxLCA5MzIsIDkzMywgOTM0LCA5MzUsIDkzNiwgOTM3LCA5MzgsIDkzOSwgOTQwLCA5NDEsIDk0MiwgOTQzLCA5NDQsIDk0NSwgOTQ2LCA5NDcsIDk0OCwgOTQ5LCA5NTAsIDk1MSwgOTUyLCA5NTMsIDk1NCwgOTU1LCA5NTYsIDk1NywgOTU4LCA5NTksIDk2MCwgOTYxLCA5NjIsIDk2MywgOTY0LCA5NjUsIDk2NiwgOTY3LCA5NjgsIDk2OSwgOTcwLCA5NzEsIDk3MiwgOTczLCA5NzQsIDEwMjQsIDEwMjUsIDEwMjYsIDEwMjcsIDEwMjgsIDEwMjksIDEwMzAsIDEwMzEsIDEwMzIsIDEwMzMsIDEwMzQsIDEwMzUsIDEwMzYsIDEwMzcsIDEwMzgsIDEwMzksIDEwNDAsIDEwNDEsIDEwNDIsIDEwNDMsIDEwNDQsIDEwNDUsIDEwNDYsIDEwNDcsIDEwNDgsIDEwNDksIDEwNTAsIDEwNTEsIDEwNTIsIDEwNTMsIDEwNTQsIDEwNTUsIDEwNTYsIDEwNTcsIDEwNTgsIDEwNTksIDEwNjAsIDEwNjEsIDEwNjIsIDEwNjMsIDEwNjQsIDEwNjUsIDEwNjYsIDEwNjcsIDEwNjgsIDEwNjksIDEwNzAsIDEwNzEsIDEwNzIsIDEwNzMsIDEwNzQsIDEwNzUsIDEwNzYsIDEwNzcsIDEwNzgsIDEwNzksIDEwODAsIDEwODEsIDEwODIsIDEwODMsIDEwODQsIDEwODUsIDEwODYsIDEwODcsIDEwODgsIDEwODksIDEwOTAsIDEwOTEsIDEwOTIsIDEwOTMsIDEwOTQsIDEwOTUsIDEwOTYsIDEwOTcsIDEwOTgsIDEwOTksIDExMDAsIDExMDEsIDExMDIsIDExMDMsIDExMDQsIDExMDUsIDExMDYsIDExMDcsIDExMDgsIDExMDksIDExMTAsIDExMTEsIDExMTIsIDExMTMsIDExMTQsIDExMTUsIDExMTYsIDExMTcsIDExMTgsIDExMTksIDExMzgsIDExMzksIDExNjgsIDExNjksIDc4MDgsIDc4MDksIDc4MTAsIDc4MTEsIDc4MTIsIDc4MTMsIDc5MjIsIDc5MjMsIDgyMDgsIDgyMDksIDgyMTEsIDgyMTIsIDgyMTMsIDgyMTUsIDgyMTYsIDgyMTcsIDgyMTgsIDgyMTksIDgyMjAsIDgyMjEsIDgyMjIsIDgyMjQsIDgyMjUsIDgyMjYsIDgyMzAsIDgyNDAsIDgyNDIsIDgyNDMsIDgyNDksIDgyNTAsIDgyNTIsIDgyNTQsIDgyNjAsIDgzMTksIDgzNTUsIDgzNTYsIDgzNTksIDgzNjQsIDg0NTMsIDg0NjcsIDg0NzAsIDg0ODIsIDg0ODYsIDg0OTQsIDg1MzksIDg1NDAsIDg1NDEsIDg1NDIsIDg1OTIsIDg1OTMsIDg1OTQsIDg1OTUsIDg1OTYsIDg1OTcsIDg2MTYsIDg3MDYsIDg3MTAsIDg3MTksIDg3MjEsIDg3MjIsIDg3MzAsIDg3MzQsIDg3MzUsIDg3NDUsIDg3NDcsIDg3NzYsIDg4MDAsIDg4MDEsIDg4MDQsIDg4MDUsIDg5NjIsIDg5NzYsIDg5OTIsIDg5OTMsIDk0NzIsIDk0NzQsIDk0ODQsIDk0ODgsIDk0OTIsIDk0OTYsIDk1MDAsIDk1MDgsIDk1MTYsIDk1MjQsIDk1MzIsIDk1NTIsIDk1NTMsIDk1NTQsIDk1NTUsIDk1NTYsIDk1NTcsIDk1NTgsIDk1NTksIDk1NjAsIDk1NjEsIDk1NjIsIDk1NjMsIDk1NjQsIDk1NjUsIDk1NjYsIDk1NjcsIDk1NjgsIDk1NjksIDk1NzAsIDk1NzEsIDk1NzIsIDk1NzMsIDk1NzQsIDk1NzUsIDk1NzYsIDk1NzcsIDk1NzgsIDk1NzksIDk1ODAsIDk2MDAsIDk2MDQsIDk2MDgsIDk2MTIsIDk2MTYsIDk2MTcsIDk2MTgsIDk2MTksIDk2MzIsIDk2MzMsIDk2NDIsIDk2NDMsIDk2NDQsIDk2NTAsIDk2NTgsIDk2NjAsIDk2NjgsIDk2NzQsIDk2NzUsIDk2NzksIDk2ODgsIDk2ODksIDk3MDIsIDk3ODYsIDk3ODcsIDk3ODgsIDk3OTIsIDk3OTQsIDk4MjQsIDk4MjcsIDk4MjksIDk4MzAsIDk4MzQsIDk4MzUsIDk4MzYsIDYxNDQxLCA2MTQ0MiwgNjE0NDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMV07XG5leHBvcnRzLkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY01hcHBpbmcgPSBMaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNNYXBwaW5nO1xuY29uc3QgTGliZXJhdGlvblNhbnNJdGFsaWNXaWR0aHMgPSBbMzY1LCAwLCAzMzMsIDI3OCwgMjc4LCAzNTUsIDU1NiwgNTU2LCA4ODksIDY2NywgMTkxLCAzMzMsIDMzMywgMzg5LCA1ODQsIDI3OCwgMzMzLCAyNzgsIDI3OCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyNzgsIDI3OCwgNTg0LCA1ODQsIDU4NCwgNTU2LCAxMDE1LCA2NjcsIDY2NywgNzIyLCA3MjIsIDY2NywgNjExLCA3NzgsIDcyMiwgMjc4LCA1MDAsIDY2NywgNTU2LCA4MzMsIDcyMiwgNzc4LCA2NjcsIDc3OCwgNzIyLCA2NjcsIDYxMSwgNzIyLCA2NjcsIDk0NCwgNjY3LCA2NjcsIDYxMSwgMjc4LCAyNzgsIDI3OCwgNDY5LCA1NTYsIDMzMywgNTU2LCA1NTYsIDUwMCwgNTU2LCA1NTYsIDI3OCwgNTU2LCA1NTYsIDIyMiwgMjIyLCA1MDAsIDIyMiwgODMzLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDMzMywgNTAwLCAyNzgsIDU1NiwgNTAwLCA3MjIsIDUwMCwgNTAwLCA1MDAsIDMzNCwgMjYwLCAzMzQsIDU4NCwgMzMzLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDI2MCwgNTU2LCAzMzMsIDczNywgMzcwLCA1NTYsIDU4NCwgNzM3LCA1NTIsIDQwMCwgNTQ5LCAzMzMsIDMzMywgMzMzLCA1NzYsIDUzNywgMjc4LCAzMzMsIDMzMywgMzY1LCA1NTYsIDgzNCwgODM0LCA4MzQsIDYxMSwgNjY3LCA2NjcsIDY2NywgNjY3LCA2NjcsIDY2NywgMTAwMCwgNzIyLCA2NjcsIDY2NywgNjY3LCA2NjcsIDI3OCwgMjc4LCAyNzgsIDI3OCwgNzIyLCA3MjIsIDc3OCwgNzc4LCA3NzgsIDc3OCwgNzc4LCA1ODQsIDc3OCwgNzIyLCA3MjIsIDcyMiwgNzIyLCA2NjcsIDY2NywgNjExLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA4ODksIDUwMCwgNTU2LCA1NTYsIDU1NiwgNTU2LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTQ5LCA2MTEsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTAwLCA1NTYsIDUwMCwgNjY3LCA1NTYsIDY2NywgNTU2LCA2NjcsIDU1NiwgNzIyLCA1MDAsIDcyMiwgNTAwLCA3MjIsIDUwMCwgNzIyLCA1MDAsIDcyMiwgNjI1LCA3MjIsIDU1NiwgNjY3LCA1NTYsIDY2NywgNTU2LCA2NjcsIDU1NiwgNjY3LCA1NTYsIDY2NywgNTU2LCA3NzgsIDU1NiwgNzc4LCA1NTYsIDc3OCwgNTU2LCA3NzgsIDU1NiwgNzIyLCA1NTYsIDcyMiwgNTU2LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDIyMiwgMjc4LCAyNzgsIDczMywgNDQ0LCA1MDAsIDIyMiwgNjY3LCA1MDAsIDUwMCwgNTU2LCAyMjIsIDU1NiwgMjIyLCA1NTYsIDI4MSwgNTU2LCA0MDAsIDU1NiwgMjIyLCA3MjIsIDU1NiwgNzIyLCA1NTYsIDcyMiwgNTU2LCA2MTUsIDcyMywgNTU2LCA3NzgsIDU1NiwgNzc4LCA1NTYsIDc3OCwgNTU2LCAxMDAwLCA5NDQsIDcyMiwgMzMzLCA3MjIsIDMzMywgNzIyLCAzMzMsIDY2NywgNTAwLCA2NjcsIDUwMCwgNjY3LCA1MDAsIDY2NywgNTAwLCA2MTEsIDI3OCwgNjExLCAzNTQsIDYxMSwgMjc4LCA3MjIsIDU1NiwgNzIyLCA1NTYsIDcyMiwgNTU2LCA3MjIsIDU1NiwgNzIyLCA1NTYsIDcyMiwgNTU2LCA5NDQsIDcyMiwgNjY3LCA1MDAsIDY2NywgNjExLCA1MDAsIDYxMSwgNTAwLCA2MTEsIDUwMCwgMjIyLCA1NTYsIDY2NywgNTU2LCAxMDAwLCA4ODksIDc3OCwgNjExLCA2NjcsIDUwMCwgNjExLCAyNzgsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCA2NjcsIDI3OCwgNzg5LCA4NDYsIDM4OSwgNzk0LCA4NjUsIDc3NSwgMjIyLCA2NjcsIDY2NywgNTcwLCA2NzEsIDY2NywgNjExLCA3MjIsIDc3OCwgMjc4LCA2NjcsIDY2NywgODMzLCA3MjIsIDY0OCwgNzc4LCA3MjUsIDY2NywgNjAwLCA2MTEsIDY2NywgODM3LCA2NjcsIDgzMSwgNzYxLCAyNzgsIDY2NywgNTcwLCA0MzksIDU1NSwgMjIyLCA1NTAsIDU3MCwgNTcxLCA1MDAsIDU1NiwgNDM5LCA0NjMsIDU1NSwgNTQyLCAyMjIsIDUwMCwgNDkyLCA1NDgsIDUwMCwgNDQ3LCA1NTYsIDY3MCwgNTczLCA0ODYsIDYwMywgMzc0LCA1NTAsIDY1MiwgNTQ2LCA3MjgsIDc3OSwgMjIyLCA1NTAsIDU1NiwgNTUwLCA3NzksIDY2NywgNjY3LCA4NDMsIDU0NCwgNzA4LCA2NjcsIDI3OCwgMjc4LCA1MDAsIDEwNjYsIDk4MiwgODQ0LCA1ODksIDcxNSwgNjM5LCA3MjQsIDY2NywgNjUxLCA2NjcsIDU0NCwgNzA0LCA2NjcsIDkxNywgNjE0LCA3MTUsIDcxNSwgNTg5LCA2ODYsIDgzMywgNzIyLCA3NzgsIDcyNSwgNjY3LCA3MjIsIDYxMSwgNjM5LCA3OTUsIDY2NywgNzI3LCA2NzMsIDkyMCwgOTIzLCA4MDUsIDg4NiwgNjUxLCA2OTQsIDEwMjIsIDY4MiwgNTU2LCA1NjIsIDUyMiwgNDkzLCA1NTMsIDU1NiwgNjg4LCA0NjUsIDU1NiwgNTU2LCA0NzIsIDU2NCwgNjg2LCA1NTAsIDU1NiwgNTU2LCA1NTYsIDUwMCwgODMzLCA1MDAsIDgzNSwgNTAwLCA1NzIsIDUxOCwgODMwLCA4NTEsIDYyMSwgNzM2LCA1MjYsIDQ5MiwgNzUyLCA1MzQsIDU1NiwgNTU2LCA1NTYsIDM3OCwgNDk2LCA1MDAsIDIyMiwgMjIyLCAyMjIsIDkxMCwgODI4LCA1NTYsIDQ3MiwgNTY1LCA1MDAsIDU1NiwgNzc4LCA1NTYsIDQ5MiwgMzM5LCA5NDQsIDcyMiwgOTQ0LCA3MjIsIDk0NCwgNzIyLCA2NjcsIDUwMCwgMzMzLCAzMzMsIDU1NiwgMTAwMCwgMTAwMCwgNTUyLCAyMjIsIDIyMiwgMjIyLCAyMjIsIDMzMywgMzMzLCAzMzMsIDU1NiwgNTU2LCAzNTAsIDEwMDAsIDEwMDAsIDE4OCwgMzU0LCAzMzMsIDMzMywgNTAwLCAzMzMsIDE2NywgMzY1LCA1NTYsIDU1NiwgMTA5NCwgNTU2LCA4ODUsIDMyMywgMTA4MywgMTAwMCwgNzY4LCA2MDAsIDgzNCwgODM0LCA4MzQsIDgzNCwgMTAwMCwgNTAwLCA5OTgsIDUwMCwgMTAwMCwgNTAwLCA1MDAsIDQ5NCwgNjEyLCA4MjMsIDcxMywgNTg0LCA1NDksIDcxMywgOTc5LCA3MTksIDI3NCwgNTQ5LCA1NDksIDU4NCwgNTQ5LCA1NDksIDYwNCwgNTg0LCA2MDQsIDYwNCwgNzA4LCA2MjUsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcyOSwgNjA0LCA2MDQsIDM1NCwgMzU0LCAxMDAwLCA5OTAsIDk5MCwgOTkwLCA5OTAsIDQ5NCwgNjA0LCA2MDQsIDYwNCwgNjA0LCAzNTQsIDEwMjEsIDEwNTIsIDkxNywgNzUwLCA3NTAsIDUzMSwgNjU2LCA1OTQsIDUxMCwgNTAwLCA3NTAsIDc1MCwgNTAwLCA1MDAsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAyMjIsIDIyMiwgMjk0LCAyOTQsIDMyNCwgMzI0LCAzMTYsIDMyOCwgMzk4LCAyODVdO1xuZXhwb3J0cy5MaWJlcmF0aW9uU2Fuc0l0YWxpY1dpZHRocyA9IExpYmVyYXRpb25TYW5zSXRhbGljV2lkdGhzO1xuY29uc3QgTGliZXJhdGlvblNhbnNJdGFsaWNNYXBwaW5nID0gWy0xLCAtMSwgLTEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCA1NywgNTgsIDU5LCA2MCwgNjEsIDYyLCA2MywgNjQsIDY1LCA2NiwgNjcsIDY4LCA2OSwgNzAsIDcxLCA3MiwgNzMsIDc0LCA3NSwgNzYsIDc3LCA3OCwgNzksIDgwLCA4MSwgODIsIDgzLCA4NCwgODUsIDg2LCA4NywgODgsIDg5LCA5MCwgOTEsIDkyLCA5MywgOTQsIDk1LCA5NiwgOTcsIDk4LCA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDEwOCwgMTA5LCAxMTAsIDExMSwgMTEyLCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTE4LCAxMTksIDEyMCwgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTYxLCAxNjIsIDE2MywgMTY0LCAxNjUsIDE2NiwgMTY3LCAxNjgsIDE2OSwgMTcwLCAxNzEsIDE3MiwgMTc0LCAxNzUsIDE3NiwgMTc3LCAxNzgsIDE3OSwgMTgwLCAxODEsIDE4MiwgMTgzLCAxODQsIDE4NSwgMTg2LCAxODcsIDE4OCwgMTg5LCAxOTAsIDE5MSwgMTkyLCAxOTMsIDE5NCwgMTk1LCAxOTYsIDE5NywgMTk4LCAxOTksIDIwMCwgMjAxLCAyMDIsIDIwMywgMjA0LCAyMDUsIDIwNiwgMjA3LCAyMDgsIDIwOSwgMjEwLCAyMTEsIDIxMiwgMjEzLCAyMTQsIDIxNSwgMjE2LCAyMTcsIDIxOCwgMjE5LCAyMjAsIDIyMSwgMjIyLCAyMjMsIDIyNCwgMjI1LCAyMjYsIDIyNywgMjI4LCAyMjksIDIzMCwgMjMxLCAyMzIsIDIzMywgMjM0LCAyMzUsIDIzNiwgMjM3LCAyMzgsIDIzOSwgMjQwLCAyNDEsIDI0MiwgMjQzLCAyNDQsIDI0NSwgMjQ2LCAyNDcsIDI0OCwgMjQ5LCAyNTAsIDI1MSwgMjUyLCAyNTMsIDI1NCwgMjU1LCAyNTYsIDI1NywgMjU4LCAyNTksIDI2MCwgMjYxLCAyNjIsIDI2MywgMjY0LCAyNjUsIDI2NiwgMjY3LCAyNjgsIDI2OSwgMjcwLCAyNzEsIDI3MiwgMjczLCAyNzQsIDI3NSwgMjc2LCAyNzcsIDI3OCwgMjc5LCAyODAsIDI4MSwgMjgyLCAyODMsIDI4NCwgMjg1LCAyODYsIDI4NywgMjg4LCAyODksIDI5MCwgMjkxLCAyOTIsIDI5MywgMjk0LCAyOTUsIDI5NiwgMjk3LCAyOTgsIDI5OSwgMzAwLCAzMDEsIDMwMiwgMzAzLCAzMDQsIDMwNSwgMzA2LCAzMDcsIDMwOCwgMzA5LCAzMTAsIDMxMSwgMzEyLCAzMTMsIDMxNCwgMzE1LCAzMTYsIDMxNywgMzE4LCAzMTksIDMyMCwgMzIxLCAzMjIsIDMyMywgMzI0LCAzMjUsIDMyNiwgMzI3LCAzMjgsIDMyOSwgMzMwLCAzMzEsIDMzMiwgMzMzLCAzMzQsIDMzNSwgMzM2LCAzMzcsIDMzOCwgMzM5LCAzNDAsIDM0MSwgMzQyLCAzNDMsIDM0NCwgMzQ1LCAzNDYsIDM0NywgMzQ4LCAzNDksIDM1MCwgMzUxLCAzNTIsIDM1MywgMzU0LCAzNTUsIDM1NiwgMzU3LCAzNTgsIDM1OSwgMzYwLCAzNjEsIDM2MiwgMzYzLCAzNjQsIDM2NSwgMzY2LCAzNjcsIDM2OCwgMzY5LCAzNzAsIDM3MSwgMzcyLCAzNzMsIDM3NCwgMzc1LCAzNzYsIDM3NywgMzc4LCAzNzksIDM4MCwgMzgxLCAzODIsIDM4MywgNDAyLCA1MDYsIDUwNywgNTA4LCA1MDksIDUxMCwgNTExLCA1MzYsIDUzNywgNTM4LCA1MzksIDcxMCwgNzExLCA3MTMsIDcyOCwgNzI5LCA3MzAsIDczMSwgNzMyLCA3MzMsIDkwMCwgOTAxLCA5MDIsIDkwMywgOTA0LCA5MDUsIDkwNiwgOTA4LCA5MTAsIDkxMSwgOTEyLCA5MTMsIDkxNCwgOTE1LCA5MTYsIDkxNywgOTE4LCA5MTksIDkyMCwgOTIxLCA5MjIsIDkyMywgOTI0LCA5MjUsIDkyNiwgOTI3LCA5MjgsIDkyOSwgOTMxLCA5MzIsIDkzMywgOTM0LCA5MzUsIDkzNiwgOTM3LCA5MzgsIDkzOSwgOTQwLCA5NDEsIDk0MiwgOTQzLCA5NDQsIDk0NSwgOTQ2LCA5NDcsIDk0OCwgOTQ5LCA5NTAsIDk1MSwgOTUyLCA5NTMsIDk1NCwgOTU1LCA5NTYsIDk1NywgOTU4LCA5NTksIDk2MCwgOTYxLCA5NjIsIDk2MywgOTY0LCA5NjUsIDk2NiwgOTY3LCA5NjgsIDk2OSwgOTcwLCA5NzEsIDk3MiwgOTczLCA5NzQsIDEwMjQsIDEwMjUsIDEwMjYsIDEwMjcsIDEwMjgsIDEwMjksIDEwMzAsIDEwMzEsIDEwMzIsIDEwMzMsIDEwMzQsIDEwMzUsIDEwMzYsIDEwMzcsIDEwMzgsIDEwMzksIDEwNDAsIDEwNDEsIDEwNDIsIDEwNDMsIDEwNDQsIDEwNDUsIDEwNDYsIDEwNDcsIDEwNDgsIDEwNDksIDEwNTAsIDEwNTEsIDEwNTIsIDEwNTMsIDEwNTQsIDEwNTUsIDEwNTYsIDEwNTcsIDEwNTgsIDEwNTksIDEwNjAsIDEwNjEsIDEwNjIsIDEwNjMsIDEwNjQsIDEwNjUsIDEwNjYsIDEwNjcsIDEwNjgsIDEwNjksIDEwNzAsIDEwNzEsIDEwNzIsIDEwNzMsIDEwNzQsIDEwNzUsIDEwNzYsIDEwNzcsIDEwNzgsIDEwNzksIDEwODAsIDEwODEsIDEwODIsIDEwODMsIDEwODQsIDEwODUsIDEwODYsIDEwODcsIDEwODgsIDEwODksIDEwOTAsIDEwOTEsIDEwOTIsIDEwOTMsIDEwOTQsIDEwOTUsIDEwOTYsIDEwOTcsIDEwOTgsIDEwOTksIDExMDAsIDExMDEsIDExMDIsIDExMDMsIDExMDQsIDExMDUsIDExMDYsIDExMDcsIDExMDgsIDExMDksIDExMTAsIDExMTEsIDExMTIsIDExMTMsIDExMTQsIDExMTUsIDExMTYsIDExMTcsIDExMTgsIDExMTksIDExMzgsIDExMzksIDExNjgsIDExNjksIDc4MDgsIDc4MDksIDc4MTAsIDc4MTEsIDc4MTIsIDc4MTMsIDc5MjIsIDc5MjMsIDgyMDgsIDgyMDksIDgyMTEsIDgyMTIsIDgyMTMsIDgyMTUsIDgyMTYsIDgyMTcsIDgyMTgsIDgyMTksIDgyMjAsIDgyMjEsIDgyMjIsIDgyMjQsIDgyMjUsIDgyMjYsIDgyMzAsIDgyNDAsIDgyNDIsIDgyNDMsIDgyNDksIDgyNTAsIDgyNTIsIDgyNTQsIDgyNjAsIDgzMTksIDgzNTUsIDgzNTYsIDgzNTksIDgzNjQsIDg0NTMsIDg0NjcsIDg0NzAsIDg0ODIsIDg0ODYsIDg0OTQsIDg1MzksIDg1NDAsIDg1NDEsIDg1NDIsIDg1OTIsIDg1OTMsIDg1OTQsIDg1OTUsIDg1OTYsIDg1OTcsIDg2MTYsIDg3MDYsIDg3MTAsIDg3MTksIDg3MjEsIDg3MjIsIDg3MzAsIDg3MzQsIDg3MzUsIDg3NDUsIDg3NDcsIDg3NzYsIDg4MDAsIDg4MDEsIDg4MDQsIDg4MDUsIDg5NjIsIDg5NzYsIDg5OTIsIDg5OTMsIDk0NzIsIDk0NzQsIDk0ODQsIDk0ODgsIDk0OTIsIDk0OTYsIDk1MDAsIDk1MDgsIDk1MTYsIDk1MjQsIDk1MzIsIDk1NTIsIDk1NTMsIDk1NTQsIDk1NTUsIDk1NTYsIDk1NTcsIDk1NTgsIDk1NTksIDk1NjAsIDk1NjEsIDk1NjIsIDk1NjMsIDk1NjQsIDk1NjUsIDk1NjYsIDk1NjcsIDk1NjgsIDk1NjksIDk1NzAsIDk1NzEsIDk1NzIsIDk1NzMsIDk1NzQsIDk1NzUsIDk1NzYsIDk1NzcsIDk1NzgsIDk1NzksIDk1ODAsIDk2MDAsIDk2MDQsIDk2MDgsIDk2MTIsIDk2MTYsIDk2MTcsIDk2MTgsIDk2MTksIDk2MzIsIDk2MzMsIDk2NDIsIDk2NDMsIDk2NDQsIDk2NTAsIDk2NTgsIDk2NjAsIDk2NjgsIDk2NzQsIDk2NzUsIDk2NzksIDk2ODgsIDk2ODksIDk3MDIsIDk3ODYsIDk3ODcsIDk3ODgsIDk3OTIsIDk3OTQsIDk4MjQsIDk4MjcsIDk4MjksIDk4MzAsIDk4MzQsIDk4MzUsIDk4MzYsIDYxNDQxLCA2MTQ0MiwgNjE0NDUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMV07XG5leHBvcnRzLkxpYmVyYXRpb25TYW5zSXRhbGljTWFwcGluZyA9IExpYmVyYXRpb25TYW5zSXRhbGljTWFwcGluZztcbmNvbnN0IExpYmVyYXRpb25TYW5zUmVndWxhcldpZHRocyA9IFszNjUsIDAsIDMzMywgMjc4LCAyNzgsIDM1NSwgNTU2LCA1NTYsIDg4OSwgNjY3LCAxOTEsIDMzMywgMzMzLCAzODksIDU4NCwgMjc4LCAzMzMsIDI3OCwgMjc4LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDI3OCwgMjc4LCA1ODQsIDU4NCwgNTg0LCA1NTYsIDEwMTUsIDY2NywgNjY3LCA3MjIsIDcyMiwgNjY3LCA2MTEsIDc3OCwgNzIyLCAyNzgsIDUwMCwgNjY3LCA1NTYsIDgzMywgNzIyLCA3NzgsIDY2NywgNzc4LCA3MjIsIDY2NywgNjExLCA3MjIsIDY2NywgOTQ0LCA2NjcsIDY2NywgNjExLCAyNzgsIDI3OCwgMjc4LCA0NjksIDU1NiwgMzMzLCA1NTYsIDU1NiwgNTAwLCA1NTYsIDU1NiwgMjc4LCA1NTYsIDU1NiwgMjIyLCAyMjIsIDUwMCwgMjIyLCA4MzMsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMzMzLCA1MDAsIDI3OCwgNTU2LCA1MDAsIDcyMiwgNTAwLCA1MDAsIDUwMCwgMzM0LCAyNjAsIDMzNCwgNTg0LCAzMzMsIDU1NiwgNTU2LCA1NTYsIDU1NiwgMjYwLCA1NTYsIDMzMywgNzM3LCAzNzAsIDU1NiwgNTg0LCA3MzcsIDU1MiwgNDAwLCA1NDksIDMzMywgMzMzLCAzMzMsIDU3NiwgNTM3LCAyNzgsIDMzMywgMzMzLCAzNjUsIDU1NiwgODM0LCA4MzQsIDgzNCwgNjExLCA2NjcsIDY2NywgNjY3LCA2NjcsIDY2NywgNjY3LCAxMDAwLCA3MjIsIDY2NywgNjY3LCA2NjcsIDY2NywgMjc4LCAyNzgsIDI3OCwgMjc4LCA3MjIsIDcyMiwgNzc4LCA3NzgsIDc3OCwgNzc4LCA3NzgsIDU4NCwgNzc4LCA3MjIsIDcyMiwgNzIyLCA3MjIsIDY2NywgNjY3LCA2MTEsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDg4OSwgNTAwLCA1NTYsIDU1NiwgNTU2LCA1NTYsIDI3OCwgMjc4LCAyNzgsIDI3OCwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1NDksIDYxMSwgNTU2LCA1NTYsIDU1NiwgNTU2LCA1MDAsIDU1NiwgNTAwLCA2NjcsIDU1NiwgNjY3LCA1NTYsIDY2NywgNTU2LCA3MjIsIDUwMCwgNzIyLCA1MDAsIDcyMiwgNTAwLCA3MjIsIDUwMCwgNzIyLCA2MTUsIDcyMiwgNTU2LCA2NjcsIDU1NiwgNjY3LCA1NTYsIDY2NywgNTU2LCA2NjcsIDU1NiwgNjY3LCA1NTYsIDc3OCwgNTU2LCA3NzgsIDU1NiwgNzc4LCA1NTYsIDc3OCwgNTU2LCA3MjIsIDU1NiwgNzIyLCA1NTYsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjIyLCAyNzgsIDI3OCwgNzM1LCA0NDQsIDUwMCwgMjIyLCA2NjcsIDUwMCwgNTAwLCA1NTYsIDIyMiwgNTU2LCAyMjIsIDU1NiwgMjkyLCA1NTYsIDMzNCwgNTU2LCAyMjIsIDcyMiwgNTU2LCA3MjIsIDU1NiwgNzIyLCA1NTYsIDYwNCwgNzIzLCA1NTYsIDc3OCwgNTU2LCA3NzgsIDU1NiwgNzc4LCA1NTYsIDEwMDAsIDk0NCwgNzIyLCAzMzMsIDcyMiwgMzMzLCA3MjIsIDMzMywgNjY3LCA1MDAsIDY2NywgNTAwLCA2NjcsIDUwMCwgNjY3LCA1MDAsIDYxMSwgMjc4LCA2MTEsIDM3NSwgNjExLCAyNzgsIDcyMiwgNTU2LCA3MjIsIDU1NiwgNzIyLCA1NTYsIDcyMiwgNTU2LCA3MjIsIDU1NiwgNzIyLCA1NTYsIDk0NCwgNzIyLCA2NjcsIDUwMCwgNjY3LCA2MTEsIDUwMCwgNjExLCA1MDAsIDYxMSwgNTAwLCAyMjIsIDU1NiwgNjY3LCA1NTYsIDEwMDAsIDg4OSwgNzc4LCA2MTEsIDY2NywgNTAwLCA2MTEsIDI3OCwgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDY2NywgMjc4LCA3ODQsIDgzOCwgMzg0LCA3NzQsIDg1NSwgNzUyLCAyMjIsIDY2NywgNjY3LCA1NTEsIDY2OCwgNjY3LCA2MTEsIDcyMiwgNzc4LCAyNzgsIDY2NywgNjY4LCA4MzMsIDcyMiwgNjUwLCA3NzgsIDcyMiwgNjY3LCA2MTgsIDYxMSwgNjY3LCA3OTgsIDY2NywgODM1LCA3NDgsIDI3OCwgNjY3LCA1NzgsIDQ0NiwgNTU2LCAyMjIsIDU0NywgNTc4LCA1NzUsIDUwMCwgNTU3LCA0NDYsIDQ0MSwgNTU2LCA1NTYsIDIyMiwgNTAwLCA1MDAsIDU3NiwgNTAwLCA0NDgsIDU1NiwgNjkwLCA1NjksIDQ4MiwgNjE3LCAzOTUsIDU0NywgNjQ4LCA1MjUsIDcxMywgNzgxLCAyMjIsIDU0NywgNTU2LCA1NDcsIDc4MSwgNjY3LCA2NjcsIDg2NSwgNTQyLCA3MTksIDY2NywgMjc4LCAyNzgsIDUwMCwgMTA1NywgMTAxMCwgODU0LCA1ODMsIDcyMiwgNjM1LCA3MTksIDY2NywgNjU2LCA2NjcsIDU0MiwgNjc3LCA2NjcsIDkyMywgNjA0LCA3MTksIDcxOSwgNTgzLCA2NTYsIDgzMywgNzIyLCA3NzgsIDcxOSwgNjY3LCA3MjIsIDYxMSwgNjM1LCA3NjAsIDY2NywgNzQwLCA2NjcsIDkxNywgOTM4LCA3OTIsIDg4NSwgNjU2LCA3MTksIDEwMTAsIDcyMiwgNTU2LCA1NzMsIDUzMSwgMzY1LCA1ODMsIDU1NiwgNjY5LCA0NTgsIDU1OSwgNTU5LCA0MzgsIDU4MywgNjg4LCA1NTIsIDU1NiwgNTQyLCA1NTYsIDUwMCwgNDU4LCA1MDAsIDgyMywgNTAwLCA1NzMsIDUyMSwgODAyLCA4MjMsIDYyNSwgNzE5LCA1MjEsIDUxMCwgNzUwLCA1NDIsIDU1NiwgNTU2LCA1NTYsIDM2NSwgNTEwLCA1MDAsIDIyMiwgMjc4LCAyMjIsIDkwNiwgODEyLCA1NTYsIDQzOCwgNTU5LCA1MDAsIDU1MiwgNzc4LCA1NTYsIDQ4OSwgNDExLCA5NDQsIDcyMiwgOTQ0LCA3MjIsIDk0NCwgNzIyLCA2NjcsIDUwMCwgMzMzLCAzMzMsIDU1NiwgMTAwMCwgMTAwMCwgNTUyLCAyMjIsIDIyMiwgMjIyLCAyMjIsIDMzMywgMzMzLCAzMzMsIDU1NiwgNTU2LCAzNTAsIDEwMDAsIDEwMDAsIDE4OCwgMzU0LCAzMzMsIDMzMywgNTAwLCAzMzMsIDE2NywgMzY1LCA1NTYsIDU1NiwgMTA5NCwgNTU2LCA4ODUsIDMyMywgMTA3MywgMTAwMCwgNzY4LCA2MDAsIDgzNCwgODM0LCA4MzQsIDgzNCwgMTAwMCwgNTAwLCAxMDAwLCA1MDAsIDEwMDAsIDUwMCwgNTAwLCA0OTQsIDYxMiwgODIzLCA3MTMsIDU4NCwgNTQ5LCA3MTMsIDk3OSwgNzE5LCAyNzQsIDU0OSwgNTQ5LCA1ODMsIDU0OSwgNTQ5LCA2MDQsIDU4NCwgNjA0LCA2MDQsIDcwOCwgNjI1LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MDgsIDcwOCwgNzA4LCA3MjksIDYwNCwgNjA0LCAzNTQsIDM1NCwgMTAwMCwgOTkwLCA5OTAsIDk5MCwgOTkwLCA0OTQsIDYwNCwgNjA0LCA2MDQsIDYwNCwgMzU0LCAxMDIxLCAxMDUyLCA5MTcsIDc1MCwgNzUwLCA1MzEsIDY1NiwgNTk0LCA1MTAsIDUwMCwgNzUwLCA3NTAsIDUwMCwgNTAwLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMzMzLCAzMzMsIDMzMywgMjIyLCAyMjIsIDI5NCwgMjk0LCAzMjQsIDMyNCwgMzE2LCAzMjgsIDM5OCwgMjg1XTtcbmV4cG9ydHMuTGliZXJhdGlvblNhbnNSZWd1bGFyV2lkdGhzID0gTGliZXJhdGlvblNhbnNSZWd1bGFyV2lkdGhzO1xuY29uc3QgTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZyA9IFstMSwgLTEsIC0xLCAzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LCAzOCwgMzksIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LCA1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsIDY0LCA2NSwgNjYsIDY3LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3NCwgNzUsIDc2LCA3NywgNzgsIDc5LCA4MCwgODEsIDgyLCA4MywgODQsIDg1LCA4NiwgODcsIDg4LCA4OSwgOTAsIDkxLCA5MiwgOTMsIDk0LCA5NSwgOTYsIDk3LCA5OCwgOTksIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwgMTEwLCAxMTEsIDExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LCAxMjAsIDEyMSwgMTIyLCAxMjMsIDEyNCwgMTI1LCAxMjYsIDE2MSwgMTYyLCAxNjMsIDE2NCwgMTY1LCAxNjYsIDE2NywgMTY4LCAxNjksIDE3MCwgMTcxLCAxNzIsIDE3NCwgMTc1LCAxNzYsIDE3NywgMTc4LCAxNzksIDE4MCwgMTgxLCAxODIsIDE4MywgMTg0LCAxODUsIDE4NiwgMTg3LCAxODgsIDE4OSwgMTkwLCAxOTEsIDE5MiwgMTkzLCAxOTQsIDE5NSwgMTk2LCAxOTcsIDE5OCwgMTk5LCAyMDAsIDIwMSwgMjAyLCAyMDMsIDIwNCwgMjA1LCAyMDYsIDIwNywgMjA4LCAyMDksIDIxMCwgMjExLCAyMTIsIDIxMywgMjE0LCAyMTUsIDIxNiwgMjE3LCAyMTgsIDIxOSwgMjIwLCAyMjEsIDIyMiwgMjIzLCAyMjQsIDIyNSwgMjI2LCAyMjcsIDIyOCwgMjI5LCAyMzAsIDIzMSwgMjMyLCAyMzMsIDIzNCwgMjM1LCAyMzYsIDIzNywgMjM4LCAyMzksIDI0MCwgMjQxLCAyNDIsIDI0MywgMjQ0LCAyNDUsIDI0NiwgMjQ3LCAyNDgsIDI0OSwgMjUwLCAyNTEsIDI1MiwgMjUzLCAyNTQsIDI1NSwgMjU2LCAyNTcsIDI1OCwgMjU5LCAyNjAsIDI2MSwgMjYyLCAyNjMsIDI2NCwgMjY1LCAyNjYsIDI2NywgMjY4LCAyNjksIDI3MCwgMjcxLCAyNzIsIDI3MywgMjc0LCAyNzUsIDI3NiwgMjc3LCAyNzgsIDI3OSwgMjgwLCAyODEsIDI4MiwgMjgzLCAyODQsIDI4NSwgMjg2LCAyODcsIDI4OCwgMjg5LCAyOTAsIDI5MSwgMjkyLCAyOTMsIDI5NCwgMjk1LCAyOTYsIDI5NywgMjk4LCAyOTksIDMwMCwgMzAxLCAzMDIsIDMwMywgMzA0LCAzMDUsIDMwNiwgMzA3LCAzMDgsIDMwOSwgMzEwLCAzMTEsIDMxMiwgMzEzLCAzMTQsIDMxNSwgMzE2LCAzMTcsIDMxOCwgMzE5LCAzMjAsIDMyMSwgMzIyLCAzMjMsIDMyNCwgMzI1LCAzMjYsIDMyNywgMzI4LCAzMjksIDMzMCwgMzMxLCAzMzIsIDMzMywgMzM0LCAzMzUsIDMzNiwgMzM3LCAzMzgsIDMzOSwgMzQwLCAzNDEsIDM0MiwgMzQzLCAzNDQsIDM0NSwgMzQ2LCAzNDcsIDM0OCwgMzQ5LCAzNTAsIDM1MSwgMzUyLCAzNTMsIDM1NCwgMzU1LCAzNTYsIDM1NywgMzU4LCAzNTksIDM2MCwgMzYxLCAzNjIsIDM2MywgMzY0LCAzNjUsIDM2NiwgMzY3LCAzNjgsIDM2OSwgMzcwLCAzNzEsIDM3MiwgMzczLCAzNzQsIDM3NSwgMzc2LCAzNzcsIDM3OCwgMzc5LCAzODAsIDM4MSwgMzgyLCAzODMsIDQwMiwgNTA2LCA1MDcsIDUwOCwgNTA5LCA1MTAsIDUxMSwgNTM2LCA1MzcsIDUzOCwgNTM5LCA3MTAsIDcxMSwgNzEzLCA3MjgsIDcyOSwgNzMwLCA3MzEsIDczMiwgNzMzLCA5MDAsIDkwMSwgOTAyLCA5MDMsIDkwNCwgOTA1LCA5MDYsIDkwOCwgOTEwLCA5MTEsIDkxMiwgOTEzLCA5MTQsIDkxNSwgOTE2LCA5MTcsIDkxOCwgOTE5LCA5MjAsIDkyMSwgOTIyLCA5MjMsIDkyNCwgOTI1LCA5MjYsIDkyNywgOTI4LCA5MjksIDkzMSwgOTMyLCA5MzMsIDkzNCwgOTM1LCA5MzYsIDkzNywgOTM4LCA5MzksIDk0MCwgOTQxLCA5NDIsIDk0MywgOTQ0LCA5NDUsIDk0NiwgOTQ3LCA5NDgsIDk0OSwgOTUwLCA5NTEsIDk1MiwgOTUzLCA5NTQsIDk1NSwgOTU2LCA5NTcsIDk1OCwgOTU5LCA5NjAsIDk2MSwgOTYyLCA5NjMsIDk2NCwgOTY1LCA5NjYsIDk2NywgOTY4LCA5NjksIDk3MCwgOTcxLCA5NzIsIDk3MywgOTc0LCAxMDI0LCAxMDI1LCAxMDI2LCAxMDI3LCAxMDI4LCAxMDI5LCAxMDMwLCAxMDMxLCAxMDMyLCAxMDMzLCAxMDM0LCAxMDM1LCAxMDM2LCAxMDM3LCAxMDM4LCAxMDM5LCAxMDQwLCAxMDQxLCAxMDQyLCAxMDQzLCAxMDQ0LCAxMDQ1LCAxMDQ2LCAxMDQ3LCAxMDQ4LCAxMDQ5LCAxMDUwLCAxMDUxLCAxMDUyLCAxMDUzLCAxMDU0LCAxMDU1LCAxMDU2LCAxMDU3LCAxMDU4LCAxMDU5LCAxMDYwLCAxMDYxLCAxMDYyLCAxMDYzLCAxMDY0LCAxMDY1LCAxMDY2LCAxMDY3LCAxMDY4LCAxMDY5LCAxMDcwLCAxMDcxLCAxMDcyLCAxMDczLCAxMDc0LCAxMDc1LCAxMDc2LCAxMDc3LCAxMDc4LCAxMDc5LCAxMDgwLCAxMDgxLCAxMDgyLCAxMDgzLCAxMDg0LCAxMDg1LCAxMDg2LCAxMDg3LCAxMDg4LCAxMDg5LCAxMDkwLCAxMDkxLCAxMDkyLCAxMDkzLCAxMDk0LCAxMDk1LCAxMDk2LCAxMDk3LCAxMDk4LCAxMDk5LCAxMTAwLCAxMTAxLCAxMTAyLCAxMTAzLCAxMTA0LCAxMTA1LCAxMTA2LCAxMTA3LCAxMTA4LCAxMTA5LCAxMTEwLCAxMTExLCAxMTEyLCAxMTEzLCAxMTE0LCAxMTE1LCAxMTE2LCAxMTE3LCAxMTE4LCAxMTE5LCAxMTM4LCAxMTM5LCAxMTY4LCAxMTY5LCA3ODA4LCA3ODA5LCA3ODEwLCA3ODExLCA3ODEyLCA3ODEzLCA3OTIyLCA3OTIzLCA4MjA4LCA4MjA5LCA4MjExLCA4MjEyLCA4MjEzLCA4MjE1LCA4MjE2LCA4MjE3LCA4MjE4LCA4MjE5LCA4MjIwLCA4MjIxLCA4MjIyLCA4MjI0LCA4MjI1LCA4MjI2LCA4MjMwLCA4MjQwLCA4MjQyLCA4MjQzLCA4MjQ5LCA4MjUwLCA4MjUyLCA4MjU0LCA4MjYwLCA4MzE5LCA4MzU1LCA4MzU2LCA4MzU5LCA4MzY0LCA4NDUzLCA4NDY3LCA4NDcwLCA4NDgyLCA4NDg2LCA4NDk0LCA4NTM5LCA4NTQwLCA4NTQxLCA4NTQyLCA4NTkyLCA4NTkzLCA4NTk0LCA4NTk1LCA4NTk2LCA4NTk3LCA4NjE2LCA4NzA2LCA4NzEwLCA4NzE5LCA4NzIxLCA4NzIyLCA4NzMwLCA4NzM0LCA4NzM1LCA4NzQ1LCA4NzQ3LCA4Nzc2LCA4ODAwLCA4ODAxLCA4ODA0LCA4ODA1LCA4OTYyLCA4OTc2LCA4OTkyLCA4OTkzLCA5NDcyLCA5NDc0LCA5NDg0LCA5NDg4LCA5NDkyLCA5NDk2LCA5NTAwLCA5NTA4LCA5NTE2LCA5NTI0LCA5NTMyLCA5NTUyLCA5NTUzLCA5NTU0LCA5NTU1LCA5NTU2LCA5NTU3LCA5NTU4LCA5NTU5LCA5NTYwLCA5NTYxLCA5NTYyLCA5NTYzLCA5NTY0LCA5NTY1LCA5NTY2LCA5NTY3LCA5NTY4LCA5NTY5LCA5NTcwLCA5NTcxLCA5NTcyLCA5NTczLCA5NTc0LCA5NTc1LCA5NTc2LCA5NTc3LCA5NTc4LCA5NTc5LCA5NTgwLCA5NjAwLCA5NjA0LCA5NjA4LCA5NjEyLCA5NjE2LCA5NjE3LCA5NjE4LCA5NjE5LCA5NjMyLCA5NjMzLCA5NjQyLCA5NjQzLCA5NjQ0LCA5NjUwLCA5NjU4LCA5NjYwLCA5NjY4LCA5Njc0LCA5Njc1LCA5Njc5LCA5Njg4LCA5Njg5LCA5NzAyLCA5Nzg2LCA5Nzg3LCA5Nzg4LCA5NzkyLCA5Nzk0LCA5ODI0LCA5ODI3LCA5ODI5LCA5ODMwLCA5ODM0LCA5ODM1LCA5ODM2LCA2MTQ0MSwgNjE0NDIsIDYxNDQ1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTFdO1xuZXhwb3J0cy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJNYXBwaW5nID0gTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZztcblxuLyoqKi8gfSksXG4vKiAxNiAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5NeXJpYWRQcm9SZWd1bGFyTWV0cmljcyA9IGV4cG9ydHMuTXlyaWFkUHJvUmVndWxhckZhY3RvcnMgPSBleHBvcnRzLk15cmlhZFByb0l0YWxpY01ldHJpY3MgPSBleHBvcnRzLk15cmlhZFByb0l0YWxpY0ZhY3RvcnMgPSBleHBvcnRzLk15cmlhZFByb0JvbGRNZXRyaWNzID0gZXhwb3J0cy5NeXJpYWRQcm9Cb2xkSXRhbGljTWV0cmljcyA9IGV4cG9ydHMuTXlyaWFkUHJvQm9sZEl0YWxpY0ZhY3RvcnMgPSBleHBvcnRzLk15cmlhZFByb0JvbGRGYWN0b3JzID0gdm9pZCAwO1xuY29uc3QgTXlyaWFkUHJvQm9sZEZhY3RvcnMgPSBbMS4zNjg5OCwgMSwgMSwgMC43MjcwNiwgMC44MDQ3OSwgMC44MzczNCwgMC45ODg5NCwgMC45OTc5MywgMC45ODk3LCAwLjkzODg0LCAwLjg2MjA5LCAwLjk0MjkyLCAwLjk0MjkyLCAxLjE2NjYxLCAxLjAyMDU4LCAwLjkzNTgyLCAwLjk2Njk0LCAwLjkzNTgyLCAxLjE5MTM3LCAwLjk5NzkzLCAwLjk5NzkzLCAwLjk5NzkzLCAwLjk5NzkzLCAwLjk5NzkzLCAwLjk5NzkzLCAwLjk5NzkzLCAwLjk5NzkzLCAwLjk5NzkzLCAwLjk5NzkzLCAwLjc4MDc2LCAwLjc4MDc2LCAxLjAyMDU4LCAxLjAyMDU4LCAxLjAyMDU4LCAwLjcyODUxLCAwLjc4OTY2LCAwLjkwODM4LCAwLjgzNjM3LCAwLjgyMzkxLCAwLjk2Mzc2LCAwLjgwMDYxLCAwLjg2Mjc1LCAwLjg3NjgsIDAuOTU0MDcsIDEuMDI1OCwgMC43MzkwMSwgMC44NTAyMiwgMC44MzY1NSwgMS4wMTU2LCAwLjk1NTQ2LCAwLjkyMTc5LCAwLjg3MTA3LCAwLjkyMTc5LCAwLjgyMTE0LCAwLjgwOTYsIDAuODk3MTMsIDAuOTQ0MzgsIDAuOTUzNTMsIDAuOTQwODMsIDAuOTE5MDUsIDAuOTA0MDYsIDAuOTQ0NiwgMC45NDI5MiwgMS4xODc3NywgMC45NDI5MiwgMS4wMjA1OCwgMC44OTkwMywgMC45MDA4OCwgMC45NDkzOCwgMC45Nzg5OCwgMC44MTA5MywgMC45NzU3MSwgMC45NDkzOCwgMS4wMjQsIDAuOTU3NywgMC45NTkzMywgMC45ODYyMSwgMS4wNDc0LCAwLjk3NDU1LCAwLjk4OTgxLCAwLjk2NzIsIDAuOTU5MzMsIDAuOTQ0NiwgMC45Nzg5OCwgMC45NzQwNywgMC45NzY0NiwgMC43ODAzNiwgMS4xMDIwOCwgMC45NTQ0MiwgMC45NTI5OCwgMC45NzU3OSwgMC45MzMyLCAwLjk0MDM5LCAwLjkzOCwgMC44MDY4NywgMS4wMTE0OSwgMC44MDY4NywgMS4wMjA1OCwgMC44MDQ3OSwgMC45OTc5MywgMC45OTc5MywgMC45OTc5MywgMC45OTc5MywgMS4wMTE0OSwgMS4wMDg3MiwgMC45MDA4OCwgMC45MTg4MiwgMS4wMjEzLCAwLjgzNjEsIDEuMDIwNTgsIDAuNjIyOTUsIDAuNTQzMjQsIDAuODkwMjIsIDEuMDg1OTUsIDEsIDEsIDAuOTAwODgsIDEsIDAuOTc0NTUsIDAuOTM1ODIsIDAuOTAwODgsIDEsIDEuMDU2ODYsIDAuODM2MSwgMC45OTY0MiwgMC45OTY0MiwgMC45OTY0MiwgMC43Mjg1MSwgMC45MDgzOCwgMC45MDgzOCwgMC45MDgzOCwgMC45MDgzOCwgMC45MDgzOCwgMC45MDgzOCwgMC44NjgsIDAuODIzOTEsIDAuODAwNjEsIDAuODAwNjEsIDAuODAwNjEsIDAuODAwNjEsIDEuMDI1OCwgMS4wMjU4LCAxLjAyNTgsIDEuMDI1OCwgMC45NzQ4NCwgMC45NTU0NiwgMC45MjE3OSwgMC45MjE3OSwgMC45MjE3OSwgMC45MjE3OSwgMC45MjE3OSwgMS4wMjA1OCwgMC45MjE3OSwgMC45NDQzOCwgMC45NDQzOCwgMC45NDQzOCwgMC45NDQzOCwgMC45MDQwNiwgMC44Njk1OCwgMC45ODIyNSwgMC45NDkzOCwgMC45NDkzOCwgMC45NDkzOCwgMC45NDkzOCwgMC45NDkzOCwgMC45NDkzOCwgMC45MDMxLCAwLjgxMDkzLCAwLjk0OTM4LCAwLjk0OTM4LCAwLjk0OTM4LCAwLjk0OTM4LCAwLjk4NjIxLCAwLjk4NjIxLCAwLjk4NjIxLCAwLjk4NjIxLCAwLjkzOTY5LCAwLjk1OTMzLCAwLjk0NDYsIDAuOTQ0NiwgMC45NDQ2LCAwLjk0NDYsIDAuOTQ0NiwgMS4wODU5NSwgMC45NDQ2LCAwLjk1NDQyLCAwLjk1NDQyLCAwLjk1NDQyLCAwLjk1NDQyLCAwLjk0MDM5LCAwLjk3ODk4LCAwLjk0MDM5LCAwLjkwODM4LCAwLjk0OTM4LCAwLjkwODM4LCAwLjk0OTM4LCAwLjkwODM4LCAwLjk0OTM4LCAwLjgyMzkxLCAwLjgxMDkzLCAwLjgyMzkxLCAwLjgxMDkzLCAwLjgyMzkxLCAwLjgxMDkzLCAwLjgyMzkxLCAwLjgxMDkzLCAwLjk2Mzc2LCAwLjg0MzEzLCAwLjk3NDg0LCAwLjk3NTcxLCAwLjgwMDYxLCAwLjk0OTM4LCAwLjgwMDYxLCAwLjk0OTM4LCAwLjgwMDYxLCAwLjk0OTM4LCAwLjgwMDYxLCAwLjk0OTM4LCAwLjgwMDYxLCAwLjk0OTM4LCAwLjg3NjgsIDAuOTU3NywgMC44NzY4LCAwLjk1NzcsIDAuODc2OCwgMC45NTc3LCAxLCAxLCAwLjk1NDA3LCAwLjk1OTMzLCAwLjk3MDY5LCAwLjk1OTMzLCAxLjAyNTgsIDAuOTg2MjEsIDEuMDI1OCwgMC45ODYyMSwgMS4wMjU4LCAwLjk4NjIxLCAxLjAyNTgsIDAuOTg2MjEsIDEuMDI1OCwgMC45ODYyMSwgMC44ODcsIDEuMDE1OTEsIDAuNzM5MDEsIDEuMDQ3NCwgMSwgMSwgMC45NzQ1NSwgMC44MzY1NSwgMC45ODk4MSwgMSwgMSwgMC44MzY1NSwgMC43Mzk3NywgMC44MzY1NSwgMC43MzkwMywgMC44NDYzOCwgMS4wMzMsIDAuOTU1NDYsIDAuOTU5MzMsIDEsIDEsIDAuOTU1NDYsIDAuOTU5MzMsIDAuODI3MSwgMC45NTQxNywgMC45NTkzMywgMC45MjE3OSwgMC45NDQ2LCAwLjkyMTc5LCAwLjk0NDYsIDAuOTIxNzksIDAuOTQ0NiwgMC45MzYsIDAuOTE5NjQsIDAuODIxMTQsIDAuOTc2NDYsIDEsIDEsIDAuODIxMTQsIDAuOTc2NDYsIDAuODA5NiwgMC43ODAzNiwgMC44MDk2LCAwLjc4MDM2LCAxLCAxLCAwLjgwOTYsIDAuNzgwMzYsIDEsIDEsIDAuODk3MTMsIDAuNzc0NTIsIDAuODk3MTMsIDEuMTAyMDgsIDAuOTQ0MzgsIDAuOTU0NDIsIDAuOTQ0MzgsIDAuOTU0NDIsIDAuOTQ0MzgsIDAuOTU0NDIsIDAuOTQ0MzgsIDAuOTU0NDIsIDAuOTQ0MzgsIDAuOTU0NDIsIDAuOTQ0MzgsIDAuOTU0NDIsIDAuOTQwODMsIDAuOTc1NzksIDAuOTA0MDYsIDAuOTQwMzksIDAuOTA0MDYsIDAuOTQ0NiwgMC45MzgsIDAuOTQ0NiwgMC45MzgsIDAuOTQ0NiwgMC45MzgsIDEsIDAuOTk3OTMsIDAuOTA4MzgsIDAuOTQ5MzgsIDAuODY4LCAwLjkwMzEsIDAuOTIxNzksIDAuOTQ0NiwgMSwgMSwgMC44OTcxMywgMS4xMDIwOCwgMC45MDA4OCwgMC45MDA4OCwgMC45MDA4OCwgMC45MDA4OCwgMC45MDA4OCwgMC45MDA4OCwgMC45MDA4OCwgMC45MDA4OCwgMC45MDA4OCwgMC45MDk4OSwgMC45MzU4LCAwLjkxOTQ1LCAwLjgzMTgxLCAwLjc1MjYxLCAwLjg3OTkyLCAwLjgyOTc2LCAwLjk2MDM0LCAwLjgzNjg5LCAwLjk3MjY4LCAxLjAwNzgsIDAuOTA4MzgsIDAuODM2MzcsIDAuODAxOSwgMC45MDE1NywgMC44MDA2MSwgMC45NDQ2LCAwLjk1NDA3LCAwLjkyNDM2LCAxLjAyNTgsIDAuODUwMjIsIDAuOTcxNTMsIDEuMDE1NiwgMC45NTU0NiwgMC44OTE5MiwgMC45MjE3OSwgMC45MjM2MSwgMC44NzEwNywgMC45NjMxOCwgMC44OTcxMywgMC45MzcwNCwgMC45NTYzOCwgMC45MTkwNSwgMC45MTcwOSwgMC45Mjc5NiwgMS4wMjU4LCAwLjkzNzA0LCAwLjk0ODM2LCAxLjAzNzMsIDAuOTU5MzMsIDEuMDA3OCwgMC45NTg3MSwgMC45NDgzNiwgMC45NjE3NCwgMC45MjYwMSwgMC45NDk4LCAwLjk4NjA3LCAwLjk1Nzc2LCAwLjk1OTMzLCAxLjA1NDUzLCAxLjAwNzgsIDAuOTgyNzUsIDAuOTMxNCwgMC45NTYxNywgMC45MTcwMSwgMS4wNTk5MywgMC45NDQ2LCAwLjc4MzY3LCAwLjk1NTMsIDEsIDAuODY4MzIsIDEuMDEyOCwgMC45NTg3MSwgMC45OTM5NCwgMC44NzU0OCwgMC45NjM2MSwgMC44Njc3NCwgMS4wMDc4LCAwLjk1ODcxLCAwLjk0NDYsIDAuOTU4NzEsIDAuODY3NzQsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAuOTQwODMsIDAuOTc1NzksIDAuOTQwODMsIDAuOTc1NzksIDAuOTQwODMsIDAuOTc1NzksIDAuOTA0MDYsIDAuOTQwMzksIDAuOTY2OTQsIDEsIDAuODk5MDMsIDEsIDEsIDEsIDAuOTM1ODIsIDAuOTM1ODIsIDAuOTM1ODIsIDEsIDAuOTA4LCAwLjkwOCwgMC45MTgsIDAuOTQyMTksIDAuOTQyMTksIDAuOTY1NDQsIDEsIDEuMjg1LCAxLCAxLCAwLjgxMDc5LCAwLjgxMDc5LCAxLCAxLCAwLjc0ODU0LCAxLCAxLCAxLCAxLCAwLjk5NzkzLCAxLCAxLCAxLCAwLjY1LCAxLCAxLjM2MTQ1LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLjE3MTczLCAxLCAwLjgwNTM1LCAwLjc2MTY5LCAxLjAyMDU4LCAxLjA3MzIsIDEuMDU0ODYsIDEsIDEsIDEuMzA2OTIsIDEuMDg1OTUsIDEuMDg1OTUsIDEsIDEuMDg1OTUsIDEuMDg1OTUsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEuMTYxNjEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDFdO1xuZXhwb3J0cy5NeXJpYWRQcm9Cb2xkRmFjdG9ycyA9IE15cmlhZFByb0JvbGRGYWN0b3JzO1xuY29uc3QgTXlyaWFkUHJvQm9sZE1ldHJpY3MgPSB7XG4gIGxpbmVIZWlnaHQ6IDEuMixcbiAgbGluZUdhcDogMC4yXG59O1xuZXhwb3J0cy5NeXJpYWRQcm9Cb2xkTWV0cmljcyA9IE15cmlhZFByb0JvbGRNZXRyaWNzO1xuY29uc3QgTXlyaWFkUHJvQm9sZEl0YWxpY0ZhY3RvcnMgPSBbMS4zNjg5OCwgMSwgMSwgMC42NjIyNywgMC44MDc3OSwgMC44MTYyNSwgMC45NzI3NiwgMC45NzI3NiwgMC45NzczMywgMC45MjIyMiwgMC44MzI2NiwgMC45NDI5MiwgMC45NDI5MiwgMS4xNjE0OCwgMS4wMjA1OCwgMC45MzU4MiwgMC45NjY5NCwgMC45MzU4MiwgMS4xNzMzNywgMC45NzI3NiwgMC45NzI3NiwgMC45NzI3NiwgMC45NzI3NiwgMC45NzI3NiwgMC45NzI3NiwgMC45NzI3NiwgMC45NzI3NiwgMC45NzI3NiwgMC45NzI3NiwgMC43ODA3NiwgMC43ODA3NiwgMS4wMjA1OCwgMS4wMjA1OCwgMS4wMjA1OCwgMC43MTU0MSwgMC43NjgxMywgMC44NTU3NiwgMC44MDU5MSwgMC44MDcyOSwgMC45NDI5OSwgMC43NzUxMiwgMC44MzY1NSwgMC44NjUyMywgMC45MjIyMiwgMC45ODYyMSwgMC43MTc0MywgMC44MTY5OCwgMC43OTcyNiwgMC45ODU1OCwgMC45MjIyMiwgMC45MDYzNywgMC44MzgwOSwgMC45MDYzNywgMC44MDcyOSwgMC43NjQ2MywgMC44NjI3NSwgMC45MDY5OSwgMC45MTYwNSwgMC45MTU0LCAwLjg1MzA4LCAwLjg1NDU4LCAwLjkwNTMxLCAwLjk0MjkyLCAxLjIxMjk2LCAwLjk0MjkyLCAxLjAyMDU4LCAwLjg5OTAzLCAxLjE4NjE2LCAwLjk5NjEzLCAwLjkxNjc3LCAwLjc4MjE2LCAwLjkxNjc3LCAwLjkwMDgzLCAwLjk4Nzk2LCAwLjkxMzUsIDAuOTIxNjgsIDAuOTUzODEsIDAuOTg5ODEsIDAuOTUyOTgsIDAuOTUzODEsIDAuOTM0NTksIDAuOTIxNjgsIDAuOTE1MTMsIDAuOTIwMDQsIDAuOTE2NzcsIDAuOTUwNzcsIDAuNzQ4LCAxLjA0NTAyLCAwLjkxNjc3LCAwLjkyMDYxLCAwLjk0MjM2LCAwLjg5NTQ0LCAwLjg5MzY0LCAwLjksIDAuODA2ODcsIDAuODU3OCwgMC44MDY4NywgMS4wMjA1OCwgMC44MDc3OSwgMC45NzI3NiwgMC45NzI3NiwgMC45NzI3NiwgMC45NzI3NiwgMC44NTc4LCAwLjk5OTczLCAxLjE4NjE2LCAwLjkxMzM5LCAxLjA4MDc0LCAwLjgyODkxLCAxLjAyMDU4LCAwLjU1NTA5LCAwLjcxNTI2LCAwLjg5MDIyLCAxLjA4NTk1LCAxLCAxLCAxLjE4NjE2LCAxLCAwLjk2NzM2LCAwLjkzNTgyLCAxLjE4NjE2LCAxLCAxLjA0ODY0LCAwLjgyNzExLCAwLjk5MDQzLCAwLjk5MDQzLCAwLjk5MDQzLCAwLjcxNTQxLCAwLjg1NTc2LCAwLjg1NTc2LCAwLjg1NTc2LCAwLjg1NTc2LCAwLjg1NTc2LCAwLjg1NTc2LCAwLjg0NSwgMC44MDcyOSwgMC43NzUxMiwgMC43NzUxMiwgMC43NzUxMiwgMC43NzUxMiwgMC45ODYyMSwgMC45ODYyMSwgMC45ODYyMSwgMC45ODYyMSwgMC45NTk2MSwgMC45MjIyMiwgMC45MDYzNywgMC45MDYzNywgMC45MDYzNywgMC45MDYzNywgMC45MDYzNywgMS4wMjA1OCwgMC45MDI1MSwgMC45MDY5OSwgMC45MDY5OSwgMC45MDY5OSwgMC45MDY5OSwgMC44NTQ1OCwgMC44MzY1OSwgMC45NDk1MSwgMC45OTYxMywgMC45OTYxMywgMC45OTYxMywgMC45OTYxMywgMC45OTYxMywgMC45OTYxMywgMC44NTgxMSwgMC43ODIxNiwgMC45MDA4MywgMC45MDA4MywgMC45MDA4MywgMC45MDA4MywgMC45NTM4MSwgMC45NTM4MSwgMC45NTM4MSwgMC45NTM4MSwgMC45MTM1LCAwLjkyMTY4LCAwLjkxNTEzLCAwLjkxNTEzLCAwLjkxNTEzLCAwLjkxNTEzLCAwLjkxNTEzLCAxLjA4NTk1LCAwLjkxNjc3LCAwLjkxNjc3LCAwLjkxNjc3LCAwLjkxNjc3LCAwLjkxNjc3LCAwLjg5MzY0LCAwLjkyMzMyLCAwLjg5MzY0LCAwLjg1NTc2LCAwLjk5NjEzLCAwLjg1NTc2LCAwLjk5NjEzLCAwLjg1NTc2LCAwLjk5NjEzLCAwLjgwNzI5LCAwLjc4MjE2LCAwLjgwNzI5LCAwLjc4MjE2LCAwLjgwNzI5LCAwLjc4MjE2LCAwLjgwNzI5LCAwLjc4MjE2LCAwLjk0Mjk5LCAwLjc2NzgzLCAwLjk1OTYxLCAwLjkxNjc3LCAwLjc3NTEyLCAwLjkwMDgzLCAwLjc3NTEyLCAwLjkwMDgzLCAwLjc3NTEyLCAwLjkwMDgzLCAwLjc3NTEyLCAwLjkwMDgzLCAwLjc3NTEyLCAwLjkwMDgzLCAwLjg2NTIzLCAwLjkxMzUsIDAuODY1MjMsIDAuOTEzNSwgMC44NjUyMywgMC45MTM1LCAxLCAxLCAwLjkyMjIyLCAwLjkyMTY4LCAwLjkyMjIyLCAwLjkyMTY4LCAwLjk4NjIxLCAwLjk1MzgxLCAwLjk4NjIxLCAwLjk1MzgxLCAwLjk4NjIxLCAwLjk1MzgxLCAwLjk4NjIxLCAwLjk1MzgxLCAwLjk4NjIxLCAwLjk1MzgxLCAwLjg2MDM2LCAwLjk3MDk2LCAwLjcxNzQzLCAwLjk4OTgxLCAxLCAxLCAwLjk1Mjk4LCAwLjc5NzI2LCAwLjk1MzgxLCAxLCAxLCAwLjc5NzI2LCAwLjY4OTQsIDAuNzk3MjYsIDAuNzQzMjEsIDAuODE2OTEsIDEuMDAwNiwgMC45MjIyMiwgMC45MjE2OCwgMSwgMSwgMC45MjIyMiwgMC45MjE2OCwgMC43OTQ2NCwgMC45MjA5OCwgMC45MjE2OCwgMC45MDYzNywgMC45MTUxMywgMC45MDYzNywgMC45MTUxMywgMC45MDYzNywgMC45MTUxMywgMC45MDksIDAuODc1MTQsIDAuODA3MjksIDAuOTUwNzcsIDEsIDEsIDAuODA3MjksIDAuOTUwNzcsIDAuNzY0NjMsIDAuNzQ4LCAwLjc2NDYzLCAwLjc0OCwgMSwgMSwgMC43NjQ2MywgMC43NDgsIDEsIDEsIDAuODYyNzUsIDAuNzI2NTEsIDAuODYyNzUsIDEuMDQ1MDIsIDAuOTA2OTksIDAuOTE2NzcsIDAuOTA2OTksIDAuOTE2NzcsIDAuOTA2OTksIDAuOTE2NzcsIDAuOTA2OTksIDAuOTE2NzcsIDAuOTA2OTksIDAuOTE2NzcsIDAuOTA2OTksIDAuOTE2NzcsIDAuOTE1NCwgMC45NDIzNiwgMC44NTQ1OCwgMC44OTM2NCwgMC44NTQ1OCwgMC45MDUzMSwgMC45LCAwLjkwNTMxLCAwLjksIDAuOTA1MzEsIDAuOSwgMSwgMC45NzI3NiwgMC44NTU3NiwgMC45OTYxMywgMC44NDUsIDAuODU4MTEsIDAuOTAyNTEsIDAuOTE2NzcsIDEsIDEsIDAuODYyNzUsIDEuMDQ1MDIsIDEuMTg2MTYsIDEuMTg2MTYsIDEuMTg2MTYsIDEuMTg2MTYsIDEuMTg2MTYsIDEuMTg2MTYsIDEuMTg2MTYsIDEuMTg2MTYsIDEuMTg2MTYsIDEuMDA4OTksIDEuMzA2MjgsIDAuODU1NzYsIDAuODAxNzgsIDAuNjY4NjIsIDAuNzkyNywgMC42OTMyMywgMC44ODEyNywgMC43MjQ1OSwgMC44OTcxMSwgMC45NTM4MSwgMC44NTU3NiwgMC44MDU5MSwgMC43ODA1LCAwLjk0NzI5LCAwLjc3NTEyLCAwLjkwNTMxLCAwLjkyMjIyLCAwLjkwNjM3LCAwLjk4NjIxLCAwLjgxNjk4LCAwLjkyNjU1LCAwLjk4NTU4LCAwLjkyMjIyLCAwLjg1MzU5LCAwLjkwNjM3LCAwLjkwOTc2LCAwLjgzODA5LCAwLjk0NTIzLCAwLjg2Mjc1LCAwLjgzNTA5LCAwLjkzMTU3LCAwLjg1MzA4LCAwLjgzMzkyLCAwLjkyMzQ2LCAwLjk4NjIxLCAwLjgzNTA5LCAwLjkyODg2LCAwLjkxMzI0LCAwLjkyMTY4LCAwLjk1MzgxLCAwLjkwNjQ2LCAwLjkyODg2LCAwLjkwNTU3LCAwLjg2ODQ3LCAwLjkwMjc2LCAwLjkxMzI0LCAwLjg2ODQyLCAwLjkyMTY4LCAwLjk5NTMxLCAwLjk1MzgxLCAwLjkyMjQsIDAuODU0MDgsIDAuOTI2OTksIDAuODY4NDcsIDEuMDA1MSwgMC45MTUxMywgMC44MDQ4NywgMC45MzQ4MSwgMSwgMC44ODE1OSwgMS4wNTIxNCwgMC45MDY0NiwgMC45NzM1NSwgMC44MTUzOSwgMC44OTM5OCwgMC44NTkyMywgMC45NTM4MSwgMC45MDY0NiwgMC45MTUxMywgMC45MDY0NiwgMC44NTkyMywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMC45MTU0LCAwLjk0MjM2LCAwLjkxNTQsIDAuOTQyMzYsIDAuOTE1NCwgMC45NDIzNiwgMC44NTQ1OCwgMC44OTM2NCwgMC45NjY5NCwgMSwgMC44OTkwMywgMSwgMSwgMSwgMC45MTc4MiwgMC45MTc4MiwgMC45MTc4MiwgMSwgMC44OTYsIDAuODk2LCAwLjg5NiwgMC45MzMyLCAwLjkzMzIsIDAuOTU5NzMsIDEsIDEuMjYsIDEsIDEsIDAuODA0NzksIDAuODAxNzgsIDEsIDEsIDAuODU2MzMsIDEsIDEsIDEsIDEsIDAuOTcyNzYsIDEsIDEsIDEsIDAuNjk4LCAxLCAxLjM2MTQ1LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLjE0NTQyLCAxLCAwLjc5MTk5LCAwLjc4Njk0LCAxLjAyMDU4LCAxLjAzNDkzLCAxLjA1NDg2LCAxLCAxLCAxLjIzMDI2LCAxLjA4NTk1LCAxLjA4NTk1LCAxLCAxLjA4NTk1LCAxLjA4NTk1LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLjIwMDA2LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxXTtcbmV4cG9ydHMuTXlyaWFkUHJvQm9sZEl0YWxpY0ZhY3RvcnMgPSBNeXJpYWRQcm9Cb2xkSXRhbGljRmFjdG9ycztcbmNvbnN0IE15cmlhZFByb0JvbGRJdGFsaWNNZXRyaWNzID0ge1xuICBsaW5lSGVpZ2h0OiAxLjIsXG4gIGxpbmVHYXA6IDAuMlxufTtcbmV4cG9ydHMuTXlyaWFkUHJvQm9sZEl0YWxpY01ldHJpY3MgPSBNeXJpYWRQcm9Cb2xkSXRhbGljTWV0cmljcztcbmNvbnN0IE15cmlhZFByb0l0YWxpY0ZhY3RvcnMgPSBbMS4zNjg5OCwgMSwgMSwgMC42NTUwNywgMC44NDk0MywgMC44NTYzOSwgMC44ODQ2NSwgMC44ODQ2NSwgMC44NjkzNiwgMC44ODMwNywgMC44Njk0OCwgMC44NTI4MywgMC44NTI4MywgMS4wNjM4MywgMS4wMjA1OCwgMC43NTk0NSwgMC45MjE5LCAwLjc1OTQ1LCAxLjE3MzM3LCAwLjg4NDY1LCAwLjg4NDY1LCAwLjg4NDY1LCAwLjg4NDY1LCAwLjg4NDY1LCAwLjg4NDY1LCAwLjg4NDY1LCAwLjg4NDY1LCAwLjg4NDY1LCAwLjg4NDY1LCAwLjc1OTQ1LCAwLjc1OTQ1LCAxLjAyMDU4LCAxLjAyMDU4LCAxLjAyMDU4LCAwLjY5MDQ2LCAwLjcwOTI2LCAwLjg1MTU4LCAwLjc3ODEyLCAwLjc2ODUyLCAwLjg5NTkxLCAwLjcwNDY2LCAwLjc2MTI1LCAwLjgwMDk0LCAwLjg2ODIyLCAwLjgzODY0LCAwLjcyOCwgMC43NzIxMiwgMC43OTQ3NSwgMC45MzYzNywgMC44NzUxNCwgMC44NTg4LCAwLjc2MDEzLCAwLjg1ODgsIDAuNzI0MjEsIDAuNjk4NjYsIDAuNzc1OTgsIDAuODU5OTEsIDAuODA4MTEsIDAuODc4MzIsIDAuNzgxMTIsIDAuNzc1MTIsIDAuODU2MiwgMS4wMjIyLCAxLjE4NDE3LCAxLjAyMjIsIDEuMjcwMTQsIDAuODk5MDMsIDEuMTUwMTIsIDAuOTM4NTksIDAuOTQzOTksIDAuODQ2LCAwLjk0Mzk5LCAwLjgxNDUzLCAxLjAxODYsIDAuOTQyMTksIDAuOTYwMTcsIDEuMDMwNzUsIDEuMDIxNzUsIDAuOTEyLCAxLjAzMDc1LCAwLjk2OTk4LCAwLjk2MDE3LCAwLjkzODU5LCAwLjk0Mzk5LCAwLjk0Mzk5LCAwLjk1NDkzLCAwLjc0NiwgMS4xMjY1OCwgMC45NDU3OCwgMC45MSwgMC45NzksIDAuODgyLCAwLjg4MiwgMC44MywgMC44NTAzNCwgMC44MzUzNywgMC44NTAzNCwgMS4wMjA1OCwgMC43MDg2OSwgMC44ODQ2NSwgMC44ODQ2NSwgMC44ODQ2NSwgMC44ODQ2NSwgMC44MzUzNywgMC45MDA4MywgMS4xNTAxMiwgMC45MTYxLCAwLjk0NTY1LCAwLjczNTQxLCAxLjAyMDU4LCAwLjUzNjA5LCAwLjY5MzUzLCAwLjc5NTE5LCAxLjA4NTk1LCAxLCAxLCAxLjE1MDEyLCAxLCAwLjkxOTc0LCAwLjc1OTQ1LCAxLjE1MDEyLCAxLCAwLjk0NDYsIDAuNzMzNjEsIDAuOTAwNSwgMC45MDA1LCAwLjkwMDUsIDAuNjI4NjQsIDAuODUxNTgsIDAuODUxNTgsIDAuODUxNTgsIDAuODUxNTgsIDAuODUxNTgsIDAuODUxNTgsIDAuNzczLCAwLjc2ODUyLCAwLjcwNDY2LCAwLjcwNDY2LCAwLjcwNDY2LCAwLjcwNDY2LCAwLjgzODY0LCAwLjgzODY0LCAwLjgzODY0LCAwLjgzODY0LCAwLjkwNTYxLCAwLjg3NTE0LCAwLjg1ODgsIDAuODU4OCwgMC44NTg4LCAwLjg1ODgsIDAuODU4OCwgMS4wMjA1OCwgMC44NTc1MSwgMC44NTk5MSwgMC44NTk5MSwgMC44NTk5MSwgMC44NTk5MSwgMC43NzUxMiwgMC43NjAxMywgMC44ODA3NSwgMC45Mzg1OSwgMC45Mzg1OSwgMC45Mzg1OSwgMC45Mzg1OSwgMC45Mzg1OSwgMC45Mzg1OSwgMC44MDc1LCAwLjg0NiwgMC44MTQ1MywgMC44MTQ1MywgMC44MTQ1MywgMC44MTQ1MywgMC44MjQyNCwgMC44MjQyNCwgMC44MjQyNCwgMC44MjQyNCwgMC45Mjc4LCAwLjk2MDE3LCAwLjkzODU5LCAwLjkzODU5LCAwLjkzODU5LCAwLjkzODU5LCAwLjkzODU5LCAxLjA4NTk1LCAwLjg1NjIsIDAuOTQ1NzgsIDAuOTQ1NzgsIDAuOTQ1NzgsIDAuOTQ1NzgsIDAuODgyLCAwLjk0NTc4LCAwLjg4MiwgMC44NTE1OCwgMC45Mzg1OSwgMC44NTE1OCwgMC45Mzg1OSwgMC44NTE1OCwgMC45Mzg1OSwgMC43Njg1MiwgMC44NDYsIDAuNzY4NTIsIDAuODQ2LCAwLjc2ODUyLCAwLjg0NiwgMC43Njg1MiwgMC44NDYsIDAuODk1OTEsIDAuODU0NCwgMC45MDU2MSwgMC45NDM5OSwgMC43MDQ2NiwgMC44MTQ1MywgMC43MDQ2NiwgMC44MTQ1MywgMC43MDQ2NiwgMC44MTQ1MywgMC43MDQ2NiwgMC44MTQ1MywgMC43MDQ2NiwgMC44MTQ1MywgMC44MDA5NCwgMC45NDIxOSwgMC44MDA5NCwgMC45NDIxOSwgMC44MDA5NCwgMC45NDIxOSwgMSwgMSwgMC44NjgyMiwgMC45NjAxNywgMC44NjgyMiwgMC45NjAxNywgMC44Mzg2NCwgMC44MjQyNCwgMC44Mzg2NCwgMC44MjQyNCwgMC44Mzg2NCwgMC44MjQyNCwgMC44Mzg2NCwgMS4wMzA3NSwgMC44Mzg2NCwgMC44MjQyNCwgMC44MTQwMiwgMS4wMjczOCwgMC43MjgsIDEuMDIxNzUsIDEsIDEsIDAuOTEyLCAwLjc5NDc1LCAxLjAzMDc1LCAxLCAxLCAwLjc5NDc1LCAwLjgzOTExLCAwLjc5NDc1LCAwLjY2MjY2LCAwLjgwNTUzLCAxLjA2Njc2LCAwLjg3NTE0LCAwLjk2MDE3LCAxLCAxLCAwLjg3NTE0LCAwLjk2MDE3LCAwLjg2ODY1LCAwLjg3Mzk2LCAwLjk2MDE3LCAwLjg1ODgsIDAuOTM4NTksIDAuODU4OCwgMC45Mzg1OSwgMC44NTg4LCAwLjkzODU5LCAwLjg2NywgMC44NDc1OSwgMC43MjQyMSwgMC45NTQ5MywgMSwgMSwgMC43MjQyMSwgMC45NTQ5MywgMC42OTg2NiwgMC43NDYsIDAuNjk4NjYsIDAuNzQ2LCAxLCAxLCAwLjY5ODY2LCAwLjc0NiwgMSwgMSwgMC43NzU5OCwgMC44ODQxNywgMC43NzU5OCwgMS4xMjY1OCwgMC44NTk5MSwgMC45NDU3OCwgMC44NTk5MSwgMC45NDU3OCwgMC44NTk5MSwgMC45NDU3OCwgMC44NTk5MSwgMC45NDU3OCwgMC44NTk5MSwgMC45NDU3OCwgMC44NTk5MSwgMC45NDU3OCwgMC44NzgzMiwgMC45NzksIDAuNzc1MTIsIDAuODgyLCAwLjc3NTEyLCAwLjg1NjIsIDAuODMsIDAuODU2MiwgMC44MywgMC44NTYyLCAwLjgzLCAxLCAwLjg4NDY1LCAwLjg1MTU4LCAwLjkzODU5LCAwLjc3MywgMC44MDc1LCAwLjg1NzUxLCAwLjg1NjIsIDEsIDEsIDAuNzc1OTgsIDEuMTI2NTgsIDEuMTUwMTIsIDEuMTUwMTIsIDEuMTUwMTIsIDEuMTUwMTIsIDEuMTUwMTIsIDEuMTUzMTMsIDEuMTUwMTIsIDEuMTUwMTIsIDEuMTUwMTIsIDEuMDgxMDYsIDEuMDM5MDEsIDAuODUxNTgsIDAuNzcwMjUsIDAuNjIyNjQsIDAuNzY0NiwgMC42NTM1MSwgMC44NjAyNiwgMC42OTQ2MSwgMC44OTk0NywgMS4wMzA3NSwgMC44NTE1OCwgMC43NzgxMiwgMC43NjQ0OSwgMC44ODgzNiwgMC43MDQ2NiwgMC44NTYyLCAwLjg2ODIyLCAwLjg1ODgsIDAuODM4NjQsIDAuNzcyMTIsIDAuODUzMDgsIDAuOTM2MzcsIDAuODc1MTQsIDAuODIzNTIsIDAuODU4OCwgMC44NTcwMSwgMC43NjAxMywgMC44OTA1OCwgMC43NzU5OCwgMC44MTU2LCAwLjgyNTY1LCAwLjc4MTEyLCAwLjc3ODk5LCAwLjg5Mzg2LCAwLjgzODY0LCAwLjgxNTYsIDAuOTQ4NiwgMC45MjM4OCwgMC45NjE4NiwgMS4wMzA3NSwgMC45MTEyMywgMC45NDg2LCAwLjkzMjk4LCAwLjg3OCwgMC45Mzk0MiwgMC45MjM4OCwgMC44NDU5NiwgMC45NjE4NiwgMC45NTExOSwgMS4wMzA3NSwgMC45MjIsIDAuODg3ODcsIDAuOTU4MjksIDAuODgsIDAuOTM1NTksIDAuOTM4NTksIDAuNzg4MTUsIDAuOTM3NTgsIDEsIDAuODkyMTcsIDEuMDM3MzcsIDAuOTExMjMsIDAuOTM5NjksIDAuNzc0ODcsIDAuODU3NjksIDAuODY3OTksIDEuMDMwNzUsIDAuOTExMjMsIDAuOTM4NTksIDAuOTExMjMsIDAuODY3OTksIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAuODc4MzIsIDAuOTc5LCAwLjg3ODMyLCAwLjk3OSwgMC44NzgzMiwgMC45NzksIDAuNzc1MTIsIDAuODgyLCAwLjkyMTksIDEsIDAuODk5MDMsIDEsIDEsIDEsIDAuODczMjEsIDAuODczMjEsIDAuODczMjEsIDEsIDEuMDI3LCAxLjAyNywgMS4wMjcsIDAuODY4NDcsIDAuODY4NDcsIDAuNzkxMjEsIDEsIDEuMTI0LCAxLCAxLCAwLjczNTcyLCAwLjczNTcyLCAxLCAxLCAwLjg1MDM0LCAxLCAxLCAxLCAxLCAwLjg4NDY1LCAxLCAxLCAxLCAwLjY2OSwgMSwgMS4zNjE0NSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMS4wNDgyOCwgMSwgMC43NDk0OCwgMC43NTE4NywgMS4wMjA1OCwgMC45ODM5MSwgMS4wMjExOSwgMSwgMSwgMS4wNjIzMywgMS4wODU5NSwgMS4wODU5NSwgMSwgMS4wODU5NSwgMS4wODU5NSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMS4wNTIzMywgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMV07XG5leHBvcnRzLk15cmlhZFByb0l0YWxpY0ZhY3RvcnMgPSBNeXJpYWRQcm9JdGFsaWNGYWN0b3JzO1xuY29uc3QgTXlyaWFkUHJvSXRhbGljTWV0cmljcyA9IHtcbiAgbGluZUhlaWdodDogMS4yLFxuICBsaW5lR2FwOiAwLjJcbn07XG5leHBvcnRzLk15cmlhZFByb0l0YWxpY01ldHJpY3MgPSBNeXJpYWRQcm9JdGFsaWNNZXRyaWNzO1xuY29uc3QgTXlyaWFkUHJvUmVndWxhckZhY3RvcnMgPSBbMS4zNjg5OCwgMSwgMSwgMC43NjMwNSwgMC44Mjc4NCwgMC45NDkzNSwgMC44OTM2NCwgMC45MjI0MSwgMC44OTA3MywgMC45MDcwNiwgMC45ODQ3MiwgMC44NTI4MywgMC44NTI4MywgMS4wNjY0LCAxLjAyMDU4LCAwLjc0NTA1LCAwLjkyMTksIDAuNzQ1MDUsIDEuMjM0NTYsIDAuOTIyNDEsIDAuOTIyNDEsIDAuOTIyNDEsIDAuOTIyNDEsIDAuOTIyNDEsIDAuOTIyNDEsIDAuOTIyNDEsIDAuOTIyNDEsIDAuOTIyNDEsIDAuOTIyNDEsIDAuNzQ1MDUsIDAuNzQ1MDUsIDEuMDIwNTgsIDEuMDIwNTgsIDEuMDIwNTgsIDAuNzMwMDIsIDAuNzI2MDEsIDAuOTE3NTUsIDAuODEyNiwgMC44MDMxNCwgMC45MjIyMiwgMC43Mzc2NCwgMC43OTcyNiwgMC44MzA1MSwgMC45MDI4NCwgMC44NjAyMywgMC43NCwgMC44MTI2LCAwLjg0ODY5LCAwLjk2NTE4LCAwLjkxMTE1LCAwLjg4NTgsIDAuNzk3NjEsIDAuODg1OCwgMC43NDQ5OCwgMC43MzkxNCwgMC44MTM2MywgMC44OTU5MSwgMC44MzY1OSwgMC44OTYzMywgMC44NTYwOCwgMC44MTExLCAwLjkwNTMxLCAxLjAyMjIsIDEuMjI3MzYsIDEuMDIyMiwgMS4yNzAxNCwgMC44OTkwMywgMC45MDA4OCwgMC44NjY2NywgMS4wMjMxLCAwLjg5NiwgMS4wMTQxMSwgMC45MDA4MywgMS4wNTA5OSwgMS4wMDUxMiwgMC45OTc5MywgMS4wNTMyNiwgMS4wOTM3NywgMC45MzgsIDEuMDYyMjYsIDEuMDAxMTksIDAuOTk3OTMsIDAuOTg3MTQsIDEuMDIzMSwgMS4wMTIzMSwgMC45ODE5NiwgMC43OTIsIDEuMTkxMzcsIDAuOTkwNzQsIDAuOTYyLCAxLjAxOTE1LCAwLjkyNiwgMC45NDIsIDAuODU2LCAwLjg1MDM0LCAwLjkyMDA2LCAwLjg1MDM0LCAxLjAyMDU4LCAwLjY5MDY3LCAwLjkyMjQxLCAwLjkyMjQxLCAwLjkyMjQxLCAwLjkyMjQxLCAwLjkyMDA2LCAwLjkzMzIsIDAuOTAwODgsIDAuOTE4ODIsIDAuOTM0ODQsIDAuNzUzMzksIDEuMDIwNTgsIDAuNTY4NjYsIDAuNTQzMjQsIDAuNzk1MTksIDEuMDg1OTUsIDEsIDEsIDAuOTAwODgsIDEsIDAuOTUzMjUsIDAuNzQ1MDUsIDAuOTAwODgsIDEsIDAuOTcxOTgsIDAuNzUzMzksIDAuOTEwMDksIDAuOTEwMDksIDAuOTEwMDksIDAuNjY0NjYsIDAuOTE3NTUsIDAuOTE3NTUsIDAuOTE3NTUsIDAuOTE3NTUsIDAuOTE3NTUsIDAuOTE3NTUsIDAuNzg4LCAwLjgwMzE0LCAwLjczNzY0LCAwLjczNzY0LCAwLjczNzY0LCAwLjczNzY0LCAwLjg2MDIzLCAwLjg2MDIzLCAwLjg2MDIzLCAwLjg2MDIzLCAwLjkyOTE1LCAwLjkxMTE1LCAwLjg4NTgsIDAuODg1OCwgMC44ODU4LCAwLjg4NTgsIDAuODg1OCwgMS4wMjA1OCwgMC44ODU4LCAwLjg5NTkxLCAwLjg5NTkxLCAwLjg5NTkxLCAwLjg5NTkxLCAwLjgxMTEsIDAuNzk2MTEsIDAuODk3MTMsIDAuODY2NjcsIDAuODY2NjcsIDAuODY2NjcsIDAuODY2NjcsIDAuODY2NjcsIDAuODY2NjcsIDAuODY5MzYsIDAuODk2LCAwLjkwMDgzLCAwLjkwMDgzLCAwLjkwMDgzLCAwLjkwMDgzLCAwLjg0MjI0LCAwLjg0MjI0LCAwLjg0MjI0LCAwLjg0MjI0LCAwLjk3Mjc2LCAwLjk5NzkzLCAwLjk4NzE0LCAwLjk4NzE0LCAwLjk4NzE0LCAwLjk4NzE0LCAwLjk4NzE0LCAxLjA4NTk1LCAwLjg5ODc2LCAwLjk5MDc0LCAwLjk5MDc0LCAwLjk5MDc0LCAwLjk5MDc0LCAwLjk0MiwgMS4wMjMxLCAwLjk0MiwgMC45MTc1NSwgMC44NjY2NywgMC45MTc1NSwgMC44NjY2NywgMC45MTc1NSwgMC44NjY2NywgMC44MDMxNCwgMC44OTYsIDAuODAzMTQsIDAuODk2LCAwLjgwMzE0LCAwLjg5NiwgMC44MDMxNCwgMC44OTYsIDAuOTIyMjIsIDAuOTMzNzIsIDAuOTI5MTUsIDEuMDE0MTEsIDAuNzM3NjQsIDAuOTAwODMsIDAuNzM3NjQsIDAuOTAwODMsIDAuNzM3NjQsIDAuOTAwODMsIDAuNzM3NjQsIDAuOTAwODMsIDAuNzM3NjQsIDAuOTAwODMsIDAuODMwNTEsIDEuMDA1MTIsIDAuODMwNTEsIDEuMDA1MTIsIDAuODMwNTEsIDEuMDA1MTIsIDEsIDEsIDAuOTAyODQsIDAuOTk3OTMsIDAuOTA5NzYsIDAuOTk3OTMsIDAuODYwMjMsIDAuODQyMjQsIDAuODYwMjMsIDAuODQyMjQsIDAuODYwMjMsIDAuODQyMjQsIDAuODYwMjMsIDEuMDUzMjYsIDAuODYwMjMsIDAuODQyMjQsIDAuODI4NzMsIDEuMDc0NjksIDAuNzQsIDEuMDkzNzcsIDEsIDEsIDAuOTM4LCAwLjg0ODY5LCAxLjA2MjI2LCAxLCAxLCAwLjg0ODY5LCAwLjgzNzA0LCAwLjg0ODY5LCAwLjgxNDQxLCAwLjg1NTg4LCAxLjA4OTI3LCAwLjkxMTE1LCAwLjk5NzkzLCAxLCAxLCAwLjkxMTE1LCAwLjk5NzkzLCAwLjkxODg3LCAwLjkwOTkxLCAwLjk5NzkzLCAwLjg4NTgsIDAuOTg3MTQsIDAuODg1OCwgMC45ODcxNCwgMC44ODU4LCAwLjk4NzE0LCAwLjg5NCwgMC45MTQzNCwgMC43NDQ5OCwgMC45ODE5NiwgMSwgMSwgMC43NDQ5OCwgMC45ODE5NiwgMC43MzkxNCwgMC43OTIsIDAuNzM5MTQsIDAuNzkyLCAxLCAxLCAwLjczOTE0LCAwLjc5MiwgMSwgMSwgMC44MTM2MywgMC45MDQsIDAuODEzNjMsIDEuMTkxMzcsIDAuODk1OTEsIDAuOTkwNzQsIDAuODk1OTEsIDAuOTkwNzQsIDAuODk1OTEsIDAuOTkwNzQsIDAuODk1OTEsIDAuOTkwNzQsIDAuODk1OTEsIDAuOTkwNzQsIDAuODk1OTEsIDAuOTkwNzQsIDAuODk2MzMsIDEuMDE5MTUsIDAuODExMSwgMC45NDIsIDAuODExMSwgMC45MDUzMSwgMC44NTYsIDAuOTA1MzEsIDAuODU2LCAwLjkwNTMxLCAwLjg1NiwgMSwgMC45MjI0MSwgMC45MTc1NSwgMC44NjY2NywgMC43ODgsIDAuODY5MzYsIDAuODg1OCwgMC44OTg3NiwgMSwgMSwgMC44MTM2MywgMS4xOTEzNywgMC45MDA4OCwgMC45MDA4OCwgMC45MDA4OCwgMC45MDA4OCwgMC45MDA4OCwgMC45MDA4OCwgMC45MDA4OCwgMC45MDA4OCwgMC45MDA4OCwgMC45MDM4OCwgMS4wMzkwMSwgMC45MjEzOCwgMC43ODEwNSwgMC43MTU0LCAwLjg2MTY5LCAwLjgwNTEzLCAwLjk0MDA3LCAwLjgyNTI4LCAwLjk4NjEyLCAxLjA2MjI2LCAwLjkxNzU1LCAwLjgxMjYsIDAuODE4ODQsIDAuOTI4MTksIDAuNzM3NjQsIDAuOTA1MzEsIDAuOTAyODQsIDAuODg1OCwgMC44NjAyMywgMC44MTI2LCAwLjkxMTcyLCAwLjk2NTE4LCAwLjkxMTE1LCAwLjgzMDg5LCAwLjg4NTgsIDAuODc3OTEsIDAuNzk3NjEsIDAuODkyOTcsIDAuODEzNjMsIDAuODgxNTcsIDAuODk5OTIsIDAuODU2MDgsIDAuODE5OTIsIDAuOTQzMDcsIDAuODYwMjMsIDAuODgxNTcsIDAuOTUzMDgsIDAuOTg2OTksIDAuOTk3OTMsIDEuMDYyMjYsIDAuOTU4MTcsIDAuOTUzMDgsIDAuOTczNTgsIDAuOTI4LCAwLjk4MDg4LCAwLjk4Njk5LCAwLjkyNzYxLCAwLjk5NzkzLCAwLjk2MDE3LCAxLjA2MjI2LCAwLjk4NiwgMC45NDQsIDAuOTU5NzgsIDAuOTM4LCAwLjk2NzA1LCAwLjk4NzE0LCAwLjgwNDQyLCAwLjk4OTcyLCAxLCAwLjg5NzYyLCAxLjA0NTUyLCAwLjk1ODE3LCAwLjk5MDA3LCAwLjg3MDY0LCAwLjkxODc5LCAwLjg4ODg4LCAxLjA2MjI2LCAwLjk1ODE3LCAwLjk4NzE0LCAwLjk1ODE3LCAwLjg4ODg4LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjg5NjMzLCAxLjAxOTE1LCAwLjg5NjMzLCAxLjAxOTE1LCAwLjg5NjMzLCAxLjAxOTE1LCAwLjgxMTEsIDAuOTQyLCAwLjkyMTksIDEsIDAuODk5MDMsIDEsIDEsIDEsIDAuOTMxNzMsIDAuOTMxNzMsIDAuOTMxNzMsIDEsIDEuMDYzMDQsIDEuMDYzMDQsIDEuMDY5MDQsIDAuODk5MDMsIDAuODk5MDMsIDAuODA1NDksIDEsIDEuMTU2LCAxLCAxLCAwLjc2NTc1LCAwLjc2NTc1LCAxLCAxLCAwLjcyNDU4LCAxLCAxLCAxLCAxLCAwLjkyMjQxLCAxLCAxLCAxLCAwLjYxOSwgMSwgMS4zNjE0NSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMS4wNzI1NywgMSwgMC43NDcwNSwgMC43MTExOSwgMS4wMjA1OCwgMS4wMjQsIDEuMDIxMTksIDEsIDEsIDEuMTUzNiwgMS4wODU5NSwgMS4wODU5NSwgMSwgMS4wODU5NSwgMS4wODU5NSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMS4wNTYzOCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMV07XG5leHBvcnRzLk15cmlhZFByb1JlZ3VsYXJGYWN0b3JzID0gTXlyaWFkUHJvUmVndWxhckZhY3RvcnM7XG5jb25zdCBNeXJpYWRQcm9SZWd1bGFyTWV0cmljcyA9IHtcbiAgbGluZUhlaWdodDogMS4yLFxuICBsaW5lR2FwOiAwLjJcbn07XG5leHBvcnRzLk15cmlhZFByb1JlZ3VsYXJNZXRyaWNzID0gTXlyaWFkUHJvUmVndWxhck1ldHJpY3M7XG5cbi8qKiovIH0pLFxuLyogMTcgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMpID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuU2Vnb2V1aVJlZ3VsYXJNZXRyaWNzID0gZXhwb3J0cy5TZWdvZXVpUmVndWxhckZhY3RvcnMgPSBleHBvcnRzLlNlZ29ldWlJdGFsaWNNZXRyaWNzID0gZXhwb3J0cy5TZWdvZXVpSXRhbGljRmFjdG9ycyA9IGV4cG9ydHMuU2Vnb2V1aUJvbGRNZXRyaWNzID0gZXhwb3J0cy5TZWdvZXVpQm9sZEl0YWxpY01ldHJpY3MgPSBleHBvcnRzLlNlZ29ldWlCb2xkSXRhbGljRmFjdG9ycyA9IGV4cG9ydHMuU2Vnb2V1aUJvbGRGYWN0b3JzID0gdm9pZCAwO1xuY29uc3QgU2Vnb2V1aUJvbGRGYWN0b3JzID0gWzEuNzY3MzgsIDEsIDEsIDAuOTkyOTcsIDAuOTgyNCwgMS4wNDAxNiwgMS4wNjQ5NywgMS4wMzQyNCwgMC45NzUyOSwgMS4xNzY0NywgMS4yMzIwMywgMS4xMDg1LCAxLjEwODUsIDEuMTY5MzksIDEuMjEwNywgMC45NzU0LCAxLjIxNDA4LCAwLjk3NTQsIDEuNTk1NzgsIDEuMDM0MjQsIDEuMDM0MjQsIDEuMDM0MjQsIDEuMDM0MjQsIDEuMDM0MjQsIDEuMDM0MjQsIDEuMDM0MjQsIDEuMDM0MjQsIDEuMDM0MjQsIDEuMDM0MjQsIDAuODEzNzgsIDAuODEzNzgsIDEuMjEwNywgMS4yMTA3LCAxLjIxMDcsIDAuNzE3MDMsIDAuOTc4NDcsIDAuOTczNjMsIDAuODg3NzYsIDAuODY0MSwgMS4wMjA5NiwgMC43OTc5NSwgMC44NTEzMiwgMC45MTQsIDEuMDYwODUsIDEuMTQwNiwgMC44MDA3LCAwLjg5ODU4LCAwLjgzNjkzLCAxLjE0ODg5LCAxLjA5Mzk4LCAwLjk3NDg5LCAwLjkyMDk0LCAwLjk3NDg5LCAwLjkwMzk5LCAwLjg0MDQxLCAwLjk1OTIzLCAxLjAwMTM1LCAxLCAxLjA2NDY3LCAwLjk4MjQzLCAwLjkwOTk2LCAwLjk5MzYxLCAxLjEwODUsIDEuNTY5NDIsIDEuMTA4NSwgMS4yMTA3LCAwLjc0NjI3LCAwLjk0MjgyLCAwLjk2NzUyLCAxLjAxNTE5LCAwLjg2MzA0LCAxLjAxMzU5LCAwLjk3Mjc4LCAxLjE1MTAzLCAxLjAxMzU5LCAwLjk4NTYxLCAxLjAyMjg1LCAxLjAyMjg1LCAxLjAwNTI3LCAxLjAyMjg1LCAxLjAzMDIsIDAuOTkwNDEsIDEuMDAwOCwgMS4wMTUxOSwgMS4wMTM1OSwgMS4wMjI1OCwgMC43OTEwNCwgMS4xNjg2MiwgMC45OTA0MSwgMC45NzQ1NCwgMS4wMjUxMSwgMC45OTI5OCwgMC45Njc1MiwgMC45NTgwMSwgMC45NDg1NiwgMS4xNjU3OSwgMC45NDg1NiwgMS4yMTA3LCAwLjk4MjQsIDEuMDM0MjQsIDEuMDM0MjQsIDEsIDEuMDM0MjQsIDEuMTY1NzksIDAuODcyNywgMS4zODcxLCAxLjE4NjIyLCAxLjEwODE4LCAxLjA0NDc4LCAxLjIxMDcsIDEuMTg2MjIsIDAuNzUxNTUsIDAuOTQ5OTQsIDEuMjg4MjYsIDEuMjE0MDgsIDEuMjE0MDgsIDAuOTEwNTYsIDEsIDAuOTE1NzIsIDAuOTc1NCwgMC42NDY2MywgMS4xODMyOCwgMS4yNDg2NiwgMS4wNDQ3OCwgMS4xNDE2OSwgMS4xNTc0OSwgMS4xNzM4OSwgMC43MTcwMywgMC45NzM2MywgMC45NzM2MywgMC45NzM2MywgMC45NzM2MywgMC45NzM2MywgMC45NzM2MywgMC45MzUwNiwgMC44NjQxLCAwLjc5Nzk1LCAwLjc5Nzk1LCAwLjc5Nzk1LCAwLjc5Nzk1LCAxLjE0MDYsIDEuMTQwNiwgMS4xNDA2LCAxLjE0MDYsIDEuMDIwOTYsIDEuMDkzOTgsIDAuOTc0MjYsIDAuOTc0MjYsIDAuOTc0MjYsIDAuOTc0MjYsIDAuOTc0MjYsIDEuMjEwNywgMC45NzQ4OSwgMS4wMDEzNSwgMS4wMDEzNSwgMS4wMDEzNSwgMS4wMDEzNSwgMC45MDk5NiwgMC45MjA5NCwgMS4wMjc5OCwgMC45Njc1MiwgMC45Njc1MiwgMC45Njc1MiwgMC45Njc1MiwgMC45Njc1MiwgMC45Njc1MiwgMC45MzEzNiwgMC44NjMwNCwgMC45NzI3OCwgMC45NzI3OCwgMC45NzI3OCwgMC45NzI3OCwgMS4wMjI4NSwgMS4wMjI4NSwgMS4wMjI4NSwgMS4wMjI4NSwgMC45NzEyMiwgMC45OTA0MSwgMSwgMSwgMSwgMSwgMSwgMS4yODgyNiwgMS4wMDA4LCAwLjk5MDQxLCAwLjk5MDQxLCAwLjk5MDQxLCAwLjk5MDQxLCAwLjk2NzUyLCAxLjAxNTE5LCAwLjk2NzUyLCAwLjk3MzYzLCAwLjk2NzUyLCAwLjk3MzYzLCAwLjk2NzUyLCAwLjk3MzYzLCAwLjk2NzUyLCAwLjg2NDEsIDAuODYzMDQsIDAuODY0MSwgMC44NjMwNCwgMC44NjQxLCAwLjg2MzA0LCAwLjg2NDEsIDAuODYzMDQsIDEuMDIwOTYsIDEuMDMwNTcsIDEuMDIwOTYsIDEuMDM1MTcsIDAuNzk3OTUsIDAuOTcyNzgsIDAuNzk3OTUsIDAuOTcyNzgsIDAuNzk3OTUsIDAuOTcyNzgsIDAuNzk3OTUsIDAuOTcyNzgsIDAuNzk3OTUsIDAuOTcyNzgsIDAuOTE0LCAxLjAxMzU5LCAwLjkxNCwgMS4wMTM1OSwgMC45MTQsIDEuMDEzNTksIDEsIDEsIDEuMDYwODUsIDAuOTg1NjEsIDEuMDYwODUsIDEuMDA4NzksIDEuMTQwNiwgMS4wMjI4NSwgMS4xNDA2LCAxLjAyMjg1LCAxLjE0MDYsIDEuMDIyODUsIDEuMTQwNiwgMS4wMjI4NSwgMS4xNDA2LCAxLjAyMjg1LCAwLjk3MTM4LCAxLjA4NjkyLCAwLjgwMDcsIDEuMDIyODUsIDEsIDEsIDEuMDA1MjcsIDAuODM2OTMsIDEuMDIyODUsIDEsIDEsIDAuODM2OTMsIDAuOTQ1NSwgMC44MzY5MywgMC45MDQxOCwgMC44MzY5MywgMS4xMzAwNSwgMS4wOTM5OCwgMC45OTA0MSwgMSwgMSwgMS4wOTM5OCwgMC45OTA0MSwgMC45NjY5MiwgMS4wOTI1MSwgMC45OTA0MSwgMC45NzQ4OSwgMS4wMDA4LCAwLjk3NDg5LCAxLjAwMDgsIDAuOTc0ODksIDEuMDAwOCwgMC45Mzk5NCwgMC45NzkzMSwgMC45MDM5OSwgMS4wMjI1OCwgMSwgMSwgMC45MDM5OSwgMS4wMjI1OCwgMC44NDA0MSwgMC43OTEwNCwgMC44NDA0MSwgMC43OTEwNCwgMC44NDA0MSwgMC43OTEwNCwgMC44NDA0MSwgMC43OTEwNCwgMSwgMSwgMC45NTkyMywgMS4wNzAzNCwgMC45NTkyMywgMS4xNjg2MiwgMS4wMDEzNSwgMC45OTA0MSwgMS4wMDEzNSwgMC45OTA0MSwgMS4wMDEzNSwgMC45OTA0MSwgMS4wMDEzNSwgMC45OTA0MSwgMS4wMDEzNSwgMC45OTA0MSwgMS4wMDEzNSwgMC45OTA0MSwgMS4wNjQ2NywgMS4wMjUxMSwgMC45MDk5NiwgMC45Njc1MiwgMC45MDk5NiwgMC45OTM2MSwgMC45NTgwMSwgMC45OTM2MSwgMC45NTgwMSwgMC45OTM2MSwgMC45NTgwMSwgMS4wNzczMywgMS4wMzQyNCwgMC45NzM2MywgMC45Njc1MiwgMC45MzUwNiwgMC45MzEzNiwgMC45NzQ4OSwgMS4wMDA4LCAxLCAxLCAwLjk1OTIzLCAxLjE2ODYyLCAxLjE1MTAzLCAxLjE1MTAzLCAxLjAxMTczLCAxLjAzOTU5LCAwLjc1OTUzLCAwLjgxMzc4LCAwLjc5OTEyLCAxLjE1MTAzLCAxLjIxOTk0LCAwLjk1MTYxLCAwLjg3ODE1LCAxLjAxMTQ5LCAwLjgxNTI1LCAwLjc2NzYsIDAuOTgxNjcsIDEuMDExMzQsIDEuMDI1NDYsIDAuODQwOTcsIDEuMDMwODksIDEuMTgxMDIsIDAuOTczNjMsIDAuODg3NzYsIDAuODUxMzQsIDAuOTc4MjYsIDAuNzk3OTUsIDAuOTkzNjEsIDEuMDYwODUsIDAuOTc0ODksIDEuMTQwNiwgMC44OTg1OCwgMS4wMzg4LCAxLjE0ODg5LCAxLjA5Mzk4LCAwLjg2MDM5LCAwLjk3NDg5LCAxLjA1OTUsIDAuOTIwOTQsIDAuOTQ3OTMsIDAuOTU5MjMsIDAuOTA5OTYsIDAuOTkzNDYsIDAuOTgyNDMsIDEuMDIxMTIsIDAuOTU0OTMsIDEuMTQwNiwgMC45MDk5NiwgMS4wMzU3NCwgMS4wMjU5NywgMS4wMDA4LCAxLjE4MTAyLCAxLjA2NjI4LCAxLjAzNTc0LCAxLjAxOTIsIDEuMDE5MzIsIDEuMDA4ODYsIDAuOTc1MzEsIDEuMDEwNiwgMS4wMDA4LCAxLjEzMTg5LCAxLjE4MTAyLCAxLjAyMjc3LCAwLjk4NjgzLCAxLjAwMTYsIDAuOTk1NjEsIDEuMDcyMzcsIDEuMDAwOCwgMC45MDQzNCwgMC45OTkyMSwgMC45MzgwMywgMC44OTY1LCAxLjIzMDg1LCAxLjA2NjI4LCAxLjA0OTgzLCAwLjk2MjY4LCAxLjA0OTksIDAuOTg0MzksIDEuMTgxMDIsIDEuMDY2MjgsIDEuMDAwOCwgMS4wNjYyOCwgMC45ODQzOSwgMC43OTc5NSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMS4wOTQ2NiwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMC45NzI3OCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMS4wMjA2NSwgMSwgMSwgMSwgMSwgMSwgMSwgMS4wNjQ2NywgMS4wMjUxMSwgMS4wNjQ2NywgMS4wMjUxMSwgMS4wNjQ2NywgMS4wMjUxMSwgMC45MDk5NiwgMC45Njc1MiwgMSwgMS4yMTQwOCwgMC44OTkwMywgMSwgMSwgMC43NTE1NSwgMS4wNDM5NCwgMS4wNDM5NCwgMS4wNDM5NCwgMS4wNDM5NCwgMC45ODYzMywgMC45ODYzMywgMC45ODYzMywgMC43MzA0NywgMC43MzA0NywgMS4yMDY0MiwgMC45MTIxMSwgMS4yNTYzNSwgMS4yMjIsIDEuMDI5NTYsIDEuMDMzNzIsIDEuMDMzNzIsIDAuOTYwMzksIDEuMjQ2MzMsIDEsIDEuMTI0NTQsIDAuOTM1MDMsIDEuMDM0MjQsIDEuMTk2ODcsIDEuMDM0MjQsIDEsIDEsIDEsIDAuNzcxLCAxLCAxLCAxLjE1NzQ5LCAxLjE1NzQ5LCAxLjE1NzQ5LCAxLjEwOTQ4LCAwLjg2Mjc5LCAwLjk0NDM0LCAwLjg2Mjc5LCAwLjk0NDM0LCAwLjg2MTgyLCAxLCAxLCAxLjE2ODk3LCAxLCAwLjk2MDg1LCAwLjkwMTM3LCAxLjIxMDcsIDEuMTg0MTYsIDEuMTM5NzMsIDAuNjk4MjUsIDAuOTcxNiwgMi4xMDMzOSwgMS4yOTAwNCwgMS4yOTAwNCwgMS4yMTE3MiwgMS4yOTAwNCwgMS4yOTAwNCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMS40MjYwMywgMSwgMC45OTg2MiwgMC45OTg2MiwgMSwgMC44NzAyNSwgMC44NzAyNSwgMC44NzAyNSwgMC44NzAyNSwgMS4xODg3NCwgMS40MjYwMywgMSwgMS40MjYwMywgMS40MjYwMywgMC45OTg2MiwgMSwgMSwgMSwgMSwgMSwgMS4yODg2LCAxLjA0MzE1LCAxLjE1Mjk2LCAxLjM0MTYzLCAxLCAxLCAxLCAxLjA5MTkzLCAxLjA5MTkzLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxXTtcbmV4cG9ydHMuU2Vnb2V1aUJvbGRGYWN0b3JzID0gU2Vnb2V1aUJvbGRGYWN0b3JzO1xuY29uc3QgU2Vnb2V1aUJvbGRNZXRyaWNzID0ge1xuICBsaW5lSGVpZ2h0OiAxLjMzMDA4LFxuICBsaW5lR2FwOiAwXG59O1xuZXhwb3J0cy5TZWdvZXVpQm9sZE1ldHJpY3MgPSBTZWdvZXVpQm9sZE1ldHJpY3M7XG5jb25zdCBTZWdvZXVpQm9sZEl0YWxpY0ZhY3RvcnMgPSBbMS43NjczOCwgMSwgMSwgMC45ODk0NiwgMS4wMzk1OSwgMS4wNDAxNiwgMS4wMjgwOSwgMS4wMzYsIDAuOTc2MzksIDEuMTA5NTMsIDEuMjMyMDMsIDEuMTExNDQsIDEuMTExNDQsIDEuMTY5MzksIDEuMjEyMzcsIDAuOTc1NCwgMS4yMTI2MSwgMC45NzU0LCAxLjU5NzU0LCAxLjAzNiwgMS4wMzYsIDEuMDM2LCAxLjAzNiwgMS4wMzYsIDEuMDM2LCAxLjAzNiwgMS4wMzYsIDEuMDM2LCAxLjAzNiwgMC44MTM3OCwgMC44MTM3OCwgMS4yMTIzNywgMS4yMTIzNywgMS4yMTIzNywgMC43MzU0MSwgMC45Nzg0NywgMC45NzM2MywgMC44OTcyMywgMC44Nzg5NywgMS4wNDI2LCAwLjc5NDI5LCAwLjg1MjkyLCAwLjkxMTQ5LCAxLjA1ODE1LCAxLjE0MDYsIDAuNzk2MzEsIDAuOTAxMjgsIDAuODM4NTMsIDEuMDQzOTYsIDEuMTA2MTUsIDAuOTc1NTIsIDAuOTQ0MzYsIDAuOTc1NTIsIDAuODg2NDEsIDAuODA1MjcsIDAuOTYwODMsIDEuMDAxMzUsIDEsIDEuMDY3NzcsIDAuOTgxNywgMC45MTE0MiwgMC45OTM2MSwgMS4xMTE0NCwgMS41NzI5MywgMS4xMTE0NCwgMS4yMTIzNywgMC43NDYyNywgMS4zMTgxOCwgMS4wNjU4NSwgMC45NzA0MiwgMC44MzA1NSwgMC45NzA0MiwgMC45MzUwMywgMS4xMjYxLCAwLjk3MDQyLCAwLjk3OTIyLCAxLjE0MjM2LCAwLjk0NTUyLCAxLjAxMDU0LCAxLjE0MjM2LCAxLjAyNDcxLCAwLjk3OTIyLCAwLjk0MTY1LCAwLjk3MDQyLCAwLjk3MDQyLCAxLjAyNzYsIDAuNzg5MjksIDEuMTI2MSwgMC45NzkyMiwgMC45NTg3NCwgMS4wMjE5NywgMC45ODUwNywgMC45Njc1MiwgMC45NzE2OCwgMC45NTEwNywgMS4xNjU3OSwgMC45NTEwNywgMS4yMTIzNywgMS4wMzk1OSwgMS4wMzYsIDEuMDM2LCAxLCAxLjAzNiwgMS4xNjU3OSwgMC44NzM1NywgMS4zMTgxOCwgMS4xODc1NCwgMS4yNjc4MSwgMS4wNTM1NiwgMS4yMTIzNywgMS4xODYyMiwgMC43OTQ4NywgMC45NDk5NCwgMS4yOTAwNCwgMS4yNDA0NywgMS4yNDA0NywgMS4zMTgxOCwgMSwgMC45MTQ4NCwgMC45NzU0LCAxLjMxODE4LCAxLjEzNDksIDEuMjQ4NjYsIDEuMDUzNTYsIDEuMTM5MzQsIDEuMTU1NzQsIDEuMTczODksIDAuNzM1NDEsIDAuOTczNjMsIDAuOTczNjMsIDAuOTczNjMsIDAuOTczNjMsIDAuOTczNjMsIDAuOTczNjMsIDAuOTQzODUsIDAuODc4OTcsIDAuNzk0MjksIDAuNzk0MjksIDAuNzk0MjksIDAuNzk0MjksIDEuMTQwNiwgMS4xNDA2LCAxLjE0MDYsIDEuMTQwNiwgMS4wNDI2LCAxLjEwNjE1LCAwLjk3NTUyLCAwLjk3NTUyLCAwLjk3NTUyLCAwLjk3NTUyLCAwLjk3NTUyLCAxLjIxMjM3LCAwLjk3NTUyLCAxLjAwMTM1LCAxLjAwMTM1LCAxLjAwMTM1LCAxLjAwMTM1LCAwLjkxMTQyLCAwLjk0NDM2LCAwLjk4NzIxLCAxLjA2NTg1LCAxLjA2NTg1LCAxLjA2NTg1LCAxLjA2NTg1LCAxLjA2NTg1LCAxLjA2NTg1LCAwLjk2NzA1LCAwLjgzMDU1LCAwLjkzNTAzLCAwLjkzNTAzLCAwLjkzNTAzLCAwLjkzNTAzLCAxLjE0MjM2LCAxLjE0MjM2LCAxLjE0MjM2LCAxLjE0MjM2LCAwLjkzMTI1LCAwLjk3OTIyLCAwLjk0MTY1LCAwLjk0MTY1LCAwLjk0MTY1LCAwLjk0MTY1LCAwLjk0MTY1LCAxLjI5MDA0LCAwLjk0MTY1LCAwLjk3OTIyLCAwLjk3OTIyLCAwLjk3OTIyLCAwLjk3OTIyLCAwLjk2NzUyLCAwLjk3MDQyLCAwLjk2NzUyLCAwLjk3MzYzLCAxLjA2NTg1LCAwLjk3MzYzLCAxLjA2NTg1LCAwLjk3MzYzLCAxLjA2NTg1LCAwLjg3ODk3LCAwLjgzMDU1LCAwLjg3ODk3LCAwLjgzMDU1LCAwLjg3ODk3LCAwLjgzMDU1LCAwLjg3ODk3LCAwLjgzMDU1LCAxLjA0MjYsIDEuMDAzMywgMS4wNDI2LCAwLjk3MDQyLCAwLjc5NDI5LCAwLjkzNTAzLCAwLjc5NDI5LCAwLjkzNTAzLCAwLjc5NDI5LCAwLjkzNTAzLCAwLjc5NDI5LCAwLjkzNTAzLCAwLjc5NDI5LCAwLjkzNTAzLCAwLjkxMTQ5LCAwLjk3MDQyLCAwLjkxMTQ5LCAwLjk3MDQyLCAwLjkxMTQ5LCAwLjk3MDQyLCAxLCAxLCAxLjA1ODE1LCAwLjk3OTIyLCAxLjA1ODE1LCAwLjk3OTIyLCAxLjE0MDYsIDEuMTQyMzYsIDEuMTQwNiwgMS4xNDIzNiwgMS4xNDA2LCAxLjE0MjM2LCAxLjE0MDYsIDEuMTQyMzYsIDEuMTQwNiwgMS4xNDIzNiwgMC45NzQ0MSwgMS4wNDMwMiwgMC43OTYzMSwgMS4wMTU4MiwgMSwgMSwgMS4wMTA1NCwgMC44Mzg1MywgMS4xNDIzNiwgMSwgMSwgMC44Mzg1MywgMS4wOTEyNSwgMC44Mzg1MywgMC45MDQxOCwgMC44Mzg1MywgMS4xOTUwOCwgMS4xMDYxNSwgMC45NzkyMiwgMSwgMSwgMS4xMDYxNSwgMC45NzkyMiwgMS4wMTAzNCwgMS4xMDQ2NiwgMC45NzkyMiwgMC45NzU1MiwgMC45NDE2NSwgMC45NzU1MiwgMC45NDE2NSwgMC45NzU1MiwgMC45NDE2NSwgMC45MTYwMiwgMC45MTk4MSwgMC44ODY0MSwgMS4wMjc2LCAxLCAxLCAwLjg4NjQxLCAxLjAyNzYsIDAuODA1MjcsIDAuNzg5MjksIDAuODA1MjcsIDAuNzg5MjksIDAuODA1MjcsIDAuNzg5MjksIDAuODA1MjcsIDAuNzg5MjksIDEsIDEsIDAuOTYwODMsIDEuMDU0MDMsIDAuOTU5MjMsIDEuMTY4NjIsIDEuMDAxMzUsIDAuOTc5MjIsIDEuMDAxMzUsIDAuOTc5MjIsIDEuMDAxMzUsIDAuOTc5MjIsIDEuMDAxMzUsIDAuOTc5MjIsIDEuMDAxMzUsIDAuOTc5MjIsIDEuMDAxMzUsIDAuOTc5MjIsIDEuMDY3NzcsIDEuMDIxOTcsIDAuOTExNDIsIDAuOTY3NTIsIDAuOTExNDIsIDAuOTkzNjEsIDAuOTcxNjgsIDAuOTkzNjEsIDAuOTcxNjgsIDAuOTkzNjEsIDAuOTcxNjgsIDEuMjMxOTksIDEuMDM2LCAwLjk3MzYzLCAxLjA2NTg1LCAwLjk0Mzg1LCAwLjk2NzA1LCAwLjk3NTUyLCAwLjk0MTY1LCAxLCAxLCAwLjk2MDgzLCAxLjEyNjEsIDEuMzE4MTgsIDEuMzE4MTgsIDEuMzE4MTgsIDEuMzE4MTgsIDEuMzE4MTgsIDEuMzE4MTgsIDEuMzE4MTgsIDEuMzE4MTgsIDEuMzE4MTgsIDAuOTUxNjEsIDEuMjcxMjYsIDEuMDA4MTEsIDAuODMyODQsIDAuNzc3MDIsIDAuOTkxMzcsIDAuOTUyNTMsIDEuMDM0NywgMC44NjE0MiwgMS4wNzIwNSwgMS4xNDIzNiwgMC45NzM2MywgMC44OTcyMywgMC44Njg2OSwgMS4wOTgxOCwgMC43OTQyOSwgMC45OTM2MSwgMS4wNTgxNSwgMC45NzU1MiwgMS4xNDA2LCAwLjkwMTI4LCAxLjA2NjYyLCAxLjA0Mzk2LCAxLjEwNjE1LCAwLjg0OTE4LCAwLjk3NTUyLCAxLjA0Njk0LCAwLjk0NDM2LCAwLjk4MDE1LCAwLjk2MDgzLCAwLjkxMTQyLCAxLjAwMzU2LCAwLjk4MTcsIDEuMDE5NDUsIDAuOTg5OTksIDEuMTQwNiwgMC45MTE0MiwgMS4wNDk2MSwgMC45ODk4LCAxLjAwNjM5LCAxLjE0MjM2LCAxLjA3NTE0LCAxLjA0OTYxLCAwLjk5NjA3LCAxLjAyODk3LCAxLjAwOCwgMC45ODk4LCAwLjk1MTM0LCAxLjAwNjM5LCAxLjExMTIxLCAxLjE0MjM2LCAxLjAwNTE4LCAwLjk3OTgxLCAxLjAyMTg2LCAxLCAxLjA4NTc4LCAwLjk0MTY1LCAwLjk5MzE0LCAwLjk4Mzg3LCAwLjkzMDI4LCAwLjkzMzc3LCAxLjM1MTI1LCAxLjA3NTE0LCAxLjEwNjg3LCAwLjkzNDkxLCAxLjA0MjMyLCAxLjAwMzUxLCAxLjE0MjM2LCAxLjA3NTE0LCAwLjk0MTY1LCAxLjA3NTE0LCAxLjAwMzUxLCAwLjc5NDI5LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLjA5MDk3LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjkzNTAzLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjk2NjA5LCAxLCAxLCAxLCAxLCAxLCAxLCAxLjA2Nzc3LCAxLjAyMTk3LCAxLjA2Nzc3LCAxLjAyMTk3LCAxLjA2Nzc3LCAxLjAyMTk3LCAwLjkxMTQyLCAwLjk2NzUyLCAxLCAxLjIxMjYxLCAwLjg5OTAzLCAxLCAxLCAwLjc1MTU1LCAxLjA0NzQ1LCAxLjA0NzQ1LCAxLjA0NzQ1LCAxLjA0Mzk0LCAwLjk4NjMzLCAwLjk4NjMzLCAwLjk4NjMzLCAwLjcyOTU5LCAwLjcyOTU5LCAxLjIwNTAyLCAwLjkxNDA2LCAxLjI2NTE0LCAxLjIyMiwgMS4wMjk1NiwgMS4wMzM3MiwgMS4wMzM3MiwgMC45NjAzOSwgMS4yNDYzMywgMSwgMS4wOTEyNSwgMC45MzMyNywgMS4wMzMzNiwgMS4xNjU0MSwgMS4wMzYsIDEsIDEsIDEsIDAuNzcxLCAxLCAxLCAxLjE1NTc0LCAxLjE1NTc0LCAxLjE1NTc0LCAxLjE1NTc0LCAwLjg2MzY0LCAwLjk0NDM0LCAwLjg2Mjc5LCAwLjk0NDM0LCAwLjg2MjI0LCAxLCAxLCAxLjE2Nzk4LCAxLCAwLjk2MDg1LCAwLjkwMDY4LCAxLjIxMjM3LCAxLjE4NDE2LCAxLjEzOTA0LCAwLjY5ODI1LCAwLjk3MTYsIDIuMTAzMzksIDEuMjkwMDQsIDEuMjkwMDQsIDEuMjEzMzksIDEuMjkwMDQsIDEuMjkwMDQsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEuNDI2MDMsIDEsIDAuOTk4NjIsIDAuOTk4NjIsIDEsIDAuODcwMjUsIDAuODcwMjUsIDAuODcwMjUsIDAuODcwMjUsIDEuMTg3NzUsIDEuNDI2MDMsIDEsIDEuNDI2MDMsIDEuNDI2MDMsIDAuOTk4NjIsIDEsIDEsIDEsIDEsIDEsIDEuMjg4NiwgMS4wNDMxNSwgMS4xNTI5NiwgMS4zNDE2MywgMSwgMSwgMSwgMS4xMzI2OSwgMS4xMzI2OSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMV07XG5leHBvcnRzLlNlZ29ldWlCb2xkSXRhbGljRmFjdG9ycyA9IFNlZ29ldWlCb2xkSXRhbGljRmFjdG9ycztcbmNvbnN0IFNlZ29ldWlCb2xkSXRhbGljTWV0cmljcyA9IHtcbiAgbGluZUhlaWdodDogMS4zMzAwOCxcbiAgbGluZUdhcDogMFxufTtcbmV4cG9ydHMuU2Vnb2V1aUJvbGRJdGFsaWNNZXRyaWNzID0gU2Vnb2V1aUJvbGRJdGFsaWNNZXRyaWNzO1xuY29uc3QgU2Vnb2V1aUl0YWxpY0ZhY3RvcnMgPSBbMS43NjczOCwgMSwgMSwgMC45ODk0NiwgMS4xNDc2MywgMS4wNTM2NSwgMS4wNjIzNCwgMC45NjkyNywgMC45MjU4NiwgMS4xNTM3MywgMS4xODQxNCwgMC45MTM0OSwgMC45MTM0OSwgMS4wNzQwMywgMS4xNzMwOCwgMC43ODM4MywgMS4yMDA4OCwgMC43ODM4MywgMS40MjUzMSwgMC45NjkyNywgMC45NjkyNywgMC45NjkyNywgMC45NjkyNywgMC45NjkyNywgMC45NjkyNywgMC45NjkyNywgMC45NjkyNywgMC45NjkyNywgMC45NjkyNywgMC43ODM4MywgMC43ODM4MywgMS4xNzMwOCwgMS4xNzMwOCwgMS4xNzMwOCwgMC43NzM0OSwgMC45NDU2NSwgMC45NDcyOSwgMC44NTk0NCwgMC44ODUwNiwgMC45ODU4LCAwLjc0ODE3LCAwLjgwMDE2LCAwLjg4NDQ5LCAwLjk4MDM5LCAwLjk1NzgyLCAwLjY5MjM4LCAwLjg5ODk4LCAwLjgzMjMxLCAwLjk4MTgzLCAxLjAzOTg5LCAwLjk2OTI0LCAwLjg2MjM3LCAwLjk2OTI0LCAwLjgwNTk1LCAwLjc0NTI0LCAwLjg2MDkxLCAwLjk1NDAyLCAwLjk0MTQzLCAwLjk4NDQ4LCAwLjg4NTgsIDAuODMwODksIDAuOTMyODUsIDEuMDk0OSwgMS4zOTAxNiwgMS4wOTQ5LCAxLjQ1OTk0LCAwLjc0NjI3LCAxLjA0ODM5LCAwLjk3NDU0LCAwLjk3NDU0LCAwLjg3MjA3LCAwLjk3NDU0LCAwLjg3NTMzLCAxLjA2MTUxLCAwLjk3NDU0LCAxLjAwMTc2LCAxLjE2NDg0LCAxLjA4MTMyLCAwLjk4MDQ3LCAxLjE2NDg0LCAxLjAyOTg5LCAxLjAxMDU0LCAwLjk2MjI1LCAwLjk3NDU0LCAwLjk3NDU0LCAxLjA2NTk4LCAwLjc5MDA0LCAxLjE2MzQ0LCAxLjAwMzUxLCAwLjk0NjI5LCAwLjk5NzMsIDAuOTEwMTYsIDAuOTY3NzcsIDAuOTA0MywgMC45MTA4MiwgMC45MjQ4MSwgMC45MTA4MiwgMS4xNzMwOCwgMC45NTc0OCwgMC45NjkyNywgMC45NjkyNywgMSwgMC45NjkyNywgMC45MjQ4MSwgMC44MDU5NywgMS4wNDgzOSwgMS4yMzM5MywgMS4xNzgxLCAwLjkyNDUsIDEuMTczMDgsIDEuMjA4MDgsIDAuNjMyMTgsIDAuOTQyNjEsIDEuMjQ4MjIsIDEuMDk5NzEsIDEuMDk5NzEsIDEuMDQ4MzksIDEsIDAuODUyNzMsIDAuNzgwMzIsIDEuMDQ4MzksIDEuMDk5NzEsIDEuMjIzMjYsIDAuOTI0NSwgMS4wOTgzNiwgMS4xMzUyNSwgMS4xNTIyMiwgMC43MDQyNCwgMC45NDcyOSwgMC45NDcyOSwgMC45NDcyOSwgMC45NDcyOSwgMC45NDcyOSwgMC45NDcyOSwgMC44NTQ5OCwgMC44ODUwNiwgMC43NDgxNywgMC43NDgxNywgMC43NDgxNywgMC43NDgxNywgMC45NTc4MiwgMC45NTc4MiwgMC45NTc4MiwgMC45NTc4MiwgMC45ODU4LCAxLjAzOTg5LCAwLjk2OTI0LCAwLjk2OTI0LCAwLjk2OTI0LCAwLjk2OTI0LCAwLjk2OTI0LCAxLjE3MzA4LCAwLjk2OTI0LCAwLjk1NDAyLCAwLjk1NDAyLCAwLjk1NDAyLCAwLjk1NDAyLCAwLjgzMDg5LCAwLjg2MjM3LCAwLjg4NDA5LCAwLjk3NDU0LCAwLjk3NDU0LCAwLjk3NDU0LCAwLjk3NDU0LCAwLjk3NDU0LCAwLjk3NDU0LCAwLjkyOTE2LCAwLjg3MjA3LCAwLjg3NTMzLCAwLjg3NTMzLCAwLjg3NTMzLCAwLjg3NTMzLCAwLjkzMTQ2LCAwLjkzMTQ2LCAwLjkzMTQ2LCAwLjkzMTQ2LCAwLjkzODU0LCAxLjAxMDU0LCAwLjk2MjI1LCAwLjk2MjI1LCAwLjk2MjI1LCAwLjk2MjI1LCAwLjk2MjI1LCAxLjI0ODIyLCAwLjg3NjEsIDEuMDAzNTEsIDEuMDAzNTEsIDEuMDAzNTEsIDEuMDAzNTEsIDAuOTY3NzcsIDAuOTc0NTQsIDAuOTY3NzcsIDAuOTQ3MjksIDAuOTc0NTQsIDAuOTQ3MjksIDAuOTc0NTQsIDAuOTQ3MjksIDAuOTc0NTQsIDAuODg1MDYsIDAuODcyMDcsIDAuODg1MDYsIDAuODcyMDcsIDAuODg1MDYsIDAuODcyMDcsIDAuODg1MDYsIDAuODcyMDcsIDAuOTg1OCwgMC45NTM5MSwgMC45ODU4LCAwLjk3NDU0LCAwLjc0ODE3LCAwLjg3NTMzLCAwLjc0ODE3LCAwLjg3NTMzLCAwLjc0ODE3LCAwLjg3NTMzLCAwLjc0ODE3LCAwLjg3NTMzLCAwLjc0ODE3LCAwLjg3NTMzLCAwLjg4NDQ5LCAwLjk3NDU0LCAwLjg4NDQ5LCAwLjk3NDU0LCAwLjg4NDQ5LCAwLjk3NDU0LCAxLCAxLCAwLjk4MDM5LCAxLjAwMTc2LCAwLjk4MDM5LCAxLjAwMTc2LCAwLjk1NzgyLCAwLjkzMTQ2LCAwLjk1NzgyLCAwLjkzMTQ2LCAwLjk1NzgyLCAwLjkzMTQ2LCAwLjk1NzgyLCAxLjE2NDg0LCAwLjk1NzgyLCAwLjkzMTQ2LCAwLjg0NDIxLCAxLjEyNzYxLCAwLjY5MjM4LCAxLjA4MTMyLCAxLCAxLCAwLjk4MDQ3LCAwLjgzMjMxLCAxLjE2NDg0LCAxLCAxLCAwLjg0NzIzLCAxLjA0ODYxLCAwLjg0NzIzLCAwLjc4NzU1LCAwLjgzMjMxLCAxLjIzNzM2LCAxLjAzOTg5LCAxLjAxMDU0LCAxLCAxLCAxLjAzOTg5LCAxLjAxMDU0LCAwLjk4NTcsIDEuMDM4NDksIDEuMDEwNTQsIDAuOTY5MjQsIDAuOTYyMjUsIDAuOTY5MjQsIDAuOTYyMjUsIDAuOTY5MjQsIDAuOTYyMjUsIDAuOTIzODMsIDAuOTAxNzEsIDAuODA1OTUsIDEuMDY1OTgsIDEsIDEsIDAuODA1OTUsIDEuMDY1OTgsIDAuNzQ1MjQsIDAuNzkwMDQsIDAuNzQ1MjQsIDAuNzkwMDQsIDAuNzQ1MjQsIDAuNzkwMDQsIDAuNzQ1MjQsIDAuNzkwMDQsIDEsIDEsIDAuODYwOTEsIDEuMDI3NTksIDAuODU3NzEsIDEuMTYzNDQsIDAuOTU0MDIsIDEuMDAzNTEsIDAuOTU0MDIsIDEuMDAzNTEsIDAuOTU0MDIsIDEuMDAzNTEsIDAuOTU0MDIsIDEuMDAzNTEsIDAuOTU0MDIsIDEuMDAzNTEsIDAuOTU0MDIsIDEuMDAzNTEsIDAuOTg0NDgsIDAuOTk3MywgMC44MzA4OSwgMC45Njc3NywgMC44MzA4OSwgMC45MzI4NSwgMC45MDQzLCAwLjkzMjg1LCAwLjkwNDMsIDAuOTMyODUsIDAuOTA0MywgMS4zMTg2OCwgMC45NjkyNywgMC45NDcyOSwgMC45NzQ1NCwgMC44NTQ5OCwgMC45MjkxNiwgMC45NjkyNCwgMC44NzYxLCAxLCAxLCAwLjg2MDkxLCAxLjE2MzQ0LCAxLjA0ODM5LCAxLjA0ODM5LCAxLjA0ODM5LCAxLjA0ODM5LCAxLjA0ODM5LCAxLjA0ODM5LCAxLjA0ODM5LCAxLjA0ODM5LCAxLjA0ODM5LCAwLjgxOTY1LCAwLjgxOTY1LCAwLjk0NzI5LCAwLjc4MDMyLCAwLjcxMDIyLCAwLjkwODgzLCAwLjg0MTcxLCAwLjk5ODc3LCAwLjc3NTk2LCAxLjA1NzM0LCAxLjIsIDAuOTQ3MjksIDAuODU5NDQsIDAuODI3OTEsIDAuOTYwNywgMC43NDgxNywgMC45MzI4NSwgMC45ODAzOSwgMC45NjkyNCwgMC45NTc4MiwgMC44OTg5OCwgMC45ODMxNiwgMC45ODE4MywgMS4wMzk4OSwgMC43ODYxNCwgMC45NjkyNCwgMC45NzY0MiwgMC44NjIzNywgMC44NjA3NSwgMC44NjA5MSwgMC44MzA4OSwgMC45MDA4MiwgMC44ODU4LCAwLjk3Mjk2LCAxLjAxMjg0LCAwLjk1NzgyLCAwLjgzMDg5LCAxLjA5NzYsIDEuMDQsIDEuMDMzNDIsIDEuMiwgMS4wNjc1LCAxLjA5NzYsIDAuOTgyMDUsIDEuMDM4MDksIDEuMDUwOTcsIDEuMDQsIDAuOTUzNjQsIDEuMDMzNDIsIDEuMDU0MDEsIDEuMiwgMS4wMjE0OCwgMS4wMTE5LCAxLjA0NzI0LCAxLjAxMjcsIDEuMDI3MzIsIDAuOTYyMjUsIDAuODk2NSwgMC45Nzc4MywgMC45MzU3NCwgMC45NDgxOCwgMS4zMDY3OSwgMS4wNjc1LCAxLjExODI2LCAwLjk5ODIxLCAxLjA1NTcsIDEuMDMyNiwgMS4yLCAxLjA2NzUsIDAuOTYyMjUsIDEuMDY3NSwgMS4wMzI2LCAwLjc0ODE3LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLjAzNzU0LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjg3NTMzLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjk4NzA1LCAxLCAxLCAxLCAxLCAxLCAxLCAwLjk4NDQ4LCAwLjk5NzMsIDAuOTg0NDgsIDAuOTk3MywgMC45ODQ0OCwgMC45OTczLCAwLjgzMDg5LCAwLjk2Nzc3LCAxLCAxLjIwMDg4LCAwLjg5OTAzLCAxLCAxLCAwLjc1MTU1LCAwLjk0OTQ1LCAwLjk0OTQ1LCAwLjk0OTQ1LCAwLjk0OTQ1LCAxLjEyMzE3LCAxLjEyMzE3LCAxLjEyMzE3LCAwLjY3NjAzLCAwLjY3NjAzLCAxLjE1NjIxLCAwLjczNTg0LCAxLjIxMTkxLCAxLjIyMTM1LCAxLjA2NDgzLCAwLjk0ODY4LCAwLjk0ODY4LCAwLjk1OTk2LCAxLjI0NjMzLCAxLCAxLjA3NDk3LCAwLjg3NzA5LCAwLjk2OTI3LCAxLjAxNDczLCAwLjk2OTI3LCAxLCAxLCAxLCAwLjc3Mjk1LCAxLCAxLCAxLjA5ODM2LCAxLjA5ODM2LCAxLjA5ODM2LCAxLjAxNTIyLCAwLjg2MzIxLCAwLjk0NDM0LCAwLjg2NDksIDAuOTQ0MzQsIDAuODYxODIsIDEsIDEsIDEuMDgzLCAxLCAwLjkxNTc4LCAwLjg2NDM4LCAxLjE3MzA4LCAxLjE4NDE2LCAxLjE0NTg5LCAwLjY5ODI1LCAwLjk3NjIyLCAxLjk2NzkxLCAxLjI0ODIyLCAxLjI0ODIyLCAxLjE3MzA4LCAxLjI0ODIyLCAxLjI0ODIyLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLjQyNjAzLCAxLCAwLjk5ODYyLCAwLjk5ODYyLCAxLCAwLjg3MDI1LCAwLjg3MDI1LCAwLjg3MDI1LCAwLjg3MDI1LCAxLjE3OTg0LCAxLjQyNjAzLCAxLCAxLjQyNjAzLCAxLjQyNjAzLCAwLjk5ODYyLCAxLCAxLCAxLCAxLCAxLCAxLjI4ODYsIDEuMDQzMTUsIDEuMTUyOTYsIDEuMzQxNjMsIDEsIDEsIDEsIDEuMTA3NDIsIDEuMTA3NDIsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDFdO1xuZXhwb3J0cy5TZWdvZXVpSXRhbGljRmFjdG9ycyA9IFNlZ29ldWlJdGFsaWNGYWN0b3JzO1xuY29uc3QgU2Vnb2V1aUl0YWxpY01ldHJpY3MgPSB7XG4gIGxpbmVIZWlnaHQ6IDEuMzMwMDgsXG4gIGxpbmVHYXA6IDBcbn07XG5leHBvcnRzLlNlZ29ldWlJdGFsaWNNZXRyaWNzID0gU2Vnb2V1aUl0YWxpY01ldHJpY3M7XG5jb25zdCBTZWdvZXVpUmVndWxhckZhY3RvcnMgPSBbMS43NjczOCwgMSwgMSwgMC45ODU5NCwgMS4wMjI4NSwgMS4xMDQ1NCwgMS4wNjIzNCwgMC45NjkyNywgMC45MjAzNywgMS4xOTk4NSwgMS4yMDQ2LCAwLjkwNjE2LCAwLjkwNjE2LCAxLjA3MTUyLCAxLjE3MTQsIDAuNzgwMzIsIDEuMjAwODgsIDAuNzgwMzIsIDEuNDAyNDYsIDAuOTY5MjcsIDAuOTY5MjcsIDAuOTY5MjcsIDAuOTY5MjcsIDAuOTY5MjcsIDAuOTY5MjcsIDAuOTY5MjcsIDAuOTY5MjcsIDAuOTY5MjcsIDAuOTY5MjcsIDAuNzgwMzIsIDAuNzgwMzIsIDEuMTcxNCwgMS4xNzE0LCAxLjE3MTQsIDAuODA1OTcsIDAuOTQwODQsIDAuOTY3MDYsIDAuODU5NDQsIDAuODU3MzQsIDAuOTcwOTMsIDAuNzU4NDIsIDAuNzk5MzYsIDAuODgxOTgsIDAuOTgzMSwgMC45NTc4MiwgMC43MTM4NywgMC44Njk2OSwgMC44NDYzNiwgMS4wNzc5NiwgMS4wMzU4NCwgMC45NjkyNCwgMC44Mzk2OCwgMC45NjkyNCwgMC44MjgyNiwgMC43OTY0OSwgMC44NTc3MSwgMC45NTEzMiwgMC45MzExOSwgMC45ODk2NSwgMC44ODQzMywgMC44Mjg3LCAwLjkzMzY1LCAxLjA4NjEyLCAxLjM2MzgsIDEuMDg2MTIsIDEuNDU3ODYsIDAuNzQ2MjcsIDAuODA0OTksIDAuOTE0ODQsIDEuMDU3MDcsIDAuOTIzODMsIDEuMDU4ODIsIDAuOTQwMywgMS4xMjY1NCwgMS4wNTg4MiwgMS4wMTc1NiwgMS4wOTAxMSwgMS4wOTAxMSwgMC45OTQxNCwgMS4wOTAxMSwgMS4wMzQsIDEuMDE3NTYsIDEuMDUzNTYsIDEuMDU3MDcsIDEuMDU4ODIsIDEuMDQzOTksIDAuODQ4NjMsIDEuMjE5NjgsIDEuMDE3NTYsIDAuOTU4MDEsIDEuMDAwNjgsIDAuOTE3OTcsIDAuOTY3NzcsIDAuOTA0MywgMC45MDM1MSwgMC45MjEwNSwgMC45MDM1MSwgMS4xNzE0LCAwLjg1MzM3LCAwLjk2OTI3LCAwLjk2OTI3LCAwLjk5OTEyLCAwLjk2OTI3LCAwLjkyMTA1LCAwLjgwNTk3LCAxLjI0MzQsIDEuMjA4MDgsIDEuMDU5MzcsIDAuOTA5NTcsIDEuMTcxNCwgMS4yMDgwOCwgMC43NTE1NSwgMC45NDI2MSwgMS4yNDY0NCwgMS4wOTk3MSwgMS4wOTk3MSwgMC44NDc1MSwgMSwgMC44NTI3MywgMC43ODAzMiwgMC42MTU4NCwgMS4wNTQyNSwgMS4xNzkxNCwgMC45MDk1NywgMS4wODY2NSwgMS4xMTU5MywgMS4xNDE2OSwgMC43MzM4MSwgMC45NjcwNiwgMC45NjcwNiwgMC45NjcwNiwgMC45NjcwNiwgMC45NjcwNiwgMC45NjcwNiwgMC44NjAzNSwgMC44NTczNCwgMC43NTg0MiwgMC43NTg0MiwgMC43NTg0MiwgMC43NTg0MiwgMC45NTc4MiwgMC45NTc4MiwgMC45NTc4MiwgMC45NTc4MiwgMC45NzA5MywgMS4wMzU4NCwgMC45NjkyNCwgMC45NjkyNCwgMC45NjkyNCwgMC45NjkyNCwgMC45NjkyNCwgMS4xNzE0LCAwLjk2OTI0LCAwLjk1MTMyLCAwLjk1MTMyLCAwLjk1MTMyLCAwLjk1MTMyLCAwLjgyODcsIDAuODM5NjgsIDAuODkwNDksIDAuOTE0ODQsIDAuOTE0ODQsIDAuOTE0ODQsIDAuOTE0ODQsIDAuOTE0ODQsIDAuOTE0ODQsIDAuOTM1NzUsIDAuOTIzODMsIDAuOTQwMywgMC45NDAzLCAwLjk0MDMsIDAuOTQwMywgMC44NzE3LCAwLjg3MTcsIDAuODcxNywgMC44NzE3LCAxLjAwNTI3LCAxLjAxNzU2LCAxLjA1MzU2LCAxLjA1MzU2LCAxLjA1MzU2LCAxLjA1MzU2LCAxLjA1MzU2LCAxLjI0NjQ0LCAwLjk1OTIzLCAxLjAxNzU2LCAxLjAxNzU2LCAxLjAxNzU2LCAxLjAxNzU2LCAwLjk2Nzc3LCAxLjA1NzA3LCAwLjk2Nzc3LCAwLjk2NzA2LCAwLjkxNDg0LCAwLjk2NzA2LCAwLjkxNDg0LCAwLjk2NzA2LCAwLjkxNDg0LCAwLjg1NzM0LCAwLjkyMzgzLCAwLjg1NzM0LCAwLjkyMzgzLCAwLjg1NzM0LCAwLjkyMzgzLCAwLjg1NzM0LCAwLjkyMzgzLCAwLjk3MDkzLCAxLjA5NjksIDAuOTcwOTMsIDEuMDU4ODIsIDAuNzU4NDIsIDAuOTQwMywgMC43NTg0MiwgMC45NDAzLCAwLjc1ODQyLCAwLjk0MDMsIDAuNzU4NDIsIDAuOTQwMywgMC43NTg0MiwgMC45NDAzLCAwLjg4MTk4LCAxLjA1ODgyLCAwLjg4MTk4LCAxLjA1ODgyLCAwLjg4MTk4LCAxLjA1ODgyLCAxLCAxLCAwLjk4MzEsIDEuMDE3NTYsIDAuOTgzMSwgMS4wMTc1NiwgMC45NTc4MiwgMC44NzE3LCAwLjk1NzgyLCAwLjg3MTcsIDAuOTU3ODIsIDAuODcxNywgMC45NTc4MiwgMS4wOTAxMSwgMC45NTc4MiwgMC44NzE3LCAwLjg0Nzg0LCAxLjExNTUxLCAwLjcxMzg3LCAxLjA5MDExLCAxLCAxLCAwLjk5NDE0LCAwLjg0NjM2LCAxLjA5MDExLCAxLCAxLCAwLjg0NjM2LCAxLjA1MzYsIDAuODQ2MzYsIDAuOTQyOTgsIDAuODQ2MzYsIDEuMjMyOTcsIDEuMDM1ODQsIDEuMDE3NTYsIDEsIDEsIDEuMDM1ODQsIDEuMDE3NTYsIDEuMDAzMjMsIDEuMDM0NDQsIDEuMDE3NTYsIDAuOTY5MjQsIDEuMDUzNTYsIDAuOTY5MjQsIDEuMDUzNTYsIDAuOTY5MjQsIDEuMDUzNTYsIDAuOTMwNjYsIDAuOTgyOTMsIDAuODI4MjYsIDEuMDQzOTksIDEsIDEsIDAuODI4MjYsIDEuMDQzOTksIDAuNzk2NDksIDAuODQ4NjMsIDAuNzk2NDksIDAuODQ4NjMsIDAuNzk2NDksIDAuODQ4NjMsIDAuNzk2NDksIDAuODQ4NjMsIDEsIDEsIDAuODU3NzEsIDEuMTczMTgsIDAuODU3NzEsIDEuMjE5NjgsIDAuOTUxMzIsIDEuMDE3NTYsIDAuOTUxMzIsIDEuMDE3NTYsIDAuOTUxMzIsIDEuMDE3NTYsIDAuOTUxMzIsIDEuMDE3NTYsIDAuOTUxMzIsIDEuMDE3NTYsIDAuOTUxMzIsIDEuMDE3NTYsIDAuOTg5NjUsIDEuMDAwNjgsIDAuODI4NywgMC45Njc3NywgMC44Mjg3LCAwLjkzMzY1LCAwLjkwNDMsIDAuOTMzNjUsIDAuOTA0MywgMC45MzM2NSwgMC45MDQzLCAxLjA4NTcxLCAwLjk2OTI3LCAwLjk2NzA2LCAwLjkxNDg0LCAwLjg2MDM1LCAwLjkzNTc1LCAwLjk2OTI0LCAwLjk1OTIzLCAxLCAxLCAwLjg1NzcxLCAxLjIxOTY4LCAxLjExNDM3LCAxLjExNDM3LCAwLjkzMTA5LCAwLjkxMjAyLCAwLjYwNDExLCAwLjg0MTY0LCAwLjU1NTcyLCAxLjAxMTczLCAwLjk3MzYxLCAwLjgxODE4LCAwLjgxODE4LCAwLjk2NjM1LCAwLjc4MDMyLCAwLjcyNzI3LCAwLjkyMzY2LCAwLjk4NjAxLCAxLjAzNDA1LCAwLjc3OTY4LCAxLjA5Nzk5LCAxLjIsIDAuOTY3MDYsIDAuODU5NDQsIDAuODU2MzgsIDAuOTY0OTEsIDAuNzU4NDIsIDAuOTMzNjUsIDAuOTgzMSwgMC45NjkyNCwgMC45NTc4MiwgMC44Njk2OSwgMC45NDE1MiwgMS4wNzc5NiwgMS4wMzU4NCwgMC43ODQzNywgMC45NjkyNCwgMC45ODcxNSwgMC44Mzk2OCwgMC44MzQ5MSwgMC44NTc3MSwgMC44Mjg3LCAwLjk0NDkyLCAwLjg4NDMzLCAwLjkyODcsIDEuMDA5OCwgMC45NTc4MiwgMC44Mjg3LCAxLjA2MjUsIDAuOTgyNDgsIDEuMDM0MjQsIDEuMiwgMS4wMTA3MSwgMS4wNjI1LCAwLjk1MjQ2LCAxLjAzODA5LCAxLjA0OTEyLCAwLjk4MjQ4LCAxLjAwMjIxLCAxLjAzNDI0LCAxLjA1NDQzLCAxLjIsIDEuMDQ3ODUsIDAuOTk2MDksIDEuMDAxNjksIDEuMDUxNzYsIDAuOTkzNDYsIDEuMDUzNTYsIDAuOTA4NywgMS4wMzAwNCwgMC45NTU0MiwgMC45MzExNywgMS4yMzM2MiwgMS4wMTA3MSwgMS4wNzgzMSwgMS4wMjUxMiwgMS4wNTIwNSwgMS4wMzUwMiwgMS4yLCAxLjAxMDcxLCAxLjA1MzU2LCAxLjAxMDcxLCAxLjAzNTAyLCAwLjc1ODQyLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLjAzNzE5LCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLjk0MDMsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEuMDQwMjEsIDEsIDEsIDEsIDEsIDEsIDEsIDAuOTg5NjUsIDEuMDAwNjgsIDAuOTg5NjUsIDEuMDAwNjgsIDAuOTg5NjUsIDEuMDAwNjgsIDAuODI4NywgMC45Njc3NywgMSwgMS4yMDA4OCwgMC44OTkwMywgMSwgMSwgMC43NTE1NSwgMS4wMzA3NywgMS4wMzA3NywgMS4wMzA3NywgMS4wMzA3NywgMS4xMzE5NiwgMS4xMzE5NiwgMS4xMzE5NiwgMC42NzQyOCwgMC42NzQyOCwgMS4xNjAzOSwgMC43MzI5MSwgMS4yMDk5NiwgMS4yMjEzNSwgMS4wNjQ4MywgMC45NDg2OCwgMC45NDg2OCwgMC45NTk5NiwgMS4yNDYzMywgMSwgMS4wNzQ5NywgMC44Nzc5NiwgMC45NjkyNywgMS4wMTUxOCwgMC45NjkyNywgMSwgMSwgMSwgMC43NzI5NSwgMSwgMSwgMS4xMDUzOSwgMS4xMDUzOSwgMS4xMTM1OCwgMS4wNjk2NywgMC44NjI3OSwgMC45NDQzNCwgMC44NjI3OSwgMC45NDQzNCwgMC44NjE4MiwgMSwgMSwgMS4wODMsIDEsIDAuOTE1NzgsIDAuODY1MDcsIDEuMTcxNCwgMS4xODQxNiwgMS4xNDU4OSwgMC42OTgyNSwgMC45NzYyMiwgMS45Njk3LCAxLjI0ODIyLCAxLjI0ODIyLCAxLjE3MjM4LCAxLjI0ODIyLCAxLjI0ODIyLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLjQyNjAzLCAxLCAwLjk5ODYyLCAwLjk5ODYyLCAxLCAwLjg3MDI1LCAwLjg3MDI1LCAwLjg3MDI1LCAwLjg3MDI1LCAxLjE4MDgzLCAxLjQyNjAzLCAxLCAxLjQyNjAzLCAxLjQyNjAzLCAwLjk5ODYyLCAxLCAxLCAxLCAxLCAxLCAxLjI4ODYsIDEuMDQzMTUsIDEuMTUyOTYsIDEuMzQxNjMsIDEsIDEsIDEsIDEuMTA5MzgsIDEuMTA5MzgsIDEsIDEsIDEsIDEuMDU0MjUsIDEuMDk5NzEsIDEuMDk5NzEsIDEuMDk5NzEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDFdO1xuZXhwb3J0cy5TZWdvZXVpUmVndWxhckZhY3RvcnMgPSBTZWdvZXVpUmVndWxhckZhY3RvcnM7XG5jb25zdCBTZWdvZXVpUmVndWxhck1ldHJpY3MgPSB7XG4gIGxpbmVIZWlnaHQ6IDEuMzMwMDgsXG4gIGxpbmVHYXA6IDBcbn07XG5leHBvcnRzLlNlZ29ldWlSZWd1bGFyTWV0cmljcyA9IFNlZ29ldWlSZWd1bGFyTWV0cmljcztcblxuLyoqKi8gfSksXG4vKiAxOCAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5TRUFDX0FOQUxZU0lTX0VOQUJMRUQgPSBleHBvcnRzLk1hY1N0YW5kYXJkR2x5cGhPcmRlcmluZyA9IGV4cG9ydHMuRm9udEZsYWdzID0gdm9pZCAwO1xuZXhwb3J0cy5nZXRGb250VHlwZSA9IGdldEZvbnRUeXBlO1xuZXhwb3J0cy5ub3JtYWxpemVGb250TmFtZSA9IG5vcm1hbGl6ZUZvbnROYW1lO1xuZXhwb3J0cy5yZWNvdmVyR2x5cGhOYW1lID0gcmVjb3ZlckdseXBoTmFtZTtcbmV4cG9ydHMudHlwZTFGb250R2x5cGhNYXBwaW5nID0gdHlwZTFGb250R2x5cGhNYXBwaW5nO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX2VuY29kaW5ncyA9IF9fd19wZGZqc19yZXF1aXJlX18oMTkpO1xuXG52YXIgX2dseXBobGlzdCA9IF9fd19wZGZqc19yZXF1aXJlX18oMjApO1xuXG52YXIgX3VuaWNvZGUgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIxKTtcblxuY29uc3QgU0VBQ19BTkFMWVNJU19FTkFCTEVEID0gdHJ1ZTtcbmV4cG9ydHMuU0VBQ19BTkFMWVNJU19FTkFCTEVEID0gU0VBQ19BTkFMWVNJU19FTkFCTEVEO1xuY29uc3QgRm9udEZsYWdzID0ge1xuICBGaXhlZFBpdGNoOiAxLFxuICBTZXJpZjogMixcbiAgU3ltYm9saWM6IDQsXG4gIFNjcmlwdDogOCxcbiAgTm9uc3ltYm9saWM6IDMyLFxuICBJdGFsaWM6IDY0LFxuICBBbGxDYXA6IDY1NTM2LFxuICBTbWFsbENhcDogMTMxMDcyLFxuICBGb3JjZUJvbGQ6IDI2MjE0NFxufTtcbmV4cG9ydHMuRm9udEZsYWdzID0gRm9udEZsYWdzO1xuY29uc3QgTWFjU3RhbmRhcmRHbHlwaE9yZGVyaW5nID0gW1wiLm5vdGRlZlwiLCBcIi5udWxsXCIsIFwibm9ubWFya2luZ3JldHVyblwiLCBcInNwYWNlXCIsIFwiZXhjbGFtXCIsIFwicXVvdGVkYmxcIiwgXCJudW1iZXJzaWduXCIsIFwiZG9sbGFyXCIsIFwicGVyY2VudFwiLCBcImFtcGVyc2FuZFwiLCBcInF1b3Rlc2luZ2xlXCIsIFwicGFyZW5sZWZ0XCIsIFwicGFyZW5yaWdodFwiLCBcImFzdGVyaXNrXCIsIFwicGx1c1wiLCBcImNvbW1hXCIsIFwiaHlwaGVuXCIsIFwicGVyaW9kXCIsIFwic2xhc2hcIiwgXCJ6ZXJvXCIsIFwib25lXCIsIFwidHdvXCIsIFwidGhyZWVcIiwgXCJmb3VyXCIsIFwiZml2ZVwiLCBcInNpeFwiLCBcInNldmVuXCIsIFwiZWlnaHRcIiwgXCJuaW5lXCIsIFwiY29sb25cIiwgXCJzZW1pY29sb25cIiwgXCJsZXNzXCIsIFwiZXF1YWxcIiwgXCJncmVhdGVyXCIsIFwicXVlc3Rpb25cIiwgXCJhdFwiLCBcIkFcIiwgXCJCXCIsIFwiQ1wiLCBcIkRcIiwgXCJFXCIsIFwiRlwiLCBcIkdcIiwgXCJIXCIsIFwiSVwiLCBcIkpcIiwgXCJLXCIsIFwiTFwiLCBcIk1cIiwgXCJOXCIsIFwiT1wiLCBcIlBcIiwgXCJRXCIsIFwiUlwiLCBcIlNcIiwgXCJUXCIsIFwiVVwiLCBcIlZcIiwgXCJXXCIsIFwiWFwiLCBcIllcIiwgXCJaXCIsIFwiYnJhY2tldGxlZnRcIiwgXCJiYWNrc2xhc2hcIiwgXCJicmFja2V0cmlnaHRcIiwgXCJhc2NpaWNpcmN1bVwiLCBcInVuZGVyc2NvcmVcIiwgXCJncmF2ZVwiLCBcImFcIiwgXCJiXCIsIFwiY1wiLCBcImRcIiwgXCJlXCIsIFwiZlwiLCBcImdcIiwgXCJoXCIsIFwiaVwiLCBcImpcIiwgXCJrXCIsIFwibFwiLCBcIm1cIiwgXCJuXCIsIFwib1wiLCBcInBcIiwgXCJxXCIsIFwiclwiLCBcInNcIiwgXCJ0XCIsIFwidVwiLCBcInZcIiwgXCJ3XCIsIFwieFwiLCBcInlcIiwgXCJ6XCIsIFwiYnJhY2VsZWZ0XCIsIFwiYmFyXCIsIFwiYnJhY2VyaWdodFwiLCBcImFzY2lpdGlsZGVcIiwgXCJBZGllcmVzaXNcIiwgXCJBcmluZ1wiLCBcIkNjZWRpbGxhXCIsIFwiRWFjdXRlXCIsIFwiTnRpbGRlXCIsIFwiT2RpZXJlc2lzXCIsIFwiVWRpZXJlc2lzXCIsIFwiYWFjdXRlXCIsIFwiYWdyYXZlXCIsIFwiYWNpcmN1bWZsZXhcIiwgXCJhZGllcmVzaXNcIiwgXCJhdGlsZGVcIiwgXCJhcmluZ1wiLCBcImNjZWRpbGxhXCIsIFwiZWFjdXRlXCIsIFwiZWdyYXZlXCIsIFwiZWNpcmN1bWZsZXhcIiwgXCJlZGllcmVzaXNcIiwgXCJpYWN1dGVcIiwgXCJpZ3JhdmVcIiwgXCJpY2lyY3VtZmxleFwiLCBcImlkaWVyZXNpc1wiLCBcIm50aWxkZVwiLCBcIm9hY3V0ZVwiLCBcIm9ncmF2ZVwiLCBcIm9jaXJjdW1mbGV4XCIsIFwib2RpZXJlc2lzXCIsIFwib3RpbGRlXCIsIFwidWFjdXRlXCIsIFwidWdyYXZlXCIsIFwidWNpcmN1bWZsZXhcIiwgXCJ1ZGllcmVzaXNcIiwgXCJkYWdnZXJcIiwgXCJkZWdyZWVcIiwgXCJjZW50XCIsIFwic3RlcmxpbmdcIiwgXCJzZWN0aW9uXCIsIFwiYnVsbGV0XCIsIFwicGFyYWdyYXBoXCIsIFwiZ2VybWFuZGJsc1wiLCBcInJlZ2lzdGVyZWRcIiwgXCJjb3B5cmlnaHRcIiwgXCJ0cmFkZW1hcmtcIiwgXCJhY3V0ZVwiLCBcImRpZXJlc2lzXCIsIFwibm90ZXF1YWxcIiwgXCJBRVwiLCBcIk9zbGFzaFwiLCBcImluZmluaXR5XCIsIFwicGx1c21pbnVzXCIsIFwibGVzc2VxdWFsXCIsIFwiZ3JlYXRlcmVxdWFsXCIsIFwieWVuXCIsIFwibXVcIiwgXCJwYXJ0aWFsZGlmZlwiLCBcInN1bW1hdGlvblwiLCBcInByb2R1Y3RcIiwgXCJwaVwiLCBcImludGVncmFsXCIsIFwib3JkZmVtaW5pbmVcIiwgXCJvcmRtYXNjdWxpbmVcIiwgXCJPbWVnYVwiLCBcImFlXCIsIFwib3NsYXNoXCIsIFwicXVlc3Rpb25kb3duXCIsIFwiZXhjbGFtZG93blwiLCBcImxvZ2ljYWxub3RcIiwgXCJyYWRpY2FsXCIsIFwiZmxvcmluXCIsIFwiYXBwcm94ZXF1YWxcIiwgXCJEZWx0YVwiLCBcImd1aWxsZW1vdGxlZnRcIiwgXCJndWlsbGVtb3RyaWdodFwiLCBcImVsbGlwc2lzXCIsIFwibm9uYnJlYWtpbmdzcGFjZVwiLCBcIkFncmF2ZVwiLCBcIkF0aWxkZVwiLCBcIk90aWxkZVwiLCBcIk9FXCIsIFwib2VcIiwgXCJlbmRhc2hcIiwgXCJlbWRhc2hcIiwgXCJxdW90ZWRibGxlZnRcIiwgXCJxdW90ZWRibHJpZ2h0XCIsIFwicXVvdGVsZWZ0XCIsIFwicXVvdGVyaWdodFwiLCBcImRpdmlkZVwiLCBcImxvemVuZ2VcIiwgXCJ5ZGllcmVzaXNcIiwgXCJZZGllcmVzaXNcIiwgXCJmcmFjdGlvblwiLCBcImN1cnJlbmN5XCIsIFwiZ3VpbHNpbmdsbGVmdFwiLCBcImd1aWxzaW5nbHJpZ2h0XCIsIFwiZmlcIiwgXCJmbFwiLCBcImRhZ2dlcmRibFwiLCBcInBlcmlvZGNlbnRlcmVkXCIsIFwicXVvdGVzaW5nbGJhc2VcIiwgXCJxdW90ZWRibGJhc2VcIiwgXCJwZXJ0aG91c2FuZFwiLCBcIkFjaXJjdW1mbGV4XCIsIFwiRWNpcmN1bWZsZXhcIiwgXCJBYWN1dGVcIiwgXCJFZGllcmVzaXNcIiwgXCJFZ3JhdmVcIiwgXCJJYWN1dGVcIiwgXCJJY2lyY3VtZmxleFwiLCBcIklkaWVyZXNpc1wiLCBcIklncmF2ZVwiLCBcIk9hY3V0ZVwiLCBcIk9jaXJjdW1mbGV4XCIsIFwiYXBwbGVcIiwgXCJPZ3JhdmVcIiwgXCJVYWN1dGVcIiwgXCJVY2lyY3VtZmxleFwiLCBcIlVncmF2ZVwiLCBcImRvdGxlc3NpXCIsIFwiY2lyY3VtZmxleFwiLCBcInRpbGRlXCIsIFwibWFjcm9uXCIsIFwiYnJldmVcIiwgXCJkb3RhY2NlbnRcIiwgXCJyaW5nXCIsIFwiY2VkaWxsYVwiLCBcImh1bmdhcnVtbGF1dFwiLCBcIm9nb25la1wiLCBcImNhcm9uXCIsIFwiTHNsYXNoXCIsIFwibHNsYXNoXCIsIFwiU2Nhcm9uXCIsIFwic2Nhcm9uXCIsIFwiWmNhcm9uXCIsIFwiemNhcm9uXCIsIFwiYnJva2VuYmFyXCIsIFwiRXRoXCIsIFwiZXRoXCIsIFwiWWFjdXRlXCIsIFwieWFjdXRlXCIsIFwiVGhvcm5cIiwgXCJ0aG9yblwiLCBcIm1pbnVzXCIsIFwibXVsdGlwbHlcIiwgXCJvbmVzdXBlcmlvclwiLCBcInR3b3N1cGVyaW9yXCIsIFwidGhyZWVzdXBlcmlvclwiLCBcIm9uZWhhbGZcIiwgXCJvbmVxdWFydGVyXCIsIFwidGhyZWVxdWFydGVyc1wiLCBcImZyYW5jXCIsIFwiR2JyZXZlXCIsIFwiZ2JyZXZlXCIsIFwiSWRvdGFjY2VudFwiLCBcIlNjZWRpbGxhXCIsIFwic2NlZGlsbGFcIiwgXCJDYWN1dGVcIiwgXCJjYWN1dGVcIiwgXCJDY2Fyb25cIiwgXCJjY2Fyb25cIiwgXCJkY3JvYXRcIl07XG5leHBvcnRzLk1hY1N0YW5kYXJkR2x5cGhPcmRlcmluZyA9IE1hY1N0YW5kYXJkR2x5cGhPcmRlcmluZztcblxuZnVuY3Rpb24gZ2V0Rm9udFR5cGUodHlwZSwgc3VidHlwZSwgaXNTdGFuZGFyZEZvbnQgPSBmYWxzZSkge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFwiVHlwZTFcIjpcbiAgICAgIGlmIChpc1N0YW5kYXJkRm9udCkge1xuICAgICAgICByZXR1cm4gX3V0aWwuRm9udFR5cGUuVFlQRTFTVEFOREFSRDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN1YnR5cGUgPT09IFwiVHlwZTFDXCIgPyBfdXRpbC5Gb250VHlwZS5UWVBFMUMgOiBfdXRpbC5Gb250VHlwZS5UWVBFMTtcblxuICAgIGNhc2UgXCJDSURGb250VHlwZTBcIjpcbiAgICAgIHJldHVybiBzdWJ0eXBlID09PSBcIkNJREZvbnRUeXBlMENcIiA/IF91dGlsLkZvbnRUeXBlLkNJREZPTlRUWVBFMEMgOiBfdXRpbC5Gb250VHlwZS5DSURGT05UVFlQRTA7XG5cbiAgICBjYXNlIFwiT3BlblR5cGVcIjpcbiAgICAgIHJldHVybiBfdXRpbC5Gb250VHlwZS5PUEVOVFlQRTtcblxuICAgIGNhc2UgXCJUcnVlVHlwZVwiOlxuICAgICAgcmV0dXJuIF91dGlsLkZvbnRUeXBlLlRSVUVUWVBFO1xuXG4gICAgY2FzZSBcIkNJREZvbnRUeXBlMlwiOlxuICAgICAgcmV0dXJuIF91dGlsLkZvbnRUeXBlLkNJREZPTlRUWVBFMjtcblxuICAgIGNhc2UgXCJNTVR5cGUxXCI6XG4gICAgICByZXR1cm4gX3V0aWwuRm9udFR5cGUuTU1UWVBFMTtcblxuICAgIGNhc2UgXCJUeXBlMFwiOlxuICAgICAgcmV0dXJuIF91dGlsLkZvbnRUeXBlLlRZUEUwO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBfdXRpbC5Gb250VHlwZS5VTktOT1dOO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlY292ZXJHbHlwaE5hbWUobmFtZSwgZ2x5cGhzVW5pY29kZU1hcCkge1xuICBpZiAoZ2x5cGhzVW5pY29kZU1hcFtuYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cblxuICBjb25zdCB1bmljb2RlID0gKDAsIF91bmljb2RlLmdldFVuaWNvZGVGb3JHbHlwaCkobmFtZSwgZ2x5cGhzVW5pY29kZU1hcCk7XG5cbiAgaWYgKHVuaWNvZGUgIT09IC0xKSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gZ2x5cGhzVW5pY29kZU1hcCkge1xuICAgICAgaWYgKGdseXBoc1VuaWNvZGVNYXBba2V5XSA9PT0gdW5pY29kZSkge1xuICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICgwLCBfdXRpbC5pbmZvKShcIlVuYWJsZSB0byByZWNvdmVyIGEgc3RhbmRhcmQgZ2x5cGggbmFtZSBmb3I6IFwiICsgbmFtZSk7XG4gIHJldHVybiBuYW1lO1xufVxuXG5mdW5jdGlvbiB0eXBlMUZvbnRHbHlwaE1hcHBpbmcocHJvcGVydGllcywgYnVpbHRJbkVuY29kaW5nLCBnbHlwaE5hbWVzKSB7XG4gIGNvbnN0IGNoYXJDb2RlVG9HbHlwaElkID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgbGV0IGdseXBoSWQsIGNoYXJDb2RlLCBiYXNlRW5jb2Rpbmc7XG4gIGNvbnN0IGlzU3ltYm9saWNGb250ID0gISEocHJvcGVydGllcy5mbGFncyAmIEZvbnRGbGFncy5TeW1ib2xpYyk7XG5cbiAgaWYgKHByb3BlcnRpZXMuaXNJbnRlcm5hbEZvbnQpIHtcbiAgICBiYXNlRW5jb2RpbmcgPSBidWlsdEluRW5jb2Rpbmc7XG5cbiAgICBmb3IgKGNoYXJDb2RlID0gMDsgY2hhckNvZGUgPCBiYXNlRW5jb2RpbmcubGVuZ3RoOyBjaGFyQ29kZSsrKSB7XG4gICAgICBnbHlwaElkID0gZ2x5cGhOYW1lcy5pbmRleE9mKGJhc2VFbmNvZGluZ1tjaGFyQ29kZV0pO1xuXG4gICAgICBpZiAoZ2x5cGhJZCA+PSAwKSB7XG4gICAgICAgIGNoYXJDb2RlVG9HbHlwaElkW2NoYXJDb2RlXSA9IGdseXBoSWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGFyQ29kZVRvR2x5cGhJZFtjaGFyQ29kZV0gPSAwO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChwcm9wZXJ0aWVzLmJhc2VFbmNvZGluZ05hbWUpIHtcbiAgICBiYXNlRW5jb2RpbmcgPSAoMCwgX2VuY29kaW5ncy5nZXRFbmNvZGluZykocHJvcGVydGllcy5iYXNlRW5jb2RpbmdOYW1lKTtcblxuICAgIGZvciAoY2hhckNvZGUgPSAwOyBjaGFyQ29kZSA8IGJhc2VFbmNvZGluZy5sZW5ndGg7IGNoYXJDb2RlKyspIHtcbiAgICAgIGdseXBoSWQgPSBnbHlwaE5hbWVzLmluZGV4T2YoYmFzZUVuY29kaW5nW2NoYXJDb2RlXSk7XG5cbiAgICAgIGlmIChnbHlwaElkID49IDApIHtcbiAgICAgICAgY2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdID0gZ2x5cGhJZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoYXJDb2RlVG9HbHlwaElkW2NoYXJDb2RlXSA9IDA7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzU3ltYm9saWNGb250KSB7XG4gICAgZm9yIChjaGFyQ29kZSBpbiBidWlsdEluRW5jb2RpbmcpIHtcbiAgICAgIGNoYXJDb2RlVG9HbHlwaElkW2NoYXJDb2RlXSA9IGJ1aWx0SW5FbmNvZGluZ1tjaGFyQ29kZV07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGJhc2VFbmNvZGluZyA9IF9lbmNvZGluZ3MuU3RhbmRhcmRFbmNvZGluZztcblxuICAgIGZvciAoY2hhckNvZGUgPSAwOyBjaGFyQ29kZSA8IGJhc2VFbmNvZGluZy5sZW5ndGg7IGNoYXJDb2RlKyspIHtcbiAgICAgIGdseXBoSWQgPSBnbHlwaE5hbWVzLmluZGV4T2YoYmFzZUVuY29kaW5nW2NoYXJDb2RlXSk7XG5cbiAgICAgIGlmIChnbHlwaElkID49IDApIHtcbiAgICAgICAgY2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdID0gZ2x5cGhJZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoYXJDb2RlVG9HbHlwaElkW2NoYXJDb2RlXSA9IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZGlmZmVyZW5jZXMgPSBwcm9wZXJ0aWVzLmRpZmZlcmVuY2VzO1xuICBsZXQgZ2x5cGhzVW5pY29kZU1hcDtcblxuICBpZiAoZGlmZmVyZW5jZXMpIHtcbiAgICBmb3IgKGNoYXJDb2RlIGluIGRpZmZlcmVuY2VzKSB7XG4gICAgICBjb25zdCBnbHlwaE5hbWUgPSBkaWZmZXJlbmNlc1tjaGFyQ29kZV07XG4gICAgICBnbHlwaElkID0gZ2x5cGhOYW1lcy5pbmRleE9mKGdseXBoTmFtZSk7XG5cbiAgICAgIGlmIChnbHlwaElkID09PSAtMSkge1xuICAgICAgICBpZiAoIWdseXBoc1VuaWNvZGVNYXApIHtcbiAgICAgICAgICBnbHlwaHNVbmljb2RlTWFwID0gKDAsIF9nbHlwaGxpc3QuZ2V0R2x5cGhzVW5pY29kZSkoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0YW5kYXJkR2x5cGhOYW1lID0gcmVjb3ZlckdseXBoTmFtZShnbHlwaE5hbWUsIGdseXBoc1VuaWNvZGVNYXApO1xuXG4gICAgICAgIGlmIChzdGFuZGFyZEdseXBoTmFtZSAhPT0gZ2x5cGhOYW1lKSB7XG4gICAgICAgICAgZ2x5cGhJZCA9IGdseXBoTmFtZXMuaW5kZXhPZihzdGFuZGFyZEdseXBoTmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGdseXBoSWQgPj0gMCkge1xuICAgICAgICBjaGFyQ29kZVRvR2x5cGhJZFtjaGFyQ29kZV0gPSBnbHlwaElkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdID0gMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2hhckNvZGVUb0dseXBoSWQ7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUZvbnROYW1lKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWUucmVwbGFjZSgvWyxfXS9nLCBcIi1cIikucmVwbGFjZSgvXFxzL2csIFwiXCIpO1xufVxuXG4vKioqLyB9KSxcbi8qIDE5ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLlphcGZEaW5nYmF0c0VuY29kaW5nID0gZXhwb3J0cy5XaW5BbnNpRW5jb2RpbmcgPSBleHBvcnRzLlN5bWJvbFNldEVuY29kaW5nID0gZXhwb3J0cy5TdGFuZGFyZEVuY29kaW5nID0gZXhwb3J0cy5NYWNSb21hbkVuY29kaW5nID0gZXhwb3J0cy5FeHBlcnRFbmNvZGluZyA9IHZvaWQgMDtcbmV4cG9ydHMuZ2V0RW5jb2RpbmcgPSBnZXRFbmNvZGluZztcbmNvbnN0IEV4cGVydEVuY29kaW5nID0gW1wiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwic3BhY2VcIiwgXCJleGNsYW1zbWFsbFwiLCBcIkh1bmdhcnVtbGF1dHNtYWxsXCIsIFwiXCIsIFwiZG9sbGFyb2xkc3R5bGVcIiwgXCJkb2xsYXJzdXBlcmlvclwiLCBcImFtcGVyc2FuZHNtYWxsXCIsIFwiQWN1dGVzbWFsbFwiLCBcInBhcmVubGVmdHN1cGVyaW9yXCIsIFwicGFyZW5yaWdodHN1cGVyaW9yXCIsIFwidHdvZG90ZW5sZWFkZXJcIiwgXCJvbmVkb3RlbmxlYWRlclwiLCBcImNvbW1hXCIsIFwiaHlwaGVuXCIsIFwicGVyaW9kXCIsIFwiZnJhY3Rpb25cIiwgXCJ6ZXJvb2xkc3R5bGVcIiwgXCJvbmVvbGRzdHlsZVwiLCBcInR3b29sZHN0eWxlXCIsIFwidGhyZWVvbGRzdHlsZVwiLCBcImZvdXJvbGRzdHlsZVwiLCBcImZpdmVvbGRzdHlsZVwiLCBcInNpeG9sZHN0eWxlXCIsIFwic2V2ZW5vbGRzdHlsZVwiLCBcImVpZ2h0b2xkc3R5bGVcIiwgXCJuaW5lb2xkc3R5bGVcIiwgXCJjb2xvblwiLCBcInNlbWljb2xvblwiLCBcImNvbW1hc3VwZXJpb3JcIiwgXCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoXCIsIFwicGVyaW9kc3VwZXJpb3JcIiwgXCJxdWVzdGlvbnNtYWxsXCIsIFwiXCIsIFwiYXN1cGVyaW9yXCIsIFwiYnN1cGVyaW9yXCIsIFwiY2VudHN1cGVyaW9yXCIsIFwiZHN1cGVyaW9yXCIsIFwiZXN1cGVyaW9yXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiaXN1cGVyaW9yXCIsIFwiXCIsIFwiXCIsIFwibHN1cGVyaW9yXCIsIFwibXN1cGVyaW9yXCIsIFwibnN1cGVyaW9yXCIsIFwib3N1cGVyaW9yXCIsIFwiXCIsIFwiXCIsIFwicnN1cGVyaW9yXCIsIFwic3N1cGVyaW9yXCIsIFwidHN1cGVyaW9yXCIsIFwiXCIsIFwiZmZcIiwgXCJmaVwiLCBcImZsXCIsIFwiZmZpXCIsIFwiZmZsXCIsIFwicGFyZW5sZWZ0aW5mZXJpb3JcIiwgXCJcIiwgXCJwYXJlbnJpZ2h0aW5mZXJpb3JcIiwgXCJDaXJjdW1mbGV4c21hbGxcIiwgXCJoeXBoZW5zdXBlcmlvclwiLCBcIkdyYXZlc21hbGxcIiwgXCJBc21hbGxcIiwgXCJCc21hbGxcIiwgXCJDc21hbGxcIiwgXCJEc21hbGxcIiwgXCJFc21hbGxcIiwgXCJGc21hbGxcIiwgXCJHc21hbGxcIiwgXCJIc21hbGxcIiwgXCJJc21hbGxcIiwgXCJKc21hbGxcIiwgXCJLc21hbGxcIiwgXCJMc21hbGxcIiwgXCJNc21hbGxcIiwgXCJOc21hbGxcIiwgXCJPc21hbGxcIiwgXCJQc21hbGxcIiwgXCJRc21hbGxcIiwgXCJSc21hbGxcIiwgXCJTc21hbGxcIiwgXCJUc21hbGxcIiwgXCJVc21hbGxcIiwgXCJWc21hbGxcIiwgXCJXc21hbGxcIiwgXCJYc21hbGxcIiwgXCJZc21hbGxcIiwgXCJac21hbGxcIiwgXCJjb2xvbm1vbmV0YXJ5XCIsIFwib25lZml0dGVkXCIsIFwicnVwaWFoXCIsIFwiVGlsZGVzbWFsbFwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcImV4Y2xhbWRvd25zbWFsbFwiLCBcImNlbnRvbGRzdHlsZVwiLCBcIkxzbGFzaHNtYWxsXCIsIFwiXCIsIFwiXCIsIFwiU2Nhcm9uc21hbGxcIiwgXCJaY2Fyb25zbWFsbFwiLCBcIkRpZXJlc2lzc21hbGxcIiwgXCJCcmV2ZXNtYWxsXCIsIFwiQ2Fyb25zbWFsbFwiLCBcIlwiLCBcIkRvdGFjY2VudHNtYWxsXCIsIFwiXCIsIFwiXCIsIFwiTWFjcm9uc21hbGxcIiwgXCJcIiwgXCJcIiwgXCJmaWd1cmVkYXNoXCIsIFwiaHlwaGVuaW5mZXJpb3JcIiwgXCJcIiwgXCJcIiwgXCJPZ29uZWtzbWFsbFwiLCBcIlJpbmdzbWFsbFwiLCBcIkNlZGlsbGFzbWFsbFwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIm9uZXF1YXJ0ZXJcIiwgXCJvbmVoYWxmXCIsIFwidGhyZWVxdWFydGVyc1wiLCBcInF1ZXN0aW9uZG93bnNtYWxsXCIsIFwib25lZWlnaHRoXCIsIFwidGhyZWVlaWdodGhzXCIsIFwiZml2ZWVpZ2h0aHNcIiwgXCJzZXZlbmVpZ2h0aHNcIiwgXCJvbmV0aGlyZFwiLCBcInR3b3RoaXJkc1wiLCBcIlwiLCBcIlwiLCBcInplcm9zdXBlcmlvclwiLCBcIm9uZXN1cGVyaW9yXCIsIFwidHdvc3VwZXJpb3JcIiwgXCJ0aHJlZXN1cGVyaW9yXCIsIFwiZm91cnN1cGVyaW9yXCIsIFwiZml2ZXN1cGVyaW9yXCIsIFwic2l4c3VwZXJpb3JcIiwgXCJzZXZlbnN1cGVyaW9yXCIsIFwiZWlnaHRzdXBlcmlvclwiLCBcIm5pbmVzdXBlcmlvclwiLCBcInplcm9pbmZlcmlvclwiLCBcIm9uZWluZmVyaW9yXCIsIFwidHdvaW5mZXJpb3JcIiwgXCJ0aHJlZWluZmVyaW9yXCIsIFwiZm91cmluZmVyaW9yXCIsIFwiZml2ZWluZmVyaW9yXCIsIFwic2l4aW5mZXJpb3JcIiwgXCJzZXZlbmluZmVyaW9yXCIsIFwiZWlnaHRpbmZlcmlvclwiLCBcIm5pbmVpbmZlcmlvclwiLCBcImNlbnRpbmZlcmlvclwiLCBcImRvbGxhcmluZmVyaW9yXCIsIFwicGVyaW9kaW5mZXJpb3JcIiwgXCJjb21tYWluZmVyaW9yXCIsIFwiQWdyYXZlc21hbGxcIiwgXCJBYWN1dGVzbWFsbFwiLCBcIkFjaXJjdW1mbGV4c21hbGxcIiwgXCJBdGlsZGVzbWFsbFwiLCBcIkFkaWVyZXNpc3NtYWxsXCIsIFwiQXJpbmdzbWFsbFwiLCBcIkFFc21hbGxcIiwgXCJDY2VkaWxsYXNtYWxsXCIsIFwiRWdyYXZlc21hbGxcIiwgXCJFYWN1dGVzbWFsbFwiLCBcIkVjaXJjdW1mbGV4c21hbGxcIiwgXCJFZGllcmVzaXNzbWFsbFwiLCBcIklncmF2ZXNtYWxsXCIsIFwiSWFjdXRlc21hbGxcIiwgXCJJY2lyY3VtZmxleHNtYWxsXCIsIFwiSWRpZXJlc2lzc21hbGxcIiwgXCJFdGhzbWFsbFwiLCBcIk50aWxkZXNtYWxsXCIsIFwiT2dyYXZlc21hbGxcIiwgXCJPYWN1dGVzbWFsbFwiLCBcIk9jaXJjdW1mbGV4c21hbGxcIiwgXCJPdGlsZGVzbWFsbFwiLCBcIk9kaWVyZXNpc3NtYWxsXCIsIFwiT0VzbWFsbFwiLCBcIk9zbGFzaHNtYWxsXCIsIFwiVWdyYXZlc21hbGxcIiwgXCJVYWN1dGVzbWFsbFwiLCBcIlVjaXJjdW1mbGV4c21hbGxcIiwgXCJVZGllcmVzaXNzbWFsbFwiLCBcIllhY3V0ZXNtYWxsXCIsIFwiVGhvcm5zbWFsbFwiLCBcIllkaWVyZXNpc3NtYWxsXCJdO1xuZXhwb3J0cy5FeHBlcnRFbmNvZGluZyA9IEV4cGVydEVuY29kaW5nO1xuY29uc3QgTWFjRXhwZXJ0RW5jb2RpbmcgPSBbXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJzcGFjZVwiLCBcImV4Y2xhbXNtYWxsXCIsIFwiSHVuZ2FydW1sYXV0c21hbGxcIiwgXCJjZW50b2xkc3R5bGVcIiwgXCJkb2xsYXJvbGRzdHlsZVwiLCBcImRvbGxhcnN1cGVyaW9yXCIsIFwiYW1wZXJzYW5kc21hbGxcIiwgXCJBY3V0ZXNtYWxsXCIsIFwicGFyZW5sZWZ0c3VwZXJpb3JcIiwgXCJwYXJlbnJpZ2h0c3VwZXJpb3JcIiwgXCJ0d29kb3RlbmxlYWRlclwiLCBcIm9uZWRvdGVubGVhZGVyXCIsIFwiY29tbWFcIiwgXCJoeXBoZW5cIiwgXCJwZXJpb2RcIiwgXCJmcmFjdGlvblwiLCBcInplcm9vbGRzdHlsZVwiLCBcIm9uZW9sZHN0eWxlXCIsIFwidHdvb2xkc3R5bGVcIiwgXCJ0aHJlZW9sZHN0eWxlXCIsIFwiZm91cm9sZHN0eWxlXCIsIFwiZml2ZW9sZHN0eWxlXCIsIFwic2l4b2xkc3R5bGVcIiwgXCJzZXZlbm9sZHN0eWxlXCIsIFwiZWlnaHRvbGRzdHlsZVwiLCBcIm5pbmVvbGRzdHlsZVwiLCBcImNvbG9uXCIsIFwic2VtaWNvbG9uXCIsIFwiXCIsIFwidGhyZWVxdWFydGVyc2VtZGFzaFwiLCBcIlwiLCBcInF1ZXN0aW9uc21hbGxcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJFdGhzbWFsbFwiLCBcIlwiLCBcIlwiLCBcIm9uZXF1YXJ0ZXJcIiwgXCJvbmVoYWxmXCIsIFwidGhyZWVxdWFydGVyc1wiLCBcIm9uZWVpZ2h0aFwiLCBcInRocmVlZWlnaHRoc1wiLCBcImZpdmVlaWdodGhzXCIsIFwic2V2ZW5laWdodGhzXCIsIFwib25ldGhpcmRcIiwgXCJ0d290aGlyZHNcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJmZlwiLCBcImZpXCIsIFwiZmxcIiwgXCJmZmlcIiwgXCJmZmxcIiwgXCJwYXJlbmxlZnRpbmZlcmlvclwiLCBcIlwiLCBcInBhcmVucmlnaHRpbmZlcmlvclwiLCBcIkNpcmN1bWZsZXhzbWFsbFwiLCBcImh5cGhlbmluZmVyaW9yXCIsIFwiR3JhdmVzbWFsbFwiLCBcIkFzbWFsbFwiLCBcIkJzbWFsbFwiLCBcIkNzbWFsbFwiLCBcIkRzbWFsbFwiLCBcIkVzbWFsbFwiLCBcIkZzbWFsbFwiLCBcIkdzbWFsbFwiLCBcIkhzbWFsbFwiLCBcIklzbWFsbFwiLCBcIkpzbWFsbFwiLCBcIktzbWFsbFwiLCBcIkxzbWFsbFwiLCBcIk1zbWFsbFwiLCBcIk5zbWFsbFwiLCBcIk9zbWFsbFwiLCBcIlBzbWFsbFwiLCBcIlFzbWFsbFwiLCBcIlJzbWFsbFwiLCBcIlNzbWFsbFwiLCBcIlRzbWFsbFwiLCBcIlVzbWFsbFwiLCBcIlZzbWFsbFwiLCBcIldzbWFsbFwiLCBcIlhzbWFsbFwiLCBcIllzbWFsbFwiLCBcIlpzbWFsbFwiLCBcImNvbG9ubW9uZXRhcnlcIiwgXCJvbmVmaXR0ZWRcIiwgXCJydXBpYWhcIiwgXCJUaWxkZXNtYWxsXCIsIFwiXCIsIFwiXCIsIFwiYXN1cGVyaW9yXCIsIFwiY2VudHN1cGVyaW9yXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiQWFjdXRlc21hbGxcIiwgXCJBZ3JhdmVzbWFsbFwiLCBcIkFjaXJjdW1mbGV4c21hbGxcIiwgXCJBZGllcmVzaXNzbWFsbFwiLCBcIkF0aWxkZXNtYWxsXCIsIFwiQXJpbmdzbWFsbFwiLCBcIkNjZWRpbGxhc21hbGxcIiwgXCJFYWN1dGVzbWFsbFwiLCBcIkVncmF2ZXNtYWxsXCIsIFwiRWNpcmN1bWZsZXhzbWFsbFwiLCBcIkVkaWVyZXNpc3NtYWxsXCIsIFwiSWFjdXRlc21hbGxcIiwgXCJJZ3JhdmVzbWFsbFwiLCBcIkljaXJjdW1mbGV4c21hbGxcIiwgXCJJZGllcmVzaXNzbWFsbFwiLCBcIk50aWxkZXNtYWxsXCIsIFwiT2FjdXRlc21hbGxcIiwgXCJPZ3JhdmVzbWFsbFwiLCBcIk9jaXJjdW1mbGV4c21hbGxcIiwgXCJPZGllcmVzaXNzbWFsbFwiLCBcIk90aWxkZXNtYWxsXCIsIFwiVWFjdXRlc21hbGxcIiwgXCJVZ3JhdmVzbWFsbFwiLCBcIlVjaXJjdW1mbGV4c21hbGxcIiwgXCJVZGllcmVzaXNzbWFsbFwiLCBcIlwiLCBcImVpZ2h0c3VwZXJpb3JcIiwgXCJmb3VyaW5mZXJpb3JcIiwgXCJ0aHJlZWluZmVyaW9yXCIsIFwic2l4aW5mZXJpb3JcIiwgXCJlaWdodGluZmVyaW9yXCIsIFwic2V2ZW5pbmZlcmlvclwiLCBcIlNjYXJvbnNtYWxsXCIsIFwiXCIsIFwiY2VudGluZmVyaW9yXCIsIFwidHdvaW5mZXJpb3JcIiwgXCJcIiwgXCJEaWVyZXNpc3NtYWxsXCIsIFwiXCIsIFwiQ2Fyb25zbWFsbFwiLCBcIm9zdXBlcmlvclwiLCBcImZpdmVpbmZlcmlvclwiLCBcIlwiLCBcImNvbW1haW5mZXJpb3JcIiwgXCJwZXJpb2RpbmZlcmlvclwiLCBcIllhY3V0ZXNtYWxsXCIsIFwiXCIsIFwiZG9sbGFyaW5mZXJpb3JcIiwgXCJcIiwgXCJcIiwgXCJUaG9ybnNtYWxsXCIsIFwiXCIsIFwibmluZWluZmVyaW9yXCIsIFwiemVyb2luZmVyaW9yXCIsIFwiWmNhcm9uc21hbGxcIiwgXCJBRXNtYWxsXCIsIFwiT3NsYXNoc21hbGxcIiwgXCJxdWVzdGlvbmRvd25zbWFsbFwiLCBcIm9uZWluZmVyaW9yXCIsIFwiTHNsYXNoc21hbGxcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJDZWRpbGxhc21hbGxcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJPRXNtYWxsXCIsIFwiZmlndXJlZGFzaFwiLCBcImh5cGhlbnN1cGVyaW9yXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiZXhjbGFtZG93bnNtYWxsXCIsIFwiXCIsIFwiWWRpZXJlc2lzc21hbGxcIiwgXCJcIiwgXCJvbmVzdXBlcmlvclwiLCBcInR3b3N1cGVyaW9yXCIsIFwidGhyZWVzdXBlcmlvclwiLCBcImZvdXJzdXBlcmlvclwiLCBcImZpdmVzdXBlcmlvclwiLCBcInNpeHN1cGVyaW9yXCIsIFwic2V2ZW5zdXBlcmlvclwiLCBcIm5pbmVzdXBlcmlvclwiLCBcInplcm9zdXBlcmlvclwiLCBcIlwiLCBcImVzdXBlcmlvclwiLCBcInJzdXBlcmlvclwiLCBcInRzdXBlcmlvclwiLCBcIlwiLCBcIlwiLCBcImlzdXBlcmlvclwiLCBcInNzdXBlcmlvclwiLCBcImRzdXBlcmlvclwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcImxzdXBlcmlvclwiLCBcIk9nb25la3NtYWxsXCIsIFwiQnJldmVzbWFsbFwiLCBcIk1hY3JvbnNtYWxsXCIsIFwiYnN1cGVyaW9yXCIsIFwibnN1cGVyaW9yXCIsIFwibXN1cGVyaW9yXCIsIFwiY29tbWFzdXBlcmlvclwiLCBcInBlcmlvZHN1cGVyaW9yXCIsIFwiRG90YWNjZW50c21hbGxcIiwgXCJSaW5nc21hbGxcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIl07XG5jb25zdCBNYWNSb21hbkVuY29kaW5nID0gW1wiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwic3BhY2VcIiwgXCJleGNsYW1cIiwgXCJxdW90ZWRibFwiLCBcIm51bWJlcnNpZ25cIiwgXCJkb2xsYXJcIiwgXCJwZXJjZW50XCIsIFwiYW1wZXJzYW5kXCIsIFwicXVvdGVzaW5nbGVcIiwgXCJwYXJlbmxlZnRcIiwgXCJwYXJlbnJpZ2h0XCIsIFwiYXN0ZXJpc2tcIiwgXCJwbHVzXCIsIFwiY29tbWFcIiwgXCJoeXBoZW5cIiwgXCJwZXJpb2RcIiwgXCJzbGFzaFwiLCBcInplcm9cIiwgXCJvbmVcIiwgXCJ0d29cIiwgXCJ0aHJlZVwiLCBcImZvdXJcIiwgXCJmaXZlXCIsIFwic2l4XCIsIFwic2V2ZW5cIiwgXCJlaWdodFwiLCBcIm5pbmVcIiwgXCJjb2xvblwiLCBcInNlbWljb2xvblwiLCBcImxlc3NcIiwgXCJlcXVhbFwiLCBcImdyZWF0ZXJcIiwgXCJxdWVzdGlvblwiLCBcImF0XCIsIFwiQVwiLCBcIkJcIiwgXCJDXCIsIFwiRFwiLCBcIkVcIiwgXCJGXCIsIFwiR1wiLCBcIkhcIiwgXCJJXCIsIFwiSlwiLCBcIktcIiwgXCJMXCIsIFwiTVwiLCBcIk5cIiwgXCJPXCIsIFwiUFwiLCBcIlFcIiwgXCJSXCIsIFwiU1wiLCBcIlRcIiwgXCJVXCIsIFwiVlwiLCBcIldcIiwgXCJYXCIsIFwiWVwiLCBcIlpcIiwgXCJicmFja2V0bGVmdFwiLCBcImJhY2tzbGFzaFwiLCBcImJyYWNrZXRyaWdodFwiLCBcImFzY2lpY2lyY3VtXCIsIFwidW5kZXJzY29yZVwiLCBcImdyYXZlXCIsIFwiYVwiLCBcImJcIiwgXCJjXCIsIFwiZFwiLCBcImVcIiwgXCJmXCIsIFwiZ1wiLCBcImhcIiwgXCJpXCIsIFwialwiLCBcImtcIiwgXCJsXCIsIFwibVwiLCBcIm5cIiwgXCJvXCIsIFwicFwiLCBcInFcIiwgXCJyXCIsIFwic1wiLCBcInRcIiwgXCJ1XCIsIFwidlwiLCBcIndcIiwgXCJ4XCIsIFwieVwiLCBcInpcIiwgXCJicmFjZWxlZnRcIiwgXCJiYXJcIiwgXCJicmFjZXJpZ2h0XCIsIFwiYXNjaWl0aWxkZVwiLCBcIlwiLCBcIkFkaWVyZXNpc1wiLCBcIkFyaW5nXCIsIFwiQ2NlZGlsbGFcIiwgXCJFYWN1dGVcIiwgXCJOdGlsZGVcIiwgXCJPZGllcmVzaXNcIiwgXCJVZGllcmVzaXNcIiwgXCJhYWN1dGVcIiwgXCJhZ3JhdmVcIiwgXCJhY2lyY3VtZmxleFwiLCBcImFkaWVyZXNpc1wiLCBcImF0aWxkZVwiLCBcImFyaW5nXCIsIFwiY2NlZGlsbGFcIiwgXCJlYWN1dGVcIiwgXCJlZ3JhdmVcIiwgXCJlY2lyY3VtZmxleFwiLCBcImVkaWVyZXNpc1wiLCBcImlhY3V0ZVwiLCBcImlncmF2ZVwiLCBcImljaXJjdW1mbGV4XCIsIFwiaWRpZXJlc2lzXCIsIFwibnRpbGRlXCIsIFwib2FjdXRlXCIsIFwib2dyYXZlXCIsIFwib2NpcmN1bWZsZXhcIiwgXCJvZGllcmVzaXNcIiwgXCJvdGlsZGVcIiwgXCJ1YWN1dGVcIiwgXCJ1Z3JhdmVcIiwgXCJ1Y2lyY3VtZmxleFwiLCBcInVkaWVyZXNpc1wiLCBcImRhZ2dlclwiLCBcImRlZ3JlZVwiLCBcImNlbnRcIiwgXCJzdGVybGluZ1wiLCBcInNlY3Rpb25cIiwgXCJidWxsZXRcIiwgXCJwYXJhZ3JhcGhcIiwgXCJnZXJtYW5kYmxzXCIsIFwicmVnaXN0ZXJlZFwiLCBcImNvcHlyaWdodFwiLCBcInRyYWRlbWFya1wiLCBcImFjdXRlXCIsIFwiZGllcmVzaXNcIiwgXCJub3RlcXVhbFwiLCBcIkFFXCIsIFwiT3NsYXNoXCIsIFwiaW5maW5pdHlcIiwgXCJwbHVzbWludXNcIiwgXCJsZXNzZXF1YWxcIiwgXCJncmVhdGVyZXF1YWxcIiwgXCJ5ZW5cIiwgXCJtdVwiLCBcInBhcnRpYWxkaWZmXCIsIFwic3VtbWF0aW9uXCIsIFwicHJvZHVjdFwiLCBcInBpXCIsIFwiaW50ZWdyYWxcIiwgXCJvcmRmZW1pbmluZVwiLCBcIm9yZG1hc2N1bGluZVwiLCBcIk9tZWdhXCIsIFwiYWVcIiwgXCJvc2xhc2hcIiwgXCJxdWVzdGlvbmRvd25cIiwgXCJleGNsYW1kb3duXCIsIFwibG9naWNhbG5vdFwiLCBcInJhZGljYWxcIiwgXCJmbG9yaW5cIiwgXCJhcHByb3hlcXVhbFwiLCBcIkRlbHRhXCIsIFwiZ3VpbGxlbW90bGVmdFwiLCBcImd1aWxsZW1vdHJpZ2h0XCIsIFwiZWxsaXBzaXNcIiwgXCJzcGFjZVwiLCBcIkFncmF2ZVwiLCBcIkF0aWxkZVwiLCBcIk90aWxkZVwiLCBcIk9FXCIsIFwib2VcIiwgXCJlbmRhc2hcIiwgXCJlbWRhc2hcIiwgXCJxdW90ZWRibGxlZnRcIiwgXCJxdW90ZWRibHJpZ2h0XCIsIFwicXVvdGVsZWZ0XCIsIFwicXVvdGVyaWdodFwiLCBcImRpdmlkZVwiLCBcImxvemVuZ2VcIiwgXCJ5ZGllcmVzaXNcIiwgXCJZZGllcmVzaXNcIiwgXCJmcmFjdGlvblwiLCBcImN1cnJlbmN5XCIsIFwiZ3VpbHNpbmdsbGVmdFwiLCBcImd1aWxzaW5nbHJpZ2h0XCIsIFwiZmlcIiwgXCJmbFwiLCBcImRhZ2dlcmRibFwiLCBcInBlcmlvZGNlbnRlcmVkXCIsIFwicXVvdGVzaW5nbGJhc2VcIiwgXCJxdW90ZWRibGJhc2VcIiwgXCJwZXJ0aG91c2FuZFwiLCBcIkFjaXJjdW1mbGV4XCIsIFwiRWNpcmN1bWZsZXhcIiwgXCJBYWN1dGVcIiwgXCJFZGllcmVzaXNcIiwgXCJFZ3JhdmVcIiwgXCJJYWN1dGVcIiwgXCJJY2lyY3VtZmxleFwiLCBcIklkaWVyZXNpc1wiLCBcIklncmF2ZVwiLCBcIk9hY3V0ZVwiLCBcIk9jaXJjdW1mbGV4XCIsIFwiYXBwbGVcIiwgXCJPZ3JhdmVcIiwgXCJVYWN1dGVcIiwgXCJVY2lyY3VtZmxleFwiLCBcIlVncmF2ZVwiLCBcImRvdGxlc3NpXCIsIFwiY2lyY3VtZmxleFwiLCBcInRpbGRlXCIsIFwibWFjcm9uXCIsIFwiYnJldmVcIiwgXCJkb3RhY2NlbnRcIiwgXCJyaW5nXCIsIFwiY2VkaWxsYVwiLCBcImh1bmdhcnVtbGF1dFwiLCBcIm9nb25la1wiLCBcImNhcm9uXCJdO1xuZXhwb3J0cy5NYWNSb21hbkVuY29kaW5nID0gTWFjUm9tYW5FbmNvZGluZztcbmNvbnN0IFN0YW5kYXJkRW5jb2RpbmcgPSBbXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJzcGFjZVwiLCBcImV4Y2xhbVwiLCBcInF1b3RlZGJsXCIsIFwibnVtYmVyc2lnblwiLCBcImRvbGxhclwiLCBcInBlcmNlbnRcIiwgXCJhbXBlcnNhbmRcIiwgXCJxdW90ZXJpZ2h0XCIsIFwicGFyZW5sZWZ0XCIsIFwicGFyZW5yaWdodFwiLCBcImFzdGVyaXNrXCIsIFwicGx1c1wiLCBcImNvbW1hXCIsIFwiaHlwaGVuXCIsIFwicGVyaW9kXCIsIFwic2xhc2hcIiwgXCJ6ZXJvXCIsIFwib25lXCIsIFwidHdvXCIsIFwidGhyZWVcIiwgXCJmb3VyXCIsIFwiZml2ZVwiLCBcInNpeFwiLCBcInNldmVuXCIsIFwiZWlnaHRcIiwgXCJuaW5lXCIsIFwiY29sb25cIiwgXCJzZW1pY29sb25cIiwgXCJsZXNzXCIsIFwiZXF1YWxcIiwgXCJncmVhdGVyXCIsIFwicXVlc3Rpb25cIiwgXCJhdFwiLCBcIkFcIiwgXCJCXCIsIFwiQ1wiLCBcIkRcIiwgXCJFXCIsIFwiRlwiLCBcIkdcIiwgXCJIXCIsIFwiSVwiLCBcIkpcIiwgXCJLXCIsIFwiTFwiLCBcIk1cIiwgXCJOXCIsIFwiT1wiLCBcIlBcIiwgXCJRXCIsIFwiUlwiLCBcIlNcIiwgXCJUXCIsIFwiVVwiLCBcIlZcIiwgXCJXXCIsIFwiWFwiLCBcIllcIiwgXCJaXCIsIFwiYnJhY2tldGxlZnRcIiwgXCJiYWNrc2xhc2hcIiwgXCJicmFja2V0cmlnaHRcIiwgXCJhc2NpaWNpcmN1bVwiLCBcInVuZGVyc2NvcmVcIiwgXCJxdW90ZWxlZnRcIiwgXCJhXCIsIFwiYlwiLCBcImNcIiwgXCJkXCIsIFwiZVwiLCBcImZcIiwgXCJnXCIsIFwiaFwiLCBcImlcIiwgXCJqXCIsIFwia1wiLCBcImxcIiwgXCJtXCIsIFwiblwiLCBcIm9cIiwgXCJwXCIsIFwicVwiLCBcInJcIiwgXCJzXCIsIFwidFwiLCBcInVcIiwgXCJ2XCIsIFwid1wiLCBcInhcIiwgXCJ5XCIsIFwielwiLCBcImJyYWNlbGVmdFwiLCBcImJhclwiLCBcImJyYWNlcmlnaHRcIiwgXCJhc2NpaXRpbGRlXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiZXhjbGFtZG93blwiLCBcImNlbnRcIiwgXCJzdGVybGluZ1wiLCBcImZyYWN0aW9uXCIsIFwieWVuXCIsIFwiZmxvcmluXCIsIFwic2VjdGlvblwiLCBcImN1cnJlbmN5XCIsIFwicXVvdGVzaW5nbGVcIiwgXCJxdW90ZWRibGxlZnRcIiwgXCJndWlsbGVtb3RsZWZ0XCIsIFwiZ3VpbHNpbmdsbGVmdFwiLCBcImd1aWxzaW5nbHJpZ2h0XCIsIFwiZmlcIiwgXCJmbFwiLCBcIlwiLCBcImVuZGFzaFwiLCBcImRhZ2dlclwiLCBcImRhZ2dlcmRibFwiLCBcInBlcmlvZGNlbnRlcmVkXCIsIFwiXCIsIFwicGFyYWdyYXBoXCIsIFwiYnVsbGV0XCIsIFwicXVvdGVzaW5nbGJhc2VcIiwgXCJxdW90ZWRibGJhc2VcIiwgXCJxdW90ZWRibHJpZ2h0XCIsIFwiZ3VpbGxlbW90cmlnaHRcIiwgXCJlbGxpcHNpc1wiLCBcInBlcnRob3VzYW5kXCIsIFwiXCIsIFwicXVlc3Rpb25kb3duXCIsIFwiXCIsIFwiZ3JhdmVcIiwgXCJhY3V0ZVwiLCBcImNpcmN1bWZsZXhcIiwgXCJ0aWxkZVwiLCBcIm1hY3JvblwiLCBcImJyZXZlXCIsIFwiZG90YWNjZW50XCIsIFwiZGllcmVzaXNcIiwgXCJcIiwgXCJyaW5nXCIsIFwiY2VkaWxsYVwiLCBcIlwiLCBcImh1bmdhcnVtbGF1dFwiLCBcIm9nb25la1wiLCBcImNhcm9uXCIsIFwiZW1kYXNoXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiQUVcIiwgXCJcIiwgXCJvcmRmZW1pbmluZVwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIkxzbGFzaFwiLCBcIk9zbGFzaFwiLCBcIk9FXCIsIFwib3JkbWFzY3VsaW5lXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiYWVcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJkb3RsZXNzaVwiLCBcIlwiLCBcIlwiLCBcImxzbGFzaFwiLCBcIm9zbGFzaFwiLCBcIm9lXCIsIFwiZ2VybWFuZGJsc1wiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiXTtcbmV4cG9ydHMuU3RhbmRhcmRFbmNvZGluZyA9IFN0YW5kYXJkRW5jb2Rpbmc7XG5jb25zdCBXaW5BbnNpRW5jb2RpbmcgPSBbXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJzcGFjZVwiLCBcImV4Y2xhbVwiLCBcInF1b3RlZGJsXCIsIFwibnVtYmVyc2lnblwiLCBcImRvbGxhclwiLCBcInBlcmNlbnRcIiwgXCJhbXBlcnNhbmRcIiwgXCJxdW90ZXNpbmdsZVwiLCBcInBhcmVubGVmdFwiLCBcInBhcmVucmlnaHRcIiwgXCJhc3Rlcmlza1wiLCBcInBsdXNcIiwgXCJjb21tYVwiLCBcImh5cGhlblwiLCBcInBlcmlvZFwiLCBcInNsYXNoXCIsIFwiemVyb1wiLCBcIm9uZVwiLCBcInR3b1wiLCBcInRocmVlXCIsIFwiZm91clwiLCBcImZpdmVcIiwgXCJzaXhcIiwgXCJzZXZlblwiLCBcImVpZ2h0XCIsIFwibmluZVwiLCBcImNvbG9uXCIsIFwic2VtaWNvbG9uXCIsIFwibGVzc1wiLCBcImVxdWFsXCIsIFwiZ3JlYXRlclwiLCBcInF1ZXN0aW9uXCIsIFwiYXRcIiwgXCJBXCIsIFwiQlwiLCBcIkNcIiwgXCJEXCIsIFwiRVwiLCBcIkZcIiwgXCJHXCIsIFwiSFwiLCBcIklcIiwgXCJKXCIsIFwiS1wiLCBcIkxcIiwgXCJNXCIsIFwiTlwiLCBcIk9cIiwgXCJQXCIsIFwiUVwiLCBcIlJcIiwgXCJTXCIsIFwiVFwiLCBcIlVcIiwgXCJWXCIsIFwiV1wiLCBcIlhcIiwgXCJZXCIsIFwiWlwiLCBcImJyYWNrZXRsZWZ0XCIsIFwiYmFja3NsYXNoXCIsIFwiYnJhY2tldHJpZ2h0XCIsIFwiYXNjaWljaXJjdW1cIiwgXCJ1bmRlcnNjb3JlXCIsIFwiZ3JhdmVcIiwgXCJhXCIsIFwiYlwiLCBcImNcIiwgXCJkXCIsIFwiZVwiLCBcImZcIiwgXCJnXCIsIFwiaFwiLCBcImlcIiwgXCJqXCIsIFwia1wiLCBcImxcIiwgXCJtXCIsIFwiblwiLCBcIm9cIiwgXCJwXCIsIFwicVwiLCBcInJcIiwgXCJzXCIsIFwidFwiLCBcInVcIiwgXCJ2XCIsIFwid1wiLCBcInhcIiwgXCJ5XCIsIFwielwiLCBcImJyYWNlbGVmdFwiLCBcImJhclwiLCBcImJyYWNlcmlnaHRcIiwgXCJhc2NpaXRpbGRlXCIsIFwiYnVsbGV0XCIsIFwiRXVyb1wiLCBcImJ1bGxldFwiLCBcInF1b3Rlc2luZ2xiYXNlXCIsIFwiZmxvcmluXCIsIFwicXVvdGVkYmxiYXNlXCIsIFwiZWxsaXBzaXNcIiwgXCJkYWdnZXJcIiwgXCJkYWdnZXJkYmxcIiwgXCJjaXJjdW1mbGV4XCIsIFwicGVydGhvdXNhbmRcIiwgXCJTY2Fyb25cIiwgXCJndWlsc2luZ2xsZWZ0XCIsIFwiT0VcIiwgXCJidWxsZXRcIiwgXCJaY2Fyb25cIiwgXCJidWxsZXRcIiwgXCJidWxsZXRcIiwgXCJxdW90ZWxlZnRcIiwgXCJxdW90ZXJpZ2h0XCIsIFwicXVvdGVkYmxsZWZ0XCIsIFwicXVvdGVkYmxyaWdodFwiLCBcImJ1bGxldFwiLCBcImVuZGFzaFwiLCBcImVtZGFzaFwiLCBcInRpbGRlXCIsIFwidHJhZGVtYXJrXCIsIFwic2Nhcm9uXCIsIFwiZ3VpbHNpbmdscmlnaHRcIiwgXCJvZVwiLCBcImJ1bGxldFwiLCBcInpjYXJvblwiLCBcIllkaWVyZXNpc1wiLCBcInNwYWNlXCIsIFwiZXhjbGFtZG93blwiLCBcImNlbnRcIiwgXCJzdGVybGluZ1wiLCBcImN1cnJlbmN5XCIsIFwieWVuXCIsIFwiYnJva2VuYmFyXCIsIFwic2VjdGlvblwiLCBcImRpZXJlc2lzXCIsIFwiY29weXJpZ2h0XCIsIFwib3JkZmVtaW5pbmVcIiwgXCJndWlsbGVtb3RsZWZ0XCIsIFwibG9naWNhbG5vdFwiLCBcImh5cGhlblwiLCBcInJlZ2lzdGVyZWRcIiwgXCJtYWNyb25cIiwgXCJkZWdyZWVcIiwgXCJwbHVzbWludXNcIiwgXCJ0d29zdXBlcmlvclwiLCBcInRocmVlc3VwZXJpb3JcIiwgXCJhY3V0ZVwiLCBcIm11XCIsIFwicGFyYWdyYXBoXCIsIFwicGVyaW9kY2VudGVyZWRcIiwgXCJjZWRpbGxhXCIsIFwib25lc3VwZXJpb3JcIiwgXCJvcmRtYXNjdWxpbmVcIiwgXCJndWlsbGVtb3RyaWdodFwiLCBcIm9uZXF1YXJ0ZXJcIiwgXCJvbmVoYWxmXCIsIFwidGhyZWVxdWFydGVyc1wiLCBcInF1ZXN0aW9uZG93blwiLCBcIkFncmF2ZVwiLCBcIkFhY3V0ZVwiLCBcIkFjaXJjdW1mbGV4XCIsIFwiQXRpbGRlXCIsIFwiQWRpZXJlc2lzXCIsIFwiQXJpbmdcIiwgXCJBRVwiLCBcIkNjZWRpbGxhXCIsIFwiRWdyYXZlXCIsIFwiRWFjdXRlXCIsIFwiRWNpcmN1bWZsZXhcIiwgXCJFZGllcmVzaXNcIiwgXCJJZ3JhdmVcIiwgXCJJYWN1dGVcIiwgXCJJY2lyY3VtZmxleFwiLCBcIklkaWVyZXNpc1wiLCBcIkV0aFwiLCBcIk50aWxkZVwiLCBcIk9ncmF2ZVwiLCBcIk9hY3V0ZVwiLCBcIk9jaXJjdW1mbGV4XCIsIFwiT3RpbGRlXCIsIFwiT2RpZXJlc2lzXCIsIFwibXVsdGlwbHlcIiwgXCJPc2xhc2hcIiwgXCJVZ3JhdmVcIiwgXCJVYWN1dGVcIiwgXCJVY2lyY3VtZmxleFwiLCBcIlVkaWVyZXNpc1wiLCBcIllhY3V0ZVwiLCBcIlRob3JuXCIsIFwiZ2VybWFuZGJsc1wiLCBcImFncmF2ZVwiLCBcImFhY3V0ZVwiLCBcImFjaXJjdW1mbGV4XCIsIFwiYXRpbGRlXCIsIFwiYWRpZXJlc2lzXCIsIFwiYXJpbmdcIiwgXCJhZVwiLCBcImNjZWRpbGxhXCIsIFwiZWdyYXZlXCIsIFwiZWFjdXRlXCIsIFwiZWNpcmN1bWZsZXhcIiwgXCJlZGllcmVzaXNcIiwgXCJpZ3JhdmVcIiwgXCJpYWN1dGVcIiwgXCJpY2lyY3VtZmxleFwiLCBcImlkaWVyZXNpc1wiLCBcImV0aFwiLCBcIm50aWxkZVwiLCBcIm9ncmF2ZVwiLCBcIm9hY3V0ZVwiLCBcIm9jaXJjdW1mbGV4XCIsIFwib3RpbGRlXCIsIFwib2RpZXJlc2lzXCIsIFwiZGl2aWRlXCIsIFwib3NsYXNoXCIsIFwidWdyYXZlXCIsIFwidWFjdXRlXCIsIFwidWNpcmN1bWZsZXhcIiwgXCJ1ZGllcmVzaXNcIiwgXCJ5YWN1dGVcIiwgXCJ0aG9yblwiLCBcInlkaWVyZXNpc1wiXTtcbmV4cG9ydHMuV2luQW5zaUVuY29kaW5nID0gV2luQW5zaUVuY29kaW5nO1xuY29uc3QgU3ltYm9sU2V0RW5jb2RpbmcgPSBbXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJcIiwgXCJzcGFjZVwiLCBcImV4Y2xhbVwiLCBcInVuaXZlcnNhbFwiLCBcIm51bWJlcnNpZ25cIiwgXCJleGlzdGVudGlhbFwiLCBcInBlcmNlbnRcIiwgXCJhbXBlcnNhbmRcIiwgXCJzdWNodGhhdFwiLCBcInBhcmVubGVmdFwiLCBcInBhcmVucmlnaHRcIiwgXCJhc3Rlcmlza21hdGhcIiwgXCJwbHVzXCIsIFwiY29tbWFcIiwgXCJtaW51c1wiLCBcInBlcmlvZFwiLCBcInNsYXNoXCIsIFwiemVyb1wiLCBcIm9uZVwiLCBcInR3b1wiLCBcInRocmVlXCIsIFwiZm91clwiLCBcImZpdmVcIiwgXCJzaXhcIiwgXCJzZXZlblwiLCBcImVpZ2h0XCIsIFwibmluZVwiLCBcImNvbG9uXCIsIFwic2VtaWNvbG9uXCIsIFwibGVzc1wiLCBcImVxdWFsXCIsIFwiZ3JlYXRlclwiLCBcInF1ZXN0aW9uXCIsIFwiY29uZ3J1ZW50XCIsIFwiQWxwaGFcIiwgXCJCZXRhXCIsIFwiQ2hpXCIsIFwiRGVsdGFcIiwgXCJFcHNpbG9uXCIsIFwiUGhpXCIsIFwiR2FtbWFcIiwgXCJFdGFcIiwgXCJJb3RhXCIsIFwidGhldGExXCIsIFwiS2FwcGFcIiwgXCJMYW1iZGFcIiwgXCJNdVwiLCBcIk51XCIsIFwiT21pY3JvblwiLCBcIlBpXCIsIFwiVGhldGFcIiwgXCJSaG9cIiwgXCJTaWdtYVwiLCBcIlRhdVwiLCBcIlVwc2lsb25cIiwgXCJzaWdtYTFcIiwgXCJPbWVnYVwiLCBcIlhpXCIsIFwiUHNpXCIsIFwiWmV0YVwiLCBcImJyYWNrZXRsZWZ0XCIsIFwidGhlcmVmb3JlXCIsIFwiYnJhY2tldHJpZ2h0XCIsIFwicGVycGVuZGljdWxhclwiLCBcInVuZGVyc2NvcmVcIiwgXCJyYWRpY2FsZXhcIiwgXCJhbHBoYVwiLCBcImJldGFcIiwgXCJjaGlcIiwgXCJkZWx0YVwiLCBcImVwc2lsb25cIiwgXCJwaGlcIiwgXCJnYW1tYVwiLCBcImV0YVwiLCBcImlvdGFcIiwgXCJwaGkxXCIsIFwia2FwcGFcIiwgXCJsYW1iZGFcIiwgXCJtdVwiLCBcIm51XCIsIFwib21pY3JvblwiLCBcInBpXCIsIFwidGhldGFcIiwgXCJyaG9cIiwgXCJzaWdtYVwiLCBcInRhdVwiLCBcInVwc2lsb25cIiwgXCJvbWVnYTFcIiwgXCJvbWVnYVwiLCBcInhpXCIsIFwicHNpXCIsIFwiemV0YVwiLCBcImJyYWNlbGVmdFwiLCBcImJhclwiLCBcImJyYWNlcmlnaHRcIiwgXCJzaW1pbGFyXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiXCIsIFwiRXVyb1wiLCBcIlVwc2lsb24xXCIsIFwibWludXRlXCIsIFwibGVzc2VxdWFsXCIsIFwiZnJhY3Rpb25cIiwgXCJpbmZpbml0eVwiLCBcImZsb3JpblwiLCBcImNsdWJcIiwgXCJkaWFtb25kXCIsIFwiaGVhcnRcIiwgXCJzcGFkZVwiLCBcImFycm93Ym90aFwiLCBcImFycm93bGVmdFwiLCBcImFycm93dXBcIiwgXCJhcnJvd3JpZ2h0XCIsIFwiYXJyb3dkb3duXCIsIFwiZGVncmVlXCIsIFwicGx1c21pbnVzXCIsIFwic2Vjb25kXCIsIFwiZ3JlYXRlcmVxdWFsXCIsIFwibXVsdGlwbHlcIiwgXCJwcm9wb3J0aW9uYWxcIiwgXCJwYXJ0aWFsZGlmZlwiLCBcImJ1bGxldFwiLCBcImRpdmlkZVwiLCBcIm5vdGVxdWFsXCIsIFwiZXF1aXZhbGVuY2VcIiwgXCJhcHByb3hlcXVhbFwiLCBcImVsbGlwc2lzXCIsIFwiYXJyb3d2ZXJ0ZXhcIiwgXCJhcnJvd2hvcml6ZXhcIiwgXCJjYXJyaWFnZXJldHVyblwiLCBcImFsZXBoXCIsIFwiSWZyYWt0dXJcIiwgXCJSZnJha3R1clwiLCBcIndlaWVyc3RyYXNzXCIsIFwiY2lyY2xlbXVsdGlwbHlcIiwgXCJjaXJjbGVwbHVzXCIsIFwiZW1wdHlzZXRcIiwgXCJpbnRlcnNlY3Rpb25cIiwgXCJ1bmlvblwiLCBcInByb3BlcnN1cGVyc2V0XCIsIFwicmVmbGV4c3VwZXJzZXRcIiwgXCJub3RzdWJzZXRcIiwgXCJwcm9wZXJzdWJzZXRcIiwgXCJyZWZsZXhzdWJzZXRcIiwgXCJlbGVtZW50XCIsIFwibm90ZWxlbWVudFwiLCBcImFuZ2xlXCIsIFwiZ3JhZGllbnRcIiwgXCJyZWdpc3RlcnNlcmlmXCIsIFwiY29weXJpZ2h0c2VyaWZcIiwgXCJ0cmFkZW1hcmtzZXJpZlwiLCBcInByb2R1Y3RcIiwgXCJyYWRpY2FsXCIsIFwiZG90bWF0aFwiLCBcImxvZ2ljYWxub3RcIiwgXCJsb2dpY2FsYW5kXCIsIFwibG9naWNhbG9yXCIsIFwiYXJyb3dkYmxib3RoXCIsIFwiYXJyb3dkYmxsZWZ0XCIsIFwiYXJyb3dkYmx1cFwiLCBcImFycm93ZGJscmlnaHRcIiwgXCJhcnJvd2RibGRvd25cIiwgXCJsb3plbmdlXCIsIFwiYW5nbGVsZWZ0XCIsIFwicmVnaXN0ZXJzYW5zXCIsIFwiY29weXJpZ2h0c2Fuc1wiLCBcInRyYWRlbWFya3NhbnNcIiwgXCJzdW1tYXRpb25cIiwgXCJwYXJlbmxlZnR0cFwiLCBcInBhcmVubGVmdGV4XCIsIFwicGFyZW5sZWZ0YnRcIiwgXCJicmFja2V0bGVmdHRwXCIsIFwiYnJhY2tldGxlZnRleFwiLCBcImJyYWNrZXRsZWZ0YnRcIiwgXCJicmFjZWxlZnR0cFwiLCBcImJyYWNlbGVmdG1pZFwiLCBcImJyYWNlbGVmdGJ0XCIsIFwiYnJhY2VleFwiLCBcIlwiLCBcImFuZ2xlcmlnaHRcIiwgXCJpbnRlZ3JhbFwiLCBcImludGVncmFsdHBcIiwgXCJpbnRlZ3JhbGV4XCIsIFwiaW50ZWdyYWxidFwiLCBcInBhcmVucmlnaHR0cFwiLCBcInBhcmVucmlnaHRleFwiLCBcInBhcmVucmlnaHRidFwiLCBcImJyYWNrZXRyaWdodHRwXCIsIFwiYnJhY2tldHJpZ2h0ZXhcIiwgXCJicmFja2V0cmlnaHRidFwiLCBcImJyYWNlcmlnaHR0cFwiLCBcImJyYWNlcmlnaHRtaWRcIiwgXCJicmFjZXJpZ2h0YnRcIiwgXCJcIl07XG5leHBvcnRzLlN5bWJvbFNldEVuY29kaW5nID0gU3ltYm9sU2V0RW5jb2Rpbmc7XG5jb25zdCBaYXBmRGluZ2JhdHNFbmNvZGluZyA9IFtcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcInNwYWNlXCIsIFwiYTFcIiwgXCJhMlwiLCBcImEyMDJcIiwgXCJhM1wiLCBcImE0XCIsIFwiYTVcIiwgXCJhMTE5XCIsIFwiYTExOFwiLCBcImExMTdcIiwgXCJhMTFcIiwgXCJhMTJcIiwgXCJhMTNcIiwgXCJhMTRcIiwgXCJhMTVcIiwgXCJhMTZcIiwgXCJhMTA1XCIsIFwiYTE3XCIsIFwiYTE4XCIsIFwiYTE5XCIsIFwiYTIwXCIsIFwiYTIxXCIsIFwiYTIyXCIsIFwiYTIzXCIsIFwiYTI0XCIsIFwiYTI1XCIsIFwiYTI2XCIsIFwiYTI3XCIsIFwiYTI4XCIsIFwiYTZcIiwgXCJhN1wiLCBcImE4XCIsIFwiYTlcIiwgXCJhMTBcIiwgXCJhMjlcIiwgXCJhMzBcIiwgXCJhMzFcIiwgXCJhMzJcIiwgXCJhMzNcIiwgXCJhMzRcIiwgXCJhMzVcIiwgXCJhMzZcIiwgXCJhMzdcIiwgXCJhMzhcIiwgXCJhMzlcIiwgXCJhNDBcIiwgXCJhNDFcIiwgXCJhNDJcIiwgXCJhNDNcIiwgXCJhNDRcIiwgXCJhNDVcIiwgXCJhNDZcIiwgXCJhNDdcIiwgXCJhNDhcIiwgXCJhNDlcIiwgXCJhNTBcIiwgXCJhNTFcIiwgXCJhNTJcIiwgXCJhNTNcIiwgXCJhNTRcIiwgXCJhNTVcIiwgXCJhNTZcIiwgXCJhNTdcIiwgXCJhNThcIiwgXCJhNTlcIiwgXCJhNjBcIiwgXCJhNjFcIiwgXCJhNjJcIiwgXCJhNjNcIiwgXCJhNjRcIiwgXCJhNjVcIiwgXCJhNjZcIiwgXCJhNjdcIiwgXCJhNjhcIiwgXCJhNjlcIiwgXCJhNzBcIiwgXCJhNzFcIiwgXCJhNzJcIiwgXCJhNzNcIiwgXCJhNzRcIiwgXCJhMjAzXCIsIFwiYTc1XCIsIFwiYTIwNFwiLCBcImE3NlwiLCBcImE3N1wiLCBcImE3OFwiLCBcImE3OVwiLCBcImE4MVwiLCBcImE4MlwiLCBcImE4M1wiLCBcImE4NFwiLCBcImE5N1wiLCBcImE5OFwiLCBcImE5OVwiLCBcImExMDBcIiwgXCJcIiwgXCJhODlcIiwgXCJhOTBcIiwgXCJhOTNcIiwgXCJhOTRcIiwgXCJhOTFcIiwgXCJhOTJcIiwgXCJhMjA1XCIsIFwiYTg1XCIsIFwiYTIwNlwiLCBcImE4NlwiLCBcImE4N1wiLCBcImE4OFwiLCBcImE5NVwiLCBcImE5NlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcIlwiLCBcImExMDFcIiwgXCJhMTAyXCIsIFwiYTEwM1wiLCBcImExMDRcIiwgXCJhMTA2XCIsIFwiYTEwN1wiLCBcImExMDhcIiwgXCJhMTEyXCIsIFwiYTExMVwiLCBcImExMTBcIiwgXCJhMTA5XCIsIFwiYTEyMFwiLCBcImExMjFcIiwgXCJhMTIyXCIsIFwiYTEyM1wiLCBcImExMjRcIiwgXCJhMTI1XCIsIFwiYTEyNlwiLCBcImExMjdcIiwgXCJhMTI4XCIsIFwiYTEyOVwiLCBcImExMzBcIiwgXCJhMTMxXCIsIFwiYTEzMlwiLCBcImExMzNcIiwgXCJhMTM0XCIsIFwiYTEzNVwiLCBcImExMzZcIiwgXCJhMTM3XCIsIFwiYTEzOFwiLCBcImExMzlcIiwgXCJhMTQwXCIsIFwiYTE0MVwiLCBcImExNDJcIiwgXCJhMTQzXCIsIFwiYTE0NFwiLCBcImExNDVcIiwgXCJhMTQ2XCIsIFwiYTE0N1wiLCBcImExNDhcIiwgXCJhMTQ5XCIsIFwiYTE1MFwiLCBcImExNTFcIiwgXCJhMTUyXCIsIFwiYTE1M1wiLCBcImExNTRcIiwgXCJhMTU1XCIsIFwiYTE1NlwiLCBcImExNTdcIiwgXCJhMTU4XCIsIFwiYTE1OVwiLCBcImExNjBcIiwgXCJhMTYxXCIsIFwiYTE2M1wiLCBcImExNjRcIiwgXCJhMTk2XCIsIFwiYTE2NVwiLCBcImExOTJcIiwgXCJhMTY2XCIsIFwiYTE2N1wiLCBcImExNjhcIiwgXCJhMTY5XCIsIFwiYTE3MFwiLCBcImExNzFcIiwgXCJhMTcyXCIsIFwiYTE3M1wiLCBcImExNjJcIiwgXCJhMTc0XCIsIFwiYTE3NVwiLCBcImExNzZcIiwgXCJhMTc3XCIsIFwiYTE3OFwiLCBcImExNzlcIiwgXCJhMTkzXCIsIFwiYTE4MFwiLCBcImExOTlcIiwgXCJhMTgxXCIsIFwiYTIwMFwiLCBcImExODJcIiwgXCJcIiwgXCJhMjAxXCIsIFwiYTE4M1wiLCBcImExODRcIiwgXCJhMTk3XCIsIFwiYTE4NVwiLCBcImExOTRcIiwgXCJhMTk4XCIsIFwiYTE4NlwiLCBcImExOTVcIiwgXCJhMTg3XCIsIFwiYTE4OFwiLCBcImExODlcIiwgXCJhMTkwXCIsIFwiYTE5MVwiLCBcIlwiXTtcbmV4cG9ydHMuWmFwZkRpbmdiYXRzRW5jb2RpbmcgPSBaYXBmRGluZ2JhdHNFbmNvZGluZztcblxuZnVuY3Rpb24gZ2V0RW5jb2RpbmcoZW5jb2RpbmdOYW1lKSB7XG4gIHN3aXRjaCAoZW5jb2RpbmdOYW1lKSB7XG4gICAgY2FzZSBcIldpbkFuc2lFbmNvZGluZ1wiOlxuICAgICAgcmV0dXJuIFdpbkFuc2lFbmNvZGluZztcblxuICAgIGNhc2UgXCJTdGFuZGFyZEVuY29kaW5nXCI6XG4gICAgICByZXR1cm4gU3RhbmRhcmRFbmNvZGluZztcblxuICAgIGNhc2UgXCJNYWNSb21hbkVuY29kaW5nXCI6XG4gICAgICByZXR1cm4gTWFjUm9tYW5FbmNvZGluZztcblxuICAgIGNhc2UgXCJTeW1ib2xTZXRFbmNvZGluZ1wiOlxuICAgICAgcmV0dXJuIFN5bWJvbFNldEVuY29kaW5nO1xuXG4gICAgY2FzZSBcIlphcGZEaW5nYmF0c0VuY29kaW5nXCI6XG4gICAgICByZXR1cm4gWmFwZkRpbmdiYXRzRW5jb2Rpbmc7XG5cbiAgICBjYXNlIFwiRXhwZXJ0RW5jb2RpbmdcIjpcbiAgICAgIHJldHVybiBFeHBlcnRFbmNvZGluZztcblxuICAgIGNhc2UgXCJNYWNFeHBlcnRFbmNvZGluZ1wiOlxuICAgICAgcmV0dXJuIE1hY0V4cGVydEVuY29kaW5nO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKiovIH0pLFxuLyogMjAgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuX193X3BkZmpzX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBleHBvcnQgKi8gX193X3BkZmpzX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIHtcbi8qIGhhcm1vbnkgZXhwb3J0ICovICAgXCJnZXREaW5nYmF0c0dseXBoc1VuaWNvZGVcIjogKCkgPT4gKC8qIGJpbmRpbmcgKi8gZ2V0RGluZ2JhdHNHbHlwaHNVbmljb2RlKSxcbi8qIGhhcm1vbnkgZXhwb3J0ICovICAgXCJnZXRHbHlwaHNVbmljb2RlXCI6ICgpID0+ICgvKiBiaW5kaW5nICovIGdldEdseXBoc1VuaWNvZGUpXG4vKiBoYXJtb255IGV4cG9ydCAqLyB9KTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfY29yZV91dGlsc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193X3BkZmpzX3JlcXVpcmVfXyg5KTtcblxuY29uc3QgZ2V0R2x5cGhzVW5pY29kZSA9ICgwLF9jb3JlX3V0aWxzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18uZ2V0QXJyYXlMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICgpIHtcbiByZXR1cm4gW1xuICBcIkFcIixcbiAgMHgwMDQxLFxuICBcIkFFXCIsXG4gIDB4MDBjNixcbiAgXCJBRWFjdXRlXCIsXG4gIDB4MDFmYyxcbiAgXCJBRW1hY3JvblwiLFxuICAweDAxZTIsXG4gIFwiQUVzbWFsbFwiLFxuICAweGY3ZTYsXG4gIFwiQWFjdXRlXCIsXG4gIDB4MDBjMSxcbiAgXCJBYWN1dGVzbWFsbFwiLFxuICAweGY3ZTEsXG4gIFwiQWJyZXZlXCIsXG4gIDB4MDEwMixcbiAgXCJBYnJldmVhY3V0ZVwiLFxuICAweDFlYWUsXG4gIFwiQWJyZXZlY3lyaWxsaWNcIixcbiAgMHgwNGQwLFxuICBcIkFicmV2ZWRvdGJlbG93XCIsXG4gIDB4MWViNixcbiAgXCJBYnJldmVncmF2ZVwiLFxuICAweDFlYjAsXG4gIFwiQWJyZXZlaG9va2Fib3ZlXCIsXG4gIDB4MWViMixcbiAgXCJBYnJldmV0aWxkZVwiLFxuICAweDFlYjQsXG4gIFwiQWNhcm9uXCIsXG4gIDB4MDFjZCxcbiAgXCJBY2lyY2xlXCIsXG4gIDB4MjRiNixcbiAgXCJBY2lyY3VtZmxleFwiLFxuICAweDAwYzIsXG4gIFwiQWNpcmN1bWZsZXhhY3V0ZVwiLFxuICAweDFlYTQsXG4gIFwiQWNpcmN1bWZsZXhkb3RiZWxvd1wiLFxuICAweDFlYWMsXG4gIFwiQWNpcmN1bWZsZXhncmF2ZVwiLFxuICAweDFlYTYsXG4gIFwiQWNpcmN1bWZsZXhob29rYWJvdmVcIixcbiAgMHgxZWE4LFxuICBcIkFjaXJjdW1mbGV4c21hbGxcIixcbiAgMHhmN2UyLFxuICBcIkFjaXJjdW1mbGV4dGlsZGVcIixcbiAgMHgxZWFhLFxuICBcIkFjdXRlXCIsXG4gIDB4ZjZjOSxcbiAgXCJBY3V0ZXNtYWxsXCIsXG4gIDB4ZjdiNCxcbiAgXCJBY3lyaWxsaWNcIixcbiAgMHgwNDEwLFxuICBcIkFkYmxncmF2ZVwiLFxuICAweDAyMDAsXG4gIFwiQWRpZXJlc2lzXCIsXG4gIDB4MDBjNCxcbiAgXCJBZGllcmVzaXNjeXJpbGxpY1wiLFxuICAweDA0ZDIsXG4gIFwiQWRpZXJlc2lzbWFjcm9uXCIsXG4gIDB4MDFkZSxcbiAgXCJBZGllcmVzaXNzbWFsbFwiLFxuICAweGY3ZTQsXG4gIFwiQWRvdGJlbG93XCIsXG4gIDB4MWVhMCxcbiAgXCJBZG90bWFjcm9uXCIsXG4gIDB4MDFlMCxcbiAgXCJBZ3JhdmVcIixcbiAgMHgwMGMwLFxuICBcIkFncmF2ZXNtYWxsXCIsXG4gIDB4ZjdlMCxcbiAgXCJBaG9va2Fib3ZlXCIsXG4gIDB4MWVhMixcbiAgXCJBaWVjeXJpbGxpY1wiLFxuICAweDA0ZDQsXG4gIFwiQWludmVydGVkYnJldmVcIixcbiAgMHgwMjAyLFxuICBcIkFscGhhXCIsXG4gIDB4MDM5MSxcbiAgXCJBbHBoYXRvbm9zXCIsXG4gIDB4MDM4NixcbiAgXCJBbWFjcm9uXCIsXG4gIDB4MDEwMCxcbiAgXCJBbW9ub3NwYWNlXCIsXG4gIDB4ZmYyMSxcbiAgXCJBb2dvbmVrXCIsXG4gIDB4MDEwNCxcbiAgXCJBcmluZ1wiLFxuICAweDAwYzUsXG4gIFwiQXJpbmdhY3V0ZVwiLFxuICAweDAxZmEsXG4gIFwiQXJpbmdiZWxvd1wiLFxuICAweDFlMDAsXG4gIFwiQXJpbmdzbWFsbFwiLFxuICAweGY3ZTUsXG4gIFwiQXNtYWxsXCIsXG4gIDB4Zjc2MSxcbiAgXCJBdGlsZGVcIixcbiAgMHgwMGMzLFxuICBcIkF0aWxkZXNtYWxsXCIsXG4gIDB4ZjdlMyxcbiAgXCJBeWJhcm1lbmlhblwiLFxuICAweDA1MzEsXG4gIFwiQlwiLFxuICAweDAwNDIsXG4gIFwiQmNpcmNsZVwiLFxuICAweDI0YjcsXG4gIFwiQmRvdGFjY2VudFwiLFxuICAweDFlMDIsXG4gIFwiQmRvdGJlbG93XCIsXG4gIDB4MWUwNCxcbiAgXCJCZWN5cmlsbGljXCIsXG4gIDB4MDQxMSxcbiAgXCJCZW5hcm1lbmlhblwiLFxuICAweDA1MzIsXG4gIFwiQmV0YVwiLFxuICAweDAzOTIsXG4gIFwiQmhvb2tcIixcbiAgMHgwMTgxLFxuICBcIkJsaW5lYmVsb3dcIixcbiAgMHgxZTA2LFxuICBcIkJtb25vc3BhY2VcIixcbiAgMHhmZjIyLFxuICBcIkJyZXZlc21hbGxcIixcbiAgMHhmNmY0LFxuICBcIkJzbWFsbFwiLFxuICAweGY3NjIsXG4gIFwiQnRvcGJhclwiLFxuICAweDAxODIsXG4gIFwiQ1wiLFxuICAweDAwNDMsXG4gIFwiQ2Fhcm1lbmlhblwiLFxuICAweDA1M2UsXG4gIFwiQ2FjdXRlXCIsXG4gIDB4MDEwNixcbiAgXCJDYXJvblwiLFxuICAweGY2Y2EsXG4gIFwiQ2Fyb25zbWFsbFwiLFxuICAweGY2ZjUsXG4gIFwiQ2Nhcm9uXCIsXG4gIDB4MDEwYyxcbiAgXCJDY2VkaWxsYVwiLFxuICAweDAwYzcsXG4gIFwiQ2NlZGlsbGFhY3V0ZVwiLFxuICAweDFlMDgsXG4gIFwiQ2NlZGlsbGFzbWFsbFwiLFxuICAweGY3ZTcsXG4gIFwiQ2NpcmNsZVwiLFxuICAweDI0YjgsXG4gIFwiQ2NpcmN1bWZsZXhcIixcbiAgMHgwMTA4LFxuICBcIkNkb3RcIixcbiAgMHgwMTBhLFxuICBcIkNkb3RhY2NlbnRcIixcbiAgMHgwMTBhLFxuICBcIkNlZGlsbGFzbWFsbFwiLFxuICAweGY3YjgsXG4gIFwiQ2hhYXJtZW5pYW5cIixcbiAgMHgwNTQ5LFxuICBcIkNoZWFia2hhc2lhbmN5cmlsbGljXCIsXG4gIDB4MDRiYyxcbiAgXCJDaGVjeXJpbGxpY1wiLFxuICAweDA0MjcsXG4gIFwiQ2hlZGVzY2VuZGVyYWJraGFzaWFuY3lyaWxsaWNcIixcbiAgMHgwNGJlLFxuICBcIkNoZWRlc2NlbmRlcmN5cmlsbGljXCIsXG4gIDB4MDRiNixcbiAgXCJDaGVkaWVyZXNpc2N5cmlsbGljXCIsXG4gIDB4MDRmNCxcbiAgXCJDaGVoYXJtZW5pYW5cIixcbiAgMHgwNTQzLFxuICBcIkNoZWtoYWthc3NpYW5jeXJpbGxpY1wiLFxuICAweDA0Y2IsXG4gIFwiQ2hldmVydGljYWxzdHJva2VjeXJpbGxpY1wiLFxuICAweDA0YjgsXG4gIFwiQ2hpXCIsXG4gIDB4MDNhNyxcbiAgXCJDaG9va1wiLFxuICAweDAxODcsXG4gIFwiQ2lyY3VtZmxleHNtYWxsXCIsXG4gIDB4ZjZmNixcbiAgXCJDbW9ub3NwYWNlXCIsXG4gIDB4ZmYyMyxcbiAgXCJDb2FybWVuaWFuXCIsXG4gIDB4MDU1MSxcbiAgXCJDc21hbGxcIixcbiAgMHhmNzYzLFxuICBcIkRcIixcbiAgMHgwMDQ0LFxuICBcIkRaXCIsXG4gIDB4MDFmMSxcbiAgXCJEWmNhcm9uXCIsXG4gIDB4MDFjNCxcbiAgXCJEYWFybWVuaWFuXCIsXG4gIDB4MDUzNCxcbiAgXCJEYWZyaWNhblwiLFxuICAweDAxODksXG4gIFwiRGNhcm9uXCIsXG4gIDB4MDEwZSxcbiAgXCJEY2VkaWxsYVwiLFxuICAweDFlMTAsXG4gIFwiRGNpcmNsZVwiLFxuICAweDI0YjksXG4gIFwiRGNpcmN1bWZsZXhiZWxvd1wiLFxuICAweDFlMTIsXG4gIFwiRGNyb2F0XCIsXG4gIDB4MDExMCxcbiAgXCJEZG90YWNjZW50XCIsXG4gIDB4MWUwYSxcbiAgXCJEZG90YmVsb3dcIixcbiAgMHgxZTBjLFxuICBcIkRlY3lyaWxsaWNcIixcbiAgMHgwNDE0LFxuICBcIkRlaWNvcHRpY1wiLFxuICAweDAzZWUsXG4gIFwiRGVsdGFcIixcbiAgMHgyMjA2LFxuICBcIkRlbHRhZ3JlZWtcIixcbiAgMHgwMzk0LFxuICBcIkRob29rXCIsXG4gIDB4MDE4YSxcbiAgXCJEaWVyZXNpc1wiLFxuICAweGY2Y2IsXG4gIFwiRGllcmVzaXNBY3V0ZVwiLFxuICAweGY2Y2MsXG4gIFwiRGllcmVzaXNHcmF2ZVwiLFxuICAweGY2Y2QsXG4gIFwiRGllcmVzaXNzbWFsbFwiLFxuICAweGY3YTgsXG4gIFwiRGlnYW1tYWdyZWVrXCIsXG4gIDB4MDNkYyxcbiAgXCJEamVjeXJpbGxpY1wiLFxuICAweDA0MDIsXG4gIFwiRGxpbmViZWxvd1wiLFxuICAweDFlMGUsXG4gIFwiRG1vbm9zcGFjZVwiLFxuICAweGZmMjQsXG4gIFwiRG90YWNjZW50c21hbGxcIixcbiAgMHhmNmY3LFxuICBcIkRzbGFzaFwiLFxuICAweDAxMTAsXG4gIFwiRHNtYWxsXCIsXG4gIDB4Zjc2NCxcbiAgXCJEdG9wYmFyXCIsXG4gIDB4MDE4YixcbiAgXCJEelwiLFxuICAweDAxZjIsXG4gIFwiRHpjYXJvblwiLFxuICAweDAxYzUsXG4gIFwiRHplYWJraGFzaWFuY3lyaWxsaWNcIixcbiAgMHgwNGUwLFxuICBcIkR6ZWN5cmlsbGljXCIsXG4gIDB4MDQwNSxcbiAgXCJEemhlY3lyaWxsaWNcIixcbiAgMHgwNDBmLFxuICBcIkVcIixcbiAgMHgwMDQ1LFxuICBcIkVhY3V0ZVwiLFxuICAweDAwYzksXG4gIFwiRWFjdXRlc21hbGxcIixcbiAgMHhmN2U5LFxuICBcIkVicmV2ZVwiLFxuICAweDAxMTQsXG4gIFwiRWNhcm9uXCIsXG4gIDB4MDExYSxcbiAgXCJFY2VkaWxsYWJyZXZlXCIsXG4gIDB4MWUxYyxcbiAgXCJFY2hhcm1lbmlhblwiLFxuICAweDA1MzUsXG4gIFwiRWNpcmNsZVwiLFxuICAweDI0YmEsXG4gIFwiRWNpcmN1bWZsZXhcIixcbiAgMHgwMGNhLFxuICBcIkVjaXJjdW1mbGV4YWN1dGVcIixcbiAgMHgxZWJlLFxuICBcIkVjaXJjdW1mbGV4YmVsb3dcIixcbiAgMHgxZTE4LFxuICBcIkVjaXJjdW1mbGV4ZG90YmVsb3dcIixcbiAgMHgxZWM2LFxuICBcIkVjaXJjdW1mbGV4Z3JhdmVcIixcbiAgMHgxZWMwLFxuICBcIkVjaXJjdW1mbGV4aG9va2Fib3ZlXCIsXG4gIDB4MWVjMixcbiAgXCJFY2lyY3VtZmxleHNtYWxsXCIsXG4gIDB4ZjdlYSxcbiAgXCJFY2lyY3VtZmxleHRpbGRlXCIsXG4gIDB4MWVjNCxcbiAgXCJFY3lyaWxsaWNcIixcbiAgMHgwNDA0LFxuICBcIkVkYmxncmF2ZVwiLFxuICAweDAyMDQsXG4gIFwiRWRpZXJlc2lzXCIsXG4gIDB4MDBjYixcbiAgXCJFZGllcmVzaXNzbWFsbFwiLFxuICAweGY3ZWIsXG4gIFwiRWRvdFwiLFxuICAweDAxMTYsXG4gIFwiRWRvdGFjY2VudFwiLFxuICAweDAxMTYsXG4gIFwiRWRvdGJlbG93XCIsXG4gIDB4MWViOCxcbiAgXCJFZmN5cmlsbGljXCIsXG4gIDB4MDQyNCxcbiAgXCJFZ3JhdmVcIixcbiAgMHgwMGM4LFxuICBcIkVncmF2ZXNtYWxsXCIsXG4gIDB4ZjdlOCxcbiAgXCJFaGFybWVuaWFuXCIsXG4gIDB4MDUzNyxcbiAgXCJFaG9va2Fib3ZlXCIsXG4gIDB4MWViYSxcbiAgXCJFaWdodHJvbWFuXCIsXG4gIDB4MjE2NyxcbiAgXCJFaW52ZXJ0ZWRicmV2ZVwiLFxuICAweDAyMDYsXG4gIFwiRWlvdGlmaWVkY3lyaWxsaWNcIixcbiAgMHgwNDY0LFxuICBcIkVsY3lyaWxsaWNcIixcbiAgMHgwNDFiLFxuICBcIkVsZXZlbnJvbWFuXCIsXG4gIDB4MjE2YSxcbiAgXCJFbWFjcm9uXCIsXG4gIDB4MDExMixcbiAgXCJFbWFjcm9uYWN1dGVcIixcbiAgMHgxZTE2LFxuICBcIkVtYWNyb25ncmF2ZVwiLFxuICAweDFlMTQsXG4gIFwiRW1jeXJpbGxpY1wiLFxuICAweDA0MWMsXG4gIFwiRW1vbm9zcGFjZVwiLFxuICAweGZmMjUsXG4gIFwiRW5jeXJpbGxpY1wiLFxuICAweDA0MWQsXG4gIFwiRW5kZXNjZW5kZXJjeXJpbGxpY1wiLFxuICAweDA0YTIsXG4gIFwiRW5nXCIsXG4gIDB4MDE0YSxcbiAgXCJFbmdoZWN5cmlsbGljXCIsXG4gIDB4MDRhNCxcbiAgXCJFbmhvb2tjeXJpbGxpY1wiLFxuICAweDA0YzcsXG4gIFwiRW9nb25la1wiLFxuICAweDAxMTgsXG4gIFwiRW9wZW5cIixcbiAgMHgwMTkwLFxuICBcIkVwc2lsb25cIixcbiAgMHgwMzk1LFxuICBcIkVwc2lsb250b25vc1wiLFxuICAweDAzODgsXG4gIFwiRXJjeXJpbGxpY1wiLFxuICAweDA0MjAsXG4gIFwiRXJldmVyc2VkXCIsXG4gIDB4MDE4ZSxcbiAgXCJFcmV2ZXJzZWRjeXJpbGxpY1wiLFxuICAweDA0MmQsXG4gIFwiRXNjeXJpbGxpY1wiLFxuICAweDA0MjEsXG4gIFwiRXNkZXNjZW5kZXJjeXJpbGxpY1wiLFxuICAweDA0YWEsXG4gIFwiRXNoXCIsXG4gIDB4MDFhOSxcbiAgXCJFc21hbGxcIixcbiAgMHhmNzY1LFxuICBcIkV0YVwiLFxuICAweDAzOTcsXG4gIFwiRXRhcm1lbmlhblwiLFxuICAweDA1MzgsXG4gIFwiRXRhdG9ub3NcIixcbiAgMHgwMzg5LFxuICBcIkV0aFwiLFxuICAweDAwZDAsXG4gIFwiRXRoc21hbGxcIixcbiAgMHhmN2YwLFxuICBcIkV0aWxkZVwiLFxuICAweDFlYmMsXG4gIFwiRXRpbGRlYmVsb3dcIixcbiAgMHgxZTFhLFxuICBcIkV1cm9cIixcbiAgMHgyMGFjLFxuICBcIkV6aFwiLFxuICAweDAxYjcsXG4gIFwiRXpoY2Fyb25cIixcbiAgMHgwMWVlLFxuICBcIkV6aHJldmVyc2VkXCIsXG4gIDB4MDFiOCxcbiAgXCJGXCIsXG4gIDB4MDA0NixcbiAgXCJGY2lyY2xlXCIsXG4gIDB4MjRiYixcbiAgXCJGZG90YWNjZW50XCIsXG4gIDB4MWUxZSxcbiAgXCJGZWhhcm1lbmlhblwiLFxuICAweDA1NTYsXG4gIFwiRmVpY29wdGljXCIsXG4gIDB4MDNlNCxcbiAgXCJGaG9va1wiLFxuICAweDAxOTEsXG4gIFwiRml0YWN5cmlsbGljXCIsXG4gIDB4MDQ3MixcbiAgXCJGaXZlcm9tYW5cIixcbiAgMHgyMTY0LFxuICBcIkZtb25vc3BhY2VcIixcbiAgMHhmZjI2LFxuICBcIkZvdXJyb21hblwiLFxuICAweDIxNjMsXG4gIFwiRnNtYWxsXCIsXG4gIDB4Zjc2NixcbiAgXCJHXCIsXG4gIDB4MDA0NyxcbiAgXCJHQnNxdWFyZVwiLFxuICAweDMzODcsXG4gIFwiR2FjdXRlXCIsXG4gIDB4MDFmNCxcbiAgXCJHYW1tYVwiLFxuICAweDAzOTMsXG4gIFwiR2FtbWFhZnJpY2FuXCIsXG4gIDB4MDE5NCxcbiAgXCJHYW5naWFjb3B0aWNcIixcbiAgMHgwM2VhLFxuICBcIkdicmV2ZVwiLFxuICAweDAxMWUsXG4gIFwiR2Nhcm9uXCIsXG4gIDB4MDFlNixcbiAgXCJHY2VkaWxsYVwiLFxuICAweDAxMjIsXG4gIFwiR2NpcmNsZVwiLFxuICAweDI0YmMsXG4gIFwiR2NpcmN1bWZsZXhcIixcbiAgMHgwMTFjLFxuICBcIkdjb21tYWFjY2VudFwiLFxuICAweDAxMjIsXG4gIFwiR2RvdFwiLFxuICAweDAxMjAsXG4gIFwiR2RvdGFjY2VudFwiLFxuICAweDAxMjAsXG4gIFwiR2VjeXJpbGxpY1wiLFxuICAweDA0MTMsXG4gIFwiR2hhZGFybWVuaWFuXCIsXG4gIDB4MDU0MixcbiAgXCJHaGVtaWRkbGVob29rY3lyaWxsaWNcIixcbiAgMHgwNDk0LFxuICBcIkdoZXN0cm9rZWN5cmlsbGljXCIsXG4gIDB4MDQ5MixcbiAgXCJHaGV1cHR1cm5jeXJpbGxpY1wiLFxuICAweDA0OTAsXG4gIFwiR2hvb2tcIixcbiAgMHgwMTkzLFxuICBcIkdpbWFybWVuaWFuXCIsXG4gIDB4MDUzMyxcbiAgXCJHamVjeXJpbGxpY1wiLFxuICAweDA0MDMsXG4gIFwiR21hY3JvblwiLFxuICAweDFlMjAsXG4gIFwiR21vbm9zcGFjZVwiLFxuICAweGZmMjcsXG4gIFwiR3JhdmVcIixcbiAgMHhmNmNlLFxuICBcIkdyYXZlc21hbGxcIixcbiAgMHhmNzYwLFxuICBcIkdzbWFsbFwiLFxuICAweGY3NjcsXG4gIFwiR3NtYWxsaG9va1wiLFxuICAweDAyOWIsXG4gIFwiR3N0cm9rZVwiLFxuICAweDAxZTQsXG4gIFwiSFwiLFxuICAweDAwNDgsXG4gIFwiSDE4NTMzXCIsXG4gIDB4MjVjZixcbiAgXCJIMTg1NDNcIixcbiAgMHgyNWFhLFxuICBcIkgxODU1MVwiLFxuICAweDI1YWIsXG4gIFwiSDIyMDczXCIsXG4gIDB4MjVhMSxcbiAgXCJIUHNxdWFyZVwiLFxuICAweDMzY2IsXG4gIFwiSGFhYmtoYXNpYW5jeXJpbGxpY1wiLFxuICAweDA0YTgsXG4gIFwiSGFkZXNjZW5kZXJjeXJpbGxpY1wiLFxuICAweDA0YjIsXG4gIFwiSGFyZHNpZ25jeXJpbGxpY1wiLFxuICAweDA0MmEsXG4gIFwiSGJhclwiLFxuICAweDAxMjYsXG4gIFwiSGJyZXZlYmVsb3dcIixcbiAgMHgxZTJhLFxuICBcIkhjZWRpbGxhXCIsXG4gIDB4MWUyOCxcbiAgXCJIY2lyY2xlXCIsXG4gIDB4MjRiZCxcbiAgXCJIY2lyY3VtZmxleFwiLFxuICAweDAxMjQsXG4gIFwiSGRpZXJlc2lzXCIsXG4gIDB4MWUyNixcbiAgXCJIZG90YWNjZW50XCIsXG4gIDB4MWUyMixcbiAgXCJIZG90YmVsb3dcIixcbiAgMHgxZTI0LFxuICBcIkhtb25vc3BhY2VcIixcbiAgMHhmZjI4LFxuICBcIkhvYXJtZW5pYW5cIixcbiAgMHgwNTQwLFxuICBcIkhvcmljb3B0aWNcIixcbiAgMHgwM2U4LFxuICBcIkhzbWFsbFwiLFxuICAweGY3NjgsXG4gIFwiSHVuZ2FydW1sYXV0XCIsXG4gIDB4ZjZjZixcbiAgXCJIdW5nYXJ1bWxhdXRzbWFsbFwiLFxuICAweGY2ZjgsXG4gIFwiSHpzcXVhcmVcIixcbiAgMHgzMzkwLFxuICBcIklcIixcbiAgMHgwMDQ5LFxuICBcIklBY3lyaWxsaWNcIixcbiAgMHgwNDJmLFxuICBcIklKXCIsXG4gIDB4MDEzMixcbiAgXCJJVWN5cmlsbGljXCIsXG4gIDB4MDQyZSxcbiAgXCJJYWN1dGVcIixcbiAgMHgwMGNkLFxuICBcIklhY3V0ZXNtYWxsXCIsXG4gIDB4ZjdlZCxcbiAgXCJJYnJldmVcIixcbiAgMHgwMTJjLFxuICBcIkljYXJvblwiLFxuICAweDAxY2YsXG4gIFwiSWNpcmNsZVwiLFxuICAweDI0YmUsXG4gIFwiSWNpcmN1bWZsZXhcIixcbiAgMHgwMGNlLFxuICBcIkljaXJjdW1mbGV4c21hbGxcIixcbiAgMHhmN2VlLFxuICBcIkljeXJpbGxpY1wiLFxuICAweDA0MDYsXG4gIFwiSWRibGdyYXZlXCIsXG4gIDB4MDIwOCxcbiAgXCJJZGllcmVzaXNcIixcbiAgMHgwMGNmLFxuICBcIklkaWVyZXNpc2FjdXRlXCIsXG4gIDB4MWUyZSxcbiAgXCJJZGllcmVzaXNjeXJpbGxpY1wiLFxuICAweDA0ZTQsXG4gIFwiSWRpZXJlc2lzc21hbGxcIixcbiAgMHhmN2VmLFxuICBcIklkb3RcIixcbiAgMHgwMTMwLFxuICBcIklkb3RhY2NlbnRcIixcbiAgMHgwMTMwLFxuICBcIklkb3RiZWxvd1wiLFxuICAweDFlY2EsXG4gIFwiSWVicmV2ZWN5cmlsbGljXCIsXG4gIDB4MDRkNixcbiAgXCJJZWN5cmlsbGljXCIsXG4gIDB4MDQxNSxcbiAgXCJJZnJha3R1clwiLFxuICAweDIxMTEsXG4gIFwiSWdyYXZlXCIsXG4gIDB4MDBjYyxcbiAgXCJJZ3JhdmVzbWFsbFwiLFxuICAweGY3ZWMsXG4gIFwiSWhvb2thYm92ZVwiLFxuICAweDFlYzgsXG4gIFwiSWljeXJpbGxpY1wiLFxuICAweDA0MTgsXG4gIFwiSWludmVydGVkYnJldmVcIixcbiAgMHgwMjBhLFxuICBcIklpc2hvcnRjeXJpbGxpY1wiLFxuICAweDA0MTksXG4gIFwiSW1hY3JvblwiLFxuICAweDAxMmEsXG4gIFwiSW1hY3JvbmN5cmlsbGljXCIsXG4gIDB4MDRlMixcbiAgXCJJbW9ub3NwYWNlXCIsXG4gIDB4ZmYyOSxcbiAgXCJJbmlhcm1lbmlhblwiLFxuICAweDA1M2IsXG4gIFwiSW9jeXJpbGxpY1wiLFxuICAweDA0MDEsXG4gIFwiSW9nb25la1wiLFxuICAweDAxMmUsXG4gIFwiSW90YVwiLFxuICAweDAzOTksXG4gIFwiSW90YWFmcmljYW5cIixcbiAgMHgwMTk2LFxuICBcIklvdGFkaWVyZXNpc1wiLFxuICAweDAzYWEsXG4gIFwiSW90YXRvbm9zXCIsXG4gIDB4MDM4YSxcbiAgXCJJc21hbGxcIixcbiAgMHhmNzY5LFxuICBcIklzdHJva2VcIixcbiAgMHgwMTk3LFxuICBcIkl0aWxkZVwiLFxuICAweDAxMjgsXG4gIFwiSXRpbGRlYmVsb3dcIixcbiAgMHgxZTJjLFxuICBcIkl6aGl0c2FjeXJpbGxpY1wiLFxuICAweDA0NzQsXG4gIFwiSXpoaXRzYWRibGdyYXZlY3lyaWxsaWNcIixcbiAgMHgwNDc2LFxuICBcIkpcIixcbiAgMHgwMDRhLFxuICBcIkphYXJtZW5pYW5cIixcbiAgMHgwNTQxLFxuICBcIkpjaXJjbGVcIixcbiAgMHgyNGJmLFxuICBcIkpjaXJjdW1mbGV4XCIsXG4gIDB4MDEzNCxcbiAgXCJKZWN5cmlsbGljXCIsXG4gIDB4MDQwOCxcbiAgXCJKaGVoYXJtZW5pYW5cIixcbiAgMHgwNTRiLFxuICBcIkptb25vc3BhY2VcIixcbiAgMHhmZjJhLFxuICBcIkpzbWFsbFwiLFxuICAweGY3NmEsXG4gIFwiS1wiLFxuICAweDAwNGIsXG4gIFwiS0JzcXVhcmVcIixcbiAgMHgzMzg1LFxuICBcIktLc3F1YXJlXCIsXG4gIDB4MzNjZCxcbiAgXCJLYWJhc2hraXJjeXJpbGxpY1wiLFxuICAweDA0YTAsXG4gIFwiS2FjdXRlXCIsXG4gIDB4MWUzMCxcbiAgXCJLYWN5cmlsbGljXCIsXG4gIDB4MDQxYSxcbiAgXCJLYWRlc2NlbmRlcmN5cmlsbGljXCIsXG4gIDB4MDQ5YSxcbiAgXCJLYWhvb2tjeXJpbGxpY1wiLFxuICAweDA0YzMsXG4gIFwiS2FwcGFcIixcbiAgMHgwMzlhLFxuICBcIkthc3Ryb2tlY3lyaWxsaWNcIixcbiAgMHgwNDllLFxuICBcIkthdmVydGljYWxzdHJva2VjeXJpbGxpY1wiLFxuICAweDA0OWMsXG4gIFwiS2Nhcm9uXCIsXG4gIDB4MDFlOCxcbiAgXCJLY2VkaWxsYVwiLFxuICAweDAxMzYsXG4gIFwiS2NpcmNsZVwiLFxuICAweDI0YzAsXG4gIFwiS2NvbW1hYWNjZW50XCIsXG4gIDB4MDEzNixcbiAgXCJLZG90YmVsb3dcIixcbiAgMHgxZTMyLFxuICBcIktlaGFybWVuaWFuXCIsXG4gIDB4MDU1NCxcbiAgXCJLZW5hcm1lbmlhblwiLFxuICAweDA1M2YsXG4gIFwiS2hhY3lyaWxsaWNcIixcbiAgMHgwNDI1LFxuICBcIktoZWljb3B0aWNcIixcbiAgMHgwM2U2LFxuICBcIktob29rXCIsXG4gIDB4MDE5OCxcbiAgXCJLamVjeXJpbGxpY1wiLFxuICAweDA0MGMsXG4gIFwiS2xpbmViZWxvd1wiLFxuICAweDFlMzQsXG4gIFwiS21vbm9zcGFjZVwiLFxuICAweGZmMmIsXG4gIFwiS29wcGFjeXJpbGxpY1wiLFxuICAweDA0ODAsXG4gIFwiS29wcGFncmVla1wiLFxuICAweDAzZGUsXG4gIFwiS3NpY3lyaWxsaWNcIixcbiAgMHgwNDZlLFxuICBcIktzbWFsbFwiLFxuICAweGY3NmIsXG4gIFwiTFwiLFxuICAweDAwNGMsXG4gIFwiTEpcIixcbiAgMHgwMWM3LFxuICBcIkxMXCIsXG4gIDB4ZjZiZixcbiAgXCJMYWN1dGVcIixcbiAgMHgwMTM5LFxuICBcIkxhbWJkYVwiLFxuICAweDAzOWIsXG4gIFwiTGNhcm9uXCIsXG4gIDB4MDEzZCxcbiAgXCJMY2VkaWxsYVwiLFxuICAweDAxM2IsXG4gIFwiTGNpcmNsZVwiLFxuICAweDI0YzEsXG4gIFwiTGNpcmN1bWZsZXhiZWxvd1wiLFxuICAweDFlM2MsXG4gIFwiTGNvbW1hYWNjZW50XCIsXG4gIDB4MDEzYixcbiAgXCJMZG90XCIsXG4gIDB4MDEzZixcbiAgXCJMZG90YWNjZW50XCIsXG4gIDB4MDEzZixcbiAgXCJMZG90YmVsb3dcIixcbiAgMHgxZTM2LFxuICBcIkxkb3RiZWxvd21hY3JvblwiLFxuICAweDFlMzgsXG4gIFwiTGl3bmFybWVuaWFuXCIsXG4gIDB4MDUzYyxcbiAgXCJMalwiLFxuICAweDAxYzgsXG4gIFwiTGplY3lyaWxsaWNcIixcbiAgMHgwNDA5LFxuICBcIkxsaW5lYmVsb3dcIixcbiAgMHgxZTNhLFxuICBcIkxtb25vc3BhY2VcIixcbiAgMHhmZjJjLFxuICBcIkxzbGFzaFwiLFxuICAweDAxNDEsXG4gIFwiTHNsYXNoc21hbGxcIixcbiAgMHhmNmY5LFxuICBcIkxzbWFsbFwiLFxuICAweGY3NmMsXG4gIFwiTVwiLFxuICAweDAwNGQsXG4gIFwiTUJzcXVhcmVcIixcbiAgMHgzMzg2LFxuICBcIk1hY3JvblwiLFxuICAweGY2ZDAsXG4gIFwiTWFjcm9uc21hbGxcIixcbiAgMHhmN2FmLFxuICBcIk1hY3V0ZVwiLFxuICAweDFlM2UsXG4gIFwiTWNpcmNsZVwiLFxuICAweDI0YzIsXG4gIFwiTWRvdGFjY2VudFwiLFxuICAweDFlNDAsXG4gIFwiTWRvdGJlbG93XCIsXG4gIDB4MWU0MixcbiAgXCJNZW5hcm1lbmlhblwiLFxuICAweDA1NDQsXG4gIFwiTW1vbm9zcGFjZVwiLFxuICAweGZmMmQsXG4gIFwiTXNtYWxsXCIsXG4gIDB4Zjc2ZCxcbiAgXCJNdHVybmVkXCIsXG4gIDB4MDE5YyxcbiAgXCJNdVwiLFxuICAweDAzOWMsXG4gIFwiTlwiLFxuICAweDAwNGUsXG4gIFwiTkpcIixcbiAgMHgwMWNhLFxuICBcIk5hY3V0ZVwiLFxuICAweDAxNDMsXG4gIFwiTmNhcm9uXCIsXG4gIDB4MDE0NyxcbiAgXCJOY2VkaWxsYVwiLFxuICAweDAxNDUsXG4gIFwiTmNpcmNsZVwiLFxuICAweDI0YzMsXG4gIFwiTmNpcmN1bWZsZXhiZWxvd1wiLFxuICAweDFlNGEsXG4gIFwiTmNvbW1hYWNjZW50XCIsXG4gIDB4MDE0NSxcbiAgXCJOZG90YWNjZW50XCIsXG4gIDB4MWU0NCxcbiAgXCJOZG90YmVsb3dcIixcbiAgMHgxZTQ2LFxuICBcIk5ob29rbGVmdFwiLFxuICAweDAxOWQsXG4gIFwiTmluZXJvbWFuXCIsXG4gIDB4MjE2OCxcbiAgXCJOalwiLFxuICAweDAxY2IsXG4gIFwiTmplY3lyaWxsaWNcIixcbiAgMHgwNDBhLFxuICBcIk5saW5lYmVsb3dcIixcbiAgMHgxZTQ4LFxuICBcIk5tb25vc3BhY2VcIixcbiAgMHhmZjJlLFxuICBcIk5vd2FybWVuaWFuXCIsXG4gIDB4MDU0NixcbiAgXCJOc21hbGxcIixcbiAgMHhmNzZlLFxuICBcIk50aWxkZVwiLFxuICAweDAwZDEsXG4gIFwiTnRpbGRlc21hbGxcIixcbiAgMHhmN2YxLFxuICBcIk51XCIsXG4gIDB4MDM5ZCxcbiAgXCJPXCIsXG4gIDB4MDA0ZixcbiAgXCJPRVwiLFxuICAweDAxNTIsXG4gIFwiT0VzbWFsbFwiLFxuICAweGY2ZmEsXG4gIFwiT2FjdXRlXCIsXG4gIDB4MDBkMyxcbiAgXCJPYWN1dGVzbWFsbFwiLFxuICAweGY3ZjMsXG4gIFwiT2JhcnJlZGN5cmlsbGljXCIsXG4gIDB4MDRlOCxcbiAgXCJPYmFycmVkZGllcmVzaXNjeXJpbGxpY1wiLFxuICAweDA0ZWEsXG4gIFwiT2JyZXZlXCIsXG4gIDB4MDE0ZSxcbiAgXCJPY2Fyb25cIixcbiAgMHgwMWQxLFxuICBcIk9jZW50ZXJlZHRpbGRlXCIsXG4gIDB4MDE5ZixcbiAgXCJPY2lyY2xlXCIsXG4gIDB4MjRjNCxcbiAgXCJPY2lyY3VtZmxleFwiLFxuICAweDAwZDQsXG4gIFwiT2NpcmN1bWZsZXhhY3V0ZVwiLFxuICAweDFlZDAsXG4gIFwiT2NpcmN1bWZsZXhkb3RiZWxvd1wiLFxuICAweDFlZDgsXG4gIFwiT2NpcmN1bWZsZXhncmF2ZVwiLFxuICAweDFlZDIsXG4gIFwiT2NpcmN1bWZsZXhob29rYWJvdmVcIixcbiAgMHgxZWQ0LFxuICBcIk9jaXJjdW1mbGV4c21hbGxcIixcbiAgMHhmN2Y0LFxuICBcIk9jaXJjdW1mbGV4dGlsZGVcIixcbiAgMHgxZWQ2LFxuICBcIk9jeXJpbGxpY1wiLFxuICAweDA0MWUsXG4gIFwiT2RibGFjdXRlXCIsXG4gIDB4MDE1MCxcbiAgXCJPZGJsZ3JhdmVcIixcbiAgMHgwMjBjLFxuICBcIk9kaWVyZXNpc1wiLFxuICAweDAwZDYsXG4gIFwiT2RpZXJlc2lzY3lyaWxsaWNcIixcbiAgMHgwNGU2LFxuICBcIk9kaWVyZXNpc3NtYWxsXCIsXG4gIDB4ZjdmNixcbiAgXCJPZG90YmVsb3dcIixcbiAgMHgxZWNjLFxuICBcIk9nb25la3NtYWxsXCIsXG4gIDB4ZjZmYixcbiAgXCJPZ3JhdmVcIixcbiAgMHgwMGQyLFxuICBcIk9ncmF2ZXNtYWxsXCIsXG4gIDB4ZjdmMixcbiAgXCJPaGFybWVuaWFuXCIsXG4gIDB4MDU1NSxcbiAgXCJPaG1cIixcbiAgMHgyMTI2LFxuICBcIk9ob29rYWJvdmVcIixcbiAgMHgxZWNlLFxuICBcIk9ob3JuXCIsXG4gIDB4MDFhMCxcbiAgXCJPaG9ybmFjdXRlXCIsXG4gIDB4MWVkYSxcbiAgXCJPaG9ybmRvdGJlbG93XCIsXG4gIDB4MWVlMixcbiAgXCJPaG9ybmdyYXZlXCIsXG4gIDB4MWVkYyxcbiAgXCJPaG9ybmhvb2thYm92ZVwiLFxuICAweDFlZGUsXG4gIFwiT2hvcm50aWxkZVwiLFxuICAweDFlZTAsXG4gIFwiT2h1bmdhcnVtbGF1dFwiLFxuICAweDAxNTAsXG4gIFwiT2lcIixcbiAgMHgwMWEyLFxuICBcIk9pbnZlcnRlZGJyZXZlXCIsXG4gIDB4MDIwZSxcbiAgXCJPbWFjcm9uXCIsXG4gIDB4MDE0YyxcbiAgXCJPbWFjcm9uYWN1dGVcIixcbiAgMHgxZTUyLFxuICBcIk9tYWNyb25ncmF2ZVwiLFxuICAweDFlNTAsXG4gIFwiT21lZ2FcIixcbiAgMHgyMTI2LFxuICBcIk9tZWdhY3lyaWxsaWNcIixcbiAgMHgwNDYwLFxuICBcIk9tZWdhZ3JlZWtcIixcbiAgMHgwM2E5LFxuICBcIk9tZWdhcm91bmRjeXJpbGxpY1wiLFxuICAweDA0N2EsXG4gIFwiT21lZ2F0aXRsb2N5cmlsbGljXCIsXG4gIDB4MDQ3YyxcbiAgXCJPbWVnYXRvbm9zXCIsXG4gIDB4MDM4ZixcbiAgXCJPbWljcm9uXCIsXG4gIDB4MDM5ZixcbiAgXCJPbWljcm9udG9ub3NcIixcbiAgMHgwMzhjLFxuICBcIk9tb25vc3BhY2VcIixcbiAgMHhmZjJmLFxuICBcIk9uZXJvbWFuXCIsXG4gIDB4MjE2MCxcbiAgXCJPb2dvbmVrXCIsXG4gIDB4MDFlYSxcbiAgXCJPb2dvbmVrbWFjcm9uXCIsXG4gIDB4MDFlYyxcbiAgXCJPb3BlblwiLFxuICAweDAxODYsXG4gIFwiT3NsYXNoXCIsXG4gIDB4MDBkOCxcbiAgXCJPc2xhc2hhY3V0ZVwiLFxuICAweDAxZmUsXG4gIFwiT3NsYXNoc21hbGxcIixcbiAgMHhmN2Y4LFxuICBcIk9zbWFsbFwiLFxuICAweGY3NmYsXG4gIFwiT3N0cm9rZWFjdXRlXCIsXG4gIDB4MDFmZSxcbiAgXCJPdGN5cmlsbGljXCIsXG4gIDB4MDQ3ZSxcbiAgXCJPdGlsZGVcIixcbiAgMHgwMGQ1LFxuICBcIk90aWxkZWFjdXRlXCIsXG4gIDB4MWU0YyxcbiAgXCJPdGlsZGVkaWVyZXNpc1wiLFxuICAweDFlNGUsXG4gIFwiT3RpbGRlc21hbGxcIixcbiAgMHhmN2Y1LFxuICBcIlBcIixcbiAgMHgwMDUwLFxuICBcIlBhY3V0ZVwiLFxuICAweDFlNTQsXG4gIFwiUGNpcmNsZVwiLFxuICAweDI0YzUsXG4gIFwiUGRvdGFjY2VudFwiLFxuICAweDFlNTYsXG4gIFwiUGVjeXJpbGxpY1wiLFxuICAweDA0MWYsXG4gIFwiUGVoYXJtZW5pYW5cIixcbiAgMHgwNTRhLFxuICBcIlBlbWlkZGxlaG9va2N5cmlsbGljXCIsXG4gIDB4MDRhNixcbiAgXCJQaGlcIixcbiAgMHgwM2E2LFxuICBcIlBob29rXCIsXG4gIDB4MDFhNCxcbiAgXCJQaVwiLFxuICAweDAzYTAsXG4gIFwiUGl3cmFybWVuaWFuXCIsXG4gIDB4MDU1MyxcbiAgXCJQbW9ub3NwYWNlXCIsXG4gIDB4ZmYzMCxcbiAgXCJQc2lcIixcbiAgMHgwM2E4LFxuICBcIlBzaWN5cmlsbGljXCIsXG4gIDB4MDQ3MCxcbiAgXCJQc21hbGxcIixcbiAgMHhmNzcwLFxuICBcIlFcIixcbiAgMHgwMDUxLFxuICBcIlFjaXJjbGVcIixcbiAgMHgyNGM2LFxuICBcIlFtb25vc3BhY2VcIixcbiAgMHhmZjMxLFxuICBcIlFzbWFsbFwiLFxuICAweGY3NzEsXG4gIFwiUlwiLFxuICAweDAwNTIsXG4gIFwiUmFhcm1lbmlhblwiLFxuICAweDA1NGMsXG4gIFwiUmFjdXRlXCIsXG4gIDB4MDE1NCxcbiAgXCJSY2Fyb25cIixcbiAgMHgwMTU4LFxuICBcIlJjZWRpbGxhXCIsXG4gIDB4MDE1NixcbiAgXCJSY2lyY2xlXCIsXG4gIDB4MjRjNyxcbiAgXCJSY29tbWFhY2NlbnRcIixcbiAgMHgwMTU2LFxuICBcIlJkYmxncmF2ZVwiLFxuICAweDAyMTAsXG4gIFwiUmRvdGFjY2VudFwiLFxuICAweDFlNTgsXG4gIFwiUmRvdGJlbG93XCIsXG4gIDB4MWU1YSxcbiAgXCJSZG90YmVsb3dtYWNyb25cIixcbiAgMHgxZTVjLFxuICBcIlJlaGFybWVuaWFuXCIsXG4gIDB4MDU1MCxcbiAgXCJSZnJha3R1clwiLFxuICAweDIxMWMsXG4gIFwiUmhvXCIsXG4gIDB4MDNhMSxcbiAgXCJSaW5nc21hbGxcIixcbiAgMHhmNmZjLFxuICBcIlJpbnZlcnRlZGJyZXZlXCIsXG4gIDB4MDIxMixcbiAgXCJSbGluZWJlbG93XCIsXG4gIDB4MWU1ZSxcbiAgXCJSbW9ub3NwYWNlXCIsXG4gIDB4ZmYzMixcbiAgXCJSc21hbGxcIixcbiAgMHhmNzcyLFxuICBcIlJzbWFsbGludmVydGVkXCIsXG4gIDB4MDI4MSxcbiAgXCJSc21hbGxpbnZlcnRlZHN1cGVyaW9yXCIsXG4gIDB4MDJiNixcbiAgXCJTXCIsXG4gIDB4MDA1MyxcbiAgXCJTRjAxMDAwMFwiLFxuICAweDI1MGMsXG4gIFwiU0YwMjAwMDBcIixcbiAgMHgyNTE0LFxuICBcIlNGMDMwMDAwXCIsXG4gIDB4MjUxMCxcbiAgXCJTRjA0MDAwMFwiLFxuICAweDI1MTgsXG4gIFwiU0YwNTAwMDBcIixcbiAgMHgyNTNjLFxuICBcIlNGMDYwMDAwXCIsXG4gIDB4MjUyYyxcbiAgXCJTRjA3MDAwMFwiLFxuICAweDI1MzQsXG4gIFwiU0YwODAwMDBcIixcbiAgMHgyNTFjLFxuICBcIlNGMDkwMDAwXCIsXG4gIDB4MjUyNCxcbiAgXCJTRjEwMDAwMFwiLFxuICAweDI1MDAsXG4gIFwiU0YxMTAwMDBcIixcbiAgMHgyNTAyLFxuICBcIlNGMTkwMDAwXCIsXG4gIDB4MjU2MSxcbiAgXCJTRjIwMDAwMFwiLFxuICAweDI1NjIsXG4gIFwiU0YyMTAwMDBcIixcbiAgMHgyNTU2LFxuICBcIlNGMjIwMDAwXCIsXG4gIDB4MjU1NSxcbiAgXCJTRjIzMDAwMFwiLFxuICAweDI1NjMsXG4gIFwiU0YyNDAwMDBcIixcbiAgMHgyNTUxLFxuICBcIlNGMjUwMDAwXCIsXG4gIDB4MjU1NyxcbiAgXCJTRjI2MDAwMFwiLFxuICAweDI1NWQsXG4gIFwiU0YyNzAwMDBcIixcbiAgMHgyNTVjLFxuICBcIlNGMjgwMDAwXCIsXG4gIDB4MjU1YixcbiAgXCJTRjM2MDAwMFwiLFxuICAweDI1NWUsXG4gIFwiU0YzNzAwMDBcIixcbiAgMHgyNTVmLFxuICBcIlNGMzgwMDAwXCIsXG4gIDB4MjU1YSxcbiAgXCJTRjM5MDAwMFwiLFxuICAweDI1NTQsXG4gIFwiU0Y0MDAwMDBcIixcbiAgMHgyNTY5LFxuICBcIlNGNDEwMDAwXCIsXG4gIDB4MjU2NixcbiAgXCJTRjQyMDAwMFwiLFxuICAweDI1NjAsXG4gIFwiU0Y0MzAwMDBcIixcbiAgMHgyNTUwLFxuICBcIlNGNDQwMDAwXCIsXG4gIDB4MjU2YyxcbiAgXCJTRjQ1MDAwMFwiLFxuICAweDI1NjcsXG4gIFwiU0Y0NjAwMDBcIixcbiAgMHgyNTY4LFxuICBcIlNGNDcwMDAwXCIsXG4gIDB4MjU2NCxcbiAgXCJTRjQ4MDAwMFwiLFxuICAweDI1NjUsXG4gIFwiU0Y0OTAwMDBcIixcbiAgMHgyNTU5LFxuICBcIlNGNTAwMDAwXCIsXG4gIDB4MjU1OCxcbiAgXCJTRjUxMDAwMFwiLFxuICAweDI1NTIsXG4gIFwiU0Y1MjAwMDBcIixcbiAgMHgyNTUzLFxuICBcIlNGNTMwMDAwXCIsXG4gIDB4MjU2YixcbiAgXCJTRjU0MDAwMFwiLFxuICAweDI1NmEsXG4gIFwiU2FjdXRlXCIsXG4gIDB4MDE1YSxcbiAgXCJTYWN1dGVkb3RhY2NlbnRcIixcbiAgMHgxZTY0LFxuICBcIlNhbXBpZ3JlZWtcIixcbiAgMHgwM2UwLFxuICBcIlNjYXJvblwiLFxuICAweDAxNjAsXG4gIFwiU2Nhcm9uZG90YWNjZW50XCIsXG4gIDB4MWU2NixcbiAgXCJTY2Fyb25zbWFsbFwiLFxuICAweGY2ZmQsXG4gIFwiU2NlZGlsbGFcIixcbiAgMHgwMTVlLFxuICBcIlNjaHdhXCIsXG4gIDB4MDE4ZixcbiAgXCJTY2h3YWN5cmlsbGljXCIsXG4gIDB4MDRkOCxcbiAgXCJTY2h3YWRpZXJlc2lzY3lyaWxsaWNcIixcbiAgMHgwNGRhLFxuICBcIlNjaXJjbGVcIixcbiAgMHgyNGM4LFxuICBcIlNjaXJjdW1mbGV4XCIsXG4gIDB4MDE1YyxcbiAgXCJTY29tbWFhY2NlbnRcIixcbiAgMHgwMjE4LFxuICBcIlNkb3RhY2NlbnRcIixcbiAgMHgxZTYwLFxuICBcIlNkb3RiZWxvd1wiLFxuICAweDFlNjIsXG4gIFwiU2RvdGJlbG93ZG90YWNjZW50XCIsXG4gIDB4MWU2OCxcbiAgXCJTZWhhcm1lbmlhblwiLFxuICAweDA1NGQsXG4gIFwiU2V2ZW5yb21hblwiLFxuICAweDIxNjYsXG4gIFwiU2hhYXJtZW5pYW5cIixcbiAgMHgwNTQ3LFxuICBcIlNoYWN5cmlsbGljXCIsXG4gIDB4MDQyOCxcbiAgXCJTaGNoYWN5cmlsbGljXCIsXG4gIDB4MDQyOSxcbiAgXCJTaGVpY29wdGljXCIsXG4gIDB4MDNlMixcbiAgXCJTaGhhY3lyaWxsaWNcIixcbiAgMHgwNGJhLFxuICBcIlNoaW1hY29wdGljXCIsXG4gIDB4MDNlYyxcbiAgXCJTaWdtYVwiLFxuICAweDAzYTMsXG4gIFwiU2l4cm9tYW5cIixcbiAgMHgyMTY1LFxuICBcIlNtb25vc3BhY2VcIixcbiAgMHhmZjMzLFxuICBcIlNvZnRzaWduY3lyaWxsaWNcIixcbiAgMHgwNDJjLFxuICBcIlNzbWFsbFwiLFxuICAweGY3NzMsXG4gIFwiU3RpZ21hZ3JlZWtcIixcbiAgMHgwM2RhLFxuICBcIlRcIixcbiAgMHgwMDU0LFxuICBcIlRhdVwiLFxuICAweDAzYTQsXG4gIFwiVGJhclwiLFxuICAweDAxNjYsXG4gIFwiVGNhcm9uXCIsXG4gIDB4MDE2NCxcbiAgXCJUY2VkaWxsYVwiLFxuICAweDAxNjIsXG4gIFwiVGNpcmNsZVwiLFxuICAweDI0YzksXG4gIFwiVGNpcmN1bWZsZXhiZWxvd1wiLFxuICAweDFlNzAsXG4gIFwiVGNvbW1hYWNjZW50XCIsXG4gIDB4MDE2MixcbiAgXCJUZG90YWNjZW50XCIsXG4gIDB4MWU2YSxcbiAgXCJUZG90YmVsb3dcIixcbiAgMHgxZTZjLFxuICBcIlRlY3lyaWxsaWNcIixcbiAgMHgwNDIyLFxuICBcIlRlZGVzY2VuZGVyY3lyaWxsaWNcIixcbiAgMHgwNGFjLFxuICBcIlRlbnJvbWFuXCIsXG4gIDB4MjE2OSxcbiAgXCJUZXRzZWN5cmlsbGljXCIsXG4gIDB4MDRiNCxcbiAgXCJUaGV0YVwiLFxuICAweDAzOTgsXG4gIFwiVGhvb2tcIixcbiAgMHgwMWFjLFxuICBcIlRob3JuXCIsXG4gIDB4MDBkZSxcbiAgXCJUaG9ybnNtYWxsXCIsXG4gIDB4ZjdmZSxcbiAgXCJUaHJlZXJvbWFuXCIsXG4gIDB4MjE2MixcbiAgXCJUaWxkZXNtYWxsXCIsXG4gIDB4ZjZmZSxcbiAgXCJUaXduYXJtZW5pYW5cIixcbiAgMHgwNTRmLFxuICBcIlRsaW5lYmVsb3dcIixcbiAgMHgxZTZlLFxuICBcIlRtb25vc3BhY2VcIixcbiAgMHhmZjM0LFxuICBcIlRvYXJtZW5pYW5cIixcbiAgMHgwNTM5LFxuICBcIlRvbmVmaXZlXCIsXG4gIDB4MDFiYyxcbiAgXCJUb25lc2l4XCIsXG4gIDB4MDE4NCxcbiAgXCJUb25ldHdvXCIsXG4gIDB4MDFhNyxcbiAgXCJUcmV0cm9mbGV4aG9va1wiLFxuICAweDAxYWUsXG4gIFwiVHNlY3lyaWxsaWNcIixcbiAgMHgwNDI2LFxuICBcIlRzaGVjeXJpbGxpY1wiLFxuICAweDA0MGIsXG4gIFwiVHNtYWxsXCIsXG4gIDB4Zjc3NCxcbiAgXCJUd2VsdmVyb21hblwiLFxuICAweDIxNmIsXG4gIFwiVHdvcm9tYW5cIixcbiAgMHgyMTYxLFxuICBcIlVcIixcbiAgMHgwMDU1LFxuICBcIlVhY3V0ZVwiLFxuICAweDAwZGEsXG4gIFwiVWFjdXRlc21hbGxcIixcbiAgMHhmN2ZhLFxuICBcIlVicmV2ZVwiLFxuICAweDAxNmMsXG4gIFwiVWNhcm9uXCIsXG4gIDB4MDFkMyxcbiAgXCJVY2lyY2xlXCIsXG4gIDB4MjRjYSxcbiAgXCJVY2lyY3VtZmxleFwiLFxuICAweDAwZGIsXG4gIFwiVWNpcmN1bWZsZXhiZWxvd1wiLFxuICAweDFlNzYsXG4gIFwiVWNpcmN1bWZsZXhzbWFsbFwiLFxuICAweGY3ZmIsXG4gIFwiVWN5cmlsbGljXCIsXG4gIDB4MDQyMyxcbiAgXCJVZGJsYWN1dGVcIixcbiAgMHgwMTcwLFxuICBcIlVkYmxncmF2ZVwiLFxuICAweDAyMTQsXG4gIFwiVWRpZXJlc2lzXCIsXG4gIDB4MDBkYyxcbiAgXCJVZGllcmVzaXNhY3V0ZVwiLFxuICAweDAxZDcsXG4gIFwiVWRpZXJlc2lzYmVsb3dcIixcbiAgMHgxZTcyLFxuICBcIlVkaWVyZXNpc2Nhcm9uXCIsXG4gIDB4MDFkOSxcbiAgXCJVZGllcmVzaXNjeXJpbGxpY1wiLFxuICAweDA0ZjAsXG4gIFwiVWRpZXJlc2lzZ3JhdmVcIixcbiAgMHgwMWRiLFxuICBcIlVkaWVyZXNpc21hY3JvblwiLFxuICAweDAxZDUsXG4gIFwiVWRpZXJlc2lzc21hbGxcIixcbiAgMHhmN2ZjLFxuICBcIlVkb3RiZWxvd1wiLFxuICAweDFlZTQsXG4gIFwiVWdyYXZlXCIsXG4gIDB4MDBkOSxcbiAgXCJVZ3JhdmVzbWFsbFwiLFxuICAweGY3ZjksXG4gIFwiVWhvb2thYm92ZVwiLFxuICAweDFlZTYsXG4gIFwiVWhvcm5cIixcbiAgMHgwMWFmLFxuICBcIlVob3JuYWN1dGVcIixcbiAgMHgxZWU4LFxuICBcIlVob3JuZG90YmVsb3dcIixcbiAgMHgxZWYwLFxuICBcIlVob3JuZ3JhdmVcIixcbiAgMHgxZWVhLFxuICBcIlVob3JuaG9va2Fib3ZlXCIsXG4gIDB4MWVlYyxcbiAgXCJVaG9ybnRpbGRlXCIsXG4gIDB4MWVlZSxcbiAgXCJVaHVuZ2FydW1sYXV0XCIsXG4gIDB4MDE3MCxcbiAgXCJVaHVuZ2FydW1sYXV0Y3lyaWxsaWNcIixcbiAgMHgwNGYyLFxuICBcIlVpbnZlcnRlZGJyZXZlXCIsXG4gIDB4MDIxNixcbiAgXCJVa2N5cmlsbGljXCIsXG4gIDB4MDQ3OCxcbiAgXCJVbWFjcm9uXCIsXG4gIDB4MDE2YSxcbiAgXCJVbWFjcm9uY3lyaWxsaWNcIixcbiAgMHgwNGVlLFxuICBcIlVtYWNyb25kaWVyZXNpc1wiLFxuICAweDFlN2EsXG4gIFwiVW1vbm9zcGFjZVwiLFxuICAweGZmMzUsXG4gIFwiVW9nb25la1wiLFxuICAweDAxNzIsXG4gIFwiVXBzaWxvblwiLFxuICAweDAzYTUsXG4gIFwiVXBzaWxvbjFcIixcbiAgMHgwM2QyLFxuICBcIlVwc2lsb25hY3V0ZWhvb2tzeW1ib2xncmVla1wiLFxuICAweDAzZDMsXG4gIFwiVXBzaWxvbmFmcmljYW5cIixcbiAgMHgwMWIxLFxuICBcIlVwc2lsb25kaWVyZXNpc1wiLFxuICAweDAzYWIsXG4gIFwiVXBzaWxvbmRpZXJlc2lzaG9va3N5bWJvbGdyZWVrXCIsXG4gIDB4MDNkNCxcbiAgXCJVcHNpbG9uaG9va3N5bWJvbFwiLFxuICAweDAzZDIsXG4gIFwiVXBzaWxvbnRvbm9zXCIsXG4gIDB4MDM4ZSxcbiAgXCJVcmluZ1wiLFxuICAweDAxNmUsXG4gIFwiVXNob3J0Y3lyaWxsaWNcIixcbiAgMHgwNDBlLFxuICBcIlVzbWFsbFwiLFxuICAweGY3NzUsXG4gIFwiVXN0cmFpZ2h0Y3lyaWxsaWNcIixcbiAgMHgwNGFlLFxuICBcIlVzdHJhaWdodHN0cm9rZWN5cmlsbGljXCIsXG4gIDB4MDRiMCxcbiAgXCJVdGlsZGVcIixcbiAgMHgwMTY4LFxuICBcIlV0aWxkZWFjdXRlXCIsXG4gIDB4MWU3OCxcbiAgXCJVdGlsZGViZWxvd1wiLFxuICAweDFlNzQsXG4gIFwiVlwiLFxuICAweDAwNTYsXG4gIFwiVmNpcmNsZVwiLFxuICAweDI0Y2IsXG4gIFwiVmRvdGJlbG93XCIsXG4gIDB4MWU3ZSxcbiAgXCJWZWN5cmlsbGljXCIsXG4gIDB4MDQxMixcbiAgXCJWZXdhcm1lbmlhblwiLFxuICAweDA1NGUsXG4gIFwiVmhvb2tcIixcbiAgMHgwMWIyLFxuICBcIlZtb25vc3BhY2VcIixcbiAgMHhmZjM2LFxuICBcIlZvYXJtZW5pYW5cIixcbiAgMHgwNTQ4LFxuICBcIlZzbWFsbFwiLFxuICAweGY3NzYsXG4gIFwiVnRpbGRlXCIsXG4gIDB4MWU3YyxcbiAgXCJXXCIsXG4gIDB4MDA1NyxcbiAgXCJXYWN1dGVcIixcbiAgMHgxZTgyLFxuICBcIldjaXJjbGVcIixcbiAgMHgyNGNjLFxuICBcIldjaXJjdW1mbGV4XCIsXG4gIDB4MDE3NCxcbiAgXCJXZGllcmVzaXNcIixcbiAgMHgxZTg0LFxuICBcIldkb3RhY2NlbnRcIixcbiAgMHgxZTg2LFxuICBcIldkb3RiZWxvd1wiLFxuICAweDFlODgsXG4gIFwiV2dyYXZlXCIsXG4gIDB4MWU4MCxcbiAgXCJXbW9ub3NwYWNlXCIsXG4gIDB4ZmYzNyxcbiAgXCJXc21hbGxcIixcbiAgMHhmNzc3LFxuICBcIlhcIixcbiAgMHgwMDU4LFxuICBcIlhjaXJjbGVcIixcbiAgMHgyNGNkLFxuICBcIlhkaWVyZXNpc1wiLFxuICAweDFlOGMsXG4gIFwiWGRvdGFjY2VudFwiLFxuICAweDFlOGEsXG4gIFwiWGVoYXJtZW5pYW5cIixcbiAgMHgwNTNkLFxuICBcIlhpXCIsXG4gIDB4MDM5ZSxcbiAgXCJYbW9ub3NwYWNlXCIsXG4gIDB4ZmYzOCxcbiAgXCJYc21hbGxcIixcbiAgMHhmNzc4LFxuICBcIllcIixcbiAgMHgwMDU5LFxuICBcIllhY3V0ZVwiLFxuICAweDAwZGQsXG4gIFwiWWFjdXRlc21hbGxcIixcbiAgMHhmN2ZkLFxuICBcIllhdGN5cmlsbGljXCIsXG4gIDB4MDQ2MixcbiAgXCJZY2lyY2xlXCIsXG4gIDB4MjRjZSxcbiAgXCJZY2lyY3VtZmxleFwiLFxuICAweDAxNzYsXG4gIFwiWWRpZXJlc2lzXCIsXG4gIDB4MDE3OCxcbiAgXCJZZGllcmVzaXNzbWFsbFwiLFxuICAweGY3ZmYsXG4gIFwiWWRvdGFjY2VudFwiLFxuICAweDFlOGUsXG4gIFwiWWRvdGJlbG93XCIsXG4gIDB4MWVmNCxcbiAgXCJZZXJpY3lyaWxsaWNcIixcbiAgMHgwNDJiLFxuICBcIlllcnVkaWVyZXNpc2N5cmlsbGljXCIsXG4gIDB4MDRmOCxcbiAgXCJZZ3JhdmVcIixcbiAgMHgxZWYyLFxuICBcIllob29rXCIsXG4gIDB4MDFiMyxcbiAgXCJZaG9va2Fib3ZlXCIsXG4gIDB4MWVmNixcbiAgXCJZaWFybWVuaWFuXCIsXG4gIDB4MDU0NSxcbiAgXCJZaWN5cmlsbGljXCIsXG4gIDB4MDQwNyxcbiAgXCJZaXduYXJtZW5pYW5cIixcbiAgMHgwNTUyLFxuICBcIlltb25vc3BhY2VcIixcbiAgMHhmZjM5LFxuICBcIllzbWFsbFwiLFxuICAweGY3NzksXG4gIFwiWXRpbGRlXCIsXG4gIDB4MWVmOCxcbiAgXCJZdXNiaWdjeXJpbGxpY1wiLFxuICAweDA0NmEsXG4gIFwiWXVzYmlnaW90aWZpZWRjeXJpbGxpY1wiLFxuICAweDA0NmMsXG4gIFwiWXVzbGl0dGxlY3lyaWxsaWNcIixcbiAgMHgwNDY2LFxuICBcIll1c2xpdHRsZWlvdGlmaWVkY3lyaWxsaWNcIixcbiAgMHgwNDY4LFxuICBcIlpcIixcbiAgMHgwMDVhLFxuICBcIlphYXJtZW5pYW5cIixcbiAgMHgwNTM2LFxuICBcIlphY3V0ZVwiLFxuICAweDAxNzksXG4gIFwiWmNhcm9uXCIsXG4gIDB4MDE3ZCxcbiAgXCJaY2Fyb25zbWFsbFwiLFxuICAweGY2ZmYsXG4gIFwiWmNpcmNsZVwiLFxuICAweDI0Y2YsXG4gIFwiWmNpcmN1bWZsZXhcIixcbiAgMHgxZTkwLFxuICBcIlpkb3RcIixcbiAgMHgwMTdiLFxuICBcIlpkb3RhY2NlbnRcIixcbiAgMHgwMTdiLFxuICBcIlpkb3RiZWxvd1wiLFxuICAweDFlOTIsXG4gIFwiWmVjeXJpbGxpY1wiLFxuICAweDA0MTcsXG4gIFwiWmVkZXNjZW5kZXJjeXJpbGxpY1wiLFxuICAweDA0OTgsXG4gIFwiWmVkaWVyZXNpc2N5cmlsbGljXCIsXG4gIDB4MDRkZSxcbiAgXCJaZXRhXCIsXG4gIDB4MDM5NixcbiAgXCJaaGVhcm1lbmlhblwiLFxuICAweDA1M2EsXG4gIFwiWmhlYnJldmVjeXJpbGxpY1wiLFxuICAweDA0YzEsXG4gIFwiWmhlY3lyaWxsaWNcIixcbiAgMHgwNDE2LFxuICBcIlpoZWRlc2NlbmRlcmN5cmlsbGljXCIsXG4gIDB4MDQ5NixcbiAgXCJaaGVkaWVyZXNpc2N5cmlsbGljXCIsXG4gIDB4MDRkYyxcbiAgXCJabGluZWJlbG93XCIsXG4gIDB4MWU5NCxcbiAgXCJabW9ub3NwYWNlXCIsXG4gIDB4ZmYzYSxcbiAgXCJac21hbGxcIixcbiAgMHhmNzdhLFxuICBcIlpzdHJva2VcIixcbiAgMHgwMWI1LFxuICBcImFcIixcbiAgMHgwMDYxLFxuICBcImFhYmVuZ2FsaVwiLFxuICAweDA5ODYsXG4gIFwiYWFjdXRlXCIsXG4gIDB4MDBlMSxcbiAgXCJhYWRldmFcIixcbiAgMHgwOTA2LFxuICBcImFhZ3VqYXJhdGlcIixcbiAgMHgwYTg2LFxuICBcImFhZ3VybXVraGlcIixcbiAgMHgwYTA2LFxuICBcImFhbWF0cmFndXJtdWtoaVwiLFxuICAweDBhM2UsXG4gIFwiYWFydXNxdWFyZVwiLFxuICAweDMzMDMsXG4gIFwiYWF2b3dlbHNpZ25iZW5nYWxpXCIsXG4gIDB4MDliZSxcbiAgXCJhYXZvd2Vsc2lnbmRldmFcIixcbiAgMHgwOTNlLFxuICBcImFhdm93ZWxzaWduZ3VqYXJhdGlcIixcbiAgMHgwYWJlLFxuICBcImFiYnJldmlhdGlvbm1hcmthcm1lbmlhblwiLFxuICAweDA1NWYsXG4gIFwiYWJicmV2aWF0aW9uc2lnbmRldmFcIixcbiAgMHgwOTcwLFxuICBcImFiZW5nYWxpXCIsXG4gIDB4MDk4NSxcbiAgXCJhYm9wb21vZm9cIixcbiAgMHgzMTFhLFxuICBcImFicmV2ZVwiLFxuICAweDAxMDMsXG4gIFwiYWJyZXZlYWN1dGVcIixcbiAgMHgxZWFmLFxuICBcImFicmV2ZWN5cmlsbGljXCIsXG4gIDB4MDRkMSxcbiAgXCJhYnJldmVkb3RiZWxvd1wiLFxuICAweDFlYjcsXG4gIFwiYWJyZXZlZ3JhdmVcIixcbiAgMHgxZWIxLFxuICBcImFicmV2ZWhvb2thYm92ZVwiLFxuICAweDFlYjMsXG4gIFwiYWJyZXZldGlsZGVcIixcbiAgMHgxZWI1LFxuICBcImFjYXJvblwiLFxuICAweDAxY2UsXG4gIFwiYWNpcmNsZVwiLFxuICAweDI0ZDAsXG4gIFwiYWNpcmN1bWZsZXhcIixcbiAgMHgwMGUyLFxuICBcImFjaXJjdW1mbGV4YWN1dGVcIixcbiAgMHgxZWE1LFxuICBcImFjaXJjdW1mbGV4ZG90YmVsb3dcIixcbiAgMHgxZWFkLFxuICBcImFjaXJjdW1mbGV4Z3JhdmVcIixcbiAgMHgxZWE3LFxuICBcImFjaXJjdW1mbGV4aG9va2Fib3ZlXCIsXG4gIDB4MWVhOSxcbiAgXCJhY2lyY3VtZmxleHRpbGRlXCIsXG4gIDB4MWVhYixcbiAgXCJhY3V0ZVwiLFxuICAweDAwYjQsXG4gIFwiYWN1dGViZWxvd2NtYlwiLFxuICAweDAzMTcsXG4gIFwiYWN1dGVjbWJcIixcbiAgMHgwMzAxLFxuICBcImFjdXRlY29tYlwiLFxuICAweDAzMDEsXG4gIFwiYWN1dGVkZXZhXCIsXG4gIDB4MDk1NCxcbiAgXCJhY3V0ZWxvd21vZFwiLFxuICAweDAyY2YsXG4gIFwiYWN1dGV0b25lY21iXCIsXG4gIDB4MDM0MSxcbiAgXCJhY3lyaWxsaWNcIixcbiAgMHgwNDMwLFxuICBcImFkYmxncmF2ZVwiLFxuICAweDAyMDEsXG4gIFwiYWRkYWtndXJtdWtoaVwiLFxuICAweDBhNzEsXG4gIFwiYWRldmFcIixcbiAgMHgwOTA1LFxuICBcImFkaWVyZXNpc1wiLFxuICAweDAwZTQsXG4gIFwiYWRpZXJlc2lzY3lyaWxsaWNcIixcbiAgMHgwNGQzLFxuICBcImFkaWVyZXNpc21hY3JvblwiLFxuICAweDAxZGYsXG4gIFwiYWRvdGJlbG93XCIsXG4gIDB4MWVhMSxcbiAgXCJhZG90bWFjcm9uXCIsXG4gIDB4MDFlMSxcbiAgXCJhZVwiLFxuICAweDAwZTYsXG4gIFwiYWVhY3V0ZVwiLFxuICAweDAxZmQsXG4gIFwiYWVrb3JlYW5cIixcbiAgMHgzMTUwLFxuICBcImFlbWFjcm9uXCIsXG4gIDB4MDFlMyxcbiAgXCJhZmlpMDAyMDhcIixcbiAgMHgyMDE1LFxuICBcImFmaWkwODk0MVwiLFxuICAweDIwYTQsXG4gIFwiYWZpaTEwMDE3XCIsXG4gIDB4MDQxMCxcbiAgXCJhZmlpMTAwMThcIixcbiAgMHgwNDExLFxuICBcImFmaWkxMDAxOVwiLFxuICAweDA0MTIsXG4gIFwiYWZpaTEwMDIwXCIsXG4gIDB4MDQxMyxcbiAgXCJhZmlpMTAwMjFcIixcbiAgMHgwNDE0LFxuICBcImFmaWkxMDAyMlwiLFxuICAweDA0MTUsXG4gIFwiYWZpaTEwMDIzXCIsXG4gIDB4MDQwMSxcbiAgXCJhZmlpMTAwMjRcIixcbiAgMHgwNDE2LFxuICBcImFmaWkxMDAyNVwiLFxuICAweDA0MTcsXG4gIFwiYWZpaTEwMDI2XCIsXG4gIDB4MDQxOCxcbiAgXCJhZmlpMTAwMjdcIixcbiAgMHgwNDE5LFxuICBcImFmaWkxMDAyOFwiLFxuICAweDA0MWEsXG4gIFwiYWZpaTEwMDI5XCIsXG4gIDB4MDQxYixcbiAgXCJhZmlpMTAwMzBcIixcbiAgMHgwNDFjLFxuICBcImFmaWkxMDAzMVwiLFxuICAweDA0MWQsXG4gIFwiYWZpaTEwMDMyXCIsXG4gIDB4MDQxZSxcbiAgXCJhZmlpMTAwMzNcIixcbiAgMHgwNDFmLFxuICBcImFmaWkxMDAzNFwiLFxuICAweDA0MjAsXG4gIFwiYWZpaTEwMDM1XCIsXG4gIDB4MDQyMSxcbiAgXCJhZmlpMTAwMzZcIixcbiAgMHgwNDIyLFxuICBcImFmaWkxMDAzN1wiLFxuICAweDA0MjMsXG4gIFwiYWZpaTEwMDM4XCIsXG4gIDB4MDQyNCxcbiAgXCJhZmlpMTAwMzlcIixcbiAgMHgwNDI1LFxuICBcImFmaWkxMDA0MFwiLFxuICAweDA0MjYsXG4gIFwiYWZpaTEwMDQxXCIsXG4gIDB4MDQyNyxcbiAgXCJhZmlpMTAwNDJcIixcbiAgMHgwNDI4LFxuICBcImFmaWkxMDA0M1wiLFxuICAweDA0MjksXG4gIFwiYWZpaTEwMDQ0XCIsXG4gIDB4MDQyYSxcbiAgXCJhZmlpMTAwNDVcIixcbiAgMHgwNDJiLFxuICBcImFmaWkxMDA0NlwiLFxuICAweDA0MmMsXG4gIFwiYWZpaTEwMDQ3XCIsXG4gIDB4MDQyZCxcbiAgXCJhZmlpMTAwNDhcIixcbiAgMHgwNDJlLFxuICBcImFmaWkxMDA0OVwiLFxuICAweDA0MmYsXG4gIFwiYWZpaTEwMDUwXCIsXG4gIDB4MDQ5MCxcbiAgXCJhZmlpMTAwNTFcIixcbiAgMHgwNDAyLFxuICBcImFmaWkxMDA1MlwiLFxuICAweDA0MDMsXG4gIFwiYWZpaTEwMDUzXCIsXG4gIDB4MDQwNCxcbiAgXCJhZmlpMTAwNTRcIixcbiAgMHgwNDA1LFxuICBcImFmaWkxMDA1NVwiLFxuICAweDA0MDYsXG4gIFwiYWZpaTEwMDU2XCIsXG4gIDB4MDQwNyxcbiAgXCJhZmlpMTAwNTdcIixcbiAgMHgwNDA4LFxuICBcImFmaWkxMDA1OFwiLFxuICAweDA0MDksXG4gIFwiYWZpaTEwMDU5XCIsXG4gIDB4MDQwYSxcbiAgXCJhZmlpMTAwNjBcIixcbiAgMHgwNDBiLFxuICBcImFmaWkxMDA2MVwiLFxuICAweDA0MGMsXG4gIFwiYWZpaTEwMDYyXCIsXG4gIDB4MDQwZSxcbiAgXCJhZmlpMTAwNjNcIixcbiAgMHhmNmM0LFxuICBcImFmaWkxMDA2NFwiLFxuICAweGY2YzUsXG4gIFwiYWZpaTEwMDY1XCIsXG4gIDB4MDQzMCxcbiAgXCJhZmlpMTAwNjZcIixcbiAgMHgwNDMxLFxuICBcImFmaWkxMDA2N1wiLFxuICAweDA0MzIsXG4gIFwiYWZpaTEwMDY4XCIsXG4gIDB4MDQzMyxcbiAgXCJhZmlpMTAwNjlcIixcbiAgMHgwNDM0LFxuICBcImFmaWkxMDA3MFwiLFxuICAweDA0MzUsXG4gIFwiYWZpaTEwMDcxXCIsXG4gIDB4MDQ1MSxcbiAgXCJhZmlpMTAwNzJcIixcbiAgMHgwNDM2LFxuICBcImFmaWkxMDA3M1wiLFxuICAweDA0MzcsXG4gIFwiYWZpaTEwMDc0XCIsXG4gIDB4MDQzOCxcbiAgXCJhZmlpMTAwNzVcIixcbiAgMHgwNDM5LFxuICBcImFmaWkxMDA3NlwiLFxuICAweDA0M2EsXG4gIFwiYWZpaTEwMDc3XCIsXG4gIDB4MDQzYixcbiAgXCJhZmlpMTAwNzhcIixcbiAgMHgwNDNjLFxuICBcImFmaWkxMDA3OVwiLFxuICAweDA0M2QsXG4gIFwiYWZpaTEwMDgwXCIsXG4gIDB4MDQzZSxcbiAgXCJhZmlpMTAwODFcIixcbiAgMHgwNDNmLFxuICBcImFmaWkxMDA4MlwiLFxuICAweDA0NDAsXG4gIFwiYWZpaTEwMDgzXCIsXG4gIDB4MDQ0MSxcbiAgXCJhZmlpMTAwODRcIixcbiAgMHgwNDQyLFxuICBcImFmaWkxMDA4NVwiLFxuICAweDA0NDMsXG4gIFwiYWZpaTEwMDg2XCIsXG4gIDB4MDQ0NCxcbiAgXCJhZmlpMTAwODdcIixcbiAgMHgwNDQ1LFxuICBcImFmaWkxMDA4OFwiLFxuICAweDA0NDYsXG4gIFwiYWZpaTEwMDg5XCIsXG4gIDB4MDQ0NyxcbiAgXCJhZmlpMTAwOTBcIixcbiAgMHgwNDQ4LFxuICBcImFmaWkxMDA5MVwiLFxuICAweDA0NDksXG4gIFwiYWZpaTEwMDkyXCIsXG4gIDB4MDQ0YSxcbiAgXCJhZmlpMTAwOTNcIixcbiAgMHgwNDRiLFxuICBcImFmaWkxMDA5NFwiLFxuICAweDA0NGMsXG4gIFwiYWZpaTEwMDk1XCIsXG4gIDB4MDQ0ZCxcbiAgXCJhZmlpMTAwOTZcIixcbiAgMHgwNDRlLFxuICBcImFmaWkxMDA5N1wiLFxuICAweDA0NGYsXG4gIFwiYWZpaTEwMDk4XCIsXG4gIDB4MDQ5MSxcbiAgXCJhZmlpMTAwOTlcIixcbiAgMHgwNDUyLFxuICBcImFmaWkxMDEwMFwiLFxuICAweDA0NTMsXG4gIFwiYWZpaTEwMTAxXCIsXG4gIDB4MDQ1NCxcbiAgXCJhZmlpMTAxMDJcIixcbiAgMHgwNDU1LFxuICBcImFmaWkxMDEwM1wiLFxuICAweDA0NTYsXG4gIFwiYWZpaTEwMTA0XCIsXG4gIDB4MDQ1NyxcbiAgXCJhZmlpMTAxMDVcIixcbiAgMHgwNDU4LFxuICBcImFmaWkxMDEwNlwiLFxuICAweDA0NTksXG4gIFwiYWZpaTEwMTA3XCIsXG4gIDB4MDQ1YSxcbiAgXCJhZmlpMTAxMDhcIixcbiAgMHgwNDViLFxuICBcImFmaWkxMDEwOVwiLFxuICAweDA0NWMsXG4gIFwiYWZpaTEwMTEwXCIsXG4gIDB4MDQ1ZSxcbiAgXCJhZmlpMTAxNDVcIixcbiAgMHgwNDBmLFxuICBcImFmaWkxMDE0NlwiLFxuICAweDA0NjIsXG4gIFwiYWZpaTEwMTQ3XCIsXG4gIDB4MDQ3MixcbiAgXCJhZmlpMTAxNDhcIixcbiAgMHgwNDc0LFxuICBcImFmaWkxMDE5MlwiLFxuICAweGY2YzYsXG4gIFwiYWZpaTEwMTkzXCIsXG4gIDB4MDQ1ZixcbiAgXCJhZmlpMTAxOTRcIixcbiAgMHgwNDYzLFxuICBcImFmaWkxMDE5NVwiLFxuICAweDA0NzMsXG4gIFwiYWZpaTEwMTk2XCIsXG4gIDB4MDQ3NSxcbiAgXCJhZmlpMTA4MzFcIixcbiAgMHhmNmM3LFxuICBcImFmaWkxMDgzMlwiLFxuICAweGY2YzgsXG4gIFwiYWZpaTEwODQ2XCIsXG4gIDB4MDRkOSxcbiAgXCJhZmlpMjk5XCIsXG4gIDB4MjAwZSxcbiAgXCJhZmlpMzAwXCIsXG4gIDB4MjAwZixcbiAgXCJhZmlpMzAxXCIsXG4gIDB4MjAwZCxcbiAgXCJhZmlpNTczODFcIixcbiAgMHgwNjZhLFxuICBcImFmaWk1NzM4OFwiLFxuICAweDA2MGMsXG4gIFwiYWZpaTU3MzkyXCIsXG4gIDB4MDY2MCxcbiAgXCJhZmlpNTczOTNcIixcbiAgMHgwNjYxLFxuICBcImFmaWk1NzM5NFwiLFxuICAweDA2NjIsXG4gIFwiYWZpaTU3Mzk1XCIsXG4gIDB4MDY2MyxcbiAgXCJhZmlpNTczOTZcIixcbiAgMHgwNjY0LFxuICBcImFmaWk1NzM5N1wiLFxuICAweDA2NjUsXG4gIFwiYWZpaTU3Mzk4XCIsXG4gIDB4MDY2NixcbiAgXCJhZmlpNTczOTlcIixcbiAgMHgwNjY3LFxuICBcImFmaWk1NzQwMFwiLFxuICAweDA2NjgsXG4gIFwiYWZpaTU3NDAxXCIsXG4gIDB4MDY2OSxcbiAgXCJhZmlpNTc0MDNcIixcbiAgMHgwNjFiLFxuICBcImFmaWk1NzQwN1wiLFxuICAweDA2MWYsXG4gIFwiYWZpaTU3NDA5XCIsXG4gIDB4MDYyMSxcbiAgXCJhZmlpNTc0MTBcIixcbiAgMHgwNjIyLFxuICBcImFmaWk1NzQxMVwiLFxuICAweDA2MjMsXG4gIFwiYWZpaTU3NDEyXCIsXG4gIDB4MDYyNCxcbiAgXCJhZmlpNTc0MTNcIixcbiAgMHgwNjI1LFxuICBcImFmaWk1NzQxNFwiLFxuICAweDA2MjYsXG4gIFwiYWZpaTU3NDE1XCIsXG4gIDB4MDYyNyxcbiAgXCJhZmlpNTc0MTZcIixcbiAgMHgwNjI4LFxuICBcImFmaWk1NzQxN1wiLFxuICAweDA2MjksXG4gIFwiYWZpaTU3NDE4XCIsXG4gIDB4MDYyYSxcbiAgXCJhZmlpNTc0MTlcIixcbiAgMHgwNjJiLFxuICBcImFmaWk1NzQyMFwiLFxuICAweDA2MmMsXG4gIFwiYWZpaTU3NDIxXCIsXG4gIDB4MDYyZCxcbiAgXCJhZmlpNTc0MjJcIixcbiAgMHgwNjJlLFxuICBcImFmaWk1NzQyM1wiLFxuICAweDA2MmYsXG4gIFwiYWZpaTU3NDI0XCIsXG4gIDB4MDYzMCxcbiAgXCJhZmlpNTc0MjVcIixcbiAgMHgwNjMxLFxuICBcImFmaWk1NzQyNlwiLFxuICAweDA2MzIsXG4gIFwiYWZpaTU3NDI3XCIsXG4gIDB4MDYzMyxcbiAgXCJhZmlpNTc0MjhcIixcbiAgMHgwNjM0LFxuICBcImFmaWk1NzQyOVwiLFxuICAweDA2MzUsXG4gIFwiYWZpaTU3NDMwXCIsXG4gIDB4MDYzNixcbiAgXCJhZmlpNTc0MzFcIixcbiAgMHgwNjM3LFxuICBcImFmaWk1NzQzMlwiLFxuICAweDA2MzgsXG4gIFwiYWZpaTU3NDMzXCIsXG4gIDB4MDYzOSxcbiAgXCJhZmlpNTc0MzRcIixcbiAgMHgwNjNhLFxuICBcImFmaWk1NzQ0MFwiLFxuICAweDA2NDAsXG4gIFwiYWZpaTU3NDQxXCIsXG4gIDB4MDY0MSxcbiAgXCJhZmlpNTc0NDJcIixcbiAgMHgwNjQyLFxuICBcImFmaWk1NzQ0M1wiLFxuICAweDA2NDMsXG4gIFwiYWZpaTU3NDQ0XCIsXG4gIDB4MDY0NCxcbiAgXCJhZmlpNTc0NDVcIixcbiAgMHgwNjQ1LFxuICBcImFmaWk1NzQ0NlwiLFxuICAweDA2NDYsXG4gIFwiYWZpaTU3NDQ4XCIsXG4gIDB4MDY0OCxcbiAgXCJhZmlpNTc0NDlcIixcbiAgMHgwNjQ5LFxuICBcImFmaWk1NzQ1MFwiLFxuICAweDA2NGEsXG4gIFwiYWZpaTU3NDUxXCIsXG4gIDB4MDY0YixcbiAgXCJhZmlpNTc0NTJcIixcbiAgMHgwNjRjLFxuICBcImFmaWk1NzQ1M1wiLFxuICAweDA2NGQsXG4gIFwiYWZpaTU3NDU0XCIsXG4gIDB4MDY0ZSxcbiAgXCJhZmlpNTc0NTVcIixcbiAgMHgwNjRmLFxuICBcImFmaWk1NzQ1NlwiLFxuICAweDA2NTAsXG4gIFwiYWZpaTU3NDU3XCIsXG4gIDB4MDY1MSxcbiAgXCJhZmlpNTc0NThcIixcbiAgMHgwNjUyLFxuICBcImFmaWk1NzQ3MFwiLFxuICAweDA2NDcsXG4gIFwiYWZpaTU3NTA1XCIsXG4gIDB4MDZhNCxcbiAgXCJhZmlpNTc1MDZcIixcbiAgMHgwNjdlLFxuICBcImFmaWk1NzUwN1wiLFxuICAweDA2ODYsXG4gIFwiYWZpaTU3NTA4XCIsXG4gIDB4MDY5OCxcbiAgXCJhZmlpNTc1MDlcIixcbiAgMHgwNmFmLFxuICBcImFmaWk1NzUxMVwiLFxuICAweDA2NzksXG4gIFwiYWZpaTU3NTEyXCIsXG4gIDB4MDY4OCxcbiAgXCJhZmlpNTc1MTNcIixcbiAgMHgwNjkxLFxuICBcImFmaWk1NzUxNFwiLFxuICAweDA2YmEsXG4gIFwiYWZpaTU3NTE5XCIsXG4gIDB4MDZkMixcbiAgXCJhZmlpNTc1MzRcIixcbiAgMHgwNmQ1LFxuICBcImFmaWk1NzYzNlwiLFxuICAweDIwYWEsXG4gIFwiYWZpaTU3NjQ1XCIsXG4gIDB4MDViZSxcbiAgXCJhZmlpNTc2NThcIixcbiAgMHgwNWMzLFxuICBcImFmaWk1NzY2NFwiLFxuICAweDA1ZDAsXG4gIFwiYWZpaTU3NjY1XCIsXG4gIDB4MDVkMSxcbiAgXCJhZmlpNTc2NjZcIixcbiAgMHgwNWQyLFxuICBcImFmaWk1NzY2N1wiLFxuICAweDA1ZDMsXG4gIFwiYWZpaTU3NjY4XCIsXG4gIDB4MDVkNCxcbiAgXCJhZmlpNTc2NjlcIixcbiAgMHgwNWQ1LFxuICBcImFmaWk1NzY3MFwiLFxuICAweDA1ZDYsXG4gIFwiYWZpaTU3NjcxXCIsXG4gIDB4MDVkNyxcbiAgXCJhZmlpNTc2NzJcIixcbiAgMHgwNWQ4LFxuICBcImFmaWk1NzY3M1wiLFxuICAweDA1ZDksXG4gIFwiYWZpaTU3Njc0XCIsXG4gIDB4MDVkYSxcbiAgXCJhZmlpNTc2NzVcIixcbiAgMHgwNWRiLFxuICBcImFmaWk1NzY3NlwiLFxuICAweDA1ZGMsXG4gIFwiYWZpaTU3Njc3XCIsXG4gIDB4MDVkZCxcbiAgXCJhZmlpNTc2NzhcIixcbiAgMHgwNWRlLFxuICBcImFmaWk1NzY3OVwiLFxuICAweDA1ZGYsXG4gIFwiYWZpaTU3NjgwXCIsXG4gIDB4MDVlMCxcbiAgXCJhZmlpNTc2ODFcIixcbiAgMHgwNWUxLFxuICBcImFmaWk1NzY4MlwiLFxuICAweDA1ZTIsXG4gIFwiYWZpaTU3NjgzXCIsXG4gIDB4MDVlMyxcbiAgXCJhZmlpNTc2ODRcIixcbiAgMHgwNWU0LFxuICBcImFmaWk1NzY4NVwiLFxuICAweDA1ZTUsXG4gIFwiYWZpaTU3Njg2XCIsXG4gIDB4MDVlNixcbiAgXCJhZmlpNTc2ODdcIixcbiAgMHgwNWU3LFxuICBcImFmaWk1NzY4OFwiLFxuICAweDA1ZTgsXG4gIFwiYWZpaTU3Njg5XCIsXG4gIDB4MDVlOSxcbiAgXCJhZmlpNTc2OTBcIixcbiAgMHgwNWVhLFxuICBcImFmaWk1NzY5NFwiLFxuICAweGZiMmEsXG4gIFwiYWZpaTU3Njk1XCIsXG4gIDB4ZmIyYixcbiAgXCJhZmlpNTc3MDBcIixcbiAgMHhmYjRiLFxuICBcImFmaWk1NzcwNVwiLFxuICAweGZiMWYsXG4gIFwiYWZpaTU3NzE2XCIsXG4gIDB4MDVmMCxcbiAgXCJhZmlpNTc3MTdcIixcbiAgMHgwNWYxLFxuICBcImFmaWk1NzcxOFwiLFxuICAweDA1ZjIsXG4gIFwiYWZpaTU3NzIzXCIsXG4gIDB4ZmIzNSxcbiAgXCJhZmlpNTc3OTNcIixcbiAgMHgwNWI0LFxuICBcImFmaWk1Nzc5NFwiLFxuICAweDA1YjUsXG4gIFwiYWZpaTU3Nzk1XCIsXG4gIDB4MDViNixcbiAgXCJhZmlpNTc3OTZcIixcbiAgMHgwNWJiLFxuICBcImFmaWk1Nzc5N1wiLFxuICAweDA1YjgsXG4gIFwiYWZpaTU3Nzk4XCIsXG4gIDB4MDViNyxcbiAgXCJhZmlpNTc3OTlcIixcbiAgMHgwNWIwLFxuICBcImFmaWk1NzgwMFwiLFxuICAweDA1YjIsXG4gIFwiYWZpaTU3ODAxXCIsXG4gIDB4MDViMSxcbiAgXCJhZmlpNTc4MDJcIixcbiAgMHgwNWIzLFxuICBcImFmaWk1NzgwM1wiLFxuICAweDA1YzIsXG4gIFwiYWZpaTU3ODA0XCIsXG4gIDB4MDVjMSxcbiAgXCJhZmlpNTc4MDZcIixcbiAgMHgwNWI5LFxuICBcImFmaWk1NzgwN1wiLFxuICAweDA1YmMsXG4gIFwiYWZpaTU3ODM5XCIsXG4gIDB4MDViZCxcbiAgXCJhZmlpNTc4NDFcIixcbiAgMHgwNWJmLFxuICBcImFmaWk1Nzg0MlwiLFxuICAweDA1YzAsXG4gIFwiYWZpaTU3OTI5XCIsXG4gIDB4MDJiYyxcbiAgXCJhZmlpNjEyNDhcIixcbiAgMHgyMTA1LFxuICBcImFmaWk2MTI4OVwiLFxuICAweDIxMTMsXG4gIFwiYWZpaTYxMzUyXCIsXG4gIDB4MjExNixcbiAgXCJhZmlpNjE1NzNcIixcbiAgMHgyMDJjLFxuICBcImFmaWk2MTU3NFwiLFxuICAweDIwMmQsXG4gIFwiYWZpaTYxNTc1XCIsXG4gIDB4MjAyZSxcbiAgXCJhZmlpNjE2NjRcIixcbiAgMHgyMDBjLFxuICBcImFmaWk2MzE2N1wiLFxuICAweDA2NmQsXG4gIFwiYWZpaTY0OTM3XCIsXG4gIDB4MDJiZCxcbiAgXCJhZ3JhdmVcIixcbiAgMHgwMGUwLFxuICBcImFndWphcmF0aVwiLFxuICAweDBhODUsXG4gIFwiYWd1cm11a2hpXCIsXG4gIDB4MGEwNSxcbiAgXCJhaGlyYWdhbmFcIixcbiAgMHgzMDQyLFxuICBcImFob29rYWJvdmVcIixcbiAgMHgxZWEzLFxuICBcImFpYmVuZ2FsaVwiLFxuICAweDA5OTAsXG4gIFwiYWlib3BvbW9mb1wiLFxuICAweDMxMWUsXG4gIFwiYWlkZXZhXCIsXG4gIDB4MDkxMCxcbiAgXCJhaWVjeXJpbGxpY1wiLFxuICAweDA0ZDUsXG4gIFwiYWlndWphcmF0aVwiLFxuICAweDBhOTAsXG4gIFwiYWlndXJtdWtoaVwiLFxuICAweDBhMTAsXG4gIFwiYWltYXRyYWd1cm11a2hpXCIsXG4gIDB4MGE0OCxcbiAgXCJhaW5hcmFiaWNcIixcbiAgMHgwNjM5LFxuICBcImFpbmZpbmFsYXJhYmljXCIsXG4gIDB4ZmVjYSxcbiAgXCJhaW5pbml0aWFsYXJhYmljXCIsXG4gIDB4ZmVjYixcbiAgXCJhaW5tZWRpYWxhcmFiaWNcIixcbiAgMHhmZWNjLFxuICBcImFpbnZlcnRlZGJyZXZlXCIsXG4gIDB4MDIwMyxcbiAgXCJhaXZvd2Vsc2lnbmJlbmdhbGlcIixcbiAgMHgwOWM4LFxuICBcImFpdm93ZWxzaWduZGV2YVwiLFxuICAweDA5NDgsXG4gIFwiYWl2b3dlbHNpZ25ndWphcmF0aVwiLFxuICAweDBhYzgsXG4gIFwiYWthdGFrYW5hXCIsXG4gIDB4MzBhMixcbiAgXCJha2F0YWthbmFoYWxmd2lkdGhcIixcbiAgMHhmZjcxLFxuICBcImFrb3JlYW5cIixcbiAgMHgzMTRmLFxuICBcImFsZWZcIixcbiAgMHgwNWQwLFxuICBcImFsZWZhcmFiaWNcIixcbiAgMHgwNjI3LFxuICBcImFsZWZkYWdlc2hoZWJyZXdcIixcbiAgMHhmYjMwLFxuICBcImFsZWZmaW5hbGFyYWJpY1wiLFxuICAweGZlOGUsXG4gIFwiYWxlZmhhbXphYWJvdmVhcmFiaWNcIixcbiAgMHgwNjIzLFxuICBcImFsZWZoYW16YWFib3ZlZmluYWxhcmFiaWNcIixcbiAgMHhmZTg0LFxuICBcImFsZWZoYW16YWJlbG93YXJhYmljXCIsXG4gIDB4MDYyNSxcbiAgXCJhbGVmaGFtemFiZWxvd2ZpbmFsYXJhYmljXCIsXG4gIDB4ZmU4OCxcbiAgXCJhbGVmaGVicmV3XCIsXG4gIDB4MDVkMCxcbiAgXCJhbGVmbGFtZWRoZWJyZXdcIixcbiAgMHhmYjRmLFxuICBcImFsZWZtYWRkYWFib3ZlYXJhYmljXCIsXG4gIDB4MDYyMixcbiAgXCJhbGVmbWFkZGFhYm92ZWZpbmFsYXJhYmljXCIsXG4gIDB4ZmU4MixcbiAgXCJhbGVmbWFrc3VyYWFyYWJpY1wiLFxuICAweDA2NDksXG4gIFwiYWxlZm1ha3N1cmFmaW5hbGFyYWJpY1wiLFxuICAweGZlZjAsXG4gIFwiYWxlZm1ha3N1cmFpbml0aWFsYXJhYmljXCIsXG4gIDB4ZmVmMyxcbiAgXCJhbGVmbWFrc3VyYW1lZGlhbGFyYWJpY1wiLFxuICAweGZlZjQsXG4gIFwiYWxlZnBhdGFoaGVicmV3XCIsXG4gIDB4ZmIyZSxcbiAgXCJhbGVmcWFtYXRzaGVicmV3XCIsXG4gIDB4ZmIyZixcbiAgXCJhbGVwaFwiLFxuICAweDIxMzUsXG4gIFwiYWxsZXF1YWxcIixcbiAgMHgyMjRjLFxuICBcImFscGhhXCIsXG4gIDB4MDNiMSxcbiAgXCJhbHBoYXRvbm9zXCIsXG4gIDB4MDNhYyxcbiAgXCJhbWFjcm9uXCIsXG4gIDB4MDEwMSxcbiAgXCJhbW9ub3NwYWNlXCIsXG4gIDB4ZmY0MSxcbiAgXCJhbXBlcnNhbmRcIixcbiAgMHgwMDI2LFxuICBcImFtcGVyc2FuZG1vbm9zcGFjZVwiLFxuICAweGZmMDYsXG4gIFwiYW1wZXJzYW5kc21hbGxcIixcbiAgMHhmNzI2LFxuICBcImFtc3F1YXJlXCIsXG4gIDB4MzNjMixcbiAgXCJhbmJvcG9tb2ZvXCIsXG4gIDB4MzEyMixcbiAgXCJhbmdib3BvbW9mb1wiLFxuICAweDMxMjQsXG4gIFwiYW5nYnJhY2tldGxlZnRcIixcbiAgMHgzMDA4LFxuICBcImFuZ2JyYWNrZXRyaWdodFwiLFxuICAweDMwMDksXG4gIFwiYW5na2hhbmtodXRoYWlcIixcbiAgMHgwZTVhLFxuICBcImFuZ2xlXCIsXG4gIDB4MjIyMCxcbiAgXCJhbmdsZWJyYWNrZXRsZWZ0XCIsXG4gIDB4MzAwOCxcbiAgXCJhbmdsZWJyYWNrZXRsZWZ0dmVydGljYWxcIixcbiAgMHhmZTNmLFxuICBcImFuZ2xlYnJhY2tldHJpZ2h0XCIsXG4gIDB4MzAwOSxcbiAgXCJhbmdsZWJyYWNrZXRyaWdodHZlcnRpY2FsXCIsXG4gIDB4ZmU0MCxcbiAgXCJhbmdsZWxlZnRcIixcbiAgMHgyMzI5LFxuICBcImFuZ2xlcmlnaHRcIixcbiAgMHgyMzJhLFxuICBcImFuZ3N0cm9tXCIsXG4gIDB4MjEyYixcbiAgXCJhbm90ZWxlaWFcIixcbiAgMHgwMzg3LFxuICBcImFudWRhdHRhZGV2YVwiLFxuICAweDA5NTIsXG4gIFwiYW51c3ZhcmFiZW5nYWxpXCIsXG4gIDB4MDk4MixcbiAgXCJhbnVzdmFyYWRldmFcIixcbiAgMHgwOTAyLFxuICBcImFudXN2YXJhZ3VqYXJhdGlcIixcbiAgMHgwYTgyLFxuICBcImFvZ29uZWtcIixcbiAgMHgwMTA1LFxuICBcImFwYWF0b3NxdWFyZVwiLFxuICAweDMzMDAsXG4gIFwiYXBhcmVuXCIsXG4gIDB4MjQ5YyxcbiAgXCJhcG9zdHJvcGhlYXJtZW5pYW5cIixcbiAgMHgwNTVhLFxuICBcImFwb3N0cm9waGVtb2RcIixcbiAgMHgwMmJjLFxuICBcImFwcGxlXCIsXG4gIDB4ZjhmZixcbiAgXCJhcHByb2FjaGVzXCIsXG4gIDB4MjI1MCxcbiAgXCJhcHByb3hlcXVhbFwiLFxuICAweDIyNDgsXG4gIFwiYXBwcm94ZXF1YWxvcmltYWdlXCIsXG4gIDB4MjI1MixcbiAgXCJhcHByb3hpbWF0ZWx5ZXF1YWxcIixcbiAgMHgyMjQ1LFxuICBcImFyYWVhZWtvcmVhblwiLFxuICAweDMxOGUsXG4gIFwiYXJhZWFrb3JlYW5cIixcbiAgMHgzMThkLFxuICBcImFyY1wiLFxuICAweDIzMTIsXG4gIFwiYXJpZ2h0aGFsZnJpbmdcIixcbiAgMHgxZTlhLFxuICBcImFyaW5nXCIsXG4gIDB4MDBlNSxcbiAgXCJhcmluZ2FjdXRlXCIsXG4gIDB4MDFmYixcbiAgXCJhcmluZ2JlbG93XCIsXG4gIDB4MWUwMSxcbiAgXCJhcnJvd2JvdGhcIixcbiAgMHgyMTk0LFxuICBcImFycm93ZGFzaGRvd25cIixcbiAgMHgyMWUzLFxuICBcImFycm93ZGFzaGxlZnRcIixcbiAgMHgyMWUwLFxuICBcImFycm93ZGFzaHJpZ2h0XCIsXG4gIDB4MjFlMixcbiAgXCJhcnJvd2Rhc2h1cFwiLFxuICAweDIxZTEsXG4gIFwiYXJyb3dkYmxib3RoXCIsXG4gIDB4MjFkNCxcbiAgXCJhcnJvd2RibGRvd25cIixcbiAgMHgyMWQzLFxuICBcImFycm93ZGJsbGVmdFwiLFxuICAweDIxZDAsXG4gIFwiYXJyb3dkYmxyaWdodFwiLFxuICAweDIxZDIsXG4gIFwiYXJyb3dkYmx1cFwiLFxuICAweDIxZDEsXG4gIFwiYXJyb3dkb3duXCIsXG4gIDB4MjE5MyxcbiAgXCJhcnJvd2Rvd25sZWZ0XCIsXG4gIDB4MjE5OSxcbiAgXCJhcnJvd2Rvd25yaWdodFwiLFxuICAweDIxOTgsXG4gIFwiYXJyb3dkb3dud2hpdGVcIixcbiAgMHgyMWU5LFxuICBcImFycm93aGVhZGRvd25tb2RcIixcbiAgMHgwMmM1LFxuICBcImFycm93aGVhZGxlZnRtb2RcIixcbiAgMHgwMmMyLFxuICBcImFycm93aGVhZHJpZ2h0bW9kXCIsXG4gIDB4MDJjMyxcbiAgXCJhcnJvd2hlYWR1cG1vZFwiLFxuICAweDAyYzQsXG4gIFwiYXJyb3dob3JpemV4XCIsXG4gIDB4ZjhlNyxcbiAgXCJhcnJvd2xlZnRcIixcbiAgMHgyMTkwLFxuICBcImFycm93bGVmdGRibFwiLFxuICAweDIxZDAsXG4gIFwiYXJyb3dsZWZ0ZGJsc3Ryb2tlXCIsXG4gIDB4MjFjZCxcbiAgXCJhcnJvd2xlZnRvdmVycmlnaHRcIixcbiAgMHgyMWM2LFxuICBcImFycm93bGVmdHdoaXRlXCIsXG4gIDB4MjFlNixcbiAgXCJhcnJvd3JpZ2h0XCIsXG4gIDB4MjE5MixcbiAgXCJhcnJvd3JpZ2h0ZGJsc3Ryb2tlXCIsXG4gIDB4MjFjZixcbiAgXCJhcnJvd3JpZ2h0aGVhdnlcIixcbiAgMHgyNzllLFxuICBcImFycm93cmlnaHRvdmVybGVmdFwiLFxuICAweDIxYzQsXG4gIFwiYXJyb3dyaWdodHdoaXRlXCIsXG4gIDB4MjFlOCxcbiAgXCJhcnJvd3RhYmxlZnRcIixcbiAgMHgyMWU0LFxuICBcImFycm93dGFicmlnaHRcIixcbiAgMHgyMWU1LFxuICBcImFycm93dXBcIixcbiAgMHgyMTkxLFxuICBcImFycm93dXBkblwiLFxuICAweDIxOTUsXG4gIFwiYXJyb3d1cGRuYnNlXCIsXG4gIDB4MjFhOCxcbiAgXCJhcnJvd3VwZG93bmJhc2VcIixcbiAgMHgyMWE4LFxuICBcImFycm93dXBsZWZ0XCIsXG4gIDB4MjE5NixcbiAgXCJhcnJvd3VwbGVmdG9mZG93blwiLFxuICAweDIxYzUsXG4gIFwiYXJyb3d1cHJpZ2h0XCIsXG4gIDB4MjE5NyxcbiAgXCJhcnJvd3Vwd2hpdGVcIixcbiAgMHgyMWU3LFxuICBcImFycm93dmVydGV4XCIsXG4gIDB4ZjhlNixcbiAgXCJhc2NpaWNpcmN1bVwiLFxuICAweDAwNWUsXG4gIFwiYXNjaWljaXJjdW1tb25vc3BhY2VcIixcbiAgMHhmZjNlLFxuICBcImFzY2lpdGlsZGVcIixcbiAgMHgwMDdlLFxuICBcImFzY2lpdGlsZGVtb25vc3BhY2VcIixcbiAgMHhmZjVlLFxuICBcImFzY3JpcHRcIixcbiAgMHgwMjUxLFxuICBcImFzY3JpcHR0dXJuZWRcIixcbiAgMHgwMjUyLFxuICBcImFzbWFsbGhpcmFnYW5hXCIsXG4gIDB4MzA0MSxcbiAgXCJhc21hbGxrYXRha2FuYVwiLFxuICAweDMwYTEsXG4gIFwiYXNtYWxsa2F0YWthbmFoYWxmd2lkdGhcIixcbiAgMHhmZjY3LFxuICBcImFzdGVyaXNrXCIsXG4gIDB4MDAyYSxcbiAgXCJhc3Rlcmlza2FsdG9uZWFyYWJpY1wiLFxuICAweDA2NmQsXG4gIFwiYXN0ZXJpc2thcmFiaWNcIixcbiAgMHgwNjZkLFxuICBcImFzdGVyaXNrbWF0aFwiLFxuICAweDIyMTcsXG4gIFwiYXN0ZXJpc2ttb25vc3BhY2VcIixcbiAgMHhmZjBhLFxuICBcImFzdGVyaXNrc21hbGxcIixcbiAgMHhmZTYxLFxuICBcImFzdGVyaXNtXCIsXG4gIDB4MjA0MixcbiAgXCJhc3VwZXJpb3JcIixcbiAgMHhmNmU5LFxuICBcImFzeW1wdG90aWNhbGx5ZXF1YWxcIixcbiAgMHgyMjQzLFxuICBcImF0XCIsXG4gIDB4MDA0MCxcbiAgXCJhdGlsZGVcIixcbiAgMHgwMGUzLFxuICBcImF0bW9ub3NwYWNlXCIsXG4gIDB4ZmYyMCxcbiAgXCJhdHNtYWxsXCIsXG4gIDB4ZmU2YixcbiAgXCJhdHVybmVkXCIsXG4gIDB4MDI1MCxcbiAgXCJhdWJlbmdhbGlcIixcbiAgMHgwOTk0LFxuICBcImF1Ym9wb21vZm9cIixcbiAgMHgzMTIwLFxuICBcImF1ZGV2YVwiLFxuICAweDA5MTQsXG4gIFwiYXVndWphcmF0aVwiLFxuICAweDBhOTQsXG4gIFwiYXVndXJtdWtoaVwiLFxuICAweDBhMTQsXG4gIFwiYXVsZW5ndGhtYXJrYmVuZ2FsaVwiLFxuICAweDA5ZDcsXG4gIFwiYXVtYXRyYWd1cm11a2hpXCIsXG4gIDB4MGE0YyxcbiAgXCJhdXZvd2Vsc2lnbmJlbmdhbGlcIixcbiAgMHgwOWNjLFxuICBcImF1dm93ZWxzaWduZGV2YVwiLFxuICAweDA5NGMsXG4gIFwiYXV2b3dlbHNpZ25ndWphcmF0aVwiLFxuICAweDBhY2MsXG4gIFwiYXZhZ3JhaGFkZXZhXCIsXG4gIDB4MDkzZCxcbiAgXCJheWJhcm1lbmlhblwiLFxuICAweDA1NjEsXG4gIFwiYXlpblwiLFxuICAweDA1ZTIsXG4gIFwiYXlpbmFsdG9uZWhlYnJld1wiLFxuICAweGZiMjAsXG4gIFwiYXlpbmhlYnJld1wiLFxuICAweDA1ZTIsXG4gIFwiYlwiLFxuICAweDAwNjIsXG4gIFwiYmFiZW5nYWxpXCIsXG4gIDB4MDlhYyxcbiAgXCJiYWNrc2xhc2hcIixcbiAgMHgwMDVjLFxuICBcImJhY2tzbGFzaG1vbm9zcGFjZVwiLFxuICAweGZmM2MsXG4gIFwiYmFkZXZhXCIsXG4gIDB4MDkyYyxcbiAgXCJiYWd1amFyYXRpXCIsXG4gIDB4MGFhYyxcbiAgXCJiYWd1cm11a2hpXCIsXG4gIDB4MGEyYyxcbiAgXCJiYWhpcmFnYW5hXCIsXG4gIDB4MzA3MCxcbiAgXCJiYWh0dGhhaVwiLFxuICAweDBlM2YsXG4gIFwiYmFrYXRha2FuYVwiLFxuICAweDMwZDAsXG4gIFwiYmFyXCIsXG4gIDB4MDA3YyxcbiAgXCJiYXJtb25vc3BhY2VcIixcbiAgMHhmZjVjLFxuICBcImJib3BvbW9mb1wiLFxuICAweDMxMDUsXG4gIFwiYmNpcmNsZVwiLFxuICAweDI0ZDEsXG4gIFwiYmRvdGFjY2VudFwiLFxuICAweDFlMDMsXG4gIFwiYmRvdGJlbG93XCIsXG4gIDB4MWUwNSxcbiAgXCJiZWFtZWRzaXh0ZWVudGhub3Rlc1wiLFxuICAweDI2NmMsXG4gIFwiYmVjYXVzZVwiLFxuICAweDIyMzUsXG4gIFwiYmVjeXJpbGxpY1wiLFxuICAweDA0MzEsXG4gIFwiYmVoYXJhYmljXCIsXG4gIDB4MDYyOCxcbiAgXCJiZWhmaW5hbGFyYWJpY1wiLFxuICAweGZlOTAsXG4gIFwiYmVoaW5pdGlhbGFyYWJpY1wiLFxuICAweGZlOTEsXG4gIFwiYmVoaXJhZ2FuYVwiLFxuICAweDMwNzksXG4gIFwiYmVobWVkaWFsYXJhYmljXCIsXG4gIDB4ZmU5MixcbiAgXCJiZWhtZWVtaW5pdGlhbGFyYWJpY1wiLFxuICAweGZjOWYsXG4gIFwiYmVobWVlbWlzb2xhdGVkYXJhYmljXCIsXG4gIDB4ZmMwOCxcbiAgXCJiZWhub29uZmluYWxhcmFiaWNcIixcbiAgMHhmYzZkLFxuICBcImJla2F0YWthbmFcIixcbiAgMHgzMGQ5LFxuICBcImJlbmFybWVuaWFuXCIsXG4gIDB4MDU2MixcbiAgXCJiZXRcIixcbiAgMHgwNWQxLFxuICBcImJldGFcIixcbiAgMHgwM2IyLFxuICBcImJldGFzeW1ib2xncmVla1wiLFxuICAweDAzZDAsXG4gIFwiYmV0ZGFnZXNoXCIsXG4gIDB4ZmIzMSxcbiAgXCJiZXRkYWdlc2hoZWJyZXdcIixcbiAgMHhmYjMxLFxuICBcImJldGhlYnJld1wiLFxuICAweDA1ZDEsXG4gIFwiYmV0cmFmZWhlYnJld1wiLFxuICAweGZiNGMsXG4gIFwiYmhhYmVuZ2FsaVwiLFxuICAweDA5YWQsXG4gIFwiYmhhZGV2YVwiLFxuICAweDA5MmQsXG4gIFwiYmhhZ3VqYXJhdGlcIixcbiAgMHgwYWFkLFxuICBcImJoYWd1cm11a2hpXCIsXG4gIDB4MGEyZCxcbiAgXCJiaG9va1wiLFxuICAweDAyNTMsXG4gIFwiYmloaXJhZ2FuYVwiLFxuICAweDMwNzMsXG4gIFwiYmlrYXRha2FuYVwiLFxuICAweDMwZDMsXG4gIFwiYmlsYWJpYWxjbGlja1wiLFxuICAweDAyOTgsXG4gIFwiYmluZGlndXJtdWtoaVwiLFxuICAweDBhMDIsXG4gIFwiYmlydXNxdWFyZVwiLFxuICAweDMzMzEsXG4gIFwiYmxhY2tjaXJjbGVcIixcbiAgMHgyNWNmLFxuICBcImJsYWNrZGlhbW9uZFwiLFxuICAweDI1YzYsXG4gIFwiYmxhY2tkb3ducG9pbnRpbmd0cmlhbmdsZVwiLFxuICAweDI1YmMsXG4gIFwiYmxhY2tsZWZ0cG9pbnRpbmdwb2ludGVyXCIsXG4gIDB4MjVjNCxcbiAgXCJibGFja2xlZnRwb2ludGluZ3RyaWFuZ2xlXCIsXG4gIDB4MjVjMCxcbiAgXCJibGFja2xlbnRpY3VsYXJicmFja2V0bGVmdFwiLFxuICAweDMwMTAsXG4gIFwiYmxhY2tsZW50aWN1bGFyYnJhY2tldGxlZnR2ZXJ0aWNhbFwiLFxuICAweGZlM2IsXG4gIFwiYmxhY2tsZW50aWN1bGFyYnJhY2tldHJpZ2h0XCIsXG4gIDB4MzAxMSxcbiAgXCJibGFja2xlbnRpY3VsYXJicmFja2V0cmlnaHR2ZXJ0aWNhbFwiLFxuICAweGZlM2MsXG4gIFwiYmxhY2tsb3dlcmxlZnR0cmlhbmdsZVwiLFxuICAweDI1ZTMsXG4gIFwiYmxhY2tsb3dlcnJpZ2h0dHJpYW5nbGVcIixcbiAgMHgyNWUyLFxuICBcImJsYWNrcmVjdGFuZ2xlXCIsXG4gIDB4MjVhYyxcbiAgXCJibGFja3JpZ2h0cG9pbnRpbmdwb2ludGVyXCIsXG4gIDB4MjViYSxcbiAgXCJibGFja3JpZ2h0cG9pbnRpbmd0cmlhbmdsZVwiLFxuICAweDI1YjYsXG4gIFwiYmxhY2tzbWFsbHNxdWFyZVwiLFxuICAweDI1YWEsXG4gIFwiYmxhY2tzbWlsaW5nZmFjZVwiLFxuICAweDI2M2IsXG4gIFwiYmxhY2tzcXVhcmVcIixcbiAgMHgyNWEwLFxuICBcImJsYWNrc3RhclwiLFxuICAweDI2MDUsXG4gIFwiYmxhY2t1cHBlcmxlZnR0cmlhbmdsZVwiLFxuICAweDI1ZTQsXG4gIFwiYmxhY2t1cHBlcnJpZ2h0dHJpYW5nbGVcIixcbiAgMHgyNWU1LFxuICBcImJsYWNrdXBwb2ludGluZ3NtYWxsdHJpYW5nbGVcIixcbiAgMHgyNWI0LFxuICBcImJsYWNrdXBwb2ludGluZ3RyaWFuZ2xlXCIsXG4gIDB4MjViMixcbiAgXCJibGFua1wiLFxuICAweDI0MjMsXG4gIFwiYmxpbmViZWxvd1wiLFxuICAweDFlMDcsXG4gIFwiYmxvY2tcIixcbiAgMHgyNTg4LFxuICBcImJtb25vc3BhY2VcIixcbiAgMHhmZjQyLFxuICBcImJvYmFpbWFpdGhhaVwiLFxuICAweDBlMWEsXG4gIFwiYm9oaXJhZ2FuYVwiLFxuICAweDMwN2MsXG4gIFwiYm9rYXRha2FuYVwiLFxuICAweDMwZGMsXG4gIFwiYnBhcmVuXCIsXG4gIDB4MjQ5ZCxcbiAgXCJicXNxdWFyZVwiLFxuICAweDMzYzMsXG4gIFwiYnJhY2VleFwiLFxuICAweGY4ZjQsXG4gIFwiYnJhY2VsZWZ0XCIsXG4gIDB4MDA3YixcbiAgXCJicmFjZWxlZnRidFwiLFxuICAweGY4ZjMsXG4gIFwiYnJhY2VsZWZ0bWlkXCIsXG4gIDB4ZjhmMixcbiAgXCJicmFjZWxlZnRtb25vc3BhY2VcIixcbiAgMHhmZjViLFxuICBcImJyYWNlbGVmdHNtYWxsXCIsXG4gIDB4ZmU1YixcbiAgXCJicmFjZWxlZnR0cFwiLFxuICAweGY4ZjEsXG4gIFwiYnJhY2VsZWZ0dmVydGljYWxcIixcbiAgMHhmZTM3LFxuICBcImJyYWNlcmlnaHRcIixcbiAgMHgwMDdkLFxuICBcImJyYWNlcmlnaHRidFwiLFxuICAweGY4ZmUsXG4gIFwiYnJhY2VyaWdodG1pZFwiLFxuICAweGY4ZmQsXG4gIFwiYnJhY2VyaWdodG1vbm9zcGFjZVwiLFxuICAweGZmNWQsXG4gIFwiYnJhY2VyaWdodHNtYWxsXCIsXG4gIDB4ZmU1YyxcbiAgXCJicmFjZXJpZ2h0dHBcIixcbiAgMHhmOGZjLFxuICBcImJyYWNlcmlnaHR2ZXJ0aWNhbFwiLFxuICAweGZlMzgsXG4gIFwiYnJhY2tldGxlZnRcIixcbiAgMHgwMDViLFxuICBcImJyYWNrZXRsZWZ0YnRcIixcbiAgMHhmOGYwLFxuICBcImJyYWNrZXRsZWZ0ZXhcIixcbiAgMHhmOGVmLFxuICBcImJyYWNrZXRsZWZ0bW9ub3NwYWNlXCIsXG4gIDB4ZmYzYixcbiAgXCJicmFja2V0bGVmdHRwXCIsXG4gIDB4ZjhlZSxcbiAgXCJicmFja2V0cmlnaHRcIixcbiAgMHgwMDVkLFxuICBcImJyYWNrZXRyaWdodGJ0XCIsXG4gIDB4ZjhmYixcbiAgXCJicmFja2V0cmlnaHRleFwiLFxuICAweGY4ZmEsXG4gIFwiYnJhY2tldHJpZ2h0bW9ub3NwYWNlXCIsXG4gIDB4ZmYzZCxcbiAgXCJicmFja2V0cmlnaHR0cFwiLFxuICAweGY4ZjksXG4gIFwiYnJldmVcIixcbiAgMHgwMmQ4LFxuICBcImJyZXZlYmVsb3djbWJcIixcbiAgMHgwMzJlLFxuICBcImJyZXZlY21iXCIsXG4gIDB4MDMwNixcbiAgXCJicmV2ZWludmVydGVkYmVsb3djbWJcIixcbiAgMHgwMzJmLFxuICBcImJyZXZlaW52ZXJ0ZWRjbWJcIixcbiAgMHgwMzExLFxuICBcImJyZXZlaW52ZXJ0ZWRkb3VibGVjbWJcIixcbiAgMHgwMzYxLFxuICBcImJyaWRnZWJlbG93Y21iXCIsXG4gIDB4MDMyYSxcbiAgXCJicmlkZ2VpbnZlcnRlZGJlbG93Y21iXCIsXG4gIDB4MDMzYSxcbiAgXCJicm9rZW5iYXJcIixcbiAgMHgwMGE2LFxuICBcImJzdHJva2VcIixcbiAgMHgwMTgwLFxuICBcImJzdXBlcmlvclwiLFxuICAweGY2ZWEsXG4gIFwiYnRvcGJhclwiLFxuICAweDAxODMsXG4gIFwiYnVoaXJhZ2FuYVwiLFxuICAweDMwNzYsXG4gIFwiYnVrYXRha2FuYVwiLFxuICAweDMwZDYsXG4gIFwiYnVsbGV0XCIsXG4gIDB4MjAyMixcbiAgXCJidWxsZXRpbnZlcnNlXCIsXG4gIDB4MjVkOCxcbiAgXCJidWxsZXRvcGVyYXRvclwiLFxuICAweDIyMTksXG4gIFwiYnVsbHNleWVcIixcbiAgMHgyNWNlLFxuICBcImNcIixcbiAgMHgwMDYzLFxuICBcImNhYXJtZW5pYW5cIixcbiAgMHgwNTZlLFxuICBcImNhYmVuZ2FsaVwiLFxuICAweDA5OWEsXG4gIFwiY2FjdXRlXCIsXG4gIDB4MDEwNyxcbiAgXCJjYWRldmFcIixcbiAgMHgwOTFhLFxuICBcImNhZ3VqYXJhdGlcIixcbiAgMHgwYTlhLFxuICBcImNhZ3VybXVraGlcIixcbiAgMHgwYTFhLFxuICBcImNhbHNxdWFyZVwiLFxuICAweDMzODgsXG4gIFwiY2FuZHJhYmluZHViZW5nYWxpXCIsXG4gIDB4MDk4MSxcbiAgXCJjYW5kcmFiaW5kdWNtYlwiLFxuICAweDAzMTAsXG4gIFwiY2FuZHJhYmluZHVkZXZhXCIsXG4gIDB4MDkwMSxcbiAgXCJjYW5kcmFiaW5kdWd1amFyYXRpXCIsXG4gIDB4MGE4MSxcbiAgXCJjYXBzbG9ja1wiLFxuICAweDIxZWEsXG4gIFwiY2FyZW9mXCIsXG4gIDB4MjEwNSxcbiAgXCJjYXJvblwiLFxuICAweDAyYzcsXG4gIFwiY2Fyb25iZWxvd2NtYlwiLFxuICAweDAzMmMsXG4gIFwiY2Fyb25jbWJcIixcbiAgMHgwMzBjLFxuICBcImNhcnJpYWdlcmV0dXJuXCIsXG4gIDB4MjFiNSxcbiAgXCJjYm9wb21vZm9cIixcbiAgMHgzMTE4LFxuICBcImNjYXJvblwiLFxuICAweDAxMGQsXG4gIFwiY2NlZGlsbGFcIixcbiAgMHgwMGU3LFxuICBcImNjZWRpbGxhYWN1dGVcIixcbiAgMHgxZTA5LFxuICBcImNjaXJjbGVcIixcbiAgMHgyNGQyLFxuICBcImNjaXJjdW1mbGV4XCIsXG4gIDB4MDEwOSxcbiAgXCJjY3VybFwiLFxuICAweDAyNTUsXG4gIFwiY2RvdFwiLFxuICAweDAxMGIsXG4gIFwiY2RvdGFjY2VudFwiLFxuICAweDAxMGIsXG4gIFwiY2RzcXVhcmVcIixcbiAgMHgzM2M1LFxuICBcImNlZGlsbGFcIixcbiAgMHgwMGI4LFxuICBcImNlZGlsbGFjbWJcIixcbiAgMHgwMzI3LFxuICBcImNlbnRcIixcbiAgMHgwMGEyLFxuICBcImNlbnRpZ3JhZGVcIixcbiAgMHgyMTAzLFxuICBcImNlbnRpbmZlcmlvclwiLFxuICAweGY2ZGYsXG4gIFwiY2VudG1vbm9zcGFjZVwiLFxuICAweGZmZTAsXG4gIFwiY2VudG9sZHN0eWxlXCIsXG4gIDB4ZjdhMixcbiAgXCJjZW50c3VwZXJpb3JcIixcbiAgMHhmNmUwLFxuICBcImNoYWFybWVuaWFuXCIsXG4gIDB4MDU3OSxcbiAgXCJjaGFiZW5nYWxpXCIsXG4gIDB4MDk5YixcbiAgXCJjaGFkZXZhXCIsXG4gIDB4MDkxYixcbiAgXCJjaGFndWphcmF0aVwiLFxuICAweDBhOWIsXG4gIFwiY2hhZ3VybXVraGlcIixcbiAgMHgwYTFiLFxuICBcImNoYm9wb21vZm9cIixcbiAgMHgzMTE0LFxuICBcImNoZWFia2hhc2lhbmN5cmlsbGljXCIsXG4gIDB4MDRiZCxcbiAgXCJjaGVja21hcmtcIixcbiAgMHgyNzEzLFxuICBcImNoZWN5cmlsbGljXCIsXG4gIDB4MDQ0NyxcbiAgXCJjaGVkZXNjZW5kZXJhYmtoYXNpYW5jeXJpbGxpY1wiLFxuICAweDA0YmYsXG4gIFwiY2hlZGVzY2VuZGVyY3lyaWxsaWNcIixcbiAgMHgwNGI3LFxuICBcImNoZWRpZXJlc2lzY3lyaWxsaWNcIixcbiAgMHgwNGY1LFxuICBcImNoZWhhcm1lbmlhblwiLFxuICAweDA1NzMsXG4gIFwiY2hla2hha2Fzc2lhbmN5cmlsbGljXCIsXG4gIDB4MDRjYyxcbiAgXCJjaGV2ZXJ0aWNhbHN0cm9rZWN5cmlsbGljXCIsXG4gIDB4MDRiOSxcbiAgXCJjaGlcIixcbiAgMHgwM2M3LFxuICBcImNoaWV1Y2hhY2lyY2xla29yZWFuXCIsXG4gIDB4MzI3NyxcbiAgXCJjaGlldWNoYXBhcmVua29yZWFuXCIsXG4gIDB4MzIxNyxcbiAgXCJjaGlldWNoY2lyY2xla29yZWFuXCIsXG4gIDB4MzI2OSxcbiAgXCJjaGlldWNoa29yZWFuXCIsXG4gIDB4MzE0YSxcbiAgXCJjaGlldWNocGFyZW5rb3JlYW5cIixcbiAgMHgzMjA5LFxuICBcImNob2NoYW5ndGhhaVwiLFxuICAweDBlMGEsXG4gIFwiY2hvY2hhbnRoYWlcIixcbiAgMHgwZTA4LFxuICBcImNob2NoaW5ndGhhaVwiLFxuICAweDBlMDksXG4gIFwiY2hvY2hvZXRoYWlcIixcbiAgMHgwZTBjLFxuICBcImNob29rXCIsXG4gIDB4MDE4OCxcbiAgXCJjaWV1Y2FjaXJjbGVrb3JlYW5cIixcbiAgMHgzMjc2LFxuICBcImNpZXVjYXBhcmVua29yZWFuXCIsXG4gIDB4MzIxNixcbiAgXCJjaWV1Y2NpcmNsZWtvcmVhblwiLFxuICAweDMyNjgsXG4gIFwiY2lldWNrb3JlYW5cIixcbiAgMHgzMTQ4LFxuICBcImNpZXVjcGFyZW5rb3JlYW5cIixcbiAgMHgzMjA4LFxuICBcImNpZXVjdXBhcmVua29yZWFuXCIsXG4gIDB4MzIxYyxcbiAgXCJjaXJjbGVcIixcbiAgMHgyNWNiLFxuICBcImNpcmNsZWNvcHlydFwiLFxuICAweDAwYTksXG4gIFwiY2lyY2xlbXVsdGlwbHlcIixcbiAgMHgyMjk3LFxuICBcImNpcmNsZW90XCIsXG4gIDB4MjI5OSxcbiAgXCJjaXJjbGVwbHVzXCIsXG4gIDB4MjI5NSxcbiAgXCJjaXJjbGVwb3N0YWxtYXJrXCIsXG4gIDB4MzAzNixcbiAgXCJjaXJjbGV3aXRobGVmdGhhbGZibGFja1wiLFxuICAweDI1ZDAsXG4gIFwiY2lyY2xld2l0aHJpZ2h0aGFsZmJsYWNrXCIsXG4gIDB4MjVkMSxcbiAgXCJjaXJjdW1mbGV4XCIsXG4gIDB4MDJjNixcbiAgXCJjaXJjdW1mbGV4YmVsb3djbWJcIixcbiAgMHgwMzJkLFxuICBcImNpcmN1bWZsZXhjbWJcIixcbiAgMHgwMzAyLFxuICBcImNsZWFyXCIsXG4gIDB4MjMyNyxcbiAgXCJjbGlja2FsdmVvbGFyXCIsXG4gIDB4MDFjMixcbiAgXCJjbGlja2RlbnRhbFwiLFxuICAweDAxYzAsXG4gIFwiY2xpY2tsYXRlcmFsXCIsXG4gIDB4MDFjMSxcbiAgXCJjbGlja3JldHJvZmxleFwiLFxuICAweDAxYzMsXG4gIFwiY2x1YlwiLFxuICAweDI2NjMsXG4gIFwiY2x1YnN1aXRibGFja1wiLFxuICAweDI2NjMsXG4gIFwiY2x1YnN1aXR3aGl0ZVwiLFxuICAweDI2NjcsXG4gIFwiY21jdWJlZHNxdWFyZVwiLFxuICAweDMzYTQsXG4gIFwiY21vbm9zcGFjZVwiLFxuICAweGZmNDMsXG4gIFwiY21zcXVhcmVkc3F1YXJlXCIsXG4gIDB4MzNhMCxcbiAgXCJjb2FybWVuaWFuXCIsXG4gIDB4MDU4MSxcbiAgXCJjb2xvblwiLFxuICAweDAwM2EsXG4gIFwiY29sb25tb25ldGFyeVwiLFxuICAweDIwYTEsXG4gIFwiY29sb25tb25vc3BhY2VcIixcbiAgMHhmZjFhLFxuICBcImNvbG9uc2lnblwiLFxuICAweDIwYTEsXG4gIFwiY29sb25zbWFsbFwiLFxuICAweGZlNTUsXG4gIFwiY29sb250cmlhbmd1bGFyaGFsZm1vZFwiLFxuICAweDAyZDEsXG4gIFwiY29sb250cmlhbmd1bGFybW9kXCIsXG4gIDB4MDJkMCxcbiAgXCJjb21tYVwiLFxuICAweDAwMmMsXG4gIFwiY29tbWFhYm92ZWNtYlwiLFxuICAweDAzMTMsXG4gIFwiY29tbWFhYm92ZXJpZ2h0Y21iXCIsXG4gIDB4MDMxNSxcbiAgXCJjb21tYWFjY2VudFwiLFxuICAweGY2YzMsXG4gIFwiY29tbWFhcmFiaWNcIixcbiAgMHgwNjBjLFxuICBcImNvbW1hYXJtZW5pYW5cIixcbiAgMHgwNTVkLFxuICBcImNvbW1haW5mZXJpb3JcIixcbiAgMHhmNmUxLFxuICBcImNvbW1hbW9ub3NwYWNlXCIsXG4gIDB4ZmYwYyxcbiAgXCJjb21tYXJldmVyc2VkYWJvdmVjbWJcIixcbiAgMHgwMzE0LFxuICBcImNvbW1hcmV2ZXJzZWRtb2RcIixcbiAgMHgwMmJkLFxuICBcImNvbW1hc21hbGxcIixcbiAgMHhmZTUwLFxuICBcImNvbW1hc3VwZXJpb3JcIixcbiAgMHhmNmUyLFxuICBcImNvbW1hdHVybmVkYWJvdmVjbWJcIixcbiAgMHgwMzEyLFxuICBcImNvbW1hdHVybmVkbW9kXCIsXG4gIDB4MDJiYixcbiAgXCJjb21wYXNzXCIsXG4gIDB4MjYzYyxcbiAgXCJjb25ncnVlbnRcIixcbiAgMHgyMjQ1LFxuICBcImNvbnRvdXJpbnRlZ3JhbFwiLFxuICAweDIyMmUsXG4gIFwiY29udHJvbFwiLFxuICAweDIzMDMsXG4gIFwiY29udHJvbEFDS1wiLFxuICAweDAwMDYsXG4gIFwiY29udHJvbEJFTFwiLFxuICAweDAwMDcsXG4gIFwiY29udHJvbEJTXCIsXG4gIDB4MDAwOCxcbiAgXCJjb250cm9sQ0FOXCIsXG4gIDB4MDAxOCxcbiAgXCJjb250cm9sQ1JcIixcbiAgMHgwMDBkLFxuICBcImNvbnRyb2xEQzFcIixcbiAgMHgwMDExLFxuICBcImNvbnRyb2xEQzJcIixcbiAgMHgwMDEyLFxuICBcImNvbnRyb2xEQzNcIixcbiAgMHgwMDEzLFxuICBcImNvbnRyb2xEQzRcIixcbiAgMHgwMDE0LFxuICBcImNvbnRyb2xERUxcIixcbiAgMHgwMDdmLFxuICBcImNvbnRyb2xETEVcIixcbiAgMHgwMDEwLFxuICBcImNvbnRyb2xFTVwiLFxuICAweDAwMTksXG4gIFwiY29udHJvbEVOUVwiLFxuICAweDAwMDUsXG4gIFwiY29udHJvbEVPVFwiLFxuICAweDAwMDQsXG4gIFwiY29udHJvbEVTQ1wiLFxuICAweDAwMWIsXG4gIFwiY29udHJvbEVUQlwiLFxuICAweDAwMTcsXG4gIFwiY29udHJvbEVUWFwiLFxuICAweDAwMDMsXG4gIFwiY29udHJvbEZGXCIsXG4gIDB4MDAwYyxcbiAgXCJjb250cm9sRlNcIixcbiAgMHgwMDFjLFxuICBcImNvbnRyb2xHU1wiLFxuICAweDAwMWQsXG4gIFwiY29udHJvbEhUXCIsXG4gIDB4MDAwOSxcbiAgXCJjb250cm9sTEZcIixcbiAgMHgwMDBhLFxuICBcImNvbnRyb2xOQUtcIixcbiAgMHgwMDE1LFxuICBcImNvbnRyb2xOVUxMXCIsXG4gIDB4MDAwMCxcbiAgXCJjb250cm9sUlNcIixcbiAgMHgwMDFlLFxuICBcImNvbnRyb2xTSVwiLFxuICAweDAwMGYsXG4gIFwiY29udHJvbFNPXCIsXG4gIDB4MDAwZSxcbiAgXCJjb250cm9sU09UXCIsXG4gIDB4MDAwMixcbiAgXCJjb250cm9sU1RYXCIsXG4gIDB4MDAwMSxcbiAgXCJjb250cm9sU1VCXCIsXG4gIDB4MDAxYSxcbiAgXCJjb250cm9sU1lOXCIsXG4gIDB4MDAxNixcbiAgXCJjb250cm9sVVNcIixcbiAgMHgwMDFmLFxuICBcImNvbnRyb2xWVFwiLFxuICAweDAwMGIsXG4gIFwiY29weXJpZ2h0XCIsXG4gIDB4MDBhOSxcbiAgXCJjb3B5cmlnaHRzYW5zXCIsXG4gIDB4ZjhlOSxcbiAgXCJjb3B5cmlnaHRzZXJpZlwiLFxuICAweGY2ZDksXG4gIFwiY29ybmVyYnJhY2tldGxlZnRcIixcbiAgMHgzMDBjLFxuICBcImNvcm5lcmJyYWNrZXRsZWZ0aGFsZndpZHRoXCIsXG4gIDB4ZmY2MixcbiAgXCJjb3JuZXJicmFja2V0bGVmdHZlcnRpY2FsXCIsXG4gIDB4ZmU0MSxcbiAgXCJjb3JuZXJicmFja2V0cmlnaHRcIixcbiAgMHgzMDBkLFxuICBcImNvcm5lcmJyYWNrZXRyaWdodGhhbGZ3aWR0aFwiLFxuICAweGZmNjMsXG4gIFwiY29ybmVyYnJhY2tldHJpZ2h0dmVydGljYWxcIixcbiAgMHhmZTQyLFxuICBcImNvcnBvcmF0aW9uc3F1YXJlXCIsXG4gIDB4MzM3ZixcbiAgXCJjb3NxdWFyZVwiLFxuICAweDMzYzcsXG4gIFwiY292ZXJrZ3NxdWFyZVwiLFxuICAweDMzYzYsXG4gIFwiY3BhcmVuXCIsXG4gIDB4MjQ5ZSxcbiAgXCJjcnV6ZWlyb1wiLFxuICAweDIwYTIsXG4gIFwiY3N0cmV0Y2hlZFwiLFxuICAweDAyOTcsXG4gIFwiY3VybHlhbmRcIixcbiAgMHgyMmNmLFxuICBcImN1cmx5b3JcIixcbiAgMHgyMmNlLFxuICBcImN1cnJlbmN5XCIsXG4gIDB4MDBhNCxcbiAgXCJjeXJCcmV2ZVwiLFxuICAweGY2ZDEsXG4gIFwiY3lyRmxleFwiLFxuICAweGY2ZDIsXG4gIFwiY3lyYnJldmVcIixcbiAgMHhmNmQ0LFxuICBcImN5cmZsZXhcIixcbiAgMHhmNmQ1LFxuICBcImRcIixcbiAgMHgwMDY0LFxuICBcImRhYXJtZW5pYW5cIixcbiAgMHgwNTY0LFxuICBcImRhYmVuZ2FsaVwiLFxuICAweDA5YTYsXG4gIFwiZGFkYXJhYmljXCIsXG4gIDB4MDYzNixcbiAgXCJkYWRldmFcIixcbiAgMHgwOTI2LFxuICBcImRhZGZpbmFsYXJhYmljXCIsXG4gIDB4ZmViZSxcbiAgXCJkYWRpbml0aWFsYXJhYmljXCIsXG4gIDB4ZmViZixcbiAgXCJkYWRtZWRpYWxhcmFiaWNcIixcbiAgMHhmZWMwLFxuICBcImRhZ2VzaFwiLFxuICAweDA1YmMsXG4gIFwiZGFnZXNoaGVicmV3XCIsXG4gIDB4MDViYyxcbiAgXCJkYWdnZXJcIixcbiAgMHgyMDIwLFxuICBcImRhZ2dlcmRibFwiLFxuICAweDIwMjEsXG4gIFwiZGFndWphcmF0aVwiLFxuICAweDBhYTYsXG4gIFwiZGFndXJtdWtoaVwiLFxuICAweDBhMjYsXG4gIFwiZGFoaXJhZ2FuYVwiLFxuICAweDMwNjAsXG4gIFwiZGFrYXRha2FuYVwiLFxuICAweDMwYzAsXG4gIFwiZGFsYXJhYmljXCIsXG4gIDB4MDYyZixcbiAgXCJkYWxldFwiLFxuICAweDA1ZDMsXG4gIFwiZGFsZXRkYWdlc2hcIixcbiAgMHhmYjMzLFxuICBcImRhbGV0ZGFnZXNoaGVicmV3XCIsXG4gIDB4ZmIzMyxcbiAgXCJkYWxldGhlYnJld1wiLFxuICAweDA1ZDMsXG4gIFwiZGFsZmluYWxhcmFiaWNcIixcbiAgMHhmZWFhLFxuICBcImRhbW1hYXJhYmljXCIsXG4gIDB4MDY0ZixcbiAgXCJkYW1tYWxvd2FyYWJpY1wiLFxuICAweDA2NGYsXG4gIFwiZGFtbWF0YW5hbHRvbmVhcmFiaWNcIixcbiAgMHgwNjRjLFxuICBcImRhbW1hdGFuYXJhYmljXCIsXG4gIDB4MDY0YyxcbiAgXCJkYW5kYVwiLFxuICAweDA5NjQsXG4gIFwiZGFyZ2FoZWJyZXdcIixcbiAgMHgwNWE3LFxuICBcImRhcmdhbGVmdGhlYnJld1wiLFxuICAweDA1YTcsXG4gIFwiZGFzaWFwbmV1bWF0YWN5cmlsbGljY21iXCIsXG4gIDB4MDQ4NSxcbiAgXCJkYmxHcmF2ZVwiLFxuICAweGY2ZDMsXG4gIFwiZGJsYW5nbGVicmFja2V0bGVmdFwiLFxuICAweDMwMGEsXG4gIFwiZGJsYW5nbGVicmFja2V0bGVmdHZlcnRpY2FsXCIsXG4gIDB4ZmUzZCxcbiAgXCJkYmxhbmdsZWJyYWNrZXRyaWdodFwiLFxuICAweDMwMGIsXG4gIFwiZGJsYW5nbGVicmFja2V0cmlnaHR2ZXJ0aWNhbFwiLFxuICAweGZlM2UsXG4gIFwiZGJsYXJjaGludmVydGVkYmVsb3djbWJcIixcbiAgMHgwMzJiLFxuICBcImRibGFycm93bGVmdFwiLFxuICAweDIxZDQsXG4gIFwiZGJsYXJyb3dyaWdodFwiLFxuICAweDIxZDIsXG4gIFwiZGJsZGFuZGFcIixcbiAgMHgwOTY1LFxuICBcImRibGdyYXZlXCIsXG4gIDB4ZjZkNixcbiAgXCJkYmxncmF2ZWNtYlwiLFxuICAweDAzMGYsXG4gIFwiZGJsaW50ZWdyYWxcIixcbiAgMHgyMjJjLFxuICBcImRibGxvd2xpbmVcIixcbiAgMHgyMDE3LFxuICBcImRibGxvd2xpbmVjbWJcIixcbiAgMHgwMzMzLFxuICBcImRibG92ZXJsaW5lY21iXCIsXG4gIDB4MDMzZixcbiAgXCJkYmxwcmltZW1vZFwiLFxuICAweDAyYmEsXG4gIFwiZGJsdmVydGljYWxiYXJcIixcbiAgMHgyMDE2LFxuICBcImRibHZlcnRpY2FsbGluZWFib3ZlY21iXCIsXG4gIDB4MDMwZSxcbiAgXCJkYm9wb21vZm9cIixcbiAgMHgzMTA5LFxuICBcImRic3F1YXJlXCIsXG4gIDB4MzNjOCxcbiAgXCJkY2Fyb25cIixcbiAgMHgwMTBmLFxuICBcImRjZWRpbGxhXCIsXG4gIDB4MWUxMSxcbiAgXCJkY2lyY2xlXCIsXG4gIDB4MjRkMyxcbiAgXCJkY2lyY3VtZmxleGJlbG93XCIsXG4gIDB4MWUxMyxcbiAgXCJkY3JvYXRcIixcbiAgMHgwMTExLFxuICBcImRkYWJlbmdhbGlcIixcbiAgMHgwOWExLFxuICBcImRkYWRldmFcIixcbiAgMHgwOTIxLFxuICBcImRkYWd1amFyYXRpXCIsXG4gIDB4MGFhMSxcbiAgXCJkZGFndXJtdWtoaVwiLFxuICAweDBhMjEsXG4gIFwiZGRhbGFyYWJpY1wiLFxuICAweDA2ODgsXG4gIFwiZGRhbGZpbmFsYXJhYmljXCIsXG4gIDB4ZmI4OSxcbiAgXCJkZGRoYWRldmFcIixcbiAgMHgwOTVjLFxuICBcImRkaGFiZW5nYWxpXCIsXG4gIDB4MDlhMixcbiAgXCJkZGhhZGV2YVwiLFxuICAweDA5MjIsXG4gIFwiZGRoYWd1amFyYXRpXCIsXG4gIDB4MGFhMixcbiAgXCJkZGhhZ3VybXVraGlcIixcbiAgMHgwYTIyLFxuICBcImRkb3RhY2NlbnRcIixcbiAgMHgxZTBiLFxuICBcImRkb3RiZWxvd1wiLFxuICAweDFlMGQsXG4gIFwiZGVjaW1hbHNlcGFyYXRvcmFyYWJpY1wiLFxuICAweDA2NmIsXG4gIFwiZGVjaW1hbHNlcGFyYXRvcnBlcnNpYW5cIixcbiAgMHgwNjZiLFxuICBcImRlY3lyaWxsaWNcIixcbiAgMHgwNDM0LFxuICBcImRlZ3JlZVwiLFxuICAweDAwYjAsXG4gIFwiZGVoaWhlYnJld1wiLFxuICAweDA1YWQsXG4gIFwiZGVoaXJhZ2FuYVwiLFxuICAweDMwNjcsXG4gIFwiZGVpY29wdGljXCIsXG4gIDB4MDNlZixcbiAgXCJkZWthdGFrYW5hXCIsXG4gIDB4MzBjNyxcbiAgXCJkZWxldGVsZWZ0XCIsXG4gIDB4MjMyYixcbiAgXCJkZWxldGVyaWdodFwiLFxuICAweDIzMjYsXG4gIFwiZGVsdGFcIixcbiAgMHgwM2I0LFxuICBcImRlbHRhdHVybmVkXCIsXG4gIDB4MDE4ZCxcbiAgXCJkZW5vbWluYXRvcm1pbnVzb25lbnVtZXJhdG9yYmVuZ2FsaVwiLFxuICAweDA5ZjgsXG4gIFwiZGV6aFwiLFxuICAweDAyYTQsXG4gIFwiZGhhYmVuZ2FsaVwiLFxuICAweDA5YTcsXG4gIFwiZGhhZGV2YVwiLFxuICAweDA5MjcsXG4gIFwiZGhhZ3VqYXJhdGlcIixcbiAgMHgwYWE3LFxuICBcImRoYWd1cm11a2hpXCIsXG4gIDB4MGEyNyxcbiAgXCJkaG9va1wiLFxuICAweDAyNTcsXG4gIFwiZGlhbHl0aWthdG9ub3NcIixcbiAgMHgwMzg1LFxuICBcImRpYWx5dGlrYXRvbm9zY21iXCIsXG4gIDB4MDM0NCxcbiAgXCJkaWFtb25kXCIsXG4gIDB4MjY2NixcbiAgXCJkaWFtb25kc3VpdHdoaXRlXCIsXG4gIDB4MjY2MixcbiAgXCJkaWVyZXNpc1wiLFxuICAweDAwYTgsXG4gIFwiZGllcmVzaXNhY3V0ZVwiLFxuICAweGY2ZDcsXG4gIFwiZGllcmVzaXNiZWxvd2NtYlwiLFxuICAweDAzMjQsXG4gIFwiZGllcmVzaXNjbWJcIixcbiAgMHgwMzA4LFxuICBcImRpZXJlc2lzZ3JhdmVcIixcbiAgMHhmNmQ4LFxuICBcImRpZXJlc2lzdG9ub3NcIixcbiAgMHgwMzg1LFxuICBcImRpaGlyYWdhbmFcIixcbiAgMHgzMDYyLFxuICBcImRpa2F0YWthbmFcIixcbiAgMHgzMGMyLFxuICBcImRpdHRvbWFya1wiLFxuICAweDMwMDMsXG4gIFwiZGl2aWRlXCIsXG4gIDB4MDBmNyxcbiAgXCJkaXZpZGVzXCIsXG4gIDB4MjIyMyxcbiAgXCJkaXZpc2lvbnNsYXNoXCIsXG4gIDB4MjIxNSxcbiAgXCJkamVjeXJpbGxpY1wiLFxuICAweDA0NTIsXG4gIFwiZGtzaGFkZVwiLFxuICAweDI1OTMsXG4gIFwiZGxpbmViZWxvd1wiLFxuICAweDFlMGYsXG4gIFwiZGxzcXVhcmVcIixcbiAgMHgzMzk3LFxuICBcImRtYWNyb25cIixcbiAgMHgwMTExLFxuICBcImRtb25vc3BhY2VcIixcbiAgMHhmZjQ0LFxuICBcImRuYmxvY2tcIixcbiAgMHgyNTg0LFxuICBcImRvY2hhZGF0aGFpXCIsXG4gIDB4MGUwZSxcbiAgXCJkb2Rla3RoYWlcIixcbiAgMHgwZTE0LFxuICBcImRvaGlyYWdhbmFcIixcbiAgMHgzMDY5LFxuICBcImRva2F0YWthbmFcIixcbiAgMHgzMGM5LFxuICBcImRvbGxhclwiLFxuICAweDAwMjQsXG4gIFwiZG9sbGFyaW5mZXJpb3JcIixcbiAgMHhmNmUzLFxuICBcImRvbGxhcm1vbm9zcGFjZVwiLFxuICAweGZmMDQsXG4gIFwiZG9sbGFyb2xkc3R5bGVcIixcbiAgMHhmNzI0LFxuICBcImRvbGxhcnNtYWxsXCIsXG4gIDB4ZmU2OSxcbiAgXCJkb2xsYXJzdXBlcmlvclwiLFxuICAweGY2ZTQsXG4gIFwiZG9uZ1wiLFxuICAweDIwYWIsXG4gIFwiZG9ydXNxdWFyZVwiLFxuICAweDMzMjYsXG4gIFwiZG90YWNjZW50XCIsXG4gIDB4MDJkOSxcbiAgXCJkb3RhY2NlbnRjbWJcIixcbiAgMHgwMzA3LFxuICBcImRvdGJlbG93Y21iXCIsXG4gIDB4MDMyMyxcbiAgXCJkb3RiZWxvd2NvbWJcIixcbiAgMHgwMzIzLFxuICBcImRvdGthdGFrYW5hXCIsXG4gIDB4MzBmYixcbiAgXCJkb3RsZXNzaVwiLFxuICAweDAxMzEsXG4gIFwiZG90bGVzc2pcIixcbiAgMHhmNmJlLFxuICBcImRvdGxlc3Nqc3Ryb2tlaG9va1wiLFxuICAweDAyODQsXG4gIFwiZG90bWF0aFwiLFxuICAweDIyYzUsXG4gIFwiZG90dGVkY2lyY2xlXCIsXG4gIDB4MjVjYyxcbiAgXCJkb3VibGV5b2RwYXRhaFwiLFxuICAweGZiMWYsXG4gIFwiZG91YmxleW9kcGF0YWhoZWJyZXdcIixcbiAgMHhmYjFmLFxuICBcImRvd250YWNrYmVsb3djbWJcIixcbiAgMHgwMzFlLFxuICBcImRvd250YWNrbW9kXCIsXG4gIDB4MDJkNSxcbiAgXCJkcGFyZW5cIixcbiAgMHgyNDlmLFxuICBcImRzdXBlcmlvclwiLFxuICAweGY2ZWIsXG4gIFwiZHRhaWxcIixcbiAgMHgwMjU2LFxuICBcImR0b3BiYXJcIixcbiAgMHgwMThjLFxuICBcImR1aGlyYWdhbmFcIixcbiAgMHgzMDY1LFxuICBcImR1a2F0YWthbmFcIixcbiAgMHgzMGM1LFxuICBcImR6XCIsXG4gIDB4MDFmMyxcbiAgXCJkemFsdG9uZVwiLFxuICAweDAyYTMsXG4gIFwiZHpjYXJvblwiLFxuICAweDAxYzYsXG4gIFwiZHpjdXJsXCIsXG4gIDB4MDJhNSxcbiAgXCJkemVhYmtoYXNpYW5jeXJpbGxpY1wiLFxuICAweDA0ZTEsXG4gIFwiZHplY3lyaWxsaWNcIixcbiAgMHgwNDU1LFxuICBcImR6aGVjeXJpbGxpY1wiLFxuICAweDA0NWYsXG4gIFwiZVwiLFxuICAweDAwNjUsXG4gIFwiZWFjdXRlXCIsXG4gIDB4MDBlOSxcbiAgXCJlYXJ0aFwiLFxuICAweDI2NDEsXG4gIFwiZWJlbmdhbGlcIixcbiAgMHgwOThmLFxuICBcImVib3BvbW9mb1wiLFxuICAweDMxMWMsXG4gIFwiZWJyZXZlXCIsXG4gIDB4MDExNSxcbiAgXCJlY2FuZHJhZGV2YVwiLFxuICAweDA5MGQsXG4gIFwiZWNhbmRyYWd1amFyYXRpXCIsXG4gIDB4MGE4ZCxcbiAgXCJlY2FuZHJhdm93ZWxzaWduZGV2YVwiLFxuICAweDA5NDUsXG4gIFwiZWNhbmRyYXZvd2Vsc2lnbmd1amFyYXRpXCIsXG4gIDB4MGFjNSxcbiAgXCJlY2Fyb25cIixcbiAgMHgwMTFiLFxuICBcImVjZWRpbGxhYnJldmVcIixcbiAgMHgxZTFkLFxuICBcImVjaGFybWVuaWFuXCIsXG4gIDB4MDU2NSxcbiAgXCJlY2h5aXduYXJtZW5pYW5cIixcbiAgMHgwNTg3LFxuICBcImVjaXJjbGVcIixcbiAgMHgyNGQ0LFxuICBcImVjaXJjdW1mbGV4XCIsXG4gIDB4MDBlYSxcbiAgXCJlY2lyY3VtZmxleGFjdXRlXCIsXG4gIDB4MWViZixcbiAgXCJlY2lyY3VtZmxleGJlbG93XCIsXG4gIDB4MWUxOSxcbiAgXCJlY2lyY3VtZmxleGRvdGJlbG93XCIsXG4gIDB4MWVjNyxcbiAgXCJlY2lyY3VtZmxleGdyYXZlXCIsXG4gIDB4MWVjMSxcbiAgXCJlY2lyY3VtZmxleGhvb2thYm92ZVwiLFxuICAweDFlYzMsXG4gIFwiZWNpcmN1bWZsZXh0aWxkZVwiLFxuICAweDFlYzUsXG4gIFwiZWN5cmlsbGljXCIsXG4gIDB4MDQ1NCxcbiAgXCJlZGJsZ3JhdmVcIixcbiAgMHgwMjA1LFxuICBcImVkZXZhXCIsXG4gIDB4MDkwZixcbiAgXCJlZGllcmVzaXNcIixcbiAgMHgwMGViLFxuICBcImVkb3RcIixcbiAgMHgwMTE3LFxuICBcImVkb3RhY2NlbnRcIixcbiAgMHgwMTE3LFxuICBcImVkb3RiZWxvd1wiLFxuICAweDFlYjksXG4gIFwiZWVndXJtdWtoaVwiLFxuICAweDBhMGYsXG4gIFwiZWVtYXRyYWd1cm11a2hpXCIsXG4gIDB4MGE0NyxcbiAgXCJlZmN5cmlsbGljXCIsXG4gIDB4MDQ0NCxcbiAgXCJlZ3JhdmVcIixcbiAgMHgwMGU4LFxuICBcImVndWphcmF0aVwiLFxuICAweDBhOGYsXG4gIFwiZWhhcm1lbmlhblwiLFxuICAweDA1NjcsXG4gIFwiZWhib3BvbW9mb1wiLFxuICAweDMxMWQsXG4gIFwiZWhpcmFnYW5hXCIsXG4gIDB4MzA0OCxcbiAgXCJlaG9va2Fib3ZlXCIsXG4gIDB4MWViYixcbiAgXCJlaWJvcG9tb2ZvXCIsXG4gIDB4MzExZixcbiAgXCJlaWdodFwiLFxuICAweDAwMzgsXG4gIFwiZWlnaHRhcmFiaWNcIixcbiAgMHgwNjY4LFxuICBcImVpZ2h0YmVuZ2FsaVwiLFxuICAweDA5ZWUsXG4gIFwiZWlnaHRjaXJjbGVcIixcbiAgMHgyNDY3LFxuICBcImVpZ2h0Y2lyY2xlaW52ZXJzZXNhbnNzZXJpZlwiLFxuICAweDI3OTEsXG4gIFwiZWlnaHRkZXZhXCIsXG4gIDB4MDk2ZSxcbiAgXCJlaWdodGVlbmNpcmNsZVwiLFxuICAweDI0NzEsXG4gIFwiZWlnaHRlZW5wYXJlblwiLFxuICAweDI0ODUsXG4gIFwiZWlnaHRlZW5wZXJpb2RcIixcbiAgMHgyNDk5LFxuICBcImVpZ2h0Z3VqYXJhdGlcIixcbiAgMHgwYWVlLFxuICBcImVpZ2h0Z3VybXVraGlcIixcbiAgMHgwYTZlLFxuICBcImVpZ2h0aGFja2FyYWJpY1wiLFxuICAweDA2NjgsXG4gIFwiZWlnaHRoYW5nemhvdVwiLFxuICAweDMwMjgsXG4gIFwiZWlnaHRobm90ZWJlYW1lZFwiLFxuICAweDI2NmIsXG4gIFwiZWlnaHRpZGVvZ3JhcGhpY3BhcmVuXCIsXG4gIDB4MzIyNyxcbiAgXCJlaWdodGluZmVyaW9yXCIsXG4gIDB4MjA4OCxcbiAgXCJlaWdodG1vbm9zcGFjZVwiLFxuICAweGZmMTgsXG4gIFwiZWlnaHRvbGRzdHlsZVwiLFxuICAweGY3MzgsXG4gIFwiZWlnaHRwYXJlblwiLFxuICAweDI0N2IsXG4gIFwiZWlnaHRwZXJpb2RcIixcbiAgMHgyNDhmLFxuICBcImVpZ2h0cGVyc2lhblwiLFxuICAweDA2ZjgsXG4gIFwiZWlnaHRyb21hblwiLFxuICAweDIxNzcsXG4gIFwiZWlnaHRzdXBlcmlvclwiLFxuICAweDIwNzgsXG4gIFwiZWlnaHR0aGFpXCIsXG4gIDB4MGU1OCxcbiAgXCJlaW52ZXJ0ZWRicmV2ZVwiLFxuICAweDAyMDcsXG4gIFwiZWlvdGlmaWVkY3lyaWxsaWNcIixcbiAgMHgwNDY1LFxuICBcImVrYXRha2FuYVwiLFxuICAweDMwYTgsXG4gIFwiZWthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY3NCxcbiAgXCJla29ua2FyZ3VybXVraGlcIixcbiAgMHgwYTc0LFxuICBcImVrb3JlYW5cIixcbiAgMHgzMTU0LFxuICBcImVsY3lyaWxsaWNcIixcbiAgMHgwNDNiLFxuICBcImVsZW1lbnRcIixcbiAgMHgyMjA4LFxuICBcImVsZXZlbmNpcmNsZVwiLFxuICAweDI0NmEsXG4gIFwiZWxldmVucGFyZW5cIixcbiAgMHgyNDdlLFxuICBcImVsZXZlbnBlcmlvZFwiLFxuICAweDI0OTIsXG4gIFwiZWxldmVucm9tYW5cIixcbiAgMHgyMTdhLFxuICBcImVsbGlwc2lzXCIsXG4gIDB4MjAyNixcbiAgXCJlbGxpcHNpc3ZlcnRpY2FsXCIsXG4gIDB4MjJlZSxcbiAgXCJlbWFjcm9uXCIsXG4gIDB4MDExMyxcbiAgXCJlbWFjcm9uYWN1dGVcIixcbiAgMHgxZTE3LFxuICBcImVtYWNyb25ncmF2ZVwiLFxuICAweDFlMTUsXG4gIFwiZW1jeXJpbGxpY1wiLFxuICAweDA0M2MsXG4gIFwiZW1kYXNoXCIsXG4gIDB4MjAxNCxcbiAgXCJlbWRhc2h2ZXJ0aWNhbFwiLFxuICAweGZlMzEsXG4gIFwiZW1vbm9zcGFjZVwiLFxuICAweGZmNDUsXG4gIFwiZW1waGFzaXNtYXJrYXJtZW5pYW5cIixcbiAgMHgwNTViLFxuICBcImVtcHR5c2V0XCIsXG4gIDB4MjIwNSxcbiAgXCJlbmJvcG9tb2ZvXCIsXG4gIDB4MzEyMyxcbiAgXCJlbmN5cmlsbGljXCIsXG4gIDB4MDQzZCxcbiAgXCJlbmRhc2hcIixcbiAgMHgyMDEzLFxuICBcImVuZGFzaHZlcnRpY2FsXCIsXG4gIDB4ZmUzMixcbiAgXCJlbmRlc2NlbmRlcmN5cmlsbGljXCIsXG4gIDB4MDRhMyxcbiAgXCJlbmdcIixcbiAgMHgwMTRiLFxuICBcImVuZ2JvcG9tb2ZvXCIsXG4gIDB4MzEyNSxcbiAgXCJlbmdoZWN5cmlsbGljXCIsXG4gIDB4MDRhNSxcbiAgXCJlbmhvb2tjeXJpbGxpY1wiLFxuICAweDA0YzgsXG4gIFwiZW5zcGFjZVwiLFxuICAweDIwMDIsXG4gIFwiZW9nb25la1wiLFxuICAweDAxMTksXG4gIFwiZW9rb3JlYW5cIixcbiAgMHgzMTUzLFxuICBcImVvcGVuXCIsXG4gIDB4MDI1YixcbiAgXCJlb3BlbmNsb3NlZFwiLFxuICAweDAyOWEsXG4gIFwiZW9wZW5yZXZlcnNlZFwiLFxuICAweDAyNWMsXG4gIFwiZW9wZW5yZXZlcnNlZGNsb3NlZFwiLFxuICAweDAyNWUsXG4gIFwiZW9wZW5yZXZlcnNlZGhvb2tcIixcbiAgMHgwMjVkLFxuICBcImVwYXJlblwiLFxuICAweDI0YTAsXG4gIFwiZXBzaWxvblwiLFxuICAweDAzYjUsXG4gIFwiZXBzaWxvbnRvbm9zXCIsXG4gIDB4MDNhZCxcbiAgXCJlcXVhbFwiLFxuICAweDAwM2QsXG4gIFwiZXF1YWxtb25vc3BhY2VcIixcbiAgMHhmZjFkLFxuICBcImVxdWFsc21hbGxcIixcbiAgMHhmZTY2LFxuICBcImVxdWFsc3VwZXJpb3JcIixcbiAgMHgyMDdjLFxuICBcImVxdWl2YWxlbmNlXCIsXG4gIDB4MjI2MSxcbiAgXCJlcmJvcG9tb2ZvXCIsXG4gIDB4MzEyNixcbiAgXCJlcmN5cmlsbGljXCIsXG4gIDB4MDQ0MCxcbiAgXCJlcmV2ZXJzZWRcIixcbiAgMHgwMjU4LFxuICBcImVyZXZlcnNlZGN5cmlsbGljXCIsXG4gIDB4MDQ0ZCxcbiAgXCJlc2N5cmlsbGljXCIsXG4gIDB4MDQ0MSxcbiAgXCJlc2Rlc2NlbmRlcmN5cmlsbGljXCIsXG4gIDB4MDRhYixcbiAgXCJlc2hcIixcbiAgMHgwMjgzLFxuICBcImVzaGN1cmxcIixcbiAgMHgwMjg2LFxuICBcImVzaG9ydGRldmFcIixcbiAgMHgwOTBlLFxuICBcImVzaG9ydHZvd2Vsc2lnbmRldmFcIixcbiAgMHgwOTQ2LFxuICBcImVzaHJldmVyc2VkbG9vcFwiLFxuICAweDAxYWEsXG4gIFwiZXNoc3F1YXRyZXZlcnNlZFwiLFxuICAweDAyODUsXG4gIFwiZXNtYWxsaGlyYWdhbmFcIixcbiAgMHgzMDQ3LFxuICBcImVzbWFsbGthdGFrYW5hXCIsXG4gIDB4MzBhNyxcbiAgXCJlc21hbGxrYXRha2FuYWhhbGZ3aWR0aFwiLFxuICAweGZmNmEsXG4gIFwiZXN0aW1hdGVkXCIsXG4gIDB4MjEyZSxcbiAgXCJlc3VwZXJpb3JcIixcbiAgMHhmNmVjLFxuICBcImV0YVwiLFxuICAweDAzYjcsXG4gIFwiZXRhcm1lbmlhblwiLFxuICAweDA1NjgsXG4gIFwiZXRhdG9ub3NcIixcbiAgMHgwM2FlLFxuICBcImV0aFwiLFxuICAweDAwZjAsXG4gIFwiZXRpbGRlXCIsXG4gIDB4MWViZCxcbiAgXCJldGlsZGViZWxvd1wiLFxuICAweDFlMWIsXG4gIFwiZXRuYWh0YWZvdWtoaGVicmV3XCIsXG4gIDB4MDU5MSxcbiAgXCJldG5haHRhZm91a2hsZWZ0aGVicmV3XCIsXG4gIDB4MDU5MSxcbiAgXCJldG5haHRhaGVicmV3XCIsXG4gIDB4MDU5MSxcbiAgXCJldG5haHRhbGVmdGhlYnJld1wiLFxuICAweDA1OTEsXG4gIFwiZXR1cm5lZFwiLFxuICAweDAxZGQsXG4gIFwiZXVrb3JlYW5cIixcbiAgMHgzMTYxLFxuICBcImV1cm9cIixcbiAgMHgyMGFjLFxuICBcImV2b3dlbHNpZ25iZW5nYWxpXCIsXG4gIDB4MDljNyxcbiAgXCJldm93ZWxzaWduZGV2YVwiLFxuICAweDA5NDcsXG4gIFwiZXZvd2Vsc2lnbmd1amFyYXRpXCIsXG4gIDB4MGFjNyxcbiAgXCJleGNsYW1cIixcbiAgMHgwMDIxLFxuICBcImV4Y2xhbWFybWVuaWFuXCIsXG4gIDB4MDU1YyxcbiAgXCJleGNsYW1kYmxcIixcbiAgMHgyMDNjLFxuICBcImV4Y2xhbWRvd25cIixcbiAgMHgwMGExLFxuICBcImV4Y2xhbWRvd25zbWFsbFwiLFxuICAweGY3YTEsXG4gIFwiZXhjbGFtbW9ub3NwYWNlXCIsXG4gIDB4ZmYwMSxcbiAgXCJleGNsYW1zbWFsbFwiLFxuICAweGY3MjEsXG4gIFwiZXhpc3RlbnRpYWxcIixcbiAgMHgyMjAzLFxuICBcImV6aFwiLFxuICAweDAyOTIsXG4gIFwiZXpoY2Fyb25cIixcbiAgMHgwMWVmLFxuICBcImV6aGN1cmxcIixcbiAgMHgwMjkzLFxuICBcImV6aHJldmVyc2VkXCIsXG4gIDB4MDFiOSxcbiAgXCJlemh0YWlsXCIsXG4gIDB4MDFiYSxcbiAgXCJmXCIsXG4gIDB4MDA2NixcbiAgXCJmYWRldmFcIixcbiAgMHgwOTVlLFxuICBcImZhZ3VybXVraGlcIixcbiAgMHgwYTVlLFxuICBcImZhaHJlbmhlaXRcIixcbiAgMHgyMTA5LFxuICBcImZhdGhhYXJhYmljXCIsXG4gIDB4MDY0ZSxcbiAgXCJmYXRoYWxvd2FyYWJpY1wiLFxuICAweDA2NGUsXG4gIFwiZmF0aGF0YW5hcmFiaWNcIixcbiAgMHgwNjRiLFxuICBcImZib3BvbW9mb1wiLFxuICAweDMxMDgsXG4gIFwiZmNpcmNsZVwiLFxuICAweDI0ZDUsXG4gIFwiZmRvdGFjY2VudFwiLFxuICAweDFlMWYsXG4gIFwiZmVoYXJhYmljXCIsXG4gIDB4MDY0MSxcbiAgXCJmZWhhcm1lbmlhblwiLFxuICAweDA1ODYsXG4gIFwiZmVoZmluYWxhcmFiaWNcIixcbiAgMHhmZWQyLFxuICBcImZlaGluaXRpYWxhcmFiaWNcIixcbiAgMHhmZWQzLFxuICBcImZlaG1lZGlhbGFyYWJpY1wiLFxuICAweGZlZDQsXG4gIFwiZmVpY29wdGljXCIsXG4gIDB4MDNlNSxcbiAgXCJmZW1hbGVcIixcbiAgMHgyNjQwLFxuICBcImZmXCIsXG4gIDB4ZmIwMCxcbiAgXCJmX2ZcIixcbiAgMHhmYjAwLFxuICBcImZmaVwiLFxuICAweGZiMDMsXG4gIFwiZmZsXCIsXG4gIDB4ZmIwNCxcbiAgXCJmaVwiLFxuICAweGZiMDEsXG4gIFwiZmlmdGVlbmNpcmNsZVwiLFxuICAweDI0NmUsXG4gIFwiZmlmdGVlbnBhcmVuXCIsXG4gIDB4MjQ4MixcbiAgXCJmaWZ0ZWVucGVyaW9kXCIsXG4gIDB4MjQ5NixcbiAgXCJmaWd1cmVkYXNoXCIsXG4gIDB4MjAxMixcbiAgXCJmaWxsZWRib3hcIixcbiAgMHgyNWEwLFxuICBcImZpbGxlZHJlY3RcIixcbiAgMHgyNWFjLFxuICBcImZpbmFsa2FmXCIsXG4gIDB4MDVkYSxcbiAgXCJmaW5hbGthZmRhZ2VzaFwiLFxuICAweGZiM2EsXG4gIFwiZmluYWxrYWZkYWdlc2hoZWJyZXdcIixcbiAgMHhmYjNhLFxuICBcImZpbmFsa2FmaGVicmV3XCIsXG4gIDB4MDVkYSxcbiAgXCJmaW5hbG1lbVwiLFxuICAweDA1ZGQsXG4gIFwiZmluYWxtZW1oZWJyZXdcIixcbiAgMHgwNWRkLFxuICBcImZpbmFsbnVuXCIsXG4gIDB4MDVkZixcbiAgXCJmaW5hbG51bmhlYnJld1wiLFxuICAweDA1ZGYsXG4gIFwiZmluYWxwZVwiLFxuICAweDA1ZTMsXG4gIFwiZmluYWxwZWhlYnJld1wiLFxuICAweDA1ZTMsXG4gIFwiZmluYWx0c2FkaVwiLFxuICAweDA1ZTUsXG4gIFwiZmluYWx0c2FkaWhlYnJld1wiLFxuICAweDA1ZTUsXG4gIFwiZmlyc3R0b25lY2hpbmVzZVwiLFxuICAweDAyYzksXG4gIFwiZmlzaGV5ZVwiLFxuICAweDI1YzksXG4gIFwiZml0YWN5cmlsbGljXCIsXG4gIDB4MDQ3MyxcbiAgXCJmaXZlXCIsXG4gIDB4MDAzNSxcbiAgXCJmaXZlYXJhYmljXCIsXG4gIDB4MDY2NSxcbiAgXCJmaXZlYmVuZ2FsaVwiLFxuICAweDA5ZWIsXG4gIFwiZml2ZWNpcmNsZVwiLFxuICAweDI0NjQsXG4gIFwiZml2ZWNpcmNsZWludmVyc2VzYW5zc2VyaWZcIixcbiAgMHgyNzhlLFxuICBcImZpdmVkZXZhXCIsXG4gIDB4MDk2YixcbiAgXCJmaXZlZWlnaHRoc1wiLFxuICAweDIxNWQsXG4gIFwiZml2ZWd1amFyYXRpXCIsXG4gIDB4MGFlYixcbiAgXCJmaXZlZ3VybXVraGlcIixcbiAgMHgwYTZiLFxuICBcImZpdmVoYWNrYXJhYmljXCIsXG4gIDB4MDY2NSxcbiAgXCJmaXZlaGFuZ3pob3VcIixcbiAgMHgzMDI1LFxuICBcImZpdmVpZGVvZ3JhcGhpY3BhcmVuXCIsXG4gIDB4MzIyNCxcbiAgXCJmaXZlaW5mZXJpb3JcIixcbiAgMHgyMDg1LFxuICBcImZpdmVtb25vc3BhY2VcIixcbiAgMHhmZjE1LFxuICBcImZpdmVvbGRzdHlsZVwiLFxuICAweGY3MzUsXG4gIFwiZml2ZXBhcmVuXCIsXG4gIDB4MjQ3OCxcbiAgXCJmaXZlcGVyaW9kXCIsXG4gIDB4MjQ4YyxcbiAgXCJmaXZlcGVyc2lhblwiLFxuICAweDA2ZjUsXG4gIFwiZml2ZXJvbWFuXCIsXG4gIDB4MjE3NCxcbiAgXCJmaXZlc3VwZXJpb3JcIixcbiAgMHgyMDc1LFxuICBcImZpdmV0aGFpXCIsXG4gIDB4MGU1NSxcbiAgXCJmbFwiLFxuICAweGZiMDIsXG4gIFwiZmxvcmluXCIsXG4gIDB4MDE5MixcbiAgXCJmbW9ub3NwYWNlXCIsXG4gIDB4ZmY0NixcbiAgXCJmbXNxdWFyZVwiLFxuICAweDMzOTksXG4gIFwiZm9mYW50aGFpXCIsXG4gIDB4MGUxZixcbiAgXCJmb2ZhdGhhaVwiLFxuICAweDBlMWQsXG4gIFwiZm9uZ21hbnRoYWlcIixcbiAgMHgwZTRmLFxuICBcImZvcmFsbFwiLFxuICAweDIyMDAsXG4gIFwiZm91clwiLFxuICAweDAwMzQsXG4gIFwiZm91cmFyYWJpY1wiLFxuICAweDA2NjQsXG4gIFwiZm91cmJlbmdhbGlcIixcbiAgMHgwOWVhLFxuICBcImZvdXJjaXJjbGVcIixcbiAgMHgyNDYzLFxuICBcImZvdXJjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmXCIsXG4gIDB4Mjc4ZCxcbiAgXCJmb3VyZGV2YVwiLFxuICAweDA5NmEsXG4gIFwiZm91cmd1amFyYXRpXCIsXG4gIDB4MGFlYSxcbiAgXCJmb3VyZ3VybXVraGlcIixcbiAgMHgwYTZhLFxuICBcImZvdXJoYWNrYXJhYmljXCIsXG4gIDB4MDY2NCxcbiAgXCJmb3VyaGFuZ3pob3VcIixcbiAgMHgzMDI0LFxuICBcImZvdXJpZGVvZ3JhcGhpY3BhcmVuXCIsXG4gIDB4MzIyMyxcbiAgXCJmb3VyaW5mZXJpb3JcIixcbiAgMHgyMDg0LFxuICBcImZvdXJtb25vc3BhY2VcIixcbiAgMHhmZjE0LFxuICBcImZvdXJudW1lcmF0b3JiZW5nYWxpXCIsXG4gIDB4MDlmNyxcbiAgXCJmb3Vyb2xkc3R5bGVcIixcbiAgMHhmNzM0LFxuICBcImZvdXJwYXJlblwiLFxuICAweDI0NzcsXG4gIFwiZm91cnBlcmlvZFwiLFxuICAweDI0OGIsXG4gIFwiZm91cnBlcnNpYW5cIixcbiAgMHgwNmY0LFxuICBcImZvdXJyb21hblwiLFxuICAweDIxNzMsXG4gIFwiZm91cnN1cGVyaW9yXCIsXG4gIDB4MjA3NCxcbiAgXCJmb3VydGVlbmNpcmNsZVwiLFxuICAweDI0NmQsXG4gIFwiZm91cnRlZW5wYXJlblwiLFxuICAweDI0ODEsXG4gIFwiZm91cnRlZW5wZXJpb2RcIixcbiAgMHgyNDk1LFxuICBcImZvdXJ0aGFpXCIsXG4gIDB4MGU1NCxcbiAgXCJmb3VydGh0b25lY2hpbmVzZVwiLFxuICAweDAyY2IsXG4gIFwiZnBhcmVuXCIsXG4gIDB4MjRhMSxcbiAgXCJmcmFjdGlvblwiLFxuICAweDIwNDQsXG4gIFwiZnJhbmNcIixcbiAgMHgyMGEzLFxuICBcImdcIixcbiAgMHgwMDY3LFxuICBcImdhYmVuZ2FsaVwiLFxuICAweDA5OTcsXG4gIFwiZ2FjdXRlXCIsXG4gIDB4MDFmNSxcbiAgXCJnYWRldmFcIixcbiAgMHgwOTE3LFxuICBcImdhZmFyYWJpY1wiLFxuICAweDA2YWYsXG4gIFwiZ2FmZmluYWxhcmFiaWNcIixcbiAgMHhmYjkzLFxuICBcImdhZmluaXRpYWxhcmFiaWNcIixcbiAgMHhmYjk0LFxuICBcImdhZm1lZGlhbGFyYWJpY1wiLFxuICAweGZiOTUsXG4gIFwiZ2FndWphcmF0aVwiLFxuICAweDBhOTcsXG4gIFwiZ2FndXJtdWtoaVwiLFxuICAweDBhMTcsXG4gIFwiZ2FoaXJhZ2FuYVwiLFxuICAweDMwNGMsXG4gIFwiZ2FrYXRha2FuYVwiLFxuICAweDMwYWMsXG4gIFwiZ2FtbWFcIixcbiAgMHgwM2IzLFxuICBcImdhbW1hbGF0aW5zbWFsbFwiLFxuICAweDAyNjMsXG4gIFwiZ2FtbWFzdXBlcmlvclwiLFxuICAweDAyZTAsXG4gIFwiZ2FuZ2lhY29wdGljXCIsXG4gIDB4MDNlYixcbiAgXCJnYm9wb21vZm9cIixcbiAgMHgzMTBkLFxuICBcImdicmV2ZVwiLFxuICAweDAxMWYsXG4gIFwiZ2Nhcm9uXCIsXG4gIDB4MDFlNyxcbiAgXCJnY2VkaWxsYVwiLFxuICAweDAxMjMsXG4gIFwiZ2NpcmNsZVwiLFxuICAweDI0ZDYsXG4gIFwiZ2NpcmN1bWZsZXhcIixcbiAgMHgwMTFkLFxuICBcImdjb21tYWFjY2VudFwiLFxuICAweDAxMjMsXG4gIFwiZ2RvdFwiLFxuICAweDAxMjEsXG4gIFwiZ2RvdGFjY2VudFwiLFxuICAweDAxMjEsXG4gIFwiZ2VjeXJpbGxpY1wiLFxuICAweDA0MzMsXG4gIFwiZ2VoaXJhZ2FuYVwiLFxuICAweDMwNTIsXG4gIFwiZ2VrYXRha2FuYVwiLFxuICAweDMwYjIsXG4gIFwiZ2VvbWV0cmljYWxseWVxdWFsXCIsXG4gIDB4MjI1MSxcbiAgXCJnZXJlc2hhY2NlbnRoZWJyZXdcIixcbiAgMHgwNTljLFxuICBcImdlcmVzaGhlYnJld1wiLFxuICAweDA1ZjMsXG4gIFwiZ2VyZXNobXVxZGFtaGVicmV3XCIsXG4gIDB4MDU5ZCxcbiAgXCJnZXJtYW5kYmxzXCIsXG4gIDB4MDBkZixcbiAgXCJnZXJzaGF5aW1hY2NlbnRoZWJyZXdcIixcbiAgMHgwNTllLFxuICBcImdlcnNoYXlpbWhlYnJld1wiLFxuICAweDA1ZjQsXG4gIFwiZ2V0YW1hcmtcIixcbiAgMHgzMDEzLFxuICBcImdoYWJlbmdhbGlcIixcbiAgMHgwOTk4LFxuICBcImdoYWRhcm1lbmlhblwiLFxuICAweDA1NzIsXG4gIFwiZ2hhZGV2YVwiLFxuICAweDA5MTgsXG4gIFwiZ2hhZ3VqYXJhdGlcIixcbiAgMHgwYTk4LFxuICBcImdoYWd1cm11a2hpXCIsXG4gIDB4MGExOCxcbiAgXCJnaGFpbmFyYWJpY1wiLFxuICAweDA2M2EsXG4gIFwiZ2hhaW5maW5hbGFyYWJpY1wiLFxuICAweGZlY2UsXG4gIFwiZ2hhaW5pbml0aWFsYXJhYmljXCIsXG4gIDB4ZmVjZixcbiAgXCJnaGFpbm1lZGlhbGFyYWJpY1wiLFxuICAweGZlZDAsXG4gIFwiZ2hlbWlkZGxlaG9va2N5cmlsbGljXCIsXG4gIDB4MDQ5NSxcbiAgXCJnaGVzdHJva2VjeXJpbGxpY1wiLFxuICAweDA0OTMsXG4gIFwiZ2hldXB0dXJuY3lyaWxsaWNcIixcbiAgMHgwNDkxLFxuICBcImdoaGFkZXZhXCIsXG4gIDB4MDk1YSxcbiAgXCJnaGhhZ3VybXVraGlcIixcbiAgMHgwYTVhLFxuICBcImdob29rXCIsXG4gIDB4MDI2MCxcbiAgXCJnaHpzcXVhcmVcIixcbiAgMHgzMzkzLFxuICBcImdpaGlyYWdhbmFcIixcbiAgMHgzMDRlLFxuICBcImdpa2F0YWthbmFcIixcbiAgMHgzMGFlLFxuICBcImdpbWFybWVuaWFuXCIsXG4gIDB4MDU2MyxcbiAgXCJnaW1lbFwiLFxuICAweDA1ZDIsXG4gIFwiZ2ltZWxkYWdlc2hcIixcbiAgMHhmYjMyLFxuICBcImdpbWVsZGFnZXNoaGVicmV3XCIsXG4gIDB4ZmIzMixcbiAgXCJnaW1lbGhlYnJld1wiLFxuICAweDA1ZDIsXG4gIFwiZ2plY3lyaWxsaWNcIixcbiAgMHgwNDUzLFxuICBcImdsb3R0YWxpbnZlcnRlZHN0cm9rZVwiLFxuICAweDAxYmUsXG4gIFwiZ2xvdHRhbHN0b3BcIixcbiAgMHgwMjk0LFxuICBcImdsb3R0YWxzdG9waW52ZXJ0ZWRcIixcbiAgMHgwMjk2LFxuICBcImdsb3R0YWxzdG9wbW9kXCIsXG4gIDB4MDJjMCxcbiAgXCJnbG90dGFsc3RvcHJldmVyc2VkXCIsXG4gIDB4MDI5NSxcbiAgXCJnbG90dGFsc3RvcHJldmVyc2VkbW9kXCIsXG4gIDB4MDJjMSxcbiAgXCJnbG90dGFsc3RvcHJldmVyc2Vkc3VwZXJpb3JcIixcbiAgMHgwMmU0LFxuICBcImdsb3R0YWxzdG9wc3Ryb2tlXCIsXG4gIDB4MDJhMSxcbiAgXCJnbG90dGFsc3RvcHN0cm9rZXJldmVyc2VkXCIsXG4gIDB4MDJhMixcbiAgXCJnbWFjcm9uXCIsXG4gIDB4MWUyMSxcbiAgXCJnbW9ub3NwYWNlXCIsXG4gIDB4ZmY0NyxcbiAgXCJnb2hpcmFnYW5hXCIsXG4gIDB4MzA1NCxcbiAgXCJnb2thdGFrYW5hXCIsXG4gIDB4MzBiNCxcbiAgXCJncGFyZW5cIixcbiAgMHgyNGEyLFxuICBcImdwYXNxdWFyZVwiLFxuICAweDMzYWMsXG4gIFwiZ3JhZGllbnRcIixcbiAgMHgyMjA3LFxuICBcImdyYXZlXCIsXG4gIDB4MDA2MCxcbiAgXCJncmF2ZWJlbG93Y21iXCIsXG4gIDB4MDMxNixcbiAgXCJncmF2ZWNtYlwiLFxuICAweDAzMDAsXG4gIFwiZ3JhdmVjb21iXCIsXG4gIDB4MDMwMCxcbiAgXCJncmF2ZWRldmFcIixcbiAgMHgwOTUzLFxuICBcImdyYXZlbG93bW9kXCIsXG4gIDB4MDJjZSxcbiAgXCJncmF2ZW1vbm9zcGFjZVwiLFxuICAweGZmNDAsXG4gIFwiZ3JhdmV0b25lY21iXCIsXG4gIDB4MDM0MCxcbiAgXCJncmVhdGVyXCIsXG4gIDB4MDAzZSxcbiAgXCJncmVhdGVyZXF1YWxcIixcbiAgMHgyMjY1LFxuICBcImdyZWF0ZXJlcXVhbG9ybGVzc1wiLFxuICAweDIyZGIsXG4gIFwiZ3JlYXRlcm1vbm9zcGFjZVwiLFxuICAweGZmMWUsXG4gIFwiZ3JlYXRlcm9yZXF1aXZhbGVudFwiLFxuICAweDIyNzMsXG4gIFwiZ3JlYXRlcm9ybGVzc1wiLFxuICAweDIyNzcsXG4gIFwiZ3JlYXRlcm92ZXJlcXVhbFwiLFxuICAweDIyNjcsXG4gIFwiZ3JlYXRlcnNtYWxsXCIsXG4gIDB4ZmU2NSxcbiAgXCJnc2NyaXB0XCIsXG4gIDB4MDI2MSxcbiAgXCJnc3Ryb2tlXCIsXG4gIDB4MDFlNSxcbiAgXCJndWhpcmFnYW5hXCIsXG4gIDB4MzA1MCxcbiAgXCJndWlsbGVtb3RsZWZ0XCIsXG4gIDB4MDBhYixcbiAgXCJndWlsbGVtb3RyaWdodFwiLFxuICAweDAwYmIsXG4gIFwiZ3VpbHNpbmdsbGVmdFwiLFxuICAweDIwMzksXG4gIFwiZ3VpbHNpbmdscmlnaHRcIixcbiAgMHgyMDNhLFxuICBcImd1a2F0YWthbmFcIixcbiAgMHgzMGIwLFxuICBcImd1cmFtdXNxdWFyZVwiLFxuICAweDMzMTgsXG4gIFwiZ3lzcXVhcmVcIixcbiAgMHgzM2M5LFxuICBcImhcIixcbiAgMHgwMDY4LFxuICBcImhhYWJraGFzaWFuY3lyaWxsaWNcIixcbiAgMHgwNGE5LFxuICBcImhhYWx0b25lYXJhYmljXCIsXG4gIDB4MDZjMSxcbiAgXCJoYWJlbmdhbGlcIixcbiAgMHgwOWI5LFxuICBcImhhZGVzY2VuZGVyY3lyaWxsaWNcIixcbiAgMHgwNGIzLFxuICBcImhhZGV2YVwiLFxuICAweDA5MzksXG4gIFwiaGFndWphcmF0aVwiLFxuICAweDBhYjksXG4gIFwiaGFndXJtdWtoaVwiLFxuICAweDBhMzksXG4gIFwiaGFoYXJhYmljXCIsXG4gIDB4MDYyZCxcbiAgXCJoYWhmaW5hbGFyYWJpY1wiLFxuICAweGZlYTIsXG4gIFwiaGFoaW5pdGlhbGFyYWJpY1wiLFxuICAweGZlYTMsXG4gIFwiaGFoaXJhZ2FuYVwiLFxuICAweDMwNmYsXG4gIFwiaGFobWVkaWFsYXJhYmljXCIsXG4gIDB4ZmVhNCxcbiAgXCJoYWl0dXNxdWFyZVwiLFxuICAweDMzMmEsXG4gIFwiaGFrYXRha2FuYVwiLFxuICAweDMwY2YsXG4gIFwiaGFrYXRha2FuYWhhbGZ3aWR0aFwiLFxuICAweGZmOGEsXG4gIFwiaGFsYW50Z3VybXVraGlcIixcbiAgMHgwYTRkLFxuICBcImhhbXphYXJhYmljXCIsXG4gIDB4MDYyMSxcbiAgXCJoYW16YWxvd2FyYWJpY1wiLFxuICAweDA2MjEsXG4gIFwiaGFuZ3VsZmlsbGVyXCIsXG4gIDB4MzE2NCxcbiAgXCJoYXJkc2lnbmN5cmlsbGljXCIsXG4gIDB4MDQ0YSxcbiAgXCJoYXJwb29ubGVmdGJhcmJ1cFwiLFxuICAweDIxYmMsXG4gIFwiaGFycG9vbnJpZ2h0YmFyYnVwXCIsXG4gIDB4MjFjMCxcbiAgXCJoYXNxdWFyZVwiLFxuICAweDMzY2EsXG4gIFwiaGF0YWZwYXRhaFwiLFxuICAweDA1YjIsXG4gIFwiaGF0YWZwYXRhaDE2XCIsXG4gIDB4MDViMixcbiAgXCJoYXRhZnBhdGFoMjNcIixcbiAgMHgwNWIyLFxuICBcImhhdGFmcGF0YWgyZlwiLFxuICAweDA1YjIsXG4gIFwiaGF0YWZwYXRhaGhlYnJld1wiLFxuICAweDA1YjIsXG4gIFwiaGF0YWZwYXRhaG5hcnJvd2hlYnJld1wiLFxuICAweDA1YjIsXG4gIFwiaGF0YWZwYXRhaHF1YXJ0ZXJoZWJyZXdcIixcbiAgMHgwNWIyLFxuICBcImhhdGFmcGF0YWh3aWRlaGVicmV3XCIsXG4gIDB4MDViMixcbiAgXCJoYXRhZnFhbWF0c1wiLFxuICAweDA1YjMsXG4gIFwiaGF0YWZxYW1hdHMxYlwiLFxuICAweDA1YjMsXG4gIFwiaGF0YWZxYW1hdHMyOFwiLFxuICAweDA1YjMsXG4gIFwiaGF0YWZxYW1hdHMzNFwiLFxuICAweDA1YjMsXG4gIFwiaGF0YWZxYW1hdHNoZWJyZXdcIixcbiAgMHgwNWIzLFxuICBcImhhdGFmcWFtYXRzbmFycm93aGVicmV3XCIsXG4gIDB4MDViMyxcbiAgXCJoYXRhZnFhbWF0c3F1YXJ0ZXJoZWJyZXdcIixcbiAgMHgwNWIzLFxuICBcImhhdGFmcWFtYXRzd2lkZWhlYnJld1wiLFxuICAweDA1YjMsXG4gIFwiaGF0YWZzZWdvbFwiLFxuICAweDA1YjEsXG4gIFwiaGF0YWZzZWdvbDE3XCIsXG4gIDB4MDViMSxcbiAgXCJoYXRhZnNlZ29sMjRcIixcbiAgMHgwNWIxLFxuICBcImhhdGFmc2Vnb2wzMFwiLFxuICAweDA1YjEsXG4gIFwiaGF0YWZzZWdvbGhlYnJld1wiLFxuICAweDA1YjEsXG4gIFwiaGF0YWZzZWdvbG5hcnJvd2hlYnJld1wiLFxuICAweDA1YjEsXG4gIFwiaGF0YWZzZWdvbHF1YXJ0ZXJoZWJyZXdcIixcbiAgMHgwNWIxLFxuICBcImhhdGFmc2Vnb2x3aWRlaGVicmV3XCIsXG4gIDB4MDViMSxcbiAgXCJoYmFyXCIsXG4gIDB4MDEyNyxcbiAgXCJoYm9wb21vZm9cIixcbiAgMHgzMTBmLFxuICBcImhicmV2ZWJlbG93XCIsXG4gIDB4MWUyYixcbiAgXCJoY2VkaWxsYVwiLFxuICAweDFlMjksXG4gIFwiaGNpcmNsZVwiLFxuICAweDI0ZDcsXG4gIFwiaGNpcmN1bWZsZXhcIixcbiAgMHgwMTI1LFxuICBcImhkaWVyZXNpc1wiLFxuICAweDFlMjcsXG4gIFwiaGRvdGFjY2VudFwiLFxuICAweDFlMjMsXG4gIFwiaGRvdGJlbG93XCIsXG4gIDB4MWUyNSxcbiAgXCJoZVwiLFxuICAweDA1ZDQsXG4gIFwiaGVhcnRcIixcbiAgMHgyNjY1LFxuICBcImhlYXJ0c3VpdGJsYWNrXCIsXG4gIDB4MjY2NSxcbiAgXCJoZWFydHN1aXR3aGl0ZVwiLFxuICAweDI2NjEsXG4gIFwiaGVkYWdlc2hcIixcbiAgMHhmYjM0LFxuICBcImhlZGFnZXNoaGVicmV3XCIsXG4gIDB4ZmIzNCxcbiAgXCJoZWhhbHRvbmVhcmFiaWNcIixcbiAgMHgwNmMxLFxuICBcImhlaGFyYWJpY1wiLFxuICAweDA2NDcsXG4gIFwiaGVoZWJyZXdcIixcbiAgMHgwNWQ0LFxuICBcImhlaGZpbmFsYWx0b25lYXJhYmljXCIsXG4gIDB4ZmJhNyxcbiAgXCJoZWhmaW5hbGFsdHR3b2FyYWJpY1wiLFxuICAweGZlZWEsXG4gIFwiaGVoZmluYWxhcmFiaWNcIixcbiAgMHhmZWVhLFxuICBcImhlaGhhbXphYWJvdmVmaW5hbGFyYWJpY1wiLFxuICAweGZiYTUsXG4gIFwiaGVoaGFtemFhYm92ZWlzb2xhdGVkYXJhYmljXCIsXG4gIDB4ZmJhNCxcbiAgXCJoZWhpbml0aWFsYWx0b25lYXJhYmljXCIsXG4gIDB4ZmJhOCxcbiAgXCJoZWhpbml0aWFsYXJhYmljXCIsXG4gIDB4ZmVlYixcbiAgXCJoZWhpcmFnYW5hXCIsXG4gIDB4MzA3OCxcbiAgXCJoZWhtZWRpYWxhbHRvbmVhcmFiaWNcIixcbiAgMHhmYmE5LFxuICBcImhlaG1lZGlhbGFyYWJpY1wiLFxuICAweGZlZWMsXG4gIFwiaGVpc2VpZXJhc3F1YXJlXCIsXG4gIDB4MzM3YixcbiAgXCJoZWthdGFrYW5hXCIsXG4gIDB4MzBkOCxcbiAgXCJoZWthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY4ZCxcbiAgXCJoZWt1dGFhcnVzcXVhcmVcIixcbiAgMHgzMzM2LFxuICBcImhlbmdob29rXCIsXG4gIDB4MDI2NyxcbiAgXCJoZXJ1dHVzcXVhcmVcIixcbiAgMHgzMzM5LFxuICBcImhldFwiLFxuICAweDA1ZDcsXG4gIFwiaGV0aGVicmV3XCIsXG4gIDB4MDVkNyxcbiAgXCJoaG9va1wiLFxuICAweDAyNjYsXG4gIFwiaGhvb2tzdXBlcmlvclwiLFxuICAweDAyYjEsXG4gIFwiaGlldWhhY2lyY2xla29yZWFuXCIsXG4gIDB4MzI3YixcbiAgXCJoaWV1aGFwYXJlbmtvcmVhblwiLFxuICAweDMyMWIsXG4gIFwiaGlldWhjaXJjbGVrb3JlYW5cIixcbiAgMHgzMjZkLFxuICBcImhpZXVoa29yZWFuXCIsXG4gIDB4MzE0ZSxcbiAgXCJoaWV1aHBhcmVua29yZWFuXCIsXG4gIDB4MzIwZCxcbiAgXCJoaWhpcmFnYW5hXCIsXG4gIDB4MzA3MixcbiAgXCJoaWthdGFrYW5hXCIsXG4gIDB4MzBkMixcbiAgXCJoaWthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY4YixcbiAgXCJoaXJpcVwiLFxuICAweDA1YjQsXG4gIFwiaGlyaXExNFwiLFxuICAweDA1YjQsXG4gIFwiaGlyaXEyMVwiLFxuICAweDA1YjQsXG4gIFwiaGlyaXEyZFwiLFxuICAweDA1YjQsXG4gIFwiaGlyaXFoZWJyZXdcIixcbiAgMHgwNWI0LFxuICBcImhpcmlxbmFycm93aGVicmV3XCIsXG4gIDB4MDViNCxcbiAgXCJoaXJpcXF1YXJ0ZXJoZWJyZXdcIixcbiAgMHgwNWI0LFxuICBcImhpcmlxd2lkZWhlYnJld1wiLFxuICAweDA1YjQsXG4gIFwiaGxpbmViZWxvd1wiLFxuICAweDFlOTYsXG4gIFwiaG1vbm9zcGFjZVwiLFxuICAweGZmNDgsXG4gIFwiaG9hcm1lbmlhblwiLFxuICAweDA1NzAsXG4gIFwiaG9oaXB0aGFpXCIsXG4gIDB4MGUyYixcbiAgXCJob2hpcmFnYW5hXCIsXG4gIDB4MzA3YixcbiAgXCJob2thdGFrYW5hXCIsXG4gIDB4MzBkYixcbiAgXCJob2thdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY4ZSxcbiAgXCJob2xhbVwiLFxuICAweDA1YjksXG4gIFwiaG9sYW0xOVwiLFxuICAweDA1YjksXG4gIFwiaG9sYW0yNlwiLFxuICAweDA1YjksXG4gIFwiaG9sYW0zMlwiLFxuICAweDA1YjksXG4gIFwiaG9sYW1oZWJyZXdcIixcbiAgMHgwNWI5LFxuICBcImhvbGFtbmFycm93aGVicmV3XCIsXG4gIDB4MDViOSxcbiAgXCJob2xhbXF1YXJ0ZXJoZWJyZXdcIixcbiAgMHgwNWI5LFxuICBcImhvbGFtd2lkZWhlYnJld1wiLFxuICAweDA1YjksXG4gIFwiaG9ub2todWt0aGFpXCIsXG4gIDB4MGUyZSxcbiAgXCJob29rYWJvdmVjb21iXCIsXG4gIDB4MDMwOSxcbiAgXCJob29rY21iXCIsXG4gIDB4MDMwOSxcbiAgXCJob29rcGFsYXRhbGl6ZWRiZWxvd2NtYlwiLFxuICAweDAzMjEsXG4gIFwiaG9va3JldHJvZmxleGJlbG93Y21iXCIsXG4gIDB4MDMyMixcbiAgXCJob29uc3F1YXJlXCIsXG4gIDB4MzM0MixcbiAgXCJob3JpY29wdGljXCIsXG4gIDB4MDNlOSxcbiAgXCJob3Jpem9udGFsYmFyXCIsXG4gIDB4MjAxNSxcbiAgXCJob3JuY21iXCIsXG4gIDB4MDMxYixcbiAgXCJob3RzcHJpbmdzXCIsXG4gIDB4MjY2OCxcbiAgXCJob3VzZVwiLFxuICAweDIzMDIsXG4gIFwiaHBhcmVuXCIsXG4gIDB4MjRhMyxcbiAgXCJoc3VwZXJpb3JcIixcbiAgMHgwMmIwLFxuICBcImh0dXJuZWRcIixcbiAgMHgwMjY1LFxuICBcImh1aGlyYWdhbmFcIixcbiAgMHgzMDc1LFxuICBcImh1aWl0b3NxdWFyZVwiLFxuICAweDMzMzMsXG4gIFwiaHVrYXRha2FuYVwiLFxuICAweDMwZDUsXG4gIFwiaHVrYXRha2FuYWhhbGZ3aWR0aFwiLFxuICAweGZmOGMsXG4gIFwiaHVuZ2FydW1sYXV0XCIsXG4gIDB4MDJkZCxcbiAgXCJodW5nYXJ1bWxhdXRjbWJcIixcbiAgMHgwMzBiLFxuICBcImh2XCIsXG4gIDB4MDE5NSxcbiAgXCJoeXBoZW5cIixcbiAgMHgwMDJkLFxuICBcImh5cGhlbmluZmVyaW9yXCIsXG4gIDB4ZjZlNSxcbiAgXCJoeXBoZW5tb25vc3BhY2VcIixcbiAgMHhmZjBkLFxuICBcImh5cGhlbnNtYWxsXCIsXG4gIDB4ZmU2MyxcbiAgXCJoeXBoZW5zdXBlcmlvclwiLFxuICAweGY2ZTYsXG4gIFwiaHlwaGVudHdvXCIsXG4gIDB4MjAxMCxcbiAgXCJpXCIsXG4gIDB4MDA2OSxcbiAgXCJpYWN1dGVcIixcbiAgMHgwMGVkLFxuICBcImlhY3lyaWxsaWNcIixcbiAgMHgwNDRmLFxuICBcImliZW5nYWxpXCIsXG4gIDB4MDk4NyxcbiAgXCJpYm9wb21vZm9cIixcbiAgMHgzMTI3LFxuICBcImlicmV2ZVwiLFxuICAweDAxMmQsXG4gIFwiaWNhcm9uXCIsXG4gIDB4MDFkMCxcbiAgXCJpY2lyY2xlXCIsXG4gIDB4MjRkOCxcbiAgXCJpY2lyY3VtZmxleFwiLFxuICAweDAwZWUsXG4gIFwiaWN5cmlsbGljXCIsXG4gIDB4MDQ1NixcbiAgXCJpZGJsZ3JhdmVcIixcbiAgMHgwMjA5LFxuICBcImlkZW9ncmFwaGVhcnRoY2lyY2xlXCIsXG4gIDB4MzI4ZixcbiAgXCJpZGVvZ3JhcGhmaXJlY2lyY2xlXCIsXG4gIDB4MzI4YixcbiAgXCJpZGVvZ3JhcGhpY2FsbGlhbmNlcGFyZW5cIixcbiAgMHgzMjNmLFxuICBcImlkZW9ncmFwaGljY2FsbHBhcmVuXCIsXG4gIDB4MzIzYSxcbiAgXCJpZGVvZ3JhcGhpY2NlbnRyZWNpcmNsZVwiLFxuICAweDMyYTUsXG4gIFwiaWRlb2dyYXBoaWNjbG9zZVwiLFxuICAweDMwMDYsXG4gIFwiaWRlb2dyYXBoaWNjb21tYVwiLFxuICAweDMwMDEsXG4gIFwiaWRlb2dyYXBoaWNjb21tYWxlZnRcIixcbiAgMHhmZjY0LFxuICBcImlkZW9ncmFwaGljY29uZ3JhdHVsYXRpb25wYXJlblwiLFxuICAweDMyMzcsXG4gIFwiaWRlb2dyYXBoaWNjb3JyZWN0Y2lyY2xlXCIsXG4gIDB4MzJhMyxcbiAgXCJpZGVvZ3JhcGhpY2VhcnRocGFyZW5cIixcbiAgMHgzMjJmLFxuICBcImlkZW9ncmFwaGljZW50ZXJwcmlzZXBhcmVuXCIsXG4gIDB4MzIzZCxcbiAgXCJpZGVvZ3JhcGhpY2V4Y2VsbGVudGNpcmNsZVwiLFxuICAweDMyOWQsXG4gIFwiaWRlb2dyYXBoaWNmZXN0aXZhbHBhcmVuXCIsXG4gIDB4MzI0MCxcbiAgXCJpZGVvZ3JhcGhpY2ZpbmFuY2lhbGNpcmNsZVwiLFxuICAweDMyOTYsXG4gIFwiaWRlb2dyYXBoaWNmaW5hbmNpYWxwYXJlblwiLFxuICAweDMyMzYsXG4gIFwiaWRlb2dyYXBoaWNmaXJlcGFyZW5cIixcbiAgMHgzMjJiLFxuICBcImlkZW9ncmFwaGljaGF2ZXBhcmVuXCIsXG4gIDB4MzIzMixcbiAgXCJpZGVvZ3JhcGhpY2hpZ2hjaXJjbGVcIixcbiAgMHgzMmE0LFxuICBcImlkZW9ncmFwaGljaXRlcmF0aW9ubWFya1wiLFxuICAweDMwMDUsXG4gIFwiaWRlb2dyYXBoaWNsYWJvcmNpcmNsZVwiLFxuICAweDMyOTgsXG4gIFwiaWRlb2dyYXBoaWNsYWJvcnBhcmVuXCIsXG4gIDB4MzIzOCxcbiAgXCJpZGVvZ3JhcGhpY2xlZnRjaXJjbGVcIixcbiAgMHgzMmE3LFxuICBcImlkZW9ncmFwaGljbG93Y2lyY2xlXCIsXG4gIDB4MzJhNixcbiAgXCJpZGVvZ3JhcGhpY21lZGljaW5lY2lyY2xlXCIsXG4gIDB4MzJhOSxcbiAgXCJpZGVvZ3JhcGhpY21ldGFscGFyZW5cIixcbiAgMHgzMjJlLFxuICBcImlkZW9ncmFwaGljbW9vbnBhcmVuXCIsXG4gIDB4MzIyYSxcbiAgXCJpZGVvZ3JhcGhpY25hbWVwYXJlblwiLFxuICAweDMyMzQsXG4gIFwiaWRlb2dyYXBoaWNwZXJpb2RcIixcbiAgMHgzMDAyLFxuICBcImlkZW9ncmFwaGljcHJpbnRjaXJjbGVcIixcbiAgMHgzMjllLFxuICBcImlkZW9ncmFwaGljcmVhY2hwYXJlblwiLFxuICAweDMyNDMsXG4gIFwiaWRlb2dyYXBoaWNyZXByZXNlbnRwYXJlblwiLFxuICAweDMyMzksXG4gIFwiaWRlb2dyYXBoaWNyZXNvdXJjZXBhcmVuXCIsXG4gIDB4MzIzZSxcbiAgXCJpZGVvZ3JhcGhpY3JpZ2h0Y2lyY2xlXCIsXG4gIDB4MzJhOCxcbiAgXCJpZGVvZ3JhcGhpY3NlY3JldGNpcmNsZVwiLFxuICAweDMyOTksXG4gIFwiaWRlb2dyYXBoaWNzZWxmcGFyZW5cIixcbiAgMHgzMjQyLFxuICBcImlkZW9ncmFwaGljc29jaWV0eXBhcmVuXCIsXG4gIDB4MzIzMyxcbiAgXCJpZGVvZ3JhcGhpY3NwYWNlXCIsXG4gIDB4MzAwMCxcbiAgXCJpZGVvZ3JhcGhpY3NwZWNpYWxwYXJlblwiLFxuICAweDMyMzUsXG4gIFwiaWRlb2dyYXBoaWNzdG9ja3BhcmVuXCIsXG4gIDB4MzIzMSxcbiAgXCJpZGVvZ3JhcGhpY3N0dWR5cGFyZW5cIixcbiAgMHgzMjNiLFxuICBcImlkZW9ncmFwaGljc3VucGFyZW5cIixcbiAgMHgzMjMwLFxuICBcImlkZW9ncmFwaGljc3VwZXJ2aXNlcGFyZW5cIixcbiAgMHgzMjNjLFxuICBcImlkZW9ncmFwaGljd2F0ZXJwYXJlblwiLFxuICAweDMyMmMsXG4gIFwiaWRlb2dyYXBoaWN3b29kcGFyZW5cIixcbiAgMHgzMjJkLFxuICBcImlkZW9ncmFwaGljemVyb1wiLFxuICAweDMwMDcsXG4gIFwiaWRlb2dyYXBobWV0YWxjaXJjbGVcIixcbiAgMHgzMjhlLFxuICBcImlkZW9ncmFwaG1vb25jaXJjbGVcIixcbiAgMHgzMjhhLFxuICBcImlkZW9ncmFwaG5hbWVjaXJjbGVcIixcbiAgMHgzMjk0LFxuICBcImlkZW9ncmFwaHN1bmNpcmNsZVwiLFxuICAweDMyOTAsXG4gIFwiaWRlb2dyYXBod2F0ZXJjaXJjbGVcIixcbiAgMHgzMjhjLFxuICBcImlkZW9ncmFwaHdvb2RjaXJjbGVcIixcbiAgMHgzMjhkLFxuICBcImlkZXZhXCIsXG4gIDB4MDkwNyxcbiAgXCJpZGllcmVzaXNcIixcbiAgMHgwMGVmLFxuICBcImlkaWVyZXNpc2FjdXRlXCIsXG4gIDB4MWUyZixcbiAgXCJpZGllcmVzaXNjeXJpbGxpY1wiLFxuICAweDA0ZTUsXG4gIFwiaWRvdGJlbG93XCIsXG4gIDB4MWVjYixcbiAgXCJpZWJyZXZlY3lyaWxsaWNcIixcbiAgMHgwNGQ3LFxuICBcImllY3lyaWxsaWNcIixcbiAgMHgwNDM1LFxuICBcImlldW5nYWNpcmNsZWtvcmVhblwiLFxuICAweDMyNzUsXG4gIFwiaWV1bmdhcGFyZW5rb3JlYW5cIixcbiAgMHgzMjE1LFxuICBcImlldW5nY2lyY2xla29yZWFuXCIsXG4gIDB4MzI2NyxcbiAgXCJpZXVuZ2tvcmVhblwiLFxuICAweDMxNDcsXG4gIFwiaWV1bmdwYXJlbmtvcmVhblwiLFxuICAweDMyMDcsXG4gIFwiaWdyYXZlXCIsXG4gIDB4MDBlYyxcbiAgXCJpZ3VqYXJhdGlcIixcbiAgMHgwYTg3LFxuICBcImlndXJtdWtoaVwiLFxuICAweDBhMDcsXG4gIFwiaWhpcmFnYW5hXCIsXG4gIDB4MzA0NCxcbiAgXCJpaG9va2Fib3ZlXCIsXG4gIDB4MWVjOSxcbiAgXCJpaWJlbmdhbGlcIixcbiAgMHgwOTg4LFxuICBcImlpY3lyaWxsaWNcIixcbiAgMHgwNDM4LFxuICBcImlpZGV2YVwiLFxuICAweDA5MDgsXG4gIFwiaWlndWphcmF0aVwiLFxuICAweDBhODgsXG4gIFwiaWlndXJtdWtoaVwiLFxuICAweDBhMDgsXG4gIFwiaWltYXRyYWd1cm11a2hpXCIsXG4gIDB4MGE0MCxcbiAgXCJpaW52ZXJ0ZWRicmV2ZVwiLFxuICAweDAyMGIsXG4gIFwiaWlzaG9ydGN5cmlsbGljXCIsXG4gIDB4MDQzOSxcbiAgXCJpaXZvd2Vsc2lnbmJlbmdhbGlcIixcbiAgMHgwOWMwLFxuICBcImlpdm93ZWxzaWduZGV2YVwiLFxuICAweDA5NDAsXG4gIFwiaWl2b3dlbHNpZ25ndWphcmF0aVwiLFxuICAweDBhYzAsXG4gIFwiaWpcIixcbiAgMHgwMTMzLFxuICBcImlrYXRha2FuYVwiLFxuICAweDMwYTQsXG4gIFwiaWthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY3MixcbiAgXCJpa29yZWFuXCIsXG4gIDB4MzE2MyxcbiAgXCJpbGRlXCIsXG4gIDB4MDJkYyxcbiAgXCJpbHV5aGVicmV3XCIsXG4gIDB4MDVhYyxcbiAgXCJpbWFjcm9uXCIsXG4gIDB4MDEyYixcbiAgXCJpbWFjcm9uY3lyaWxsaWNcIixcbiAgMHgwNGUzLFxuICBcImltYWdlb3JhcHByb3hpbWF0ZWx5ZXF1YWxcIixcbiAgMHgyMjUzLFxuICBcImltYXRyYWd1cm11a2hpXCIsXG4gIDB4MGEzZixcbiAgXCJpbW9ub3NwYWNlXCIsXG4gIDB4ZmY0OSxcbiAgXCJpbmNyZW1lbnRcIixcbiAgMHgyMjA2LFxuICBcImluZmluaXR5XCIsXG4gIDB4MjIxZSxcbiAgXCJpbmlhcm1lbmlhblwiLFxuICAweDA1NmIsXG4gIFwiaW50ZWdyYWxcIixcbiAgMHgyMjJiLFxuICBcImludGVncmFsYm90dG9tXCIsXG4gIDB4MjMyMSxcbiAgXCJpbnRlZ3JhbGJ0XCIsXG4gIDB4MjMyMSxcbiAgXCJpbnRlZ3JhbGV4XCIsXG4gIDB4ZjhmNSxcbiAgXCJpbnRlZ3JhbHRvcFwiLFxuICAweDIzMjAsXG4gIFwiaW50ZWdyYWx0cFwiLFxuICAweDIzMjAsXG4gIFwiaW50ZXJzZWN0aW9uXCIsXG4gIDB4MjIyOSxcbiAgXCJpbnRpc3F1YXJlXCIsXG4gIDB4MzMwNSxcbiAgXCJpbnZidWxsZXRcIixcbiAgMHgyNWQ4LFxuICBcImludmNpcmNsZVwiLFxuICAweDI1ZDksXG4gIFwiaW52c21pbGVmYWNlXCIsXG4gIDB4MjYzYixcbiAgXCJpb2N5cmlsbGljXCIsXG4gIDB4MDQ1MSxcbiAgXCJpb2dvbmVrXCIsXG4gIDB4MDEyZixcbiAgXCJpb3RhXCIsXG4gIDB4MDNiOSxcbiAgXCJpb3RhZGllcmVzaXNcIixcbiAgMHgwM2NhLFxuICBcImlvdGFkaWVyZXNpc3Rvbm9zXCIsXG4gIDB4MDM5MCxcbiAgXCJpb3RhbGF0aW5cIixcbiAgMHgwMjY5LFxuICBcImlvdGF0b25vc1wiLFxuICAweDAzYWYsXG4gIFwiaXBhcmVuXCIsXG4gIDB4MjRhNCxcbiAgXCJpcmlndXJtdWtoaVwiLFxuICAweDBhNzIsXG4gIFwiaXNtYWxsaGlyYWdhbmFcIixcbiAgMHgzMDQzLFxuICBcImlzbWFsbGthdGFrYW5hXCIsXG4gIDB4MzBhMyxcbiAgXCJpc21hbGxrYXRha2FuYWhhbGZ3aWR0aFwiLFxuICAweGZmNjgsXG4gIFwiaXNzaGFyYmVuZ2FsaVwiLFxuICAweDA5ZmEsXG4gIFwiaXN0cm9rZVwiLFxuICAweDAyNjgsXG4gIFwiaXN1cGVyaW9yXCIsXG4gIDB4ZjZlZCxcbiAgXCJpdGVyYXRpb25oaXJhZ2FuYVwiLFxuICAweDMwOWQsXG4gIFwiaXRlcmF0aW9ua2F0YWthbmFcIixcbiAgMHgzMGZkLFxuICBcIml0aWxkZVwiLFxuICAweDAxMjksXG4gIFwiaXRpbGRlYmVsb3dcIixcbiAgMHgxZTJkLFxuICBcIml1Ym9wb21vZm9cIixcbiAgMHgzMTI5LFxuICBcIml1Y3lyaWxsaWNcIixcbiAgMHgwNDRlLFxuICBcIml2b3dlbHNpZ25iZW5nYWxpXCIsXG4gIDB4MDliZixcbiAgXCJpdm93ZWxzaWduZGV2YVwiLFxuICAweDA5M2YsXG4gIFwiaXZvd2Vsc2lnbmd1amFyYXRpXCIsXG4gIDB4MGFiZixcbiAgXCJpemhpdHNhY3lyaWxsaWNcIixcbiAgMHgwNDc1LFxuICBcIml6aGl0c2FkYmxncmF2ZWN5cmlsbGljXCIsXG4gIDB4MDQ3NyxcbiAgXCJqXCIsXG4gIDB4MDA2YSxcbiAgXCJqYWFybWVuaWFuXCIsXG4gIDB4MDU3MSxcbiAgXCJqYWJlbmdhbGlcIixcbiAgMHgwOTljLFxuICBcImphZGV2YVwiLFxuICAweDA5MWMsXG4gIFwiamFndWphcmF0aVwiLFxuICAweDBhOWMsXG4gIFwiamFndXJtdWtoaVwiLFxuICAweDBhMWMsXG4gIFwiamJvcG9tb2ZvXCIsXG4gIDB4MzExMCxcbiAgXCJqY2Fyb25cIixcbiAgMHgwMWYwLFxuICBcImpjaXJjbGVcIixcbiAgMHgyNGQ5LFxuICBcImpjaXJjdW1mbGV4XCIsXG4gIDB4MDEzNSxcbiAgXCJqY3Jvc3NlZHRhaWxcIixcbiAgMHgwMjlkLFxuICBcImpkb3RsZXNzc3Ryb2tlXCIsXG4gIDB4MDI1ZixcbiAgXCJqZWN5cmlsbGljXCIsXG4gIDB4MDQ1OCxcbiAgXCJqZWVtYXJhYmljXCIsXG4gIDB4MDYyYyxcbiAgXCJqZWVtZmluYWxhcmFiaWNcIixcbiAgMHhmZTllLFxuICBcImplZW1pbml0aWFsYXJhYmljXCIsXG4gIDB4ZmU5ZixcbiAgXCJqZWVtbWVkaWFsYXJhYmljXCIsXG4gIDB4ZmVhMCxcbiAgXCJqZWhhcmFiaWNcIixcbiAgMHgwNjk4LFxuICBcImplaGZpbmFsYXJhYmljXCIsXG4gIDB4ZmI4YixcbiAgXCJqaGFiZW5nYWxpXCIsXG4gIDB4MDk5ZCxcbiAgXCJqaGFkZXZhXCIsXG4gIDB4MDkxZCxcbiAgXCJqaGFndWphcmF0aVwiLFxuICAweDBhOWQsXG4gIFwiamhhZ3VybXVraGlcIixcbiAgMHgwYTFkLFxuICBcImpoZWhhcm1lbmlhblwiLFxuICAweDA1N2IsXG4gIFwiamlzXCIsXG4gIDB4MzAwNCxcbiAgXCJqbW9ub3NwYWNlXCIsXG4gIDB4ZmY0YSxcbiAgXCJqcGFyZW5cIixcbiAgMHgyNGE1LFxuICBcImpzdXBlcmlvclwiLFxuICAweDAyYjIsXG4gIFwia1wiLFxuICAweDAwNmIsXG4gIFwia2FiYXNoa2lyY3lyaWxsaWNcIixcbiAgMHgwNGExLFxuICBcImthYmVuZ2FsaVwiLFxuICAweDA5OTUsXG4gIFwia2FjdXRlXCIsXG4gIDB4MWUzMSxcbiAgXCJrYWN5cmlsbGljXCIsXG4gIDB4MDQzYSxcbiAgXCJrYWRlc2NlbmRlcmN5cmlsbGljXCIsXG4gIDB4MDQ5YixcbiAgXCJrYWRldmFcIixcbiAgMHgwOTE1LFxuICBcImthZlwiLFxuICAweDA1ZGIsXG4gIFwia2FmYXJhYmljXCIsXG4gIDB4MDY0MyxcbiAgXCJrYWZkYWdlc2hcIixcbiAgMHhmYjNiLFxuICBcImthZmRhZ2VzaGhlYnJld1wiLFxuICAweGZiM2IsXG4gIFwia2FmZmluYWxhcmFiaWNcIixcbiAgMHhmZWRhLFxuICBcImthZmhlYnJld1wiLFxuICAweDA1ZGIsXG4gIFwia2FmaW5pdGlhbGFyYWJpY1wiLFxuICAweGZlZGIsXG4gIFwia2FmbWVkaWFsYXJhYmljXCIsXG4gIDB4ZmVkYyxcbiAgXCJrYWZyYWZlaGVicmV3XCIsXG4gIDB4ZmI0ZCxcbiAgXCJrYWd1amFyYXRpXCIsXG4gIDB4MGE5NSxcbiAgXCJrYWd1cm11a2hpXCIsXG4gIDB4MGExNSxcbiAgXCJrYWhpcmFnYW5hXCIsXG4gIDB4MzA0YixcbiAgXCJrYWhvb2tjeXJpbGxpY1wiLFxuICAweDA0YzQsXG4gIFwia2FrYXRha2FuYVwiLFxuICAweDMwYWIsXG4gIFwia2FrYXRha2FuYWhhbGZ3aWR0aFwiLFxuICAweGZmNzYsXG4gIFwia2FwcGFcIixcbiAgMHgwM2JhLFxuICBcImthcHBhc3ltYm9sZ3JlZWtcIixcbiAgMHgwM2YwLFxuICBcImthcHllb3VubWlldW1rb3JlYW5cIixcbiAgMHgzMTcxLFxuICBcImthcHllb3VucGhpZXVwaGtvcmVhblwiLFxuICAweDMxODQsXG4gIFwia2FweWVvdW5waWV1cGtvcmVhblwiLFxuICAweDMxNzgsXG4gIFwia2FweWVvdW5zc2FuZ3BpZXVwa29yZWFuXCIsXG4gIDB4MzE3OSxcbiAgXCJrYXJvcmlpc3F1YXJlXCIsXG4gIDB4MzMwZCxcbiAgXCJrYXNoaWRhYXV0b2FyYWJpY1wiLFxuICAweDA2NDAsXG4gIFwia2FzaGlkYWF1dG9ub3NpZGViZWFyaW5nYXJhYmljXCIsXG4gIDB4MDY0MCxcbiAgXCJrYXNtYWxsa2F0YWthbmFcIixcbiAgMHgzMGY1LFxuICBcImthc3F1YXJlXCIsXG4gIDB4MzM4NCxcbiAgXCJrYXNyYWFyYWJpY1wiLFxuICAweDA2NTAsXG4gIFwia2FzcmF0YW5hcmFiaWNcIixcbiAgMHgwNjRkLFxuICBcImthc3Ryb2tlY3lyaWxsaWNcIixcbiAgMHgwNDlmLFxuICBcImthdGFoaXJhcHJvbG9uZ21hcmtoYWxmd2lkdGhcIixcbiAgMHhmZjcwLFxuICBcImthdmVydGljYWxzdHJva2VjeXJpbGxpY1wiLFxuICAweDA0OWQsXG4gIFwia2JvcG9tb2ZvXCIsXG4gIDB4MzEwZSxcbiAgXCJrY2Fsc3F1YXJlXCIsXG4gIDB4MzM4OSxcbiAgXCJrY2Fyb25cIixcbiAgMHgwMWU5LFxuICBcImtjZWRpbGxhXCIsXG4gIDB4MDEzNyxcbiAgXCJrY2lyY2xlXCIsXG4gIDB4MjRkYSxcbiAgXCJrY29tbWFhY2NlbnRcIixcbiAgMHgwMTM3LFxuICBcImtkb3RiZWxvd1wiLFxuICAweDFlMzMsXG4gIFwia2VoYXJtZW5pYW5cIixcbiAgMHgwNTg0LFxuICBcImtlaGlyYWdhbmFcIixcbiAgMHgzMDUxLFxuICBcImtla2F0YWthbmFcIixcbiAgMHgzMGIxLFxuICBcImtla2F0YWthbmFoYWxmd2lkdGhcIixcbiAgMHhmZjc5LFxuICBcImtlbmFybWVuaWFuXCIsXG4gIDB4MDU2ZixcbiAgXCJrZXNtYWxsa2F0YWthbmFcIixcbiAgMHgzMGY2LFxuICBcImtncmVlbmxhbmRpY1wiLFxuICAweDAxMzgsXG4gIFwia2hhYmVuZ2FsaVwiLFxuICAweDA5OTYsXG4gIFwia2hhY3lyaWxsaWNcIixcbiAgMHgwNDQ1LFxuICBcImtoYWRldmFcIixcbiAgMHgwOTE2LFxuICBcImtoYWd1amFyYXRpXCIsXG4gIDB4MGE5NixcbiAgXCJraGFndXJtdWtoaVwiLFxuICAweDBhMTYsXG4gIFwia2hhaGFyYWJpY1wiLFxuICAweDA2MmUsXG4gIFwia2hhaGZpbmFsYXJhYmljXCIsXG4gIDB4ZmVhNixcbiAgXCJraGFoaW5pdGlhbGFyYWJpY1wiLFxuICAweGZlYTcsXG4gIFwia2hhaG1lZGlhbGFyYWJpY1wiLFxuICAweGZlYTgsXG4gIFwia2hlaWNvcHRpY1wiLFxuICAweDAzZTcsXG4gIFwia2hoYWRldmFcIixcbiAgMHgwOTU5LFxuICBcImtoaGFndXJtdWtoaVwiLFxuICAweDBhNTksXG4gIFwia2hpZXVraGFjaXJjbGVrb3JlYW5cIixcbiAgMHgzMjc4LFxuICBcImtoaWV1a2hhcGFyZW5rb3JlYW5cIixcbiAgMHgzMjE4LFxuICBcImtoaWV1a2hjaXJjbGVrb3JlYW5cIixcbiAgMHgzMjZhLFxuICBcImtoaWV1a2hrb3JlYW5cIixcbiAgMHgzMTRiLFxuICBcImtoaWV1a2hwYXJlbmtvcmVhblwiLFxuICAweDMyMGEsXG4gIFwia2hva2hhaXRoYWlcIixcbiAgMHgwZTAyLFxuICBcImtob2tob250aGFpXCIsXG4gIDB4MGUwNSxcbiAgXCJraG9raHVhdHRoYWlcIixcbiAgMHgwZTAzLFxuICBcImtob2tod2FpdGhhaVwiLFxuICAweDBlMDQsXG4gIFwia2hvbXV0dGhhaVwiLFxuICAweDBlNWIsXG4gIFwia2hvb2tcIixcbiAgMHgwMTk5LFxuICBcImtob3Jha2hhbmd0aGFpXCIsXG4gIDB4MGUwNixcbiAgXCJraHpzcXVhcmVcIixcbiAgMHgzMzkxLFxuICBcImtpaGlyYWdhbmFcIixcbiAgMHgzMDRkLFxuICBcImtpa2F0YWthbmFcIixcbiAgMHgzMGFkLFxuICBcImtpa2F0YWthbmFoYWxmd2lkdGhcIixcbiAgMHhmZjc3LFxuICBcImtpcm9ndXJhbXVzcXVhcmVcIixcbiAgMHgzMzE1LFxuICBcImtpcm9tZWV0b3J1c3F1YXJlXCIsXG4gIDB4MzMxNixcbiAgXCJraXJvc3F1YXJlXCIsXG4gIDB4MzMxNCxcbiAgXCJraXllb2thY2lyY2xla29yZWFuXCIsXG4gIDB4MzI2ZSxcbiAgXCJraXllb2thcGFyZW5rb3JlYW5cIixcbiAgMHgzMjBlLFxuICBcImtpeWVva2NpcmNsZWtvcmVhblwiLFxuICAweDMyNjAsXG4gIFwia2l5ZW9ra29yZWFuXCIsXG4gIDB4MzEzMSxcbiAgXCJraXllb2twYXJlbmtvcmVhblwiLFxuICAweDMyMDAsXG4gIFwia2l5ZW9rc2lvc2tvcmVhblwiLFxuICAweDMxMzMsXG4gIFwia2plY3lyaWxsaWNcIixcbiAgMHgwNDVjLFxuICBcImtsaW5lYmVsb3dcIixcbiAgMHgxZTM1LFxuICBcImtsc3F1YXJlXCIsXG4gIDB4MzM5OCxcbiAgXCJrbWN1YmVkc3F1YXJlXCIsXG4gIDB4MzNhNixcbiAgXCJrbW9ub3NwYWNlXCIsXG4gIDB4ZmY0YixcbiAgXCJrbXNxdWFyZWRzcXVhcmVcIixcbiAgMHgzM2EyLFxuICBcImtvaGlyYWdhbmFcIixcbiAgMHgzMDUzLFxuICBcImtvaG1zcXVhcmVcIixcbiAgMHgzM2MwLFxuICBcImtva2FpdGhhaVwiLFxuICAweDBlMDEsXG4gIFwia29rYXRha2FuYVwiLFxuICAweDMwYjMsXG4gIFwia29rYXRha2FuYWhhbGZ3aWR0aFwiLFxuICAweGZmN2EsXG4gIFwia29vcG9zcXVhcmVcIixcbiAgMHgzMzFlLFxuICBcImtvcHBhY3lyaWxsaWNcIixcbiAgMHgwNDgxLFxuICBcImtvcmVhbnN0YW5kYXJkc3ltYm9sXCIsXG4gIDB4MzI3ZixcbiAgXCJrb3JvbmlzY21iXCIsXG4gIDB4MDM0MyxcbiAgXCJrcGFyZW5cIixcbiAgMHgyNGE2LFxuICBcImtwYXNxdWFyZVwiLFxuICAweDMzYWEsXG4gIFwia3NpY3lyaWxsaWNcIixcbiAgMHgwNDZmLFxuICBcImt0c3F1YXJlXCIsXG4gIDB4MzNjZixcbiAgXCJrdHVybmVkXCIsXG4gIDB4MDI5ZSxcbiAgXCJrdWhpcmFnYW5hXCIsXG4gIDB4MzA0ZixcbiAgXCJrdWthdGFrYW5hXCIsXG4gIDB4MzBhZixcbiAgXCJrdWthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY3OCxcbiAgXCJrdnNxdWFyZVwiLFxuICAweDMzYjgsXG4gIFwia3dzcXVhcmVcIixcbiAgMHgzM2JlLFxuICBcImxcIixcbiAgMHgwMDZjLFxuICBcImxhYmVuZ2FsaVwiLFxuICAweDA5YjIsXG4gIFwibGFjdXRlXCIsXG4gIDB4MDEzYSxcbiAgXCJsYWRldmFcIixcbiAgMHgwOTMyLFxuICBcImxhZ3VqYXJhdGlcIixcbiAgMHgwYWIyLFxuICBcImxhZ3VybXVraGlcIixcbiAgMHgwYTMyLFxuICBcImxha2toYW5neWFvdGhhaVwiLFxuICAweDBlNDUsXG4gIFwibGFtYWxlZmZpbmFsYXJhYmljXCIsXG4gIDB4ZmVmYyxcbiAgXCJsYW1hbGVmaGFtemFhYm92ZWZpbmFsYXJhYmljXCIsXG4gIDB4ZmVmOCxcbiAgXCJsYW1hbGVmaGFtemFhYm92ZWlzb2xhdGVkYXJhYmljXCIsXG4gIDB4ZmVmNyxcbiAgXCJsYW1hbGVmaGFtemFiZWxvd2ZpbmFsYXJhYmljXCIsXG4gIDB4ZmVmYSxcbiAgXCJsYW1hbGVmaGFtemFiZWxvd2lzb2xhdGVkYXJhYmljXCIsXG4gIDB4ZmVmOSxcbiAgXCJsYW1hbGVmaXNvbGF0ZWRhcmFiaWNcIixcbiAgMHhmZWZiLFxuICBcImxhbWFsZWZtYWRkYWFib3ZlZmluYWxhcmFiaWNcIixcbiAgMHhmZWY2LFxuICBcImxhbWFsZWZtYWRkYWFib3ZlaXNvbGF0ZWRhcmFiaWNcIixcbiAgMHhmZWY1LFxuICBcImxhbWFyYWJpY1wiLFxuICAweDA2NDQsXG4gIFwibGFtYmRhXCIsXG4gIDB4MDNiYixcbiAgXCJsYW1iZGFzdHJva2VcIixcbiAgMHgwMTliLFxuICBcImxhbWVkXCIsXG4gIDB4MDVkYyxcbiAgXCJsYW1lZGRhZ2VzaFwiLFxuICAweGZiM2MsXG4gIFwibGFtZWRkYWdlc2hoZWJyZXdcIixcbiAgMHhmYjNjLFxuICBcImxhbWVkaGVicmV3XCIsXG4gIDB4MDVkYyxcbiAgXCJsYW1maW5hbGFyYWJpY1wiLFxuICAweGZlZGUsXG4gIFwibGFtaGFoaW5pdGlhbGFyYWJpY1wiLFxuICAweGZjY2EsXG4gIFwibGFtaW5pdGlhbGFyYWJpY1wiLFxuICAweGZlZGYsXG4gIFwibGFtamVlbWluaXRpYWxhcmFiaWNcIixcbiAgMHhmY2M5LFxuICBcImxhbWtoYWhpbml0aWFsYXJhYmljXCIsXG4gIDB4ZmNjYixcbiAgXCJsYW1sYW1oZWhpc29sYXRlZGFyYWJpY1wiLFxuICAweGZkZjIsXG4gIFwibGFtbWVkaWFsYXJhYmljXCIsXG4gIDB4ZmVlMCxcbiAgXCJsYW1tZWVtaGFoaW5pdGlhbGFyYWJpY1wiLFxuICAweGZkODgsXG4gIFwibGFtbWVlbWluaXRpYWxhcmFiaWNcIixcbiAgMHhmY2NjLFxuICBcImxhcmdlY2lyY2xlXCIsXG4gIDB4MjVlZixcbiAgXCJsYmFyXCIsXG4gIDB4MDE5YSxcbiAgXCJsYmVsdFwiLFxuICAweDAyNmMsXG4gIFwibGJvcG9tb2ZvXCIsXG4gIDB4MzEwYyxcbiAgXCJsY2Fyb25cIixcbiAgMHgwMTNlLFxuICBcImxjZWRpbGxhXCIsXG4gIDB4MDEzYyxcbiAgXCJsY2lyY2xlXCIsXG4gIDB4MjRkYixcbiAgXCJsY2lyY3VtZmxleGJlbG93XCIsXG4gIDB4MWUzZCxcbiAgXCJsY29tbWFhY2NlbnRcIixcbiAgMHgwMTNjLFxuICBcImxkb3RcIixcbiAgMHgwMTQwLFxuICBcImxkb3RhY2NlbnRcIixcbiAgMHgwMTQwLFxuICBcImxkb3RiZWxvd1wiLFxuICAweDFlMzcsXG4gIFwibGRvdGJlbG93bWFjcm9uXCIsXG4gIDB4MWUzOSxcbiAgXCJsZWZ0YW5nbGVhYm92ZWNtYlwiLFxuICAweDAzMWEsXG4gIFwibGVmdHRhY2tiZWxvd2NtYlwiLFxuICAweDAzMTgsXG4gIFwibGVzc1wiLFxuICAweDAwM2MsXG4gIFwibGVzc2VxdWFsXCIsXG4gIDB4MjI2NCxcbiAgXCJsZXNzZXF1YWxvcmdyZWF0ZXJcIixcbiAgMHgyMmRhLFxuICBcImxlc3Ntb25vc3BhY2VcIixcbiAgMHhmZjFjLFxuICBcImxlc3NvcmVxdWl2YWxlbnRcIixcbiAgMHgyMjcyLFxuICBcImxlc3NvcmdyZWF0ZXJcIixcbiAgMHgyMjc2LFxuICBcImxlc3NvdmVyZXF1YWxcIixcbiAgMHgyMjY2LFxuICBcImxlc3NzbWFsbFwiLFxuICAweGZlNjQsXG4gIFwibGV6aFwiLFxuICAweDAyNmUsXG4gIFwibGZibG9ja1wiLFxuICAweDI1OGMsXG4gIFwibGhvb2tyZXRyb2ZsZXhcIixcbiAgMHgwMjZkLFxuICBcImxpcmFcIixcbiAgMHgyMGE0LFxuICBcImxpd25hcm1lbmlhblwiLFxuICAweDA1NmMsXG4gIFwibGpcIixcbiAgMHgwMWM5LFxuICBcImxqZWN5cmlsbGljXCIsXG4gIDB4MDQ1OSxcbiAgXCJsbFwiLFxuICAweGY2YzAsXG4gIFwibGxhZGV2YVwiLFxuICAweDA5MzMsXG4gIFwibGxhZ3VqYXJhdGlcIixcbiAgMHgwYWIzLFxuICBcImxsaW5lYmVsb3dcIixcbiAgMHgxZTNiLFxuICBcImxsbGFkZXZhXCIsXG4gIDB4MDkzNCxcbiAgXCJsbHZvY2FsaWNiZW5nYWxpXCIsXG4gIDB4MDllMSxcbiAgXCJsbHZvY2FsaWNkZXZhXCIsXG4gIDB4MDk2MSxcbiAgXCJsbHZvY2FsaWN2b3dlbHNpZ25iZW5nYWxpXCIsXG4gIDB4MDllMyxcbiAgXCJsbHZvY2FsaWN2b3dlbHNpZ25kZXZhXCIsXG4gIDB4MDk2MyxcbiAgXCJsbWlkZGxldGlsZGVcIixcbiAgMHgwMjZiLFxuICBcImxtb25vc3BhY2VcIixcbiAgMHhmZjRjLFxuICBcImxtc3F1YXJlXCIsXG4gIDB4MzNkMCxcbiAgXCJsb2NodWxhdGhhaVwiLFxuICAweDBlMmMsXG4gIFwibG9naWNhbGFuZFwiLFxuICAweDIyMjcsXG4gIFwibG9naWNhbG5vdFwiLFxuICAweDAwYWMsXG4gIFwibG9naWNhbG5vdHJldmVyc2VkXCIsXG4gIDB4MjMxMCxcbiAgXCJsb2dpY2Fsb3JcIixcbiAgMHgyMjI4LFxuICBcImxvbGluZ3RoYWlcIixcbiAgMHgwZTI1LFxuICBcImxvbmdzXCIsXG4gIDB4MDE3ZixcbiAgXCJsb3dsaW5lY2VudGVybGluZVwiLFxuICAweGZlNGUsXG4gIFwibG93bGluZWNtYlwiLFxuICAweDAzMzIsXG4gIFwibG93bGluZWRhc2hlZFwiLFxuICAweGZlNGQsXG4gIFwibG96ZW5nZVwiLFxuICAweDI1Y2EsXG4gIFwibHBhcmVuXCIsXG4gIDB4MjRhNyxcbiAgXCJsc2xhc2hcIixcbiAgMHgwMTQyLFxuICBcImxzcXVhcmVcIixcbiAgMHgyMTEzLFxuICBcImxzdXBlcmlvclwiLFxuICAweGY2ZWUsXG4gIFwibHRzaGFkZVwiLFxuICAweDI1OTEsXG4gIFwibHV0aGFpXCIsXG4gIDB4MGUyNixcbiAgXCJsdm9jYWxpY2JlbmdhbGlcIixcbiAgMHgwOThjLFxuICBcImx2b2NhbGljZGV2YVwiLFxuICAweDA5MGMsXG4gIFwibHZvY2FsaWN2b3dlbHNpZ25iZW5nYWxpXCIsXG4gIDB4MDllMixcbiAgXCJsdm9jYWxpY3Zvd2Vsc2lnbmRldmFcIixcbiAgMHgwOTYyLFxuICBcImx4c3F1YXJlXCIsXG4gIDB4MzNkMyxcbiAgXCJtXCIsXG4gIDB4MDA2ZCxcbiAgXCJtYWJlbmdhbGlcIixcbiAgMHgwOWFlLFxuICBcIm1hY3JvblwiLFxuICAweDAwYWYsXG4gIFwibWFjcm9uYmVsb3djbWJcIixcbiAgMHgwMzMxLFxuICBcIm1hY3JvbmNtYlwiLFxuICAweDAzMDQsXG4gIFwibWFjcm9ubG93bW9kXCIsXG4gIDB4MDJjZCxcbiAgXCJtYWNyb25tb25vc3BhY2VcIixcbiAgMHhmZmUzLFxuICBcIm1hY3V0ZVwiLFxuICAweDFlM2YsXG4gIFwibWFkZXZhXCIsXG4gIDB4MDkyZSxcbiAgXCJtYWd1amFyYXRpXCIsXG4gIDB4MGFhZSxcbiAgXCJtYWd1cm11a2hpXCIsXG4gIDB4MGEyZSxcbiAgXCJtYWhhcGFraGhlYnJld1wiLFxuICAweDA1YTQsXG4gIFwibWFoYXBha2hsZWZ0aGVicmV3XCIsXG4gIDB4MDVhNCxcbiAgXCJtYWhpcmFnYW5hXCIsXG4gIDB4MzA3ZSxcbiAgXCJtYWljaGF0dGF3YWxvd2xlZnR0aGFpXCIsXG4gIDB4Zjg5NSxcbiAgXCJtYWljaGF0dGF3YWxvd3JpZ2h0dGhhaVwiLFxuICAweGY4OTQsXG4gIFwibWFpY2hhdHRhd2F0aGFpXCIsXG4gIDB4MGU0YixcbiAgXCJtYWljaGF0dGF3YXVwcGVybGVmdHRoYWlcIixcbiAgMHhmODkzLFxuICBcIm1haWVrbG93bGVmdHRoYWlcIixcbiAgMHhmODhjLFxuICBcIm1haWVrbG93cmlnaHR0aGFpXCIsXG4gIDB4Zjg4YixcbiAgXCJtYWlla3RoYWlcIixcbiAgMHgwZTQ4LFxuICBcIm1haWVrdXBwZXJsZWZ0dGhhaVwiLFxuICAweGY4OGEsXG4gIFwibWFpaGFuYWthdGxlZnR0aGFpXCIsXG4gIDB4Zjg4NCxcbiAgXCJtYWloYW5ha2F0dGhhaVwiLFxuICAweDBlMzEsXG4gIFwibWFpdGFpa2h1bGVmdHRoYWlcIixcbiAgMHhmODg5LFxuICBcIm1haXRhaWtodXRoYWlcIixcbiAgMHgwZTQ3LFxuICBcIm1haXRob2xvd2xlZnR0aGFpXCIsXG4gIDB4Zjg4ZixcbiAgXCJtYWl0aG9sb3dyaWdodHRoYWlcIixcbiAgMHhmODhlLFxuICBcIm1haXRob3RoYWlcIixcbiAgMHgwZTQ5LFxuICBcIm1haXRob3VwcGVybGVmdHRoYWlcIixcbiAgMHhmODhkLFxuICBcIm1haXRyaWxvd2xlZnR0aGFpXCIsXG4gIDB4Zjg5MixcbiAgXCJtYWl0cmlsb3dyaWdodHRoYWlcIixcbiAgMHhmODkxLFxuICBcIm1haXRyaXRoYWlcIixcbiAgMHgwZTRhLFxuICBcIm1haXRyaXVwcGVybGVmdHRoYWlcIixcbiAgMHhmODkwLFxuICBcIm1haXlhbW9rdGhhaVwiLFxuICAweDBlNDYsXG4gIFwibWFrYXRha2FuYVwiLFxuICAweDMwZGUsXG4gIFwibWFrYXRha2FuYWhhbGZ3aWR0aFwiLFxuICAweGZmOGYsXG4gIFwibWFsZVwiLFxuICAweDI2NDIsXG4gIFwibWFuc3lvbnNxdWFyZVwiLFxuICAweDMzNDcsXG4gIFwibWFxYWZoZWJyZXdcIixcbiAgMHgwNWJlLFxuICBcIm1hcnNcIixcbiAgMHgyNjQyLFxuICBcIm1hc29yYWNpcmNsZWhlYnJld1wiLFxuICAweDA1YWYsXG4gIFwibWFzcXVhcmVcIixcbiAgMHgzMzgzLFxuICBcIm1ib3BvbW9mb1wiLFxuICAweDMxMDcsXG4gIFwibWJzcXVhcmVcIixcbiAgMHgzM2Q0LFxuICBcIm1jaXJjbGVcIixcbiAgMHgyNGRjLFxuICBcIm1jdWJlZHNxdWFyZVwiLFxuICAweDMzYTUsXG4gIFwibWRvdGFjY2VudFwiLFxuICAweDFlNDEsXG4gIFwibWRvdGJlbG93XCIsXG4gIDB4MWU0MyxcbiAgXCJtZWVtYXJhYmljXCIsXG4gIDB4MDY0NSxcbiAgXCJtZWVtZmluYWxhcmFiaWNcIixcbiAgMHhmZWUyLFxuICBcIm1lZW1pbml0aWFsYXJhYmljXCIsXG4gIDB4ZmVlMyxcbiAgXCJtZWVtbWVkaWFsYXJhYmljXCIsXG4gIDB4ZmVlNCxcbiAgXCJtZWVtbWVlbWluaXRpYWxhcmFiaWNcIixcbiAgMHhmY2QxLFxuICBcIm1lZW1tZWVtaXNvbGF0ZWRhcmFiaWNcIixcbiAgMHhmYzQ4LFxuICBcIm1lZXRvcnVzcXVhcmVcIixcbiAgMHgzMzRkLFxuICBcIm1laGlyYWdhbmFcIixcbiAgMHgzMDgxLFxuICBcIm1laXppZXJhc3F1YXJlXCIsXG4gIDB4MzM3ZSxcbiAgXCJtZWthdGFrYW5hXCIsXG4gIDB4MzBlMSxcbiAgXCJtZWthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY5MixcbiAgXCJtZW1cIixcbiAgMHgwNWRlLFxuICBcIm1lbWRhZ2VzaFwiLFxuICAweGZiM2UsXG4gIFwibWVtZGFnZXNoaGVicmV3XCIsXG4gIDB4ZmIzZSxcbiAgXCJtZW1oZWJyZXdcIixcbiAgMHgwNWRlLFxuICBcIm1lbmFybWVuaWFuXCIsXG4gIDB4MDU3NCxcbiAgXCJtZXJraGFoZWJyZXdcIixcbiAgMHgwNWE1LFxuICBcIm1lcmtoYWtlZnVsYWhlYnJld1wiLFxuICAweDA1YTYsXG4gIFwibWVya2hha2VmdWxhbGVmdGhlYnJld1wiLFxuICAweDA1YTYsXG4gIFwibWVya2hhbGVmdGhlYnJld1wiLFxuICAweDA1YTUsXG4gIFwibWhvb2tcIixcbiAgMHgwMjcxLFxuICBcIm1oenNxdWFyZVwiLFxuICAweDMzOTIsXG4gIFwibWlkZGxlZG90a2F0YWthbmFoYWxmd2lkdGhcIixcbiAgMHhmZjY1LFxuICBcIm1pZGRvdFwiLFxuICAweDAwYjcsXG4gIFwibWlldW1hY2lyY2xla29yZWFuXCIsXG4gIDB4MzI3MixcbiAgXCJtaWV1bWFwYXJlbmtvcmVhblwiLFxuICAweDMyMTIsXG4gIFwibWlldW1jaXJjbGVrb3JlYW5cIixcbiAgMHgzMjY0LFxuICBcIm1pZXVta29yZWFuXCIsXG4gIDB4MzE0MSxcbiAgXCJtaWV1bXBhbnNpb3Nrb3JlYW5cIixcbiAgMHgzMTcwLFxuICBcIm1pZXVtcGFyZW5rb3JlYW5cIixcbiAgMHgzMjA0LFxuICBcIm1pZXVtcGlldXBrb3JlYW5cIixcbiAgMHgzMTZlLFxuICBcIm1pZXVtc2lvc2tvcmVhblwiLFxuICAweDMxNmYsXG4gIFwibWloaXJhZ2FuYVwiLFxuICAweDMwN2YsXG4gIFwibWlrYXRha2FuYVwiLFxuICAweDMwZGYsXG4gIFwibWlrYXRha2FuYWhhbGZ3aWR0aFwiLFxuICAweGZmOTAsXG4gIFwibWludXNcIixcbiAgMHgyMjEyLFxuICBcIm1pbnVzYmVsb3djbWJcIixcbiAgMHgwMzIwLFxuICBcIm1pbnVzY2lyY2xlXCIsXG4gIDB4MjI5NixcbiAgXCJtaW51c21vZFwiLFxuICAweDAyZDcsXG4gIFwibWludXNwbHVzXCIsXG4gIDB4MjIxMyxcbiAgXCJtaW51dGVcIixcbiAgMHgyMDMyLFxuICBcIm1pcmliYWFydXNxdWFyZVwiLFxuICAweDMzNGEsXG4gIFwibWlyaXNxdWFyZVwiLFxuICAweDMzNDksXG4gIFwibWxvbmdsZWd0dXJuZWRcIixcbiAgMHgwMjcwLFxuICBcIm1sc3F1YXJlXCIsXG4gIDB4MzM5NixcbiAgXCJtbWN1YmVkc3F1YXJlXCIsXG4gIDB4MzNhMyxcbiAgXCJtbW9ub3NwYWNlXCIsXG4gIDB4ZmY0ZCxcbiAgXCJtbXNxdWFyZWRzcXVhcmVcIixcbiAgMHgzMzlmLFxuICBcIm1vaGlyYWdhbmFcIixcbiAgMHgzMDgyLFxuICBcIm1vaG1zcXVhcmVcIixcbiAgMHgzM2MxLFxuICBcIm1va2F0YWthbmFcIixcbiAgMHgzMGUyLFxuICBcIm1va2F0YWthbmFoYWxmd2lkdGhcIixcbiAgMHhmZjkzLFxuICBcIm1vbHNxdWFyZVwiLFxuICAweDMzZDYsXG4gIFwibW9tYXRoYWlcIixcbiAgMHgwZTIxLFxuICBcIm1vdmVyc3NxdWFyZVwiLFxuICAweDMzYTcsXG4gIFwibW92ZXJzc3F1YXJlZHNxdWFyZVwiLFxuICAweDMzYTgsXG4gIFwibXBhcmVuXCIsXG4gIDB4MjRhOCxcbiAgXCJtcGFzcXVhcmVcIixcbiAgMHgzM2FiLFxuICBcIm1zc3F1YXJlXCIsXG4gIDB4MzNiMyxcbiAgXCJtc3VwZXJpb3JcIixcbiAgMHhmNmVmLFxuICBcIm10dXJuZWRcIixcbiAgMHgwMjZmLFxuICBcIm11XCIsXG4gIDB4MDBiNSxcbiAgXCJtdTFcIixcbiAgMHgwMGI1LFxuICBcIm11YXNxdWFyZVwiLFxuICAweDMzODIsXG4gIFwibXVjaGdyZWF0ZXJcIixcbiAgMHgyMjZiLFxuICBcIm11Y2hsZXNzXCIsXG4gIDB4MjI2YSxcbiAgXCJtdWZzcXVhcmVcIixcbiAgMHgzMzhjLFxuICBcIm11Z3JlZWtcIixcbiAgMHgwM2JjLFxuICBcIm11Z3NxdWFyZVwiLFxuICAweDMzOGQsXG4gIFwibXVoaXJhZ2FuYVwiLFxuICAweDMwODAsXG4gIFwibXVrYXRha2FuYVwiLFxuICAweDMwZTAsXG4gIFwibXVrYXRha2FuYWhhbGZ3aWR0aFwiLFxuICAweGZmOTEsXG4gIFwibXVsc3F1YXJlXCIsXG4gIDB4MzM5NSxcbiAgXCJtdWx0aXBseVwiLFxuICAweDAwZDcsXG4gIFwibXVtc3F1YXJlXCIsXG4gIDB4MzM5YixcbiAgXCJtdW5haGhlYnJld1wiLFxuICAweDA1YTMsXG4gIFwibXVuYWhsZWZ0aGVicmV3XCIsXG4gIDB4MDVhMyxcbiAgXCJtdXNpY2Fsbm90ZVwiLFxuICAweDI2NmEsXG4gIFwibXVzaWNhbG5vdGVkYmxcIixcbiAgMHgyNjZiLFxuICBcIm11c2ljZmxhdHNpZ25cIixcbiAgMHgyNjZkLFxuICBcIm11c2ljc2hhcnBzaWduXCIsXG4gIDB4MjY2ZixcbiAgXCJtdXNzcXVhcmVcIixcbiAgMHgzM2IyLFxuICBcIm11dnNxdWFyZVwiLFxuICAweDMzYjYsXG4gIFwibXV3c3F1YXJlXCIsXG4gIDB4MzNiYyxcbiAgXCJtdm1lZ2FzcXVhcmVcIixcbiAgMHgzM2I5LFxuICBcIm12c3F1YXJlXCIsXG4gIDB4MzNiNyxcbiAgXCJtd21lZ2FzcXVhcmVcIixcbiAgMHgzM2JmLFxuICBcIm13c3F1YXJlXCIsXG4gIDB4MzNiZCxcbiAgXCJuXCIsXG4gIDB4MDA2ZSxcbiAgXCJuYWJlbmdhbGlcIixcbiAgMHgwOWE4LFxuICBcIm5hYmxhXCIsXG4gIDB4MjIwNyxcbiAgXCJuYWN1dGVcIixcbiAgMHgwMTQ0LFxuICBcIm5hZGV2YVwiLFxuICAweDA5MjgsXG4gIFwibmFndWphcmF0aVwiLFxuICAweDBhYTgsXG4gIFwibmFndXJtdWtoaVwiLFxuICAweDBhMjgsXG4gIFwibmFoaXJhZ2FuYVwiLFxuICAweDMwNmEsXG4gIFwibmFrYXRha2FuYVwiLFxuICAweDMwY2EsXG4gIFwibmFrYXRha2FuYWhhbGZ3aWR0aFwiLFxuICAweGZmODUsXG4gIFwibmFwb3N0cm9waGVcIixcbiAgMHgwMTQ5LFxuICBcIm5hc3F1YXJlXCIsXG4gIDB4MzM4MSxcbiAgXCJuYm9wb21vZm9cIixcbiAgMHgzMTBiLFxuICBcIm5ic3BhY2VcIixcbiAgMHgwMGEwLFxuICBcIm5jYXJvblwiLFxuICAweDAxNDgsXG4gIFwibmNlZGlsbGFcIixcbiAgMHgwMTQ2LFxuICBcIm5jaXJjbGVcIixcbiAgMHgyNGRkLFxuICBcIm5jaXJjdW1mbGV4YmVsb3dcIixcbiAgMHgxZTRiLFxuICBcIm5jb21tYWFjY2VudFwiLFxuICAweDAxNDYsXG4gIFwibmRvdGFjY2VudFwiLFxuICAweDFlNDUsXG4gIFwibmRvdGJlbG93XCIsXG4gIDB4MWU0NyxcbiAgXCJuZWhpcmFnYW5hXCIsXG4gIDB4MzA2ZCxcbiAgXCJuZWthdGFrYW5hXCIsXG4gIDB4MzBjZCxcbiAgXCJuZWthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY4OCxcbiAgXCJuZXdzaGVxZWxzaWduXCIsXG4gIDB4MjBhYSxcbiAgXCJuZnNxdWFyZVwiLFxuICAweDMzOGIsXG4gIFwibmdhYmVuZ2FsaVwiLFxuICAweDA5OTksXG4gIFwibmdhZGV2YVwiLFxuICAweDA5MTksXG4gIFwibmdhZ3VqYXJhdGlcIixcbiAgMHgwYTk5LFxuICBcIm5nYWd1cm11a2hpXCIsXG4gIDB4MGExOSxcbiAgXCJuZ29uZ3V0aGFpXCIsXG4gIDB4MGUwNyxcbiAgXCJuaGlyYWdhbmFcIixcbiAgMHgzMDkzLFxuICBcIm5ob29rbGVmdFwiLFxuICAweDAyNzIsXG4gIFwibmhvb2tyZXRyb2ZsZXhcIixcbiAgMHgwMjczLFxuICBcIm5pZXVuYWNpcmNsZWtvcmVhblwiLFxuICAweDMyNmYsXG4gIFwibmlldW5hcGFyZW5rb3JlYW5cIixcbiAgMHgzMjBmLFxuICBcIm5pZXVuY2lldWNrb3JlYW5cIixcbiAgMHgzMTM1LFxuICBcIm5pZXVuY2lyY2xla29yZWFuXCIsXG4gIDB4MzI2MSxcbiAgXCJuaWV1bmhpZXVoa29yZWFuXCIsXG4gIDB4MzEzNixcbiAgXCJuaWV1bmtvcmVhblwiLFxuICAweDMxMzQsXG4gIFwibmlldW5wYW5zaW9za29yZWFuXCIsXG4gIDB4MzE2OCxcbiAgXCJuaWV1bnBhcmVua29yZWFuXCIsXG4gIDB4MzIwMSxcbiAgXCJuaWV1bnNpb3Nrb3JlYW5cIixcbiAgMHgzMTY3LFxuICBcIm5pZXVudGlrZXV0a29yZWFuXCIsXG4gIDB4MzE2NixcbiAgXCJuaWhpcmFnYW5hXCIsXG4gIDB4MzA2YixcbiAgXCJuaWthdGFrYW5hXCIsXG4gIDB4MzBjYixcbiAgXCJuaWthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY4NixcbiAgXCJuaWtoYWhpdGxlZnR0aGFpXCIsXG4gIDB4Zjg5OSxcbiAgXCJuaWtoYWhpdHRoYWlcIixcbiAgMHgwZTRkLFxuICBcIm5pbmVcIixcbiAgMHgwMDM5LFxuICBcIm5pbmVhcmFiaWNcIixcbiAgMHgwNjY5LFxuICBcIm5pbmViZW5nYWxpXCIsXG4gIDB4MDllZixcbiAgXCJuaW5lY2lyY2xlXCIsXG4gIDB4MjQ2OCxcbiAgXCJuaW5lY2lyY2xlaW52ZXJzZXNhbnNzZXJpZlwiLFxuICAweDI3OTIsXG4gIFwibmluZWRldmFcIixcbiAgMHgwOTZmLFxuICBcIm5pbmVndWphcmF0aVwiLFxuICAweDBhZWYsXG4gIFwibmluZWd1cm11a2hpXCIsXG4gIDB4MGE2ZixcbiAgXCJuaW5laGFja2FyYWJpY1wiLFxuICAweDA2NjksXG4gIFwibmluZWhhbmd6aG91XCIsXG4gIDB4MzAyOSxcbiAgXCJuaW5laWRlb2dyYXBoaWNwYXJlblwiLFxuICAweDMyMjgsXG4gIFwibmluZWluZmVyaW9yXCIsXG4gIDB4MjA4OSxcbiAgXCJuaW5lbW9ub3NwYWNlXCIsXG4gIDB4ZmYxOSxcbiAgXCJuaW5lb2xkc3R5bGVcIixcbiAgMHhmNzM5LFxuICBcIm5pbmVwYXJlblwiLFxuICAweDI0N2MsXG4gIFwibmluZXBlcmlvZFwiLFxuICAweDI0OTAsXG4gIFwibmluZXBlcnNpYW5cIixcbiAgMHgwNmY5LFxuICBcIm5pbmVyb21hblwiLFxuICAweDIxNzgsXG4gIFwibmluZXN1cGVyaW9yXCIsXG4gIDB4MjA3OSxcbiAgXCJuaW5ldGVlbmNpcmNsZVwiLFxuICAweDI0NzIsXG4gIFwibmluZXRlZW5wYXJlblwiLFxuICAweDI0ODYsXG4gIFwibmluZXRlZW5wZXJpb2RcIixcbiAgMHgyNDlhLFxuICBcIm5pbmV0aGFpXCIsXG4gIDB4MGU1OSxcbiAgXCJualwiLFxuICAweDAxY2MsXG4gIFwibmplY3lyaWxsaWNcIixcbiAgMHgwNDVhLFxuICBcIm5rYXRha2FuYVwiLFxuICAweDMwZjMsXG4gIFwibmthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY5ZCxcbiAgXCJubGVncmlnaHRsb25nXCIsXG4gIDB4MDE5ZSxcbiAgXCJubGluZWJlbG93XCIsXG4gIDB4MWU0OSxcbiAgXCJubW9ub3NwYWNlXCIsXG4gIDB4ZmY0ZSxcbiAgXCJubXNxdWFyZVwiLFxuICAweDMzOWEsXG4gIFwibm5hYmVuZ2FsaVwiLFxuICAweDA5YTMsXG4gIFwibm5hZGV2YVwiLFxuICAweDA5MjMsXG4gIFwibm5hZ3VqYXJhdGlcIixcbiAgMHgwYWEzLFxuICBcIm5uYWd1cm11a2hpXCIsXG4gIDB4MGEyMyxcbiAgXCJubm5hZGV2YVwiLFxuICAweDA5MjksXG4gIFwibm9oaXJhZ2FuYVwiLFxuICAweDMwNmUsXG4gIFwibm9rYXRha2FuYVwiLFxuICAweDMwY2UsXG4gIFwibm9rYXRha2FuYWhhbGZ3aWR0aFwiLFxuICAweGZmODksXG4gIFwibm9uYnJlYWtpbmdzcGFjZVwiLFxuICAweDAwYTAsXG4gIFwibm9uZW50aGFpXCIsXG4gIDB4MGUxMyxcbiAgXCJub251dGhhaVwiLFxuICAweDBlMTksXG4gIFwibm9vbmFyYWJpY1wiLFxuICAweDA2NDYsXG4gIFwibm9vbmZpbmFsYXJhYmljXCIsXG4gIDB4ZmVlNixcbiAgXCJub29uZ2h1bm5hYXJhYmljXCIsXG4gIDB4MDZiYSxcbiAgXCJub29uZ2h1bm5hZmluYWxhcmFiaWNcIixcbiAgMHhmYjlmLFxuICBcIm5vb25pbml0aWFsYXJhYmljXCIsXG4gIDB4ZmVlNyxcbiAgXCJub29uamVlbWluaXRpYWxhcmFiaWNcIixcbiAgMHhmY2QyLFxuICBcIm5vb25qZWVtaXNvbGF0ZWRhcmFiaWNcIixcbiAgMHhmYzRiLFxuICBcIm5vb25tZWRpYWxhcmFiaWNcIixcbiAgMHhmZWU4LFxuICBcIm5vb25tZWVtaW5pdGlhbGFyYWJpY1wiLFxuICAweGZjZDUsXG4gIFwibm9vbm1lZW1pc29sYXRlZGFyYWJpY1wiLFxuICAweGZjNGUsXG4gIFwibm9vbm5vb25maW5hbGFyYWJpY1wiLFxuICAweGZjOGQsXG4gIFwibm90Y29udGFpbnNcIixcbiAgMHgyMjBjLFxuICBcIm5vdGVsZW1lbnRcIixcbiAgMHgyMjA5LFxuICBcIm5vdGVsZW1lbnRvZlwiLFxuICAweDIyMDksXG4gIFwibm90ZXF1YWxcIixcbiAgMHgyMjYwLFxuICBcIm5vdGdyZWF0ZXJcIixcbiAgMHgyMjZmLFxuICBcIm5vdGdyZWF0ZXJub3JlcXVhbFwiLFxuICAweDIyNzEsXG4gIFwibm90Z3JlYXRlcm5vcmxlc3NcIixcbiAgMHgyMjc5LFxuICBcIm5vdGlkZW50aWNhbFwiLFxuICAweDIyNjIsXG4gIFwibm90bGVzc1wiLFxuICAweDIyNmUsXG4gIFwibm90bGVzc25vcmVxdWFsXCIsXG4gIDB4MjI3MCxcbiAgXCJub3RwYXJhbGxlbFwiLFxuICAweDIyMjYsXG4gIFwibm90cHJlY2VkZXNcIixcbiAgMHgyMjgwLFxuICBcIm5vdHN1YnNldFwiLFxuICAweDIyODQsXG4gIFwibm90c3VjY2VlZHNcIixcbiAgMHgyMjgxLFxuICBcIm5vdHN1cGVyc2V0XCIsXG4gIDB4MjI4NSxcbiAgXCJub3dhcm1lbmlhblwiLFxuICAweDA1NzYsXG4gIFwibnBhcmVuXCIsXG4gIDB4MjRhOSxcbiAgXCJuc3NxdWFyZVwiLFxuICAweDMzYjEsXG4gIFwibnN1cGVyaW9yXCIsXG4gIDB4MjA3ZixcbiAgXCJudGlsZGVcIixcbiAgMHgwMGYxLFxuICBcIm51XCIsXG4gIDB4MDNiZCxcbiAgXCJudWhpcmFnYW5hXCIsXG4gIDB4MzA2YyxcbiAgXCJudWthdGFrYW5hXCIsXG4gIDB4MzBjYyxcbiAgXCJudWthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY4NyxcbiAgXCJudWt0YWJlbmdhbGlcIixcbiAgMHgwOWJjLFxuICBcIm51a3RhZGV2YVwiLFxuICAweDA5M2MsXG4gIFwibnVrdGFndWphcmF0aVwiLFxuICAweDBhYmMsXG4gIFwibnVrdGFndXJtdWtoaVwiLFxuICAweDBhM2MsXG4gIFwibnVtYmVyc2lnblwiLFxuICAweDAwMjMsXG4gIFwibnVtYmVyc2lnbm1vbm9zcGFjZVwiLFxuICAweGZmMDMsXG4gIFwibnVtYmVyc2lnbnNtYWxsXCIsXG4gIDB4ZmU1ZixcbiAgXCJudW1lcmFsc2lnbmdyZWVrXCIsXG4gIDB4MDM3NCxcbiAgXCJudW1lcmFsc2lnbmxvd2VyZ3JlZWtcIixcbiAgMHgwMzc1LFxuICBcIm51bWVyb1wiLFxuICAweDIxMTYsXG4gIFwibnVuXCIsXG4gIDB4MDVlMCxcbiAgXCJudW5kYWdlc2hcIixcbiAgMHhmYjQwLFxuICBcIm51bmRhZ2VzaGhlYnJld1wiLFxuICAweGZiNDAsXG4gIFwibnVuaGVicmV3XCIsXG4gIDB4MDVlMCxcbiAgXCJudnNxdWFyZVwiLFxuICAweDMzYjUsXG4gIFwibndzcXVhcmVcIixcbiAgMHgzM2JiLFxuICBcIm55YWJlbmdhbGlcIixcbiAgMHgwOTllLFxuICBcIm55YWRldmFcIixcbiAgMHgwOTFlLFxuICBcIm55YWd1amFyYXRpXCIsXG4gIDB4MGE5ZSxcbiAgXCJueWFndXJtdWtoaVwiLFxuICAweDBhMWUsXG4gIFwib1wiLFxuICAweDAwNmYsXG4gIFwib2FjdXRlXCIsXG4gIDB4MDBmMyxcbiAgXCJvYW5ndGhhaVwiLFxuICAweDBlMmQsXG4gIFwib2JhcnJlZFwiLFxuICAweDAyNzUsXG4gIFwib2JhcnJlZGN5cmlsbGljXCIsXG4gIDB4MDRlOSxcbiAgXCJvYmFycmVkZGllcmVzaXNjeXJpbGxpY1wiLFxuICAweDA0ZWIsXG4gIFwib2JlbmdhbGlcIixcbiAgMHgwOTkzLFxuICBcIm9ib3BvbW9mb1wiLFxuICAweDMxMWIsXG4gIFwib2JyZXZlXCIsXG4gIDB4MDE0ZixcbiAgXCJvY2FuZHJhZGV2YVwiLFxuICAweDA5MTEsXG4gIFwib2NhbmRyYWd1amFyYXRpXCIsXG4gIDB4MGE5MSxcbiAgXCJvY2FuZHJhdm93ZWxzaWduZGV2YVwiLFxuICAweDA5NDksXG4gIFwib2NhbmRyYXZvd2Vsc2lnbmd1amFyYXRpXCIsXG4gIDB4MGFjOSxcbiAgXCJvY2Fyb25cIixcbiAgMHgwMWQyLFxuICBcIm9jaXJjbGVcIixcbiAgMHgyNGRlLFxuICBcIm9jaXJjdW1mbGV4XCIsXG4gIDB4MDBmNCxcbiAgXCJvY2lyY3VtZmxleGFjdXRlXCIsXG4gIDB4MWVkMSxcbiAgXCJvY2lyY3VtZmxleGRvdGJlbG93XCIsXG4gIDB4MWVkOSxcbiAgXCJvY2lyY3VtZmxleGdyYXZlXCIsXG4gIDB4MWVkMyxcbiAgXCJvY2lyY3VtZmxleGhvb2thYm92ZVwiLFxuICAweDFlZDUsXG4gIFwib2NpcmN1bWZsZXh0aWxkZVwiLFxuICAweDFlZDcsXG4gIFwib2N5cmlsbGljXCIsXG4gIDB4MDQzZSxcbiAgXCJvZGJsYWN1dGVcIixcbiAgMHgwMTUxLFxuICBcIm9kYmxncmF2ZVwiLFxuICAweDAyMGQsXG4gIFwib2RldmFcIixcbiAgMHgwOTEzLFxuICBcIm9kaWVyZXNpc1wiLFxuICAweDAwZjYsXG4gIFwib2RpZXJlc2lzY3lyaWxsaWNcIixcbiAgMHgwNGU3LFxuICBcIm9kb3RiZWxvd1wiLFxuICAweDFlY2QsXG4gIFwib2VcIixcbiAgMHgwMTUzLFxuICBcIm9la29yZWFuXCIsXG4gIDB4MzE1YSxcbiAgXCJvZ29uZWtcIixcbiAgMHgwMmRiLFxuICBcIm9nb25la2NtYlwiLFxuICAweDAzMjgsXG4gIFwib2dyYXZlXCIsXG4gIDB4MDBmMixcbiAgXCJvZ3VqYXJhdGlcIixcbiAgMHgwYTkzLFxuICBcIm9oYXJtZW5pYW5cIixcbiAgMHgwNTg1LFxuICBcIm9oaXJhZ2FuYVwiLFxuICAweDMwNGEsXG4gIFwib2hvb2thYm92ZVwiLFxuICAweDFlY2YsXG4gIFwib2hvcm5cIixcbiAgMHgwMWExLFxuICBcIm9ob3JuYWN1dGVcIixcbiAgMHgxZWRiLFxuICBcIm9ob3JuZG90YmVsb3dcIixcbiAgMHgxZWUzLFxuICBcIm9ob3JuZ3JhdmVcIixcbiAgMHgxZWRkLFxuICBcIm9ob3JuaG9va2Fib3ZlXCIsXG4gIDB4MWVkZixcbiAgXCJvaG9ybnRpbGRlXCIsXG4gIDB4MWVlMSxcbiAgXCJvaHVuZ2FydW1sYXV0XCIsXG4gIDB4MDE1MSxcbiAgXCJvaVwiLFxuICAweDAxYTMsXG4gIFwib2ludmVydGVkYnJldmVcIixcbiAgMHgwMjBmLFxuICBcIm9rYXRha2FuYVwiLFxuICAweDMwYWEsXG4gIFwib2thdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY3NSxcbiAgXCJva29yZWFuXCIsXG4gIDB4MzE1NyxcbiAgXCJvbGVoZWJyZXdcIixcbiAgMHgwNWFiLFxuICBcIm9tYWNyb25cIixcbiAgMHgwMTRkLFxuICBcIm9tYWNyb25hY3V0ZVwiLFxuICAweDFlNTMsXG4gIFwib21hY3JvbmdyYXZlXCIsXG4gIDB4MWU1MSxcbiAgXCJvbWRldmFcIixcbiAgMHgwOTUwLFxuICBcIm9tZWdhXCIsXG4gIDB4MDNjOSxcbiAgXCJvbWVnYTFcIixcbiAgMHgwM2Q2LFxuICBcIm9tZWdhY3lyaWxsaWNcIixcbiAgMHgwNDYxLFxuICBcIm9tZWdhbGF0aW5jbG9zZWRcIixcbiAgMHgwMjc3LFxuICBcIm9tZWdhcm91bmRjeXJpbGxpY1wiLFxuICAweDA0N2IsXG4gIFwib21lZ2F0aXRsb2N5cmlsbGljXCIsXG4gIDB4MDQ3ZCxcbiAgXCJvbWVnYXRvbm9zXCIsXG4gIDB4MDNjZSxcbiAgXCJvbWd1amFyYXRpXCIsXG4gIDB4MGFkMCxcbiAgXCJvbWljcm9uXCIsXG4gIDB4MDNiZixcbiAgXCJvbWljcm9udG9ub3NcIixcbiAgMHgwM2NjLFxuICBcIm9tb25vc3BhY2VcIixcbiAgMHhmZjRmLFxuICBcIm9uZVwiLFxuICAweDAwMzEsXG4gIFwib25lYXJhYmljXCIsXG4gIDB4MDY2MSxcbiAgXCJvbmViZW5nYWxpXCIsXG4gIDB4MDllNyxcbiAgXCJvbmVjaXJjbGVcIixcbiAgMHgyNDYwLFxuICBcIm9uZWNpcmNsZWludmVyc2VzYW5zc2VyaWZcIixcbiAgMHgyNzhhLFxuICBcIm9uZWRldmFcIixcbiAgMHgwOTY3LFxuICBcIm9uZWRvdGVubGVhZGVyXCIsXG4gIDB4MjAyNCxcbiAgXCJvbmVlaWdodGhcIixcbiAgMHgyMTViLFxuICBcIm9uZWZpdHRlZFwiLFxuICAweGY2ZGMsXG4gIFwib25lZ3VqYXJhdGlcIixcbiAgMHgwYWU3LFxuICBcIm9uZWd1cm11a2hpXCIsXG4gIDB4MGE2NyxcbiAgXCJvbmVoYWNrYXJhYmljXCIsXG4gIDB4MDY2MSxcbiAgXCJvbmVoYWxmXCIsXG4gIDB4MDBiZCxcbiAgXCJvbmVoYW5nemhvdVwiLFxuICAweDMwMjEsXG4gIFwib25laWRlb2dyYXBoaWNwYXJlblwiLFxuICAweDMyMjAsXG4gIFwib25laW5mZXJpb3JcIixcbiAgMHgyMDgxLFxuICBcIm9uZW1vbm9zcGFjZVwiLFxuICAweGZmMTEsXG4gIFwib25lbnVtZXJhdG9yYmVuZ2FsaVwiLFxuICAweDA5ZjQsXG4gIFwib25lb2xkc3R5bGVcIixcbiAgMHhmNzMxLFxuICBcIm9uZXBhcmVuXCIsXG4gIDB4MjQ3NCxcbiAgXCJvbmVwZXJpb2RcIixcbiAgMHgyNDg4LFxuICBcIm9uZXBlcnNpYW5cIixcbiAgMHgwNmYxLFxuICBcIm9uZXF1YXJ0ZXJcIixcbiAgMHgwMGJjLFxuICBcIm9uZXJvbWFuXCIsXG4gIDB4MjE3MCxcbiAgXCJvbmVzdXBlcmlvclwiLFxuICAweDAwYjksXG4gIFwib25ldGhhaVwiLFxuICAweDBlNTEsXG4gIFwib25ldGhpcmRcIixcbiAgMHgyMTUzLFxuICBcIm9vZ29uZWtcIixcbiAgMHgwMWViLFxuICBcIm9vZ29uZWttYWNyb25cIixcbiAgMHgwMWVkLFxuICBcIm9vZ3VybXVraGlcIixcbiAgMHgwYTEzLFxuICBcIm9vbWF0cmFndXJtdWtoaVwiLFxuICAweDBhNGIsXG4gIFwib29wZW5cIixcbiAgMHgwMjU0LFxuICBcIm9wYXJlblwiLFxuICAweDI0YWEsXG4gIFwib3BlbmJ1bGxldFwiLFxuICAweDI1ZTYsXG4gIFwib3B0aW9uXCIsXG4gIDB4MjMyNSxcbiAgXCJvcmRmZW1pbmluZVwiLFxuICAweDAwYWEsXG4gIFwib3JkbWFzY3VsaW5lXCIsXG4gIDB4MDBiYSxcbiAgXCJvcnRob2dvbmFsXCIsXG4gIDB4MjIxZixcbiAgXCJvc2hvcnRkZXZhXCIsXG4gIDB4MDkxMixcbiAgXCJvc2hvcnR2b3dlbHNpZ25kZXZhXCIsXG4gIDB4MDk0YSxcbiAgXCJvc2xhc2hcIixcbiAgMHgwMGY4LFxuICBcIm9zbGFzaGFjdXRlXCIsXG4gIDB4MDFmZixcbiAgXCJvc21hbGxoaXJhZ2FuYVwiLFxuICAweDMwNDksXG4gIFwib3NtYWxsa2F0YWthbmFcIixcbiAgMHgzMGE5LFxuICBcIm9zbWFsbGthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY2YixcbiAgXCJvc3Ryb2tlYWN1dGVcIixcbiAgMHgwMWZmLFxuICBcIm9zdXBlcmlvclwiLFxuICAweGY2ZjAsXG4gIFwib3RjeXJpbGxpY1wiLFxuICAweDA0N2YsXG4gIFwib3RpbGRlXCIsXG4gIDB4MDBmNSxcbiAgXCJvdGlsZGVhY3V0ZVwiLFxuICAweDFlNGQsXG4gIFwib3RpbGRlZGllcmVzaXNcIixcbiAgMHgxZTRmLFxuICBcIm91Ym9wb21vZm9cIixcbiAgMHgzMTIxLFxuICBcIm92ZXJsaW5lXCIsXG4gIDB4MjAzZSxcbiAgXCJvdmVybGluZWNlbnRlcmxpbmVcIixcbiAgMHhmZTRhLFxuICBcIm92ZXJsaW5lY21iXCIsXG4gIDB4MDMwNSxcbiAgXCJvdmVybGluZWRhc2hlZFwiLFxuICAweGZlNDksXG4gIFwib3ZlcmxpbmVkYmx3YXZ5XCIsXG4gIDB4ZmU0YyxcbiAgXCJvdmVybGluZXdhdnlcIixcbiAgMHhmZTRiLFxuICBcIm92ZXJzY29yZVwiLFxuICAweDAwYWYsXG4gIFwib3Zvd2Vsc2lnbmJlbmdhbGlcIixcbiAgMHgwOWNiLFxuICBcIm92b3dlbHNpZ25kZXZhXCIsXG4gIDB4MDk0YixcbiAgXCJvdm93ZWxzaWduZ3VqYXJhdGlcIixcbiAgMHgwYWNiLFxuICBcInBcIixcbiAgMHgwMDcwLFxuICBcInBhYW1wc3NxdWFyZVwiLFxuICAweDMzODAsXG4gIFwicGFhc2VudG9zcXVhcmVcIixcbiAgMHgzMzJiLFxuICBcInBhYmVuZ2FsaVwiLFxuICAweDA5YWEsXG4gIFwicGFjdXRlXCIsXG4gIDB4MWU1NSxcbiAgXCJwYWRldmFcIixcbiAgMHgwOTJhLFxuICBcInBhZ2Vkb3duXCIsXG4gIDB4MjFkZixcbiAgXCJwYWdldXBcIixcbiAgMHgyMWRlLFxuICBcInBhZ3VqYXJhdGlcIixcbiAgMHgwYWFhLFxuICBcInBhZ3VybXVraGlcIixcbiAgMHgwYTJhLFxuICBcInBhaGlyYWdhbmFcIixcbiAgMHgzMDcxLFxuICBcInBhaXlhbm5vaXRoYWlcIixcbiAgMHgwZTJmLFxuICBcInBha2F0YWthbmFcIixcbiAgMHgzMGQxLFxuICBcInBhbGF0YWxpemF0aW9uY3lyaWxsaWNjbWJcIixcbiAgMHgwNDg0LFxuICBcInBhbG9jaGthY3lyaWxsaWNcIixcbiAgMHgwNGMwLFxuICBcInBhbnNpb3Nrb3JlYW5cIixcbiAgMHgzMTdmLFxuICBcInBhcmFncmFwaFwiLFxuICAweDAwYjYsXG4gIFwicGFyYWxsZWxcIixcbiAgMHgyMjI1LFxuICBcInBhcmVubGVmdFwiLFxuICAweDAwMjgsXG4gIFwicGFyZW5sZWZ0YWx0b25lYXJhYmljXCIsXG4gIDB4ZmQzZSxcbiAgXCJwYXJlbmxlZnRidFwiLFxuICAweGY4ZWQsXG4gIFwicGFyZW5sZWZ0ZXhcIixcbiAgMHhmOGVjLFxuICBcInBhcmVubGVmdGluZmVyaW9yXCIsXG4gIDB4MjA4ZCxcbiAgXCJwYXJlbmxlZnRtb25vc3BhY2VcIixcbiAgMHhmZjA4LFxuICBcInBhcmVubGVmdHNtYWxsXCIsXG4gIDB4ZmU1OSxcbiAgXCJwYXJlbmxlZnRzdXBlcmlvclwiLFxuICAweDIwN2QsXG4gIFwicGFyZW5sZWZ0dHBcIixcbiAgMHhmOGViLFxuICBcInBhcmVubGVmdHZlcnRpY2FsXCIsXG4gIDB4ZmUzNSxcbiAgXCJwYXJlbnJpZ2h0XCIsXG4gIDB4MDAyOSxcbiAgXCJwYXJlbnJpZ2h0YWx0b25lYXJhYmljXCIsXG4gIDB4ZmQzZixcbiAgXCJwYXJlbnJpZ2h0YnRcIixcbiAgMHhmOGY4LFxuICBcInBhcmVucmlnaHRleFwiLFxuICAweGY4ZjcsXG4gIFwicGFyZW5yaWdodGluZmVyaW9yXCIsXG4gIDB4MjA4ZSxcbiAgXCJwYXJlbnJpZ2h0bW9ub3NwYWNlXCIsXG4gIDB4ZmYwOSxcbiAgXCJwYXJlbnJpZ2h0c21hbGxcIixcbiAgMHhmZTVhLFxuICBcInBhcmVucmlnaHRzdXBlcmlvclwiLFxuICAweDIwN2UsXG4gIFwicGFyZW5yaWdodHRwXCIsXG4gIDB4ZjhmNixcbiAgXCJwYXJlbnJpZ2h0dmVydGljYWxcIixcbiAgMHhmZTM2LFxuICBcInBhcnRpYWxkaWZmXCIsXG4gIDB4MjIwMixcbiAgXCJwYXNlcWhlYnJld1wiLFxuICAweDA1YzAsXG4gIFwicGFzaHRhaGVicmV3XCIsXG4gIDB4MDU5OSxcbiAgXCJwYXNxdWFyZVwiLFxuICAweDMzYTksXG4gIFwicGF0YWhcIixcbiAgMHgwNWI3LFxuICBcInBhdGFoMTFcIixcbiAgMHgwNWI3LFxuICBcInBhdGFoMWRcIixcbiAgMHgwNWI3LFxuICBcInBhdGFoMmFcIixcbiAgMHgwNWI3LFxuICBcInBhdGFoaGVicmV3XCIsXG4gIDB4MDViNyxcbiAgXCJwYXRhaG5hcnJvd2hlYnJld1wiLFxuICAweDA1YjcsXG4gIFwicGF0YWhxdWFydGVyaGVicmV3XCIsXG4gIDB4MDViNyxcbiAgXCJwYXRhaHdpZGVoZWJyZXdcIixcbiAgMHgwNWI3LFxuICBcInBhemVyaGVicmV3XCIsXG4gIDB4MDVhMSxcbiAgXCJwYm9wb21vZm9cIixcbiAgMHgzMTA2LFxuICBcInBjaXJjbGVcIixcbiAgMHgyNGRmLFxuICBcInBkb3RhY2NlbnRcIixcbiAgMHgxZTU3LFxuICBcInBlXCIsXG4gIDB4MDVlNCxcbiAgXCJwZWN5cmlsbGljXCIsXG4gIDB4MDQzZixcbiAgXCJwZWRhZ2VzaFwiLFxuICAweGZiNDQsXG4gIFwicGVkYWdlc2hoZWJyZXdcIixcbiAgMHhmYjQ0LFxuICBcInBlZXppc3F1YXJlXCIsXG4gIDB4MzMzYixcbiAgXCJwZWZpbmFsZGFnZXNoaGVicmV3XCIsXG4gIDB4ZmI0MyxcbiAgXCJwZWhhcmFiaWNcIixcbiAgMHgwNjdlLFxuICBcInBlaGFybWVuaWFuXCIsXG4gIDB4MDU3YSxcbiAgXCJwZWhlYnJld1wiLFxuICAweDA1ZTQsXG4gIFwicGVoZmluYWxhcmFiaWNcIixcbiAgMHhmYjU3LFxuICBcInBlaGluaXRpYWxhcmFiaWNcIixcbiAgMHhmYjU4LFxuICBcInBlaGlyYWdhbmFcIixcbiAgMHgzMDdhLFxuICBcInBlaG1lZGlhbGFyYWJpY1wiLFxuICAweGZiNTksXG4gIFwicGVrYXRha2FuYVwiLFxuICAweDMwZGEsXG4gIFwicGVtaWRkbGVob29rY3lyaWxsaWNcIixcbiAgMHgwNGE3LFxuICBcInBlcmFmZWhlYnJld1wiLFxuICAweGZiNGUsXG4gIFwicGVyY2VudFwiLFxuICAweDAwMjUsXG4gIFwicGVyY2VudGFyYWJpY1wiLFxuICAweDA2NmEsXG4gIFwicGVyY2VudG1vbm9zcGFjZVwiLFxuICAweGZmMDUsXG4gIFwicGVyY2VudHNtYWxsXCIsXG4gIDB4ZmU2YSxcbiAgXCJwZXJpb2RcIixcbiAgMHgwMDJlLFxuICBcInBlcmlvZGFybWVuaWFuXCIsXG4gIDB4MDU4OSxcbiAgXCJwZXJpb2RjZW50ZXJlZFwiLFxuICAweDAwYjcsXG4gIFwicGVyaW9kaGFsZndpZHRoXCIsXG4gIDB4ZmY2MSxcbiAgXCJwZXJpb2RpbmZlcmlvclwiLFxuICAweGY2ZTcsXG4gIFwicGVyaW9kbW9ub3NwYWNlXCIsXG4gIDB4ZmYwZSxcbiAgXCJwZXJpb2RzbWFsbFwiLFxuICAweGZlNTIsXG4gIFwicGVyaW9kc3VwZXJpb3JcIixcbiAgMHhmNmU4LFxuICBcInBlcmlzcG9tZW5pZ3JlZWtjbWJcIixcbiAgMHgwMzQyLFxuICBcInBlcnBlbmRpY3VsYXJcIixcbiAgMHgyMmE1LFxuICBcInBlcnRob3VzYW5kXCIsXG4gIDB4MjAzMCxcbiAgXCJwZXNldGFcIixcbiAgMHgyMGE3LFxuICBcInBmc3F1YXJlXCIsXG4gIDB4MzM4YSxcbiAgXCJwaGFiZW5nYWxpXCIsXG4gIDB4MDlhYixcbiAgXCJwaGFkZXZhXCIsXG4gIDB4MDkyYixcbiAgXCJwaGFndWphcmF0aVwiLFxuICAweDBhYWIsXG4gIFwicGhhZ3VybXVraGlcIixcbiAgMHgwYTJiLFxuICBcInBoaVwiLFxuICAweDAzYzYsXG4gIFwicGhpMVwiLFxuICAweDAzZDUsXG4gIFwicGhpZXVwaGFjaXJjbGVrb3JlYW5cIixcbiAgMHgzMjdhLFxuICBcInBoaWV1cGhhcGFyZW5rb3JlYW5cIixcbiAgMHgzMjFhLFxuICBcInBoaWV1cGhjaXJjbGVrb3JlYW5cIixcbiAgMHgzMjZjLFxuICBcInBoaWV1cGhrb3JlYW5cIixcbiAgMHgzMTRkLFxuICBcInBoaWV1cGhwYXJlbmtvcmVhblwiLFxuICAweDMyMGMsXG4gIFwicGhpbGF0aW5cIixcbiAgMHgwMjc4LFxuICBcInBoaW50aHV0aGFpXCIsXG4gIDB4MGUzYSxcbiAgXCJwaGlzeW1ib2xncmVla1wiLFxuICAweDAzZDUsXG4gIFwicGhvb2tcIixcbiAgMHgwMWE1LFxuICBcInBob3BoYW50aGFpXCIsXG4gIDB4MGUxZSxcbiAgXCJwaG9waHVuZ3RoYWlcIixcbiAgMHgwZTFjLFxuICBcInBob3NhbXBoYW90aGFpXCIsXG4gIDB4MGUyMCxcbiAgXCJwaVwiLFxuICAweDAzYzAsXG4gIFwicGlldXBhY2lyY2xla29yZWFuXCIsXG4gIDB4MzI3MyxcbiAgXCJwaWV1cGFwYXJlbmtvcmVhblwiLFxuICAweDMyMTMsXG4gIFwicGlldXBjaWV1Y2tvcmVhblwiLFxuICAweDMxNzYsXG4gIFwicGlldXBjaXJjbGVrb3JlYW5cIixcbiAgMHgzMjY1LFxuICBcInBpZXVwa2l5ZW9ra29yZWFuXCIsXG4gIDB4MzE3MixcbiAgXCJwaWV1cGtvcmVhblwiLFxuICAweDMxNDIsXG4gIFwicGlldXBwYXJlbmtvcmVhblwiLFxuICAweDMyMDUsXG4gIFwicGlldXBzaW9za2l5ZW9ra29yZWFuXCIsXG4gIDB4MzE3NCxcbiAgXCJwaWV1cHNpb3Nrb3JlYW5cIixcbiAgMHgzMTQ0LFxuICBcInBpZXVwc2lvc3Rpa2V1dGtvcmVhblwiLFxuICAweDMxNzUsXG4gIFwicGlldXB0aGlldXRoa29yZWFuXCIsXG4gIDB4MzE3NyxcbiAgXCJwaWV1cHRpa2V1dGtvcmVhblwiLFxuICAweDMxNzMsXG4gIFwicGloaXJhZ2FuYVwiLFxuICAweDMwNzQsXG4gIFwicGlrYXRha2FuYVwiLFxuICAweDMwZDQsXG4gIFwicGlzeW1ib2xncmVla1wiLFxuICAweDAzZDYsXG4gIFwicGl3cmFybWVuaWFuXCIsXG4gIDB4MDU4MyxcbiAgXCJwbHVzXCIsXG4gIDB4MDAyYixcbiAgXCJwbHVzYmVsb3djbWJcIixcbiAgMHgwMzFmLFxuICBcInBsdXNjaXJjbGVcIixcbiAgMHgyMjk1LFxuICBcInBsdXNtaW51c1wiLFxuICAweDAwYjEsXG4gIFwicGx1c21vZFwiLFxuICAweDAyZDYsXG4gIFwicGx1c21vbm9zcGFjZVwiLFxuICAweGZmMGIsXG4gIFwicGx1c3NtYWxsXCIsXG4gIDB4ZmU2MixcbiAgXCJwbHVzc3VwZXJpb3JcIixcbiAgMHgyMDdhLFxuICBcInBtb25vc3BhY2VcIixcbiAgMHhmZjUwLFxuICBcInBtc3F1YXJlXCIsXG4gIDB4MzNkOCxcbiAgXCJwb2hpcmFnYW5hXCIsXG4gIDB4MzA3ZCxcbiAgXCJwb2ludGluZ2luZGV4ZG93bndoaXRlXCIsXG4gIDB4MjYxZixcbiAgXCJwb2ludGluZ2luZGV4bGVmdHdoaXRlXCIsXG4gIDB4MjYxYyxcbiAgXCJwb2ludGluZ2luZGV4cmlnaHR3aGl0ZVwiLFxuICAweDI2MWUsXG4gIFwicG9pbnRpbmdpbmRleHVwd2hpdGVcIixcbiAgMHgyNjFkLFxuICBcInBva2F0YWthbmFcIixcbiAgMHgzMGRkLFxuICBcInBvcGxhdGhhaVwiLFxuICAweDBlMWIsXG4gIFwicG9zdGFsbWFya1wiLFxuICAweDMwMTIsXG4gIFwicG9zdGFsbWFya2ZhY2VcIixcbiAgMHgzMDIwLFxuICBcInBwYXJlblwiLFxuICAweDI0YWIsXG4gIFwicHJlY2VkZXNcIixcbiAgMHgyMjdhLFxuICBcInByZXNjcmlwdGlvblwiLFxuICAweDIxMWUsXG4gIFwicHJpbWVtb2RcIixcbiAgMHgwMmI5LFxuICBcInByaW1lcmV2ZXJzZWRcIixcbiAgMHgyMDM1LFxuICBcInByb2R1Y3RcIixcbiAgMHgyMjBmLFxuICBcInByb2plY3RpdmVcIixcbiAgMHgyMzA1LFxuICBcInByb2xvbmdlZGthbmFcIixcbiAgMHgzMGZjLFxuICBcInByb3BlbGxvclwiLFxuICAweDIzMTgsXG4gIFwicHJvcGVyc3Vic2V0XCIsXG4gIDB4MjI4MixcbiAgXCJwcm9wZXJzdXBlcnNldFwiLFxuICAweDIyODMsXG4gIFwicHJvcG9ydGlvblwiLFxuICAweDIyMzcsXG4gIFwicHJvcG9ydGlvbmFsXCIsXG4gIDB4MjIxZCxcbiAgXCJwc2lcIixcbiAgMHgwM2M4LFxuICBcInBzaWN5cmlsbGljXCIsXG4gIDB4MDQ3MSxcbiAgXCJwc2lsaXBuZXVtYXRhY3lyaWxsaWNjbWJcIixcbiAgMHgwNDg2LFxuICBcInBzc3F1YXJlXCIsXG4gIDB4MzNiMCxcbiAgXCJwdWhpcmFnYW5hXCIsXG4gIDB4MzA3NyxcbiAgXCJwdWthdGFrYW5hXCIsXG4gIDB4MzBkNyxcbiAgXCJwdnNxdWFyZVwiLFxuICAweDMzYjQsXG4gIFwicHdzcXVhcmVcIixcbiAgMHgzM2JhLFxuICBcInFcIixcbiAgMHgwMDcxLFxuICBcInFhZGV2YVwiLFxuICAweDA5NTgsXG4gIFwicWFkbWFoZWJyZXdcIixcbiAgMHgwNWE4LFxuICBcInFhZmFyYWJpY1wiLFxuICAweDA2NDIsXG4gIFwicWFmZmluYWxhcmFiaWNcIixcbiAgMHhmZWQ2LFxuICBcInFhZmluaXRpYWxhcmFiaWNcIixcbiAgMHhmZWQ3LFxuICBcInFhZm1lZGlhbGFyYWJpY1wiLFxuICAweGZlZDgsXG4gIFwicWFtYXRzXCIsXG4gIDB4MDViOCxcbiAgXCJxYW1hdHMxMFwiLFxuICAweDA1YjgsXG4gIFwicWFtYXRzMWFcIixcbiAgMHgwNWI4LFxuICBcInFhbWF0czFjXCIsXG4gIDB4MDViOCxcbiAgXCJxYW1hdHMyN1wiLFxuICAweDA1YjgsXG4gIFwicWFtYXRzMjlcIixcbiAgMHgwNWI4LFxuICBcInFhbWF0czMzXCIsXG4gIDB4MDViOCxcbiAgXCJxYW1hdHNkZVwiLFxuICAweDA1YjgsXG4gIFwicWFtYXRzaGVicmV3XCIsXG4gIDB4MDViOCxcbiAgXCJxYW1hdHNuYXJyb3doZWJyZXdcIixcbiAgMHgwNWI4LFxuICBcInFhbWF0c3FhdGFuaGVicmV3XCIsXG4gIDB4MDViOCxcbiAgXCJxYW1hdHNxYXRhbm5hcnJvd2hlYnJld1wiLFxuICAweDA1YjgsXG4gIFwicWFtYXRzcWF0YW5xdWFydGVyaGVicmV3XCIsXG4gIDB4MDViOCxcbiAgXCJxYW1hdHNxYXRhbndpZGVoZWJyZXdcIixcbiAgMHgwNWI4LFxuICBcInFhbWF0c3F1YXJ0ZXJoZWJyZXdcIixcbiAgMHgwNWI4LFxuICBcInFhbWF0c3dpZGVoZWJyZXdcIixcbiAgMHgwNWI4LFxuICBcInFhcm5leXBhcmFoZWJyZXdcIixcbiAgMHgwNTlmLFxuICBcInFib3BvbW9mb1wiLFxuICAweDMxMTEsXG4gIFwicWNpcmNsZVwiLFxuICAweDI0ZTAsXG4gIFwicWhvb2tcIixcbiAgMHgwMmEwLFxuICBcInFtb25vc3BhY2VcIixcbiAgMHhmZjUxLFxuICBcInFvZlwiLFxuICAweDA1ZTcsXG4gIFwicW9mZGFnZXNoXCIsXG4gIDB4ZmI0NyxcbiAgXCJxb2ZkYWdlc2hoZWJyZXdcIixcbiAgMHhmYjQ3LFxuICBcInFvZmhlYnJld1wiLFxuICAweDA1ZTcsXG4gIFwicXBhcmVuXCIsXG4gIDB4MjRhYyxcbiAgXCJxdWFydGVybm90ZVwiLFxuICAweDI2NjksXG4gIFwicXVidXRzXCIsXG4gIDB4MDViYixcbiAgXCJxdWJ1dHMxOFwiLFxuICAweDA1YmIsXG4gIFwicXVidXRzMjVcIixcbiAgMHgwNWJiLFxuICBcInF1YnV0czMxXCIsXG4gIDB4MDViYixcbiAgXCJxdWJ1dHNoZWJyZXdcIixcbiAgMHgwNWJiLFxuICBcInF1YnV0c25hcnJvd2hlYnJld1wiLFxuICAweDA1YmIsXG4gIFwicXVidXRzcXVhcnRlcmhlYnJld1wiLFxuICAweDA1YmIsXG4gIFwicXVidXRzd2lkZWhlYnJld1wiLFxuICAweDA1YmIsXG4gIFwicXVlc3Rpb25cIixcbiAgMHgwMDNmLFxuICBcInF1ZXN0aW9uYXJhYmljXCIsXG4gIDB4MDYxZixcbiAgXCJxdWVzdGlvbmFybWVuaWFuXCIsXG4gIDB4MDU1ZSxcbiAgXCJxdWVzdGlvbmRvd25cIixcbiAgMHgwMGJmLFxuICBcInF1ZXN0aW9uZG93bnNtYWxsXCIsXG4gIDB4ZjdiZixcbiAgXCJxdWVzdGlvbmdyZWVrXCIsXG4gIDB4MDM3ZSxcbiAgXCJxdWVzdGlvbm1vbm9zcGFjZVwiLFxuICAweGZmMWYsXG4gIFwicXVlc3Rpb25zbWFsbFwiLFxuICAweGY3M2YsXG4gIFwicXVvdGVkYmxcIixcbiAgMHgwMDIyLFxuICBcInF1b3RlZGJsYmFzZVwiLFxuICAweDIwMWUsXG4gIFwicXVvdGVkYmxsZWZ0XCIsXG4gIDB4MjAxYyxcbiAgXCJxdW90ZWRibG1vbm9zcGFjZVwiLFxuICAweGZmMDIsXG4gIFwicXVvdGVkYmxwcmltZVwiLFxuICAweDMwMWUsXG4gIFwicXVvdGVkYmxwcmltZXJldmVyc2VkXCIsXG4gIDB4MzAxZCxcbiAgXCJxdW90ZWRibHJpZ2h0XCIsXG4gIDB4MjAxZCxcbiAgXCJxdW90ZWxlZnRcIixcbiAgMHgyMDE4LFxuICBcInF1b3RlbGVmdHJldmVyc2VkXCIsXG4gIDB4MjAxYixcbiAgXCJxdW90ZXJldmVyc2VkXCIsXG4gIDB4MjAxYixcbiAgXCJxdW90ZXJpZ2h0XCIsXG4gIDB4MjAxOSxcbiAgXCJxdW90ZXJpZ2h0blwiLFxuICAweDAxNDksXG4gIFwicXVvdGVzaW5nbGJhc2VcIixcbiAgMHgyMDFhLFxuICBcInF1b3Rlc2luZ2xlXCIsXG4gIDB4MDAyNyxcbiAgXCJxdW90ZXNpbmdsZW1vbm9zcGFjZVwiLFxuICAweGZmMDcsXG4gIFwiclwiLFxuICAweDAwNzIsXG4gIFwicmFhcm1lbmlhblwiLFxuICAweDA1N2MsXG4gIFwicmFiZW5nYWxpXCIsXG4gIDB4MDliMCxcbiAgXCJyYWN1dGVcIixcbiAgMHgwMTU1LFxuICBcInJhZGV2YVwiLFxuICAweDA5MzAsXG4gIFwicmFkaWNhbFwiLFxuICAweDIyMWEsXG4gIFwicmFkaWNhbGV4XCIsXG4gIDB4ZjhlNSxcbiAgXCJyYWRvdmVyc3NxdWFyZVwiLFxuICAweDMzYWUsXG4gIFwicmFkb3ZlcnNzcXVhcmVkc3F1YXJlXCIsXG4gIDB4MzNhZixcbiAgXCJyYWRzcXVhcmVcIixcbiAgMHgzM2FkLFxuICBcInJhZmVcIixcbiAgMHgwNWJmLFxuICBcInJhZmVoZWJyZXdcIixcbiAgMHgwNWJmLFxuICBcInJhZ3VqYXJhdGlcIixcbiAgMHgwYWIwLFxuICBcInJhZ3VybXVraGlcIixcbiAgMHgwYTMwLFxuICBcInJhaGlyYWdhbmFcIixcbiAgMHgzMDg5LFxuICBcInJha2F0YWthbmFcIixcbiAgMHgzMGU5LFxuICBcInJha2F0YWthbmFoYWxmd2lkdGhcIixcbiAgMHhmZjk3LFxuICBcInJhbG93ZXJkaWFnb25hbGJlbmdhbGlcIixcbiAgMHgwOWYxLFxuICBcInJhbWlkZGxlZGlhZ29uYWxiZW5nYWxpXCIsXG4gIDB4MDlmMCxcbiAgXCJyYW1zaG9yblwiLFxuICAweDAyNjQsXG4gIFwicmF0aW9cIixcbiAgMHgyMjM2LFxuICBcInJib3BvbW9mb1wiLFxuICAweDMxMTYsXG4gIFwicmNhcm9uXCIsXG4gIDB4MDE1OSxcbiAgXCJyY2VkaWxsYVwiLFxuICAweDAxNTcsXG4gIFwicmNpcmNsZVwiLFxuICAweDI0ZTEsXG4gIFwicmNvbW1hYWNjZW50XCIsXG4gIDB4MDE1NyxcbiAgXCJyZGJsZ3JhdmVcIixcbiAgMHgwMjExLFxuICBcInJkb3RhY2NlbnRcIixcbiAgMHgxZTU5LFxuICBcInJkb3RiZWxvd1wiLFxuICAweDFlNWIsXG4gIFwicmRvdGJlbG93bWFjcm9uXCIsXG4gIDB4MWU1ZCxcbiAgXCJyZWZlcmVuY2VtYXJrXCIsXG4gIDB4MjAzYixcbiAgXCJyZWZsZXhzdWJzZXRcIixcbiAgMHgyMjg2LFxuICBcInJlZmxleHN1cGVyc2V0XCIsXG4gIDB4MjI4NyxcbiAgXCJyZWdpc3RlcmVkXCIsXG4gIDB4MDBhZSxcbiAgXCJyZWdpc3RlcnNhbnNcIixcbiAgMHhmOGU4LFxuICBcInJlZ2lzdGVyc2VyaWZcIixcbiAgMHhmNmRhLFxuICBcInJlaGFyYWJpY1wiLFxuICAweDA2MzEsXG4gIFwicmVoYXJtZW5pYW5cIixcbiAgMHgwNTgwLFxuICBcInJlaGZpbmFsYXJhYmljXCIsXG4gIDB4ZmVhZSxcbiAgXCJyZWhpcmFnYW5hXCIsXG4gIDB4MzA4YyxcbiAgXCJyZWthdGFrYW5hXCIsXG4gIDB4MzBlYyxcbiAgXCJyZWthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY5YSxcbiAgXCJyZXNoXCIsXG4gIDB4MDVlOCxcbiAgXCJyZXNoZGFnZXNoaGVicmV3XCIsXG4gIDB4ZmI0OCxcbiAgXCJyZXNoaGVicmV3XCIsXG4gIDB4MDVlOCxcbiAgXCJyZXZlcnNlZHRpbGRlXCIsXG4gIDB4MjIzZCxcbiAgXCJyZXZpYWhlYnJld1wiLFxuICAweDA1OTcsXG4gIFwicmV2aWFtdWdyYXNoaGVicmV3XCIsXG4gIDB4MDU5NyxcbiAgXCJyZXZsb2dpY2Fsbm90XCIsXG4gIDB4MjMxMCxcbiAgXCJyZmlzaGhvb2tcIixcbiAgMHgwMjdlLFxuICBcInJmaXNoaG9va3JldmVyc2VkXCIsXG4gIDB4MDI3ZixcbiAgXCJyaGFiZW5nYWxpXCIsXG4gIDB4MDlkZCxcbiAgXCJyaGFkZXZhXCIsXG4gIDB4MDk1ZCxcbiAgXCJyaG9cIixcbiAgMHgwM2MxLFxuICBcInJob29rXCIsXG4gIDB4MDI3ZCxcbiAgXCJyaG9va3R1cm5lZFwiLFxuICAweDAyN2IsXG4gIFwicmhvb2t0dXJuZWRzdXBlcmlvclwiLFxuICAweDAyYjUsXG4gIFwicmhvc3ltYm9sZ3JlZWtcIixcbiAgMHgwM2YxLFxuICBcInJob3RpY2hvb2ttb2RcIixcbiAgMHgwMmRlLFxuICBcInJpZXVsYWNpcmNsZWtvcmVhblwiLFxuICAweDMyNzEsXG4gIFwicmlldWxhcGFyZW5rb3JlYW5cIixcbiAgMHgzMjExLFxuICBcInJpZXVsY2lyY2xla29yZWFuXCIsXG4gIDB4MzI2MyxcbiAgXCJyaWV1bGhpZXVoa29yZWFuXCIsXG4gIDB4MzE0MCxcbiAgXCJyaWV1bGtpeWVva2tvcmVhblwiLFxuICAweDMxM2EsXG4gIFwicmlldWxraXllb2tzaW9za29yZWFuXCIsXG4gIDB4MzE2OSxcbiAgXCJyaWV1bGtvcmVhblwiLFxuICAweDMxMzksXG4gIFwicmlldWxtaWV1bWtvcmVhblwiLFxuICAweDMxM2IsXG4gIFwicmlldWxwYW5zaW9za29yZWFuXCIsXG4gIDB4MzE2YyxcbiAgXCJyaWV1bHBhcmVua29yZWFuXCIsXG4gIDB4MzIwMyxcbiAgXCJyaWV1bHBoaWV1cGhrb3JlYW5cIixcbiAgMHgzMTNmLFxuICBcInJpZXVscGlldXBrb3JlYW5cIixcbiAgMHgzMTNjLFxuICBcInJpZXVscGlldXBzaW9za29yZWFuXCIsXG4gIDB4MzE2YixcbiAgXCJyaWV1bHNpb3Nrb3JlYW5cIixcbiAgMHgzMTNkLFxuICBcInJpZXVsdGhpZXV0aGtvcmVhblwiLFxuICAweDMxM2UsXG4gIFwicmlldWx0aWtldXRrb3JlYW5cIixcbiAgMHgzMTZhLFxuICBcInJpZXVseWVvcmluaGlldWhrb3JlYW5cIixcbiAgMHgzMTZkLFxuICBcInJpZ2h0YW5nbGVcIixcbiAgMHgyMjFmLFxuICBcInJpZ2h0dGFja2JlbG93Y21iXCIsXG4gIDB4MDMxOSxcbiAgXCJyaWdodHRyaWFuZ2xlXCIsXG4gIDB4MjJiZixcbiAgXCJyaWhpcmFnYW5hXCIsXG4gIDB4MzA4YSxcbiAgXCJyaWthdGFrYW5hXCIsXG4gIDB4MzBlYSxcbiAgXCJyaWthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY5OCxcbiAgXCJyaW5nXCIsXG4gIDB4MDJkYSxcbiAgXCJyaW5nYmVsb3djbWJcIixcbiAgMHgwMzI1LFxuICBcInJpbmdjbWJcIixcbiAgMHgwMzBhLFxuICBcInJpbmdoYWxmbGVmdFwiLFxuICAweDAyYmYsXG4gIFwicmluZ2hhbGZsZWZ0YXJtZW5pYW5cIixcbiAgMHgwNTU5LFxuICBcInJpbmdoYWxmbGVmdGJlbG93Y21iXCIsXG4gIDB4MDMxYyxcbiAgXCJyaW5naGFsZmxlZnRjZW50ZXJlZFwiLFxuICAweDAyZDMsXG4gIFwicmluZ2hhbGZyaWdodFwiLFxuICAweDAyYmUsXG4gIFwicmluZ2hhbGZyaWdodGJlbG93Y21iXCIsXG4gIDB4MDMzOSxcbiAgXCJyaW5naGFsZnJpZ2h0Y2VudGVyZWRcIixcbiAgMHgwMmQyLFxuICBcInJpbnZlcnRlZGJyZXZlXCIsXG4gIDB4MDIxMyxcbiAgXCJyaXR0b3J1c3F1YXJlXCIsXG4gIDB4MzM1MSxcbiAgXCJybGluZWJlbG93XCIsXG4gIDB4MWU1ZixcbiAgXCJybG9uZ2xlZ1wiLFxuICAweDAyN2MsXG4gIFwicmxvbmdsZWd0dXJuZWRcIixcbiAgMHgwMjdhLFxuICBcInJtb25vc3BhY2VcIixcbiAgMHhmZjUyLFxuICBcInJvaGlyYWdhbmFcIixcbiAgMHgzMDhkLFxuICBcInJva2F0YWthbmFcIixcbiAgMHgzMGVkLFxuICBcInJva2F0YWthbmFoYWxmd2lkdGhcIixcbiAgMHhmZjliLFxuICBcInJvcnVhdGhhaVwiLFxuICAweDBlMjMsXG4gIFwicnBhcmVuXCIsXG4gIDB4MjRhZCxcbiAgXCJycmFiZW5nYWxpXCIsXG4gIDB4MDlkYyxcbiAgXCJycmFkZXZhXCIsXG4gIDB4MDkzMSxcbiAgXCJycmFndXJtdWtoaVwiLFxuICAweDBhNWMsXG4gIFwicnJlaGFyYWJpY1wiLFxuICAweDA2OTEsXG4gIFwicnJlaGZpbmFsYXJhYmljXCIsXG4gIDB4ZmI4ZCxcbiAgXCJycnZvY2FsaWNiZW5nYWxpXCIsXG4gIDB4MDllMCxcbiAgXCJycnZvY2FsaWNkZXZhXCIsXG4gIDB4MDk2MCxcbiAgXCJycnZvY2FsaWNndWphcmF0aVwiLFxuICAweDBhZTAsXG4gIFwicnJ2b2NhbGljdm93ZWxzaWduYmVuZ2FsaVwiLFxuICAweDA5YzQsXG4gIFwicnJ2b2NhbGljdm93ZWxzaWduZGV2YVwiLFxuICAweDA5NDQsXG4gIFwicnJ2b2NhbGljdm93ZWxzaWduZ3VqYXJhdGlcIixcbiAgMHgwYWM0LFxuICBcInJzdXBlcmlvclwiLFxuICAweGY2ZjEsXG4gIFwicnRibG9ja1wiLFxuICAweDI1OTAsXG4gIFwicnR1cm5lZFwiLFxuICAweDAyNzksXG4gIFwicnR1cm5lZHN1cGVyaW9yXCIsXG4gIDB4MDJiNCxcbiAgXCJydWhpcmFnYW5hXCIsXG4gIDB4MzA4YixcbiAgXCJydWthdGFrYW5hXCIsXG4gIDB4MzBlYixcbiAgXCJydWthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY5OSxcbiAgXCJydXBlZW1hcmtiZW5nYWxpXCIsXG4gIDB4MDlmMixcbiAgXCJydXBlZXNpZ25iZW5nYWxpXCIsXG4gIDB4MDlmMyxcbiAgXCJydXBpYWhcIixcbiAgMHhmNmRkLFxuICBcInJ1dGhhaVwiLFxuICAweDBlMjQsXG4gIFwicnZvY2FsaWNiZW5nYWxpXCIsXG4gIDB4MDk4YixcbiAgXCJydm9jYWxpY2RldmFcIixcbiAgMHgwOTBiLFxuICBcInJ2b2NhbGljZ3VqYXJhdGlcIixcbiAgMHgwYThiLFxuICBcInJ2b2NhbGljdm93ZWxzaWduYmVuZ2FsaVwiLFxuICAweDA5YzMsXG4gIFwicnZvY2FsaWN2b3dlbHNpZ25kZXZhXCIsXG4gIDB4MDk0MyxcbiAgXCJydm9jYWxpY3Zvd2Vsc2lnbmd1amFyYXRpXCIsXG4gIDB4MGFjMyxcbiAgXCJzXCIsXG4gIDB4MDA3MyxcbiAgXCJzYWJlbmdhbGlcIixcbiAgMHgwOWI4LFxuICBcInNhY3V0ZVwiLFxuICAweDAxNWIsXG4gIFwic2FjdXRlZG90YWNjZW50XCIsXG4gIDB4MWU2NSxcbiAgXCJzYWRhcmFiaWNcIixcbiAgMHgwNjM1LFxuICBcInNhZGV2YVwiLFxuICAweDA5MzgsXG4gIFwic2FkZmluYWxhcmFiaWNcIixcbiAgMHhmZWJhLFxuICBcInNhZGluaXRpYWxhcmFiaWNcIixcbiAgMHhmZWJiLFxuICBcInNhZG1lZGlhbGFyYWJpY1wiLFxuICAweGZlYmMsXG4gIFwic2FndWphcmF0aVwiLFxuICAweDBhYjgsXG4gIFwic2FndXJtdWtoaVwiLFxuICAweDBhMzgsXG4gIFwic2FoaXJhZ2FuYVwiLFxuICAweDMwNTUsXG4gIFwic2FrYXRha2FuYVwiLFxuICAweDMwYjUsXG4gIFwic2FrYXRha2FuYWhhbGZ3aWR0aFwiLFxuICAweGZmN2IsXG4gIFwic2FsbGFsbGFob3VhbGF5aGV3YXNhbGxhbWFyYWJpY1wiLFxuICAweGZkZmEsXG4gIFwic2FtZWtoXCIsXG4gIDB4MDVlMSxcbiAgXCJzYW1la2hkYWdlc2hcIixcbiAgMHhmYjQxLFxuICBcInNhbWVraGRhZ2VzaGhlYnJld1wiLFxuICAweGZiNDEsXG4gIFwic2FtZWtoaGVicmV3XCIsXG4gIDB4MDVlMSxcbiAgXCJzYXJhYWF0aGFpXCIsXG4gIDB4MGUzMixcbiAgXCJzYXJhYWV0aGFpXCIsXG4gIDB4MGU0MSxcbiAgXCJzYXJhYWltYWltYWxhaXRoYWlcIixcbiAgMHgwZTQ0LFxuICBcInNhcmFhaW1haW11YW50aGFpXCIsXG4gIDB4MGU0MyxcbiAgXCJzYXJhYW10aGFpXCIsXG4gIDB4MGUzMyxcbiAgXCJzYXJhYXRoYWlcIixcbiAgMHgwZTMwLFxuICBcInNhcmFldGhhaVwiLFxuICAweDBlNDAsXG4gIFwic2FyYWlpbGVmdHRoYWlcIixcbiAgMHhmODg2LFxuICBcInNhcmFpaXRoYWlcIixcbiAgMHgwZTM1LFxuICBcInNhcmFpbGVmdHRoYWlcIixcbiAgMHhmODg1LFxuICBcInNhcmFpdGhhaVwiLFxuICAweDBlMzQsXG4gIFwic2FyYW90aGFpXCIsXG4gIDB4MGU0MixcbiAgXCJzYXJhdWVlbGVmdHRoYWlcIixcbiAgMHhmODg4LFxuICBcInNhcmF1ZWV0aGFpXCIsXG4gIDB4MGUzNyxcbiAgXCJzYXJhdWVsZWZ0dGhhaVwiLFxuICAweGY4ODcsXG4gIFwic2FyYXVldGhhaVwiLFxuICAweDBlMzYsXG4gIFwic2FyYXV0aGFpXCIsXG4gIDB4MGUzOCxcbiAgXCJzYXJhdXV0aGFpXCIsXG4gIDB4MGUzOSxcbiAgXCJzYm9wb21vZm9cIixcbiAgMHgzMTE5LFxuICBcInNjYXJvblwiLFxuICAweDAxNjEsXG4gIFwic2Nhcm9uZG90YWNjZW50XCIsXG4gIDB4MWU2NyxcbiAgXCJzY2VkaWxsYVwiLFxuICAweDAxNWYsXG4gIFwic2Nod2FcIixcbiAgMHgwMjU5LFxuICBcInNjaHdhY3lyaWxsaWNcIixcbiAgMHgwNGQ5LFxuICBcInNjaHdhZGllcmVzaXNjeXJpbGxpY1wiLFxuICAweDA0ZGIsXG4gIFwic2Nod2Fob29rXCIsXG4gIDB4MDI1YSxcbiAgXCJzY2lyY2xlXCIsXG4gIDB4MjRlMixcbiAgXCJzY2lyY3VtZmxleFwiLFxuICAweDAxNWQsXG4gIFwic2NvbW1hYWNjZW50XCIsXG4gIDB4MDIxOSxcbiAgXCJzZG90YWNjZW50XCIsXG4gIDB4MWU2MSxcbiAgXCJzZG90YmVsb3dcIixcbiAgMHgxZTYzLFxuICBcInNkb3RiZWxvd2RvdGFjY2VudFwiLFxuICAweDFlNjksXG4gIFwic2VhZ3VsbGJlbG93Y21iXCIsXG4gIDB4MDMzYyxcbiAgXCJzZWNvbmRcIixcbiAgMHgyMDMzLFxuICBcInNlY29uZHRvbmVjaGluZXNlXCIsXG4gIDB4MDJjYSxcbiAgXCJzZWN0aW9uXCIsXG4gIDB4MDBhNyxcbiAgXCJzZWVuYXJhYmljXCIsXG4gIDB4MDYzMyxcbiAgXCJzZWVuZmluYWxhcmFiaWNcIixcbiAgMHhmZWIyLFxuICBcInNlZW5pbml0aWFsYXJhYmljXCIsXG4gIDB4ZmViMyxcbiAgXCJzZWVubWVkaWFsYXJhYmljXCIsXG4gIDB4ZmViNCxcbiAgXCJzZWdvbFwiLFxuICAweDA1YjYsXG4gIFwic2Vnb2wxM1wiLFxuICAweDA1YjYsXG4gIFwic2Vnb2wxZlwiLFxuICAweDA1YjYsXG4gIFwic2Vnb2wyY1wiLFxuICAweDA1YjYsXG4gIFwic2Vnb2xoZWJyZXdcIixcbiAgMHgwNWI2LFxuICBcInNlZ29sbmFycm93aGVicmV3XCIsXG4gIDB4MDViNixcbiAgXCJzZWdvbHF1YXJ0ZXJoZWJyZXdcIixcbiAgMHgwNWI2LFxuICBcInNlZ29sdGFoZWJyZXdcIixcbiAgMHgwNTkyLFxuICBcInNlZ29sd2lkZWhlYnJld1wiLFxuICAweDA1YjYsXG4gIFwic2VoYXJtZW5pYW5cIixcbiAgMHgwNTdkLFxuICBcInNlaGlyYWdhbmFcIixcbiAgMHgzMDViLFxuICBcInNla2F0YWthbmFcIixcbiAgMHgzMGJiLFxuICBcInNla2F0YWthbmFoYWxmd2lkdGhcIixcbiAgMHhmZjdlLFxuICBcInNlbWljb2xvblwiLFxuICAweDAwM2IsXG4gIFwic2VtaWNvbG9uYXJhYmljXCIsXG4gIDB4MDYxYixcbiAgXCJzZW1pY29sb25tb25vc3BhY2VcIixcbiAgMHhmZjFiLFxuICBcInNlbWljb2xvbnNtYWxsXCIsXG4gIDB4ZmU1NCxcbiAgXCJzZW1pdm9pY2VkbWFya2thbmFcIixcbiAgMHgzMDljLFxuICBcInNlbWl2b2ljZWRtYXJra2FuYWhhbGZ3aWR0aFwiLFxuICAweGZmOWYsXG4gIFwic2VudGlzcXVhcmVcIixcbiAgMHgzMzIyLFxuICBcInNlbnRvc3F1YXJlXCIsXG4gIDB4MzMyMyxcbiAgXCJzZXZlblwiLFxuICAweDAwMzcsXG4gIFwic2V2ZW5hcmFiaWNcIixcbiAgMHgwNjY3LFxuICBcInNldmVuYmVuZ2FsaVwiLFxuICAweDA5ZWQsXG4gIFwic2V2ZW5jaXJjbGVcIixcbiAgMHgyNDY2LFxuICBcInNldmVuY2lyY2xlaW52ZXJzZXNhbnNzZXJpZlwiLFxuICAweDI3OTAsXG4gIFwic2V2ZW5kZXZhXCIsXG4gIDB4MDk2ZCxcbiAgXCJzZXZlbmVpZ2h0aHNcIixcbiAgMHgyMTVlLFxuICBcInNldmVuZ3VqYXJhdGlcIixcbiAgMHgwYWVkLFxuICBcInNldmVuZ3VybXVraGlcIixcbiAgMHgwYTZkLFxuICBcInNldmVuaGFja2FyYWJpY1wiLFxuICAweDA2NjcsXG4gIFwic2V2ZW5oYW5nemhvdVwiLFxuICAweDMwMjcsXG4gIFwic2V2ZW5pZGVvZ3JhcGhpY3BhcmVuXCIsXG4gIDB4MzIyNixcbiAgXCJzZXZlbmluZmVyaW9yXCIsXG4gIDB4MjA4NyxcbiAgXCJzZXZlbm1vbm9zcGFjZVwiLFxuICAweGZmMTcsXG4gIFwic2V2ZW5vbGRzdHlsZVwiLFxuICAweGY3MzcsXG4gIFwic2V2ZW5wYXJlblwiLFxuICAweDI0N2EsXG4gIFwic2V2ZW5wZXJpb2RcIixcbiAgMHgyNDhlLFxuICBcInNldmVucGVyc2lhblwiLFxuICAweDA2ZjcsXG4gIFwic2V2ZW5yb21hblwiLFxuICAweDIxNzYsXG4gIFwic2V2ZW5zdXBlcmlvclwiLFxuICAweDIwNzcsXG4gIFwic2V2ZW50ZWVuY2lyY2xlXCIsXG4gIDB4MjQ3MCxcbiAgXCJzZXZlbnRlZW5wYXJlblwiLFxuICAweDI0ODQsXG4gIFwic2V2ZW50ZWVucGVyaW9kXCIsXG4gIDB4MjQ5OCxcbiAgXCJzZXZlbnRoYWlcIixcbiAgMHgwZTU3LFxuICBcInNmdGh5cGhlblwiLFxuICAweDAwYWQsXG4gIFwic2hhYXJtZW5pYW5cIixcbiAgMHgwNTc3LFxuICBcInNoYWJlbmdhbGlcIixcbiAgMHgwOWI2LFxuICBcInNoYWN5cmlsbGljXCIsXG4gIDB4MDQ0OCxcbiAgXCJzaGFkZGFhcmFiaWNcIixcbiAgMHgwNjUxLFxuICBcInNoYWRkYWRhbW1hYXJhYmljXCIsXG4gIDB4ZmM2MSxcbiAgXCJzaGFkZGFkYW1tYXRhbmFyYWJpY1wiLFxuICAweGZjNWUsXG4gIFwic2hhZGRhZmF0aGFhcmFiaWNcIixcbiAgMHhmYzYwLFxuICBcInNoYWRkYWthc3JhYXJhYmljXCIsXG4gIDB4ZmM2MixcbiAgXCJzaGFkZGFrYXNyYXRhbmFyYWJpY1wiLFxuICAweGZjNWYsXG4gIFwic2hhZGVcIixcbiAgMHgyNTkyLFxuICBcInNoYWRlZGFya1wiLFxuICAweDI1OTMsXG4gIFwic2hhZGVsaWdodFwiLFxuICAweDI1OTEsXG4gIFwic2hhZGVtZWRpdW1cIixcbiAgMHgyNTkyLFxuICBcInNoYWRldmFcIixcbiAgMHgwOTM2LFxuICBcInNoYWd1amFyYXRpXCIsXG4gIDB4MGFiNixcbiAgXCJzaGFndXJtdWtoaVwiLFxuICAweDBhMzYsXG4gIFwic2hhbHNoZWxldGhlYnJld1wiLFxuICAweDA1OTMsXG4gIFwic2hib3BvbW9mb1wiLFxuICAweDMxMTUsXG4gIFwic2hjaGFjeXJpbGxpY1wiLFxuICAweDA0NDksXG4gIFwic2hlZW5hcmFiaWNcIixcbiAgMHgwNjM0LFxuICBcInNoZWVuZmluYWxhcmFiaWNcIixcbiAgMHhmZWI2LFxuICBcInNoZWVuaW5pdGlhbGFyYWJpY1wiLFxuICAweGZlYjcsXG4gIFwic2hlZW5tZWRpYWxhcmFiaWNcIixcbiAgMHhmZWI4LFxuICBcInNoZWljb3B0aWNcIixcbiAgMHgwM2UzLFxuICBcInNoZXFlbFwiLFxuICAweDIwYWEsXG4gIFwic2hlcWVsaGVicmV3XCIsXG4gIDB4MjBhYSxcbiAgXCJzaGV2YVwiLFxuICAweDA1YjAsXG4gIFwic2hldmExMTVcIixcbiAgMHgwNWIwLFxuICBcInNoZXZhMTVcIixcbiAgMHgwNWIwLFxuICBcInNoZXZhMjJcIixcbiAgMHgwNWIwLFxuICBcInNoZXZhMmVcIixcbiAgMHgwNWIwLFxuICBcInNoZXZhaGVicmV3XCIsXG4gIDB4MDViMCxcbiAgXCJzaGV2YW5hcnJvd2hlYnJld1wiLFxuICAweDA1YjAsXG4gIFwic2hldmFxdWFydGVyaGVicmV3XCIsXG4gIDB4MDViMCxcbiAgXCJzaGV2YXdpZGVoZWJyZXdcIixcbiAgMHgwNWIwLFxuICBcInNoaGFjeXJpbGxpY1wiLFxuICAweDA0YmIsXG4gIFwic2hpbWFjb3B0aWNcIixcbiAgMHgwM2VkLFxuICBcInNoaW5cIixcbiAgMHgwNWU5LFxuICBcInNoaW5kYWdlc2hcIixcbiAgMHhmYjQ5LFxuICBcInNoaW5kYWdlc2hoZWJyZXdcIixcbiAgMHhmYjQ5LFxuICBcInNoaW5kYWdlc2hzaGluZG90XCIsXG4gIDB4ZmIyYyxcbiAgXCJzaGluZGFnZXNoc2hpbmRvdGhlYnJld1wiLFxuICAweGZiMmMsXG4gIFwic2hpbmRhZ2VzaHNpbmRvdFwiLFxuICAweGZiMmQsXG4gIFwic2hpbmRhZ2VzaHNpbmRvdGhlYnJld1wiLFxuICAweGZiMmQsXG4gIFwic2hpbmRvdGhlYnJld1wiLFxuICAweDA1YzEsXG4gIFwic2hpbmhlYnJld1wiLFxuICAweDA1ZTksXG4gIFwic2hpbnNoaW5kb3RcIixcbiAgMHhmYjJhLFxuICBcInNoaW5zaGluZG90aGVicmV3XCIsXG4gIDB4ZmIyYSxcbiAgXCJzaGluc2luZG90XCIsXG4gIDB4ZmIyYixcbiAgXCJzaGluc2luZG90aGVicmV3XCIsXG4gIDB4ZmIyYixcbiAgXCJzaG9va1wiLFxuICAweDAyODIsXG4gIFwic2lnbWFcIixcbiAgMHgwM2MzLFxuICBcInNpZ21hMVwiLFxuICAweDAzYzIsXG4gIFwic2lnbWFmaW5hbFwiLFxuICAweDAzYzIsXG4gIFwic2lnbWFsdW5hdGVzeW1ib2xncmVla1wiLFxuICAweDAzZjIsXG4gIFwic2loaXJhZ2FuYVwiLFxuICAweDMwNTcsXG4gIFwic2lrYXRha2FuYVwiLFxuICAweDMwYjcsXG4gIFwic2lrYXRha2FuYWhhbGZ3aWR0aFwiLFxuICAweGZmN2MsXG4gIFwic2lsdXFoZWJyZXdcIixcbiAgMHgwNWJkLFxuICBcInNpbHVxbGVmdGhlYnJld1wiLFxuICAweDA1YmQsXG4gIFwic2ltaWxhclwiLFxuICAweDIyM2MsXG4gIFwic2luZG90aGVicmV3XCIsXG4gIDB4MDVjMixcbiAgXCJzaW9zYWNpcmNsZWtvcmVhblwiLFxuICAweDMyNzQsXG4gIFwic2lvc2FwYXJlbmtvcmVhblwiLFxuICAweDMyMTQsXG4gIFwic2lvc2NpZXVja29yZWFuXCIsXG4gIDB4MzE3ZSxcbiAgXCJzaW9zY2lyY2xla29yZWFuXCIsXG4gIDB4MzI2NixcbiAgXCJzaW9za2l5ZW9ra29yZWFuXCIsXG4gIDB4MzE3YSxcbiAgXCJzaW9za29yZWFuXCIsXG4gIDB4MzE0NSxcbiAgXCJzaW9zbmlldW5rb3JlYW5cIixcbiAgMHgzMTdiLFxuICBcInNpb3NwYXJlbmtvcmVhblwiLFxuICAweDMyMDYsXG4gIFwic2lvc3BpZXVwa29yZWFuXCIsXG4gIDB4MzE3ZCxcbiAgXCJzaW9zdGlrZXV0a29yZWFuXCIsXG4gIDB4MzE3YyxcbiAgXCJzaXhcIixcbiAgMHgwMDM2LFxuICBcInNpeGFyYWJpY1wiLFxuICAweDA2NjYsXG4gIFwic2l4YmVuZ2FsaVwiLFxuICAweDA5ZWMsXG4gIFwic2l4Y2lyY2xlXCIsXG4gIDB4MjQ2NSxcbiAgXCJzaXhjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmXCIsXG4gIDB4Mjc4ZixcbiAgXCJzaXhkZXZhXCIsXG4gIDB4MDk2YyxcbiAgXCJzaXhndWphcmF0aVwiLFxuICAweDBhZWMsXG4gIFwic2l4Z3VybXVraGlcIixcbiAgMHgwYTZjLFxuICBcInNpeGhhY2thcmFiaWNcIixcbiAgMHgwNjY2LFxuICBcInNpeGhhbmd6aG91XCIsXG4gIDB4MzAyNixcbiAgXCJzaXhpZGVvZ3JhcGhpY3BhcmVuXCIsXG4gIDB4MzIyNSxcbiAgXCJzaXhpbmZlcmlvclwiLFxuICAweDIwODYsXG4gIFwic2l4bW9ub3NwYWNlXCIsXG4gIDB4ZmYxNixcbiAgXCJzaXhvbGRzdHlsZVwiLFxuICAweGY3MzYsXG4gIFwic2l4cGFyZW5cIixcbiAgMHgyNDc5LFxuICBcInNpeHBlcmlvZFwiLFxuICAweDI0OGQsXG4gIFwic2l4cGVyc2lhblwiLFxuICAweDA2ZjYsXG4gIFwic2l4cm9tYW5cIixcbiAgMHgyMTc1LFxuICBcInNpeHN1cGVyaW9yXCIsXG4gIDB4MjA3NixcbiAgXCJzaXh0ZWVuY2lyY2xlXCIsXG4gIDB4MjQ2ZixcbiAgXCJzaXh0ZWVuY3VycmVuY3lkZW5vbWluYXRvcmJlbmdhbGlcIixcbiAgMHgwOWY5LFxuICBcInNpeHRlZW5wYXJlblwiLFxuICAweDI0ODMsXG4gIFwic2l4dGVlbnBlcmlvZFwiLFxuICAweDI0OTcsXG4gIFwic2l4dGhhaVwiLFxuICAweDBlNTYsXG4gIFwic2xhc2hcIixcbiAgMHgwMDJmLFxuICBcInNsYXNobW9ub3NwYWNlXCIsXG4gIDB4ZmYwZixcbiAgXCJzbG9uZ1wiLFxuICAweDAxN2YsXG4gIFwic2xvbmdkb3RhY2NlbnRcIixcbiAgMHgxZTliLFxuICBcInNtaWxlZmFjZVwiLFxuICAweDI2M2EsXG4gIFwic21vbm9zcGFjZVwiLFxuICAweGZmNTMsXG4gIFwic29mcGFzdXFoZWJyZXdcIixcbiAgMHgwNWMzLFxuICBcInNvZnRoeXBoZW5cIixcbiAgMHgwMGFkLFxuICBcInNvZnRzaWduY3lyaWxsaWNcIixcbiAgMHgwNDRjLFxuICBcInNvaGlyYWdhbmFcIixcbiAgMHgzMDVkLFxuICBcInNva2F0YWthbmFcIixcbiAgMHgzMGJkLFxuICBcInNva2F0YWthbmFoYWxmd2lkdGhcIixcbiAgMHhmZjdmLFxuICBcInNvbGlkdXNsb25nb3ZlcmxheWNtYlwiLFxuICAweDAzMzgsXG4gIFwic29saWR1c3Nob3J0b3ZlcmxheWNtYlwiLFxuICAweDAzMzcsXG4gIFwic29ydXNpdGhhaVwiLFxuICAweDBlMjksXG4gIFwic29zYWxhdGhhaVwiLFxuICAweDBlMjgsXG4gIFwic29zb3RoYWlcIixcbiAgMHgwZTBiLFxuICBcInNvc3VhdGhhaVwiLFxuICAweDBlMmEsXG4gIFwic3BhY2VcIixcbiAgMHgwMDIwLFxuICBcInNwYWNlaGFja2FyYWJpY1wiLFxuICAweDAwMjAsXG4gIFwic3BhZGVcIixcbiAgMHgyNjYwLFxuICBcInNwYWRlc3VpdGJsYWNrXCIsXG4gIDB4MjY2MCxcbiAgXCJzcGFkZXN1aXR3aGl0ZVwiLFxuICAweDI2NjQsXG4gIFwic3BhcmVuXCIsXG4gIDB4MjRhZSxcbiAgXCJzcXVhcmViZWxvd2NtYlwiLFxuICAweDAzM2IsXG4gIFwic3F1YXJlY2NcIixcbiAgMHgzM2M0LFxuICBcInNxdWFyZWNtXCIsXG4gIDB4MzM5ZCxcbiAgXCJzcXVhcmVkaWFnb25hbGNyb3NzaGF0Y2hmaWxsXCIsXG4gIDB4MjVhOSxcbiAgXCJzcXVhcmVob3Jpem9udGFsZmlsbFwiLFxuICAweDI1YTQsXG4gIFwic3F1YXJla2dcIixcbiAgMHgzMzhmLFxuICBcInNxdWFyZWttXCIsXG4gIDB4MzM5ZSxcbiAgXCJzcXVhcmVrbWNhcGl0YWxcIixcbiAgMHgzM2NlLFxuICBcInNxdWFyZWxuXCIsXG4gIDB4MzNkMSxcbiAgXCJzcXVhcmVsb2dcIixcbiAgMHgzM2QyLFxuICBcInNxdWFyZW1nXCIsXG4gIDB4MzM4ZSxcbiAgXCJzcXVhcmVtaWxcIixcbiAgMHgzM2Q1LFxuICBcInNxdWFyZW1tXCIsXG4gIDB4MzM5YyxcbiAgXCJzcXVhcmVtc3F1YXJlZFwiLFxuICAweDMzYTEsXG4gIFwic3F1YXJlb3J0aG9nb25hbGNyb3NzaGF0Y2hmaWxsXCIsXG4gIDB4MjVhNixcbiAgXCJzcXVhcmV1cHBlcmxlZnR0b2xvd2VycmlnaHRmaWxsXCIsXG4gIDB4MjVhNyxcbiAgXCJzcXVhcmV1cHBlcnJpZ2h0dG9sb3dlcmxlZnRmaWxsXCIsXG4gIDB4MjVhOCxcbiAgXCJzcXVhcmV2ZXJ0aWNhbGZpbGxcIixcbiAgMHgyNWE1LFxuICBcInNxdWFyZXdoaXRld2l0aHNtYWxsYmxhY2tcIixcbiAgMHgyNWEzLFxuICBcInNyc3F1YXJlXCIsXG4gIDB4MzNkYixcbiAgXCJzc2FiZW5nYWxpXCIsXG4gIDB4MDliNyxcbiAgXCJzc2FkZXZhXCIsXG4gIDB4MDkzNyxcbiAgXCJzc2FndWphcmF0aVwiLFxuICAweDBhYjcsXG4gIFwic3NhbmdjaWV1Y2tvcmVhblwiLFxuICAweDMxNDksXG4gIFwic3NhbmdoaWV1aGtvcmVhblwiLFxuICAweDMxODUsXG4gIFwic3NhbmdpZXVuZ2tvcmVhblwiLFxuICAweDMxODAsXG4gIFwic3NhbmdraXllb2trb3JlYW5cIixcbiAgMHgzMTMyLFxuICBcInNzYW5nbmlldW5rb3JlYW5cIixcbiAgMHgzMTY1LFxuICBcInNzYW5ncGlldXBrb3JlYW5cIixcbiAgMHgzMTQzLFxuICBcInNzYW5nc2lvc2tvcmVhblwiLFxuICAweDMxNDYsXG4gIFwic3Nhbmd0aWtldXRrb3JlYW5cIixcbiAgMHgzMTM4LFxuICBcInNzdXBlcmlvclwiLFxuICAweGY2ZjIsXG4gIFwic3RlcmxpbmdcIixcbiAgMHgwMGEzLFxuICBcInN0ZXJsaW5nbW9ub3NwYWNlXCIsXG4gIDB4ZmZlMSxcbiAgXCJzdHJva2Vsb25nb3ZlcmxheWNtYlwiLFxuICAweDAzMzYsXG4gIFwic3Ryb2tlc2hvcnRvdmVybGF5Y21iXCIsXG4gIDB4MDMzNSxcbiAgXCJzdWJzZXRcIixcbiAgMHgyMjgyLFxuICBcInN1YnNldG5vdGVxdWFsXCIsXG4gIDB4MjI4YSxcbiAgXCJzdWJzZXRvcmVxdWFsXCIsXG4gIDB4MjI4NixcbiAgXCJzdWNjZWVkc1wiLFxuICAweDIyN2IsXG4gIFwic3VjaHRoYXRcIixcbiAgMHgyMjBiLFxuICBcInN1aGlyYWdhbmFcIixcbiAgMHgzMDU5LFxuICBcInN1a2F0YWthbmFcIixcbiAgMHgzMGI5LFxuICBcInN1a2F0YWthbmFoYWxmd2lkdGhcIixcbiAgMHhmZjdkLFxuICBcInN1a3VuYXJhYmljXCIsXG4gIDB4MDY1MixcbiAgXCJzdW1tYXRpb25cIixcbiAgMHgyMjExLFxuICBcInN1blwiLFxuICAweDI2M2MsXG4gIFwic3VwZXJzZXRcIixcbiAgMHgyMjgzLFxuICBcInN1cGVyc2V0bm90ZXF1YWxcIixcbiAgMHgyMjhiLFxuICBcInN1cGVyc2V0b3JlcXVhbFwiLFxuICAweDIyODcsXG4gIFwic3ZzcXVhcmVcIixcbiAgMHgzM2RjLFxuICBcInN5b3V3YWVyYXNxdWFyZVwiLFxuICAweDMzN2MsXG4gIFwidFwiLFxuICAweDAwNzQsXG4gIFwidGFiZW5nYWxpXCIsXG4gIDB4MDlhNCxcbiAgXCJ0YWNrZG93blwiLFxuICAweDIyYTQsXG4gIFwidGFja2xlZnRcIixcbiAgMHgyMmEzLFxuICBcInRhZGV2YVwiLFxuICAweDA5MjQsXG4gIFwidGFndWphcmF0aVwiLFxuICAweDBhYTQsXG4gIFwidGFndXJtdWtoaVwiLFxuICAweDBhMjQsXG4gIFwidGFoYXJhYmljXCIsXG4gIDB4MDYzNyxcbiAgXCJ0YWhmaW5hbGFyYWJpY1wiLFxuICAweGZlYzIsXG4gIFwidGFoaW5pdGlhbGFyYWJpY1wiLFxuICAweGZlYzMsXG4gIFwidGFoaXJhZ2FuYVwiLFxuICAweDMwNWYsXG4gIFwidGFobWVkaWFsYXJhYmljXCIsXG4gIDB4ZmVjNCxcbiAgXCJ0YWlzeW91ZXJhc3F1YXJlXCIsXG4gIDB4MzM3ZCxcbiAgXCJ0YWthdGFrYW5hXCIsXG4gIDB4MzBiZixcbiAgXCJ0YWthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY4MCxcbiAgXCJ0YXR3ZWVsYXJhYmljXCIsXG4gIDB4MDY0MCxcbiAgXCJ0YXVcIixcbiAgMHgwM2M0LFxuICBcInRhdlwiLFxuICAweDA1ZWEsXG4gIFwidGF2ZGFnZXNcIixcbiAgMHhmYjRhLFxuICBcInRhdmRhZ2VzaFwiLFxuICAweGZiNGEsXG4gIFwidGF2ZGFnZXNoaGVicmV3XCIsXG4gIDB4ZmI0YSxcbiAgXCJ0YXZoZWJyZXdcIixcbiAgMHgwNWVhLFxuICBcInRiYXJcIixcbiAgMHgwMTY3LFxuICBcInRib3BvbW9mb1wiLFxuICAweDMxMGEsXG4gIFwidGNhcm9uXCIsXG4gIDB4MDE2NSxcbiAgXCJ0Y2N1cmxcIixcbiAgMHgwMmE4LFxuICBcInRjZWRpbGxhXCIsXG4gIDB4MDE2MyxcbiAgXCJ0Y2hlaGFyYWJpY1wiLFxuICAweDA2ODYsXG4gIFwidGNoZWhmaW5hbGFyYWJpY1wiLFxuICAweGZiN2IsXG4gIFwidGNoZWhpbml0aWFsYXJhYmljXCIsXG4gIDB4ZmI3YyxcbiAgXCJ0Y2hlaG1lZGlhbGFyYWJpY1wiLFxuICAweGZiN2QsXG4gIFwidGNpcmNsZVwiLFxuICAweDI0ZTMsXG4gIFwidGNpcmN1bWZsZXhiZWxvd1wiLFxuICAweDFlNzEsXG4gIFwidGNvbW1hYWNjZW50XCIsXG4gIDB4MDE2MyxcbiAgXCJ0ZGllcmVzaXNcIixcbiAgMHgxZTk3LFxuICBcInRkb3RhY2NlbnRcIixcbiAgMHgxZTZiLFxuICBcInRkb3RiZWxvd1wiLFxuICAweDFlNmQsXG4gIFwidGVjeXJpbGxpY1wiLFxuICAweDA0NDIsXG4gIFwidGVkZXNjZW5kZXJjeXJpbGxpY1wiLFxuICAweDA0YWQsXG4gIFwidGVoYXJhYmljXCIsXG4gIDB4MDYyYSxcbiAgXCJ0ZWhmaW5hbGFyYWJpY1wiLFxuICAweGZlOTYsXG4gIFwidGVoaGFoaW5pdGlhbGFyYWJpY1wiLFxuICAweGZjYTIsXG4gIFwidGVoaGFoaXNvbGF0ZWRhcmFiaWNcIixcbiAgMHhmYzBjLFxuICBcInRlaGluaXRpYWxhcmFiaWNcIixcbiAgMHhmZTk3LFxuICBcInRlaGlyYWdhbmFcIixcbiAgMHgzMDY2LFxuICBcInRlaGplZW1pbml0aWFsYXJhYmljXCIsXG4gIDB4ZmNhMSxcbiAgXCJ0ZWhqZWVtaXNvbGF0ZWRhcmFiaWNcIixcbiAgMHhmYzBiLFxuICBcInRlaG1hcmJ1dGFhcmFiaWNcIixcbiAgMHgwNjI5LFxuICBcInRlaG1hcmJ1dGFmaW5hbGFyYWJpY1wiLFxuICAweGZlOTQsXG4gIFwidGVobWVkaWFsYXJhYmljXCIsXG4gIDB4ZmU5OCxcbiAgXCJ0ZWhtZWVtaW5pdGlhbGFyYWJpY1wiLFxuICAweGZjYTQsXG4gIFwidGVobWVlbWlzb2xhdGVkYXJhYmljXCIsXG4gIDB4ZmMwZSxcbiAgXCJ0ZWhub29uZmluYWxhcmFiaWNcIixcbiAgMHhmYzczLFxuICBcInRla2F0YWthbmFcIixcbiAgMHgzMGM2LFxuICBcInRla2F0YWthbmFoYWxmd2lkdGhcIixcbiAgMHhmZjgzLFxuICBcInRlbGVwaG9uZVwiLFxuICAweDIxMjEsXG4gIFwidGVsZXBob25lYmxhY2tcIixcbiAgMHgyNjBlLFxuICBcInRlbGlzaGFnZWRvbGFoZWJyZXdcIixcbiAgMHgwNWEwLFxuICBcInRlbGlzaGFxZXRhbmFoZWJyZXdcIixcbiAgMHgwNWE5LFxuICBcInRlbmNpcmNsZVwiLFxuICAweDI0NjksXG4gIFwidGVuaWRlb2dyYXBoaWNwYXJlblwiLFxuICAweDMyMjksXG4gIFwidGVucGFyZW5cIixcbiAgMHgyNDdkLFxuICBcInRlbnBlcmlvZFwiLFxuICAweDI0OTEsXG4gIFwidGVucm9tYW5cIixcbiAgMHgyMTc5LFxuICBcInRlc2hcIixcbiAgMHgwMmE3LFxuICBcInRldFwiLFxuICAweDA1ZDgsXG4gIFwidGV0ZGFnZXNoXCIsXG4gIDB4ZmIzOCxcbiAgXCJ0ZXRkYWdlc2hoZWJyZXdcIixcbiAgMHhmYjM4LFxuICBcInRldGhlYnJld1wiLFxuICAweDA1ZDgsXG4gIFwidGV0c2VjeXJpbGxpY1wiLFxuICAweDA0YjUsXG4gIFwidGV2aXJoZWJyZXdcIixcbiAgMHgwNTliLFxuICBcInRldmlybGVmdGhlYnJld1wiLFxuICAweDA1OWIsXG4gIFwidGhhYmVuZ2FsaVwiLFxuICAweDA5YTUsXG4gIFwidGhhZGV2YVwiLFxuICAweDA5MjUsXG4gIFwidGhhZ3VqYXJhdGlcIixcbiAgMHgwYWE1LFxuICBcInRoYWd1cm11a2hpXCIsXG4gIDB4MGEyNSxcbiAgXCJ0aGFsYXJhYmljXCIsXG4gIDB4MDYzMCxcbiAgXCJ0aGFsZmluYWxhcmFiaWNcIixcbiAgMHhmZWFjLFxuICBcInRoYW50aGFraGF0bG93bGVmdHRoYWlcIixcbiAgMHhmODk4LFxuICBcInRoYW50aGFraGF0bG93cmlnaHR0aGFpXCIsXG4gIDB4Zjg5NyxcbiAgXCJ0aGFudGhha2hhdHRoYWlcIixcbiAgMHgwZTRjLFxuICBcInRoYW50aGFraGF0dXBwZXJsZWZ0dGhhaVwiLFxuICAweGY4OTYsXG4gIFwidGhlaGFyYWJpY1wiLFxuICAweDA2MmIsXG4gIFwidGhlaGZpbmFsYXJhYmljXCIsXG4gIDB4ZmU5YSxcbiAgXCJ0aGVoaW5pdGlhbGFyYWJpY1wiLFxuICAweGZlOWIsXG4gIFwidGhlaG1lZGlhbGFyYWJpY1wiLFxuICAweGZlOWMsXG4gIFwidGhlcmVleGlzdHNcIixcbiAgMHgyMjAzLFxuICBcInRoZXJlZm9yZVwiLFxuICAweDIyMzQsXG4gIFwidGhldGFcIixcbiAgMHgwM2I4LFxuICBcInRoZXRhMVwiLFxuICAweDAzZDEsXG4gIFwidGhldGFzeW1ib2xncmVla1wiLFxuICAweDAzZDEsXG4gIFwidGhpZXV0aGFjaXJjbGVrb3JlYW5cIixcbiAgMHgzMjc5LFxuICBcInRoaWV1dGhhcGFyZW5rb3JlYW5cIixcbiAgMHgzMjE5LFxuICBcInRoaWV1dGhjaXJjbGVrb3JlYW5cIixcbiAgMHgzMjZiLFxuICBcInRoaWV1dGhrb3JlYW5cIixcbiAgMHgzMTRjLFxuICBcInRoaWV1dGhwYXJlbmtvcmVhblwiLFxuICAweDMyMGIsXG4gIFwidGhpcnRlZW5jaXJjbGVcIixcbiAgMHgyNDZjLFxuICBcInRoaXJ0ZWVucGFyZW5cIixcbiAgMHgyNDgwLFxuICBcInRoaXJ0ZWVucGVyaW9kXCIsXG4gIDB4MjQ5NCxcbiAgXCJ0aG9uYW5nbW9udGhvdGhhaVwiLFxuICAweDBlMTEsXG4gIFwidGhvb2tcIixcbiAgMHgwMWFkLFxuICBcInRob3BodXRoYW90aGFpXCIsXG4gIDB4MGUxMixcbiAgXCJ0aG9yblwiLFxuICAweDAwZmUsXG4gIFwidGhvdGhhaGFudGhhaVwiLFxuICAweDBlMTcsXG4gIFwidGhvdGhhbnRoYWlcIixcbiAgMHgwZTEwLFxuICBcInRob3Rob25ndGhhaVwiLFxuICAweDBlMTgsXG4gIFwidGhvdGh1bmd0aGFpXCIsXG4gIDB4MGUxNixcbiAgXCJ0aG91c2FuZGN5cmlsbGljXCIsXG4gIDB4MDQ4MixcbiAgXCJ0aG91c2FuZHNzZXBhcmF0b3JhcmFiaWNcIixcbiAgMHgwNjZjLFxuICBcInRob3VzYW5kc3NlcGFyYXRvcnBlcnNpYW5cIixcbiAgMHgwNjZjLFxuICBcInRocmVlXCIsXG4gIDB4MDAzMyxcbiAgXCJ0aHJlZWFyYWJpY1wiLFxuICAweDA2NjMsXG4gIFwidGhyZWViZW5nYWxpXCIsXG4gIDB4MDllOSxcbiAgXCJ0aHJlZWNpcmNsZVwiLFxuICAweDI0NjIsXG4gIFwidGhyZWVjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmXCIsXG4gIDB4Mjc4YyxcbiAgXCJ0aHJlZWRldmFcIixcbiAgMHgwOTY5LFxuICBcInRocmVlZWlnaHRoc1wiLFxuICAweDIxNWMsXG4gIFwidGhyZWVndWphcmF0aVwiLFxuICAweDBhZTksXG4gIFwidGhyZWVndXJtdWtoaVwiLFxuICAweDBhNjksXG4gIFwidGhyZWVoYWNrYXJhYmljXCIsXG4gIDB4MDY2MyxcbiAgXCJ0aHJlZWhhbmd6aG91XCIsXG4gIDB4MzAyMyxcbiAgXCJ0aHJlZWlkZW9ncmFwaGljcGFyZW5cIixcbiAgMHgzMjIyLFxuICBcInRocmVlaW5mZXJpb3JcIixcbiAgMHgyMDgzLFxuICBcInRocmVlbW9ub3NwYWNlXCIsXG4gIDB4ZmYxMyxcbiAgXCJ0aHJlZW51bWVyYXRvcmJlbmdhbGlcIixcbiAgMHgwOWY2LFxuICBcInRocmVlb2xkc3R5bGVcIixcbiAgMHhmNzMzLFxuICBcInRocmVlcGFyZW5cIixcbiAgMHgyNDc2LFxuICBcInRocmVlcGVyaW9kXCIsXG4gIDB4MjQ4YSxcbiAgXCJ0aHJlZXBlcnNpYW5cIixcbiAgMHgwNmYzLFxuICBcInRocmVlcXVhcnRlcnNcIixcbiAgMHgwMGJlLFxuICBcInRocmVlcXVhcnRlcnNlbWRhc2hcIixcbiAgMHhmNmRlLFxuICBcInRocmVlcm9tYW5cIixcbiAgMHgyMTcyLFxuICBcInRocmVlc3VwZXJpb3JcIixcbiAgMHgwMGIzLFxuICBcInRocmVldGhhaVwiLFxuICAweDBlNTMsXG4gIFwidGh6c3F1YXJlXCIsXG4gIDB4MzM5NCxcbiAgXCJ0aWhpcmFnYW5hXCIsXG4gIDB4MzA2MSxcbiAgXCJ0aWthdGFrYW5hXCIsXG4gIDB4MzBjMSxcbiAgXCJ0aWthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY4MSxcbiAgXCJ0aWtldXRhY2lyY2xla29yZWFuXCIsXG4gIDB4MzI3MCxcbiAgXCJ0aWtldXRhcGFyZW5rb3JlYW5cIixcbiAgMHgzMjEwLFxuICBcInRpa2V1dGNpcmNsZWtvcmVhblwiLFxuICAweDMyNjIsXG4gIFwidGlrZXV0a29yZWFuXCIsXG4gIDB4MzEzNyxcbiAgXCJ0aWtldXRwYXJlbmtvcmVhblwiLFxuICAweDMyMDIsXG4gIFwidGlsZGVcIixcbiAgMHgwMmRjLFxuICBcInRpbGRlYmVsb3djbWJcIixcbiAgMHgwMzMwLFxuICBcInRpbGRlY21iXCIsXG4gIDB4MDMwMyxcbiAgXCJ0aWxkZWNvbWJcIixcbiAgMHgwMzAzLFxuICBcInRpbGRlZG91YmxlY21iXCIsXG4gIDB4MDM2MCxcbiAgXCJ0aWxkZW9wZXJhdG9yXCIsXG4gIDB4MjIzYyxcbiAgXCJ0aWxkZW92ZXJsYXljbWJcIixcbiAgMHgwMzM0LFxuICBcInRpbGRldmVydGljYWxjbWJcIixcbiAgMHgwMzNlLFxuICBcInRpbWVzY2lyY2xlXCIsXG4gIDB4MjI5NyxcbiAgXCJ0aXBlaGFoZWJyZXdcIixcbiAgMHgwNTk2LFxuICBcInRpcGVoYWxlZnRoZWJyZXdcIixcbiAgMHgwNTk2LFxuICBcInRpcHBpZ3VybXVraGlcIixcbiAgMHgwYTcwLFxuICBcInRpdGxvY3lyaWxsaWNjbWJcIixcbiAgMHgwNDgzLFxuICBcInRpd25hcm1lbmlhblwiLFxuICAweDA1N2YsXG4gIFwidGxpbmViZWxvd1wiLFxuICAweDFlNmYsXG4gIFwidG1vbm9zcGFjZVwiLFxuICAweGZmNTQsXG4gIFwidG9hcm1lbmlhblwiLFxuICAweDA1NjksXG4gIFwidG9oaXJhZ2FuYVwiLFxuICAweDMwNjgsXG4gIFwidG9rYXRha2FuYVwiLFxuICAweDMwYzgsXG4gIFwidG9rYXRha2FuYWhhbGZ3aWR0aFwiLFxuICAweGZmODQsXG4gIFwidG9uZWJhcmV4dHJhaGlnaG1vZFwiLFxuICAweDAyZTUsXG4gIFwidG9uZWJhcmV4dHJhbG93bW9kXCIsXG4gIDB4MDJlOSxcbiAgXCJ0b25lYmFyaGlnaG1vZFwiLFxuICAweDAyZTYsXG4gIFwidG9uZWJhcmxvd21vZFwiLFxuICAweDAyZTgsXG4gIFwidG9uZWJhcm1pZG1vZFwiLFxuICAweDAyZTcsXG4gIFwidG9uZWZpdmVcIixcbiAgMHgwMWJkLFxuICBcInRvbmVzaXhcIixcbiAgMHgwMTg1LFxuICBcInRvbmV0d29cIixcbiAgMHgwMWE4LFxuICBcInRvbm9zXCIsXG4gIDB4MDM4NCxcbiAgXCJ0b25zcXVhcmVcIixcbiAgMHgzMzI3LFxuICBcInRvcGF0YWt0aGFpXCIsXG4gIDB4MGUwZixcbiAgXCJ0b3J0b2lzZXNoZWxsYnJhY2tldGxlZnRcIixcbiAgMHgzMDE0LFxuICBcInRvcnRvaXNlc2hlbGxicmFja2V0bGVmdHNtYWxsXCIsXG4gIDB4ZmU1ZCxcbiAgXCJ0b3J0b2lzZXNoZWxsYnJhY2tldGxlZnR2ZXJ0aWNhbFwiLFxuICAweGZlMzksXG4gIFwidG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodFwiLFxuICAweDMwMTUsXG4gIFwidG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodHNtYWxsXCIsXG4gIDB4ZmU1ZSxcbiAgXCJ0b3J0b2lzZXNoZWxsYnJhY2tldHJpZ2h0dmVydGljYWxcIixcbiAgMHhmZTNhLFxuICBcInRvdGFvdGhhaVwiLFxuICAweDBlMTUsXG4gIFwidHBhbGF0YWxob29rXCIsXG4gIDB4MDFhYixcbiAgXCJ0cGFyZW5cIixcbiAgMHgyNGFmLFxuICBcInRyYWRlbWFya1wiLFxuICAweDIxMjIsXG4gIFwidHJhZGVtYXJrc2Fuc1wiLFxuICAweGY4ZWEsXG4gIFwidHJhZGVtYXJrc2VyaWZcIixcbiAgMHhmNmRiLFxuICBcInRyZXRyb2ZsZXhob29rXCIsXG4gIDB4MDI4OCxcbiAgXCJ0cmlhZ2RuXCIsXG4gIDB4MjViYyxcbiAgXCJ0cmlhZ2xmXCIsXG4gIDB4MjVjNCxcbiAgXCJ0cmlhZ3J0XCIsXG4gIDB4MjViYSxcbiAgXCJ0cmlhZ3VwXCIsXG4gIDB4MjViMixcbiAgXCJ0c1wiLFxuICAweDAyYTYsXG4gIFwidHNhZGlcIixcbiAgMHgwNWU2LFxuICBcInRzYWRpZGFnZXNoXCIsXG4gIDB4ZmI0NixcbiAgXCJ0c2FkaWRhZ2VzaGhlYnJld1wiLFxuICAweGZiNDYsXG4gIFwidHNhZGloZWJyZXdcIixcbiAgMHgwNWU2LFxuICBcInRzZWN5cmlsbGljXCIsXG4gIDB4MDQ0NixcbiAgXCJ0c2VyZVwiLFxuICAweDA1YjUsXG4gIFwidHNlcmUxMlwiLFxuICAweDA1YjUsXG4gIFwidHNlcmUxZVwiLFxuICAweDA1YjUsXG4gIFwidHNlcmUyYlwiLFxuICAweDA1YjUsXG4gIFwidHNlcmVoZWJyZXdcIixcbiAgMHgwNWI1LFxuICBcInRzZXJlbmFycm93aGVicmV3XCIsXG4gIDB4MDViNSxcbiAgXCJ0c2VyZXF1YXJ0ZXJoZWJyZXdcIixcbiAgMHgwNWI1LFxuICBcInRzZXJld2lkZWhlYnJld1wiLFxuICAweDA1YjUsXG4gIFwidHNoZWN5cmlsbGljXCIsXG4gIDB4MDQ1YixcbiAgXCJ0c3VwZXJpb3JcIixcbiAgMHhmNmYzLFxuICBcInR0YWJlbmdhbGlcIixcbiAgMHgwOTlmLFxuICBcInR0YWRldmFcIixcbiAgMHgwOTFmLFxuICBcInR0YWd1amFyYXRpXCIsXG4gIDB4MGE5ZixcbiAgXCJ0dGFndXJtdWtoaVwiLFxuICAweDBhMWYsXG4gIFwidHRlaGFyYWJpY1wiLFxuICAweDA2NzksXG4gIFwidHRlaGZpbmFsYXJhYmljXCIsXG4gIDB4ZmI2NyxcbiAgXCJ0dGVoaW5pdGlhbGFyYWJpY1wiLFxuICAweGZiNjgsXG4gIFwidHRlaG1lZGlhbGFyYWJpY1wiLFxuICAweGZiNjksXG4gIFwidHRoYWJlbmdhbGlcIixcbiAgMHgwOWEwLFxuICBcInR0aGFkZXZhXCIsXG4gIDB4MDkyMCxcbiAgXCJ0dGhhZ3VqYXJhdGlcIixcbiAgMHgwYWEwLFxuICBcInR0aGFndXJtdWtoaVwiLFxuICAweDBhMjAsXG4gIFwidHR1cm5lZFwiLFxuICAweDAyODcsXG4gIFwidHVoaXJhZ2FuYVwiLFxuICAweDMwNjQsXG4gIFwidHVrYXRha2FuYVwiLFxuICAweDMwYzQsXG4gIFwidHVrYXRha2FuYWhhbGZ3aWR0aFwiLFxuICAweGZmODIsXG4gIFwidHVzbWFsbGhpcmFnYW5hXCIsXG4gIDB4MzA2MyxcbiAgXCJ0dXNtYWxsa2F0YWthbmFcIixcbiAgMHgzMGMzLFxuICBcInR1c21hbGxrYXRha2FuYWhhbGZ3aWR0aFwiLFxuICAweGZmNmYsXG4gIFwidHdlbHZlY2lyY2xlXCIsXG4gIDB4MjQ2YixcbiAgXCJ0d2VsdmVwYXJlblwiLFxuICAweDI0N2YsXG4gIFwidHdlbHZlcGVyaW9kXCIsXG4gIDB4MjQ5MyxcbiAgXCJ0d2VsdmVyb21hblwiLFxuICAweDIxN2IsXG4gIFwidHdlbnR5Y2lyY2xlXCIsXG4gIDB4MjQ3MyxcbiAgXCJ0d2VudHloYW5nemhvdVwiLFxuICAweDUzNDQsXG4gIFwidHdlbnR5cGFyZW5cIixcbiAgMHgyNDg3LFxuICBcInR3ZW50eXBlcmlvZFwiLFxuICAweDI0OWIsXG4gIFwidHdvXCIsXG4gIDB4MDAzMixcbiAgXCJ0d29hcmFiaWNcIixcbiAgMHgwNjYyLFxuICBcInR3b2JlbmdhbGlcIixcbiAgMHgwOWU4LFxuICBcInR3b2NpcmNsZVwiLFxuICAweDI0NjEsXG4gIFwidHdvY2lyY2xlaW52ZXJzZXNhbnNzZXJpZlwiLFxuICAweDI3OGIsXG4gIFwidHdvZGV2YVwiLFxuICAweDA5NjgsXG4gIFwidHdvZG90ZW5sZWFkZXJcIixcbiAgMHgyMDI1LFxuICBcInR3b2RvdGxlYWRlclwiLFxuICAweDIwMjUsXG4gIFwidHdvZG90bGVhZGVydmVydGljYWxcIixcbiAgMHhmZTMwLFxuICBcInR3b2d1amFyYXRpXCIsXG4gIDB4MGFlOCxcbiAgXCJ0d29ndXJtdWtoaVwiLFxuICAweDBhNjgsXG4gIFwidHdvaGFja2FyYWJpY1wiLFxuICAweDA2NjIsXG4gIFwidHdvaGFuZ3pob3VcIixcbiAgMHgzMDIyLFxuICBcInR3b2lkZW9ncmFwaGljcGFyZW5cIixcbiAgMHgzMjIxLFxuICBcInR3b2luZmVyaW9yXCIsXG4gIDB4MjA4MixcbiAgXCJ0d29tb25vc3BhY2VcIixcbiAgMHhmZjEyLFxuICBcInR3b251bWVyYXRvcmJlbmdhbGlcIixcbiAgMHgwOWY1LFxuICBcInR3b29sZHN0eWxlXCIsXG4gIDB4ZjczMixcbiAgXCJ0d29wYXJlblwiLFxuICAweDI0NzUsXG4gIFwidHdvcGVyaW9kXCIsXG4gIDB4MjQ4OSxcbiAgXCJ0d29wZXJzaWFuXCIsXG4gIDB4MDZmMixcbiAgXCJ0d29yb21hblwiLFxuICAweDIxNzEsXG4gIFwidHdvc3Ryb2tlXCIsXG4gIDB4MDFiYixcbiAgXCJ0d29zdXBlcmlvclwiLFxuICAweDAwYjIsXG4gIFwidHdvdGhhaVwiLFxuICAweDBlNTIsXG4gIFwidHdvdGhpcmRzXCIsXG4gIDB4MjE1NCxcbiAgXCJ1XCIsXG4gIDB4MDA3NSxcbiAgXCJ1YWN1dGVcIixcbiAgMHgwMGZhLFxuICBcInViYXJcIixcbiAgMHgwMjg5LFxuICBcInViZW5nYWxpXCIsXG4gIDB4MDk4OSxcbiAgXCJ1Ym9wb21vZm9cIixcbiAgMHgzMTI4LFxuICBcInVicmV2ZVwiLFxuICAweDAxNmQsXG4gIFwidWNhcm9uXCIsXG4gIDB4MDFkNCxcbiAgXCJ1Y2lyY2xlXCIsXG4gIDB4MjRlNCxcbiAgXCJ1Y2lyY3VtZmxleFwiLFxuICAweDAwZmIsXG4gIFwidWNpcmN1bWZsZXhiZWxvd1wiLFxuICAweDFlNzcsXG4gIFwidWN5cmlsbGljXCIsXG4gIDB4MDQ0MyxcbiAgXCJ1ZGF0dGFkZXZhXCIsXG4gIDB4MDk1MSxcbiAgXCJ1ZGJsYWN1dGVcIixcbiAgMHgwMTcxLFxuICBcInVkYmxncmF2ZVwiLFxuICAweDAyMTUsXG4gIFwidWRldmFcIixcbiAgMHgwOTA5LFxuICBcInVkaWVyZXNpc1wiLFxuICAweDAwZmMsXG4gIFwidWRpZXJlc2lzYWN1dGVcIixcbiAgMHgwMWQ4LFxuICBcInVkaWVyZXNpc2JlbG93XCIsXG4gIDB4MWU3MyxcbiAgXCJ1ZGllcmVzaXNjYXJvblwiLFxuICAweDAxZGEsXG4gIFwidWRpZXJlc2lzY3lyaWxsaWNcIixcbiAgMHgwNGYxLFxuICBcInVkaWVyZXNpc2dyYXZlXCIsXG4gIDB4MDFkYyxcbiAgXCJ1ZGllcmVzaXNtYWNyb25cIixcbiAgMHgwMWQ2LFxuICBcInVkb3RiZWxvd1wiLFxuICAweDFlZTUsXG4gIFwidWdyYXZlXCIsXG4gIDB4MDBmOSxcbiAgXCJ1Z3VqYXJhdGlcIixcbiAgMHgwYTg5LFxuICBcInVndXJtdWtoaVwiLFxuICAweDBhMDksXG4gIFwidWhpcmFnYW5hXCIsXG4gIDB4MzA0NixcbiAgXCJ1aG9va2Fib3ZlXCIsXG4gIDB4MWVlNyxcbiAgXCJ1aG9yblwiLFxuICAweDAxYjAsXG4gIFwidWhvcm5hY3V0ZVwiLFxuICAweDFlZTksXG4gIFwidWhvcm5kb3RiZWxvd1wiLFxuICAweDFlZjEsXG4gIFwidWhvcm5ncmF2ZVwiLFxuICAweDFlZWIsXG4gIFwidWhvcm5ob29rYWJvdmVcIixcbiAgMHgxZWVkLFxuICBcInVob3JudGlsZGVcIixcbiAgMHgxZWVmLFxuICBcInVodW5nYXJ1bWxhdXRcIixcbiAgMHgwMTcxLFxuICBcInVodW5nYXJ1bWxhdXRjeXJpbGxpY1wiLFxuICAweDA0ZjMsXG4gIFwidWludmVydGVkYnJldmVcIixcbiAgMHgwMjE3LFxuICBcInVrYXRha2FuYVwiLFxuICAweDMwYTYsXG4gIFwidWthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY3MyxcbiAgXCJ1a2N5cmlsbGljXCIsXG4gIDB4MDQ3OSxcbiAgXCJ1a29yZWFuXCIsXG4gIDB4MzE1YyxcbiAgXCJ1bWFjcm9uXCIsXG4gIDB4MDE2YixcbiAgXCJ1bWFjcm9uY3lyaWxsaWNcIixcbiAgMHgwNGVmLFxuICBcInVtYWNyb25kaWVyZXNpc1wiLFxuICAweDFlN2IsXG4gIFwidW1hdHJhZ3VybXVraGlcIixcbiAgMHgwYTQxLFxuICBcInVtb25vc3BhY2VcIixcbiAgMHhmZjU1LFxuICBcInVuZGVyc2NvcmVcIixcbiAgMHgwMDVmLFxuICBcInVuZGVyc2NvcmVkYmxcIixcbiAgMHgyMDE3LFxuICBcInVuZGVyc2NvcmVtb25vc3BhY2VcIixcbiAgMHhmZjNmLFxuICBcInVuZGVyc2NvcmV2ZXJ0aWNhbFwiLFxuICAweGZlMzMsXG4gIFwidW5kZXJzY29yZXdhdnlcIixcbiAgMHhmZTRmLFxuICBcInVuaW9uXCIsXG4gIDB4MjIyYSxcbiAgXCJ1bml2ZXJzYWxcIixcbiAgMHgyMjAwLFxuICBcInVvZ29uZWtcIixcbiAgMHgwMTczLFxuICBcInVwYXJlblwiLFxuICAweDI0YjAsXG4gIFwidXBibG9ja1wiLFxuICAweDI1ODAsXG4gIFwidXBwZXJkb3RoZWJyZXdcIixcbiAgMHgwNWM0LFxuICBcInVwc2lsb25cIixcbiAgMHgwM2M1LFxuICBcInVwc2lsb25kaWVyZXNpc1wiLFxuICAweDAzY2IsXG4gIFwidXBzaWxvbmRpZXJlc2lzdG9ub3NcIixcbiAgMHgwM2IwLFxuICBcInVwc2lsb25sYXRpblwiLFxuICAweDAyOGEsXG4gIFwidXBzaWxvbnRvbm9zXCIsXG4gIDB4MDNjZCxcbiAgXCJ1cHRhY2tiZWxvd2NtYlwiLFxuICAweDAzMWQsXG4gIFwidXB0YWNrbW9kXCIsXG4gIDB4MDJkNCxcbiAgXCJ1cmFndXJtdWtoaVwiLFxuICAweDBhNzMsXG4gIFwidXJpbmdcIixcbiAgMHgwMTZmLFxuICBcInVzaG9ydGN5cmlsbGljXCIsXG4gIDB4MDQ1ZSxcbiAgXCJ1c21hbGxoaXJhZ2FuYVwiLFxuICAweDMwNDUsXG4gIFwidXNtYWxsa2F0YWthbmFcIixcbiAgMHgzMGE1LFxuICBcInVzbWFsbGthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY2OSxcbiAgXCJ1c3RyYWlnaHRjeXJpbGxpY1wiLFxuICAweDA0YWYsXG4gIFwidXN0cmFpZ2h0c3Ryb2tlY3lyaWxsaWNcIixcbiAgMHgwNGIxLFxuICBcInV0aWxkZVwiLFxuICAweDAxNjksXG4gIFwidXRpbGRlYWN1dGVcIixcbiAgMHgxZTc5LFxuICBcInV0aWxkZWJlbG93XCIsXG4gIDB4MWU3NSxcbiAgXCJ1dWJlbmdhbGlcIixcbiAgMHgwOThhLFxuICBcInV1ZGV2YVwiLFxuICAweDA5MGEsXG4gIFwidXVndWphcmF0aVwiLFxuICAweDBhOGEsXG4gIFwidXVndXJtdWtoaVwiLFxuICAweDBhMGEsXG4gIFwidXVtYXRyYWd1cm11a2hpXCIsXG4gIDB4MGE0MixcbiAgXCJ1dXZvd2Vsc2lnbmJlbmdhbGlcIixcbiAgMHgwOWMyLFxuICBcInV1dm93ZWxzaWduZGV2YVwiLFxuICAweDA5NDIsXG4gIFwidXV2b3dlbHNpZ25ndWphcmF0aVwiLFxuICAweDBhYzIsXG4gIFwidXZvd2Vsc2lnbmJlbmdhbGlcIixcbiAgMHgwOWMxLFxuICBcInV2b3dlbHNpZ25kZXZhXCIsXG4gIDB4MDk0MSxcbiAgXCJ1dm93ZWxzaWduZ3VqYXJhdGlcIixcbiAgMHgwYWMxLFxuICBcInZcIixcbiAgMHgwMDc2LFxuICBcInZhZGV2YVwiLFxuICAweDA5MzUsXG4gIFwidmFndWphcmF0aVwiLFxuICAweDBhYjUsXG4gIFwidmFndXJtdWtoaVwiLFxuICAweDBhMzUsXG4gIFwidmFrYXRha2FuYVwiLFxuICAweDMwZjcsXG4gIFwidmF2XCIsXG4gIDB4MDVkNSxcbiAgXCJ2YXZkYWdlc2hcIixcbiAgMHhmYjM1LFxuICBcInZhdmRhZ2VzaDY1XCIsXG4gIDB4ZmIzNSxcbiAgXCJ2YXZkYWdlc2hoZWJyZXdcIixcbiAgMHhmYjM1LFxuICBcInZhdmhlYnJld1wiLFxuICAweDA1ZDUsXG4gIFwidmF2aG9sYW1cIixcbiAgMHhmYjRiLFxuICBcInZhdmhvbGFtaGVicmV3XCIsXG4gIDB4ZmI0YixcbiAgXCJ2YXZ2YXZoZWJyZXdcIixcbiAgMHgwNWYwLFxuICBcInZhdnlvZGhlYnJld1wiLFxuICAweDA1ZjEsXG4gIFwidmNpcmNsZVwiLFxuICAweDI0ZTUsXG4gIFwidmRvdGJlbG93XCIsXG4gIDB4MWU3ZixcbiAgXCJ2ZWN5cmlsbGljXCIsXG4gIDB4MDQzMixcbiAgXCJ2ZWhhcmFiaWNcIixcbiAgMHgwNmE0LFxuICBcInZlaGZpbmFsYXJhYmljXCIsXG4gIDB4ZmI2YixcbiAgXCJ2ZWhpbml0aWFsYXJhYmljXCIsXG4gIDB4ZmI2YyxcbiAgXCJ2ZWhtZWRpYWxhcmFiaWNcIixcbiAgMHhmYjZkLFxuICBcInZla2F0YWthbmFcIixcbiAgMHgzMGY5LFxuICBcInZlbnVzXCIsXG4gIDB4MjY0MCxcbiAgXCJ2ZXJ0aWNhbGJhclwiLFxuICAweDAwN2MsXG4gIFwidmVydGljYWxsaW5lYWJvdmVjbWJcIixcbiAgMHgwMzBkLFxuICBcInZlcnRpY2FsbGluZWJlbG93Y21iXCIsXG4gIDB4MDMyOSxcbiAgXCJ2ZXJ0aWNhbGxpbmVsb3dtb2RcIixcbiAgMHgwMmNjLFxuICBcInZlcnRpY2FsbGluZW1vZFwiLFxuICAweDAyYzgsXG4gIFwidmV3YXJtZW5pYW5cIixcbiAgMHgwNTdlLFxuICBcInZob29rXCIsXG4gIDB4MDI4YixcbiAgXCJ2aWthdGFrYW5hXCIsXG4gIDB4MzBmOCxcbiAgXCJ2aXJhbWFiZW5nYWxpXCIsXG4gIDB4MDljZCxcbiAgXCJ2aXJhbWFkZXZhXCIsXG4gIDB4MDk0ZCxcbiAgXCJ2aXJhbWFndWphcmF0aVwiLFxuICAweDBhY2QsXG4gIFwidmlzYXJnYWJlbmdhbGlcIixcbiAgMHgwOTgzLFxuICBcInZpc2FyZ2FkZXZhXCIsXG4gIDB4MDkwMyxcbiAgXCJ2aXNhcmdhZ3VqYXJhdGlcIixcbiAgMHgwYTgzLFxuICBcInZtb25vc3BhY2VcIixcbiAgMHhmZjU2LFxuICBcInZvYXJtZW5pYW5cIixcbiAgMHgwNTc4LFxuICBcInZvaWNlZGl0ZXJhdGlvbmhpcmFnYW5hXCIsXG4gIDB4MzA5ZSxcbiAgXCJ2b2ljZWRpdGVyYXRpb25rYXRha2FuYVwiLFxuICAweDMwZmUsXG4gIFwidm9pY2VkbWFya2thbmFcIixcbiAgMHgzMDliLFxuICBcInZvaWNlZG1hcmtrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY5ZSxcbiAgXCJ2b2thdGFrYW5hXCIsXG4gIDB4MzBmYSxcbiAgXCJ2cGFyZW5cIixcbiAgMHgyNGIxLFxuICBcInZ0aWxkZVwiLFxuICAweDFlN2QsXG4gIFwidnR1cm5lZFwiLFxuICAweDAyOGMsXG4gIFwidnVoaXJhZ2FuYVwiLFxuICAweDMwOTQsXG4gIFwidnVrYXRha2FuYVwiLFxuICAweDMwZjQsXG4gIFwid1wiLFxuICAweDAwNzcsXG4gIFwid2FjdXRlXCIsXG4gIDB4MWU4MyxcbiAgXCJ3YWVrb3JlYW5cIixcbiAgMHgzMTU5LFxuICBcIndhaGlyYWdhbmFcIixcbiAgMHgzMDhmLFxuICBcIndha2F0YWthbmFcIixcbiAgMHgzMGVmLFxuICBcIndha2F0YWthbmFoYWxmd2lkdGhcIixcbiAgMHhmZjljLFxuICBcIndha29yZWFuXCIsXG4gIDB4MzE1OCxcbiAgXCJ3YXNtYWxsaGlyYWdhbmFcIixcbiAgMHgzMDhlLFxuICBcIndhc21hbGxrYXRha2FuYVwiLFxuICAweDMwZWUsXG4gIFwid2F0dG9zcXVhcmVcIixcbiAgMHgzMzU3LFxuICBcIndhdmVkYXNoXCIsXG4gIDB4MzAxYyxcbiAgXCJ3YXZ5dW5kZXJzY29yZXZlcnRpY2FsXCIsXG4gIDB4ZmUzNCxcbiAgXCJ3YXdhcmFiaWNcIixcbiAgMHgwNjQ4LFxuICBcIndhd2ZpbmFsYXJhYmljXCIsXG4gIDB4ZmVlZSxcbiAgXCJ3YXdoYW16YWFib3ZlYXJhYmljXCIsXG4gIDB4MDYyNCxcbiAgXCJ3YXdoYW16YWFib3ZlZmluYWxhcmFiaWNcIixcbiAgMHhmZTg2LFxuICBcIndic3F1YXJlXCIsXG4gIDB4MzNkZCxcbiAgXCJ3Y2lyY2xlXCIsXG4gIDB4MjRlNixcbiAgXCJ3Y2lyY3VtZmxleFwiLFxuICAweDAxNzUsXG4gIFwid2RpZXJlc2lzXCIsXG4gIDB4MWU4NSxcbiAgXCJ3ZG90YWNjZW50XCIsXG4gIDB4MWU4NyxcbiAgXCJ3ZG90YmVsb3dcIixcbiAgMHgxZTg5LFxuICBcIndlaGlyYWdhbmFcIixcbiAgMHgzMDkxLFxuICBcIndlaWVyc3RyYXNzXCIsXG4gIDB4MjExOCxcbiAgXCJ3ZWthdGFrYW5hXCIsXG4gIDB4MzBmMSxcbiAgXCJ3ZWtvcmVhblwiLFxuICAweDMxNWUsXG4gIFwid2Vva29yZWFuXCIsXG4gIDB4MzE1ZCxcbiAgXCJ3Z3JhdmVcIixcbiAgMHgxZTgxLFxuICBcIndoaXRlYnVsbGV0XCIsXG4gIDB4MjVlNixcbiAgXCJ3aGl0ZWNpcmNsZVwiLFxuICAweDI1Y2IsXG4gIFwid2hpdGVjaXJjbGVpbnZlcnNlXCIsXG4gIDB4MjVkOSxcbiAgXCJ3aGl0ZWNvcm5lcmJyYWNrZXRsZWZ0XCIsXG4gIDB4MzAwZSxcbiAgXCJ3aGl0ZWNvcm5lcmJyYWNrZXRsZWZ0dmVydGljYWxcIixcbiAgMHhmZTQzLFxuICBcIndoaXRlY29ybmVyYnJhY2tldHJpZ2h0XCIsXG4gIDB4MzAwZixcbiAgXCJ3aGl0ZWNvcm5lcmJyYWNrZXRyaWdodHZlcnRpY2FsXCIsXG4gIDB4ZmU0NCxcbiAgXCJ3aGl0ZWRpYW1vbmRcIixcbiAgMHgyNWM3LFxuICBcIndoaXRlZGlhbW9uZGNvbnRhaW5pbmdibGFja3NtYWxsZGlhbW9uZFwiLFxuICAweDI1YzgsXG4gIFwid2hpdGVkb3ducG9pbnRpbmdzbWFsbHRyaWFuZ2xlXCIsXG4gIDB4MjViZixcbiAgXCJ3aGl0ZWRvd25wb2ludGluZ3RyaWFuZ2xlXCIsXG4gIDB4MjViZCxcbiAgXCJ3aGl0ZWxlZnRwb2ludGluZ3NtYWxsdHJpYW5nbGVcIixcbiAgMHgyNWMzLFxuICBcIndoaXRlbGVmdHBvaW50aW5ndHJpYW5nbGVcIixcbiAgMHgyNWMxLFxuICBcIndoaXRlbGVudGljdWxhcmJyYWNrZXRsZWZ0XCIsXG4gIDB4MzAxNixcbiAgXCJ3aGl0ZWxlbnRpY3VsYXJicmFja2V0cmlnaHRcIixcbiAgMHgzMDE3LFxuICBcIndoaXRlcmlnaHRwb2ludGluZ3NtYWxsdHJpYW5nbGVcIixcbiAgMHgyNWI5LFxuICBcIndoaXRlcmlnaHRwb2ludGluZ3RyaWFuZ2xlXCIsXG4gIDB4MjViNyxcbiAgXCJ3aGl0ZXNtYWxsc3F1YXJlXCIsXG4gIDB4MjVhYixcbiAgXCJ3aGl0ZXNtaWxpbmdmYWNlXCIsXG4gIDB4MjYzYSxcbiAgXCJ3aGl0ZXNxdWFyZVwiLFxuICAweDI1YTEsXG4gIFwid2hpdGVzdGFyXCIsXG4gIDB4MjYwNixcbiAgXCJ3aGl0ZXRlbGVwaG9uZVwiLFxuICAweDI2MGYsXG4gIFwid2hpdGV0b3J0b2lzZXNoZWxsYnJhY2tldGxlZnRcIixcbiAgMHgzMDE4LFxuICBcIndoaXRldG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodFwiLFxuICAweDMwMTksXG4gIFwid2hpdGV1cHBvaW50aW5nc21hbGx0cmlhbmdsZVwiLFxuICAweDI1YjUsXG4gIFwid2hpdGV1cHBvaW50aW5ndHJpYW5nbGVcIixcbiAgMHgyNWIzLFxuICBcIndpaGlyYWdhbmFcIixcbiAgMHgzMDkwLFxuICBcIndpa2F0YWthbmFcIixcbiAgMHgzMGYwLFxuICBcIndpa29yZWFuXCIsXG4gIDB4MzE1ZixcbiAgXCJ3bW9ub3NwYWNlXCIsXG4gIDB4ZmY1NyxcbiAgXCJ3b2hpcmFnYW5hXCIsXG4gIDB4MzA5MixcbiAgXCJ3b2thdGFrYW5hXCIsXG4gIDB4MzBmMixcbiAgXCJ3b2thdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY2NixcbiAgXCJ3b25cIixcbiAgMHgyMGE5LFxuICBcIndvbm1vbm9zcGFjZVwiLFxuICAweGZmZTYsXG4gIFwid293YWVudGhhaVwiLFxuICAweDBlMjcsXG4gIFwid3BhcmVuXCIsXG4gIDB4MjRiMixcbiAgXCJ3cmluZ1wiLFxuICAweDFlOTgsXG4gIFwid3N1cGVyaW9yXCIsXG4gIDB4MDJiNyxcbiAgXCJ3dHVybmVkXCIsXG4gIDB4MDI4ZCxcbiAgXCJ3eW5uXCIsXG4gIDB4MDFiZixcbiAgXCJ4XCIsXG4gIDB4MDA3OCxcbiAgXCJ4YWJvdmVjbWJcIixcbiAgMHgwMzNkLFxuICBcInhib3BvbW9mb1wiLFxuICAweDMxMTIsXG4gIFwieGNpcmNsZVwiLFxuICAweDI0ZTcsXG4gIFwieGRpZXJlc2lzXCIsXG4gIDB4MWU4ZCxcbiAgXCJ4ZG90YWNjZW50XCIsXG4gIDB4MWU4YixcbiAgXCJ4ZWhhcm1lbmlhblwiLFxuICAweDA1NmQsXG4gIFwieGlcIixcbiAgMHgwM2JlLFxuICBcInhtb25vc3BhY2VcIixcbiAgMHhmZjU4LFxuICBcInhwYXJlblwiLFxuICAweDI0YjMsXG4gIFwieHN1cGVyaW9yXCIsXG4gIDB4MDJlMyxcbiAgXCJ5XCIsXG4gIDB4MDA3OSxcbiAgXCJ5YWFkb3NxdWFyZVwiLFxuICAweDMzNGUsXG4gIFwieWFiZW5nYWxpXCIsXG4gIDB4MDlhZixcbiAgXCJ5YWN1dGVcIixcbiAgMHgwMGZkLFxuICBcInlhZGV2YVwiLFxuICAweDA5MmYsXG4gIFwieWFla29yZWFuXCIsXG4gIDB4MzE1MixcbiAgXCJ5YWd1amFyYXRpXCIsXG4gIDB4MGFhZixcbiAgXCJ5YWd1cm11a2hpXCIsXG4gIDB4MGEyZixcbiAgXCJ5YWhpcmFnYW5hXCIsXG4gIDB4MzA4NCxcbiAgXCJ5YWthdGFrYW5hXCIsXG4gIDB4MzBlNCxcbiAgXCJ5YWthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY5NCxcbiAgXCJ5YWtvcmVhblwiLFxuICAweDMxNTEsXG4gIFwieWFtYWtrYW50aGFpXCIsXG4gIDB4MGU0ZSxcbiAgXCJ5YXNtYWxsaGlyYWdhbmFcIixcbiAgMHgzMDgzLFxuICBcInlhc21hbGxrYXRha2FuYVwiLFxuICAweDMwZTMsXG4gIFwieWFzbWFsbGthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY2YyxcbiAgXCJ5YXRjeXJpbGxpY1wiLFxuICAweDA0NjMsXG4gIFwieWNpcmNsZVwiLFxuICAweDI0ZTgsXG4gIFwieWNpcmN1bWZsZXhcIixcbiAgMHgwMTc3LFxuICBcInlkaWVyZXNpc1wiLFxuICAweDAwZmYsXG4gIFwieWRvdGFjY2VudFwiLFxuICAweDFlOGYsXG4gIFwieWRvdGJlbG93XCIsXG4gIDB4MWVmNSxcbiAgXCJ5ZWhhcmFiaWNcIixcbiAgMHgwNjRhLFxuICBcInllaGJhcnJlZWFyYWJpY1wiLFxuICAweDA2ZDIsXG4gIFwieWVoYmFycmVlZmluYWxhcmFiaWNcIixcbiAgMHhmYmFmLFxuICBcInllaGZpbmFsYXJhYmljXCIsXG4gIDB4ZmVmMixcbiAgXCJ5ZWhoYW16YWFib3ZlYXJhYmljXCIsXG4gIDB4MDYyNixcbiAgXCJ5ZWhoYW16YWFib3ZlZmluYWxhcmFiaWNcIixcbiAgMHhmZThhLFxuICBcInllaGhhbXphYWJvdmVpbml0aWFsYXJhYmljXCIsXG4gIDB4ZmU4YixcbiAgXCJ5ZWhoYW16YWFib3ZlbWVkaWFsYXJhYmljXCIsXG4gIDB4ZmU4YyxcbiAgXCJ5ZWhpbml0aWFsYXJhYmljXCIsXG4gIDB4ZmVmMyxcbiAgXCJ5ZWhtZWRpYWxhcmFiaWNcIixcbiAgMHhmZWY0LFxuICBcInllaG1lZW1pbml0aWFsYXJhYmljXCIsXG4gIDB4ZmNkZCxcbiAgXCJ5ZWhtZWVtaXNvbGF0ZWRhcmFiaWNcIixcbiAgMHhmYzU4LFxuICBcInllaG5vb25maW5hbGFyYWJpY1wiLFxuICAweGZjOTQsXG4gIFwieWVodGhyZWVkb3RzYmVsb3dhcmFiaWNcIixcbiAgMHgwNmQxLFxuICBcInlla29yZWFuXCIsXG4gIDB4MzE1NixcbiAgXCJ5ZW5cIixcbiAgMHgwMGE1LFxuICBcInllbm1vbm9zcGFjZVwiLFxuICAweGZmZTUsXG4gIFwieWVva29yZWFuXCIsXG4gIDB4MzE1NSxcbiAgXCJ5ZW9yaW5oaWV1aGtvcmVhblwiLFxuICAweDMxODYsXG4gIFwieWVyYWhiZW55b21vaGVicmV3XCIsXG4gIDB4MDVhYSxcbiAgXCJ5ZXJhaGJlbnlvbW9sZWZ0aGVicmV3XCIsXG4gIDB4MDVhYSxcbiAgXCJ5ZXJpY3lyaWxsaWNcIixcbiAgMHgwNDRiLFxuICBcInllcnVkaWVyZXNpc2N5cmlsbGljXCIsXG4gIDB4MDRmOSxcbiAgXCJ5ZXNpZXVuZ2tvcmVhblwiLFxuICAweDMxODEsXG4gIFwieWVzaWV1bmdwYW5zaW9za29yZWFuXCIsXG4gIDB4MzE4MyxcbiAgXCJ5ZXNpZXVuZ3Npb3Nrb3JlYW5cIixcbiAgMHgzMTgyLFxuICBcInlldGl2aGVicmV3XCIsXG4gIDB4MDU5YSxcbiAgXCJ5Z3JhdmVcIixcbiAgMHgxZWYzLFxuICBcInlob29rXCIsXG4gIDB4MDFiNCxcbiAgXCJ5aG9va2Fib3ZlXCIsXG4gIDB4MWVmNyxcbiAgXCJ5aWFybWVuaWFuXCIsXG4gIDB4MDU3NSxcbiAgXCJ5aWN5cmlsbGljXCIsXG4gIDB4MDQ1NyxcbiAgXCJ5aWtvcmVhblwiLFxuICAweDMxNjIsXG4gIFwieWlueWFuZ1wiLFxuICAweDI2MmYsXG4gIFwieWl3bmFybWVuaWFuXCIsXG4gIDB4MDU4MixcbiAgXCJ5bW9ub3NwYWNlXCIsXG4gIDB4ZmY1OSxcbiAgXCJ5b2RcIixcbiAgMHgwNWQ5LFxuICBcInlvZGRhZ2VzaFwiLFxuICAweGZiMzksXG4gIFwieW9kZGFnZXNoaGVicmV3XCIsXG4gIDB4ZmIzOSxcbiAgXCJ5b2RoZWJyZXdcIixcbiAgMHgwNWQ5LFxuICBcInlvZHlvZGhlYnJld1wiLFxuICAweDA1ZjIsXG4gIFwieW9keW9kcGF0YWhoZWJyZXdcIixcbiAgMHhmYjFmLFxuICBcInlvaGlyYWdhbmFcIixcbiAgMHgzMDg4LFxuICBcInlvaWtvcmVhblwiLFxuICAweDMxODksXG4gIFwieW9rYXRha2FuYVwiLFxuICAweDMwZTgsXG4gIFwieW9rYXRha2FuYWhhbGZ3aWR0aFwiLFxuICAweGZmOTYsXG4gIFwieW9rb3JlYW5cIixcbiAgMHgzMTViLFxuICBcInlvc21hbGxoaXJhZ2FuYVwiLFxuICAweDMwODcsXG4gIFwieW9zbWFsbGthdGFrYW5hXCIsXG4gIDB4MzBlNyxcbiAgXCJ5b3NtYWxsa2F0YWthbmFoYWxmd2lkdGhcIixcbiAgMHhmZjZlLFxuICBcInlvdGdyZWVrXCIsXG4gIDB4MDNmMyxcbiAgXCJ5b3lhZWtvcmVhblwiLFxuICAweDMxODgsXG4gIFwieW95YWtvcmVhblwiLFxuICAweDMxODcsXG4gIFwieW95YWt0aGFpXCIsXG4gIDB4MGUyMixcbiAgXCJ5b3lpbmd0aGFpXCIsXG4gIDB4MGUwZCxcbiAgXCJ5cGFyZW5cIixcbiAgMHgyNGI0LFxuICBcInlwb2dlZ3JhbW1lbmlcIixcbiAgMHgwMzdhLFxuICBcInlwb2dlZ3JhbW1lbmlncmVla2NtYlwiLFxuICAweDAzNDUsXG4gIFwieXJcIixcbiAgMHgwMWE2LFxuICBcInlyaW5nXCIsXG4gIDB4MWU5OSxcbiAgXCJ5c3VwZXJpb3JcIixcbiAgMHgwMmI4LFxuICBcInl0aWxkZVwiLFxuICAweDFlZjksXG4gIFwieXR1cm5lZFwiLFxuICAweDAyOGUsXG4gIFwieXVoaXJhZ2FuYVwiLFxuICAweDMwODYsXG4gIFwieXVpa29yZWFuXCIsXG4gIDB4MzE4YyxcbiAgXCJ5dWthdGFrYW5hXCIsXG4gIDB4MzBlNixcbiAgXCJ5dWthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY5NSxcbiAgXCJ5dWtvcmVhblwiLFxuICAweDMxNjAsXG4gIFwieXVzYmlnY3lyaWxsaWNcIixcbiAgMHgwNDZiLFxuICBcInl1c2JpZ2lvdGlmaWVkY3lyaWxsaWNcIixcbiAgMHgwNDZkLFxuICBcInl1c2xpdHRsZWN5cmlsbGljXCIsXG4gIDB4MDQ2NyxcbiAgXCJ5dXNsaXR0bGVpb3RpZmllZGN5cmlsbGljXCIsXG4gIDB4MDQ2OSxcbiAgXCJ5dXNtYWxsaGlyYWdhbmFcIixcbiAgMHgzMDg1LFxuICBcInl1c21hbGxrYXRha2FuYVwiLFxuICAweDMwZTUsXG4gIFwieXVzbWFsbGthdGFrYW5haGFsZndpZHRoXCIsXG4gIDB4ZmY2ZCxcbiAgXCJ5dXlla29yZWFuXCIsXG4gIDB4MzE4YixcbiAgXCJ5dXllb2tvcmVhblwiLFxuICAweDMxOGEsXG4gIFwieXlhYmVuZ2FsaVwiLFxuICAweDA5ZGYsXG4gIFwieXlhZGV2YVwiLFxuICAweDA5NWYsXG4gIFwielwiLFxuICAweDAwN2EsXG4gIFwiemFhcm1lbmlhblwiLFxuICAweDA1NjYsXG4gIFwiemFjdXRlXCIsXG4gIDB4MDE3YSxcbiAgXCJ6YWRldmFcIixcbiAgMHgwOTViLFxuICBcInphZ3VybXVraGlcIixcbiAgMHgwYTViLFxuICBcInphaGFyYWJpY1wiLFxuICAweDA2MzgsXG4gIFwiemFoZmluYWxhcmFiaWNcIixcbiAgMHhmZWM2LFxuICBcInphaGluaXRpYWxhcmFiaWNcIixcbiAgMHhmZWM3LFxuICBcInphaGlyYWdhbmFcIixcbiAgMHgzMDU2LFxuICBcInphaG1lZGlhbGFyYWJpY1wiLFxuICAweGZlYzgsXG4gIFwiemFpbmFyYWJpY1wiLFxuICAweDA2MzIsXG4gIFwiemFpbmZpbmFsYXJhYmljXCIsXG4gIDB4ZmViMCxcbiAgXCJ6YWthdGFrYW5hXCIsXG4gIDB4MzBiNixcbiAgXCJ6YXFlZmdhZG9saGVicmV3XCIsXG4gIDB4MDU5NSxcbiAgXCJ6YXFlZnFhdGFuaGVicmV3XCIsXG4gIDB4MDU5NCxcbiAgXCJ6YXJxYWhlYnJld1wiLFxuICAweDA1OTgsXG4gIFwiemF5aW5cIixcbiAgMHgwNWQ2LFxuICBcInpheWluZGFnZXNoXCIsXG4gIDB4ZmIzNixcbiAgXCJ6YXlpbmRhZ2VzaGhlYnJld1wiLFxuICAweGZiMzYsXG4gIFwiemF5aW5oZWJyZXdcIixcbiAgMHgwNWQ2LFxuICBcInpib3BvbW9mb1wiLFxuICAweDMxMTcsXG4gIFwiemNhcm9uXCIsXG4gIDB4MDE3ZSxcbiAgXCJ6Y2lyY2xlXCIsXG4gIDB4MjRlOSxcbiAgXCJ6Y2lyY3VtZmxleFwiLFxuICAweDFlOTEsXG4gIFwiemN1cmxcIixcbiAgMHgwMjkxLFxuICBcInpkb3RcIixcbiAgMHgwMTdjLFxuICBcInpkb3RhY2NlbnRcIixcbiAgMHgwMTdjLFxuICBcInpkb3RiZWxvd1wiLFxuICAweDFlOTMsXG4gIFwiemVjeXJpbGxpY1wiLFxuICAweDA0MzcsXG4gIFwiemVkZXNjZW5kZXJjeXJpbGxpY1wiLFxuICAweDA0OTksXG4gIFwiemVkaWVyZXNpc2N5cmlsbGljXCIsXG4gIDB4MDRkZixcbiAgXCJ6ZWhpcmFnYW5hXCIsXG4gIDB4MzA1YyxcbiAgXCJ6ZWthdGFrYW5hXCIsXG4gIDB4MzBiYyxcbiAgXCJ6ZXJvXCIsXG4gIDB4MDAzMCxcbiAgXCJ6ZXJvYXJhYmljXCIsXG4gIDB4MDY2MCxcbiAgXCJ6ZXJvYmVuZ2FsaVwiLFxuICAweDA5ZTYsXG4gIFwiemVyb2RldmFcIixcbiAgMHgwOTY2LFxuICBcInplcm9ndWphcmF0aVwiLFxuICAweDBhZTYsXG4gIFwiemVyb2d1cm11a2hpXCIsXG4gIDB4MGE2NixcbiAgXCJ6ZXJvaGFja2FyYWJpY1wiLFxuICAweDA2NjAsXG4gIFwiemVyb2luZmVyaW9yXCIsXG4gIDB4MjA4MCxcbiAgXCJ6ZXJvbW9ub3NwYWNlXCIsXG4gIDB4ZmYxMCxcbiAgXCJ6ZXJvb2xkc3R5bGVcIixcbiAgMHhmNzMwLFxuICBcInplcm9wZXJzaWFuXCIsXG4gIDB4MDZmMCxcbiAgXCJ6ZXJvc3VwZXJpb3JcIixcbiAgMHgyMDcwLFxuICBcInplcm90aGFpXCIsXG4gIDB4MGU1MCxcbiAgXCJ6ZXJvd2lkdGhqb2luZXJcIixcbiAgMHhmZWZmLFxuICBcInplcm93aWR0aG5vbmpvaW5lclwiLFxuICAweDIwMGMsXG4gIFwiemVyb3dpZHRoc3BhY2VcIixcbiAgMHgyMDBiLFxuICBcInpldGFcIixcbiAgMHgwM2I2LFxuICBcInpoYm9wb21vZm9cIixcbiAgMHgzMTEzLFxuICBcInpoZWFybWVuaWFuXCIsXG4gIDB4MDU2YSxcbiAgXCJ6aGVicmV2ZWN5cmlsbGljXCIsXG4gIDB4MDRjMixcbiAgXCJ6aGVjeXJpbGxpY1wiLFxuICAweDA0MzYsXG4gIFwiemhlZGVzY2VuZGVyY3lyaWxsaWNcIixcbiAgMHgwNDk3LFxuICBcInpoZWRpZXJlc2lzY3lyaWxsaWNcIixcbiAgMHgwNGRkLFxuICBcInppaGlyYWdhbmFcIixcbiAgMHgzMDU4LFxuICBcInppa2F0YWthbmFcIixcbiAgMHgzMGI4LFxuICBcInppbm9yaGVicmV3XCIsXG4gIDB4MDVhZSxcbiAgXCJ6bGluZWJlbG93XCIsXG4gIDB4MWU5NSxcbiAgXCJ6bW9ub3NwYWNlXCIsXG4gIDB4ZmY1YSxcbiAgXCJ6b2hpcmFnYW5hXCIsXG4gIDB4MzA1ZSxcbiAgXCJ6b2thdGFrYW5hXCIsXG4gIDB4MzBiZSxcbiAgXCJ6cGFyZW5cIixcbiAgMHgyNGI1LFxuICBcInpyZXRyb2ZsZXhob29rXCIsXG4gIDB4MDI5MCxcbiAgXCJ6c3Ryb2tlXCIsXG4gIDB4MDFiNixcbiAgXCJ6dWhpcmFnYW5hXCIsXG4gIDB4MzA1YSxcbiAgXCJ6dWthdGFrYW5hXCIsXG4gIDB4MzBiYSxcbiAgXCIubm90ZGVmXCIsXG4gIDB4MDAwMCxcbiAgXCJhbmdicmFja2V0bGVmdGJpZ1wiLFxuICAweDIzMjksXG4gIFwiYW5nYnJhY2tldGxlZnRCaWdcIixcbiAgMHgyMzI5LFxuICBcImFuZ2JyYWNrZXRsZWZ0YmlnZ1wiLFxuICAweDIzMjksXG4gIFwiYW5nYnJhY2tldGxlZnRCaWdnXCIsXG4gIDB4MjMyOSxcbiAgXCJhbmdicmFja2V0cmlnaHRCaWdcIixcbiAgMHgyMzJhLFxuICBcImFuZ2JyYWNrZXRyaWdodGJpZ1wiLFxuICAweDIzMmEsXG4gIFwiYW5nYnJhY2tldHJpZ2h0QmlnZ1wiLFxuICAweDIzMmEsXG4gIFwiYW5nYnJhY2tldHJpZ2h0YmlnZ1wiLFxuICAweDIzMmEsXG4gIFwiYXJyb3dob29rbGVmdFwiLFxuICAweDIxYWEsXG4gIFwiYXJyb3dob29rcmlnaHRcIixcbiAgMHgyMWE5LFxuICBcImFycm93bGVmdHRvcGhhbGZcIixcbiAgMHgyMWJjLFxuICBcImFycm93bGVmdGJvdGhhbGZcIixcbiAgMHgyMWJkLFxuICBcImFycm93bm9ydGhlYXN0XCIsXG4gIDB4MjE5NyxcbiAgXCJhcnJvd25vcnRod2VzdFwiLFxuICAweDIxOTYsXG4gIFwiYXJyb3dyaWdodHRvcGhhbGZcIixcbiAgMHgyMWMwLFxuICBcImFycm93cmlnaHRib3RoYWxmXCIsXG4gIDB4MjFjMSxcbiAgXCJhcnJvd3NvdXRoZWFzdFwiLFxuICAweDIxOTgsXG4gIFwiYXJyb3dzb3V0aHdlc3RcIixcbiAgMHgyMTk5LFxuICBcImJhY2tzbGFzaGJpZ1wiLFxuICAweDIyMTYsXG4gIFwiYmFja3NsYXNoQmlnXCIsXG4gIDB4MjIxNixcbiAgXCJiYWNrc2xhc2hCaWdnXCIsXG4gIDB4MjIxNixcbiAgXCJiYWNrc2xhc2hiaWdnXCIsXG4gIDB4MjIxNixcbiAgXCJiYXJkYmxcIixcbiAgMHgyMDE2LFxuICBcImJyYWNlaHRpcGRvd25sZWZ0XCIsXG4gIDB4ZmUzNyxcbiAgXCJicmFjZWh0aXBkb3ducmlnaHRcIixcbiAgMHhmZTM3LFxuICBcImJyYWNlaHRpcHVwbGVmdFwiLFxuICAweGZlMzgsXG4gIFwiYnJhY2VodGlwdXByaWdodFwiLFxuICAweGZlMzgsXG4gIFwiYnJhY2VsZWZ0QmlnXCIsXG4gIDB4MDA3YixcbiAgXCJicmFjZWxlZnRiaWdcIixcbiAgMHgwMDdiLFxuICBcImJyYWNlbGVmdGJpZ2dcIixcbiAgMHgwMDdiLFxuICBcImJyYWNlbGVmdEJpZ2dcIixcbiAgMHgwMDdiLFxuICBcImJyYWNlcmlnaHRCaWdcIixcbiAgMHgwMDdkLFxuICBcImJyYWNlcmlnaHRiaWdcIixcbiAgMHgwMDdkLFxuICBcImJyYWNlcmlnaHRiaWdnXCIsXG4gIDB4MDA3ZCxcbiAgXCJicmFjZXJpZ2h0QmlnZ1wiLFxuICAweDAwN2QsXG4gIFwiYnJhY2tldGxlZnRiaWdcIixcbiAgMHgwMDViLFxuICBcImJyYWNrZXRsZWZ0QmlnXCIsXG4gIDB4MDA1YixcbiAgXCJicmFja2V0bGVmdGJpZ2dcIixcbiAgMHgwMDViLFxuICBcImJyYWNrZXRsZWZ0QmlnZ1wiLFxuICAweDAwNWIsXG4gIFwiYnJhY2tldHJpZ2h0QmlnXCIsXG4gIDB4MDA1ZCxcbiAgXCJicmFja2V0cmlnaHRiaWdcIixcbiAgMHgwMDVkLFxuICBcImJyYWNrZXRyaWdodGJpZ2dcIixcbiAgMHgwMDVkLFxuICBcImJyYWNrZXRyaWdodEJpZ2dcIixcbiAgMHgwMDVkLFxuICBcImNlaWxpbmdsZWZ0YmlnXCIsXG4gIDB4MjMwOCxcbiAgXCJjZWlsaW5nbGVmdEJpZ1wiLFxuICAweDIzMDgsXG4gIFwiY2VpbGluZ2xlZnRCaWdnXCIsXG4gIDB4MjMwOCxcbiAgXCJjZWlsaW5nbGVmdGJpZ2dcIixcbiAgMHgyMzA4LFxuICBcImNlaWxpbmdyaWdodGJpZ1wiLFxuICAweDIzMDksXG4gIFwiY2VpbGluZ3JpZ2h0QmlnXCIsXG4gIDB4MjMwOSxcbiAgXCJjZWlsaW5ncmlnaHRiaWdnXCIsXG4gIDB4MjMwOSxcbiAgXCJjZWlsaW5ncmlnaHRCaWdnXCIsXG4gIDB4MjMwOSxcbiAgXCJjaXJjbGVkb3RkaXNwbGF5XCIsXG4gIDB4MjI5OSxcbiAgXCJjaXJjbGVkb3R0ZXh0XCIsXG4gIDB4MjI5OSxcbiAgXCJjaXJjbGVtdWx0aXBseWRpc3BsYXlcIixcbiAgMHgyMjk3LFxuICBcImNpcmNsZW11bHRpcGx5dGV4dFwiLFxuICAweDIyOTcsXG4gIFwiY2lyY2xlcGx1c2Rpc3BsYXlcIixcbiAgMHgyMjk1LFxuICBcImNpcmNsZXBsdXN0ZXh0XCIsXG4gIDB4MjI5NSxcbiAgXCJjb250aW50ZWdyYWxkaXNwbGF5XCIsXG4gIDB4MjIyZSxcbiAgXCJjb250aW50ZWdyYWx0ZXh0XCIsXG4gIDB4MjIyZSxcbiAgXCJjb3Byb2R1Y3RkaXNwbGF5XCIsXG4gIDB4MjIxMCxcbiAgXCJjb3Byb2R1Y3R0ZXh0XCIsXG4gIDB4MjIxMCxcbiAgXCJmbG9vcmxlZnRCaWdcIixcbiAgMHgyMzBhLFxuICBcImZsb29ybGVmdGJpZ1wiLFxuICAweDIzMGEsXG4gIFwiZmxvb3JsZWZ0YmlnZ1wiLFxuICAweDIzMGEsXG4gIFwiZmxvb3JsZWZ0QmlnZ1wiLFxuICAweDIzMGEsXG4gIFwiZmxvb3JyaWdodGJpZ1wiLFxuICAweDIzMGIsXG4gIFwiZmxvb3JyaWdodEJpZ1wiLFxuICAweDIzMGIsXG4gIFwiZmxvb3JyaWdodEJpZ2dcIixcbiAgMHgyMzBiLFxuICBcImZsb29ycmlnaHRiaWdnXCIsXG4gIDB4MjMwYixcbiAgXCJoYXR3aWRlXCIsXG4gIDB4MDMwMixcbiAgXCJoYXR3aWRlclwiLFxuICAweDAzMDIsXG4gIFwiaGF0d2lkZXN0XCIsXG4gIDB4MDMwMixcbiAgXCJpbnRlcmNhbFwiLFxuICAweDFkNDAsXG4gIFwiaW50ZWdyYWxkaXNwbGF5XCIsXG4gIDB4MjIyYixcbiAgXCJpbnRlZ3JhbHRleHRcIixcbiAgMHgyMjJiLFxuICBcImludGVyc2VjdGlvbmRpc3BsYXlcIixcbiAgMHgyMmMyLFxuICBcImludGVyc2VjdGlvbnRleHRcIixcbiAgMHgyMmMyLFxuICBcImxvZ2ljYWxhbmRkaXNwbGF5XCIsXG4gIDB4MjIyNyxcbiAgXCJsb2dpY2FsYW5kdGV4dFwiLFxuICAweDIyMjcsXG4gIFwibG9naWNhbG9yZGlzcGxheVwiLFxuICAweDIyMjgsXG4gIFwibG9naWNhbG9ydGV4dFwiLFxuICAweDIyMjgsXG4gIFwicGFyZW5sZWZ0QmlnXCIsXG4gIDB4MDAyOCxcbiAgXCJwYXJlbmxlZnRiaWdcIixcbiAgMHgwMDI4LFxuICBcInBhcmVubGVmdEJpZ2dcIixcbiAgMHgwMDI4LFxuICBcInBhcmVubGVmdGJpZ2dcIixcbiAgMHgwMDI4LFxuICBcInBhcmVucmlnaHRCaWdcIixcbiAgMHgwMDI5LFxuICBcInBhcmVucmlnaHRiaWdcIixcbiAgMHgwMDI5LFxuICBcInBhcmVucmlnaHRCaWdnXCIsXG4gIDB4MDAyOSxcbiAgXCJwYXJlbnJpZ2h0YmlnZ1wiLFxuICAweDAwMjksXG4gIFwicHJpbWVcIixcbiAgMHgyMDMyLFxuICBcInByb2R1Y3RkaXNwbGF5XCIsXG4gIDB4MjIwZixcbiAgXCJwcm9kdWN0dGV4dFwiLFxuICAweDIyMGYsXG4gIFwicmFkaWNhbGJpZ1wiLFxuICAweDIyMWEsXG4gIFwicmFkaWNhbEJpZ1wiLFxuICAweDIyMWEsXG4gIFwicmFkaWNhbEJpZ2dcIixcbiAgMHgyMjFhLFxuICBcInJhZGljYWxiaWdnXCIsXG4gIDB4MjIxYSxcbiAgXCJyYWRpY2FsYnRcIixcbiAgMHgyMjFhLFxuICBcInJhZGljYWx0cFwiLFxuICAweDIyMWEsXG4gIFwicmFkaWNhbHZlcnRleFwiLFxuICAweDIyMWEsXG4gIFwic2xhc2hiaWdcIixcbiAgMHgwMDJmLFxuICBcInNsYXNoQmlnXCIsXG4gIDB4MDAyZixcbiAgXCJzbGFzaEJpZ2dcIixcbiAgMHgwMDJmLFxuICBcInNsYXNoYmlnZ1wiLFxuICAweDAwMmYsXG4gIFwic3VtbWF0aW9uZGlzcGxheVwiLFxuICAweDIyMTEsXG4gIFwic3VtbWF0aW9udGV4dFwiLFxuICAweDIyMTEsXG4gIFwidGlsZGV3aWRlXCIsXG4gIDB4MDJkYyxcbiAgXCJ0aWxkZXdpZGVyXCIsXG4gIDB4MDJkYyxcbiAgXCJ0aWxkZXdpZGVzdFwiLFxuICAweDAyZGMsXG4gIFwidW5pb25kaXNwbGF5XCIsXG4gIDB4MjJjMyxcbiAgXCJ1bmlvbm11bHRpZGlzcGxheVwiLFxuICAweDIyOGUsXG4gIFwidW5pb25tdWx0aXRleHRcIixcbiAgMHgyMjhlLFxuICBcInVuaW9uc3FkaXNwbGF5XCIsXG4gIDB4MjI5NCxcbiAgXCJ1bmlvbnNxdGV4dFwiLFxuICAweDIyOTQsXG4gIFwidW5pb250ZXh0XCIsXG4gIDB4MjJjMyxcbiAgXCJ2ZXh0ZW5kZG91YmxlXCIsXG4gIDB4MjIyNSxcbiAgXCJ2ZXh0ZW5kc2luZ2xlXCIsXG4gIDB4MjIyM1xuIF07XG59KTtcbmNvbnN0IGdldERpbmdiYXRzR2x5cGhzVW5pY29kZSA9ICgwLF9jb3JlX3V0aWxzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX18uZ2V0QXJyYXlMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICgpIHtcbiByZXR1cm4gW1xuICBcInNwYWNlXCIsXG4gIDB4MDAyMCxcbiAgXCJhMVwiLFxuICAweDI3MDEsXG4gIFwiYTJcIixcbiAgMHgyNzAyLFxuICBcImEyMDJcIixcbiAgMHgyNzAzLFxuICBcImEzXCIsXG4gIDB4MjcwNCxcbiAgXCJhNFwiLFxuICAweDI2MGUsXG4gIFwiYTVcIixcbiAgMHgyNzA2LFxuICBcImExMTlcIixcbiAgMHgyNzA3LFxuICBcImExMThcIixcbiAgMHgyNzA4LFxuICBcImExMTdcIixcbiAgMHgyNzA5LFxuICBcImExMVwiLFxuICAweDI2MWIsXG4gIFwiYTEyXCIsXG4gIDB4MjYxZSxcbiAgXCJhMTNcIixcbiAgMHgyNzBjLFxuICBcImExNFwiLFxuICAweDI3MGQsXG4gIFwiYTE1XCIsXG4gIDB4MjcwZSxcbiAgXCJhMTZcIixcbiAgMHgyNzBmLFxuICBcImExMDVcIixcbiAgMHgyNzEwLFxuICBcImExN1wiLFxuICAweDI3MTEsXG4gIFwiYTE4XCIsXG4gIDB4MjcxMixcbiAgXCJhMTlcIixcbiAgMHgyNzEzLFxuICBcImEyMFwiLFxuICAweDI3MTQsXG4gIFwiYTIxXCIsXG4gIDB4MjcxNSxcbiAgXCJhMjJcIixcbiAgMHgyNzE2LFxuICBcImEyM1wiLFxuICAweDI3MTcsXG4gIFwiYTI0XCIsXG4gIDB4MjcxOCxcbiAgXCJhMjVcIixcbiAgMHgyNzE5LFxuICBcImEyNlwiLFxuICAweDI3MWEsXG4gIFwiYTI3XCIsXG4gIDB4MjcxYixcbiAgXCJhMjhcIixcbiAgMHgyNzFjLFxuICBcImE2XCIsXG4gIDB4MjcxZCxcbiAgXCJhN1wiLFxuICAweDI3MWUsXG4gIFwiYThcIixcbiAgMHgyNzFmLFxuICBcImE5XCIsXG4gIDB4MjcyMCxcbiAgXCJhMTBcIixcbiAgMHgyNzIxLFxuICBcImEyOVwiLFxuICAweDI3MjIsXG4gIFwiYTMwXCIsXG4gIDB4MjcyMyxcbiAgXCJhMzFcIixcbiAgMHgyNzI0LFxuICBcImEzMlwiLFxuICAweDI3MjUsXG4gIFwiYTMzXCIsXG4gIDB4MjcyNixcbiAgXCJhMzRcIixcbiAgMHgyNzI3LFxuICBcImEzNVwiLFxuICAweDI2MDUsXG4gIFwiYTM2XCIsXG4gIDB4MjcyOSxcbiAgXCJhMzdcIixcbiAgMHgyNzJhLFxuICBcImEzOFwiLFxuICAweDI3MmIsXG4gIFwiYTM5XCIsXG4gIDB4MjcyYyxcbiAgXCJhNDBcIixcbiAgMHgyNzJkLFxuICBcImE0MVwiLFxuICAweDI3MmUsXG4gIFwiYTQyXCIsXG4gIDB4MjcyZixcbiAgXCJhNDNcIixcbiAgMHgyNzMwLFxuICBcImE0NFwiLFxuICAweDI3MzEsXG4gIFwiYTQ1XCIsXG4gIDB4MjczMixcbiAgXCJhNDZcIixcbiAgMHgyNzMzLFxuICBcImE0N1wiLFxuICAweDI3MzQsXG4gIFwiYTQ4XCIsXG4gIDB4MjczNSxcbiAgXCJhNDlcIixcbiAgMHgyNzM2LFxuICBcImE1MFwiLFxuICAweDI3MzcsXG4gIFwiYTUxXCIsXG4gIDB4MjczOCxcbiAgXCJhNTJcIixcbiAgMHgyNzM5LFxuICBcImE1M1wiLFxuICAweDI3M2EsXG4gIFwiYTU0XCIsXG4gIDB4MjczYixcbiAgXCJhNTVcIixcbiAgMHgyNzNjLFxuICBcImE1NlwiLFxuICAweDI3M2QsXG4gIFwiYTU3XCIsXG4gIDB4MjczZSxcbiAgXCJhNThcIixcbiAgMHgyNzNmLFxuICBcImE1OVwiLFxuICAweDI3NDAsXG4gIFwiYTYwXCIsXG4gIDB4Mjc0MSxcbiAgXCJhNjFcIixcbiAgMHgyNzQyLFxuICBcImE2MlwiLFxuICAweDI3NDMsXG4gIFwiYTYzXCIsXG4gIDB4Mjc0NCxcbiAgXCJhNjRcIixcbiAgMHgyNzQ1LFxuICBcImE2NVwiLFxuICAweDI3NDYsXG4gIFwiYTY2XCIsXG4gIDB4Mjc0NyxcbiAgXCJhNjdcIixcbiAgMHgyNzQ4LFxuICBcImE2OFwiLFxuICAweDI3NDksXG4gIFwiYTY5XCIsXG4gIDB4Mjc0YSxcbiAgXCJhNzBcIixcbiAgMHgyNzRiLFxuICBcImE3MVwiLFxuICAweDI1Y2YsXG4gIFwiYTcyXCIsXG4gIDB4Mjc0ZCxcbiAgXCJhNzNcIixcbiAgMHgyNWEwLFxuICBcImE3NFwiLFxuICAweDI3NGYsXG4gIFwiYTIwM1wiLFxuICAweDI3NTAsXG4gIFwiYTc1XCIsXG4gIDB4Mjc1MSxcbiAgXCJhMjA0XCIsXG4gIDB4Mjc1MixcbiAgXCJhNzZcIixcbiAgMHgyNWIyLFxuICBcImE3N1wiLFxuICAweDI1YmMsXG4gIFwiYTc4XCIsXG4gIDB4MjVjNixcbiAgXCJhNzlcIixcbiAgMHgyNzU2LFxuICBcImE4MVwiLFxuICAweDI1ZDcsXG4gIFwiYTgyXCIsXG4gIDB4Mjc1OCxcbiAgXCJhODNcIixcbiAgMHgyNzU5LFxuICBcImE4NFwiLFxuICAweDI3NWEsXG4gIFwiYTk3XCIsXG4gIDB4Mjc1YixcbiAgXCJhOThcIixcbiAgMHgyNzVjLFxuICBcImE5OVwiLFxuICAweDI3NWQsXG4gIFwiYTEwMFwiLFxuICAweDI3NWUsXG4gIFwiYTEwMVwiLFxuICAweDI3NjEsXG4gIFwiYTEwMlwiLFxuICAweDI3NjIsXG4gIFwiYTEwM1wiLFxuICAweDI3NjMsXG4gIFwiYTEwNFwiLFxuICAweDI3NjQsXG4gIFwiYTEwNlwiLFxuICAweDI3NjUsXG4gIFwiYTEwN1wiLFxuICAweDI3NjYsXG4gIFwiYTEwOFwiLFxuICAweDI3NjcsXG4gIFwiYTExMlwiLFxuICAweDI2NjMsXG4gIFwiYTExMVwiLFxuICAweDI2NjYsXG4gIFwiYTExMFwiLFxuICAweDI2NjUsXG4gIFwiYTEwOVwiLFxuICAweDI2NjAsXG4gIFwiYTEyMFwiLFxuICAweDI0NjAsXG4gIFwiYTEyMVwiLFxuICAweDI0NjEsXG4gIFwiYTEyMlwiLFxuICAweDI0NjIsXG4gIFwiYTEyM1wiLFxuICAweDI0NjMsXG4gIFwiYTEyNFwiLFxuICAweDI0NjQsXG4gIFwiYTEyNVwiLFxuICAweDI0NjUsXG4gIFwiYTEyNlwiLFxuICAweDI0NjYsXG4gIFwiYTEyN1wiLFxuICAweDI0NjcsXG4gIFwiYTEyOFwiLFxuICAweDI0NjgsXG4gIFwiYTEyOVwiLFxuICAweDI0NjksXG4gIFwiYTEzMFwiLFxuICAweDI3NzYsXG4gIFwiYTEzMVwiLFxuICAweDI3NzcsXG4gIFwiYTEzMlwiLFxuICAweDI3NzgsXG4gIFwiYTEzM1wiLFxuICAweDI3NzksXG4gIFwiYTEzNFwiLFxuICAweDI3N2EsXG4gIFwiYTEzNVwiLFxuICAweDI3N2IsXG4gIFwiYTEzNlwiLFxuICAweDI3N2MsXG4gIFwiYTEzN1wiLFxuICAweDI3N2QsXG4gIFwiYTEzOFwiLFxuICAweDI3N2UsXG4gIFwiYTEzOVwiLFxuICAweDI3N2YsXG4gIFwiYTE0MFwiLFxuICAweDI3ODAsXG4gIFwiYTE0MVwiLFxuICAweDI3ODEsXG4gIFwiYTE0MlwiLFxuICAweDI3ODIsXG4gIFwiYTE0M1wiLFxuICAweDI3ODMsXG4gIFwiYTE0NFwiLFxuICAweDI3ODQsXG4gIFwiYTE0NVwiLFxuICAweDI3ODUsXG4gIFwiYTE0NlwiLFxuICAweDI3ODYsXG4gIFwiYTE0N1wiLFxuICAweDI3ODcsXG4gIFwiYTE0OFwiLFxuICAweDI3ODgsXG4gIFwiYTE0OVwiLFxuICAweDI3ODksXG4gIFwiYTE1MFwiLFxuICAweDI3OGEsXG4gIFwiYTE1MVwiLFxuICAweDI3OGIsXG4gIFwiYTE1MlwiLFxuICAweDI3OGMsXG4gIFwiYTE1M1wiLFxuICAweDI3OGQsXG4gIFwiYTE1NFwiLFxuICAweDI3OGUsXG4gIFwiYTE1NVwiLFxuICAweDI3OGYsXG4gIFwiYTE1NlwiLFxuICAweDI3OTAsXG4gIFwiYTE1N1wiLFxuICAweDI3OTEsXG4gIFwiYTE1OFwiLFxuICAweDI3OTIsXG4gIFwiYTE1OVwiLFxuICAweDI3OTMsXG4gIFwiYTE2MFwiLFxuICAweDI3OTQsXG4gIFwiYTE2MVwiLFxuICAweDIxOTIsXG4gIFwiYTE2M1wiLFxuICAweDIxOTQsXG4gIFwiYTE2NFwiLFxuICAweDIxOTUsXG4gIFwiYTE5NlwiLFxuICAweDI3OTgsXG4gIFwiYTE2NVwiLFxuICAweDI3OTksXG4gIFwiYTE5MlwiLFxuICAweDI3OWEsXG4gIFwiYTE2NlwiLFxuICAweDI3OWIsXG4gIFwiYTE2N1wiLFxuICAweDI3OWMsXG4gIFwiYTE2OFwiLFxuICAweDI3OWQsXG4gIFwiYTE2OVwiLFxuICAweDI3OWUsXG4gIFwiYTE3MFwiLFxuICAweDI3OWYsXG4gIFwiYTE3MVwiLFxuICAweDI3YTAsXG4gIFwiYTE3MlwiLFxuICAweDI3YTEsXG4gIFwiYTE3M1wiLFxuICAweDI3YTIsXG4gIFwiYTE2MlwiLFxuICAweDI3YTMsXG4gIFwiYTE3NFwiLFxuICAweDI3YTQsXG4gIFwiYTE3NVwiLFxuICAweDI3YTUsXG4gIFwiYTE3NlwiLFxuICAweDI3YTYsXG4gIFwiYTE3N1wiLFxuICAweDI3YTcsXG4gIFwiYTE3OFwiLFxuICAweDI3YTgsXG4gIFwiYTE3OVwiLFxuICAweDI3YTksXG4gIFwiYTE5M1wiLFxuICAweDI3YWEsXG4gIFwiYTE4MFwiLFxuICAweDI3YWIsXG4gIFwiYTE5OVwiLFxuICAweDI3YWMsXG4gIFwiYTE4MVwiLFxuICAweDI3YWQsXG4gIFwiYTIwMFwiLFxuICAweDI3YWUsXG4gIFwiYTE4MlwiLFxuICAweDI3YWYsXG4gIFwiYTIwMVwiLFxuICAweDI3YjEsXG4gIFwiYTE4M1wiLFxuICAweDI3YjIsXG4gIFwiYTE4NFwiLFxuICAweDI3YjMsXG4gIFwiYTE5N1wiLFxuICAweDI3YjQsXG4gIFwiYTE4NVwiLFxuICAweDI3YjUsXG4gIFwiYTE5NFwiLFxuICAweDI3YjYsXG4gIFwiYTE5OFwiLFxuICAweDI3YjcsXG4gIFwiYTE4NlwiLFxuICAweDI3YjgsXG4gIFwiYTE5NVwiLFxuICAweDI3YjksXG4gIFwiYTE4N1wiLFxuICAweDI3YmEsXG4gIFwiYTE4OFwiLFxuICAweDI3YmIsXG4gIFwiYTE4OVwiLFxuICAweDI3YmMsXG4gIFwiYTE5MFwiLFxuICAweDI3YmQsXG4gIFwiYTE5MVwiLFxuICAweDI3YmUsXG4gIFwiYTg5XCIsXG4gIDB4Mjc2OCxcbiAgXCJhOTBcIixcbiAgMHgyNzY5LFxuICBcImE5M1wiLFxuICAweDI3NmEsXG4gIFwiYTk0XCIsXG4gIDB4Mjc2YixcbiAgXCJhOTFcIixcbiAgMHgyNzZjLFxuICBcImE5MlwiLFxuICAweDI3NmQsXG4gIFwiYTIwNVwiLFxuICAweDI3NmUsXG4gIFwiYTg1XCIsXG4gIDB4Mjc2ZixcbiAgXCJhMjA2XCIsXG4gIDB4Mjc3MCxcbiAgXCJhODZcIixcbiAgMHgyNzcxLFxuICBcImE4N1wiLFxuICAweDI3NzIsXG4gIFwiYTg4XCIsXG4gIDB4Mjc3MyxcbiAgXCJhOTVcIixcbiAgMHgyNzc0LFxuICBcImE5NlwiLFxuICAweDI3NzUsXG4gIFwiLm5vdGRlZlwiLFxuICAweDAwMDBcbiBdO1xufSk7XG5cblxuLyoqKi8gfSksXG4vKiAyMSAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5fX3dfcGRmanNfcmVxdWlyZV9fLnIoX193ZWJwYWNrX2V4cG9ydHNfXyk7XG4vKiBoYXJtb255IGV4cG9ydCAqLyBfX3dfcGRmanNfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywge1xuLyogaGFybW9ueSBleHBvcnQgKi8gICBcImdldE5vcm1hbGl6ZWRVbmljb2Rlc1wiOiAoKSA9PiAoLyogYmluZGluZyAqLyBnZXROb3JtYWxpemVkVW5pY29kZXMpLFxuLyogaGFybW9ueSBleHBvcnQgKi8gICBcImdldFVuaWNvZGVGb3JHbHlwaFwiOiAoKSA9PiAoLyogYmluZGluZyAqLyBnZXRVbmljb2RlRm9yR2x5cGgpLFxuLyogaGFybW9ueSBleHBvcnQgKi8gICBcImdldFVuaWNvZGVSYW5nZUZvclwiOiAoKSA9PiAoLyogYmluZGluZyAqLyBnZXRVbmljb2RlUmFuZ2VGb3IpLFxuLyogaGFybW9ueSBleHBvcnQgKi8gICBcIm1hcFNwZWNpYWxVbmljb2RlVmFsdWVzXCI6ICgpID0+ICgvKiBiaW5kaW5nICovIG1hcFNwZWNpYWxVbmljb2RlVmFsdWVzKSxcbi8qIGhhcm1vbnkgZXhwb3J0ICovICAgXCJyZXZlcnNlSWZSdGxcIjogKCkgPT4gKC8qIGJpbmRpbmcgKi8gcmV2ZXJzZUlmUnRsKVxuLyogaGFybW9ueSBleHBvcnQgKi8gfSk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX2NvcmVfdXRpbHNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXyA9IF9fd19wZGZqc19yZXF1aXJlX18oOSk7XG5cbmNvbnN0IGdldFNwZWNpYWxQVUFTeW1ib2xzID0gKDAsX2NvcmVfdXRpbHNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfXy5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gdFs2MzcyMV0gPSAweDAwYTk7XG4gdFs2MzE5M10gPSAweDAwYTk7XG4gdFs2MzcyMF0gPSAweDAwYWU7XG4gdFs2MzE5NF0gPSAweDAwYWU7XG4gdFs2MzcyMl0gPSAweDIxMjI7XG4gdFs2MzE5NV0gPSAweDIxMjI7XG4gdFs2MzcyOV0gPSAweDIzYTc7XG4gdFs2MzczMF0gPSAweDIzYTg7XG4gdFs2MzczMV0gPSAweDIzYTk7XG4gdFs2Mzc0MF0gPSAweDIzYWI7XG4gdFs2Mzc0MV0gPSAweDIzYWM7XG4gdFs2Mzc0Ml0gPSAweDIzYWQ7XG4gdFs2MzcyNl0gPSAweDIzYTE7XG4gdFs2MzcyN10gPSAweDIzYTI7XG4gdFs2MzcyOF0gPSAweDIzYTM7XG4gdFs2MzczN10gPSAweDIzYTQ7XG4gdFs2MzczOF0gPSAweDIzYTU7XG4gdFs2MzczOV0gPSAweDIzYTY7XG4gdFs2MzcyM10gPSAweDIzOWI7XG4gdFs2MzcyNF0gPSAweDIzOWM7XG4gdFs2MzcyNV0gPSAweDIzOWQ7XG4gdFs2MzczNF0gPSAweDIzOWU7XG4gdFs2MzczNV0gPSAweDIzOWY7XG4gdFs2MzczNl0gPSAweDIzYTA7XG59KTtcbmZ1bmN0aW9uIG1hcFNwZWNpYWxVbmljb2RlVmFsdWVzKGNvZGUpIHtcbiBpZiAoY29kZSA+PSAweGZmZjAgJiYgY29kZSA8PSAweGZmZmYpIHtcbiAgcmV0dXJuIDA7XG4gfSBlbHNlIGlmIChjb2RlID49IDB4ZjYwMCAmJiBjb2RlIDw9IDB4ZjhmZikge1xuICByZXR1cm4gZ2V0U3BlY2lhbFBVQVN5bWJvbHMoKVtjb2RlXSB8fCBjb2RlO1xuIH0gZWxzZSBpZiAoY29kZSA9PT0gMHgwMGFkKSB7XG4gIHJldHVybiAweDAwMmQ7XG4gfVxuIHJldHVybiBjb2RlO1xufVxuZnVuY3Rpb24gZ2V0VW5pY29kZUZvckdseXBoKG5hbWUsIGdseXBoc1VuaWNvZGVNYXApIHtcbiBsZXQgdW5pY29kZSA9IGdseXBoc1VuaWNvZGVNYXBbbmFtZV07XG4gaWYgKHVuaWNvZGUgIT09IHVuZGVmaW5lZCkge1xuICByZXR1cm4gdW5pY29kZTtcbiB9XG4gaWYgKCFuYW1lKSB7XG4gIHJldHVybiAtMTtcbiB9XG4gaWYgKG5hbWVbMF0gPT09IFwidVwiKSB7XG4gIGNvbnN0IG5hbWVMZW4gPSBuYW1lLmxlbmd0aDtcbiAgbGV0IGhleFN0cjtcbiAgaWYgKG5hbWVMZW4gPT09IDcgJiYgbmFtZVsxXSA9PT0gXCJuXCIgJiYgbmFtZVsyXSA9PT0gXCJpXCIpIHtcbiAgIGhleFN0ciA9IG5hbWUuc3Vic3RyaW5nKDMpO1xuICB9IGVsc2UgaWYgKG5hbWVMZW4gPj0gNSAmJiBuYW1lTGVuIDw9IDcpIHtcbiAgIGhleFN0ciA9IG5hbWUuc3Vic3RyaW5nKDEpO1xuICB9IGVsc2Uge1xuICAgcmV0dXJuIC0xO1xuICB9XG4gIGlmIChoZXhTdHIgPT09IGhleFN0ci50b1VwcGVyQ2FzZSgpKSB7XG4gICB1bmljb2RlID0gcGFyc2VJbnQoaGV4U3RyLCAxNik7XG4gICBpZiAodW5pY29kZSA+PSAwKSB7XG4gICAgcmV0dXJuIHVuaWNvZGU7XG4gICB9XG4gIH1cbiB9XG4gcmV0dXJuIC0xO1xufVxuY29uc3QgVW5pY29kZVJhbmdlcyA9IFtcbiB7XG4gIGJlZ2luOiAweDAwMDAsXG4gIGVuZDogMHgwMDdmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDAwODAsXG4gIGVuZDogMHgwMGZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDAxMDAsXG4gIGVuZDogMHgwMTdmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDAxODAsXG4gIGVuZDogMHgwMjRmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDAyNTAsXG4gIGVuZDogMHgwMmFmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDAyYjAsXG4gIGVuZDogMHgwMmZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDAzMDAsXG4gIGVuZDogMHgwMzZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDAzNzAsXG4gIGVuZDogMHgwM2ZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDJjODAsXG4gIGVuZDogMHgyY2ZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDA0MDAsXG4gIGVuZDogMHgwNGZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDA1MzAsXG4gIGVuZDogMHgwNThmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDA1OTAsXG4gIGVuZDogMHgwNWZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweGE1MDAsXG4gIGVuZDogMHhhNjNmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDA2MDAsXG4gIGVuZDogMHgwNmZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDA3YzAsXG4gIGVuZDogMHgwN2ZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDA5MDAsXG4gIGVuZDogMHgwOTdmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDA5ODAsXG4gIGVuZDogMHgwOWZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDBhMDAsXG4gIGVuZDogMHgwYTdmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDBhODAsXG4gIGVuZDogMHgwYWZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDBiMDAsXG4gIGVuZDogMHgwYjdmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDBiODAsXG4gIGVuZDogMHgwYmZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDBjMDAsXG4gIGVuZDogMHgwYzdmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDBjODAsXG4gIGVuZDogMHgwY2ZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDBkMDAsXG4gIGVuZDogMHgwZDdmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDBlMDAsXG4gIGVuZDogMHgwZTdmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDBlODAsXG4gIGVuZDogMHgwZWZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDEwYTAsXG4gIGVuZDogMHgxMGZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDFiMDAsXG4gIGVuZDogMHgxYjdmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDExMDAsXG4gIGVuZDogMHgxMWZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDFlMDAsXG4gIGVuZDogMHgxZWZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDFmMDAsXG4gIGVuZDogMHgxZmZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDIwMDAsXG4gIGVuZDogMHgyMDZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDIwNzAsXG4gIGVuZDogMHgyMDlmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDIwYTAsXG4gIGVuZDogMHgyMGNmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDIwZDAsXG4gIGVuZDogMHgyMGZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDIxMDAsXG4gIGVuZDogMHgyMTRmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDIxNTAsXG4gIGVuZDogMHgyMThmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDIxOTAsXG4gIGVuZDogMHgyMWZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDIyMDAsXG4gIGVuZDogMHgyMmZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDIzMDAsXG4gIGVuZDogMHgyM2ZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDI0MDAsXG4gIGVuZDogMHgyNDNmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDI0NDAsXG4gIGVuZDogMHgyNDVmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDI0NjAsXG4gIGVuZDogMHgyNGZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDI1MDAsXG4gIGVuZDogMHgyNTdmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDI1ODAsXG4gIGVuZDogMHgyNTlmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDI1YTAsXG4gIGVuZDogMHgyNWZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDI2MDAsXG4gIGVuZDogMHgyNmZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDI3MDAsXG4gIGVuZDogMHgyN2JmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDMwMDAsXG4gIGVuZDogMHgzMDNmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDMwNDAsXG4gIGVuZDogMHgzMDlmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDMwYTAsXG4gIGVuZDogMHgzMGZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDMxMDAsXG4gIGVuZDogMHgzMTJmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDMxMzAsXG4gIGVuZDogMHgzMThmXG4gfSxcbiB7XG4gIGJlZ2luOiAweGE4NDAsXG4gIGVuZDogMHhhODdmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDMyMDAsXG4gIGVuZDogMHgzMmZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDMzMDAsXG4gIGVuZDogMHgzM2ZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweGFjMDAsXG4gIGVuZDogMHhkN2FmXG4gfSxcbiB7XG4gIGJlZ2luOiAweGQ4MDAsXG4gIGVuZDogMHhkZmZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDEwOTAwLFxuICBlbmQ6IDB4MTA5MWZcbiB9LFxuIHtcbiAgYmVnaW46IDB4NGUwMCxcbiAgZW5kOiAweDlmZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4ZTAwMCxcbiAgZW5kOiAweGY4ZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MzFjMCxcbiAgZW5kOiAweDMxZWZcbiB9LFxuIHtcbiAgYmVnaW46IDB4ZmIwMCxcbiAgZW5kOiAweGZiNGZcbiB9LFxuIHtcbiAgYmVnaW46IDB4ZmI1MCxcbiAgZW5kOiAweGZkZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4ZmUyMCxcbiAgZW5kOiAweGZlMmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4ZmUxMCxcbiAgZW5kOiAweGZlMWZcbiB9LFxuIHtcbiAgYmVnaW46IDB4ZmU1MCxcbiAgZW5kOiAweGZlNmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4ZmU3MCxcbiAgZW5kOiAweGZlZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4ZmYwMCxcbiAgZW5kOiAweGZmZWZcbiB9LFxuIHtcbiAgYmVnaW46IDB4ZmZmMCxcbiAgZW5kOiAweGZmZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MGYwMCxcbiAgZW5kOiAweDBmZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MDcwMCxcbiAgZW5kOiAweDA3NGZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MDc4MCxcbiAgZW5kOiAweDA3YmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MGQ4MCxcbiAgZW5kOiAweDBkZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MTAwMCxcbiAgZW5kOiAweDEwOWZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MTIwMCxcbiAgZW5kOiAweDEzN2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MTNhMCxcbiAgZW5kOiAweDEzZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MTQwMCxcbiAgZW5kOiAweDE2N2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MTY4MCxcbiAgZW5kOiAweDE2OWZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MTZhMCxcbiAgZW5kOiAweDE2ZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MTc4MCxcbiAgZW5kOiAweDE3ZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MTgwMCxcbiAgZW5kOiAweDE4YWZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MjgwMCxcbiAgZW5kOiAweDI4ZmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4YTAwMCxcbiAgZW5kOiAweGE0OGZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MTcwMCxcbiAgZW5kOiAweDE3MWZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MTAzMDAsXG4gIGVuZDogMHgxMDMyZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxMDMzMCxcbiAgZW5kOiAweDEwMzRmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDEwNDAwLFxuICBlbmQ6IDB4MTA0NGZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MWQwMDAsXG4gIGVuZDogMHgxZDBmZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxZDQwMCxcbiAgZW5kOiAweDFkN2ZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweGZmMDAwLFxuICBlbmQ6IDB4ZmZmZmRcbiB9LFxuIHtcbiAgYmVnaW46IDB4ZmUwMCxcbiAgZW5kOiAweGZlMGZcbiB9LFxuIHtcbiAgYmVnaW46IDB4ZTAwMDAsXG4gIGVuZDogMHhlMDA3ZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxOTAwLFxuICBlbmQ6IDB4MTk0ZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxOTUwLFxuICBlbmQ6IDB4MTk3ZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxOTgwLFxuICBlbmQ6IDB4MTlkZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxYTAwLFxuICBlbmQ6IDB4MWExZlxuIH0sXG4ge1xuICBiZWdpbjogMHgyYzAwLFxuICBlbmQ6IDB4MmM1ZlxuIH0sXG4ge1xuICBiZWdpbjogMHgyZDMwLFxuICBlbmQ6IDB4MmQ3ZlxuIH0sXG4ge1xuICBiZWdpbjogMHg0ZGMwLFxuICBlbmQ6IDB4NGRmZlxuIH0sXG4ge1xuICBiZWdpbjogMHhhODAwLFxuICBlbmQ6IDB4YTgyZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxMDAwMCxcbiAgZW5kOiAweDEwMDdmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDEwMTQwLFxuICBlbmQ6IDB4MTAxOGZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MTAzODAsXG4gIGVuZDogMHgxMDM5ZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxMDNhMCxcbiAgZW5kOiAweDEwM2RmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDEwNDUwLFxuICBlbmQ6IDB4MTA0N2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MTA0ODAsXG4gIGVuZDogMHgxMDRhZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxMDgwMCxcbiAgZW5kOiAweDEwODNmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDEwYTAwLFxuICBlbmQ6IDB4MTBhNWZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MWQzMDAsXG4gIGVuZDogMHgxZDM1ZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxMjAwMCxcbiAgZW5kOiAweDEyM2ZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDFkMzYwLFxuICBlbmQ6IDB4MWQzN2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MWI4MCxcbiAgZW5kOiAweDFiYmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MWMwMCxcbiAgZW5kOiAweDFjNGZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MWM1MCxcbiAgZW5kOiAweDFjN2ZcbiB9LFxuIHtcbiAgYmVnaW46IDB4YTg4MCxcbiAgZW5kOiAweGE4ZGZcbiB9LFxuIHtcbiAgYmVnaW46IDB4YTkwMCxcbiAgZW5kOiAweGE5MmZcbiB9LFxuIHtcbiAgYmVnaW46IDB4YTkzMCxcbiAgZW5kOiAweGE5NWZcbiB9LFxuIHtcbiAgYmVnaW46IDB4YWEwMCxcbiAgZW5kOiAweGFhNWZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MTAxOTAsXG4gIGVuZDogMHgxMDFjZlxuIH0sXG4ge1xuICBiZWdpbjogMHgxMDFkMCxcbiAgZW5kOiAweDEwMWZmXG4gfSxcbiB7XG4gIGJlZ2luOiAweDEwMmEwLFxuICBlbmQ6IDB4MTAyZGZcbiB9LFxuIHtcbiAgYmVnaW46IDB4MWYwMzAsXG4gIGVuZDogMHgxZjA5ZlxuIH1cbl07XG5mdW5jdGlvbiBnZXRVbmljb2RlUmFuZ2VGb3IodmFsdWUpIHtcbiBmb3IgKGxldCBpID0gMCwgaWkgPSBVbmljb2RlUmFuZ2VzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgY29uc3QgcmFuZ2UgPSBVbmljb2RlUmFuZ2VzW2ldO1xuICBpZiAodmFsdWUgPj0gcmFuZ2UuYmVnaW4gJiYgdmFsdWUgPCByYW5nZS5lbmQpIHtcbiAgIHJldHVybiBpO1xuICB9XG4gfVxuIHJldHVybiAtMTtcbn1cbmZ1bmN0aW9uIGlzUlRMUmFuZ2VGb3IodmFsdWUpIHtcbiBsZXQgcmFuZ2UgPSBVbmljb2RlUmFuZ2VzWzEzXTtcbiBpZiAodmFsdWUgPj0gcmFuZ2UuYmVnaW4gJiYgdmFsdWUgPCByYW5nZS5lbmQpIHtcbiAgcmV0dXJuIHRydWU7XG4gfVxuIHJhbmdlID0gVW5pY29kZVJhbmdlc1sxMV07XG4gaWYgKHZhbHVlID49IHJhbmdlLmJlZ2luICYmIHZhbHVlIDwgcmFuZ2UuZW5kKSB7XG4gIHJldHVybiB0cnVlO1xuIH1cbiByZXR1cm4gZmFsc2U7XG59XG5jb25zdCBnZXROb3JtYWxpemVkVW5pY29kZXMgPSAoMCxfY29yZV91dGlsc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fLmdldEFycmF5TG9va3VwVGFibGVGYWN0b3J5KShmdW5jdGlvbiAoKSB7XG4gcmV0dXJuIFtcbiAgXCJcXHUwMEE4XCIsXG4gIFwiXFx1MDAyMFxcdTAzMDhcIixcbiAgXCJcXHUwMEFGXCIsXG4gIFwiXFx1MDAyMFxcdTAzMDRcIixcbiAgXCJcXHUwMEI0XCIsXG4gIFwiXFx1MDAyMFxcdTAzMDFcIixcbiAgXCJcXHUwMEI1XCIsXG4gIFwiXFx1MDNCQ1wiLFxuICBcIlxcdTAwQjhcIixcbiAgXCJcXHUwMDIwXFx1MDMyN1wiLFxuICBcIlxcdTAxMzJcIixcbiAgXCJcXHUwMDQ5XFx1MDA0QVwiLFxuICBcIlxcdTAxMzNcIixcbiAgXCJcXHUwMDY5XFx1MDA2QVwiLFxuICBcIlxcdTAxM0ZcIixcbiAgXCJcXHUwMDRDXFx1MDBCN1wiLFxuICBcIlxcdTAxNDBcIixcbiAgXCJcXHUwMDZDXFx1MDBCN1wiLFxuICBcIlxcdTAxNDlcIixcbiAgXCJcXHUwMkJDXFx1MDA2RVwiLFxuICBcIlxcdTAxN0ZcIixcbiAgXCJcXHUwMDczXCIsXG4gIFwiXFx1MDFDNFwiLFxuICBcIlxcdTAwNDRcXHUwMTdEXCIsXG4gIFwiXFx1MDFDNVwiLFxuICBcIlxcdTAwNDRcXHUwMTdFXCIsXG4gIFwiXFx1MDFDNlwiLFxuICBcIlxcdTAwNjRcXHUwMTdFXCIsXG4gIFwiXFx1MDFDN1wiLFxuICBcIlxcdTAwNENcXHUwMDRBXCIsXG4gIFwiXFx1MDFDOFwiLFxuICBcIlxcdTAwNENcXHUwMDZBXCIsXG4gIFwiXFx1MDFDOVwiLFxuICBcIlxcdTAwNkNcXHUwMDZBXCIsXG4gIFwiXFx1MDFDQVwiLFxuICBcIlxcdTAwNEVcXHUwMDRBXCIsXG4gIFwiXFx1MDFDQlwiLFxuICBcIlxcdTAwNEVcXHUwMDZBXCIsXG4gIFwiXFx1MDFDQ1wiLFxuICBcIlxcdTAwNkVcXHUwMDZBXCIsXG4gIFwiXFx1MDFGMVwiLFxuICBcIlxcdTAwNDRcXHUwMDVBXCIsXG4gIFwiXFx1MDFGMlwiLFxuICBcIlxcdTAwNDRcXHUwMDdBXCIsXG4gIFwiXFx1MDFGM1wiLFxuICBcIlxcdTAwNjRcXHUwMDdBXCIsXG4gIFwiXFx1MDJEOFwiLFxuICBcIlxcdTAwMjBcXHUwMzA2XCIsXG4gIFwiXFx1MDJEOVwiLFxuICBcIlxcdTAwMjBcXHUwMzA3XCIsXG4gIFwiXFx1MDJEQVwiLFxuICBcIlxcdTAwMjBcXHUwMzBBXCIsXG4gIFwiXFx1MDJEQlwiLFxuICBcIlxcdTAwMjBcXHUwMzI4XCIsXG4gIFwiXFx1MDJEQ1wiLFxuICBcIlxcdTAwMjBcXHUwMzAzXCIsXG4gIFwiXFx1MDJERFwiLFxuICBcIlxcdTAwMjBcXHUwMzBCXCIsXG4gIFwiXFx1MDM3QVwiLFxuICBcIlxcdTAwMjBcXHUwMzQ1XCIsXG4gIFwiXFx1MDM4NFwiLFxuICBcIlxcdTAwMjBcXHUwMzAxXCIsXG4gIFwiXFx1MDNEMFwiLFxuICBcIlxcdTAzQjJcIixcbiAgXCJcXHUwM0QxXCIsXG4gIFwiXFx1MDNCOFwiLFxuICBcIlxcdTAzRDJcIixcbiAgXCJcXHUwM0E1XCIsXG4gIFwiXFx1MDNENVwiLFxuICBcIlxcdTAzQzZcIixcbiAgXCJcXHUwM0Q2XCIsXG4gIFwiXFx1MDNDMFwiLFxuICBcIlxcdTAzRjBcIixcbiAgXCJcXHUwM0JBXCIsXG4gIFwiXFx1MDNGMVwiLFxuICBcIlxcdTAzQzFcIixcbiAgXCJcXHUwM0YyXCIsXG4gIFwiXFx1MDNDMlwiLFxuICBcIlxcdTAzRjRcIixcbiAgXCJcXHUwMzk4XCIsXG4gIFwiXFx1MDNGNVwiLFxuICBcIlxcdTAzQjVcIixcbiAgXCJcXHUwM0Y5XCIsXG4gIFwiXFx1MDNBM1wiLFxuICBcIlxcdTA1ODdcIixcbiAgXCJcXHUwNTY1XFx1MDU4MlwiLFxuICBcIlxcdTA2NzVcIixcbiAgXCJcXHUwNjI3XFx1MDY3NFwiLFxuICBcIlxcdTA2NzZcIixcbiAgXCJcXHUwNjQ4XFx1MDY3NFwiLFxuICBcIlxcdTA2NzdcIixcbiAgXCJcXHUwNkM3XFx1MDY3NFwiLFxuICBcIlxcdTA2NzhcIixcbiAgXCJcXHUwNjRBXFx1MDY3NFwiLFxuICBcIlxcdTBFMzNcIixcbiAgXCJcXHUwRTREXFx1MEUzMlwiLFxuICBcIlxcdTBFQjNcIixcbiAgXCJcXHUwRUNEXFx1MEVCMlwiLFxuICBcIlxcdTBFRENcIixcbiAgXCJcXHUwRUFCXFx1MEU5OVwiLFxuICBcIlxcdTBFRERcIixcbiAgXCJcXHUwRUFCXFx1MEVBMVwiLFxuICBcIlxcdTBGNzdcIixcbiAgXCJcXHUwRkIyXFx1MEY4MVwiLFxuICBcIlxcdTBGNzlcIixcbiAgXCJcXHUwRkIzXFx1MEY4MVwiLFxuICBcIlxcdTFFOUFcIixcbiAgXCJcXHUwMDYxXFx1MDJCRVwiLFxuICBcIlxcdTFGQkRcIixcbiAgXCJcXHUwMDIwXFx1MDMxM1wiLFxuICBcIlxcdTFGQkZcIixcbiAgXCJcXHUwMDIwXFx1MDMxM1wiLFxuICBcIlxcdTFGQzBcIixcbiAgXCJcXHUwMDIwXFx1MDM0MlwiLFxuICBcIlxcdTFGRkVcIixcbiAgXCJcXHUwMDIwXFx1MDMxNFwiLFxuICBcIlxcdTIwMDJcIixcbiAgXCJcXHUwMDIwXCIsXG4gIFwiXFx1MjAwM1wiLFxuICBcIlxcdTAwMjBcIixcbiAgXCJcXHUyMDA0XCIsXG4gIFwiXFx1MDAyMFwiLFxuICBcIlxcdTIwMDVcIixcbiAgXCJcXHUwMDIwXCIsXG4gIFwiXFx1MjAwNlwiLFxuICBcIlxcdTAwMjBcIixcbiAgXCJcXHUyMDA4XCIsXG4gIFwiXFx1MDAyMFwiLFxuICBcIlxcdTIwMDlcIixcbiAgXCJcXHUwMDIwXCIsXG4gIFwiXFx1MjAwQVwiLFxuICBcIlxcdTAwMjBcIixcbiAgXCJcXHUyMDE3XCIsXG4gIFwiXFx1MDAyMFxcdTAzMzNcIixcbiAgXCJcXHUyMDI0XCIsXG4gIFwiXFx1MDAyRVwiLFxuICBcIlxcdTIwMjVcIixcbiAgXCJcXHUwMDJFXFx1MDAyRVwiLFxuICBcIlxcdTIwMjZcIixcbiAgXCJcXHUwMDJFXFx1MDAyRVxcdTAwMkVcIixcbiAgXCJcXHUyMDMzXCIsXG4gIFwiXFx1MjAzMlxcdTIwMzJcIixcbiAgXCJcXHUyMDM0XCIsXG4gIFwiXFx1MjAzMlxcdTIwMzJcXHUyMDMyXCIsXG4gIFwiXFx1MjAzNlwiLFxuICBcIlxcdTIwMzVcXHUyMDM1XCIsXG4gIFwiXFx1MjAzN1wiLFxuICBcIlxcdTIwMzVcXHUyMDM1XFx1MjAzNVwiLFxuICBcIlxcdTIwM0NcIixcbiAgXCJcXHUwMDIxXFx1MDAyMVwiLFxuICBcIlxcdTIwM0VcIixcbiAgXCJcXHUwMDIwXFx1MDMwNVwiLFxuICBcIlxcdTIwNDdcIixcbiAgXCJcXHUwMDNGXFx1MDAzRlwiLFxuICBcIlxcdTIwNDhcIixcbiAgXCJcXHUwMDNGXFx1MDAyMVwiLFxuICBcIlxcdTIwNDlcIixcbiAgXCJcXHUwMDIxXFx1MDAzRlwiLFxuICBcIlxcdTIwNTdcIixcbiAgXCJcXHUyMDMyXFx1MjAzMlxcdTIwMzJcXHUyMDMyXCIsXG4gIFwiXFx1MjA1RlwiLFxuICBcIlxcdTAwMjBcIixcbiAgXCJcXHUyMEE4XCIsXG4gIFwiXFx1MDA1MlxcdTAwNzNcIixcbiAgXCJcXHUyMTAwXCIsXG4gIFwiXFx1MDA2MVxcdTAwMkZcXHUwMDYzXCIsXG4gIFwiXFx1MjEwMVwiLFxuICBcIlxcdTAwNjFcXHUwMDJGXFx1MDA3M1wiLFxuICBcIlxcdTIxMDNcIixcbiAgXCJcXHUwMEIwXFx1MDA0M1wiLFxuICBcIlxcdTIxMDVcIixcbiAgXCJcXHUwMDYzXFx1MDAyRlxcdTAwNkZcIixcbiAgXCJcXHUyMTA2XCIsXG4gIFwiXFx1MDA2M1xcdTAwMkZcXHUwMDc1XCIsXG4gIFwiXFx1MjEwN1wiLFxuICBcIlxcdTAxOTBcIixcbiAgXCJcXHUyMTA5XCIsXG4gIFwiXFx1MDBCMFxcdTAwNDZcIixcbiAgXCJcXHUyMTE2XCIsXG4gIFwiXFx1MDA0RVxcdTAwNkZcIixcbiAgXCJcXHUyMTIxXCIsXG4gIFwiXFx1MDA1NFxcdTAwNDVcXHUwMDRDXCIsXG4gIFwiXFx1MjEzNVwiLFxuICBcIlxcdTA1RDBcIixcbiAgXCJcXHUyMTM2XCIsXG4gIFwiXFx1MDVEMVwiLFxuICBcIlxcdTIxMzdcIixcbiAgXCJcXHUwNUQyXCIsXG4gIFwiXFx1MjEzOFwiLFxuICBcIlxcdTA1RDNcIixcbiAgXCJcXHUyMTNCXCIsXG4gIFwiXFx1MDA0NlxcdTAwNDFcXHUwMDU4XCIsXG4gIFwiXFx1MjE2MFwiLFxuICBcIlxcdTAwNDlcIixcbiAgXCJcXHUyMTYxXCIsXG4gIFwiXFx1MDA0OVxcdTAwNDlcIixcbiAgXCJcXHUyMTYyXCIsXG4gIFwiXFx1MDA0OVxcdTAwNDlcXHUwMDQ5XCIsXG4gIFwiXFx1MjE2M1wiLFxuICBcIlxcdTAwNDlcXHUwMDU2XCIsXG4gIFwiXFx1MjE2NFwiLFxuICBcIlxcdTAwNTZcIixcbiAgXCJcXHUyMTY1XCIsXG4gIFwiXFx1MDA1NlxcdTAwNDlcIixcbiAgXCJcXHUyMTY2XCIsXG4gIFwiXFx1MDA1NlxcdTAwNDlcXHUwMDQ5XCIsXG4gIFwiXFx1MjE2N1wiLFxuICBcIlxcdTAwNTZcXHUwMDQ5XFx1MDA0OVxcdTAwNDlcIixcbiAgXCJcXHUyMTY4XCIsXG4gIFwiXFx1MDA0OVxcdTAwNThcIixcbiAgXCJcXHUyMTY5XCIsXG4gIFwiXFx1MDA1OFwiLFxuICBcIlxcdTIxNkFcIixcbiAgXCJcXHUwMDU4XFx1MDA0OVwiLFxuICBcIlxcdTIxNkJcIixcbiAgXCJcXHUwMDU4XFx1MDA0OVxcdTAwNDlcIixcbiAgXCJcXHUyMTZDXCIsXG4gIFwiXFx1MDA0Q1wiLFxuICBcIlxcdTIxNkRcIixcbiAgXCJcXHUwMDQzXCIsXG4gIFwiXFx1MjE2RVwiLFxuICBcIlxcdTAwNDRcIixcbiAgXCJcXHUyMTZGXCIsXG4gIFwiXFx1MDA0RFwiLFxuICBcIlxcdTIxNzBcIixcbiAgXCJcXHUwMDY5XCIsXG4gIFwiXFx1MjE3MVwiLFxuICBcIlxcdTAwNjlcXHUwMDY5XCIsXG4gIFwiXFx1MjE3MlwiLFxuICBcIlxcdTAwNjlcXHUwMDY5XFx1MDA2OVwiLFxuICBcIlxcdTIxNzNcIixcbiAgXCJcXHUwMDY5XFx1MDA3NlwiLFxuICBcIlxcdTIxNzRcIixcbiAgXCJcXHUwMDc2XCIsXG4gIFwiXFx1MjE3NVwiLFxuICBcIlxcdTAwNzZcXHUwMDY5XCIsXG4gIFwiXFx1MjE3NlwiLFxuICBcIlxcdTAwNzZcXHUwMDY5XFx1MDA2OVwiLFxuICBcIlxcdTIxNzdcIixcbiAgXCJcXHUwMDc2XFx1MDA2OVxcdTAwNjlcXHUwMDY5XCIsXG4gIFwiXFx1MjE3OFwiLFxuICBcIlxcdTAwNjlcXHUwMDc4XCIsXG4gIFwiXFx1MjE3OVwiLFxuICBcIlxcdTAwNzhcIixcbiAgXCJcXHUyMTdBXCIsXG4gIFwiXFx1MDA3OFxcdTAwNjlcIixcbiAgXCJcXHUyMTdCXCIsXG4gIFwiXFx1MDA3OFxcdTAwNjlcXHUwMDY5XCIsXG4gIFwiXFx1MjE3Q1wiLFxuICBcIlxcdTAwNkNcIixcbiAgXCJcXHUyMTdEXCIsXG4gIFwiXFx1MDA2M1wiLFxuICBcIlxcdTIxN0VcIixcbiAgXCJcXHUwMDY0XCIsXG4gIFwiXFx1MjE3RlwiLFxuICBcIlxcdTAwNkRcIixcbiAgXCJcXHUyMjJDXCIsXG4gIFwiXFx1MjIyQlxcdTIyMkJcIixcbiAgXCJcXHUyMjJEXCIsXG4gIFwiXFx1MjIyQlxcdTIyMkJcXHUyMjJCXCIsXG4gIFwiXFx1MjIyRlwiLFxuICBcIlxcdTIyMkVcXHUyMjJFXCIsXG4gIFwiXFx1MjIzMFwiLFxuICBcIlxcdTIyMkVcXHUyMjJFXFx1MjIyRVwiLFxuICBcIlxcdTI0NzRcIixcbiAgXCJcXHUwMDI4XFx1MDAzMVxcdTAwMjlcIixcbiAgXCJcXHUyNDc1XCIsXG4gIFwiXFx1MDAyOFxcdTAwMzJcXHUwMDI5XCIsXG4gIFwiXFx1MjQ3NlwiLFxuICBcIlxcdTAwMjhcXHUwMDMzXFx1MDAyOVwiLFxuICBcIlxcdTI0NzdcIixcbiAgXCJcXHUwMDI4XFx1MDAzNFxcdTAwMjlcIixcbiAgXCJcXHUyNDc4XCIsXG4gIFwiXFx1MDAyOFxcdTAwMzVcXHUwMDI5XCIsXG4gIFwiXFx1MjQ3OVwiLFxuICBcIlxcdTAwMjhcXHUwMDM2XFx1MDAyOVwiLFxuICBcIlxcdTI0N0FcIixcbiAgXCJcXHUwMDI4XFx1MDAzN1xcdTAwMjlcIixcbiAgXCJcXHUyNDdCXCIsXG4gIFwiXFx1MDAyOFxcdTAwMzhcXHUwMDI5XCIsXG4gIFwiXFx1MjQ3Q1wiLFxuICBcIlxcdTAwMjhcXHUwMDM5XFx1MDAyOVwiLFxuICBcIlxcdTI0N0RcIixcbiAgXCJcXHUwMDI4XFx1MDAzMVxcdTAwMzBcXHUwMDI5XCIsXG4gIFwiXFx1MjQ3RVwiLFxuICBcIlxcdTAwMjhcXHUwMDMxXFx1MDAzMVxcdTAwMjlcIixcbiAgXCJcXHUyNDdGXCIsXG4gIFwiXFx1MDAyOFxcdTAwMzFcXHUwMDMyXFx1MDAyOVwiLFxuICBcIlxcdTI0ODBcIixcbiAgXCJcXHUwMDI4XFx1MDAzMVxcdTAwMzNcXHUwMDI5XCIsXG4gIFwiXFx1MjQ4MVwiLFxuICBcIlxcdTAwMjhcXHUwMDMxXFx1MDAzNFxcdTAwMjlcIixcbiAgXCJcXHUyNDgyXCIsXG4gIFwiXFx1MDAyOFxcdTAwMzFcXHUwMDM1XFx1MDAyOVwiLFxuICBcIlxcdTI0ODNcIixcbiAgXCJcXHUwMDI4XFx1MDAzMVxcdTAwMzZcXHUwMDI5XCIsXG4gIFwiXFx1MjQ4NFwiLFxuICBcIlxcdTAwMjhcXHUwMDMxXFx1MDAzN1xcdTAwMjlcIixcbiAgXCJcXHUyNDg1XCIsXG4gIFwiXFx1MDAyOFxcdTAwMzFcXHUwMDM4XFx1MDAyOVwiLFxuICBcIlxcdTI0ODZcIixcbiAgXCJcXHUwMDI4XFx1MDAzMVxcdTAwMzlcXHUwMDI5XCIsXG4gIFwiXFx1MjQ4N1wiLFxuICBcIlxcdTAwMjhcXHUwMDMyXFx1MDAzMFxcdTAwMjlcIixcbiAgXCJcXHUyNDg4XCIsXG4gIFwiXFx1MDAzMVxcdTAwMkVcIixcbiAgXCJcXHUyNDg5XCIsXG4gIFwiXFx1MDAzMlxcdTAwMkVcIixcbiAgXCJcXHUyNDhBXCIsXG4gIFwiXFx1MDAzM1xcdTAwMkVcIixcbiAgXCJcXHUyNDhCXCIsXG4gIFwiXFx1MDAzNFxcdTAwMkVcIixcbiAgXCJcXHUyNDhDXCIsXG4gIFwiXFx1MDAzNVxcdTAwMkVcIixcbiAgXCJcXHUyNDhEXCIsXG4gIFwiXFx1MDAzNlxcdTAwMkVcIixcbiAgXCJcXHUyNDhFXCIsXG4gIFwiXFx1MDAzN1xcdTAwMkVcIixcbiAgXCJcXHUyNDhGXCIsXG4gIFwiXFx1MDAzOFxcdTAwMkVcIixcbiAgXCJcXHUyNDkwXCIsXG4gIFwiXFx1MDAzOVxcdTAwMkVcIixcbiAgXCJcXHUyNDkxXCIsXG4gIFwiXFx1MDAzMVxcdTAwMzBcXHUwMDJFXCIsXG4gIFwiXFx1MjQ5MlwiLFxuICBcIlxcdTAwMzFcXHUwMDMxXFx1MDAyRVwiLFxuICBcIlxcdTI0OTNcIixcbiAgXCJcXHUwMDMxXFx1MDAzMlxcdTAwMkVcIixcbiAgXCJcXHUyNDk0XCIsXG4gIFwiXFx1MDAzMVxcdTAwMzNcXHUwMDJFXCIsXG4gIFwiXFx1MjQ5NVwiLFxuICBcIlxcdTAwMzFcXHUwMDM0XFx1MDAyRVwiLFxuICBcIlxcdTI0OTZcIixcbiAgXCJcXHUwMDMxXFx1MDAzNVxcdTAwMkVcIixcbiAgXCJcXHUyNDk3XCIsXG4gIFwiXFx1MDAzMVxcdTAwMzZcXHUwMDJFXCIsXG4gIFwiXFx1MjQ5OFwiLFxuICBcIlxcdTAwMzFcXHUwMDM3XFx1MDAyRVwiLFxuICBcIlxcdTI0OTlcIixcbiAgXCJcXHUwMDMxXFx1MDAzOFxcdTAwMkVcIixcbiAgXCJcXHUyNDlBXCIsXG4gIFwiXFx1MDAzMVxcdTAwMzlcXHUwMDJFXCIsXG4gIFwiXFx1MjQ5QlwiLFxuICBcIlxcdTAwMzJcXHUwMDMwXFx1MDAyRVwiLFxuICBcIlxcdTI0OUNcIixcbiAgXCJcXHUwMDI4XFx1MDA2MVxcdTAwMjlcIixcbiAgXCJcXHUyNDlEXCIsXG4gIFwiXFx1MDAyOFxcdTAwNjJcXHUwMDI5XCIsXG4gIFwiXFx1MjQ5RVwiLFxuICBcIlxcdTAwMjhcXHUwMDYzXFx1MDAyOVwiLFxuICBcIlxcdTI0OUZcIixcbiAgXCJcXHUwMDI4XFx1MDA2NFxcdTAwMjlcIixcbiAgXCJcXHUyNEEwXCIsXG4gIFwiXFx1MDAyOFxcdTAwNjVcXHUwMDI5XCIsXG4gIFwiXFx1MjRBMVwiLFxuICBcIlxcdTAwMjhcXHUwMDY2XFx1MDAyOVwiLFxuICBcIlxcdTI0QTJcIixcbiAgXCJcXHUwMDI4XFx1MDA2N1xcdTAwMjlcIixcbiAgXCJcXHUyNEEzXCIsXG4gIFwiXFx1MDAyOFxcdTAwNjhcXHUwMDI5XCIsXG4gIFwiXFx1MjRBNFwiLFxuICBcIlxcdTAwMjhcXHUwMDY5XFx1MDAyOVwiLFxuICBcIlxcdTI0QTVcIixcbiAgXCJcXHUwMDI4XFx1MDA2QVxcdTAwMjlcIixcbiAgXCJcXHUyNEE2XCIsXG4gIFwiXFx1MDAyOFxcdTAwNkJcXHUwMDI5XCIsXG4gIFwiXFx1MjRBN1wiLFxuICBcIlxcdTAwMjhcXHUwMDZDXFx1MDAyOVwiLFxuICBcIlxcdTI0QThcIixcbiAgXCJcXHUwMDI4XFx1MDA2RFxcdTAwMjlcIixcbiAgXCJcXHUyNEE5XCIsXG4gIFwiXFx1MDAyOFxcdTAwNkVcXHUwMDI5XCIsXG4gIFwiXFx1MjRBQVwiLFxuICBcIlxcdTAwMjhcXHUwMDZGXFx1MDAyOVwiLFxuICBcIlxcdTI0QUJcIixcbiAgXCJcXHUwMDI4XFx1MDA3MFxcdTAwMjlcIixcbiAgXCJcXHUyNEFDXCIsXG4gIFwiXFx1MDAyOFxcdTAwNzFcXHUwMDI5XCIsXG4gIFwiXFx1MjRBRFwiLFxuICBcIlxcdTAwMjhcXHUwMDcyXFx1MDAyOVwiLFxuICBcIlxcdTI0QUVcIixcbiAgXCJcXHUwMDI4XFx1MDA3M1xcdTAwMjlcIixcbiAgXCJcXHUyNEFGXCIsXG4gIFwiXFx1MDAyOFxcdTAwNzRcXHUwMDI5XCIsXG4gIFwiXFx1MjRCMFwiLFxuICBcIlxcdTAwMjhcXHUwMDc1XFx1MDAyOVwiLFxuICBcIlxcdTI0QjFcIixcbiAgXCJcXHUwMDI4XFx1MDA3NlxcdTAwMjlcIixcbiAgXCJcXHUyNEIyXCIsXG4gIFwiXFx1MDAyOFxcdTAwNzdcXHUwMDI5XCIsXG4gIFwiXFx1MjRCM1wiLFxuICBcIlxcdTAwMjhcXHUwMDc4XFx1MDAyOVwiLFxuICBcIlxcdTI0QjRcIixcbiAgXCJcXHUwMDI4XFx1MDA3OVxcdTAwMjlcIixcbiAgXCJcXHUyNEI1XCIsXG4gIFwiXFx1MDAyOFxcdTAwN0FcXHUwMDI5XCIsXG4gIFwiXFx1MkEwQ1wiLFxuICBcIlxcdTIyMkJcXHUyMjJCXFx1MjIyQlxcdTIyMkJcIixcbiAgXCJcXHUyQTc0XCIsXG4gIFwiXFx1MDAzQVxcdTAwM0FcXHUwMDNEXCIsXG4gIFwiXFx1MkE3NVwiLFxuICBcIlxcdTAwM0RcXHUwMDNEXCIsXG4gIFwiXFx1MkE3NlwiLFxuICBcIlxcdTAwM0RcXHUwMDNEXFx1MDAzRFwiLFxuICBcIlxcdTJFOUZcIixcbiAgXCJcXHU2QkNEXCIsXG4gIFwiXFx1MkVGM1wiLFxuICBcIlxcdTlGOUZcIixcbiAgXCJcXHUyRjAwXCIsXG4gIFwiXFx1NEUwMFwiLFxuICBcIlxcdTJGMDFcIixcbiAgXCJcXHU0RTI4XCIsXG4gIFwiXFx1MkYwMlwiLFxuICBcIlxcdTRFMzZcIixcbiAgXCJcXHUyRjAzXCIsXG4gIFwiXFx1NEUzRlwiLFxuICBcIlxcdTJGMDRcIixcbiAgXCJcXHU0RTU5XCIsXG4gIFwiXFx1MkYwNVwiLFxuICBcIlxcdTRFODVcIixcbiAgXCJcXHUyRjA2XCIsXG4gIFwiXFx1NEU4Q1wiLFxuICBcIlxcdTJGMDdcIixcbiAgXCJcXHU0RUEwXCIsXG4gIFwiXFx1MkYwOFwiLFxuICBcIlxcdTRFQkFcIixcbiAgXCJcXHUyRjA5XCIsXG4gIFwiXFx1NTEzRlwiLFxuICBcIlxcdTJGMEFcIixcbiAgXCJcXHU1MTY1XCIsXG4gIFwiXFx1MkYwQlwiLFxuICBcIlxcdTUxNkJcIixcbiAgXCJcXHUyRjBDXCIsXG4gIFwiXFx1NTE4MlwiLFxuICBcIlxcdTJGMERcIixcbiAgXCJcXHU1MTk2XCIsXG4gIFwiXFx1MkYwRVwiLFxuICBcIlxcdTUxQUJcIixcbiAgXCJcXHUyRjBGXCIsXG4gIFwiXFx1NTFFMFwiLFxuICBcIlxcdTJGMTBcIixcbiAgXCJcXHU1MUY1XCIsXG4gIFwiXFx1MkYxMVwiLFxuICBcIlxcdTUyMDBcIixcbiAgXCJcXHUyRjEyXCIsXG4gIFwiXFx1NTI5QlwiLFxuICBcIlxcdTJGMTNcIixcbiAgXCJcXHU1MkY5XCIsXG4gIFwiXFx1MkYxNFwiLFxuICBcIlxcdTUzMTVcIixcbiAgXCJcXHUyRjE1XCIsXG4gIFwiXFx1NTMxQVwiLFxuICBcIlxcdTJGMTZcIixcbiAgXCJcXHU1MzM4XCIsXG4gIFwiXFx1MkYxN1wiLFxuICBcIlxcdTUzNDFcIixcbiAgXCJcXHUyRjE4XCIsXG4gIFwiXFx1NTM1Q1wiLFxuICBcIlxcdTJGMTlcIixcbiAgXCJcXHU1MzY5XCIsXG4gIFwiXFx1MkYxQVwiLFxuICBcIlxcdTUzODJcIixcbiAgXCJcXHUyRjFCXCIsXG4gIFwiXFx1NTNCNlwiLFxuICBcIlxcdTJGMUNcIixcbiAgXCJcXHU1M0M4XCIsXG4gIFwiXFx1MkYxRFwiLFxuICBcIlxcdTUzRTNcIixcbiAgXCJcXHUyRjFFXCIsXG4gIFwiXFx1NTZEN1wiLFxuICBcIlxcdTJGMUZcIixcbiAgXCJcXHU1NzFGXCIsXG4gIFwiXFx1MkYyMFwiLFxuICBcIlxcdTU4RUJcIixcbiAgXCJcXHUyRjIxXCIsXG4gIFwiXFx1NTkwMlwiLFxuICBcIlxcdTJGMjJcIixcbiAgXCJcXHU1OTBBXCIsXG4gIFwiXFx1MkYyM1wiLFxuICBcIlxcdTU5MTVcIixcbiAgXCJcXHUyRjI0XCIsXG4gIFwiXFx1NTkyN1wiLFxuICBcIlxcdTJGMjVcIixcbiAgXCJcXHU1OTczXCIsXG4gIFwiXFx1MkYyNlwiLFxuICBcIlxcdTVCNTBcIixcbiAgXCJcXHUyRjI3XCIsXG4gIFwiXFx1NUI4MFwiLFxuICBcIlxcdTJGMjhcIixcbiAgXCJcXHU1QkY4XCIsXG4gIFwiXFx1MkYyOVwiLFxuICBcIlxcdTVDMEZcIixcbiAgXCJcXHUyRjJBXCIsXG4gIFwiXFx1NUMyMlwiLFxuICBcIlxcdTJGMkJcIixcbiAgXCJcXHU1QzM4XCIsXG4gIFwiXFx1MkYyQ1wiLFxuICBcIlxcdTVDNkVcIixcbiAgXCJcXHUyRjJEXCIsXG4gIFwiXFx1NUM3MVwiLFxuICBcIlxcdTJGMkVcIixcbiAgXCJcXHU1RERCXCIsXG4gIFwiXFx1MkYyRlwiLFxuICBcIlxcdTVERTVcIixcbiAgXCJcXHUyRjMwXCIsXG4gIFwiXFx1NURGMVwiLFxuICBcIlxcdTJGMzFcIixcbiAgXCJcXHU1REZFXCIsXG4gIFwiXFx1MkYzMlwiLFxuICBcIlxcdTVFNzJcIixcbiAgXCJcXHUyRjMzXCIsXG4gIFwiXFx1NUU3QVwiLFxuICBcIlxcdTJGMzRcIixcbiAgXCJcXHU1RTdGXCIsXG4gIFwiXFx1MkYzNVwiLFxuICBcIlxcdTVFRjRcIixcbiAgXCJcXHUyRjM2XCIsXG4gIFwiXFx1NUVGRVwiLFxuICBcIlxcdTJGMzdcIixcbiAgXCJcXHU1RjBCXCIsXG4gIFwiXFx1MkYzOFwiLFxuICBcIlxcdTVGMTNcIixcbiAgXCJcXHUyRjM5XCIsXG4gIFwiXFx1NUY1MFwiLFxuICBcIlxcdTJGM0FcIixcbiAgXCJcXHU1RjYxXCIsXG4gIFwiXFx1MkYzQlwiLFxuICBcIlxcdTVGNzNcIixcbiAgXCJcXHUyRjNDXCIsXG4gIFwiXFx1NUZDM1wiLFxuICBcIlxcdTJGM0RcIixcbiAgXCJcXHU2MjA4XCIsXG4gIFwiXFx1MkYzRVwiLFxuICBcIlxcdTYyMzZcIixcbiAgXCJcXHUyRjNGXCIsXG4gIFwiXFx1NjI0QlwiLFxuICBcIlxcdTJGNDBcIixcbiAgXCJcXHU2NTJGXCIsXG4gIFwiXFx1MkY0MVwiLFxuICBcIlxcdTY1MzRcIixcbiAgXCJcXHUyRjQyXCIsXG4gIFwiXFx1NjU4N1wiLFxuICBcIlxcdTJGNDNcIixcbiAgXCJcXHU2NTk3XCIsXG4gIFwiXFx1MkY0NFwiLFxuICBcIlxcdTY1QTRcIixcbiAgXCJcXHUyRjQ1XCIsXG4gIFwiXFx1NjVCOVwiLFxuICBcIlxcdTJGNDZcIixcbiAgXCJcXHU2NUUwXCIsXG4gIFwiXFx1MkY0N1wiLFxuICBcIlxcdTY1RTVcIixcbiAgXCJcXHUyRjQ4XCIsXG4gIFwiXFx1NjZGMFwiLFxuICBcIlxcdTJGNDlcIixcbiAgXCJcXHU2NzA4XCIsXG4gIFwiXFx1MkY0QVwiLFxuICBcIlxcdTY3MjhcIixcbiAgXCJcXHUyRjRCXCIsXG4gIFwiXFx1NkIyMFwiLFxuICBcIlxcdTJGNENcIixcbiAgXCJcXHU2QjYyXCIsXG4gIFwiXFx1MkY0RFwiLFxuICBcIlxcdTZCNzlcIixcbiAgXCJcXHUyRjRFXCIsXG4gIFwiXFx1NkJCM1wiLFxuICBcIlxcdTJGNEZcIixcbiAgXCJcXHU2QkNCXCIsXG4gIFwiXFx1MkY1MFwiLFxuICBcIlxcdTZCRDRcIixcbiAgXCJcXHUyRjUxXCIsXG4gIFwiXFx1NkJEQlwiLFxuICBcIlxcdTJGNTJcIixcbiAgXCJcXHU2QzBGXCIsXG4gIFwiXFx1MkY1M1wiLFxuICBcIlxcdTZDMTRcIixcbiAgXCJcXHUyRjU0XCIsXG4gIFwiXFx1NkMzNFwiLFxuICBcIlxcdTJGNTVcIixcbiAgXCJcXHU3MDZCXCIsXG4gIFwiXFx1MkY1NlwiLFxuICBcIlxcdTcyMkFcIixcbiAgXCJcXHUyRjU3XCIsXG4gIFwiXFx1NzIzNlwiLFxuICBcIlxcdTJGNThcIixcbiAgXCJcXHU3MjNCXCIsXG4gIFwiXFx1MkY1OVwiLFxuICBcIlxcdTcyM0ZcIixcbiAgXCJcXHUyRjVBXCIsXG4gIFwiXFx1NzI0N1wiLFxuICBcIlxcdTJGNUJcIixcbiAgXCJcXHU3MjU5XCIsXG4gIFwiXFx1MkY1Q1wiLFxuICBcIlxcdTcyNUJcIixcbiAgXCJcXHUyRjVEXCIsXG4gIFwiXFx1NzJBQ1wiLFxuICBcIlxcdTJGNUVcIixcbiAgXCJcXHU3Mzg0XCIsXG4gIFwiXFx1MkY1RlwiLFxuICBcIlxcdTczODlcIixcbiAgXCJcXHUyRjYwXCIsXG4gIFwiXFx1NzREQ1wiLFxuICBcIlxcdTJGNjFcIixcbiAgXCJcXHU3NEU2XCIsXG4gIFwiXFx1MkY2MlwiLFxuICBcIlxcdTc1MThcIixcbiAgXCJcXHUyRjYzXCIsXG4gIFwiXFx1NzUxRlwiLFxuICBcIlxcdTJGNjRcIixcbiAgXCJcXHU3NTI4XCIsXG4gIFwiXFx1MkY2NVwiLFxuICBcIlxcdTc1MzBcIixcbiAgXCJcXHUyRjY2XCIsXG4gIFwiXFx1NzU4QlwiLFxuICBcIlxcdTJGNjdcIixcbiAgXCJcXHU3NTkyXCIsXG4gIFwiXFx1MkY2OFwiLFxuICBcIlxcdTc2NzZcIixcbiAgXCJcXHUyRjY5XCIsXG4gIFwiXFx1NzY3RFwiLFxuICBcIlxcdTJGNkFcIixcbiAgXCJcXHU3NkFFXCIsXG4gIFwiXFx1MkY2QlwiLFxuICBcIlxcdTc2QkZcIixcbiAgXCJcXHUyRjZDXCIsXG4gIFwiXFx1NzZFRVwiLFxuICBcIlxcdTJGNkRcIixcbiAgXCJcXHU3N0RCXCIsXG4gIFwiXFx1MkY2RVwiLFxuICBcIlxcdTc3RTJcIixcbiAgXCJcXHUyRjZGXCIsXG4gIFwiXFx1NzdGM1wiLFxuICBcIlxcdTJGNzBcIixcbiAgXCJcXHU3OTNBXCIsXG4gIFwiXFx1MkY3MVwiLFxuICBcIlxcdTc5QjhcIixcbiAgXCJcXHUyRjcyXCIsXG4gIFwiXFx1NzlCRVwiLFxuICBcIlxcdTJGNzNcIixcbiAgXCJcXHU3QTc0XCIsXG4gIFwiXFx1MkY3NFwiLFxuICBcIlxcdTdBQ0JcIixcbiAgXCJcXHUyRjc1XCIsXG4gIFwiXFx1N0FGOVwiLFxuICBcIlxcdTJGNzZcIixcbiAgXCJcXHU3QzczXCIsXG4gIFwiXFx1MkY3N1wiLFxuICBcIlxcdTdDRjhcIixcbiAgXCJcXHUyRjc4XCIsXG4gIFwiXFx1N0YzNlwiLFxuICBcIlxcdTJGNzlcIixcbiAgXCJcXHU3RjUxXCIsXG4gIFwiXFx1MkY3QVwiLFxuICBcIlxcdTdGOEFcIixcbiAgXCJcXHUyRjdCXCIsXG4gIFwiXFx1N0ZCRFwiLFxuICBcIlxcdTJGN0NcIixcbiAgXCJcXHU4MDAxXCIsXG4gIFwiXFx1MkY3RFwiLFxuICBcIlxcdTgwMENcIixcbiAgXCJcXHUyRjdFXCIsXG4gIFwiXFx1ODAxMlwiLFxuICBcIlxcdTJGN0ZcIixcbiAgXCJcXHU4MDMzXCIsXG4gIFwiXFx1MkY4MFwiLFxuICBcIlxcdTgwN0ZcIixcbiAgXCJcXHUyRjgxXCIsXG4gIFwiXFx1ODA4OVwiLFxuICBcIlxcdTJGODJcIixcbiAgXCJcXHU4MUUzXCIsXG4gIFwiXFx1MkY4M1wiLFxuICBcIlxcdTgxRUFcIixcbiAgXCJcXHUyRjg0XCIsXG4gIFwiXFx1ODFGM1wiLFxuICBcIlxcdTJGODVcIixcbiAgXCJcXHU4MUZDXCIsXG4gIFwiXFx1MkY4NlwiLFxuICBcIlxcdTgyMENcIixcbiAgXCJcXHUyRjg3XCIsXG4gIFwiXFx1ODIxQlwiLFxuICBcIlxcdTJGODhcIixcbiAgXCJcXHU4MjFGXCIsXG4gIFwiXFx1MkY4OVwiLFxuICBcIlxcdTgyNkVcIixcbiAgXCJcXHUyRjhBXCIsXG4gIFwiXFx1ODI3MlwiLFxuICBcIlxcdTJGOEJcIixcbiAgXCJcXHU4Mjc4XCIsXG4gIFwiXFx1MkY4Q1wiLFxuICBcIlxcdTg2NERcIixcbiAgXCJcXHUyRjhEXCIsXG4gIFwiXFx1ODY2QlwiLFxuICBcIlxcdTJGOEVcIixcbiAgXCJcXHU4ODQwXCIsXG4gIFwiXFx1MkY4RlwiLFxuICBcIlxcdTg4NENcIixcbiAgXCJcXHUyRjkwXCIsXG4gIFwiXFx1ODg2M1wiLFxuICBcIlxcdTJGOTFcIixcbiAgXCJcXHU4OTdFXCIsXG4gIFwiXFx1MkY5MlwiLFxuICBcIlxcdTg5OEJcIixcbiAgXCJcXHUyRjkzXCIsXG4gIFwiXFx1ODlEMlwiLFxuICBcIlxcdTJGOTRcIixcbiAgXCJcXHU4QTAwXCIsXG4gIFwiXFx1MkY5NVwiLFxuICBcIlxcdThDMzdcIixcbiAgXCJcXHUyRjk2XCIsXG4gIFwiXFx1OEM0NlwiLFxuICBcIlxcdTJGOTdcIixcbiAgXCJcXHU4QzU1XCIsXG4gIFwiXFx1MkY5OFwiLFxuICBcIlxcdThDNzhcIixcbiAgXCJcXHUyRjk5XCIsXG4gIFwiXFx1OEM5RFwiLFxuICBcIlxcdTJGOUFcIixcbiAgXCJcXHU4RDY0XCIsXG4gIFwiXFx1MkY5QlwiLFxuICBcIlxcdThENzBcIixcbiAgXCJcXHUyRjlDXCIsXG4gIFwiXFx1OERCM1wiLFxuICBcIlxcdTJGOURcIixcbiAgXCJcXHU4RUFCXCIsXG4gIFwiXFx1MkY5RVwiLFxuICBcIlxcdThFQ0FcIixcbiAgXCJcXHUyRjlGXCIsXG4gIFwiXFx1OEY5QlwiLFxuICBcIlxcdTJGQTBcIixcbiAgXCJcXHU4RkIwXCIsXG4gIFwiXFx1MkZBMVwiLFxuICBcIlxcdThGQjVcIixcbiAgXCJcXHUyRkEyXCIsXG4gIFwiXFx1OTA5MVwiLFxuICBcIlxcdTJGQTNcIixcbiAgXCJcXHU5MTQ5XCIsXG4gIFwiXFx1MkZBNFwiLFxuICBcIlxcdTkxQzZcIixcbiAgXCJcXHUyRkE1XCIsXG4gIFwiXFx1OTFDQ1wiLFxuICBcIlxcdTJGQTZcIixcbiAgXCJcXHU5MUQxXCIsXG4gIFwiXFx1MkZBN1wiLFxuICBcIlxcdTk1NzdcIixcbiAgXCJcXHUyRkE4XCIsXG4gIFwiXFx1OTU4MFwiLFxuICBcIlxcdTJGQTlcIixcbiAgXCJcXHU5NjFDXCIsXG4gIFwiXFx1MkZBQVwiLFxuICBcIlxcdTk2QjZcIixcbiAgXCJcXHUyRkFCXCIsXG4gIFwiXFx1OTZCOVwiLFxuICBcIlxcdTJGQUNcIixcbiAgXCJcXHU5NkU4XCIsXG4gIFwiXFx1MkZBRFwiLFxuICBcIlxcdTk3NTFcIixcbiAgXCJcXHUyRkFFXCIsXG4gIFwiXFx1OTc1RVwiLFxuICBcIlxcdTJGQUZcIixcbiAgXCJcXHU5NzYyXCIsXG4gIFwiXFx1MkZCMFwiLFxuICBcIlxcdTk3NjlcIixcbiAgXCJcXHUyRkIxXCIsXG4gIFwiXFx1OTdDQlwiLFxuICBcIlxcdTJGQjJcIixcbiAgXCJcXHU5N0VEXCIsXG4gIFwiXFx1MkZCM1wiLFxuICBcIlxcdTk3RjNcIixcbiAgXCJcXHUyRkI0XCIsXG4gIFwiXFx1OTgwMVwiLFxuICBcIlxcdTJGQjVcIixcbiAgXCJcXHU5OEE4XCIsXG4gIFwiXFx1MkZCNlwiLFxuICBcIlxcdTk4REJcIixcbiAgXCJcXHUyRkI3XCIsXG4gIFwiXFx1OThERlwiLFxuICBcIlxcdTJGQjhcIixcbiAgXCJcXHU5OTk2XCIsXG4gIFwiXFx1MkZCOVwiLFxuICBcIlxcdTk5OTlcIixcbiAgXCJcXHUyRkJBXCIsXG4gIFwiXFx1OTlBQ1wiLFxuICBcIlxcdTJGQkJcIixcbiAgXCJcXHU5QUE4XCIsXG4gIFwiXFx1MkZCQ1wiLFxuICBcIlxcdTlBRDhcIixcbiAgXCJcXHUyRkJEXCIsXG4gIFwiXFx1OUFERlwiLFxuICBcIlxcdTJGQkVcIixcbiAgXCJcXHU5QjI1XCIsXG4gIFwiXFx1MkZCRlwiLFxuICBcIlxcdTlCMkZcIixcbiAgXCJcXHUyRkMwXCIsXG4gIFwiXFx1OUIzMlwiLFxuICBcIlxcdTJGQzFcIixcbiAgXCJcXHU5QjNDXCIsXG4gIFwiXFx1MkZDMlwiLFxuICBcIlxcdTlCNUFcIixcbiAgXCJcXHUyRkMzXCIsXG4gIFwiXFx1OUNFNVwiLFxuICBcIlxcdTJGQzRcIixcbiAgXCJcXHU5RTc1XCIsXG4gIFwiXFx1MkZDNVwiLFxuICBcIlxcdTlFN0ZcIixcbiAgXCJcXHUyRkM2XCIsXG4gIFwiXFx1OUVBNVwiLFxuICBcIlxcdTJGQzdcIixcbiAgXCJcXHU5RUJCXCIsXG4gIFwiXFx1MkZDOFwiLFxuICBcIlxcdTlFQzNcIixcbiAgXCJcXHUyRkM5XCIsXG4gIFwiXFx1OUVDRFwiLFxuICBcIlxcdTJGQ0FcIixcbiAgXCJcXHU5RUQxXCIsXG4gIFwiXFx1MkZDQlwiLFxuICBcIlxcdTlFRjlcIixcbiAgXCJcXHUyRkNDXCIsXG4gIFwiXFx1OUVGRFwiLFxuICBcIlxcdTJGQ0RcIixcbiAgXCJcXHU5RjBFXCIsXG4gIFwiXFx1MkZDRVwiLFxuICBcIlxcdTlGMTNcIixcbiAgXCJcXHUyRkNGXCIsXG4gIFwiXFx1OUYyMFwiLFxuICBcIlxcdTJGRDBcIixcbiAgXCJcXHU5RjNCXCIsXG4gIFwiXFx1MkZEMVwiLFxuICBcIlxcdTlGNEFcIixcbiAgXCJcXHUyRkQyXCIsXG4gIFwiXFx1OUY1MlwiLFxuICBcIlxcdTJGRDNcIixcbiAgXCJcXHU5RjhEXCIsXG4gIFwiXFx1MkZENFwiLFxuICBcIlxcdTlGOUNcIixcbiAgXCJcXHUyRkQ1XCIsXG4gIFwiXFx1OUZBMFwiLFxuICBcIlxcdTMwMzZcIixcbiAgXCJcXHUzMDEyXCIsXG4gIFwiXFx1MzAzOFwiLFxuICBcIlxcdTUzNDFcIixcbiAgXCJcXHUzMDM5XCIsXG4gIFwiXFx1NTM0NFwiLFxuICBcIlxcdTMwM0FcIixcbiAgXCJcXHU1MzQ1XCIsXG4gIFwiXFx1MzA5QlwiLFxuICBcIlxcdTAwMjBcXHUzMDk5XCIsXG4gIFwiXFx1MzA5Q1wiLFxuICBcIlxcdTAwMjBcXHUzMDlBXCIsXG4gIFwiXFx1MzEzMVwiLFxuICBcIlxcdTExMDBcIixcbiAgXCJcXHUzMTMyXCIsXG4gIFwiXFx1MTEwMVwiLFxuICBcIlxcdTMxMzNcIixcbiAgXCJcXHUxMUFBXCIsXG4gIFwiXFx1MzEzNFwiLFxuICBcIlxcdTExMDJcIixcbiAgXCJcXHUzMTM1XCIsXG4gIFwiXFx1MTFBQ1wiLFxuICBcIlxcdTMxMzZcIixcbiAgXCJcXHUxMUFEXCIsXG4gIFwiXFx1MzEzN1wiLFxuICBcIlxcdTExMDNcIixcbiAgXCJcXHUzMTM4XCIsXG4gIFwiXFx1MTEwNFwiLFxuICBcIlxcdTMxMzlcIixcbiAgXCJcXHUxMTA1XCIsXG4gIFwiXFx1MzEzQVwiLFxuICBcIlxcdTExQjBcIixcbiAgXCJcXHUzMTNCXCIsXG4gIFwiXFx1MTFCMVwiLFxuICBcIlxcdTMxM0NcIixcbiAgXCJcXHUxMUIyXCIsXG4gIFwiXFx1MzEzRFwiLFxuICBcIlxcdTExQjNcIixcbiAgXCJcXHUzMTNFXCIsXG4gIFwiXFx1MTFCNFwiLFxuICBcIlxcdTMxM0ZcIixcbiAgXCJcXHUxMUI1XCIsXG4gIFwiXFx1MzE0MFwiLFxuICBcIlxcdTExMUFcIixcbiAgXCJcXHUzMTQxXCIsXG4gIFwiXFx1MTEwNlwiLFxuICBcIlxcdTMxNDJcIixcbiAgXCJcXHUxMTA3XCIsXG4gIFwiXFx1MzE0M1wiLFxuICBcIlxcdTExMDhcIixcbiAgXCJcXHUzMTQ0XCIsXG4gIFwiXFx1MTEyMVwiLFxuICBcIlxcdTMxNDVcIixcbiAgXCJcXHUxMTA5XCIsXG4gIFwiXFx1MzE0NlwiLFxuICBcIlxcdTExMEFcIixcbiAgXCJcXHUzMTQ3XCIsXG4gIFwiXFx1MTEwQlwiLFxuICBcIlxcdTMxNDhcIixcbiAgXCJcXHUxMTBDXCIsXG4gIFwiXFx1MzE0OVwiLFxuICBcIlxcdTExMERcIixcbiAgXCJcXHUzMTRBXCIsXG4gIFwiXFx1MTEwRVwiLFxuICBcIlxcdTMxNEJcIixcbiAgXCJcXHUxMTBGXCIsXG4gIFwiXFx1MzE0Q1wiLFxuICBcIlxcdTExMTBcIixcbiAgXCJcXHUzMTREXCIsXG4gIFwiXFx1MTExMVwiLFxuICBcIlxcdTMxNEVcIixcbiAgXCJcXHUxMTEyXCIsXG4gIFwiXFx1MzE0RlwiLFxuICBcIlxcdTExNjFcIixcbiAgXCJcXHUzMTUwXCIsXG4gIFwiXFx1MTE2MlwiLFxuICBcIlxcdTMxNTFcIixcbiAgXCJcXHUxMTYzXCIsXG4gIFwiXFx1MzE1MlwiLFxuICBcIlxcdTExNjRcIixcbiAgXCJcXHUzMTUzXCIsXG4gIFwiXFx1MTE2NVwiLFxuICBcIlxcdTMxNTRcIixcbiAgXCJcXHUxMTY2XCIsXG4gIFwiXFx1MzE1NVwiLFxuICBcIlxcdTExNjdcIixcbiAgXCJcXHUzMTU2XCIsXG4gIFwiXFx1MTE2OFwiLFxuICBcIlxcdTMxNTdcIixcbiAgXCJcXHUxMTY5XCIsXG4gIFwiXFx1MzE1OFwiLFxuICBcIlxcdTExNkFcIixcbiAgXCJcXHUzMTU5XCIsXG4gIFwiXFx1MTE2QlwiLFxuICBcIlxcdTMxNUFcIixcbiAgXCJcXHUxMTZDXCIsXG4gIFwiXFx1MzE1QlwiLFxuICBcIlxcdTExNkRcIixcbiAgXCJcXHUzMTVDXCIsXG4gIFwiXFx1MTE2RVwiLFxuICBcIlxcdTMxNURcIixcbiAgXCJcXHUxMTZGXCIsXG4gIFwiXFx1MzE1RVwiLFxuICBcIlxcdTExNzBcIixcbiAgXCJcXHUzMTVGXCIsXG4gIFwiXFx1MTE3MVwiLFxuICBcIlxcdTMxNjBcIixcbiAgXCJcXHUxMTcyXCIsXG4gIFwiXFx1MzE2MVwiLFxuICBcIlxcdTExNzNcIixcbiAgXCJcXHUzMTYyXCIsXG4gIFwiXFx1MTE3NFwiLFxuICBcIlxcdTMxNjNcIixcbiAgXCJcXHUxMTc1XCIsXG4gIFwiXFx1MzE2NFwiLFxuICBcIlxcdTExNjBcIixcbiAgXCJcXHUzMTY1XCIsXG4gIFwiXFx1MTExNFwiLFxuICBcIlxcdTMxNjZcIixcbiAgXCJcXHUxMTE1XCIsXG4gIFwiXFx1MzE2N1wiLFxuICBcIlxcdTExQzdcIixcbiAgXCJcXHUzMTY4XCIsXG4gIFwiXFx1MTFDOFwiLFxuICBcIlxcdTMxNjlcIixcbiAgXCJcXHUxMUNDXCIsXG4gIFwiXFx1MzE2QVwiLFxuICBcIlxcdTExQ0VcIixcbiAgXCJcXHUzMTZCXCIsXG4gIFwiXFx1MTFEM1wiLFxuICBcIlxcdTMxNkNcIixcbiAgXCJcXHUxMUQ3XCIsXG4gIFwiXFx1MzE2RFwiLFxuICBcIlxcdTExRDlcIixcbiAgXCJcXHUzMTZFXCIsXG4gIFwiXFx1MTExQ1wiLFxuICBcIlxcdTMxNkZcIixcbiAgXCJcXHUxMUREXCIsXG4gIFwiXFx1MzE3MFwiLFxuICBcIlxcdTExREZcIixcbiAgXCJcXHUzMTcxXCIsXG4gIFwiXFx1MTExRFwiLFxuICBcIlxcdTMxNzJcIixcbiAgXCJcXHUxMTFFXCIsXG4gIFwiXFx1MzE3M1wiLFxuICBcIlxcdTExMjBcIixcbiAgXCJcXHUzMTc0XCIsXG4gIFwiXFx1MTEyMlwiLFxuICBcIlxcdTMxNzVcIixcbiAgXCJcXHUxMTIzXCIsXG4gIFwiXFx1MzE3NlwiLFxuICBcIlxcdTExMjdcIixcbiAgXCJcXHUzMTc3XCIsXG4gIFwiXFx1MTEyOVwiLFxuICBcIlxcdTMxNzhcIixcbiAgXCJcXHUxMTJCXCIsXG4gIFwiXFx1MzE3OVwiLFxuICBcIlxcdTExMkNcIixcbiAgXCJcXHUzMTdBXCIsXG4gIFwiXFx1MTEyRFwiLFxuICBcIlxcdTMxN0JcIixcbiAgXCJcXHUxMTJFXCIsXG4gIFwiXFx1MzE3Q1wiLFxuICBcIlxcdTExMkZcIixcbiAgXCJcXHUzMTdEXCIsXG4gIFwiXFx1MTEzMlwiLFxuICBcIlxcdTMxN0VcIixcbiAgXCJcXHUxMTM2XCIsXG4gIFwiXFx1MzE3RlwiLFxuICBcIlxcdTExNDBcIixcbiAgXCJcXHUzMTgwXCIsXG4gIFwiXFx1MTE0N1wiLFxuICBcIlxcdTMxODFcIixcbiAgXCJcXHUxMTRDXCIsXG4gIFwiXFx1MzE4MlwiLFxuICBcIlxcdTExRjFcIixcbiAgXCJcXHUzMTgzXCIsXG4gIFwiXFx1MTFGMlwiLFxuICBcIlxcdTMxODRcIixcbiAgXCJcXHUxMTU3XCIsXG4gIFwiXFx1MzE4NVwiLFxuICBcIlxcdTExNThcIixcbiAgXCJcXHUzMTg2XCIsXG4gIFwiXFx1MTE1OVwiLFxuICBcIlxcdTMxODdcIixcbiAgXCJcXHUxMTg0XCIsXG4gIFwiXFx1MzE4OFwiLFxuICBcIlxcdTExODVcIixcbiAgXCJcXHUzMTg5XCIsXG4gIFwiXFx1MTE4OFwiLFxuICBcIlxcdTMxOEFcIixcbiAgXCJcXHUxMTkxXCIsXG4gIFwiXFx1MzE4QlwiLFxuICBcIlxcdTExOTJcIixcbiAgXCJcXHUzMThDXCIsXG4gIFwiXFx1MTE5NFwiLFxuICBcIlxcdTMxOERcIixcbiAgXCJcXHUxMTlFXCIsXG4gIFwiXFx1MzE4RVwiLFxuICBcIlxcdTExQTFcIixcbiAgXCJcXHUzMjAwXCIsXG4gIFwiXFx1MDAyOFxcdTExMDBcXHUwMDI5XCIsXG4gIFwiXFx1MzIwMVwiLFxuICBcIlxcdTAwMjhcXHUxMTAyXFx1MDAyOVwiLFxuICBcIlxcdTMyMDJcIixcbiAgXCJcXHUwMDI4XFx1MTEwM1xcdTAwMjlcIixcbiAgXCJcXHUzMjAzXCIsXG4gIFwiXFx1MDAyOFxcdTExMDVcXHUwMDI5XCIsXG4gIFwiXFx1MzIwNFwiLFxuICBcIlxcdTAwMjhcXHUxMTA2XFx1MDAyOVwiLFxuICBcIlxcdTMyMDVcIixcbiAgXCJcXHUwMDI4XFx1MTEwN1xcdTAwMjlcIixcbiAgXCJcXHUzMjA2XCIsXG4gIFwiXFx1MDAyOFxcdTExMDlcXHUwMDI5XCIsXG4gIFwiXFx1MzIwN1wiLFxuICBcIlxcdTAwMjhcXHUxMTBCXFx1MDAyOVwiLFxuICBcIlxcdTMyMDhcIixcbiAgXCJcXHUwMDI4XFx1MTEwQ1xcdTAwMjlcIixcbiAgXCJcXHUzMjA5XCIsXG4gIFwiXFx1MDAyOFxcdTExMEVcXHUwMDI5XCIsXG4gIFwiXFx1MzIwQVwiLFxuICBcIlxcdTAwMjhcXHUxMTBGXFx1MDAyOVwiLFxuICBcIlxcdTMyMEJcIixcbiAgXCJcXHUwMDI4XFx1MTExMFxcdTAwMjlcIixcbiAgXCJcXHUzMjBDXCIsXG4gIFwiXFx1MDAyOFxcdTExMTFcXHUwMDI5XCIsXG4gIFwiXFx1MzIwRFwiLFxuICBcIlxcdTAwMjhcXHUxMTEyXFx1MDAyOVwiLFxuICBcIlxcdTMyMEVcIixcbiAgXCJcXHUwMDI4XFx1MTEwMFxcdTExNjFcXHUwMDI5XCIsXG4gIFwiXFx1MzIwRlwiLFxuICBcIlxcdTAwMjhcXHUxMTAyXFx1MTE2MVxcdTAwMjlcIixcbiAgXCJcXHUzMjEwXCIsXG4gIFwiXFx1MDAyOFxcdTExMDNcXHUxMTYxXFx1MDAyOVwiLFxuICBcIlxcdTMyMTFcIixcbiAgXCJcXHUwMDI4XFx1MTEwNVxcdTExNjFcXHUwMDI5XCIsXG4gIFwiXFx1MzIxMlwiLFxuICBcIlxcdTAwMjhcXHUxMTA2XFx1MTE2MVxcdTAwMjlcIixcbiAgXCJcXHUzMjEzXCIsXG4gIFwiXFx1MDAyOFxcdTExMDdcXHUxMTYxXFx1MDAyOVwiLFxuICBcIlxcdTMyMTRcIixcbiAgXCJcXHUwMDI4XFx1MTEwOVxcdTExNjFcXHUwMDI5XCIsXG4gIFwiXFx1MzIxNVwiLFxuICBcIlxcdTAwMjhcXHUxMTBCXFx1MTE2MVxcdTAwMjlcIixcbiAgXCJcXHUzMjE2XCIsXG4gIFwiXFx1MDAyOFxcdTExMENcXHUxMTYxXFx1MDAyOVwiLFxuICBcIlxcdTMyMTdcIixcbiAgXCJcXHUwMDI4XFx1MTEwRVxcdTExNjFcXHUwMDI5XCIsXG4gIFwiXFx1MzIxOFwiLFxuICBcIlxcdTAwMjhcXHUxMTBGXFx1MTE2MVxcdTAwMjlcIixcbiAgXCJcXHUzMjE5XCIsXG4gIFwiXFx1MDAyOFxcdTExMTBcXHUxMTYxXFx1MDAyOVwiLFxuICBcIlxcdTMyMUFcIixcbiAgXCJcXHUwMDI4XFx1MTExMVxcdTExNjFcXHUwMDI5XCIsXG4gIFwiXFx1MzIxQlwiLFxuICBcIlxcdTAwMjhcXHUxMTEyXFx1MTE2MVxcdTAwMjlcIixcbiAgXCJcXHUzMjFDXCIsXG4gIFwiXFx1MDAyOFxcdTExMENcXHUxMTZFXFx1MDAyOVwiLFxuICBcIlxcdTMyMURcIixcbiAgXCJcXHUwMDI4XFx1MTEwQlxcdTExNjlcXHUxMTBDXFx1MTE2NVxcdTExQUJcXHUwMDI5XCIsXG4gIFwiXFx1MzIxRVwiLFxuICBcIlxcdTAwMjhcXHUxMTBCXFx1MTE2OVxcdTExMTJcXHUxMTZFXFx1MDAyOVwiLFxuICBcIlxcdTMyMjBcIixcbiAgXCJcXHUwMDI4XFx1NEUwMFxcdTAwMjlcIixcbiAgXCJcXHUzMjIxXCIsXG4gIFwiXFx1MDAyOFxcdTRFOENcXHUwMDI5XCIsXG4gIFwiXFx1MzIyMlwiLFxuICBcIlxcdTAwMjhcXHU0RTA5XFx1MDAyOVwiLFxuICBcIlxcdTMyMjNcIixcbiAgXCJcXHUwMDI4XFx1NTZEQlxcdTAwMjlcIixcbiAgXCJcXHUzMjI0XCIsXG4gIFwiXFx1MDAyOFxcdTRFOTRcXHUwMDI5XCIsXG4gIFwiXFx1MzIyNVwiLFxuICBcIlxcdTAwMjhcXHU1MTZEXFx1MDAyOVwiLFxuICBcIlxcdTMyMjZcIixcbiAgXCJcXHUwMDI4XFx1NEUwM1xcdTAwMjlcIixcbiAgXCJcXHUzMjI3XCIsXG4gIFwiXFx1MDAyOFxcdTUxNkJcXHUwMDI5XCIsXG4gIFwiXFx1MzIyOFwiLFxuICBcIlxcdTAwMjhcXHU0RTVEXFx1MDAyOVwiLFxuICBcIlxcdTMyMjlcIixcbiAgXCJcXHUwMDI4XFx1NTM0MVxcdTAwMjlcIixcbiAgXCJcXHUzMjJBXCIsXG4gIFwiXFx1MDAyOFxcdTY3MDhcXHUwMDI5XCIsXG4gIFwiXFx1MzIyQlwiLFxuICBcIlxcdTAwMjhcXHU3MDZCXFx1MDAyOVwiLFxuICBcIlxcdTMyMkNcIixcbiAgXCJcXHUwMDI4XFx1NkMzNFxcdTAwMjlcIixcbiAgXCJcXHUzMjJEXCIsXG4gIFwiXFx1MDAyOFxcdTY3MjhcXHUwMDI5XCIsXG4gIFwiXFx1MzIyRVwiLFxuICBcIlxcdTAwMjhcXHU5MUQxXFx1MDAyOVwiLFxuICBcIlxcdTMyMkZcIixcbiAgXCJcXHUwMDI4XFx1NTcxRlxcdTAwMjlcIixcbiAgXCJcXHUzMjMwXCIsXG4gIFwiXFx1MDAyOFxcdTY1RTVcXHUwMDI5XCIsXG4gIFwiXFx1MzIzMVwiLFxuICBcIlxcdTAwMjhcXHU2ODJBXFx1MDAyOVwiLFxuICBcIlxcdTMyMzJcIixcbiAgXCJcXHUwMDI4XFx1NjcwOVxcdTAwMjlcIixcbiAgXCJcXHUzMjMzXCIsXG4gIFwiXFx1MDAyOFxcdTc5M0VcXHUwMDI5XCIsXG4gIFwiXFx1MzIzNFwiLFxuICBcIlxcdTAwMjhcXHU1NDBEXFx1MDAyOVwiLFxuICBcIlxcdTMyMzVcIixcbiAgXCJcXHUwMDI4XFx1NzI3OVxcdTAwMjlcIixcbiAgXCJcXHUzMjM2XCIsXG4gIFwiXFx1MDAyOFxcdThDQTFcXHUwMDI5XCIsXG4gIFwiXFx1MzIzN1wiLFxuICBcIlxcdTAwMjhcXHU3OTVEXFx1MDAyOVwiLFxuICBcIlxcdTMyMzhcIixcbiAgXCJcXHUwMDI4XFx1NTJCNFxcdTAwMjlcIixcbiAgXCJcXHUzMjM5XCIsXG4gIFwiXFx1MDAyOFxcdTRFRTNcXHUwMDI5XCIsXG4gIFwiXFx1MzIzQVwiLFxuICBcIlxcdTAwMjhcXHU1NDdDXFx1MDAyOVwiLFxuICBcIlxcdTMyM0JcIixcbiAgXCJcXHUwMDI4XFx1NUI2NlxcdTAwMjlcIixcbiAgXCJcXHUzMjNDXCIsXG4gIFwiXFx1MDAyOFxcdTc2RTNcXHUwMDI5XCIsXG4gIFwiXFx1MzIzRFwiLFxuICBcIlxcdTAwMjhcXHU0RjAxXFx1MDAyOVwiLFxuICBcIlxcdTMyM0VcIixcbiAgXCJcXHUwMDI4XFx1OENDN1xcdTAwMjlcIixcbiAgXCJcXHUzMjNGXCIsXG4gIFwiXFx1MDAyOFxcdTUzNTRcXHUwMDI5XCIsXG4gIFwiXFx1MzI0MFwiLFxuICBcIlxcdTAwMjhcXHU3OTZEXFx1MDAyOVwiLFxuICBcIlxcdTMyNDFcIixcbiAgXCJcXHUwMDI4XFx1NEYxMVxcdTAwMjlcIixcbiAgXCJcXHUzMjQyXCIsXG4gIFwiXFx1MDAyOFxcdTgxRUFcXHUwMDI5XCIsXG4gIFwiXFx1MzI0M1wiLFxuICBcIlxcdTAwMjhcXHU4MUYzXFx1MDAyOVwiLFxuICBcIlxcdTMyQzBcIixcbiAgXCJcXHUwMDMxXFx1NjcwOFwiLFxuICBcIlxcdTMyQzFcIixcbiAgXCJcXHUwMDMyXFx1NjcwOFwiLFxuICBcIlxcdTMyQzJcIixcbiAgXCJcXHUwMDMzXFx1NjcwOFwiLFxuICBcIlxcdTMyQzNcIixcbiAgXCJcXHUwMDM0XFx1NjcwOFwiLFxuICBcIlxcdTMyQzRcIixcbiAgXCJcXHUwMDM1XFx1NjcwOFwiLFxuICBcIlxcdTMyQzVcIixcbiAgXCJcXHUwMDM2XFx1NjcwOFwiLFxuICBcIlxcdTMyQzZcIixcbiAgXCJcXHUwMDM3XFx1NjcwOFwiLFxuICBcIlxcdTMyQzdcIixcbiAgXCJcXHUwMDM4XFx1NjcwOFwiLFxuICBcIlxcdTMyQzhcIixcbiAgXCJcXHUwMDM5XFx1NjcwOFwiLFxuICBcIlxcdTMyQzlcIixcbiAgXCJcXHUwMDMxXFx1MDAzMFxcdTY3MDhcIixcbiAgXCJcXHUzMkNBXCIsXG4gIFwiXFx1MDAzMVxcdTAwMzFcXHU2NzA4XCIsXG4gIFwiXFx1MzJDQlwiLFxuICBcIlxcdTAwMzFcXHUwMDMyXFx1NjcwOFwiLFxuICBcIlxcdTMzNThcIixcbiAgXCJcXHUwMDMwXFx1NzBCOVwiLFxuICBcIlxcdTMzNTlcIixcbiAgXCJcXHUwMDMxXFx1NzBCOVwiLFxuICBcIlxcdTMzNUFcIixcbiAgXCJcXHUwMDMyXFx1NzBCOVwiLFxuICBcIlxcdTMzNUJcIixcbiAgXCJcXHUwMDMzXFx1NzBCOVwiLFxuICBcIlxcdTMzNUNcIixcbiAgXCJcXHUwMDM0XFx1NzBCOVwiLFxuICBcIlxcdTMzNURcIixcbiAgXCJcXHUwMDM1XFx1NzBCOVwiLFxuICBcIlxcdTMzNUVcIixcbiAgXCJcXHUwMDM2XFx1NzBCOVwiLFxuICBcIlxcdTMzNUZcIixcbiAgXCJcXHUwMDM3XFx1NzBCOVwiLFxuICBcIlxcdTMzNjBcIixcbiAgXCJcXHUwMDM4XFx1NzBCOVwiLFxuICBcIlxcdTMzNjFcIixcbiAgXCJcXHUwMDM5XFx1NzBCOVwiLFxuICBcIlxcdTMzNjJcIixcbiAgXCJcXHUwMDMxXFx1MDAzMFxcdTcwQjlcIixcbiAgXCJcXHUzMzYzXCIsXG4gIFwiXFx1MDAzMVxcdTAwMzFcXHU3MEI5XCIsXG4gIFwiXFx1MzM2NFwiLFxuICBcIlxcdTAwMzFcXHUwMDMyXFx1NzBCOVwiLFxuICBcIlxcdTMzNjVcIixcbiAgXCJcXHUwMDMxXFx1MDAzM1xcdTcwQjlcIixcbiAgXCJcXHUzMzY2XCIsXG4gIFwiXFx1MDAzMVxcdTAwMzRcXHU3MEI5XCIsXG4gIFwiXFx1MzM2N1wiLFxuICBcIlxcdTAwMzFcXHUwMDM1XFx1NzBCOVwiLFxuICBcIlxcdTMzNjhcIixcbiAgXCJcXHUwMDMxXFx1MDAzNlxcdTcwQjlcIixcbiAgXCJcXHUzMzY5XCIsXG4gIFwiXFx1MDAzMVxcdTAwMzdcXHU3MEI5XCIsXG4gIFwiXFx1MzM2QVwiLFxuICBcIlxcdTAwMzFcXHUwMDM4XFx1NzBCOVwiLFxuICBcIlxcdTMzNkJcIixcbiAgXCJcXHUwMDMxXFx1MDAzOVxcdTcwQjlcIixcbiAgXCJcXHUzMzZDXCIsXG4gIFwiXFx1MDAzMlxcdTAwMzBcXHU3MEI5XCIsXG4gIFwiXFx1MzM2RFwiLFxuICBcIlxcdTAwMzJcXHUwMDMxXFx1NzBCOVwiLFxuICBcIlxcdTMzNkVcIixcbiAgXCJcXHUwMDMyXFx1MDAzMlxcdTcwQjlcIixcbiAgXCJcXHUzMzZGXCIsXG4gIFwiXFx1MDAzMlxcdTAwMzNcXHU3MEI5XCIsXG4gIFwiXFx1MzM3MFwiLFxuICBcIlxcdTAwMzJcXHUwMDM0XFx1NzBCOVwiLFxuICBcIlxcdTMzRTBcIixcbiAgXCJcXHUwMDMxXFx1NjVFNVwiLFxuICBcIlxcdTMzRTFcIixcbiAgXCJcXHUwMDMyXFx1NjVFNVwiLFxuICBcIlxcdTMzRTJcIixcbiAgXCJcXHUwMDMzXFx1NjVFNVwiLFxuICBcIlxcdTMzRTNcIixcbiAgXCJcXHUwMDM0XFx1NjVFNVwiLFxuICBcIlxcdTMzRTRcIixcbiAgXCJcXHUwMDM1XFx1NjVFNVwiLFxuICBcIlxcdTMzRTVcIixcbiAgXCJcXHUwMDM2XFx1NjVFNVwiLFxuICBcIlxcdTMzRTZcIixcbiAgXCJcXHUwMDM3XFx1NjVFNVwiLFxuICBcIlxcdTMzRTdcIixcbiAgXCJcXHUwMDM4XFx1NjVFNVwiLFxuICBcIlxcdTMzRThcIixcbiAgXCJcXHUwMDM5XFx1NjVFNVwiLFxuICBcIlxcdTMzRTlcIixcbiAgXCJcXHUwMDMxXFx1MDAzMFxcdTY1RTVcIixcbiAgXCJcXHUzM0VBXCIsXG4gIFwiXFx1MDAzMVxcdTAwMzFcXHU2NUU1XCIsXG4gIFwiXFx1MzNFQlwiLFxuICBcIlxcdTAwMzFcXHUwMDMyXFx1NjVFNVwiLFxuICBcIlxcdTMzRUNcIixcbiAgXCJcXHUwMDMxXFx1MDAzM1xcdTY1RTVcIixcbiAgXCJcXHUzM0VEXCIsXG4gIFwiXFx1MDAzMVxcdTAwMzRcXHU2NUU1XCIsXG4gIFwiXFx1MzNFRVwiLFxuICBcIlxcdTAwMzFcXHUwMDM1XFx1NjVFNVwiLFxuICBcIlxcdTMzRUZcIixcbiAgXCJcXHUwMDMxXFx1MDAzNlxcdTY1RTVcIixcbiAgXCJcXHUzM0YwXCIsXG4gIFwiXFx1MDAzMVxcdTAwMzdcXHU2NUU1XCIsXG4gIFwiXFx1MzNGMVwiLFxuICBcIlxcdTAwMzFcXHUwMDM4XFx1NjVFNVwiLFxuICBcIlxcdTMzRjJcIixcbiAgXCJcXHUwMDMxXFx1MDAzOVxcdTY1RTVcIixcbiAgXCJcXHUzM0YzXCIsXG4gIFwiXFx1MDAzMlxcdTAwMzBcXHU2NUU1XCIsXG4gIFwiXFx1MzNGNFwiLFxuICBcIlxcdTAwMzJcXHUwMDMxXFx1NjVFNVwiLFxuICBcIlxcdTMzRjVcIixcbiAgXCJcXHUwMDMyXFx1MDAzMlxcdTY1RTVcIixcbiAgXCJcXHUzM0Y2XCIsXG4gIFwiXFx1MDAzMlxcdTAwMzNcXHU2NUU1XCIsXG4gIFwiXFx1MzNGN1wiLFxuICBcIlxcdTAwMzJcXHUwMDM0XFx1NjVFNVwiLFxuICBcIlxcdTMzRjhcIixcbiAgXCJcXHUwMDMyXFx1MDAzNVxcdTY1RTVcIixcbiAgXCJcXHUzM0Y5XCIsXG4gIFwiXFx1MDAzMlxcdTAwMzZcXHU2NUU1XCIsXG4gIFwiXFx1MzNGQVwiLFxuICBcIlxcdTAwMzJcXHUwMDM3XFx1NjVFNVwiLFxuICBcIlxcdTMzRkJcIixcbiAgXCJcXHUwMDMyXFx1MDAzOFxcdTY1RTVcIixcbiAgXCJcXHUzM0ZDXCIsXG4gIFwiXFx1MDAzMlxcdTAwMzlcXHU2NUU1XCIsXG4gIFwiXFx1MzNGRFwiLFxuICBcIlxcdTAwMzNcXHUwMDMwXFx1NjVFNVwiLFxuICBcIlxcdTMzRkVcIixcbiAgXCJcXHUwMDMzXFx1MDAzMVxcdTY1RTVcIixcbiAgXCJcXHVGQjAwXCIsXG4gIFwiXFx1MDA2NlxcdTAwNjZcIixcbiAgXCJcXHVGQjAxXCIsXG4gIFwiXFx1MDA2NlxcdTAwNjlcIixcbiAgXCJcXHVGQjAyXCIsXG4gIFwiXFx1MDA2NlxcdTAwNkNcIixcbiAgXCJcXHVGQjAzXCIsXG4gIFwiXFx1MDA2NlxcdTAwNjZcXHUwMDY5XCIsXG4gIFwiXFx1RkIwNFwiLFxuICBcIlxcdTAwNjZcXHUwMDY2XFx1MDA2Q1wiLFxuICBcIlxcdUZCMDVcIixcbiAgXCJcXHUwMTdGXFx1MDA3NFwiLFxuICBcIlxcdUZCMDZcIixcbiAgXCJcXHUwMDczXFx1MDA3NFwiLFxuICBcIlxcdUZCMTNcIixcbiAgXCJcXHUwNTc0XFx1MDU3NlwiLFxuICBcIlxcdUZCMTRcIixcbiAgXCJcXHUwNTc0XFx1MDU2NVwiLFxuICBcIlxcdUZCMTVcIixcbiAgXCJcXHUwNTc0XFx1MDU2QlwiLFxuICBcIlxcdUZCMTZcIixcbiAgXCJcXHUwNTdFXFx1MDU3NlwiLFxuICBcIlxcdUZCMTdcIixcbiAgXCJcXHUwNTc0XFx1MDU2RFwiLFxuICBcIlxcdUZCNEZcIixcbiAgXCJcXHUwNUQwXFx1MDVEQ1wiLFxuICBcIlxcdUZCNTBcIixcbiAgXCJcXHUwNjcxXCIsXG4gIFwiXFx1RkI1MVwiLFxuICBcIlxcdTA2NzFcIixcbiAgXCJcXHVGQjUyXCIsXG4gIFwiXFx1MDY3QlwiLFxuICBcIlxcdUZCNTNcIixcbiAgXCJcXHUwNjdCXCIsXG4gIFwiXFx1RkI1NFwiLFxuICBcIlxcdTA2N0JcIixcbiAgXCJcXHVGQjU1XCIsXG4gIFwiXFx1MDY3QlwiLFxuICBcIlxcdUZCNTZcIixcbiAgXCJcXHUwNjdFXCIsXG4gIFwiXFx1RkI1N1wiLFxuICBcIlxcdTA2N0VcIixcbiAgXCJcXHVGQjU4XCIsXG4gIFwiXFx1MDY3RVwiLFxuICBcIlxcdUZCNTlcIixcbiAgXCJcXHUwNjdFXCIsXG4gIFwiXFx1RkI1QVwiLFxuICBcIlxcdTA2ODBcIixcbiAgXCJcXHVGQjVCXCIsXG4gIFwiXFx1MDY4MFwiLFxuICBcIlxcdUZCNUNcIixcbiAgXCJcXHUwNjgwXCIsXG4gIFwiXFx1RkI1RFwiLFxuICBcIlxcdTA2ODBcIixcbiAgXCJcXHVGQjVFXCIsXG4gIFwiXFx1MDY3QVwiLFxuICBcIlxcdUZCNUZcIixcbiAgXCJcXHUwNjdBXCIsXG4gIFwiXFx1RkI2MFwiLFxuICBcIlxcdTA2N0FcIixcbiAgXCJcXHVGQjYxXCIsXG4gIFwiXFx1MDY3QVwiLFxuICBcIlxcdUZCNjJcIixcbiAgXCJcXHUwNjdGXCIsXG4gIFwiXFx1RkI2M1wiLFxuICBcIlxcdTA2N0ZcIixcbiAgXCJcXHVGQjY0XCIsXG4gIFwiXFx1MDY3RlwiLFxuICBcIlxcdUZCNjVcIixcbiAgXCJcXHUwNjdGXCIsXG4gIFwiXFx1RkI2NlwiLFxuICBcIlxcdTA2NzlcIixcbiAgXCJcXHVGQjY3XCIsXG4gIFwiXFx1MDY3OVwiLFxuICBcIlxcdUZCNjhcIixcbiAgXCJcXHUwNjc5XCIsXG4gIFwiXFx1RkI2OVwiLFxuICBcIlxcdTA2NzlcIixcbiAgXCJcXHVGQjZBXCIsXG4gIFwiXFx1MDZBNFwiLFxuICBcIlxcdUZCNkJcIixcbiAgXCJcXHUwNkE0XCIsXG4gIFwiXFx1RkI2Q1wiLFxuICBcIlxcdTA2QTRcIixcbiAgXCJcXHVGQjZEXCIsXG4gIFwiXFx1MDZBNFwiLFxuICBcIlxcdUZCNkVcIixcbiAgXCJcXHUwNkE2XCIsXG4gIFwiXFx1RkI2RlwiLFxuICBcIlxcdTA2QTZcIixcbiAgXCJcXHVGQjcwXCIsXG4gIFwiXFx1MDZBNlwiLFxuICBcIlxcdUZCNzFcIixcbiAgXCJcXHUwNkE2XCIsXG4gIFwiXFx1RkI3MlwiLFxuICBcIlxcdTA2ODRcIixcbiAgXCJcXHVGQjczXCIsXG4gIFwiXFx1MDY4NFwiLFxuICBcIlxcdUZCNzRcIixcbiAgXCJcXHUwNjg0XCIsXG4gIFwiXFx1RkI3NVwiLFxuICBcIlxcdTA2ODRcIixcbiAgXCJcXHVGQjc2XCIsXG4gIFwiXFx1MDY4M1wiLFxuICBcIlxcdUZCNzdcIixcbiAgXCJcXHUwNjgzXCIsXG4gIFwiXFx1RkI3OFwiLFxuICBcIlxcdTA2ODNcIixcbiAgXCJcXHVGQjc5XCIsXG4gIFwiXFx1MDY4M1wiLFxuICBcIlxcdUZCN0FcIixcbiAgXCJcXHUwNjg2XCIsXG4gIFwiXFx1RkI3QlwiLFxuICBcIlxcdTA2ODZcIixcbiAgXCJcXHVGQjdDXCIsXG4gIFwiXFx1MDY4NlwiLFxuICBcIlxcdUZCN0RcIixcbiAgXCJcXHUwNjg2XCIsXG4gIFwiXFx1RkI3RVwiLFxuICBcIlxcdTA2ODdcIixcbiAgXCJcXHVGQjdGXCIsXG4gIFwiXFx1MDY4N1wiLFxuICBcIlxcdUZCODBcIixcbiAgXCJcXHUwNjg3XCIsXG4gIFwiXFx1RkI4MVwiLFxuICBcIlxcdTA2ODdcIixcbiAgXCJcXHVGQjgyXCIsXG4gIFwiXFx1MDY4RFwiLFxuICBcIlxcdUZCODNcIixcbiAgXCJcXHUwNjhEXCIsXG4gIFwiXFx1RkI4NFwiLFxuICBcIlxcdTA2OENcIixcbiAgXCJcXHVGQjg1XCIsXG4gIFwiXFx1MDY4Q1wiLFxuICBcIlxcdUZCODZcIixcbiAgXCJcXHUwNjhFXCIsXG4gIFwiXFx1RkI4N1wiLFxuICBcIlxcdTA2OEVcIixcbiAgXCJcXHVGQjg4XCIsXG4gIFwiXFx1MDY4OFwiLFxuICBcIlxcdUZCODlcIixcbiAgXCJcXHUwNjg4XCIsXG4gIFwiXFx1RkI4QVwiLFxuICBcIlxcdTA2OThcIixcbiAgXCJcXHVGQjhCXCIsXG4gIFwiXFx1MDY5OFwiLFxuICBcIlxcdUZCOENcIixcbiAgXCJcXHUwNjkxXCIsXG4gIFwiXFx1RkI4RFwiLFxuICBcIlxcdTA2OTFcIixcbiAgXCJcXHVGQjhFXCIsXG4gIFwiXFx1MDZBOVwiLFxuICBcIlxcdUZCOEZcIixcbiAgXCJcXHUwNkE5XCIsXG4gIFwiXFx1RkI5MFwiLFxuICBcIlxcdTA2QTlcIixcbiAgXCJcXHVGQjkxXCIsXG4gIFwiXFx1MDZBOVwiLFxuICBcIlxcdUZCOTJcIixcbiAgXCJcXHUwNkFGXCIsXG4gIFwiXFx1RkI5M1wiLFxuICBcIlxcdTA2QUZcIixcbiAgXCJcXHVGQjk0XCIsXG4gIFwiXFx1MDZBRlwiLFxuICBcIlxcdUZCOTVcIixcbiAgXCJcXHUwNkFGXCIsXG4gIFwiXFx1RkI5NlwiLFxuICBcIlxcdTA2QjNcIixcbiAgXCJcXHVGQjk3XCIsXG4gIFwiXFx1MDZCM1wiLFxuICBcIlxcdUZCOThcIixcbiAgXCJcXHUwNkIzXCIsXG4gIFwiXFx1RkI5OVwiLFxuICBcIlxcdTA2QjNcIixcbiAgXCJcXHVGQjlBXCIsXG4gIFwiXFx1MDZCMVwiLFxuICBcIlxcdUZCOUJcIixcbiAgXCJcXHUwNkIxXCIsXG4gIFwiXFx1RkI5Q1wiLFxuICBcIlxcdTA2QjFcIixcbiAgXCJcXHVGQjlEXCIsXG4gIFwiXFx1MDZCMVwiLFxuICBcIlxcdUZCOUVcIixcbiAgXCJcXHUwNkJBXCIsXG4gIFwiXFx1RkI5RlwiLFxuICBcIlxcdTA2QkFcIixcbiAgXCJcXHVGQkEwXCIsXG4gIFwiXFx1MDZCQlwiLFxuICBcIlxcdUZCQTFcIixcbiAgXCJcXHUwNkJCXCIsXG4gIFwiXFx1RkJBMlwiLFxuICBcIlxcdTA2QkJcIixcbiAgXCJcXHVGQkEzXCIsXG4gIFwiXFx1MDZCQlwiLFxuICBcIlxcdUZCQTRcIixcbiAgXCJcXHUwNkMwXCIsXG4gIFwiXFx1RkJBNVwiLFxuICBcIlxcdTA2QzBcIixcbiAgXCJcXHVGQkE2XCIsXG4gIFwiXFx1MDZDMVwiLFxuICBcIlxcdUZCQTdcIixcbiAgXCJcXHUwNkMxXCIsXG4gIFwiXFx1RkJBOFwiLFxuICBcIlxcdTA2QzFcIixcbiAgXCJcXHVGQkE5XCIsXG4gIFwiXFx1MDZDMVwiLFxuICBcIlxcdUZCQUFcIixcbiAgXCJcXHUwNkJFXCIsXG4gIFwiXFx1RkJBQlwiLFxuICBcIlxcdTA2QkVcIixcbiAgXCJcXHVGQkFDXCIsXG4gIFwiXFx1MDZCRVwiLFxuICBcIlxcdUZCQURcIixcbiAgXCJcXHUwNkJFXCIsXG4gIFwiXFx1RkJBRVwiLFxuICBcIlxcdTA2RDJcIixcbiAgXCJcXHVGQkFGXCIsXG4gIFwiXFx1MDZEMlwiLFxuICBcIlxcdUZCQjBcIixcbiAgXCJcXHUwNkQzXCIsXG4gIFwiXFx1RkJCMVwiLFxuICBcIlxcdTA2RDNcIixcbiAgXCJcXHVGQkQzXCIsXG4gIFwiXFx1MDZBRFwiLFxuICBcIlxcdUZCRDRcIixcbiAgXCJcXHUwNkFEXCIsXG4gIFwiXFx1RkJENVwiLFxuICBcIlxcdTA2QURcIixcbiAgXCJcXHVGQkQ2XCIsXG4gIFwiXFx1MDZBRFwiLFxuICBcIlxcdUZCRDdcIixcbiAgXCJcXHUwNkM3XCIsXG4gIFwiXFx1RkJEOFwiLFxuICBcIlxcdTA2QzdcIixcbiAgXCJcXHVGQkQ5XCIsXG4gIFwiXFx1MDZDNlwiLFxuICBcIlxcdUZCREFcIixcbiAgXCJcXHUwNkM2XCIsXG4gIFwiXFx1RkJEQlwiLFxuICBcIlxcdTA2QzhcIixcbiAgXCJcXHVGQkRDXCIsXG4gIFwiXFx1MDZDOFwiLFxuICBcIlxcdUZCRERcIixcbiAgXCJcXHUwNjc3XCIsXG4gIFwiXFx1RkJERVwiLFxuICBcIlxcdTA2Q0JcIixcbiAgXCJcXHVGQkRGXCIsXG4gIFwiXFx1MDZDQlwiLFxuICBcIlxcdUZCRTBcIixcbiAgXCJcXHUwNkM1XCIsXG4gIFwiXFx1RkJFMVwiLFxuICBcIlxcdTA2QzVcIixcbiAgXCJcXHVGQkUyXCIsXG4gIFwiXFx1MDZDOVwiLFxuICBcIlxcdUZCRTNcIixcbiAgXCJcXHUwNkM5XCIsXG4gIFwiXFx1RkJFNFwiLFxuICBcIlxcdTA2RDBcIixcbiAgXCJcXHVGQkU1XCIsXG4gIFwiXFx1MDZEMFwiLFxuICBcIlxcdUZCRTZcIixcbiAgXCJcXHUwNkQwXCIsXG4gIFwiXFx1RkJFN1wiLFxuICBcIlxcdTA2RDBcIixcbiAgXCJcXHVGQkU4XCIsXG4gIFwiXFx1MDY0OVwiLFxuICBcIlxcdUZCRTlcIixcbiAgXCJcXHUwNjQ5XCIsXG4gIFwiXFx1RkJFQVwiLFxuICBcIlxcdTA2MjZcXHUwNjI3XCIsXG4gIFwiXFx1RkJFQlwiLFxuICBcIlxcdTA2MjZcXHUwNjI3XCIsXG4gIFwiXFx1RkJFQ1wiLFxuICBcIlxcdTA2MjZcXHUwNkQ1XCIsXG4gIFwiXFx1RkJFRFwiLFxuICBcIlxcdTA2MjZcXHUwNkQ1XCIsXG4gIFwiXFx1RkJFRVwiLFxuICBcIlxcdTA2MjZcXHUwNjQ4XCIsXG4gIFwiXFx1RkJFRlwiLFxuICBcIlxcdTA2MjZcXHUwNjQ4XCIsXG4gIFwiXFx1RkJGMFwiLFxuICBcIlxcdTA2MjZcXHUwNkM3XCIsXG4gIFwiXFx1RkJGMVwiLFxuICBcIlxcdTA2MjZcXHUwNkM3XCIsXG4gIFwiXFx1RkJGMlwiLFxuICBcIlxcdTA2MjZcXHUwNkM2XCIsXG4gIFwiXFx1RkJGM1wiLFxuICBcIlxcdTA2MjZcXHUwNkM2XCIsXG4gIFwiXFx1RkJGNFwiLFxuICBcIlxcdTA2MjZcXHUwNkM4XCIsXG4gIFwiXFx1RkJGNVwiLFxuICBcIlxcdTA2MjZcXHUwNkM4XCIsXG4gIFwiXFx1RkJGNlwiLFxuICBcIlxcdTA2MjZcXHUwNkQwXCIsXG4gIFwiXFx1RkJGN1wiLFxuICBcIlxcdTA2MjZcXHUwNkQwXCIsXG4gIFwiXFx1RkJGOFwiLFxuICBcIlxcdTA2MjZcXHUwNkQwXCIsXG4gIFwiXFx1RkJGOVwiLFxuICBcIlxcdTA2MjZcXHUwNjQ5XCIsXG4gIFwiXFx1RkJGQVwiLFxuICBcIlxcdTA2MjZcXHUwNjQ5XCIsXG4gIFwiXFx1RkJGQlwiLFxuICBcIlxcdTA2MjZcXHUwNjQ5XCIsXG4gIFwiXFx1RkJGQ1wiLFxuICBcIlxcdTA2Q0NcIixcbiAgXCJcXHVGQkZEXCIsXG4gIFwiXFx1MDZDQ1wiLFxuICBcIlxcdUZCRkVcIixcbiAgXCJcXHUwNkNDXCIsXG4gIFwiXFx1RkJGRlwiLFxuICBcIlxcdTA2Q0NcIixcbiAgXCJcXHVGQzAwXCIsXG4gIFwiXFx1MDYyNlxcdTA2MkNcIixcbiAgXCJcXHVGQzAxXCIsXG4gIFwiXFx1MDYyNlxcdTA2MkRcIixcbiAgXCJcXHVGQzAyXCIsXG4gIFwiXFx1MDYyNlxcdTA2NDVcIixcbiAgXCJcXHVGQzAzXCIsXG4gIFwiXFx1MDYyNlxcdTA2NDlcIixcbiAgXCJcXHVGQzA0XCIsXG4gIFwiXFx1MDYyNlxcdTA2NEFcIixcbiAgXCJcXHVGQzA1XCIsXG4gIFwiXFx1MDYyOFxcdTA2MkNcIixcbiAgXCJcXHVGQzA2XCIsXG4gIFwiXFx1MDYyOFxcdTA2MkRcIixcbiAgXCJcXHVGQzA3XCIsXG4gIFwiXFx1MDYyOFxcdTA2MkVcIixcbiAgXCJcXHVGQzA4XCIsXG4gIFwiXFx1MDYyOFxcdTA2NDVcIixcbiAgXCJcXHVGQzA5XCIsXG4gIFwiXFx1MDYyOFxcdTA2NDlcIixcbiAgXCJcXHVGQzBBXCIsXG4gIFwiXFx1MDYyOFxcdTA2NEFcIixcbiAgXCJcXHVGQzBCXCIsXG4gIFwiXFx1MDYyQVxcdTA2MkNcIixcbiAgXCJcXHVGQzBDXCIsXG4gIFwiXFx1MDYyQVxcdTA2MkRcIixcbiAgXCJcXHVGQzBEXCIsXG4gIFwiXFx1MDYyQVxcdTA2MkVcIixcbiAgXCJcXHVGQzBFXCIsXG4gIFwiXFx1MDYyQVxcdTA2NDVcIixcbiAgXCJcXHVGQzBGXCIsXG4gIFwiXFx1MDYyQVxcdTA2NDlcIixcbiAgXCJcXHVGQzEwXCIsXG4gIFwiXFx1MDYyQVxcdTA2NEFcIixcbiAgXCJcXHVGQzExXCIsXG4gIFwiXFx1MDYyQlxcdTA2MkNcIixcbiAgXCJcXHVGQzEyXCIsXG4gIFwiXFx1MDYyQlxcdTA2NDVcIixcbiAgXCJcXHVGQzEzXCIsXG4gIFwiXFx1MDYyQlxcdTA2NDlcIixcbiAgXCJcXHVGQzE0XCIsXG4gIFwiXFx1MDYyQlxcdTA2NEFcIixcbiAgXCJcXHVGQzE1XCIsXG4gIFwiXFx1MDYyQ1xcdTA2MkRcIixcbiAgXCJcXHVGQzE2XCIsXG4gIFwiXFx1MDYyQ1xcdTA2NDVcIixcbiAgXCJcXHVGQzE3XCIsXG4gIFwiXFx1MDYyRFxcdTA2MkNcIixcbiAgXCJcXHVGQzE4XCIsXG4gIFwiXFx1MDYyRFxcdTA2NDVcIixcbiAgXCJcXHVGQzE5XCIsXG4gIFwiXFx1MDYyRVxcdTA2MkNcIixcbiAgXCJcXHVGQzFBXCIsXG4gIFwiXFx1MDYyRVxcdTA2MkRcIixcbiAgXCJcXHVGQzFCXCIsXG4gIFwiXFx1MDYyRVxcdTA2NDVcIixcbiAgXCJcXHVGQzFDXCIsXG4gIFwiXFx1MDYzM1xcdTA2MkNcIixcbiAgXCJcXHVGQzFEXCIsXG4gIFwiXFx1MDYzM1xcdTA2MkRcIixcbiAgXCJcXHVGQzFFXCIsXG4gIFwiXFx1MDYzM1xcdTA2MkVcIixcbiAgXCJcXHVGQzFGXCIsXG4gIFwiXFx1MDYzM1xcdTA2NDVcIixcbiAgXCJcXHVGQzIwXCIsXG4gIFwiXFx1MDYzNVxcdTA2MkRcIixcbiAgXCJcXHVGQzIxXCIsXG4gIFwiXFx1MDYzNVxcdTA2NDVcIixcbiAgXCJcXHVGQzIyXCIsXG4gIFwiXFx1MDYzNlxcdTA2MkNcIixcbiAgXCJcXHVGQzIzXCIsXG4gIFwiXFx1MDYzNlxcdTA2MkRcIixcbiAgXCJcXHVGQzI0XCIsXG4gIFwiXFx1MDYzNlxcdTA2MkVcIixcbiAgXCJcXHVGQzI1XCIsXG4gIFwiXFx1MDYzNlxcdTA2NDVcIixcbiAgXCJcXHVGQzI2XCIsXG4gIFwiXFx1MDYzN1xcdTA2MkRcIixcbiAgXCJcXHVGQzI3XCIsXG4gIFwiXFx1MDYzN1xcdTA2NDVcIixcbiAgXCJcXHVGQzI4XCIsXG4gIFwiXFx1MDYzOFxcdTA2NDVcIixcbiAgXCJcXHVGQzI5XCIsXG4gIFwiXFx1MDYzOVxcdTA2MkNcIixcbiAgXCJcXHVGQzJBXCIsXG4gIFwiXFx1MDYzOVxcdTA2NDVcIixcbiAgXCJcXHVGQzJCXCIsXG4gIFwiXFx1MDYzQVxcdTA2MkNcIixcbiAgXCJcXHVGQzJDXCIsXG4gIFwiXFx1MDYzQVxcdTA2NDVcIixcbiAgXCJcXHVGQzJEXCIsXG4gIFwiXFx1MDY0MVxcdTA2MkNcIixcbiAgXCJcXHVGQzJFXCIsXG4gIFwiXFx1MDY0MVxcdTA2MkRcIixcbiAgXCJcXHVGQzJGXCIsXG4gIFwiXFx1MDY0MVxcdTA2MkVcIixcbiAgXCJcXHVGQzMwXCIsXG4gIFwiXFx1MDY0MVxcdTA2NDVcIixcbiAgXCJcXHVGQzMxXCIsXG4gIFwiXFx1MDY0MVxcdTA2NDlcIixcbiAgXCJcXHVGQzMyXCIsXG4gIFwiXFx1MDY0MVxcdTA2NEFcIixcbiAgXCJcXHVGQzMzXCIsXG4gIFwiXFx1MDY0MlxcdTA2MkRcIixcbiAgXCJcXHVGQzM0XCIsXG4gIFwiXFx1MDY0MlxcdTA2NDVcIixcbiAgXCJcXHVGQzM1XCIsXG4gIFwiXFx1MDY0MlxcdTA2NDlcIixcbiAgXCJcXHVGQzM2XCIsXG4gIFwiXFx1MDY0MlxcdTA2NEFcIixcbiAgXCJcXHVGQzM3XCIsXG4gIFwiXFx1MDY0M1xcdTA2MjdcIixcbiAgXCJcXHVGQzM4XCIsXG4gIFwiXFx1MDY0M1xcdTA2MkNcIixcbiAgXCJcXHVGQzM5XCIsXG4gIFwiXFx1MDY0M1xcdTA2MkRcIixcbiAgXCJcXHVGQzNBXCIsXG4gIFwiXFx1MDY0M1xcdTA2MkVcIixcbiAgXCJcXHVGQzNCXCIsXG4gIFwiXFx1MDY0M1xcdTA2NDRcIixcbiAgXCJcXHVGQzNDXCIsXG4gIFwiXFx1MDY0M1xcdTA2NDVcIixcbiAgXCJcXHVGQzNEXCIsXG4gIFwiXFx1MDY0M1xcdTA2NDlcIixcbiAgXCJcXHVGQzNFXCIsXG4gIFwiXFx1MDY0M1xcdTA2NEFcIixcbiAgXCJcXHVGQzNGXCIsXG4gIFwiXFx1MDY0NFxcdTA2MkNcIixcbiAgXCJcXHVGQzQwXCIsXG4gIFwiXFx1MDY0NFxcdTA2MkRcIixcbiAgXCJcXHVGQzQxXCIsXG4gIFwiXFx1MDY0NFxcdTA2MkVcIixcbiAgXCJcXHVGQzQyXCIsXG4gIFwiXFx1MDY0NFxcdTA2NDVcIixcbiAgXCJcXHVGQzQzXCIsXG4gIFwiXFx1MDY0NFxcdTA2NDlcIixcbiAgXCJcXHVGQzQ0XCIsXG4gIFwiXFx1MDY0NFxcdTA2NEFcIixcbiAgXCJcXHVGQzQ1XCIsXG4gIFwiXFx1MDY0NVxcdTA2MkNcIixcbiAgXCJcXHVGQzQ2XCIsXG4gIFwiXFx1MDY0NVxcdTA2MkRcIixcbiAgXCJcXHVGQzQ3XCIsXG4gIFwiXFx1MDY0NVxcdTA2MkVcIixcbiAgXCJcXHVGQzQ4XCIsXG4gIFwiXFx1MDY0NVxcdTA2NDVcIixcbiAgXCJcXHVGQzQ5XCIsXG4gIFwiXFx1MDY0NVxcdTA2NDlcIixcbiAgXCJcXHVGQzRBXCIsXG4gIFwiXFx1MDY0NVxcdTA2NEFcIixcbiAgXCJcXHVGQzRCXCIsXG4gIFwiXFx1MDY0NlxcdTA2MkNcIixcbiAgXCJcXHVGQzRDXCIsXG4gIFwiXFx1MDY0NlxcdTA2MkRcIixcbiAgXCJcXHVGQzREXCIsXG4gIFwiXFx1MDY0NlxcdTA2MkVcIixcbiAgXCJcXHVGQzRFXCIsXG4gIFwiXFx1MDY0NlxcdTA2NDVcIixcbiAgXCJcXHVGQzRGXCIsXG4gIFwiXFx1MDY0NlxcdTA2NDlcIixcbiAgXCJcXHVGQzUwXCIsXG4gIFwiXFx1MDY0NlxcdTA2NEFcIixcbiAgXCJcXHVGQzUxXCIsXG4gIFwiXFx1MDY0N1xcdTA2MkNcIixcbiAgXCJcXHVGQzUyXCIsXG4gIFwiXFx1MDY0N1xcdTA2NDVcIixcbiAgXCJcXHVGQzUzXCIsXG4gIFwiXFx1MDY0N1xcdTA2NDlcIixcbiAgXCJcXHVGQzU0XCIsXG4gIFwiXFx1MDY0N1xcdTA2NEFcIixcbiAgXCJcXHVGQzU1XCIsXG4gIFwiXFx1MDY0QVxcdTA2MkNcIixcbiAgXCJcXHVGQzU2XCIsXG4gIFwiXFx1MDY0QVxcdTA2MkRcIixcbiAgXCJcXHVGQzU3XCIsXG4gIFwiXFx1MDY0QVxcdTA2MkVcIixcbiAgXCJcXHVGQzU4XCIsXG4gIFwiXFx1MDY0QVxcdTA2NDVcIixcbiAgXCJcXHVGQzU5XCIsXG4gIFwiXFx1MDY0QVxcdTA2NDlcIixcbiAgXCJcXHVGQzVBXCIsXG4gIFwiXFx1MDY0QVxcdTA2NEFcIixcbiAgXCJcXHVGQzVCXCIsXG4gIFwiXFx1MDYzMFxcdTA2NzBcIixcbiAgXCJcXHVGQzVDXCIsXG4gIFwiXFx1MDYzMVxcdTA2NzBcIixcbiAgXCJcXHVGQzVEXCIsXG4gIFwiXFx1MDY0OVxcdTA2NzBcIixcbiAgXCJcXHVGQzVFXCIsXG4gIFwiXFx1MDAyMFxcdTA2NENcXHUwNjUxXCIsXG4gIFwiXFx1RkM1RlwiLFxuICBcIlxcdTAwMjBcXHUwNjREXFx1MDY1MVwiLFxuICBcIlxcdUZDNjBcIixcbiAgXCJcXHUwMDIwXFx1MDY0RVxcdTA2NTFcIixcbiAgXCJcXHVGQzYxXCIsXG4gIFwiXFx1MDAyMFxcdTA2NEZcXHUwNjUxXCIsXG4gIFwiXFx1RkM2MlwiLFxuICBcIlxcdTAwMjBcXHUwNjUwXFx1MDY1MVwiLFxuICBcIlxcdUZDNjNcIixcbiAgXCJcXHUwMDIwXFx1MDY1MVxcdTA2NzBcIixcbiAgXCJcXHVGQzY0XCIsXG4gIFwiXFx1MDYyNlxcdTA2MzFcIixcbiAgXCJcXHVGQzY1XCIsXG4gIFwiXFx1MDYyNlxcdTA2MzJcIixcbiAgXCJcXHVGQzY2XCIsXG4gIFwiXFx1MDYyNlxcdTA2NDVcIixcbiAgXCJcXHVGQzY3XCIsXG4gIFwiXFx1MDYyNlxcdTA2NDZcIixcbiAgXCJcXHVGQzY4XCIsXG4gIFwiXFx1MDYyNlxcdTA2NDlcIixcbiAgXCJcXHVGQzY5XCIsXG4gIFwiXFx1MDYyNlxcdTA2NEFcIixcbiAgXCJcXHVGQzZBXCIsXG4gIFwiXFx1MDYyOFxcdTA2MzFcIixcbiAgXCJcXHVGQzZCXCIsXG4gIFwiXFx1MDYyOFxcdTA2MzJcIixcbiAgXCJcXHVGQzZDXCIsXG4gIFwiXFx1MDYyOFxcdTA2NDVcIixcbiAgXCJcXHVGQzZEXCIsXG4gIFwiXFx1MDYyOFxcdTA2NDZcIixcbiAgXCJcXHVGQzZFXCIsXG4gIFwiXFx1MDYyOFxcdTA2NDlcIixcbiAgXCJcXHVGQzZGXCIsXG4gIFwiXFx1MDYyOFxcdTA2NEFcIixcbiAgXCJcXHVGQzcwXCIsXG4gIFwiXFx1MDYyQVxcdTA2MzFcIixcbiAgXCJcXHVGQzcxXCIsXG4gIFwiXFx1MDYyQVxcdTA2MzJcIixcbiAgXCJcXHVGQzcyXCIsXG4gIFwiXFx1MDYyQVxcdTA2NDVcIixcbiAgXCJcXHVGQzczXCIsXG4gIFwiXFx1MDYyQVxcdTA2NDZcIixcbiAgXCJcXHVGQzc0XCIsXG4gIFwiXFx1MDYyQVxcdTA2NDlcIixcbiAgXCJcXHVGQzc1XCIsXG4gIFwiXFx1MDYyQVxcdTA2NEFcIixcbiAgXCJcXHVGQzc2XCIsXG4gIFwiXFx1MDYyQlxcdTA2MzFcIixcbiAgXCJcXHVGQzc3XCIsXG4gIFwiXFx1MDYyQlxcdTA2MzJcIixcbiAgXCJcXHVGQzc4XCIsXG4gIFwiXFx1MDYyQlxcdTA2NDVcIixcbiAgXCJcXHVGQzc5XCIsXG4gIFwiXFx1MDYyQlxcdTA2NDZcIixcbiAgXCJcXHVGQzdBXCIsXG4gIFwiXFx1MDYyQlxcdTA2NDlcIixcbiAgXCJcXHVGQzdCXCIsXG4gIFwiXFx1MDYyQlxcdTA2NEFcIixcbiAgXCJcXHVGQzdDXCIsXG4gIFwiXFx1MDY0MVxcdTA2NDlcIixcbiAgXCJcXHVGQzdEXCIsXG4gIFwiXFx1MDY0MVxcdTA2NEFcIixcbiAgXCJcXHVGQzdFXCIsXG4gIFwiXFx1MDY0MlxcdTA2NDlcIixcbiAgXCJcXHVGQzdGXCIsXG4gIFwiXFx1MDY0MlxcdTA2NEFcIixcbiAgXCJcXHVGQzgwXCIsXG4gIFwiXFx1MDY0M1xcdTA2MjdcIixcbiAgXCJcXHVGQzgxXCIsXG4gIFwiXFx1MDY0M1xcdTA2NDRcIixcbiAgXCJcXHVGQzgyXCIsXG4gIFwiXFx1MDY0M1xcdTA2NDVcIixcbiAgXCJcXHVGQzgzXCIsXG4gIFwiXFx1MDY0M1xcdTA2NDlcIixcbiAgXCJcXHVGQzg0XCIsXG4gIFwiXFx1MDY0M1xcdTA2NEFcIixcbiAgXCJcXHVGQzg1XCIsXG4gIFwiXFx1MDY0NFxcdTA2NDVcIixcbiAgXCJcXHVGQzg2XCIsXG4gIFwiXFx1MDY0NFxcdTA2NDlcIixcbiAgXCJcXHVGQzg3XCIsXG4gIFwiXFx1MDY0NFxcdTA2NEFcIixcbiAgXCJcXHVGQzg4XCIsXG4gIFwiXFx1MDY0NVxcdTA2MjdcIixcbiAgXCJcXHVGQzg5XCIsXG4gIFwiXFx1MDY0NVxcdTA2NDVcIixcbiAgXCJcXHVGQzhBXCIsXG4gIFwiXFx1MDY0NlxcdTA2MzFcIixcbiAgXCJcXHVGQzhCXCIsXG4gIFwiXFx1MDY0NlxcdTA2MzJcIixcbiAgXCJcXHVGQzhDXCIsXG4gIFwiXFx1MDY0NlxcdTA2NDVcIixcbiAgXCJcXHVGQzhEXCIsXG4gIFwiXFx1MDY0NlxcdTA2NDZcIixcbiAgXCJcXHVGQzhFXCIsXG4gIFwiXFx1MDY0NlxcdTA2NDlcIixcbiAgXCJcXHVGQzhGXCIsXG4gIFwiXFx1MDY0NlxcdTA2NEFcIixcbiAgXCJcXHVGQzkwXCIsXG4gIFwiXFx1MDY0OVxcdTA2NzBcIixcbiAgXCJcXHVGQzkxXCIsXG4gIFwiXFx1MDY0QVxcdTA2MzFcIixcbiAgXCJcXHVGQzkyXCIsXG4gIFwiXFx1MDY0QVxcdTA2MzJcIixcbiAgXCJcXHVGQzkzXCIsXG4gIFwiXFx1MDY0QVxcdTA2NDVcIixcbiAgXCJcXHVGQzk0XCIsXG4gIFwiXFx1MDY0QVxcdTA2NDZcIixcbiAgXCJcXHVGQzk1XCIsXG4gIFwiXFx1MDY0QVxcdTA2NDlcIixcbiAgXCJcXHVGQzk2XCIsXG4gIFwiXFx1MDY0QVxcdTA2NEFcIixcbiAgXCJcXHVGQzk3XCIsXG4gIFwiXFx1MDYyNlxcdTA2MkNcIixcbiAgXCJcXHVGQzk4XCIsXG4gIFwiXFx1MDYyNlxcdTA2MkRcIixcbiAgXCJcXHVGQzk5XCIsXG4gIFwiXFx1MDYyNlxcdTA2MkVcIixcbiAgXCJcXHVGQzlBXCIsXG4gIFwiXFx1MDYyNlxcdTA2NDVcIixcbiAgXCJcXHVGQzlCXCIsXG4gIFwiXFx1MDYyNlxcdTA2NDdcIixcbiAgXCJcXHVGQzlDXCIsXG4gIFwiXFx1MDYyOFxcdTA2MkNcIixcbiAgXCJcXHVGQzlEXCIsXG4gIFwiXFx1MDYyOFxcdTA2MkRcIixcbiAgXCJcXHVGQzlFXCIsXG4gIFwiXFx1MDYyOFxcdTA2MkVcIixcbiAgXCJcXHVGQzlGXCIsXG4gIFwiXFx1MDYyOFxcdTA2NDVcIixcbiAgXCJcXHVGQ0EwXCIsXG4gIFwiXFx1MDYyOFxcdTA2NDdcIixcbiAgXCJcXHVGQ0ExXCIsXG4gIFwiXFx1MDYyQVxcdTA2MkNcIixcbiAgXCJcXHVGQ0EyXCIsXG4gIFwiXFx1MDYyQVxcdTA2MkRcIixcbiAgXCJcXHVGQ0EzXCIsXG4gIFwiXFx1MDYyQVxcdTA2MkVcIixcbiAgXCJcXHVGQ0E0XCIsXG4gIFwiXFx1MDYyQVxcdTA2NDVcIixcbiAgXCJcXHVGQ0E1XCIsXG4gIFwiXFx1MDYyQVxcdTA2NDdcIixcbiAgXCJcXHVGQ0E2XCIsXG4gIFwiXFx1MDYyQlxcdTA2NDVcIixcbiAgXCJcXHVGQ0E3XCIsXG4gIFwiXFx1MDYyQ1xcdTA2MkRcIixcbiAgXCJcXHVGQ0E4XCIsXG4gIFwiXFx1MDYyQ1xcdTA2NDVcIixcbiAgXCJcXHVGQ0E5XCIsXG4gIFwiXFx1MDYyRFxcdTA2MkNcIixcbiAgXCJcXHVGQ0FBXCIsXG4gIFwiXFx1MDYyRFxcdTA2NDVcIixcbiAgXCJcXHVGQ0FCXCIsXG4gIFwiXFx1MDYyRVxcdTA2MkNcIixcbiAgXCJcXHVGQ0FDXCIsXG4gIFwiXFx1MDYyRVxcdTA2NDVcIixcbiAgXCJcXHVGQ0FEXCIsXG4gIFwiXFx1MDYzM1xcdTA2MkNcIixcbiAgXCJcXHVGQ0FFXCIsXG4gIFwiXFx1MDYzM1xcdTA2MkRcIixcbiAgXCJcXHVGQ0FGXCIsXG4gIFwiXFx1MDYzM1xcdTA2MkVcIixcbiAgXCJcXHVGQ0IwXCIsXG4gIFwiXFx1MDYzM1xcdTA2NDVcIixcbiAgXCJcXHVGQ0IxXCIsXG4gIFwiXFx1MDYzNVxcdTA2MkRcIixcbiAgXCJcXHVGQ0IyXCIsXG4gIFwiXFx1MDYzNVxcdTA2MkVcIixcbiAgXCJcXHVGQ0IzXCIsXG4gIFwiXFx1MDYzNVxcdTA2NDVcIixcbiAgXCJcXHVGQ0I0XCIsXG4gIFwiXFx1MDYzNlxcdTA2MkNcIixcbiAgXCJcXHVGQ0I1XCIsXG4gIFwiXFx1MDYzNlxcdTA2MkRcIixcbiAgXCJcXHVGQ0I2XCIsXG4gIFwiXFx1MDYzNlxcdTA2MkVcIixcbiAgXCJcXHVGQ0I3XCIsXG4gIFwiXFx1MDYzNlxcdTA2NDVcIixcbiAgXCJcXHVGQ0I4XCIsXG4gIFwiXFx1MDYzN1xcdTA2MkRcIixcbiAgXCJcXHVGQ0I5XCIsXG4gIFwiXFx1MDYzOFxcdTA2NDVcIixcbiAgXCJcXHVGQ0JBXCIsXG4gIFwiXFx1MDYzOVxcdTA2MkNcIixcbiAgXCJcXHVGQ0JCXCIsXG4gIFwiXFx1MDYzOVxcdTA2NDVcIixcbiAgXCJcXHVGQ0JDXCIsXG4gIFwiXFx1MDYzQVxcdTA2MkNcIixcbiAgXCJcXHVGQ0JEXCIsXG4gIFwiXFx1MDYzQVxcdTA2NDVcIixcbiAgXCJcXHVGQ0JFXCIsXG4gIFwiXFx1MDY0MVxcdTA2MkNcIixcbiAgXCJcXHVGQ0JGXCIsXG4gIFwiXFx1MDY0MVxcdTA2MkRcIixcbiAgXCJcXHVGQ0MwXCIsXG4gIFwiXFx1MDY0MVxcdTA2MkVcIixcbiAgXCJcXHVGQ0MxXCIsXG4gIFwiXFx1MDY0MVxcdTA2NDVcIixcbiAgXCJcXHVGQ0MyXCIsXG4gIFwiXFx1MDY0MlxcdTA2MkRcIixcbiAgXCJcXHVGQ0MzXCIsXG4gIFwiXFx1MDY0MlxcdTA2NDVcIixcbiAgXCJcXHVGQ0M0XCIsXG4gIFwiXFx1MDY0M1xcdTA2MkNcIixcbiAgXCJcXHVGQ0M1XCIsXG4gIFwiXFx1MDY0M1xcdTA2MkRcIixcbiAgXCJcXHVGQ0M2XCIsXG4gIFwiXFx1MDY0M1xcdTA2MkVcIixcbiAgXCJcXHVGQ0M3XCIsXG4gIFwiXFx1MDY0M1xcdTA2NDRcIixcbiAgXCJcXHVGQ0M4XCIsXG4gIFwiXFx1MDY0M1xcdTA2NDVcIixcbiAgXCJcXHVGQ0M5XCIsXG4gIFwiXFx1MDY0NFxcdTA2MkNcIixcbiAgXCJcXHVGQ0NBXCIsXG4gIFwiXFx1MDY0NFxcdTA2MkRcIixcbiAgXCJcXHVGQ0NCXCIsXG4gIFwiXFx1MDY0NFxcdTA2MkVcIixcbiAgXCJcXHVGQ0NDXCIsXG4gIFwiXFx1MDY0NFxcdTA2NDVcIixcbiAgXCJcXHVGQ0NEXCIsXG4gIFwiXFx1MDY0NFxcdTA2NDdcIixcbiAgXCJcXHVGQ0NFXCIsXG4gIFwiXFx1MDY0NVxcdTA2MkNcIixcbiAgXCJcXHVGQ0NGXCIsXG4gIFwiXFx1MDY0NVxcdTA2MkRcIixcbiAgXCJcXHVGQ0QwXCIsXG4gIFwiXFx1MDY0NVxcdTA2MkVcIixcbiAgXCJcXHVGQ0QxXCIsXG4gIFwiXFx1MDY0NVxcdTA2NDVcIixcbiAgXCJcXHVGQ0QyXCIsXG4gIFwiXFx1MDY0NlxcdTA2MkNcIixcbiAgXCJcXHVGQ0QzXCIsXG4gIFwiXFx1MDY0NlxcdTA2MkRcIixcbiAgXCJcXHVGQ0Q0XCIsXG4gIFwiXFx1MDY0NlxcdTA2MkVcIixcbiAgXCJcXHVGQ0Q1XCIsXG4gIFwiXFx1MDY0NlxcdTA2NDVcIixcbiAgXCJcXHVGQ0Q2XCIsXG4gIFwiXFx1MDY0NlxcdTA2NDdcIixcbiAgXCJcXHVGQ0Q3XCIsXG4gIFwiXFx1MDY0N1xcdTA2MkNcIixcbiAgXCJcXHVGQ0Q4XCIsXG4gIFwiXFx1MDY0N1xcdTA2NDVcIixcbiAgXCJcXHVGQ0Q5XCIsXG4gIFwiXFx1MDY0N1xcdTA2NzBcIixcbiAgXCJcXHVGQ0RBXCIsXG4gIFwiXFx1MDY0QVxcdTA2MkNcIixcbiAgXCJcXHVGQ0RCXCIsXG4gIFwiXFx1MDY0QVxcdTA2MkRcIixcbiAgXCJcXHVGQ0RDXCIsXG4gIFwiXFx1MDY0QVxcdTA2MkVcIixcbiAgXCJcXHVGQ0REXCIsXG4gIFwiXFx1MDY0QVxcdTA2NDVcIixcbiAgXCJcXHVGQ0RFXCIsXG4gIFwiXFx1MDY0QVxcdTA2NDdcIixcbiAgXCJcXHVGQ0RGXCIsXG4gIFwiXFx1MDYyNlxcdTA2NDVcIixcbiAgXCJcXHVGQ0UwXCIsXG4gIFwiXFx1MDYyNlxcdTA2NDdcIixcbiAgXCJcXHVGQ0UxXCIsXG4gIFwiXFx1MDYyOFxcdTA2NDVcIixcbiAgXCJcXHVGQ0UyXCIsXG4gIFwiXFx1MDYyOFxcdTA2NDdcIixcbiAgXCJcXHVGQ0UzXCIsXG4gIFwiXFx1MDYyQVxcdTA2NDVcIixcbiAgXCJcXHVGQ0U0XCIsXG4gIFwiXFx1MDYyQVxcdTA2NDdcIixcbiAgXCJcXHVGQ0U1XCIsXG4gIFwiXFx1MDYyQlxcdTA2NDVcIixcbiAgXCJcXHVGQ0U2XCIsXG4gIFwiXFx1MDYyQlxcdTA2NDdcIixcbiAgXCJcXHVGQ0U3XCIsXG4gIFwiXFx1MDYzM1xcdTA2NDVcIixcbiAgXCJcXHVGQ0U4XCIsXG4gIFwiXFx1MDYzM1xcdTA2NDdcIixcbiAgXCJcXHVGQ0U5XCIsXG4gIFwiXFx1MDYzNFxcdTA2NDVcIixcbiAgXCJcXHVGQ0VBXCIsXG4gIFwiXFx1MDYzNFxcdTA2NDdcIixcbiAgXCJcXHVGQ0VCXCIsXG4gIFwiXFx1MDY0M1xcdTA2NDRcIixcbiAgXCJcXHVGQ0VDXCIsXG4gIFwiXFx1MDY0M1xcdTA2NDVcIixcbiAgXCJcXHVGQ0VEXCIsXG4gIFwiXFx1MDY0NFxcdTA2NDVcIixcbiAgXCJcXHVGQ0VFXCIsXG4gIFwiXFx1MDY0NlxcdTA2NDVcIixcbiAgXCJcXHVGQ0VGXCIsXG4gIFwiXFx1MDY0NlxcdTA2NDdcIixcbiAgXCJcXHVGQ0YwXCIsXG4gIFwiXFx1MDY0QVxcdTA2NDVcIixcbiAgXCJcXHVGQ0YxXCIsXG4gIFwiXFx1MDY0QVxcdTA2NDdcIixcbiAgXCJcXHVGQ0YyXCIsXG4gIFwiXFx1MDY0MFxcdTA2NEVcXHUwNjUxXCIsXG4gIFwiXFx1RkNGM1wiLFxuICBcIlxcdTA2NDBcXHUwNjRGXFx1MDY1MVwiLFxuICBcIlxcdUZDRjRcIixcbiAgXCJcXHUwNjQwXFx1MDY1MFxcdTA2NTFcIixcbiAgXCJcXHVGQ0Y1XCIsXG4gIFwiXFx1MDYzN1xcdTA2NDlcIixcbiAgXCJcXHVGQ0Y2XCIsXG4gIFwiXFx1MDYzN1xcdTA2NEFcIixcbiAgXCJcXHVGQ0Y3XCIsXG4gIFwiXFx1MDYzOVxcdTA2NDlcIixcbiAgXCJcXHVGQ0Y4XCIsXG4gIFwiXFx1MDYzOVxcdTA2NEFcIixcbiAgXCJcXHVGQ0Y5XCIsXG4gIFwiXFx1MDYzQVxcdTA2NDlcIixcbiAgXCJcXHVGQ0ZBXCIsXG4gIFwiXFx1MDYzQVxcdTA2NEFcIixcbiAgXCJcXHVGQ0ZCXCIsXG4gIFwiXFx1MDYzM1xcdTA2NDlcIixcbiAgXCJcXHVGQ0ZDXCIsXG4gIFwiXFx1MDYzM1xcdTA2NEFcIixcbiAgXCJcXHVGQ0ZEXCIsXG4gIFwiXFx1MDYzNFxcdTA2NDlcIixcbiAgXCJcXHVGQ0ZFXCIsXG4gIFwiXFx1MDYzNFxcdTA2NEFcIixcbiAgXCJcXHVGQ0ZGXCIsXG4gIFwiXFx1MDYyRFxcdTA2NDlcIixcbiAgXCJcXHVGRDAwXCIsXG4gIFwiXFx1MDYyRFxcdTA2NEFcIixcbiAgXCJcXHVGRDAxXCIsXG4gIFwiXFx1MDYyQ1xcdTA2NDlcIixcbiAgXCJcXHVGRDAyXCIsXG4gIFwiXFx1MDYyQ1xcdTA2NEFcIixcbiAgXCJcXHVGRDAzXCIsXG4gIFwiXFx1MDYyRVxcdTA2NDlcIixcbiAgXCJcXHVGRDA0XCIsXG4gIFwiXFx1MDYyRVxcdTA2NEFcIixcbiAgXCJcXHVGRDA1XCIsXG4gIFwiXFx1MDYzNVxcdTA2NDlcIixcbiAgXCJcXHVGRDA2XCIsXG4gIFwiXFx1MDYzNVxcdTA2NEFcIixcbiAgXCJcXHVGRDA3XCIsXG4gIFwiXFx1MDYzNlxcdTA2NDlcIixcbiAgXCJcXHVGRDA4XCIsXG4gIFwiXFx1MDYzNlxcdTA2NEFcIixcbiAgXCJcXHVGRDA5XCIsXG4gIFwiXFx1MDYzNFxcdTA2MkNcIixcbiAgXCJcXHVGRDBBXCIsXG4gIFwiXFx1MDYzNFxcdTA2MkRcIixcbiAgXCJcXHVGRDBCXCIsXG4gIFwiXFx1MDYzNFxcdTA2MkVcIixcbiAgXCJcXHVGRDBDXCIsXG4gIFwiXFx1MDYzNFxcdTA2NDVcIixcbiAgXCJcXHVGRDBEXCIsXG4gIFwiXFx1MDYzNFxcdTA2MzFcIixcbiAgXCJcXHVGRDBFXCIsXG4gIFwiXFx1MDYzM1xcdTA2MzFcIixcbiAgXCJcXHVGRDBGXCIsXG4gIFwiXFx1MDYzNVxcdTA2MzFcIixcbiAgXCJcXHVGRDEwXCIsXG4gIFwiXFx1MDYzNlxcdTA2MzFcIixcbiAgXCJcXHVGRDExXCIsXG4gIFwiXFx1MDYzN1xcdTA2NDlcIixcbiAgXCJcXHVGRDEyXCIsXG4gIFwiXFx1MDYzN1xcdTA2NEFcIixcbiAgXCJcXHVGRDEzXCIsXG4gIFwiXFx1MDYzOVxcdTA2NDlcIixcbiAgXCJcXHVGRDE0XCIsXG4gIFwiXFx1MDYzOVxcdTA2NEFcIixcbiAgXCJcXHVGRDE1XCIsXG4gIFwiXFx1MDYzQVxcdTA2NDlcIixcbiAgXCJcXHVGRDE2XCIsXG4gIFwiXFx1MDYzQVxcdTA2NEFcIixcbiAgXCJcXHVGRDE3XCIsXG4gIFwiXFx1MDYzM1xcdTA2NDlcIixcbiAgXCJcXHVGRDE4XCIsXG4gIFwiXFx1MDYzM1xcdTA2NEFcIixcbiAgXCJcXHVGRDE5XCIsXG4gIFwiXFx1MDYzNFxcdTA2NDlcIixcbiAgXCJcXHVGRDFBXCIsXG4gIFwiXFx1MDYzNFxcdTA2NEFcIixcbiAgXCJcXHVGRDFCXCIsXG4gIFwiXFx1MDYyRFxcdTA2NDlcIixcbiAgXCJcXHVGRDFDXCIsXG4gIFwiXFx1MDYyRFxcdTA2NEFcIixcbiAgXCJcXHVGRDFEXCIsXG4gIFwiXFx1MDYyQ1xcdTA2NDlcIixcbiAgXCJcXHVGRDFFXCIsXG4gIFwiXFx1MDYyQ1xcdTA2NEFcIixcbiAgXCJcXHVGRDFGXCIsXG4gIFwiXFx1MDYyRVxcdTA2NDlcIixcbiAgXCJcXHVGRDIwXCIsXG4gIFwiXFx1MDYyRVxcdTA2NEFcIixcbiAgXCJcXHVGRDIxXCIsXG4gIFwiXFx1MDYzNVxcdTA2NDlcIixcbiAgXCJcXHVGRDIyXCIsXG4gIFwiXFx1MDYzNVxcdTA2NEFcIixcbiAgXCJcXHVGRDIzXCIsXG4gIFwiXFx1MDYzNlxcdTA2NDlcIixcbiAgXCJcXHVGRDI0XCIsXG4gIFwiXFx1MDYzNlxcdTA2NEFcIixcbiAgXCJcXHVGRDI1XCIsXG4gIFwiXFx1MDYzNFxcdTA2MkNcIixcbiAgXCJcXHVGRDI2XCIsXG4gIFwiXFx1MDYzNFxcdTA2MkRcIixcbiAgXCJcXHVGRDI3XCIsXG4gIFwiXFx1MDYzNFxcdTA2MkVcIixcbiAgXCJcXHVGRDI4XCIsXG4gIFwiXFx1MDYzNFxcdTA2NDVcIixcbiAgXCJcXHVGRDI5XCIsXG4gIFwiXFx1MDYzNFxcdTA2MzFcIixcbiAgXCJcXHVGRDJBXCIsXG4gIFwiXFx1MDYzM1xcdTA2MzFcIixcbiAgXCJcXHVGRDJCXCIsXG4gIFwiXFx1MDYzNVxcdTA2MzFcIixcbiAgXCJcXHVGRDJDXCIsXG4gIFwiXFx1MDYzNlxcdTA2MzFcIixcbiAgXCJcXHVGRDJEXCIsXG4gIFwiXFx1MDYzNFxcdTA2MkNcIixcbiAgXCJcXHVGRDJFXCIsXG4gIFwiXFx1MDYzNFxcdTA2MkRcIixcbiAgXCJcXHVGRDJGXCIsXG4gIFwiXFx1MDYzNFxcdTA2MkVcIixcbiAgXCJcXHVGRDMwXCIsXG4gIFwiXFx1MDYzNFxcdTA2NDVcIixcbiAgXCJcXHVGRDMxXCIsXG4gIFwiXFx1MDYzM1xcdTA2NDdcIixcbiAgXCJcXHVGRDMyXCIsXG4gIFwiXFx1MDYzNFxcdTA2NDdcIixcbiAgXCJcXHVGRDMzXCIsXG4gIFwiXFx1MDYzN1xcdTA2NDVcIixcbiAgXCJcXHVGRDM0XCIsXG4gIFwiXFx1MDYzM1xcdTA2MkNcIixcbiAgXCJcXHVGRDM1XCIsXG4gIFwiXFx1MDYzM1xcdTA2MkRcIixcbiAgXCJcXHVGRDM2XCIsXG4gIFwiXFx1MDYzM1xcdTA2MkVcIixcbiAgXCJcXHVGRDM3XCIsXG4gIFwiXFx1MDYzNFxcdTA2MkNcIixcbiAgXCJcXHVGRDM4XCIsXG4gIFwiXFx1MDYzNFxcdTA2MkRcIixcbiAgXCJcXHVGRDM5XCIsXG4gIFwiXFx1MDYzNFxcdTA2MkVcIixcbiAgXCJcXHVGRDNBXCIsXG4gIFwiXFx1MDYzN1xcdTA2NDVcIixcbiAgXCJcXHVGRDNCXCIsXG4gIFwiXFx1MDYzOFxcdTA2NDVcIixcbiAgXCJcXHVGRDNDXCIsXG4gIFwiXFx1MDYyN1xcdTA2NEJcIixcbiAgXCJcXHVGRDNEXCIsXG4gIFwiXFx1MDYyN1xcdTA2NEJcIixcbiAgXCJcXHVGRDUwXCIsXG4gIFwiXFx1MDYyQVxcdTA2MkNcXHUwNjQ1XCIsXG4gIFwiXFx1RkQ1MVwiLFxuICBcIlxcdTA2MkFcXHUwNjJEXFx1MDYyQ1wiLFxuICBcIlxcdUZENTJcIixcbiAgXCJcXHUwNjJBXFx1MDYyRFxcdTA2MkNcIixcbiAgXCJcXHVGRDUzXCIsXG4gIFwiXFx1MDYyQVxcdTA2MkRcXHUwNjQ1XCIsXG4gIFwiXFx1RkQ1NFwiLFxuICBcIlxcdTA2MkFcXHUwNjJFXFx1MDY0NVwiLFxuICBcIlxcdUZENTVcIixcbiAgXCJcXHUwNjJBXFx1MDY0NVxcdTA2MkNcIixcbiAgXCJcXHVGRDU2XCIsXG4gIFwiXFx1MDYyQVxcdTA2NDVcXHUwNjJEXCIsXG4gIFwiXFx1RkQ1N1wiLFxuICBcIlxcdTA2MkFcXHUwNjQ1XFx1MDYyRVwiLFxuICBcIlxcdUZENThcIixcbiAgXCJcXHUwNjJDXFx1MDY0NVxcdTA2MkRcIixcbiAgXCJcXHVGRDU5XCIsXG4gIFwiXFx1MDYyQ1xcdTA2NDVcXHUwNjJEXCIsXG4gIFwiXFx1RkQ1QVwiLFxuICBcIlxcdTA2MkRcXHUwNjQ1XFx1MDY0QVwiLFxuICBcIlxcdUZENUJcIixcbiAgXCJcXHUwNjJEXFx1MDY0NVxcdTA2NDlcIixcbiAgXCJcXHVGRDVDXCIsXG4gIFwiXFx1MDYzM1xcdTA2MkRcXHUwNjJDXCIsXG4gIFwiXFx1RkQ1RFwiLFxuICBcIlxcdTA2MzNcXHUwNjJDXFx1MDYyRFwiLFxuICBcIlxcdUZENUVcIixcbiAgXCJcXHUwNjMzXFx1MDYyQ1xcdTA2NDlcIixcbiAgXCJcXHVGRDVGXCIsXG4gIFwiXFx1MDYzM1xcdTA2NDVcXHUwNjJEXCIsXG4gIFwiXFx1RkQ2MFwiLFxuICBcIlxcdTA2MzNcXHUwNjQ1XFx1MDYyRFwiLFxuICBcIlxcdUZENjFcIixcbiAgXCJcXHUwNjMzXFx1MDY0NVxcdTA2MkNcIixcbiAgXCJcXHVGRDYyXCIsXG4gIFwiXFx1MDYzM1xcdTA2NDVcXHUwNjQ1XCIsXG4gIFwiXFx1RkQ2M1wiLFxuICBcIlxcdTA2MzNcXHUwNjQ1XFx1MDY0NVwiLFxuICBcIlxcdUZENjRcIixcbiAgXCJcXHUwNjM1XFx1MDYyRFxcdTA2MkRcIixcbiAgXCJcXHVGRDY1XCIsXG4gIFwiXFx1MDYzNVxcdTA2MkRcXHUwNjJEXCIsXG4gIFwiXFx1RkQ2NlwiLFxuICBcIlxcdTA2MzVcXHUwNjQ1XFx1MDY0NVwiLFxuICBcIlxcdUZENjdcIixcbiAgXCJcXHUwNjM0XFx1MDYyRFxcdTA2NDVcIixcbiAgXCJcXHVGRDY4XCIsXG4gIFwiXFx1MDYzNFxcdTA2MkRcXHUwNjQ1XCIsXG4gIFwiXFx1RkQ2OVwiLFxuICBcIlxcdTA2MzRcXHUwNjJDXFx1MDY0QVwiLFxuICBcIlxcdUZENkFcIixcbiAgXCJcXHUwNjM0XFx1MDY0NVxcdTA2MkVcIixcbiAgXCJcXHVGRDZCXCIsXG4gIFwiXFx1MDYzNFxcdTA2NDVcXHUwNjJFXCIsXG4gIFwiXFx1RkQ2Q1wiLFxuICBcIlxcdTA2MzRcXHUwNjQ1XFx1MDY0NVwiLFxuICBcIlxcdUZENkRcIixcbiAgXCJcXHUwNjM0XFx1MDY0NVxcdTA2NDVcIixcbiAgXCJcXHVGRDZFXCIsXG4gIFwiXFx1MDYzNlxcdTA2MkRcXHUwNjQ5XCIsXG4gIFwiXFx1RkQ2RlwiLFxuICBcIlxcdTA2MzZcXHUwNjJFXFx1MDY0NVwiLFxuICBcIlxcdUZENzBcIixcbiAgXCJcXHUwNjM2XFx1MDYyRVxcdTA2NDVcIixcbiAgXCJcXHVGRDcxXCIsXG4gIFwiXFx1MDYzN1xcdTA2NDVcXHUwNjJEXCIsXG4gIFwiXFx1RkQ3MlwiLFxuICBcIlxcdTA2MzdcXHUwNjQ1XFx1MDYyRFwiLFxuICBcIlxcdUZENzNcIixcbiAgXCJcXHUwNjM3XFx1MDY0NVxcdTA2NDVcIixcbiAgXCJcXHVGRDc0XCIsXG4gIFwiXFx1MDYzN1xcdTA2NDVcXHUwNjRBXCIsXG4gIFwiXFx1RkQ3NVwiLFxuICBcIlxcdTA2MzlcXHUwNjJDXFx1MDY0NVwiLFxuICBcIlxcdUZENzZcIixcbiAgXCJcXHUwNjM5XFx1MDY0NVxcdTA2NDVcIixcbiAgXCJcXHVGRDc3XCIsXG4gIFwiXFx1MDYzOVxcdTA2NDVcXHUwNjQ1XCIsXG4gIFwiXFx1RkQ3OFwiLFxuICBcIlxcdTA2MzlcXHUwNjQ1XFx1MDY0OVwiLFxuICBcIlxcdUZENzlcIixcbiAgXCJcXHUwNjNBXFx1MDY0NVxcdTA2NDVcIixcbiAgXCJcXHVGRDdBXCIsXG4gIFwiXFx1MDYzQVxcdTA2NDVcXHUwNjRBXCIsXG4gIFwiXFx1RkQ3QlwiLFxuICBcIlxcdTA2M0FcXHUwNjQ1XFx1MDY0OVwiLFxuICBcIlxcdUZEN0NcIixcbiAgXCJcXHUwNjQxXFx1MDYyRVxcdTA2NDVcIixcbiAgXCJcXHVGRDdEXCIsXG4gIFwiXFx1MDY0MVxcdTA2MkVcXHUwNjQ1XCIsXG4gIFwiXFx1RkQ3RVwiLFxuICBcIlxcdTA2NDJcXHUwNjQ1XFx1MDYyRFwiLFxuICBcIlxcdUZEN0ZcIixcbiAgXCJcXHUwNjQyXFx1MDY0NVxcdTA2NDVcIixcbiAgXCJcXHVGRDgwXCIsXG4gIFwiXFx1MDY0NFxcdTA2MkRcXHUwNjQ1XCIsXG4gIFwiXFx1RkQ4MVwiLFxuICBcIlxcdTA2NDRcXHUwNjJEXFx1MDY0QVwiLFxuICBcIlxcdUZEODJcIixcbiAgXCJcXHUwNjQ0XFx1MDYyRFxcdTA2NDlcIixcbiAgXCJcXHVGRDgzXCIsXG4gIFwiXFx1MDY0NFxcdTA2MkNcXHUwNjJDXCIsXG4gIFwiXFx1RkQ4NFwiLFxuICBcIlxcdTA2NDRcXHUwNjJDXFx1MDYyQ1wiLFxuICBcIlxcdUZEODVcIixcbiAgXCJcXHUwNjQ0XFx1MDYyRVxcdTA2NDVcIixcbiAgXCJcXHVGRDg2XCIsXG4gIFwiXFx1MDY0NFxcdTA2MkVcXHUwNjQ1XCIsXG4gIFwiXFx1RkQ4N1wiLFxuICBcIlxcdTA2NDRcXHUwNjQ1XFx1MDYyRFwiLFxuICBcIlxcdUZEODhcIixcbiAgXCJcXHUwNjQ0XFx1MDY0NVxcdTA2MkRcIixcbiAgXCJcXHVGRDg5XCIsXG4gIFwiXFx1MDY0NVxcdTA2MkRcXHUwNjJDXCIsXG4gIFwiXFx1RkQ4QVwiLFxuICBcIlxcdTA2NDVcXHUwNjJEXFx1MDY0NVwiLFxuICBcIlxcdUZEOEJcIixcbiAgXCJcXHUwNjQ1XFx1MDYyRFxcdTA2NEFcIixcbiAgXCJcXHVGRDhDXCIsXG4gIFwiXFx1MDY0NVxcdTA2MkNcXHUwNjJEXCIsXG4gIFwiXFx1RkQ4RFwiLFxuICBcIlxcdTA2NDVcXHUwNjJDXFx1MDY0NVwiLFxuICBcIlxcdUZEOEVcIixcbiAgXCJcXHUwNjQ1XFx1MDYyRVxcdTA2MkNcIixcbiAgXCJcXHVGRDhGXCIsXG4gIFwiXFx1MDY0NVxcdTA2MkVcXHUwNjQ1XCIsXG4gIFwiXFx1RkQ5MlwiLFxuICBcIlxcdTA2NDVcXHUwNjJDXFx1MDYyRVwiLFxuICBcIlxcdUZEOTNcIixcbiAgXCJcXHUwNjQ3XFx1MDY0NVxcdTA2MkNcIixcbiAgXCJcXHVGRDk0XCIsXG4gIFwiXFx1MDY0N1xcdTA2NDVcXHUwNjQ1XCIsXG4gIFwiXFx1RkQ5NVwiLFxuICBcIlxcdTA2NDZcXHUwNjJEXFx1MDY0NVwiLFxuICBcIlxcdUZEOTZcIixcbiAgXCJcXHUwNjQ2XFx1MDYyRFxcdTA2NDlcIixcbiAgXCJcXHVGRDk3XCIsXG4gIFwiXFx1MDY0NlxcdTA2MkNcXHUwNjQ1XCIsXG4gIFwiXFx1RkQ5OFwiLFxuICBcIlxcdTA2NDZcXHUwNjJDXFx1MDY0NVwiLFxuICBcIlxcdUZEOTlcIixcbiAgXCJcXHUwNjQ2XFx1MDYyQ1xcdTA2NDlcIixcbiAgXCJcXHVGRDlBXCIsXG4gIFwiXFx1MDY0NlxcdTA2NDVcXHUwNjRBXCIsXG4gIFwiXFx1RkQ5QlwiLFxuICBcIlxcdTA2NDZcXHUwNjQ1XFx1MDY0OVwiLFxuICBcIlxcdUZEOUNcIixcbiAgXCJcXHUwNjRBXFx1MDY0NVxcdTA2NDVcIixcbiAgXCJcXHVGRDlEXCIsXG4gIFwiXFx1MDY0QVxcdTA2NDVcXHUwNjQ1XCIsXG4gIFwiXFx1RkQ5RVwiLFxuICBcIlxcdTA2MjhcXHUwNjJFXFx1MDY0QVwiLFxuICBcIlxcdUZEOUZcIixcbiAgXCJcXHUwNjJBXFx1MDYyQ1xcdTA2NEFcIixcbiAgXCJcXHVGREEwXCIsXG4gIFwiXFx1MDYyQVxcdTA2MkNcXHUwNjQ5XCIsXG4gIFwiXFx1RkRBMVwiLFxuICBcIlxcdTA2MkFcXHUwNjJFXFx1MDY0QVwiLFxuICBcIlxcdUZEQTJcIixcbiAgXCJcXHUwNjJBXFx1MDYyRVxcdTA2NDlcIixcbiAgXCJcXHVGREEzXCIsXG4gIFwiXFx1MDYyQVxcdTA2NDVcXHUwNjRBXCIsXG4gIFwiXFx1RkRBNFwiLFxuICBcIlxcdTA2MkFcXHUwNjQ1XFx1MDY0OVwiLFxuICBcIlxcdUZEQTVcIixcbiAgXCJcXHUwNjJDXFx1MDY0NVxcdTA2NEFcIixcbiAgXCJcXHVGREE2XCIsXG4gIFwiXFx1MDYyQ1xcdTA2MkRcXHUwNjQ5XCIsXG4gIFwiXFx1RkRBN1wiLFxuICBcIlxcdTA2MkNcXHUwNjQ1XFx1MDY0OVwiLFxuICBcIlxcdUZEQThcIixcbiAgXCJcXHUwNjMzXFx1MDYyRVxcdTA2NDlcIixcbiAgXCJcXHVGREE5XCIsXG4gIFwiXFx1MDYzNVxcdTA2MkRcXHUwNjRBXCIsXG4gIFwiXFx1RkRBQVwiLFxuICBcIlxcdTA2MzRcXHUwNjJEXFx1MDY0QVwiLFxuICBcIlxcdUZEQUJcIixcbiAgXCJcXHUwNjM2XFx1MDYyRFxcdTA2NEFcIixcbiAgXCJcXHVGREFDXCIsXG4gIFwiXFx1MDY0NFxcdTA2MkNcXHUwNjRBXCIsXG4gIFwiXFx1RkRBRFwiLFxuICBcIlxcdTA2NDRcXHUwNjQ1XFx1MDY0QVwiLFxuICBcIlxcdUZEQUVcIixcbiAgXCJcXHUwNjRBXFx1MDYyRFxcdTA2NEFcIixcbiAgXCJcXHVGREFGXCIsXG4gIFwiXFx1MDY0QVxcdTA2MkNcXHUwNjRBXCIsXG4gIFwiXFx1RkRCMFwiLFxuICBcIlxcdTA2NEFcXHUwNjQ1XFx1MDY0QVwiLFxuICBcIlxcdUZEQjFcIixcbiAgXCJcXHUwNjQ1XFx1MDY0NVxcdTA2NEFcIixcbiAgXCJcXHVGREIyXCIsXG4gIFwiXFx1MDY0MlxcdTA2NDVcXHUwNjRBXCIsXG4gIFwiXFx1RkRCM1wiLFxuICBcIlxcdTA2NDZcXHUwNjJEXFx1MDY0QVwiLFxuICBcIlxcdUZEQjRcIixcbiAgXCJcXHUwNjQyXFx1MDY0NVxcdTA2MkRcIixcbiAgXCJcXHVGREI1XCIsXG4gIFwiXFx1MDY0NFxcdTA2MkRcXHUwNjQ1XCIsXG4gIFwiXFx1RkRCNlwiLFxuICBcIlxcdTA2MzlcXHUwNjQ1XFx1MDY0QVwiLFxuICBcIlxcdUZEQjdcIixcbiAgXCJcXHUwNjQzXFx1MDY0NVxcdTA2NEFcIixcbiAgXCJcXHVGREI4XCIsXG4gIFwiXFx1MDY0NlxcdTA2MkNcXHUwNjJEXCIsXG4gIFwiXFx1RkRCOVwiLFxuICBcIlxcdTA2NDVcXHUwNjJFXFx1MDY0QVwiLFxuICBcIlxcdUZEQkFcIixcbiAgXCJcXHUwNjQ0XFx1MDYyQ1xcdTA2NDVcIixcbiAgXCJcXHVGREJCXCIsXG4gIFwiXFx1MDY0M1xcdTA2NDVcXHUwNjQ1XCIsXG4gIFwiXFx1RkRCQ1wiLFxuICBcIlxcdTA2NDRcXHUwNjJDXFx1MDY0NVwiLFxuICBcIlxcdUZEQkRcIixcbiAgXCJcXHUwNjQ2XFx1MDYyQ1xcdTA2MkRcIixcbiAgXCJcXHVGREJFXCIsXG4gIFwiXFx1MDYyQ1xcdTA2MkRcXHUwNjRBXCIsXG4gIFwiXFx1RkRCRlwiLFxuICBcIlxcdTA2MkRcXHUwNjJDXFx1MDY0QVwiLFxuICBcIlxcdUZEQzBcIixcbiAgXCJcXHUwNjQ1XFx1MDYyQ1xcdTA2NEFcIixcbiAgXCJcXHVGREMxXCIsXG4gIFwiXFx1MDY0MVxcdTA2NDVcXHUwNjRBXCIsXG4gIFwiXFx1RkRDMlwiLFxuICBcIlxcdTA2MjhcXHUwNjJEXFx1MDY0QVwiLFxuICBcIlxcdUZEQzNcIixcbiAgXCJcXHUwNjQzXFx1MDY0NVxcdTA2NDVcIixcbiAgXCJcXHVGREM0XCIsXG4gIFwiXFx1MDYzOVxcdTA2MkNcXHUwNjQ1XCIsXG4gIFwiXFx1RkRDNVwiLFxuICBcIlxcdTA2MzVcXHUwNjQ1XFx1MDY0NVwiLFxuICBcIlxcdUZEQzZcIixcbiAgXCJcXHUwNjMzXFx1MDYyRVxcdTA2NEFcIixcbiAgXCJcXHVGREM3XCIsXG4gIFwiXFx1MDY0NlxcdTA2MkNcXHUwNjRBXCIsXG4gIFwiXFx1RkU0OVwiLFxuICBcIlxcdTIwM0VcIixcbiAgXCJcXHVGRTRBXCIsXG4gIFwiXFx1MjAzRVwiLFxuICBcIlxcdUZFNEJcIixcbiAgXCJcXHUyMDNFXCIsXG4gIFwiXFx1RkU0Q1wiLFxuICBcIlxcdTIwM0VcIixcbiAgXCJcXHVGRTREXCIsXG4gIFwiXFx1MDA1RlwiLFxuICBcIlxcdUZFNEVcIixcbiAgXCJcXHUwMDVGXCIsXG4gIFwiXFx1RkU0RlwiLFxuICBcIlxcdTAwNUZcIixcbiAgXCJcXHVGRTgwXCIsXG4gIFwiXFx1MDYyMVwiLFxuICBcIlxcdUZFODFcIixcbiAgXCJcXHUwNjIyXCIsXG4gIFwiXFx1RkU4MlwiLFxuICBcIlxcdTA2MjJcIixcbiAgXCJcXHVGRTgzXCIsXG4gIFwiXFx1MDYyM1wiLFxuICBcIlxcdUZFODRcIixcbiAgXCJcXHUwNjIzXCIsXG4gIFwiXFx1RkU4NVwiLFxuICBcIlxcdTA2MjRcIixcbiAgXCJcXHVGRTg2XCIsXG4gIFwiXFx1MDYyNFwiLFxuICBcIlxcdUZFODdcIixcbiAgXCJcXHUwNjI1XCIsXG4gIFwiXFx1RkU4OFwiLFxuICBcIlxcdTA2MjVcIixcbiAgXCJcXHVGRTg5XCIsXG4gIFwiXFx1MDYyNlwiLFxuICBcIlxcdUZFOEFcIixcbiAgXCJcXHUwNjI2XCIsXG4gIFwiXFx1RkU4QlwiLFxuICBcIlxcdTA2MjZcIixcbiAgXCJcXHVGRThDXCIsXG4gIFwiXFx1MDYyNlwiLFxuICBcIlxcdUZFOERcIixcbiAgXCJcXHUwNjI3XCIsXG4gIFwiXFx1RkU4RVwiLFxuICBcIlxcdTA2MjdcIixcbiAgXCJcXHVGRThGXCIsXG4gIFwiXFx1MDYyOFwiLFxuICBcIlxcdUZFOTBcIixcbiAgXCJcXHUwNjI4XCIsXG4gIFwiXFx1RkU5MVwiLFxuICBcIlxcdTA2MjhcIixcbiAgXCJcXHVGRTkyXCIsXG4gIFwiXFx1MDYyOFwiLFxuICBcIlxcdUZFOTNcIixcbiAgXCJcXHUwNjI5XCIsXG4gIFwiXFx1RkU5NFwiLFxuICBcIlxcdTA2MjlcIixcbiAgXCJcXHVGRTk1XCIsXG4gIFwiXFx1MDYyQVwiLFxuICBcIlxcdUZFOTZcIixcbiAgXCJcXHUwNjJBXCIsXG4gIFwiXFx1RkU5N1wiLFxuICBcIlxcdTA2MkFcIixcbiAgXCJcXHVGRTk4XCIsXG4gIFwiXFx1MDYyQVwiLFxuICBcIlxcdUZFOTlcIixcbiAgXCJcXHUwNjJCXCIsXG4gIFwiXFx1RkU5QVwiLFxuICBcIlxcdTA2MkJcIixcbiAgXCJcXHVGRTlCXCIsXG4gIFwiXFx1MDYyQlwiLFxuICBcIlxcdUZFOUNcIixcbiAgXCJcXHUwNjJCXCIsXG4gIFwiXFx1RkU5RFwiLFxuICBcIlxcdTA2MkNcIixcbiAgXCJcXHVGRTlFXCIsXG4gIFwiXFx1MDYyQ1wiLFxuICBcIlxcdUZFOUZcIixcbiAgXCJcXHUwNjJDXCIsXG4gIFwiXFx1RkVBMFwiLFxuICBcIlxcdTA2MkNcIixcbiAgXCJcXHVGRUExXCIsXG4gIFwiXFx1MDYyRFwiLFxuICBcIlxcdUZFQTJcIixcbiAgXCJcXHUwNjJEXCIsXG4gIFwiXFx1RkVBM1wiLFxuICBcIlxcdTA2MkRcIixcbiAgXCJcXHVGRUE0XCIsXG4gIFwiXFx1MDYyRFwiLFxuICBcIlxcdUZFQTVcIixcbiAgXCJcXHUwNjJFXCIsXG4gIFwiXFx1RkVBNlwiLFxuICBcIlxcdTA2MkVcIixcbiAgXCJcXHVGRUE3XCIsXG4gIFwiXFx1MDYyRVwiLFxuICBcIlxcdUZFQThcIixcbiAgXCJcXHUwNjJFXCIsXG4gIFwiXFx1RkVBOVwiLFxuICBcIlxcdTA2MkZcIixcbiAgXCJcXHVGRUFBXCIsXG4gIFwiXFx1MDYyRlwiLFxuICBcIlxcdUZFQUJcIixcbiAgXCJcXHUwNjMwXCIsXG4gIFwiXFx1RkVBQ1wiLFxuICBcIlxcdTA2MzBcIixcbiAgXCJcXHVGRUFEXCIsXG4gIFwiXFx1MDYzMVwiLFxuICBcIlxcdUZFQUVcIixcbiAgXCJcXHUwNjMxXCIsXG4gIFwiXFx1RkVBRlwiLFxuICBcIlxcdTA2MzJcIixcbiAgXCJcXHVGRUIwXCIsXG4gIFwiXFx1MDYzMlwiLFxuICBcIlxcdUZFQjFcIixcbiAgXCJcXHUwNjMzXCIsXG4gIFwiXFx1RkVCMlwiLFxuICBcIlxcdTA2MzNcIixcbiAgXCJcXHVGRUIzXCIsXG4gIFwiXFx1MDYzM1wiLFxuICBcIlxcdUZFQjRcIixcbiAgXCJcXHUwNjMzXCIsXG4gIFwiXFx1RkVCNVwiLFxuICBcIlxcdTA2MzRcIixcbiAgXCJcXHVGRUI2XCIsXG4gIFwiXFx1MDYzNFwiLFxuICBcIlxcdUZFQjdcIixcbiAgXCJcXHUwNjM0XCIsXG4gIFwiXFx1RkVCOFwiLFxuICBcIlxcdTA2MzRcIixcbiAgXCJcXHVGRUI5XCIsXG4gIFwiXFx1MDYzNVwiLFxuICBcIlxcdUZFQkFcIixcbiAgXCJcXHUwNjM1XCIsXG4gIFwiXFx1RkVCQlwiLFxuICBcIlxcdTA2MzVcIixcbiAgXCJcXHVGRUJDXCIsXG4gIFwiXFx1MDYzNVwiLFxuICBcIlxcdUZFQkRcIixcbiAgXCJcXHUwNjM2XCIsXG4gIFwiXFx1RkVCRVwiLFxuICBcIlxcdTA2MzZcIixcbiAgXCJcXHVGRUJGXCIsXG4gIFwiXFx1MDYzNlwiLFxuICBcIlxcdUZFQzBcIixcbiAgXCJcXHUwNjM2XCIsXG4gIFwiXFx1RkVDMVwiLFxuICBcIlxcdTA2MzdcIixcbiAgXCJcXHVGRUMyXCIsXG4gIFwiXFx1MDYzN1wiLFxuICBcIlxcdUZFQzNcIixcbiAgXCJcXHUwNjM3XCIsXG4gIFwiXFx1RkVDNFwiLFxuICBcIlxcdTA2MzdcIixcbiAgXCJcXHVGRUM1XCIsXG4gIFwiXFx1MDYzOFwiLFxuICBcIlxcdUZFQzZcIixcbiAgXCJcXHUwNjM4XCIsXG4gIFwiXFx1RkVDN1wiLFxuICBcIlxcdTA2MzhcIixcbiAgXCJcXHVGRUM4XCIsXG4gIFwiXFx1MDYzOFwiLFxuICBcIlxcdUZFQzlcIixcbiAgXCJcXHUwNjM5XCIsXG4gIFwiXFx1RkVDQVwiLFxuICBcIlxcdTA2MzlcIixcbiAgXCJcXHVGRUNCXCIsXG4gIFwiXFx1MDYzOVwiLFxuICBcIlxcdUZFQ0NcIixcbiAgXCJcXHUwNjM5XCIsXG4gIFwiXFx1RkVDRFwiLFxuICBcIlxcdTA2M0FcIixcbiAgXCJcXHVGRUNFXCIsXG4gIFwiXFx1MDYzQVwiLFxuICBcIlxcdUZFQ0ZcIixcbiAgXCJcXHUwNjNBXCIsXG4gIFwiXFx1RkVEMFwiLFxuICBcIlxcdTA2M0FcIixcbiAgXCJcXHVGRUQxXCIsXG4gIFwiXFx1MDY0MVwiLFxuICBcIlxcdUZFRDJcIixcbiAgXCJcXHUwNjQxXCIsXG4gIFwiXFx1RkVEM1wiLFxuICBcIlxcdTA2NDFcIixcbiAgXCJcXHVGRUQ0XCIsXG4gIFwiXFx1MDY0MVwiLFxuICBcIlxcdUZFRDVcIixcbiAgXCJcXHUwNjQyXCIsXG4gIFwiXFx1RkVENlwiLFxuICBcIlxcdTA2NDJcIixcbiAgXCJcXHVGRUQ3XCIsXG4gIFwiXFx1MDY0MlwiLFxuICBcIlxcdUZFRDhcIixcbiAgXCJcXHUwNjQyXCIsXG4gIFwiXFx1RkVEOVwiLFxuICBcIlxcdTA2NDNcIixcbiAgXCJcXHVGRURBXCIsXG4gIFwiXFx1MDY0M1wiLFxuICBcIlxcdUZFREJcIixcbiAgXCJcXHUwNjQzXCIsXG4gIFwiXFx1RkVEQ1wiLFxuICBcIlxcdTA2NDNcIixcbiAgXCJcXHVGRUREXCIsXG4gIFwiXFx1MDY0NFwiLFxuICBcIlxcdUZFREVcIixcbiAgXCJcXHUwNjQ0XCIsXG4gIFwiXFx1RkVERlwiLFxuICBcIlxcdTA2NDRcIixcbiAgXCJcXHVGRUUwXCIsXG4gIFwiXFx1MDY0NFwiLFxuICBcIlxcdUZFRTFcIixcbiAgXCJcXHUwNjQ1XCIsXG4gIFwiXFx1RkVFMlwiLFxuICBcIlxcdTA2NDVcIixcbiAgXCJcXHVGRUUzXCIsXG4gIFwiXFx1MDY0NVwiLFxuICBcIlxcdUZFRTRcIixcbiAgXCJcXHUwNjQ1XCIsXG4gIFwiXFx1RkVFNVwiLFxuICBcIlxcdTA2NDZcIixcbiAgXCJcXHVGRUU2XCIsXG4gIFwiXFx1MDY0NlwiLFxuICBcIlxcdUZFRTdcIixcbiAgXCJcXHUwNjQ2XCIsXG4gIFwiXFx1RkVFOFwiLFxuICBcIlxcdTA2NDZcIixcbiAgXCJcXHVGRUU5XCIsXG4gIFwiXFx1MDY0N1wiLFxuICBcIlxcdUZFRUFcIixcbiAgXCJcXHUwNjQ3XCIsXG4gIFwiXFx1RkVFQlwiLFxuICBcIlxcdTA2NDdcIixcbiAgXCJcXHVGRUVDXCIsXG4gIFwiXFx1MDY0N1wiLFxuICBcIlxcdUZFRURcIixcbiAgXCJcXHUwNjQ4XCIsXG4gIFwiXFx1RkVFRVwiLFxuICBcIlxcdTA2NDhcIixcbiAgXCJcXHVGRUVGXCIsXG4gIFwiXFx1MDY0OVwiLFxuICBcIlxcdUZFRjBcIixcbiAgXCJcXHUwNjQ5XCIsXG4gIFwiXFx1RkVGMVwiLFxuICBcIlxcdTA2NEFcIixcbiAgXCJcXHVGRUYyXCIsXG4gIFwiXFx1MDY0QVwiLFxuICBcIlxcdUZFRjNcIixcbiAgXCJcXHUwNjRBXCIsXG4gIFwiXFx1RkVGNFwiLFxuICBcIlxcdTA2NEFcIixcbiAgXCJcXHVGRUY1XCIsXG4gIFwiXFx1MDY0NFxcdTA2MjJcIixcbiAgXCJcXHVGRUY2XCIsXG4gIFwiXFx1MDY0NFxcdTA2MjJcIixcbiAgXCJcXHVGRUY3XCIsXG4gIFwiXFx1MDY0NFxcdTA2MjNcIixcbiAgXCJcXHVGRUY4XCIsXG4gIFwiXFx1MDY0NFxcdTA2MjNcIixcbiAgXCJcXHVGRUY5XCIsXG4gIFwiXFx1MDY0NFxcdTA2MjVcIixcbiAgXCJcXHVGRUZBXCIsXG4gIFwiXFx1MDY0NFxcdTA2MjVcIixcbiAgXCJcXHVGRUZCXCIsXG4gIFwiXFx1MDY0NFxcdTA2MjdcIixcbiAgXCJcXHVGRUZDXCIsXG4gIFwiXFx1MDY0NFxcdTA2MjdcIlxuIF07XG59KTtcbmZ1bmN0aW9uIHJldmVyc2VJZlJ0bChjaGFycykge1xuIGNvbnN0IGNoYXJzTGVuZ3RoID0gY2hhcnMubGVuZ3RoO1xuIGlmIChjaGFyc0xlbmd0aCA8PSAxIHx8ICFpc1JUTFJhbmdlRm9yKGNoYXJzLmNoYXJDb2RlQXQoMCkpKSB7XG4gIHJldHVybiBjaGFycztcbiB9XG4gY29uc3QgYnVmID0gW107XG4gZm9yIChsZXQgaWkgPSBjaGFyc0xlbmd0aCAtIDE7IGlpID49IDA7IGlpLS0pIHtcbiAgYnVmLnB1c2goY2hhcnNbaWldKTtcbiB9XG4gcmV0dXJuIGJ1Zi5qb2luKFwiXCIpO1xufVxuXG5cbi8qKiovIH0pLFxuLyogMjIgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuTWFya3VwQW5ub3RhdGlvbiA9IGV4cG9ydHMuQW5ub3RhdGlvbkZhY3RvcnkgPSBleHBvcnRzLkFubm90YXRpb25Cb3JkZXJTdHlsZSA9IGV4cG9ydHMuQW5ub3RhdGlvbiA9IHZvaWQgMDtcbmV4cG9ydHMuZ2V0UXVhZFBvaW50cyA9IGdldFF1YWRQb2ludHM7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfY29yZV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oOSk7XG5cbnZhciBfZGVmYXVsdF9hcHBlYXJhbmNlID0gX193X3BkZmpzX3JlcXVpcmVfXygyMyk7XG5cbnZhciBfcHJpbWl0aXZlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNSk7XG5cbnZhciBfYmlkaSA9IF9fd19wZGZqc19yZXF1aXJlX18oNTkpO1xuXG52YXIgX2NhdGFsb2cgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDY0KTtcblxudmFyIF9jb2xvcnNwYWNlID0gX193X3BkZmpzX3JlcXVpcmVfXygyNCk7XG5cbnZhciBfZmlsZV9zcGVjID0gX193X3BkZmpzX3JlcXVpcmVfXyg2Nik7XG5cbnZhciBfb2JqZWN0X2xvYWRlciA9IF9fd19wZGZqc19yZXF1aXJlX18oNzApO1xuXG52YXIgX29wZXJhdG9yX2xpc3QgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDYyKTtcblxudmFyIF9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEwKTtcblxudmFyIF93cml0ZXIgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDcxKTtcblxudmFyIF9mYWN0b3J5ID0gX193X3BkZmpzX3JlcXVpcmVfXyg3NCk7XG5cbmNsYXNzIEFubm90YXRpb25GYWN0b3J5IHtcbiAgc3RhdGljIGNyZWF0ZSh4cmVmLCByZWYsIHBkZk1hbmFnZXIsIGlkRmFjdG9yeSwgY29sbGVjdEZpZWxkcykge1xuICAgIHJldHVybiBQcm9taXNlLmFsbChbcGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKFwiYWNyb0Zvcm1cIiksIGNvbGxlY3RGaWVsZHMgPyB0aGlzLl9nZXRQYWdlSW5kZXgoeHJlZiwgcmVmLCBwZGZNYW5hZ2VyKSA6IC0xXSkudGhlbigoW2Fjcm9Gb3JtLCBwYWdlSW5kZXhdKSA9PiBwZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCBcIl9jcmVhdGVcIiwgW3hyZWYsIHJlZiwgcGRmTWFuYWdlciwgaWRGYWN0b3J5LCBhY3JvRm9ybSwgY29sbGVjdEZpZWxkcywgcGFnZUluZGV4XSkpO1xuICB9XG5cbiAgc3RhdGljIF9jcmVhdGUoeHJlZiwgcmVmLCBwZGZNYW5hZ2VyLCBpZEZhY3RvcnksIGFjcm9Gb3JtLCBjb2xsZWN0RmllbGRzLCBwYWdlSW5kZXggPSAtMSkge1xuICAgIGNvbnN0IGRpY3QgPSB4cmVmLmZldGNoSWZSZWYocmVmKTtcblxuICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoZGljdCkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgaWQgPSAoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKHJlZikgPyByZWYudG9TdHJpbmcoKSA6IGBhbm5vdF8ke2lkRmFjdG9yeS5jcmVhdGVPYmpJZCgpfWA7XG4gICAgbGV0IHN1YnR5cGUgPSBkaWN0LmdldChcIlN1YnR5cGVcIik7XG4gICAgc3VidHlwZSA9ICgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHN1YnR5cGUpID8gc3VidHlwZS5uYW1lIDogbnVsbDtcbiAgICBjb25zdCBwYXJhbWV0ZXJzID0ge1xuICAgICAgeHJlZixcbiAgICAgIHJlZixcbiAgICAgIGRpY3QsXG4gICAgICBzdWJ0eXBlLFxuICAgICAgaWQsXG4gICAgICBwZGZNYW5hZ2VyLFxuICAgICAgYWNyb0Zvcm06IGFjcm9Gb3JtIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCA/IGFjcm9Gb3JtIDogX3ByaW1pdGl2ZXMuRGljdC5lbXB0eSxcbiAgICAgIGNvbGxlY3RGaWVsZHMsXG4gICAgICBwYWdlSW5kZXhcbiAgICB9O1xuXG4gICAgc3dpdGNoIChzdWJ0eXBlKSB7XG4gICAgICBjYXNlIFwiTGlua1wiOlxuICAgICAgICByZXR1cm4gbmV3IExpbmtBbm5vdGF0aW9uKHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIFwiVGV4dFwiOlxuICAgICAgICByZXR1cm4gbmV3IFRleHRBbm5vdGF0aW9uKHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIFwiV2lkZ2V0XCI6XG4gICAgICAgIGxldCBmaWVsZFR5cGUgPSAoMCwgX2NvcmVfdXRpbHMuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe1xuICAgICAgICAgIGRpY3QsXG4gICAgICAgICAga2V5OiBcIkZUXCJcbiAgICAgICAgfSk7XG4gICAgICAgIGZpZWxkVHlwZSA9ICgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGZpZWxkVHlwZSkgPyBmaWVsZFR5cGUubmFtZSA6IG51bGw7XG5cbiAgICAgICAgc3dpdGNoIChmaWVsZFR5cGUpIHtcbiAgICAgICAgICBjYXNlIFwiVHhcIjpcbiAgICAgICAgICAgIHJldHVybiBuZXcgVGV4dFdpZGdldEFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgICAgICBjYXNlIFwiQnRuXCI6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEJ1dHRvbldpZGdldEFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgICAgICBjYXNlIFwiQ2hcIjpcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ2hvaWNlV2lkZ2V0QW5ub3RhdGlvbihwYXJhbWV0ZXJzKTtcblxuICAgICAgICAgIGNhc2UgXCJTaWdcIjpcbiAgICAgICAgICAgIHJldHVybiBuZXcgU2lnbmF0dXJlV2lkZ2V0QW5ub3RhdGlvbihwYXJhbWV0ZXJzKTtcbiAgICAgICAgfVxuXG4gICAgICAgICgwLCBfdXRpbC53YXJuKShgVW5pbXBsZW1lbnRlZCB3aWRnZXQgZmllbGQgdHlwZSBcIiR7ZmllbGRUeXBlfVwiLCBgICsgXCJmYWxsaW5nIGJhY2sgdG8gYmFzZSBmaWVsZCB0eXBlLlwiKTtcbiAgICAgICAgcmV0dXJuIG5ldyBXaWRnZXRBbm5vdGF0aW9uKHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIFwiUG9wdXBcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBQb3B1cEFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgXCJGcmVlVGV4dFwiOlxuICAgICAgICByZXR1cm4gbmV3IEZyZWVUZXh0QW5ub3RhdGlvbihwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSBcIkxpbmVcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBMaW5lQW5ub3RhdGlvbihwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSBcIlNxdWFyZVwiOlxuICAgICAgICByZXR1cm4gbmV3IFNxdWFyZUFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgXCJDaXJjbGVcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBDaXJjbGVBbm5vdGF0aW9uKHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIFwiUG9seUxpbmVcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBQb2x5bGluZUFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgXCJQb2x5Z29uXCI6XG4gICAgICAgIHJldHVybiBuZXcgUG9seWdvbkFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgXCJDYXJldFwiOlxuICAgICAgICByZXR1cm4gbmV3IENhcmV0QW5ub3RhdGlvbihwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSBcIklua1wiOlxuICAgICAgICByZXR1cm4gbmV3IElua0Fubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgIGNhc2UgXCJIaWdobGlnaHRcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBIaWdobGlnaHRBbm5vdGF0aW9uKHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIFwiVW5kZXJsaW5lXCI6XG4gICAgICAgIHJldHVybiBuZXcgVW5kZXJsaW5lQW5ub3RhdGlvbihwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSBcIlNxdWlnZ2x5XCI6XG4gICAgICAgIHJldHVybiBuZXcgU3F1aWdnbHlBbm5vdGF0aW9uKHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIFwiU3RyaWtlT3V0XCI6XG4gICAgICAgIHJldHVybiBuZXcgU3RyaWtlT3V0QW5ub3RhdGlvbihwYXJhbWV0ZXJzKTtcblxuICAgICAgY2FzZSBcIlN0YW1wXCI6XG4gICAgICAgIHJldHVybiBuZXcgU3RhbXBBbm5vdGF0aW9uKHBhcmFtZXRlcnMpO1xuXG4gICAgICBjYXNlIFwiRmlsZUF0dGFjaG1lbnRcIjpcbiAgICAgICAgcmV0dXJuIG5ldyBGaWxlQXR0YWNobWVudEFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmICghY29sbGVjdEZpZWxkcykge1xuICAgICAgICAgIGlmICghc3VidHlwZSkge1xuICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiQW5ub3RhdGlvbiBpcyBtaXNzaW5nIHRoZSByZXF1aXJlZCAvU3VidHlwZS5cIik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgVW5pbXBsZW1lbnRlZCBhbm5vdGF0aW9uIHR5cGUgXCIke3N1YnR5cGV9XCIsIGAgKyBcImZhbGxpbmcgYmFjayB0byBiYXNlIGFubm90YXRpb24uXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgQW5ub3RhdGlvbihwYXJhbWV0ZXJzKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgX2dldFBhZ2VJbmRleCh4cmVmLCByZWYsIHBkZk1hbmFnZXIpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYW5ub3REaWN0ID0gYXdhaXQgeHJlZi5mZXRjaElmUmVmQXN5bmMocmVmKTtcblxuICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShhbm5vdERpY3QpKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFnZVJlZiA9IGFubm90RGljdC5nZXRSYXcoXCJQXCIpO1xuXG4gICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc1JlZikocGFnZVJlZikpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwYWdlSW5kZXggPSBhd2FpdCBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coXCJnZXRQYWdlSW5kZXhcIiwgW3BhZ2VSZWZdKTtcbiAgICAgIHJldHVybiBwYWdlSW5kZXg7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShgX2dldFBhZ2VJbmRleDogXCIke2V4fVwiLmApO1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgfVxuXG59XG5cbmV4cG9ydHMuQW5ub3RhdGlvbkZhY3RvcnkgPSBBbm5vdGF0aW9uRmFjdG9yeTtcblxuZnVuY3Rpb24gZ2V0UmdiQ29sb3IoY29sb3IsIGRlZmF1bHRDb2xvciA9IG5ldyBVaW50OENsYW1wZWRBcnJheSgzKSkge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoY29sb3IpKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRDb2xvcjtcbiAgfVxuXG4gIGNvbnN0IHJnYkNvbG9yID0gZGVmYXVsdENvbG9yIHx8IG5ldyBVaW50OENsYW1wZWRBcnJheSgzKTtcblxuICBzd2l0Y2ggKGNvbG9yLmxlbmd0aCkge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSAxOlxuICAgICAgX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXkuZ2V0UmdiSXRlbShjb2xvciwgMCwgcmdiQ29sb3IsIDApO1xuXG4gICAgICByZXR1cm4gcmdiQ29sb3I7XG5cbiAgICBjYXNlIDM6XG4gICAgICBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLmdldFJnYkl0ZW0oY29sb3IsIDAsIHJnYkNvbG9yLCAwKTtcblxuICAgICAgcmV0dXJuIHJnYkNvbG9yO1xuXG4gICAgY2FzZSA0OlxuICAgICAgX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmNteWsuZ2V0UmdiSXRlbShjb2xvciwgMCwgcmdiQ29sb3IsIDApO1xuXG4gICAgICByZXR1cm4gcmdiQ29sb3I7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGRlZmF1bHRDb2xvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRRdWFkUG9pbnRzKGRpY3QsIHJlY3QpIHtcbiAgaWYgKCFkaWN0LmhhcyhcIlF1YWRQb2ludHNcIikpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHF1YWRQb2ludHMgPSBkaWN0LmdldEFycmF5KFwiUXVhZFBvaW50c1wiKTtcblxuICBpZiAoIUFycmF5LmlzQXJyYXkocXVhZFBvaW50cykgfHwgcXVhZFBvaW50cy5sZW5ndGggPT09IDAgfHwgcXVhZFBvaW50cy5sZW5ndGggJSA4ID4gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgcXVhZFBvaW50c0xpc3RzID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDAsIGlpID0gcXVhZFBvaW50cy5sZW5ndGggLyA4OyBpIDwgaWk7IGkrKykge1xuICAgIHF1YWRQb2ludHNMaXN0cy5wdXNoKFtdKTtcblxuICAgIGZvciAobGV0IGogPSBpICogOCwgamogPSBpICogOCArIDg7IGogPCBqajsgaiArPSAyKSB7XG4gICAgICBjb25zdCB4ID0gcXVhZFBvaW50c1tqXTtcbiAgICAgIGNvbnN0IHkgPSBxdWFkUG9pbnRzW2ogKyAxXTtcblxuICAgICAgaWYgKHJlY3QgIT09IG51bGwgJiYgKHggPCByZWN0WzBdIHx8IHggPiByZWN0WzJdIHx8IHkgPCByZWN0WzFdIHx8IHkgPiByZWN0WzNdKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcXVhZFBvaW50c0xpc3RzW2ldLnB1c2goe1xuICAgICAgICB4LFxuICAgICAgICB5XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcXVhZFBvaW50c0xpc3RzLm1hcChxdWFkUG9pbnRzTGlzdCA9PiB7XG4gICAgY29uc3QgW21pblgsIG1heFgsIG1pblksIG1heFldID0gcXVhZFBvaW50c0xpc3QucmVkdWNlKChbbVgsIE1YLCBtWSwgTVldLCBxdWFkUG9pbnQpID0+IFtNYXRoLm1pbihtWCwgcXVhZFBvaW50LngpLCBNYXRoLm1heChNWCwgcXVhZFBvaW50LngpLCBNYXRoLm1pbihtWSwgcXVhZFBvaW50LnkpLCBNYXRoLm1heChNWSwgcXVhZFBvaW50LnkpXSwgW051bWJlci5NQVhfVkFMVUUsIE51bWJlci5NSU5fVkFMVUUsIE51bWJlci5NQVhfVkFMVUUsIE51bWJlci5NSU5fVkFMVUVdKTtcbiAgICByZXR1cm4gW3tcbiAgICAgIHg6IG1pblgsXG4gICAgICB5OiBtYXhZXG4gICAgfSwge1xuICAgICAgeDogbWF4WCxcbiAgICAgIHk6IG1heFlcbiAgICB9LCB7XG4gICAgICB4OiBtaW5YLFxuICAgICAgeTogbWluWVxuICAgIH0sIHtcbiAgICAgIHg6IG1heFgsXG4gICAgICB5OiBtaW5ZXG4gICAgfV07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRUcmFuc2Zvcm1NYXRyaXgocmVjdCwgYmJveCwgbWF0cml4KSB7XG4gIGNvbnN0IFttaW5YLCBtaW5ZLCBtYXhYLCBtYXhZXSA9IF91dGlsLlV0aWwuZ2V0QXhpYWxBbGlnbmVkQm91bmRpbmdCb3goYmJveCwgbWF0cml4KTtcblxuICBpZiAobWluWCA9PT0gbWF4WCB8fCBtaW5ZID09PSBtYXhZKSB7XG4gICAgcmV0dXJuIFsxLCAwLCAwLCAxLCByZWN0WzBdLCByZWN0WzFdXTtcbiAgfVxuXG4gIGNvbnN0IHhSYXRpbyA9IChyZWN0WzJdIC0gcmVjdFswXSkgLyAobWF4WCAtIG1pblgpO1xuICBjb25zdCB5UmF0aW8gPSAocmVjdFszXSAtIHJlY3RbMV0pIC8gKG1heFkgLSBtaW5ZKTtcbiAgcmV0dXJuIFt4UmF0aW8sIDAsIDAsIHlSYXRpbywgcmVjdFswXSAtIG1pblggKiB4UmF0aW8sIHJlY3RbMV0gLSBtaW5ZICogeVJhdGlvXTtcbn1cblxuY2xhc3MgQW5ub3RhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtcykge1xuICAgIGNvbnN0IGRpY3QgPSBwYXJhbXMuZGljdDtcbiAgICB0aGlzLnNldFRpdGxlKGRpY3QuZ2V0KFwiVFwiKSk7XG4gICAgdGhpcy5zZXRDb250ZW50cyhkaWN0LmdldChcIkNvbnRlbnRzXCIpKTtcbiAgICB0aGlzLnNldE1vZGlmaWNhdGlvbkRhdGUoZGljdC5nZXQoXCJNXCIpKTtcbiAgICB0aGlzLnNldEZsYWdzKGRpY3QuZ2V0KFwiRlwiKSk7XG4gICAgdGhpcy5zZXRSZWN0YW5nbGUoZGljdC5nZXRBcnJheShcIlJlY3RcIikpO1xuICAgIHRoaXMuc2V0Q29sb3IoZGljdC5nZXRBcnJheShcIkNcIikpO1xuICAgIHRoaXMuc2V0Qm9yZGVyU3R5bGUoZGljdCk7XG4gICAgdGhpcy5zZXRBcHBlYXJhbmNlKGRpY3QpO1xuICAgIHRoaXMuc2V0Qm9yZGVyQW5kQmFja2dyb3VuZENvbG9ycyhkaWN0LmdldChcIk1LXCIpKTtcbiAgICB0aGlzLl9zdHJlYW1zID0gW107XG5cbiAgICBpZiAodGhpcy5hcHBlYXJhbmNlKSB7XG4gICAgICB0aGlzLl9zdHJlYW1zLnB1c2godGhpcy5hcHBlYXJhbmNlKTtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGEgPSB7XG4gICAgICBhbm5vdGF0aW9uRmxhZ3M6IHRoaXMuZmxhZ3MsXG4gICAgICBib3JkZXJTdHlsZTogdGhpcy5ib3JkZXJTdHlsZSxcbiAgICAgIGNvbG9yOiB0aGlzLmNvbG9yLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGlzLmJhY2tncm91bmRDb2xvcixcbiAgICAgIGJvcmRlckNvbG9yOiB0aGlzLmJvcmRlckNvbG9yLFxuICAgICAgY29udGVudHNPYmo6IHRoaXMuX2NvbnRlbnRzLFxuICAgICAgaGFzQXBwZWFyYW5jZTogISF0aGlzLmFwcGVhcmFuY2UsXG4gICAgICBpZDogcGFyYW1zLmlkLFxuICAgICAgbW9kaWZpY2F0aW9uRGF0ZTogdGhpcy5tb2RpZmljYXRpb25EYXRlLFxuICAgICAgcmVjdDogdGhpcy5yZWN0YW5nbGUsXG4gICAgICBzdWJ0eXBlOiBwYXJhbXMuc3VidHlwZSxcbiAgICAgIGhhc093bkNhbnZhczogZmFsc2VcbiAgICB9O1xuXG4gICAgaWYgKHBhcmFtcy5jb2xsZWN0RmllbGRzKSB7XG4gICAgICBjb25zdCBraWRzID0gZGljdC5nZXQoXCJLaWRzXCIpO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShraWRzKSkge1xuICAgICAgICBjb25zdCBraWRJZHMgPSBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGtpZCBvZiBraWRzKSB7XG4gICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1JlZikoa2lkKSkge1xuICAgICAgICAgICAga2lkSWRzLnB1c2goa2lkLnRvU3RyaW5nKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChraWRJZHMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgdGhpcy5kYXRhLmtpZElkcyA9IGtpZElkcztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmRhdGEuYWN0aW9ucyA9ICgwLCBfY29yZV91dGlscy5jb2xsZWN0QWN0aW9ucykocGFyYW1zLnhyZWYsIGRpY3QsIF91dGlsLkFubm90YXRpb25BY3Rpb25FdmVudFR5cGUpO1xuICAgICAgdGhpcy5kYXRhLmZpZWxkTmFtZSA9IHRoaXMuX2NvbnN0cnVjdEZpZWxkTmFtZShkaWN0KTtcbiAgICAgIHRoaXMuZGF0YS5wYWdlSW5kZXggPSBwYXJhbXMucGFnZUluZGV4O1xuICAgIH1cblxuICAgIHRoaXMuX2ZhbGxiYWNrRm9udERpY3QgPSBudWxsO1xuICB9XG5cbiAgX2hhc0ZsYWcoZmxhZ3MsIGZsYWcpIHtcbiAgICByZXR1cm4gISEoZmxhZ3MgJiBmbGFnKTtcbiAgfVxuXG4gIF9pc1ZpZXdhYmxlKGZsYWdzKSB7XG4gICAgcmV0dXJuICF0aGlzLl9oYXNGbGFnKGZsYWdzLCBfdXRpbC5Bbm5vdGF0aW9uRmxhZy5JTlZJU0lCTEUpICYmICF0aGlzLl9oYXNGbGFnKGZsYWdzLCBfdXRpbC5Bbm5vdGF0aW9uRmxhZy5OT1ZJRVcpO1xuICB9XG5cbiAgX2lzUHJpbnRhYmxlKGZsYWdzKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hhc0ZsYWcoZmxhZ3MsIF91dGlsLkFubm90YXRpb25GbGFnLlBSSU5UKSAmJiAhdGhpcy5faGFzRmxhZyhmbGFncywgX3V0aWwuQW5ub3RhdGlvbkZsYWcuSU5WSVNJQkxFKTtcbiAgfVxuXG4gIG11c3RCZVZpZXdlZChhbm5vdGF0aW9uU3RvcmFnZSkge1xuICAgIGNvbnN0IHN0b3JhZ2VFbnRyeSA9IGFubm90YXRpb25TdG9yYWdlICYmIGFubm90YXRpb25TdG9yYWdlLmdldCh0aGlzLmRhdGEuaWQpO1xuXG4gICAgaWYgKHN0b3JhZ2VFbnRyeSAmJiBzdG9yYWdlRW50cnkuaGlkZGVuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiAhc3RvcmFnZUVudHJ5LmhpZGRlbjtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy52aWV3YWJsZSAmJiAhdGhpcy5faGFzRmxhZyh0aGlzLmZsYWdzLCBfdXRpbC5Bbm5vdGF0aW9uRmxhZy5ISURERU4pO1xuICB9XG5cbiAgbXVzdEJlUHJpbnRlZChhbm5vdGF0aW9uU3RvcmFnZSkge1xuICAgIGNvbnN0IHN0b3JhZ2VFbnRyeSA9IGFubm90YXRpb25TdG9yYWdlICYmIGFubm90YXRpb25TdG9yYWdlLmdldCh0aGlzLmRhdGEuaWQpO1xuXG4gICAgaWYgKHN0b3JhZ2VFbnRyeSAmJiBzdG9yYWdlRW50cnkucHJpbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHN0b3JhZ2VFbnRyeS5wcmludDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5wcmludGFibGU7XG4gIH1cblxuICBnZXQgdmlld2FibGUoKSB7XG4gICAgaWYgKHRoaXMuZGF0YS5xdWFkUG9pbnRzID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZmxhZ3MgPT09IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9pc1ZpZXdhYmxlKHRoaXMuZmxhZ3MpO1xuICB9XG5cbiAgZ2V0IHByaW50YWJsZSgpIHtcbiAgICBpZiAodGhpcy5kYXRhLnF1YWRQb2ludHMgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5mbGFncyA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9pc1ByaW50YWJsZSh0aGlzLmZsYWdzKTtcbiAgfVxuXG4gIF9wYXJzZVN0cmluZ0hlbHBlcihkYXRhKSB7XG4gICAgY29uc3Qgc3RyID0gdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgPyAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKGRhdGEpIDogXCJcIjtcbiAgICBjb25zdCBkaXIgPSBzdHIgJiYgKDAsIF9iaWRpLmJpZGkpKHN0cikuZGlyID09PSBcInJ0bFwiID8gXCJydGxcIiA6IFwibHRyXCI7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0cixcbiAgICAgIGRpclxuICAgIH07XG4gIH1cblxuICBzZXRUaXRsZSh0aXRsZSkge1xuICAgIHRoaXMuX3RpdGxlID0gdGhpcy5fcGFyc2VTdHJpbmdIZWxwZXIodGl0bGUpO1xuICB9XG5cbiAgc2V0Q29udGVudHMoY29udGVudHMpIHtcbiAgICB0aGlzLl9jb250ZW50cyA9IHRoaXMuX3BhcnNlU3RyaW5nSGVscGVyKGNvbnRlbnRzKTtcbiAgfVxuXG4gIHNldE1vZGlmaWNhdGlvbkRhdGUobW9kaWZpY2F0aW9uRGF0ZSkge1xuICAgIHRoaXMubW9kaWZpY2F0aW9uRGF0ZSA9ICgwLCBfdXRpbC5pc1N0cmluZykobW9kaWZpY2F0aW9uRGF0ZSkgPyBtb2RpZmljYXRpb25EYXRlIDogbnVsbDtcbiAgfVxuXG4gIHNldEZsYWdzKGZsYWdzKSB7XG4gICAgdGhpcy5mbGFncyA9IE51bWJlci5pc0ludGVnZXIoZmxhZ3MpICYmIGZsYWdzID4gMCA/IGZsYWdzIDogMDtcbiAgfVxuXG4gIGhhc0ZsYWcoZmxhZykge1xuICAgIHJldHVybiB0aGlzLl9oYXNGbGFnKHRoaXMuZmxhZ3MsIGZsYWcpO1xuICB9XG5cbiAgc2V0UmVjdGFuZ2xlKHJlY3RhbmdsZSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJlY3RhbmdsZSkgJiYgcmVjdGFuZ2xlLmxlbmd0aCA9PT0gNCkge1xuICAgICAgdGhpcy5yZWN0YW5nbGUgPSBfdXRpbC5VdGlsLm5vcm1hbGl6ZVJlY3QocmVjdGFuZ2xlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZWN0YW5nbGUgPSBbMCwgMCwgMCwgMF07XG4gICAgfVxuICB9XG5cbiAgc2V0Q29sb3IoY29sb3IpIHtcbiAgICB0aGlzLmNvbG9yID0gZ2V0UmdiQ29sb3IoY29sb3IpO1xuICB9XG5cbiAgc2V0Qm9yZGVyQW5kQmFja2dyb3VuZENvbG9ycyhtaykge1xuICAgIGlmIChtayBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpIHtcbiAgICAgIHRoaXMuYm9yZGVyQ29sb3IgPSBnZXRSZ2JDb2xvcihtay5nZXRBcnJheShcIkJDXCIpLCBudWxsKTtcbiAgICAgIHRoaXMuYmFja2dyb3VuZENvbG9yID0gZ2V0UmdiQ29sb3IobWsuZ2V0QXJyYXkoXCJCR1wiKSwgbnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYm9yZGVyQ29sb3IgPSB0aGlzLmJhY2tncm91bmRDb2xvciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgc2V0Qm9yZGVyU3R5bGUoYm9yZGVyU3R5bGUpIHtcbiAgICB0aGlzLmJvcmRlclN0eWxlID0gbmV3IEFubm90YXRpb25Cb3JkZXJTdHlsZSgpO1xuXG4gICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShib3JkZXJTdHlsZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoYm9yZGVyU3R5bGUuaGFzKFwiQlNcIikpIHtcbiAgICAgIGNvbnN0IGRpY3QgPSBib3JkZXJTdHlsZS5nZXQoXCJCU1wiKTtcbiAgICAgIGNvbnN0IGRpY3RUeXBlID0gZGljdC5nZXQoXCJUeXBlXCIpO1xuXG4gICAgICBpZiAoIWRpY3RUeXBlIHx8ICgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGRpY3RUeXBlLCBcIkJvcmRlclwiKSkge1xuICAgICAgICB0aGlzLmJvcmRlclN0eWxlLnNldFdpZHRoKGRpY3QuZ2V0KFwiV1wiKSwgdGhpcy5yZWN0YW5nbGUpO1xuICAgICAgICB0aGlzLmJvcmRlclN0eWxlLnNldFN0eWxlKGRpY3QuZ2V0KFwiU1wiKSk7XG4gICAgICAgIHRoaXMuYm9yZGVyU3R5bGUuc2V0RGFzaEFycmF5KGRpY3QuZ2V0QXJyYXkoXCJEXCIpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGJvcmRlclN0eWxlLmhhcyhcIkJvcmRlclwiKSkge1xuICAgICAgY29uc3QgYXJyYXkgPSBib3JkZXJTdHlsZS5nZXRBcnJheShcIkJvcmRlclwiKTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXJyYXkpICYmIGFycmF5Lmxlbmd0aCA+PSAzKSB7XG4gICAgICAgIHRoaXMuYm9yZGVyU3R5bGUuc2V0SG9yaXpvbnRhbENvcm5lclJhZGl1cyhhcnJheVswXSk7XG4gICAgICAgIHRoaXMuYm9yZGVyU3R5bGUuc2V0VmVydGljYWxDb3JuZXJSYWRpdXMoYXJyYXlbMV0pO1xuICAgICAgICB0aGlzLmJvcmRlclN0eWxlLnNldFdpZHRoKGFycmF5WzJdLCB0aGlzLnJlY3RhbmdsZSk7XG5cbiAgICAgICAgaWYgKGFycmF5Lmxlbmd0aCA9PT0gNCkge1xuICAgICAgICAgIHRoaXMuYm9yZGVyU3R5bGUuc2V0RGFzaEFycmF5KGFycmF5WzNdLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJvcmRlclN0eWxlLnNldFdpZHRoKDApO1xuICAgIH1cbiAgfVxuXG4gIHNldEFwcGVhcmFuY2UoZGljdCkge1xuICAgIHRoaXMuYXBwZWFyYW5jZSA9IG51bGw7XG4gICAgY29uc3QgYXBwZWFyYW5jZVN0YXRlcyA9IGRpY3QuZ2V0KFwiQVBcIik7XG5cbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGFwcGVhcmFuY2VTdGF0ZXMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgbm9ybWFsQXBwZWFyYW5jZVN0YXRlID0gYXBwZWFyYW5jZVN0YXRlcy5nZXQoXCJOXCIpO1xuXG4gICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkobm9ybWFsQXBwZWFyYW5jZVN0YXRlKSkge1xuICAgICAgdGhpcy5hcHBlYXJhbmNlID0gbm9ybWFsQXBwZWFyYW5jZVN0YXRlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkobm9ybWFsQXBwZWFyYW5jZVN0YXRlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGFzID0gZGljdC5nZXQoXCJBU1wiKTtcblxuICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoYXMpIHx8ICFub3JtYWxBcHBlYXJhbmNlU3RhdGUuaGFzKGFzLm5hbWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5hcHBlYXJhbmNlID0gbm9ybWFsQXBwZWFyYW5jZVN0YXRlLmdldChhcy5uYW1lKTtcbiAgfVxuXG4gIGxvYWRSZXNvdXJjZXMoa2V5cywgYXBwZWFyYW5jZSkge1xuICAgIHJldHVybiBhcHBlYXJhbmNlLmRpY3QuZ2V0QXN5bmMoXCJSZXNvdXJjZXNcIikudGhlbihyZXNvdXJjZXMgPT4ge1xuICAgICAgaWYgKCFyZXNvdXJjZXMpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2JqZWN0TG9hZGVyID0gbmV3IF9vYmplY3RfbG9hZGVyLk9iamVjdExvYWRlcihyZXNvdXJjZXMsIGtleXMsIHJlc291cmNlcy54cmVmKTtcbiAgICAgIHJldHVybiBvYmplY3RMb2FkZXIubG9hZCgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gcmVzb3VyY2VzO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRPcGVyYXRvckxpc3QoZXZhbHVhdG9yLCB0YXNrLCBpbnRlbnQsIHJlbmRlckZvcm1zLCBhbm5vdGF0aW9uU3RvcmFnZSkge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgbGV0IGFwcGVhcmFuY2UgPSB0aGlzLmFwcGVhcmFuY2U7XG4gICAgY29uc3QgaXNVc2luZ093bkNhbnZhcyA9IGRhdGEuaGFzT3duQ2FudmFzICYmIGludGVudCAmIF91dGlsLlJlbmRlcmluZ0ludGVudEZsYWcuRElTUExBWTtcblxuICAgIGlmICghYXBwZWFyYW5jZSkge1xuICAgICAgaWYgKCFpc1VzaW5nT3duQ2FudmFzKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IF9vcGVyYXRvcl9saXN0Lk9wZXJhdG9yTGlzdCgpKTtcbiAgICAgIH1cblxuICAgICAgYXBwZWFyYW5jZSA9IG5ldyBfc3RyZWFtLlN0cmluZ1N0cmVhbShcIlwiKTtcbiAgICAgIGFwcGVhcmFuY2UuZGljdCA9IG5ldyBfcHJpbWl0aXZlcy5EaWN0KCk7XG4gICAgfVxuXG4gICAgY29uc3QgYXBwZWFyYW5jZURpY3QgPSBhcHBlYXJhbmNlLmRpY3Q7XG4gICAgY29uc3QgcmVzb3VyY2VzUHJvbWlzZSA9IHRoaXMubG9hZFJlc291cmNlcyhbXCJFeHRHU3RhdGVcIiwgXCJDb2xvclNwYWNlXCIsIFwiUGF0dGVyblwiLCBcIlNoYWRpbmdcIiwgXCJYT2JqZWN0XCIsIFwiRm9udFwiXSwgYXBwZWFyYW5jZSk7XG4gICAgY29uc3QgYmJveCA9IGFwcGVhcmFuY2VEaWN0LmdldEFycmF5KFwiQkJveFwiKSB8fCBbMCwgMCwgMSwgMV07XG4gICAgY29uc3QgbWF0cml4ID0gYXBwZWFyYW5jZURpY3QuZ2V0QXJyYXkoXCJNYXRyaXhcIikgfHwgWzEsIDAsIDAsIDEsIDAsIDBdO1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IGdldFRyYW5zZm9ybU1hdHJpeChkYXRhLnJlY3QsIGJib3gsIG1hdHJpeCk7XG4gICAgcmV0dXJuIHJlc291cmNlc1Byb21pc2UudGhlbihyZXNvdXJjZXMgPT4ge1xuICAgICAgY29uc3Qgb3BMaXN0ID0gbmV3IF9vcGVyYXRvcl9saXN0Lk9wZXJhdG9yTGlzdCgpO1xuICAgICAgb3BMaXN0LmFkZE9wKF91dGlsLk9QUy5iZWdpbkFubm90YXRpb24sIFtkYXRhLmlkLCBkYXRhLnJlY3QsIHRyYW5zZm9ybSwgbWF0cml4LCBpc1VzaW5nT3duQ2FudmFzXSk7XG4gICAgICByZXR1cm4gZXZhbHVhdG9yLmdldE9wZXJhdG9yTGlzdCh7XG4gICAgICAgIHN0cmVhbTogYXBwZWFyYW5jZSxcbiAgICAgICAgdGFzayxcbiAgICAgICAgcmVzb3VyY2VzLFxuICAgICAgICBvcGVyYXRvckxpc3Q6IG9wTGlzdCxcbiAgICAgICAgZmFsbGJhY2tGb250RGljdDogdGhpcy5fZmFsbGJhY2tGb250RGljdFxuICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgIG9wTGlzdC5hZGRPcChfdXRpbC5PUFMuZW5kQW5ub3RhdGlvbiwgW10pO1xuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgIHJldHVybiBvcExpc3Q7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHNhdmUoZXZhbHVhdG9yLCB0YXNrLCBhbm5vdGF0aW9uU3RvcmFnZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZ2V0RmllbGRPYmplY3QoKSB7XG4gICAgaWYgKHRoaXMuZGF0YS5raWRJZHMpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiB0aGlzLmRhdGEuaWQsXG4gICAgICAgIGFjdGlvbnM6IHRoaXMuZGF0YS5hY3Rpb25zLFxuICAgICAgICBuYW1lOiB0aGlzLmRhdGEuZmllbGROYW1lLFxuICAgICAgICBzdHJva2VDb2xvcjogdGhpcy5kYXRhLmJvcmRlckNvbG9yLFxuICAgICAgICBmaWxsQ29sb3I6IHRoaXMuZGF0YS5iYWNrZ3JvdW5kQ29sb3IsXG4gICAgICAgIHR5cGU6IFwiXCIsXG4gICAgICAgIGtpZElkczogdGhpcy5kYXRhLmtpZElkcyxcbiAgICAgICAgcGFnZTogdGhpcy5kYXRhLnBhZ2VJbmRleFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIGZvciAoY29uc3Qgc3RyZWFtIG9mIHRoaXMuX3N0cmVhbXMpIHtcbiAgICAgIHN0cmVhbS5yZXNldCgpO1xuICAgIH1cbiAgfVxuXG4gIF9jb25zdHJ1Y3RGaWVsZE5hbWUoZGljdCkge1xuICAgIGlmICghZGljdC5oYXMoXCJUXCIpICYmICFkaWN0LmhhcyhcIlBhcmVudFwiKSkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKFwiVW5rbm93biBmaWVsZCBuYW1lLCBmYWxsaW5nIGJhY2sgdG8gZW1wdHkgZmllbGQgbmFtZS5cIik7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICBpZiAoIWRpY3QuaGFzKFwiUGFyZW50XCIpKSB7XG4gICAgICByZXR1cm4gKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShkaWN0LmdldChcIlRcIikpO1xuICAgIH1cblxuICAgIGNvbnN0IGZpZWxkTmFtZSA9IFtdO1xuXG4gICAgaWYgKGRpY3QuaGFzKFwiVFwiKSkge1xuICAgICAgZmllbGROYW1lLnVuc2hpZnQoKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShkaWN0LmdldChcIlRcIikpKTtcbiAgICB9XG5cbiAgICBsZXQgbG9vcERpY3QgPSBkaWN0O1xuICAgIGNvbnN0IHZpc2l0ZWQgPSBuZXcgX3ByaW1pdGl2ZXMuUmVmU2V0KCk7XG5cbiAgICBpZiAoZGljdC5vYmpJZCkge1xuICAgICAgdmlzaXRlZC5wdXQoZGljdC5vYmpJZCk7XG4gICAgfVxuXG4gICAgd2hpbGUgKGxvb3BEaWN0LmhhcyhcIlBhcmVudFwiKSkge1xuICAgICAgbG9vcERpY3QgPSBsb29wRGljdC5nZXQoXCJQYXJlbnRcIik7XG5cbiAgICAgIGlmICghKGxvb3BEaWN0IGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCkgfHwgbG9vcERpY3Qub2JqSWQgJiYgdmlzaXRlZC5oYXMobG9vcERpY3Qub2JqSWQpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAobG9vcERpY3Qub2JqSWQpIHtcbiAgICAgICAgdmlzaXRlZC5wdXQobG9vcERpY3Qub2JqSWQpO1xuICAgICAgfVxuXG4gICAgICBpZiAobG9vcERpY3QuaGFzKFwiVFwiKSkge1xuICAgICAgICBmaWVsZE5hbWUudW5zaGlmdCgoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKGxvb3BEaWN0LmdldChcIlRcIikpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmllbGROYW1lLmpvaW4oXCIuXCIpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5Bbm5vdGF0aW9uID0gQW5ub3RhdGlvbjtcblxuY2xhc3MgQW5ub3RhdGlvbkJvcmRlclN0eWxlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy53aWR0aCA9IDE7XG4gICAgdGhpcy5zdHlsZSA9IF91dGlsLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuU09MSUQ7XG4gICAgdGhpcy5kYXNoQXJyYXkgPSBbM107XG4gICAgdGhpcy5ob3Jpem9udGFsQ29ybmVyUmFkaXVzID0gMDtcbiAgICB0aGlzLnZlcnRpY2FsQ29ybmVyUmFkaXVzID0gMDtcbiAgfVxuXG4gIHNldFdpZHRoKHdpZHRoLCByZWN0ID0gWzAsIDAsIDAsIDBdKSB7XG4gICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHdpZHRoKSkge1xuICAgICAgdGhpcy53aWR0aCA9IDA7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKE51bWJlci5pc0ludGVnZXIod2lkdGgpKSB7XG4gICAgICBpZiAod2lkdGggPiAwKSB7XG4gICAgICAgIGNvbnN0IG1heFdpZHRoID0gKHJlY3RbMl0gLSByZWN0WzBdKSAvIDI7XG4gICAgICAgIGNvbnN0IG1heEhlaWdodCA9IChyZWN0WzNdIC0gcmVjdFsxXSkgLyAyO1xuXG4gICAgICAgIGlmIChtYXhXaWR0aCA+IDAgJiYgbWF4SGVpZ2h0ID4gMCAmJiAod2lkdGggPiBtYXhXaWR0aCB8fCB3aWR0aCA+IG1heEhlaWdodCkpIHtcbiAgICAgICAgICAoMCwgX3V0aWwud2FybikoYEFubm90YXRpb25Cb3JkZXJTdHlsZS5zZXRXaWR0aCAtIGlnbm9yaW5nIHdpZHRoOiAke3dpZHRofWApO1xuICAgICAgICAgIHdpZHRoID0gMTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgfVxuICB9XG5cbiAgc2V0U3R5bGUoc3R5bGUpIHtcbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHN0eWxlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN3aXRjaCAoc3R5bGUubmFtZSkge1xuICAgICAgY2FzZSBcIlNcIjpcbiAgICAgICAgdGhpcy5zdHlsZSA9IF91dGlsLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuU09MSUQ7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiRFwiOlxuICAgICAgICB0aGlzLnN0eWxlID0gX3V0aWwuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5EQVNIRUQ7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiQlwiOlxuICAgICAgICB0aGlzLnN0eWxlID0gX3V0aWwuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5CRVZFTEVEO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIklcIjpcbiAgICAgICAgdGhpcy5zdHlsZSA9IF91dGlsLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuSU5TRVQ7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiVVwiOlxuICAgICAgICB0aGlzLnN0eWxlID0gX3V0aWwuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5VTkRFUkxJTkU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBzZXREYXNoQXJyYXkoZGFzaEFycmF5LCBmb3JjZVN0eWxlID0gZmFsc2UpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXNoQXJyYXkpICYmIGRhc2hBcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgaXNWYWxpZCA9IHRydWU7XG4gICAgICBsZXQgYWxsWmVyb3MgPSB0cnVlO1xuXG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZGFzaEFycmF5KSB7XG4gICAgICAgIGNvbnN0IHZhbGlkTnVtYmVyID0gK2VsZW1lbnQgPj0gMDtcblxuICAgICAgICBpZiAoIXZhbGlkTnVtYmVyKSB7XG4gICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgPiAwKSB7XG4gICAgICAgICAgYWxsWmVyb3MgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNWYWxpZCAmJiAhYWxsWmVyb3MpIHtcbiAgICAgICAgdGhpcy5kYXNoQXJyYXkgPSBkYXNoQXJyYXk7XG5cbiAgICAgICAgaWYgKGZvcmNlU3R5bGUpIHtcbiAgICAgICAgICB0aGlzLnNldFN0eWxlKF9wcmltaXRpdmVzLk5hbWUuZ2V0KFwiRFwiKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMud2lkdGggPSAwO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZGFzaEFycmF5KSB7XG4gICAgICB0aGlzLndpZHRoID0gMDtcbiAgICB9XG4gIH1cblxuICBzZXRIb3Jpem9udGFsQ29ybmVyUmFkaXVzKHJhZGl1cykge1xuICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKHJhZGl1cykpIHtcbiAgICAgIHRoaXMuaG9yaXpvbnRhbENvcm5lclJhZGl1cyA9IHJhZGl1cztcbiAgICB9XG4gIH1cblxuICBzZXRWZXJ0aWNhbENvcm5lclJhZGl1cyhyYWRpdXMpIHtcbiAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihyYWRpdXMpKSB7XG4gICAgICB0aGlzLnZlcnRpY2FsQ29ybmVyUmFkaXVzID0gcmFkaXVzO1xuICAgIH1cbiAgfVxuXG59XG5cbmV4cG9ydHMuQW5ub3RhdGlvbkJvcmRlclN0eWxlID0gQW5ub3RhdGlvbkJvcmRlclN0eWxlO1xuXG5jbGFzcyBNYXJrdXBBbm5vdGF0aW9uIGV4dGVuZHMgQW5ub3RhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcbiAgICBzdXBlcihwYXJhbWV0ZXJzKTtcbiAgICBjb25zdCBkaWN0ID0gcGFyYW1ldGVycy5kaWN0O1xuXG4gICAgaWYgKGRpY3QuaGFzKFwiSVJUXCIpKSB7XG4gICAgICBjb25zdCByYXdJUlQgPSBkaWN0LmdldFJhdyhcIklSVFwiKTtcbiAgICAgIHRoaXMuZGF0YS5pblJlcGx5VG8gPSAoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKHJhd0lSVCkgPyByYXdJUlQudG9TdHJpbmcoKSA6IG51bGw7XG4gICAgICBjb25zdCBydCA9IGRpY3QuZ2V0KFwiUlRcIik7XG4gICAgICB0aGlzLmRhdGEucmVwbHlUeXBlID0gKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkocnQpID8gcnQubmFtZSA6IF91dGlsLkFubm90YXRpb25SZXBseVR5cGUuUkVQTFk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YS5yZXBseVR5cGUgPT09IF91dGlsLkFubm90YXRpb25SZXBseVR5cGUuR1JPVVApIHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGRpY3QuZ2V0KFwiSVJUXCIpO1xuICAgICAgdGhpcy5zZXRUaXRsZShwYXJlbnQuZ2V0KFwiVFwiKSk7XG4gICAgICB0aGlzLmRhdGEudGl0bGVPYmogPSB0aGlzLl90aXRsZTtcbiAgICAgIHRoaXMuc2V0Q29udGVudHMocGFyZW50LmdldChcIkNvbnRlbnRzXCIpKTtcbiAgICAgIHRoaXMuZGF0YS5jb250ZW50c09iaiA9IHRoaXMuX2NvbnRlbnRzO1xuXG4gICAgICBpZiAoIXBhcmVudC5oYXMoXCJDcmVhdGlvbkRhdGVcIikpIHtcbiAgICAgICAgdGhpcy5kYXRhLmNyZWF0aW9uRGF0ZSA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNldENyZWF0aW9uRGF0ZShwYXJlbnQuZ2V0KFwiQ3JlYXRpb25EYXRlXCIpKTtcbiAgICAgICAgdGhpcy5kYXRhLmNyZWF0aW9uRGF0ZSA9IHRoaXMuY3JlYXRpb25EYXRlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXBhcmVudC5oYXMoXCJNXCIpKSB7XG4gICAgICAgIHRoaXMuZGF0YS5tb2RpZmljYXRpb25EYXRlID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2V0TW9kaWZpY2F0aW9uRGF0ZShwYXJlbnQuZ2V0KFwiTVwiKSk7XG4gICAgICAgIHRoaXMuZGF0YS5tb2RpZmljYXRpb25EYXRlID0gdGhpcy5tb2RpZmljYXRpb25EYXRlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmRhdGEuaGFzUG9wdXAgPSBwYXJlbnQuaGFzKFwiUG9wdXBcIik7XG5cbiAgICAgIGlmICghcGFyZW50LmhhcyhcIkNcIikpIHtcbiAgICAgICAgdGhpcy5kYXRhLmNvbG9yID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2V0Q29sb3IocGFyZW50LmdldEFycmF5KFwiQ1wiKSk7XG4gICAgICAgIHRoaXMuZGF0YS5jb2xvciA9IHRoaXMuY29sb3I7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0YS50aXRsZU9iaiA9IHRoaXMuX3RpdGxlO1xuICAgICAgdGhpcy5zZXRDcmVhdGlvbkRhdGUoZGljdC5nZXQoXCJDcmVhdGlvbkRhdGVcIikpO1xuICAgICAgdGhpcy5kYXRhLmNyZWF0aW9uRGF0ZSA9IHRoaXMuY3JlYXRpb25EYXRlO1xuICAgICAgdGhpcy5kYXRhLmhhc1BvcHVwID0gZGljdC5oYXMoXCJQb3B1cFwiKTtcblxuICAgICAgaWYgKCFkaWN0LmhhcyhcIkNcIikpIHtcbiAgICAgICAgdGhpcy5kYXRhLmNvbG9yID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGljdC5oYXMoXCJSQ1wiKSkge1xuICAgICAgdGhpcy5kYXRhLnJpY2hUZXh0ID0gX2ZhY3RvcnkuWEZBRmFjdG9yeS5nZXRSaWNoVGV4dEFzSHRtbChkaWN0LmdldChcIlJDXCIpKTtcbiAgICB9XG4gIH1cblxuICBzZXRDcmVhdGlvbkRhdGUoY3JlYXRpb25EYXRlKSB7XG4gICAgdGhpcy5jcmVhdGlvbkRhdGUgPSAoMCwgX3V0aWwuaXNTdHJpbmcpKGNyZWF0aW9uRGF0ZSkgPyBjcmVhdGlvbkRhdGUgOiBudWxsO1xuICB9XG5cbiAgX3NldERlZmF1bHRBcHBlYXJhbmNlKHtcbiAgICB4cmVmLFxuICAgIGV4dHJhLFxuICAgIHN0cm9rZUNvbG9yLFxuICAgIGZpbGxDb2xvcixcbiAgICBibGVuZE1vZGUsXG4gICAgc3Ryb2tlQWxwaGEsXG4gICAgZmlsbEFscGhhLFxuICAgIHBvaW50c0NhbGxiYWNrXG4gIH0pIHtcbiAgICBsZXQgbWluWCA9IE51bWJlci5NQVhfVkFMVUU7XG4gICAgbGV0IG1pblkgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgIGxldCBtYXhYID0gTnVtYmVyLk1JTl9WQUxVRTtcbiAgICBsZXQgbWF4WSA9IE51bWJlci5NSU5fVkFMVUU7XG4gICAgY29uc3QgYnVmZmVyID0gW1wicVwiXTtcblxuICAgIGlmIChleHRyYSkge1xuICAgICAgYnVmZmVyLnB1c2goZXh0cmEpO1xuICAgIH1cblxuICAgIGlmIChzdHJva2VDb2xvcikge1xuICAgICAgYnVmZmVyLnB1c2goYCR7c3Ryb2tlQ29sb3JbMF19ICR7c3Ryb2tlQ29sb3JbMV19ICR7c3Ryb2tlQ29sb3JbMl19IFJHYCk7XG4gICAgfVxuXG4gICAgaWYgKGZpbGxDb2xvcikge1xuICAgICAgYnVmZmVyLnB1c2goYCR7ZmlsbENvbG9yWzBdfSAke2ZpbGxDb2xvclsxXX0gJHtmaWxsQ29sb3JbMl19IHJnYCk7XG4gICAgfVxuXG4gICAgbGV0IHBvaW50c0FycmF5ID0gdGhpcy5kYXRhLnF1YWRQb2ludHM7XG5cbiAgICBpZiAoIXBvaW50c0FycmF5KSB7XG4gICAgICBwb2ludHNBcnJheSA9IFtbe1xuICAgICAgICB4OiB0aGlzLnJlY3RhbmdsZVswXSxcbiAgICAgICAgeTogdGhpcy5yZWN0YW5nbGVbM11cbiAgICAgIH0sIHtcbiAgICAgICAgeDogdGhpcy5yZWN0YW5nbGVbMl0sXG4gICAgICAgIHk6IHRoaXMucmVjdGFuZ2xlWzNdXG4gICAgICB9LCB7XG4gICAgICAgIHg6IHRoaXMucmVjdGFuZ2xlWzBdLFxuICAgICAgICB5OiB0aGlzLnJlY3RhbmdsZVsxXVxuICAgICAgfSwge1xuICAgICAgICB4OiB0aGlzLnJlY3RhbmdsZVsyXSxcbiAgICAgICAgeTogdGhpcy5yZWN0YW5nbGVbMV1cbiAgICAgIH1dXTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHBvaW50cyBvZiBwb2ludHNBcnJheSkge1xuICAgICAgY29uc3QgW21YLCBNWCwgbVksIE1ZXSA9IHBvaW50c0NhbGxiYWNrKGJ1ZmZlciwgcG9pbnRzKTtcbiAgICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCBtWCk7XG4gICAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgTVgpO1xuICAgICAgbWluWSA9IE1hdGgubWluKG1pblksIG1ZKTtcbiAgICAgIG1heFkgPSBNYXRoLm1heChtYXhZLCBNWSk7XG4gICAgfVxuXG4gICAgYnVmZmVyLnB1c2goXCJRXCIpO1xuICAgIGNvbnN0IGZvcm1EaWN0ID0gbmV3IF9wcmltaXRpdmVzLkRpY3QoeHJlZik7XG4gICAgY29uc3QgYXBwZWFyYW5jZVN0cmVhbURpY3QgPSBuZXcgX3ByaW1pdGl2ZXMuRGljdCh4cmVmKTtcbiAgICBhcHBlYXJhbmNlU3RyZWFtRGljdC5zZXQoXCJTdWJ0eXBlXCIsIF9wcmltaXRpdmVzLk5hbWUuZ2V0KFwiRm9ybVwiKSk7XG4gICAgY29uc3QgYXBwZWFyYW5jZVN0cmVhbSA9IG5ldyBfc3RyZWFtLlN0cmluZ1N0cmVhbShidWZmZXIuam9pbihcIiBcIikpO1xuICAgIGFwcGVhcmFuY2VTdHJlYW0uZGljdCA9IGFwcGVhcmFuY2VTdHJlYW1EaWN0O1xuICAgIGZvcm1EaWN0LnNldChcIkZtMFwiLCBhcHBlYXJhbmNlU3RyZWFtKTtcbiAgICBjb25zdCBnc0RpY3QgPSBuZXcgX3ByaW1pdGl2ZXMuRGljdCh4cmVmKTtcblxuICAgIGlmIChibGVuZE1vZGUpIHtcbiAgICAgIGdzRGljdC5zZXQoXCJCTVwiLCBfcHJpbWl0aXZlcy5OYW1lLmdldChibGVuZE1vZGUpKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHN0cm9rZUFscGhhID09PSBcIm51bWJlclwiKSB7XG4gICAgICBnc0RpY3Quc2V0KFwiQ0FcIiwgc3Ryb2tlQWxwaGEpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZmlsbEFscGhhID09PSBcIm51bWJlclwiKSB7XG4gICAgICBnc0RpY3Quc2V0KFwiY2FcIiwgZmlsbEFscGhhKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0ZURpY3QgPSBuZXcgX3ByaW1pdGl2ZXMuRGljdCh4cmVmKTtcbiAgICBzdGF0ZURpY3Quc2V0KFwiR1MwXCIsIGdzRGljdCk7XG4gICAgY29uc3QgcmVzb3VyY2VzID0gbmV3IF9wcmltaXRpdmVzLkRpY3QoeHJlZik7XG4gICAgcmVzb3VyY2VzLnNldChcIkV4dEdTdGF0ZVwiLCBzdGF0ZURpY3QpO1xuICAgIHJlc291cmNlcy5zZXQoXCJYT2JqZWN0XCIsIGZvcm1EaWN0KTtcbiAgICBjb25zdCBhcHBlYXJhbmNlRGljdCA9IG5ldyBfcHJpbWl0aXZlcy5EaWN0KHhyZWYpO1xuICAgIGFwcGVhcmFuY2VEaWN0LnNldChcIlJlc291cmNlc1wiLCByZXNvdXJjZXMpO1xuICAgIGNvbnN0IGJib3ggPSB0aGlzLmRhdGEucmVjdCA9IFttaW5YLCBtaW5ZLCBtYXhYLCBtYXhZXTtcbiAgICBhcHBlYXJhbmNlRGljdC5zZXQoXCJCQm94XCIsIGJib3gpO1xuICAgIHRoaXMuYXBwZWFyYW5jZSA9IG5ldyBfc3RyZWFtLlN0cmluZ1N0cmVhbShcIi9HUzAgZ3MgL0ZtMCBEb1wiKTtcbiAgICB0aGlzLmFwcGVhcmFuY2UuZGljdCA9IGFwcGVhcmFuY2VEaWN0O1xuXG4gICAgdGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMuYXBwZWFyYW5jZSwgYXBwZWFyYW5jZVN0cmVhbSk7XG4gIH1cblxufVxuXG5leHBvcnRzLk1hcmt1cEFubm90YXRpb24gPSBNYXJrdXBBbm5vdGF0aW9uO1xuXG5jbGFzcyBXaWRnZXRBbm5vdGF0aW9uIGV4dGVuZHMgQW5ub3RhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtcykge1xuICAgIHN1cGVyKHBhcmFtcyk7XG4gICAgY29uc3QgZGljdCA9IHBhcmFtcy5kaWN0O1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgdGhpcy5yZWYgPSBwYXJhbXMucmVmO1xuICAgIGRhdGEuYW5ub3RhdGlvblR5cGUgPSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5XSURHRVQ7XG5cbiAgICBpZiAoZGF0YS5maWVsZE5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZGF0YS5maWVsZE5hbWUgPSB0aGlzLl9jb25zdHJ1Y3RGaWVsZE5hbWUoZGljdCk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEuYWN0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBkYXRhLmFjdGlvbnMgPSAoMCwgX2NvcmVfdXRpbHMuY29sbGVjdEFjdGlvbnMpKHBhcmFtcy54cmVmLCBkaWN0LCBfdXRpbC5Bbm5vdGF0aW9uQWN0aW9uRXZlbnRUeXBlKTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWVsZFZhbHVlID0gKDAsIF9jb3JlX3V0aWxzLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtcbiAgICAgIGRpY3QsXG4gICAgICBrZXk6IFwiVlwiLFxuICAgICAgZ2V0QXJyYXk6IHRydWVcbiAgICB9KTtcbiAgICBkYXRhLmZpZWxkVmFsdWUgPSB0aGlzLl9kZWNvZGVGb3JtVmFsdWUoZmllbGRWYWx1ZSk7XG4gICAgY29uc3QgZGVmYXVsdEZpZWxkVmFsdWUgPSAoMCwgX2NvcmVfdXRpbHMuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe1xuICAgICAgZGljdCxcbiAgICAgIGtleTogXCJEVlwiLFxuICAgICAgZ2V0QXJyYXk6IHRydWVcbiAgICB9KTtcbiAgICBkYXRhLmRlZmF1bHRGaWVsZFZhbHVlID0gdGhpcy5fZGVjb2RlRm9ybVZhbHVlKGRlZmF1bHRGaWVsZFZhbHVlKTtcblxuICAgIGlmIChmaWVsZFZhbHVlID09PSB1bmRlZmluZWQgJiYgZGF0YS5kZWZhdWx0RmllbGRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgZGF0YS5maWVsZFZhbHVlID0gZGF0YS5kZWZhdWx0RmllbGRWYWx1ZTtcbiAgICB9XG5cbiAgICBkYXRhLmFsdGVybmF0aXZlVGV4dCA9ICgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykoZGljdC5nZXQoXCJUVVwiKSB8fCBcIlwiKTtcbiAgICBjb25zdCBkZWZhdWx0QXBwZWFyYW5jZSA9ICgwLCBfY29yZV91dGlscy5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7XG4gICAgICBkaWN0LFxuICAgICAga2V5OiBcIkRBXCJcbiAgICB9KSB8fCBwYXJhbXMuYWNyb0Zvcm0uZ2V0KFwiREFcIik7XG4gICAgdGhpcy5fZGVmYXVsdEFwcGVhcmFuY2UgPSAoMCwgX3V0aWwuaXNTdHJpbmcpKGRlZmF1bHRBcHBlYXJhbmNlKSA/IGRlZmF1bHRBcHBlYXJhbmNlIDogXCJcIjtcbiAgICBkYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YSA9ICgwLCBfZGVmYXVsdF9hcHBlYXJhbmNlLnBhcnNlRGVmYXVsdEFwcGVhcmFuY2UpKHRoaXMuX2RlZmF1bHRBcHBlYXJhbmNlKTtcbiAgICBjb25zdCBmaWVsZFR5cGUgPSAoMCwgX2NvcmVfdXRpbHMuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe1xuICAgICAgZGljdCxcbiAgICAgIGtleTogXCJGVFwiXG4gICAgfSk7XG4gICAgZGF0YS5maWVsZFR5cGUgPSAoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShmaWVsZFR5cGUpID8gZmllbGRUeXBlLm5hbWUgOiBudWxsO1xuICAgIGNvbnN0IGxvY2FsUmVzb3VyY2VzID0gKDAsIF9jb3JlX3V0aWxzLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtcbiAgICAgIGRpY3QsXG4gICAgICBrZXk6IFwiRFJcIlxuICAgIH0pO1xuICAgIGNvbnN0IGFjcm9Gb3JtUmVzb3VyY2VzID0gcGFyYW1zLmFjcm9Gb3JtLmdldChcIkRSXCIpO1xuICAgIGNvbnN0IGFwcGVhcmFuY2VSZXNvdXJjZXMgPSB0aGlzLmFwcGVhcmFuY2UgJiYgdGhpcy5hcHBlYXJhbmNlLmRpY3QuZ2V0KFwiUmVzb3VyY2VzXCIpO1xuICAgIHRoaXMuX2ZpZWxkUmVzb3VyY2VzID0ge1xuICAgICAgbG9jYWxSZXNvdXJjZXMsXG4gICAgICBhY3JvRm9ybVJlc291cmNlcyxcbiAgICAgIGFwcGVhcmFuY2VSZXNvdXJjZXMsXG4gICAgICBtZXJnZWRSZXNvdXJjZXM6IF9wcmltaXRpdmVzLkRpY3QubWVyZ2Uoe1xuICAgICAgICB4cmVmOiBwYXJhbXMueHJlZixcbiAgICAgICAgZGljdEFycmF5OiBbbG9jYWxSZXNvdXJjZXMsIGFwcGVhcmFuY2VSZXNvdXJjZXMsIGFjcm9Gb3JtUmVzb3VyY2VzXSxcbiAgICAgICAgbWVyZ2VTdWJEaWN0czogdHJ1ZVxuICAgICAgfSlcbiAgICB9O1xuICAgIGRhdGEuZmllbGRGbGFncyA9ICgwLCBfY29yZV91dGlscy5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7XG4gICAgICBkaWN0LFxuICAgICAga2V5OiBcIkZmXCJcbiAgICB9KTtcblxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihkYXRhLmZpZWxkRmxhZ3MpIHx8IGRhdGEuZmllbGRGbGFncyA8IDApIHtcbiAgICAgIGRhdGEuZmllbGRGbGFncyA9IDA7XG4gICAgfVxuXG4gICAgZGF0YS5yZWFkT25seSA9IHRoaXMuaGFzRmllbGRGbGFnKF91dGlsLkFubm90YXRpb25GaWVsZEZsYWcuUkVBRE9OTFkpO1xuICAgIGRhdGEuaGlkZGVuID0gdGhpcy5faGFzRmxhZyhkYXRhLmFubm90YXRpb25GbGFncywgX3V0aWwuQW5ub3RhdGlvbkZsYWcuSElEREVOKTtcbiAgfVxuXG4gIF9kZWNvZGVGb3JtVmFsdWUoZm9ybVZhbHVlKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm9ybVZhbHVlKSkge1xuICAgICAgcmV0dXJuIGZvcm1WYWx1ZS5maWx0ZXIoaXRlbSA9PiAoMCwgX3V0aWwuaXNTdHJpbmcpKGl0ZW0pKS5tYXAoaXRlbSA9PiAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKGl0ZW0pKTtcbiAgICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGZvcm1WYWx1ZSkpIHtcbiAgICAgIHJldHVybiAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKGZvcm1WYWx1ZS5uYW1lKTtcbiAgICB9IGVsc2UgaWYgKCgwLCBfdXRpbC5pc1N0cmluZykoZm9ybVZhbHVlKSkge1xuICAgICAgcmV0dXJuICgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykoZm9ybVZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGhhc0ZpZWxkRmxhZyhmbGFnKSB7XG4gICAgcmV0dXJuICEhKHRoaXMuZGF0YS5maWVsZEZsYWdzICYgZmxhZyk7XG4gIH1cblxuICBnZXRPcGVyYXRvckxpc3QoZXZhbHVhdG9yLCB0YXNrLCBpbnRlbnQsIHJlbmRlckZvcm1zLCBhbm5vdGF0aW9uU3RvcmFnZSkge1xuICAgIGlmIChyZW5kZXJGb3JtcyAmJiAhKHRoaXMgaW5zdGFuY2VvZiBTaWduYXR1cmVXaWRnZXRBbm5vdGF0aW9uKSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgX29wZXJhdG9yX2xpc3QuT3BlcmF0b3JMaXN0KCkpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5faGFzVGV4dCkge1xuICAgICAgcmV0dXJuIHN1cGVyLmdldE9wZXJhdG9yTGlzdChldmFsdWF0b3IsIHRhc2ssIGludGVudCwgcmVuZGVyRm9ybXMsIGFubm90YXRpb25TdG9yYWdlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fZ2V0QXBwZWFyYW5jZShldmFsdWF0b3IsIHRhc2ssIGFubm90YXRpb25TdG9yYWdlKS50aGVuKGNvbnRlbnQgPT4ge1xuICAgICAgaWYgKHRoaXMuYXBwZWFyYW5jZSAmJiBjb250ZW50ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBzdXBlci5nZXRPcGVyYXRvckxpc3QoZXZhbHVhdG9yLCB0YXNrLCBpbnRlbnQsIHJlbmRlckZvcm1zLCBhbm5vdGF0aW9uU3RvcmFnZSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9wZXJhdG9yTGlzdCA9IG5ldyBfb3BlcmF0b3JfbGlzdC5PcGVyYXRvckxpc3QoKTtcblxuICAgICAgaWYgKCF0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZSB8fCBjb250ZW50ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBvcGVyYXRvckxpc3Q7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1hdHJpeCA9IFsxLCAwLCAwLCAxLCAwLCAwXTtcbiAgICAgIGNvbnN0IGJib3ggPSBbMCwgMCwgdGhpcy5kYXRhLnJlY3RbMl0gLSB0aGlzLmRhdGEucmVjdFswXSwgdGhpcy5kYXRhLnJlY3RbM10gLSB0aGlzLmRhdGEucmVjdFsxXV07XG4gICAgICBjb25zdCB0cmFuc2Zvcm0gPSBnZXRUcmFuc2Zvcm1NYXRyaXgodGhpcy5kYXRhLnJlY3QsIGJib3gsIG1hdHJpeCk7XG4gICAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLmJlZ2luQW5ub3RhdGlvbiwgW3RoaXMuZGF0YS5pZCwgdGhpcy5kYXRhLnJlY3QsIHRyYW5zZm9ybSwgbWF0cml4XSk7XG4gICAgICBjb25zdCBzdHJlYW0gPSBuZXcgX3N0cmVhbS5TdHJpbmdTdHJlYW0oY29udGVudCk7XG4gICAgICByZXR1cm4gZXZhbHVhdG9yLmdldE9wZXJhdG9yTGlzdCh7XG4gICAgICAgIHN0cmVhbSxcbiAgICAgICAgdGFzayxcbiAgICAgICAgcmVzb3VyY2VzOiB0aGlzLl9maWVsZFJlc291cmNlcy5tZXJnZWRSZXNvdXJjZXMsXG4gICAgICAgIG9wZXJhdG9yTGlzdFxuICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChfdXRpbC5PUFMuZW5kQW5ub3RhdGlvbiwgW10pO1xuICAgICAgICByZXR1cm4gb3BlcmF0b3JMaXN0O1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBzYXZlKGV2YWx1YXRvciwgdGFzaywgYW5ub3RhdGlvblN0b3JhZ2UpIHtcbiAgICBpZiAoIWFubm90YXRpb25TdG9yYWdlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBzdG9yYWdlRW50cnkgPSBhbm5vdGF0aW9uU3RvcmFnZS5nZXQodGhpcy5kYXRhLmlkKTtcbiAgICBjb25zdCB2YWx1ZSA9IHN0b3JhZ2VFbnRyeSAmJiBzdG9yYWdlRW50cnkudmFsdWU7XG5cbiAgICBpZiAodmFsdWUgPT09IHRoaXMuZGF0YS5maWVsZFZhbHVlIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGxldCBhcHBlYXJhbmNlID0gYXdhaXQgdGhpcy5fZ2V0QXBwZWFyYW5jZShldmFsdWF0b3IsIHRhc2ssIGFubm90YXRpb25TdG9yYWdlKTtcblxuICAgIGlmIChhcHBlYXJhbmNlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICB4cmVmXG4gICAgfSA9IGV2YWx1YXRvcjtcbiAgICBjb25zdCBkaWN0ID0geHJlZi5mZXRjaElmUmVmKHRoaXMucmVmKTtcblxuICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoZGljdCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGJib3ggPSBbMCwgMCwgdGhpcy5kYXRhLnJlY3RbMl0gLSB0aGlzLmRhdGEucmVjdFswXSwgdGhpcy5kYXRhLnJlY3RbM10gLSB0aGlzLmRhdGEucmVjdFsxXV07XG4gICAgY29uc3QgeGZhID0ge1xuICAgICAgcGF0aDogKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShkaWN0LmdldChcIlRcIikgfHwgXCJcIiksXG4gICAgICB2YWx1ZVxuICAgIH07XG4gICAgY29uc3QgbmV3UmVmID0geHJlZi5nZXROZXdSZWYoKTtcbiAgICBjb25zdCBBUCA9IG5ldyBfcHJpbWl0aXZlcy5EaWN0KHhyZWYpO1xuICAgIEFQLnNldChcIk5cIiwgbmV3UmVmKTtcbiAgICBjb25zdCBlbmNyeXB0ID0geHJlZi5lbmNyeXB0O1xuICAgIGxldCBvcmlnaW5hbFRyYW5zZm9ybSA9IG51bGw7XG4gICAgbGV0IG5ld1RyYW5zZm9ybSA9IG51bGw7XG5cbiAgICBpZiAoZW5jcnlwdCkge1xuICAgICAgb3JpZ2luYWxUcmFuc2Zvcm0gPSBlbmNyeXB0LmNyZWF0ZUNpcGhlclRyYW5zZm9ybSh0aGlzLnJlZi5udW0sIHRoaXMucmVmLmdlbik7XG4gICAgICBuZXdUcmFuc2Zvcm0gPSBlbmNyeXB0LmNyZWF0ZUNpcGhlclRyYW5zZm9ybShuZXdSZWYubnVtLCBuZXdSZWYuZ2VuKTtcbiAgICAgIGFwcGVhcmFuY2UgPSBuZXdUcmFuc2Zvcm0uZW5jcnlwdFN0cmluZyhhcHBlYXJhbmNlKTtcbiAgICB9XG5cbiAgICBkaWN0LnNldChcIlZcIiwgKDAsIF91dGlsLmlzQXNjaWkpKHZhbHVlKSA/IHZhbHVlIDogKDAsIF91dGlsLnN0cmluZ1RvVVRGMTZCRVN0cmluZykodmFsdWUpKTtcbiAgICBkaWN0LnNldChcIkFQXCIsIEFQKTtcbiAgICBkaWN0LnNldChcIk1cIiwgYEQ6JHsoMCwgX3V0aWwuZ2V0TW9kaWZpY2F0aW9uRGF0ZSkoKX1gKTtcbiAgICBjb25zdCBhcHBlYXJhbmNlRGljdCA9IG5ldyBfcHJpbWl0aXZlcy5EaWN0KHhyZWYpO1xuICAgIGFwcGVhcmFuY2VEaWN0LnNldChcIkxlbmd0aFwiLCBhcHBlYXJhbmNlLmxlbmd0aCk7XG4gICAgYXBwZWFyYW5jZURpY3Quc2V0KFwiU3VidHlwZVwiLCBfcHJpbWl0aXZlcy5OYW1lLmdldChcIkZvcm1cIikpO1xuICAgIGFwcGVhcmFuY2VEaWN0LnNldChcIlJlc291cmNlc1wiLCB0aGlzLl9nZXRTYXZlRmllbGRSZXNvdXJjZXMoeHJlZikpO1xuICAgIGFwcGVhcmFuY2VEaWN0LnNldChcIkJCb3hcIiwgYmJveCk7XG4gICAgY29uc3QgYnVmZmVyT3JpZ2luYWwgPSBbYCR7dGhpcy5yZWYubnVtfSAke3RoaXMucmVmLmdlbn0gb2JqXFxuYF07XG4gICAgKDAsIF93cml0ZXIud3JpdGVEaWN0KShkaWN0LCBidWZmZXJPcmlnaW5hbCwgb3JpZ2luYWxUcmFuc2Zvcm0pO1xuICAgIGJ1ZmZlck9yaWdpbmFsLnB1c2goXCJcXG5lbmRvYmpcXG5cIik7XG4gICAgY29uc3QgYnVmZmVyTmV3ID0gW2Ake25ld1JlZi5udW19ICR7bmV3UmVmLmdlbn0gb2JqXFxuYF07XG4gICAgKDAsIF93cml0ZXIud3JpdGVEaWN0KShhcHBlYXJhbmNlRGljdCwgYnVmZmVyTmV3LCBuZXdUcmFuc2Zvcm0pO1xuICAgIGJ1ZmZlck5ldy5wdXNoKFwiIHN0cmVhbVxcblwiLCBhcHBlYXJhbmNlLCBcIlxcbmVuZHN0cmVhbVxcbmVuZG9ialxcblwiKTtcbiAgICByZXR1cm4gW3tcbiAgICAgIHJlZjogdGhpcy5yZWYsXG4gICAgICBkYXRhOiBidWZmZXJPcmlnaW5hbC5qb2luKFwiXCIpLFxuICAgICAgeGZhXG4gICAgfSwge1xuICAgICAgcmVmOiBuZXdSZWYsXG4gICAgICBkYXRhOiBidWZmZXJOZXcuam9pbihcIlwiKSxcbiAgICAgIHhmYTogbnVsbFxuICAgIH1dO1xuICB9XG5cbiAgYXN5bmMgX2dldEFwcGVhcmFuY2UoZXZhbHVhdG9yLCB0YXNrLCBhbm5vdGF0aW9uU3RvcmFnZSkge1xuICAgIGNvbnN0IGlzUGFzc3dvcmQgPSB0aGlzLmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLlBBU1NXT1JEKTtcblxuICAgIGlmICghYW5ub3RhdGlvblN0b3JhZ2UgfHwgaXNQYXNzd29yZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RvcmFnZUVudHJ5ID0gYW5ub3RhdGlvblN0b3JhZ2UuZ2V0KHRoaXMuZGF0YS5pZCk7XG4gICAgbGV0IHZhbHVlID0gc3RvcmFnZUVudHJ5ICYmIHN0b3JhZ2VFbnRyeS52YWx1ZTtcblxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YWx1ZSA9IHZhbHVlLnRyaW0oKTtcblxuICAgIGlmICh2YWx1ZSA9PT0gXCJcIikge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgbGV0IGxpbmVDb3VudCA9IC0xO1xuXG4gICAgaWYgKHRoaXMuZGF0YS5tdWx0aUxpbmUpIHtcbiAgICAgIGxpbmVDb3VudCA9IHZhbHVlLnNwbGl0KC9cXHJcXG58XFxyfFxcbi8pLmxlbmd0aDtcbiAgICB9XG5cbiAgICBjb25zdCBkZWZhdWx0UGFkZGluZyA9IDI7XG4gICAgY29uc3QgaFBhZGRpbmcgPSBkZWZhdWx0UGFkZGluZztcbiAgICBjb25zdCB0b3RhbEhlaWdodCA9IHRoaXMuZGF0YS5yZWN0WzNdIC0gdGhpcy5kYXRhLnJlY3RbMV07XG4gICAgY29uc3QgdG90YWxXaWR0aCA9IHRoaXMuZGF0YS5yZWN0WzJdIC0gdGhpcy5kYXRhLnJlY3RbMF07XG5cbiAgICBpZiAoIXRoaXMuX2RlZmF1bHRBcHBlYXJhbmNlKSB7XG4gICAgICB0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhID0gKDAsIF9kZWZhdWx0X2FwcGVhcmFuY2UucGFyc2VEZWZhdWx0QXBwZWFyYW5jZSkodGhpcy5fZGVmYXVsdEFwcGVhcmFuY2UgPSBcIi9IZWx2ZXRpY2EgMCBUZiAwIGdcIik7XG4gICAgfVxuXG4gICAgY29uc3QgW2RlZmF1bHRBcHBlYXJhbmNlLCBmb250U2l6ZV0gPSB0aGlzLl9jb21wdXRlRm9udFNpemUodG90YWxIZWlnaHQsIGxpbmVDb3VudCk7XG5cbiAgICBjb25zdCBmb250ID0gYXdhaXQgdGhpcy5fZ2V0Rm9udERhdGEoZXZhbHVhdG9yLCB0YXNrKTtcbiAgICBsZXQgZGVzY2VudCA9IGZvbnQuZGVzY2VudDtcblxuICAgIGlmIChpc05hTihkZXNjZW50KSkge1xuICAgICAgZGVzY2VudCA9IDA7XG4gICAgfVxuXG4gICAgY29uc3QgdlBhZGRpbmcgPSBkZWZhdWx0UGFkZGluZyArIE1hdGguYWJzKGRlc2NlbnQpICogZm9udFNpemU7XG4gICAgY29uc3QgYWxpZ25tZW50ID0gdGhpcy5kYXRhLnRleHRBbGlnbm1lbnQ7XG5cbiAgICBpZiAodGhpcy5kYXRhLm11bHRpTGluZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldE11bHRpbGluZUFwcGVhcmFuY2UoZGVmYXVsdEFwcGVhcmFuY2UsIHZhbHVlLCBmb250LCBmb250U2l6ZSwgdG90YWxXaWR0aCwgdG90YWxIZWlnaHQsIGFsaWdubWVudCwgaFBhZGRpbmcsIHZQYWRkaW5nKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbmNvZGVkU3RyaW5nID0gZm9udC5lbmNvZGVTdHJpbmcodmFsdWUpLmpvaW4oXCJcIik7XG5cbiAgICBpZiAodGhpcy5kYXRhLmNvbWIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRDb21iQXBwZWFyYW5jZShkZWZhdWx0QXBwZWFyYW5jZSwgZm9udCwgZW5jb2RlZFN0cmluZywgdG90YWxXaWR0aCwgaFBhZGRpbmcsIHZQYWRkaW5nKTtcbiAgICB9XG5cbiAgICBpZiAoYWxpZ25tZW50ID09PSAwIHx8IGFsaWdubWVudCA+IDIpIHtcbiAgICAgIHJldHVybiBcIi9UeCBCTUMgcSBCVCBcIiArIGRlZmF1bHRBcHBlYXJhbmNlICsgYCAxIDAgMCAxICR7aFBhZGRpbmd9ICR7dlBhZGRpbmd9IFRtICgkeygwLCBfdXRpbC5lc2NhcGVTdHJpbmcpKGVuY29kZWRTdHJpbmcpfSkgVGpgICsgXCIgRVQgUSBFTUNcIjtcbiAgICB9XG5cbiAgICBjb25zdCByZW5kZXJlZFRleHQgPSB0aGlzLl9yZW5kZXJUZXh0KGVuY29kZWRTdHJpbmcsIGZvbnQsIGZvbnRTaXplLCB0b3RhbFdpZHRoLCBhbGlnbm1lbnQsIGhQYWRkaW5nLCB2UGFkZGluZyk7XG5cbiAgICByZXR1cm4gXCIvVHggQk1DIHEgQlQgXCIgKyBkZWZhdWx0QXBwZWFyYW5jZSArIGAgMSAwIDAgMSAwIDAgVG0gJHtyZW5kZXJlZFRleHR9YCArIFwiIEVUIFEgRU1DXCI7XG4gIH1cblxuICBhc3luYyBfZ2V0Rm9udERhdGEoZXZhbHVhdG9yLCB0YXNrKSB7XG4gICAgY29uc3Qgb3BlcmF0b3JMaXN0ID0gbmV3IF9vcGVyYXRvcl9saXN0Lk9wZXJhdG9yTGlzdCgpO1xuICAgIGNvbnN0IGluaXRpYWxTdGF0ZSA9IHtcbiAgICAgIGZvbnQ6IG51bGwsXG5cbiAgICAgIGNsb25lKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgIH07XG4gICAgY29uc3Qge1xuICAgICAgZm9udE5hbWUsXG4gICAgICBmb250U2l6ZVxuICAgIH0gPSB0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhO1xuICAgIGF3YWl0IGV2YWx1YXRvci5oYW5kbGVTZXRGb250KHRoaXMuX2ZpZWxkUmVzb3VyY2VzLm1lcmdlZFJlc291cmNlcywgW2ZvbnROYW1lICYmIF9wcmltaXRpdmVzLk5hbWUuZ2V0KGZvbnROYW1lKSwgZm9udFNpemVdLCBudWxsLCBvcGVyYXRvckxpc3QsIHRhc2ssIGluaXRpYWxTdGF0ZSwgbnVsbCk7XG4gICAgcmV0dXJuIGluaXRpYWxTdGF0ZS5mb250O1xuICB9XG5cbiAgX2NvbXB1dGVGb250U2l6ZShoZWlnaHQsIGxpbmVDb3VudCkge1xuICAgIGxldCB7XG4gICAgICBmb250U2l6ZVxuICAgIH0gPSB0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhO1xuXG4gICAgaWYgKCFmb250U2l6ZSkge1xuICAgICAgY29uc3Qgcm91bmRXaXRoT25lRGlnaXQgPSB4ID0+IE1hdGgucm91bmQoeCAqIDEwKSAvIDEwO1xuXG4gICAgICBjb25zdCBGT05UX0ZBQ1RPUiA9IDAuODtcblxuICAgICAgaWYgKGxpbmVDb3VudCA9PT0gLTEpIHtcbiAgICAgICAgZm9udFNpemUgPSByb3VuZFdpdGhPbmVEaWdpdChGT05UX0ZBQ1RPUiAqIGhlaWdodCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb250U2l6ZSA9IDEwO1xuICAgICAgICBsZXQgbGluZUhlaWdodCA9IGZvbnRTaXplIC8gRk9OVF9GQUNUT1I7XG4gICAgICAgIGxldCBudW1iZXJPZkxpbmVzID0gTWF0aC5yb3VuZChoZWlnaHQgLyBsaW5lSGVpZ2h0KTtcbiAgICAgICAgbnVtYmVyT2ZMaW5lcyA9IE1hdGgubWF4KG51bWJlck9mTGluZXMsIGxpbmVDb3VudCk7XG4gICAgICAgIGxpbmVIZWlnaHQgPSBoZWlnaHQgLyBudW1iZXJPZkxpbmVzO1xuICAgICAgICBmb250U2l6ZSA9IHJvdW5kV2l0aE9uZURpZ2l0KEZPTlRfRkFDVE9SICogbGluZUhlaWdodCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZm9udE5hbWUsXG4gICAgICAgIGZvbnRDb2xvclxuICAgICAgfSA9IHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGE7XG4gICAgICB0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZSA9ICgwLCBfZGVmYXVsdF9hcHBlYXJhbmNlLmNyZWF0ZURlZmF1bHRBcHBlYXJhbmNlKSh7XG4gICAgICAgIGZvbnRTaXplLFxuICAgICAgICBmb250TmFtZSxcbiAgICAgICAgZm9udENvbG9yXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gW3RoaXMuX2RlZmF1bHRBcHBlYXJhbmNlLCBmb250U2l6ZV07XG4gIH1cblxuICBfcmVuZGVyVGV4dCh0ZXh0LCBmb250LCBmb250U2l6ZSwgdG90YWxXaWR0aCwgYWxpZ25tZW50LCBoUGFkZGluZywgdlBhZGRpbmcpIHtcbiAgICBjb25zdCBnbHlwaHMgPSBmb250LmNoYXJzVG9HbHlwaHModGV4dCk7XG4gICAgY29uc3Qgc2NhbGUgPSBmb250U2l6ZSAvIDEwMDA7XG4gICAgbGV0IHdpZHRoID0gMDtcblxuICAgIGZvciAoY29uc3QgZ2x5cGggb2YgZ2x5cGhzKSB7XG4gICAgICB3aWR0aCArPSBnbHlwaC53aWR0aCAqIHNjYWxlO1xuICAgIH1cblxuICAgIGxldCBzaGlmdDtcblxuICAgIGlmIChhbGlnbm1lbnQgPT09IDEpIHtcbiAgICAgIHNoaWZ0ID0gKHRvdGFsV2lkdGggLSB3aWR0aCkgLyAyO1xuICAgIH0gZWxzZSBpZiAoYWxpZ25tZW50ID09PSAyKSB7XG4gICAgICBzaGlmdCA9IHRvdGFsV2lkdGggLSB3aWR0aCAtIGhQYWRkaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaGlmdCA9IGhQYWRkaW5nO1xuICAgIH1cblxuICAgIHNoaWZ0ID0gc2hpZnQudG9GaXhlZCgyKTtcbiAgICB2UGFkZGluZyA9IHZQYWRkaW5nLnRvRml4ZWQoMik7XG4gICAgcmV0dXJuIGAke3NoaWZ0fSAke3ZQYWRkaW5nfSBUZCAoJHsoMCwgX3V0aWwuZXNjYXBlU3RyaW5nKSh0ZXh0KX0pIFRqYDtcbiAgfVxuXG4gIF9nZXRTYXZlRmllbGRSZXNvdXJjZXMoeHJlZikge1xuICAgIGNvbnN0IHtcbiAgICAgIGxvY2FsUmVzb3VyY2VzLFxuICAgICAgYXBwZWFyYW5jZVJlc291cmNlcyxcbiAgICAgIGFjcm9Gb3JtUmVzb3VyY2VzXG4gICAgfSA9IHRoaXMuX2ZpZWxkUmVzb3VyY2VzO1xuICAgIGNvbnN0IGZvbnROYW1lID0gdGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YSAmJiB0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhLmZvbnROYW1lO1xuXG4gICAgaWYgKCFmb250TmFtZSkge1xuICAgICAgcmV0dXJuIGxvY2FsUmVzb3VyY2VzIHx8IF9wcmltaXRpdmVzLkRpY3QuZW1wdHk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCByZXNvdXJjZXMgb2YgW2xvY2FsUmVzb3VyY2VzLCBhcHBlYXJhbmNlUmVzb3VyY2VzXSkge1xuICAgICAgaWYgKHJlc291cmNlcyBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpIHtcbiAgICAgICAgY29uc3QgbG9jYWxGb250ID0gcmVzb3VyY2VzLmdldChcIkZvbnRcIik7XG5cbiAgICAgICAgaWYgKGxvY2FsRm9udCBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QgJiYgbG9jYWxGb250Lmhhcyhmb250TmFtZSkpIHtcbiAgICAgICAgICByZXR1cm4gcmVzb3VyY2VzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFjcm9Gb3JtUmVzb3VyY2VzIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCkge1xuICAgICAgY29uc3QgYWNyb0Zvcm1Gb250ID0gYWNyb0Zvcm1SZXNvdXJjZXMuZ2V0KFwiRm9udFwiKTtcblxuICAgICAgaWYgKGFjcm9Gb3JtRm9udCBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QgJiYgYWNyb0Zvcm1Gb250Lmhhcyhmb250TmFtZSkpIHtcbiAgICAgICAgY29uc3Qgc3ViRm9udERpY3QgPSBuZXcgX3ByaW1pdGl2ZXMuRGljdCh4cmVmKTtcbiAgICAgICAgc3ViRm9udERpY3Quc2V0KGZvbnROYW1lLCBhY3JvRm9ybUZvbnQuZ2V0UmF3KGZvbnROYW1lKSk7XG4gICAgICAgIGNvbnN0IHN1YlJlc291cmNlc0RpY3QgPSBuZXcgX3ByaW1pdGl2ZXMuRGljdCh4cmVmKTtcbiAgICAgICAgc3ViUmVzb3VyY2VzRGljdC5zZXQoXCJGb250XCIsIHN1YkZvbnREaWN0KTtcbiAgICAgICAgcmV0dXJuIF9wcmltaXRpdmVzLkRpY3QubWVyZ2Uoe1xuICAgICAgICAgIHhyZWYsXG4gICAgICAgICAgZGljdEFycmF5OiBbc3ViUmVzb3VyY2VzRGljdCwgbG9jYWxSZXNvdXJjZXNdLFxuICAgICAgICAgIG1lcmdlU3ViRGljdHM6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGxvY2FsUmVzb3VyY2VzIHx8IF9wcmltaXRpdmVzLkRpY3QuZW1wdHk7XG4gIH1cblxuICBnZXRGaWVsZE9iamVjdCgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIFRleHRXaWRnZXRBbm5vdGF0aW9uIGV4dGVuZHMgV2lkZ2V0QW5ub3RhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtcykge1xuICAgIHN1cGVyKHBhcmFtcyk7XG4gICAgdGhpcy5faGFzVGV4dCA9IHRydWU7XG4gICAgY29uc3QgZGljdCA9IHBhcmFtcy5kaWN0O1xuXG4gICAgaWYgKCEoMCwgX3V0aWwuaXNTdHJpbmcpKHRoaXMuZGF0YS5maWVsZFZhbHVlKSkge1xuICAgICAgdGhpcy5kYXRhLmZpZWxkVmFsdWUgPSBcIlwiO1xuICAgIH1cblxuICAgIGxldCBhbGlnbm1lbnQgPSAoMCwgX2NvcmVfdXRpbHMuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe1xuICAgICAgZGljdCxcbiAgICAgIGtleTogXCJRXCJcbiAgICB9KTtcblxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihhbGlnbm1lbnQpIHx8IGFsaWdubWVudCA8IDAgfHwgYWxpZ25tZW50ID4gMikge1xuICAgICAgYWxpZ25tZW50ID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGEudGV4dEFsaWdubWVudCA9IGFsaWdubWVudDtcbiAgICBsZXQgbWF4aW11bUxlbmd0aCA9ICgwLCBfY29yZV91dGlscy5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7XG4gICAgICBkaWN0LFxuICAgICAga2V5OiBcIk1heExlblwiXG4gICAgfSk7XG5cbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIobWF4aW11bUxlbmd0aCkgfHwgbWF4aW11bUxlbmd0aCA8IDApIHtcbiAgICAgIG1heGltdW1MZW5ndGggPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuZGF0YS5tYXhMZW4gPSBtYXhpbXVtTGVuZ3RoO1xuICAgIHRoaXMuZGF0YS5tdWx0aUxpbmUgPSB0aGlzLmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLk1VTFRJTElORSk7XG4gICAgdGhpcy5kYXRhLmNvbWIgPSB0aGlzLmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLkNPTUIpICYmICF0aGlzLmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLk1VTFRJTElORSkgJiYgIXRoaXMuaGFzRmllbGRGbGFnKF91dGlsLkFubm90YXRpb25GaWVsZEZsYWcuUEFTU1dPUkQpICYmICF0aGlzLmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLkZJTEVTRUxFQ1QpICYmIHRoaXMuZGF0YS5tYXhMZW4gIT09IG51bGw7XG4gIH1cblxuICBfZ2V0Q29tYkFwcGVhcmFuY2UoZGVmYXVsdEFwcGVhcmFuY2UsIGZvbnQsIHRleHQsIHdpZHRoLCBoUGFkZGluZywgdlBhZGRpbmcpIHtcbiAgICBjb25zdCBjb21iV2lkdGggPSAod2lkdGggLyB0aGlzLmRhdGEubWF4TGVuKS50b0ZpeGVkKDIpO1xuICAgIGNvbnN0IGJ1ZiA9IFtdO1xuICAgIGNvbnN0IHBvc2l0aW9ucyA9IGZvbnQuZ2V0Q2hhclBvc2l0aW9ucyh0ZXh0KTtcblxuICAgIGZvciAoY29uc3QgW3N0YXJ0LCBlbmRdIG9mIHBvc2l0aW9ucykge1xuICAgICAgYnVmLnB1c2goYCgkeygwLCBfdXRpbC5lc2NhcGVTdHJpbmcpKHRleHQuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpKX0pIFRqYCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVuZGVyZWRDb21iID0gYnVmLmpvaW4oYCAke2NvbWJXaWR0aH0gMCBUZCBgKTtcbiAgICByZXR1cm4gXCIvVHggQk1DIHEgQlQgXCIgKyBkZWZhdWx0QXBwZWFyYW5jZSArIGAgMSAwIDAgMSAke2hQYWRkaW5nfSAke3ZQYWRkaW5nfSBUbSAke3JlbmRlcmVkQ29tYn1gICsgXCIgRVQgUSBFTUNcIjtcbiAgfVxuXG4gIF9nZXRNdWx0aWxpbmVBcHBlYXJhbmNlKGRlZmF1bHRBcHBlYXJhbmNlLCB0ZXh0LCBmb250LCBmb250U2l6ZSwgd2lkdGgsIGhlaWdodCwgYWxpZ25tZW50LCBoUGFkZGluZywgdlBhZGRpbmcpIHtcbiAgICBjb25zdCBsaW5lcyA9IHRleHQuc3BsaXQoL1xcclxcbnxcXHJ8XFxuLyk7XG4gICAgY29uc3QgYnVmID0gW107XG4gICAgY29uc3QgdG90YWxXaWR0aCA9IHdpZHRoIC0gMiAqIGhQYWRkaW5nO1xuXG4gICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICBjb25zdCBjaHVua3MgPSB0aGlzLl9zcGxpdExpbmUobGluZSwgZm9udCwgZm9udFNpemUsIHRvdGFsV2lkdGgpO1xuXG4gICAgICBmb3IgKGNvbnN0IGNodW5rIG9mIGNodW5rcykge1xuICAgICAgICBjb25zdCBwYWRkaW5nID0gYnVmLmxlbmd0aCA9PT0gMCA/IGhQYWRkaW5nIDogMDtcbiAgICAgICAgYnVmLnB1c2godGhpcy5fcmVuZGVyVGV4dChjaHVuaywgZm9udCwgZm9udFNpemUsIHdpZHRoLCBhbGlnbm1lbnQsIHBhZGRpbmcsIC1mb250U2l6ZSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJlbmRlcmVkVGV4dCA9IGJ1Zi5qb2luKFwiXFxuXCIpO1xuICAgIHJldHVybiBcIi9UeCBCTUMgcSBCVCBcIiArIGRlZmF1bHRBcHBlYXJhbmNlICsgYCAxIDAgMCAxIDAgJHtoZWlnaHR9IFRtICR7cmVuZGVyZWRUZXh0fWAgKyBcIiBFVCBRIEVNQ1wiO1xuICB9XG5cbiAgX3NwbGl0TGluZShsaW5lLCBmb250LCBmb250U2l6ZSwgd2lkdGgpIHtcbiAgICBsaW5lID0gZm9udC5lbmNvZGVTdHJpbmcobGluZSkuam9pbihcIlwiKTtcbiAgICBjb25zdCBnbHlwaHMgPSBmb250LmNoYXJzVG9HbHlwaHMobGluZSk7XG5cbiAgICBpZiAoZ2x5cGhzLmxlbmd0aCA8PSAxKSB7XG4gICAgICByZXR1cm4gW2xpbmVdO1xuICAgIH1cblxuICAgIGNvbnN0IHBvc2l0aW9ucyA9IGZvbnQuZ2V0Q2hhclBvc2l0aW9ucyhsaW5lKTtcbiAgICBjb25zdCBzY2FsZSA9IGZvbnRTaXplIC8gMTAwMDtcbiAgICBjb25zdCBjaHVua3MgPSBbXTtcbiAgICBsZXQgbGFzdFNwYWNlUG9zSW5TdHJpbmdTdGFydCA9IC0xLFxuICAgICAgICBsYXN0U3BhY2VQb3NJblN0cmluZ0VuZCA9IC0xLFxuICAgICAgICBsYXN0U3BhY2VQb3MgPSAtMSxcbiAgICAgICAgc3RhcnRDaHVuayA9IDAsXG4gICAgICAgIGN1cnJlbnRXaWR0aCA9IDA7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBnbHlwaHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgY29uc3QgW3N0YXJ0LCBlbmRdID0gcG9zaXRpb25zW2ldO1xuICAgICAgY29uc3QgZ2x5cGggPSBnbHlwaHNbaV07XG4gICAgICBjb25zdCBnbHlwaFdpZHRoID0gZ2x5cGgud2lkdGggKiBzY2FsZTtcblxuICAgICAgaWYgKGdseXBoLnVuaWNvZGUgPT09IFwiIFwiKSB7XG4gICAgICAgIGlmIChjdXJyZW50V2lkdGggKyBnbHlwaFdpZHRoID4gd2lkdGgpIHtcbiAgICAgICAgICBjaHVua3MucHVzaChsaW5lLnN1YnN0cmluZyhzdGFydENodW5rLCBzdGFydCkpO1xuICAgICAgICAgIHN0YXJ0Q2h1bmsgPSBzdGFydDtcbiAgICAgICAgICBjdXJyZW50V2lkdGggPSBnbHlwaFdpZHRoO1xuICAgICAgICAgIGxhc3RTcGFjZVBvc0luU3RyaW5nU3RhcnQgPSAtMTtcbiAgICAgICAgICBsYXN0U3BhY2VQb3MgPSAtMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdXJyZW50V2lkdGggKz0gZ2x5cGhXaWR0aDtcbiAgICAgICAgICBsYXN0U3BhY2VQb3NJblN0cmluZ1N0YXJ0ID0gc3RhcnQ7XG4gICAgICAgICAgbGFzdFNwYWNlUG9zSW5TdHJpbmdFbmQgPSBlbmQ7XG4gICAgICAgICAgbGFzdFNwYWNlUG9zID0gaTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGN1cnJlbnRXaWR0aCArIGdseXBoV2lkdGggPiB3aWR0aCkge1xuICAgICAgICAgIGlmIChsYXN0U3BhY2VQb3NJblN0cmluZ1N0YXJ0ICE9PSAtMSkge1xuICAgICAgICAgICAgY2h1bmtzLnB1c2gobGluZS5zdWJzdHJpbmcoc3RhcnRDaHVuaywgbGFzdFNwYWNlUG9zSW5TdHJpbmdFbmQpKTtcbiAgICAgICAgICAgIHN0YXJ0Q2h1bmsgPSBsYXN0U3BhY2VQb3NJblN0cmluZ0VuZDtcbiAgICAgICAgICAgIGkgPSBsYXN0U3BhY2VQb3MgKyAxO1xuICAgICAgICAgICAgbGFzdFNwYWNlUG9zSW5TdHJpbmdTdGFydCA9IC0xO1xuICAgICAgICAgICAgY3VycmVudFdpZHRoID0gMDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2h1bmtzLnB1c2gobGluZS5zdWJzdHJpbmcoc3RhcnRDaHVuaywgc3RhcnQpKTtcbiAgICAgICAgICAgIHN0YXJ0Q2h1bmsgPSBzdGFydDtcbiAgICAgICAgICAgIGN1cnJlbnRXaWR0aCA9IGdseXBoV2lkdGg7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN1cnJlbnRXaWR0aCArPSBnbHlwaFdpZHRoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0Q2h1bmsgPCBsaW5lLmxlbmd0aCkge1xuICAgICAgY2h1bmtzLnB1c2gobGluZS5zdWJzdHJpbmcoc3RhcnRDaHVuaywgbGluZS5sZW5ndGgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2h1bmtzO1xuICB9XG5cbiAgZ2V0RmllbGRPYmplY3QoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB0aGlzLmRhdGEuaWQsXG4gICAgICB2YWx1ZTogdGhpcy5kYXRhLmZpZWxkVmFsdWUsXG4gICAgICBkZWZhdWx0VmFsdWU6IHRoaXMuZGF0YS5kZWZhdWx0RmllbGRWYWx1ZSxcbiAgICAgIG11bHRpbGluZTogdGhpcy5kYXRhLm11bHRpTGluZSxcbiAgICAgIHBhc3N3b3JkOiB0aGlzLmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLlBBU1NXT1JEKSxcbiAgICAgIGNoYXJMaW1pdDogdGhpcy5kYXRhLm1heExlbixcbiAgICAgIGNvbWI6IHRoaXMuZGF0YS5jb21iLFxuICAgICAgZWRpdGFibGU6ICF0aGlzLmRhdGEucmVhZE9ubHksXG4gICAgICBoaWRkZW46IHRoaXMuZGF0YS5oaWRkZW4sXG4gICAgICBuYW1lOiB0aGlzLmRhdGEuZmllbGROYW1lLFxuICAgICAgcmVjdDogdGhpcy5kYXRhLnJlY3QsXG4gICAgICBhY3Rpb25zOiB0aGlzLmRhdGEuYWN0aW9ucyxcbiAgICAgIHBhZ2U6IHRoaXMuZGF0YS5wYWdlSW5kZXgsXG4gICAgICBzdHJva2VDb2xvcjogdGhpcy5kYXRhLmJvcmRlckNvbG9yLFxuICAgICAgZmlsbENvbG9yOiB0aGlzLmRhdGEuYmFja2dyb3VuZENvbG9yLFxuICAgICAgdHlwZTogXCJ0ZXh0XCJcbiAgICB9O1xuICB9XG5cbn1cblxuY2xhc3MgQnV0dG9uV2lkZ2V0QW5ub3RhdGlvbiBleHRlbmRzIFdpZGdldEFubm90YXRpb24ge1xuICBjb25zdHJ1Y3RvcihwYXJhbXMpIHtcbiAgICBzdXBlcihwYXJhbXMpO1xuICAgIHRoaXMuY2hlY2tlZEFwcGVhcmFuY2UgPSBudWxsO1xuICAgIHRoaXMudW5jaGVja2VkQXBwZWFyYW5jZSA9IG51bGw7XG4gICAgdGhpcy5kYXRhLmNoZWNrQm94ID0gIXRoaXMuaGFzRmllbGRGbGFnKF91dGlsLkFubm90YXRpb25GaWVsZEZsYWcuUkFESU8pICYmICF0aGlzLmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLlBVU0hCVVRUT04pO1xuICAgIHRoaXMuZGF0YS5yYWRpb0J1dHRvbiA9IHRoaXMuaGFzRmllbGRGbGFnKF91dGlsLkFubm90YXRpb25GaWVsZEZsYWcuUkFESU8pICYmICF0aGlzLmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLlBVU0hCVVRUT04pO1xuICAgIHRoaXMuZGF0YS5wdXNoQnV0dG9uID0gdGhpcy5oYXNGaWVsZEZsYWcoX3V0aWwuQW5ub3RhdGlvbkZpZWxkRmxhZy5QVVNIQlVUVE9OKTtcbiAgICB0aGlzLmRhdGEuaXNUb29sdGlwT25seSA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuZGF0YS5jaGVja0JveCkge1xuICAgICAgdGhpcy5fcHJvY2Vzc0NoZWNrQm94KHBhcmFtcyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmRhdGEucmFkaW9CdXR0b24pIHtcbiAgICAgIHRoaXMuX3Byb2Nlc3NSYWRpb0J1dHRvbihwYXJhbXMpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5kYXRhLnB1c2hCdXR0b24pIHtcbiAgICAgIHRoaXMuZGF0YS5oYXNPd25DYW52YXMgPSB0cnVlO1xuXG4gICAgICB0aGlzLl9wcm9jZXNzUHVzaEJ1dHRvbihwYXJhbXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJJbnZhbGlkIGZpZWxkIGZsYWdzIGZvciBidXR0b24gd2lkZ2V0IGFubm90YXRpb25cIik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0T3BlcmF0b3JMaXN0KGV2YWx1YXRvciwgdGFzaywgaW50ZW50LCByZW5kZXJGb3JtcywgYW5ub3RhdGlvblN0b3JhZ2UpIHtcbiAgICBpZiAodGhpcy5kYXRhLnB1c2hCdXR0b24pIHtcbiAgICAgIHJldHVybiBzdXBlci5nZXRPcGVyYXRvckxpc3QoZXZhbHVhdG9yLCB0YXNrLCBpbnRlbnQsIGZhbHNlLCBhbm5vdGF0aW9uU3RvcmFnZSk7XG4gICAgfVxuXG4gICAgbGV0IHZhbHVlID0gbnVsbDtcblxuICAgIGlmIChhbm5vdGF0aW9uU3RvcmFnZSkge1xuICAgICAgY29uc3Qgc3RvcmFnZUVudHJ5ID0gYW5ub3RhdGlvblN0b3JhZ2UuZ2V0KHRoaXMuZGF0YS5pZCk7XG4gICAgICB2YWx1ZSA9IHN0b3JhZ2VFbnRyeSA/IHN0b3JhZ2VFbnRyeS52YWx1ZSA6IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICBpZiAodGhpcy5hcHBlYXJhbmNlKSB7XG4gICAgICAgIHJldHVybiBzdXBlci5nZXRPcGVyYXRvckxpc3QoZXZhbHVhdG9yLCB0YXNrLCBpbnRlbnQsIHJlbmRlckZvcm1zLCBhbm5vdGF0aW9uU3RvcmFnZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmRhdGEuY2hlY2tCb3gpIHtcbiAgICAgICAgdmFsdWUgPSB0aGlzLmRhdGEuZmllbGRWYWx1ZSA9PT0gdGhpcy5kYXRhLmV4cG9ydFZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSB0aGlzLmRhdGEuZmllbGRWYWx1ZSA9PT0gdGhpcy5kYXRhLmJ1dHRvblZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGFwcGVhcmFuY2UgPSB2YWx1ZSA/IHRoaXMuY2hlY2tlZEFwcGVhcmFuY2UgOiB0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2U7XG5cbiAgICBpZiAoYXBwZWFyYW5jZSkge1xuICAgICAgY29uc3Qgc2F2ZWRBcHBlYXJhbmNlID0gdGhpcy5hcHBlYXJhbmNlO1xuICAgICAgdGhpcy5hcHBlYXJhbmNlID0gYXBwZWFyYW5jZTtcbiAgICAgIGNvbnN0IG9wZXJhdG9yTGlzdCA9IHN1cGVyLmdldE9wZXJhdG9yTGlzdChldmFsdWF0b3IsIHRhc2ssIGludGVudCwgcmVuZGVyRm9ybXMsIGFubm90YXRpb25TdG9yYWdlKTtcbiAgICAgIHRoaXMuYXBwZWFyYW5jZSA9IHNhdmVkQXBwZWFyYW5jZTtcbiAgICAgIHJldHVybiBvcGVyYXRvckxpc3Q7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBfb3BlcmF0b3JfbGlzdC5PcGVyYXRvckxpc3QoKTtcbiAgfVxuXG4gIGFzeW5jIHNhdmUoZXZhbHVhdG9yLCB0YXNrLCBhbm5vdGF0aW9uU3RvcmFnZSkge1xuICAgIGlmICh0aGlzLmRhdGEuY2hlY2tCb3gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zYXZlQ2hlY2tib3goZXZhbHVhdG9yLCB0YXNrLCBhbm5vdGF0aW9uU3RvcmFnZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGF0YS5yYWRpb0J1dHRvbikge1xuICAgICAgcmV0dXJuIHRoaXMuX3NhdmVSYWRpb0J1dHRvbihldmFsdWF0b3IsIHRhc2ssIGFubm90YXRpb25TdG9yYWdlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIF9zYXZlQ2hlY2tib3goZXZhbHVhdG9yLCB0YXNrLCBhbm5vdGF0aW9uU3RvcmFnZSkge1xuICAgIGlmICghYW5ub3RhdGlvblN0b3JhZ2UpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHN0b3JhZ2VFbnRyeSA9IGFubm90YXRpb25TdG9yYWdlLmdldCh0aGlzLmRhdGEuaWQpO1xuICAgIGNvbnN0IHZhbHVlID0gc3RvcmFnZUVudHJ5ICYmIHN0b3JhZ2VFbnRyeS52YWx1ZTtcblxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSB0aGlzLmRhdGEuZmllbGRWYWx1ZSA9PT0gdGhpcy5kYXRhLmV4cG9ydFZhbHVlO1xuXG4gICAgaWYgKGRlZmF1bHRWYWx1ZSA9PT0gdmFsdWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGRpY3QgPSBldmFsdWF0b3IueHJlZi5mZXRjaElmUmVmKHRoaXMucmVmKTtcblxuICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoZGljdCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHhmYSA9IHtcbiAgICAgIHBhdGg6ICgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykoZGljdC5nZXQoXCJUXCIpIHx8IFwiXCIpLFxuICAgICAgdmFsdWU6IHZhbHVlID8gdGhpcy5kYXRhLmV4cG9ydFZhbHVlIDogXCJcIlxuICAgIH07XG5cbiAgICBjb25zdCBuYW1lID0gX3ByaW1pdGl2ZXMuTmFtZS5nZXQodmFsdWUgPyB0aGlzLmRhdGEuZXhwb3J0VmFsdWUgOiBcIk9mZlwiKTtcblxuICAgIGRpY3Quc2V0KFwiVlwiLCBuYW1lKTtcbiAgICBkaWN0LnNldChcIkFTXCIsIG5hbWUpO1xuICAgIGRpY3Quc2V0KFwiTVwiLCBgRDokeygwLCBfdXRpbC5nZXRNb2RpZmljYXRpb25EYXRlKSgpfWApO1xuICAgIGNvbnN0IGVuY3J5cHQgPSBldmFsdWF0b3IueHJlZi5lbmNyeXB0O1xuICAgIGxldCBvcmlnaW5hbFRyYW5zZm9ybSA9IG51bGw7XG5cbiAgICBpZiAoZW5jcnlwdCkge1xuICAgICAgb3JpZ2luYWxUcmFuc2Zvcm0gPSBlbmNyeXB0LmNyZWF0ZUNpcGhlclRyYW5zZm9ybSh0aGlzLnJlZi5udW0sIHRoaXMucmVmLmdlbik7XG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID0gW2Ake3RoaXMucmVmLm51bX0gJHt0aGlzLnJlZi5nZW59IG9ialxcbmBdO1xuICAgICgwLCBfd3JpdGVyLndyaXRlRGljdCkoZGljdCwgYnVmZmVyLCBvcmlnaW5hbFRyYW5zZm9ybSk7XG4gICAgYnVmZmVyLnB1c2goXCJcXG5lbmRvYmpcXG5cIik7XG4gICAgcmV0dXJuIFt7XG4gICAgICByZWY6IHRoaXMucmVmLFxuICAgICAgZGF0YTogYnVmZmVyLmpvaW4oXCJcIiksXG4gICAgICB4ZmFcbiAgICB9XTtcbiAgfVxuXG4gIGFzeW5jIF9zYXZlUmFkaW9CdXR0b24oZXZhbHVhdG9yLCB0YXNrLCBhbm5vdGF0aW9uU3RvcmFnZSkge1xuICAgIGlmICghYW5ub3RhdGlvblN0b3JhZ2UpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHN0b3JhZ2VFbnRyeSA9IGFubm90YXRpb25TdG9yYWdlLmdldCh0aGlzLmRhdGEuaWQpO1xuICAgIGNvbnN0IHZhbHVlID0gc3RvcmFnZUVudHJ5ICYmIHN0b3JhZ2VFbnRyeS52YWx1ZTtcblxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSB0aGlzLmRhdGEuZmllbGRWYWx1ZSA9PT0gdGhpcy5kYXRhLmJ1dHRvblZhbHVlO1xuXG4gICAgaWYgKGRlZmF1bHRWYWx1ZSA9PT0gdmFsdWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGRpY3QgPSBldmFsdWF0b3IueHJlZi5mZXRjaElmUmVmKHRoaXMucmVmKTtcblxuICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoZGljdCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHhmYSA9IHtcbiAgICAgIHBhdGg6ICgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykoZGljdC5nZXQoXCJUXCIpIHx8IFwiXCIpLFxuICAgICAgdmFsdWU6IHZhbHVlID8gdGhpcy5kYXRhLmJ1dHRvblZhbHVlIDogXCJcIlxuICAgIH07XG5cbiAgICBjb25zdCBuYW1lID0gX3ByaW1pdGl2ZXMuTmFtZS5nZXQodmFsdWUgPyB0aGlzLmRhdGEuYnV0dG9uVmFsdWUgOiBcIk9mZlwiKTtcblxuICAgIGxldCBwYXJlbnRCdWZmZXIgPSBudWxsO1xuICAgIGNvbnN0IGVuY3J5cHQgPSBldmFsdWF0b3IueHJlZi5lbmNyeXB0O1xuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzUmVmKSh0aGlzLnBhcmVudCkpIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gZXZhbHVhdG9yLnhyZWYuZmV0Y2godGhpcy5wYXJlbnQpO1xuICAgICAgICBsZXQgcGFyZW50VHJhbnNmb3JtID0gbnVsbDtcblxuICAgICAgICBpZiAoZW5jcnlwdCkge1xuICAgICAgICAgIHBhcmVudFRyYW5zZm9ybSA9IGVuY3J5cHQuY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKHRoaXMucGFyZW50Lm51bSwgdGhpcy5wYXJlbnQuZ2VuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcmVudC5zZXQoXCJWXCIsIG5hbWUpO1xuICAgICAgICBwYXJlbnRCdWZmZXIgPSBbYCR7dGhpcy5wYXJlbnQubnVtfSAke3RoaXMucGFyZW50Lmdlbn0gb2JqXFxuYF07XG4gICAgICAgICgwLCBfd3JpdGVyLndyaXRlRGljdCkocGFyZW50LCBwYXJlbnRCdWZmZXIsIHBhcmVudFRyYW5zZm9ybSk7XG4gICAgICAgIHBhcmVudEJ1ZmZlci5wdXNoKFwiXFxuZW5kb2JqXFxuXCIpO1xuICAgICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KSh0aGlzLnBhcmVudCkpIHtcbiAgICAgICAgdGhpcy5wYXJlbnQuc2V0KFwiVlwiLCBuYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkaWN0LnNldChcIkFTXCIsIG5hbWUpO1xuICAgIGRpY3Quc2V0KFwiTVwiLCBgRDokeygwLCBfdXRpbC5nZXRNb2RpZmljYXRpb25EYXRlKSgpfWApO1xuICAgIGxldCBvcmlnaW5hbFRyYW5zZm9ybSA9IG51bGw7XG5cbiAgICBpZiAoZW5jcnlwdCkge1xuICAgICAgb3JpZ2luYWxUcmFuc2Zvcm0gPSBlbmNyeXB0LmNyZWF0ZUNpcGhlclRyYW5zZm9ybSh0aGlzLnJlZi5udW0sIHRoaXMucmVmLmdlbik7XG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID0gW2Ake3RoaXMucmVmLm51bX0gJHt0aGlzLnJlZi5nZW59IG9ialxcbmBdO1xuICAgICgwLCBfd3JpdGVyLndyaXRlRGljdCkoZGljdCwgYnVmZmVyLCBvcmlnaW5hbFRyYW5zZm9ybSk7XG4gICAgYnVmZmVyLnB1c2goXCJcXG5lbmRvYmpcXG5cIik7XG4gICAgY29uc3QgbmV3UmVmcyA9IFt7XG4gICAgICByZWY6IHRoaXMucmVmLFxuICAgICAgZGF0YTogYnVmZmVyLmpvaW4oXCJcIiksXG4gICAgICB4ZmFcbiAgICB9XTtcblxuICAgIGlmIChwYXJlbnRCdWZmZXIgIT09IG51bGwpIHtcbiAgICAgIG5ld1JlZnMucHVzaCh7XG4gICAgICAgIHJlZjogdGhpcy5wYXJlbnQsXG4gICAgICAgIGRhdGE6IHBhcmVudEJ1ZmZlci5qb2luKFwiXCIpLFxuICAgICAgICB4ZmE6IG51bGxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdSZWZzO1xuICB9XG5cbiAgX2dldERlZmF1bHRDaGVja2VkQXBwZWFyYW5jZShwYXJhbXMsIHR5cGUpIHtcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMuZGF0YS5yZWN0WzJdIC0gdGhpcy5kYXRhLnJlY3RbMF07XG4gICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5kYXRhLnJlY3RbM10gLSB0aGlzLmRhdGEucmVjdFsxXTtcbiAgICBjb25zdCBiYm94ID0gWzAsIDAsIHdpZHRoLCBoZWlnaHRdO1xuICAgIGNvbnN0IEZPTlRfUkFUSU8gPSAwLjg7XG4gICAgY29uc3QgZm9udFNpemUgPSBNYXRoLm1pbih3aWR0aCwgaGVpZ2h0KSAqIEZPTlRfUkFUSU87XG4gICAgbGV0IG1ldHJpY3MsIGNoYXI7XG5cbiAgICBpZiAodHlwZSA9PT0gXCJjaGVja1wiKSB7XG4gICAgICBtZXRyaWNzID0ge1xuICAgICAgICB3aWR0aDogMC43NTUgKiBmb250U2l6ZSxcbiAgICAgICAgaGVpZ2h0OiAwLjcwNSAqIGZvbnRTaXplXG4gICAgICB9O1xuICAgICAgY2hhciA9IFwiXFx4MzNcIjtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFwiZGlzY1wiKSB7XG4gICAgICBtZXRyaWNzID0ge1xuICAgICAgICB3aWR0aDogMC43OTEgKiBmb250U2l6ZSxcbiAgICAgICAgaGVpZ2h0OiAwLjcwNSAqIGZvbnRTaXplXG4gICAgICB9O1xuICAgICAgY2hhciA9IFwiXFx4NkNcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShgX2dldERlZmF1bHRDaGVja2VkQXBwZWFyYW5jZSAtIHVuc3VwcG9ydGVkIHR5cGU6ICR7dHlwZX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCB4U2hpZnQgPSAod2lkdGggLSBtZXRyaWNzLndpZHRoKSAvIDI7XG4gICAgY29uc3QgeVNoaWZ0ID0gKGhlaWdodCAtIG1ldHJpY3MuaGVpZ2h0KSAvIDI7XG4gICAgY29uc3QgYXBwZWFyYW5jZSA9IGBxIEJUIC9QZGZKc1phRGIgJHtmb250U2l6ZX0gVGYgMCBnICR7eFNoaWZ0fSAke3lTaGlmdH0gVGQgKCR7Y2hhcn0pIFRqIEVUIFFgO1xuICAgIGNvbnN0IGFwcGVhcmFuY2VTdHJlYW1EaWN0ID0gbmV3IF9wcmltaXRpdmVzLkRpY3QocGFyYW1zLnhyZWYpO1xuICAgIGFwcGVhcmFuY2VTdHJlYW1EaWN0LnNldChcIkZvcm1UeXBlXCIsIDEpO1xuICAgIGFwcGVhcmFuY2VTdHJlYW1EaWN0LnNldChcIlN1YnR5cGVcIiwgX3ByaW1pdGl2ZXMuTmFtZS5nZXQoXCJGb3JtXCIpKTtcbiAgICBhcHBlYXJhbmNlU3RyZWFtRGljdC5zZXQoXCJUeXBlXCIsIF9wcmltaXRpdmVzLk5hbWUuZ2V0KFwiWE9iamVjdFwiKSk7XG4gICAgYXBwZWFyYW5jZVN0cmVhbURpY3Quc2V0KFwiQkJveFwiLCBiYm94KTtcbiAgICBhcHBlYXJhbmNlU3RyZWFtRGljdC5zZXQoXCJNYXRyaXhcIiwgWzEsIDAsIDAsIDEsIDAsIDBdKTtcbiAgICBhcHBlYXJhbmNlU3RyZWFtRGljdC5zZXQoXCJMZW5ndGhcIiwgYXBwZWFyYW5jZS5sZW5ndGgpO1xuICAgIGNvbnN0IHJlc291cmNlcyA9IG5ldyBfcHJpbWl0aXZlcy5EaWN0KHBhcmFtcy54cmVmKTtcbiAgICBjb25zdCBmb250ID0gbmV3IF9wcmltaXRpdmVzLkRpY3QocGFyYW1zLnhyZWYpO1xuICAgIGZvbnQuc2V0KFwiUGRmSnNaYURiXCIsIHRoaXMuZmFsbGJhY2tGb250RGljdCk7XG4gICAgcmVzb3VyY2VzLnNldChcIkZvbnRcIiwgZm9udCk7XG4gICAgYXBwZWFyYW5jZVN0cmVhbURpY3Quc2V0KFwiUmVzb3VyY2VzXCIsIHJlc291cmNlcyk7XG4gICAgdGhpcy5jaGVja2VkQXBwZWFyYW5jZSA9IG5ldyBfc3RyZWFtLlN0cmluZ1N0cmVhbShhcHBlYXJhbmNlKTtcbiAgICB0aGlzLmNoZWNrZWRBcHBlYXJhbmNlLmRpY3QgPSBhcHBlYXJhbmNlU3RyZWFtRGljdDtcblxuICAgIHRoaXMuX3N0cmVhbXMucHVzaCh0aGlzLmNoZWNrZWRBcHBlYXJhbmNlKTtcbiAgfVxuXG4gIF9wcm9jZXNzQ2hlY2tCb3gocGFyYW1zKSB7XG4gICAgY29uc3QgY3VzdG9tQXBwZWFyYW5jZSA9IHBhcmFtcy5kaWN0LmdldChcIkFQXCIpO1xuXG4gICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShjdXN0b21BcHBlYXJhbmNlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbEFwcGVhcmFuY2UgPSBjdXN0b21BcHBlYXJhbmNlLmdldChcIk5cIik7XG5cbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKG5vcm1hbEFwcGVhcmFuY2UpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYXNWYWx1ZSA9IHRoaXMuX2RlY29kZUZvcm1WYWx1ZShwYXJhbXMuZGljdC5nZXQoXCJBU1wiKSk7XG5cbiAgICBpZiAodHlwZW9mIGFzVmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRoaXMuZGF0YS5maWVsZFZhbHVlID0gYXNWYWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdCB5ZXMgPSB0aGlzLmRhdGEuZmllbGRWYWx1ZSAhPT0gbnVsbCAmJiB0aGlzLmRhdGEuZmllbGRWYWx1ZSAhPT0gXCJPZmZcIiA/IHRoaXMuZGF0YS5maWVsZFZhbHVlIDogXCJZZXNcIjtcbiAgICBjb25zdCBleHBvcnRWYWx1ZXMgPSBub3JtYWxBcHBlYXJhbmNlLmdldEtleXMoKTtcblxuICAgIGlmIChleHBvcnRWYWx1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBleHBvcnRWYWx1ZXMucHVzaChcIk9mZlwiLCB5ZXMpO1xuICAgIH0gZWxzZSBpZiAoZXhwb3J0VmFsdWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgaWYgKGV4cG9ydFZhbHVlc1swXSA9PT0gXCJPZmZcIikge1xuICAgICAgICBleHBvcnRWYWx1ZXMucHVzaCh5ZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXhwb3J0VmFsdWVzLnVuc2hpZnQoXCJPZmZcIik7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChleHBvcnRWYWx1ZXMuaW5jbHVkZXMoeWVzKSkge1xuICAgICAgZXhwb3J0VmFsdWVzLmxlbmd0aCA9IDA7XG4gICAgICBleHBvcnRWYWx1ZXMucHVzaChcIk9mZlwiLCB5ZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBvdGhlclllcyA9IGV4cG9ydFZhbHVlcy5maW5kKHYgPT4gdiAhPT0gXCJPZmZcIik7XG4gICAgICBleHBvcnRWYWx1ZXMubGVuZ3RoID0gMDtcbiAgICAgIGV4cG9ydFZhbHVlcy5wdXNoKFwiT2ZmXCIsIG90aGVyWWVzKTtcbiAgICB9XG5cbiAgICBpZiAoIWV4cG9ydFZhbHVlcy5pbmNsdWRlcyh0aGlzLmRhdGEuZmllbGRWYWx1ZSkpIHtcbiAgICAgIHRoaXMuZGF0YS5maWVsZFZhbHVlID0gXCJPZmZcIjtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGEuZXhwb3J0VmFsdWUgPSBleHBvcnRWYWx1ZXNbMV07XG4gICAgdGhpcy5jaGVja2VkQXBwZWFyYW5jZSA9IG5vcm1hbEFwcGVhcmFuY2UuZ2V0KHRoaXMuZGF0YS5leHBvcnRWYWx1ZSkgfHwgbnVsbDtcbiAgICB0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2UgPSBub3JtYWxBcHBlYXJhbmNlLmdldChcIk9mZlwiKSB8fCBudWxsO1xuXG4gICAgaWYgKHRoaXMuY2hlY2tlZEFwcGVhcmFuY2UpIHtcbiAgICAgIHRoaXMuX3N0cmVhbXMucHVzaCh0aGlzLmNoZWNrZWRBcHBlYXJhbmNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZ2V0RGVmYXVsdENoZWNrZWRBcHBlYXJhbmNlKHBhcmFtcywgXCJjaGVja1wiKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlKSB7XG4gICAgICB0aGlzLl9zdHJlYW1zLnB1c2godGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlKTtcbiAgICB9XG5cbiAgICB0aGlzLl9mYWxsYmFja0ZvbnREaWN0ID0gdGhpcy5mYWxsYmFja0ZvbnREaWN0O1xuICB9XG5cbiAgX3Byb2Nlc3NSYWRpb0J1dHRvbihwYXJhbXMpIHtcbiAgICB0aGlzLmRhdGEuZmllbGRWYWx1ZSA9IHRoaXMuZGF0YS5idXR0b25WYWx1ZSA9IG51bGw7XG4gICAgY29uc3QgZmllbGRQYXJlbnQgPSBwYXJhbXMuZGljdC5nZXQoXCJQYXJlbnRcIik7XG5cbiAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoZmllbGRQYXJlbnQpKSB7XG4gICAgICB0aGlzLnBhcmVudCA9IHBhcmFtcy5kaWN0LmdldFJhdyhcIlBhcmVudFwiKTtcbiAgICAgIGNvbnN0IGZpZWxkUGFyZW50VmFsdWUgPSBmaWVsZFBhcmVudC5nZXQoXCJWXCIpO1xuXG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoZmllbGRQYXJlbnRWYWx1ZSkpIHtcbiAgICAgICAgdGhpcy5kYXRhLmZpZWxkVmFsdWUgPSB0aGlzLl9kZWNvZGVGb3JtVmFsdWUoZmllbGRQYXJlbnRWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYXBwZWFyYW5jZVN0YXRlcyA9IHBhcmFtcy5kaWN0LmdldChcIkFQXCIpO1xuXG4gICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShhcHBlYXJhbmNlU3RhdGVzKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbEFwcGVhcmFuY2UgPSBhcHBlYXJhbmNlU3RhdGVzLmdldChcIk5cIik7XG5cbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKG5vcm1hbEFwcGVhcmFuY2UpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBrZXkgb2Ygbm9ybWFsQXBwZWFyYW5jZS5nZXRLZXlzKCkpIHtcbiAgICAgIGlmIChrZXkgIT09IFwiT2ZmXCIpIHtcbiAgICAgICAgdGhpcy5kYXRhLmJ1dHRvblZhbHVlID0gdGhpcy5fZGVjb2RlRm9ybVZhbHVlKGtleSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY2hlY2tlZEFwcGVhcmFuY2UgPSBub3JtYWxBcHBlYXJhbmNlLmdldCh0aGlzLmRhdGEuYnV0dG9uVmFsdWUpIHx8IG51bGw7XG4gICAgdGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlID0gbm9ybWFsQXBwZWFyYW5jZS5nZXQoXCJPZmZcIikgfHwgbnVsbDtcblxuICAgIGlmICh0aGlzLmNoZWNrZWRBcHBlYXJhbmNlKSB7XG4gICAgICB0aGlzLl9zdHJlYW1zLnB1c2godGhpcy5jaGVja2VkQXBwZWFyYW5jZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2dldERlZmF1bHRDaGVja2VkQXBwZWFyYW5jZShwYXJhbXMsIFwiZGlzY1wiKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlKSB7XG4gICAgICB0aGlzLl9zdHJlYW1zLnB1c2godGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlKTtcbiAgICB9XG5cbiAgICB0aGlzLl9mYWxsYmFja0ZvbnREaWN0ID0gdGhpcy5mYWxsYmFja0ZvbnREaWN0O1xuICB9XG5cbiAgX3Byb2Nlc3NQdXNoQnV0dG9uKHBhcmFtcykge1xuICAgIGlmICghcGFyYW1zLmRpY3QuaGFzKFwiQVwiKSAmJiAhcGFyYW1zLmRpY3QuaGFzKFwiQUFcIikgJiYgIXRoaXMuZGF0YS5hbHRlcm5hdGl2ZVRleHQpIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShcIlB1c2ggYnV0dG9ucyB3aXRob3V0IGFjdGlvbiBkaWN0aW9uYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kYXRhLmlzVG9vbHRpcE9ubHkgPSAhcGFyYW1zLmRpY3QuaGFzKFwiQVwiKSAmJiAhcGFyYW1zLmRpY3QuaGFzKFwiQUFcIik7XG5cbiAgICBfY2F0YWxvZy5DYXRhbG9nLnBhcnNlRGVzdERpY3Rpb25hcnkoe1xuICAgICAgZGVzdERpY3Q6IHBhcmFtcy5kaWN0LFxuICAgICAgcmVzdWx0T2JqOiB0aGlzLmRhdGEsXG4gICAgICBkb2NCYXNlVXJsOiBwYXJhbXMucGRmTWFuYWdlci5kb2NCYXNlVXJsXG4gICAgfSk7XG4gIH1cblxuICBnZXRGaWVsZE9iamVjdCgpIHtcbiAgICBsZXQgdHlwZSA9IFwiYnV0dG9uXCI7XG4gICAgbGV0IGV4cG9ydFZhbHVlcztcblxuICAgIGlmICh0aGlzLmRhdGEuY2hlY2tCb3gpIHtcbiAgICAgIHR5cGUgPSBcImNoZWNrYm94XCI7XG4gICAgICBleHBvcnRWYWx1ZXMgPSB0aGlzLmRhdGEuZXhwb3J0VmFsdWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLmRhdGEucmFkaW9CdXR0b24pIHtcbiAgICAgIHR5cGUgPSBcInJhZGlvYnV0dG9uXCI7XG4gICAgICBleHBvcnRWYWx1ZXMgPSB0aGlzLmRhdGEuYnV0dG9uVmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB0aGlzLmRhdGEuaWQsXG4gICAgICB2YWx1ZTogdGhpcy5kYXRhLmZpZWxkVmFsdWUgfHwgXCJPZmZcIixcbiAgICAgIGRlZmF1bHRWYWx1ZTogdGhpcy5kYXRhLmRlZmF1bHRGaWVsZFZhbHVlLFxuICAgICAgZXhwb3J0VmFsdWVzLFxuICAgICAgZWRpdGFibGU6ICF0aGlzLmRhdGEucmVhZE9ubHksXG4gICAgICBuYW1lOiB0aGlzLmRhdGEuZmllbGROYW1lLFxuICAgICAgcmVjdDogdGhpcy5kYXRhLnJlY3QsXG4gICAgICBoaWRkZW46IHRoaXMuZGF0YS5oaWRkZW4sXG4gICAgICBhY3Rpb25zOiB0aGlzLmRhdGEuYWN0aW9ucyxcbiAgICAgIHBhZ2U6IHRoaXMuZGF0YS5wYWdlSW5kZXgsXG4gICAgICBzdHJva2VDb2xvcjogdGhpcy5kYXRhLmJvcmRlckNvbG9yLFxuICAgICAgZmlsbENvbG9yOiB0aGlzLmRhdGEuYmFja2dyb3VuZENvbG9yLFxuICAgICAgdHlwZVxuICAgIH07XG4gIH1cblxuICBnZXQgZmFsbGJhY2tGb250RGljdCgpIHtcbiAgICBjb25zdCBkaWN0ID0gbmV3IF9wcmltaXRpdmVzLkRpY3QoKTtcbiAgICBkaWN0LnNldChcIkJhc2VGb250XCIsIF9wcmltaXRpdmVzLk5hbWUuZ2V0KFwiWmFwZkRpbmdiYXRzXCIpKTtcbiAgICBkaWN0LnNldChcIlR5cGVcIiwgX3ByaW1pdGl2ZXMuTmFtZS5nZXQoXCJGYWxsYmFja1R5cGVcIikpO1xuICAgIGRpY3Quc2V0KFwiU3VidHlwZVwiLCBfcHJpbWl0aXZlcy5OYW1lLmdldChcIkZhbGxiYWNrVHlwZVwiKSk7XG4gICAgZGljdC5zZXQoXCJFbmNvZGluZ1wiLCBfcHJpbWl0aXZlcy5OYW1lLmdldChcIlphcGZEaW5nYmF0c0VuY29kaW5nXCIpKTtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJmYWxsYmFja0ZvbnREaWN0XCIsIGRpY3QpO1xuICB9XG5cbn1cblxuY2xhc3MgQ2hvaWNlV2lkZ2V0QW5ub3RhdGlvbiBleHRlbmRzIFdpZGdldEFubm90YXRpb24ge1xuICBjb25zdHJ1Y3RvcihwYXJhbXMpIHtcbiAgICBzdXBlcihwYXJhbXMpO1xuICAgIHRoaXMuZGF0YS5vcHRpb25zID0gW107XG4gICAgY29uc3Qgb3B0aW9ucyA9ICgwLCBfY29yZV91dGlscy5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7XG4gICAgICBkaWN0OiBwYXJhbXMuZGljdCxcbiAgICAgIGtleTogXCJPcHRcIlxuICAgIH0pO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucykpIHtcbiAgICAgIGNvbnN0IHhyZWYgPSBwYXJhbXMueHJlZjtcblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gb3B0aW9ucy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHhyZWYuZmV0Y2hJZlJlZihvcHRpb25zW2ldKTtcbiAgICAgICAgY29uc3QgaXNPcHRpb25BcnJheSA9IEFycmF5LmlzQXJyYXkob3B0aW9uKTtcbiAgICAgICAgdGhpcy5kYXRhLm9wdGlvbnNbaV0gPSB7XG4gICAgICAgICAgZXhwb3J0VmFsdWU6IHRoaXMuX2RlY29kZUZvcm1WYWx1ZShpc09wdGlvbkFycmF5ID8geHJlZi5mZXRjaElmUmVmKG9wdGlvblswXSkgOiBvcHRpb24pLFxuICAgICAgICAgIGRpc3BsYXlWYWx1ZTogdGhpcy5fZGVjb2RlRm9ybVZhbHVlKGlzT3B0aW9uQXJyYXkgPyB4cmVmLmZldGNoSWZSZWYob3B0aW9uWzFdKSA6IG9wdGlvbilcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoKDAsIF91dGlsLmlzU3RyaW5nKSh0aGlzLmRhdGEuZmllbGRWYWx1ZSkpIHtcbiAgICAgIHRoaXMuZGF0YS5maWVsZFZhbHVlID0gW3RoaXMuZGF0YS5maWVsZFZhbHVlXTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmRhdGEuZmllbGRWYWx1ZSkge1xuICAgICAgdGhpcy5kYXRhLmZpZWxkVmFsdWUgPSBbXTtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGEuY29tYm8gPSB0aGlzLmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLkNPTUJPKTtcbiAgICB0aGlzLmRhdGEubXVsdGlTZWxlY3QgPSB0aGlzLmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLk1VTFRJU0VMRUNUKTtcbiAgICB0aGlzLl9oYXNUZXh0ID0gdHJ1ZTtcbiAgfVxuXG4gIGdldEZpZWxkT2JqZWN0KCkge1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLmRhdGEuY29tYm8gPyBcImNvbWJvYm94XCIgOiBcImxpc3Rib3hcIjtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZGF0YS5maWVsZFZhbHVlLmxlbmd0aCA+IDAgPyB0aGlzLmRhdGEuZmllbGRWYWx1ZVswXSA6IG51bGw7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB0aGlzLmRhdGEuaWQsXG4gICAgICB2YWx1ZSxcbiAgICAgIGRlZmF1bHRWYWx1ZTogdGhpcy5kYXRhLmRlZmF1bHRGaWVsZFZhbHVlLFxuICAgICAgZWRpdGFibGU6ICF0aGlzLmRhdGEucmVhZE9ubHksXG4gICAgICBuYW1lOiB0aGlzLmRhdGEuZmllbGROYW1lLFxuICAgICAgcmVjdDogdGhpcy5kYXRhLnJlY3QsXG4gICAgICBudW1JdGVtczogdGhpcy5kYXRhLmZpZWxkVmFsdWUubGVuZ3RoLFxuICAgICAgbXVsdGlwbGVTZWxlY3Rpb246IHRoaXMuZGF0YS5tdWx0aVNlbGVjdCxcbiAgICAgIGhpZGRlbjogdGhpcy5kYXRhLmhpZGRlbixcbiAgICAgIGFjdGlvbnM6IHRoaXMuZGF0YS5hY3Rpb25zLFxuICAgICAgaXRlbXM6IHRoaXMuZGF0YS5vcHRpb25zLFxuICAgICAgcGFnZTogdGhpcy5kYXRhLnBhZ2VJbmRleCxcbiAgICAgIHN0cm9rZUNvbG9yOiB0aGlzLmRhdGEuYm9yZGVyQ29sb3IsXG4gICAgICBmaWxsQ29sb3I6IHRoaXMuZGF0YS5iYWNrZ3JvdW5kQ29sb3IsXG4gICAgICB0eXBlXG4gICAgfTtcbiAgfVxuXG59XG5cbmNsYXNzIFNpZ25hdHVyZVdpZGdldEFubm90YXRpb24gZXh0ZW5kcyBXaWRnZXRBbm5vdGF0aW9uIHtcbiAgY29uc3RydWN0b3IocGFyYW1zKSB7XG4gICAgc3VwZXIocGFyYW1zKTtcbiAgICB0aGlzLmRhdGEuZmllbGRWYWx1ZSA9IG51bGw7XG4gIH1cblxuICBnZXRGaWVsZE9iamVjdCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHRoaXMuZGF0YS5pZCxcbiAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgcGFnZTogdGhpcy5kYXRhLnBhZ2VJbmRleCxcbiAgICAgIHR5cGU6IFwic2lnbmF0dXJlXCJcbiAgICB9O1xuICB9XG5cbn1cblxuY2xhc3MgVGV4dEFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9uIHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIGNvbnN0IERFRkFVTFRfSUNPTl9TSVpFID0gMjI7XG4gICAgc3VwZXIocGFyYW1ldGVycyk7XG4gICAgY29uc3QgZGljdCA9IHBhcmFtZXRlcnMuZGljdDtcbiAgICB0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGUgPSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5URVhUO1xuXG4gICAgaWYgKHRoaXMuZGF0YS5oYXNBcHBlYXJhbmNlKSB7XG4gICAgICB0aGlzLmRhdGEubmFtZSA9IFwiTm9JY29uXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0YS5yZWN0WzFdID0gdGhpcy5kYXRhLnJlY3RbM10gLSBERUZBVUxUX0lDT05fU0laRTtcbiAgICAgIHRoaXMuZGF0YS5yZWN0WzJdID0gdGhpcy5kYXRhLnJlY3RbMF0gKyBERUZBVUxUX0lDT05fU0laRTtcbiAgICAgIHRoaXMuZGF0YS5uYW1lID0gZGljdC5oYXMoXCJOYW1lXCIpID8gZGljdC5nZXQoXCJOYW1lXCIpLm5hbWUgOiBcIk5vdGVcIjtcbiAgICB9XG5cbiAgICBpZiAoZGljdC5oYXMoXCJTdGF0ZVwiKSkge1xuICAgICAgdGhpcy5kYXRhLnN0YXRlID0gZGljdC5nZXQoXCJTdGF0ZVwiKSB8fCBudWxsO1xuICAgICAgdGhpcy5kYXRhLnN0YXRlTW9kZWwgPSBkaWN0LmdldChcIlN0YXRlTW9kZWxcIikgfHwgbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kYXRhLnN0YXRlID0gbnVsbDtcbiAgICAgIHRoaXMuZGF0YS5zdGF0ZU1vZGVsID0gbnVsbDtcbiAgICB9XG4gIH1cblxufVxuXG5jbGFzcyBMaW5rQW5ub3RhdGlvbiBleHRlbmRzIEFubm90YXRpb24ge1xuICBjb25zdHJ1Y3RvcihwYXJhbXMpIHtcbiAgICBzdXBlcihwYXJhbXMpO1xuICAgIHRoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZSA9IF91dGlsLkFubm90YXRpb25UeXBlLkxJTks7XG4gICAgY29uc3QgcXVhZFBvaW50cyA9IGdldFF1YWRQb2ludHMocGFyYW1zLmRpY3QsIHRoaXMucmVjdGFuZ2xlKTtcblxuICAgIGlmIChxdWFkUG9pbnRzKSB7XG4gICAgICB0aGlzLmRhdGEucXVhZFBvaW50cyA9IHF1YWRQb2ludHM7XG4gICAgfVxuXG4gICAgX2NhdGFsb2cuQ2F0YWxvZy5wYXJzZURlc3REaWN0aW9uYXJ5KHtcbiAgICAgIGRlc3REaWN0OiBwYXJhbXMuZGljdCxcbiAgICAgIHJlc3VsdE9iajogdGhpcy5kYXRhLFxuICAgICAgZG9jQmFzZVVybDogcGFyYW1zLnBkZk1hbmFnZXIuZG9jQmFzZVVybFxuICAgIH0pO1xuICB9XG5cbn1cblxuY2xhc3MgUG9wdXBBbm5vdGF0aW9uIGV4dGVuZHMgQW5ub3RhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcbiAgICBzdXBlcihwYXJhbWV0ZXJzKTtcbiAgICB0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGUgPSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5QT1BVUDtcbiAgICBsZXQgcGFyZW50SXRlbSA9IHBhcmFtZXRlcnMuZGljdC5nZXQoXCJQYXJlbnRcIik7XG5cbiAgICBpZiAoIXBhcmVudEl0ZW0pIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShcIlBvcHVwIGFubm90YXRpb24gaGFzIGEgbWlzc2luZyBvciBpbnZhbGlkIHBhcmVudCBhbm5vdGF0aW9uLlwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnRTdWJ0eXBlID0gcGFyZW50SXRlbS5nZXQoXCJTdWJ0eXBlXCIpO1xuICAgIHRoaXMuZGF0YS5wYXJlbnRUeXBlID0gKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkocGFyZW50U3VidHlwZSkgPyBwYXJlbnRTdWJ0eXBlLm5hbWUgOiBudWxsO1xuICAgIGNvbnN0IHJhd1BhcmVudCA9IHBhcmFtZXRlcnMuZGljdC5nZXRSYXcoXCJQYXJlbnRcIik7XG4gICAgdGhpcy5kYXRhLnBhcmVudElkID0gKDAsIF9wcmltaXRpdmVzLmlzUmVmKShyYXdQYXJlbnQpID8gcmF3UGFyZW50LnRvU3RyaW5nKCkgOiBudWxsO1xuICAgIGNvbnN0IHBhcmVudFJlY3QgPSBwYXJlbnRJdGVtLmdldEFycmF5KFwiUmVjdFwiKTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHBhcmVudFJlY3QpICYmIHBhcmVudFJlY3QubGVuZ3RoID09PSA0KSB7XG4gICAgICB0aGlzLmRhdGEucGFyZW50UmVjdCA9IF91dGlsLlV0aWwubm9ybWFsaXplUmVjdChwYXJlbnRSZWN0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kYXRhLnBhcmVudFJlY3QgPSBbMCwgMCwgMCwgMF07XG4gICAgfVxuXG4gICAgY29uc3QgcnQgPSBwYXJlbnRJdGVtLmdldChcIlJUXCIpO1xuXG4gICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHJ0LCBfdXRpbC5Bbm5vdGF0aW9uUmVwbHlUeXBlLkdST1VQKSkge1xuICAgICAgcGFyZW50SXRlbSA9IHBhcmVudEl0ZW0uZ2V0KFwiSVJUXCIpO1xuICAgIH1cblxuICAgIGlmICghcGFyZW50SXRlbS5oYXMoXCJNXCIpKSB7XG4gICAgICB0aGlzLmRhdGEubW9kaWZpY2F0aW9uRGF0ZSA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0TW9kaWZpY2F0aW9uRGF0ZShwYXJlbnRJdGVtLmdldChcIk1cIikpO1xuICAgICAgdGhpcy5kYXRhLm1vZGlmaWNhdGlvbkRhdGUgPSB0aGlzLm1vZGlmaWNhdGlvbkRhdGU7XG4gICAgfVxuXG4gICAgaWYgKCFwYXJlbnRJdGVtLmhhcyhcIkNcIikpIHtcbiAgICAgIHRoaXMuZGF0YS5jb2xvciA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0Q29sb3IocGFyZW50SXRlbS5nZXRBcnJheShcIkNcIikpO1xuICAgICAgdGhpcy5kYXRhLmNvbG9yID0gdGhpcy5jb2xvcjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudmlld2FibGUpIHtcbiAgICAgIGNvbnN0IHBhcmVudEZsYWdzID0gcGFyZW50SXRlbS5nZXQoXCJGXCIpO1xuXG4gICAgICBpZiAodGhpcy5faXNWaWV3YWJsZShwYXJlbnRGbGFncykpIHtcbiAgICAgICAgdGhpcy5zZXRGbGFncyhwYXJlbnRGbGFncyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zZXRUaXRsZShwYXJlbnRJdGVtLmdldChcIlRcIikpO1xuICAgIHRoaXMuZGF0YS50aXRsZU9iaiA9IHRoaXMuX3RpdGxlO1xuICAgIHRoaXMuc2V0Q29udGVudHMocGFyZW50SXRlbS5nZXQoXCJDb250ZW50c1wiKSk7XG4gICAgdGhpcy5kYXRhLmNvbnRlbnRzT2JqID0gdGhpcy5fY29udGVudHM7XG5cbiAgICBpZiAocGFyZW50SXRlbS5oYXMoXCJSQ1wiKSkge1xuICAgICAgdGhpcy5kYXRhLnJpY2hUZXh0ID0gX2ZhY3RvcnkuWEZBRmFjdG9yeS5nZXRSaWNoVGV4dEFzSHRtbChwYXJlbnRJdGVtLmdldChcIlJDXCIpKTtcbiAgICB9XG4gIH1cblxufVxuXG5jbGFzcyBGcmVlVGV4dEFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9uIHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xuICAgIHRoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZSA9IF91dGlsLkFubm90YXRpb25UeXBlLkZSRUVURVhUO1xuICB9XG5cbn1cblxuY2xhc3MgTGluZUFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9uIHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xuICAgIHRoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZSA9IF91dGlsLkFubm90YXRpb25UeXBlLkxJTkU7XG4gICAgY29uc3QgbGluZUNvb3JkaW5hdGVzID0gcGFyYW1ldGVycy5kaWN0LmdldEFycmF5KFwiTFwiKTtcbiAgICB0aGlzLmRhdGEubGluZUNvb3JkaW5hdGVzID0gX3V0aWwuVXRpbC5ub3JtYWxpemVSZWN0KGxpbmVDb29yZGluYXRlcyk7XG5cbiAgICBpZiAoIXRoaXMuYXBwZWFyYW5jZSkge1xuICAgICAgY29uc3Qgc3Ryb2tlQ29sb3IgPSB0aGlzLmNvbG9yID8gQXJyYXkuZnJvbSh0aGlzLmNvbG9yKS5tYXAoYyA9PiBjIC8gMjU1KSA6IFswLCAwLCAwXTtcbiAgICAgIGNvbnN0IHN0cm9rZUFscGhhID0gcGFyYW1ldGVycy5kaWN0LmdldChcIkNBXCIpO1xuICAgICAgbGV0IGZpbGxDb2xvciA9IG51bGwsXG4gICAgICAgICAgaW50ZXJpb3JDb2xvciA9IHBhcmFtZXRlcnMuZGljdC5nZXRBcnJheShcIklDXCIpO1xuXG4gICAgICBpZiAoaW50ZXJpb3JDb2xvcikge1xuICAgICAgICBpbnRlcmlvckNvbG9yID0gZ2V0UmdiQ29sb3IoaW50ZXJpb3JDb2xvciwgbnVsbCk7XG4gICAgICAgIGZpbGxDb2xvciA9IGludGVyaW9yQ29sb3IgPyBBcnJheS5mcm9tKGludGVyaW9yQ29sb3IpLm1hcChjID0+IGMgLyAyNTUpIDogbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlsbEFscGhhID0gZmlsbENvbG9yID8gc3Ryb2tlQWxwaGEgOiBudWxsO1xuICAgICAgY29uc3QgYm9yZGVyV2lkdGggPSB0aGlzLmJvcmRlclN0eWxlLndpZHRoIHx8IDEsXG4gICAgICAgICAgICBib3JkZXJBZGp1c3QgPSAyICogYm9yZGVyV2lkdGg7XG4gICAgICBjb25zdCBiYm94ID0gW3RoaXMuZGF0YS5saW5lQ29vcmRpbmF0ZXNbMF0gLSBib3JkZXJBZGp1c3QsIHRoaXMuZGF0YS5saW5lQ29vcmRpbmF0ZXNbMV0gLSBib3JkZXJBZGp1c3QsIHRoaXMuZGF0YS5saW5lQ29vcmRpbmF0ZXNbMl0gKyBib3JkZXJBZGp1c3QsIHRoaXMuZGF0YS5saW5lQ29vcmRpbmF0ZXNbM10gKyBib3JkZXJBZGp1c3RdO1xuXG4gICAgICBpZiAoIV91dGlsLlV0aWwuaW50ZXJzZWN0KHRoaXMucmVjdGFuZ2xlLCBiYm94KSkge1xuICAgICAgICB0aGlzLnJlY3RhbmdsZSA9IGJib3g7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3NldERlZmF1bHRBcHBlYXJhbmNlKHtcbiAgICAgICAgeHJlZjogcGFyYW1ldGVycy54cmVmLFxuICAgICAgICBleHRyYTogYCR7Ym9yZGVyV2lkdGh9IHdgLFxuICAgICAgICBzdHJva2VDb2xvcixcbiAgICAgICAgZmlsbENvbG9yLFxuICAgICAgICBzdHJva2VBbHBoYSxcbiAgICAgICAgZmlsbEFscGhhLFxuICAgICAgICBwb2ludHNDYWxsYmFjazogKGJ1ZmZlciwgcG9pbnRzKSA9PiB7XG4gICAgICAgICAgYnVmZmVyLnB1c2goYCR7bGluZUNvb3JkaW5hdGVzWzBdfSAke2xpbmVDb29yZGluYXRlc1sxXX0gbWAsIGAke2xpbmVDb29yZGluYXRlc1syXX0gJHtsaW5lQ29vcmRpbmF0ZXNbM119IGxgLCBcIlNcIik7XG4gICAgICAgICAgcmV0dXJuIFtwb2ludHNbMF0ueCAtIGJvcmRlcldpZHRoLCBwb2ludHNbMV0ueCArIGJvcmRlcldpZHRoLCBwb2ludHNbM10ueSAtIGJvcmRlcldpZHRoLCBwb2ludHNbMV0ueSArIGJvcmRlcldpZHRoXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbn1cblxuY2xhc3MgU3F1YXJlQW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb24ge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgc3VwZXIocGFyYW1ldGVycyk7XG4gICAgdGhpcy5kYXRhLmFubm90YXRpb25UeXBlID0gX3V0aWwuQW5ub3RhdGlvblR5cGUuU1FVQVJFO1xuXG4gICAgaWYgKCF0aGlzLmFwcGVhcmFuY2UpIHtcbiAgICAgIGNvbnN0IHN0cm9rZUNvbG9yID0gdGhpcy5jb2xvciA/IEFycmF5LmZyb20odGhpcy5jb2xvcikubWFwKGMgPT4gYyAvIDI1NSkgOiBbMCwgMCwgMF07XG4gICAgICBjb25zdCBzdHJva2VBbHBoYSA9IHBhcmFtZXRlcnMuZGljdC5nZXQoXCJDQVwiKTtcbiAgICAgIGxldCBmaWxsQ29sb3IgPSBudWxsLFxuICAgICAgICAgIGludGVyaW9yQ29sb3IgPSBwYXJhbWV0ZXJzLmRpY3QuZ2V0QXJyYXkoXCJJQ1wiKTtcblxuICAgICAgaWYgKGludGVyaW9yQ29sb3IpIHtcbiAgICAgICAgaW50ZXJpb3JDb2xvciA9IGdldFJnYkNvbG9yKGludGVyaW9yQ29sb3IsIG51bGwpO1xuICAgICAgICBmaWxsQ29sb3IgPSBpbnRlcmlvckNvbG9yID8gQXJyYXkuZnJvbShpbnRlcmlvckNvbG9yKS5tYXAoYyA9PiBjIC8gMjU1KSA6IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbGxBbHBoYSA9IGZpbGxDb2xvciA/IHN0cm9rZUFscGhhIDogbnVsbDtcblxuICAgICAgaWYgKHRoaXMuYm9yZGVyU3R5bGUud2lkdGggPT09IDAgJiYgIWZpbGxDb2xvcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3NldERlZmF1bHRBcHBlYXJhbmNlKHtcbiAgICAgICAgeHJlZjogcGFyYW1ldGVycy54cmVmLFxuICAgICAgICBleHRyYTogYCR7dGhpcy5ib3JkZXJTdHlsZS53aWR0aH0gd2AsXG4gICAgICAgIHN0cm9rZUNvbG9yLFxuICAgICAgICBmaWxsQ29sb3IsXG4gICAgICAgIHN0cm9rZUFscGhhLFxuICAgICAgICBmaWxsQWxwaGEsXG4gICAgICAgIHBvaW50c0NhbGxiYWNrOiAoYnVmZmVyLCBwb2ludHMpID0+IHtcbiAgICAgICAgICBjb25zdCB4ID0gcG9pbnRzWzJdLnggKyB0aGlzLmJvcmRlclN0eWxlLndpZHRoIC8gMjtcbiAgICAgICAgICBjb25zdCB5ID0gcG9pbnRzWzJdLnkgKyB0aGlzLmJvcmRlclN0eWxlLndpZHRoIC8gMjtcbiAgICAgICAgICBjb25zdCB3aWR0aCA9IHBvaW50c1szXS54IC0gcG9pbnRzWzJdLnggLSB0aGlzLmJvcmRlclN0eWxlLndpZHRoO1xuICAgICAgICAgIGNvbnN0IGhlaWdodCA9IHBvaW50c1sxXS55IC0gcG9pbnRzWzNdLnkgLSB0aGlzLmJvcmRlclN0eWxlLndpZHRoO1xuICAgICAgICAgIGJ1ZmZlci5wdXNoKGAke3h9ICR7eX0gJHt3aWR0aH0gJHtoZWlnaHR9IHJlYCk7XG5cbiAgICAgICAgICBpZiAoZmlsbENvbG9yKSB7XG4gICAgICAgICAgICBidWZmZXIucHVzaChcIkJcIik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJ1ZmZlci5wdXNoKFwiU1wiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gW3BvaW50c1swXS54LCBwb2ludHNbMV0ueCwgcG9pbnRzWzNdLnksIHBvaW50c1sxXS55XTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbn1cblxuY2xhc3MgQ2lyY2xlQW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb24ge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgc3VwZXIocGFyYW1ldGVycyk7XG4gICAgdGhpcy5kYXRhLmFubm90YXRpb25UeXBlID0gX3V0aWwuQW5ub3RhdGlvblR5cGUuQ0lSQ0xFO1xuXG4gICAgaWYgKCF0aGlzLmFwcGVhcmFuY2UpIHtcbiAgICAgIGNvbnN0IHN0cm9rZUNvbG9yID0gdGhpcy5jb2xvciA/IEFycmF5LmZyb20odGhpcy5jb2xvcikubWFwKGMgPT4gYyAvIDI1NSkgOiBbMCwgMCwgMF07XG4gICAgICBjb25zdCBzdHJva2VBbHBoYSA9IHBhcmFtZXRlcnMuZGljdC5nZXQoXCJDQVwiKTtcbiAgICAgIGxldCBmaWxsQ29sb3IgPSBudWxsO1xuICAgICAgbGV0IGludGVyaW9yQ29sb3IgPSBwYXJhbWV0ZXJzLmRpY3QuZ2V0QXJyYXkoXCJJQ1wiKTtcblxuICAgICAgaWYgKGludGVyaW9yQ29sb3IpIHtcbiAgICAgICAgaW50ZXJpb3JDb2xvciA9IGdldFJnYkNvbG9yKGludGVyaW9yQ29sb3IsIG51bGwpO1xuICAgICAgICBmaWxsQ29sb3IgPSBpbnRlcmlvckNvbG9yID8gQXJyYXkuZnJvbShpbnRlcmlvckNvbG9yKS5tYXAoYyA9PiBjIC8gMjU1KSA6IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbGxBbHBoYSA9IGZpbGxDb2xvciA/IHN0cm9rZUFscGhhIDogbnVsbDtcblxuICAgICAgaWYgKHRoaXMuYm9yZGVyU3R5bGUud2lkdGggPT09IDAgJiYgIWZpbGxDb2xvcikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnRyb2xQb2ludHNEaXN0YW5jZSA9IDQgLyAzICogTWF0aC50YW4oTWF0aC5QSSAvICgyICogNCkpO1xuXG4gICAgICB0aGlzLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7XG4gICAgICAgIHhyZWY6IHBhcmFtZXRlcnMueHJlZixcbiAgICAgICAgZXh0cmE6IGAke3RoaXMuYm9yZGVyU3R5bGUud2lkdGh9IHdgLFxuICAgICAgICBzdHJva2VDb2xvcixcbiAgICAgICAgZmlsbENvbG9yLFxuICAgICAgICBzdHJva2VBbHBoYSxcbiAgICAgICAgZmlsbEFscGhhLFxuICAgICAgICBwb2ludHNDYWxsYmFjazogKGJ1ZmZlciwgcG9pbnRzKSA9PiB7XG4gICAgICAgICAgY29uc3QgeDAgPSBwb2ludHNbMF0ueCArIHRoaXMuYm9yZGVyU3R5bGUud2lkdGggLyAyO1xuICAgICAgICAgIGNvbnN0IHkwID0gcG9pbnRzWzBdLnkgLSB0aGlzLmJvcmRlclN0eWxlLndpZHRoIC8gMjtcbiAgICAgICAgICBjb25zdCB4MSA9IHBvaW50c1szXS54IC0gdGhpcy5ib3JkZXJTdHlsZS53aWR0aCAvIDI7XG4gICAgICAgICAgY29uc3QgeTEgPSBwb2ludHNbM10ueSArIHRoaXMuYm9yZGVyU3R5bGUud2lkdGggLyAyO1xuICAgICAgICAgIGNvbnN0IHhNaWQgPSB4MCArICh4MSAtIHgwKSAvIDI7XG4gICAgICAgICAgY29uc3QgeU1pZCA9IHkwICsgKHkxIC0geTApIC8gMjtcbiAgICAgICAgICBjb25zdCB4T2Zmc2V0ID0gKHgxIC0geDApIC8gMiAqIGNvbnRyb2xQb2ludHNEaXN0YW5jZTtcbiAgICAgICAgICBjb25zdCB5T2Zmc2V0ID0gKHkxIC0geTApIC8gMiAqIGNvbnRyb2xQb2ludHNEaXN0YW5jZTtcbiAgICAgICAgICBidWZmZXIucHVzaChgJHt4TWlkfSAke3kxfSBtYCwgYCR7eE1pZCArIHhPZmZzZXR9ICR7eTF9ICR7eDF9ICR7eU1pZCArIHlPZmZzZXR9ICR7eDF9ICR7eU1pZH0gY2AsIGAke3gxfSAke3lNaWQgLSB5T2Zmc2V0fSAke3hNaWQgKyB4T2Zmc2V0fSAke3kwfSAke3hNaWR9ICR7eTB9IGNgLCBgJHt4TWlkIC0geE9mZnNldH0gJHt5MH0gJHt4MH0gJHt5TWlkIC0geU9mZnNldH0gJHt4MH0gJHt5TWlkfSBjYCwgYCR7eDB9ICR7eU1pZCArIHlPZmZzZXR9ICR7eE1pZCAtIHhPZmZzZXR9ICR7eTF9ICR7eE1pZH0gJHt5MX0gY2AsIFwiaFwiKTtcblxuICAgICAgICAgIGlmIChmaWxsQ29sb3IpIHtcbiAgICAgICAgICAgIGJ1ZmZlci5wdXNoKFwiQlwiKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnVmZmVyLnB1c2goXCJTXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBbcG9pbnRzWzBdLngsIHBvaW50c1sxXS54LCBwb2ludHNbM10ueSwgcG9pbnRzWzFdLnldO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxufVxuXG5jbGFzcyBQb2x5bGluZUFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9uIHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xuICAgIHRoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZSA9IF91dGlsLkFubm90YXRpb25UeXBlLlBPTFlMSU5FO1xuICAgIHRoaXMuZGF0YS52ZXJ0aWNlcyA9IFtdO1xuICAgIGNvbnN0IHJhd1ZlcnRpY2VzID0gcGFyYW1ldGVycy5kaWN0LmdldEFycmF5KFwiVmVydGljZXNcIik7XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocmF3VmVydGljZXMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gcmF3VmVydGljZXMubGVuZ3RoOyBpIDwgaWk7IGkgKz0gMikge1xuICAgICAgdGhpcy5kYXRhLnZlcnRpY2VzLnB1c2goe1xuICAgICAgICB4OiByYXdWZXJ0aWNlc1tpXSxcbiAgICAgICAgeTogcmF3VmVydGljZXNbaSArIDFdXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuYXBwZWFyYW5jZSkge1xuICAgICAgY29uc3Qgc3Ryb2tlQ29sb3IgPSB0aGlzLmNvbG9yID8gQXJyYXkuZnJvbSh0aGlzLmNvbG9yKS5tYXAoYyA9PiBjIC8gMjU1KSA6IFswLCAwLCAwXTtcbiAgICAgIGNvbnN0IHN0cm9rZUFscGhhID0gcGFyYW1ldGVycy5kaWN0LmdldChcIkNBXCIpO1xuICAgICAgY29uc3QgYm9yZGVyV2lkdGggPSB0aGlzLmJvcmRlclN0eWxlLndpZHRoIHx8IDEsXG4gICAgICAgICAgICBib3JkZXJBZGp1c3QgPSAyICogYm9yZGVyV2lkdGg7XG4gICAgICBjb25zdCBiYm94ID0gW0luZmluaXR5LCBJbmZpbml0eSwgLUluZmluaXR5LCAtSW5maW5pdHldO1xuXG4gICAgICBmb3IgKGNvbnN0IHZlcnRleCBvZiB0aGlzLmRhdGEudmVydGljZXMpIHtcbiAgICAgICAgYmJveFswXSA9IE1hdGgubWluKGJib3hbMF0sIHZlcnRleC54IC0gYm9yZGVyQWRqdXN0KTtcbiAgICAgICAgYmJveFsxXSA9IE1hdGgubWluKGJib3hbMV0sIHZlcnRleC55IC0gYm9yZGVyQWRqdXN0KTtcbiAgICAgICAgYmJveFsyXSA9IE1hdGgubWF4KGJib3hbMl0sIHZlcnRleC54ICsgYm9yZGVyQWRqdXN0KTtcbiAgICAgICAgYmJveFszXSA9IE1hdGgubWF4KGJib3hbM10sIHZlcnRleC55ICsgYm9yZGVyQWRqdXN0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFfdXRpbC5VdGlsLmludGVyc2VjdCh0aGlzLnJlY3RhbmdsZSwgYmJveCkpIHtcbiAgICAgICAgdGhpcy5yZWN0YW5nbGUgPSBiYm94O1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7XG4gICAgICAgIHhyZWY6IHBhcmFtZXRlcnMueHJlZixcbiAgICAgICAgZXh0cmE6IGAke2JvcmRlcldpZHRofSB3YCxcbiAgICAgICAgc3Ryb2tlQ29sb3IsXG4gICAgICAgIHN0cm9rZUFscGhhLFxuICAgICAgICBwb2ludHNDYWxsYmFjazogKGJ1ZmZlciwgcG9pbnRzKSA9PiB7XG4gICAgICAgICAgY29uc3QgdmVydGljZXMgPSB0aGlzLmRhdGEudmVydGljZXM7XG5cbiAgICAgICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSB2ZXJ0aWNlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICBidWZmZXIucHVzaChgJHt2ZXJ0aWNlc1tpXS54fSAke3ZlcnRpY2VzW2ldLnl9ICR7aSA9PT0gMCA/IFwibVwiIDogXCJsXCJ9YCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnVmZmVyLnB1c2goXCJTXCIpO1xuICAgICAgICAgIHJldHVybiBbcG9pbnRzWzBdLngsIHBvaW50c1sxXS54LCBwb2ludHNbM10ueSwgcG9pbnRzWzFdLnldO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxufVxuXG5jbGFzcyBQb2x5Z29uQW5ub3RhdGlvbiBleHRlbmRzIFBvbHlsaW5lQW5ub3RhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcbiAgICBzdXBlcihwYXJhbWV0ZXJzKTtcbiAgICB0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGUgPSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5QT0xZR09OO1xuICB9XG5cbn1cblxuY2xhc3MgQ2FyZXRBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcbiAgICBzdXBlcihwYXJhbWV0ZXJzKTtcbiAgICB0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGUgPSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5DQVJFVDtcbiAgfVxuXG59XG5cbmNsYXNzIElua0Fubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9uIHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xuICAgIHRoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZSA9IF91dGlsLkFubm90YXRpb25UeXBlLklOSztcbiAgICB0aGlzLmRhdGEuaW5rTGlzdHMgPSBbXTtcbiAgICBjb25zdCByYXdJbmtMaXN0cyA9IHBhcmFtZXRlcnMuZGljdC5nZXRBcnJheShcIklua0xpc3RcIik7XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocmF3SW5rTGlzdHMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeHJlZiA9IHBhcmFtZXRlcnMueHJlZjtcblxuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHJhd0lua0xpc3RzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgIHRoaXMuZGF0YS5pbmtMaXN0cy5wdXNoKFtdKTtcblxuICAgICAgZm9yIChsZXQgaiA9IDAsIGpqID0gcmF3SW5rTGlzdHNbaV0ubGVuZ3RoOyBqIDwgamo7IGogKz0gMikge1xuICAgICAgICB0aGlzLmRhdGEuaW5rTGlzdHNbaV0ucHVzaCh7XG4gICAgICAgICAgeDogeHJlZi5mZXRjaElmUmVmKHJhd0lua0xpc3RzW2ldW2pdKSxcbiAgICAgICAgICB5OiB4cmVmLmZldGNoSWZSZWYocmF3SW5rTGlzdHNbaV1baiArIDFdKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuYXBwZWFyYW5jZSkge1xuICAgICAgY29uc3Qgc3Ryb2tlQ29sb3IgPSB0aGlzLmNvbG9yID8gQXJyYXkuZnJvbSh0aGlzLmNvbG9yKS5tYXAoYyA9PiBjIC8gMjU1KSA6IFswLCAwLCAwXTtcbiAgICAgIGNvbnN0IHN0cm9rZUFscGhhID0gcGFyYW1ldGVycy5kaWN0LmdldChcIkNBXCIpO1xuICAgICAgY29uc3QgYm9yZGVyV2lkdGggPSB0aGlzLmJvcmRlclN0eWxlLndpZHRoIHx8IDEsXG4gICAgICAgICAgICBib3JkZXJBZGp1c3QgPSAyICogYm9yZGVyV2lkdGg7XG4gICAgICBjb25zdCBiYm94ID0gW0luZmluaXR5LCBJbmZpbml0eSwgLUluZmluaXR5LCAtSW5maW5pdHldO1xuXG4gICAgICBmb3IgKGNvbnN0IGlua0xpc3RzIG9mIHRoaXMuZGF0YS5pbmtMaXN0cykge1xuICAgICAgICBmb3IgKGNvbnN0IHZlcnRleCBvZiBpbmtMaXN0cykge1xuICAgICAgICAgIGJib3hbMF0gPSBNYXRoLm1pbihiYm94WzBdLCB2ZXJ0ZXgueCAtIGJvcmRlckFkanVzdCk7XG4gICAgICAgICAgYmJveFsxXSA9IE1hdGgubWluKGJib3hbMV0sIHZlcnRleC55IC0gYm9yZGVyQWRqdXN0KTtcbiAgICAgICAgICBiYm94WzJdID0gTWF0aC5tYXgoYmJveFsyXSwgdmVydGV4LnggKyBib3JkZXJBZGp1c3QpO1xuICAgICAgICAgIGJib3hbM10gPSBNYXRoLm1heChiYm94WzNdLCB2ZXJ0ZXgueSArIGJvcmRlckFkanVzdCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFfdXRpbC5VdGlsLmludGVyc2VjdCh0aGlzLnJlY3RhbmdsZSwgYmJveCkpIHtcbiAgICAgICAgdGhpcy5yZWN0YW5nbGUgPSBiYm94O1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7XG4gICAgICAgIHhyZWY6IHBhcmFtZXRlcnMueHJlZixcbiAgICAgICAgZXh0cmE6IGAke2JvcmRlcldpZHRofSB3YCxcbiAgICAgICAgc3Ryb2tlQ29sb3IsXG4gICAgICAgIHN0cm9rZUFscGhhLFxuICAgICAgICBwb2ludHNDYWxsYmFjazogKGJ1ZmZlciwgcG9pbnRzKSA9PiB7XG4gICAgICAgICAgZm9yIChjb25zdCBpbmtMaXN0IG9mIHRoaXMuZGF0YS5pbmtMaXN0cykge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gaW5rTGlzdC5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgIGJ1ZmZlci5wdXNoKGAke2lua0xpc3RbaV0ueH0gJHtpbmtMaXN0W2ldLnl9ICR7aSA9PT0gMCA/IFwibVwiIDogXCJsXCJ9YCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJ1ZmZlci5wdXNoKFwiU1wiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gW3BvaW50c1swXS54LCBwb2ludHNbMV0ueCwgcG9pbnRzWzNdLnksIHBvaW50c1sxXS55XTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbn1cblxuY2xhc3MgSGlnaGxpZ2h0QW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb24ge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgc3VwZXIocGFyYW1ldGVycyk7XG4gICAgdGhpcy5kYXRhLmFubm90YXRpb25UeXBlID0gX3V0aWwuQW5ub3RhdGlvblR5cGUuSElHSExJR0hUO1xuICAgIGNvbnN0IHF1YWRQb2ludHMgPSB0aGlzLmRhdGEucXVhZFBvaW50cyA9IGdldFF1YWRQb2ludHMocGFyYW1ldGVycy5kaWN0LCBudWxsKTtcblxuICAgIGlmIChxdWFkUG9pbnRzKSB7XG4gICAgICBjb25zdCByZXNvdXJjZXMgPSB0aGlzLmFwcGVhcmFuY2UgJiYgdGhpcy5hcHBlYXJhbmNlLmRpY3QuZ2V0KFwiUmVzb3VyY2VzXCIpO1xuXG4gICAgICBpZiAoIXRoaXMuYXBwZWFyYW5jZSB8fCAhKHJlc291cmNlcyAmJiByZXNvdXJjZXMuaGFzKFwiRXh0R1N0YXRlXCIpKSkge1xuICAgICAgICBpZiAodGhpcy5hcHBlYXJhbmNlKSB7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiSGlnaGxpZ2h0QW5ub3RhdGlvbiAtIGlnbm9yaW5nIGJ1aWx0LWluIGFwcGVhcmFuY2Ugc3RyZWFtLlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGxDb2xvciA9IHRoaXMuY29sb3IgPyBBcnJheS5mcm9tKHRoaXMuY29sb3IpLm1hcChjID0+IGMgLyAyNTUpIDogWzEsIDEsIDBdO1xuICAgICAgICBjb25zdCBmaWxsQWxwaGEgPSBwYXJhbWV0ZXJzLmRpY3QuZ2V0KFwiQ0FcIik7XG5cbiAgICAgICAgdGhpcy5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe1xuICAgICAgICAgIHhyZWY6IHBhcmFtZXRlcnMueHJlZixcbiAgICAgICAgICBmaWxsQ29sb3IsXG4gICAgICAgICAgYmxlbmRNb2RlOiBcIk11bHRpcGx5XCIsXG4gICAgICAgICAgZmlsbEFscGhhLFxuICAgICAgICAgIHBvaW50c0NhbGxiYWNrOiAoYnVmZmVyLCBwb2ludHMpID0+IHtcbiAgICAgICAgICAgIGJ1ZmZlci5wdXNoKGAke3BvaW50c1swXS54fSAke3BvaW50c1swXS55fSBtYCwgYCR7cG9pbnRzWzFdLnh9ICR7cG9pbnRzWzFdLnl9IGxgLCBgJHtwb2ludHNbM10ueH0gJHtwb2ludHNbM10ueX0gbGAsIGAke3BvaW50c1syXS54fSAke3BvaW50c1syXS55fSBsYCwgXCJmXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFtwb2ludHNbMF0ueCwgcG9pbnRzWzFdLngsIHBvaW50c1szXS55LCBwb2ludHNbMV0ueV07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kYXRhLmhhc1BvcHVwID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbn1cblxuY2xhc3MgVW5kZXJsaW5lQW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb24ge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgc3VwZXIocGFyYW1ldGVycyk7XG4gICAgdGhpcy5kYXRhLmFubm90YXRpb25UeXBlID0gX3V0aWwuQW5ub3RhdGlvblR5cGUuVU5ERVJMSU5FO1xuICAgIGNvbnN0IHF1YWRQb2ludHMgPSB0aGlzLmRhdGEucXVhZFBvaW50cyA9IGdldFF1YWRQb2ludHMocGFyYW1ldGVycy5kaWN0LCBudWxsKTtcblxuICAgIGlmIChxdWFkUG9pbnRzKSB7XG4gICAgICBpZiAoIXRoaXMuYXBwZWFyYW5jZSkge1xuICAgICAgICBjb25zdCBzdHJva2VDb2xvciA9IHRoaXMuY29sb3IgPyBBcnJheS5mcm9tKHRoaXMuY29sb3IpLm1hcChjID0+IGMgLyAyNTUpIDogWzAsIDAsIDBdO1xuICAgICAgICBjb25zdCBzdHJva2VBbHBoYSA9IHBhcmFtZXRlcnMuZGljdC5nZXQoXCJDQVwiKTtcblxuICAgICAgICB0aGlzLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7XG4gICAgICAgICAgeHJlZjogcGFyYW1ldGVycy54cmVmLFxuICAgICAgICAgIGV4dHJhOiBcIltdIDAgZCAxIHdcIixcbiAgICAgICAgICBzdHJva2VDb2xvcixcbiAgICAgICAgICBzdHJva2VBbHBoYSxcbiAgICAgICAgICBwb2ludHNDYWxsYmFjazogKGJ1ZmZlciwgcG9pbnRzKSA9PiB7XG4gICAgICAgICAgICBidWZmZXIucHVzaChgJHtwb2ludHNbMl0ueH0gJHtwb2ludHNbMl0ueX0gbWAsIGAke3BvaW50c1szXS54fSAke3BvaW50c1szXS55fSBsYCwgXCJTXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFtwb2ludHNbMF0ueCwgcG9pbnRzWzFdLngsIHBvaW50c1szXS55LCBwb2ludHNbMV0ueV07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kYXRhLmhhc1BvcHVwID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbn1cblxuY2xhc3MgU3F1aWdnbHlBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMpIHtcbiAgICBzdXBlcihwYXJhbWV0ZXJzKTtcbiAgICB0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGUgPSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5TUVVJR0dMWTtcbiAgICBjb25zdCBxdWFkUG9pbnRzID0gdGhpcy5kYXRhLnF1YWRQb2ludHMgPSBnZXRRdWFkUG9pbnRzKHBhcmFtZXRlcnMuZGljdCwgbnVsbCk7XG5cbiAgICBpZiAocXVhZFBvaW50cykge1xuICAgICAgaWYgKCF0aGlzLmFwcGVhcmFuY2UpIHtcbiAgICAgICAgY29uc3Qgc3Ryb2tlQ29sb3IgPSB0aGlzLmNvbG9yID8gQXJyYXkuZnJvbSh0aGlzLmNvbG9yKS5tYXAoYyA9PiBjIC8gMjU1KSA6IFswLCAwLCAwXTtcbiAgICAgICAgY29uc3Qgc3Ryb2tlQWxwaGEgPSBwYXJhbWV0ZXJzLmRpY3QuZ2V0KFwiQ0FcIik7XG5cbiAgICAgICAgdGhpcy5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe1xuICAgICAgICAgIHhyZWY6IHBhcmFtZXRlcnMueHJlZixcbiAgICAgICAgICBleHRyYTogXCJbXSAwIGQgMSB3XCIsXG4gICAgICAgICAgc3Ryb2tlQ29sb3IsXG4gICAgICAgICAgc3Ryb2tlQWxwaGEsXG4gICAgICAgICAgcG9pbnRzQ2FsbGJhY2s6IChidWZmZXIsIHBvaW50cykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZHkgPSAocG9pbnRzWzBdLnkgLSBwb2ludHNbMl0ueSkgLyA2O1xuICAgICAgICAgICAgbGV0IHNoaWZ0ID0gZHk7XG4gICAgICAgICAgICBsZXQgeCA9IHBvaW50c1syXS54O1xuICAgICAgICAgICAgY29uc3QgeSA9IHBvaW50c1syXS55O1xuICAgICAgICAgICAgY29uc3QgeEVuZCA9IHBvaW50c1szXS54O1xuICAgICAgICAgICAgYnVmZmVyLnB1c2goYCR7eH0gJHt5ICsgc2hpZnR9IG1gKTtcblxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICB4ICs9IDI7XG4gICAgICAgICAgICAgIHNoaWZ0ID0gc2hpZnQgPT09IDAgPyBkeSA6IDA7XG4gICAgICAgICAgICAgIGJ1ZmZlci5wdXNoKGAke3h9ICR7eSArIHNoaWZ0fSBsYCk7XG4gICAgICAgICAgICB9IHdoaWxlICh4IDwgeEVuZCk7XG5cbiAgICAgICAgICAgIGJ1ZmZlci5wdXNoKFwiU1wiKTtcbiAgICAgICAgICAgIHJldHVybiBbcG9pbnRzWzJdLngsIHhFbmQsIHkgLSAyICogZHksIHkgKyAyICogZHldO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0YS5oYXNQb3B1cCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG59XG5cbmNsYXNzIFN0cmlrZU91dEFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9uIHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xuICAgIHRoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZSA9IF91dGlsLkFubm90YXRpb25UeXBlLlNUUklLRU9VVDtcbiAgICBjb25zdCBxdWFkUG9pbnRzID0gdGhpcy5kYXRhLnF1YWRQb2ludHMgPSBnZXRRdWFkUG9pbnRzKHBhcmFtZXRlcnMuZGljdCwgbnVsbCk7XG5cbiAgICBpZiAocXVhZFBvaW50cykge1xuICAgICAgaWYgKCF0aGlzLmFwcGVhcmFuY2UpIHtcbiAgICAgICAgY29uc3Qgc3Ryb2tlQ29sb3IgPSB0aGlzLmNvbG9yID8gQXJyYXkuZnJvbSh0aGlzLmNvbG9yKS5tYXAoYyA9PiBjIC8gMjU1KSA6IFswLCAwLCAwXTtcbiAgICAgICAgY29uc3Qgc3Ryb2tlQWxwaGEgPSBwYXJhbWV0ZXJzLmRpY3QuZ2V0KFwiQ0FcIik7XG5cbiAgICAgICAgdGhpcy5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe1xuICAgICAgICAgIHhyZWY6IHBhcmFtZXRlcnMueHJlZixcbiAgICAgICAgICBleHRyYTogXCJbXSAwIGQgMSB3XCIsXG4gICAgICAgICAgc3Ryb2tlQ29sb3IsXG4gICAgICAgICAgc3Ryb2tlQWxwaGEsXG4gICAgICAgICAgcG9pbnRzQ2FsbGJhY2s6IChidWZmZXIsIHBvaW50cykgPT4ge1xuICAgICAgICAgICAgYnVmZmVyLnB1c2goYCR7KHBvaW50c1swXS54ICsgcG9pbnRzWzJdLngpIC8gMn0gYCArIGAkeyhwb2ludHNbMF0ueSArIHBvaW50c1syXS55KSAvIDJ9IG1gLCBgJHsocG9pbnRzWzFdLnggKyBwb2ludHNbM10ueCkgLyAyfSBgICsgYCR7KHBvaW50c1sxXS55ICsgcG9pbnRzWzNdLnkpIC8gMn0gbGAsIFwiU1wiKTtcbiAgICAgICAgICAgIHJldHVybiBbcG9pbnRzWzBdLngsIHBvaW50c1sxXS54LCBwb2ludHNbM10ueSwgcG9pbnRzWzFdLnldO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGF0YS5oYXNQb3B1cCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG59XG5cbmNsYXNzIFN0YW1wQW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb24ge1xuICBjb25zdHJ1Y3RvcihwYXJhbWV0ZXJzKSB7XG4gICAgc3VwZXIocGFyYW1ldGVycyk7XG4gICAgdGhpcy5kYXRhLmFubm90YXRpb25UeXBlID0gX3V0aWwuQW5ub3RhdGlvblR5cGUuU1RBTVA7XG4gIH1cblxufVxuXG5jbGFzcyBGaWxlQXR0YWNobWVudEFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9uIHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVycykge1xuICAgIHN1cGVyKHBhcmFtZXRlcnMpO1xuICAgIGNvbnN0IGZpbGUgPSBuZXcgX2ZpbGVfc3BlYy5GaWxlU3BlYyhwYXJhbWV0ZXJzLmRpY3QuZ2V0KFwiRlNcIiksIHBhcmFtZXRlcnMueHJlZik7XG4gICAgdGhpcy5kYXRhLmFubm90YXRpb25UeXBlID0gX3V0aWwuQW5ub3RhdGlvblR5cGUuRklMRUFUVEFDSE1FTlQ7XG4gICAgdGhpcy5kYXRhLmZpbGUgPSBmaWxlLnNlcmlhbGl6YWJsZTtcbiAgfVxuXG59XG5cbi8qKiovIH0pLFxuLyogMjMgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuY3JlYXRlRGVmYXVsdEFwcGVhcmFuY2UgPSBjcmVhdGVEZWZhdWx0QXBwZWFyYW5jZTtcbmV4cG9ydHMucGFyc2VEZWZhdWx0QXBwZWFyYW5jZSA9IHBhcnNlRGVmYXVsdEFwcGVhcmFuY2U7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfY29sb3JzcGFjZSA9IF9fd19wZGZqc19yZXF1aXJlX18oMjQpO1xuXG52YXIgX2NvcmVfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDkpO1xuXG52YXIgX2V2YWx1YXRvciA9IF9fd19wZGZqc19yZXF1aXJlX18oMjUpO1xuXG52YXIgX3ByaW1pdGl2ZXMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDUpO1xuXG52YXIgX3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oMTApO1xuXG5jbGFzcyBEZWZhdWx0QXBwZWFyYW5jZUV2YWx1YXRvciBleHRlbmRzIF9ldmFsdWF0b3IuRXZhbHVhdG9yUHJlcHJvY2Vzc29yIHtcbiAgY29uc3RydWN0b3Ioc3RyKSB7XG4gICAgc3VwZXIobmV3IF9zdHJlYW0uU3RyaW5nU3RyZWFtKHN0cikpO1xuICB9XG5cbiAgcGFyc2UoKSB7XG4gICAgY29uc3Qgb3BlcmF0aW9uID0ge1xuICAgICAgZm46IDAsXG4gICAgICBhcmdzOiBbXVxuICAgIH07XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgZm9udFNpemU6IDAsXG4gICAgICBmb250TmFtZTogXCJcIixcbiAgICAgIGZvbnRDb2xvcjogbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpXG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBvcGVyYXRpb24uYXJncy5sZW5ndGggPSAwO1xuXG4gICAgICAgIGlmICghdGhpcy5yZWFkKG9wZXJhdGlvbikpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNhdmVkU3RhdGVzRGVwdGggIT09IDApIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBmbixcbiAgICAgICAgICBhcmdzXG4gICAgICAgIH0gPSBvcGVyYXRpb247XG5cbiAgICAgICAgc3dpdGNoIChmbiB8IDApIHtcbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRGb250OlxuICAgICAgICAgICAgY29uc3QgW2ZvbnROYW1lLCBmb250U2l6ZV0gPSBhcmdzO1xuXG4gICAgICAgICAgICBpZiAoZm9udE5hbWUgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5OYW1lKSB7XG4gICAgICAgICAgICAgIHJlc3VsdC5mb250TmFtZSA9IGZvbnROYW1lLm5hbWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgZm9udFNpemUgPT09IFwibnVtYmVyXCIgJiYgZm9udFNpemUgPiAwKSB7XG4gICAgICAgICAgICAgIHJlc3VsdC5mb250U2l6ZSA9IGZvbnRTaXplO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldEZpbGxSR0JDb2xvcjpcbiAgICAgICAgICAgIF9jb2xvcnNwYWNlLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2IuZ2V0UmdiSXRlbShhcmdzLCAwLCByZXN1bHQuZm9udENvbG9yLCAwKTtcblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRGaWxsR3JheTpcbiAgICAgICAgICAgIF9jb2xvcnNwYWNlLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5LmdldFJnYkl0ZW0oYXJncywgMCwgcmVzdWx0LmZvbnRDb2xvciwgMCk7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0RmlsbENvbG9yU3BhY2U6XG4gICAgICAgICAgICBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215ay5nZXRSZ2JJdGVtKGFyZ3MsIDAsIHJlc3VsdC5mb250Q29sb3IsIDApO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKHJlYXNvbikge1xuICAgICAgKDAsIF91dGlsLndhcm4pKGBwYXJzZURlZmF1bHRBcHBlYXJhbmNlIC0gaWdub3JpbmcgZXJyb3JzOiBcIiR7cmVhc29ufVwiLmApO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxufVxuXG5mdW5jdGlvbiBwYXJzZURlZmF1bHRBcHBlYXJhbmNlKHN0cikge1xuICByZXR1cm4gbmV3IERlZmF1bHRBcHBlYXJhbmNlRXZhbHVhdG9yKHN0cikucGFyc2UoKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGVmYXVsdEFwcGVhcmFuY2Uoe1xuICBmb250U2l6ZSxcbiAgZm9udE5hbWUsXG4gIGZvbnRDb2xvclxufSkge1xuICBsZXQgY29sb3JDbWQ7XG5cbiAgaWYgKGZvbnRDb2xvci5ldmVyeShjID0+IGMgPT09IDApKSB7XG4gICAgY29sb3JDbWQgPSBcIjAgZ1wiO1xuICB9IGVsc2Uge1xuICAgIGNvbG9yQ21kID0gQXJyYXkuZnJvbShmb250Q29sb3IpLm1hcChjID0+IChjIC8gMjU1KS50b0ZpeGVkKDIpKS5qb2luKFwiIFwiKSArIFwiIHJnXCI7XG4gIH1cblxuICByZXR1cm4gYC8keygwLCBfY29yZV91dGlscy5lc2NhcGVQREZOYW1lKShmb250TmFtZSl9ICR7Zm9udFNpemV9IFRmICR7Y29sb3JDbWR9YDtcbn1cblxuLyoqKi8gfSksXG4vKiAyNCAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5Db2xvclNwYWNlID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX3ByaW1pdGl2ZXMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDUpO1xuXG52YXIgX2NvcmVfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDkpO1xuXG5mdW5jdGlvbiByZXNpemVSZ2JJbWFnZShzcmMsIGRlc3QsIHcxLCBoMSwgdzIsIGgyLCBhbHBoYTAxKSB7XG4gIGNvbnN0IENPTVBPTkVOVFMgPSAzO1xuICBhbHBoYTAxID0gYWxwaGEwMSAhPT0gMSA/IDAgOiBhbHBoYTAxO1xuICBjb25zdCB4UmF0aW8gPSB3MSAvIHcyO1xuICBjb25zdCB5UmF0aW8gPSBoMSAvIGgyO1xuICBsZXQgbmV3SW5kZXggPSAwLFxuICAgICAgb2xkSW5kZXg7XG4gIGNvbnN0IHhTY2FsZWQgPSBuZXcgVWludDE2QXJyYXkodzIpO1xuICBjb25zdCB3MVNjYW5saW5lID0gdzEgKiBDT01QT05FTlRTO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdzI7IGkrKykge1xuICAgIHhTY2FsZWRbaV0gPSBNYXRoLmZsb29yKGkgKiB4UmF0aW8pICogQ09NUE9ORU5UUztcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaDI7IGkrKykge1xuICAgIGNvbnN0IHB5ID0gTWF0aC5mbG9vcihpICogeVJhdGlvKSAqIHcxU2NhbmxpbmU7XG5cbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHcyOyBqKyspIHtcbiAgICAgIG9sZEluZGV4ID0gcHkgKyB4U2NhbGVkW2pdO1xuICAgICAgZGVzdFtuZXdJbmRleCsrXSA9IHNyY1tvbGRJbmRleCsrXTtcbiAgICAgIGRlc3RbbmV3SW5kZXgrK10gPSBzcmNbb2xkSW5kZXgrK107XG4gICAgICBkZXN0W25ld0luZGV4KytdID0gc3JjW29sZEluZGV4KytdO1xuICAgICAgbmV3SW5kZXggKz0gYWxwaGEwMTtcbiAgICB9XG4gIH1cbn1cblxuY2xhc3MgQ29sb3JTcGFjZSB7XG4gIGNvbnN0cnVjdG9yKG5hbWUsIG51bUNvbXBzKSB7XG4gICAgaWYgKHRoaXMuY29uc3RydWN0b3IgPT09IENvbG9yU3BhY2UpIHtcbiAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJDYW5ub3QgaW5pdGlhbGl6ZSBDb2xvclNwYWNlLlwiKTtcbiAgICB9XG5cbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMubnVtQ29tcHMgPSBudW1Db21wcztcbiAgfVxuXG4gIGdldFJnYihzcmMsIHNyY09mZnNldCkge1xuICAgIGNvbnN0IHJnYiA9IG5ldyBVaW50OENsYW1wZWRBcnJheSgzKTtcbiAgICB0aGlzLmdldFJnYkl0ZW0oc3JjLCBzcmNPZmZzZXQsIHJnYiwgMCk7XG4gICAgcmV0dXJuIHJnYjtcbiAgfVxuXG4gIGdldFJnYkl0ZW0oc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiU2hvdWxkIG5vdCBjYWxsIENvbG9yU3BhY2UuZ2V0UmdiSXRlbVwiKTtcbiAgfVxuXG4gIGdldFJnYkJ1ZmZlcihzcmMsIHNyY09mZnNldCwgY291bnQsIGRlc3QsIGRlc3RPZmZzZXQsIGJpdHMsIGFscGhhMDEpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiU2hvdWxkIG5vdCBjYWxsIENvbG9yU3BhY2UuZ2V0UmdiQnVmZmVyXCIpO1xuICB9XG5cbiAgZ2V0T3V0cHV0TGVuZ3RoKGlucHV0TGVuZ3RoLCBhbHBoYTAxKSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIlNob3VsZCBub3QgY2FsbCBDb2xvclNwYWNlLmdldE91dHB1dExlbmd0aFwiKTtcbiAgfVxuXG4gIGlzUGFzc3Rocm91Z2goYml0cykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlzRGVmYXVsdERlY29kZShkZWNvZGVNYXAsIGJwYykge1xuICAgIHJldHVybiBDb2xvclNwYWNlLmlzRGVmYXVsdERlY29kZShkZWNvZGVNYXAsIHRoaXMubnVtQ29tcHMpO1xuICB9XG5cbiAgZmlsbFJnYihkZXN0LCBvcmlnaW5hbFdpZHRoLCBvcmlnaW5hbEhlaWdodCwgd2lkdGgsIGhlaWdodCwgYWN0dWFsSGVpZ2h0LCBicGMsIGNvbXBzLCBhbHBoYTAxKSB7XG4gICAgY29uc3QgY291bnQgPSBvcmlnaW5hbFdpZHRoICogb3JpZ2luYWxIZWlnaHQ7XG4gICAgbGV0IHJnYkJ1ZiA9IG51bGw7XG4gICAgY29uc3QgbnVtQ29tcG9uZW50Q29sb3JzID0gMSA8PCBicGM7XG4gICAgY29uc3QgbmVlZHNSZXNpemluZyA9IG9yaWdpbmFsSGVpZ2h0ICE9PSBoZWlnaHQgfHwgb3JpZ2luYWxXaWR0aCAhPT0gd2lkdGg7XG5cbiAgICBpZiAodGhpcy5pc1Bhc3N0aHJvdWdoKGJwYykpIHtcbiAgICAgIHJnYkJ1ZiA9IGNvbXBzO1xuICAgIH0gZWxzZSBpZiAodGhpcy5udW1Db21wcyA9PT0gMSAmJiBjb3VudCA+IG51bUNvbXBvbmVudENvbG9ycyAmJiB0aGlzLm5hbWUgIT09IFwiRGV2aWNlR3JheVwiICYmIHRoaXMubmFtZSAhPT0gXCJEZXZpY2VSR0JcIikge1xuICAgICAgY29uc3QgYWxsQ29sb3JzID0gYnBjIDw9IDggPyBuZXcgVWludDhBcnJheShudW1Db21wb25lbnRDb2xvcnMpIDogbmV3IFVpbnQxNkFycmF5KG51bUNvbXBvbmVudENvbG9ycyk7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtQ29tcG9uZW50Q29sb3JzOyBpKyspIHtcbiAgICAgICAgYWxsQ29sb3JzW2ldID0gaTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29sb3JNYXAgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkobnVtQ29tcG9uZW50Q29sb3JzICogMyk7XG4gICAgICB0aGlzLmdldFJnYkJ1ZmZlcihhbGxDb2xvcnMsIDAsIG51bUNvbXBvbmVudENvbG9ycywgY29sb3JNYXAsIDAsIGJwYywgMCk7XG5cbiAgICAgIGlmICghbmVlZHNSZXNpemluZykge1xuICAgICAgICBsZXQgZGVzdFBvcyA9IDA7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7XG4gICAgICAgICAgY29uc3Qga2V5ID0gY29tcHNbaV0gKiAzO1xuICAgICAgICAgIGRlc3RbZGVzdFBvcysrXSA9IGNvbG9yTWFwW2tleV07XG4gICAgICAgICAgZGVzdFtkZXN0UG9zKytdID0gY29sb3JNYXBba2V5ICsgMV07XG4gICAgICAgICAgZGVzdFtkZXN0UG9zKytdID0gY29sb3JNYXBba2V5ICsgMl07XG4gICAgICAgICAgZGVzdFBvcyArPSBhbHBoYTAxO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZ2JCdWYgPSBuZXcgVWludDhBcnJheShjb3VudCAqIDMpO1xuICAgICAgICBsZXQgcmdiUG9zID0gMDtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHtcbiAgICAgICAgICBjb25zdCBrZXkgPSBjb21wc1tpXSAqIDM7XG4gICAgICAgICAgcmdiQnVmW3JnYlBvcysrXSA9IGNvbG9yTWFwW2tleV07XG4gICAgICAgICAgcmdiQnVmW3JnYlBvcysrXSA9IGNvbG9yTWFwW2tleSArIDFdO1xuICAgICAgICAgIHJnYkJ1ZltyZ2JQb3MrK10gPSBjb2xvck1hcFtrZXkgKyAyXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIW5lZWRzUmVzaXppbmcpIHtcbiAgICAgICAgdGhpcy5nZXRSZ2JCdWZmZXIoY29tcHMsIDAsIHdpZHRoICogYWN0dWFsSGVpZ2h0LCBkZXN0LCAwLCBicGMsIGFscGhhMDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmdiQnVmID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGNvdW50ICogMyk7XG4gICAgICAgIHRoaXMuZ2V0UmdiQnVmZmVyKGNvbXBzLCAwLCBjb3VudCwgcmdiQnVmLCAwLCBicGMsIDApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZ2JCdWYpIHtcbiAgICAgIGlmIChuZWVkc1Jlc2l6aW5nKSB7XG4gICAgICAgIHJlc2l6ZVJnYkltYWdlKHJnYkJ1ZiwgZGVzdCwgb3JpZ2luYWxXaWR0aCwgb3JpZ2luYWxIZWlnaHQsIHdpZHRoLCBoZWlnaHQsIGFscGhhMDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGRlc3RQb3MgPSAwLFxuICAgICAgICAgICAgcmdiUG9zID0gMDtcblxuICAgICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSB3aWR0aCAqIGFjdHVhbEhlaWdodDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICBkZXN0W2Rlc3RQb3MrK10gPSByZ2JCdWZbcmdiUG9zKytdO1xuICAgICAgICAgIGRlc3RbZGVzdFBvcysrXSA9IHJnYkJ1ZltyZ2JQb3MrK107XG4gICAgICAgICAgZGVzdFtkZXN0UG9zKytdID0gcmdiQnVmW3JnYlBvcysrXTtcbiAgICAgICAgICBkZXN0UG9zICs9IGFscGhhMDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgdXNlc1plcm9Ub09uZVJhbmdlKCkge1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcInVzZXNaZXJvVG9PbmVSYW5nZVwiLCB0cnVlKTtcbiAgfVxuXG4gIHN0YXRpYyBfY2FjaGUoY2FjaGVLZXksIHhyZWYsIGxvY2FsQ29sb3JTcGFjZUNhY2hlLCBwYXJzZWRDb2xvclNwYWNlKSB7XG4gICAgaWYgKCFsb2NhbENvbG9yU3BhY2VDYWNoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb2xvclNwYWNlLl9jYWNoZSAtIGV4cGVjdGVkIFwibG9jYWxDb2xvclNwYWNlQ2FjaGVcIiBhcmd1bWVudC4nKTtcbiAgICB9XG5cbiAgICBpZiAoIXBhcnNlZENvbG9yU3BhY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29sb3JTcGFjZS5fY2FjaGUgLSBleHBlY3RlZCBcInBhcnNlZENvbG9yU3BhY2VcIiBhcmd1bWVudC4nKTtcbiAgICB9XG5cbiAgICBsZXQgY3NOYW1lLCBjc1JlZjtcblxuICAgIGlmIChjYWNoZUtleSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLlJlZikge1xuICAgICAgY3NSZWYgPSBjYWNoZUtleTtcbiAgICAgIGNhY2hlS2V5ID0geHJlZi5mZXRjaChjYWNoZUtleSk7XG4gICAgfVxuXG4gICAgaWYgKGNhY2hlS2V5IGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuTmFtZSkge1xuICAgICAgY3NOYW1lID0gY2FjaGVLZXkubmFtZTtcbiAgICB9XG5cbiAgICBpZiAoY3NOYW1lIHx8IGNzUmVmKSB7XG4gICAgICBsb2NhbENvbG9yU3BhY2VDYWNoZS5zZXQoY3NOYW1lLCBjc1JlZiwgcGFyc2VkQ29sb3JTcGFjZSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldENhY2hlZChjYWNoZUtleSwgeHJlZiwgbG9jYWxDb2xvclNwYWNlQ2FjaGUpIHtcbiAgICBpZiAoIWxvY2FsQ29sb3JTcGFjZUNhY2hlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbG9yU3BhY2UuZ2V0Q2FjaGVkIC0gZXhwZWN0ZWQgXCJsb2NhbENvbG9yU3BhY2VDYWNoZVwiIGFyZ3VtZW50LicpO1xuICAgIH1cblxuICAgIGlmIChjYWNoZUtleSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLlJlZikge1xuICAgICAgY29uc3QgbG9jYWxDb2xvclNwYWNlID0gbG9jYWxDb2xvclNwYWNlQ2FjaGUuZ2V0QnlSZWYoY2FjaGVLZXkpO1xuXG4gICAgICBpZiAobG9jYWxDb2xvclNwYWNlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbENvbG9yU3BhY2U7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNhY2hlS2V5ID0geHJlZi5mZXRjaChjYWNoZUtleSk7XG4gICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICBpZiAoZXggaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICAgIHRocm93IGV4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNhY2hlS2V5IGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuTmFtZSkge1xuICAgICAgY29uc3QgbG9jYWxDb2xvclNwYWNlID0gbG9jYWxDb2xvclNwYWNlQ2FjaGUuZ2V0QnlOYW1lKGNhY2hlS2V5Lm5hbWUpO1xuXG4gICAgICBpZiAobG9jYWxDb2xvclNwYWNlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbENvbG9yU3BhY2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgcGFyc2VBc3luYyh7XG4gICAgY3MsXG4gICAgeHJlZixcbiAgICByZXNvdXJjZXMgPSBudWxsLFxuICAgIHBkZkZ1bmN0aW9uRmFjdG9yeSxcbiAgICBsb2NhbENvbG9yU3BhY2VDYWNoZVxuICB9KSB7XG4gICAgY29uc3QgcGFyc2VkQ29sb3JTcGFjZSA9IHRoaXMuX3BhcnNlKGNzLCB4cmVmLCByZXNvdXJjZXMsIHBkZkZ1bmN0aW9uRmFjdG9yeSk7XG5cbiAgICB0aGlzLl9jYWNoZShjcywgeHJlZiwgbG9jYWxDb2xvclNwYWNlQ2FjaGUsIHBhcnNlZENvbG9yU3BhY2UpO1xuXG4gICAgcmV0dXJuIHBhcnNlZENvbG9yU3BhY2U7XG4gIH1cblxuICBzdGF0aWMgcGFyc2Uoe1xuICAgIGNzLFxuICAgIHhyZWYsXG4gICAgcmVzb3VyY2VzID0gbnVsbCxcbiAgICBwZGZGdW5jdGlvbkZhY3RvcnksXG4gICAgbG9jYWxDb2xvclNwYWNlQ2FjaGVcbiAgfSkge1xuICAgIGNvbnN0IGNhY2hlZENvbG9yU3BhY2UgPSB0aGlzLmdldENhY2hlZChjcywgeHJlZiwgbG9jYWxDb2xvclNwYWNlQ2FjaGUpO1xuXG4gICAgaWYgKGNhY2hlZENvbG9yU3BhY2UpIHtcbiAgICAgIHJldHVybiBjYWNoZWRDb2xvclNwYWNlO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZENvbG9yU3BhY2UgPSB0aGlzLl9wYXJzZShjcywgeHJlZiwgcmVzb3VyY2VzLCBwZGZGdW5jdGlvbkZhY3RvcnkpO1xuXG4gICAgdGhpcy5fY2FjaGUoY3MsIHhyZWYsIGxvY2FsQ29sb3JTcGFjZUNhY2hlLCBwYXJzZWRDb2xvclNwYWNlKTtcblxuICAgIHJldHVybiBwYXJzZWRDb2xvclNwYWNlO1xuICB9XG5cbiAgc3RhdGljIF9wYXJzZShjcywgeHJlZiwgcmVzb3VyY2VzID0gbnVsbCwgcGRmRnVuY3Rpb25GYWN0b3J5KSB7XG4gICAgY3MgPSB4cmVmLmZldGNoSWZSZWYoY3MpO1xuXG4gICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGNzKSkge1xuICAgICAgc3dpdGNoIChjcy5uYW1lKSB7XG4gICAgICAgIGNhc2UgXCJHXCI6XG4gICAgICAgIGNhc2UgXCJEZXZpY2VHcmF5XCI6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2luZ2xldG9ucy5ncmF5O1xuXG4gICAgICAgIGNhc2UgXCJSR0JcIjpcbiAgICAgICAgY2FzZSBcIkRldmljZVJHQlwiOlxuICAgICAgICAgIHJldHVybiB0aGlzLnNpbmdsZXRvbnMucmdiO1xuXG4gICAgICAgIGNhc2UgXCJDTVlLXCI6XG4gICAgICAgIGNhc2UgXCJEZXZpY2VDTVlLXCI6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2luZ2xldG9ucy5jbXlrO1xuXG4gICAgICAgIGNhc2UgXCJQYXR0ZXJuXCI6XG4gICAgICAgICAgcmV0dXJuIG5ldyBQYXR0ZXJuQ1MobnVsbCk7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkocmVzb3VyY2VzKSkge1xuICAgICAgICAgICAgY29uc3QgY29sb3JTcGFjZXMgPSByZXNvdXJjZXMuZ2V0KFwiQ29sb3JTcGFjZVwiKTtcblxuICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGNvbG9yU3BhY2VzKSkge1xuICAgICAgICAgICAgICBjb25zdCByZXNvdXJjZXNDUyA9IGNvbG9yU3BhY2VzLmdldChjcy5uYW1lKTtcblxuICAgICAgICAgICAgICBpZiAocmVzb3VyY2VzQ1MpIHtcbiAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkocmVzb3VyY2VzQ1MpKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGFyc2UocmVzb3VyY2VzQ1MsIHhyZWYsIHJlc291cmNlcywgcGRmRnVuY3Rpb25GYWN0b3J5KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjcyA9IHJlc291cmNlc0NTO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBVbnJlY29nbml6ZWQgQ29sb3JTcGFjZTogJHtjcy5uYW1lfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGNzKSkge1xuICAgICAgY29uc3QgbW9kZSA9IHhyZWYuZmV0Y2hJZlJlZihjc1swXSkubmFtZTtcbiAgICAgIGxldCBwYXJhbXMsIG51bUNvbXBzLCBiYXNlQ1MsIHdoaXRlUG9pbnQsIGJsYWNrUG9pbnQsIGdhbW1hO1xuXG4gICAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgY2FzZSBcIkdcIjpcbiAgICAgICAgY2FzZSBcIkRldmljZUdyYXlcIjpcbiAgICAgICAgICByZXR1cm4gdGhpcy5zaW5nbGV0b25zLmdyYXk7XG5cbiAgICAgICAgY2FzZSBcIlJHQlwiOlxuICAgICAgICBjYXNlIFwiRGV2aWNlUkdCXCI6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2luZ2xldG9ucy5yZ2I7XG5cbiAgICAgICAgY2FzZSBcIkNNWUtcIjpcbiAgICAgICAgY2FzZSBcIkRldmljZUNNWUtcIjpcbiAgICAgICAgICByZXR1cm4gdGhpcy5zaW5nbGV0b25zLmNteWs7XG5cbiAgICAgICAgY2FzZSBcIkNhbEdyYXlcIjpcbiAgICAgICAgICBwYXJhbXMgPSB4cmVmLmZldGNoSWZSZWYoY3NbMV0pO1xuICAgICAgICAgIHdoaXRlUG9pbnQgPSBwYXJhbXMuZ2V0QXJyYXkoXCJXaGl0ZVBvaW50XCIpO1xuICAgICAgICAgIGJsYWNrUG9pbnQgPSBwYXJhbXMuZ2V0QXJyYXkoXCJCbGFja1BvaW50XCIpO1xuICAgICAgICAgIGdhbW1hID0gcGFyYW1zLmdldChcIkdhbW1hXCIpO1xuICAgICAgICAgIHJldHVybiBuZXcgQ2FsR3JheUNTKHdoaXRlUG9pbnQsIGJsYWNrUG9pbnQsIGdhbW1hKTtcblxuICAgICAgICBjYXNlIFwiQ2FsUkdCXCI6XG4gICAgICAgICAgcGFyYW1zID0geHJlZi5mZXRjaElmUmVmKGNzWzFdKTtcbiAgICAgICAgICB3aGl0ZVBvaW50ID0gcGFyYW1zLmdldEFycmF5KFwiV2hpdGVQb2ludFwiKTtcbiAgICAgICAgICBibGFja1BvaW50ID0gcGFyYW1zLmdldEFycmF5KFwiQmxhY2tQb2ludFwiKTtcbiAgICAgICAgICBnYW1tYSA9IHBhcmFtcy5nZXRBcnJheShcIkdhbW1hXCIpO1xuICAgICAgICAgIGNvbnN0IG1hdHJpeCA9IHBhcmFtcy5nZXRBcnJheShcIk1hdHJpeFwiKTtcbiAgICAgICAgICByZXR1cm4gbmV3IENhbFJHQkNTKHdoaXRlUG9pbnQsIGJsYWNrUG9pbnQsIGdhbW1hLCBtYXRyaXgpO1xuXG4gICAgICAgIGNhc2UgXCJJQ0NCYXNlZFwiOlxuICAgICAgICAgIGNvbnN0IHN0cmVhbSA9IHhyZWYuZmV0Y2hJZlJlZihjc1sxXSk7XG4gICAgICAgICAgY29uc3QgZGljdCA9IHN0cmVhbS5kaWN0O1xuICAgICAgICAgIG51bUNvbXBzID0gZGljdC5nZXQoXCJOXCIpO1xuICAgICAgICAgIGNvbnN0IGFsdCA9IGRpY3QuZ2V0KFwiQWx0ZXJuYXRlXCIpO1xuXG4gICAgICAgICAgaWYgKGFsdCkge1xuICAgICAgICAgICAgY29uc3QgYWx0Q1MgPSB0aGlzLl9wYXJzZShhbHQsIHhyZWYsIHJlc291cmNlcywgcGRmRnVuY3Rpb25GYWN0b3J5KTtcblxuICAgICAgICAgICAgaWYgKGFsdENTLm51bUNvbXBzID09PSBudW1Db21wcykge1xuICAgICAgICAgICAgICByZXR1cm4gYWx0Q1M7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIklDQ0Jhc2VkIGNvbG9yIHNwYWNlOiBJZ25vcmluZyBpbmNvcnJlY3QgL0FsdGVybmF0ZSBlbnRyeS5cIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG51bUNvbXBzID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zaW5nbGV0b25zLmdyYXk7XG4gICAgICAgICAgfSBlbHNlIGlmIChudW1Db21wcyA9PT0gMykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2luZ2xldG9ucy5yZ2I7XG4gICAgICAgICAgfSBlbHNlIGlmIChudW1Db21wcyA9PT0gNCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2luZ2xldG9ucy5jbXlrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJQYXR0ZXJuXCI6XG4gICAgICAgICAgYmFzZUNTID0gY3NbMV0gfHwgbnVsbDtcblxuICAgICAgICAgIGlmIChiYXNlQ1MpIHtcbiAgICAgICAgICAgIGJhc2VDUyA9IHRoaXMuX3BhcnNlKGJhc2VDUywgeHJlZiwgcmVzb3VyY2VzLCBwZGZGdW5jdGlvbkZhY3RvcnkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBuZXcgUGF0dGVybkNTKGJhc2VDUyk7XG5cbiAgICAgICAgY2FzZSBcIklcIjpcbiAgICAgICAgY2FzZSBcIkluZGV4ZWRcIjpcbiAgICAgICAgICBiYXNlQ1MgPSB0aGlzLl9wYXJzZShjc1sxXSwgeHJlZiwgcmVzb3VyY2VzLCBwZGZGdW5jdGlvbkZhY3RvcnkpO1xuICAgICAgICAgIGNvbnN0IGhpVmFsID0geHJlZi5mZXRjaElmUmVmKGNzWzJdKSArIDE7XG4gICAgICAgICAgY29uc3QgbG9va3VwID0geHJlZi5mZXRjaElmUmVmKGNzWzNdKTtcbiAgICAgICAgICByZXR1cm4gbmV3IEluZGV4ZWRDUyhiYXNlQ1MsIGhpVmFsLCBsb29rdXApO1xuXG4gICAgICAgIGNhc2UgXCJTZXBhcmF0aW9uXCI6XG4gICAgICAgIGNhc2UgXCJEZXZpY2VOXCI6XG4gICAgICAgICAgY29uc3QgbmFtZSA9IHhyZWYuZmV0Y2hJZlJlZihjc1sxXSk7XG4gICAgICAgICAgbnVtQ29tcHMgPSBBcnJheS5pc0FycmF5KG5hbWUpID8gbmFtZS5sZW5ndGggOiAxO1xuICAgICAgICAgIGJhc2VDUyA9IHRoaXMuX3BhcnNlKGNzWzJdLCB4cmVmLCByZXNvdXJjZXMsIHBkZkZ1bmN0aW9uRmFjdG9yeSk7XG4gICAgICAgICAgY29uc3QgdGludEZuID0gcGRmRnVuY3Rpb25GYWN0b3J5LmNyZWF0ZShjc1szXSk7XG4gICAgICAgICAgcmV0dXJuIG5ldyBBbHRlcm5hdGVDUyhudW1Db21wcywgYmFzZUNTLCB0aW50Rm4pO1xuXG4gICAgICAgIGNhc2UgXCJMYWJcIjpcbiAgICAgICAgICBwYXJhbXMgPSB4cmVmLmZldGNoSWZSZWYoY3NbMV0pO1xuICAgICAgICAgIHdoaXRlUG9pbnQgPSBwYXJhbXMuZ2V0QXJyYXkoXCJXaGl0ZVBvaW50XCIpO1xuICAgICAgICAgIGJsYWNrUG9pbnQgPSBwYXJhbXMuZ2V0QXJyYXkoXCJCbGFja1BvaW50XCIpO1xuICAgICAgICAgIGNvbnN0IHJhbmdlID0gcGFyYW1zLmdldEFycmF5KFwiUmFuZ2VcIik7XG4gICAgICAgICAgcmV0dXJuIG5ldyBMYWJDUyh3aGl0ZVBvaW50LCBibGFja1BvaW50LCByYW5nZSk7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYFVuaW1wbGVtZW50ZWQgQ29sb3JTcGFjZSBvYmplY3Q6ICR7bW9kZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYFVucmVjb2duaXplZCBDb2xvclNwYWNlIG9iamVjdDogJHtjc31gKTtcbiAgfVxuXG4gIHN0YXRpYyBpc0RlZmF1bHREZWNvZGUoZGVjb2RlLCBudW1Db21wcykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShkZWNvZGUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobnVtQ29tcHMgKiAyICE9PSBkZWNvZGUubGVuZ3RoKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJUaGUgZGVjb2RlIG1hcCBpcyBub3QgdGhlIGNvcnJlY3QgbGVuZ3RoXCIpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gZGVjb2RlLmxlbmd0aDsgaSA8IGlpOyBpICs9IDIpIHtcbiAgICAgIGlmIChkZWNvZGVbaV0gIT09IDAgfHwgZGVjb2RlW2kgKyAxXSAhPT0gMSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNpbmdsZXRvbnMoKSB7XG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwic2luZ2xldG9uc1wiLCB7XG4gICAgICBnZXQgZ3JheSgpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiZ3JheVwiLCBuZXcgRGV2aWNlR3JheUNTKCkpO1xuICAgICAgfSxcblxuICAgICAgZ2V0IHJnYigpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwicmdiXCIsIG5ldyBEZXZpY2VSZ2JDUygpKTtcbiAgICAgIH0sXG5cbiAgICAgIGdldCBjbXlrKCkge1xuICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJjbXlrXCIsIG5ldyBEZXZpY2VDbXlrQ1MoKSk7XG4gICAgICB9XG5cbiAgICB9KTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuQ29sb3JTcGFjZSA9IENvbG9yU3BhY2U7XG5cbmNsYXNzIEFsdGVybmF0ZUNTIGV4dGVuZHMgQ29sb3JTcGFjZSB7XG4gIGNvbnN0cnVjdG9yKG51bUNvbXBzLCBiYXNlLCB0aW50Rm4pIHtcbiAgICBzdXBlcihcIkFsdGVybmF0ZVwiLCBudW1Db21wcyk7XG4gICAgdGhpcy5iYXNlID0gYmFzZTtcbiAgICB0aGlzLnRpbnRGbiA9IHRpbnRGbjtcbiAgICB0aGlzLnRtcEJ1ZiA9IG5ldyBGbG9hdDMyQXJyYXkoYmFzZS5udW1Db21wcyk7XG4gIH1cblxuICBnZXRSZ2JJdGVtKHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0KSB7XG4gICAgY29uc3QgdG1wQnVmID0gdGhpcy50bXBCdWY7XG4gICAgdGhpcy50aW50Rm4oc3JjLCBzcmNPZmZzZXQsIHRtcEJ1ZiwgMCk7XG4gICAgdGhpcy5iYXNlLmdldFJnYkl0ZW0odG1wQnVmLCAwLCBkZXN0LCBkZXN0T2Zmc2V0KTtcbiAgfVxuXG4gIGdldFJnYkJ1ZmZlcihzcmMsIHNyY09mZnNldCwgY291bnQsIGRlc3QsIGRlc3RPZmZzZXQsIGJpdHMsIGFscGhhMDEpIHtcbiAgICBjb25zdCB0aW50Rm4gPSB0aGlzLnRpbnRGbjtcbiAgICBjb25zdCBiYXNlID0gdGhpcy5iYXNlO1xuICAgIGNvbnN0IHNjYWxlID0gMSAvICgoMSA8PCBiaXRzKSAtIDEpO1xuICAgIGNvbnN0IGJhc2VOdW1Db21wcyA9IGJhc2UubnVtQ29tcHM7XG4gICAgY29uc3QgdXNlc1plcm9Ub09uZVJhbmdlID0gYmFzZS51c2VzWmVyb1RvT25lUmFuZ2U7XG4gICAgY29uc3QgaXNQYXNzdGhyb3VnaCA9IChiYXNlLmlzUGFzc3Rocm91Z2goOCkgfHwgIXVzZXNaZXJvVG9PbmVSYW5nZSkgJiYgYWxwaGEwMSA9PT0gMDtcbiAgICBsZXQgcG9zID0gaXNQYXNzdGhyb3VnaCA/IGRlc3RPZmZzZXQgOiAwO1xuICAgIGNvbnN0IGJhc2VCdWYgPSBpc1Bhc3N0aHJvdWdoID8gZGVzdCA6IG5ldyBVaW50OENsYW1wZWRBcnJheShiYXNlTnVtQ29tcHMgKiBjb3VudCk7XG4gICAgY29uc3QgbnVtQ29tcHMgPSB0aGlzLm51bUNvbXBzO1xuICAgIGNvbnN0IHNjYWxlZCA9IG5ldyBGbG9hdDMyQXJyYXkobnVtQ29tcHMpO1xuICAgIGNvbnN0IHRpbnRlZCA9IG5ldyBGbG9hdDMyQXJyYXkoYmFzZU51bUNvbXBzKTtcbiAgICBsZXQgaSwgajtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgbnVtQ29tcHM7IGorKykge1xuICAgICAgICBzY2FsZWRbal0gPSBzcmNbc3JjT2Zmc2V0KytdICogc2NhbGU7XG4gICAgICB9XG5cbiAgICAgIHRpbnRGbihzY2FsZWQsIDAsIHRpbnRlZCwgMCk7XG5cbiAgICAgIGlmICh1c2VzWmVyb1RvT25lUmFuZ2UpIHtcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IGJhc2VOdW1Db21wczsgaisrKSB7XG4gICAgICAgICAgYmFzZUJ1Zltwb3MrK10gPSB0aW50ZWRbal0gKiAyNTU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJhc2UuZ2V0UmdiSXRlbSh0aW50ZWQsIDAsIGJhc2VCdWYsIHBvcyk7XG4gICAgICAgIHBvcyArPSBiYXNlTnVtQ29tcHM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFpc1Bhc3N0aHJvdWdoKSB7XG4gICAgICBiYXNlLmdldFJnYkJ1ZmZlcihiYXNlQnVmLCAwLCBjb3VudCwgZGVzdCwgZGVzdE9mZnNldCwgOCwgYWxwaGEwMSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0T3V0cHV0TGVuZ3RoKGlucHV0TGVuZ3RoLCBhbHBoYTAxKSB7XG4gICAgcmV0dXJuIHRoaXMuYmFzZS5nZXRPdXRwdXRMZW5ndGgoaW5wdXRMZW5ndGggKiB0aGlzLmJhc2UubnVtQ29tcHMgLyB0aGlzLm51bUNvbXBzLCBhbHBoYTAxKTtcbiAgfVxuXG59XG5cbmNsYXNzIFBhdHRlcm5DUyBleHRlbmRzIENvbG9yU3BhY2Uge1xuICBjb25zdHJ1Y3RvcihiYXNlQ1MpIHtcbiAgICBzdXBlcihcIlBhdHRlcm5cIiwgbnVsbCk7XG4gICAgdGhpcy5iYXNlID0gYmFzZUNTO1xuICB9XG5cbiAgaXNEZWZhdWx0RGVjb2RlKGRlY29kZU1hcCwgYnBjKSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIlNob3VsZCBub3QgY2FsbCBQYXR0ZXJuQ1MuaXNEZWZhdWx0RGVjb2RlXCIpO1xuICB9XG5cbn1cblxuY2xhc3MgSW5kZXhlZENTIGV4dGVuZHMgQ29sb3JTcGFjZSB7XG4gIGNvbnN0cnVjdG9yKGJhc2UsIGhpZ2hWYWwsIGxvb2t1cCkge1xuICAgIHN1cGVyKFwiSW5kZXhlZFwiLCAxKTtcbiAgICB0aGlzLmJhc2UgPSBiYXNlO1xuICAgIHRoaXMuaGlnaFZhbCA9IGhpZ2hWYWw7XG4gICAgY29uc3QgbGVuZ3RoID0gYmFzZS5udW1Db21wcyAqIGhpZ2hWYWw7XG4gICAgdGhpcy5sb29rdXAgPSBuZXcgVWludDhBcnJheShsZW5ndGgpO1xuXG4gICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkobG9va3VwKSkge1xuICAgICAgY29uc3QgYnl0ZXMgPSBsb29rdXAuZ2V0Qnl0ZXMobGVuZ3RoKTtcbiAgICAgIHRoaXMubG9va3VwLnNldChieXRlcyk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbG9va3VwID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICAgIHRoaXMubG9va3VwW2ldID0gbG9va3VwLmNoYXJDb2RlQXQoaSkgJiAweGZmO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYEluZGV4ZWRDUyAtIHVucmVjb2duaXplZCBsb29rdXAgdGFibGU6ICR7bG9va3VwfWApO1xuICAgIH1cbiAgfVxuXG4gIGdldFJnYkl0ZW0oc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHtcbiAgICBjb25zdCBudW1Db21wcyA9IHRoaXMuYmFzZS5udW1Db21wcztcbiAgICBjb25zdCBzdGFydCA9IHNyY1tzcmNPZmZzZXRdICogbnVtQ29tcHM7XG4gICAgdGhpcy5iYXNlLmdldFJnYkJ1ZmZlcih0aGlzLmxvb2t1cCwgc3RhcnQsIDEsIGRlc3QsIGRlc3RPZmZzZXQsIDgsIDApO1xuICB9XG5cbiAgZ2V0UmdiQnVmZmVyKHNyYywgc3JjT2Zmc2V0LCBjb3VudCwgZGVzdCwgZGVzdE9mZnNldCwgYml0cywgYWxwaGEwMSkge1xuICAgIGNvbnN0IGJhc2UgPSB0aGlzLmJhc2U7XG4gICAgY29uc3QgbnVtQ29tcHMgPSBiYXNlLm51bUNvbXBzO1xuICAgIGNvbnN0IG91dHB1dERlbHRhID0gYmFzZS5nZXRPdXRwdXRMZW5ndGgobnVtQ29tcHMsIGFscGhhMDEpO1xuICAgIGNvbnN0IGxvb2t1cCA9IHRoaXMubG9va3VwO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7XG4gICAgICBjb25zdCBsb29rdXBQb3MgPSBzcmNbc3JjT2Zmc2V0KytdICogbnVtQ29tcHM7XG4gICAgICBiYXNlLmdldFJnYkJ1ZmZlcihsb29rdXAsIGxvb2t1cFBvcywgMSwgZGVzdCwgZGVzdE9mZnNldCwgOCwgYWxwaGEwMSk7XG4gICAgICBkZXN0T2Zmc2V0ICs9IG91dHB1dERlbHRhO1xuICAgIH1cbiAgfVxuXG4gIGdldE91dHB1dExlbmd0aChpbnB1dExlbmd0aCwgYWxwaGEwMSkge1xuICAgIHJldHVybiB0aGlzLmJhc2UuZ2V0T3V0cHV0TGVuZ3RoKGlucHV0TGVuZ3RoICogdGhpcy5iYXNlLm51bUNvbXBzLCBhbHBoYTAxKTtcbiAgfVxuXG4gIGlzRGVmYXVsdERlY29kZShkZWNvZGVNYXAsIGJwYykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShkZWNvZGVNYXApKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoZGVjb2RlTWFwLmxlbmd0aCAhPT0gMikge1xuICAgICAgKDAsIF91dGlsLndhcm4pKFwiRGVjb2RlIG1hcCBsZW5ndGggaXMgbm90IGNvcnJlY3RcIik7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoYnBjKSB8fCBicGMgPCAxKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJCaXRzIHBlciBjb21wb25lbnQgaXMgbm90IGNvcnJlY3RcIik7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVjb2RlTWFwWzBdID09PSAwICYmIGRlY29kZU1hcFsxXSA9PT0gKDEgPDwgYnBjKSAtIDE7XG4gIH1cblxufVxuXG5jbGFzcyBEZXZpY2VHcmF5Q1MgZXh0ZW5kcyBDb2xvclNwYWNlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJEZXZpY2VHcmF5XCIsIDEpO1xuICB9XG5cbiAgZ2V0UmdiSXRlbShzcmMsIHNyY09mZnNldCwgZGVzdCwgZGVzdE9mZnNldCkge1xuICAgIGNvbnN0IGMgPSBzcmNbc3JjT2Zmc2V0XSAqIDI1NTtcbiAgICBkZXN0W2Rlc3RPZmZzZXRdID0gZGVzdFtkZXN0T2Zmc2V0ICsgMV0gPSBkZXN0W2Rlc3RPZmZzZXQgKyAyXSA9IGM7XG4gIH1cblxuICBnZXRSZ2JCdWZmZXIoc3JjLCBzcmNPZmZzZXQsIGNvdW50LCBkZXN0LCBkZXN0T2Zmc2V0LCBiaXRzLCBhbHBoYTAxKSB7XG4gICAgY29uc3Qgc2NhbGUgPSAyNTUgLyAoKDEgPDwgYml0cykgLSAxKTtcbiAgICBsZXQgaiA9IHNyY09mZnNldCxcbiAgICAgICAgcSA9IGRlc3RPZmZzZXQ7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHtcbiAgICAgIGNvbnN0IGMgPSBzY2FsZSAqIHNyY1tqKytdO1xuICAgICAgZGVzdFtxKytdID0gYztcbiAgICAgIGRlc3RbcSsrXSA9IGM7XG4gICAgICBkZXN0W3ErK10gPSBjO1xuICAgICAgcSArPSBhbHBoYTAxO1xuICAgIH1cbiAgfVxuXG4gIGdldE91dHB1dExlbmd0aChpbnB1dExlbmd0aCwgYWxwaGEwMSkge1xuICAgIHJldHVybiBpbnB1dExlbmd0aCAqICgzICsgYWxwaGEwMSk7XG4gIH1cblxufVxuXG5jbGFzcyBEZXZpY2VSZ2JDUyBleHRlbmRzIENvbG9yU3BhY2Uge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIkRldmljZVJHQlwiLCAzKTtcbiAgfVxuXG4gIGdldFJnYkl0ZW0oc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHtcbiAgICBkZXN0W2Rlc3RPZmZzZXRdID0gc3JjW3NyY09mZnNldF0gKiAyNTU7XG4gICAgZGVzdFtkZXN0T2Zmc2V0ICsgMV0gPSBzcmNbc3JjT2Zmc2V0ICsgMV0gKiAyNTU7XG4gICAgZGVzdFtkZXN0T2Zmc2V0ICsgMl0gPSBzcmNbc3JjT2Zmc2V0ICsgMl0gKiAyNTU7XG4gIH1cblxuICBnZXRSZ2JCdWZmZXIoc3JjLCBzcmNPZmZzZXQsIGNvdW50LCBkZXN0LCBkZXN0T2Zmc2V0LCBiaXRzLCBhbHBoYTAxKSB7XG4gICAgaWYgKGJpdHMgPT09IDggJiYgYWxwaGEwMSA9PT0gMCkge1xuICAgICAgZGVzdC5zZXQoc3JjLnN1YmFycmF5KHNyY09mZnNldCwgc3JjT2Zmc2V0ICsgY291bnQgKiAzKSwgZGVzdE9mZnNldCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2NhbGUgPSAyNTUgLyAoKDEgPDwgYml0cykgLSAxKTtcbiAgICBsZXQgaiA9IHNyY09mZnNldCxcbiAgICAgICAgcSA9IGRlc3RPZmZzZXQ7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHtcbiAgICAgIGRlc3RbcSsrXSA9IHNjYWxlICogc3JjW2orK107XG4gICAgICBkZXN0W3ErK10gPSBzY2FsZSAqIHNyY1tqKytdO1xuICAgICAgZGVzdFtxKytdID0gc2NhbGUgKiBzcmNbaisrXTtcbiAgICAgIHEgKz0gYWxwaGEwMTtcbiAgICB9XG4gIH1cblxuICBnZXRPdXRwdXRMZW5ndGgoaW5wdXRMZW5ndGgsIGFscGhhMDEpIHtcbiAgICByZXR1cm4gaW5wdXRMZW5ndGggKiAoMyArIGFscGhhMDEpIC8gMyB8IDA7XG4gIH1cblxuICBpc1Bhc3N0aHJvdWdoKGJpdHMpIHtcbiAgICByZXR1cm4gYml0cyA9PT0gODtcbiAgfVxuXG59XG5cbmNvbnN0IERldmljZUNteWtDUyA9IGZ1bmN0aW9uIERldmljZUNteWtDU0Nsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIGNvbnZlcnRUb1JnYihzcmMsIHNyY09mZnNldCwgc3JjU2NhbGUsIGRlc3QsIGRlc3RPZmZzZXQpIHtcbiAgICBjb25zdCBjID0gc3JjW3NyY09mZnNldF0gKiBzcmNTY2FsZTtcbiAgICBjb25zdCBtID0gc3JjW3NyY09mZnNldCArIDFdICogc3JjU2NhbGU7XG4gICAgY29uc3QgeSA9IHNyY1tzcmNPZmZzZXQgKyAyXSAqIHNyY1NjYWxlO1xuICAgIGNvbnN0IGsgPSBzcmNbc3JjT2Zmc2V0ICsgM10gKiBzcmNTY2FsZTtcbiAgICBkZXN0W2Rlc3RPZmZzZXRdID0gMjU1ICsgYyAqICgtNC4zODczMzIzODQ2MDk5ODggKiBjICsgNTQuNDg2MTUxOTQxODkxNzYgKiBtICsgMTguODIyOTA1MDIxNjUzMDIgKiB5ICsgMjEyLjI1NjYyNDUxNjM5NTg1ICogayArIC0yODUuMjMzMTAyNjEzNzAwNCkgKyBtICogKDEuNzE0OTc2MzQ3NzM2MjEzNCAqIG0gLSA1LjYwOTY3MzY5MDQwNDczMTUgKiB5ICsgLTE3Ljg3Mzg3MDg2MTQxNTQ0NCAqIGsgLSA1LjQ5NzAwNjQyNzE5NjM2NikgKyB5ICogKC0yLjUyMTczNDAxMzE2ODMwMzMgKiB5IC0gMjEuMjQ4OTIzMzM3MzUzMDczICogayArIDE3LjUxMTkyNzA4NDE4MTMpICsgayAqICgtMjEuODYxMjIxNDc0NjM2MDUgKiBrIC0gMTg5LjQ4MTgwODM1OTIyNzQ3KTtcbiAgICBkZXN0W2Rlc3RPZmZzZXQgKyAxXSA9IDI1NSArIGMgKiAoOC44NDEwNDE0MjIwMzYxNDkgKiBjICsgNjAuMTE4MDI3MDQ1NTk3MzY2ICogbSArIDYuODcxNDI1NTkyMDQ5MDA3ICogeSArIDMxLjE1OTEwMDEzMDA1NTkyMiAqIGsgKyAtNzkuMjk3MDg0NDgxNjU0OCkgKyBtICogKC0xNS4zMTAzNjEzMDY5Njc4MTcgKiBtICsgMTcuNTc1MjUxMjYxMTA5NDgyICogeSArIDEzMS4zNTI1MDkxMjQ5Mzk3NiAqIGsgLSAxOTAuOTQ1MzMwMjU4ODk1MSkgKyB5ICogKDQuNDQ0MzM5MTAyODUyNzM5ICogeSArIDkuODYzMjg2MTQ5MzQwNSAqIGsgLSAyNC44Njc0MTU4MjU1NTg3OCkgKyBrICogKC0yMC43MzczMjU0NzExODEwMzQgKiBrIC0gMTg3LjgwNDUzNzA5NzE5NTc4KTtcbiAgICBkZXN0W2Rlc3RPZmZzZXQgKyAyXSA9IDI1NSArIGMgKiAoMC44ODQyNTIyNDMwMDAzMjk2ICogYyArIDguMDc4Njc3NTAzMTEyOTI4ICogbSArIDMwLjg5OTc4MzA5NzAzNzI5ICogeSAtIDAuMjM4ODMyMzg2ODkxNzg5MzQgKiBrICsgLTE0LjE4MzU3Njc5OTY3MzI4NikgKyBtICogKDEwLjQ5NTkzMjczNDMyMDcyICogbSArIDYzLjAyMzc4NDk0NzU0MDUyICogeSArIDUwLjYwNjk1NzY1NjM2MDczNCAqIGsgLSAxMTIuMjM4ODQyNTM3MTkyNDgpICsgeSAqICgwLjAzMjk2MDQxMTE0ODczMjE3ICogeSArIDExNS42MDM4NDQ0OTY0NjY0MSAqIGsgKyAtMTkzLjU4MjA5MzU2ODYxNTA1KSArIGsgKiAoLTIyLjMzODE2ODA3MzA5ODg2ICogayAtIDE4MC4xMjYxMzk3NDcwODM2Nyk7XG4gIH1cblxuICBjbGFzcyBEZXZpY2VDbXlrQ1MgZXh0ZW5kcyBDb2xvclNwYWNlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgIHN1cGVyKFwiRGV2aWNlQ01ZS1wiLCA0KTtcbiAgICB9XG5cbiAgICBnZXRSZ2JJdGVtKHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0KSB7XG4gICAgICBjb252ZXJ0VG9SZ2Ioc3JjLCBzcmNPZmZzZXQsIDEsIGRlc3QsIGRlc3RPZmZzZXQpO1xuICAgIH1cblxuICAgIGdldFJnYkJ1ZmZlcihzcmMsIHNyY09mZnNldCwgY291bnQsIGRlc3QsIGRlc3RPZmZzZXQsIGJpdHMsIGFscGhhMDEpIHtcbiAgICAgIGNvbnN0IHNjYWxlID0gMSAvICgoMSA8PCBiaXRzKSAtIDEpO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgY29udmVydFRvUmdiKHNyYywgc3JjT2Zmc2V0LCBzY2FsZSwgZGVzdCwgZGVzdE9mZnNldCk7XG4gICAgICAgIHNyY09mZnNldCArPSA0O1xuICAgICAgICBkZXN0T2Zmc2V0ICs9IDMgKyBhbHBoYTAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIGdldE91dHB1dExlbmd0aChpbnB1dExlbmd0aCwgYWxwaGEwMSkge1xuICAgICAgcmV0dXJuIGlucHV0TGVuZ3RoIC8gNCAqICgzICsgYWxwaGEwMSkgfCAwO1xuICAgIH1cblxuICB9XG5cbiAgcmV0dXJuIERldmljZUNteWtDUztcbn0oKTtcblxuY29uc3QgQ2FsR3JheUNTID0gZnVuY3Rpb24gQ2FsR3JheUNTQ2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gY29udmVydFRvUmdiKGNzLCBzcmMsIHNyY09mZnNldCwgZGVzdCwgZGVzdE9mZnNldCwgc2NhbGUpIHtcbiAgICBjb25zdCBBID0gc3JjW3NyY09mZnNldF0gKiBzY2FsZTtcbiAgICBjb25zdCBBRyA9IEEgKiogY3MuRztcbiAgICBjb25zdCBMID0gY3MuWVcgKiBBRztcbiAgICBjb25zdCB2YWwgPSBNYXRoLm1heCgyOTUuOCAqIEwgKiogMC4zMzMzMzMzMzMzMzMzMzMzIC0gNDAuOCwgMCk7XG4gICAgZGVzdFtkZXN0T2Zmc2V0XSA9IHZhbDtcbiAgICBkZXN0W2Rlc3RPZmZzZXQgKyAxXSA9IHZhbDtcbiAgICBkZXN0W2Rlc3RPZmZzZXQgKyAyXSA9IHZhbDtcbiAgfVxuXG4gIGNsYXNzIENhbEdyYXlDUyBleHRlbmRzIENvbG9yU3BhY2Uge1xuICAgIGNvbnN0cnVjdG9yKHdoaXRlUG9pbnQsIGJsYWNrUG9pbnQsIGdhbW1hKSB7XG4gICAgICBzdXBlcihcIkNhbEdyYXlcIiwgMSk7XG5cbiAgICAgIGlmICghd2hpdGVQb2ludCkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJXaGl0ZVBvaW50IG1pc3NpbmcgLSByZXF1aXJlZCBmb3IgY29sb3Igc3BhY2UgQ2FsR3JheVwiKTtcbiAgICAgIH1cblxuICAgICAgYmxhY2tQb2ludCA9IGJsYWNrUG9pbnQgfHwgWzAsIDAsIDBdO1xuICAgICAgZ2FtbWEgPSBnYW1tYSB8fCAxO1xuICAgICAgdGhpcy5YVyA9IHdoaXRlUG9pbnRbMF07XG4gICAgICB0aGlzLllXID0gd2hpdGVQb2ludFsxXTtcbiAgICAgIHRoaXMuWlcgPSB3aGl0ZVBvaW50WzJdO1xuICAgICAgdGhpcy5YQiA9IGJsYWNrUG9pbnRbMF07XG4gICAgICB0aGlzLllCID0gYmxhY2tQb2ludFsxXTtcbiAgICAgIHRoaXMuWkIgPSBibGFja1BvaW50WzJdO1xuICAgICAgdGhpcy5HID0gZ2FtbWE7XG5cbiAgICAgIGlmICh0aGlzLlhXIDwgMCB8fCB0aGlzLlpXIDwgMCB8fCB0aGlzLllXICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgSW52YWxpZCBXaGl0ZVBvaW50IGNvbXBvbmVudHMgZm9yICR7dGhpcy5uYW1lfWAgKyBcIiwgbm8gZmFsbGJhY2sgYXZhaWxhYmxlXCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5YQiA8IDAgfHwgdGhpcy5ZQiA8IDAgfHwgdGhpcy5aQiA8IDApIHtcbiAgICAgICAgKDAsIF91dGlsLmluZm8pKGBJbnZhbGlkIEJsYWNrUG9pbnQgZm9yICR7dGhpcy5uYW1lfSwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQuYCk7XG4gICAgICAgIHRoaXMuWEIgPSB0aGlzLllCID0gdGhpcy5aQiA9IDA7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLlhCICE9PSAwIHx8IHRoaXMuWUIgIT09IDAgfHwgdGhpcy5aQiAhPT0gMCkge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoYCR7dGhpcy5uYW1lfSwgQmxhY2tQb2ludDogWEI6ICR7dGhpcy5YQn0sIFlCOiAke3RoaXMuWUJ9LCBgICsgYFpCOiAke3RoaXMuWkJ9LCBvbmx5IGRlZmF1bHQgdmFsdWVzIGFyZSBzdXBwb3J0ZWQuYCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLkcgPCAxKSB7XG4gICAgICAgICgwLCBfdXRpbC5pbmZvKShgSW52YWxpZCBHYW1tYTogJHt0aGlzLkd9IGZvciAke3RoaXMubmFtZX0sIGAgKyBcImZhbGxpbmcgYmFjayB0byBkZWZhdWx0LlwiKTtcbiAgICAgICAgdGhpcy5HID0gMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRSZ2JJdGVtKHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0KSB7XG4gICAgICBjb252ZXJ0VG9SZ2IodGhpcywgc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQsIDEpO1xuICAgIH1cblxuICAgIGdldFJnYkJ1ZmZlcihzcmMsIHNyY09mZnNldCwgY291bnQsIGRlc3QsIGRlc3RPZmZzZXQsIGJpdHMsIGFscGhhMDEpIHtcbiAgICAgIGNvbnN0IHNjYWxlID0gMSAvICgoMSA8PCBiaXRzKSAtIDEpO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHtcbiAgICAgICAgY29udmVydFRvUmdiKHRoaXMsIHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0LCBzY2FsZSk7XG4gICAgICAgIHNyY09mZnNldCArPSAxO1xuICAgICAgICBkZXN0T2Zmc2V0ICs9IDMgKyBhbHBoYTAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIGdldE91dHB1dExlbmd0aChpbnB1dExlbmd0aCwgYWxwaGEwMSkge1xuICAgICAgcmV0dXJuIGlucHV0TGVuZ3RoICogKDMgKyBhbHBoYTAxKTtcbiAgICB9XG5cbiAgfVxuXG4gIHJldHVybiBDYWxHcmF5Q1M7XG59KCk7XG5cbmNvbnN0IENhbFJHQkNTID0gZnVuY3Rpb24gQ2FsUkdCQ1NDbG9zdXJlKCkge1xuICBjb25zdCBCUkFERk9SRF9TQ0FMRV9NQVRSSVggPSBuZXcgRmxvYXQzMkFycmF5KFswLjg5NTEsIDAuMjY2NCwgLTAuMTYxNCwgLTAuNzUwMiwgMS43MTM1LCAwLjAzNjcsIDAuMDM4OSwgLTAuMDY4NSwgMS4wMjk2XSk7XG4gIGNvbnN0IEJSQURGT1JEX1NDQUxFX0lOVkVSU0VfTUFUUklYID0gbmV3IEZsb2F0MzJBcnJheShbMC45ODY5OTI5LCAtMC4xNDcwNTQzLCAwLjE1OTk2MjcsIDAuNDMyMzA1MywgMC41MTgzNjAzLCAwLjA0OTI5MTIsIC0wLjAwODUyODcsIDAuMDQwMDQyOCwgMC45Njg0ODY3XSk7XG4gIGNvbnN0IFNSR0JfRDY1X1hZWl9UT19SR0JfTUFUUklYID0gbmV3IEZsb2F0MzJBcnJheShbMy4yNDA0NTQyLCAtMS41MzcxMzg1LCAtMC40OTg1MzE0LCAtMC45NjkyNjYwLCAxLjg3NjAxMDgsIDAuMDQxNTU2MCwgMC4wNTU2NDM0LCAtMC4yMDQwMjU5LCAxLjA1NzIyNTJdKTtcbiAgY29uc3QgRkxBVF9XSElURVBPSU5UX01BVFJJWCA9IG5ldyBGbG9hdDMyQXJyYXkoWzEsIDEsIDFdKTtcbiAgY29uc3QgdGVtcE5vcm1hbGl6ZU1hdHJpeCA9IG5ldyBGbG9hdDMyQXJyYXkoMyk7XG4gIGNvbnN0IHRlbXBDb252ZXJ0TWF0cml4MSA9IG5ldyBGbG9hdDMyQXJyYXkoMyk7XG4gIGNvbnN0IHRlbXBDb252ZXJ0TWF0cml4MiA9IG5ldyBGbG9hdDMyQXJyYXkoMyk7XG4gIGNvbnN0IERFQ09ERV9MX0NPTlNUQU5UID0gKCg4ICsgMTYpIC8gMTE2KSAqKiAzIC8gOC4wO1xuXG4gIGZ1bmN0aW9uIG1hdHJpeFByb2R1Y3QoYSwgYiwgcmVzdWx0KSB7XG4gICAgcmVzdWx0WzBdID0gYVswXSAqIGJbMF0gKyBhWzFdICogYlsxXSArIGFbMl0gKiBiWzJdO1xuICAgIHJlc3VsdFsxXSA9IGFbM10gKiBiWzBdICsgYVs0XSAqIGJbMV0gKyBhWzVdICogYlsyXTtcbiAgICByZXN1bHRbMl0gPSBhWzZdICogYlswXSArIGFbN10gKiBiWzFdICsgYVs4XSAqIGJbMl07XG4gIH1cblxuICBmdW5jdGlvbiBjb252ZXJ0VG9GbGF0KHNvdXJjZVdoaXRlUG9pbnQsIExNUywgcmVzdWx0KSB7XG4gICAgcmVzdWx0WzBdID0gTE1TWzBdICogMSAvIHNvdXJjZVdoaXRlUG9pbnRbMF07XG4gICAgcmVzdWx0WzFdID0gTE1TWzFdICogMSAvIHNvdXJjZVdoaXRlUG9pbnRbMV07XG4gICAgcmVzdWx0WzJdID0gTE1TWzJdICogMSAvIHNvdXJjZVdoaXRlUG9pbnRbMl07XG4gIH1cblxuICBmdW5jdGlvbiBjb252ZXJ0VG9ENjUoc291cmNlV2hpdGVQb2ludCwgTE1TLCByZXN1bHQpIHtcbiAgICBjb25zdCBENjVYID0gMC45NTA0NztcbiAgICBjb25zdCBENjVZID0gMTtcbiAgICBjb25zdCBENjVaID0gMS4wODg4MztcbiAgICByZXN1bHRbMF0gPSBMTVNbMF0gKiBENjVYIC8gc291cmNlV2hpdGVQb2ludFswXTtcbiAgICByZXN1bHRbMV0gPSBMTVNbMV0gKiBENjVZIC8gc291cmNlV2hpdGVQb2ludFsxXTtcbiAgICByZXN1bHRbMl0gPSBMTVNbMl0gKiBENjVaIC8gc291cmNlV2hpdGVQb2ludFsyXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNSR0JUcmFuc2ZlckZ1bmN0aW9uKGNvbG9yKSB7XG4gICAgaWYgKGNvbG9yIDw9IDAuMDAzMTMwOCkge1xuICAgICAgcmV0dXJuIGFkanVzdFRvUmFuZ2UoMCwgMSwgMTIuOTIgKiBjb2xvcik7XG4gICAgfVxuXG4gICAgaWYgKGNvbG9yID49IDAuOTk1NTQ1MjUpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIHJldHVybiBhZGp1c3RUb1JhbmdlKDAsIDEsICgxICsgMC4wNTUpICogY29sb3IgKiogKDEgLyAyLjQpIC0gMC4wNTUpO1xuICB9XG5cbiAgZnVuY3Rpb24gYWRqdXN0VG9SYW5nZShtaW4sIG1heCwgdmFsdWUpIHtcbiAgICByZXR1cm4gTWF0aC5tYXgobWluLCBNYXRoLm1pbihtYXgsIHZhbHVlKSk7XG4gIH1cblxuICBmdW5jdGlvbiBkZWNvZGVMKEwpIHtcbiAgICBpZiAoTCA8IDApIHtcbiAgICAgIHJldHVybiAtZGVjb2RlTCgtTCk7XG4gICAgfVxuXG4gICAgaWYgKEwgPiA4LjApIHtcbiAgICAgIHJldHVybiAoKEwgKyAxNikgLyAxMTYpICoqIDM7XG4gICAgfVxuXG4gICAgcmV0dXJuIEwgKiBERUNPREVfTF9DT05TVEFOVDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbXBlbnNhdGVCbGFja1BvaW50KHNvdXJjZUJsYWNrUG9pbnQsIFhZWl9GbGF0LCByZXN1bHQpIHtcbiAgICBpZiAoc291cmNlQmxhY2tQb2ludFswXSA9PT0gMCAmJiBzb3VyY2VCbGFja1BvaW50WzFdID09PSAwICYmIHNvdXJjZUJsYWNrUG9pbnRbMl0gPT09IDApIHtcbiAgICAgIHJlc3VsdFswXSA9IFhZWl9GbGF0WzBdO1xuICAgICAgcmVzdWx0WzFdID0gWFlaX0ZsYXRbMV07XG4gICAgICByZXN1bHRbMl0gPSBYWVpfRmxhdFsyXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB6ZXJvRGVjb2RlTCA9IGRlY29kZUwoMCk7XG4gICAgY29uc3QgWF9EU1QgPSB6ZXJvRGVjb2RlTDtcbiAgICBjb25zdCBYX1NSQyA9IGRlY29kZUwoc291cmNlQmxhY2tQb2ludFswXSk7XG4gICAgY29uc3QgWV9EU1QgPSB6ZXJvRGVjb2RlTDtcbiAgICBjb25zdCBZX1NSQyA9IGRlY29kZUwoc291cmNlQmxhY2tQb2ludFsxXSk7XG4gICAgY29uc3QgWl9EU1QgPSB6ZXJvRGVjb2RlTDtcbiAgICBjb25zdCBaX1NSQyA9IGRlY29kZUwoc291cmNlQmxhY2tQb2ludFsyXSk7XG4gICAgY29uc3QgWF9TY2FsZSA9ICgxIC0gWF9EU1QpIC8gKDEgLSBYX1NSQyk7XG4gICAgY29uc3QgWF9PZmZzZXQgPSAxIC0gWF9TY2FsZTtcbiAgICBjb25zdCBZX1NjYWxlID0gKDEgLSBZX0RTVCkgLyAoMSAtIFlfU1JDKTtcbiAgICBjb25zdCBZX09mZnNldCA9IDEgLSBZX1NjYWxlO1xuICAgIGNvbnN0IFpfU2NhbGUgPSAoMSAtIFpfRFNUKSAvICgxIC0gWl9TUkMpO1xuICAgIGNvbnN0IFpfT2Zmc2V0ID0gMSAtIFpfU2NhbGU7XG4gICAgcmVzdWx0WzBdID0gWFlaX0ZsYXRbMF0gKiBYX1NjYWxlICsgWF9PZmZzZXQ7XG4gICAgcmVzdWx0WzFdID0gWFlaX0ZsYXRbMV0gKiBZX1NjYWxlICsgWV9PZmZzZXQ7XG4gICAgcmVzdWx0WzJdID0gWFlaX0ZsYXRbMl0gKiBaX1NjYWxlICsgWl9PZmZzZXQ7XG4gIH1cblxuICBmdW5jdGlvbiBub3JtYWxpemVXaGl0ZVBvaW50VG9GbGF0KHNvdXJjZVdoaXRlUG9pbnQsIFhZWl9JbiwgcmVzdWx0KSB7XG4gICAgaWYgKHNvdXJjZVdoaXRlUG9pbnRbMF0gPT09IDEgJiYgc291cmNlV2hpdGVQb2ludFsyXSA9PT0gMSkge1xuICAgICAgcmVzdWx0WzBdID0gWFlaX0luWzBdO1xuICAgICAgcmVzdWx0WzFdID0gWFlaX0luWzFdO1xuICAgICAgcmVzdWx0WzJdID0gWFlaX0luWzJdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IExNUyA9IHJlc3VsdDtcbiAgICBtYXRyaXhQcm9kdWN0KEJSQURGT1JEX1NDQUxFX01BVFJJWCwgWFlaX0luLCBMTVMpO1xuICAgIGNvbnN0IExNU19GbGF0ID0gdGVtcE5vcm1hbGl6ZU1hdHJpeDtcbiAgICBjb252ZXJ0VG9GbGF0KHNvdXJjZVdoaXRlUG9pbnQsIExNUywgTE1TX0ZsYXQpO1xuICAgIG1hdHJpeFByb2R1Y3QoQlJBREZPUkRfU0NBTEVfSU5WRVJTRV9NQVRSSVgsIExNU19GbGF0LCByZXN1bHQpO1xuICB9XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplV2hpdGVQb2ludFRvRDY1KHNvdXJjZVdoaXRlUG9pbnQsIFhZWl9JbiwgcmVzdWx0KSB7XG4gICAgY29uc3QgTE1TID0gcmVzdWx0O1xuICAgIG1hdHJpeFByb2R1Y3QoQlJBREZPUkRfU0NBTEVfTUFUUklYLCBYWVpfSW4sIExNUyk7XG4gICAgY29uc3QgTE1TX0Q2NSA9IHRlbXBOb3JtYWxpemVNYXRyaXg7XG4gICAgY29udmVydFRvRDY1KHNvdXJjZVdoaXRlUG9pbnQsIExNUywgTE1TX0Q2NSk7XG4gICAgbWF0cml4UHJvZHVjdChCUkFERk9SRF9TQ0FMRV9JTlZFUlNFX01BVFJJWCwgTE1TX0Q2NSwgcmVzdWx0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnZlcnRUb1JnYihjcywgc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQsIHNjYWxlKSB7XG4gICAgY29uc3QgQSA9IGFkanVzdFRvUmFuZ2UoMCwgMSwgc3JjW3NyY09mZnNldF0gKiBzY2FsZSk7XG4gICAgY29uc3QgQiA9IGFkanVzdFRvUmFuZ2UoMCwgMSwgc3JjW3NyY09mZnNldCArIDFdICogc2NhbGUpO1xuICAgIGNvbnN0IEMgPSBhZGp1c3RUb1JhbmdlKDAsIDEsIHNyY1tzcmNPZmZzZXQgKyAyXSAqIHNjYWxlKTtcbiAgICBjb25zdCBBR1IgPSBBID09PSAxID8gMSA6IEEgKiogY3MuR1I7XG4gICAgY29uc3QgQkdHID0gQiA9PT0gMSA/IDEgOiBCICoqIGNzLkdHO1xuICAgIGNvbnN0IENHQiA9IEMgPT09IDEgPyAxIDogQyAqKiBjcy5HQjtcbiAgICBjb25zdCBYID0gY3MuTVhBICogQUdSICsgY3MuTVhCICogQkdHICsgY3MuTVhDICogQ0dCO1xuICAgIGNvbnN0IFkgPSBjcy5NWUEgKiBBR1IgKyBjcy5NWUIgKiBCR0cgKyBjcy5NWUMgKiBDR0I7XG4gICAgY29uc3QgWiA9IGNzLk1aQSAqIEFHUiArIGNzLk1aQiAqIEJHRyArIGNzLk1aQyAqIENHQjtcbiAgICBjb25zdCBYWVogPSB0ZW1wQ29udmVydE1hdHJpeDE7XG4gICAgWFlaWzBdID0gWDtcbiAgICBYWVpbMV0gPSBZO1xuICAgIFhZWlsyXSA9IFo7XG4gICAgY29uc3QgWFlaX0ZsYXQgPSB0ZW1wQ29udmVydE1hdHJpeDI7XG4gICAgbm9ybWFsaXplV2hpdGVQb2ludFRvRmxhdChjcy53aGl0ZVBvaW50LCBYWVosIFhZWl9GbGF0KTtcbiAgICBjb25zdCBYWVpfQmxhY2sgPSB0ZW1wQ29udmVydE1hdHJpeDE7XG4gICAgY29tcGVuc2F0ZUJsYWNrUG9pbnQoY3MuYmxhY2tQb2ludCwgWFlaX0ZsYXQsIFhZWl9CbGFjayk7XG4gICAgY29uc3QgWFlaX0Q2NSA9IHRlbXBDb252ZXJ0TWF0cml4MjtcbiAgICBub3JtYWxpemVXaGl0ZVBvaW50VG9ENjUoRkxBVF9XSElURVBPSU5UX01BVFJJWCwgWFlaX0JsYWNrLCBYWVpfRDY1KTtcbiAgICBjb25zdCBTUkdCID0gdGVtcENvbnZlcnRNYXRyaXgxO1xuICAgIG1hdHJpeFByb2R1Y3QoU1JHQl9ENjVfWFlaX1RPX1JHQl9NQVRSSVgsIFhZWl9ENjUsIFNSR0IpO1xuICAgIGRlc3RbZGVzdE9mZnNldF0gPSBzUkdCVHJhbnNmZXJGdW5jdGlvbihTUkdCWzBdKSAqIDI1NTtcbiAgICBkZXN0W2Rlc3RPZmZzZXQgKyAxXSA9IHNSR0JUcmFuc2ZlckZ1bmN0aW9uKFNSR0JbMV0pICogMjU1O1xuICAgIGRlc3RbZGVzdE9mZnNldCArIDJdID0gc1JHQlRyYW5zZmVyRnVuY3Rpb24oU1JHQlsyXSkgKiAyNTU7XG4gIH1cblxuICBjbGFzcyBDYWxSR0JDUyBleHRlbmRzIENvbG9yU3BhY2Uge1xuICAgIGNvbnN0cnVjdG9yKHdoaXRlUG9pbnQsIGJsYWNrUG9pbnQsIGdhbW1hLCBtYXRyaXgpIHtcbiAgICAgIHN1cGVyKFwiQ2FsUkdCXCIsIDMpO1xuXG4gICAgICBpZiAoIXdoaXRlUG9pbnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiV2hpdGVQb2ludCBtaXNzaW5nIC0gcmVxdWlyZWQgZm9yIGNvbG9yIHNwYWNlIENhbFJHQlwiKTtcbiAgICAgIH1cblxuICAgICAgYmxhY2tQb2ludCA9IGJsYWNrUG9pbnQgfHwgbmV3IEZsb2F0MzJBcnJheSgzKTtcbiAgICAgIGdhbW1hID0gZ2FtbWEgfHwgbmV3IEZsb2F0MzJBcnJheShbMSwgMSwgMV0pO1xuICAgICAgbWF0cml4ID0gbWF0cml4IHx8IG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDFdKTtcbiAgICAgIGNvbnN0IFhXID0gd2hpdGVQb2ludFswXTtcbiAgICAgIGNvbnN0IFlXID0gd2hpdGVQb2ludFsxXTtcbiAgICAgIGNvbnN0IFpXID0gd2hpdGVQb2ludFsyXTtcbiAgICAgIHRoaXMud2hpdGVQb2ludCA9IHdoaXRlUG9pbnQ7XG4gICAgICBjb25zdCBYQiA9IGJsYWNrUG9pbnRbMF07XG4gICAgICBjb25zdCBZQiA9IGJsYWNrUG9pbnRbMV07XG4gICAgICBjb25zdCBaQiA9IGJsYWNrUG9pbnRbMl07XG4gICAgICB0aGlzLmJsYWNrUG9pbnQgPSBibGFja1BvaW50O1xuICAgICAgdGhpcy5HUiA9IGdhbW1hWzBdO1xuICAgICAgdGhpcy5HRyA9IGdhbW1hWzFdO1xuICAgICAgdGhpcy5HQiA9IGdhbW1hWzJdO1xuICAgICAgdGhpcy5NWEEgPSBtYXRyaXhbMF07XG4gICAgICB0aGlzLk1ZQSA9IG1hdHJpeFsxXTtcbiAgICAgIHRoaXMuTVpBID0gbWF0cml4WzJdO1xuICAgICAgdGhpcy5NWEIgPSBtYXRyaXhbM107XG4gICAgICB0aGlzLk1ZQiA9IG1hdHJpeFs0XTtcbiAgICAgIHRoaXMuTVpCID0gbWF0cml4WzVdO1xuICAgICAgdGhpcy5NWEMgPSBtYXRyaXhbNl07XG4gICAgICB0aGlzLk1ZQyA9IG1hdHJpeFs3XTtcbiAgICAgIHRoaXMuTVpDID0gbWF0cml4WzhdO1xuXG4gICAgICBpZiAoWFcgPCAwIHx8IFpXIDwgMCB8fCBZVyAhPT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYEludmFsaWQgV2hpdGVQb2ludCBjb21wb25lbnRzIGZvciAke3RoaXMubmFtZX1gICsgXCIsIG5vIGZhbGxiYWNrIGF2YWlsYWJsZVwiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKFhCIDwgMCB8fCBZQiA8IDAgfHwgWkIgPCAwKSB7XG4gICAgICAgICgwLCBfdXRpbC5pbmZvKShgSW52YWxpZCBCbGFja1BvaW50IGZvciAke3RoaXMubmFtZX0gWyR7WEJ9LCAke1lCfSwgJHtaQn1dLCBgICsgXCJmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdC5cIik7XG4gICAgICAgIHRoaXMuYmxhY2tQb2ludCA9IG5ldyBGbG9hdDMyQXJyYXkoMyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLkdSIDwgMCB8fCB0aGlzLkdHIDwgMCB8fCB0aGlzLkdCIDwgMCkge1xuICAgICAgICAoMCwgX3V0aWwuaW5mbykoYEludmFsaWQgR2FtbWEgWyR7dGhpcy5HUn0sICR7dGhpcy5HR30sICR7dGhpcy5HQn1dIGZvciBgICsgYCR7dGhpcy5uYW1lfSwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQuYCk7XG4gICAgICAgIHRoaXMuR1IgPSB0aGlzLkdHID0gdGhpcy5HQiA9IDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZ2V0UmdiSXRlbShzcmMsIHNyY09mZnNldCwgZGVzdCwgZGVzdE9mZnNldCkge1xuICAgICAgY29udmVydFRvUmdiKHRoaXMsIHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0LCAxKTtcbiAgICB9XG5cbiAgICBnZXRSZ2JCdWZmZXIoc3JjLCBzcmNPZmZzZXQsIGNvdW50LCBkZXN0LCBkZXN0T2Zmc2V0LCBiaXRzLCBhbHBoYTAxKSB7XG4gICAgICBjb25zdCBzY2FsZSA9IDEgLyAoKDEgPDwgYml0cykgLSAxKTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7XG4gICAgICAgIGNvbnZlcnRUb1JnYih0aGlzLCBzcmMsIHNyY09mZnNldCwgZGVzdCwgZGVzdE9mZnNldCwgc2NhbGUpO1xuICAgICAgICBzcmNPZmZzZXQgKz0gMztcbiAgICAgICAgZGVzdE9mZnNldCArPSAzICsgYWxwaGEwMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRPdXRwdXRMZW5ndGgoaW5wdXRMZW5ndGgsIGFscGhhMDEpIHtcbiAgICAgIHJldHVybiBpbnB1dExlbmd0aCAqICgzICsgYWxwaGEwMSkgLyAzIHwgMDtcbiAgICB9XG5cbiAgfVxuXG4gIHJldHVybiBDYWxSR0JDUztcbn0oKTtcblxuY29uc3QgTGFiQ1MgPSBmdW5jdGlvbiBMYWJDU0Nsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIGZuX2coeCkge1xuICAgIGxldCByZXN1bHQ7XG5cbiAgICBpZiAoeCA+PSA2IC8gMjkpIHtcbiAgICAgIHJlc3VsdCA9IHggKiogMztcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gMTA4IC8gODQxICogKHggLSA0IC8gMjkpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiBkZWNvZGUodmFsdWUsIGhpZ2gxLCBsb3cyLCBoaWdoMikge1xuICAgIHJldHVybiBsb3cyICsgdmFsdWUgKiAoaGlnaDIgLSBsb3cyKSAvIGhpZ2gxO1xuICB9XG5cbiAgZnVuY3Rpb24gY29udmVydFRvUmdiKGNzLCBzcmMsIHNyY09mZnNldCwgbWF4VmFsLCBkZXN0LCBkZXN0T2Zmc2V0KSB7XG4gICAgbGV0IExzID0gc3JjW3NyY09mZnNldF07XG4gICAgbGV0IGFzID0gc3JjW3NyY09mZnNldCArIDFdO1xuICAgIGxldCBicyA9IHNyY1tzcmNPZmZzZXQgKyAyXTtcblxuICAgIGlmIChtYXhWYWwgIT09IGZhbHNlKSB7XG4gICAgICBMcyA9IGRlY29kZShMcywgbWF4VmFsLCAwLCAxMDApO1xuICAgICAgYXMgPSBkZWNvZGUoYXMsIG1heFZhbCwgY3MuYW1pbiwgY3MuYW1heCk7XG4gICAgICBicyA9IGRlY29kZShicywgbWF4VmFsLCBjcy5ibWluLCBjcy5ibWF4KTtcbiAgICB9XG5cbiAgICBpZiAoYXMgPiBjcy5hbWF4KSB7XG4gICAgICBhcyA9IGNzLmFtYXg7XG4gICAgfSBlbHNlIGlmIChhcyA8IGNzLmFtaW4pIHtcbiAgICAgIGFzID0gY3MuYW1pbjtcbiAgICB9XG5cbiAgICBpZiAoYnMgPiBjcy5ibWF4KSB7XG4gICAgICBicyA9IGNzLmJtYXg7XG4gICAgfSBlbHNlIGlmIChicyA8IGNzLmJtaW4pIHtcbiAgICAgIGJzID0gY3MuYm1pbjtcbiAgICB9XG5cbiAgICBjb25zdCBNID0gKExzICsgMTYpIC8gMTE2O1xuICAgIGNvbnN0IEwgPSBNICsgYXMgLyA1MDA7XG4gICAgY29uc3QgTiA9IE0gLSBicyAvIDIwMDtcbiAgICBjb25zdCBYID0gY3MuWFcgKiBmbl9nKEwpO1xuICAgIGNvbnN0IFkgPSBjcy5ZVyAqIGZuX2coTSk7XG4gICAgY29uc3QgWiA9IGNzLlpXICogZm5fZyhOKTtcbiAgICBsZXQgciwgZywgYjtcblxuICAgIGlmIChjcy5aVyA8IDEpIHtcbiAgICAgIHIgPSBYICogMy4xMzM5ICsgWSAqIC0xLjYxNyArIFogKiAtMC40OTA2O1xuICAgICAgZyA9IFggKiAtMC45Nzg1ICsgWSAqIDEuOTE2ICsgWiAqIDAuMDMzMztcbiAgICAgIGIgPSBYICogMC4wNzIgKyBZICogLTAuMjI5ICsgWiAqIDEuNDA1NztcbiAgICB9IGVsc2Uge1xuICAgICAgciA9IFggKiAzLjI0MDYgKyBZICogLTEuNTM3MiArIFogKiAtMC40OTg2O1xuICAgICAgZyA9IFggKiAtMC45Njg5ICsgWSAqIDEuODc1OCArIFogKiAwLjA0MTU7XG4gICAgICBiID0gWCAqIDAuMDU1NyArIFkgKiAtMC4yMDQgKyBaICogMS4wNTc7XG4gICAgfVxuXG4gICAgZGVzdFtkZXN0T2Zmc2V0XSA9IE1hdGguc3FydChyKSAqIDI1NTtcbiAgICBkZXN0W2Rlc3RPZmZzZXQgKyAxXSA9IE1hdGguc3FydChnKSAqIDI1NTtcbiAgICBkZXN0W2Rlc3RPZmZzZXQgKyAyXSA9IE1hdGguc3FydChiKSAqIDI1NTtcbiAgfVxuXG4gIGNsYXNzIExhYkNTIGV4dGVuZHMgQ29sb3JTcGFjZSB7XG4gICAgY29uc3RydWN0b3Iod2hpdGVQb2ludCwgYmxhY2tQb2ludCwgcmFuZ2UpIHtcbiAgICAgIHN1cGVyKFwiTGFiXCIsIDMpO1xuXG4gICAgICBpZiAoIXdoaXRlUG9pbnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiV2hpdGVQb2ludCBtaXNzaW5nIC0gcmVxdWlyZWQgZm9yIGNvbG9yIHNwYWNlIExhYlwiKTtcbiAgICAgIH1cblxuICAgICAgYmxhY2tQb2ludCA9IGJsYWNrUG9pbnQgfHwgWzAsIDAsIDBdO1xuICAgICAgcmFuZ2UgPSByYW5nZSB8fCBbLTEwMCwgMTAwLCAtMTAwLCAxMDBdO1xuICAgICAgdGhpcy5YVyA9IHdoaXRlUG9pbnRbMF07XG4gICAgICB0aGlzLllXID0gd2hpdGVQb2ludFsxXTtcbiAgICAgIHRoaXMuWlcgPSB3aGl0ZVBvaW50WzJdO1xuICAgICAgdGhpcy5hbWluID0gcmFuZ2VbMF07XG4gICAgICB0aGlzLmFtYXggPSByYW5nZVsxXTtcbiAgICAgIHRoaXMuYm1pbiA9IHJhbmdlWzJdO1xuICAgICAgdGhpcy5ibWF4ID0gcmFuZ2VbM107XG4gICAgICB0aGlzLlhCID0gYmxhY2tQb2ludFswXTtcbiAgICAgIHRoaXMuWUIgPSBibGFja1BvaW50WzFdO1xuICAgICAgdGhpcy5aQiA9IGJsYWNrUG9pbnRbMl07XG5cbiAgICAgIGlmICh0aGlzLlhXIDwgMCB8fCB0aGlzLlpXIDwgMCB8fCB0aGlzLllXICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgV2hpdGVQb2ludCBjb21wb25lbnRzLCBubyBmYWxsYmFjayBhdmFpbGFibGVcIik7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLlhCIDwgMCB8fCB0aGlzLllCIDwgMCB8fCB0aGlzLlpCIDwgMCkge1xuICAgICAgICAoMCwgX3V0aWwuaW5mbykoXCJJbnZhbGlkIEJsYWNrUG9pbnQsIGZhbGxpbmcgYmFjayB0byBkZWZhdWx0XCIpO1xuICAgICAgICB0aGlzLlhCID0gdGhpcy5ZQiA9IHRoaXMuWkIgPSAwO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5hbWluID4gdGhpcy5hbWF4IHx8IHRoaXMuYm1pbiA+IHRoaXMuYm1heCkge1xuICAgICAgICAoMCwgX3V0aWwuaW5mbykoXCJJbnZhbGlkIFJhbmdlLCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdHNcIik7XG4gICAgICAgIHRoaXMuYW1pbiA9IC0xMDA7XG4gICAgICAgIHRoaXMuYW1heCA9IDEwMDtcbiAgICAgICAgdGhpcy5ibWluID0gLTEwMDtcbiAgICAgICAgdGhpcy5ibWF4ID0gMTAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIGdldFJnYkl0ZW0oc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHtcbiAgICAgIGNvbnZlcnRUb1JnYih0aGlzLCBzcmMsIHNyY09mZnNldCwgZmFsc2UsIGRlc3QsIGRlc3RPZmZzZXQpO1xuICAgIH1cblxuICAgIGdldFJnYkJ1ZmZlcihzcmMsIHNyY09mZnNldCwgY291bnQsIGRlc3QsIGRlc3RPZmZzZXQsIGJpdHMsIGFscGhhMDEpIHtcbiAgICAgIGNvbnN0IG1heFZhbCA9ICgxIDw8IGJpdHMpIC0gMTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnZlcnRUb1JnYih0aGlzLCBzcmMsIHNyY09mZnNldCwgbWF4VmFsLCBkZXN0LCBkZXN0T2Zmc2V0KTtcbiAgICAgICAgc3JjT2Zmc2V0ICs9IDM7XG4gICAgICAgIGRlc3RPZmZzZXQgKz0gMyArIGFscGhhMDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZ2V0T3V0cHV0TGVuZ3RoKGlucHV0TGVuZ3RoLCBhbHBoYTAxKSB7XG4gICAgICByZXR1cm4gaW5wdXRMZW5ndGggKiAoMyArIGFscGhhMDEpIC8gMyB8IDA7XG4gICAgfVxuXG4gICAgaXNEZWZhdWx0RGVjb2RlKGRlY29kZU1hcCwgYnBjKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBnZXQgdXNlc1plcm9Ub09uZVJhbmdlKCkge1xuICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwidXNlc1plcm9Ub09uZVJhbmdlXCIsIGZhbHNlKTtcbiAgICB9XG5cbiAgfVxuXG4gIHJldHVybiBMYWJDUztcbn0oKTtcblxuLyoqKi8gfSksXG4vKiAyNSAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5QYXJ0aWFsRXZhbHVhdG9yID0gZXhwb3J0cy5FdmFsdWF0b3JQcmVwcm9jZXNzb3IgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfY21hcCA9IF9fd19wZGZqc19yZXF1aXJlX18oMjYpO1xuXG52YXIgX3ByaW1pdGl2ZXMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDUpO1xuXG52YXIgX2ZvbnRzID0gX193X3BkZmpzX3JlcXVpcmVfXyg0NCk7XG5cbnZhciBfZm9udHNfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDE4KTtcblxudmFyIF9lbmNvZGluZ3MgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDE5KTtcblxudmFyIF9zdGFuZGFyZF9mb250cyA9IF9fd19wZGZqc19yZXF1aXJlX18oNDcpO1xuXG52YXIgX3VuaWNvZGUgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIxKTtcblxudmFyIF9wYXR0ZXJuID0gX193X3BkZmpzX3JlcXVpcmVfXyg1NSk7XG5cbnZhciBfeGZhX2ZvbnRzID0gX193X3BkZmpzX3JlcXVpcmVfXygxMik7XG5cbnZhciBfdG9fdW5pY29kZV9tYXAgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDQ4KTtcblxudmFyIF9mdW5jdGlvbiA9IF9fd19wZGZqc19yZXF1aXJlX18oNTYpO1xuXG52YXIgX3BhcnNlciA9IF9fd19wZGZqc19yZXF1aXJlX18oMjcpO1xuXG52YXIgX2ltYWdlX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXyg1OCk7XG5cbnZhciBfc3RyZWFtID0gX193X3BkZmpzX3JlcXVpcmVfXygxMCk7XG5cbnZhciBfYmFzZV9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDYpO1xuXG52YXIgX2JpZGkgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDU5KTtcblxudmFyIF9jb2xvcnNwYWNlID0gX193X3BkZmpzX3JlcXVpcmVfXygyNCk7XG5cbnZhciBfZGVjb2RlX3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oMjkpO1xuXG52YXIgX2dseXBobGlzdCA9IF9fd19wZGZqc19yZXF1aXJlX18oMjApO1xuXG52YXIgX2NvcmVfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDkpO1xuXG52YXIgX21ldHJpY3MgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDYwKTtcblxudmFyIF9tdXJtdXJoYXNoID0gX193X3BkZmpzX3JlcXVpcmVfXyg2MSk7XG5cbnZhciBfb3BlcmF0b3JfbGlzdCA9IF9fd19wZGZqc19yZXF1aXJlX18oNjIpO1xuXG52YXIgX2ltYWdlID0gX193X3BkZmpzX3JlcXVpcmVfXyg2Myk7XG5cbmNvbnN0IERlZmF1bHRQYXJ0aWFsRXZhbHVhdG9yT3B0aW9ucyA9IE9iamVjdC5mcmVlemUoe1xuICBtYXhJbWFnZVNpemU6IC0xLFxuICBkaXNhYmxlRm9udEZhY2U6IGZhbHNlLFxuICBpZ25vcmVFcnJvcnM6IGZhbHNlLFxuICBpc0V2YWxTdXBwb3J0ZWQ6IHRydWUsXG4gIGZvbnRFeHRyYVByb3BlcnRpZXM6IGZhbHNlLFxuICB1c2VTeXN0ZW1Gb250czogdHJ1ZSxcbiAgY01hcFVybDogbnVsbCxcbiAgc3RhbmRhcmRGb250RGF0YVVybDogbnVsbFxufSk7XG5jb25zdCBQYXR0ZXJuVHlwZSA9IHtcbiAgVElMSU5HOiAxLFxuICBTSEFESU5HOiAyXG59O1xuY29uc3QgVEVYVF9DSFVOS19CQVRDSF9TSVpFID0gMTA7XG5jb25zdCBkZWZlcnJlZCA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG5mdW5jdGlvbiBub3JtYWxpemVCbGVuZE1vZGUodmFsdWUsIHBhcnNpbmdBcnJheSA9IGZhbHNlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHZhbHVlLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGNvbnN0IG1heWJlQk0gPSBub3JtYWxpemVCbGVuZE1vZGUodmFsdWVbaV0sIHRydWUpO1xuXG4gICAgICBpZiAobWF5YmVCTSkge1xuICAgICAgICByZXR1cm4gbWF5YmVCTTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAoMCwgX3V0aWwud2FybikoYFVuc3VwcG9ydGVkIGJsZW5kIG1vZGUgQXJyYXk6ICR7dmFsdWV9YCk7XG4gICAgcmV0dXJuIFwic291cmNlLW92ZXJcIjtcbiAgfVxuXG4gIGlmICghKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkodmFsdWUpKSB7XG4gICAgaWYgKHBhcnNpbmdBcnJheSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIFwic291cmNlLW92ZXJcIjtcbiAgfVxuXG4gIHN3aXRjaCAodmFsdWUubmFtZSkge1xuICAgIGNhc2UgXCJOb3JtYWxcIjpcbiAgICBjYXNlIFwiQ29tcGF0aWJsZVwiOlxuICAgICAgcmV0dXJuIFwic291cmNlLW92ZXJcIjtcblxuICAgIGNhc2UgXCJNdWx0aXBseVwiOlxuICAgICAgcmV0dXJuIFwibXVsdGlwbHlcIjtcblxuICAgIGNhc2UgXCJTY3JlZW5cIjpcbiAgICAgIHJldHVybiBcInNjcmVlblwiO1xuXG4gICAgY2FzZSBcIk92ZXJsYXlcIjpcbiAgICAgIHJldHVybiBcIm92ZXJsYXlcIjtcblxuICAgIGNhc2UgXCJEYXJrZW5cIjpcbiAgICAgIHJldHVybiBcImRhcmtlblwiO1xuXG4gICAgY2FzZSBcIkxpZ2h0ZW5cIjpcbiAgICAgIHJldHVybiBcImxpZ2h0ZW5cIjtcblxuICAgIGNhc2UgXCJDb2xvckRvZGdlXCI6XG4gICAgICByZXR1cm4gXCJjb2xvci1kb2RnZVwiO1xuXG4gICAgY2FzZSBcIkNvbG9yQnVyblwiOlxuICAgICAgcmV0dXJuIFwiY29sb3ItYnVyblwiO1xuXG4gICAgY2FzZSBcIkhhcmRMaWdodFwiOlxuICAgICAgcmV0dXJuIFwiaGFyZC1saWdodFwiO1xuXG4gICAgY2FzZSBcIlNvZnRMaWdodFwiOlxuICAgICAgcmV0dXJuIFwic29mdC1saWdodFwiO1xuXG4gICAgY2FzZSBcIkRpZmZlcmVuY2VcIjpcbiAgICAgIHJldHVybiBcImRpZmZlcmVuY2VcIjtcblxuICAgIGNhc2UgXCJFeGNsdXNpb25cIjpcbiAgICAgIHJldHVybiBcImV4Y2x1c2lvblwiO1xuXG4gICAgY2FzZSBcIkh1ZVwiOlxuICAgICAgcmV0dXJuIFwiaHVlXCI7XG5cbiAgICBjYXNlIFwiU2F0dXJhdGlvblwiOlxuICAgICAgcmV0dXJuIFwic2F0dXJhdGlvblwiO1xuXG4gICAgY2FzZSBcIkNvbG9yXCI6XG4gICAgICByZXR1cm4gXCJjb2xvclwiO1xuXG4gICAgY2FzZSBcIkx1bWlub3NpdHlcIjpcbiAgICAgIHJldHVybiBcImx1bWlub3NpdHlcIjtcbiAgfVxuXG4gIGlmIChwYXJzaW5nQXJyYXkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gICgwLCBfdXRpbC53YXJuKShgVW5zdXBwb3J0ZWQgYmxlbmQgbW9kZTogJHt2YWx1ZS5uYW1lfWApO1xuICByZXR1cm4gXCJzb3VyY2Utb3ZlclwiO1xufVxuXG5jbGFzcyBUaW1lU2xvdE1hbmFnZXIge1xuICBzdGF0aWMgZ2V0IFRJTUVfU0xPVF9EVVJBVElPTl9NUygpIHtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJUSU1FX1NMT1RfRFVSQVRJT05fTVNcIiwgMjApO1xuICB9XG5cbiAgc3RhdGljIGdldCBDSEVDS19USU1FX0VWRVJZKCkge1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIkNIRUNLX1RJTUVfRVZFUllcIiwgMTAwKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMucmVzZXQoKTtcbiAgfVxuXG4gIGNoZWNrKCkge1xuICAgIGlmICgrK3RoaXMuY2hlY2tlZCA8IFRpbWVTbG90TWFuYWdlci5DSEVDS19USU1FX0VWRVJZKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5jaGVja2VkID0gMDtcbiAgICByZXR1cm4gdGhpcy5lbmRUaW1lIDw9IERhdGUubm93KCk7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLmVuZFRpbWUgPSBEYXRlLm5vdygpICsgVGltZVNsb3RNYW5hZ2VyLlRJTUVfU0xPVF9EVVJBVElPTl9NUztcbiAgICB0aGlzLmNoZWNrZWQgPSAwO1xuICB9XG5cbn1cblxuY2xhc3MgUGFydGlhbEV2YWx1YXRvciB7XG4gIGNvbnN0cnVjdG9yKHtcbiAgICB4cmVmLFxuICAgIGhhbmRsZXIsXG4gICAgcGFnZUluZGV4LFxuICAgIGlkRmFjdG9yeSxcbiAgICBmb250Q2FjaGUsXG4gICAgYnVpbHRJbkNNYXBDYWNoZSxcbiAgICBzdGFuZGFyZEZvbnREYXRhQ2FjaGUsXG4gICAgZ2xvYmFsSW1hZ2VDYWNoZSxcbiAgICBvcHRpb25zID0gbnVsbFxuICB9KSB7XG4gICAgdGhpcy54cmVmID0geHJlZjtcbiAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyO1xuICAgIHRoaXMucGFnZUluZGV4ID0gcGFnZUluZGV4O1xuICAgIHRoaXMuaWRGYWN0b3J5ID0gaWRGYWN0b3J5O1xuICAgIHRoaXMuZm9udENhY2hlID0gZm9udENhY2hlO1xuICAgIHRoaXMuYnVpbHRJbkNNYXBDYWNoZSA9IGJ1aWx0SW5DTWFwQ2FjaGU7XG4gICAgdGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUgPSBzdGFuZGFyZEZvbnREYXRhQ2FjaGU7XG4gICAgdGhpcy5nbG9iYWxJbWFnZUNhY2hlID0gZ2xvYmFsSW1hZ2VDYWNoZTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IERlZmF1bHRQYXJ0aWFsRXZhbHVhdG9yT3B0aW9ucztcbiAgICB0aGlzLnBhcnNpbmdUeXBlM0ZvbnQgPSBmYWxzZTtcbiAgICB0aGlzLl9mZXRjaEJ1aWx0SW5DTWFwQm91bmQgPSB0aGlzLmZldGNoQnVpbHRJbkNNYXAuYmluZCh0aGlzKTtcbiAgfVxuXG4gIGdldCBfcGRmRnVuY3Rpb25GYWN0b3J5KCkge1xuICAgIGNvbnN0IHBkZkZ1bmN0aW9uRmFjdG9yeSA9IG5ldyBfZnVuY3Rpb24uUERGRnVuY3Rpb25GYWN0b3J5KHtcbiAgICAgIHhyZWY6IHRoaXMueHJlZixcbiAgICAgIGlzRXZhbFN1cHBvcnRlZDogdGhpcy5vcHRpb25zLmlzRXZhbFN1cHBvcnRlZFxuICAgIH0pO1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIl9wZGZGdW5jdGlvbkZhY3RvcnlcIiwgcGRmRnVuY3Rpb25GYWN0b3J5KTtcbiAgfVxuXG4gIGNsb25lKG5ld09wdGlvbnMgPSBudWxsKSB7XG4gICAgY29uc3QgbmV3RXZhbHVhdG9yID0gT2JqZWN0LmNyZWF0ZSh0aGlzKTtcbiAgICBuZXdFdmFsdWF0b3Iub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSwgdGhpcy5vcHRpb25zLCBuZXdPcHRpb25zKTtcbiAgICByZXR1cm4gbmV3RXZhbHVhdG9yO1xuICB9XG5cbiAgaGFzQmxlbmRNb2RlcyhyZXNvdXJjZXMsIG5vbkJsZW5kTW9kZXNTZXQpIHtcbiAgICBpZiAoIShyZXNvdXJjZXMgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5EaWN0KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChyZXNvdXJjZXMub2JqSWQgJiYgbm9uQmxlbmRNb2Rlc1NldC5oYXMocmVzb3VyY2VzLm9iaklkKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHByb2Nlc3NlZCA9IG5ldyBfcHJpbWl0aXZlcy5SZWZTZXQobm9uQmxlbmRNb2Rlc1NldCk7XG5cbiAgICBpZiAocmVzb3VyY2VzLm9iaklkKSB7XG4gICAgICBwcm9jZXNzZWQucHV0KHJlc291cmNlcy5vYmpJZCk7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZXMgPSBbcmVzb3VyY2VzXSxcbiAgICAgICAgICB4cmVmID0gdGhpcy54cmVmO1xuXG4gICAgd2hpbGUgKG5vZGVzLmxlbmd0aCkge1xuICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzLnNoaWZ0KCk7XG4gICAgICBjb25zdCBncmFwaGljU3RhdGVzID0gbm9kZS5nZXQoXCJFeHRHU3RhdGVcIik7XG5cbiAgICAgIGlmIChncmFwaGljU3RhdGVzIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCkge1xuICAgICAgICBmb3IgKGxldCBncmFwaGljU3RhdGUgb2YgZ3JhcGhpY1N0YXRlcy5nZXRSYXdWYWx1ZXMoKSkge1xuICAgICAgICAgIGlmIChncmFwaGljU3RhdGUgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5SZWYpIHtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzZWQuaGFzKGdyYXBoaWNTdGF0ZSkpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGdyYXBoaWNTdGF0ZSA9IHhyZWYuZmV0Y2goZ3JhcGhpY1N0YXRlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAgIHByb2Nlc3NlZC5wdXQoZ3JhcGhpY1N0YXRlKTtcbiAgICAgICAgICAgICAgKDAsIF91dGlsLmluZm8pKGBoYXNCbGVuZE1vZGVzIC0gaWdub3JpbmcgRXh0R1N0YXRlOiBcIiR7ZXh9XCIuYCk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghKGdyYXBoaWNTdGF0ZSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZ3JhcGhpY1N0YXRlLm9iaklkKSB7XG4gICAgICAgICAgICBwcm9jZXNzZWQucHV0KGdyYXBoaWNTdGF0ZS5vYmpJZCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgYm0gPSBncmFwaGljU3RhdGUuZ2V0KFwiQk1cIik7XG5cbiAgICAgICAgICBpZiAoYm0gaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5OYW1lKSB7XG4gICAgICAgICAgICBpZiAoYm0ubmFtZSAhPT0gXCJOb3JtYWxcIikge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGJtICE9PSB1bmRlZmluZWQgJiYgQXJyYXkuaXNBcnJheShibSkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBibSkge1xuICAgICAgICAgICAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLk5hbWUgJiYgZWxlbWVudC5uYW1lICE9PSBcIk5vcm1hbFwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgeE9iamVjdHMgPSBub2RlLmdldChcIlhPYmplY3RcIik7XG5cbiAgICAgIGlmICghKHhPYmplY3RzIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IHhPYmplY3Qgb2YgeE9iamVjdHMuZ2V0UmF3VmFsdWVzKCkpIHtcbiAgICAgICAgaWYgKHhPYmplY3QgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5SZWYpIHtcbiAgICAgICAgICBpZiAocHJvY2Vzc2VkLmhhcyh4T2JqZWN0KSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHhPYmplY3QgPSB4cmVmLmZldGNoKHhPYmplY3QpO1xuICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICBwcm9jZXNzZWQucHV0KHhPYmplY3QpO1xuICAgICAgICAgICAgKDAsIF91dGlsLmluZm8pKGBoYXNCbGVuZE1vZGVzIC0gaWdub3JpbmcgWE9iamVjdDogXCIke2V4fVwiLmApO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKHhPYmplY3QpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoeE9iamVjdC5kaWN0Lm9iaklkKSB7XG4gICAgICAgICAgcHJvY2Vzc2VkLnB1dCh4T2JqZWN0LmRpY3Qub2JqSWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeFJlc291cmNlcyA9IHhPYmplY3QuZGljdC5nZXQoXCJSZXNvdXJjZXNcIik7XG5cbiAgICAgICAgaWYgKCEoeFJlc291cmNlcyBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoeFJlc291cmNlcy5vYmpJZCAmJiBwcm9jZXNzZWQuaGFzKHhSZXNvdXJjZXMub2JqSWQpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBub2Rlcy5wdXNoKHhSZXNvdXJjZXMpO1xuXG4gICAgICAgIGlmICh4UmVzb3VyY2VzLm9iaklkKSB7XG4gICAgICAgICAgcHJvY2Vzc2VkLnB1dCh4UmVzb3VyY2VzLm9iaklkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHByb2Nlc3NlZC5mb3JFYWNoKHJlZiA9PiB7XG4gICAgICBub25CbGVuZE1vZGVzU2V0LnB1dChyZWYpO1xuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIGZldGNoQnVpbHRJbkNNYXAobmFtZSkge1xuICAgIGNvbnN0IGNhY2hlZERhdGEgPSB0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUuZ2V0KG5hbWUpO1xuXG4gICAgaWYgKGNhY2hlZERhdGEpIHtcbiAgICAgIHJldHVybiBjYWNoZWREYXRhO1xuICAgIH1cblxuICAgIGxldCBkYXRhO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jTWFwVXJsICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9wdGlvbnMuY01hcFVybH0ke25hbWV9LmJjbWFwYDtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsKTtcblxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGZldGNoQnVpbHRJbkNNYXA6IGZhaWxlZCB0byBmZXRjaCBmaWxlIFwiJHt1cmx9XCIgd2l0aCBcIiR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1cIi5gKTtcbiAgICAgIH1cblxuICAgICAgZGF0YSA9IHtcbiAgICAgICAgY01hcERhdGE6IG5ldyBVaW50OEFycmF5KGF3YWl0IHJlc3BvbnNlLmFycmF5QnVmZmVyKCkpLFxuICAgICAgICBjb21wcmVzc2lvblR5cGU6IF91dGlsLkNNYXBDb21wcmVzc2lvblR5cGUuQklOQVJZXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRhID0gYXdhaXQgdGhpcy5oYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkZldGNoQnVpbHRJbkNNYXBcIiwge1xuICAgICAgICBuYW1lXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YS5jb21wcmVzc2lvblR5cGUgIT09IF91dGlsLkNNYXBDb21wcmVzc2lvblR5cGUuTk9ORSkge1xuICAgICAgdGhpcy5idWlsdEluQ01hcENhY2hlLnNldChuYW1lLCBkYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGFzeW5jIGZldGNoU3RhbmRhcmRGb250RGF0YShuYW1lKSB7XG4gICAgY29uc3QgY2FjaGVkRGF0YSA9IHRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLmdldChuYW1lKTtcblxuICAgIGlmIChjYWNoZWREYXRhKSB7XG4gICAgICByZXR1cm4gbmV3IF9zdHJlYW0uU3RyZWFtKGNhY2hlZERhdGEpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMudXNlU3lzdGVtRm9udHMgJiYgbmFtZSAhPT0gXCJTeW1ib2xcIiAmJiBuYW1lICE9PSBcIlphcGZEaW5nYmF0c1wiKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFuZGFyZEZvbnROYW1lVG9GaWxlTmFtZSA9ICgwLCBfc3RhbmRhcmRfZm9udHMuZ2V0Rm9udE5hbWVUb0ZpbGVNYXApKCksXG4gICAgICAgICAgZmlsZW5hbWUgPSBzdGFuZGFyZEZvbnROYW1lVG9GaWxlTmFtZVtuYW1lXTtcbiAgICBsZXQgZGF0YTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuc3RhbmRhcmRGb250RGF0YVVybCAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5vcHRpb25zLnN0YW5kYXJkRm9udERhdGFVcmx9JHtmaWxlbmFtZX1gO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwpO1xuXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShgZmV0Y2hTdGFuZGFyZEZvbnREYXRhOiBmYWlsZWQgdG8gZmV0Y2ggZmlsZSBcIiR7dXJsfVwiIHdpdGggXCIke3Jlc3BvbnNlLnN0YXR1c1RleHR9XCIuYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXRhID0gYXdhaXQgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IGF3YWl0IHRoaXMuaGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJGZXRjaFN0YW5kYXJkRm9udERhdGFcIiwge1xuICAgICAgICAgIGZpbGVuYW1lXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoYGZldGNoU3RhbmRhcmRGb250RGF0YTogZmFpbGVkIHRvIGZldGNoIGZpbGUgXCIke2ZpbGVuYW1lfVwiIHdpdGggXCIke2V9XCIuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFkYXRhKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZS5zZXQobmFtZSwgZGF0YSk7XG4gICAgcmV0dXJuIG5ldyBfc3RyZWFtLlN0cmVhbShkYXRhKTtcbiAgfVxuXG4gIGFzeW5jIGJ1aWxkRm9ybVhPYmplY3QocmVzb3VyY2VzLCB4b2JqLCBzbWFzaywgb3BlcmF0b3JMaXN0LCB0YXNrLCBpbml0aWFsU3RhdGUsIGxvY2FsQ29sb3JTcGFjZUNhY2hlKSB7XG4gICAgY29uc3QgZGljdCA9IHhvYmouZGljdDtcbiAgICBjb25zdCBtYXRyaXggPSBkaWN0LmdldEFycmF5KFwiTWF0cml4XCIpO1xuICAgIGxldCBiYm94ID0gZGljdC5nZXRBcnJheShcIkJCb3hcIik7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShiYm94KSAmJiBiYm94Lmxlbmd0aCA9PT0gNCkge1xuICAgICAgYmJveCA9IF91dGlsLlV0aWwubm9ybWFsaXplUmVjdChiYm94KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYmJveCA9IG51bGw7XG4gICAgfVxuXG4gICAgbGV0IG9wdGlvbmFsQ29udGVudCwgZ3JvdXBPcHRpb25zO1xuXG4gICAgaWYgKGRpY3QuaGFzKFwiT0NcIikpIHtcbiAgICAgIG9wdGlvbmFsQ29udGVudCA9IGF3YWl0IHRoaXMucGFyc2VNYXJrZWRDb250ZW50UHJvcHMoZGljdC5nZXQoXCJPQ1wiKSwgcmVzb3VyY2VzKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9uYWxDb250ZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChfdXRpbC5PUFMuYmVnaW5NYXJrZWRDb250ZW50UHJvcHMsIFtcIk9DXCIsIG9wdGlvbmFsQ29udGVudF0pO1xuICAgIH1cblxuICAgIGNvbnN0IGdyb3VwID0gZGljdC5nZXQoXCJHcm91cFwiKTtcblxuICAgIGlmIChncm91cCkge1xuICAgICAgZ3JvdXBPcHRpb25zID0ge1xuICAgICAgICBtYXRyaXgsXG4gICAgICAgIGJib3gsXG4gICAgICAgIHNtYXNrLFxuICAgICAgICBpc29sYXRlZDogZmFsc2UsXG4gICAgICAgIGtub2Nrb3V0OiBmYWxzZVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGdyb3VwU3VidHlwZSA9IGdyb3VwLmdldChcIlNcIik7XG4gICAgICBsZXQgY29sb3JTcGFjZSA9IG51bGw7XG5cbiAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShncm91cFN1YnR5cGUsIFwiVHJhbnNwYXJlbmN5XCIpKSB7XG4gICAgICAgIGdyb3VwT3B0aW9ucy5pc29sYXRlZCA9IGdyb3VwLmdldChcIklcIikgfHwgZmFsc2U7XG4gICAgICAgIGdyb3VwT3B0aW9ucy5rbm9ja291dCA9IGdyb3VwLmdldChcIktcIikgfHwgZmFsc2U7XG5cbiAgICAgICAgaWYgKGdyb3VwLmhhcyhcIkNTXCIpKSB7XG4gICAgICAgICAgY29uc3QgY3MgPSBncm91cC5nZXRSYXcoXCJDU1wiKTtcblxuICAgICAgICAgIGNvbnN0IGNhY2hlZENvbG9yU3BhY2UgPSBfY29sb3JzcGFjZS5Db2xvclNwYWNlLmdldENhY2hlZChjcywgdGhpcy54cmVmLCBsb2NhbENvbG9yU3BhY2VDYWNoZSk7XG5cbiAgICAgICAgICBpZiAoY2FjaGVkQ29sb3JTcGFjZSkge1xuICAgICAgICAgICAgY29sb3JTcGFjZSA9IGNhY2hlZENvbG9yU3BhY2U7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbG9yU3BhY2UgPSBhd2FpdCB0aGlzLnBhcnNlQ29sb3JTcGFjZSh7XG4gICAgICAgICAgICAgIGNzLFxuICAgICAgICAgICAgICByZXNvdXJjZXMsXG4gICAgICAgICAgICAgIGxvY2FsQ29sb3JTcGFjZUNhY2hlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHNtYXNrICYmIHNtYXNrLmJhY2tkcm9wKSB7XG4gICAgICAgIGNvbG9yU3BhY2UgPSBjb2xvclNwYWNlIHx8IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2I7XG4gICAgICAgIHNtYXNrLmJhY2tkcm9wID0gY29sb3JTcGFjZS5nZXRSZ2Ioc21hc2suYmFja2Ryb3AsIDApO1xuICAgICAgfVxuXG4gICAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLmJlZ2luR3JvdXAsIFtncm91cE9wdGlvbnNdKTtcbiAgICB9XG5cbiAgICBjb25zdCBhcmdzID0gZ3JvdXAgPyBbbWF0cml4LCBudWxsXSA6IFttYXRyaXgsIGJib3hdO1xuICAgIG9wZXJhdG9yTGlzdC5hZGRPcChfdXRpbC5PUFMucGFpbnRGb3JtWE9iamVjdEJlZ2luLCBhcmdzKTtcbiAgICByZXR1cm4gdGhpcy5nZXRPcGVyYXRvckxpc3Qoe1xuICAgICAgc3RyZWFtOiB4b2JqLFxuICAgICAgdGFzayxcbiAgICAgIHJlc291cmNlczogZGljdC5nZXQoXCJSZXNvdXJjZXNcIikgfHwgcmVzb3VyY2VzLFxuICAgICAgb3BlcmF0b3JMaXN0LFxuICAgICAgaW5pdGlhbFN0YXRlXG4gICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLnBhaW50Rm9ybVhPYmplY3RFbmQsIFtdKTtcblxuICAgICAgaWYgKGdyb3VwKSB7XG4gICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChfdXRpbC5PUFMuZW5kR3JvdXAsIFtncm91cE9wdGlvbnNdKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbmFsQ29udGVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChfdXRpbC5PUFMuZW5kTWFya2VkQ29udGVudCwgW10pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgX3NlbmRJbWdEYXRhKG9iaklkLCBpbWdEYXRhLCBjYWNoZUdsb2JhbGx5ID0gZmFsc2UpIHtcbiAgICBjb25zdCB0cmFuc2ZlcnMgPSBpbWdEYXRhID8gW2ltZ0RhdGEuZGF0YS5idWZmZXJdIDogbnVsbDtcblxuICAgIGlmICh0aGlzLnBhcnNpbmdUeXBlM0ZvbnQgfHwgY2FjaGVHbG9iYWxseSkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5zZW5kKFwiY29tbW9ub2JqXCIsIFtvYmpJZCwgXCJJbWFnZVwiLCBpbWdEYXRhXSwgdHJhbnNmZXJzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLnNlbmQoXCJvYmpcIiwgW29iaklkLCB0aGlzLnBhZ2VJbmRleCwgXCJJbWFnZVwiLCBpbWdEYXRhXSwgdHJhbnNmZXJzKTtcbiAgfVxuXG4gIGFzeW5jIGJ1aWxkUGFpbnRJbWFnZVhPYmplY3Qoe1xuICAgIHJlc291cmNlcyxcbiAgICBpbWFnZSxcbiAgICBpc0lubGluZSA9IGZhbHNlLFxuICAgIG9wZXJhdG9yTGlzdCxcbiAgICBjYWNoZUtleSxcbiAgICBsb2NhbEltYWdlQ2FjaGUsXG4gICAgbG9jYWxDb2xvclNwYWNlQ2FjaGVcbiAgfSkge1xuICAgIGNvbnN0IGRpY3QgPSBpbWFnZS5kaWN0O1xuICAgIGNvbnN0IGltYWdlUmVmID0gZGljdC5vYmpJZDtcbiAgICBjb25zdCB3ID0gZGljdC5nZXQoXCJXXCIsIFwiV2lkdGhcIik7XG4gICAgY29uc3QgaCA9IGRpY3QuZ2V0KFwiSFwiLCBcIkhlaWdodFwiKTtcblxuICAgIGlmICghKHcgJiYgKDAsIF91dGlsLmlzTnVtKSh3KSkgfHwgIShoICYmICgwLCBfdXRpbC5pc051bSkoaCkpKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJJbWFnZSBkaW1lbnNpb25zIGFyZSBtaXNzaW5nLCBvciBub3QgbnVtYmVycy5cIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbWF4SW1hZ2VTaXplID0gdGhpcy5vcHRpb25zLm1heEltYWdlU2l6ZTtcblxuICAgIGlmIChtYXhJbWFnZVNpemUgIT09IC0xICYmIHcgKiBoID4gbWF4SW1hZ2VTaXplKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJJbWFnZSBleGNlZWRlZCBtYXhpbXVtIGFsbG93ZWQgc2l6ZSBhbmQgd2FzIHJlbW92ZWQuXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBvcHRpb25hbENvbnRlbnQ7XG5cbiAgICBpZiAoZGljdC5oYXMoXCJPQ1wiKSkge1xuICAgICAgb3B0aW9uYWxDb250ZW50ID0gYXdhaXQgdGhpcy5wYXJzZU1hcmtlZENvbnRlbnRQcm9wcyhkaWN0LmdldChcIk9DXCIpLCByZXNvdXJjZXMpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25hbENvbnRlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wcywgW1wiT0NcIiwgb3B0aW9uYWxDb250ZW50XSk7XG4gICAgfVxuXG4gICAgY29uc3QgaW1hZ2VNYXNrID0gZGljdC5nZXQoXCJJTVwiLCBcIkltYWdlTWFza1wiKSB8fCBmYWxzZTtcbiAgICBjb25zdCBpbnRlcnBvbGF0ZSA9IGRpY3QuZ2V0KFwiSVwiLCBcIkludGVycG9sYXRlXCIpO1xuICAgIGxldCBpbWdEYXRhLCBhcmdzO1xuXG4gICAgaWYgKGltYWdlTWFzaykge1xuICAgICAgY29uc3QgYml0U3RyaWRlTGVuZ3RoID0gdyArIDcgPj4gMztcbiAgICAgIGNvbnN0IGltZ0FycmF5ID0gaW1hZ2UuZ2V0Qnl0ZXMoYml0U3RyaWRlTGVuZ3RoICogaCwgdHJ1ZSk7XG4gICAgICBjb25zdCBkZWNvZGUgPSBkaWN0LmdldEFycmF5KFwiRFwiLCBcIkRlY29kZVwiKTtcbiAgICAgIGltZ0RhdGEgPSBfaW1hZ2UuUERGSW1hZ2UuY3JlYXRlTWFzayh7XG4gICAgICAgIGltZ0FycmF5LFxuICAgICAgICB3aWR0aDogdyxcbiAgICAgICAgaGVpZ2h0OiBoLFxuICAgICAgICBpbWFnZUlzRnJvbURlY29kZVN0cmVhbTogaW1hZ2UgaW5zdGFuY2VvZiBfZGVjb2RlX3N0cmVhbS5EZWNvZGVTdHJlYW0sXG4gICAgICAgIGludmVyc2VEZWNvZGU6ICEhZGVjb2RlICYmIGRlY29kZVswXSA+IDAsXG4gICAgICAgIGludGVycG9sYXRlXG4gICAgICB9KTtcbiAgICAgIGltZ0RhdGEuY2FjaGVkID0gISFjYWNoZUtleTtcbiAgICAgIGFyZ3MgPSBbaW1nRGF0YV07XG4gICAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdCwgYXJncyk7XG5cbiAgICAgIGlmIChjYWNoZUtleSkge1xuICAgICAgICBsb2NhbEltYWdlQ2FjaGUuc2V0KGNhY2hlS2V5LCBpbWFnZVJlZiwge1xuICAgICAgICAgIGZuOiBfdXRpbC5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0LFxuICAgICAgICAgIGFyZ3NcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25hbENvbnRlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLmVuZE1hcmtlZENvbnRlbnQsIFtdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNvZnRNYXNrID0gZGljdC5nZXQoXCJTTVwiLCBcIlNNYXNrXCIpIHx8IGZhbHNlO1xuICAgIGNvbnN0IG1hc2sgPSBkaWN0LmdldChcIk1hc2tcIikgfHwgZmFsc2U7XG4gICAgY29uc3QgU01BTExfSU1BR0VfRElNRU5TSU9OUyA9IDIwMDtcblxuICAgIGlmIChpc0lubGluZSAmJiAhc29mdE1hc2sgJiYgIW1hc2sgJiYgdyArIGggPCBTTUFMTF9JTUFHRV9ESU1FTlNJT05TKSB7XG4gICAgICBjb25zdCBpbWFnZU9iaiA9IG5ldyBfaW1hZ2UuUERGSW1hZ2Uoe1xuICAgICAgICB4cmVmOiB0aGlzLnhyZWYsXG4gICAgICAgIHJlczogcmVzb3VyY2VzLFxuICAgICAgICBpbWFnZSxcbiAgICAgICAgaXNJbmxpbmUsXG4gICAgICAgIHBkZkZ1bmN0aW9uRmFjdG9yeTogdGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LFxuICAgICAgICBsb2NhbENvbG9yU3BhY2VDYWNoZVxuICAgICAgfSk7XG4gICAgICBpbWdEYXRhID0gaW1hZ2VPYmouY3JlYXRlSW1hZ2VEYXRhKHRydWUpO1xuICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdCwgW2ltZ0RhdGFdKTtcblxuICAgICAgaWYgKG9wdGlvbmFsQ29udGVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChfdXRpbC5PUFMuZW5kTWFya2VkQ29udGVudCwgW10pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IG9iaklkID0gYGltZ18ke3RoaXMuaWRGYWN0b3J5LmNyZWF0ZU9iaklkKCl9YCxcbiAgICAgICAgY2FjaGVHbG9iYWxseSA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMucGFyc2luZ1R5cGUzRm9udCkge1xuICAgICAgb2JqSWQgPSBgJHt0aGlzLmlkRmFjdG9yeS5nZXREb2NJZCgpfV90eXBlM18ke29iaklkfWA7XG4gICAgfSBlbHNlIGlmIChpbWFnZVJlZikge1xuICAgICAgY2FjaGVHbG9iYWxseSA9IHRoaXMuZ2xvYmFsSW1hZ2VDYWNoZS5zaG91bGRDYWNoZShpbWFnZVJlZiwgdGhpcy5wYWdlSW5kZXgpO1xuXG4gICAgICBpZiAoY2FjaGVHbG9iYWxseSkge1xuICAgICAgICBvYmpJZCA9IGAke3RoaXMuaWRGYWN0b3J5LmdldERvY0lkKCl9XyR7b2JqSWR9YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBvcGVyYXRvckxpc3QuYWRkRGVwZW5kZW5jeShvYmpJZCk7XG4gICAgYXJncyA9IFtvYmpJZCwgdywgaF07XG5cbiAgICBfaW1hZ2UuUERGSW1hZ2UuYnVpbGRJbWFnZSh7XG4gICAgICB4cmVmOiB0aGlzLnhyZWYsXG4gICAgICByZXM6IHJlc291cmNlcyxcbiAgICAgIGltYWdlLFxuICAgICAgaXNJbmxpbmUsXG4gICAgICBwZGZGdW5jdGlvbkZhY3Rvcnk6IHRoaXMuX3BkZkZ1bmN0aW9uRmFjdG9yeSxcbiAgICAgIGxvY2FsQ29sb3JTcGFjZUNhY2hlXG4gICAgfSkudGhlbihpbWFnZU9iaiA9PiB7XG4gICAgICBpbWdEYXRhID0gaW1hZ2VPYmouY3JlYXRlSW1hZ2VEYXRhKGZhbHNlKTtcblxuICAgICAgaWYgKGNhY2hlS2V5ICYmIGltYWdlUmVmICYmIGNhY2hlR2xvYmFsbHkpIHtcbiAgICAgICAgdGhpcy5nbG9iYWxJbWFnZUNhY2hlLmFkZEJ5dGVTaXplKGltYWdlUmVmLCBpbWdEYXRhLmRhdGEubGVuZ3RoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX3NlbmRJbWdEYXRhKG9iaklkLCBpbWdEYXRhLCBjYWNoZUdsb2JhbGx5KTtcbiAgICB9KS5jYXRjaChyZWFzb24gPT4ge1xuICAgICAgKDAsIF91dGlsLndhcm4pKGBVbmFibGUgdG8gZGVjb2RlIGltYWdlIFwiJHtvYmpJZH1cIjogXCIke3JlYXNvbn1cIi5gKTtcbiAgICAgIHJldHVybiB0aGlzLl9zZW5kSW1nRGF0YShvYmpJZCwgbnVsbCwgY2FjaGVHbG9iYWxseSk7XG4gICAgfSk7XG5cbiAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLnBhaW50SW1hZ2VYT2JqZWN0LCBhcmdzKTtcblxuICAgIGlmIChjYWNoZUtleSkge1xuICAgICAgbG9jYWxJbWFnZUNhY2hlLnNldChjYWNoZUtleSwgaW1hZ2VSZWYsIHtcbiAgICAgICAgZm46IF91dGlsLk9QUy5wYWludEltYWdlWE9iamVjdCxcbiAgICAgICAgYXJnc1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChpbWFnZVJlZikge1xuICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KSghaXNJbmxpbmUsIFwiQ2Fubm90IGNhY2hlIGFuIGlubGluZSBpbWFnZSBnbG9iYWxseS5cIik7XG4gICAgICAgIHRoaXMuZ2xvYmFsSW1hZ2VDYWNoZS5hZGRQYWdlSW5kZXgoaW1hZ2VSZWYsIHRoaXMucGFnZUluZGV4KTtcblxuICAgICAgICBpZiAoY2FjaGVHbG9iYWxseSkge1xuICAgICAgICAgIHRoaXMuZ2xvYmFsSW1hZ2VDYWNoZS5zZXREYXRhKGltYWdlUmVmLCB7XG4gICAgICAgICAgICBvYmpJZCxcbiAgICAgICAgICAgIGZuOiBfdXRpbC5PUFMucGFpbnRJbWFnZVhPYmplY3QsXG4gICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICAgYnl0ZVNpemU6IDBcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvcHRpb25hbENvbnRlbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5lbmRNYXJrZWRDb250ZW50LCBbXSk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlU01hc2soc21hc2ssIHJlc291cmNlcywgb3BlcmF0b3JMaXN0LCB0YXNrLCBzdGF0ZU1hbmFnZXIsIGxvY2FsQ29sb3JTcGFjZUNhY2hlKSB7XG4gICAgY29uc3Qgc21hc2tDb250ZW50ID0gc21hc2suZ2V0KFwiR1wiKTtcbiAgICBjb25zdCBzbWFza09wdGlvbnMgPSB7XG4gICAgICBzdWJ0eXBlOiBzbWFzay5nZXQoXCJTXCIpLm5hbWUsXG4gICAgICBiYWNrZHJvcDogc21hc2suZ2V0KFwiQkNcIilcbiAgICB9O1xuICAgIGNvbnN0IHRyYW5zZmVyT2JqID0gc21hc2suZ2V0KFwiVFJcIik7XG5cbiAgICBpZiAoKDAsIF9mdW5jdGlvbi5pc1BERkZ1bmN0aW9uKSh0cmFuc2Zlck9iaikpIHtcbiAgICAgIGNvbnN0IHRyYW5zZmVyRm4gPSB0aGlzLl9wZGZGdW5jdGlvbkZhY3RvcnkuY3JlYXRlKHRyYW5zZmVyT2JqKTtcblxuICAgICAgY29uc3QgdHJhbnNmZXJNYXAgPSBuZXcgVWludDhBcnJheSgyNTYpO1xuICAgICAgY29uc3QgdG1wID0gbmV3IEZsb2F0MzJBcnJheSgxKTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgICAgICB0bXBbMF0gPSBpIC8gMjU1O1xuICAgICAgICB0cmFuc2ZlckZuKHRtcCwgMCwgdG1wLCAwKTtcbiAgICAgICAgdHJhbnNmZXJNYXBbaV0gPSB0bXBbMF0gKiAyNTUgfCAwO1xuICAgICAgfVxuXG4gICAgICBzbWFza09wdGlvbnMudHJhbnNmZXJNYXAgPSB0cmFuc2Zlck1hcDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5idWlsZEZvcm1YT2JqZWN0KHJlc291cmNlcywgc21hc2tDb250ZW50LCBzbWFza09wdGlvbnMsIG9wZXJhdG9yTGlzdCwgdGFzaywgc3RhdGVNYW5hZ2VyLnN0YXRlLmNsb25lKCksIGxvY2FsQ29sb3JTcGFjZUNhY2hlKTtcbiAgfVxuXG4gIGhhbmRsZVRyYW5zZmVyRnVuY3Rpb24odHIpIHtcbiAgICBsZXQgdHJhbnNmZXJBcnJheTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHRyKSkge1xuICAgICAgdHJhbnNmZXJBcnJheSA9IHRyO1xuICAgIH0gZWxzZSBpZiAoKDAsIF9mdW5jdGlvbi5pc1BERkZ1bmN0aW9uKSh0cikpIHtcbiAgICAgIHRyYW5zZmVyQXJyYXkgPSBbdHJdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCB0cmFuc2Zlck1hcHMgPSBbXTtcbiAgICBsZXQgbnVtRm5zID0gMCxcbiAgICAgICAgbnVtRWZmZWN0ZnVsRm5zID0gMDtcblxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdHJhbnNmZXJBcnJheSkge1xuICAgICAgY29uc3QgdHJhbnNmZXJPYmogPSB0aGlzLnhyZWYuZmV0Y2hJZlJlZihlbnRyeSk7XG4gICAgICBudW1GbnMrKztcblxuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHRyYW5zZmVyT2JqLCBcIklkZW50aXR5XCIpKSB7XG4gICAgICAgIHRyYW5zZmVyTWFwcy5wdXNoKG51bGwpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSBpZiAoISgwLCBfZnVuY3Rpb24uaXNQREZGdW5jdGlvbikodHJhbnNmZXJPYmopKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0cmFuc2ZlckZuID0gdGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LmNyZWF0ZSh0cmFuc2Zlck9iaik7XG5cbiAgICAgIGNvbnN0IHRyYW5zZmVyTWFwID0gbmV3IFVpbnQ4QXJyYXkoMjU2KSxcbiAgICAgICAgICAgIHRtcCA9IG5ldyBGbG9hdDMyQXJyYXkoMSk7XG5cbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgMjU2OyBqKyspIHtcbiAgICAgICAgdG1wWzBdID0gaiAvIDI1NTtcbiAgICAgICAgdHJhbnNmZXJGbih0bXAsIDAsIHRtcCwgMCk7XG4gICAgICAgIHRyYW5zZmVyTWFwW2pdID0gdG1wWzBdICogMjU1IHwgMDtcbiAgICAgIH1cblxuICAgICAgdHJhbnNmZXJNYXBzLnB1c2godHJhbnNmZXJNYXApO1xuICAgICAgbnVtRWZmZWN0ZnVsRm5zKys7XG4gICAgfVxuXG4gICAgaWYgKCEobnVtRm5zID09PSAxIHx8IG51bUZucyA9PT0gNCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChudW1FZmZlY3RmdWxGbnMgPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0cmFuc2Zlck1hcHM7XG4gIH1cblxuICBoYW5kbGVUaWxpbmdUeXBlKGZuLCBjb2xvciwgcmVzb3VyY2VzLCBwYXR0ZXJuLCBwYXR0ZXJuRGljdCwgb3BlcmF0b3JMaXN0LCB0YXNrLCBsb2NhbFRpbGluZ1BhdHRlcm5DYWNoZSkge1xuICAgIGNvbnN0IHRpbGluZ09wTGlzdCA9IG5ldyBfb3BlcmF0b3JfbGlzdC5PcGVyYXRvckxpc3QoKTtcblxuICAgIGNvbnN0IHBhdHRlcm5SZXNvdXJjZXMgPSBfcHJpbWl0aXZlcy5EaWN0Lm1lcmdlKHtcbiAgICAgIHhyZWY6IHRoaXMueHJlZixcbiAgICAgIGRpY3RBcnJheTogW3BhdHRlcm5EaWN0LmdldChcIlJlc291cmNlc1wiKSwgcmVzb3VyY2VzXVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0T3BlcmF0b3JMaXN0KHtcbiAgICAgIHN0cmVhbTogcGF0dGVybixcbiAgICAgIHRhc2ssXG4gICAgICByZXNvdXJjZXM6IHBhdHRlcm5SZXNvdXJjZXMsXG4gICAgICBvcGVyYXRvckxpc3Q6IHRpbGluZ09wTGlzdFxuICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgb3BlcmF0b3JMaXN0SVIgPSB0aWxpbmdPcExpc3QuZ2V0SVIoKTtcbiAgICAgIGNvbnN0IHRpbGluZ1BhdHRlcm5JUiA9ICgwLCBfcGF0dGVybi5nZXRUaWxpbmdQYXR0ZXJuSVIpKG9wZXJhdG9yTGlzdElSLCBwYXR0ZXJuRGljdCwgY29sb3IpO1xuICAgICAgb3BlcmF0b3JMaXN0LmFkZERlcGVuZGVuY2llcyh0aWxpbmdPcExpc3QuZGVwZW5kZW5jaWVzKTtcbiAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChmbiwgdGlsaW5nUGF0dGVybklSKTtcblxuICAgICAgaWYgKHBhdHRlcm5EaWN0Lm9iaklkKSB7XG4gICAgICAgIGxvY2FsVGlsaW5nUGF0dGVybkNhY2hlLnNldChudWxsLCBwYXR0ZXJuRGljdC5vYmpJZCwge1xuICAgICAgICAgIG9wZXJhdG9yTGlzdElSLFxuICAgICAgICAgIGRpY3Q6IHBhdHRlcm5EaWN0XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pLmNhdGNoKHJlYXNvbiA9PiB7XG4gICAgICBpZiAocmVhc29uIGluc3RhbmNlb2YgX3V0aWwuQWJvcnRFeGNlcHRpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycykge1xuICAgICAgICB0aGlzLmhhbmRsZXIuc2VuZChcIlVuc3VwcG9ydGVkRmVhdHVyZVwiLCB7XG4gICAgICAgICAgZmVhdHVyZUlkOiBfdXRpbC5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvclRpbGluZ1BhdHRlcm5cbiAgICAgICAgfSk7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShgaGFuZGxlVGlsaW5nVHlwZSAtIGlnbm9yaW5nIHBhdHRlcm46IFwiJHtyZWFzb259XCIuYCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgcmVhc29uO1xuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlU2V0Rm9udChyZXNvdXJjZXMsIGZvbnRBcmdzLCBmb250UmVmLCBvcGVyYXRvckxpc3QsIHRhc2ssIHN0YXRlLCBmYWxsYmFja0ZvbnREaWN0ID0gbnVsbCwgY3NzRm9udEluZm8gPSBudWxsKSB7XG4gICAgY29uc3QgZm9udE5hbWUgPSBmb250QXJncyAmJiBmb250QXJnc1swXSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLk5hbWUgPyBmb250QXJnc1swXS5uYW1lIDogbnVsbDtcbiAgICByZXR1cm4gdGhpcy5sb2FkRm9udChmb250TmFtZSwgZm9udFJlZiwgcmVzb3VyY2VzLCBmYWxsYmFja0ZvbnREaWN0LCBjc3NGb250SW5mbykudGhlbih0cmFuc2xhdGVkID0+IHtcbiAgICAgIGlmICghdHJhbnNsYXRlZC5mb250LmlzVHlwZTNGb250KSB7XG4gICAgICAgIHJldHVybiB0cmFuc2xhdGVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJhbnNsYXRlZC5sb2FkVHlwZTNEYXRhKHRoaXMsIHJlc291cmNlcywgdGFzaykudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIG9wZXJhdG9yTGlzdC5hZGREZXBlbmRlbmNpZXModHJhbnNsYXRlZC50eXBlM0RlcGVuZGVuY2llcyk7XG4gICAgICAgIHJldHVybiB0cmFuc2xhdGVkO1xuICAgICAgfSkuY2F0Y2gocmVhc29uID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVyLnNlbmQoXCJVbnN1cHBvcnRlZEZlYXR1cmVcIiwge1xuICAgICAgICAgIGZlYXR1cmVJZDogX3V0aWwuVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JGb250TG9hZFR5cGUzXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3IFRyYW5zbGF0ZWRGb250KHtcbiAgICAgICAgICBsb2FkZWROYW1lOiBcImdfZm9udF9lcnJvclwiLFxuICAgICAgICAgIGZvbnQ6IG5ldyBfZm9udHMuRXJyb3JGb250KGBUeXBlMyBmb250IGxvYWQgZXJyb3I6ICR7cmVhc29ufWApLFxuICAgICAgICAgIGRpY3Q6IHRyYW5zbGF0ZWQuZm9udCxcbiAgICAgICAgICBldmFsdWF0b3JPcHRpb25zOiB0aGlzLm9wdGlvbnNcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KS50aGVuKHRyYW5zbGF0ZWQgPT4ge1xuICAgICAgc3RhdGUuZm9udCA9IHRyYW5zbGF0ZWQuZm9udDtcbiAgICAgIHRyYW5zbGF0ZWQuc2VuZCh0aGlzLmhhbmRsZXIpO1xuICAgICAgcmV0dXJuIHRyYW5zbGF0ZWQubG9hZGVkTmFtZTtcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZVRleHQoY2hhcnMsIHN0YXRlKSB7XG4gICAgY29uc3QgZm9udCA9IHN0YXRlLmZvbnQ7XG4gICAgY29uc3QgZ2x5cGhzID0gZm9udC5jaGFyc1RvR2x5cGhzKGNoYXJzKTtcblxuICAgIGlmIChmb250LmRhdGEpIHtcbiAgICAgIGNvbnN0IGlzQWRkVG9QYXRoU2V0ID0gISEoc3RhdGUudGV4dFJlbmRlcmluZ01vZGUgJiBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5BRERfVE9fUEFUSF9GTEFHKTtcblxuICAgICAgaWYgKGlzQWRkVG9QYXRoU2V0IHx8IHN0YXRlLmZpbGxDb2xvclNwYWNlLm5hbWUgPT09IFwiUGF0dGVyblwiIHx8IGZvbnQuZGlzYWJsZUZvbnRGYWNlIHx8IHRoaXMub3B0aW9ucy5kaXNhYmxlRm9udEZhY2UpIHtcbiAgICAgICAgUGFydGlhbEV2YWx1YXRvci5idWlsZEZvbnRQYXRocyhmb250LCBnbHlwaHMsIHRoaXMuaGFuZGxlciwgdGhpcy5vcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZ2x5cGhzO1xuICB9XG5cbiAgZW5zdXJlU3RhdGVGb250KHN0YXRlKSB7XG4gICAgaWYgKHN0YXRlLmZvbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZWFzb24gPSBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJNaXNzaW5nIHNldEZvbnQgKFRmKSBvcGVyYXRvciBiZWZvcmUgdGV4dCByZW5kZXJpbmcgb3BlcmF0b3IuXCIpO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpIHtcbiAgICAgIHRoaXMuaGFuZGxlci5zZW5kKFwiVW5zdXBwb3J0ZWRGZWF0dXJlXCIsIHtcbiAgICAgICAgZmVhdHVyZUlkOiBfdXRpbC5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvckZvbnRTdGF0ZVxuICAgICAgfSk7XG4gICAgICAoMCwgX3V0aWwud2FybikoYGVuc3VyZVN0YXRlRm9udDogXCIke3JlYXNvbn1cIi5gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aHJvdyByZWFzb247XG4gIH1cblxuICBhc3luYyBzZXRHU3RhdGUoe1xuICAgIHJlc291cmNlcyxcbiAgICBnU3RhdGUsXG4gICAgb3BlcmF0b3JMaXN0LFxuICAgIGNhY2hlS2V5LFxuICAgIHRhc2ssXG4gICAgc3RhdGVNYW5hZ2VyLFxuICAgIGxvY2FsR1N0YXRlQ2FjaGUsXG4gICAgbG9jYWxDb2xvclNwYWNlQ2FjaGVcbiAgfSkge1xuICAgIGNvbnN0IGdTdGF0ZVJlZiA9IGdTdGF0ZS5vYmpJZDtcbiAgICBsZXQgaXNTaW1wbGVHU3RhdGUgPSB0cnVlO1xuICAgIGNvbnN0IGdTdGF0ZU9iaiA9IFtdO1xuICAgIGNvbnN0IGdTdGF0ZUtleXMgPSBnU3RhdGUuZ2V0S2V5cygpO1xuICAgIGxldCBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBnU3RhdGVLZXlzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGNvbnN0IGtleSA9IGdTdGF0ZUtleXNbaV07XG4gICAgICBjb25zdCB2YWx1ZSA9IGdTdGF0ZS5nZXQoa2V5KTtcblxuICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgY2FzZSBcIlR5cGVcIjpcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiTFdcIjpcbiAgICAgICAgY2FzZSBcIkxDXCI6XG4gICAgICAgIGNhc2UgXCJMSlwiOlxuICAgICAgICBjYXNlIFwiTUxcIjpcbiAgICAgICAgY2FzZSBcIkRcIjpcbiAgICAgICAgY2FzZSBcIlJJXCI6XG4gICAgICAgIGNhc2UgXCJGTFwiOlxuICAgICAgICBjYXNlIFwiQ0FcIjpcbiAgICAgICAgY2FzZSBcImNhXCI6XG4gICAgICAgICAgZ1N0YXRlT2JqLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiRm9udFwiOlxuICAgICAgICAgIGlzU2ltcGxlR1N0YXRlID0gZmFsc2U7XG4gICAgICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVTZXRGb250KHJlc291cmNlcywgbnVsbCwgdmFsdWVbMF0sIG9wZXJhdG9yTGlzdCwgdGFzaywgc3RhdGVNYW5hZ2VyLnN0YXRlKS50aGVuKGZ1bmN0aW9uIChsb2FkZWROYW1lKSB7XG4gICAgICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGREZXBlbmRlbmN5KGxvYWRlZE5hbWUpO1xuICAgICAgICAgICAgICBnU3RhdGVPYmoucHVzaChba2V5LCBbbG9hZGVkTmFtZSwgdmFsdWVbMV1dXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiQk1cIjpcbiAgICAgICAgICBnU3RhdGVPYmoucHVzaChba2V5LCBub3JtYWxpemVCbGVuZE1vZGUodmFsdWUpXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIlNNYXNrXCI6XG4gICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHZhbHVlLCBcIk5vbmVcIikpIHtcbiAgICAgICAgICAgIGdTdGF0ZU9iai5wdXNoKFtrZXksIGZhbHNlXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkodmFsdWUpKSB7XG4gICAgICAgICAgICBpc1NpbXBsZUdTdGF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZVNNYXNrKHZhbHVlLCByZXNvdXJjZXMsIG9wZXJhdG9yTGlzdCwgdGFzaywgc3RhdGVNYW5hZ2VyLCBsb2NhbENvbG9yU3BhY2VDYWNoZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGdTdGF0ZU9iai5wdXNoKFtrZXksIHRydWVdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiVW5zdXBwb3J0ZWQgU01hc2sgdHlwZVwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiVFJcIjpcbiAgICAgICAgICBjb25zdCB0cmFuc2Zlck1hcHMgPSB0aGlzLmhhbmRsZVRyYW5zZmVyRnVuY3Rpb24odmFsdWUpO1xuICAgICAgICAgIGdTdGF0ZU9iai5wdXNoKFtrZXksIHRyYW5zZmVyTWFwc10pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJPUFwiOlxuICAgICAgICBjYXNlIFwib3BcIjpcbiAgICAgICAgY2FzZSBcIk9QTVwiOlxuICAgICAgICBjYXNlIFwiQkdcIjpcbiAgICAgICAgY2FzZSBcIkJHMlwiOlxuICAgICAgICBjYXNlIFwiVUNSXCI6XG4gICAgICAgIGNhc2UgXCJVQ1IyXCI6XG4gICAgICAgIGNhc2UgXCJUUjJcIjpcbiAgICAgICAgY2FzZSBcIkhUXCI6XG4gICAgICAgIGNhc2UgXCJTTVwiOlxuICAgICAgICBjYXNlIFwiU0FcIjpcbiAgICAgICAgY2FzZSBcIkFJU1wiOlxuICAgICAgICBjYXNlIFwiVEtcIjpcbiAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoXCJncmFwaGljIHN0YXRlIG9wZXJhdG9yIFwiICsga2V5KTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShcIlVua25vd24gZ3JhcGhpYyBzdGF0ZSBvcGVyYXRvciBcIiArIGtleSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoZ1N0YXRlT2JqLmxlbmd0aCA+IDApIHtcbiAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5zZXRHU3RhdGUsIFtnU3RhdGVPYmpdKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzU2ltcGxlR1N0YXRlKSB7XG4gICAgICAgIGxvY2FsR1N0YXRlQ2FjaGUuc2V0KGNhY2hlS2V5LCBnU3RhdGVSZWYsIGdTdGF0ZU9iaik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBsb2FkRm9udChmb250TmFtZSwgZm9udCwgcmVzb3VyY2VzLCBmYWxsYmFja0ZvbnREaWN0ID0gbnVsbCwgY3NzRm9udEluZm8gPSBudWxsKSB7XG4gICAgY29uc3QgZXJyb3JGb250ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBUcmFuc2xhdGVkRm9udCh7XG4gICAgICAgIGxvYWRlZE5hbWU6IFwiZ19mb250X2Vycm9yXCIsXG4gICAgICAgIGZvbnQ6IG5ldyBfZm9udHMuRXJyb3JGb250KGBGb250IFwiJHtmb250TmFtZX1cIiBpcyBub3QgYXZhaWxhYmxlLmApLFxuICAgICAgICBkaWN0OiBmb250LFxuICAgICAgICBldmFsdWF0b3JPcHRpb25zOiB0aGlzLm9wdGlvbnNcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjb25zdCB4cmVmID0gdGhpcy54cmVmO1xuICAgIGxldCBmb250UmVmO1xuXG4gICAgaWYgKGZvbnQpIHtcbiAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzUmVmKShmb250KSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ1RoZSBcImZvbnRcIiBvYmplY3Qgc2hvdWxkIGJlIGEgcmVmZXJlbmNlLicpO1xuICAgICAgfVxuXG4gICAgICBmb250UmVmID0gZm9udDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZm9udFJlcyA9IHJlc291cmNlcy5nZXQoXCJGb250XCIpO1xuXG4gICAgICBpZiAoZm9udFJlcykge1xuICAgICAgICBmb250UmVmID0gZm9udFJlcy5nZXRSYXcoZm9udE5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghZm9udFJlZikge1xuICAgICAgY29uc3QgcGFydGlhbE1zZyA9IGBGb250IFwiJHtmb250TmFtZSB8fCBmb250ICYmIGZvbnQudG9TdHJpbmcoKX1cIiBpcyBub3QgYXZhaWxhYmxlYDtcblxuICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzICYmICF0aGlzLnBhcnNpbmdUeXBlM0ZvbnQpIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKGAke3BhcnRpYWxNc2d9LmApO1xuICAgICAgICByZXR1cm4gZXJyb3JGb250KCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaGFuZGxlci5zZW5kKFwiVW5zdXBwb3J0ZWRGZWF0dXJlXCIsIHtcbiAgICAgICAgZmVhdHVyZUlkOiBfdXRpbC5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvckZvbnRNaXNzaW5nXG4gICAgICB9KTtcbiAgICAgICgwLCBfdXRpbC53YXJuKShgJHtwYXJ0aWFsTXNnfSAtLSBhdHRlbXB0aW5nIHRvIGZhbGxiYWNrIHRvIGEgZGVmYXVsdCBmb250LmApO1xuXG4gICAgICBpZiAoZmFsbGJhY2tGb250RGljdCkge1xuICAgICAgICBmb250UmVmID0gZmFsbGJhY2tGb250RGljdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvbnRSZWYgPSBQYXJ0aWFsRXZhbHVhdG9yLmZhbGxiYWNrRm9udERpY3Q7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZm9udENhY2hlLmhhcyhmb250UmVmKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9udENhY2hlLmdldChmb250UmVmKTtcbiAgICB9XG5cbiAgICBmb250ID0geHJlZi5mZXRjaElmUmVmKGZvbnRSZWYpO1xuXG4gICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShmb250KSkge1xuICAgICAgcmV0dXJuIGVycm9yRm9udCgpO1xuICAgIH1cblxuICAgIGlmIChmb250LmNhY2hlS2V5ICYmIHRoaXMuZm9udENhY2hlLmhhcyhmb250LmNhY2hlS2V5KSkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9udENhY2hlLmdldChmb250LmNhY2hlS2V5KTtcbiAgICB9XG5cbiAgICBjb25zdCBmb250Q2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICBsZXQgcHJlRXZhbHVhdGVkRm9udDtcblxuICAgIHRyeSB7XG4gICAgICBwcmVFdmFsdWF0ZWRGb250ID0gdGhpcy5wcmVFdmFsdWF0ZUZvbnQoZm9udCk7XG4gICAgICBwcmVFdmFsdWF0ZWRGb250LmNzc0ZvbnRJbmZvID0gY3NzRm9udEluZm87XG4gICAgfSBjYXRjaCAocmVhc29uKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoYGxvYWRGb250IC0gcHJlRXZhbHVhdGVGb250IGZhaWxlZDogXCIke3JlYXNvbn1cIi5gKTtcbiAgICAgIHJldHVybiBlcnJvckZvbnQoKTtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBkZXNjcmlwdG9yLFxuICAgICAgaGFzaFxuICAgIH0gPSBwcmVFdmFsdWF0ZWRGb250O1xuICAgIGNvbnN0IGZvbnRSZWZJc1JlZiA9ICgwLCBfcHJpbWl0aXZlcy5pc1JlZikoZm9udFJlZik7XG4gICAgbGV0IGZvbnRJRDtcblxuICAgIGlmIChmb250UmVmSXNSZWYpIHtcbiAgICAgIGZvbnRJRCA9IGBmJHtmb250UmVmLnRvU3RyaW5nKCl9YDtcbiAgICB9XG5cbiAgICBpZiAoaGFzaCAmJiAoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShkZXNjcmlwdG9yKSkge1xuICAgICAgaWYgKCFkZXNjcmlwdG9yLmZvbnRBbGlhc2VzKSB7XG4gICAgICAgIGRlc2NyaXB0b3IuZm9udEFsaWFzZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmb250QWxpYXNlcyA9IGRlc2NyaXB0b3IuZm9udEFsaWFzZXM7XG5cbiAgICAgIGlmIChmb250QWxpYXNlc1toYXNoXSkge1xuICAgICAgICBjb25zdCBhbGlhc0ZvbnRSZWYgPSBmb250QWxpYXNlc1toYXNoXS5hbGlhc1JlZjtcblxuICAgICAgICBpZiAoZm9udFJlZklzUmVmICYmIGFsaWFzRm9udFJlZiAmJiB0aGlzLmZvbnRDYWNoZS5oYXMoYWxpYXNGb250UmVmKSkge1xuICAgICAgICAgIHRoaXMuZm9udENhY2hlLnB1dEFsaWFzKGZvbnRSZWYsIGFsaWFzRm9udFJlZik7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZm9udENhY2hlLmdldChmb250UmVmKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9udEFsaWFzZXNbaGFzaF0gPSB7XG4gICAgICAgICAgZm9udElEOiB0aGlzLmlkRmFjdG9yeS5jcmVhdGVGb250SWQoKVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9udFJlZklzUmVmKSB7XG4gICAgICAgIGZvbnRBbGlhc2VzW2hhc2hdLmFsaWFzUmVmID0gZm9udFJlZjtcbiAgICAgIH1cblxuICAgICAgZm9udElEID0gZm9udEFsaWFzZXNbaGFzaF0uZm9udElEO1xuICAgIH1cblxuICAgIGlmIChmb250UmVmSXNSZWYpIHtcbiAgICAgIHRoaXMuZm9udENhY2hlLnB1dChmb250UmVmLCBmb250Q2FwYWJpbGl0eS5wcm9taXNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFmb250SUQpIHtcbiAgICAgICAgZm9udElEID0gdGhpcy5pZEZhY3RvcnkuY3JlYXRlRm9udElkKCk7XG4gICAgICB9XG5cbiAgICAgIGZvbnQuY2FjaGVLZXkgPSBgY2FjaGVLZXlfJHtmb250SUR9YDtcbiAgICAgIHRoaXMuZm9udENhY2hlLnB1dChmb250LmNhY2hlS2V5LCBmb250Q2FwYWJpbGl0eS5wcm9taXNlKTtcbiAgICB9XG5cbiAgICAoMCwgX3V0aWwuYXNzZXJ0KShmb250SUQgJiYgZm9udElELnN0YXJ0c1dpdGgoXCJmXCIpLCAnVGhlIFwiZm9udElEXCIgbXVzdCBiZSAoY29ycmVjdGx5KSBkZWZpbmVkLicpO1xuICAgIGZvbnQubG9hZGVkTmFtZSA9IGAke3RoaXMuaWRGYWN0b3J5LmdldERvY0lkKCl9XyR7Zm9udElEfWA7XG4gICAgdGhpcy50cmFuc2xhdGVGb250KHByZUV2YWx1YXRlZEZvbnQpLnRoZW4odHJhbnNsYXRlZEZvbnQgPT4ge1xuICAgICAgaWYgKHRyYW5zbGF0ZWRGb250LmZvbnRUeXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgeHJlZi5zdGF0cy5hZGRGb250VHlwZSh0cmFuc2xhdGVkRm9udC5mb250VHlwZSk7XG4gICAgICB9XG5cbiAgICAgIGZvbnRDYXBhYmlsaXR5LnJlc29sdmUobmV3IFRyYW5zbGF0ZWRGb250KHtcbiAgICAgICAgbG9hZGVkTmFtZTogZm9udC5sb2FkZWROYW1lLFxuICAgICAgICBmb250OiB0cmFuc2xhdGVkRm9udCxcbiAgICAgICAgZGljdDogZm9udCxcbiAgICAgICAgZXZhbHVhdG9yT3B0aW9uczogdGhpcy5vcHRpb25zXG4gICAgICB9KSk7XG4gICAgfSkuY2F0Y2gocmVhc29uID0+IHtcbiAgICAgIHRoaXMuaGFuZGxlci5zZW5kKFwiVW5zdXBwb3J0ZWRGZWF0dXJlXCIsIHtcbiAgICAgICAgZmVhdHVyZUlkOiBfdXRpbC5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvckZvbnRUcmFuc2xhdGVcbiAgICAgIH0pO1xuICAgICAgKDAsIF91dGlsLndhcm4pKGBsb2FkRm9udCAtIHRyYW5zbGF0ZUZvbnQgZmFpbGVkOiBcIiR7cmVhc29ufVwiLmApO1xuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBmb250RmlsZTMgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZ2V0KFwiRm9udEZpbGUzXCIpO1xuICAgICAgICBjb25zdCBzdWJ0eXBlID0gZm9udEZpbGUzICYmIGZvbnRGaWxlMy5nZXQoXCJTdWJ0eXBlXCIpO1xuICAgICAgICBjb25zdCBmb250VHlwZSA9ICgwLCBfZm9udHNfdXRpbHMuZ2V0Rm9udFR5cGUpKHByZUV2YWx1YXRlZEZvbnQudHlwZSwgc3VidHlwZSAmJiBzdWJ0eXBlLm5hbWUpO1xuXG4gICAgICAgIGlmIChmb250VHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgeHJlZi5zdGF0cy5hZGRGb250VHlwZShmb250VHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGV4KSB7fVxuXG4gICAgICBmb250Q2FwYWJpbGl0eS5yZXNvbHZlKG5ldyBUcmFuc2xhdGVkRm9udCh7XG4gICAgICAgIGxvYWRlZE5hbWU6IGZvbnQubG9hZGVkTmFtZSxcbiAgICAgICAgZm9udDogbmV3IF9mb250cy5FcnJvckZvbnQocmVhc29uIGluc3RhbmNlb2YgRXJyb3IgPyByZWFzb24ubWVzc2FnZSA6IHJlYXNvbiksXG4gICAgICAgIGRpY3Q6IGZvbnQsXG4gICAgICAgIGV2YWx1YXRvck9wdGlvbnM6IHRoaXMub3B0aW9uc1xuICAgICAgfSkpO1xuICAgIH0pO1xuICAgIHJldHVybiBmb250Q2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG5cbiAgYnVpbGRQYXRoKG9wZXJhdG9yTGlzdCwgZm4sIGFyZ3MsIHBhcnNpbmdUZXh0ID0gZmFsc2UpIHtcbiAgICBjb25zdCBsYXN0SW5kZXggPSBvcGVyYXRvckxpc3QubGVuZ3RoIC0gMTtcblxuICAgIGlmICghYXJncykge1xuICAgICAgYXJncyA9IFtdO1xuICAgIH1cblxuICAgIGlmIChsYXN0SW5kZXggPCAwIHx8IG9wZXJhdG9yTGlzdC5mbkFycmF5W2xhc3RJbmRleF0gIT09IF91dGlsLk9QUy5jb25zdHJ1Y3RQYXRoKSB7XG4gICAgICBpZiAocGFyc2luZ1RleHQpIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKGBFbmNvdW50ZXJlZCBwYXRoIG9wZXJhdG9yIFwiJHtmbn1cIiBpbnNpZGUgb2YgYSB0ZXh0IG9iamVjdC5gKTtcbiAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5zYXZlLCBudWxsKTtcbiAgICAgIH1cblxuICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5jb25zdHJ1Y3RQYXRoLCBbW2ZuXSwgYXJnc10pO1xuXG4gICAgICBpZiAocGFyc2luZ1RleHQpIHtcbiAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5yZXN0b3JlLCBudWxsKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgb3BBcmdzID0gb3BlcmF0b3JMaXN0LmFyZ3NBcnJheVtsYXN0SW5kZXhdO1xuICAgICAgb3BBcmdzWzBdLnB1c2goZm4pO1xuICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkob3BBcmdzWzFdLCBhcmdzKTtcbiAgICB9XG4gIH1cblxuICBwYXJzZUNvbG9yU3BhY2Uoe1xuICAgIGNzLFxuICAgIHJlc291cmNlcyxcbiAgICBsb2NhbENvbG9yU3BhY2VDYWNoZVxuICB9KSB7XG4gICAgcmV0dXJuIF9jb2xvcnNwYWNlLkNvbG9yU3BhY2UucGFyc2VBc3luYyh7XG4gICAgICBjcyxcbiAgICAgIHhyZWY6IHRoaXMueHJlZixcbiAgICAgIHJlc291cmNlcyxcbiAgICAgIHBkZkZ1bmN0aW9uRmFjdG9yeTogdGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LFxuICAgICAgbG9jYWxDb2xvclNwYWNlQ2FjaGVcbiAgICB9KS5jYXRjaChyZWFzb24gPT4ge1xuICAgICAgaWYgKHJlYXNvbiBpbnN0YW5jZW9mIF91dGlsLkFib3J0RXhjZXB0aW9uKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycykge1xuICAgICAgICB0aGlzLmhhbmRsZXIuc2VuZChcIlVuc3VwcG9ydGVkRmVhdHVyZVwiLCB7XG4gICAgICAgICAgZmVhdHVyZUlkOiBfdXRpbC5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvckNvbG9yU3BhY2VcbiAgICAgICAgfSk7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShgcGFyc2VDb2xvclNwYWNlIC0gaWdub3JpbmcgQ29sb3JTcGFjZTogXCIke3JlYXNvbn1cIi5gKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHRocm93IHJlYXNvbjtcbiAgICB9KTtcbiAgfVxuXG4gIHBhcnNlU2hhZGluZyh7XG4gICAgc2hhZGluZyxcbiAgICByZXNvdXJjZXMsXG4gICAgbG9jYWxDb2xvclNwYWNlQ2FjaGUsXG4gICAgbG9jYWxTaGFkaW5nUGF0dGVybkNhY2hlXG4gIH0pIHtcbiAgICBsZXQgaWQgPSBsb2NhbFNoYWRpbmdQYXR0ZXJuQ2FjaGUuZ2V0KHNoYWRpbmcpO1xuXG4gICAgaWYgKCFpZCkge1xuICAgICAgdmFyIHNoYWRpbmdGaWxsID0gX3BhdHRlcm4uUGF0dGVybi5wYXJzZVNoYWRpbmcoc2hhZGluZywgdGhpcy54cmVmLCByZXNvdXJjZXMsIHRoaXMuaGFuZGxlciwgdGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LCBsb2NhbENvbG9yU3BhY2VDYWNoZSk7XG5cbiAgICAgIGNvbnN0IHBhdHRlcm5JUiA9IHNoYWRpbmdGaWxsLmdldElSKCk7XG4gICAgICBpZCA9IGBwYXR0ZXJuXyR7dGhpcy5pZEZhY3RvcnkuY3JlYXRlT2JqSWQoKX1gO1xuICAgICAgbG9jYWxTaGFkaW5nUGF0dGVybkNhY2hlLnNldChzaGFkaW5nLCBpZCk7XG4gICAgICB0aGlzLmhhbmRsZXIuc2VuZChcIm9ialwiLCBbaWQsIHRoaXMucGFnZUluZGV4LCBcIlBhdHRlcm5cIiwgcGF0dGVybklSXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGlkO1xuICB9XG5cbiAgaGFuZGxlQ29sb3JOKG9wZXJhdG9yTGlzdCwgZm4sIGFyZ3MsIGNzLCBwYXR0ZXJucywgcmVzb3VyY2VzLCB0YXNrLCBsb2NhbENvbG9yU3BhY2VDYWNoZSwgbG9jYWxUaWxpbmdQYXR0ZXJuQ2FjaGUsIGxvY2FsU2hhZGluZ1BhdHRlcm5DYWNoZSkge1xuICAgIGNvbnN0IHBhdHRlcm5OYW1lID0gYXJncy5wb3AoKTtcblxuICAgIGlmIChwYXR0ZXJuTmFtZSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLk5hbWUpIHtcbiAgICAgIGNvbnN0IHJhd1BhdHRlcm4gPSBwYXR0ZXJucy5nZXRSYXcocGF0dGVybk5hbWUubmFtZSk7XG4gICAgICBjb25zdCBsb2NhbFRpbGluZ1BhdHRlcm4gPSByYXdQYXR0ZXJuIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuUmVmICYmIGxvY2FsVGlsaW5nUGF0dGVybkNhY2hlLmdldEJ5UmVmKHJhd1BhdHRlcm4pO1xuXG4gICAgICBpZiAobG9jYWxUaWxpbmdQYXR0ZXJuKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgY29sb3IgPSBjcy5iYXNlID8gY3MuYmFzZS5nZXRSZ2IoYXJncywgMCkgOiBudWxsO1xuICAgICAgICAgIGNvbnN0IHRpbGluZ1BhdHRlcm5JUiA9ICgwLCBfcGF0dGVybi5nZXRUaWxpbmdQYXR0ZXJuSVIpKGxvY2FsVGlsaW5nUGF0dGVybi5vcGVyYXRvckxpc3RJUiwgbG9jYWxUaWxpbmdQYXR0ZXJuLmRpY3QsIGNvbG9yKTtcbiAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoZm4sIHRpbGluZ1BhdHRlcm5JUik7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHt9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhdHRlcm4gPSB0aGlzLnhyZWYuZmV0Y2hJZlJlZihyYXdQYXR0ZXJuKTtcblxuICAgICAgaWYgKHBhdHRlcm4pIHtcbiAgICAgICAgY29uc3QgZGljdCA9ICgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkocGF0dGVybikgPyBwYXR0ZXJuLmRpY3QgOiBwYXR0ZXJuO1xuICAgICAgICBjb25zdCB0eXBlTnVtID0gZGljdC5nZXQoXCJQYXR0ZXJuVHlwZVwiKTtcblxuICAgICAgICBpZiAodHlwZU51bSA9PT0gUGF0dGVyblR5cGUuVElMSU5HKSB7XG4gICAgICAgICAgY29uc3QgY29sb3IgPSBjcy5iYXNlID8gY3MuYmFzZS5nZXRSZ2IoYXJncywgMCkgOiBudWxsO1xuICAgICAgICAgIHJldHVybiB0aGlzLmhhbmRsZVRpbGluZ1R5cGUoZm4sIGNvbG9yLCByZXNvdXJjZXMsIHBhdHRlcm4sIGRpY3QsIG9wZXJhdG9yTGlzdCwgdGFzaywgbG9jYWxUaWxpbmdQYXR0ZXJuQ2FjaGUpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVOdW0gPT09IFBhdHRlcm5UeXBlLlNIQURJTkcpIHtcbiAgICAgICAgICBjb25zdCBzaGFkaW5nID0gZGljdC5nZXQoXCJTaGFkaW5nXCIpO1xuICAgICAgICAgIGNvbnN0IG1hdHJpeCA9IGRpY3QuZ2V0QXJyYXkoXCJNYXRyaXhcIik7XG4gICAgICAgICAgY29uc3Qgb2JqSWQgPSB0aGlzLnBhcnNlU2hhZGluZyh7XG4gICAgICAgICAgICBzaGFkaW5nLFxuICAgICAgICAgICAgcmVzb3VyY2VzLFxuICAgICAgICAgICAgbG9jYWxDb2xvclNwYWNlQ2FjaGUsXG4gICAgICAgICAgICBsb2NhbFNoYWRpbmdQYXR0ZXJuQ2FjaGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoZm4sIFtcIlNoYWRpbmdcIiwgb2JqSWQsIG1hdHJpeF0pO1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYFVua25vd24gUGF0dGVyblR5cGU6ICR7dHlwZU51bX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYFVua25vd24gUGF0dGVybk5hbWU6ICR7cGF0dGVybk5hbWV9YCk7XG4gIH1cblxuICBfcGFyc2VWaXNpYmlsaXR5RXhwcmVzc2lvbihhcnJheSwgbmVzdGluZ0NvdW50ZXIsIGN1cnJlbnRSZXN1bHQpIHtcbiAgICBjb25zdCBNQVhfTkVTVElORyA9IDEwO1xuXG4gICAgaWYgKCsrbmVzdGluZ0NvdW50ZXIgPiBNQVhfTkVTVElORykge1xuICAgICAgKDAsIF91dGlsLndhcm4pKFwiVmlzaWJpbGl0eSBleHByZXNzaW9uIGlzIHRvbyBkZWVwbHkgbmVzdGVkXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgICBjb25zdCBvcGVyYXRvciA9IHRoaXMueHJlZi5mZXRjaElmUmVmKGFycmF5WzBdKTtcblxuICAgIGlmIChsZW5ndGggPCAyIHx8ICEoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShvcGVyYXRvcikpIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShcIkludmFsaWQgdmlzaWJpbGl0eSBleHByZXNzaW9uXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN3aXRjaCAob3BlcmF0b3IubmFtZSkge1xuICAgICAgY2FzZSBcIkFuZFwiOlxuICAgICAgY2FzZSBcIk9yXCI6XG4gICAgICBjYXNlIFwiTm90XCI6XG4gICAgICAgIGN1cnJlbnRSZXN1bHQucHVzaChvcGVyYXRvci5uYW1lKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShgSW52YWxpZCBvcGVyYXRvciAke29wZXJhdG9yLm5hbWV9IGluIHZpc2liaWxpdHkgZXhwcmVzc2lvbmApO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcmF3ID0gYXJyYXlbaV07XG4gICAgICBjb25zdCBvYmplY3QgPSB0aGlzLnhyZWYuZmV0Y2hJZlJlZihyYXcpO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgICAgIGNvbnN0IG5lc3RlZFJlc3VsdCA9IFtdO1xuICAgICAgICBjdXJyZW50UmVzdWx0LnB1c2gobmVzdGVkUmVzdWx0KTtcblxuICAgICAgICB0aGlzLl9wYXJzZVZpc2liaWxpdHlFeHByZXNzaW9uKG9iamVjdCwgbmVzdGluZ0NvdW50ZXIsIG5lc3RlZFJlc3VsdCk7XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1JlZikocmF3KSkge1xuICAgICAgICBjdXJyZW50UmVzdWx0LnB1c2gocmF3LnRvU3RyaW5nKCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHBhcnNlTWFya2VkQ29udGVudFByb3BzKGNvbnRlbnRQcm9wZXJ0aWVzLCByZXNvdXJjZXMpIHtcbiAgICBsZXQgb3B0aW9uYWxDb250ZW50O1xuXG4gICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGNvbnRlbnRQcm9wZXJ0aWVzKSkge1xuICAgICAgY29uc3QgcHJvcGVydGllcyA9IHJlc291cmNlcy5nZXQoXCJQcm9wZXJ0aWVzXCIpO1xuICAgICAgb3B0aW9uYWxDb250ZW50ID0gcHJvcGVydGllcy5nZXQoY29udGVudFByb3BlcnRpZXMubmFtZSk7XG4gICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShjb250ZW50UHJvcGVydGllcykpIHtcbiAgICAgIG9wdGlvbmFsQ29udGVudCA9IGNvbnRlbnRQcm9wZXJ0aWVzO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJPcHRpb25hbCBjb250ZW50IHByb3BlcnRpZXMgbWFsZm9ybWVkLlwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb25hbENvbnRlbnRUeXBlID0gb3B0aW9uYWxDb250ZW50LmdldChcIlR5cGVcIikubmFtZTtcblxuICAgIGlmIChvcHRpb25hbENvbnRlbnRUeXBlID09PSBcIk9DR1wiKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBvcHRpb25hbENvbnRlbnRUeXBlLFxuICAgICAgICBpZDogb3B0aW9uYWxDb250ZW50Lm9iaklkXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAob3B0aW9uYWxDb250ZW50VHlwZSA9PT0gXCJPQ01EXCIpIHtcbiAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSBvcHRpb25hbENvbnRlbnQuZ2V0KFwiVkVcIik7XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGV4cHJlc3Npb24pKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gICAgICAgIHRoaXMuX3BhcnNlVmlzaWJpbGl0eUV4cHJlc3Npb24oZXhwcmVzc2lvbiwgMCwgcmVzdWx0KTtcblxuICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZTogXCJPQ01EXCIsXG4gICAgICAgICAgICBleHByZXNzaW9uOiByZXN1bHRcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9wdGlvbmFsQ29udGVudEdyb3VwcyA9IG9wdGlvbmFsQ29udGVudC5nZXQoXCJPQ0dzXCIpO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25hbENvbnRlbnRHcm91cHMpIHx8ICgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKG9wdGlvbmFsQ29udGVudEdyb3VwcykpIHtcbiAgICAgICAgY29uc3QgZ3JvdXBJZHMgPSBbXTtcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25hbENvbnRlbnRHcm91cHMpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBvY2cgb2Ygb3B0aW9uYWxDb250ZW50R3JvdXBzKSB7XG4gICAgICAgICAgICBncm91cElkcy5wdXNoKG9jZy50b1N0cmluZygpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZ3JvdXBJZHMucHVzaChvcHRpb25hbENvbnRlbnRHcm91cHMub2JqSWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiBvcHRpb25hbENvbnRlbnRUeXBlLFxuICAgICAgICAgIGlkczogZ3JvdXBJZHMsXG4gICAgICAgICAgcG9saWN5OiAoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShvcHRpb25hbENvbnRlbnQuZ2V0KFwiUFwiKSkgPyBvcHRpb25hbENvbnRlbnQuZ2V0KFwiUFwiKS5uYW1lIDogbnVsbCxcbiAgICAgICAgICBleHByZXNzaW9uOiBudWxsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1JlZikob3B0aW9uYWxDb250ZW50R3JvdXBzKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGU6IG9wdGlvbmFsQ29udGVudFR5cGUsXG4gICAgICAgICAgaWQ6IG9wdGlvbmFsQ29udGVudEdyb3Vwcy50b1N0cmluZygpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXRPcGVyYXRvckxpc3Qoe1xuICAgIHN0cmVhbSxcbiAgICB0YXNrLFxuICAgIHJlc291cmNlcyxcbiAgICBvcGVyYXRvckxpc3QsXG4gICAgaW5pdGlhbFN0YXRlID0gbnVsbCxcbiAgICBmYWxsYmFja0ZvbnREaWN0ID0gbnVsbFxuICB9KSB7XG4gICAgcmVzb3VyY2VzID0gcmVzb3VyY2VzIHx8IF9wcmltaXRpdmVzLkRpY3QuZW1wdHk7XG4gICAgaW5pdGlhbFN0YXRlID0gaW5pdGlhbFN0YXRlIHx8IG5ldyBFdmFsU3RhdGUoKTtcblxuICAgIGlmICghb3BlcmF0b3JMaXN0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2dldE9wZXJhdG9yTGlzdDogbWlzc2luZyBcIm9wZXJhdG9yTGlzdFwiIHBhcmFtZXRlcicpO1xuICAgIH1cblxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IHhyZWYgPSB0aGlzLnhyZWY7XG4gICAgbGV0IHBhcnNpbmdUZXh0ID0gZmFsc2U7XG4gICAgY29uc3QgbG9jYWxJbWFnZUNhY2hlID0gbmV3IF9pbWFnZV91dGlscy5Mb2NhbEltYWdlQ2FjaGUoKTtcbiAgICBjb25zdCBsb2NhbENvbG9yU3BhY2VDYWNoZSA9IG5ldyBfaW1hZ2VfdXRpbHMuTG9jYWxDb2xvclNwYWNlQ2FjaGUoKTtcbiAgICBjb25zdCBsb2NhbEdTdGF0ZUNhY2hlID0gbmV3IF9pbWFnZV91dGlscy5Mb2NhbEdTdGF0ZUNhY2hlKCk7XG4gICAgY29uc3QgbG9jYWxUaWxpbmdQYXR0ZXJuQ2FjaGUgPSBuZXcgX2ltYWdlX3V0aWxzLkxvY2FsVGlsaW5nUGF0dGVybkNhY2hlKCk7XG4gICAgY29uc3QgbG9jYWxTaGFkaW5nUGF0dGVybkNhY2hlID0gbmV3IE1hcCgpO1xuXG4gICAgY29uc3QgeG9ianMgPSByZXNvdXJjZXMuZ2V0KFwiWE9iamVjdFwiKSB8fCBfcHJpbWl0aXZlcy5EaWN0LmVtcHR5O1xuXG4gICAgY29uc3QgcGF0dGVybnMgPSByZXNvdXJjZXMuZ2V0KFwiUGF0dGVyblwiKSB8fCBfcHJpbWl0aXZlcy5EaWN0LmVtcHR5O1xuXG4gICAgY29uc3Qgc3RhdGVNYW5hZ2VyID0gbmV3IFN0YXRlTWFuYWdlcihpbml0aWFsU3RhdGUpO1xuICAgIGNvbnN0IHByZXByb2Nlc3NvciA9IG5ldyBFdmFsdWF0b3JQcmVwcm9jZXNzb3Ioc3RyZWFtLCB4cmVmLCBzdGF0ZU1hbmFnZXIpO1xuICAgIGNvbnN0IHRpbWVTbG90TWFuYWdlciA9IG5ldyBUaW1lU2xvdE1hbmFnZXIoKTtcblxuICAgIGZ1bmN0aW9uIGNsb3NlUGVuZGluZ1Jlc3RvcmVPUFMoYXJndW1lbnQpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHByZXByb2Nlc3Nvci5zYXZlZFN0YXRlc0RlcHRoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLnJlc3RvcmUsIFtdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUJvZHkocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBjb25zdCBuZXh0ID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgUHJvbWlzZS5hbGwoW3Byb21pc2UsIG9wZXJhdG9yTGlzdC5yZWFkeV0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBwcm9taXNlQm9keShyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICByZWplY3QoZXgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH07XG5cbiAgICAgIHRhc2suZW5zdXJlTm90VGVybWluYXRlZCgpO1xuICAgICAgdGltZVNsb3RNYW5hZ2VyLnJlc2V0KCk7XG4gICAgICBjb25zdCBvcGVyYXRpb24gPSB7fTtcbiAgICAgIGxldCBzdG9wLCBpLCBpaSwgY3MsIG5hbWUsIGlzVmFsaWROYW1lO1xuXG4gICAgICB3aGlsZSAoIShzdG9wID0gdGltZVNsb3RNYW5hZ2VyLmNoZWNrKCkpKSB7XG4gICAgICAgIG9wZXJhdGlvbi5hcmdzID0gbnVsbDtcblxuICAgICAgICBpZiAoIXByZXByb2Nlc3Nvci5yZWFkKG9wZXJhdGlvbikpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBhcmdzID0gb3BlcmF0aW9uLmFyZ3M7XG4gICAgICAgIGxldCBmbiA9IG9wZXJhdGlvbi5mbjtcblxuICAgICAgICBzd2l0Y2ggKGZuIHwgMCkge1xuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnBhaW50WE9iamVjdDpcbiAgICAgICAgICAgIGlzVmFsaWROYW1lID0gYXJnc1swXSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLk5hbWU7XG4gICAgICAgICAgICBuYW1lID0gYXJnc1swXS5uYW1lO1xuXG4gICAgICAgICAgICBpZiAoaXNWYWxpZE5hbWUpIHtcbiAgICAgICAgICAgICAgY29uc3QgbG9jYWxJbWFnZSA9IGxvY2FsSW1hZ2VDYWNoZS5nZXRCeU5hbWUobmFtZSk7XG5cbiAgICAgICAgICAgICAgaWYgKGxvY2FsSW1hZ2UpIHtcbiAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AobG9jYWxJbWFnZS5mbiwgbG9jYWxJbWFnZS5hcmdzKTtcbiAgICAgICAgICAgICAgICBhcmdzID0gbnVsbDtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBuZXh0KG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlWE9iamVjdCwgcmVqZWN0WE9iamVjdCkge1xuICAgICAgICAgICAgICBpZiAoIWlzVmFsaWROYW1lKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiWE9iamVjdCBtdXN0IGJlIHJlZmVycmVkIHRvIGJ5IG5hbWUuXCIpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgbGV0IHhvYmogPSB4b2Jqcy5nZXRSYXcobmFtZSk7XG5cbiAgICAgICAgICAgICAgaWYgKHhvYmogaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5SZWYpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsb2NhbEltYWdlID0gbG9jYWxJbWFnZUNhY2hlLmdldEJ5UmVmKHhvYmopO1xuXG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsSW1hZ2UpIHtcbiAgICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChsb2NhbEltYWdlLmZuLCBsb2NhbEltYWdlLmFyZ3MpO1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZVhPYmplY3QoKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBnbG9iYWxJbWFnZSA9IHNlbGYuZ2xvYmFsSW1hZ2VDYWNoZS5nZXREYXRhKHhvYmosIHNlbGYucGFnZUluZGV4KTtcblxuICAgICAgICAgICAgICAgIGlmIChnbG9iYWxJbWFnZSkge1xuICAgICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZERlcGVuZGVuY3koZ2xvYmFsSW1hZ2Uub2JqSWQpO1xuICAgICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKGdsb2JhbEltYWdlLmZuLCBnbG9iYWxJbWFnZS5hcmdzKTtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmVYT2JqZWN0KCk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgeG9iaiA9IHhyZWYuZmV0Y2goeG9iaik7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkoeG9iaikpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJYT2JqZWN0IHNob3VsZCBiZSBhIHN0cmVhbVwiKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSB4b2JqLmRpY3QuZ2V0KFwiU3VidHlwZVwiKTtcblxuICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHR5cGUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiWE9iamVjdCBzaG91bGQgaGF2ZSBhIE5hbWUgc3VidHlwZVwiKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0eXBlLm5hbWUgPT09IFwiRm9ybVwiKSB7XG4gICAgICAgICAgICAgICAgc3RhdGVNYW5hZ2VyLnNhdmUoKTtcbiAgICAgICAgICAgICAgICBzZWxmLmJ1aWxkRm9ybVhPYmplY3QocmVzb3VyY2VzLCB4b2JqLCBudWxsLCBvcGVyYXRvckxpc3QsIHRhc2ssIHN0YXRlTWFuYWdlci5zdGF0ZS5jbG9uZSgpLCBsb2NhbENvbG9yU3BhY2VDYWNoZSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICBzdGF0ZU1hbmFnZXIucmVzdG9yZSgpO1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZVhPYmplY3QoKTtcbiAgICAgICAgICAgICAgICB9LCByZWplY3RYT2JqZWN0KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZS5uYW1lID09PSBcIkltYWdlXCIpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmJ1aWxkUGFpbnRJbWFnZVhPYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzLFxuICAgICAgICAgICAgICAgICAgaW1hZ2U6IHhvYmosXG4gICAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3QsXG4gICAgICAgICAgICAgICAgICBjYWNoZUtleTogbmFtZSxcbiAgICAgICAgICAgICAgICAgIGxvY2FsSW1hZ2VDYWNoZSxcbiAgICAgICAgICAgICAgICAgIGxvY2FsQ29sb3JTcGFjZUNhY2hlXG4gICAgICAgICAgICAgICAgfSkudGhlbihyZXNvbHZlWE9iamVjdCwgcmVqZWN0WE9iamVjdCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUubmFtZSA9PT0gXCJQU1wiKSB7XG4gICAgICAgICAgICAgICAgKDAsIF91dGlsLmluZm8pKFwiSWdub3JlZCBYT2JqZWN0IHN1YnR5cGUgUFNcIik7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBVbmhhbmRsZWQgWE9iamVjdCBzdWJ0eXBlICR7dHlwZS5uYW1lfWApO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmVzb2x2ZVhPYmplY3QoKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICAgICAgaWYgKHJlYXNvbiBpbnN0YW5jZW9mIF91dGlsLkFib3J0RXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHNlbGYub3B0aW9ucy5pZ25vcmVFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZXIuc2VuZChcIlVuc3VwcG9ydGVkRmVhdHVyZVwiLCB7XG4gICAgICAgICAgICAgICAgICBmZWF0dXJlSWQ6IF91dGlsLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yWE9iamVjdFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgZ2V0T3BlcmF0b3JMaXN0IC0gaWdub3JpbmcgWE9iamVjdDogXCIke3JlYXNvbn1cIi5gKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aHJvdyByZWFzb247XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRGb250OlxuICAgICAgICAgICAgdmFyIGZvbnRTaXplID0gYXJnc1sxXTtcbiAgICAgICAgICAgIG5leHQoc2VsZi5oYW5kbGVTZXRGb250KHJlc291cmNlcywgYXJncywgbnVsbCwgb3BlcmF0b3JMaXN0LCB0YXNrLCBzdGF0ZU1hbmFnZXIuc3RhdGUsIGZhbGxiYWNrRm9udERpY3QpLnRoZW4oZnVuY3Rpb24gKGxvYWRlZE5hbWUpIHtcbiAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZERlcGVuZGVuY3kobG9hZGVkTmFtZSk7XG4gICAgICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChfdXRpbC5PUFMuc2V0Rm9udCwgW2xvYWRlZE5hbWUsIGZvbnRTaXplXSk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5iZWdpblRleHQ6XG4gICAgICAgICAgICBwYXJzaW5nVGV4dCA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmVuZFRleHQ6XG4gICAgICAgICAgICBwYXJzaW5nVGV4dCA9IGZhbHNlO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5lbmRJbmxpbmVJbWFnZTpcbiAgICAgICAgICAgIHZhciBjYWNoZUtleSA9IGFyZ3NbMF0uY2FjaGVLZXk7XG5cbiAgICAgICAgICAgIGlmIChjYWNoZUtleSkge1xuICAgICAgICAgICAgICBjb25zdCBsb2NhbEltYWdlID0gbG9jYWxJbWFnZUNhY2hlLmdldEJ5TmFtZShjYWNoZUtleSk7XG5cbiAgICAgICAgICAgICAgaWYgKGxvY2FsSW1hZ2UpIHtcbiAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AobG9jYWxJbWFnZS5mbiwgbG9jYWxJbWFnZS5hcmdzKTtcbiAgICAgICAgICAgICAgICBhcmdzID0gbnVsbDtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBuZXh0KHNlbGYuYnVpbGRQYWludEltYWdlWE9iamVjdCh7XG4gICAgICAgICAgICAgIHJlc291cmNlcyxcbiAgICAgICAgICAgICAgaW1hZ2U6IGFyZ3NbMF0sXG4gICAgICAgICAgICAgIGlzSW5saW5lOiB0cnVlLFxuICAgICAgICAgICAgICBvcGVyYXRvckxpc3QsXG4gICAgICAgICAgICAgIGNhY2hlS2V5LFxuICAgICAgICAgICAgICBsb2NhbEltYWdlQ2FjaGUsXG4gICAgICAgICAgICAgIGxvY2FsQ29sb3JTcGFjZUNhY2hlXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zaG93VGV4dDpcbiAgICAgICAgICAgIGlmICghc3RhdGVNYW5hZ2VyLnN0YXRlLmZvbnQpIHtcbiAgICAgICAgICAgICAgc2VsZi5lbnN1cmVTdGF0ZUZvbnQoc3RhdGVNYW5hZ2VyLnN0YXRlKTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFyZ3NbMF0gPSBzZWxmLmhhbmRsZVRleHQoYXJnc1swXSwgc3RhdGVNYW5hZ2VyLnN0YXRlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2hvd1NwYWNlZFRleHQ6XG4gICAgICAgICAgICBpZiAoIXN0YXRlTWFuYWdlci5zdGF0ZS5mb250KSB7XG4gICAgICAgICAgICAgIHNlbGYuZW5zdXJlU3RhdGVGb250KHN0YXRlTWFuYWdlci5zdGF0ZSk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgYXJyID0gYXJnc1swXTtcbiAgICAgICAgICAgIHZhciBjb21iaW5lZEdseXBocyA9IFtdO1xuICAgICAgICAgICAgdmFyIGFyckxlbmd0aCA9IGFyci5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgc3RhdGUgPSBzdGF0ZU1hbmFnZXIuc3RhdGU7XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcnJMZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICBjb25zdCBhcnJJdGVtID0gYXJyW2ldO1xuXG4gICAgICAgICAgICAgIGlmICgoMCwgX3V0aWwuaXNTdHJpbmcpKGFyckl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoY29tYmluZWRHbHlwaHMsIHNlbGYuaGFuZGxlVGV4dChhcnJJdGVtLCBzdGF0ZSkpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKCgwLCBfdXRpbC5pc051bSkoYXJySXRlbSkpIHtcbiAgICAgICAgICAgICAgICBjb21iaW5lZEdseXBocy5wdXNoKGFyckl0ZW0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFyZ3NbMF0gPSBjb21iaW5lZEdseXBocztcbiAgICAgICAgICAgIGZuID0gX3V0aWwuT1BTLnNob3dUZXh0O1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5uZXh0TGluZVNob3dUZXh0OlxuICAgICAgICAgICAgaWYgKCFzdGF0ZU1hbmFnZXIuc3RhdGUuZm9udCkge1xuICAgICAgICAgICAgICBzZWxmLmVuc3VyZVN0YXRlRm9udChzdGF0ZU1hbmFnZXIuc3RhdGUpO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5uZXh0TGluZSk7XG4gICAgICAgICAgICBhcmdzWzBdID0gc2VsZi5oYW5kbGVUZXh0KGFyZ3NbMF0sIHN0YXRlTWFuYWdlci5zdGF0ZSk7XG4gICAgICAgICAgICBmbiA9IF91dGlsLk9QUy5zaG93VGV4dDtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMubmV4dExpbmVTZXRTcGFjaW5nU2hvd1RleHQ6XG4gICAgICAgICAgICBpZiAoIXN0YXRlTWFuYWdlci5zdGF0ZS5mb250KSB7XG4gICAgICAgICAgICAgIHNlbGYuZW5zdXJlU3RhdGVGb250KHN0YXRlTWFuYWdlci5zdGF0ZSk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLm5leHRMaW5lKTtcbiAgICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChfdXRpbC5PUFMuc2V0V29yZFNwYWNpbmcsIFthcmdzLnNoaWZ0KCldKTtcbiAgICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChfdXRpbC5PUFMuc2V0Q2hhclNwYWNpbmcsIFthcmdzLnNoaWZ0KCldKTtcbiAgICAgICAgICAgIGFyZ3NbMF0gPSBzZWxmLmhhbmRsZVRleHQoYXJnc1swXSwgc3RhdGVNYW5hZ2VyLnN0YXRlKTtcbiAgICAgICAgICAgIGZuID0gX3V0aWwuT1BTLnNob3dUZXh0O1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRUZXh0UmVuZGVyaW5nTW9kZTpcbiAgICAgICAgICAgIHN0YXRlTWFuYWdlci5zdGF0ZS50ZXh0UmVuZGVyaW5nTW9kZSA9IGFyZ3NbMF07XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldEZpbGxDb2xvclNwYWNlOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjb25zdCBjYWNoZWRDb2xvclNwYWNlID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5nZXRDYWNoZWQoYXJnc1swXSwgeHJlZiwgbG9jYWxDb2xvclNwYWNlQ2FjaGUpO1xuXG4gICAgICAgICAgICAgIGlmIChjYWNoZWRDb2xvclNwYWNlKSB7XG4gICAgICAgICAgICAgICAgc3RhdGVNYW5hZ2VyLnN0YXRlLmZpbGxDb2xvclNwYWNlID0gY2FjaGVkQ29sb3JTcGFjZTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIG5leHQoc2VsZi5wYXJzZUNvbG9yU3BhY2Uoe1xuICAgICAgICAgICAgICAgIGNzOiBhcmdzWzBdLFxuICAgICAgICAgICAgICAgIHJlc291cmNlcyxcbiAgICAgICAgICAgICAgICBsb2NhbENvbG9yU3BhY2VDYWNoZVxuICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChjb2xvclNwYWNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbG9yU3BhY2UpIHtcbiAgICAgICAgICAgICAgICAgIHN0YXRlTWFuYWdlci5zdGF0ZS5maWxsQ29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFN0cm9rZUNvbG9yU3BhY2U6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNvbnN0IGNhY2hlZENvbG9yU3BhY2UgPSBfY29sb3JzcGFjZS5Db2xvclNwYWNlLmdldENhY2hlZChhcmdzWzBdLCB4cmVmLCBsb2NhbENvbG9yU3BhY2VDYWNoZSk7XG5cbiAgICAgICAgICAgICAgaWYgKGNhY2hlZENvbG9yU3BhY2UpIHtcbiAgICAgICAgICAgICAgICBzdGF0ZU1hbmFnZXIuc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZSA9IGNhY2hlZENvbG9yU3BhY2U7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBuZXh0KHNlbGYucGFyc2VDb2xvclNwYWNlKHtcbiAgICAgICAgICAgICAgICBjczogYXJnc1swXSxcbiAgICAgICAgICAgICAgICByZXNvdXJjZXMsXG4gICAgICAgICAgICAgICAgbG9jYWxDb2xvclNwYWNlQ2FjaGVcbiAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoY29sb3JTcGFjZSkge1xuICAgICAgICAgICAgICAgIGlmIChjb2xvclNwYWNlKSB7XG4gICAgICAgICAgICAgICAgICBzdGF0ZU1hbmFnZXIuc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldEZpbGxDb2xvcjpcbiAgICAgICAgICAgIGNzID0gc3RhdGVNYW5hZ2VyLnN0YXRlLmZpbGxDb2xvclNwYWNlO1xuICAgICAgICAgICAgYXJncyA9IGNzLmdldFJnYihhcmdzLCAwKTtcbiAgICAgICAgICAgIGZuID0gX3V0aWwuT1BTLnNldEZpbGxSR0JDb2xvcjtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0U3Ryb2tlQ29sb3I6XG4gICAgICAgICAgICBjcyA9IHN0YXRlTWFuYWdlci5zdGF0ZS5zdHJva2VDb2xvclNwYWNlO1xuICAgICAgICAgICAgYXJncyA9IGNzLmdldFJnYihhcmdzLCAwKTtcbiAgICAgICAgICAgIGZuID0gX3V0aWwuT1BTLnNldFN0cm9rZVJHQkNvbG9yO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRGaWxsR3JheTpcbiAgICAgICAgICAgIHN0YXRlTWFuYWdlci5zdGF0ZS5maWxsQ29sb3JTcGFjZSA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5O1xuICAgICAgICAgICAgYXJncyA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5LmdldFJnYihhcmdzLCAwKTtcbiAgICAgICAgICAgIGZuID0gX3V0aWwuT1BTLnNldEZpbGxSR0JDb2xvcjtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0U3Ryb2tlR3JheTpcbiAgICAgICAgICAgIHN0YXRlTWFuYWdlci5zdGF0ZS5zdHJva2VDb2xvclNwYWNlID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXk7XG4gICAgICAgICAgICBhcmdzID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXkuZ2V0UmdiKGFyZ3MsIDApO1xuICAgICAgICAgICAgZm4gPSBfdXRpbC5PUFMuc2V0U3Ryb2tlUkdCQ29sb3I7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldEZpbGxDTVlLQ29sb3I6XG4gICAgICAgICAgICBzdGF0ZU1hbmFnZXIuc3RhdGUuZmlsbENvbG9yU3BhY2UgPSBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215aztcbiAgICAgICAgICAgIGFyZ3MgPSBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215ay5nZXRSZ2IoYXJncywgMCk7XG4gICAgICAgICAgICBmbiA9IF91dGlsLk9QUy5zZXRGaWxsUkdCQ29sb3I7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFN0cm9rZUNNWUtDb2xvcjpcbiAgICAgICAgICAgIHN0YXRlTWFuYWdlci5zdGF0ZS5zdHJva2VDb2xvclNwYWNlID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmNteWs7XG4gICAgICAgICAgICBhcmdzID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmNteWsuZ2V0UmdiKGFyZ3MsIDApO1xuICAgICAgICAgICAgZm4gPSBfdXRpbC5PUFMuc2V0U3Ryb2tlUkdCQ29sb3I7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldEZpbGxSR0JDb2xvcjpcbiAgICAgICAgICAgIHN0YXRlTWFuYWdlci5zdGF0ZS5maWxsQ29sb3JTcGFjZSA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2I7XG4gICAgICAgICAgICBhcmdzID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYi5nZXRSZ2IoYXJncywgMCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFN0cm9rZVJHQkNvbG9yOlxuICAgICAgICAgICAgc3RhdGVNYW5hZ2VyLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2UgPSBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiO1xuICAgICAgICAgICAgYXJncyA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2IuZ2V0UmdiKGFyZ3MsIDApO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRGaWxsQ29sb3JOOlxuICAgICAgICAgICAgY3MgPSBzdGF0ZU1hbmFnZXIuc3RhdGUuZmlsbENvbG9yU3BhY2U7XG5cbiAgICAgICAgICAgIGlmIChjcy5uYW1lID09PSBcIlBhdHRlcm5cIikge1xuICAgICAgICAgICAgICBuZXh0KHNlbGYuaGFuZGxlQ29sb3JOKG9wZXJhdG9yTGlzdCwgX3V0aWwuT1BTLnNldEZpbGxDb2xvck4sIGFyZ3MsIGNzLCBwYXR0ZXJucywgcmVzb3VyY2VzLCB0YXNrLCBsb2NhbENvbG9yU3BhY2VDYWNoZSwgbG9jYWxUaWxpbmdQYXR0ZXJuQ2FjaGUsIGxvY2FsU2hhZGluZ1BhdHRlcm5DYWNoZSkpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGFyZ3MgPSBjcy5nZXRSZ2IoYXJncywgMCk7XG4gICAgICAgICAgICBmbiA9IF91dGlsLk9QUy5zZXRGaWxsUkdCQ29sb3I7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFN0cm9rZUNvbG9yTjpcbiAgICAgICAgICAgIGNzID0gc3RhdGVNYW5hZ2VyLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U7XG5cbiAgICAgICAgICAgIGlmIChjcy5uYW1lID09PSBcIlBhdHRlcm5cIikge1xuICAgICAgICAgICAgICBuZXh0KHNlbGYuaGFuZGxlQ29sb3JOKG9wZXJhdG9yTGlzdCwgX3V0aWwuT1BTLnNldFN0cm9rZUNvbG9yTiwgYXJncywgY3MsIHBhdHRlcm5zLCByZXNvdXJjZXMsIHRhc2ssIGxvY2FsQ29sb3JTcGFjZUNhY2hlLCBsb2NhbFRpbGluZ1BhdHRlcm5DYWNoZSwgbG9jYWxTaGFkaW5nUGF0dGVybkNhY2hlKSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXJncyA9IGNzLmdldFJnYihhcmdzLCAwKTtcbiAgICAgICAgICAgIGZuID0gX3V0aWwuT1BTLnNldFN0cm9rZVJHQkNvbG9yO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zaGFkaW5nRmlsbDpcbiAgICAgICAgICAgIHZhciBzaGFkaW5nUmVzID0gcmVzb3VyY2VzLmdldChcIlNoYWRpbmdcIik7XG5cbiAgICAgICAgICAgIGlmICghc2hhZGluZ1Jlcykge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJObyBzaGFkaW5nIHJlc291cmNlIGZvdW5kXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgc2hhZGluZyA9IHNoYWRpbmdSZXMuZ2V0KGFyZ3NbMF0ubmFtZSk7XG5cbiAgICAgICAgICAgIGlmICghc2hhZGluZykge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJObyBzaGFkaW5nIG9iamVjdCBmb3VuZFwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcGF0dGVybklkID0gc2VsZi5wYXJzZVNoYWRpbmcoe1xuICAgICAgICAgICAgICBzaGFkaW5nLFxuICAgICAgICAgICAgICByZXNvdXJjZXMsXG4gICAgICAgICAgICAgIGxvY2FsQ29sb3JTcGFjZUNhY2hlLFxuICAgICAgICAgICAgICBsb2NhbFNoYWRpbmdQYXR0ZXJuQ2FjaGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXJncyA9IFtwYXR0ZXJuSWRdO1xuICAgICAgICAgICAgZm4gPSBfdXRpbC5PUFMuc2hhZGluZ0ZpbGw7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldEdTdGF0ZTpcbiAgICAgICAgICAgIGlzVmFsaWROYW1lID0gYXJnc1swXSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLk5hbWU7XG4gICAgICAgICAgICBuYW1lID0gYXJnc1swXS5uYW1lO1xuXG4gICAgICAgICAgICBpZiAoaXNWYWxpZE5hbWUpIHtcbiAgICAgICAgICAgICAgY29uc3QgbG9jYWxHU3RhdGVPYmogPSBsb2NhbEdTdGF0ZUNhY2hlLmdldEJ5TmFtZShuYW1lKTtcblxuICAgICAgICAgICAgICBpZiAobG9jYWxHU3RhdGVPYmopIHtcbiAgICAgICAgICAgICAgICBpZiAobG9jYWxHU3RhdGVPYmoubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5zZXRHU3RhdGUsIFtsb2NhbEdTdGF0ZU9ial0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGFyZ3MgPSBudWxsO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5leHQobmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmVHU3RhdGUsIHJlamVjdEdTdGF0ZSkge1xuICAgICAgICAgICAgICBpZiAoIWlzVmFsaWROYW1lKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiR1N0YXRlIG11c3QgYmUgcmVmZXJyZWQgdG8gYnkgbmFtZS5cIik7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCBleHRHU3RhdGUgPSByZXNvdXJjZXMuZ2V0KFwiRXh0R1N0YXRlXCIpO1xuXG4gICAgICAgICAgICAgIGlmICghKGV4dEdTdGF0ZSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiRXh0R1N0YXRlIHNob3VsZCBiZSBhIGRpY3Rpb25hcnkuXCIpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgZ1N0YXRlID0gZXh0R1N0YXRlLmdldChuYW1lKTtcblxuICAgICAgICAgICAgICBpZiAoIShnU3RhdGUgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5EaWN0KSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkdTdGF0ZSBzaG91bGQgYmUgYSBkaWN0aW9uYXJ5LlwiKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHNlbGYuc2V0R1N0YXRlKHtcbiAgICAgICAgICAgICAgICByZXNvdXJjZXMsXG4gICAgICAgICAgICAgICAgZ1N0YXRlLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdCxcbiAgICAgICAgICAgICAgICBjYWNoZUtleTogbmFtZSxcbiAgICAgICAgICAgICAgICB0YXNrLFxuICAgICAgICAgICAgICAgIHN0YXRlTWFuYWdlcixcbiAgICAgICAgICAgICAgICBsb2NhbEdTdGF0ZUNhY2hlLFxuICAgICAgICAgICAgICAgIGxvY2FsQ29sb3JTcGFjZUNhY2hlXG4gICAgICAgICAgICAgIH0pLnRoZW4ocmVzb2x2ZUdTdGF0ZSwgcmVqZWN0R1N0YXRlKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICAgICAgaWYgKHJlYXNvbiBpbnN0YW5jZW9mIF91dGlsLkFib3J0RXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHNlbGYub3B0aW9ucy5pZ25vcmVFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZXIuc2VuZChcIlVuc3VwcG9ydGVkRmVhdHVyZVwiLCB7XG4gICAgICAgICAgICAgICAgICBmZWF0dXJlSWQ6IF91dGlsLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yRXh0R1N0YXRlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKGBnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBFeHRHU3RhdGU6IFwiJHtyZWFzb259XCIuYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhyb3cgcmVhc29uO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMubW92ZVRvOlxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmxpbmVUbzpcbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5jdXJ2ZVRvOlxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmN1cnZlVG8yOlxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmN1cnZlVG8zOlxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmNsb3NlUGF0aDpcbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5yZWN0YW5nbGU6XG4gICAgICAgICAgICBzZWxmLmJ1aWxkUGF0aChvcGVyYXRvckxpc3QsIGZuLCBhcmdzLCBwYXJzaW5nVGV4dCk7XG4gICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLm1hcmtQb2ludDpcbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5tYXJrUG9pbnRQcm9wczpcbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5iZWdpbkNvbXBhdDpcbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5lbmRDb21wYXQ6XG4gICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzOlxuICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShhcmdzWzBdKSkge1xuICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoYEV4cGVjdGVkIG5hbWUgZm9yIGJlZ2luTWFya2VkQ29udGVudFByb3BzIGFyZzA9JHthcmdzWzBdfWApO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGFyZ3NbMF0ubmFtZSA9PT0gXCJPQ1wiKSB7XG4gICAgICAgICAgICAgIG5leHQoc2VsZi5wYXJzZU1hcmtlZENvbnRlbnRQcm9wcyhhcmdzWzFdLCByZXNvdXJjZXMpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wcywgW1wiT0NcIiwgZGF0YV0pO1xuICAgICAgICAgICAgICB9KS5jYXRjaChyZWFzb24gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZWFzb24gaW5zdGFuY2VvZiBfdXRpbC5BYm9ydEV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChzZWxmLm9wdGlvbnMuaWdub3JlRXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZXIuc2VuZChcIlVuc3VwcG9ydGVkRmVhdHVyZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGZlYXR1cmVJZDogX3V0aWwuVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JNYXJrZWRDb250ZW50XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgZ2V0T3BlcmF0b3JMaXN0IC0gaWdub3JpbmcgYmVnaW5NYXJrZWRDb250ZW50UHJvcHM6IFwiJHtyZWFzb259XCIuYCk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhyb3cgcmVhc29uO1xuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXJncyA9IFthcmdzWzBdLm5hbWUsIGFyZ3NbMV0gaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5EaWN0ID8gYXJnc1sxXS5nZXQoXCJNQ0lEXCIpIDogbnVsbF07XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmJlZ2luTWFya2VkQ29udGVudDpcbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5lbmRNYXJrZWRDb250ZW50OlxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpZiAoYXJncyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IGFyZ3MubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChhcmdzW2ldIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCkge1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGkgPCBpaSkge1xuICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcImdldE9wZXJhdG9yTGlzdCAtIGlnbm9yaW5nIG9wZXJhdG9yOiBcIiArIGZuKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoZm4sIGFyZ3MpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RvcCkge1xuICAgICAgICBuZXh0KGRlZmVycmVkKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjbG9zZVBlbmRpbmdSZXN0b3JlT1BTKCk7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSkuY2F0Y2gocmVhc29uID0+IHtcbiAgICAgIGlmIChyZWFzb24gaW5zdGFuY2VvZiBfdXRpbC5BYm9ydEV4Y2VwdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlci5zZW5kKFwiVW5zdXBwb3J0ZWRGZWF0dXJlXCIsIHtcbiAgICAgICAgICBmZWF0dXJlSWQ6IF91dGlsLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmVycm9yT3BlcmF0b3JMaXN0XG4gICAgICAgIH0pO1xuICAgICAgICAoMCwgX3V0aWwud2FybikoYGdldE9wZXJhdG9yTGlzdCAtIGlnbm9yaW5nIGVycm9ycyBkdXJpbmcgXCIke3Rhc2submFtZX1cIiBgICsgYHRhc2s6IFwiJHtyZWFzb259XCIuYCk7XG4gICAgICAgIGNsb3NlUGVuZGluZ1Jlc3RvcmVPUFMoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyByZWFzb247XG4gICAgfSk7XG4gIH1cblxuICBnZXRUZXh0Q29udGVudCh7XG4gICAgc3RyZWFtLFxuICAgIHRhc2ssXG4gICAgcmVzb3VyY2VzLFxuICAgIHN0YXRlTWFuYWdlciA9IG51bGwsXG4gICAgbm9ybWFsaXplV2hpdGVzcGFjZSA9IGZhbHNlLFxuICAgIGNvbWJpbmVUZXh0SXRlbXMgPSBmYWxzZSxcbiAgICBpbmNsdWRlTWFya2VkQ29udGVudCA9IGZhbHNlLFxuICAgIHNpbmssXG4gICAgc2VlblN0eWxlcyA9IG5ldyBTZXQoKVxuICB9KSB7XG4gICAgcmVzb3VyY2VzID0gcmVzb3VyY2VzIHx8IF9wcmltaXRpdmVzLkRpY3QuZW1wdHk7XG4gICAgc3RhdGVNYW5hZ2VyID0gc3RhdGVNYW5hZ2VyIHx8IG5ldyBTdGF0ZU1hbmFnZXIobmV3IFRleHRTdGF0ZSgpKTtcbiAgICBjb25zdCBXaGl0ZXNwYWNlUmVnZXhwID0gL1xccy9nO1xuICAgIGNvbnN0IERpYWNyaXRpY1JlZ0V4cCA9IG5ldyBSZWdFeHAoXCJeXFxcXHB7TW59JFwiLCBcInVcIik7XG4gICAgY29uc3QgTm9ybWFsaXplZFVuaWNvZGVzID0gKDAsIF91bmljb2RlLmdldE5vcm1hbGl6ZWRVbmljb2RlcykoKTtcbiAgICBjb25zdCB0ZXh0Q29udGVudCA9IHtcbiAgICAgIGl0ZW1zOiBbXSxcbiAgICAgIHN0eWxlczogT2JqZWN0LmNyZWF0ZShudWxsKVxuICAgIH07XG4gICAgY29uc3QgdGV4dENvbnRlbnRJdGVtID0ge1xuICAgICAgaW5pdGlhbGl6ZWQ6IGZhbHNlLFxuICAgICAgc3RyOiBbXSxcbiAgICAgIHRvdGFsV2lkdGg6IDAsXG4gICAgICB0b3RhbEhlaWdodDogMCxcbiAgICAgIHdpZHRoOiAwLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgdmVydGljYWw6IGZhbHNlLFxuICAgICAgcHJldlRyYW5zZm9ybTogbnVsbCxcbiAgICAgIHRleHRBZHZhbmNlU2NhbGU6IDAsXG4gICAgICBzcGFjZUluRmxvd01pbjogMCxcbiAgICAgIHNwYWNlSW5GbG93TWF4OiAwLFxuICAgICAgdHJhY2tpbmdTcGFjZU1pbjogSW5maW5pdHksXG4gICAgICBuZWdhdGl2ZVNwYWNlTWF4OiAtSW5maW5pdHksXG4gICAgICB0cmFuc2Zvcm06IG51bGwsXG4gICAgICBmb250TmFtZTogbnVsbCxcbiAgICAgIGhhc0VPTDogZmFsc2VcbiAgICB9O1xuICAgIGNvbnN0IFRSQUNLSU5HX1NQQUNFX0ZBQ1RPUiA9IDAuMTtcbiAgICBjb25zdCBORUdBVElWRV9TUEFDRV9GQUNUT1IgPSAtMC4yO1xuICAgIGNvbnN0IFNQQUNFX0lOX0ZMT1dfTUlOX0ZBQ1RPUiA9IDAuMTtcbiAgICBjb25zdCBTUEFDRV9JTl9GTE9XX01BWF9GQUNUT1IgPSAwLjY7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgeHJlZiA9IHRoaXMueHJlZjtcbiAgICBjb25zdCBzaG93U3BhY2VkVGV4dEJ1ZmZlciA9IFtdO1xuICAgIGxldCB4b2JqcyA9IG51bGw7XG4gICAgY29uc3QgZW1wdHlYT2JqZWN0Q2FjaGUgPSBuZXcgX2ltYWdlX3V0aWxzLkxvY2FsSW1hZ2VDYWNoZSgpO1xuICAgIGNvbnN0IGVtcHR5R1N0YXRlQ2FjaGUgPSBuZXcgX2ltYWdlX3V0aWxzLkxvY2FsR1N0YXRlQ2FjaGUoKTtcbiAgICBjb25zdCBwcmVwcm9jZXNzb3IgPSBuZXcgRXZhbHVhdG9yUHJlcHJvY2Vzc29yKHN0cmVhbSwgeHJlZiwgc3RhdGVNYW5hZ2VyKTtcbiAgICBsZXQgdGV4dFN0YXRlO1xuXG4gICAgZnVuY3Rpb24gZ2V0Q3VycmVudFRleHRUcmFuc2Zvcm0oKSB7XG4gICAgICBjb25zdCBmb250ID0gdGV4dFN0YXRlLmZvbnQ7XG4gICAgICBjb25zdCB0c20gPSBbdGV4dFN0YXRlLmZvbnRTaXplICogdGV4dFN0YXRlLnRleHRIU2NhbGUsIDAsIDAsIHRleHRTdGF0ZS5mb250U2l6ZSwgMCwgdGV4dFN0YXRlLnRleHRSaXNlXTtcblxuICAgICAgaWYgKGZvbnQuaXNUeXBlM0ZvbnQgJiYgKHRleHRTdGF0ZS5mb250U2l6ZSA8PSAxIHx8IGZvbnQuaXNDaGFyQkJveCkgJiYgISgwLCBfdXRpbC5pc0FycmF5RXF1YWwpKHRleHRTdGF0ZS5mb250TWF0cml4LCBfdXRpbC5GT05UX0lERU5USVRZX01BVFJJWCkpIHtcbiAgICAgICAgY29uc3QgZ2x5cGhIZWlnaHQgPSBmb250LmJib3hbM10gLSBmb250LmJib3hbMV07XG5cbiAgICAgICAgaWYgKGdseXBoSGVpZ2h0ID4gMCkge1xuICAgICAgICAgIHRzbVszXSAqPSBnbHlwaEhlaWdodCAqIHRleHRTdGF0ZS5mb250TWF0cml4WzNdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfdXRpbC5VdGlsLnRyYW5zZm9ybSh0ZXh0U3RhdGUuY3RtLCBfdXRpbC5VdGlsLnRyYW5zZm9ybSh0ZXh0U3RhdGUudGV4dE1hdHJpeCwgdHNtKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW5zdXJlVGV4dENvbnRlbnRJdGVtKCkge1xuICAgICAgaWYgKHRleHRDb250ZW50SXRlbS5pbml0aWFsaXplZCkge1xuICAgICAgICByZXR1cm4gdGV4dENvbnRlbnRJdGVtO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmb250ID0gdGV4dFN0YXRlLmZvbnQsXG4gICAgICAgICAgICBsb2FkZWROYW1lID0gZm9udC5sb2FkZWROYW1lO1xuXG4gICAgICBpZiAoIXNlZW5TdHlsZXMuaGFzKGxvYWRlZE5hbWUpKSB7XG4gICAgICAgIHNlZW5TdHlsZXMuYWRkKGxvYWRlZE5hbWUpO1xuICAgICAgICB0ZXh0Q29udGVudC5zdHlsZXNbbG9hZGVkTmFtZV0gPSB7XG4gICAgICAgICAgZm9udEZhbWlseTogZm9udC5mYWxsYmFja05hbWUsXG4gICAgICAgICAgYXNjZW50OiBmb250LmFzY2VudCxcbiAgICAgICAgICBkZXNjZW50OiBmb250LmRlc2NlbnQsXG4gICAgICAgICAgdmVydGljYWw6IGZvbnQudmVydGljYWxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgdGV4dENvbnRlbnRJdGVtLmZvbnROYW1lID0gbG9hZGVkTmFtZTtcbiAgICAgIGNvbnN0IHRybSA9IHRleHRDb250ZW50SXRlbS50cmFuc2Zvcm0gPSBnZXRDdXJyZW50VGV4dFRyYW5zZm9ybSgpO1xuXG4gICAgICBpZiAoIWZvbnQudmVydGljYWwpIHtcbiAgICAgICAgdGV4dENvbnRlbnRJdGVtLndpZHRoID0gdGV4dENvbnRlbnRJdGVtLnRvdGFsV2lkdGggPSAwO1xuICAgICAgICB0ZXh0Q29udGVudEl0ZW0uaGVpZ2h0ID0gdGV4dENvbnRlbnRJdGVtLnRvdGFsSGVpZ2h0ID0gTWF0aC5oeXBvdCh0cm1bMl0sIHRybVszXSk7XG4gICAgICAgIHRleHRDb250ZW50SXRlbS52ZXJ0aWNhbCA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGV4dENvbnRlbnRJdGVtLndpZHRoID0gdGV4dENvbnRlbnRJdGVtLnRvdGFsV2lkdGggPSBNYXRoLmh5cG90KHRybVswXSwgdHJtWzFdKTtcbiAgICAgICAgdGV4dENvbnRlbnRJdGVtLmhlaWdodCA9IHRleHRDb250ZW50SXRlbS50b3RhbEhlaWdodCA9IDA7XG4gICAgICAgIHRleHRDb250ZW50SXRlbS52ZXJ0aWNhbCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNjYWxlTGluZVggPSBNYXRoLmh5cG90KHRleHRTdGF0ZS50ZXh0TGluZU1hdHJpeFswXSwgdGV4dFN0YXRlLnRleHRMaW5lTWF0cml4WzFdKTtcbiAgICAgIGNvbnN0IHNjYWxlQ3RtWCA9IE1hdGguaHlwb3QodGV4dFN0YXRlLmN0bVswXSwgdGV4dFN0YXRlLmN0bVsxXSk7XG4gICAgICB0ZXh0Q29udGVudEl0ZW0udGV4dEFkdmFuY2VTY2FsZSA9IHNjYWxlQ3RtWCAqIHNjYWxlTGluZVg7XG4gICAgICB0ZXh0Q29udGVudEl0ZW0udHJhY2tpbmdTcGFjZU1pbiA9IHRleHRTdGF0ZS5mb250U2l6ZSAqIFRSQUNLSU5HX1NQQUNFX0ZBQ1RPUjtcbiAgICAgIHRleHRDb250ZW50SXRlbS5uZWdhdGl2ZVNwYWNlTWF4ID0gdGV4dFN0YXRlLmZvbnRTaXplICogTkVHQVRJVkVfU1BBQ0VfRkFDVE9SO1xuICAgICAgdGV4dENvbnRlbnRJdGVtLnNwYWNlSW5GbG93TWluID0gdGV4dFN0YXRlLmZvbnRTaXplICogU1BBQ0VfSU5fRkxPV19NSU5fRkFDVE9SO1xuICAgICAgdGV4dENvbnRlbnRJdGVtLnNwYWNlSW5GbG93TWF4ID0gdGV4dFN0YXRlLmZvbnRTaXplICogU1BBQ0VfSU5fRkxPV19NQVhfRkFDVE9SO1xuICAgICAgdGV4dENvbnRlbnRJdGVtLmhhc0VPTCA9IGZhbHNlO1xuICAgICAgdGV4dENvbnRlbnRJdGVtLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0ZXh0Q29udGVudEl0ZW07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlQWR2YW5jZVNjYWxlKCkge1xuICAgICAgaWYgKCF0ZXh0Q29udGVudEl0ZW0uaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzY2FsZUxpbmVYID0gTWF0aC5oeXBvdCh0ZXh0U3RhdGUudGV4dExpbmVNYXRyaXhbMF0sIHRleHRTdGF0ZS50ZXh0TGluZU1hdHJpeFsxXSk7XG4gICAgICBjb25zdCBzY2FsZUN0bVggPSBNYXRoLmh5cG90KHRleHRTdGF0ZS5jdG1bMF0sIHRleHRTdGF0ZS5jdG1bMV0pO1xuICAgICAgY29uc3Qgc2NhbGVGYWN0b3IgPSBzY2FsZUN0bVggKiBzY2FsZUxpbmVYO1xuXG4gICAgICBpZiAoc2NhbGVGYWN0b3IgPT09IHRleHRDb250ZW50SXRlbS50ZXh0QWR2YW5jZVNjYWxlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0ZXh0Q29udGVudEl0ZW0udmVydGljYWwpIHtcbiAgICAgICAgdGV4dENvbnRlbnRJdGVtLnRvdGFsV2lkdGggKz0gdGV4dENvbnRlbnRJdGVtLndpZHRoICogdGV4dENvbnRlbnRJdGVtLnRleHRBZHZhbmNlU2NhbGU7XG4gICAgICAgIHRleHRDb250ZW50SXRlbS53aWR0aCA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ZXh0Q29udGVudEl0ZW0udG90YWxIZWlnaHQgKz0gdGV4dENvbnRlbnRJdGVtLmhlaWdodCAqIHRleHRDb250ZW50SXRlbS50ZXh0QWR2YW5jZVNjYWxlO1xuICAgICAgICB0ZXh0Q29udGVudEl0ZW0uaGVpZ2h0ID0gMDtcbiAgICAgIH1cblxuICAgICAgdGV4dENvbnRlbnRJdGVtLnRleHRBZHZhbmNlU2NhbGUgPSBzY2FsZUZhY3RvcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXBsYWNlV2hpdGVzcGFjZShzdHIpIHtcbiAgICAgIGNvbnN0IGlpID0gc3RyLmxlbmd0aDtcbiAgICAgIGxldCBpID0gMCxcbiAgICAgICAgICBjb2RlO1xuXG4gICAgICB3aGlsZSAoaSA8IGlpICYmIChjb2RlID0gc3RyLmNoYXJDb2RlQXQoaSkpID49IDB4MjAgJiYgY29kZSA8PSAweDdmKSB7XG4gICAgICAgIGkrKztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGkgPCBpaSA/IHN0ci5yZXBsYWNlKFdoaXRlc3BhY2VSZWdleHAsIFwiIFwiKSA6IHN0cjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBydW5CaWRpVHJhbnNmb3JtKHRleHRDaHVuaykge1xuICAgICAgY29uc3QgdGV4dCA9IHRleHRDaHVuay5zdHIuam9pbihcIlwiKTtcbiAgICAgIGNvbnN0IGJpZGlSZXN1bHQgPSAoMCwgX2JpZGkuYmlkaSkodGV4dCwgLTEsIHRleHRDaHVuay52ZXJ0aWNhbCk7XG4gICAgICBjb25zdCBzdHIgPSBub3JtYWxpemVXaGl0ZXNwYWNlID8gcmVwbGFjZVdoaXRlc3BhY2UoYmlkaVJlc3VsdC5zdHIpIDogYmlkaVJlc3VsdC5zdHI7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdHIsXG4gICAgICAgIGRpcjogYmlkaVJlc3VsdC5kaXIsXG4gICAgICAgIHdpZHRoOiB0ZXh0Q2h1bmsudG90YWxXaWR0aCxcbiAgICAgICAgaGVpZ2h0OiB0ZXh0Q2h1bmsudG90YWxIZWlnaHQsXG4gICAgICAgIHRyYW5zZm9ybTogdGV4dENodW5rLnRyYW5zZm9ybSxcbiAgICAgICAgZm9udE5hbWU6IHRleHRDaHVuay5mb250TmFtZSxcbiAgICAgICAgaGFzRU9MOiB0ZXh0Q2h1bmsuaGFzRU9MXG4gICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZVNldEZvbnQoZm9udE5hbWUsIGZvbnRSZWYpIHtcbiAgICAgIHJldHVybiBzZWxmLmxvYWRGb250KGZvbnROYW1lLCBmb250UmVmLCByZXNvdXJjZXMpLnRoZW4oZnVuY3Rpb24gKHRyYW5zbGF0ZWQpIHtcbiAgICAgICAgaWYgKCF0cmFuc2xhdGVkLmZvbnQuaXNUeXBlM0ZvbnQpIHtcbiAgICAgICAgICByZXR1cm4gdHJhbnNsYXRlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cmFuc2xhdGVkLmxvYWRUeXBlM0RhdGEoc2VsZiwgcmVzb3VyY2VzLCB0YXNrKS5jYXRjaChmdW5jdGlvbiAoKSB7fSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZWQ7XG4gICAgICAgIH0pO1xuICAgICAgfSkudGhlbihmdW5jdGlvbiAodHJhbnNsYXRlZCkge1xuICAgICAgICB0ZXh0U3RhdGUuZm9udCA9IHRyYW5zbGF0ZWQuZm9udDtcbiAgICAgICAgdGV4dFN0YXRlLmZvbnRNYXRyaXggPSB0cmFuc2xhdGVkLmZvbnQuZm9udE1hdHJpeCB8fCBfdXRpbC5GT05UX0lERU5USVRZX01BVFJJWDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXBhcmVXaXRoTGFzdFBvc2l0aW9uKCkge1xuICAgICAgaWYgKCFjb21iaW5lVGV4dEl0ZW1zIHx8ICF0ZXh0U3RhdGUuZm9udCB8fCAhdGV4dENvbnRlbnRJdGVtLnByZXZUcmFuc2Zvcm0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjdXJyZW50VHJhbnNmb3JtID0gZ2V0Q3VycmVudFRleHRUcmFuc2Zvcm0oKTtcbiAgICAgIGxldCBwb3NYID0gY3VycmVudFRyYW5zZm9ybVs0XTtcbiAgICAgIGxldCBwb3NZID0gY3VycmVudFRyYW5zZm9ybVs1XTtcbiAgICAgIGxldCBsYXN0UG9zWCA9IHRleHRDb250ZW50SXRlbS5wcmV2VHJhbnNmb3JtWzRdO1xuICAgICAgbGV0IGxhc3RQb3NZID0gdGV4dENvbnRlbnRJdGVtLnByZXZUcmFuc2Zvcm1bNV07XG5cbiAgICAgIGlmIChsYXN0UG9zWCA9PT0gcG9zWCAmJiBsYXN0UG9zWSA9PT0gcG9zWSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCByb3RhdGUgPSAwO1xuXG4gICAgICBpZiAoY3VycmVudFRyYW5zZm9ybVswXSAmJiBjdXJyZW50VHJhbnNmb3JtWzFdID09PSAwICYmIGN1cnJlbnRUcmFuc2Zvcm1bMl0gPT09IDApIHtcbiAgICAgICAgcm90YXRlID0gY3VycmVudFRyYW5zZm9ybVswXSA+IDAgPyAwIDogMTgwO1xuICAgICAgfSBlbHNlIGlmIChjdXJyZW50VHJhbnNmb3JtWzFdICYmIGN1cnJlbnRUcmFuc2Zvcm1bMF0gPT09IDAgJiYgY3VycmVudFRyYW5zZm9ybVszXSA9PT0gMCkge1xuICAgICAgICByb3RhdGUgKz0gY3VycmVudFRyYW5zZm9ybVsxXSA+IDAgPyA5MCA6IDI3MDtcbiAgICAgIH1cblxuICAgICAgaWYgKHJvdGF0ZSAhPT0gMCkge1xuICAgICAgICBzd2l0Y2ggKHJvdGF0ZSkge1xuICAgICAgICAgIGNhc2UgOTA6XG4gICAgICAgICAgICBbcG9zWCwgcG9zWV0gPSBbcG9zWSwgcG9zWF07XG4gICAgICAgICAgICBbbGFzdFBvc1gsIGxhc3RQb3NZXSA9IFtsYXN0UG9zWSwgbGFzdFBvc1hdO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDE4MDpcbiAgICAgICAgICAgIFtwb3NYLCBwb3NZLCBsYXN0UG9zWCwgbGFzdFBvc1ldID0gWy1wb3NYLCAtcG9zWSwgLWxhc3RQb3NYLCAtbGFzdFBvc1ldO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDI3MDpcbiAgICAgICAgICAgIFtwb3NYLCBwb3NZXSA9IFstcG9zWSwgLXBvc1hdO1xuICAgICAgICAgICAgW2xhc3RQb3NYLCBsYXN0UG9zWV0gPSBbLWxhc3RQb3NZLCAtbGFzdFBvc1hdO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRleHRTdGF0ZS5mb250LnZlcnRpY2FsKSB7XG4gICAgICAgIGNvbnN0IGFkdmFuY2VZID0gKGxhc3RQb3NZIC0gcG9zWSkgLyB0ZXh0Q29udGVudEl0ZW0udGV4dEFkdmFuY2VTY2FsZTtcbiAgICAgICAgY29uc3QgYWR2YW5jZVggPSBwb3NYIC0gbGFzdFBvc1g7XG5cbiAgICAgICAgaWYgKGFkdmFuY2VZIDwgdGV4dENvbnRlbnRJdGVtLm5lZ2F0aXZlU3BhY2VNYXgpIHtcbiAgICAgICAgICBpZiAoTWF0aC5hYnMoYWR2YW5jZVgpID4gMC41ICogdGV4dENvbnRlbnRJdGVtLndpZHRoKSB7XG4gICAgICAgICAgICBhcHBlbmRFT0woKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChNYXRoLmFicyhhZHZhbmNlWCkgPiB0ZXh0Q29udGVudEl0ZW0uaGVpZ2h0KSB7XG4gICAgICAgICAgYXBwZW5kRU9MKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFkdmFuY2VZIDw9IHRleHRDb250ZW50SXRlbS50cmFja2luZ1NwYWNlTWluKSB7XG4gICAgICAgICAgdGV4dENvbnRlbnRJdGVtLmhlaWdodCArPSBhZHZhbmNlWTtcbiAgICAgICAgfSBlbHNlIGlmICghYWRkRmFrZVNwYWNlcyhhZHZhbmNlWSwgdGV4dENvbnRlbnRJdGVtLnByZXZUcmFuc2Zvcm0pKSB7XG4gICAgICAgICAgaWYgKHRleHRDb250ZW50SXRlbS5zdHIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0ZXh0Q29udGVudC5pdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgc3RyOiBcIiBcIixcbiAgICAgICAgICAgICAgZGlyOiBcImx0clwiLFxuICAgICAgICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgICAgICAgaGVpZ2h0OiBhZHZhbmNlWSxcbiAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0ZXh0Q29udGVudEl0ZW0ucHJldlRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgZm9udE5hbWU6IHRleHRDb250ZW50SXRlbS5mb250TmFtZSxcbiAgICAgICAgICAgICAgaGFzRU9MOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRleHRDb250ZW50SXRlbS5oZWlnaHQgKz0gYWR2YW5jZVk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhZHZhbmNlWCA9IChwb3NYIC0gbGFzdFBvc1gpIC8gdGV4dENvbnRlbnRJdGVtLnRleHRBZHZhbmNlU2NhbGU7XG4gICAgICBjb25zdCBhZHZhbmNlWSA9IHBvc1kgLSBsYXN0UG9zWTtcblxuICAgICAgaWYgKGFkdmFuY2VYIDwgdGV4dENvbnRlbnRJdGVtLm5lZ2F0aXZlU3BhY2VNYXgpIHtcbiAgICAgICAgaWYgKE1hdGguYWJzKGFkdmFuY2VZKSA+IDAuNSAqIHRleHRDb250ZW50SXRlbS5oZWlnaHQpIHtcbiAgICAgICAgICBhcHBlbmRFT0woKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChNYXRoLmFicyhhZHZhbmNlWSkgPiB0ZXh0Q29udGVudEl0ZW0uaGVpZ2h0KSB7XG4gICAgICAgIGFwcGVuZEVPTCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChhZHZhbmNlWCA8PSB0ZXh0Q29udGVudEl0ZW0udHJhY2tpbmdTcGFjZU1pbikge1xuICAgICAgICB0ZXh0Q29udGVudEl0ZW0ud2lkdGggKz0gYWR2YW5jZVg7XG4gICAgICB9IGVsc2UgaWYgKCFhZGRGYWtlU3BhY2VzKGFkdmFuY2VYLCB0ZXh0Q29udGVudEl0ZW0ucHJldlRyYW5zZm9ybSkpIHtcbiAgICAgICAgaWYgKHRleHRDb250ZW50SXRlbS5zdHIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGV4dENvbnRlbnQuaXRlbXMucHVzaCh7XG4gICAgICAgICAgICBzdHI6IFwiIFwiLFxuICAgICAgICAgICAgZGlyOiBcImx0clwiLFxuICAgICAgICAgICAgd2lkdGg6IGFkdmFuY2VYLFxuICAgICAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICAgICAgdHJhbnNmb3JtOiB0ZXh0Q29udGVudEl0ZW0ucHJldlRyYW5zZm9ybSxcbiAgICAgICAgICAgIGZvbnROYW1lOiB0ZXh0Q29udGVudEl0ZW0uZm9udE5hbWUsXG4gICAgICAgICAgICBoYXNFT0w6IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGV4dENvbnRlbnRJdGVtLndpZHRoICs9IGFkdmFuY2VYO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnVpbGRUZXh0Q29udGVudEl0ZW0oe1xuICAgICAgY2hhcnMsXG4gICAgICBleHRyYVNwYWNpbmdcbiAgICB9KSB7XG4gICAgICBjb25zdCBmb250ID0gdGV4dFN0YXRlLmZvbnQ7XG5cbiAgICAgIGlmICghY2hhcnMpIHtcbiAgICAgICAgY29uc3QgY2hhclNwYWNpbmcgPSB0ZXh0U3RhdGUuY2hhclNwYWNpbmcgKyBleHRyYVNwYWNpbmc7XG5cbiAgICAgICAgaWYgKGNoYXJTcGFjaW5nKSB7XG4gICAgICAgICAgaWYgKCFmb250LnZlcnRpY2FsKSB7XG4gICAgICAgICAgICB0ZXh0U3RhdGUudHJhbnNsYXRlVGV4dE1hdHJpeChjaGFyU3BhY2luZyAqIHRleHRTdGF0ZS50ZXh0SFNjYWxlLCAwKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGV4dFN0YXRlLnRyYW5zbGF0ZVRleHRNYXRyaXgoMCwgLWNoYXJTcGFjaW5nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGdseXBocyA9IGZvbnQuY2hhcnNUb0dseXBocyhjaGFycyk7XG4gICAgICBjb25zdCBzY2FsZSA9IHRleHRTdGF0ZS5mb250TWF0cml4WzBdICogdGV4dFN0YXRlLmZvbnRTaXplO1xuXG4gICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBnbHlwaHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICBjb25zdCBnbHlwaCA9IGdseXBoc1tpXTtcbiAgICAgICAgbGV0IGNoYXJTcGFjaW5nID0gdGV4dFN0YXRlLmNoYXJTcGFjaW5nICsgKGkgKyAxID09PSBpaSA/IGV4dHJhU3BhY2luZyA6IDApO1xuICAgICAgICBsZXQgZ2x5cGhXaWR0aCA9IGdseXBoLndpZHRoO1xuXG4gICAgICAgIGlmIChmb250LnZlcnRpY2FsKSB7XG4gICAgICAgICAgZ2x5cGhXaWR0aCA9IGdseXBoLnZtZXRyaWMgPyBnbHlwaC52bWV0cmljWzBdIDogLWdseXBoV2lkdGg7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc2NhbGVkRGltID0gZ2x5cGhXaWR0aCAqIHNjYWxlO1xuICAgICAgICBsZXQgZ2x5cGhVbmljb2RlID0gZ2x5cGgudW5pY29kZTtcblxuICAgICAgICBpZiAoZ2x5cGhVbmljb2RlID09PSBcIiBcIiAmJiAoaSA9PT0gMCB8fCBpICsgMSA9PT0gaWkgfHwgZ2x5cGhzW2kgLSAxXS51bmljb2RlID09PSBcIiBcIiB8fCBnbHlwaHNbaSArIDFdLnVuaWNvZGUgPT09IFwiIFwiIHx8IGV4dHJhU3BhY2luZykpIHtcbiAgICAgICAgICBpZiAoIWZvbnQudmVydGljYWwpIHtcbiAgICAgICAgICAgIGNoYXJTcGFjaW5nICs9IHNjYWxlZERpbSArIHRleHRTdGF0ZS53b3JkU3BhY2luZztcbiAgICAgICAgICAgIHRleHRTdGF0ZS50cmFuc2xhdGVUZXh0TWF0cml4KGNoYXJTcGFjaW5nICogdGV4dFN0YXRlLnRleHRIU2NhbGUsIDApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjaGFyU3BhY2luZyArPSAtc2NhbGVkRGltICsgdGV4dFN0YXRlLndvcmRTcGFjaW5nO1xuICAgICAgICAgICAgdGV4dFN0YXRlLnRyYW5zbGF0ZVRleHRNYXRyaXgoMCwgLWNoYXJTcGFjaW5nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbXBhcmVXaXRoTGFzdFBvc2l0aW9uKCk7XG4gICAgICAgIGNvbnN0IHRleHRDaHVuayA9IGVuc3VyZVRleHRDb250ZW50SXRlbSgpO1xuXG4gICAgICAgIGlmIChEaWFjcml0aWNSZWdFeHAudGVzdChnbHlwaC51bmljb2RlKSkge1xuICAgICAgICAgIHNjYWxlZERpbSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWZvbnQudmVydGljYWwpIHtcbiAgICAgICAgICBzY2FsZWREaW0gKj0gdGV4dFN0YXRlLnRleHRIU2NhbGU7XG4gICAgICAgICAgdGV4dFN0YXRlLnRyYW5zbGF0ZVRleHRNYXRyaXgoc2NhbGVkRGltLCAwKTtcbiAgICAgICAgICB0ZXh0Q2h1bmsud2lkdGggKz0gc2NhbGVkRGltO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRleHRTdGF0ZS50cmFuc2xhdGVUZXh0TWF0cml4KDAsIHNjYWxlZERpbSk7XG4gICAgICAgICAgc2NhbGVkRGltID0gTWF0aC5hYnMoc2NhbGVkRGltKTtcbiAgICAgICAgICB0ZXh0Q2h1bmsuaGVpZ2h0ICs9IHNjYWxlZERpbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzY2FsZWREaW0pIHtcbiAgICAgICAgICB0ZXh0Q2h1bmsucHJldlRyYW5zZm9ybSA9IGdldEN1cnJlbnRUZXh0VHJhbnNmb3JtKCk7XG4gICAgICAgIH1cblxuICAgICAgICBnbHlwaFVuaWNvZGUgPSBOb3JtYWxpemVkVW5pY29kZXNbZ2x5cGhVbmljb2RlXSB8fCBnbHlwaFVuaWNvZGU7XG4gICAgICAgIGdseXBoVW5pY29kZSA9ICgwLCBfdW5pY29kZS5yZXZlcnNlSWZSdGwpKGdseXBoVW5pY29kZSk7XG4gICAgICAgIHRleHRDaHVuay5zdHIucHVzaChnbHlwaFVuaWNvZGUpO1xuXG4gICAgICAgIGlmIChjaGFyU3BhY2luZykge1xuICAgICAgICAgIGlmICghZm9udC52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgdGV4dFN0YXRlLnRyYW5zbGF0ZVRleHRNYXRyaXgoY2hhclNwYWNpbmcgKiB0ZXh0U3RhdGUudGV4dEhTY2FsZSwgMCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRleHRTdGF0ZS50cmFuc2xhdGVUZXh0TWF0cml4KDAsIC1jaGFyU3BhY2luZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYXBwZW5kRU9MKCkge1xuICAgICAgaWYgKHRleHRDb250ZW50SXRlbS5pbml0aWFsaXplZCkge1xuICAgICAgICB0ZXh0Q29udGVudEl0ZW0uaGFzRU9MID0gdHJ1ZTtcbiAgICAgICAgZmx1c2hUZXh0Q29udGVudEl0ZW0oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRleHRDb250ZW50Lml0ZW1zLnB1c2goe1xuICAgICAgICAgIHN0cjogXCJcIixcbiAgICAgICAgICBkaXI6IFwibHRyXCIsXG4gICAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICAgIHRyYW5zZm9ybTogZ2V0Q3VycmVudFRleHRUcmFuc2Zvcm0oKSxcbiAgICAgICAgICBmb250TmFtZTogdGV4dFN0YXRlLmZvbnQubG9hZGVkTmFtZSxcbiAgICAgICAgICBoYXNFT0w6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkRmFrZVNwYWNlcyh3aWR0aCwgdHJhbnNmKSB7XG4gICAgICBpZiAodGV4dENvbnRlbnRJdGVtLnNwYWNlSW5GbG93TWluIDw9IHdpZHRoICYmIHdpZHRoIDw9IHRleHRDb250ZW50SXRlbS5zcGFjZUluRmxvd01heCkge1xuICAgICAgICBpZiAodGV4dENvbnRlbnRJdGVtLmluaXRpYWxpemVkKSB7XG4gICAgICAgICAgdGV4dENvbnRlbnRJdGVtLnN0ci5wdXNoKFwiIFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm9udE5hbWUgPSB0ZXh0Q29udGVudEl0ZW0uZm9udE5hbWU7XG4gICAgICBsZXQgaGVpZ2h0ID0gMDtcblxuICAgICAgaWYgKHRleHRDb250ZW50SXRlbS52ZXJ0aWNhbCkge1xuICAgICAgICBoZWlnaHQgPSB3aWR0aDtcbiAgICAgICAgd2lkdGggPSAwO1xuICAgICAgfVxuXG4gICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuICAgICAgdGV4dENvbnRlbnQuaXRlbXMucHVzaCh7XG4gICAgICAgIHN0cjogXCIgXCIsXG4gICAgICAgIGRpcjogXCJsdHJcIixcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2YgfHwgZ2V0Q3VycmVudFRleHRUcmFuc2Zvcm0oKSxcbiAgICAgICAgZm9udE5hbWUsXG4gICAgICAgIGhhc0VPTDogZmFsc2VcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmx1c2hUZXh0Q29udGVudEl0ZW0oKSB7XG4gICAgICBpZiAoIXRleHRDb250ZW50SXRlbS5pbml0aWFsaXplZCB8fCAhdGV4dENvbnRlbnRJdGVtLnN0cikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghdGV4dENvbnRlbnRJdGVtLnZlcnRpY2FsKSB7XG4gICAgICAgIHRleHRDb250ZW50SXRlbS50b3RhbFdpZHRoICs9IHRleHRDb250ZW50SXRlbS53aWR0aCAqIHRleHRDb250ZW50SXRlbS50ZXh0QWR2YW5jZVNjYWxlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGV4dENvbnRlbnRJdGVtLnRvdGFsSGVpZ2h0ICs9IHRleHRDb250ZW50SXRlbS5oZWlnaHQgKiB0ZXh0Q29udGVudEl0ZW0udGV4dEFkdmFuY2VTY2FsZTtcbiAgICAgIH1cblxuICAgICAgdGV4dENvbnRlbnQuaXRlbXMucHVzaChydW5CaWRpVHJhbnNmb3JtKHRleHRDb250ZW50SXRlbSkpO1xuICAgICAgdGV4dENvbnRlbnRJdGVtLmluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgICB0ZXh0Q29udGVudEl0ZW0uc3RyLmxlbmd0aCA9IDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW5xdWV1ZUNodW5rKGJhdGNoID0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IGxlbmd0aCA9IHRleHRDb250ZW50Lml0ZW1zLmxlbmd0aDtcblxuICAgICAgaWYgKGxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChiYXRjaCAmJiBsZW5ndGggPCBURVhUX0NIVU5LX0JBVENIX1NJWkUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzaW5rLmVucXVldWUodGV4dENvbnRlbnQsIGxlbmd0aCk7XG4gICAgICB0ZXh0Q29udGVudC5pdGVtcyA9IFtdO1xuICAgICAgdGV4dENvbnRlbnQuc3R5bGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lU2xvdE1hbmFnZXIgPSBuZXcgVGltZVNsb3RNYW5hZ2VyKCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2VCb2R5KHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgY29uc3QgbmV4dCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIGVucXVldWVDaHVuayh0cnVlKTtcbiAgICAgICAgUHJvbWlzZS5hbGwoW3Byb21pc2UsIHNpbmsucmVhZHldKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcHJvbWlzZUJvZHkocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgcmVqZWN0KGV4KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9O1xuXG4gICAgICB0YXNrLmVuc3VyZU5vdFRlcm1pbmF0ZWQoKTtcbiAgICAgIHRpbWVTbG90TWFuYWdlci5yZXNldCgpO1xuICAgICAgY29uc3Qgb3BlcmF0aW9uID0ge307XG4gICAgICBsZXQgc3RvcCxcbiAgICAgICAgICBhcmdzID0gW107XG5cbiAgICAgIHdoaWxlICghKHN0b3AgPSB0aW1lU2xvdE1hbmFnZXIuY2hlY2soKSkpIHtcbiAgICAgICAgYXJncy5sZW5ndGggPSAwO1xuICAgICAgICBvcGVyYXRpb24uYXJncyA9IGFyZ3M7XG5cbiAgICAgICAgaWYgKCFwcmVwcm9jZXNzb3IucmVhZChvcGVyYXRpb24pKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0ZXh0U3RhdGUgPSBzdGF0ZU1hbmFnZXIuc3RhdGU7XG4gICAgICAgIGNvbnN0IGZuID0gb3BlcmF0aW9uLmZuO1xuICAgICAgICBhcmdzID0gb3BlcmF0aW9uLmFyZ3M7XG5cbiAgICAgICAgc3dpdGNoIChmbiB8IDApIHtcbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRGb250OlxuICAgICAgICAgICAgdmFyIGZvbnROYW1lQXJnID0gYXJnc1swXS5uYW1lLFxuICAgICAgICAgICAgICAgIGZvbnRTaXplQXJnID0gYXJnc1sxXTtcblxuICAgICAgICAgICAgaWYgKHRleHRTdGF0ZS5mb250ICYmIGZvbnROYW1lQXJnID09PSB0ZXh0U3RhdGUuZm9udE5hbWUgJiYgZm9udFNpemVBcmcgPT09IHRleHRTdGF0ZS5mb250U2l6ZSkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZmx1c2hUZXh0Q29udGVudEl0ZW0oKTtcbiAgICAgICAgICAgIHRleHRTdGF0ZS5mb250TmFtZSA9IGZvbnROYW1lQXJnO1xuICAgICAgICAgICAgdGV4dFN0YXRlLmZvbnRTaXplID0gZm9udFNpemVBcmc7XG4gICAgICAgICAgICBuZXh0KGhhbmRsZVNldEZvbnQoZm9udE5hbWVBcmcsIG51bGwpKTtcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFRleHRSaXNlOlxuICAgICAgICAgICAgdGV4dFN0YXRlLnRleHRSaXNlID0gYXJnc1swXTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0SFNjYWxlOlxuICAgICAgICAgICAgdGV4dFN0YXRlLnRleHRIU2NhbGUgPSBhcmdzWzBdIC8gMTAwO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRMZWFkaW5nOlxuICAgICAgICAgICAgdGV4dFN0YXRlLmxlYWRpbmcgPSBhcmdzWzBdO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5tb3ZlVGV4dDpcbiAgICAgICAgICAgIHRleHRTdGF0ZS50cmFuc2xhdGVUZXh0TGluZU1hdHJpeChhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgICAgIHRleHRTdGF0ZS50ZXh0TWF0cml4ID0gdGV4dFN0YXRlLnRleHRMaW5lTWF0cml4LnNsaWNlKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldExlYWRpbmdNb3ZlVGV4dDpcbiAgICAgICAgICAgIHRleHRTdGF0ZS5sZWFkaW5nID0gLWFyZ3NbMV07XG4gICAgICAgICAgICB0ZXh0U3RhdGUudHJhbnNsYXRlVGV4dExpbmVNYXRyaXgoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgICAgICB0ZXh0U3RhdGUudGV4dE1hdHJpeCA9IHRleHRTdGF0ZS50ZXh0TGluZU1hdHJpeC5zbGljZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5uZXh0TGluZTpcbiAgICAgICAgICAgIHRleHRTdGF0ZS5jYXJyaWFnZVJldHVybigpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRUZXh0TWF0cml4OlxuICAgICAgICAgICAgdGV4dFN0YXRlLnNldFRleHRNYXRyaXgoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSwgYXJnc1s1XSk7XG4gICAgICAgICAgICB0ZXh0U3RhdGUuc2V0VGV4dExpbmVNYXRyaXgoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSwgYXJnc1s1XSk7XG4gICAgICAgICAgICB1cGRhdGVBZHZhbmNlU2NhbGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0Q2hhclNwYWNpbmc6XG4gICAgICAgICAgICB0ZXh0U3RhdGUuY2hhclNwYWNpbmcgPSBhcmdzWzBdO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRXb3JkU3BhY2luZzpcbiAgICAgICAgICAgIHRleHRTdGF0ZS53b3JkU3BhY2luZyA9IGFyZ3NbMF07XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmJlZ2luVGV4dDpcbiAgICAgICAgICAgIHRleHRTdGF0ZS50ZXh0TWF0cml4ID0gX3V0aWwuSURFTlRJVFlfTUFUUklYLnNsaWNlKCk7XG4gICAgICAgICAgICB0ZXh0U3RhdGUudGV4dExpbmVNYXRyaXggPSBfdXRpbC5JREVOVElUWV9NQVRSSVguc2xpY2UoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2hvd1NwYWNlZFRleHQ6XG4gICAgICAgICAgICBpZiAoIXN0YXRlTWFuYWdlci5zdGF0ZS5mb250KSB7XG4gICAgICAgICAgICAgIHNlbGYuZW5zdXJlU3RhdGVGb250KHN0YXRlTWFuYWdlci5zdGF0ZSk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzcGFjZUZhY3RvciA9ICh0ZXh0U3RhdGUuZm9udC52ZXJ0aWNhbCA/IDEgOiAtMSkgKiB0ZXh0U3RhdGUuZm9udFNpemUgLyAxMDAwO1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBhcmdzWzBdO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBlbGVtZW50cy5sZW5ndGg7IGkgPCBpaSAtIDE7IGkrKykge1xuICAgICAgICAgICAgICBjb25zdCBpdGVtID0gZWxlbWVudHNbaV07XG5cbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgc2hvd1NwYWNlZFRleHRCdWZmZXIucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaXRlbSA9PT0gXCJudW1iZXJcIiAmJiBpdGVtICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyID0gc2hvd1NwYWNlZFRleHRCdWZmZXIuam9pbihcIlwiKTtcbiAgICAgICAgICAgICAgICBzaG93U3BhY2VkVGV4dEJ1ZmZlci5sZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgIGJ1aWxkVGV4dENvbnRlbnRJdGVtKHtcbiAgICAgICAgICAgICAgICAgIGNoYXJzOiBzdHIsXG4gICAgICAgICAgICAgICAgICBleHRyYVNwYWNpbmc6IGl0ZW0gKiBzcGFjZUZhY3RvclxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBlbGVtZW50c1tlbGVtZW50cy5sZW5ndGggLSAxXTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgIHNob3dTcGFjZWRUZXh0QnVmZmVyLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaG93U3BhY2VkVGV4dEJ1ZmZlci5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHN0ciA9IHNob3dTcGFjZWRUZXh0QnVmZmVyLmpvaW4oXCJcIik7XG4gICAgICAgICAgICAgIHNob3dTcGFjZWRUZXh0QnVmZmVyLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgIGJ1aWxkVGV4dENvbnRlbnRJdGVtKHtcbiAgICAgICAgICAgICAgICBjaGFyczogc3RyLFxuICAgICAgICAgICAgICAgIGV4dHJhU3BhY2luZzogMFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zaG93VGV4dDpcbiAgICAgICAgICAgIGlmICghc3RhdGVNYW5hZ2VyLnN0YXRlLmZvbnQpIHtcbiAgICAgICAgICAgICAgc2VsZi5lbnN1cmVTdGF0ZUZvbnQoc3RhdGVNYW5hZ2VyLnN0YXRlKTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJ1aWxkVGV4dENvbnRlbnRJdGVtKHtcbiAgICAgICAgICAgICAgY2hhcnM6IGFyZ3NbMF0sXG4gICAgICAgICAgICAgIGV4dHJhU3BhY2luZzogMFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLm5leHRMaW5lU2hvd1RleHQ6XG4gICAgICAgICAgICBpZiAoIXN0YXRlTWFuYWdlci5zdGF0ZS5mb250KSB7XG4gICAgICAgICAgICAgIHNlbGYuZW5zdXJlU3RhdGVGb250KHN0YXRlTWFuYWdlci5zdGF0ZSk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0ZXh0U3RhdGUuY2FycmlhZ2VSZXR1cm4oKTtcbiAgICAgICAgICAgIGJ1aWxkVGV4dENvbnRlbnRJdGVtKHtcbiAgICAgICAgICAgICAgY2hhcnM6IGFyZ3NbMF0sXG4gICAgICAgICAgICAgIGV4dHJhU3BhY2luZzogMFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLm5leHRMaW5lU2V0U3BhY2luZ1Nob3dUZXh0OlxuICAgICAgICAgICAgaWYgKCFzdGF0ZU1hbmFnZXIuc3RhdGUuZm9udCkge1xuICAgICAgICAgICAgICBzZWxmLmVuc3VyZVN0YXRlRm9udChzdGF0ZU1hbmFnZXIuc3RhdGUpO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGV4dFN0YXRlLndvcmRTcGFjaW5nID0gYXJnc1swXTtcbiAgICAgICAgICAgIHRleHRTdGF0ZS5jaGFyU3BhY2luZyA9IGFyZ3NbMV07XG4gICAgICAgICAgICB0ZXh0U3RhdGUuY2FycmlhZ2VSZXR1cm4oKTtcbiAgICAgICAgICAgIGJ1aWxkVGV4dENvbnRlbnRJdGVtKHtcbiAgICAgICAgICAgICAgY2hhcnM6IGFyZ3NbMl0sXG4gICAgICAgICAgICAgIGV4dHJhU3BhY2luZzogMFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnBhaW50WE9iamVjdDpcbiAgICAgICAgICAgIGZsdXNoVGV4dENvbnRlbnRJdGVtKCk7XG5cbiAgICAgICAgICAgIGlmICgheG9ianMpIHtcbiAgICAgICAgICAgICAgeG9ianMgPSByZXNvdXJjZXMuZ2V0KFwiWE9iamVjdFwiKSB8fCBfcHJpbWl0aXZlcy5EaWN0LmVtcHR5O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgaXNWYWxpZE5hbWUgPSBhcmdzWzBdIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuTmFtZTtcbiAgICAgICAgICAgIHZhciBuYW1lID0gYXJnc1swXS5uYW1lO1xuXG4gICAgICAgICAgICBpZiAoaXNWYWxpZE5hbWUgJiYgZW1wdHlYT2JqZWN0Q2FjaGUuZ2V0QnlOYW1lKG5hbWUpKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBuZXh0KG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlWE9iamVjdCwgcmVqZWN0WE9iamVjdCkge1xuICAgICAgICAgICAgICBpZiAoIWlzVmFsaWROYW1lKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiWE9iamVjdCBtdXN0IGJlIHJlZmVycmVkIHRvIGJ5IG5hbWUuXCIpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgbGV0IHhvYmogPSB4b2Jqcy5nZXRSYXcobmFtZSk7XG5cbiAgICAgICAgICAgICAgaWYgKHhvYmogaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5SZWYpIHtcbiAgICAgICAgICAgICAgICBpZiAoZW1wdHlYT2JqZWN0Q2FjaGUuZ2V0QnlSZWYoeG9iaikpIHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmVYT2JqZWN0KCk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgZ2xvYmFsSW1hZ2UgPSBzZWxmLmdsb2JhbEltYWdlQ2FjaGUuZ2V0RGF0YSh4b2JqLCBzZWxmLnBhZ2VJbmRleCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoZ2xvYmFsSW1hZ2UpIHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmVYT2JqZWN0KCk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgeG9iaiA9IHhyZWYuZmV0Y2goeG9iaik7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkoeG9iaikpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJYT2JqZWN0IHNob3VsZCBiZSBhIHN0cmVhbVwiKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSB4b2JqLmRpY3QuZ2V0KFwiU3VidHlwZVwiKTtcblxuICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHR5cGUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiWE9iamVjdCBzaG91bGQgaGF2ZSBhIE5hbWUgc3VidHlwZVwiKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0eXBlLm5hbWUgIT09IFwiRm9ybVwiKSB7XG4gICAgICAgICAgICAgICAgZW1wdHlYT2JqZWN0Q2FjaGUuc2V0KG5hbWUsIHhvYmouZGljdC5vYmpJZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZVhPYmplY3QoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U3RhdGUgPSBzdGF0ZU1hbmFnZXIuc3RhdGUuY2xvbmUoKTtcbiAgICAgICAgICAgICAgY29uc3QgeE9ialN0YXRlTWFuYWdlciA9IG5ldyBTdGF0ZU1hbmFnZXIoY3VycmVudFN0YXRlKTtcbiAgICAgICAgICAgICAgY29uc3QgbWF0cml4ID0geG9iai5kaWN0LmdldEFycmF5KFwiTWF0cml4XCIpO1xuXG4gICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1hdHJpeCkgJiYgbWF0cml4Lmxlbmd0aCA9PT0gNikge1xuICAgICAgICAgICAgICAgIHhPYmpTdGF0ZU1hbmFnZXIudHJhbnNmb3JtKG1hdHJpeCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBlbnF1ZXVlQ2h1bmsoKTtcbiAgICAgICAgICAgICAgY29uc3Qgc2lua1dyYXBwZXIgPSB7XG4gICAgICAgICAgICAgICAgZW5xdWV1ZUludm9rZWQ6IGZhbHNlLFxuXG4gICAgICAgICAgICAgICAgZW5xdWV1ZShjaHVuaywgc2l6ZSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5lbnF1ZXVlSW52b2tlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICBzaW5rLmVucXVldWUoY2h1bmssIHNpemUpO1xuICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICBnZXQgZGVzaXJlZFNpemUoKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gc2luay5kZXNpcmVkU2l6ZTtcbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgZ2V0IHJlYWR5KCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHNpbmsucmVhZHk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHNlbGYuZ2V0VGV4dENvbnRlbnQoe1xuICAgICAgICAgICAgICAgIHN0cmVhbTogeG9iaixcbiAgICAgICAgICAgICAgICB0YXNrLFxuICAgICAgICAgICAgICAgIHJlc291cmNlczogeG9iai5kaWN0LmdldChcIlJlc291cmNlc1wiKSB8fCByZXNvdXJjZXMsXG4gICAgICAgICAgICAgICAgc3RhdGVNYW5hZ2VyOiB4T2JqU3RhdGVNYW5hZ2VyLFxuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZVdoaXRlc3BhY2UsXG4gICAgICAgICAgICAgICAgY29tYmluZVRleHRJdGVtcyxcbiAgICAgICAgICAgICAgICBpbmNsdWRlTWFya2VkQ29udGVudCxcbiAgICAgICAgICAgICAgICBzaW5rOiBzaW5rV3JhcHBlcixcbiAgICAgICAgICAgICAgICBzZWVuU3R5bGVzXG4gICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICghc2lua1dyYXBwZXIuZW5xdWV1ZUludm9rZWQpIHtcbiAgICAgICAgICAgICAgICAgIGVtcHR5WE9iamVjdENhY2hlLnNldChuYW1lLCB4b2JqLmRpY3Qub2JqSWQsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlc29sdmVYT2JqZWN0KCk7XG4gICAgICAgICAgICAgIH0sIHJlamVjdFhPYmplY3QpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgICBpZiAocmVhc29uIGluc3RhbmNlb2YgX3V0aWwuQWJvcnRFeGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoc2VsZi5vcHRpb25zLmlnbm9yZUVycm9ycykge1xuICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgZ2V0VGV4dENvbnRlbnQgLSBpZ25vcmluZyBYT2JqZWN0OiBcIiR7cmVhc29ufVwiLmApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRocm93IHJlYXNvbjtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldEdTdGF0ZTpcbiAgICAgICAgICAgIGlzVmFsaWROYW1lID0gYXJnc1swXSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLk5hbWU7XG4gICAgICAgICAgICBuYW1lID0gYXJnc1swXS5uYW1lO1xuXG4gICAgICAgICAgICBpZiAoaXNWYWxpZE5hbWUgJiYgZW1wdHlHU3RhdGVDYWNoZS5nZXRCeU5hbWUobmFtZSkpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5leHQobmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmVHU3RhdGUsIHJlamVjdEdTdGF0ZSkge1xuICAgICAgICAgICAgICBpZiAoIWlzVmFsaWROYW1lKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiR1N0YXRlIG11c3QgYmUgcmVmZXJyZWQgdG8gYnkgbmFtZS5cIik7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCBleHRHU3RhdGUgPSByZXNvdXJjZXMuZ2V0KFwiRXh0R1N0YXRlXCIpO1xuXG4gICAgICAgICAgICAgIGlmICghKGV4dEdTdGF0ZSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiRXh0R1N0YXRlIHNob3VsZCBiZSBhIGRpY3Rpb25hcnkuXCIpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgZ1N0YXRlID0gZXh0R1N0YXRlLmdldChuYW1lKTtcblxuICAgICAgICAgICAgICBpZiAoIShnU3RhdGUgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5EaWN0KSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkdTdGF0ZSBzaG91bGQgYmUgYSBkaWN0aW9uYXJ5LlwiKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IGdTdGF0ZUZvbnQgPSBnU3RhdGUuZ2V0KFwiRm9udFwiKTtcblxuICAgICAgICAgICAgICBpZiAoIWdTdGF0ZUZvbnQpIHtcbiAgICAgICAgICAgICAgICBlbXB0eUdTdGF0ZUNhY2hlLnNldChuYW1lLCBnU3RhdGUub2JqSWQsIHRydWUpO1xuICAgICAgICAgICAgICAgIHJlc29sdmVHU3RhdGUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuICAgICAgICAgICAgICB0ZXh0U3RhdGUuZm9udE5hbWUgPSBudWxsO1xuICAgICAgICAgICAgICB0ZXh0U3RhdGUuZm9udFNpemUgPSBnU3RhdGVGb250WzFdO1xuICAgICAgICAgICAgICBoYW5kbGVTZXRGb250KG51bGwsIGdTdGF0ZUZvbnRbMF0pLnRoZW4ocmVzb2x2ZUdTdGF0ZSwgcmVqZWN0R1N0YXRlKTtcbiAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICAgICAgaWYgKHJlYXNvbiBpbnN0YW5jZW9mIF91dGlsLkFib3J0RXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHNlbGYub3B0aW9ucy5pZ25vcmVFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoYGdldFRleHRDb250ZW50IC0gaWdub3JpbmcgRXh0R1N0YXRlOiBcIiR7cmVhc29ufVwiLmApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRocm93IHJlYXNvbjtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmJlZ2luTWFya2VkQ29udGVudDpcbiAgICAgICAgICAgIGlmIChpbmNsdWRlTWFya2VkQ29udGVudCkge1xuICAgICAgICAgICAgICB0ZXh0Q29udGVudC5pdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImJlZ2luTWFya2VkQ29udGVudFwiLFxuICAgICAgICAgICAgICAgIHRhZzogKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoYXJnc1swXSkgPyBhcmdzWzBdLm5hbWUgOiBudWxsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzOlxuICAgICAgICAgICAgaWYgKGluY2x1ZGVNYXJrZWRDb250ZW50KSB7XG4gICAgICAgICAgICAgIGZsdXNoVGV4dENvbnRlbnRJdGVtKCk7XG4gICAgICAgICAgICAgIGxldCBtY2lkID0gbnVsbDtcblxuICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoYXJnc1sxXSkpIHtcbiAgICAgICAgICAgICAgICBtY2lkID0gYXJnc1sxXS5nZXQoXCJNQ0lEXCIpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGV4dENvbnRlbnQuaXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJiZWdpbk1hcmtlZENvbnRlbnRQcm9wc1wiLFxuICAgICAgICAgICAgICAgIGlkOiBOdW1iZXIuaXNJbnRlZ2VyKG1jaWQpID8gYCR7c2VsZi5pZEZhY3RvcnkuZ2V0UGFnZU9iaklkKCl9X21jaWQke21jaWR9YCA6IG51bGwsXG4gICAgICAgICAgICAgICAgdGFnOiAoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShhcmdzWzBdKSA/IGFyZ3NbMF0ubmFtZSA6IG51bGxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBfdXRpbC5PUFMuZW5kTWFya2VkQ29udGVudDpcbiAgICAgICAgICAgIGlmIChpbmNsdWRlTWFya2VkQ29udGVudCkge1xuICAgICAgICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuICAgICAgICAgICAgICB0ZXh0Q29udGVudC5pdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImVuZE1hcmtlZENvbnRlbnRcIlxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGV4dENvbnRlbnQuaXRlbXMubGVuZ3RoID49IHNpbmsuZGVzaXJlZFNpemUpIHtcbiAgICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc3RvcCkge1xuICAgICAgICBuZXh0KGRlZmVycmVkKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuICAgICAgZW5xdWV1ZUNodW5rKCk7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSkuY2F0Y2gocmVhc29uID0+IHtcbiAgICAgIGlmIChyZWFzb24gaW5zdGFuY2VvZiBfdXRpbC5BYm9ydEV4Y2VwdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShgZ2V0VGV4dENvbnRlbnQgLSBpZ25vcmluZyBlcnJvcnMgZHVyaW5nIFwiJHt0YXNrLm5hbWV9XCIgYCArIGB0YXNrOiBcIiR7cmVhc29ufVwiLmApO1xuICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuICAgICAgICBlbnF1ZXVlQ2h1bmsoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyByZWFzb247XG4gICAgfSk7XG4gIH1cblxuICBleHRyYWN0RGF0YVN0cnVjdHVyZXMoZGljdCwgYmFzZURpY3QsIHByb3BlcnRpZXMpIHtcbiAgICBjb25zdCB4cmVmID0gdGhpcy54cmVmO1xuICAgIGxldCBjaWRUb0dpZEJ5dGVzO1xuICAgIGNvbnN0IHRvVW5pY29kZVByb21pc2UgPSB0aGlzLnJlYWRUb1VuaWNvZGUocHJvcGVydGllcy50b1VuaWNvZGUgfHwgZGljdC5nZXQoXCJUb1VuaWNvZGVcIikgfHwgYmFzZURpY3QuZ2V0KFwiVG9Vbmljb2RlXCIpKTtcblxuICAgIGlmIChwcm9wZXJ0aWVzLmNvbXBvc2l0ZSkge1xuICAgICAgY29uc3QgY2lkU3lzdGVtSW5mbyA9IGRpY3QuZ2V0KFwiQ0lEU3lzdGVtSW5mb1wiKTtcblxuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGNpZFN5c3RlbUluZm8pKSB7XG4gICAgICAgIHByb3BlcnRpZXMuY2lkU3lzdGVtSW5mbyA9IHtcbiAgICAgICAgICByZWdpc3RyeTogKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShjaWRTeXN0ZW1JbmZvLmdldChcIlJlZ2lzdHJ5XCIpKSxcbiAgICAgICAgICBvcmRlcmluZzogKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShjaWRTeXN0ZW1JbmZvLmdldChcIk9yZGVyaW5nXCIpKSxcbiAgICAgICAgICBzdXBwbGVtZW50OiBjaWRTeXN0ZW1JbmZvLmdldChcIlN1cHBsZW1lbnRcIilcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2lkVG9HaWRNYXAgPSBkaWN0LmdldChcIkNJRFRvR0lETWFwXCIpO1xuXG4gICAgICBpZiAoY2lkVG9HaWRNYXAgaW5zdGFuY2VvZiBfYmFzZV9zdHJlYW0uQmFzZVN0cmVhbSkge1xuICAgICAgICBjaWRUb0dpZEJ5dGVzID0gY2lkVG9HaWRNYXAuZ2V0Qnl0ZXMoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBkaWZmZXJlbmNlcyA9IFtdO1xuICAgIGxldCBiYXNlRW5jb2RpbmdOYW1lID0gbnVsbDtcbiAgICBsZXQgZW5jb2Rpbmc7XG5cbiAgICBpZiAoZGljdC5oYXMoXCJFbmNvZGluZ1wiKSkge1xuICAgICAgZW5jb2RpbmcgPSBkaWN0LmdldChcIkVuY29kaW5nXCIpO1xuXG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoZW5jb2RpbmcpKSB7XG4gICAgICAgIGJhc2VFbmNvZGluZ05hbWUgPSBlbmNvZGluZy5nZXQoXCJCYXNlRW5jb2RpbmdcIik7XG4gICAgICAgIGJhc2VFbmNvZGluZ05hbWUgPSAoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShiYXNlRW5jb2RpbmdOYW1lKSA/IGJhc2VFbmNvZGluZ05hbWUubmFtZSA6IG51bGw7XG5cbiAgICAgICAgaWYgKGVuY29kaW5nLmhhcyhcIkRpZmZlcmVuY2VzXCIpKSB7XG4gICAgICAgICAgY29uc3QgZGlmZkVuY29kaW5nID0gZW5jb2RpbmcuZ2V0KFwiRGlmZmVyZW5jZXNcIik7XG4gICAgICAgICAgbGV0IGluZGV4ID0gMDtcblxuICAgICAgICAgIGZvciAobGV0IGogPSAwLCBqaiA9IGRpZmZFbmNvZGluZy5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0geHJlZi5mZXRjaElmUmVmKGRpZmZFbmNvZGluZ1tqXSk7XG5cbiAgICAgICAgICAgIGlmICgoMCwgX3V0aWwuaXNOdW0pKGRhdGEpKSB7XG4gICAgICAgICAgICAgIGluZGV4ID0gZGF0YTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgZGlmZmVyZW5jZXNbaW5kZXgrK10gPSBkYXRhLm5hbWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYEludmFsaWQgZW50cnkgaW4gJ0RpZmZlcmVuY2VzJyBhcnJheTogJHtkYXRhfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShlbmNvZGluZykpIHtcbiAgICAgICAgYmFzZUVuY29kaW5nTmFtZSA9IGVuY29kaW5nLm5hbWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJFbmNvZGluZyBpcyBub3QgYSBOYW1lIG5vciBhIERpY3RcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChiYXNlRW5jb2RpbmdOYW1lICE9PSBcIk1hY1JvbWFuRW5jb2RpbmdcIiAmJiBiYXNlRW5jb2RpbmdOYW1lICE9PSBcIk1hY0V4cGVydEVuY29kaW5nXCIgJiYgYmFzZUVuY29kaW5nTmFtZSAhPT0gXCJXaW5BbnNpRW5jb2RpbmdcIikge1xuICAgICAgICBiYXNlRW5jb2RpbmdOYW1lID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYmFzZUVuY29kaW5nTmFtZSkge1xuICAgICAgcHJvcGVydGllcy5kZWZhdWx0RW5jb2RpbmcgPSAoMCwgX2VuY29kaW5ncy5nZXRFbmNvZGluZykoYmFzZUVuY29kaW5nTmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGlzU3ltYm9saWNGb250ID0gISEocHJvcGVydGllcy5mbGFncyAmIF9mb250c191dGlscy5Gb250RmxhZ3MuU3ltYm9saWMpO1xuICAgICAgY29uc3QgaXNOb25zeW1ib2xpY0ZvbnQgPSAhIShwcm9wZXJ0aWVzLmZsYWdzICYgX2ZvbnRzX3V0aWxzLkZvbnRGbGFncy5Ob25zeW1ib2xpYyk7XG4gICAgICBlbmNvZGluZyA9IF9lbmNvZGluZ3MuU3RhbmRhcmRFbmNvZGluZztcblxuICAgICAgaWYgKHByb3BlcnRpZXMudHlwZSA9PT0gXCJUcnVlVHlwZVwiICYmICFpc05vbnN5bWJvbGljRm9udCkge1xuICAgICAgICBlbmNvZGluZyA9IF9lbmNvZGluZ3MuV2luQW5zaUVuY29kaW5nO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNTeW1ib2xpY0ZvbnQpIHtcbiAgICAgICAgZW5jb2RpbmcgPSBfZW5jb2RpbmdzLk1hY1JvbWFuRW5jb2Rpbmc7XG5cbiAgICAgICAgaWYgKCFwcm9wZXJ0aWVzLmZpbGUgfHwgcHJvcGVydGllcy5pc0ludGVybmFsRm9udCkge1xuICAgICAgICAgIGlmICgvU3ltYm9sL2kudGVzdChwcm9wZXJ0aWVzLm5hbWUpKSB7XG4gICAgICAgICAgICBlbmNvZGluZyA9IF9lbmNvZGluZ3MuU3ltYm9sU2V0RW5jb2Rpbmc7XG4gICAgICAgICAgfSBlbHNlIGlmICgvRGluZ2JhdHN8V2luZ2RpbmdzL2kudGVzdChwcm9wZXJ0aWVzLm5hbWUpKSB7XG4gICAgICAgICAgICBlbmNvZGluZyA9IF9lbmNvZGluZ3MuWmFwZkRpbmdiYXRzRW5jb2Rpbmc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHByb3BlcnRpZXMuZGVmYXVsdEVuY29kaW5nID0gZW5jb2Rpbmc7XG4gICAgfVxuXG4gICAgcHJvcGVydGllcy5kaWZmZXJlbmNlcyA9IGRpZmZlcmVuY2VzO1xuICAgIHByb3BlcnRpZXMuYmFzZUVuY29kaW5nTmFtZSA9IGJhc2VFbmNvZGluZ05hbWU7XG4gICAgcHJvcGVydGllcy5oYXNFbmNvZGluZyA9ICEhYmFzZUVuY29kaW5nTmFtZSB8fCBkaWZmZXJlbmNlcy5sZW5ndGggPiAwO1xuICAgIHByb3BlcnRpZXMuZGljdCA9IGRpY3Q7XG4gICAgcmV0dXJuIHRvVW5pY29kZVByb21pc2UudGhlbihyZWFkVG9Vbmljb2RlID0+IHtcbiAgICAgIHByb3BlcnRpZXMudG9Vbmljb2RlID0gcmVhZFRvVW5pY29kZTtcbiAgICAgIHJldHVybiB0aGlzLmJ1aWxkVG9Vbmljb2RlKHByb3BlcnRpZXMpO1xuICAgIH0pLnRoZW4oYnVpbHRUb1VuaWNvZGUgPT4ge1xuICAgICAgcHJvcGVydGllcy50b1VuaWNvZGUgPSBidWlsdFRvVW5pY29kZTtcblxuICAgICAgaWYgKGNpZFRvR2lkQnl0ZXMpIHtcbiAgICAgICAgcHJvcGVydGllcy5jaWRUb0dpZE1hcCA9IHRoaXMucmVhZENpZFRvR2lkTWFwKGNpZFRvR2lkQnl0ZXMsIGJ1aWx0VG9Vbmljb2RlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gICAgfSk7XG4gIH1cblxuICBfc2ltcGxlRm9udFRvVW5pY29kZShwcm9wZXJ0aWVzLCBmb3JjZUdseXBocyA9IGZhbHNlKSB7XG4gICAgKDAsIF91dGlsLmFzc2VydCkoIXByb3BlcnRpZXMuY29tcG9zaXRlLCBcIk11c3QgYmUgYSBzaW1wbGUgZm9udC5cIik7XG4gICAgY29uc3QgdG9Vbmljb2RlID0gW107XG4gICAgY29uc3QgZW5jb2RpbmcgPSBwcm9wZXJ0aWVzLmRlZmF1bHRFbmNvZGluZy5zbGljZSgpO1xuICAgIGNvbnN0IGJhc2VFbmNvZGluZ05hbWUgPSBwcm9wZXJ0aWVzLmJhc2VFbmNvZGluZ05hbWU7XG4gICAgY29uc3QgZGlmZmVyZW5jZXMgPSBwcm9wZXJ0aWVzLmRpZmZlcmVuY2VzO1xuXG4gICAgZm9yIChjb25zdCBjaGFyY29kZSBpbiBkaWZmZXJlbmNlcykge1xuICAgICAgY29uc3QgZ2x5cGhOYW1lID0gZGlmZmVyZW5jZXNbY2hhcmNvZGVdO1xuXG4gICAgICBpZiAoZ2x5cGhOYW1lID09PSBcIi5ub3RkZWZcIikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgZW5jb2RpbmdbY2hhcmNvZGVdID0gZ2x5cGhOYW1lO1xuICAgIH1cblxuICAgIGNvbnN0IGdseXBoc1VuaWNvZGVNYXAgPSAoMCwgX2dseXBobGlzdC5nZXRHbHlwaHNVbmljb2RlKSgpO1xuXG4gICAgZm9yIChjb25zdCBjaGFyY29kZSBpbiBlbmNvZGluZykge1xuICAgICAgbGV0IGdseXBoTmFtZSA9IGVuY29kaW5nW2NoYXJjb2RlXTtcblxuICAgICAgaWYgKGdseXBoTmFtZSA9PT0gXCJcIikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSBpZiAoZ2x5cGhzVW5pY29kZU1hcFtnbHlwaE5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IGNvZGUgPSAwO1xuXG4gICAgICAgIHN3aXRjaCAoZ2x5cGhOYW1lWzBdKSB7XG4gICAgICAgICAgY2FzZSBcIkdcIjpcbiAgICAgICAgICAgIGlmIChnbHlwaE5hbWUubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAgIGNvZGUgPSBwYXJzZUludChnbHlwaE5hbWUuc3Vic3RyaW5nKDEpLCAxNik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcImdcIjpcbiAgICAgICAgICAgIGlmIChnbHlwaE5hbWUubGVuZ3RoID09PSA1KSB7XG4gICAgICAgICAgICAgIGNvZGUgPSBwYXJzZUludChnbHlwaE5hbWUuc3Vic3RyaW5nKDEpLCAxNik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIkNcIjpcbiAgICAgICAgICBjYXNlIFwiY1wiOlxuICAgICAgICAgICAgaWYgKGdseXBoTmFtZS5sZW5ndGggPj0gMyAmJiBnbHlwaE5hbWUubGVuZ3RoIDw9IDQpIHtcbiAgICAgICAgICAgICAgY29uc3QgY29kZVN0ciA9IGdseXBoTmFtZS5zdWJzdHJpbmcoMSk7XG5cbiAgICAgICAgICAgICAgaWYgKGZvcmNlR2x5cGhzKSB7XG4gICAgICAgICAgICAgICAgY29kZSA9IHBhcnNlSW50KGNvZGVTdHIsIDE2KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvZGUgPSArY29kZVN0cjtcblxuICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKGNvZGUpICYmIE51bWJlci5pc0ludGVnZXIocGFyc2VJbnQoY29kZVN0ciwgMTYpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaW1wbGVGb250VG9Vbmljb2RlKHByb3BlcnRpZXMsIHRydWUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNvbnN0IHVuaWNvZGUgPSAoMCwgX3VuaWNvZGUuZ2V0VW5pY29kZUZvckdseXBoKShnbHlwaE5hbWUsIGdseXBoc1VuaWNvZGVNYXApO1xuXG4gICAgICAgICAgICBpZiAodW5pY29kZSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgY29kZSA9IHVuaWNvZGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2RlID4gMCAmJiBjb2RlIDw9IDB4MTBmZmZmICYmIE51bWJlci5pc0ludGVnZXIoY29kZSkpIHtcbiAgICAgICAgICBpZiAoYmFzZUVuY29kaW5nTmFtZSAmJiBjb2RlID09PSArY2hhcmNvZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VFbmNvZGluZyA9ICgwLCBfZW5jb2RpbmdzLmdldEVuY29kaW5nKShiYXNlRW5jb2RpbmdOYW1lKTtcblxuICAgICAgICAgICAgaWYgKGJhc2VFbmNvZGluZyAmJiAoZ2x5cGhOYW1lID0gYmFzZUVuY29kaW5nW2NoYXJjb2RlXSkpIHtcbiAgICAgICAgICAgICAgdG9Vbmljb2RlW2NoYXJjb2RlXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoZ2x5cGhzVW5pY29kZU1hcFtnbHlwaE5hbWVdKTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdG9Vbmljb2RlW2NoYXJjb2RlXSA9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNvZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHRvVW5pY29kZVtjaGFyY29kZV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGdseXBoc1VuaWNvZGVNYXBbZ2x5cGhOYW1lXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRvVW5pY29kZTtcbiAgfVxuXG4gIGFzeW5jIGJ1aWxkVG9Vbmljb2RlKHByb3BlcnRpZXMpIHtcbiAgICBwcm9wZXJ0aWVzLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwID0gISFwcm9wZXJ0aWVzLnRvVW5pY29kZSAmJiBwcm9wZXJ0aWVzLnRvVW5pY29kZS5sZW5ndGggPiAwO1xuXG4gICAgaWYgKHByb3BlcnRpZXMuaGFzSW5jbHVkZWRUb1VuaWNvZGVNYXApIHtcbiAgICAgIGlmICghcHJvcGVydGllcy5jb21wb3NpdGUgJiYgcHJvcGVydGllcy5oYXNFbmNvZGluZykge1xuICAgICAgICBwcm9wZXJ0aWVzLmZhbGxiYWNrVG9Vbmljb2RlID0gdGhpcy5fc2ltcGxlRm9udFRvVW5pY29kZShwcm9wZXJ0aWVzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb3BlcnRpZXMudG9Vbmljb2RlO1xuICAgIH1cblxuICAgIGlmICghcHJvcGVydGllcy5jb21wb3NpdGUpIHtcbiAgICAgIHJldHVybiBuZXcgX3RvX3VuaWNvZGVfbWFwLlRvVW5pY29kZU1hcCh0aGlzLl9zaW1wbGVGb250VG9Vbmljb2RlKHByb3BlcnRpZXMpKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcGVydGllcy5jb21wb3NpdGUgJiYgKHByb3BlcnRpZXMuY01hcC5idWlsdEluQ01hcCAmJiAhKHByb3BlcnRpZXMuY01hcCBpbnN0YW5jZW9mIF9jbWFwLklkZW50aXR5Q01hcCkgfHwgcHJvcGVydGllcy5jaWRTeXN0ZW1JbmZvLnJlZ2lzdHJ5ID09PSBcIkFkb2JlXCIgJiYgKHByb3BlcnRpZXMuY2lkU3lzdGVtSW5mby5vcmRlcmluZyA9PT0gXCJHQjFcIiB8fCBwcm9wZXJ0aWVzLmNpZFN5c3RlbUluZm8ub3JkZXJpbmcgPT09IFwiQ05TMVwiIHx8IHByb3BlcnRpZXMuY2lkU3lzdGVtSW5mby5vcmRlcmluZyA9PT0gXCJKYXBhbjFcIiB8fCBwcm9wZXJ0aWVzLmNpZFN5c3RlbUluZm8ub3JkZXJpbmcgPT09IFwiS29yZWExXCIpKSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICByZWdpc3RyeSxcbiAgICAgICAgb3JkZXJpbmdcbiAgICAgIH0gPSBwcm9wZXJ0aWVzLmNpZFN5c3RlbUluZm87XG5cbiAgICAgIGNvbnN0IHVjczJDTWFwTmFtZSA9IF9wcmltaXRpdmVzLk5hbWUuZ2V0KGAke3JlZ2lzdHJ5fS0ke29yZGVyaW5nfS1VQ1MyYCk7XG5cbiAgICAgIGNvbnN0IHVjczJDTWFwID0gYXdhaXQgX2NtYXAuQ01hcEZhY3RvcnkuY3JlYXRlKHtcbiAgICAgICAgZW5jb2Rpbmc6IHVjczJDTWFwTmFtZSxcbiAgICAgICAgZmV0Y2hCdWlsdEluQ01hcDogdGhpcy5fZmV0Y2hCdWlsdEluQ01hcEJvdW5kLFxuICAgICAgICB1c2VDTWFwOiBudWxsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHRvVW5pY29kZSA9IFtdO1xuICAgICAgcHJvcGVydGllcy5jTWFwLmZvckVhY2goZnVuY3Rpb24gKGNoYXJjb2RlLCBjaWQpIHtcbiAgICAgICAgaWYgKGNpZCA+IDB4ZmZmZikge1xuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIk1heCBzaXplIG9mIENJRCBpcyA2NSw1MzVcIik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1Y3MyID0gdWNzMkNNYXAubG9va3VwKGNpZCk7XG5cbiAgICAgICAgaWYgKHVjczIpIHtcbiAgICAgICAgICB0b1VuaWNvZGVbY2hhcmNvZGVdID0gU3RyaW5nLmZyb21DaGFyQ29kZSgodWNzMi5jaGFyQ29kZUF0KDApIDw8IDgpICsgdWNzMi5jaGFyQ29kZUF0KDEpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IF90b191bmljb2RlX21hcC5Ub1VuaWNvZGVNYXAodG9Vbmljb2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IF90b191bmljb2RlX21hcC5JZGVudGl0eVRvVW5pY29kZU1hcChwcm9wZXJ0aWVzLmZpcnN0Q2hhciwgcHJvcGVydGllcy5sYXN0Q2hhcik7XG4gIH1cblxuICByZWFkVG9Vbmljb2RlKGNtYXBPYmopIHtcbiAgICBpZiAoIWNtYXBPYmopIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGNtYXBPYmopKSB7XG4gICAgICByZXR1cm4gX2NtYXAuQ01hcEZhY3RvcnkuY3JlYXRlKHtcbiAgICAgICAgZW5jb2Rpbmc6IGNtYXBPYmosXG4gICAgICAgIGZldGNoQnVpbHRJbkNNYXA6IHRoaXMuX2ZldGNoQnVpbHRJbkNNYXBCb3VuZCxcbiAgICAgICAgdXNlQ01hcDogbnVsbFxuICAgICAgfSkudGhlbihmdW5jdGlvbiAoY21hcCkge1xuICAgICAgICBpZiAoY21hcCBpbnN0YW5jZW9mIF9jbWFwLklkZW50aXR5Q01hcCkge1xuICAgICAgICAgIHJldHVybiBuZXcgX3RvX3VuaWNvZGVfbWFwLklkZW50aXR5VG9Vbmljb2RlTWFwKDAsIDB4ZmZmZik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IF90b191bmljb2RlX21hcC5Ub1VuaWNvZGVNYXAoY21hcC5nZXRNYXAoKSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkoY21hcE9iaikpIHtcbiAgICAgIHJldHVybiBfY21hcC5DTWFwRmFjdG9yeS5jcmVhdGUoe1xuICAgICAgICBlbmNvZGluZzogY21hcE9iaixcbiAgICAgICAgZmV0Y2hCdWlsdEluQ01hcDogdGhpcy5fZmV0Y2hCdWlsdEluQ01hcEJvdW5kLFxuICAgICAgICB1c2VDTWFwOiBudWxsXG4gICAgICB9KS50aGVuKGZ1bmN0aW9uIChjbWFwKSB7XG4gICAgICAgIGlmIChjbWFwIGluc3RhbmNlb2YgX2NtYXAuSWRlbnRpdHlDTWFwKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBfdG9fdW5pY29kZV9tYXAuSWRlbnRpdHlUb1VuaWNvZGVNYXAoMCwgMHhmZmZmKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1hcCA9IG5ldyBBcnJheShjbWFwLmxlbmd0aCk7XG4gICAgICAgIGNtYXAuZm9yRWFjaChmdW5jdGlvbiAoY2hhckNvZGUsIHRva2VuKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgbWFwW2NoYXJDb2RlXSA9IFN0cmluZy5mcm9tQ29kZVBvaW50KHRva2VuKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBzdHIgPSBbXTtcblxuICAgICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgdG9rZW4ubGVuZ3RoOyBrICs9IDIpIHtcbiAgICAgICAgICAgIGNvbnN0IHcxID0gdG9rZW4uY2hhckNvZGVBdChrKSA8PCA4IHwgdG9rZW4uY2hhckNvZGVBdChrICsgMSk7XG5cbiAgICAgICAgICAgIGlmICgodzEgJiAweGY4MDApICE9PSAweGQ4MDApIHtcbiAgICAgICAgICAgICAgc3RyLnB1c2godzEpO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgayArPSAyO1xuICAgICAgICAgICAgY29uc3QgdzIgPSB0b2tlbi5jaGFyQ29kZUF0KGspIDw8IDggfCB0b2tlbi5jaGFyQ29kZUF0KGsgKyAxKTtcbiAgICAgICAgICAgIHN0ci5wdXNoKCgodzEgJiAweDNmZikgPDwgMTApICsgKHcyICYgMHgzZmYpICsgMHgxMDAwMCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWFwW2NoYXJDb2RlXSA9IFN0cmluZy5mcm9tQ29kZVBvaW50LmFwcGx5KFN0cmluZywgc3RyKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXcgX3RvX3VuaWNvZGVfbWFwLlRvVW5pY29kZU1hcChtYXApO1xuICAgICAgfSwgcmVhc29uID0+IHtcbiAgICAgICAgaWYgKHJlYXNvbiBpbnN0YW5jZW9mIF91dGlsLkFib3J0RXhjZXB0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycykge1xuICAgICAgICAgIHRoaXMuaGFuZGxlci5zZW5kKFwiVW5zdXBwb3J0ZWRGZWF0dXJlXCIsIHtcbiAgICAgICAgICAgIGZlYXR1cmVJZDogX3V0aWwuVU5TVVBQT1JURURfRkVBVFVSRVMuZXJyb3JGb250VG9Vbmljb2RlXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKGByZWFkVG9Vbmljb2RlIC0gaWdub3JpbmcgVG9Vbmljb2RlIGRhdGE6IFwiJHtyZWFzb259XCIuYCk7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyByZWFzb247XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICB9XG5cbiAgcmVhZENpZFRvR2lkTWFwKGdseXBoc0RhdGEsIHRvVW5pY29kZSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gICAgZm9yIChsZXQgaiA9IDAsIGpqID0gZ2x5cGhzRGF0YS5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICBjb25zdCBnbHlwaElEID0gZ2x5cGhzRGF0YVtqKytdIDw8IDggfCBnbHlwaHNEYXRhW2pdO1xuICAgICAgY29uc3QgY29kZSA9IGogPj4gMTtcblxuICAgICAgaWYgKGdseXBoSUQgPT09IDAgJiYgIXRvVW5pY29kZS5oYXMoY29kZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdFtjb2RlXSA9IGdseXBoSUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGV4dHJhY3RXaWR0aHMoZGljdCwgZGVzY3JpcHRvciwgcHJvcGVydGllcykge1xuICAgIGNvbnN0IHhyZWYgPSB0aGlzLnhyZWY7XG4gICAgbGV0IGdseXBoc1dpZHRocyA9IFtdO1xuICAgIGxldCBkZWZhdWx0V2lkdGggPSAwO1xuICAgIGNvbnN0IGdseXBoc1ZNZXRyaWNzID0gW107XG4gICAgbGV0IGRlZmF1bHRWTWV0cmljcztcbiAgICBsZXQgaSwgaWksIGosIGpqLCBzdGFydCwgY29kZSwgd2lkdGhzO1xuXG4gICAgaWYgKHByb3BlcnRpZXMuY29tcG9zaXRlKSB7XG4gICAgICBkZWZhdWx0V2lkdGggPSBkaWN0LmhhcyhcIkRXXCIpID8gZGljdC5nZXQoXCJEV1wiKSA6IDEwMDA7XG4gICAgICB3aWR0aHMgPSBkaWN0LmdldChcIldcIik7XG5cbiAgICAgIGlmICh3aWR0aHMpIHtcbiAgICAgICAgZm9yIChpID0gMCwgaWkgPSB3aWR0aHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgIHN0YXJ0ID0geHJlZi5mZXRjaElmUmVmKHdpZHRoc1tpKytdKTtcbiAgICAgICAgICBjb2RlID0geHJlZi5mZXRjaElmUmVmKHdpZHRoc1tpXSk7XG5cbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjb2RlKSkge1xuICAgICAgICAgICAgZm9yIChqID0gMCwgamogPSBjb2RlLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgICAgICAgZ2x5cGhzV2lkdGhzW3N0YXJ0KytdID0geHJlZi5mZXRjaElmUmVmKGNvZGVbal0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IHhyZWYuZmV0Y2hJZlJlZih3aWR0aHNbKytpXSk7XG5cbiAgICAgICAgICAgIGZvciAoaiA9IHN0YXJ0OyBqIDw9IGNvZGU7IGorKykge1xuICAgICAgICAgICAgICBnbHlwaHNXaWR0aHNbal0gPSB3aWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BlcnRpZXMudmVydGljYWwpIHtcbiAgICAgICAgbGV0IHZtZXRyaWNzID0gZGljdC5nZXRBcnJheShcIkRXMlwiKSB8fCBbODgwLCAtMTAwMF07XG4gICAgICAgIGRlZmF1bHRWTWV0cmljcyA9IFt2bWV0cmljc1sxXSwgZGVmYXVsdFdpZHRoICogMC41LCB2bWV0cmljc1swXV07XG4gICAgICAgIHZtZXRyaWNzID0gZGljdC5nZXQoXCJXMlwiKTtcblxuICAgICAgICBpZiAodm1ldHJpY3MpIHtcbiAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IHZtZXRyaWNzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgIHN0YXJ0ID0geHJlZi5mZXRjaElmUmVmKHZtZXRyaWNzW2krK10pO1xuICAgICAgICAgICAgY29kZSA9IHhyZWYuZmV0Y2hJZlJlZih2bWV0cmljc1tpXSk7XG5cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvZGUpKSB7XG4gICAgICAgICAgICAgIGZvciAoaiA9IDAsIGpqID0gY29kZS5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgICAgICAgZ2x5cGhzVk1ldHJpY3Nbc3RhcnQrK10gPSBbeHJlZi5mZXRjaElmUmVmKGNvZGVbaisrXSksIHhyZWYuZmV0Y2hJZlJlZihjb2RlW2orK10pLCB4cmVmLmZldGNoSWZSZWYoY29kZVtqXSldO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCB2bWV0cmljID0gW3hyZWYuZmV0Y2hJZlJlZih2bWV0cmljc1srK2ldKSwgeHJlZi5mZXRjaElmUmVmKHZtZXRyaWNzWysraV0pLCB4cmVmLmZldGNoSWZSZWYodm1ldHJpY3NbKytpXSldO1xuXG4gICAgICAgICAgICAgIGZvciAoaiA9IHN0YXJ0OyBqIDw9IGNvZGU7IGorKykge1xuICAgICAgICAgICAgICAgIGdseXBoc1ZNZXRyaWNzW2pdID0gdm1ldHJpYztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmaXJzdENoYXIgPSBwcm9wZXJ0aWVzLmZpcnN0Q2hhcjtcbiAgICAgIHdpZHRocyA9IGRpY3QuZ2V0KFwiV2lkdGhzXCIpO1xuXG4gICAgICBpZiAod2lkdGhzKSB7XG4gICAgICAgIGogPSBmaXJzdENoYXI7XG5cbiAgICAgICAgZm9yIChpID0gMCwgaWkgPSB3aWR0aHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgIGdseXBoc1dpZHRoc1tqKytdID0geHJlZi5mZXRjaElmUmVmKHdpZHRoc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0V2lkdGggPSBwYXJzZUZsb2F0KGRlc2NyaXB0b3IuZ2V0KFwiTWlzc2luZ1dpZHRoXCIpKSB8fCAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYmFzZUZvbnROYW1lID0gZGljdC5nZXQoXCJCYXNlRm9udFwiKTtcblxuICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoYmFzZUZvbnROYW1lKSkge1xuICAgICAgICAgIGNvbnN0IG1ldHJpY3MgPSB0aGlzLmdldEJhc2VGb250TWV0cmljcyhiYXNlRm9udE5hbWUubmFtZSk7XG4gICAgICAgICAgZ2x5cGhzV2lkdGhzID0gdGhpcy5idWlsZENoYXJDb2RlVG9XaWR0aChtZXRyaWNzLndpZHRocywgcHJvcGVydGllcyk7XG4gICAgICAgICAgZGVmYXVsdFdpZHRoID0gbWV0cmljcy5kZWZhdWx0V2lkdGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgaXNNb25vc3BhY2UgPSB0cnVlO1xuICAgIGxldCBmaXJzdFdpZHRoID0gZGVmYXVsdFdpZHRoO1xuXG4gICAgZm9yIChjb25zdCBnbHlwaCBpbiBnbHlwaHNXaWR0aHMpIHtcbiAgICAgIGNvbnN0IGdseXBoV2lkdGggPSBnbHlwaHNXaWR0aHNbZ2x5cGhdO1xuXG4gICAgICBpZiAoIWdseXBoV2lkdGgpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghZmlyc3RXaWR0aCkge1xuICAgICAgICBmaXJzdFdpZHRoID0gZ2x5cGhXaWR0aDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChmaXJzdFdpZHRoICE9PSBnbHlwaFdpZHRoKSB7XG4gICAgICAgIGlzTW9ub3NwYWNlID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc01vbm9zcGFjZSkge1xuICAgICAgcHJvcGVydGllcy5mbGFncyB8PSBfZm9udHNfdXRpbHMuRm9udEZsYWdzLkZpeGVkUGl0Y2g7XG4gICAgfVxuXG4gICAgcHJvcGVydGllcy5kZWZhdWx0V2lkdGggPSBkZWZhdWx0V2lkdGg7XG4gICAgcHJvcGVydGllcy53aWR0aHMgPSBnbHlwaHNXaWR0aHM7XG4gICAgcHJvcGVydGllcy5kZWZhdWx0Vk1ldHJpY3MgPSBkZWZhdWx0Vk1ldHJpY3M7XG4gICAgcHJvcGVydGllcy52bWV0cmljcyA9IGdseXBoc1ZNZXRyaWNzO1xuICB9XG5cbiAgaXNTZXJpZkZvbnQoYmFzZUZvbnROYW1lKSB7XG4gICAgY29uc3QgZm9udE5hbWVXb1N0eWxlID0gYmFzZUZvbnROYW1lLnNwbGl0KFwiLVwiKVswXTtcbiAgICByZXR1cm4gZm9udE5hbWVXb1N0eWxlIGluICgwLCBfc3RhbmRhcmRfZm9udHMuZ2V0U2VyaWZGb250cykoKSB8fCBmb250TmFtZVdvU3R5bGUuc2VhcmNoKC9zZXJpZi9naSkgIT09IC0xO1xuICB9XG5cbiAgZ2V0QmFzZUZvbnRNZXRyaWNzKG5hbWUpIHtcbiAgICBsZXQgZGVmYXVsdFdpZHRoID0gMDtcbiAgICBsZXQgd2lkdGhzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBsZXQgbW9ub3NwYWNlID0gZmFsc2U7XG4gICAgY29uc3Qgc3RkRm9udE1hcCA9ICgwLCBfc3RhbmRhcmRfZm9udHMuZ2V0U3RkRm9udE1hcCkoKTtcbiAgICBsZXQgbG9va3VwTmFtZSA9IHN0ZEZvbnRNYXBbbmFtZV0gfHwgbmFtZTtcbiAgICBjb25zdCBNZXRyaWNzID0gKDAsIF9tZXRyaWNzLmdldE1ldHJpY3MpKCk7XG5cbiAgICBpZiAoIShsb29rdXBOYW1lIGluIE1ldHJpY3MpKSB7XG4gICAgICBpZiAodGhpcy5pc1NlcmlmRm9udChuYW1lKSkge1xuICAgICAgICBsb29rdXBOYW1lID0gXCJUaW1lcy1Sb21hblwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9va3VwTmFtZSA9IFwiSGVsdmV0aWNhXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZ2x5cGhXaWR0aHMgPSBNZXRyaWNzW2xvb2t1cE5hbWVdO1xuXG4gICAgaWYgKCgwLCBfdXRpbC5pc051bSkoZ2x5cGhXaWR0aHMpKSB7XG4gICAgICBkZWZhdWx0V2lkdGggPSBnbHlwaFdpZHRocztcbiAgICAgIG1vbm9zcGFjZSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpZHRocyA9IGdseXBoV2lkdGhzKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRlZmF1bHRXaWR0aCxcbiAgICAgIG1vbm9zcGFjZSxcbiAgICAgIHdpZHRoc1xuICAgIH07XG4gIH1cblxuICBidWlsZENoYXJDb2RlVG9XaWR0aCh3aWR0aHNCeUdseXBoTmFtZSwgcHJvcGVydGllcykge1xuICAgIGNvbnN0IHdpZHRocyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgY29uc3QgZGlmZmVyZW5jZXMgPSBwcm9wZXJ0aWVzLmRpZmZlcmVuY2VzO1xuICAgIGNvbnN0IGVuY29kaW5nID0gcHJvcGVydGllcy5kZWZhdWx0RW5jb2Rpbmc7XG5cbiAgICBmb3IgKGxldCBjaGFyQ29kZSA9IDA7IGNoYXJDb2RlIDwgMjU2OyBjaGFyQ29kZSsrKSB7XG4gICAgICBpZiAoY2hhckNvZGUgaW4gZGlmZmVyZW5jZXMgJiYgd2lkdGhzQnlHbHlwaE5hbWVbZGlmZmVyZW5jZXNbY2hhckNvZGVdXSkge1xuICAgICAgICB3aWR0aHNbY2hhckNvZGVdID0gd2lkdGhzQnlHbHlwaE5hbWVbZGlmZmVyZW5jZXNbY2hhckNvZGVdXTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGFyQ29kZSBpbiBlbmNvZGluZyAmJiB3aWR0aHNCeUdseXBoTmFtZVtlbmNvZGluZ1tjaGFyQ29kZV1dKSB7XG4gICAgICAgIHdpZHRoc1tjaGFyQ29kZV0gPSB3aWR0aHNCeUdseXBoTmFtZVtlbmNvZGluZ1tjaGFyQ29kZV1dO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gd2lkdGhzO1xuICB9XG5cbiAgcHJlRXZhbHVhdGVGb250KGRpY3QpIHtcbiAgICBjb25zdCBiYXNlRGljdCA9IGRpY3Q7XG4gICAgbGV0IHR5cGUgPSBkaWN0LmdldChcIlN1YnR5cGVcIik7XG5cbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHR5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJpbnZhbGlkIGZvbnQgU3VidHlwZVwiKTtcbiAgICB9XG5cbiAgICBsZXQgY29tcG9zaXRlID0gZmFsc2U7XG4gICAgbGV0IGhhc2gsIHRvVW5pY29kZTtcblxuICAgIGlmICh0eXBlLm5hbWUgPT09IFwiVHlwZTBcIikge1xuICAgICAgY29uc3QgZGYgPSBkaWN0LmdldChcIkRlc2NlbmRhbnRGb250c1wiKTtcblxuICAgICAgaWYgKCFkZikge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJEZXNjZW5kYW50IGZvbnRzIGFyZSBub3Qgc3BlY2lmaWVkXCIpO1xuICAgICAgfVxuXG4gICAgICBkaWN0ID0gQXJyYXkuaXNBcnJheShkZikgPyB0aGlzLnhyZWYuZmV0Y2hJZlJlZihkZlswXSkgOiBkZjtcblxuICAgICAgaWYgKCEoZGljdCBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpKSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkRlc2NlbmRhbnQgZm9udCBpcyBub3QgYSBkaWN0aW9uYXJ5LlwiKTtcbiAgICAgIH1cblxuICAgICAgdHlwZSA9IGRpY3QuZ2V0KFwiU3VidHlwZVwiKTtcblxuICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKSh0eXBlKSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJpbnZhbGlkIGZvbnQgU3VidHlwZVwiKTtcbiAgICAgIH1cblxuICAgICAgY29tcG9zaXRlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBmaXJzdENoYXIgPSBkaWN0LmdldChcIkZpcnN0Q2hhclwiKSB8fCAwLFxuICAgICAgICAgIGxhc3RDaGFyID0gZGljdC5nZXQoXCJMYXN0Q2hhclwiKSB8fCAoY29tcG9zaXRlID8gMHhmZmZmIDogMHhmZik7XG4gICAgY29uc3QgZGVzY3JpcHRvciA9IGRpY3QuZ2V0KFwiRm9udERlc2NyaXB0b3JcIik7XG5cbiAgICBpZiAoZGVzY3JpcHRvcikge1xuICAgICAgaGFzaCA9IG5ldyBfbXVybXVyaGFzaC5NdXJtdXJIYXNoM182NCgpO1xuICAgICAgY29uc3QgZW5jb2RpbmcgPSBiYXNlRGljdC5nZXRSYXcoXCJFbmNvZGluZ1wiKTtcblxuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGVuY29kaW5nKSkge1xuICAgICAgICBoYXNoLnVwZGF0ZShlbmNvZGluZy5uYW1lKTtcbiAgICAgIH0gZWxzZSBpZiAoKDAsIF9wcmltaXRpdmVzLmlzUmVmKShlbmNvZGluZykpIHtcbiAgICAgICAgaGFzaC51cGRhdGUoZW5jb2RpbmcudG9TdHJpbmcoKSk7XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGVuY29kaW5nKSkge1xuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVuY29kaW5nLmdldFJhd1ZhbHVlcygpKSB7XG4gICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGVudHJ5KSkge1xuICAgICAgICAgICAgaGFzaC51cGRhdGUoZW50cnkubmFtZSk7XG4gICAgICAgICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKGVudHJ5KSkge1xuICAgICAgICAgICAgaGFzaC51cGRhdGUoZW50cnkudG9TdHJpbmcoKSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGVudHJ5KSkge1xuICAgICAgICAgICAgY29uc3QgZGlmZkxlbmd0aCA9IGVudHJ5Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgIGRpZmZCdWYgPSBuZXcgQXJyYXkoZGlmZkxlbmd0aCk7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZGlmZkxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGRpZmZFbnRyeSA9IGVudHJ5W2pdO1xuXG4gICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShkaWZmRW50cnkpKSB7XG4gICAgICAgICAgICAgICAgZGlmZkJ1ZltqXSA9IGRpZmZFbnRyeS5uYW1lO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKCgwLCBfdXRpbC5pc051bSkoZGlmZkVudHJ5KSB8fCAoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKGRpZmZFbnRyeSkpIHtcbiAgICAgICAgICAgICAgICBkaWZmQnVmW2pdID0gZGlmZkVudHJ5LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaGFzaC51cGRhdGUoZGlmZkJ1Zi5qb2luKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBoYXNoLnVwZGF0ZShgJHtmaXJzdENoYXJ9LSR7bGFzdENoYXJ9YCk7XG4gICAgICB0b1VuaWNvZGUgPSBkaWN0LmdldChcIlRvVW5pY29kZVwiKSB8fCBiYXNlRGljdC5nZXQoXCJUb1VuaWNvZGVcIik7XG5cbiAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKHRvVW5pY29kZSkpIHtcbiAgICAgICAgY29uc3Qgc3RyZWFtID0gdG9Vbmljb2RlLnN0ciB8fCB0b1VuaWNvZGU7XG4gICAgICAgIGNvbnN0IHVpbnQ4YXJyYXkgPSBzdHJlYW0uYnVmZmVyID8gbmV3IFVpbnQ4QXJyYXkoc3RyZWFtLmJ1ZmZlci5idWZmZXIsIDAsIHN0cmVhbS5idWZmZXJMZW5ndGgpIDogbmV3IFVpbnQ4QXJyYXkoc3RyZWFtLmJ5dGVzLmJ1ZmZlciwgc3RyZWFtLnN0YXJ0LCBzdHJlYW0uZW5kIC0gc3RyZWFtLnN0YXJ0KTtcbiAgICAgICAgaGFzaC51cGRhdGUodWludDhhcnJheSk7XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHRvVW5pY29kZSkpIHtcbiAgICAgICAgaGFzaC51cGRhdGUodG9Vbmljb2RlLm5hbWUpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB3aWR0aHMgPSBkaWN0LmdldChcIldpZHRoc1wiKSB8fCBiYXNlRGljdC5nZXQoXCJXaWR0aHNcIik7XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHdpZHRocykpIHtcbiAgICAgICAgY29uc3Qgd2lkdGhzQnVmID0gW107XG5cbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiB3aWR0aHMpIHtcbiAgICAgICAgICBpZiAoKDAsIF91dGlsLmlzTnVtKShlbnRyeSkgfHwgKDAsIF9wcmltaXRpdmVzLmlzUmVmKShlbnRyeSkpIHtcbiAgICAgICAgICAgIHdpZHRoc0J1Zi5wdXNoKGVudHJ5LnRvU3RyaW5nKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGhhc2gudXBkYXRlKHdpZHRoc0J1Zi5qb2luKCkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29tcG9zaXRlKSB7XG4gICAgICAgIGhhc2gudXBkYXRlKFwiY29tcG9zaXRlRm9udFwiKTtcbiAgICAgICAgY29uc3QgY29tcG9zaXRlV2lkdGhzID0gZGljdC5nZXQoXCJXXCIpIHx8IGJhc2VEaWN0LmdldChcIldcIik7XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29tcG9zaXRlV2lkdGhzKSkge1xuICAgICAgICAgIGNvbnN0IHdpZHRoc0J1ZiA9IFtdO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBjb21wb3NpdGVXaWR0aHMpIHtcbiAgICAgICAgICAgIGlmICgoMCwgX3V0aWwuaXNOdW0pKGVudHJ5KSB8fCAoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKGVudHJ5KSkge1xuICAgICAgICAgICAgICB3aWR0aHNCdWYucHVzaChlbnRyeS50b1N0cmluZygpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShlbnRyeSkpIHtcbiAgICAgICAgICAgICAgY29uc3Qgc3ViV2lkdGhzQnVmID0gW107XG5cbiAgICAgICAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGVudHJ5KSB7XG4gICAgICAgICAgICAgICAgaWYgKCgwLCBfdXRpbC5pc051bSkoZWxlbWVudCkgfHwgKDAsIF9wcmltaXRpdmVzLmlzUmVmKShlbGVtZW50KSkge1xuICAgICAgICAgICAgICAgICAgc3ViV2lkdGhzQnVmLnB1c2goZWxlbWVudC50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB3aWR0aHNCdWYucHVzaChgWyR7c3ViV2lkdGhzQnVmLmpvaW4oKX1dYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaGFzaC51cGRhdGUod2lkdGhzQnVmLmpvaW4oKSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjaWRUb0dpZE1hcCA9IGRpY3QuZ2V0UmF3KFwiQ0lEVG9HSURNYXBcIikgfHwgYmFzZURpY3QuZ2V0UmF3KFwiQ0lEVG9HSURNYXBcIik7XG5cbiAgICAgICAgaWYgKGNpZFRvR2lkTWFwIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuTmFtZSkge1xuICAgICAgICAgIGhhc2gudXBkYXRlKGNpZFRvR2lkTWFwLm5hbWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGNpZFRvR2lkTWFwIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuUmVmKSB7XG4gICAgICAgICAgaGFzaC51cGRhdGUoY2lkVG9HaWRNYXAudG9TdHJpbmcoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY2lkVG9HaWRNYXAgaW5zdGFuY2VvZiBfYmFzZV9zdHJlYW0uQmFzZVN0cmVhbSkge1xuICAgICAgICAgIGhhc2gudXBkYXRlKGNpZFRvR2lkTWFwLnBlZWtCeXRlcygpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBkZXNjcmlwdG9yLFxuICAgICAgZGljdCxcbiAgICAgIGJhc2VEaWN0LFxuICAgICAgY29tcG9zaXRlLFxuICAgICAgdHlwZTogdHlwZS5uYW1lLFxuICAgICAgZmlyc3RDaGFyLFxuICAgICAgbGFzdENoYXIsXG4gICAgICB0b1VuaWNvZGUsXG4gICAgICBoYXNoOiBoYXNoID8gaGFzaC5oZXhkaWdlc3QoKSA6IFwiXCJcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgdHJhbnNsYXRlRm9udCh7XG4gICAgZGVzY3JpcHRvcixcbiAgICBkaWN0LFxuICAgIGJhc2VEaWN0LFxuICAgIGNvbXBvc2l0ZSxcbiAgICB0eXBlLFxuICAgIGZpcnN0Q2hhcixcbiAgICBsYXN0Q2hhcixcbiAgICB0b1VuaWNvZGUsXG4gICAgY3NzRm9udEluZm9cbiAgfSkge1xuICAgIGNvbnN0IGlzVHlwZTNGb250ID0gdHlwZSA9PT0gXCJUeXBlM1wiO1xuICAgIGxldCBwcm9wZXJ0aWVzO1xuXG4gICAgaWYgKCFkZXNjcmlwdG9yKSB7XG4gICAgICBpZiAoaXNUeXBlM0ZvbnQpIHtcbiAgICAgICAgZGVzY3JpcHRvciA9IG5ldyBfcHJpbWl0aXZlcy5EaWN0KG51bGwpO1xuICAgICAgICBkZXNjcmlwdG9yLnNldChcIkZvbnROYW1lXCIsIF9wcmltaXRpdmVzLk5hbWUuZ2V0KHR5cGUpKTtcbiAgICAgICAgZGVzY3JpcHRvci5zZXQoXCJGb250QkJveFwiLCBkaWN0LmdldEFycmF5KFwiRm9udEJCb3hcIikgfHwgWzAsIDAsIDAsIDBdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBiYXNlRm9udE5hbWUgPSBkaWN0LmdldChcIkJhc2VGb250XCIpO1xuXG4gICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoYmFzZUZvbnROYW1lKSkge1xuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkJhc2UgZm9udCBpcyBub3Qgc3BlY2lmaWVkXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgYmFzZUZvbnROYW1lID0gYmFzZUZvbnROYW1lLm5hbWUucmVwbGFjZSgvWyxfXS9nLCBcIi1cIik7XG4gICAgICAgIGNvbnN0IG1ldHJpY3MgPSB0aGlzLmdldEJhc2VGb250TWV0cmljcyhiYXNlRm9udE5hbWUpO1xuICAgICAgICBjb25zdCBmb250TmFtZVdvU3R5bGUgPSBiYXNlRm9udE5hbWUuc3BsaXQoXCItXCIpWzBdO1xuICAgICAgICBjb25zdCBmbGFncyA9ICh0aGlzLmlzU2VyaWZGb250KGZvbnROYW1lV29TdHlsZSkgPyBfZm9udHNfdXRpbHMuRm9udEZsYWdzLlNlcmlmIDogMCkgfCAobWV0cmljcy5tb25vc3BhY2UgPyBfZm9udHNfdXRpbHMuRm9udEZsYWdzLkZpeGVkUGl0Y2ggOiAwKSB8ICgoMCwgX3N0YW5kYXJkX2ZvbnRzLmdldFN5bWJvbHNGb250cykoKVtmb250TmFtZVdvU3R5bGVdID8gX2ZvbnRzX3V0aWxzLkZvbnRGbGFncy5TeW1ib2xpYyA6IF9mb250c191dGlscy5Gb250RmxhZ3MuTm9uc3ltYm9saWMpO1xuICAgICAgICBwcm9wZXJ0aWVzID0ge1xuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgbmFtZTogYmFzZUZvbnROYW1lLFxuICAgICAgICAgIGxvYWRlZE5hbWU6IGJhc2VEaWN0LmxvYWRlZE5hbWUsXG4gICAgICAgICAgd2lkdGhzOiBtZXRyaWNzLndpZHRocyxcbiAgICAgICAgICBkZWZhdWx0V2lkdGg6IG1ldHJpY3MuZGVmYXVsdFdpZHRoLFxuICAgICAgICAgIGlzU2ltdWxhdGVkRmxhZ3M6IHRydWUsXG4gICAgICAgICAgZmxhZ3MsXG4gICAgICAgICAgZmlyc3RDaGFyLFxuICAgICAgICAgIGxhc3RDaGFyLFxuICAgICAgICAgIHRvVW5pY29kZSxcbiAgICAgICAgICB4SGVpZ2h0OiAwLFxuICAgICAgICAgIGNhcEhlaWdodDogMCxcbiAgICAgICAgICBpdGFsaWNBbmdsZTogMCxcbiAgICAgICAgICBpc1R5cGUzRm9udFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB3aWR0aHMgPSBkaWN0LmdldChcIldpZHRoc1wiKTtcbiAgICAgICAgY29uc3Qgc3RhbmRhcmRGb250TmFtZSA9ICgwLCBfc3RhbmRhcmRfZm9udHMuZ2V0U3RhbmRhcmRGb250TmFtZSkoYmFzZUZvbnROYW1lKTtcbiAgICAgICAgbGV0IGZpbGUgPSBudWxsO1xuXG4gICAgICAgIGlmIChzdGFuZGFyZEZvbnROYW1lKSB7XG4gICAgICAgICAgcHJvcGVydGllcy5pc1N0YW5kYXJkRm9udCA9IHRydWU7XG4gICAgICAgICAgZmlsZSA9IGF3YWl0IHRoaXMuZmV0Y2hTdGFuZGFyZEZvbnREYXRhKHN0YW5kYXJkRm9udE5hbWUpO1xuICAgICAgICAgIHByb3BlcnRpZXMuaXNJbnRlcm5hbEZvbnQgPSAhIWZpbGU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5leHRyYWN0RGF0YVN0cnVjdHVyZXMoZGljdCwgZGljdCwgcHJvcGVydGllcykudGhlbihuZXdQcm9wZXJ0aWVzID0+IHtcbiAgICAgICAgICBpZiAod2lkdGhzKSB7XG4gICAgICAgICAgICBjb25zdCBnbHlwaFdpZHRocyA9IFtdO1xuICAgICAgICAgICAgbGV0IGogPSBmaXJzdENoYXI7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHdpZHRocy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgIGdseXBoV2lkdGhzW2orK10gPSB0aGlzLnhyZWYuZmV0Y2hJZlJlZih3aWR0aHNbaV0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBuZXdQcm9wZXJ0aWVzLndpZHRocyA9IGdseXBoV2lkdGhzO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdQcm9wZXJ0aWVzLndpZHRocyA9IHRoaXMuYnVpbGRDaGFyQ29kZVRvV2lkdGgobWV0cmljcy53aWR0aHMsIG5ld1Byb3BlcnRpZXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBuZXcgX2ZvbnRzLkZvbnQoYmFzZUZvbnROYW1lLCBmaWxlLCBuZXdQcm9wZXJ0aWVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGZvbnROYW1lID0gZGVzY3JpcHRvci5nZXQoXCJGb250TmFtZVwiKTtcbiAgICBsZXQgYmFzZUZvbnQgPSBkaWN0LmdldChcIkJhc2VGb250XCIpO1xuXG4gICAgaWYgKCgwLCBfdXRpbC5pc1N0cmluZykoZm9udE5hbWUpKSB7XG4gICAgICBmb250TmFtZSA9IF9wcmltaXRpdmVzLk5hbWUuZ2V0KGZvbnROYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoKDAsIF91dGlsLmlzU3RyaW5nKShiYXNlRm9udCkpIHtcbiAgICAgIGJhc2VGb250ID0gX3ByaW1pdGl2ZXMuTmFtZS5nZXQoYmFzZUZvbnQpO1xuICAgIH1cblxuICAgIGlmICghaXNUeXBlM0ZvbnQpIHtcbiAgICAgIGNvbnN0IGZvbnROYW1lU3RyID0gZm9udE5hbWUgJiYgZm9udE5hbWUubmFtZTtcbiAgICAgIGNvbnN0IGJhc2VGb250U3RyID0gYmFzZUZvbnQgJiYgYmFzZUZvbnQubmFtZTtcblxuICAgICAgaWYgKGZvbnROYW1lU3RyICE9PSBiYXNlRm9udFN0cikge1xuICAgICAgICAoMCwgX3V0aWwuaW5mbykoYFRoZSBGb250RGVzY3JpcHRvcidzIEZvbnROYW1lIGlzIFwiJHtmb250TmFtZVN0cn1cIiBidXQgYCArIGBzaG91bGQgYmUgdGhlIHNhbWUgYXMgdGhlIEZvbnQncyBCYXNlRm9udCBcIiR7YmFzZUZvbnRTdHJ9XCIuYCk7XG5cbiAgICAgICAgaWYgKGZvbnROYW1lU3RyICYmIGJhc2VGb250U3RyICYmIGJhc2VGb250U3RyLnN0YXJ0c1dpdGgoZm9udE5hbWVTdHIpKSB7XG4gICAgICAgICAgZm9udE5hbWUgPSBiYXNlRm9udDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvbnROYW1lID0gZm9udE5hbWUgfHwgYmFzZUZvbnQ7XG5cbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGZvbnROYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiaW52YWxpZCBmb250IG5hbWVcIik7XG4gICAgfVxuXG4gICAgbGV0IGZvbnRGaWxlLCBzdWJ0eXBlLCBsZW5ndGgxLCBsZW5ndGgyLCBsZW5ndGgzO1xuXG4gICAgdHJ5IHtcbiAgICAgIGZvbnRGaWxlID0gZGVzY3JpcHRvci5nZXQoXCJGb250RmlsZVwiLCBcIkZvbnRGaWxlMlwiLCBcIkZvbnRGaWxlM1wiKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKSB7XG4gICAgICAgIHRocm93IGV4O1xuICAgICAgfVxuXG4gICAgICAoMCwgX3V0aWwud2FybikoYHRyYW5zbGF0ZUZvbnQgLSBmZXRjaGluZyBcIiR7Zm9udE5hbWUubmFtZX1cIiBmb250IGZpbGU6IFwiJHtleH1cIi5gKTtcbiAgICAgIGZvbnRGaWxlID0gbmV3IF9zdHJlYW0uTnVsbFN0cmVhbSgpO1xuICAgIH1cblxuICAgIGxldCBpc1N0YW5kYXJkRm9udCA9IGZhbHNlO1xuICAgIGxldCBpc0ludGVybmFsRm9udCA9IGZhbHNlO1xuICAgIGxldCBnbHlwaFNjYWxlRmFjdG9ycyA9IG51bGw7XG5cbiAgICBpZiAoZm9udEZpbGUpIHtcbiAgICAgIGlmIChmb250RmlsZS5kaWN0KSB7XG4gICAgICAgIGNvbnN0IHN1YnR5cGVFbnRyeSA9IGZvbnRGaWxlLmRpY3QuZ2V0KFwiU3VidHlwZVwiKTtcblxuICAgICAgICBpZiAoc3VidHlwZUVudHJ5IGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuTmFtZSkge1xuICAgICAgICAgIHN1YnR5cGUgPSBzdWJ0eXBlRW50cnkubmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxlbmd0aDEgPSBmb250RmlsZS5kaWN0LmdldChcIkxlbmd0aDFcIik7XG4gICAgICAgIGxlbmd0aDIgPSBmb250RmlsZS5kaWN0LmdldChcIkxlbmd0aDJcIik7XG4gICAgICAgIGxlbmd0aDMgPSBmb250RmlsZS5kaWN0LmdldChcIkxlbmd0aDNcIik7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjc3NGb250SW5mbykge1xuICAgICAgY29uc3Qgc3RhbmRhcmRGb250TmFtZSA9ICgwLCBfeGZhX2ZvbnRzLmdldFhmYUZvbnROYW1lKShmb250TmFtZS5uYW1lKTtcblxuICAgICAgaWYgKHN0YW5kYXJkRm9udE5hbWUpIHtcbiAgICAgICAgY3NzRm9udEluZm8uZm9udEZhbWlseSA9IGAke2Nzc0ZvbnRJbmZvLmZvbnRGYW1pbHl9LVBkZkpTLVhGQWA7XG4gICAgICAgIGNzc0ZvbnRJbmZvLm1ldHJpY3MgPSBzdGFuZGFyZEZvbnROYW1lLm1ldHJpY3MgfHwgbnVsbDtcbiAgICAgICAgZ2x5cGhTY2FsZUZhY3RvcnMgPSBzdGFuZGFyZEZvbnROYW1lLmZhY3RvcnMgfHwgbnVsbDtcbiAgICAgICAgZm9udEZpbGUgPSBhd2FpdCB0aGlzLmZldGNoU3RhbmRhcmRGb250RGF0YShzdGFuZGFyZEZvbnROYW1lLm5hbWUpO1xuICAgICAgICBpc0ludGVybmFsRm9udCA9ICEhZm9udEZpbGU7XG4gICAgICAgIGJhc2VEaWN0ID0gZGljdCA9ICgwLCBfeGZhX2ZvbnRzLmdldFhmYUZvbnREaWN0KShmb250TmFtZS5uYW1lKTtcbiAgICAgICAgY29tcG9zaXRlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFpc1R5cGUzRm9udCkge1xuICAgICAgY29uc3Qgc3RhbmRhcmRGb250TmFtZSA9ICgwLCBfc3RhbmRhcmRfZm9udHMuZ2V0U3RhbmRhcmRGb250TmFtZSkoZm9udE5hbWUubmFtZSk7XG5cbiAgICAgIGlmIChzdGFuZGFyZEZvbnROYW1lKSB7XG4gICAgICAgIGlzU3RhbmRhcmRGb250ID0gdHJ1ZTtcbiAgICAgICAgZm9udEZpbGUgPSBhd2FpdCB0aGlzLmZldGNoU3RhbmRhcmRGb250RGF0YShzdGFuZGFyZEZvbnROYW1lKTtcbiAgICAgICAgaXNJbnRlcm5hbEZvbnQgPSAhIWZvbnRGaWxlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByb3BlcnRpZXMgPSB7XG4gICAgICB0eXBlLFxuICAgICAgbmFtZTogZm9udE5hbWUubmFtZSxcbiAgICAgIHN1YnR5cGUsXG4gICAgICBmaWxlOiBmb250RmlsZSxcbiAgICAgIGxlbmd0aDEsXG4gICAgICBsZW5ndGgyLFxuICAgICAgbGVuZ3RoMyxcbiAgICAgIGlzU3RhbmRhcmRGb250LFxuICAgICAgaXNJbnRlcm5hbEZvbnQsXG4gICAgICBsb2FkZWROYW1lOiBiYXNlRGljdC5sb2FkZWROYW1lLFxuICAgICAgY29tcG9zaXRlLFxuICAgICAgZml4ZWRQaXRjaDogZmFsc2UsXG4gICAgICBmb250TWF0cml4OiBkaWN0LmdldEFycmF5KFwiRm9udE1hdHJpeFwiKSB8fCBfdXRpbC5GT05UX0lERU5USVRZX01BVFJJWCxcbiAgICAgIGZpcnN0Q2hhcixcbiAgICAgIGxhc3RDaGFyLFxuICAgICAgdG9Vbmljb2RlLFxuICAgICAgYmJveDogZGVzY3JpcHRvci5nZXRBcnJheShcIkZvbnRCQm94XCIpIHx8IGRpY3QuZ2V0QXJyYXkoXCJGb250QkJveFwiKSxcbiAgICAgIGFzY2VudDogZGVzY3JpcHRvci5nZXQoXCJBc2NlbnRcIiksXG4gICAgICBkZXNjZW50OiBkZXNjcmlwdG9yLmdldChcIkRlc2NlbnRcIiksXG4gICAgICB4SGVpZ2h0OiBkZXNjcmlwdG9yLmdldChcIlhIZWlnaHRcIikgfHwgMCxcbiAgICAgIGNhcEhlaWdodDogZGVzY3JpcHRvci5nZXQoXCJDYXBIZWlnaHRcIikgfHwgMCxcbiAgICAgIGZsYWdzOiBkZXNjcmlwdG9yLmdldChcIkZsYWdzXCIpLFxuICAgICAgaXRhbGljQW5nbGU6IGRlc2NyaXB0b3IuZ2V0KFwiSXRhbGljQW5nbGVcIikgfHwgMCxcbiAgICAgIGlzVHlwZTNGb250LFxuICAgICAgY3NzRm9udEluZm8sXG4gICAgICBzY2FsZUZhY3RvcnM6IGdseXBoU2NhbGVGYWN0b3JzXG4gICAgfTtcblxuICAgIGlmIChjb21wb3NpdGUpIHtcbiAgICAgIGNvbnN0IGNpZEVuY29kaW5nID0gYmFzZURpY3QuZ2V0KFwiRW5jb2RpbmdcIik7XG5cbiAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShjaWRFbmNvZGluZykpIHtcbiAgICAgICAgcHJvcGVydGllcy5jaWRFbmNvZGluZyA9IGNpZEVuY29kaW5nLm5hbWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNNYXAgPSBhd2FpdCBfY21hcC5DTWFwRmFjdG9yeS5jcmVhdGUoe1xuICAgICAgICBlbmNvZGluZzogY2lkRW5jb2RpbmcsXG4gICAgICAgIGZldGNoQnVpbHRJbkNNYXA6IHRoaXMuX2ZldGNoQnVpbHRJbkNNYXBCb3VuZCxcbiAgICAgICAgdXNlQ01hcDogbnVsbFxuICAgICAgfSk7XG4gICAgICBwcm9wZXJ0aWVzLmNNYXAgPSBjTWFwO1xuICAgICAgcHJvcGVydGllcy52ZXJ0aWNhbCA9IHByb3BlcnRpZXMuY01hcC52ZXJ0aWNhbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5leHRyYWN0RGF0YVN0cnVjdHVyZXMoZGljdCwgYmFzZURpY3QsIHByb3BlcnRpZXMpLnRoZW4obmV3UHJvcGVydGllcyA9PiB7XG4gICAgICB0aGlzLmV4dHJhY3RXaWR0aHMoZGljdCwgZGVzY3JpcHRvciwgbmV3UHJvcGVydGllcyk7XG4gICAgICByZXR1cm4gbmV3IF9mb250cy5Gb250KGZvbnROYW1lLm5hbWUsIGZvbnRGaWxlLCBuZXdQcm9wZXJ0aWVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBidWlsZEZvbnRQYXRocyhmb250LCBnbHlwaHMsIGhhbmRsZXIsIGV2YWx1YXRvck9wdGlvbnMpIHtcbiAgICBmdW5jdGlvbiBidWlsZFBhdGgoZm9udENoYXIpIHtcbiAgICAgIGNvbnN0IGdseXBoTmFtZSA9IGAke2ZvbnQubG9hZGVkTmFtZX1fcGF0aF8ke2ZvbnRDaGFyfWA7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChmb250LnJlbmRlcmVyLmhhc0J1aWx0UGF0aChmb250Q2hhcikpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBoYW5kbGVyLnNlbmQoXCJjb21tb25vYmpcIiwgW2dseXBoTmFtZSwgXCJGb250UGF0aFwiLCBmb250LnJlbmRlcmVyLmdldFBhdGhKcyhmb250Q2hhcildKTtcbiAgICAgIH0gY2F0Y2ggKHJlYXNvbikge1xuICAgICAgICBpZiAoZXZhbHVhdG9yT3B0aW9ucy5pZ25vcmVFcnJvcnMpIHtcbiAgICAgICAgICBoYW5kbGVyLnNlbmQoXCJVbnN1cHBvcnRlZEZlYXR1cmVcIiwge1xuICAgICAgICAgICAgZmVhdHVyZUlkOiBfdXRpbC5VTlNVUFBPUlRFRF9GRUFUVVJFUy5lcnJvckZvbnRCdWlsZFBhdGhcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAoMCwgX3V0aWwud2FybikoYGJ1aWxkRm9udFBhdGhzIC0gaWdub3JpbmcgJHtnbHlwaE5hbWV9IGdseXBoOiBcIiR7cmVhc29ufVwiLmApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IHJlYXNvbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGdseXBoIG9mIGdseXBocykge1xuICAgICAgYnVpbGRQYXRoKGdseXBoLmZvbnRDaGFyKTtcbiAgICAgIGNvbnN0IGFjY2VudCA9IGdseXBoLmFjY2VudDtcblxuICAgICAgaWYgKGFjY2VudCAmJiBhY2NlbnQuZm9udENoYXIpIHtcbiAgICAgICAgYnVpbGRQYXRoKGFjY2VudC5mb250Q2hhcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldCBmYWxsYmFja0ZvbnREaWN0KCkge1xuICAgIGNvbnN0IGRpY3QgPSBuZXcgX3ByaW1pdGl2ZXMuRGljdCgpO1xuICAgIGRpY3Quc2V0KFwiQmFzZUZvbnRcIiwgX3ByaW1pdGl2ZXMuTmFtZS5nZXQoXCJQREZKUy1GYWxsYmFja0ZvbnRcIikpO1xuICAgIGRpY3Quc2V0KFwiVHlwZVwiLCBfcHJpbWl0aXZlcy5OYW1lLmdldChcIkZhbGxiYWNrVHlwZVwiKSk7XG4gICAgZGljdC5zZXQoXCJTdWJ0eXBlXCIsIF9wcmltaXRpdmVzLk5hbWUuZ2V0KFwiRmFsbGJhY2tUeXBlXCIpKTtcbiAgICBkaWN0LnNldChcIkVuY29kaW5nXCIsIF9wcmltaXRpdmVzLk5hbWUuZ2V0KFwiV2luQW5zaUVuY29kaW5nXCIpKTtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJmYWxsYmFja0ZvbnREaWN0XCIsIGRpY3QpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5QYXJ0aWFsRXZhbHVhdG9yID0gUGFydGlhbEV2YWx1YXRvcjtcblxuY2xhc3MgVHJhbnNsYXRlZEZvbnQge1xuICBjb25zdHJ1Y3Rvcih7XG4gICAgbG9hZGVkTmFtZSxcbiAgICBmb250LFxuICAgIGRpY3QsXG4gICAgZXZhbHVhdG9yT3B0aW9uc1xuICB9KSB7XG4gICAgdGhpcy5sb2FkZWROYW1lID0gbG9hZGVkTmFtZTtcbiAgICB0aGlzLmZvbnQgPSBmb250O1xuICAgIHRoaXMuZGljdCA9IGRpY3Q7XG4gICAgdGhpcy5fZXZhbHVhdG9yT3B0aW9ucyA9IGV2YWx1YXRvck9wdGlvbnMgfHwgRGVmYXVsdFBhcnRpYWxFdmFsdWF0b3JPcHRpb25zO1xuICAgIHRoaXMudHlwZTNMb2FkZWQgPSBudWxsO1xuICAgIHRoaXMudHlwZTNEZXBlbmRlbmNpZXMgPSBmb250LmlzVHlwZTNGb250ID8gbmV3IFNldCgpIDogbnVsbDtcbiAgICB0aGlzLnNlbnQgPSBmYWxzZTtcbiAgfVxuXG4gIHNlbmQoaGFuZGxlcikge1xuICAgIGlmICh0aGlzLnNlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNlbnQgPSB0cnVlO1xuICAgIGhhbmRsZXIuc2VuZChcImNvbW1vbm9ialwiLCBbdGhpcy5sb2FkZWROYW1lLCBcIkZvbnRcIiwgdGhpcy5mb250LmV4cG9ydERhdGEodGhpcy5fZXZhbHVhdG9yT3B0aW9ucy5mb250RXh0cmFQcm9wZXJ0aWVzKV0pO1xuICB9XG5cbiAgZmFsbGJhY2soaGFuZGxlcikge1xuICAgIGlmICghdGhpcy5mb250LmRhdGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmZvbnQuZGlzYWJsZUZvbnRGYWNlID0gdHJ1ZTtcbiAgICBQYXJ0aWFsRXZhbHVhdG9yLmJ1aWxkRm9udFBhdGhzKHRoaXMuZm9udCwgdGhpcy5mb250LmdseXBoQ2FjaGVWYWx1ZXMsIGhhbmRsZXIsIHRoaXMuX2V2YWx1YXRvck9wdGlvbnMpO1xuICB9XG5cbiAgbG9hZFR5cGUzRGF0YShldmFsdWF0b3IsIHJlc291cmNlcywgdGFzaykge1xuICAgIGlmICh0aGlzLnR5cGUzTG9hZGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy50eXBlM0xvYWRlZDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZm9udC5pc1R5cGUzRm9udCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTXVzdCBiZSBhIFR5cGUzIGZvbnQuXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHR5cGUzRXZhbHVhdG9yID0gZXZhbHVhdG9yLmNsb25lKHtcbiAgICAgIGlnbm9yZUVycm9yczogZmFsc2VcbiAgICB9KTtcbiAgICB0eXBlM0V2YWx1YXRvci5wYXJzaW5nVHlwZTNGb250ID0gdHJ1ZTtcbiAgICBjb25zdCB0cmFuc2xhdGVkRm9udCA9IHRoaXMuZm9udCxcbiAgICAgICAgICB0eXBlM0RlcGVuZGVuY2llcyA9IHRoaXMudHlwZTNEZXBlbmRlbmNpZXM7XG4gICAgbGV0IGxvYWRDaGFyUHJvY3NQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgY29uc3QgY2hhclByb2NzID0gdGhpcy5kaWN0LmdldChcIkNoYXJQcm9jc1wiKTtcbiAgICBjb25zdCBmb250UmVzb3VyY2VzID0gdGhpcy5kaWN0LmdldChcIlJlc291cmNlc1wiKSB8fCByZXNvdXJjZXM7XG4gICAgY29uc3QgY2hhclByb2NPcGVyYXRvckxpc3QgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIGNvbnN0IGlzRW1wdHlCQm94ID0gIXRyYW5zbGF0ZWRGb250LmJib3ggfHwgKDAsIF91dGlsLmlzQXJyYXlFcXVhbCkodHJhbnNsYXRlZEZvbnQuYmJveCwgWzAsIDAsIDAsIDBdKTtcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIGNoYXJQcm9jcy5nZXRLZXlzKCkpIHtcbiAgICAgIGxvYWRDaGFyUHJvY3NQcm9taXNlID0gbG9hZENoYXJQcm9jc1Byb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgIGNvbnN0IGdseXBoU3RyZWFtID0gY2hhclByb2NzLmdldChrZXkpO1xuICAgICAgICBjb25zdCBvcGVyYXRvckxpc3QgPSBuZXcgX29wZXJhdG9yX2xpc3QuT3BlcmF0b3JMaXN0KCk7XG4gICAgICAgIHJldHVybiB0eXBlM0V2YWx1YXRvci5nZXRPcGVyYXRvckxpc3Qoe1xuICAgICAgICAgIHN0cmVhbTogZ2x5cGhTdHJlYW0sXG4gICAgICAgICAgdGFzayxcbiAgICAgICAgICByZXNvdXJjZXM6IGZvbnRSZXNvdXJjZXMsXG4gICAgICAgICAgb3BlcmF0b3JMaXN0XG4gICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGlmIChvcGVyYXRvckxpc3QuZm5BcnJheVswXSA9PT0gX3V0aWwuT1BTLnNldENoYXJXaWR0aEFuZEJvdW5kcykge1xuICAgICAgICAgICAgdGhpcy5fcmVtb3ZlVHlwZTNDb2xvck9wZXJhdG9ycyhvcGVyYXRvckxpc3QsIGlzRW1wdHlCQm94KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjaGFyUHJvY09wZXJhdG9yTGlzdFtrZXldID0gb3BlcmF0b3JMaXN0LmdldElSKCk7XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IGRlcGVuZGVuY3kgb2Ygb3BlcmF0b3JMaXN0LmRlcGVuZGVuY2llcykge1xuICAgICAgICAgICAgdHlwZTNEZXBlbmRlbmNpZXMuYWRkKGRlcGVuZGVuY3kpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgVHlwZTMgZm9udCByZXNvdXJjZSBcIiR7a2V5fVwiIGlzIG5vdCBhdmFpbGFibGUuYCk7XG4gICAgICAgICAgY29uc3QgZHVtbXlPcGVyYXRvckxpc3QgPSBuZXcgX29wZXJhdG9yX2xpc3QuT3BlcmF0b3JMaXN0KCk7XG4gICAgICAgICAgY2hhclByb2NPcGVyYXRvckxpc3Rba2V5XSA9IGR1bW15T3BlcmF0b3JMaXN0LmdldElSKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy50eXBlM0xvYWRlZCA9IGxvYWRDaGFyUHJvY3NQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgdHJhbnNsYXRlZEZvbnQuY2hhclByb2NPcGVyYXRvckxpc3QgPSBjaGFyUHJvY09wZXJhdG9yTGlzdDtcblxuICAgICAgaWYgKHRoaXMuX2Jib3gpIHtcbiAgICAgICAgdHJhbnNsYXRlZEZvbnQuaXNDaGFyQkJveCA9IHRydWU7XG4gICAgICAgIHRyYW5zbGF0ZWRGb250LmJib3ggPSB0aGlzLl9iYm94O1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLnR5cGUzTG9hZGVkO1xuICB9XG5cbiAgX3JlbW92ZVR5cGUzQ29sb3JPcGVyYXRvcnMob3BlcmF0b3JMaXN0LCBpc0VtcHR5QkJveCA9IGZhbHNlKSB7XG4gICAgaWYgKGlzRW1wdHlCQm94KSB7XG4gICAgICBpZiAoIXRoaXMuX2Jib3gpIHtcbiAgICAgICAgdGhpcy5fYmJveCA9IFtJbmZpbml0eSwgSW5maW5pdHksIC1JbmZpbml0eSwgLUluZmluaXR5XTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2hhckJCb3ggPSBfdXRpbC5VdGlsLm5vcm1hbGl6ZVJlY3Qob3BlcmF0b3JMaXN0LmFyZ3NBcnJheVswXS5zbGljZSgyKSk7XG5cbiAgICAgIHRoaXMuX2Jib3hbMF0gPSBNYXRoLm1pbih0aGlzLl9iYm94WzBdLCBjaGFyQkJveFswXSk7XG4gICAgICB0aGlzLl9iYm94WzFdID0gTWF0aC5taW4odGhpcy5fYmJveFsxXSwgY2hhckJCb3hbMV0pO1xuICAgICAgdGhpcy5fYmJveFsyXSA9IE1hdGgubWF4KHRoaXMuX2Jib3hbMl0sIGNoYXJCQm94WzJdKTtcbiAgICAgIHRoaXMuX2Jib3hbM10gPSBNYXRoLm1heCh0aGlzLl9iYm94WzNdLCBjaGFyQkJveFszXSk7XG4gICAgfVxuXG4gICAgbGV0IGkgPSAxLFxuICAgICAgICBpaSA9IG9wZXJhdG9yTGlzdC5sZW5ndGg7XG5cbiAgICB3aGlsZSAoaSA8IGlpKSB7XG4gICAgICBzd2l0Y2ggKG9wZXJhdG9yTGlzdC5mbkFycmF5W2ldKSB7XG4gICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFN0cm9rZUNvbG9yU3BhY2U6XG4gICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldEZpbGxDb2xvclNwYWNlOlxuICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRTdHJva2VDb2xvcjpcbiAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0U3Ryb2tlQ29sb3JOOlxuICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRGaWxsQ29sb3I6XG4gICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldEZpbGxDb2xvck46XG4gICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFN0cm9rZUdyYXk6XG4gICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldEZpbGxHcmF5OlxuICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRTdHJva2VSR0JDb2xvcjpcbiAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0RmlsbFJHQkNvbG9yOlxuICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRTdHJva2VDTVlLQ29sb3I6XG4gICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldEZpbGxDTVlLQ29sb3I6XG4gICAgICAgIGNhc2UgX3V0aWwuT1BTLnNoYWRpbmdGaWxsOlxuICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRSZW5kZXJpbmdJbnRlbnQ6XG4gICAgICAgICAgb3BlcmF0b3JMaXN0LmZuQXJyYXkuc3BsaWNlKGksIDEpO1xuICAgICAgICAgIG9wZXJhdG9yTGlzdC5hcmdzQXJyYXkuc3BsaWNlKGksIDEpO1xuICAgICAgICAgIGlpLS07XG4gICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0R1N0YXRlOlxuICAgICAgICAgIGNvbnN0IFtnU3RhdGVPYmpdID0gb3BlcmF0b3JMaXN0LmFyZ3NBcnJheVtpXTtcbiAgICAgICAgICBsZXQgaiA9IDAsXG4gICAgICAgICAgICAgIGpqID0gZ1N0YXRlT2JqLmxlbmd0aDtcblxuICAgICAgICAgIHdoaWxlIChqIDwgamopIHtcbiAgICAgICAgICAgIGNvbnN0IFtnU3RhdGVLZXldID0gZ1N0YXRlT2JqW2pdO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKGdTdGF0ZUtleSkge1xuICAgICAgICAgICAgICBjYXNlIFwiVFJcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIlRSMlwiOlxuICAgICAgICAgICAgICBjYXNlIFwiSFRcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIkJHXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJCRzJcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIlVDUlwiOlxuICAgICAgICAgICAgICBjYXNlIFwiVUNSMlwiOlxuICAgICAgICAgICAgICAgIGdTdGF0ZU9iai5zcGxpY2UoaiwgMSk7XG4gICAgICAgICAgICAgICAgamotLTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaisrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpKys7XG4gICAgfVxuICB9XG5cbn1cblxuY2xhc3MgU3RhdGVNYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IoaW5pdGlhbFN0YXRlID0gbmV3IEV2YWxTdGF0ZSgpKSB7XG4gICAgdGhpcy5zdGF0ZSA9IGluaXRpYWxTdGF0ZTtcbiAgICB0aGlzLnN0YXRlU3RhY2sgPSBbXTtcbiAgfVxuXG4gIHNhdmUoKSB7XG4gICAgY29uc3Qgb2xkID0gdGhpcy5zdGF0ZTtcbiAgICB0aGlzLnN0YXRlU3RhY2sucHVzaCh0aGlzLnN0YXRlKTtcbiAgICB0aGlzLnN0YXRlID0gb2xkLmNsb25lKCk7XG4gIH1cblxuICByZXN0b3JlKCkge1xuICAgIGNvbnN0IHByZXYgPSB0aGlzLnN0YXRlU3RhY2sucG9wKCk7XG5cbiAgICBpZiAocHJldikge1xuICAgICAgdGhpcy5zdGF0ZSA9IHByZXY7XG4gICAgfVxuICB9XG5cbiAgdHJhbnNmb3JtKGFyZ3MpIHtcbiAgICB0aGlzLnN0YXRlLmN0bSA9IF91dGlsLlV0aWwudHJhbnNmb3JtKHRoaXMuc3RhdGUuY3RtLCBhcmdzKTtcbiAgfVxuXG59XG5cbmNsYXNzIFRleHRTdGF0ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY3RtID0gbmV3IEZsb2F0MzJBcnJheShfdXRpbC5JREVOVElUWV9NQVRSSVgpO1xuICAgIHRoaXMuZm9udE5hbWUgPSBudWxsO1xuICAgIHRoaXMuZm9udFNpemUgPSAwO1xuICAgIHRoaXMuZm9udCA9IG51bGw7XG4gICAgdGhpcy5mb250TWF0cml4ID0gX3V0aWwuRk9OVF9JREVOVElUWV9NQVRSSVg7XG4gICAgdGhpcy50ZXh0TWF0cml4ID0gX3V0aWwuSURFTlRJVFlfTUFUUklYLnNsaWNlKCk7XG4gICAgdGhpcy50ZXh0TGluZU1hdHJpeCA9IF91dGlsLklERU5USVRZX01BVFJJWC5zbGljZSgpO1xuICAgIHRoaXMuY2hhclNwYWNpbmcgPSAwO1xuICAgIHRoaXMud29yZFNwYWNpbmcgPSAwO1xuICAgIHRoaXMubGVhZGluZyA9IDA7XG4gICAgdGhpcy50ZXh0SFNjYWxlID0gMTtcbiAgICB0aGlzLnRleHRSaXNlID0gMDtcbiAgfVxuXG4gIHNldFRleHRNYXRyaXgoYSwgYiwgYywgZCwgZSwgZikge1xuICAgIGNvbnN0IG0gPSB0aGlzLnRleHRNYXRyaXg7XG4gICAgbVswXSA9IGE7XG4gICAgbVsxXSA9IGI7XG4gICAgbVsyXSA9IGM7XG4gICAgbVszXSA9IGQ7XG4gICAgbVs0XSA9IGU7XG4gICAgbVs1XSA9IGY7XG4gIH1cblxuICBzZXRUZXh0TGluZU1hdHJpeChhLCBiLCBjLCBkLCBlLCBmKSB7XG4gICAgY29uc3QgbSA9IHRoaXMudGV4dExpbmVNYXRyaXg7XG4gICAgbVswXSA9IGE7XG4gICAgbVsxXSA9IGI7XG4gICAgbVsyXSA9IGM7XG4gICAgbVszXSA9IGQ7XG4gICAgbVs0XSA9IGU7XG4gICAgbVs1XSA9IGY7XG4gIH1cblxuICB0cmFuc2xhdGVUZXh0TWF0cml4KHgsIHkpIHtcbiAgICBjb25zdCBtID0gdGhpcy50ZXh0TWF0cml4O1xuICAgIG1bNF0gPSBtWzBdICogeCArIG1bMl0gKiB5ICsgbVs0XTtcbiAgICBtWzVdID0gbVsxXSAqIHggKyBtWzNdICogeSArIG1bNV07XG4gIH1cblxuICB0cmFuc2xhdGVUZXh0TGluZU1hdHJpeCh4LCB5KSB7XG4gICAgY29uc3QgbSA9IHRoaXMudGV4dExpbmVNYXRyaXg7XG4gICAgbVs0XSA9IG1bMF0gKiB4ICsgbVsyXSAqIHkgKyBtWzRdO1xuICAgIG1bNV0gPSBtWzFdICogeCArIG1bM10gKiB5ICsgbVs1XTtcbiAgfVxuXG4gIGNhcnJpYWdlUmV0dXJuKCkge1xuICAgIHRoaXMudHJhbnNsYXRlVGV4dExpbmVNYXRyaXgoMCwgLXRoaXMubGVhZGluZyk7XG4gICAgdGhpcy50ZXh0TWF0cml4ID0gdGhpcy50ZXh0TGluZU1hdHJpeC5zbGljZSgpO1xuICB9XG5cbiAgY2xvbmUoKSB7XG4gICAgY29uc3QgY2xvbmUgPSBPYmplY3QuY3JlYXRlKHRoaXMpO1xuICAgIGNsb25lLnRleHRNYXRyaXggPSB0aGlzLnRleHRNYXRyaXguc2xpY2UoKTtcbiAgICBjbG9uZS50ZXh0TGluZU1hdHJpeCA9IHRoaXMudGV4dExpbmVNYXRyaXguc2xpY2UoKTtcbiAgICBjbG9uZS5mb250TWF0cml4ID0gdGhpcy5mb250TWF0cml4LnNsaWNlKCk7XG4gICAgcmV0dXJuIGNsb25lO1xuICB9XG5cbn1cblxuY2xhc3MgRXZhbFN0YXRlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jdG0gPSBuZXcgRmxvYXQzMkFycmF5KF91dGlsLklERU5USVRZX01BVFJJWCk7XG4gICAgdGhpcy5mb250ID0gbnVsbDtcbiAgICB0aGlzLnRleHRSZW5kZXJpbmdNb2RlID0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuRklMTDtcbiAgICB0aGlzLmZpbGxDb2xvclNwYWNlID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXk7XG4gICAgdGhpcy5zdHJva2VDb2xvclNwYWNlID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXk7XG4gIH1cblxuICBjbG9uZSgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmNyZWF0ZSh0aGlzKTtcbiAgfVxuXG59XG5cbmNsYXNzIEV2YWx1YXRvclByZXByb2Nlc3NvciB7XG4gIHN0YXRpYyBnZXQgb3BNYXAoKSB7XG4gICAgY29uc3QgZ2V0T1BNYXAgPSAoMCwgX2NvcmVfdXRpbHMuZ2V0TG9va3VwVGFibGVGYWN0b3J5KShmdW5jdGlvbiAodCkge1xuICAgICAgdC53ID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLnNldExpbmVXaWR0aCxcbiAgICAgICAgbnVtQXJnczogMSxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuSiA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRMaW5lQ2FwLFxuICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5qID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLnNldExpbmVKb2luLFxuICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5NID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLnNldE1pdGVyTGltaXQsXG4gICAgICAgIG51bUFyZ3M6IDEsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LmQgPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0RGFzaCxcbiAgICAgICAgbnVtQXJnczogMixcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQucmkgPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0UmVuZGVyaW5nSW50ZW50LFxuICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5pID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLnNldEZsYXRuZXNzLFxuICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5ncyA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRHU3RhdGUsXG4gICAgICAgIG51bUFyZ3M6IDEsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LnEgPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuc2F2ZSxcbiAgICAgICAgbnVtQXJnczogMCxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuUSA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5yZXN0b3JlLFxuICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5jbSA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy50cmFuc2Zvcm0sXG4gICAgICAgIG51bUFyZ3M6IDYsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0Lm0gPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMubW92ZVRvLFxuICAgICAgICBudW1BcmdzOiAyLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5sID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLmxpbmVUbyxcbiAgICAgICAgbnVtQXJnczogMixcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuYyA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5jdXJ2ZVRvLFxuICAgICAgICBudW1BcmdzOiA2LFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC52ID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLmN1cnZlVG8yLFxuICAgICAgICBudW1BcmdzOiA0LFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC55ID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLmN1cnZlVG8zLFxuICAgICAgICBudW1BcmdzOiA0LFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5oID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLmNsb3NlUGF0aCxcbiAgICAgICAgbnVtQXJnczogMCxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQucmUgPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMucmVjdGFuZ2xlLFxuICAgICAgICBudW1BcmdzOiA0LFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5TID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLnN0cm9rZSxcbiAgICAgICAgbnVtQXJnczogMCxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQucyA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5jbG9zZVN0cm9rZSxcbiAgICAgICAgbnVtQXJnczogMCxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuZiA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5maWxsLFxuICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5GID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLmZpbGwsXG4gICAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0W1wiZipcIl0gPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuZW9GaWxsLFxuICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5CID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLmZpbGxTdHJva2UsXG4gICAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0W1wiQipcIl0gPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuZW9GaWxsU3Ryb2tlLFxuICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5iID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLmNsb3NlRmlsbFN0cm9rZSxcbiAgICAgICAgbnVtQXJnczogMCxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHRbXCJiKlwiXSA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5jbG9zZUVPRmlsbFN0cm9rZSxcbiAgICAgICAgbnVtQXJnczogMCxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQubiA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5lbmRQYXRoLFxuICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5XID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLmNsaXAsXG4gICAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0W1wiVypcIl0gPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuZW9DbGlwLFxuICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5CVCA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5iZWdpblRleHQsXG4gICAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LkVUID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLmVuZFRleHQsXG4gICAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LlRjID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLnNldENoYXJTcGFjaW5nLFxuICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5UdyA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRXb3JkU3BhY2luZyxcbiAgICAgICAgbnVtQXJnczogMSxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuVHogPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0SFNjYWxlLFxuICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5UTCA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRMZWFkaW5nLFxuICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5UZiA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRGb250LFxuICAgICAgICBudW1BcmdzOiAyLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5UciA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRUZXh0UmVuZGVyaW5nTW9kZSxcbiAgICAgICAgbnVtQXJnczogMSxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuVHMgPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0VGV4dFJpc2UsXG4gICAgICAgIG51bUFyZ3M6IDEsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LlRkID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLm1vdmVUZXh0LFxuICAgICAgICBudW1BcmdzOiAyLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5URCA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRMZWFkaW5nTW92ZVRleHQsXG4gICAgICAgIG51bUFyZ3M6IDIsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LlRtID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLnNldFRleHRNYXRyaXgsXG4gICAgICAgIG51bUFyZ3M6IDYsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0W1wiVCpcIl0gPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMubmV4dExpbmUsXG4gICAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LlRqID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLnNob3dUZXh0LFxuICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5USiA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5zaG93U3BhY2VkVGV4dCxcbiAgICAgICAgbnVtQXJnczogMSxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHRbXCInXCJdID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLm5leHRMaW5lU2hvd1RleHQsXG4gICAgICAgIG51bUFyZ3M6IDEsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0WydcIiddID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLm5leHRMaW5lU2V0U3BhY2luZ1Nob3dUZXh0LFxuICAgICAgICBudW1BcmdzOiAzLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5kMCA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRDaGFyV2lkdGgsXG4gICAgICAgIG51bUFyZ3M6IDIsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LmQxID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLnNldENoYXJXaWR0aEFuZEJvdW5kcyxcbiAgICAgICAgbnVtQXJnczogNixcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuQ1MgPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0U3Ryb2tlQ29sb3JTcGFjZSxcbiAgICAgICAgbnVtQXJnczogMSxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuY3MgPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0RmlsbENvbG9yU3BhY2UsXG4gICAgICAgIG51bUFyZ3M6IDEsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LlNDID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLnNldFN0cm9rZUNvbG9yLFxuICAgICAgICBudW1BcmdzOiA0LFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IHRydWVcbiAgICAgIH07XG4gICAgICB0LlNDTiA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRTdHJva2VDb2xvck4sXG4gICAgICAgIG51bUFyZ3M6IDMzLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IHRydWVcbiAgICAgIH07XG4gICAgICB0LnNjID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLnNldEZpbGxDb2xvcixcbiAgICAgICAgbnVtQXJnczogNCxcbiAgICAgICAgdmFyaWFibGVBcmdzOiB0cnVlXG4gICAgICB9O1xuICAgICAgdC5zY24gPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0RmlsbENvbG9yTixcbiAgICAgICAgbnVtQXJnczogMzMsXG4gICAgICAgIHZhcmlhYmxlQXJnczogdHJ1ZVxuICAgICAgfTtcbiAgICAgIHQuRyA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRTdHJva2VHcmF5LFxuICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5nID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLnNldEZpbGxHcmF5LFxuICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5SRyA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRTdHJva2VSR0JDb2xvcixcbiAgICAgICAgbnVtQXJnczogMyxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQucmcgPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0RmlsbFJHQkNvbG9yLFxuICAgICAgICBudW1BcmdzOiAzLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5LID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLnNldFN0cm9rZUNNWUtDb2xvcixcbiAgICAgICAgbnVtQXJnczogNCxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuayA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRGaWxsQ01ZS0NvbG9yLFxuICAgICAgICBudW1BcmdzOiA0LFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5zaCA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5zaGFkaW5nRmlsbCxcbiAgICAgICAgbnVtQXJnczogMSxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuQkkgPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuYmVnaW5JbmxpbmVJbWFnZSxcbiAgICAgICAgbnVtQXJnczogMCxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuSUQgPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMuYmVnaW5JbWFnZURhdGEsXG4gICAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LkVJID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLmVuZElubGluZUltYWdlLFxuICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5EbyA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5wYWludFhPYmplY3QsXG4gICAgICAgIG51bUFyZ3M6IDEsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0Lk1QID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLm1hcmtQb2ludCxcbiAgICAgICAgbnVtQXJnczogMSxcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuRFAgPSB7XG4gICAgICAgIGlkOiBfdXRpbC5PUFMubWFya1BvaW50UHJvcHMsXG4gICAgICAgIG51bUFyZ3M6IDIsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LkJNQyA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5iZWdpbk1hcmtlZENvbnRlbnQsXG4gICAgICAgIG51bUFyZ3M6IDEsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LkJEQyA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wcyxcbiAgICAgICAgbnVtQXJnczogMixcbiAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHQuRU1DID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLmVuZE1hcmtlZENvbnRlbnQsXG4gICAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LkJYID0ge1xuICAgICAgICBpZDogX3V0aWwuT1BTLmJlZ2luQ29tcGF0LFxuICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICB9O1xuICAgICAgdC5FWCA9IHtcbiAgICAgICAgaWQ6IF91dGlsLk9QUy5lbmRDb21wYXQsXG4gICAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgIH07XG4gICAgICB0LkJNID0gbnVsbDtcbiAgICAgIHQuQkQgPSBudWxsO1xuICAgICAgdC50cnVlID0gbnVsbDtcbiAgICAgIHQuZmEgPSBudWxsO1xuICAgICAgdC5mYWwgPSBudWxsO1xuICAgICAgdC5mYWxzID0gbnVsbDtcbiAgICAgIHQuZmFsc2UgPSBudWxsO1xuICAgICAgdC5udSA9IG51bGw7XG4gICAgICB0Lm51bCA9IG51bGw7XG4gICAgICB0Lm51bGwgPSBudWxsO1xuICAgIH0pO1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIm9wTWFwXCIsIGdldE9QTWFwKCkpO1xuICB9XG5cbiAgc3RhdGljIGdldCBNQVhfSU5WQUxJRF9QQVRIX09QUygpIHtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJNQVhfSU5WQUxJRF9QQVRIX09QU1wiLCAyMCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihzdHJlYW0sIHhyZWYsIHN0YXRlTWFuYWdlciA9IG5ldyBTdGF0ZU1hbmFnZXIoKSkge1xuICAgIHRoaXMucGFyc2VyID0gbmV3IF9wYXJzZXIuUGFyc2VyKHtcbiAgICAgIGxleGVyOiBuZXcgX3BhcnNlci5MZXhlcihzdHJlYW0sIEV2YWx1YXRvclByZXByb2Nlc3Nvci5vcE1hcCksXG4gICAgICB4cmVmXG4gICAgfSk7XG4gICAgdGhpcy5zdGF0ZU1hbmFnZXIgPSBzdGF0ZU1hbmFnZXI7XG4gICAgdGhpcy5ub25Qcm9jZXNzZWRBcmdzID0gW107XG4gICAgdGhpcy5fbnVtSW52YWxpZFBhdGhPUFMgPSAwO1xuICB9XG5cbiAgZ2V0IHNhdmVkU3RhdGVzRGVwdGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVNYW5hZ2VyLnN0YXRlU3RhY2subGVuZ3RoO1xuICB9XG5cbiAgcmVhZChvcGVyYXRpb24pIHtcbiAgICBsZXQgYXJncyA9IG9wZXJhdGlvbi5hcmdzO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IG9iaiA9IHRoaXMucGFyc2VyLmdldE9iaigpO1xuXG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuQ21kKSB7XG4gICAgICAgIGNvbnN0IGNtZCA9IG9iai5jbWQ7XG4gICAgICAgIGNvbnN0IG9wU3BlYyA9IEV2YWx1YXRvclByZXByb2Nlc3Nvci5vcE1hcFtjbWRdO1xuXG4gICAgICAgIGlmICghb3BTcGVjKSB7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKGBVbmtub3duIGNvbW1hbmQgXCIke2NtZH1cIi5gKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZuID0gb3BTcGVjLmlkO1xuICAgICAgICBjb25zdCBudW1BcmdzID0gb3BTcGVjLm51bUFyZ3M7XG4gICAgICAgIGxldCBhcmdzTGVuZ3RoID0gYXJncyAhPT0gbnVsbCA/IGFyZ3MubGVuZ3RoIDogMDtcblxuICAgICAgICBpZiAoIW9wU3BlYy52YXJpYWJsZUFyZ3MpIHtcbiAgICAgICAgICBpZiAoYXJnc0xlbmd0aCAhPT0gbnVtQXJncykge1xuICAgICAgICAgICAgY29uc3Qgbm9uUHJvY2Vzc2VkQXJncyA9IHRoaXMubm9uUHJvY2Vzc2VkQXJncztcblxuICAgICAgICAgICAgd2hpbGUgKGFyZ3NMZW5ndGggPiBudW1BcmdzKSB7XG4gICAgICAgICAgICAgIG5vblByb2Nlc3NlZEFyZ3MucHVzaChhcmdzLnNoaWZ0KCkpO1xuICAgICAgICAgICAgICBhcmdzTGVuZ3RoLS07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHdoaWxlIChhcmdzTGVuZ3RoIDwgbnVtQXJncyAmJiBub25Qcm9jZXNzZWRBcmdzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgICBpZiAoYXJncyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGFyZ3MgPSBbXTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGFyZ3MudW5zaGlmdChub25Qcm9jZXNzZWRBcmdzLnBvcCgpKTtcbiAgICAgICAgICAgICAgYXJnc0xlbmd0aCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChhcmdzTGVuZ3RoIDwgbnVtQXJncykge1xuICAgICAgICAgICAgY29uc3QgcGFydGlhbE1zZyA9IGBjb21tYW5kICR7Y21kfTogZXhwZWN0ZWQgJHtudW1BcmdzfSBhcmdzLCBgICsgYGJ1dCByZWNlaXZlZCAke2FyZ3NMZW5ndGh9IGFyZ3MuYDtcblxuICAgICAgICAgICAgaWYgKGZuID49IF91dGlsLk9QUy5tb3ZlVG8gJiYgZm4gPD0gX3V0aWwuT1BTLmVuZFBhdGggJiYgKyt0aGlzLl9udW1JbnZhbGlkUGF0aE9QUyA+IEV2YWx1YXRvclByZXByb2Nlc3Nvci5NQVhfSU5WQUxJRF9QQVRIX09QUykge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYEludmFsaWQgJHtwYXJ0aWFsTXNnfWApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAoMCwgX3V0aWwud2FybikoYFNraXBwaW5nICR7cGFydGlhbE1zZ31gKTtcblxuICAgICAgICAgICAgaWYgKGFyZ3MgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgYXJncy5sZW5ndGggPSAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoYXJnc0xlbmd0aCA+IG51bUFyZ3MpIHtcbiAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoYENvbW1hbmQgJHtjbWR9OiBleHBlY3RlZCBbMCwgJHtudW1BcmdzfV0gYXJncywgYCArIGBidXQgcmVjZWl2ZWQgJHthcmdzTGVuZ3RofSBhcmdzLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcmVwcm9jZXNzQ29tbWFuZChmbiwgYXJncyk7XG4gICAgICAgIG9wZXJhdGlvbi5mbiA9IGZuO1xuICAgICAgICBvcGVyYXRpb24uYXJncyA9IGFyZ3M7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAob2JqID09PSBfcHJpbWl0aXZlcy5FT0YpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAob2JqICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChhcmdzID09PSBudWxsKSB7XG4gICAgICAgICAgYXJncyA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJncy5wdXNoKG9iaik7XG5cbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMzMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJUb28gbWFueSBhcmd1bWVudHNcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcmVwcm9jZXNzQ29tbWFuZChmbiwgYXJncykge1xuICAgIHN3aXRjaCAoZm4gfCAwKSB7XG4gICAgICBjYXNlIF91dGlsLk9QUy5zYXZlOlxuICAgICAgICB0aGlzLnN0YXRlTWFuYWdlci5zYXZlKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIF91dGlsLk9QUy5yZXN0b3JlOlxuICAgICAgICB0aGlzLnN0YXRlTWFuYWdlci5yZXN0b3JlKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIF91dGlsLk9QUy50cmFuc2Zvcm06XG4gICAgICAgIHRoaXMuc3RhdGVNYW5hZ2VyLnRyYW5zZm9ybShhcmdzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbn1cblxuZXhwb3J0cy5FdmFsdWF0b3JQcmVwcm9jZXNzb3IgPSBFdmFsdWF0b3JQcmVwcm9jZXNzb3I7XG5cbi8qKiovIH0pLFxuLyogMjYgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuSWRlbnRpdHlDTWFwID0gZXhwb3J0cy5DTWFwRmFjdG9yeSA9IGV4cG9ydHMuQ01hcCA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9wcmltaXRpdmVzID0gX193X3BkZmpzX3JlcXVpcmVfXyg1KTtcblxudmFyIF9wYXJzZXIgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDI3KTtcblxudmFyIF9jb3JlX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXyg5KTtcblxudmFyIF9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEwKTtcblxuY29uc3QgQlVJTFRfSU5fQ01BUFMgPSBbXCJBZG9iZS1HQjEtVUNTMlwiLCBcIkFkb2JlLUNOUzEtVUNTMlwiLCBcIkFkb2JlLUphcGFuMS1VQ1MyXCIsIFwiQWRvYmUtS29yZWExLVVDUzJcIiwgXCI3OC1FVUMtSFwiLCBcIjc4LUVVQy1WXCIsIFwiNzgtSFwiLCBcIjc4LVJLU0otSFwiLCBcIjc4LVJLU0otVlwiLCBcIjc4LVZcIiwgXCI3OG1zLVJLU0otSFwiLCBcIjc4bXMtUktTSi1WXCIsIFwiODNwdi1SS1NKLUhcIiwgXCI5MG1zLVJLU0otSFwiLCBcIjkwbXMtUktTSi1WXCIsIFwiOTBtc3AtUktTSi1IXCIsIFwiOTBtc3AtUktTSi1WXCIsIFwiOTBwdi1SS1NKLUhcIiwgXCI5MHB2LVJLU0otVlwiLCBcIkFkZC1IXCIsIFwiQWRkLVJLU0otSFwiLCBcIkFkZC1SS1NKLVZcIiwgXCJBZGQtVlwiLCBcIkFkb2JlLUNOUzEtMFwiLCBcIkFkb2JlLUNOUzEtMVwiLCBcIkFkb2JlLUNOUzEtMlwiLCBcIkFkb2JlLUNOUzEtM1wiLCBcIkFkb2JlLUNOUzEtNFwiLCBcIkFkb2JlLUNOUzEtNVwiLCBcIkFkb2JlLUNOUzEtNlwiLCBcIkFkb2JlLUdCMS0wXCIsIFwiQWRvYmUtR0IxLTFcIiwgXCJBZG9iZS1HQjEtMlwiLCBcIkFkb2JlLUdCMS0zXCIsIFwiQWRvYmUtR0IxLTRcIiwgXCJBZG9iZS1HQjEtNVwiLCBcIkFkb2JlLUphcGFuMS0wXCIsIFwiQWRvYmUtSmFwYW4xLTFcIiwgXCJBZG9iZS1KYXBhbjEtMlwiLCBcIkFkb2JlLUphcGFuMS0zXCIsIFwiQWRvYmUtSmFwYW4xLTRcIiwgXCJBZG9iZS1KYXBhbjEtNVwiLCBcIkFkb2JlLUphcGFuMS02XCIsIFwiQWRvYmUtS29yZWExLTBcIiwgXCJBZG9iZS1Lb3JlYTEtMVwiLCBcIkFkb2JlLUtvcmVhMS0yXCIsIFwiQjUtSFwiLCBcIkI1LVZcIiwgXCJCNXBjLUhcIiwgXCJCNXBjLVZcIiwgXCJDTlMtRVVDLUhcIiwgXCJDTlMtRVVDLVZcIiwgXCJDTlMxLUhcIiwgXCJDTlMxLVZcIiwgXCJDTlMyLUhcIiwgXCJDTlMyLVZcIiwgXCJFVEhLLUI1LUhcIiwgXCJFVEhLLUI1LVZcIiwgXCJFVGVuLUI1LUhcIiwgXCJFVGVuLUI1LVZcIiwgXCJFVGVubXMtQjUtSFwiLCBcIkVUZW5tcy1CNS1WXCIsIFwiRVVDLUhcIiwgXCJFVUMtVlwiLCBcIkV4dC1IXCIsIFwiRXh0LVJLU0otSFwiLCBcIkV4dC1SS1NKLVZcIiwgXCJFeHQtVlwiLCBcIkdCLUVVQy1IXCIsIFwiR0ItRVVDLVZcIiwgXCJHQi1IXCIsIFwiR0ItVlwiLCBcIkdCSy1FVUMtSFwiLCBcIkdCSy1FVUMtVlwiLCBcIkdCSzJLLUhcIiwgXCJHQksySy1WXCIsIFwiR0JLcC1FVUMtSFwiLCBcIkdCS3AtRVVDLVZcIiwgXCJHQlQtRVVDLUhcIiwgXCJHQlQtRVVDLVZcIiwgXCJHQlQtSFwiLCBcIkdCVC1WXCIsIFwiR0JUcGMtRVVDLUhcIiwgXCJHQlRwYy1FVUMtVlwiLCBcIkdCcGMtRVVDLUhcIiwgXCJHQnBjLUVVQy1WXCIsIFwiSFwiLCBcIkhLZGxhLUI1LUhcIiwgXCJIS2RsYS1CNS1WXCIsIFwiSEtkbGItQjUtSFwiLCBcIkhLZGxiLUI1LVZcIiwgXCJIS2djY3MtQjUtSFwiLCBcIkhLZ2Njcy1CNS1WXCIsIFwiSEttMzE0LUI1LUhcIiwgXCJIS20zMTQtQjUtVlwiLCBcIkhLbTQ3MS1CNS1IXCIsIFwiSEttNDcxLUI1LVZcIiwgXCJIS3Njcy1CNS1IXCIsIFwiSEtzY3MtQjUtVlwiLCBcIkhhbmtha3VcIiwgXCJIaXJhZ2FuYVwiLCBcIktTQy1FVUMtSFwiLCBcIktTQy1FVUMtVlwiLCBcIktTQy1IXCIsIFwiS1NDLUpvaGFiLUhcIiwgXCJLU0MtSm9oYWItVlwiLCBcIktTQy1WXCIsIFwiS1NDbXMtVUhDLUhcIiwgXCJLU0Ntcy1VSEMtSFctSFwiLCBcIktTQ21zLVVIQy1IVy1WXCIsIFwiS1NDbXMtVUhDLVZcIiwgXCJLU0NwYy1FVUMtSFwiLCBcIktTQ3BjLUVVQy1WXCIsIFwiS2F0YWthbmFcIiwgXCJOV1AtSFwiLCBcIk5XUC1WXCIsIFwiUktTSi1IXCIsIFwiUktTSi1WXCIsIFwiUm9tYW5cIiwgXCJVbmlDTlMtVUNTMi1IXCIsIFwiVW5pQ05TLVVDUzItVlwiLCBcIlVuaUNOUy1VVEYxNi1IXCIsIFwiVW5pQ05TLVVURjE2LVZcIiwgXCJVbmlDTlMtVVRGMzItSFwiLCBcIlVuaUNOUy1VVEYzMi1WXCIsIFwiVW5pQ05TLVVURjgtSFwiLCBcIlVuaUNOUy1VVEY4LVZcIiwgXCJVbmlHQi1VQ1MyLUhcIiwgXCJVbmlHQi1VQ1MyLVZcIiwgXCJVbmlHQi1VVEYxNi1IXCIsIFwiVW5pR0ItVVRGMTYtVlwiLCBcIlVuaUdCLVVURjMyLUhcIiwgXCJVbmlHQi1VVEYzMi1WXCIsIFwiVW5pR0ItVVRGOC1IXCIsIFwiVW5pR0ItVVRGOC1WXCIsIFwiVW5pSklTLVVDUzItSFwiLCBcIlVuaUpJUy1VQ1MyLUhXLUhcIiwgXCJVbmlKSVMtVUNTMi1IVy1WXCIsIFwiVW5pSklTLVVDUzItVlwiLCBcIlVuaUpJUy1VVEYxNi1IXCIsIFwiVW5pSklTLVVURjE2LVZcIiwgXCJVbmlKSVMtVVRGMzItSFwiLCBcIlVuaUpJUy1VVEYzMi1WXCIsIFwiVW5pSklTLVVURjgtSFwiLCBcIlVuaUpJUy1VVEY4LVZcIiwgXCJVbmlKSVMyMDA0LVVURjE2LUhcIiwgXCJVbmlKSVMyMDA0LVVURjE2LVZcIiwgXCJVbmlKSVMyMDA0LVVURjMyLUhcIiwgXCJVbmlKSVMyMDA0LVVURjMyLVZcIiwgXCJVbmlKSVMyMDA0LVVURjgtSFwiLCBcIlVuaUpJUzIwMDQtVVRGOC1WXCIsIFwiVW5pSklTUHJvLVVDUzItSFctVlwiLCBcIlVuaUpJU1Byby1VQ1MyLVZcIiwgXCJVbmlKSVNQcm8tVVRGOC1WXCIsIFwiVW5pSklTWDAyMTMtVVRGMzItSFwiLCBcIlVuaUpJU1gwMjEzLVVURjMyLVZcIiwgXCJVbmlKSVNYMDIxMzIwMDQtVVRGMzItSFwiLCBcIlVuaUpJU1gwMjEzMjAwNC1VVEYzMi1WXCIsIFwiVW5pS1MtVUNTMi1IXCIsIFwiVW5pS1MtVUNTMi1WXCIsIFwiVW5pS1MtVVRGMTYtSFwiLCBcIlVuaUtTLVVURjE2LVZcIiwgXCJVbmlLUy1VVEYzMi1IXCIsIFwiVW5pS1MtVVRGMzItVlwiLCBcIlVuaUtTLVVURjgtSFwiLCBcIlVuaUtTLVVURjgtVlwiLCBcIlZcIiwgXCJXUC1TeW1ib2xcIl07XG5jb25zdCBNQVhfTUFQX1JBTkdFID0gMiAqKiAyNCAtIDE7XG5cbmNsYXNzIENNYXAge1xuICBjb25zdHJ1Y3RvcihidWlsdEluQ01hcCA9IGZhbHNlKSB7XG4gICAgdGhpcy5jb2Rlc3BhY2VSYW5nZXMgPSBbW10sIFtdLCBbXSwgW11dO1xuICAgIHRoaXMubnVtQ29kZXNwYWNlUmFuZ2VzID0gMDtcbiAgICB0aGlzLl9tYXAgPSBbXTtcbiAgICB0aGlzLm5hbWUgPSBcIlwiO1xuICAgIHRoaXMudmVydGljYWwgPSBmYWxzZTtcbiAgICB0aGlzLnVzZUNNYXAgPSBudWxsO1xuICAgIHRoaXMuYnVpbHRJbkNNYXAgPSBidWlsdEluQ01hcDtcbiAgfVxuXG4gIGFkZENvZGVzcGFjZVJhbmdlKG4sIGxvdywgaGlnaCkge1xuICAgIHRoaXMuY29kZXNwYWNlUmFuZ2VzW24gLSAxXS5wdXNoKGxvdywgaGlnaCk7XG4gICAgdGhpcy5udW1Db2Rlc3BhY2VSYW5nZXMrKztcbiAgfVxuXG4gIG1hcENpZFJhbmdlKGxvdywgaGlnaCwgZHN0TG93KSB7XG4gICAgaWYgKGhpZ2ggLSBsb3cgPiBNQVhfTUFQX1JBTkdFKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJtYXBDaWRSYW5nZSAtIGlnbm9yaW5nIGRhdGEgYWJvdmUgTUFYX01BUF9SQU5HRS5cIik7XG4gICAgfVxuXG4gICAgd2hpbGUgKGxvdyA8PSBoaWdoKSB7XG4gICAgICB0aGlzLl9tYXBbbG93KytdID0gZHN0TG93Kys7XG4gICAgfVxuICB9XG5cbiAgbWFwQmZSYW5nZShsb3csIGhpZ2gsIGRzdExvdykge1xuICAgIGlmIChoaWdoIC0gbG93ID4gTUFYX01BUF9SQU5HRSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwibWFwQmZSYW5nZSAtIGlnbm9yaW5nIGRhdGEgYWJvdmUgTUFYX01BUF9SQU5HRS5cIik7XG4gICAgfVxuXG4gICAgY29uc3QgbGFzdEJ5dGUgPSBkc3RMb3cubGVuZ3RoIC0gMTtcblxuICAgIHdoaWxlIChsb3cgPD0gaGlnaCkge1xuICAgICAgdGhpcy5fbWFwW2xvdysrXSA9IGRzdExvdztcbiAgICAgIGNvbnN0IG5leHRDaGFyQ29kZSA9IGRzdExvdy5jaGFyQ29kZUF0KGxhc3RCeXRlKSArIDE7XG5cbiAgICAgIGlmIChuZXh0Q2hhckNvZGUgPiAweGZmKSB7XG4gICAgICAgIGRzdExvdyA9IGRzdExvdy5zdWJzdHJpbmcoMCwgbGFzdEJ5dGUgLSAxKSArIFN0cmluZy5mcm9tQ2hhckNvZGUoZHN0TG93LmNoYXJDb2RlQXQobGFzdEJ5dGUgLSAxKSArIDEpICsgXCJcXHgwMFwiO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgZHN0TG93ID0gZHN0TG93LnN1YnN0cmluZygwLCBsYXN0Qnl0ZSkgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKG5leHRDaGFyQ29kZSk7XG4gICAgfVxuICB9XG5cbiAgbWFwQmZSYW5nZVRvQXJyYXkobG93LCBoaWdoLCBhcnJheSkge1xuICAgIGlmIChoaWdoIC0gbG93ID4gTUFYX01BUF9SQU5HRSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwibWFwQmZSYW5nZVRvQXJyYXkgLSBpZ25vcmluZyBkYXRhIGFib3ZlIE1BWF9NQVBfUkFOR0UuXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGlpID0gYXJyYXkubGVuZ3RoO1xuICAgIGxldCBpID0gMDtcblxuICAgIHdoaWxlIChsb3cgPD0gaGlnaCAmJiBpIDwgaWkpIHtcbiAgICAgIHRoaXMuX21hcFtsb3ddID0gYXJyYXlbaSsrXTtcbiAgICAgICsrbG93O1xuICAgIH1cbiAgfVxuXG4gIG1hcE9uZShzcmMsIGRzdCkge1xuICAgIHRoaXMuX21hcFtzcmNdID0gZHN0O1xuICB9XG5cbiAgbG9va3VwKGNvZGUpIHtcbiAgICByZXR1cm4gdGhpcy5fbWFwW2NvZGVdO1xuICB9XG5cbiAgY29udGFpbnMoY29kZSkge1xuICAgIHJldHVybiB0aGlzLl9tYXBbY29kZV0gIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZvckVhY2goY2FsbGJhY2spIHtcbiAgICBjb25zdCBtYXAgPSB0aGlzLl9tYXA7XG4gICAgY29uc3QgbGVuZ3RoID0gbWFwLmxlbmd0aDtcblxuICAgIGlmIChsZW5ndGggPD0gMHgxMDAwMCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAobWFwW2ldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjYWxsYmFjayhpLCBtYXBbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3QgaSBpbiBtYXApIHtcbiAgICAgICAgY2FsbGJhY2soaSwgbWFwW2ldKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjaGFyQ29kZU9mKHZhbHVlKSB7XG4gICAgY29uc3QgbWFwID0gdGhpcy5fbWFwO1xuXG4gICAgaWYgKG1hcC5sZW5ndGggPD0gMHgxMDAwMCkge1xuICAgICAgcmV0dXJuIG1hcC5pbmRleE9mKHZhbHVlKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNoYXJDb2RlIGluIG1hcCkge1xuICAgICAgaWYgKG1hcFtjaGFyQ29kZV0gPT09IHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBjaGFyQ29kZSB8IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgZ2V0TWFwKCkge1xuICAgIHJldHVybiB0aGlzLl9tYXA7XG4gIH1cblxuICByZWFkQ2hhckNvZGUoc3RyLCBvZmZzZXQsIG91dCkge1xuICAgIGxldCBjID0gMDtcbiAgICBjb25zdCBjb2Rlc3BhY2VSYW5nZXMgPSB0aGlzLmNvZGVzcGFjZVJhbmdlcztcblxuICAgIGZvciAobGV0IG4gPSAwLCBubiA9IGNvZGVzcGFjZVJhbmdlcy5sZW5ndGg7IG4gPCBubjsgbisrKSB7XG4gICAgICBjID0gKGMgPDwgOCB8IHN0ci5jaGFyQ29kZUF0KG9mZnNldCArIG4pKSA+Pj4gMDtcbiAgICAgIGNvbnN0IGNvZGVzcGFjZVJhbmdlID0gY29kZXNwYWNlUmFuZ2VzW25dO1xuXG4gICAgICBmb3IgKGxldCBrID0gMCwga2sgPSBjb2Rlc3BhY2VSYW5nZS5sZW5ndGg7IGsgPCBrazspIHtcbiAgICAgICAgY29uc3QgbG93ID0gY29kZXNwYWNlUmFuZ2VbaysrXTtcbiAgICAgICAgY29uc3QgaGlnaCA9IGNvZGVzcGFjZVJhbmdlW2srK107XG5cbiAgICAgICAgaWYgKGMgPj0gbG93ICYmIGMgPD0gaGlnaCkge1xuICAgICAgICAgIG91dC5jaGFyY29kZSA9IGM7XG4gICAgICAgICAgb3V0Lmxlbmd0aCA9IG4gKyAxO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIG91dC5jaGFyY29kZSA9IDA7XG4gICAgb3V0Lmxlbmd0aCA9IDE7XG4gIH1cblxuICBnZXRDaGFyQ29kZUxlbmd0aChjaGFyQ29kZSkge1xuICAgIGNvbnN0IGNvZGVzcGFjZVJhbmdlcyA9IHRoaXMuY29kZXNwYWNlUmFuZ2VzO1xuXG4gICAgZm9yIChsZXQgbiA9IDAsIG5uID0gY29kZXNwYWNlUmFuZ2VzLmxlbmd0aDsgbiA8IG5uOyBuKyspIHtcbiAgICAgIGNvbnN0IGNvZGVzcGFjZVJhbmdlID0gY29kZXNwYWNlUmFuZ2VzW25dO1xuXG4gICAgICBmb3IgKGxldCBrID0gMCwga2sgPSBjb2Rlc3BhY2VSYW5nZS5sZW5ndGg7IGsgPCBrazspIHtcbiAgICAgICAgY29uc3QgbG93ID0gY29kZXNwYWNlUmFuZ2VbaysrXTtcbiAgICAgICAgY29uc3QgaGlnaCA9IGNvZGVzcGFjZVJhbmdlW2srK107XG5cbiAgICAgICAgaWYgKGNoYXJDb2RlID49IGxvdyAmJiBjaGFyQ29kZSA8PSBoaWdoKSB7XG4gICAgICAgICAgcmV0dXJuIG4gKyAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBnZXQgbGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLl9tYXAubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IGlzSWRlbnRpdHlDTWFwKCkge1xuICAgIGlmICghKHRoaXMubmFtZSA9PT0gXCJJZGVudGl0eS1IXCIgfHwgdGhpcy5uYW1lID09PSBcIklkZW50aXR5LVZcIikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbWFwLmxlbmd0aCAhPT0gMHgxMDAwMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMHgxMDAwMDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5fbWFwW2ldICE9PSBpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuQ01hcCA9IENNYXA7XG5cbmNsYXNzIElkZW50aXR5Q01hcCBleHRlbmRzIENNYXAge1xuICBjb25zdHJ1Y3Rvcih2ZXJ0aWNhbCwgbikge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy52ZXJ0aWNhbCA9IHZlcnRpY2FsO1xuICAgIHRoaXMuYWRkQ29kZXNwYWNlUmFuZ2UobiwgMCwgMHhmZmZmKTtcbiAgfVxuXG4gIG1hcENpZFJhbmdlKGxvdywgaGlnaCwgZHN0TG93KSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcInNob3VsZCBub3QgY2FsbCBtYXBDaWRSYW5nZVwiKTtcbiAgfVxuXG4gIG1hcEJmUmFuZ2UobG93LCBoaWdoLCBkc3RMb3cpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwic2hvdWxkIG5vdCBjYWxsIG1hcEJmUmFuZ2VcIik7XG4gIH1cblxuICBtYXBCZlJhbmdlVG9BcnJheShsb3csIGhpZ2gsIGFycmF5KSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcInNob3VsZCBub3QgY2FsbCBtYXBCZlJhbmdlVG9BcnJheVwiKTtcbiAgfVxuXG4gIG1hcE9uZShzcmMsIGRzdCkge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJzaG91bGQgbm90IGNhbGwgbWFwQ2lkT25lXCIpO1xuICB9XG5cbiAgbG9va3VwKGNvZGUpIHtcbiAgICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihjb2RlKSAmJiBjb2RlIDw9IDB4ZmZmZiA/IGNvZGUgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb250YWlucyhjb2RlKSB7XG4gICAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIoY29kZSkgJiYgY29kZSA8PSAweGZmZmY7XG4gIH1cblxuICBmb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gMHhmZmZmOyBpKyspIHtcbiAgICAgIGNhbGxiYWNrKGksIGkpO1xuICAgIH1cbiAgfVxuXG4gIGNoYXJDb2RlT2YodmFsdWUpIHtcbiAgICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkgJiYgdmFsdWUgPD0gMHhmZmZmID8gdmFsdWUgOiAtMTtcbiAgfVxuXG4gIGdldE1hcCgpIHtcbiAgICBjb25zdCBtYXAgPSBuZXcgQXJyYXkoMHgxMDAwMCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8PSAweGZmZmY7IGkrKykge1xuICAgICAgbWFwW2ldID0gaTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFwO1xuICB9XG5cbiAgZ2V0IGxlbmd0aCgpIHtcbiAgICByZXR1cm4gMHgxMDAwMDtcbiAgfVxuXG4gIGdldCBpc0lkZW50aXR5Q01hcCgpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwic2hvdWxkIG5vdCBhY2Nlc3MgLmlzSWRlbnRpdHlDTWFwXCIpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5JZGVudGl0eUNNYXAgPSBJZGVudGl0eUNNYXA7XG5cbmNvbnN0IEJpbmFyeUNNYXBSZWFkZXIgPSBmdW5jdGlvbiBCaW5hcnlDTWFwUmVhZGVyQ2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gaGV4VG9JbnQoYSwgc2l6ZSkge1xuICAgIGxldCBuID0gMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IHNpemU7IGkrKykge1xuICAgICAgbiA9IG4gPDwgOCB8IGFbaV07XG4gICAgfVxuXG4gICAgcmV0dXJuIG4gPj4+IDA7XG4gIH1cblxuICBmdW5jdGlvbiBoZXhUb1N0cihhLCBzaXplKSB7XG4gICAgaWYgKHNpemUgPT09IDEpIHtcbiAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGFbMF0sIGFbMV0pO1xuICAgIH1cblxuICAgIGlmIChzaXplID09PSAzKSB7XG4gICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShhWzBdLCBhWzFdLCBhWzJdLCBhWzNdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBhLnN1YmFycmF5KDAsIHNpemUgKyAxKSk7XG4gIH1cblxuICBmdW5jdGlvbiBhZGRIZXgoYSwgYiwgc2l6ZSkge1xuICAgIGxldCBjID0gMDtcblxuICAgIGZvciAobGV0IGkgPSBzaXplOyBpID49IDA7IGktLSkge1xuICAgICAgYyArPSBhW2ldICsgYltpXTtcbiAgICAgIGFbaV0gPSBjICYgMjU1O1xuICAgICAgYyA+Pj0gODtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpbmNIZXgoYSwgc2l6ZSkge1xuICAgIGxldCBjID0gMTtcblxuICAgIGZvciAobGV0IGkgPSBzaXplOyBpID49IDAgJiYgYyA+IDA7IGktLSkge1xuICAgICAgYyArPSBhW2ldO1xuICAgICAgYVtpXSA9IGMgJiAyNTU7XG4gICAgICBjID4+PSA4O1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IE1BWF9OVU1fU0laRSA9IDE2O1xuICBjb25zdCBNQVhfRU5DT0RFRF9OVU1fU0laRSA9IDE5O1xuXG4gIGNsYXNzIEJpbmFyeUNNYXBTdHJlYW0ge1xuICAgIGNvbnN0cnVjdG9yKGRhdGEpIHtcbiAgICAgIHRoaXMuYnVmZmVyID0gZGF0YTtcbiAgICAgIHRoaXMucG9zID0gMDtcbiAgICAgIHRoaXMuZW5kID0gZGF0YS5sZW5ndGg7XG4gICAgICB0aGlzLnRtcEJ1ZiA9IG5ldyBVaW50OEFycmF5KE1BWF9FTkNPREVEX05VTV9TSVpFKTtcbiAgICB9XG5cbiAgICByZWFkQnl0ZSgpIHtcbiAgICAgIGlmICh0aGlzLnBvcyA+PSB0aGlzLmVuZCkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmJ1ZmZlclt0aGlzLnBvcysrXTtcbiAgICB9XG5cbiAgICByZWFkTnVtYmVyKCkge1xuICAgICAgbGV0IG4gPSAwO1xuICAgICAgbGV0IGxhc3Q7XG5cbiAgICAgIGRvIHtcbiAgICAgICAgY29uc3QgYiA9IHRoaXMucmVhZEJ5dGUoKTtcblxuICAgICAgICBpZiAoYiA8IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJ1bmV4cGVjdGVkIEVPRiBpbiBiY21hcFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3QgPSAhKGIgJiAweDgwKTtcbiAgICAgICAgbiA9IG4gPDwgNyB8IGIgJiAweDdmO1xuICAgICAgfSB3aGlsZSAoIWxhc3QpO1xuXG4gICAgICByZXR1cm4gbjtcbiAgICB9XG5cbiAgICByZWFkU2lnbmVkKCkge1xuICAgICAgY29uc3QgbiA9IHRoaXMucmVhZE51bWJlcigpO1xuICAgICAgcmV0dXJuIG4gJiAxID8gfihuID4+PiAxKSA6IG4gPj4+IDE7XG4gICAgfVxuXG4gICAgcmVhZEhleChudW0sIHNpemUpIHtcbiAgICAgIG51bS5zZXQodGhpcy5idWZmZXIuc3ViYXJyYXkodGhpcy5wb3MsIHRoaXMucG9zICsgc2l6ZSArIDEpKTtcbiAgICAgIHRoaXMucG9zICs9IHNpemUgKyAxO1xuICAgIH1cblxuICAgIHJlYWRIZXhOdW1iZXIobnVtLCBzaXplKSB7XG4gICAgICBsZXQgbGFzdDtcbiAgICAgIGNvbnN0IHN0YWNrID0gdGhpcy50bXBCdWY7XG4gICAgICBsZXQgc3AgPSAwO1xuXG4gICAgICBkbyB7XG4gICAgICAgIGNvbnN0IGIgPSB0aGlzLnJlYWRCeXRlKCk7XG5cbiAgICAgICAgaWYgKGIgPCAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwidW5leHBlY3RlZCBFT0YgaW4gYmNtYXBcIik7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0ID0gIShiICYgMHg4MCk7XG4gICAgICAgIHN0YWNrW3NwKytdID0gYiAmIDB4N2Y7XG4gICAgICB9IHdoaWxlICghbGFzdCk7XG5cbiAgICAgIGxldCBpID0gc2l6ZSxcbiAgICAgICAgICBidWZmZXIgPSAwLFxuICAgICAgICAgIGJ1ZmZlclNpemUgPSAwO1xuXG4gICAgICB3aGlsZSAoaSA+PSAwKSB7XG4gICAgICAgIHdoaWxlIChidWZmZXJTaXplIDwgOCAmJiBzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgYnVmZmVyIHw9IHN0YWNrWy0tc3BdIDw8IGJ1ZmZlclNpemU7XG4gICAgICAgICAgYnVmZmVyU2l6ZSArPSA3O1xuICAgICAgICB9XG5cbiAgICAgICAgbnVtW2ldID0gYnVmZmVyICYgMjU1O1xuICAgICAgICBpLS07XG4gICAgICAgIGJ1ZmZlciA+Pj0gODtcbiAgICAgICAgYnVmZmVyU2l6ZSAtPSA4O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlYWRIZXhTaWduZWQobnVtLCBzaXplKSB7XG4gICAgICB0aGlzLnJlYWRIZXhOdW1iZXIobnVtLCBzaXplKTtcbiAgICAgIGNvbnN0IHNpZ24gPSBudW1bc2l6ZV0gJiAxID8gMjU1IDogMDtcbiAgICAgIGxldCBjID0gMDtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gc2l6ZTsgaSsrKSB7XG4gICAgICAgIGMgPSAoYyAmIDEpIDw8IDggfCBudW1baV07XG4gICAgICAgIG51bVtpXSA9IGMgPj4gMSBeIHNpZ247XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVhZFN0cmluZygpIHtcbiAgICAgIGNvbnN0IGxlbiA9IHRoaXMucmVhZE51bWJlcigpO1xuICAgICAgbGV0IHMgPSBcIlwiO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLnJlYWROdW1iZXIoKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzO1xuICAgIH1cblxuICB9XG5cbiAgY2xhc3MgQmluYXJ5Q01hcFJlYWRlciB7XG4gICAgYXN5bmMgcHJvY2VzcyhkYXRhLCBjTWFwLCBleHRlbmQpIHtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IG5ldyBCaW5hcnlDTWFwU3RyZWFtKGRhdGEpO1xuICAgICAgY29uc3QgaGVhZGVyID0gc3RyZWFtLnJlYWRCeXRlKCk7XG4gICAgICBjTWFwLnZlcnRpY2FsID0gISEoaGVhZGVyICYgMSk7XG4gICAgICBsZXQgdXNlQ01hcCA9IG51bGw7XG4gICAgICBjb25zdCBzdGFydCA9IG5ldyBVaW50OEFycmF5KE1BWF9OVU1fU0laRSk7XG4gICAgICBjb25zdCBlbmQgPSBuZXcgVWludDhBcnJheShNQVhfTlVNX1NJWkUpO1xuICAgICAgY29uc3QgY2hhciA9IG5ldyBVaW50OEFycmF5KE1BWF9OVU1fU0laRSk7XG4gICAgICBjb25zdCBjaGFyQ29kZSA9IG5ldyBVaW50OEFycmF5KE1BWF9OVU1fU0laRSk7XG4gICAgICBjb25zdCB0bXAgPSBuZXcgVWludDhBcnJheShNQVhfTlVNX1NJWkUpO1xuICAgICAgbGV0IGNvZGU7XG4gICAgICBsZXQgYjtcblxuICAgICAgd2hpbGUgKChiID0gc3RyZWFtLnJlYWRCeXRlKCkpID49IDApIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IGIgPj4gNTtcblxuICAgICAgICBpZiAodHlwZSA9PT0gNykge1xuICAgICAgICAgIHN3aXRjaCAoYiAmIDB4MWYpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgc3RyZWFtLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgdXNlQ01hcCA9IHN0cmVhbS5yZWFkU3RyaW5nKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2VxdWVuY2UgPSAhIShiICYgMHgxMCk7XG4gICAgICAgIGNvbnN0IGRhdGFTaXplID0gYiAmIDE1O1xuXG4gICAgICAgIGlmIChkYXRhU2l6ZSArIDEgPiBNQVhfTlVNX1NJWkUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJCaW5hcnlDTWFwUmVhZGVyLnByb2Nlc3M6IEludmFsaWQgZGF0YVNpemUuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdWNzMkRhdGFTaXplID0gMTtcbiAgICAgICAgY29uc3Qgc3ViaXRlbXNDb3VudCA9IHN0cmVhbS5yZWFkTnVtYmVyKCk7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXgoc3RhcnQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4TnVtYmVyKGVuZCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgYWRkSGV4KGVuZCwgc3RhcnQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgIGNNYXAuYWRkQ29kZXNwYWNlUmFuZ2UoZGF0YVNpemUgKyAxLCBoZXhUb0ludChzdGFydCwgZGF0YVNpemUpLCBoZXhUb0ludChlbmQsIGRhdGFTaXplKSk7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgc3ViaXRlbXNDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgIGluY0hleChlbmQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXhOdW1iZXIoc3RhcnQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgYWRkSGV4KHN0YXJ0LCBlbmQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXhOdW1iZXIoZW5kLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgIGFkZEhleChlbmQsIHN0YXJ0LCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgIGNNYXAuYWRkQ29kZXNwYWNlUmFuZ2UoZGF0YVNpemUgKyAxLCBoZXhUb0ludChzdGFydCwgZGF0YVNpemUpLCBoZXhUb0ludChlbmQsIGRhdGFTaXplKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXgoc3RhcnQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4TnVtYmVyKGVuZCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgYWRkSGV4KGVuZCwgc3RhcnQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgIHN0cmVhbS5yZWFkTnVtYmVyKCk7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgc3ViaXRlbXNDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgIGluY0hleChlbmQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXhOdW1iZXIoc3RhcnQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgYWRkSGV4KHN0YXJ0LCBlbmQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXhOdW1iZXIoZW5kLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgIGFkZEhleChlbmQsIHN0YXJ0LCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgIHN0cmVhbS5yZWFkTnVtYmVyKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXgoY2hhciwgZGF0YVNpemUpO1xuICAgICAgICAgICAgY29kZSA9IHN0cmVhbS5yZWFkTnVtYmVyKCk7XG4gICAgICAgICAgICBjTWFwLm1hcE9uZShoZXhUb0ludChjaGFyLCBkYXRhU2l6ZSksIGNvZGUpO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHN1Yml0ZW1zQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICBpbmNIZXgoY2hhciwgZGF0YVNpemUpO1xuXG4gICAgICAgICAgICAgIGlmICghc2VxdWVuY2UpIHtcbiAgICAgICAgICAgICAgICBzdHJlYW0ucmVhZEhleE51bWJlcih0bXAsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgICBhZGRIZXgoY2hhciwgdG1wLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb2RlID0gc3RyZWFtLnJlYWRTaWduZWQoKSArIChjb2RlICsgMSk7XG4gICAgICAgICAgICAgIGNNYXAubWFwT25lKGhleFRvSW50KGNoYXIsIGRhdGFTaXplKSwgY29kZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXgoc3RhcnQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4TnVtYmVyKGVuZCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgYWRkSGV4KGVuZCwgc3RhcnQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgIGNvZGUgPSBzdHJlYW0ucmVhZE51bWJlcigpO1xuICAgICAgICAgICAgY01hcC5tYXBDaWRSYW5nZShoZXhUb0ludChzdGFydCwgZGF0YVNpemUpLCBoZXhUb0ludChlbmQsIGRhdGFTaXplKSwgY29kZSk7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgc3ViaXRlbXNDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgIGluY0hleChlbmQsIGRhdGFTaXplKTtcblxuICAgICAgICAgICAgICBpZiAoIXNlcXVlbmNlKSB7XG4gICAgICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXhOdW1iZXIoc3RhcnQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgICBhZGRIZXgoc3RhcnQsIGVuZCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0YXJ0LnNldChlbmQpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXhOdW1iZXIoZW5kLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgIGFkZEhleChlbmQsIHN0YXJ0LCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgIGNvZGUgPSBzdHJlYW0ucmVhZE51bWJlcigpO1xuICAgICAgICAgICAgICBjTWFwLm1hcENpZFJhbmdlKGhleFRvSW50KHN0YXJ0LCBkYXRhU2l6ZSksIGhleFRvSW50KGVuZCwgZGF0YVNpemUpLCBjb2RlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICBzdHJlYW0ucmVhZEhleChjaGFyLCB1Y3MyRGF0YVNpemUpO1xuICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXgoY2hhckNvZGUsIGRhdGFTaXplKTtcbiAgICAgICAgICAgIGNNYXAubWFwT25lKGhleFRvSW50KGNoYXIsIHVjczJEYXRhU2l6ZSksIGhleFRvU3RyKGNoYXJDb2RlLCBkYXRhU2l6ZSkpO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHN1Yml0ZW1zQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICBpbmNIZXgoY2hhciwgdWNzMkRhdGFTaXplKTtcblxuICAgICAgICAgICAgICBpZiAoIXNlcXVlbmNlKSB7XG4gICAgICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXhOdW1iZXIodG1wLCB1Y3MyRGF0YVNpemUpO1xuICAgICAgICAgICAgICAgIGFkZEhleChjaGFyLCB0bXAsIHVjczJEYXRhU2l6ZSk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpbmNIZXgoY2hhckNvZGUsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXhTaWduZWQodG1wLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgIGFkZEhleChjaGFyQ29kZSwgdG1wLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgIGNNYXAubWFwT25lKGhleFRvSW50KGNoYXIsIHVjczJEYXRhU2l6ZSksIGhleFRvU3RyKGNoYXJDb2RlLCBkYXRhU2l6ZSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4KHN0YXJ0LCB1Y3MyRGF0YVNpemUpO1xuICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXhOdW1iZXIoZW5kLCB1Y3MyRGF0YVNpemUpO1xuICAgICAgICAgICAgYWRkSGV4KGVuZCwgc3RhcnQsIHVjczJEYXRhU2l6ZSk7XG4gICAgICAgICAgICBzdHJlYW0ucmVhZEhleChjaGFyQ29kZSwgZGF0YVNpemUpO1xuICAgICAgICAgICAgY01hcC5tYXBCZlJhbmdlKGhleFRvSW50KHN0YXJ0LCB1Y3MyRGF0YVNpemUpLCBoZXhUb0ludChlbmQsIHVjczJEYXRhU2l6ZSksIGhleFRvU3RyKGNoYXJDb2RlLCBkYXRhU2l6ZSkpO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHN1Yml0ZW1zQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICBpbmNIZXgoZW5kLCB1Y3MyRGF0YVNpemUpO1xuXG4gICAgICAgICAgICAgIGlmICghc2VxdWVuY2UpIHtcbiAgICAgICAgICAgICAgICBzdHJlYW0ucmVhZEhleE51bWJlcihzdGFydCwgdWNzMkRhdGFTaXplKTtcbiAgICAgICAgICAgICAgICBhZGRIZXgoc3RhcnQsIGVuZCwgdWNzMkRhdGFTaXplKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdGFydC5zZXQoZW5kKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4TnVtYmVyKGVuZCwgdWNzMkRhdGFTaXplKTtcbiAgICAgICAgICAgICAgYWRkSGV4KGVuZCwgc3RhcnQsIHVjczJEYXRhU2l6ZSk7XG4gICAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4KGNoYXJDb2RlLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgIGNNYXAubWFwQmZSYW5nZShoZXhUb0ludChzdGFydCwgdWNzMkRhdGFTaXplKSwgaGV4VG9JbnQoZW5kLCB1Y3MyRGF0YVNpemUpLCBoZXhUb1N0cihjaGFyQ29kZSwgZGF0YVNpemUpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCaW5hcnlDTWFwUmVhZGVyLnByb2Nlc3MgLSB1bmtub3duIHR5cGU6ICR7dHlwZX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodXNlQ01hcCkge1xuICAgICAgICByZXR1cm4gZXh0ZW5kKHVzZUNNYXApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY01hcDtcbiAgICB9XG5cbiAgfVxuXG4gIHJldHVybiBCaW5hcnlDTWFwUmVhZGVyO1xufSgpO1xuXG5jb25zdCBDTWFwRmFjdG9yeSA9IGZ1bmN0aW9uIENNYXBGYWN0b3J5Q2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gc3RyVG9JbnQoc3RyKSB7XG4gICAgbGV0IGEgPSAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGEgPSBhIDw8IDggfCBzdHIuY2hhckNvZGVBdChpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYSA+Pj4gMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGV4cGVjdFN0cmluZyhvYmopIHtcbiAgICBpZiAoISgwLCBfdXRpbC5pc1N0cmluZykob2JqKSkge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiTWFsZm9ybWVkIENNYXA6IGV4cGVjdGVkIHN0cmluZy5cIik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZXhwZWN0SW50KG9iaikge1xuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihvYmopKSB7XG4gICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJNYWxmb3JtZWQgQ01hcDogZXhwZWN0ZWQgaW50LlwiKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUJmQ2hhcihjTWFwLCBsZXhlcikge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBsZXQgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7XG5cbiAgICAgIGlmIChvYmogPT09IF9wcmltaXRpdmVzLkVPRikge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0NtZCkob2JqLCBcImVuZGJmY2hhclwiKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGV4cGVjdFN0cmluZyhvYmopO1xuICAgICAgY29uc3Qgc3JjID0gc3RyVG9JbnQob2JqKTtcbiAgICAgIG9iaiA9IGxleGVyLmdldE9iaigpO1xuICAgICAgZXhwZWN0U3RyaW5nKG9iaik7XG4gICAgICBjb25zdCBkc3QgPSBvYmo7XG4gICAgICBjTWFwLm1hcE9uZShzcmMsIGRzdCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VCZlJhbmdlKGNNYXAsIGxleGVyKSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGxldCBvYmogPSBsZXhlci5nZXRPYmooKTtcblxuICAgICAgaWYgKG9iaiA9PT0gX3ByaW1pdGl2ZXMuRU9GKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzQ21kKShvYmosIFwiZW5kYmZyYW5nZVwiKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGV4cGVjdFN0cmluZyhvYmopO1xuICAgICAgY29uc3QgbG93ID0gc3RyVG9JbnQob2JqKTtcbiAgICAgIG9iaiA9IGxleGVyLmdldE9iaigpO1xuICAgICAgZXhwZWN0U3RyaW5nKG9iaik7XG4gICAgICBjb25zdCBoaWdoID0gc3RyVG9JbnQob2JqKTtcbiAgICAgIG9iaiA9IGxleGVyLmdldE9iaigpO1xuXG4gICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihvYmopIHx8ICgwLCBfdXRpbC5pc1N0cmluZykob2JqKSkge1xuICAgICAgICBjb25zdCBkc3RMb3cgPSBOdW1iZXIuaXNJbnRlZ2VyKG9iaikgPyBTdHJpbmcuZnJvbUNoYXJDb2RlKG9iaikgOiBvYmo7XG4gICAgICAgIGNNYXAubWFwQmZSYW5nZShsb3csIGhpZ2gsIGRzdExvdyk7XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0NtZCkob2JqLCBcIltcIikpIHtcbiAgICAgICAgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7XG4gICAgICAgIGNvbnN0IGFycmF5ID0gW107XG5cbiAgICAgICAgd2hpbGUgKCEoMCwgX3ByaW1pdGl2ZXMuaXNDbWQpKG9iaiwgXCJdXCIpICYmIG9iaiAhPT0gX3ByaW1pdGl2ZXMuRU9GKSB7XG4gICAgICAgICAgYXJyYXkucHVzaChvYmopO1xuICAgICAgICAgIG9iaiA9IGxleGVyLmdldE9iaigpO1xuICAgICAgICB9XG5cbiAgICAgICAgY01hcC5tYXBCZlJhbmdlVG9BcnJheShsb3csIGhpZ2gsIGFycmF5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgYmYgcmFuZ2UuXCIpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VDaWRDaGFyKGNNYXAsIGxleGVyKSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGxldCBvYmogPSBsZXhlci5nZXRPYmooKTtcblxuICAgICAgaWYgKG9iaiA9PT0gX3ByaW1pdGl2ZXMuRU9GKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzQ21kKShvYmosIFwiZW5kY2lkY2hhclwiKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGV4cGVjdFN0cmluZyhvYmopO1xuICAgICAgY29uc3Qgc3JjID0gc3RyVG9JbnQob2JqKTtcbiAgICAgIG9iaiA9IGxleGVyLmdldE9iaigpO1xuICAgICAgZXhwZWN0SW50KG9iaik7XG4gICAgICBjb25zdCBkc3QgPSBvYmo7XG4gICAgICBjTWFwLm1hcE9uZShzcmMsIGRzdCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VDaWRSYW5nZShjTWFwLCBsZXhlcikge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBsZXQgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7XG5cbiAgICAgIGlmIChvYmogPT09IF9wcmltaXRpdmVzLkVPRikge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0NtZCkob2JqLCBcImVuZGNpZHJhbmdlXCIpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZXhwZWN0U3RyaW5nKG9iaik7XG4gICAgICBjb25zdCBsb3cgPSBzdHJUb0ludChvYmopO1xuICAgICAgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7XG4gICAgICBleHBlY3RTdHJpbmcob2JqKTtcbiAgICAgIGNvbnN0IGhpZ2ggPSBzdHJUb0ludChvYmopO1xuICAgICAgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7XG4gICAgICBleHBlY3RJbnQob2JqKTtcbiAgICAgIGNvbnN0IGRzdExvdyA9IG9iajtcbiAgICAgIGNNYXAubWFwQ2lkUmFuZ2UobG93LCBoaWdoLCBkc3RMb3cpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlQ29kZXNwYWNlUmFuZ2UoY01hcCwgbGV4ZXIpIHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgbGV0IG9iaiA9IGxleGVyLmdldE9iaigpO1xuXG4gICAgICBpZiAob2JqID09PSBfcHJpbWl0aXZlcy5FT0YpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNDbWQpKG9iaiwgXCJlbmRjb2Rlc3BhY2VyYW5nZVwiKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghKDAsIF91dGlsLmlzU3RyaW5nKShvYmopKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsb3cgPSBzdHJUb0ludChvYmopO1xuICAgICAgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7XG5cbiAgICAgIGlmICghKDAsIF91dGlsLmlzU3RyaW5nKShvYmopKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBoaWdoID0gc3RyVG9JbnQob2JqKTtcbiAgICAgIGNNYXAuYWRkQ29kZXNwYWNlUmFuZ2Uob2JqLmxlbmd0aCwgbG93LCBoaWdoKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJJbnZhbGlkIGNvZGVzcGFjZSByYW5nZS5cIik7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVdNb2RlKGNNYXAsIGxleGVyKSB7XG4gICAgY29uc3Qgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7XG5cbiAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihvYmopKSB7XG4gICAgICBjTWFwLnZlcnRpY2FsID0gISFvYmo7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VDTWFwTmFtZShjTWFwLCBsZXhlcikge1xuICAgIGNvbnN0IG9iaiA9IGxleGVyLmdldE9iaigpO1xuXG4gICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKG9iaikgJiYgKDAsIF91dGlsLmlzU3RyaW5nKShvYmoubmFtZSkpIHtcbiAgICAgIGNNYXAubmFtZSA9IG9iai5uYW1lO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHBhcnNlQ01hcChjTWFwLCBsZXhlciwgZmV0Y2hCdWlsdEluQ01hcCwgdXNlQ01hcCkge1xuICAgIGxldCBwcmV2aW91cywgZW1iZWRkZWRVc2VDTWFwO1xuXG4gICAgb2JqTG9vcDogd2hpbGUgKHRydWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG9iaiA9IGxleGVyLmdldE9iaigpO1xuXG4gICAgICAgIGlmIChvYmogPT09IF9wcmltaXRpdmVzLkVPRikge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKG9iaikpIHtcbiAgICAgICAgICBpZiAob2JqLm5hbWUgPT09IFwiV01vZGVcIikge1xuICAgICAgICAgICAgcGFyc2VXTW9kZShjTWFwLCBsZXhlcik7XG4gICAgICAgICAgfSBlbHNlIGlmIChvYmoubmFtZSA9PT0gXCJDTWFwTmFtZVwiKSB7XG4gICAgICAgICAgICBwYXJzZUNNYXBOYW1lKGNNYXAsIGxleGVyKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwcmV2aW91cyA9IG9iajtcbiAgICAgICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNDbWQpKG9iaikpIHtcbiAgICAgICAgICBzd2l0Y2ggKG9iai5jbWQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJlbmRjbWFwXCI6XG4gICAgICAgICAgICAgIGJyZWFrIG9iakxvb3A7XG5cbiAgICAgICAgICAgIGNhc2UgXCJ1c2VjbWFwXCI6XG4gICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShwcmV2aW91cykpIHtcbiAgICAgICAgICAgICAgICBlbWJlZGRlZFVzZUNNYXAgPSBwcmV2aW91cy5uYW1lO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJiZWdpbmNvZGVzcGFjZXJhbmdlXCI6XG4gICAgICAgICAgICAgIHBhcnNlQ29kZXNwYWNlUmFuZ2UoY01hcCwgbGV4ZXIpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBcImJlZ2luYmZjaGFyXCI6XG4gICAgICAgICAgICAgIHBhcnNlQmZDaGFyKGNNYXAsIGxleGVyKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJiZWdpbmNpZGNoYXJcIjpcbiAgICAgICAgICAgICAgcGFyc2VDaWRDaGFyKGNNYXAsIGxleGVyKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJiZWdpbmJmcmFuZ2VcIjpcbiAgICAgICAgICAgICAgcGFyc2VCZlJhbmdlKGNNYXAsIGxleGVyKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJiZWdpbmNpZHJhbmdlXCI6XG4gICAgICAgICAgICAgIHBhcnNlQ2lkUmFuZ2UoY01hcCwgbGV4ZXIpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgIGlmIChleCBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgICAgdGhyb3cgZXg7XG4gICAgICAgIH1cblxuICAgICAgICAoMCwgX3V0aWwud2FybikoXCJJbnZhbGlkIGNNYXAgZGF0YTogXCIgKyBleCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdXNlQ01hcCAmJiBlbWJlZGRlZFVzZUNNYXApIHtcbiAgICAgIHVzZUNNYXAgPSBlbWJlZGRlZFVzZUNNYXA7XG4gICAgfVxuXG4gICAgaWYgKHVzZUNNYXApIHtcbiAgICAgIHJldHVybiBleHRlbmRDTWFwKGNNYXAsIGZldGNoQnVpbHRJbkNNYXAsIHVzZUNNYXApO1xuICAgIH1cblxuICAgIHJldHVybiBjTWFwO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gZXh0ZW5kQ01hcChjTWFwLCBmZXRjaEJ1aWx0SW5DTWFwLCB1c2VDTWFwKSB7XG4gICAgY01hcC51c2VDTWFwID0gYXdhaXQgY3JlYXRlQnVpbHRJbkNNYXAodXNlQ01hcCwgZmV0Y2hCdWlsdEluQ01hcCk7XG5cbiAgICBpZiAoY01hcC5udW1Db2Rlc3BhY2VSYW5nZXMgPT09IDApIHtcbiAgICAgIGNvbnN0IHVzZUNvZGVzcGFjZVJhbmdlcyA9IGNNYXAudXNlQ01hcC5jb2Rlc3BhY2VSYW5nZXM7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdXNlQ29kZXNwYWNlUmFuZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNNYXAuY29kZXNwYWNlUmFuZ2VzW2ldID0gdXNlQ29kZXNwYWNlUmFuZ2VzW2ldLnNsaWNlKCk7XG4gICAgICB9XG5cbiAgICAgIGNNYXAubnVtQ29kZXNwYWNlUmFuZ2VzID0gY01hcC51c2VDTWFwLm51bUNvZGVzcGFjZVJhbmdlcztcbiAgICB9XG5cbiAgICBjTWFwLnVzZUNNYXAuZm9yRWFjaChmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKCFjTWFwLmNvbnRhaW5zKGtleSkpIHtcbiAgICAgICAgY01hcC5tYXBPbmUoa2V5LCBjTWFwLnVzZUNNYXAubG9va3VwKGtleSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjTWFwO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gY3JlYXRlQnVpbHRJbkNNYXAobmFtZSwgZmV0Y2hCdWlsdEluQ01hcCkge1xuICAgIGlmIChuYW1lID09PSBcIklkZW50aXR5LUhcIikge1xuICAgICAgcmV0dXJuIG5ldyBJZGVudGl0eUNNYXAoZmFsc2UsIDIpO1xuICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gXCJJZGVudGl0eS1WXCIpIHtcbiAgICAgIHJldHVybiBuZXcgSWRlbnRpdHlDTWFwKHRydWUsIDIpO1xuICAgIH1cblxuICAgIGlmICghQlVJTFRfSU5fQ01BUFMuaW5jbHVkZXMobmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gQ01hcCBuYW1lOiBcIiArIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICghZmV0Y2hCdWlsdEluQ01hcCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQnVpbHQtaW4gQ01hcCBwYXJhbWV0ZXJzIGFyZSBub3QgcHJvdmlkZWQuXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHtcbiAgICAgIGNNYXBEYXRhLFxuICAgICAgY29tcHJlc3Npb25UeXBlXG4gICAgfSA9IGF3YWl0IGZldGNoQnVpbHRJbkNNYXAobmFtZSk7XG4gICAgY29uc3QgY01hcCA9IG5ldyBDTWFwKHRydWUpO1xuXG4gICAgaWYgKGNvbXByZXNzaW9uVHlwZSA9PT0gX3V0aWwuQ01hcENvbXByZXNzaW9uVHlwZS5CSU5BUlkpIHtcbiAgICAgIHJldHVybiBuZXcgQmluYXJ5Q01hcFJlYWRlcigpLnByb2Nlc3MoY01hcERhdGEsIGNNYXAsIHVzZUNNYXAgPT4ge1xuICAgICAgICByZXR1cm4gZXh0ZW5kQ01hcChjTWFwLCBmZXRjaEJ1aWx0SW5DTWFwLCB1c2VDTWFwKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChjb21wcmVzc2lvblR5cGUgPT09IF91dGlsLkNNYXBDb21wcmVzc2lvblR5cGUuTk9ORSkge1xuICAgICAgY29uc3QgbGV4ZXIgPSBuZXcgX3BhcnNlci5MZXhlcihuZXcgX3N0cmVhbS5TdHJlYW0oY01hcERhdGEpKTtcbiAgICAgIHJldHVybiBwYXJzZUNNYXAoY01hcCwgbGV4ZXIsIGZldGNoQnVpbHRJbkNNYXAsIG51bGwpO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihcIlRPRE86IE9ubHkgQklOQVJZL05PTkUgQ01hcCBjb21wcmVzc2lvbiBpcyBjdXJyZW50bHkgc3VwcG9ydGVkLlwiKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYXN5bmMgY3JlYXRlKHBhcmFtcykge1xuICAgICAgY29uc3QgZW5jb2RpbmcgPSBwYXJhbXMuZW5jb2Rpbmc7XG4gICAgICBjb25zdCBmZXRjaEJ1aWx0SW5DTWFwID0gcGFyYW1zLmZldGNoQnVpbHRJbkNNYXA7XG4gICAgICBjb25zdCB1c2VDTWFwID0gcGFyYW1zLnVzZUNNYXA7XG5cbiAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShlbmNvZGluZykpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUJ1aWx0SW5DTWFwKGVuY29kaW5nLm5hbWUsIGZldGNoQnVpbHRJbkNNYXApO1xuICAgICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKGVuY29kaW5nKSkge1xuICAgICAgICBjb25zdCBwYXJzZWRDTWFwID0gYXdhaXQgcGFyc2VDTWFwKG5ldyBDTWFwKCksIG5ldyBfcGFyc2VyLkxleGVyKGVuY29kaW5nKSwgZmV0Y2hCdWlsdEluQ01hcCwgdXNlQ01hcCk7XG5cbiAgICAgICAgaWYgKHBhcnNlZENNYXAuaXNJZGVudGl0eUNNYXApIHtcbiAgICAgICAgICByZXR1cm4gY3JlYXRlQnVpbHRJbkNNYXAocGFyc2VkQ01hcC5uYW1lLCBmZXRjaEJ1aWx0SW5DTWFwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXJzZWRDTWFwO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFbmNvZGluZyByZXF1aXJlZC5cIik7XG4gICAgfVxuXG4gIH07XG59KCk7XG5cbmV4cG9ydHMuQ01hcEZhY3RvcnkgPSBDTWFwRmFjdG9yeTtcblxuLyoqKi8gfSksXG4vKiAyNyAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5QYXJzZXIgPSBleHBvcnRzLkxpbmVhcml6YXRpb24gPSBleHBvcnRzLkxleGVyID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX3ByaW1pdGl2ZXMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDUpO1xuXG52YXIgX2NvcmVfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDkpO1xuXG52YXIgX2FzY2lpXzg1X3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oMjgpO1xuXG52YXIgX2FzY2lpX2hleF9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDMwKTtcblxudmFyIF9jY2l0dF9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDMxKTtcblxudmFyIF9mbGF0ZV9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDMzKTtcblxudmFyIF9qYmlnMl9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDM0KTtcblxudmFyIF9qcGVnX3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oMzcpO1xuXG52YXIgX2pweF9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDM5KTtcblxudmFyIF9sendfc3RyZWFtID0gX193X3BkZmpzX3JlcXVpcmVfXyg0MSk7XG5cbnZhciBfc3RyZWFtID0gX193X3BkZmpzX3JlcXVpcmVfXygxMCk7XG5cbnZhciBfcHJlZGljdG9yX3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oNDIpO1xuXG52YXIgX3J1bl9sZW5ndGhfc3RyZWFtID0gX193X3BkZmpzX3JlcXVpcmVfXyg0Myk7XG5cbmNvbnN0IE1BWF9MRU5HVEhfVE9fQ0FDSEUgPSAxMDAwO1xuY29uc3QgTUFYX0FETEVSMzJfTEVOR1RIID0gNTU1MjtcblxuZnVuY3Rpb24gY29tcHV0ZUFkbGVyMzIoYnl0ZXMpIHtcbiAgY29uc3QgYnl0ZXNMZW5ndGggPSBieXRlcy5sZW5ndGg7XG4gIGxldCBhID0gMSxcbiAgICAgIGIgPSAwO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXNMZW5ndGg7ICsraSkge1xuICAgIGEgKz0gYnl0ZXNbaV0gJiAweGZmO1xuICAgIGIgKz0gYTtcbiAgfVxuXG4gIHJldHVybiBiICUgNjU1MjEgPDwgMTYgfCBhICUgNjU1MjE7XG59XG5cbmNsYXNzIFBhcnNlciB7XG4gIGNvbnN0cnVjdG9yKHtcbiAgICBsZXhlcixcbiAgICB4cmVmLFxuICAgIGFsbG93U3RyZWFtcyA9IGZhbHNlLFxuICAgIHJlY292ZXJ5TW9kZSA9IGZhbHNlXG4gIH0pIHtcbiAgICB0aGlzLmxleGVyID0gbGV4ZXI7XG4gICAgdGhpcy54cmVmID0geHJlZjtcbiAgICB0aGlzLmFsbG93U3RyZWFtcyA9IGFsbG93U3RyZWFtcztcbiAgICB0aGlzLnJlY292ZXJ5TW9kZSA9IHJlY292ZXJ5TW9kZTtcbiAgICB0aGlzLmltYWdlQ2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMucmVmaWxsKCk7XG4gIH1cblxuICByZWZpbGwoKSB7XG4gICAgdGhpcy5idWYxID0gdGhpcy5sZXhlci5nZXRPYmooKTtcbiAgICB0aGlzLmJ1ZjIgPSB0aGlzLmxleGVyLmdldE9iaigpO1xuICB9XG5cbiAgc2hpZnQoKSB7XG4gICAgaWYgKHRoaXMuYnVmMiBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkNtZCAmJiB0aGlzLmJ1ZjIuY21kID09PSBcIklEXCIpIHtcbiAgICAgIHRoaXMuYnVmMSA9IHRoaXMuYnVmMjtcbiAgICAgIHRoaXMuYnVmMiA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYnVmMSA9IHRoaXMuYnVmMjtcbiAgICAgIHRoaXMuYnVmMiA9IHRoaXMubGV4ZXIuZ2V0T2JqKCk7XG4gICAgfVxuICB9XG5cbiAgdHJ5U2hpZnQoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuc2hpZnQoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgX2NvcmVfdXRpbHMuTWlzc2luZ0RhdGFFeGNlcHRpb24pIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGdldE9iaihjaXBoZXJUcmFuc2Zvcm0gPSBudWxsKSB7XG4gICAgY29uc3QgYnVmMSA9IHRoaXMuYnVmMTtcbiAgICB0aGlzLnNoaWZ0KCk7XG5cbiAgICBpZiAoYnVmMSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkNtZCkge1xuICAgICAgc3dpdGNoIChidWYxLmNtZCkge1xuICAgICAgICBjYXNlIFwiQklcIjpcbiAgICAgICAgICByZXR1cm4gdGhpcy5tYWtlSW5saW5lSW1hZ2UoY2lwaGVyVHJhbnNmb3JtKTtcblxuICAgICAgICBjYXNlIFwiW1wiOlxuICAgICAgICAgIGNvbnN0IGFycmF5ID0gW107XG5cbiAgICAgICAgICB3aGlsZSAoISgwLCBfcHJpbWl0aXZlcy5pc0NtZCkodGhpcy5idWYxLCBcIl1cIikgJiYgdGhpcy5idWYxICE9PSBfcHJpbWl0aXZlcy5FT0YpIHtcbiAgICAgICAgICAgIGFycmF5LnB1c2godGhpcy5nZXRPYmooY2lwaGVyVHJhbnNmb3JtKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMuYnVmMSA9PT0gX3ByaW1pdGl2ZXMuRU9GKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yZWNvdmVyeU1vZGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aHJvdyBuZXcgX2NvcmVfdXRpbHMuUGFyc2VyRU9GRXhjZXB0aW9uKFwiRW5kIG9mIGZpbGUgaW5zaWRlIGFycmF5LlwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnNoaWZ0KCk7XG4gICAgICAgICAgcmV0dXJuIGFycmF5O1xuXG4gICAgICAgIGNhc2UgXCI8PFwiOlxuICAgICAgICAgIGNvbnN0IGRpY3QgPSBuZXcgX3ByaW1pdGl2ZXMuRGljdCh0aGlzLnhyZWYpO1xuXG4gICAgICAgICAgd2hpbGUgKCEoMCwgX3ByaW1pdGl2ZXMuaXNDbWQpKHRoaXMuYnVmMSwgXCI+PlwiKSAmJiB0aGlzLmJ1ZjEgIT09IF9wcmltaXRpdmVzLkVPRikge1xuICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKSh0aGlzLmJ1ZjEpKSB7XG4gICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShcIk1hbGZvcm1lZCBkaWN0aW9uYXJ5OiBrZXkgbXVzdCBiZSBhIG5hbWUgb2JqZWN0XCIpO1xuICAgICAgICAgICAgICB0aGlzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmJ1ZjEubmFtZTtcbiAgICAgICAgICAgIHRoaXMuc2hpZnQoKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuYnVmMSA9PT0gX3ByaW1pdGl2ZXMuRU9GKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkaWN0LnNldChrZXksIHRoaXMuZ2V0T2JqKGNpcGhlclRyYW5zZm9ybSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLmJ1ZjEgPT09IF9wcmltaXRpdmVzLkVPRikge1xuICAgICAgICAgICAgaWYgKHRoaXMucmVjb3ZlcnlNb2RlKSB7XG4gICAgICAgICAgICAgIHJldHVybiBkaWN0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aHJvdyBuZXcgX2NvcmVfdXRpbHMuUGFyc2VyRU9GRXhjZXB0aW9uKFwiRW5kIG9mIGZpbGUgaW5zaWRlIGRpY3Rpb25hcnkuXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNDbWQpKHRoaXMuYnVmMiwgXCJzdHJlYW1cIikpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFsbG93U3RyZWFtcyA/IHRoaXMubWFrZVN0cmVhbShkaWN0LCBjaXBoZXJUcmFuc2Zvcm0pIDogZGljdDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnNoaWZ0KCk7XG4gICAgICAgICAgcmV0dXJuIGRpY3Q7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gYnVmMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihidWYxKSkge1xuICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIodGhpcy5idWYxKSAmJiAoMCwgX3ByaW1pdGl2ZXMuaXNDbWQpKHRoaXMuYnVmMiwgXCJSXCIpKSB7XG4gICAgICAgIGNvbnN0IHJlZiA9IF9wcmltaXRpdmVzLlJlZi5nZXQoYnVmMSwgdGhpcy5idWYxKTtcblxuICAgICAgICB0aGlzLnNoaWZ0KCk7XG4gICAgICAgIHRoaXMuc2hpZnQoKTtcbiAgICAgICAgcmV0dXJuIHJlZjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGJ1ZjE7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBidWYxID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBpZiAoY2lwaGVyVHJhbnNmb3JtKSB7XG4gICAgICAgIHJldHVybiBjaXBoZXJUcmFuc2Zvcm0uZGVjcnlwdFN0cmluZyhidWYxKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGJ1ZjE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZjE7XG4gIH1cblxuICBmaW5kRGVmYXVsdElubGluZVN0cmVhbUVuZChzdHJlYW0pIHtcbiAgICBjb25zdCBFID0gMHg0NSxcbiAgICAgICAgICBJID0gMHg0OSxcbiAgICAgICAgICBTUEFDRSA9IDB4MjAsXG4gICAgICAgICAgTEYgPSAweGEsXG4gICAgICAgICAgQ1IgPSAweGQsXG4gICAgICAgICAgTlVMID0gMHgwO1xuICAgIGNvbnN0IGxleGVyID0gdGhpcy5sZXhlcixcbiAgICAgICAgICBzdGFydFBvcyA9IHN0cmVhbS5wb3MsXG4gICAgICAgICAgbiA9IDEwO1xuICAgIGxldCBzdGF0ZSA9IDAsXG4gICAgICAgIGNoLFxuICAgICAgICBtYXliZUVJUG9zO1xuXG4gICAgd2hpbGUgKChjaCA9IHN0cmVhbS5nZXRCeXRlKCkpICE9PSAtMSkge1xuICAgICAgaWYgKHN0YXRlID09PSAwKSB7XG4gICAgICAgIHN0YXRlID0gY2ggPT09IEUgPyAxIDogMDtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09IDEpIHtcbiAgICAgICAgc3RhdGUgPSBjaCA9PT0gSSA/IDIgOiAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKDAsIF91dGlsLmFzc2VydCkoc3RhdGUgPT09IDIsIFwiZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQgLSBpbnZhbGlkIHN0YXRlLlwiKTtcblxuICAgICAgICBpZiAoY2ggPT09IFNQQUNFIHx8IGNoID09PSBMRiB8fCBjaCA9PT0gQ1IpIHtcbiAgICAgICAgICBtYXliZUVJUG9zID0gc3RyZWFtLnBvcztcbiAgICAgICAgICBjb25zdCBmb2xsb3dpbmdCeXRlcyA9IHN0cmVhbS5wZWVrQnl0ZXMobik7XG5cbiAgICAgICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBmb2xsb3dpbmdCeXRlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICBjaCA9IGZvbGxvd2luZ0J5dGVzW2ldO1xuXG4gICAgICAgICAgICBpZiAoY2ggPT09IE5VTCAmJiBmb2xsb3dpbmdCeXRlc1tpICsgMV0gIT09IE5VTCkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNoICE9PSBMRiAmJiBjaCAhPT0gQ1IgJiYgKGNoIDwgU1BBQ0UgfHwgY2ggPiAweDdmKSkge1xuICAgICAgICAgICAgICBzdGF0ZSA9IDA7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzdGF0ZSAhPT0gMikge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGxleGVyLmtub3duQ29tbWFuZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRPYmogPSBsZXhlci5wZWVrT2JqKCk7XG5cbiAgICAgICAgICAgIGlmIChuZXh0T2JqIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuQ21kICYmICFsZXhlci5rbm93bkNvbW1hbmRzW25leHRPYmouY21kXSkge1xuICAgICAgICAgICAgICBzdGF0ZSA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcImZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kIC0gYGxleGVyLmtub3duQ29tbWFuZHNgIGlzIHVuZGVmaW5lZC5cIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN0YXRlID09PSAyKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhdGUgPSAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNoID09PSAtMSkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKFwiZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQ6IFwiICsgXCJSZWFjaGVkIHRoZSBlbmQgb2YgdGhlIHN0cmVhbSB3aXRob3V0IGZpbmRpbmcgYSB2YWxpZCBFSSBtYXJrZXJcIik7XG5cbiAgICAgIGlmIChtYXliZUVJUG9zKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKSgnLi4uIHRyeWluZyB0byByZWNvdmVyIGJ5IHVzaW5nIHRoZSBsYXN0IFwiRUlcIiBvY2N1cnJlbmNlLicpO1xuICAgICAgICBzdHJlYW0uc2tpcCgtKHN0cmVhbS5wb3MgLSBtYXliZUVJUG9zKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGVuZE9mZnNldCA9IDQ7XG4gICAgc3RyZWFtLnNraXAoLWVuZE9mZnNldCk7XG4gICAgY2ggPSBzdHJlYW0ucGVla0J5dGUoKTtcbiAgICBzdHJlYW0uc2tpcChlbmRPZmZzZXQpO1xuXG4gICAgaWYgKCEoMCwgX2NvcmVfdXRpbHMuaXNXaGl0ZVNwYWNlKShjaCkpIHtcbiAgICAgIGVuZE9mZnNldC0tO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJlYW0ucG9zIC0gZW5kT2Zmc2V0IC0gc3RhcnRQb3M7XG4gIH1cblxuICBmaW5kRENURGVjb2RlSW5saW5lU3RyZWFtRW5kKHN0cmVhbSkge1xuICAgIGNvbnN0IHN0YXJ0UG9zID0gc3RyZWFtLnBvcztcbiAgICBsZXQgZm91bmRFT0kgPSBmYWxzZSxcbiAgICAgICAgYixcbiAgICAgICAgbWFya2VyTGVuZ3RoO1xuXG4gICAgd2hpbGUgKChiID0gc3RyZWFtLmdldEJ5dGUoKSkgIT09IC0xKSB7XG4gICAgICBpZiAoYiAhPT0gMHhmZikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChzdHJlYW0uZ2V0Qnl0ZSgpKSB7XG4gICAgICAgIGNhc2UgMHgwMDpcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDB4ZmY6XG4gICAgICAgICAgc3RyZWFtLnNraXAoLTEpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMHhkOTpcbiAgICAgICAgICBmb3VuZEVPSSA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAweGMwOlxuICAgICAgICBjYXNlIDB4YzE6XG4gICAgICAgIGNhc2UgMHhjMjpcbiAgICAgICAgY2FzZSAweGMzOlxuICAgICAgICBjYXNlIDB4YzU6XG4gICAgICAgIGNhc2UgMHhjNjpcbiAgICAgICAgY2FzZSAweGM3OlxuICAgICAgICBjYXNlIDB4Yzk6XG4gICAgICAgIGNhc2UgMHhjYTpcbiAgICAgICAgY2FzZSAweGNiOlxuICAgICAgICBjYXNlIDB4Y2Q6XG4gICAgICAgIGNhc2UgMHhjZTpcbiAgICAgICAgY2FzZSAweGNmOlxuICAgICAgICBjYXNlIDB4YzQ6XG4gICAgICAgIGNhc2UgMHhjYzpcbiAgICAgICAgY2FzZSAweGRhOlxuICAgICAgICBjYXNlIDB4ZGI6XG4gICAgICAgIGNhc2UgMHhkYzpcbiAgICAgICAgY2FzZSAweGRkOlxuICAgICAgICBjYXNlIDB4ZGU6XG4gICAgICAgIGNhc2UgMHhkZjpcbiAgICAgICAgY2FzZSAweGUwOlxuICAgICAgICBjYXNlIDB4ZTE6XG4gICAgICAgIGNhc2UgMHhlMjpcbiAgICAgICAgY2FzZSAweGUzOlxuICAgICAgICBjYXNlIDB4ZTQ6XG4gICAgICAgIGNhc2UgMHhlNTpcbiAgICAgICAgY2FzZSAweGU2OlxuICAgICAgICBjYXNlIDB4ZTc6XG4gICAgICAgIGNhc2UgMHhlODpcbiAgICAgICAgY2FzZSAweGU5OlxuICAgICAgICBjYXNlIDB4ZWE6XG4gICAgICAgIGNhc2UgMHhlYjpcbiAgICAgICAgY2FzZSAweGVjOlxuICAgICAgICBjYXNlIDB4ZWQ6XG4gICAgICAgIGNhc2UgMHhlZTpcbiAgICAgICAgY2FzZSAweGVmOlxuICAgICAgICBjYXNlIDB4ZmU6XG4gICAgICAgICAgbWFya2VyTGVuZ3RoID0gc3RyZWFtLmdldFVpbnQxNigpO1xuXG4gICAgICAgICAgaWYgKG1hcmtlckxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgIHN0cmVhbS5za2lwKG1hcmtlckxlbmd0aCAtIDIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdHJlYW0uc2tpcCgtMik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3VuZEVPSSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBsZW5ndGggPSBzdHJlYW0ucG9zIC0gc3RhcnRQb3M7XG5cbiAgICBpZiAoYiA9PT0gLTEpIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShcIklubGluZSBEQ1REZWNvZGUgaW1hZ2Ugc3RyZWFtOiBcIiArIFwiRU9JIG1hcmtlciBub3QgZm91bmQsIHNlYXJjaGluZyBmb3IgL0VJLyBpbnN0ZWFkLlwiKTtcbiAgICAgIHN0cmVhbS5za2lwKC1sZW5ndGgpO1xuICAgICAgcmV0dXJuIHRoaXMuZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQoc3RyZWFtKTtcbiAgICB9XG5cbiAgICB0aGlzLmlubGluZVN0cmVhbVNraXBFSShzdHJlYW0pO1xuICAgIHJldHVybiBsZW5ndGg7XG4gIH1cblxuICBmaW5kQVNDSUk4NURlY29kZUlubGluZVN0cmVhbUVuZChzdHJlYW0pIHtcbiAgICBjb25zdCBUSUxERSA9IDB4N2UsXG4gICAgICAgICAgR1QgPSAweDNlO1xuICAgIGNvbnN0IHN0YXJ0UG9zID0gc3RyZWFtLnBvcztcbiAgICBsZXQgY2g7XG5cbiAgICB3aGlsZSAoKGNoID0gc3RyZWFtLmdldEJ5dGUoKSkgIT09IC0xKSB7XG4gICAgICBpZiAoY2ggPT09IFRJTERFKSB7XG4gICAgICAgIGNvbnN0IHRpbGRlUG9zID0gc3RyZWFtLnBvcztcbiAgICAgICAgY2ggPSBzdHJlYW0ucGVla0J5dGUoKTtcblxuICAgICAgICB3aGlsZSAoKDAsIF9jb3JlX3V0aWxzLmlzV2hpdGVTcGFjZSkoY2gpKSB7XG4gICAgICAgICAgc3RyZWFtLnNraXAoKTtcbiAgICAgICAgICBjaCA9IHN0cmVhbS5wZWVrQnl0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoID09PSBHVCkge1xuICAgICAgICAgIHN0cmVhbS5za2lwKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RyZWFtLnBvcyA+IHRpbGRlUG9zKSB7XG4gICAgICAgICAgY29uc3QgbWF5YmVFSSA9IHN0cmVhbS5wZWVrQnl0ZXMoMik7XG5cbiAgICAgICAgICBpZiAobWF5YmVFSVswXSA9PT0gMHg0NSAmJiBtYXliZUVJWzFdID09PSAweDQ5KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBsZW5ndGggPSBzdHJlYW0ucG9zIC0gc3RhcnRQb3M7XG5cbiAgICBpZiAoY2ggPT09IC0xKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJJbmxpbmUgQVNDSUk4NURlY29kZSBpbWFnZSBzdHJlYW06IFwiICsgXCJFT0QgbWFya2VyIG5vdCBmb3VuZCwgc2VhcmNoaW5nIGZvciAvRUkvIGluc3RlYWQuXCIpO1xuICAgICAgc3RyZWFtLnNraXAoLWxlbmd0aCk7XG4gICAgICByZXR1cm4gdGhpcy5maW5kRGVmYXVsdElubGluZVN0cmVhbUVuZChzdHJlYW0pO1xuICAgIH1cblxuICAgIHRoaXMuaW5saW5lU3RyZWFtU2tpcEVJKHN0cmVhbSk7XG4gICAgcmV0dXJuIGxlbmd0aDtcbiAgfVxuXG4gIGZpbmRBU0NJSUhleERlY29kZUlubGluZVN0cmVhbUVuZChzdHJlYW0pIHtcbiAgICBjb25zdCBHVCA9IDB4M2U7XG4gICAgY29uc3Qgc3RhcnRQb3MgPSBzdHJlYW0ucG9zO1xuICAgIGxldCBjaDtcblxuICAgIHdoaWxlICgoY2ggPSBzdHJlYW0uZ2V0Qnl0ZSgpKSAhPT0gLTEpIHtcbiAgICAgIGlmIChjaCA9PT0gR1QpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbGVuZ3RoID0gc3RyZWFtLnBvcyAtIHN0YXJ0UG9zO1xuXG4gICAgaWYgKGNoID09PSAtMSkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKFwiSW5saW5lIEFTQ0lJSGV4RGVjb2RlIGltYWdlIHN0cmVhbTogXCIgKyBcIkVPRCBtYXJrZXIgbm90IGZvdW5kLCBzZWFyY2hpbmcgZm9yIC9FSS8gaW5zdGVhZC5cIik7XG4gICAgICBzdHJlYW0uc2tpcCgtbGVuZ3RoKTtcbiAgICAgIHJldHVybiB0aGlzLmZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kKHN0cmVhbSk7XG4gICAgfVxuXG4gICAgdGhpcy5pbmxpbmVTdHJlYW1Ta2lwRUkoc3RyZWFtKTtcbiAgICByZXR1cm4gbGVuZ3RoO1xuICB9XG5cbiAgaW5saW5lU3RyZWFtU2tpcEVJKHN0cmVhbSkge1xuICAgIGNvbnN0IEUgPSAweDQ1LFxuICAgICAgICAgIEkgPSAweDQ5O1xuICAgIGxldCBzdGF0ZSA9IDAsXG4gICAgICAgIGNoO1xuXG4gICAgd2hpbGUgKChjaCA9IHN0cmVhbS5nZXRCeXRlKCkpICE9PSAtMSkge1xuICAgICAgaWYgKHN0YXRlID09PSAwKSB7XG4gICAgICAgIHN0YXRlID0gY2ggPT09IEUgPyAxIDogMDtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09IDEpIHtcbiAgICAgICAgc3RhdGUgPSBjaCA9PT0gSSA/IDIgOiAwO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gMikge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBtYWtlSW5saW5lSW1hZ2UoY2lwaGVyVHJhbnNmb3JtKSB7XG4gICAgY29uc3QgbGV4ZXIgPSB0aGlzLmxleGVyO1xuICAgIGNvbnN0IHN0cmVhbSA9IGxleGVyLnN0cmVhbTtcbiAgICBjb25zdCBkaWN0ID0gbmV3IF9wcmltaXRpdmVzLkRpY3QodGhpcy54cmVmKTtcbiAgICBsZXQgZGljdExlbmd0aDtcblxuICAgIHdoaWxlICghKDAsIF9wcmltaXRpdmVzLmlzQ21kKSh0aGlzLmJ1ZjEsIFwiSURcIikgJiYgdGhpcy5idWYxICE9PSBfcHJpbWl0aXZlcy5FT0YpIHtcbiAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkodGhpcy5idWYxKSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJEaWN0aW9uYXJ5IGtleSBtdXN0IGJlIGEgbmFtZSBvYmplY3RcIik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuYnVmMS5uYW1lO1xuICAgICAgdGhpcy5zaGlmdCgpO1xuXG4gICAgICBpZiAodGhpcy5idWYxID09PSBfcHJpbWl0aXZlcy5FT0YpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGRpY3Quc2V0KGtleSwgdGhpcy5nZXRPYmooY2lwaGVyVHJhbnNmb3JtKSk7XG4gICAgfVxuXG4gICAgaWYgKGxleGVyLmJlZ2luSW5saW5lSW1hZ2VQb3MgIT09IC0xKSB7XG4gICAgICBkaWN0TGVuZ3RoID0gc3RyZWFtLnBvcyAtIGxleGVyLmJlZ2luSW5saW5lSW1hZ2VQb3M7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyID0gZGljdC5nZXQoXCJGXCIsIFwiRmlsdGVyXCIpO1xuICAgIGxldCBmaWx0ZXJOYW1lO1xuXG4gICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGZpbHRlcikpIHtcbiAgICAgIGZpbHRlck5hbWUgPSBmaWx0ZXIubmFtZTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyKSkge1xuICAgICAgY29uc3QgZmlsdGVyWmVybyA9IHRoaXMueHJlZi5mZXRjaElmUmVmKGZpbHRlclswXSk7XG5cbiAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShmaWx0ZXJaZXJvKSkge1xuICAgICAgICBmaWx0ZXJOYW1lID0gZmlsdGVyWmVyby5uYW1lO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0UG9zID0gc3RyZWFtLnBvcztcbiAgICBsZXQgbGVuZ3RoO1xuXG4gICAgc3dpdGNoIChmaWx0ZXJOYW1lKSB7XG4gICAgICBjYXNlIFwiRENUXCI6XG4gICAgICBjYXNlIFwiRENURGVjb2RlXCI6XG4gICAgICAgIGxlbmd0aCA9IHRoaXMuZmluZERDVERlY29kZUlubGluZVN0cmVhbUVuZChzdHJlYW0pO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIkE4NVwiOlxuICAgICAgY2FzZSBcIkFTQ0lJODVEZWNvZGVcIjpcbiAgICAgICAgbGVuZ3RoID0gdGhpcy5maW5kQVNDSUk4NURlY29kZUlubGluZVN0cmVhbUVuZChzdHJlYW0pO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIkFIeFwiOlxuICAgICAgY2FzZSBcIkFTQ0lJSGV4RGVjb2RlXCI6XG4gICAgICAgIGxlbmd0aCA9IHRoaXMuZmluZEFTQ0lJSGV4RGVjb2RlSW5saW5lU3RyZWFtRW5kKHN0cmVhbSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBsZW5ndGggPSB0aGlzLmZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kKHN0cmVhbSk7XG4gICAgfVxuXG4gICAgbGV0IGltYWdlU3RyZWFtID0gc3RyZWFtLm1ha2VTdWJTdHJlYW0oc3RhcnRQb3MsIGxlbmd0aCwgZGljdCk7XG4gICAgbGV0IGNhY2hlS2V5O1xuXG4gICAgaWYgKGxlbmd0aCA8IE1BWF9MRU5HVEhfVE9fQ0FDSEUgJiYgZGljdExlbmd0aCA8IE1BWF9BRExFUjMyX0xFTkdUSCkge1xuICAgICAgY29uc3QgaW1hZ2VCeXRlcyA9IGltYWdlU3RyZWFtLmdldEJ5dGVzKCk7XG4gICAgICBpbWFnZVN0cmVhbS5yZXNldCgpO1xuICAgICAgY29uc3QgaW5pdGlhbFN0cmVhbVBvcyA9IHN0cmVhbS5wb3M7XG4gICAgICBzdHJlYW0ucG9zID0gbGV4ZXIuYmVnaW5JbmxpbmVJbWFnZVBvcztcbiAgICAgIGNvbnN0IGRpY3RCeXRlcyA9IHN0cmVhbS5nZXRCeXRlcyhkaWN0TGVuZ3RoKTtcbiAgICAgIHN0cmVhbS5wb3MgPSBpbml0aWFsU3RyZWFtUG9zO1xuICAgICAgY2FjaGVLZXkgPSBjb21wdXRlQWRsZXIzMihpbWFnZUJ5dGVzKSArIFwiX1wiICsgY29tcHV0ZUFkbGVyMzIoZGljdEJ5dGVzKTtcbiAgICAgIGNvbnN0IGNhY2hlRW50cnkgPSB0aGlzLmltYWdlQ2FjaGVbY2FjaGVLZXldO1xuXG4gICAgICBpZiAoY2FjaGVFbnRyeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuYnVmMiA9IF9wcmltaXRpdmVzLkNtZC5nZXQoXCJFSVwiKTtcbiAgICAgICAgdGhpcy5zaGlmdCgpO1xuICAgICAgICBjYWNoZUVudHJ5LnJlc2V0KCk7XG4gICAgICAgIHJldHVybiBjYWNoZUVudHJ5O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaXBoZXJUcmFuc2Zvcm0pIHtcbiAgICAgIGltYWdlU3RyZWFtID0gY2lwaGVyVHJhbnNmb3JtLmNyZWF0ZVN0cmVhbShpbWFnZVN0cmVhbSwgbGVuZ3RoKTtcbiAgICB9XG5cbiAgICBpbWFnZVN0cmVhbSA9IHRoaXMuZmlsdGVyKGltYWdlU3RyZWFtLCBkaWN0LCBsZW5ndGgpO1xuICAgIGltYWdlU3RyZWFtLmRpY3QgPSBkaWN0O1xuXG4gICAgaWYgKGNhY2hlS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGltYWdlU3RyZWFtLmNhY2hlS2V5ID0gYGlubGluZV8ke2xlbmd0aH1fJHtjYWNoZUtleX1gO1xuICAgICAgdGhpcy5pbWFnZUNhY2hlW2NhY2hlS2V5XSA9IGltYWdlU3RyZWFtO1xuICAgIH1cblxuICAgIHRoaXMuYnVmMiA9IF9wcmltaXRpdmVzLkNtZC5nZXQoXCJFSVwiKTtcbiAgICB0aGlzLnNoaWZ0KCk7XG4gICAgcmV0dXJuIGltYWdlU3RyZWFtO1xuICB9XG5cbiAgX2ZpbmRTdHJlYW1MZW5ndGgoc3RhcnRQb3MsIHNpZ25hdHVyZSkge1xuICAgIGNvbnN0IHtcbiAgICAgIHN0cmVhbVxuICAgIH0gPSB0aGlzLmxleGVyO1xuICAgIHN0cmVhbS5wb3MgPSBzdGFydFBvcztcbiAgICBjb25zdCBTQ0FOX0JMT0NLX0xFTkdUSCA9IDIwNDg7XG4gICAgY29uc3Qgc2lnbmF0dXJlTGVuZ3RoID0gc2lnbmF0dXJlLmxlbmd0aDtcblxuICAgIHdoaWxlIChzdHJlYW0ucG9zIDwgc3RyZWFtLmVuZCkge1xuICAgICAgY29uc3Qgc2NhbkJ5dGVzID0gc3RyZWFtLnBlZWtCeXRlcyhTQ0FOX0JMT0NLX0xFTkdUSCk7XG4gICAgICBjb25zdCBzY2FuTGVuZ3RoID0gc2NhbkJ5dGVzLmxlbmd0aCAtIHNpZ25hdHVyZUxlbmd0aDtcblxuICAgICAgaWYgKHNjYW5MZW5ndGggPD0gMCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgbGV0IHBvcyA9IDA7XG5cbiAgICAgIHdoaWxlIChwb3MgPCBzY2FuTGVuZ3RoKSB7XG4gICAgICAgIGxldCBqID0gMDtcblxuICAgICAgICB3aGlsZSAoaiA8IHNpZ25hdHVyZUxlbmd0aCAmJiBzY2FuQnl0ZXNbcG9zICsgal0gPT09IHNpZ25hdHVyZVtqXSkge1xuICAgICAgICAgIGorKztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChqID49IHNpZ25hdHVyZUxlbmd0aCkge1xuICAgICAgICAgIHN0cmVhbS5wb3MgKz0gcG9zO1xuICAgICAgICAgIHJldHVybiBzdHJlYW0ucG9zIC0gc3RhcnRQb3M7XG4gICAgICAgIH1cblxuICAgICAgICBwb3MrKztcbiAgICAgIH1cblxuICAgICAgc3RyZWFtLnBvcyArPSBzY2FuTGVuZ3RoO1xuICAgIH1cblxuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIG1ha2VTdHJlYW0oZGljdCwgY2lwaGVyVHJhbnNmb3JtKSB7XG4gICAgY29uc3QgbGV4ZXIgPSB0aGlzLmxleGVyO1xuICAgIGxldCBzdHJlYW0gPSBsZXhlci5zdHJlYW07XG4gICAgbGV4ZXIuc2tpcFRvTmV4dExpbmUoKTtcbiAgICBjb25zdCBzdGFydFBvcyA9IHN0cmVhbS5wb3MgLSAxO1xuICAgIGxldCBsZW5ndGggPSBkaWN0LmdldChcIkxlbmd0aFwiKTtcblxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihsZW5ndGgpKSB7XG4gICAgICAoMCwgX3V0aWwuaW5mbykoYEJhZCBsZW5ndGggXCIke2xlbmd0aCAmJiBsZW5ndGgudG9TdHJpbmcoKX1cIiBpbiBzdHJlYW0uYCk7XG4gICAgICBsZW5ndGggPSAwO1xuICAgIH1cblxuICAgIHN0cmVhbS5wb3MgPSBzdGFydFBvcyArIGxlbmd0aDtcbiAgICBsZXhlci5uZXh0Q2hhcigpO1xuXG4gICAgaWYgKHRoaXMudHJ5U2hpZnQoKSAmJiAoMCwgX3ByaW1pdGl2ZXMuaXNDbWQpKHRoaXMuYnVmMiwgXCJlbmRzdHJlYW1cIikpIHtcbiAgICAgIHRoaXMuc2hpZnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgRU5EU1RSRUFNX1NJR05BVFVSRSA9IG5ldyBVaW50OEFycmF5KFsweDY1LCAweDZlLCAweDY0LCAweDczLCAweDc0LCAweDcyLCAweDY1LCAweDYxLCAweDZkXSk7XG5cbiAgICAgIGxldCBhY3R1YWxMZW5ndGggPSB0aGlzLl9maW5kU3RyZWFtTGVuZ3RoKHN0YXJ0UG9zLCBFTkRTVFJFQU1fU0lHTkFUVVJFKTtcblxuICAgICAgaWYgKGFjdHVhbExlbmd0aCA8IDApIHtcbiAgICAgICAgY29uc3QgTUFYX1RSVU5DQVRJT04gPSAxO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IE1BWF9UUlVOQ0FUSU9OOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBlbmQgPSBFTkRTVFJFQU1fU0lHTkFUVVJFLmxlbmd0aCAtIGk7XG4gICAgICAgICAgY29uc3QgVFJVTkNBVEVEX1NJR05BVFVSRSA9IEVORFNUUkVBTV9TSUdOQVRVUkUuc2xpY2UoMCwgZW5kKTtcblxuICAgICAgICAgIGNvbnN0IG1heWJlTGVuZ3RoID0gdGhpcy5fZmluZFN0cmVhbUxlbmd0aChzdGFydFBvcywgVFJVTkNBVEVEX1NJR05BVFVSRSk7XG5cbiAgICAgICAgICBpZiAobWF5YmVMZW5ndGggPj0gMCkge1xuICAgICAgICAgICAgY29uc3QgbGFzdEJ5dGUgPSBzdHJlYW0ucGVla0J5dGVzKGVuZCArIDEpW2VuZF07XG5cbiAgICAgICAgICAgIGlmICghKDAsIF9jb3JlX3V0aWxzLmlzV2hpdGVTcGFjZSkobGFzdEJ5dGUpKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoYEZvdW5kIFwiJHsoMCwgX3V0aWwuYnl0ZXNUb1N0cmluZykoVFJVTkNBVEVEX1NJR05BVFVSRSl9XCIgd2hlbiBgICsgXCJzZWFyY2hpbmcgZm9yIGVuZHN0cmVhbSBjb21tYW5kLlwiKTtcbiAgICAgICAgICAgIGFjdHVhbExlbmd0aCA9IG1heWJlTGVuZ3RoO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFjdHVhbExlbmd0aCA8IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJNaXNzaW5nIGVuZHN0cmVhbSBjb21tYW5kLlwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsZW5ndGggPSBhY3R1YWxMZW5ndGg7XG4gICAgICBsZXhlci5uZXh0Q2hhcigpO1xuICAgICAgdGhpcy5zaGlmdCgpO1xuICAgICAgdGhpcy5zaGlmdCgpO1xuICAgIH1cblxuICAgIHRoaXMuc2hpZnQoKTtcbiAgICBzdHJlYW0gPSBzdHJlYW0ubWFrZVN1YlN0cmVhbShzdGFydFBvcywgbGVuZ3RoLCBkaWN0KTtcblxuICAgIGlmIChjaXBoZXJUcmFuc2Zvcm0pIHtcbiAgICAgIHN0cmVhbSA9IGNpcGhlclRyYW5zZm9ybS5jcmVhdGVTdHJlYW0oc3RyZWFtLCBsZW5ndGgpO1xuICAgIH1cblxuICAgIHN0cmVhbSA9IHRoaXMuZmlsdGVyKHN0cmVhbSwgZGljdCwgbGVuZ3RoKTtcbiAgICBzdHJlYW0uZGljdCA9IGRpY3Q7XG4gICAgcmV0dXJuIHN0cmVhbTtcbiAgfVxuXG4gIGZpbHRlcihzdHJlYW0sIGRpY3QsIGxlbmd0aCkge1xuICAgIGxldCBmaWx0ZXIgPSBkaWN0LmdldChcIkZcIiwgXCJGaWx0ZXJcIik7XG4gICAgbGV0IHBhcmFtcyA9IGRpY3QuZ2V0KFwiRFBcIiwgXCJEZWNvZGVQYXJtc1wiKTtcblxuICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShmaWx0ZXIpKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJhbXMpKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShcIi9EZWNvZGVQYXJtcyBzaG91bGQgbm90IGJlIGFuIEFycmF5LCB3aGVuIC9GaWx0ZXIgaXMgYSBOYW1lLlwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMubWFrZUZpbHRlcihzdHJlYW0sIGZpbHRlci5uYW1lLCBsZW5ndGgsIHBhcmFtcyk7XG4gICAgfVxuXG4gICAgbGV0IG1heWJlTGVuZ3RoID0gbGVuZ3RoO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyKSkge1xuICAgICAgY29uc3QgZmlsdGVyQXJyYXkgPSBmaWx0ZXI7XG4gICAgICBjb25zdCBwYXJhbXNBcnJheSA9IHBhcmFtcztcblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gZmlsdGVyQXJyYXkubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgICBmaWx0ZXIgPSB0aGlzLnhyZWYuZmV0Y2hJZlJlZihmaWx0ZXJBcnJheVtpXSk7XG5cbiAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShmaWx0ZXIpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBCYWQgZmlsdGVyIG5hbWUgXCIke2ZpbHRlcn1cImApO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFyYW1zID0gbnVsbDtcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJhbXNBcnJheSkgJiYgaSBpbiBwYXJhbXNBcnJheSkge1xuICAgICAgICAgIHBhcmFtcyA9IHRoaXMueHJlZi5mZXRjaElmUmVmKHBhcmFtc0FycmF5W2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0cmVhbSA9IHRoaXMubWFrZUZpbHRlcihzdHJlYW0sIGZpbHRlci5uYW1lLCBtYXliZUxlbmd0aCwgcGFyYW1zKTtcbiAgICAgICAgbWF5YmVMZW5ndGggPSBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdHJlYW07XG4gIH1cblxuICBtYWtlRmlsdGVyKHN0cmVhbSwgbmFtZSwgbWF5YmVMZW5ndGgsIHBhcmFtcykge1xuICAgIGlmIChtYXliZUxlbmd0aCA9PT0gMCkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKGBFbXB0eSBcIiR7bmFtZX1cIiBzdHJlYW0uYCk7XG4gICAgICByZXR1cm4gbmV3IF9zdHJlYW0uTnVsbFN0cmVhbSgpO1xuICAgIH1cblxuICAgIGNvbnN0IHhyZWZTdGF0cyA9IHRoaXMueHJlZi5zdGF0cztcblxuICAgIHRyeSB7XG4gICAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgICAgY2FzZSBcIkZsXCI6XG4gICAgICAgIGNhc2UgXCJGbGF0ZURlY29kZVwiOlxuICAgICAgICAgIHhyZWZTdGF0cy5hZGRTdHJlYW1UeXBlKF91dGlsLlN0cmVhbVR5cGUuRkxBVEUpO1xuXG4gICAgICAgICAgaWYgKHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBfcHJlZGljdG9yX3N0cmVhbS5QcmVkaWN0b3JTdHJlYW0obmV3IF9mbGF0ZV9zdHJlYW0uRmxhdGVTdHJlYW0oc3RyZWFtLCBtYXliZUxlbmd0aCksIG1heWJlTGVuZ3RoLCBwYXJhbXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBuZXcgX2ZsYXRlX3N0cmVhbS5GbGF0ZVN0cmVhbShzdHJlYW0sIG1heWJlTGVuZ3RoKTtcblxuICAgICAgICBjYXNlIFwiTFpXXCI6XG4gICAgICAgIGNhc2UgXCJMWldEZWNvZGVcIjpcbiAgICAgICAgICB4cmVmU3RhdHMuYWRkU3RyZWFtVHlwZShfdXRpbC5TdHJlYW1UeXBlLkxaVyk7XG4gICAgICAgICAgbGV0IGVhcmx5Q2hhbmdlID0gMTtcblxuICAgICAgICAgIGlmIChwYXJhbXMpIHtcbiAgICAgICAgICAgIGlmIChwYXJhbXMuaGFzKFwiRWFybHlDaGFuZ2VcIikpIHtcbiAgICAgICAgICAgICAgZWFybHlDaGFuZ2UgPSBwYXJhbXMuZ2V0KFwiRWFybHlDaGFuZ2VcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgX3ByZWRpY3Rvcl9zdHJlYW0uUHJlZGljdG9yU3RyZWFtKG5ldyBfbHp3X3N0cmVhbS5MWldTdHJlYW0oc3RyZWFtLCBtYXliZUxlbmd0aCwgZWFybHlDaGFuZ2UpLCBtYXliZUxlbmd0aCwgcGFyYW1zKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbmV3IF9sendfc3RyZWFtLkxaV1N0cmVhbShzdHJlYW0sIG1heWJlTGVuZ3RoLCBlYXJseUNoYW5nZSk7XG5cbiAgICAgICAgY2FzZSBcIkRDVFwiOlxuICAgICAgICBjYXNlIFwiRENURGVjb2RlXCI6XG4gICAgICAgICAgeHJlZlN0YXRzLmFkZFN0cmVhbVR5cGUoX3V0aWwuU3RyZWFtVHlwZS5EQ1QpO1xuICAgICAgICAgIHJldHVybiBuZXcgX2pwZWdfc3RyZWFtLkpwZWdTdHJlYW0oc3RyZWFtLCBtYXliZUxlbmd0aCwgcGFyYW1zKTtcblxuICAgICAgICBjYXNlIFwiSlBYXCI6XG4gICAgICAgIGNhc2UgXCJKUFhEZWNvZGVcIjpcbiAgICAgICAgICB4cmVmU3RhdHMuYWRkU3RyZWFtVHlwZShfdXRpbC5TdHJlYW1UeXBlLkpQWCk7XG4gICAgICAgICAgcmV0dXJuIG5ldyBfanB4X3N0cmVhbS5KcHhTdHJlYW0oc3RyZWFtLCBtYXliZUxlbmd0aCwgcGFyYW1zKTtcblxuICAgICAgICBjYXNlIFwiQTg1XCI6XG4gICAgICAgIGNhc2UgXCJBU0NJSTg1RGVjb2RlXCI6XG4gICAgICAgICAgeHJlZlN0YXRzLmFkZFN0cmVhbVR5cGUoX3V0aWwuU3RyZWFtVHlwZS5BODUpO1xuICAgICAgICAgIHJldHVybiBuZXcgX2FzY2lpXzg1X3N0cmVhbS5Bc2NpaTg1U3RyZWFtKHN0cmVhbSwgbWF5YmVMZW5ndGgpO1xuXG4gICAgICAgIGNhc2UgXCJBSHhcIjpcbiAgICAgICAgY2FzZSBcIkFTQ0lJSGV4RGVjb2RlXCI6XG4gICAgICAgICAgeHJlZlN0YXRzLmFkZFN0cmVhbVR5cGUoX3V0aWwuU3RyZWFtVHlwZS5BSFgpO1xuICAgICAgICAgIHJldHVybiBuZXcgX2FzY2lpX2hleF9zdHJlYW0uQXNjaWlIZXhTdHJlYW0oc3RyZWFtLCBtYXliZUxlbmd0aCk7XG5cbiAgICAgICAgY2FzZSBcIkNDRlwiOlxuICAgICAgICBjYXNlIFwiQ0NJVFRGYXhEZWNvZGVcIjpcbiAgICAgICAgICB4cmVmU3RhdHMuYWRkU3RyZWFtVHlwZShfdXRpbC5TdHJlYW1UeXBlLkNDRik7XG4gICAgICAgICAgcmV0dXJuIG5ldyBfY2NpdHRfc3RyZWFtLkNDSVRURmF4U3RyZWFtKHN0cmVhbSwgbWF5YmVMZW5ndGgsIHBhcmFtcyk7XG5cbiAgICAgICAgY2FzZSBcIlJMXCI6XG4gICAgICAgIGNhc2UgXCJSdW5MZW5ndGhEZWNvZGVcIjpcbiAgICAgICAgICB4cmVmU3RhdHMuYWRkU3RyZWFtVHlwZShfdXRpbC5TdHJlYW1UeXBlLlJMWCk7XG4gICAgICAgICAgcmV0dXJuIG5ldyBfcnVuX2xlbmd0aF9zdHJlYW0uUnVuTGVuZ3RoU3RyZWFtKHN0cmVhbSwgbWF5YmVMZW5ndGgpO1xuXG4gICAgICAgIGNhc2UgXCJKQklHMkRlY29kZVwiOlxuICAgICAgICAgIHhyZWZTdGF0cy5hZGRTdHJlYW1UeXBlKF91dGlsLlN0cmVhbVR5cGUuSkJJRyk7XG4gICAgICAgICAgcmV0dXJuIG5ldyBfamJpZzJfc3RyZWFtLkpiaWcyU3RyZWFtKHN0cmVhbSwgbWF5YmVMZW5ndGgsIHBhcmFtcyk7XG4gICAgICB9XG5cbiAgICAgICgwLCBfdXRpbC53YXJuKShgRmlsdGVyIFwiJHtuYW1lfVwiIGlzIG5vdCBzdXBwb3J0ZWQuYCk7XG4gICAgICByZXR1cm4gc3RyZWFtO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXggaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICB0aHJvdyBleDtcbiAgICAgIH1cblxuICAgICAgKDAsIF91dGlsLndhcm4pKGBJbnZhbGlkIHN0cmVhbTogXCIke2V4fVwiYCk7XG4gICAgICByZXR1cm4gbmV3IF9zdHJlYW0uTnVsbFN0cmVhbSgpO1xuICAgIH1cbiAgfVxuXG59XG5cbmV4cG9ydHMuUGFyc2VyID0gUGFyc2VyO1xuY29uc3Qgc3BlY2lhbENoYXJzID0gWzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDAsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDIsIDAsIDAsIDIsIDIsIDAsIDAsIDAsIDAsIDAsIDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIsIDAsIDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIsIDAsIDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIsIDAsIDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdO1xuXG5mdW5jdGlvbiB0b0hleERpZ2l0KGNoKSB7XG4gIGlmIChjaCA+PSAweDMwICYmIGNoIDw9IDB4MzkpIHtcbiAgICByZXR1cm4gY2ggJiAweDBmO1xuICB9XG5cbiAgaWYgKGNoID49IDB4NDEgJiYgY2ggPD0gMHg0NiB8fCBjaCA+PSAweDYxICYmIGNoIDw9IDB4NjYpIHtcbiAgICByZXR1cm4gKGNoICYgMHgwZikgKyA5O1xuICB9XG5cbiAgcmV0dXJuIC0xO1xufVxuXG5jbGFzcyBMZXhlciB7XG4gIGNvbnN0cnVjdG9yKHN0cmVhbSwga25vd25Db21tYW5kcyA9IG51bGwpIHtcbiAgICB0aGlzLnN0cmVhbSA9IHN0cmVhbTtcbiAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgdGhpcy5zdHJCdWYgPSBbXTtcbiAgICB0aGlzLmtub3duQ29tbWFuZHMgPSBrbm93bkNvbW1hbmRzO1xuICAgIHRoaXMuX2hleFN0cmluZ051bVdhcm4gPSAwO1xuICAgIHRoaXMuYmVnaW5JbmxpbmVJbWFnZVBvcyA9IC0xO1xuICB9XG5cbiAgbmV4dENoYXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudENoYXIgPSB0aGlzLnN0cmVhbS5nZXRCeXRlKCk7XG4gIH1cblxuICBwZWVrQ2hhcigpIHtcbiAgICByZXR1cm4gdGhpcy5zdHJlYW0ucGVla0J5dGUoKTtcbiAgfVxuXG4gIGdldE51bWJlcigpIHtcbiAgICBsZXQgY2ggPSB0aGlzLmN1cnJlbnRDaGFyO1xuICAgIGxldCBlTm90YXRpb24gPSBmYWxzZTtcbiAgICBsZXQgZGl2aWRlQnkgPSAwO1xuICAgIGxldCBzaWduID0gMDtcblxuICAgIGlmIChjaCA9PT0gMHgyZCkge1xuICAgICAgc2lnbiA9IC0xO1xuICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG5cbiAgICAgIGlmIChjaCA9PT0gMHgyZCkge1xuICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNoID09PSAweDJiKSB7XG4gICAgICBzaWduID0gMTtcbiAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuICAgIH1cblxuICAgIGlmIChjaCA9PT0gMHgwYSB8fCBjaCA9PT0gMHgwZCkge1xuICAgICAgZG8ge1xuICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcbiAgICAgIH0gd2hpbGUgKGNoID09PSAweDBhIHx8IGNoID09PSAweDBkKTtcbiAgICB9XG5cbiAgICBpZiAoY2ggPT09IDB4MmUpIHtcbiAgICAgIGRpdmlkZUJ5ID0gMTA7XG4gICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcbiAgICB9XG5cbiAgICBpZiAoY2ggPCAweDMwIHx8IGNoID4gMHgzOSkge1xuICAgICAgaWYgKGRpdmlkZUJ5ID09PSAxMCAmJiBzaWduID09PSAwICYmICgoMCwgX2NvcmVfdXRpbHMuaXNXaGl0ZVNwYWNlKShjaCkgfHwgY2ggPT09IC0xKSkge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoXCJMZXhlci5nZXROdW1iZXIgLSB0cmVhdGluZyBhIHNpbmdsZSBkZWNpbWFsIHBvaW50IGFzIHplcm8uXCIpO1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBJbnZhbGlkIG51bWJlcjogJHtTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKX0gKGNoYXJDb2RlICR7Y2h9KWApO1xuICAgIH1cblxuICAgIHNpZ24gPSBzaWduIHx8IDE7XG4gICAgbGV0IGJhc2VWYWx1ZSA9IGNoIC0gMHgzMDtcbiAgICBsZXQgcG93ZXJWYWx1ZSA9IDA7XG4gICAgbGV0IHBvd2VyVmFsdWVTaWduID0gMTtcblxuICAgIHdoaWxlICgoY2ggPSB0aGlzLm5leHRDaGFyKCkpID49IDApIHtcbiAgICAgIGlmIChjaCA+PSAweDMwICYmIGNoIDw9IDB4MzkpIHtcbiAgICAgICAgY29uc3QgY3VycmVudERpZ2l0ID0gY2ggLSAweDMwO1xuXG4gICAgICAgIGlmIChlTm90YXRpb24pIHtcbiAgICAgICAgICBwb3dlclZhbHVlID0gcG93ZXJWYWx1ZSAqIDEwICsgY3VycmVudERpZ2l0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChkaXZpZGVCeSAhPT0gMCkge1xuICAgICAgICAgICAgZGl2aWRlQnkgKj0gMTA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYmFzZVZhbHVlID0gYmFzZVZhbHVlICogMTAgKyBjdXJyZW50RGlnaXQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4MmUpIHtcbiAgICAgICAgaWYgKGRpdmlkZUJ5ID09PSAwKSB7XG4gICAgICAgICAgZGl2aWRlQnkgPSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNoID09PSAweDJkKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShcIkJhZGx5IGZvcm1hdHRlZCBudW1iZXI6IG1pbnVzIHNpZ24gaW4gdGhlIG1pZGRsZVwiKTtcbiAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4NDUgfHwgY2ggPT09IDB4NjUpIHtcbiAgICAgICAgY2ggPSB0aGlzLnBlZWtDaGFyKCk7XG5cbiAgICAgICAgaWYgKGNoID09PSAweDJiIHx8IGNoID09PSAweDJkKSB7XG4gICAgICAgICAgcG93ZXJWYWx1ZVNpZ24gPSBjaCA9PT0gMHgyZCA/IC0xIDogMTtcbiAgICAgICAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoY2ggPCAweDMwIHx8IGNoID4gMHgzOSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZU5vdGF0aW9uID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkaXZpZGVCeSAhPT0gMCkge1xuICAgICAgYmFzZVZhbHVlIC89IGRpdmlkZUJ5O1xuICAgIH1cblxuICAgIGlmIChlTm90YXRpb24pIHtcbiAgICAgIGJhc2VWYWx1ZSAqPSAxMCAqKiAocG93ZXJWYWx1ZVNpZ24gKiBwb3dlclZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2lnbiAqIGJhc2VWYWx1ZTtcbiAgfVxuXG4gIGdldFN0cmluZygpIHtcbiAgICBsZXQgbnVtUGFyZW4gPSAxO1xuICAgIGxldCBkb25lID0gZmFsc2U7XG4gICAgY29uc3Qgc3RyQnVmID0gdGhpcy5zdHJCdWY7XG4gICAgc3RyQnVmLmxlbmd0aCA9IDA7XG4gICAgbGV0IGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGxldCBjaGFyQnVmZmVyZWQgPSBmYWxzZTtcblxuICAgICAgc3dpdGNoIChjaCB8IDApIHtcbiAgICAgICAgY2FzZSAtMTpcbiAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJVbnRlcm1pbmF0ZWQgc3RyaW5nXCIpO1xuICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMHgyODpcbiAgICAgICAgICArK251bVBhcmVuO1xuICAgICAgICAgIHN0ckJ1Zi5wdXNoKFwiKFwiKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDB4Mjk6XG4gICAgICAgICAgaWYgKC0tbnVtUGFyZW4gPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdHJCdWYucHVzaChcIilcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAweDVjOlxuICAgICAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuXG4gICAgICAgICAgc3dpdGNoIChjaCkge1xuICAgICAgICAgICAgY2FzZSAtMTpcbiAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiVW50ZXJtaW5hdGVkIHN0cmluZ1wiKTtcbiAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDB4NmU6XG4gICAgICAgICAgICAgIHN0ckJ1Zi5wdXNoKFwiXFxuXCIpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAweDcyOlxuICAgICAgICAgICAgICBzdHJCdWYucHVzaChcIlxcclwiKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMHg3NDpcbiAgICAgICAgICAgICAgc3RyQnVmLnB1c2goXCJcXHRcIik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDB4NjI6XG4gICAgICAgICAgICAgIHN0ckJ1Zi5wdXNoKFwiXFxiXCIpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAweDY2OlxuICAgICAgICAgICAgICBzdHJCdWYucHVzaChcIlxcZlwiKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMHg1YzpcbiAgICAgICAgICAgIGNhc2UgMHgyODpcbiAgICAgICAgICAgIGNhc2UgMHgyOTpcbiAgICAgICAgICAgICAgc3RyQnVmLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAweDMwOlxuICAgICAgICAgICAgY2FzZSAweDMxOlxuICAgICAgICAgICAgY2FzZSAweDMyOlxuICAgICAgICAgICAgY2FzZSAweDMzOlxuICAgICAgICAgICAgY2FzZSAweDM0OlxuICAgICAgICAgICAgY2FzZSAweDM1OlxuICAgICAgICAgICAgY2FzZSAweDM2OlxuICAgICAgICAgICAgY2FzZSAweDM3OlxuICAgICAgICAgICAgICBsZXQgeCA9IGNoICYgMHgwZjtcbiAgICAgICAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgICAgICAgIGNoYXJCdWZmZXJlZCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgaWYgKGNoID49IDB4MzAgJiYgY2ggPD0gMHgzNykge1xuICAgICAgICAgICAgICAgIHggPSAoeCA8PCAzKSArIChjaCAmIDB4MGYpO1xuICAgICAgICAgICAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNoID49IDB4MzAgJiYgY2ggPD0gMHgzNykge1xuICAgICAgICAgICAgICAgICAgY2hhckJ1ZmZlcmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICB4ID0gKHggPDwgMykgKyAoY2ggJiAweDBmKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBzdHJCdWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHgpKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMHgwZDpcbiAgICAgICAgICAgICAgaWYgKHRoaXMucGVla0NoYXIoKSA9PT0gMHgwYSkge1xuICAgICAgICAgICAgICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDB4MGE6XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBzdHJCdWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgc3RyQnVmLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoZG9uZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKCFjaGFyQnVmZmVyZWQpIHtcbiAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0ckJ1Zi5qb2luKFwiXCIpO1xuICB9XG5cbiAgZ2V0TmFtZSgpIHtcbiAgICBsZXQgY2gsIHByZXZpb3VzQ2g7XG4gICAgY29uc3Qgc3RyQnVmID0gdGhpcy5zdHJCdWY7XG4gICAgc3RyQnVmLmxlbmd0aCA9IDA7XG5cbiAgICB3aGlsZSAoKGNoID0gdGhpcy5uZXh0Q2hhcigpKSA+PSAwICYmICFzcGVjaWFsQ2hhcnNbY2hdKSB7XG4gICAgICBpZiAoY2ggPT09IDB4MjMpIHtcbiAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG5cbiAgICAgICAgaWYgKHNwZWNpYWxDaGFyc1tjaF0pIHtcbiAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJMZXhlcl9nZXROYW1lOiBcIiArIFwiTlVNQkVSIFNJR04gKCMpIHNob3VsZCBiZSBmb2xsb3dlZCBieSBhIGhleGFkZWNpbWFsIG51bWJlci5cIik7XG4gICAgICAgICAgc3RyQnVmLnB1c2goXCIjXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeCA9IHRvSGV4RGlnaXQoY2gpO1xuXG4gICAgICAgIGlmICh4ICE9PSAtMSkge1xuICAgICAgICAgIHByZXZpb3VzQ2ggPSBjaDtcbiAgICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICBjb25zdCB4MiA9IHRvSGV4RGlnaXQoY2gpO1xuXG4gICAgICAgICAgaWYgKHgyID09PSAtMSkge1xuICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKGBMZXhlcl9nZXROYW1lOiBJbGxlZ2FsIGRpZ2l0ICgke1N0cmluZy5mcm9tQ2hhckNvZGUoY2gpfSkgYCArIFwiaW4gaGV4YWRlY2ltYWwgbnVtYmVyLlwiKTtcbiAgICAgICAgICAgIHN0ckJ1Zi5wdXNoKFwiI1wiLCBTdHJpbmcuZnJvbUNoYXJDb2RlKHByZXZpb3VzQ2gpKTtcblxuICAgICAgICAgICAgaWYgKHNwZWNpYWxDaGFyc1tjaF0pIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0ckJ1Zi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN0ckJ1Zi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoeCA8PCA0IHwgeDIpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdHJCdWYucHVzaChcIiNcIiwgU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHJCdWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0ckJ1Zi5sZW5ndGggPiAxMjcpIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShgTmFtZSB0b2tlbiBpcyBsb25nZXIgdGhhbiBhbGxvd2VkIGJ5IHRoZSBzcGVjOiAke3N0ckJ1Zi5sZW5ndGh9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9wcmltaXRpdmVzLk5hbWUuZ2V0KHN0ckJ1Zi5qb2luKFwiXCIpKTtcbiAgfVxuXG4gIF9oZXhTdHJpbmdXYXJuKGNoKSB7XG4gICAgY29uc3QgTUFYX0hFWF9TVFJJTkdfTlVNX1dBUk4gPSA1O1xuXG4gICAgaWYgKHRoaXMuX2hleFN0cmluZ051bVdhcm4rKyA9PT0gTUFYX0hFWF9TVFJJTkdfTlVNX1dBUk4pIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShcImdldEhleFN0cmluZyAtIGlnbm9yaW5nIGFkZGl0aW9uYWwgaW52YWxpZCBjaGFyYWN0ZXJzLlwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faGV4U3RyaW5nTnVtV2FybiA+IE1BWF9IRVhfU1RSSU5HX05VTV9XQVJOKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgKDAsIF91dGlsLndhcm4pKGBnZXRIZXhTdHJpbmcgLSBpZ25vcmluZyBpbnZhbGlkIGNoYXJhY3RlcjogJHtjaH1gKTtcbiAgfVxuXG4gIGdldEhleFN0cmluZygpIHtcbiAgICBjb25zdCBzdHJCdWYgPSB0aGlzLnN0ckJ1ZjtcbiAgICBzdHJCdWYubGVuZ3RoID0gMDtcbiAgICBsZXQgY2ggPSB0aGlzLmN1cnJlbnRDaGFyO1xuICAgIGxldCBpc0ZpcnN0SGV4ID0gdHJ1ZTtcbiAgICBsZXQgZmlyc3REaWdpdCwgc2Vjb25kRGlnaXQ7XG4gICAgdGhpcy5faGV4U3RyaW5nTnVtV2FybiA9IDA7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKGNoIDwgMCkge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoXCJVbnRlcm1pbmF0ZWQgaGV4IHN0cmluZ1wiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2UgaWYgKGNoID09PSAweDNlKSB7XG4gICAgICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2UgaWYgKHNwZWNpYWxDaGFyc1tjaF0gPT09IDEpIHtcbiAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzRmlyc3RIZXgpIHtcbiAgICAgICAgICBmaXJzdERpZ2l0ID0gdG9IZXhEaWdpdChjaCk7XG5cbiAgICAgICAgICBpZiAoZmlyc3REaWdpdCA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuX2hleFN0cmluZ1dhcm4oY2gpO1xuXG4gICAgICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWNvbmREaWdpdCA9IHRvSGV4RGlnaXQoY2gpO1xuXG4gICAgICAgICAgaWYgKHNlY29uZERpZ2l0ID09PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5faGV4U3RyaW5nV2FybihjaCk7XG5cbiAgICAgICAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3RyQnVmLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShmaXJzdERpZ2l0IDw8IDQgfCBzZWNvbmREaWdpdCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaXNGaXJzdEhleCA9ICFpc0ZpcnN0SGV4O1xuICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3RyQnVmLmpvaW4oXCJcIik7XG4gIH1cblxuICBnZXRPYmooKSB7XG4gICAgbGV0IGNvbW1lbnQgPSBmYWxzZTtcbiAgICBsZXQgY2ggPSB0aGlzLmN1cnJlbnRDaGFyO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChjaCA8IDApIHtcbiAgICAgICAgcmV0dXJuIF9wcmltaXRpdmVzLkVPRjtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbW1lbnQpIHtcbiAgICAgICAgaWYgKGNoID09PSAweDBhIHx8IGNoID09PSAweDBkKSB7XG4gICAgICAgICAgY29tbWVudCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNoID09PSAweDI1KSB7XG4gICAgICAgIGNvbW1lbnQgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChzcGVjaWFsQ2hhcnNbY2hdICE9PSAxKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGNoIHwgMCkge1xuICAgICAgY2FzZSAweDMwOlxuICAgICAgY2FzZSAweDMxOlxuICAgICAgY2FzZSAweDMyOlxuICAgICAgY2FzZSAweDMzOlxuICAgICAgY2FzZSAweDM0OlxuICAgICAgY2FzZSAweDM1OlxuICAgICAgY2FzZSAweDM2OlxuICAgICAgY2FzZSAweDM3OlxuICAgICAgY2FzZSAweDM4OlxuICAgICAgY2FzZSAweDM5OlxuICAgICAgY2FzZSAweDJiOlxuICAgICAgY2FzZSAweDJkOlxuICAgICAgY2FzZSAweDJlOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXROdW1iZXIoKTtcblxuICAgICAgY2FzZSAweDI4OlxuICAgICAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgICAgY2FzZSAweDJmOlxuICAgICAgICByZXR1cm4gdGhpcy5nZXROYW1lKCk7XG5cbiAgICAgIGNhc2UgMHg1YjpcbiAgICAgICAgdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICByZXR1cm4gX3ByaW1pdGl2ZXMuQ21kLmdldChcIltcIik7XG5cbiAgICAgIGNhc2UgMHg1ZDpcbiAgICAgICAgdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICByZXR1cm4gX3ByaW1pdGl2ZXMuQ21kLmdldChcIl1cIik7XG5cbiAgICAgIGNhc2UgMHgzYzpcbiAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG5cbiAgICAgICAgaWYgKGNoID09PSAweDNjKSB7XG4gICAgICAgICAgdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICAgIHJldHVybiBfcHJpbWl0aXZlcy5DbWQuZ2V0KFwiPDxcIik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5nZXRIZXhTdHJpbmcoKTtcblxuICAgICAgY2FzZSAweDNlOlxuICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcblxuICAgICAgICBpZiAoY2ggPT09IDB4M2UpIHtcbiAgICAgICAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgICAgcmV0dXJuIF9wcmltaXRpdmVzLkNtZC5nZXQoXCI+PlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfcHJpbWl0aXZlcy5DbWQuZ2V0KFwiPlwiKTtcblxuICAgICAgY2FzZSAweDdiOlxuICAgICAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgIHJldHVybiBfcHJpbWl0aXZlcy5DbWQuZ2V0KFwie1wiKTtcblxuICAgICAgY2FzZSAweDdkOlxuICAgICAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgIHJldHVybiBfcHJpbWl0aXZlcy5DbWQuZ2V0KFwifVwiKTtcblxuICAgICAgY2FzZSAweDI5OlxuICAgICAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgSWxsZWdhbCBjaGFyYWN0ZXI6ICR7Y2h9YCk7XG4gICAgfVxuXG4gICAgbGV0IHN0ciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpO1xuXG4gICAgaWYgKGNoIDwgMHgyMCB8fCBjaCA+IDB4N2YpIHtcbiAgICAgIGNvbnN0IG5leHRDaCA9IHRoaXMucGVla0NoYXIoKTtcblxuICAgICAgaWYgKG5leHRDaCA+PSAweDIwICYmIG5leHRDaCA8PSAweDdmKSB7XG4gICAgICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgcmV0dXJuIF9wcmltaXRpdmVzLkNtZC5nZXQoc3RyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBrbm93bkNvbW1hbmRzID0gdGhpcy5rbm93bkNvbW1hbmRzO1xuICAgIGxldCBrbm93bkNvbW1hbmRGb3VuZCA9IGtub3duQ29tbWFuZHMgJiYga25vd25Db21tYW5kc1tzdHJdICE9PSB1bmRlZmluZWQ7XG5cbiAgICB3aGlsZSAoKGNoID0gdGhpcy5uZXh0Q2hhcigpKSA+PSAwICYmICFzcGVjaWFsQ2hhcnNbY2hdKSB7XG4gICAgICBjb25zdCBwb3NzaWJsZUNvbW1hbmQgPSBzdHIgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTtcblxuICAgICAgaWYgKGtub3duQ29tbWFuZEZvdW5kICYmIGtub3duQ29tbWFuZHNbcG9zc2libGVDb21tYW5kXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RyLmxlbmd0aCA9PT0gMTI4KSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgQ29tbWFuZCB0b2tlbiB0b28gbG9uZzogJHtzdHIubGVuZ3RofWApO1xuICAgICAgfVxuXG4gICAgICBzdHIgPSBwb3NzaWJsZUNvbW1hbmQ7XG4gICAgICBrbm93bkNvbW1hbmRGb3VuZCA9IGtub3duQ29tbWFuZHMgJiYga25vd25Db21tYW5kc1tzdHJdICE9PSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKHN0ciA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdHIgPT09IFwiZmFsc2VcIikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChzdHIgPT09IFwibnVsbFwiKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoc3RyID09PSBcIkJJXCIpIHtcbiAgICAgIHRoaXMuYmVnaW5JbmxpbmVJbWFnZVBvcyA9IHRoaXMuc3RyZWFtLnBvcztcbiAgICB9XG5cbiAgICByZXR1cm4gX3ByaW1pdGl2ZXMuQ21kLmdldChzdHIpO1xuICB9XG5cbiAgcGVla09iaigpIHtcbiAgICBjb25zdCBzdHJlYW1Qb3MgPSB0aGlzLnN0cmVhbS5wb3MsXG4gICAgICAgICAgY3VycmVudENoYXIgPSB0aGlzLmN1cnJlbnRDaGFyLFxuICAgICAgICAgIGJlZ2luSW5saW5lSW1hZ2VQb3MgPSB0aGlzLmJlZ2luSW5saW5lSW1hZ2VQb3M7XG4gICAgbGV0IG5leHRPYmo7XG5cbiAgICB0cnkge1xuICAgICAgbmV4dE9iaiA9IHRoaXMuZ2V0T2JqKCk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmIChleCBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgIHRocm93IGV4O1xuICAgICAgfVxuXG4gICAgICAoMCwgX3V0aWwud2FybikoYHBlZWtPYmo6ICR7ZXh9YCk7XG4gICAgfVxuXG4gICAgdGhpcy5zdHJlYW0ucG9zID0gc3RyZWFtUG9zO1xuICAgIHRoaXMuY3VycmVudENoYXIgPSBjdXJyZW50Q2hhcjtcbiAgICB0aGlzLmJlZ2luSW5saW5lSW1hZ2VQb3MgPSBiZWdpbklubGluZUltYWdlUG9zO1xuICAgIHJldHVybiBuZXh0T2JqO1xuICB9XG5cbiAgc2tpcFRvTmV4dExpbmUoKSB7XG4gICAgbGV0IGNoID0gdGhpcy5jdXJyZW50Q2hhcjtcblxuICAgIHdoaWxlIChjaCA+PSAwKSB7XG4gICAgICBpZiAoY2ggPT09IDB4MGQpIHtcbiAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG5cbiAgICAgICAgaWYgKGNoID09PSAweDBhKSB7XG4gICAgICAgICAgdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2UgaWYgKGNoID09PSAweDBhKSB7XG4gICAgICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuICAgIH1cbiAgfVxuXG59XG5cbmV4cG9ydHMuTGV4ZXIgPSBMZXhlcjtcblxuY2xhc3MgTGluZWFyaXphdGlvbiB7XG4gIHN0YXRpYyBjcmVhdGUoc3RyZWFtKSB7XG4gICAgZnVuY3Rpb24gZ2V0SW50KGxpbkRpY3QsIG5hbWUsIGFsbG93WmVyb1ZhbHVlID0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IG9iaiA9IGxpbkRpY3QuZ2V0KG5hbWUpO1xuXG4gICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihvYmopICYmIChhbGxvd1plcm9WYWx1ZSA/IG9iaiA+PSAwIDogb2JqID4gMCkpIHtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgXCIke25hbWV9XCIgcGFyYW1ldGVyIGluIHRoZSBsaW5lYXJpemF0aW9uIGAgKyBcImRpY3Rpb25hcnkgaXMgaW52YWxpZC5cIik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0SGludHMobGluRGljdCkge1xuICAgICAgY29uc3QgaGludHMgPSBsaW5EaWN0LmdldChcIkhcIik7XG4gICAgICBsZXQgaGludHNMZW5ndGg7XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGhpbnRzKSAmJiAoKGhpbnRzTGVuZ3RoID0gaGludHMubGVuZ3RoKSA9PT0gMiB8fCBoaW50c0xlbmd0aCA9PT0gNCkpIHtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGhpbnRzTGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgY29uc3QgaGludCA9IGhpbnRzW2luZGV4XTtcblxuICAgICAgICAgIGlmICghKE51bWJlci5pc0ludGVnZXIoaGludCkgJiYgaGludCA+IDApKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEhpbnQgKCR7aW5kZXh9KSBpbiB0aGUgbGluZWFyaXphdGlvbiBkaWN0aW9uYXJ5IGlzIGludmFsaWQuYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGhpbnRzO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJIaW50IGFycmF5IGluIHRoZSBsaW5lYXJpemF0aW9uIGRpY3Rpb25hcnkgaXMgaW52YWxpZC5cIik7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VyID0gbmV3IFBhcnNlcih7XG4gICAgICBsZXhlcjogbmV3IExleGVyKHN0cmVhbSksXG4gICAgICB4cmVmOiBudWxsXG4gICAgfSk7XG4gICAgY29uc3Qgb2JqMSA9IHBhcnNlci5nZXRPYmooKTtcbiAgICBjb25zdCBvYmoyID0gcGFyc2VyLmdldE9iaigpO1xuICAgIGNvbnN0IG9iajMgPSBwYXJzZXIuZ2V0T2JqKCk7XG4gICAgY29uc3QgbGluRGljdCA9IHBhcnNlci5nZXRPYmooKTtcbiAgICBsZXQgb2JqLCBsZW5ndGg7XG5cbiAgICBpZiAoIShOdW1iZXIuaXNJbnRlZ2VyKG9iajEpICYmIE51bWJlci5pc0ludGVnZXIob2JqMikgJiYgKDAsIF9wcmltaXRpdmVzLmlzQ21kKShvYmozLCBcIm9ialwiKSAmJiAoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShsaW5EaWN0KSAmJiAoMCwgX3V0aWwuaXNOdW0pKG9iaiA9IGxpbkRpY3QuZ2V0KFwiTGluZWFyaXplZFwiKSkgJiYgb2JqID4gMCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAoKGxlbmd0aCA9IGdldEludChsaW5EaWN0LCBcIkxcIikpICE9PSBzdHJlYW0ubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBcIkxcIiBwYXJhbWV0ZXIgaW4gdGhlIGxpbmVhcml6YXRpb24gZGljdGlvbmFyeSAnICsgXCJkb2VzIG5vdCBlcXVhbCB0aGUgc3RyZWFtIGxlbmd0aC5cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxlbmd0aCxcbiAgICAgIGhpbnRzOiBnZXRIaW50cyhsaW5EaWN0KSxcbiAgICAgIG9iamVjdE51bWJlckZpcnN0OiBnZXRJbnQobGluRGljdCwgXCJPXCIpLFxuICAgICAgZW5kRmlyc3Q6IGdldEludChsaW5EaWN0LCBcIkVcIiksXG4gICAgICBudW1QYWdlczogZ2V0SW50KGxpbkRpY3QsIFwiTlwiKSxcbiAgICAgIG1haW5YUmVmRW50cmllc09mZnNldDogZ2V0SW50KGxpbkRpY3QsIFwiVFwiKSxcbiAgICAgIHBhZ2VGaXJzdDogbGluRGljdC5oYXMoXCJQXCIpID8gZ2V0SW50KGxpbkRpY3QsIFwiUFwiLCB0cnVlKSA6IDBcbiAgICB9O1xuICB9XG5cbn1cblxuZXhwb3J0cy5MaW5lYXJpemF0aW9uID0gTGluZWFyaXphdGlvbjtcblxuLyoqKi8gfSksXG4vKiAyOCAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5Bc2NpaTg1U3RyZWFtID0gdm9pZCAwO1xuXG52YXIgX2RlY29kZV9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDI5KTtcblxudmFyIF9jb3JlX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXyg5KTtcblxuY2xhc3MgQXNjaWk4NVN0cmVhbSBleHRlbmRzIF9kZWNvZGVfc3RyZWFtLkRlY29kZVN0cmVhbSB7XG4gIGNvbnN0cnVjdG9yKHN0ciwgbWF5YmVMZW5ndGgpIHtcbiAgICBpZiAobWF5YmVMZW5ndGgpIHtcbiAgICAgIG1heWJlTGVuZ3RoICo9IDAuODtcbiAgICB9XG5cbiAgICBzdXBlcihtYXliZUxlbmd0aCk7XG4gICAgdGhpcy5zdHIgPSBzdHI7XG4gICAgdGhpcy5kaWN0ID0gc3RyLmRpY3Q7XG4gICAgdGhpcy5pbnB1dCA9IG5ldyBVaW50OEFycmF5KDUpO1xuICB9XG5cbiAgcmVhZEJsb2NrKCkge1xuICAgIGNvbnN0IFRJTERBX0NIQVIgPSAweDdlO1xuICAgIGNvbnN0IFpfTE9XRVJfQ0hBUiA9IDB4N2E7XG4gICAgY29uc3QgRU9GID0gLTE7XG4gICAgY29uc3Qgc3RyID0gdGhpcy5zdHI7XG4gICAgbGV0IGMgPSBzdHIuZ2V0Qnl0ZSgpO1xuXG4gICAgd2hpbGUgKCgwLCBfY29yZV91dGlscy5pc1doaXRlU3BhY2UpKGMpKSB7XG4gICAgICBjID0gc3RyLmdldEJ5dGUoKTtcbiAgICB9XG5cbiAgICBpZiAoYyA9PT0gRU9GIHx8IGMgPT09IFRJTERBX0NIQVIpIHtcbiAgICAgIHRoaXMuZW9mID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBidWZmZXJMZW5ndGggPSB0aGlzLmJ1ZmZlckxlbmd0aDtcbiAgICBsZXQgYnVmZmVyLCBpO1xuXG4gICAgaWYgKGMgPT09IFpfTE9XRVJfQ0hBUikge1xuICAgICAgYnVmZmVyID0gdGhpcy5lbnN1cmVCdWZmZXIoYnVmZmVyTGVuZ3RoICsgNCk7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCA0OyArK2kpIHtcbiAgICAgICAgYnVmZmVyW2J1ZmZlckxlbmd0aCArIGldID0gMDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5idWZmZXJMZW5ndGggKz0gNDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmlucHV0O1xuICAgICAgaW5wdXRbMF0gPSBjO1xuXG4gICAgICBmb3IgKGkgPSAxOyBpIDwgNTsgKytpKSB7XG4gICAgICAgIGMgPSBzdHIuZ2V0Qnl0ZSgpO1xuXG4gICAgICAgIHdoaWxlICgoMCwgX2NvcmVfdXRpbHMuaXNXaGl0ZVNwYWNlKShjKSkge1xuICAgICAgICAgIGMgPSBzdHIuZ2V0Qnl0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5wdXRbaV0gPSBjO1xuXG4gICAgICAgIGlmIChjID09PSBFT0YgfHwgYyA9PT0gVElMREFfQ0hBUikge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGJ1ZmZlciA9IHRoaXMuZW5zdXJlQnVmZmVyKGJ1ZmZlckxlbmd0aCArIGkgLSAxKTtcbiAgICAgIHRoaXMuYnVmZmVyTGVuZ3RoICs9IGkgLSAxO1xuXG4gICAgICBpZiAoaSA8IDUpIHtcbiAgICAgICAgZm9yICg7IGkgPCA1OyArK2kpIHtcbiAgICAgICAgICBpbnB1dFtpXSA9IDB4MjEgKyA4NDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZW9mID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgbGV0IHQgPSAwO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgNTsgKytpKSB7XG4gICAgICAgIHQgPSB0ICogODUgKyAoaW5wdXRbaV0gLSAweDIxKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChpID0gMzsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgYnVmZmVyW2J1ZmZlckxlbmd0aCArIGldID0gdCAmIDB4ZmY7XG4gICAgICAgIHQgPj49IDg7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbn1cblxuZXhwb3J0cy5Bc2NpaTg1U3RyZWFtID0gQXNjaWk4NVN0cmVhbTtcblxuLyoqKi8gfSksXG4vKiAyOSAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5TdHJlYW1zU2VxdWVuY2VTdHJlYW0gPSBleHBvcnRzLkRlY29kZVN0cmVhbSA9IHZvaWQgMDtcblxudmFyIF9iYXNlX3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oNik7XG5cbnZhciBfc3RyZWFtID0gX193X3BkZmpzX3JlcXVpcmVfXygxMCk7XG5cbmNvbnN0IGVtcHR5QnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoMCk7XG5cbmNsYXNzIERlY29kZVN0cmVhbSBleHRlbmRzIF9iYXNlX3N0cmVhbS5CYXNlU3RyZWFtIHtcbiAgY29uc3RydWN0b3IobWF5YmVNaW5CdWZmZXJMZW5ndGgpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX3Jhd01pbkJ1ZmZlckxlbmd0aCA9IG1heWJlTWluQnVmZmVyTGVuZ3RoIHx8IDA7XG4gICAgdGhpcy5wb3MgPSAwO1xuICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gMDtcbiAgICB0aGlzLmVvZiA9IGZhbHNlO1xuICAgIHRoaXMuYnVmZmVyID0gZW1wdHlCdWZmZXI7XG4gICAgdGhpcy5taW5CdWZmZXJMZW5ndGggPSA1MTI7XG5cbiAgICBpZiAobWF5YmVNaW5CdWZmZXJMZW5ndGgpIHtcbiAgICAgIHdoaWxlICh0aGlzLm1pbkJ1ZmZlckxlbmd0aCA8IG1heWJlTWluQnVmZmVyTGVuZ3RoKSB7XG4gICAgICAgIHRoaXMubWluQnVmZmVyTGVuZ3RoICo9IDI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IGlzRW1wdHkoKSB7XG4gICAgd2hpbGUgKCF0aGlzLmVvZiAmJiB0aGlzLmJ1ZmZlckxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5yZWFkQmxvY2soKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5idWZmZXJMZW5ndGggPT09IDA7XG4gIH1cblxuICBlbnN1cmVCdWZmZXIocmVxdWVzdGVkKSB7XG4gICAgY29uc3QgYnVmZmVyID0gdGhpcy5idWZmZXI7XG5cbiAgICBpZiAocmVxdWVzdGVkIDw9IGJ1ZmZlci5ieXRlTGVuZ3RoKSB7XG4gICAgICByZXR1cm4gYnVmZmVyO1xuICAgIH1cblxuICAgIGxldCBzaXplID0gdGhpcy5taW5CdWZmZXJMZW5ndGg7XG5cbiAgICB3aGlsZSAoc2l6ZSA8IHJlcXVlc3RlZCkge1xuICAgICAgc2l6ZSAqPSAyO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlcjIgPSBuZXcgVWludDhBcnJheShzaXplKTtcbiAgICBidWZmZXIyLnNldChidWZmZXIpO1xuICAgIHJldHVybiB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjI7XG4gIH1cblxuICBnZXRCeXRlKCkge1xuICAgIGNvbnN0IHBvcyA9IHRoaXMucG9zO1xuXG4gICAgd2hpbGUgKHRoaXMuYnVmZmVyTGVuZ3RoIDw9IHBvcykge1xuICAgICAgaWYgKHRoaXMuZW9mKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZWFkQmxvY2soKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5idWZmZXJbdGhpcy5wb3MrK107XG4gIH1cblxuICBnZXRCeXRlcyhsZW5ndGgsIGZvcmNlQ2xhbXBlZCA9IGZhbHNlKSB7XG4gICAgY29uc3QgcG9zID0gdGhpcy5wb3M7XG4gICAgbGV0IGVuZDtcblxuICAgIGlmIChsZW5ndGgpIHtcbiAgICAgIHRoaXMuZW5zdXJlQnVmZmVyKHBvcyArIGxlbmd0aCk7XG4gICAgICBlbmQgPSBwb3MgKyBsZW5ndGg7XG5cbiAgICAgIHdoaWxlICghdGhpcy5lb2YgJiYgdGhpcy5idWZmZXJMZW5ndGggPCBlbmQpIHtcbiAgICAgICAgdGhpcy5yZWFkQmxvY2soKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYnVmRW5kID0gdGhpcy5idWZmZXJMZW5ndGg7XG5cbiAgICAgIGlmIChlbmQgPiBidWZFbmQpIHtcbiAgICAgICAgZW5kID0gYnVmRW5kO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB3aGlsZSAoIXRoaXMuZW9mKSB7XG4gICAgICAgIHRoaXMucmVhZEJsb2NrKCk7XG4gICAgICB9XG5cbiAgICAgIGVuZCA9IHRoaXMuYnVmZmVyTGVuZ3RoO1xuICAgIH1cblxuICAgIHRoaXMucG9zID0gZW5kO1xuICAgIGNvbnN0IHN1YmFycmF5ID0gdGhpcy5idWZmZXIuc3ViYXJyYXkocG9zLCBlbmQpO1xuICAgIHJldHVybiBmb3JjZUNsYW1wZWQgJiYgIShzdWJhcnJheSBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5KSA/IG5ldyBVaW50OENsYW1wZWRBcnJheShzdWJhcnJheSkgOiBzdWJhcnJheTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMucG9zID0gMDtcbiAgfVxuXG4gIG1ha2VTdWJTdHJlYW0oc3RhcnQsIGxlbmd0aCwgZGljdCA9IG51bGwpIHtcbiAgICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHdoaWxlICghdGhpcy5lb2YpIHtcbiAgICAgICAgdGhpcy5yZWFkQmxvY2soKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZW5kID0gc3RhcnQgKyBsZW5ndGg7XG5cbiAgICAgIHdoaWxlICh0aGlzLmJ1ZmZlckxlbmd0aCA8PSBlbmQgJiYgIXRoaXMuZW9mKSB7XG4gICAgICAgIHRoaXMucmVhZEJsb2NrKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBfc3RyZWFtLlN0cmVhbSh0aGlzLmJ1ZmZlciwgc3RhcnQsIGxlbmd0aCwgZGljdCk7XG4gIH1cblxuICBnZXRCYXNlU3RyZWFtcygpIHtcbiAgICByZXR1cm4gdGhpcy5zdHIgPyB0aGlzLnN0ci5nZXRCYXNlU3RyZWFtcygpIDogbnVsbDtcbiAgfVxuXG59XG5cbmV4cG9ydHMuRGVjb2RlU3RyZWFtID0gRGVjb2RlU3RyZWFtO1xuXG5jbGFzcyBTdHJlYW1zU2VxdWVuY2VTdHJlYW0gZXh0ZW5kcyBEZWNvZGVTdHJlYW0ge1xuICBjb25zdHJ1Y3RvcihzdHJlYW1zLCBvbkVycm9yID0gbnVsbCkge1xuICAgIGxldCBtYXliZUxlbmd0aCA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IHN0cmVhbSBvZiBzdHJlYW1zKSB7XG4gICAgICBtYXliZUxlbmd0aCArPSBzdHJlYW0gaW5zdGFuY2VvZiBEZWNvZGVTdHJlYW0gPyBzdHJlYW0uX3Jhd01pbkJ1ZmZlckxlbmd0aCA6IHN0cmVhbS5sZW5ndGg7XG4gICAgfVxuXG4gICAgc3VwZXIobWF5YmVMZW5ndGgpO1xuICAgIHRoaXMuc3RyZWFtcyA9IHN0cmVhbXM7XG4gICAgdGhpcy5fb25FcnJvciA9IG9uRXJyb3I7XG4gIH1cblxuICByZWFkQmxvY2soKSB7XG4gICAgY29uc3Qgc3RyZWFtcyA9IHRoaXMuc3RyZWFtcztcblxuICAgIGlmIChzdHJlYW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHN0cmVhbSA9IHN0cmVhbXMuc2hpZnQoKTtcbiAgICBsZXQgY2h1bms7XG5cbiAgICB0cnkge1xuICAgICAgY2h1bmsgPSBzdHJlYW0uZ2V0Qnl0ZXMoKTtcbiAgICB9IGNhdGNoIChyZWFzb24pIHtcbiAgICAgIGlmICh0aGlzLl9vbkVycm9yKSB7XG4gICAgICAgIHRoaXMuX29uRXJyb3IocmVhc29uLCBzdHJlYW0uZGljdCAmJiBzdHJlYW0uZGljdC5vYmpJZCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyByZWFzb247XG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyTGVuZ3RoID0gdGhpcy5idWZmZXJMZW5ndGg7XG4gICAgY29uc3QgbmV3TGVuZ3RoID0gYnVmZmVyTGVuZ3RoICsgY2h1bmsubGVuZ3RoO1xuICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMuZW5zdXJlQnVmZmVyKG5ld0xlbmd0aCk7XG4gICAgYnVmZmVyLnNldChjaHVuaywgYnVmZmVyTGVuZ3RoKTtcbiAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IG5ld0xlbmd0aDtcbiAgfVxuXG4gIGdldEJhc2VTdHJlYW1zKCkge1xuICAgIGNvbnN0IGJhc2VTdHJlYW1zQnVmID0gW107XG5cbiAgICBmb3IgKGNvbnN0IHN0cmVhbSBvZiB0aGlzLnN0cmVhbXMpIHtcbiAgICAgIGNvbnN0IGJhc2VTdHJlYW1zID0gc3RyZWFtLmdldEJhc2VTdHJlYW1zKCk7XG5cbiAgICAgIGlmIChiYXNlU3RyZWFtcykge1xuICAgICAgICBiYXNlU3RyZWFtc0J1Zi5wdXNoKC4uLmJhc2VTdHJlYW1zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVN0cmVhbXNCdWYubGVuZ3RoID4gMCA/IGJhc2VTdHJlYW1zQnVmIDogbnVsbDtcbiAgfVxuXG59XG5cbmV4cG9ydHMuU3RyZWFtc1NlcXVlbmNlU3RyZWFtID0gU3RyZWFtc1NlcXVlbmNlU3RyZWFtO1xuXG4vKioqLyB9KSxcbi8qIDMwICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLkFzY2lpSGV4U3RyZWFtID0gdm9pZCAwO1xuXG52YXIgX2RlY29kZV9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDI5KTtcblxuY2xhc3MgQXNjaWlIZXhTdHJlYW0gZXh0ZW5kcyBfZGVjb2RlX3N0cmVhbS5EZWNvZGVTdHJlYW0ge1xuICBjb25zdHJ1Y3RvcihzdHIsIG1heWJlTGVuZ3RoKSB7XG4gICAgaWYgKG1heWJlTGVuZ3RoKSB7XG4gICAgICBtYXliZUxlbmd0aCAqPSAwLjU7XG4gICAgfVxuXG4gICAgc3VwZXIobWF5YmVMZW5ndGgpO1xuICAgIHRoaXMuc3RyID0gc3RyO1xuICAgIHRoaXMuZGljdCA9IHN0ci5kaWN0O1xuICAgIHRoaXMuZmlyc3REaWdpdCA9IC0xO1xuICB9XG5cbiAgcmVhZEJsb2NrKCkge1xuICAgIGNvbnN0IFVQU1RSRUFNX0JMT0NLX1NJWkUgPSA4MDAwO1xuICAgIGNvbnN0IGJ5dGVzID0gdGhpcy5zdHIuZ2V0Qnl0ZXMoVVBTVFJFQU1fQkxPQ0tfU0laRSk7XG5cbiAgICBpZiAoIWJ5dGVzLmxlbmd0aCkge1xuICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG1heERlY29kZUxlbmd0aCA9IGJ5dGVzLmxlbmd0aCArIDEgPj4gMTtcbiAgICBjb25zdCBidWZmZXIgPSB0aGlzLmVuc3VyZUJ1ZmZlcih0aGlzLmJ1ZmZlckxlbmd0aCArIG1heERlY29kZUxlbmd0aCk7XG4gICAgbGV0IGJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyTGVuZ3RoO1xuICAgIGxldCBmaXJzdERpZ2l0ID0gdGhpcy5maXJzdERpZ2l0O1xuXG4gICAgZm9yIChjb25zdCBjaCBvZiBieXRlcykge1xuICAgICAgbGV0IGRpZ2l0O1xuXG4gICAgICBpZiAoY2ggPj0gMHgzMCAmJiBjaCA8PSAweDM5KSB7XG4gICAgICAgIGRpZ2l0ID0gY2ggJiAweDBmO1xuICAgICAgfSBlbHNlIGlmIChjaCA+PSAweDQxICYmIGNoIDw9IDB4NDYgfHwgY2ggPj0gMHg2MSAmJiBjaCA8PSAweDY2KSB7XG4gICAgICAgIGRpZ2l0ID0gKGNoICYgMHgwZikgKyA5O1xuICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgzZSkge1xuICAgICAgICB0aGlzLmVvZiA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChmaXJzdERpZ2l0IDwgMCkge1xuICAgICAgICBmaXJzdERpZ2l0ID0gZGlnaXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBidWZmZXJbYnVmZmVyTGVuZ3RoKytdID0gZmlyc3REaWdpdCA8PCA0IHwgZGlnaXQ7XG4gICAgICAgIGZpcnN0RGlnaXQgPSAtMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZmlyc3REaWdpdCA+PSAwICYmIHRoaXMuZW9mKSB7XG4gICAgICBidWZmZXJbYnVmZmVyTGVuZ3RoKytdID0gZmlyc3REaWdpdCA8PCA0O1xuICAgICAgZmlyc3REaWdpdCA9IC0xO1xuICAgIH1cblxuICAgIHRoaXMuZmlyc3REaWdpdCA9IGZpcnN0RGlnaXQ7XG4gICAgdGhpcy5idWZmZXJMZW5ndGggPSBidWZmZXJMZW5ndGg7XG4gIH1cblxufVxuXG5leHBvcnRzLkFzY2lpSGV4U3RyZWFtID0gQXNjaWlIZXhTdHJlYW07XG5cbi8qKiovIH0pLFxuLyogMzEgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuQ0NJVFRGYXhTdHJlYW0gPSB2b2lkIDA7XG5cbnZhciBfcHJpbWl0aXZlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNSk7XG5cbnZhciBfY2NpdHQgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDMyKTtcblxudmFyIF9kZWNvZGVfc3RyZWFtID0gX193X3BkZmpzX3JlcXVpcmVfXygyOSk7XG5cbmNsYXNzIENDSVRURmF4U3RyZWFtIGV4dGVuZHMgX2RlY29kZV9zdHJlYW0uRGVjb2RlU3RyZWFtIHtcbiAgY29uc3RydWN0b3Ioc3RyLCBtYXliZUxlbmd0aCwgcGFyYW1zKSB7XG4gICAgc3VwZXIobWF5YmVMZW5ndGgpO1xuICAgIHRoaXMuc3RyID0gc3RyO1xuICAgIHRoaXMuZGljdCA9IHN0ci5kaWN0O1xuXG4gICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShwYXJhbXMpKSB7XG4gICAgICBwYXJhbXMgPSBfcHJpbWl0aXZlcy5EaWN0LmVtcHR5O1xuICAgIH1cblxuICAgIGNvbnN0IHNvdXJjZSA9IHtcbiAgICAgIG5leHQoKSB7XG4gICAgICAgIHJldHVybiBzdHIuZ2V0Qnl0ZSgpO1xuICAgICAgfVxuXG4gICAgfTtcbiAgICB0aGlzLmNjaXR0RmF4RGVjb2RlciA9IG5ldyBfY2NpdHQuQ0NJVFRGYXhEZWNvZGVyKHNvdXJjZSwge1xuICAgICAgSzogcGFyYW1zLmdldChcIktcIiksXG4gICAgICBFbmRPZkxpbmU6IHBhcmFtcy5nZXQoXCJFbmRPZkxpbmVcIiksXG4gICAgICBFbmNvZGVkQnl0ZUFsaWduOiBwYXJhbXMuZ2V0KFwiRW5jb2RlZEJ5dGVBbGlnblwiKSxcbiAgICAgIENvbHVtbnM6IHBhcmFtcy5nZXQoXCJDb2x1bW5zXCIpLFxuICAgICAgUm93czogcGFyYW1zLmdldChcIlJvd3NcIiksXG4gICAgICBFbmRPZkJsb2NrOiBwYXJhbXMuZ2V0KFwiRW5kT2ZCbG9ja1wiKSxcbiAgICAgIEJsYWNrSXMxOiBwYXJhbXMuZ2V0KFwiQmxhY2tJczFcIilcbiAgICB9KTtcbiAgfVxuXG4gIHJlYWRCbG9jaygpIHtcbiAgICB3aGlsZSAoIXRoaXMuZW9mKSB7XG4gICAgICBjb25zdCBjID0gdGhpcy5jY2l0dEZheERlY29kZXIucmVhZE5leHRDaGFyKCk7XG5cbiAgICAgIGlmIChjID09PSAtMSkge1xuICAgICAgICB0aGlzLmVvZiA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5lbnN1cmVCdWZmZXIodGhpcy5idWZmZXJMZW5ndGggKyAxKTtcbiAgICAgIHRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyTGVuZ3RoKytdID0gYztcbiAgICB9XG4gIH1cblxufVxuXG5leHBvcnRzLkNDSVRURmF4U3RyZWFtID0gQ0NJVFRGYXhTdHJlYW07XG5cbi8qKiovIH0pLFxuLyogMzIgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuQ0NJVFRGYXhEZWNvZGVyID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5jb25zdCBjY2l0dEVPTCA9IC0yO1xuY29uc3QgY2NpdHRFT0YgPSAtMTtcbmNvbnN0IHR3b0RpbVBhc3MgPSAwO1xuY29uc3QgdHdvRGltSG9yaXogPSAxO1xuY29uc3QgdHdvRGltVmVydDAgPSAyO1xuY29uc3QgdHdvRGltVmVydFIxID0gMztcbmNvbnN0IHR3b0RpbVZlcnRMMSA9IDQ7XG5jb25zdCB0d29EaW1WZXJ0UjIgPSA1O1xuY29uc3QgdHdvRGltVmVydEwyID0gNjtcbmNvbnN0IHR3b0RpbVZlcnRSMyA9IDc7XG5jb25zdCB0d29EaW1WZXJ0TDMgPSA4O1xuY29uc3QgdHdvRGltVGFibGUgPSBbWy0xLCAtMV0sIFstMSwgLTFdLCBbNywgdHdvRGltVmVydEwzXSwgWzcsIHR3b0RpbVZlcnRSM10sIFs2LCB0d29EaW1WZXJ0TDJdLCBbNiwgdHdvRGltVmVydEwyXSwgWzYsIHR3b0RpbVZlcnRSMl0sIFs2LCB0d29EaW1WZXJ0UjJdLCBbNCwgdHdvRGltUGFzc10sIFs0LCB0d29EaW1QYXNzXSwgWzQsIHR3b0RpbVBhc3NdLCBbNCwgdHdvRGltUGFzc10sIFs0LCB0d29EaW1QYXNzXSwgWzQsIHR3b0RpbVBhc3NdLCBbNCwgdHdvRGltUGFzc10sIFs0LCB0d29EaW1QYXNzXSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbUhvcml6XSwgWzMsIHR3b0RpbVZlcnRMMV0sIFszLCB0d29EaW1WZXJ0TDFdLCBbMywgdHdvRGltVmVydEwxXSwgWzMsIHR3b0RpbVZlcnRMMV0sIFszLCB0d29EaW1WZXJ0TDFdLCBbMywgdHdvRGltVmVydEwxXSwgWzMsIHR3b0RpbVZlcnRMMV0sIFszLCB0d29EaW1WZXJ0TDFdLCBbMywgdHdvRGltVmVydEwxXSwgWzMsIHR3b0RpbVZlcnRMMV0sIFszLCB0d29EaW1WZXJ0TDFdLCBbMywgdHdvRGltVmVydEwxXSwgWzMsIHR3b0RpbVZlcnRMMV0sIFszLCB0d29EaW1WZXJ0TDFdLCBbMywgdHdvRGltVmVydEwxXSwgWzMsIHR3b0RpbVZlcnRMMV0sIFszLCB0d29EaW1WZXJ0UjFdLCBbMywgdHdvRGltVmVydFIxXSwgWzMsIHR3b0RpbVZlcnRSMV0sIFszLCB0d29EaW1WZXJ0UjFdLCBbMywgdHdvRGltVmVydFIxXSwgWzMsIHR3b0RpbVZlcnRSMV0sIFszLCB0d29EaW1WZXJ0UjFdLCBbMywgdHdvRGltVmVydFIxXSwgWzMsIHR3b0RpbVZlcnRSMV0sIFszLCB0d29EaW1WZXJ0UjFdLCBbMywgdHdvRGltVmVydFIxXSwgWzMsIHR3b0RpbVZlcnRSMV0sIFszLCB0d29EaW1WZXJ0UjFdLCBbMywgdHdvRGltVmVydFIxXSwgWzMsIHR3b0RpbVZlcnRSMV0sIFszLCB0d29EaW1WZXJ0UjFdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdLCBbMSwgdHdvRGltVmVydDBdXTtcbmNvbnN0IHdoaXRlVGFibGUxID0gW1stMSwgLTFdLCBbMTIsIGNjaXR0RU9MXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbMTEsIDE3OTJdLCBbMTEsIDE3OTJdLCBbMTIsIDE5ODRdLCBbMTIsIDIwNDhdLCBbMTIsIDIxMTJdLCBbMTIsIDIxNzZdLCBbMTIsIDIyNDBdLCBbMTIsIDIzMDRdLCBbMTEsIDE4NTZdLCBbMTEsIDE4NTZdLCBbMTEsIDE5MjBdLCBbMTEsIDE5MjBdLCBbMTIsIDIzNjhdLCBbMTIsIDI0MzJdLCBbMTIsIDI0OTZdLCBbMTIsIDI1NjBdXTtcbmNvbnN0IHdoaXRlVGFibGUyID0gW1stMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbOCwgMjldLCBbOCwgMjldLCBbOCwgMzBdLCBbOCwgMzBdLCBbOCwgNDVdLCBbOCwgNDVdLCBbOCwgNDZdLCBbOCwgNDZdLCBbNywgMjJdLCBbNywgMjJdLCBbNywgMjJdLCBbNywgMjJdLCBbNywgMjNdLCBbNywgMjNdLCBbNywgMjNdLCBbNywgMjNdLCBbOCwgNDddLCBbOCwgNDddLCBbOCwgNDhdLCBbOCwgNDhdLCBbNiwgMTNdLCBbNiwgMTNdLCBbNiwgMTNdLCBbNiwgMTNdLCBbNiwgMTNdLCBbNiwgMTNdLCBbNiwgMTNdLCBbNiwgMTNdLCBbNywgMjBdLCBbNywgMjBdLCBbNywgMjBdLCBbNywgMjBdLCBbOCwgMzNdLCBbOCwgMzNdLCBbOCwgMzRdLCBbOCwgMzRdLCBbOCwgMzVdLCBbOCwgMzVdLCBbOCwgMzZdLCBbOCwgMzZdLCBbOCwgMzddLCBbOCwgMzddLCBbOCwgMzhdLCBbOCwgMzhdLCBbNywgMTldLCBbNywgMTldLCBbNywgMTldLCBbNywgMTldLCBbOCwgMzFdLCBbOCwgMzFdLCBbOCwgMzJdLCBbOCwgMzJdLCBbNiwgMV0sIFs2LCAxXSwgWzYsIDFdLCBbNiwgMV0sIFs2LCAxXSwgWzYsIDFdLCBbNiwgMV0sIFs2LCAxXSwgWzYsIDEyXSwgWzYsIDEyXSwgWzYsIDEyXSwgWzYsIDEyXSwgWzYsIDEyXSwgWzYsIDEyXSwgWzYsIDEyXSwgWzYsIDEyXSwgWzgsIDUzXSwgWzgsIDUzXSwgWzgsIDU0XSwgWzgsIDU0XSwgWzcsIDI2XSwgWzcsIDI2XSwgWzcsIDI2XSwgWzcsIDI2XSwgWzgsIDM5XSwgWzgsIDM5XSwgWzgsIDQwXSwgWzgsIDQwXSwgWzgsIDQxXSwgWzgsIDQxXSwgWzgsIDQyXSwgWzgsIDQyXSwgWzgsIDQzXSwgWzgsIDQzXSwgWzgsIDQ0XSwgWzgsIDQ0XSwgWzcsIDIxXSwgWzcsIDIxXSwgWzcsIDIxXSwgWzcsIDIxXSwgWzcsIDI4XSwgWzcsIDI4XSwgWzcsIDI4XSwgWzcsIDI4XSwgWzgsIDYxXSwgWzgsIDYxXSwgWzgsIDYyXSwgWzgsIDYyXSwgWzgsIDYzXSwgWzgsIDYzXSwgWzgsIDBdLCBbOCwgMF0sIFs4LCAzMjBdLCBbOCwgMzIwXSwgWzgsIDM4NF0sIFs4LCAzODRdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTBdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNSwgMTFdLCBbNywgMjddLCBbNywgMjddLCBbNywgMjddLCBbNywgMjddLCBbOCwgNTldLCBbOCwgNTldLCBbOCwgNjBdLCBbOCwgNjBdLCBbOSwgMTQ3Ml0sIFs5LCAxNTM2XSwgWzksIDE2MDBdLCBbOSwgMTcyOF0sIFs3LCAxOF0sIFs3LCAxOF0sIFs3LCAxOF0sIFs3LCAxOF0sIFs3LCAyNF0sIFs3LCAyNF0sIFs3LCAyNF0sIFs3LCAyNF0sIFs4LCA0OV0sIFs4LCA0OV0sIFs4LCA1MF0sIFs4LCA1MF0sIFs4LCA1MV0sIFs4LCA1MV0sIFs4LCA1Ml0sIFs4LCA1Ml0sIFs3LCAyNV0sIFs3LCAyNV0sIFs3LCAyNV0sIFs3LCAyNV0sIFs4LCA1NV0sIFs4LCA1NV0sIFs4LCA1Nl0sIFs4LCA1Nl0sIFs4LCA1N10sIFs4LCA1N10sIFs4LCA1OF0sIFs4LCA1OF0sIFs2LCAxOTJdLCBbNiwgMTkyXSwgWzYsIDE5Ml0sIFs2LCAxOTJdLCBbNiwgMTkyXSwgWzYsIDE5Ml0sIFs2LCAxOTJdLCBbNiwgMTkyXSwgWzYsIDE2NjRdLCBbNiwgMTY2NF0sIFs2LCAxNjY0XSwgWzYsIDE2NjRdLCBbNiwgMTY2NF0sIFs2LCAxNjY0XSwgWzYsIDE2NjRdLCBbNiwgMTY2NF0sIFs4LCA0NDhdLCBbOCwgNDQ4XSwgWzgsIDUxMl0sIFs4LCA1MTJdLCBbOSwgNzA0XSwgWzksIDc2OF0sIFs4LCA2NDBdLCBbOCwgNjQwXSwgWzgsIDU3Nl0sIFs4LCA1NzZdLCBbOSwgODMyXSwgWzksIDg5Nl0sIFs5LCA5NjBdLCBbOSwgMTAyNF0sIFs5LCAxMDg4XSwgWzksIDExNTJdLCBbOSwgMTIxNl0sIFs5LCAxMjgwXSwgWzksIDEzNDRdLCBbOSwgMTQwOF0sIFs3LCAyNTZdLCBbNywgMjU2XSwgWzcsIDI1Nl0sIFs3LCAyNTZdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs1LCAxMjhdLCBbNSwgMTI4XSwgWzUsIDEyOF0sIFs1LCAxMjhdLCBbNSwgMTI4XSwgWzUsIDEyOF0sIFs1LCAxMjhdLCBbNSwgMTI4XSwgWzUsIDEyOF0sIFs1LCAxMjhdLCBbNSwgMTI4XSwgWzUsIDEyOF0sIFs1LCAxMjhdLCBbNSwgMTI4XSwgWzUsIDEyOF0sIFs1LCAxMjhdLCBbNSwgOF0sIFs1LCA4XSwgWzUsIDhdLCBbNSwgOF0sIFs1LCA4XSwgWzUsIDhdLCBbNSwgOF0sIFs1LCA4XSwgWzUsIDhdLCBbNSwgOF0sIFs1LCA4XSwgWzUsIDhdLCBbNSwgOF0sIFs1LCA4XSwgWzUsIDhdLCBbNSwgOF0sIFs1LCA5XSwgWzUsIDldLCBbNSwgOV0sIFs1LCA5XSwgWzUsIDldLCBbNSwgOV0sIFs1LCA5XSwgWzUsIDldLCBbNSwgOV0sIFs1LCA5XSwgWzUsIDldLCBbNSwgOV0sIFs1LCA5XSwgWzUsIDldLCBbNSwgOV0sIFs1LCA5XSwgWzYsIDE2XSwgWzYsIDE2XSwgWzYsIDE2XSwgWzYsIDE2XSwgWzYsIDE2XSwgWzYsIDE2XSwgWzYsIDE2XSwgWzYsIDE2XSwgWzYsIDE3XSwgWzYsIDE3XSwgWzYsIDE3XSwgWzYsIDE3XSwgWzYsIDE3XSwgWzYsIDE3XSwgWzYsIDE3XSwgWzYsIDE3XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNiwgMTRdLCBbNiwgMTRdLCBbNiwgMTRdLCBbNiwgMTRdLCBbNiwgMTRdLCBbNiwgMTRdLCBbNiwgMTRdLCBbNiwgMTRdLCBbNiwgMTVdLCBbNiwgMTVdLCBbNiwgMTVdLCBbNiwgMTVdLCBbNiwgMTVdLCBbNiwgMTVdLCBbNiwgMTVdLCBbNiwgMTVdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNSwgNjRdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN11dO1xuY29uc3QgYmxhY2tUYWJsZTEgPSBbWy0xLCAtMV0sIFstMSwgLTFdLCBbMTIsIGNjaXR0RU9MXSwgWzEyLCBjY2l0dEVPTF0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbMTEsIDE3OTJdLCBbMTEsIDE3OTJdLCBbMTEsIDE3OTJdLCBbMTEsIDE3OTJdLCBbMTIsIDE5ODRdLCBbMTIsIDE5ODRdLCBbMTIsIDIwNDhdLCBbMTIsIDIwNDhdLCBbMTIsIDIxMTJdLCBbMTIsIDIxMTJdLCBbMTIsIDIxNzZdLCBbMTIsIDIxNzZdLCBbMTIsIDIyNDBdLCBbMTIsIDIyNDBdLCBbMTIsIDIzMDRdLCBbMTIsIDIzMDRdLCBbMTEsIDE4NTZdLCBbMTEsIDE4NTZdLCBbMTEsIDE4NTZdLCBbMTEsIDE4NTZdLCBbMTEsIDE5MjBdLCBbMTEsIDE5MjBdLCBbMTEsIDE5MjBdLCBbMTEsIDE5MjBdLCBbMTIsIDIzNjhdLCBbMTIsIDIzNjhdLCBbMTIsIDI0MzJdLCBbMTIsIDI0MzJdLCBbMTIsIDI0OTZdLCBbMTIsIDI0OTZdLCBbMTIsIDI1NjBdLCBbMTIsIDI1NjBdLCBbMTAsIDE4XSwgWzEwLCAxOF0sIFsxMCwgMThdLCBbMTAsIDE4XSwgWzEwLCAxOF0sIFsxMCwgMThdLCBbMTAsIDE4XSwgWzEwLCAxOF0sIFsxMiwgNTJdLCBbMTIsIDUyXSwgWzEzLCA2NDBdLCBbMTMsIDcwNF0sIFsxMywgNzY4XSwgWzEzLCA4MzJdLCBbMTIsIDU1XSwgWzEyLCA1NV0sIFsxMiwgNTZdLCBbMTIsIDU2XSwgWzEzLCAxMjgwXSwgWzEzLCAxMzQ0XSwgWzEzLCAxNDA4XSwgWzEzLCAxNDcyXSwgWzEyLCA1OV0sIFsxMiwgNTldLCBbMTIsIDYwXSwgWzEyLCA2MF0sIFsxMywgMTUzNl0sIFsxMywgMTYwMF0sIFsxMSwgMjRdLCBbMTEsIDI0XSwgWzExLCAyNF0sIFsxMSwgMjRdLCBbMTEsIDI1XSwgWzExLCAyNV0sIFsxMSwgMjVdLCBbMTEsIDI1XSwgWzEzLCAxNjY0XSwgWzEzLCAxNzI4XSwgWzEyLCAzMjBdLCBbMTIsIDMyMF0sIFsxMiwgMzg0XSwgWzEyLCAzODRdLCBbMTIsIDQ0OF0sIFsxMiwgNDQ4XSwgWzEzLCA1MTJdLCBbMTMsIDU3Nl0sIFsxMiwgNTNdLCBbMTIsIDUzXSwgWzEyLCA1NF0sIFsxMiwgNTRdLCBbMTMsIDg5Nl0sIFsxMywgOTYwXSwgWzEzLCAxMDI0XSwgWzEzLCAxMDg4XSwgWzEzLCAxMTUyXSwgWzEzLCAxMjE2XSwgWzEwLCA2NF0sIFsxMCwgNjRdLCBbMTAsIDY0XSwgWzEwLCA2NF0sIFsxMCwgNjRdLCBbMTAsIDY0XSwgWzEwLCA2NF0sIFsxMCwgNjRdXTtcbmNvbnN0IGJsYWNrVGFibGUyID0gW1s4LCAxM10sIFs4LCAxM10sIFs4LCAxM10sIFs4LCAxM10sIFs4LCAxM10sIFs4LCAxM10sIFs4LCAxM10sIFs4LCAxM10sIFs4LCAxM10sIFs4LCAxM10sIFs4LCAxM10sIFs4LCAxM10sIFs4LCAxM10sIFs4LCAxM10sIFs4LCAxM10sIFs4LCAxM10sIFsxMSwgMjNdLCBbMTEsIDIzXSwgWzEyLCA1MF0sIFsxMiwgNTFdLCBbMTIsIDQ0XSwgWzEyLCA0NV0sIFsxMiwgNDZdLCBbMTIsIDQ3XSwgWzEyLCA1N10sIFsxMiwgNThdLCBbMTIsIDYxXSwgWzEyLCAyNTZdLCBbMTAsIDE2XSwgWzEwLCAxNl0sIFsxMCwgMTZdLCBbMTAsIDE2XSwgWzEwLCAxN10sIFsxMCwgMTddLCBbMTAsIDE3XSwgWzEwLCAxN10sIFsxMiwgNDhdLCBbMTIsIDQ5XSwgWzEyLCA2Ml0sIFsxMiwgNjNdLCBbMTIsIDMwXSwgWzEyLCAzMV0sIFsxMiwgMzJdLCBbMTIsIDMzXSwgWzEyLCA0MF0sIFsxMiwgNDFdLCBbMTEsIDIyXSwgWzExLCAyMl0sIFs4LCAxNF0sIFs4LCAxNF0sIFs4LCAxNF0sIFs4LCAxNF0sIFs4LCAxNF0sIFs4LCAxNF0sIFs4LCAxNF0sIFs4LCAxNF0sIFs4LCAxNF0sIFs4LCAxNF0sIFs4LCAxNF0sIFs4LCAxNF0sIFs4LCAxNF0sIFs4LCAxNF0sIFs4LCAxNF0sIFs4LCAxNF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMF0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs3LCAxMV0sIFs5LCAxNV0sIFs5LCAxNV0sIFs5LCAxNV0sIFs5LCAxNV0sIFs5LCAxNV0sIFs5LCAxNV0sIFs5LCAxNV0sIFs5LCAxNV0sIFsxMiwgMTI4XSwgWzEyLCAxOTJdLCBbMTIsIDI2XSwgWzEyLCAyN10sIFsxMiwgMjhdLCBbMTIsIDI5XSwgWzExLCAxOV0sIFsxMSwgMTldLCBbMTEsIDIwXSwgWzExLCAyMF0sIFsxMiwgMzRdLCBbMTIsIDM1XSwgWzEyLCAzNl0sIFsxMiwgMzddLCBbMTIsIDM4XSwgWzEyLCAzOV0sIFsxMSwgMjFdLCBbMTEsIDIxXSwgWzEyLCA0Ml0sIFsxMiwgNDNdLCBbMTAsIDBdLCBbMTAsIDBdLCBbMTAsIDBdLCBbMTAsIDBdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdLCBbNywgMTJdXTtcbmNvbnN0IGJsYWNrVGFibGUzID0gW1stMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbNiwgOV0sIFs2LCA4XSwgWzUsIDddLCBbNSwgN10sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbMywgMV0sIFszLCAxXSwgWzMsIDFdLCBbMywgMV0sIFszLCAxXSwgWzMsIDFdLCBbMywgMV0sIFszLCAxXSwgWzMsIDRdLCBbMywgNF0sIFszLCA0XSwgWzMsIDRdLCBbMywgNF0sIFszLCA0XSwgWzMsIDRdLCBbMywgNF0sIFsyLCAzXSwgWzIsIDNdLCBbMiwgM10sIFsyLCAzXSwgWzIsIDNdLCBbMiwgM10sIFsyLCAzXSwgWzIsIDNdLCBbMiwgM10sIFsyLCAzXSwgWzIsIDNdLCBbMiwgM10sIFsyLCAzXSwgWzIsIDNdLCBbMiwgM10sIFsyLCAzXSwgWzIsIDJdLCBbMiwgMl0sIFsyLCAyXSwgWzIsIDJdLCBbMiwgMl0sIFsyLCAyXSwgWzIsIDJdLCBbMiwgMl0sIFsyLCAyXSwgWzIsIDJdLCBbMiwgMl0sIFsyLCAyXSwgWzIsIDJdLCBbMiwgMl0sIFsyLCAyXSwgWzIsIDJdXTtcblxuY2xhc3MgQ0NJVFRGYXhEZWNvZGVyIHtcbiAgY29uc3RydWN0b3Ioc291cmNlLCBvcHRpb25zID0ge30pIHtcbiAgICBpZiAoIXNvdXJjZSB8fCB0eXBlb2Ygc291cmNlLm5leHQgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDQ0lUVEZheERlY29kZXIgLSBpbnZhbGlkIFwic291cmNlXCIgcGFyYW1ldGVyLicpO1xuICAgIH1cblxuICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuICAgIHRoaXMuZW9mID0gZmFsc2U7XG4gICAgdGhpcy5lbmNvZGluZyA9IG9wdGlvbnMuSyB8fCAwO1xuICAgIHRoaXMuZW9saW5lID0gb3B0aW9ucy5FbmRPZkxpbmUgfHwgZmFsc2U7XG4gICAgdGhpcy5ieXRlQWxpZ24gPSBvcHRpb25zLkVuY29kZWRCeXRlQWxpZ24gfHwgZmFsc2U7XG4gICAgdGhpcy5jb2x1bW5zID0gb3B0aW9ucy5Db2x1bW5zIHx8IDE3Mjg7XG4gICAgdGhpcy5yb3dzID0gb3B0aW9ucy5Sb3dzIHx8IDA7XG4gICAgbGV0IGVvYmxvY2sgPSBvcHRpb25zLkVuZE9mQmxvY2s7XG5cbiAgICBpZiAoZW9ibG9jayA9PT0gbnVsbCB8fCBlb2Jsb2NrID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGVvYmxvY2sgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuZW9ibG9jayA9IGVvYmxvY2s7XG4gICAgdGhpcy5ibGFjayA9IG9wdGlvbnMuQmxhY2tJczEgfHwgZmFsc2U7XG4gICAgdGhpcy5jb2RpbmdMaW5lID0gbmV3IFVpbnQzMkFycmF5KHRoaXMuY29sdW1ucyArIDEpO1xuICAgIHRoaXMucmVmTGluZSA9IG5ldyBVaW50MzJBcnJheSh0aGlzLmNvbHVtbnMgKyAyKTtcbiAgICB0aGlzLmNvZGluZ0xpbmVbMF0gPSB0aGlzLmNvbHVtbnM7XG4gICAgdGhpcy5jb2RpbmdQb3MgPSAwO1xuICAgIHRoaXMucm93ID0gMDtcbiAgICB0aGlzLm5leHRMaW5lMkQgPSB0aGlzLmVuY29kaW5nIDwgMDtcbiAgICB0aGlzLmlucHV0Qml0cyA9IDA7XG4gICAgdGhpcy5pbnB1dEJ1ZiA9IDA7XG4gICAgdGhpcy5vdXRwdXRCaXRzID0gMDtcbiAgICB0aGlzLnJvd3NEb25lID0gZmFsc2U7XG4gICAgbGV0IGNvZGUxO1xuXG4gICAgd2hpbGUgKChjb2RlMSA9IHRoaXMuX2xvb2tCaXRzKDEyKSkgPT09IDApIHtcbiAgICAgIHRoaXMuX2VhdEJpdHMoMSk7XG4gICAgfVxuXG4gICAgaWYgKGNvZGUxID09PSAxKSB7XG4gICAgICB0aGlzLl9lYXRCaXRzKDEyKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5lbmNvZGluZyA+IDApIHtcbiAgICAgIHRoaXMubmV4dExpbmUyRCA9ICF0aGlzLl9sb29rQml0cygxKTtcblxuICAgICAgdGhpcy5fZWF0Qml0cygxKTtcbiAgICB9XG4gIH1cblxuICByZWFkTmV4dENoYXIoKSB7XG4gICAgaWYgKHRoaXMuZW9mKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgY29uc3QgcmVmTGluZSA9IHRoaXMucmVmTGluZTtcbiAgICBjb25zdCBjb2RpbmdMaW5lID0gdGhpcy5jb2RpbmdMaW5lO1xuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XG4gICAgbGV0IHJlZlBvcywgYmxhY2tQaXhlbHMsIGJpdHMsIGk7XG5cbiAgICBpZiAodGhpcy5vdXRwdXRCaXRzID09PSAwKSB7XG4gICAgICBpZiAodGhpcy5yb3dzRG9uZSkge1xuICAgICAgICB0aGlzLmVvZiA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmVvZikge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZXJyID0gZmFsc2U7XG4gICAgICBsZXQgY29kZTEsIGNvZGUyLCBjb2RlMztcblxuICAgICAgaWYgKHRoaXMubmV4dExpbmUyRCkge1xuICAgICAgICBmb3IgKGkgPSAwOyBjb2RpbmdMaW5lW2ldIDwgY29sdW1uczsgKytpKSB7XG4gICAgICAgICAgcmVmTGluZVtpXSA9IGNvZGluZ0xpbmVbaV07XG4gICAgICAgIH1cblxuICAgICAgICByZWZMaW5lW2krK10gPSBjb2x1bW5zO1xuICAgICAgICByZWZMaW5lW2ldID0gY29sdW1ucztcbiAgICAgICAgY29kaW5nTGluZVswXSA9IDA7XG4gICAgICAgIHRoaXMuY29kaW5nUG9zID0gMDtcbiAgICAgICAgcmVmUG9zID0gMDtcbiAgICAgICAgYmxhY2tQaXhlbHMgPSAwO1xuXG4gICAgICAgIHdoaWxlIChjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICBjb2RlMSA9IHRoaXMuX2dldFR3b0RpbUNvZGUoKTtcblxuICAgICAgICAgIHN3aXRjaCAoY29kZTEpIHtcbiAgICAgICAgICAgIGNhc2UgdHdvRGltUGFzczpcbiAgICAgICAgICAgICAgdGhpcy5fYWRkUGl4ZWxzKHJlZkxpbmVbcmVmUG9zICsgMV0sIGJsYWNrUGl4ZWxzKTtcblxuICAgICAgICAgICAgICBpZiAocmVmTGluZVtyZWZQb3MgKyAxXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICByZWZQb3MgKz0gMjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIHR3b0RpbUhvcml6OlxuICAgICAgICAgICAgICBjb2RlMSA9IGNvZGUyID0gMDtcblxuICAgICAgICAgICAgICBpZiAoYmxhY2tQaXhlbHMpIHtcbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICBjb2RlMSArPSBjb2RlMyA9IHRoaXMuX2dldEJsYWNrQ29kZSgpO1xuICAgICAgICAgICAgICAgIH0gd2hpbGUgKGNvZGUzID49IDY0KTtcblxuICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgIGNvZGUyICs9IGNvZGUzID0gdGhpcy5fZ2V0V2hpdGVDb2RlKCk7XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAoY29kZTMgPj0gNjQpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgIGNvZGUxICs9IGNvZGUzID0gdGhpcy5fZ2V0V2hpdGVDb2RlKCk7XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAoY29kZTMgPj0gNjQpO1xuXG4gICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgY29kZTIgKz0gY29kZTMgPSB0aGlzLl9nZXRCbGFja0NvZGUoKTtcbiAgICAgICAgICAgICAgICB9IHdoaWxlIChjb2RlMyA+PSA2NCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9hZGRQaXhlbHMoY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gKyBjb2RlMSwgYmxhY2tQaXhlbHMpO1xuXG4gICAgICAgICAgICAgIGlmIChjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZGRQaXhlbHMoY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gKyBjb2RlMiwgYmxhY2tQaXhlbHMgXiAxKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHdoaWxlIChyZWZMaW5lW3JlZlBvc10gPD0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gJiYgcmVmTGluZVtyZWZQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgIHJlZlBvcyArPSAyO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgdHdvRGltVmVydFIzOlxuICAgICAgICAgICAgICB0aGlzLl9hZGRQaXhlbHMocmVmTGluZVtyZWZQb3NdICsgMywgYmxhY2tQaXhlbHMpO1xuXG4gICAgICAgICAgICAgIGJsYWNrUGl4ZWxzIF49IDE7XG5cbiAgICAgICAgICAgICAgaWYgKGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICsrcmVmUG9zO1xuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJlZkxpbmVbcmVmUG9zXSA8PSBjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSAmJiByZWZMaW5lW3JlZlBvc10gPCBjb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICByZWZQb3MgKz0gMjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSB0d29EaW1WZXJ0UjI6XG4gICAgICAgICAgICAgIHRoaXMuX2FkZFBpeGVscyhyZWZMaW5lW3JlZlBvc10gKyAyLCBibGFja1BpeGVscyk7XG5cbiAgICAgICAgICAgICAgYmxhY2tQaXhlbHMgXj0gMTtcblxuICAgICAgICAgICAgICBpZiAoY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gPCBjb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgKytyZWZQb3M7XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocmVmTGluZVtyZWZQb3NdIDw9IGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdICYmIHJlZkxpbmVbcmVmUG9zXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgIHJlZlBvcyArPSAyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIHR3b0RpbVZlcnRSMTpcbiAgICAgICAgICAgICAgdGhpcy5fYWRkUGl4ZWxzKHJlZkxpbmVbcmVmUG9zXSArIDEsIGJsYWNrUGl4ZWxzKTtcblxuICAgICAgICAgICAgICBibGFja1BpeGVscyBePSAxO1xuXG4gICAgICAgICAgICAgIGlmIChjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICArK3JlZlBvcztcblxuICAgICAgICAgICAgICAgIHdoaWxlIChyZWZMaW5lW3JlZlBvc10gPD0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gJiYgcmVmTGluZVtyZWZQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgcmVmUG9zICs9IDI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgdHdvRGltVmVydDA6XG4gICAgICAgICAgICAgIHRoaXMuX2FkZFBpeGVscyhyZWZMaW5lW3JlZlBvc10sIGJsYWNrUGl4ZWxzKTtcblxuICAgICAgICAgICAgICBibGFja1BpeGVscyBePSAxO1xuXG4gICAgICAgICAgICAgIGlmIChjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICArK3JlZlBvcztcblxuICAgICAgICAgICAgICAgIHdoaWxlIChyZWZMaW5lW3JlZlBvc10gPD0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gJiYgcmVmTGluZVtyZWZQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgcmVmUG9zICs9IDI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgdHdvRGltVmVydEwzOlxuICAgICAgICAgICAgICB0aGlzLl9hZGRQaXhlbHNOZWcocmVmTGluZVtyZWZQb3NdIC0gMywgYmxhY2tQaXhlbHMpO1xuXG4gICAgICAgICAgICAgIGJsYWNrUGl4ZWxzIF49IDE7XG5cbiAgICAgICAgICAgICAgaWYgKGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgIGlmIChyZWZQb3MgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAtLXJlZlBvcztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgKytyZWZQb3M7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgd2hpbGUgKHJlZkxpbmVbcmVmUG9zXSA8PSBjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSAmJiByZWZMaW5lW3JlZlBvc10gPCBjb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICByZWZQb3MgKz0gMjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSB0d29EaW1WZXJ0TDI6XG4gICAgICAgICAgICAgIHRoaXMuX2FkZFBpeGVsc05lZyhyZWZMaW5lW3JlZlBvc10gLSAyLCBibGFja1BpeGVscyk7XG5cbiAgICAgICAgICAgICAgYmxhY2tQaXhlbHMgXj0gMTtcblxuICAgICAgICAgICAgICBpZiAoY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gPCBjb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlZlBvcyA+IDApIHtcbiAgICAgICAgICAgICAgICAgIC0tcmVmUG9zO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICArK3JlZlBvcztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB3aGlsZSAocmVmTGluZVtyZWZQb3NdIDw9IGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdICYmIHJlZkxpbmVbcmVmUG9zXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgIHJlZlBvcyArPSAyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIHR3b0RpbVZlcnRMMTpcbiAgICAgICAgICAgICAgdGhpcy5fYWRkUGl4ZWxzTmVnKHJlZkxpbmVbcmVmUG9zXSAtIDEsIGJsYWNrUGl4ZWxzKTtcblxuICAgICAgICAgICAgICBibGFja1BpeGVscyBePSAxO1xuXG4gICAgICAgICAgICAgIGlmIChjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVmUG9zID4gMCkge1xuICAgICAgICAgICAgICAgICAgLS1yZWZQb3M7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICsrcmVmUG9zO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHdoaWxlIChyZWZMaW5lW3JlZlBvc10gPD0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gJiYgcmVmTGluZVtyZWZQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgcmVmUG9zICs9IDI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgY2NpdHRFT0Y6XG4gICAgICAgICAgICAgIHRoaXMuX2FkZFBpeGVscyhjb2x1bW5zLCAwKTtcblxuICAgICAgICAgICAgICB0aGlzLmVvZiA9IHRydWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoXCJiYWQgMmQgY29kZVwiKTtcblxuICAgICAgICAgICAgICB0aGlzLl9hZGRQaXhlbHMoY29sdW1ucywgMCk7XG5cbiAgICAgICAgICAgICAgdGhpcy5lcnIgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29kaW5nTGluZVswXSA9IDA7XG4gICAgICAgIHRoaXMuY29kaW5nUG9zID0gMDtcbiAgICAgICAgYmxhY2tQaXhlbHMgPSAwO1xuXG4gICAgICAgIHdoaWxlIChjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICBjb2RlMSA9IDA7XG5cbiAgICAgICAgICBpZiAoYmxhY2tQaXhlbHMpIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgY29kZTEgKz0gY29kZTMgPSB0aGlzLl9nZXRCbGFja0NvZGUoKTtcbiAgICAgICAgICAgIH0gd2hpbGUgKGNvZGUzID49IDY0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICBjb2RlMSArPSBjb2RlMyA9IHRoaXMuX2dldFdoaXRlQ29kZSgpO1xuICAgICAgICAgICAgfSB3aGlsZSAoY29kZTMgPj0gNjQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2FkZFBpeGVscyhjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSArIGNvZGUxLCBibGFja1BpeGVscyk7XG5cbiAgICAgICAgICBibGFja1BpeGVscyBePSAxO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxldCBnb3RFT0wgPSBmYWxzZTtcblxuICAgICAgaWYgKHRoaXMuYnl0ZUFsaWduKSB7XG4gICAgICAgIHRoaXMuaW5wdXRCaXRzICY9IH43O1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuZW9ibG9jayAmJiB0aGlzLnJvdyA9PT0gdGhpcy5yb3dzIC0gMSkge1xuICAgICAgICB0aGlzLnJvd3NEb25lID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvZGUxID0gdGhpcy5fbG9va0JpdHMoMTIpO1xuXG4gICAgICAgIGlmICh0aGlzLmVvbGluZSkge1xuICAgICAgICAgIHdoaWxlIChjb2RlMSAhPT0gY2NpdHRFT0YgJiYgY29kZTEgIT09IDEpIHtcbiAgICAgICAgICAgIHRoaXMuX2VhdEJpdHMoMSk7XG5cbiAgICAgICAgICAgIGNvZGUxID0gdGhpcy5fbG9va0JpdHMoMTIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3aGlsZSAoY29kZTEgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2VhdEJpdHMoMSk7XG5cbiAgICAgICAgICAgIGNvZGUxID0gdGhpcy5fbG9va0JpdHMoMTIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2RlMSA9PT0gMSkge1xuICAgICAgICAgIHRoaXMuX2VhdEJpdHMoMTIpO1xuXG4gICAgICAgICAgZ290RU9MID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2RlMSA9PT0gY2NpdHRFT0YpIHtcbiAgICAgICAgICB0aGlzLmVvZiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLmVvZiAmJiB0aGlzLmVuY29kaW5nID4gMCAmJiAhdGhpcy5yb3dzRG9uZSkge1xuICAgICAgICB0aGlzLm5leHRMaW5lMkQgPSAhdGhpcy5fbG9va0JpdHMoMSk7XG5cbiAgICAgICAgdGhpcy5fZWF0Qml0cygxKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZW9ibG9jayAmJiBnb3RFT0wgJiYgdGhpcy5ieXRlQWxpZ24pIHtcbiAgICAgICAgY29kZTEgPSB0aGlzLl9sb29rQml0cygxMik7XG5cbiAgICAgICAgaWYgKGNvZGUxID09PSAxKSB7XG4gICAgICAgICAgdGhpcy5fZWF0Qml0cygxMik7XG5cbiAgICAgICAgICBpZiAodGhpcy5lbmNvZGluZyA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2xvb2tCaXRzKDEpO1xuXG4gICAgICAgICAgICB0aGlzLl9lYXRCaXRzKDEpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLmVuY29kaW5nID49IDApIHtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA0OyArK2kpIHtcbiAgICAgICAgICAgICAgY29kZTEgPSB0aGlzLl9sb29rQml0cygxMik7XG5cbiAgICAgICAgICAgICAgaWYgKGNvZGUxICE9PSAxKSB7XG4gICAgICAgICAgICAgICAgKDAsIF91dGlsLmluZm8pKFwiYmFkIHJ0YyBjb2RlOiBcIiArIGNvZGUxKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2VhdEJpdHMoMTIpO1xuXG4gICAgICAgICAgICAgIGlmICh0aGlzLmVuY29kaW5nID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvb2tCaXRzKDEpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fZWF0Qml0cygxKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuZW9mID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmVyciAmJiB0aGlzLmVvbGluZSkge1xuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIGNvZGUxID0gdGhpcy5fbG9va0JpdHMoMTMpO1xuXG4gICAgICAgICAgaWYgKGNvZGUxID09PSBjY2l0dEVPRikge1xuICAgICAgICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjb2RlMSA+PiAxID09PSAxKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9lYXRCaXRzKDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZWF0Qml0cygxMik7XG5cbiAgICAgICAgaWYgKHRoaXMuZW5jb2RpbmcgPiAwKSB7XG4gICAgICAgICAgdGhpcy5fZWF0Qml0cygxKTtcblxuICAgICAgICAgIHRoaXMubmV4dExpbmUyRCA9ICEoY29kZTEgJiAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoY29kaW5nTGluZVswXSA+IDApIHtcbiAgICAgICAgdGhpcy5vdXRwdXRCaXRzID0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1BvcyA9IDBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vdXRwdXRCaXRzID0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1BvcyA9IDFdO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJvdysrO1xuICAgIH1cblxuICAgIGxldCBjO1xuXG4gICAgaWYgKHRoaXMub3V0cHV0Qml0cyA+PSA4KSB7XG4gICAgICBjID0gdGhpcy5jb2RpbmdQb3MgJiAxID8gMCA6IDB4ZmY7XG4gICAgICB0aGlzLm91dHB1dEJpdHMgLT0gODtcblxuICAgICAgaWYgKHRoaXMub3V0cHV0Qml0cyA9PT0gMCAmJiBjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgdGhpcy5jb2RpbmdQb3MrKztcbiAgICAgICAgdGhpcy5vdXRwdXRCaXRzID0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gLSBjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zIC0gMV07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGJpdHMgPSA4O1xuICAgICAgYyA9IDA7XG5cbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm91dHB1dEJpdHMgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ0ludmFsaWQgL0NDSVRURmF4RGVjb2RlIGRhdGEsIFwib3V0cHV0Qml0c1wiIG11c3QgYmUgYSBudW1iZXIuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5vdXRwdXRCaXRzID4gYml0cykge1xuICAgICAgICAgIGMgPDw9IGJpdHM7XG5cbiAgICAgICAgICBpZiAoISh0aGlzLmNvZGluZ1BvcyAmIDEpKSB7XG4gICAgICAgICAgICBjIHw9IDB4ZmYgPj4gOCAtIGJpdHM7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5vdXRwdXRCaXRzIC09IGJpdHM7XG4gICAgICAgICAgYml0cyA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYyA8PD0gdGhpcy5vdXRwdXRCaXRzO1xuXG4gICAgICAgICAgaWYgKCEodGhpcy5jb2RpbmdQb3MgJiAxKSkge1xuICAgICAgICAgICAgYyB8PSAweGZmID4+IDggLSB0aGlzLm91dHB1dEJpdHM7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYml0cyAtPSB0aGlzLm91dHB1dEJpdHM7XG4gICAgICAgICAgdGhpcy5vdXRwdXRCaXRzID0gMDtcblxuICAgICAgICAgIGlmIChjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgIHRoaXMuY29kaW5nUG9zKys7XG4gICAgICAgICAgICB0aGlzLm91dHB1dEJpdHMgPSBjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSAtIGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3MgLSAxXTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGJpdHMgPiAwKSB7XG4gICAgICAgICAgICBjIDw8PSBiaXRzO1xuICAgICAgICAgICAgYml0cyA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IHdoaWxlIChiaXRzKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5ibGFjaykge1xuICAgICAgYyBePSAweGZmO1xuICAgIH1cblxuICAgIHJldHVybiBjO1xuICB9XG5cbiAgX2FkZFBpeGVscyhhMSwgYmxhY2tQaXhlbHMpIHtcbiAgICBjb25zdCBjb2RpbmdMaW5lID0gdGhpcy5jb2RpbmdMaW5lO1xuICAgIGxldCBjb2RpbmdQb3MgPSB0aGlzLmNvZGluZ1BvcztcblxuICAgIGlmIChhMSA+IGNvZGluZ0xpbmVbY29kaW5nUG9zXSkge1xuICAgICAgaWYgKGExID4gdGhpcy5jb2x1bW5zKSB7XG4gICAgICAgICgwLCBfdXRpbC5pbmZvKShcInJvdyBpcyB3cm9uZyBsZW5ndGhcIik7XG4gICAgICAgIHRoaXMuZXJyID0gdHJ1ZTtcbiAgICAgICAgYTEgPSB0aGlzLmNvbHVtbnM7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb2RpbmdQb3MgJiAxIF4gYmxhY2tQaXhlbHMpIHtcbiAgICAgICAgKytjb2RpbmdQb3M7XG4gICAgICB9XG5cbiAgICAgIGNvZGluZ0xpbmVbY29kaW5nUG9zXSA9IGExO1xuICAgIH1cblxuICAgIHRoaXMuY29kaW5nUG9zID0gY29kaW5nUG9zO1xuICB9XG5cbiAgX2FkZFBpeGVsc05lZyhhMSwgYmxhY2tQaXhlbHMpIHtcbiAgICBjb25zdCBjb2RpbmdMaW5lID0gdGhpcy5jb2RpbmdMaW5lO1xuICAgIGxldCBjb2RpbmdQb3MgPSB0aGlzLmNvZGluZ1BvcztcblxuICAgIGlmIChhMSA+IGNvZGluZ0xpbmVbY29kaW5nUG9zXSkge1xuICAgICAgaWYgKGExID4gdGhpcy5jb2x1bW5zKSB7XG4gICAgICAgICgwLCBfdXRpbC5pbmZvKShcInJvdyBpcyB3cm9uZyBsZW5ndGhcIik7XG4gICAgICAgIHRoaXMuZXJyID0gdHJ1ZTtcbiAgICAgICAgYTEgPSB0aGlzLmNvbHVtbnM7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb2RpbmdQb3MgJiAxIF4gYmxhY2tQaXhlbHMpIHtcbiAgICAgICAgKytjb2RpbmdQb3M7XG4gICAgICB9XG5cbiAgICAgIGNvZGluZ0xpbmVbY29kaW5nUG9zXSA9IGExO1xuICAgIH0gZWxzZSBpZiAoYTEgPCBjb2RpbmdMaW5lW2NvZGluZ1Bvc10pIHtcbiAgICAgIGlmIChhMSA8IDApIHtcbiAgICAgICAgKDAsIF91dGlsLmluZm8pKFwiaW52YWxpZCBjb2RlXCIpO1xuICAgICAgICB0aGlzLmVyciA9IHRydWU7XG4gICAgICAgIGExID0gMDtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKGNvZGluZ1BvcyA+IDAgJiYgYTEgPCBjb2RpbmdMaW5lW2NvZGluZ1BvcyAtIDFdKSB7XG4gICAgICAgIC0tY29kaW5nUG9zO1xuICAgICAgfVxuXG4gICAgICBjb2RpbmdMaW5lW2NvZGluZ1Bvc10gPSBhMTtcbiAgICB9XG5cbiAgICB0aGlzLmNvZGluZ1BvcyA9IGNvZGluZ1BvcztcbiAgfVxuXG4gIF9maW5kVGFibGVDb2RlKHN0YXJ0LCBlbmQsIHRhYmxlLCBsaW1pdCkge1xuICAgIGNvbnN0IGxpbWl0VmFsdWUgPSBsaW1pdCB8fCAwO1xuXG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgKytpKSB7XG4gICAgICBsZXQgY29kZSA9IHRoaXMuX2xvb2tCaXRzKGkpO1xuXG4gICAgICBpZiAoY29kZSA9PT0gY2NpdHRFT0YpIHtcbiAgICAgICAgcmV0dXJuIFt0cnVlLCAxLCBmYWxzZV07XG4gICAgICB9XG5cbiAgICAgIGlmIChpIDwgZW5kKSB7XG4gICAgICAgIGNvZGUgPDw9IGVuZCAtIGk7XG4gICAgICB9XG5cbiAgICAgIGlmICghbGltaXRWYWx1ZSB8fCBjb2RlID49IGxpbWl0VmFsdWUpIHtcbiAgICAgICAgY29uc3QgcCA9IHRhYmxlW2NvZGUgLSBsaW1pdFZhbHVlXTtcblxuICAgICAgICBpZiAocFswXSA9PT0gaSkge1xuICAgICAgICAgIHRoaXMuX2VhdEJpdHMoaSk7XG5cbiAgICAgICAgICByZXR1cm4gW3RydWUsIHBbMV0sIHRydWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFtmYWxzZSwgMCwgZmFsc2VdO1xuICB9XG5cbiAgX2dldFR3b0RpbUNvZGUoKSB7XG4gICAgbGV0IGNvZGUgPSAwO1xuICAgIGxldCBwO1xuXG4gICAgaWYgKHRoaXMuZW9ibG9jaykge1xuICAgICAgY29kZSA9IHRoaXMuX2xvb2tCaXRzKDcpO1xuICAgICAgcCA9IHR3b0RpbVRhYmxlW2NvZGVdO1xuXG4gICAgICBpZiAocCAmJiBwWzBdID4gMCkge1xuICAgICAgICB0aGlzLl9lYXRCaXRzKHBbMF0pO1xuXG4gICAgICAgIHJldHVybiBwWzFdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9maW5kVGFibGVDb2RlKDEsIDcsIHR3b0RpbVRhYmxlKTtcblxuICAgICAgaWYgKHJlc3VsdFswXSAmJiByZXN1bHRbMl0pIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdFsxXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAoMCwgX3V0aWwuaW5mbykoXCJCYWQgdHdvIGRpbSBjb2RlXCIpO1xuICAgIHJldHVybiBjY2l0dEVPRjtcbiAgfVxuXG4gIF9nZXRXaGl0ZUNvZGUoKSB7XG4gICAgbGV0IGNvZGUgPSAwO1xuICAgIGxldCBwO1xuXG4gICAgaWYgKHRoaXMuZW9ibG9jaykge1xuICAgICAgY29kZSA9IHRoaXMuX2xvb2tCaXRzKDEyKTtcblxuICAgICAgaWYgKGNvZGUgPT09IGNjaXR0RU9GKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29kZSA+PiA1ID09PSAwKSB7XG4gICAgICAgIHAgPSB3aGl0ZVRhYmxlMVtjb2RlXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHAgPSB3aGl0ZVRhYmxlMltjb2RlID4+IDNdO1xuICAgICAgfVxuXG4gICAgICBpZiAocFswXSA+IDApIHtcbiAgICAgICAgdGhpcy5fZWF0Qml0cyhwWzBdKTtcblxuICAgICAgICByZXR1cm4gcFsxXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHJlc3VsdCA9IHRoaXMuX2ZpbmRUYWJsZUNvZGUoMSwgOSwgd2hpdGVUYWJsZTIpO1xuXG4gICAgICBpZiAocmVzdWx0WzBdKSB7XG4gICAgICAgIHJldHVybiByZXN1bHRbMV07XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdCA9IHRoaXMuX2ZpbmRUYWJsZUNvZGUoMTEsIDEyLCB3aGl0ZVRhYmxlMSk7XG5cbiAgICAgIGlmIChyZXN1bHRbMF0pIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdFsxXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAoMCwgX3V0aWwuaW5mbykoXCJiYWQgd2hpdGUgY29kZVwiKTtcblxuICAgIHRoaXMuX2VhdEJpdHMoMSk7XG5cbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIF9nZXRCbGFja0NvZGUoKSB7XG4gICAgbGV0IGNvZGUsIHA7XG5cbiAgICBpZiAodGhpcy5lb2Jsb2NrKSB7XG4gICAgICBjb2RlID0gdGhpcy5fbG9va0JpdHMoMTMpO1xuXG4gICAgICBpZiAoY29kZSA9PT0gY2NpdHRFT0YpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb2RlID4+IDcgPT09IDApIHtcbiAgICAgICAgcCA9IGJsYWNrVGFibGUxW2NvZGVdO1xuICAgICAgfSBlbHNlIGlmIChjb2RlID4+IDkgPT09IDAgJiYgY29kZSA+PiA3ICE9PSAwKSB7XG4gICAgICAgIHAgPSBibGFja1RhYmxlMlsoY29kZSA+PiAxKSAtIDY0XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHAgPSBibGFja1RhYmxlM1tjb2RlID4+IDddO1xuICAgICAgfVxuXG4gICAgICBpZiAocFswXSA+IDApIHtcbiAgICAgICAgdGhpcy5fZWF0Qml0cyhwWzBdKTtcblxuICAgICAgICByZXR1cm4gcFsxXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHJlc3VsdCA9IHRoaXMuX2ZpbmRUYWJsZUNvZGUoMiwgNiwgYmxhY2tUYWJsZTMpO1xuXG4gICAgICBpZiAocmVzdWx0WzBdKSB7XG4gICAgICAgIHJldHVybiByZXN1bHRbMV07XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdCA9IHRoaXMuX2ZpbmRUYWJsZUNvZGUoNywgMTIsIGJsYWNrVGFibGUyLCA2NCk7XG5cbiAgICAgIGlmIChyZXN1bHRbMF0pIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdFsxXTtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0ID0gdGhpcy5fZmluZFRhYmxlQ29kZSgxMCwgMTMsIGJsYWNrVGFibGUxKTtcblxuICAgICAgaWYgKHJlc3VsdFswXSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0WzFdO1xuICAgICAgfVxuICAgIH1cblxuICAgICgwLCBfdXRpbC5pbmZvKShcImJhZCBibGFjayBjb2RlXCIpO1xuXG4gICAgdGhpcy5fZWF0Qml0cygxKTtcblxuICAgIHJldHVybiAxO1xuICB9XG5cbiAgX2xvb2tCaXRzKG4pIHtcbiAgICBsZXQgYztcblxuICAgIHdoaWxlICh0aGlzLmlucHV0Qml0cyA8IG4pIHtcbiAgICAgIGlmICgoYyA9IHRoaXMuc291cmNlLm5leHQoKSkgPT09IC0xKSB7XG4gICAgICAgIGlmICh0aGlzLmlucHV0Qml0cyA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBjY2l0dEVPRjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmlucHV0QnVmIDw8IG4gLSB0aGlzLmlucHV0Qml0cyAmIDB4ZmZmZiA+PiAxNiAtIG47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaW5wdXRCdWYgPSB0aGlzLmlucHV0QnVmIDw8IDggfCBjO1xuICAgICAgdGhpcy5pbnB1dEJpdHMgKz0gODtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5pbnB1dEJ1ZiA+PiB0aGlzLmlucHV0Qml0cyAtIG4gJiAweGZmZmYgPj4gMTYgLSBuO1xuICB9XG5cbiAgX2VhdEJpdHMobikge1xuICAgIGlmICgodGhpcy5pbnB1dEJpdHMgLT0gbikgPCAwKSB7XG4gICAgICB0aGlzLmlucHV0Qml0cyA9IDA7XG4gICAgfVxuICB9XG5cbn1cblxuZXhwb3J0cy5DQ0lUVEZheERlY29kZXIgPSBDQ0lUVEZheERlY29kZXI7XG5cbi8qKiovIH0pLFxuLyogMzMgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuRmxhdGVTdHJlYW0gPSB2b2lkIDA7XG5cbnZhciBfZGVjb2RlX3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oMjkpO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5jb25zdCBjb2RlTGVuQ29kZU1hcCA9IG5ldyBJbnQzMkFycmF5KFsxNiwgMTcsIDE4LCAwLCA4LCA3LCA5LCA2LCAxMCwgNSwgMTEsIDQsIDEyLCAzLCAxMywgMiwgMTQsIDEsIDE1XSk7XG5jb25zdCBsZW5ndGhEZWNvZGUgPSBuZXcgSW50MzJBcnJheShbMHgwMDAwMywgMHgwMDAwNCwgMHgwMDAwNSwgMHgwMDAwNiwgMHgwMDAwNywgMHgwMDAwOCwgMHgwMDAwOSwgMHgwMDAwYSwgMHgxMDAwYiwgMHgxMDAwZCwgMHgxMDAwZiwgMHgxMDAxMSwgMHgyMDAxMywgMHgyMDAxNywgMHgyMDAxYiwgMHgyMDAxZiwgMHgzMDAyMywgMHgzMDAyYiwgMHgzMDAzMywgMHgzMDAzYiwgMHg0MDA0MywgMHg0MDA1MywgMHg0MDA2MywgMHg0MDA3MywgMHg1MDA4MywgMHg1MDBhMywgMHg1MDBjMywgMHg1MDBlMywgMHgwMDEwMiwgMHgwMDEwMiwgMHgwMDEwMl0pO1xuY29uc3QgZGlzdERlY29kZSA9IG5ldyBJbnQzMkFycmF5KFsweDAwMDAxLCAweDAwMDAyLCAweDAwMDAzLCAweDAwMDA0LCAweDEwMDA1LCAweDEwMDA3LCAweDIwMDA5LCAweDIwMDBkLCAweDMwMDExLCAweDMwMDE5LCAweDQwMDIxLCAweDQwMDMxLCAweDUwMDQxLCAweDUwMDYxLCAweDYwMDgxLCAweDYwMGMxLCAweDcwMTAxLCAweDcwMTgxLCAweDgwMjAxLCAweDgwMzAxLCAweDkwNDAxLCAweDkwNjAxLCAweGEwODAxLCAweGEwYzAxLCAweGIxMDAxLCAweGIxODAxLCAweGMyMDAxLCAweGMzMDAxLCAweGQ0MDAxLCAweGQ2MDAxXSk7XG5jb25zdCBmaXhlZExpdENvZGVUYWIgPSBbbmV3IEludDMyQXJyYXkoWzB4NzAxMDAsIDB4ODAwNTAsIDB4ODAwMTAsIDB4ODAxMTgsIDB4NzAxMTAsIDB4ODAwNzAsIDB4ODAwMzAsIDB4OTAwYzAsIDB4NzAxMDgsIDB4ODAwNjAsIDB4ODAwMjAsIDB4OTAwYTAsIDB4ODAwMDAsIDB4ODAwODAsIDB4ODAwNDAsIDB4OTAwZTAsIDB4NzAxMDQsIDB4ODAwNTgsIDB4ODAwMTgsIDB4OTAwOTAsIDB4NzAxMTQsIDB4ODAwNzgsIDB4ODAwMzgsIDB4OTAwZDAsIDB4NzAxMGMsIDB4ODAwNjgsIDB4ODAwMjgsIDB4OTAwYjAsIDB4ODAwMDgsIDB4ODAwODgsIDB4ODAwNDgsIDB4OTAwZjAsIDB4NzAxMDIsIDB4ODAwNTQsIDB4ODAwMTQsIDB4ODAxMWMsIDB4NzAxMTIsIDB4ODAwNzQsIDB4ODAwMzQsIDB4OTAwYzgsIDB4NzAxMGEsIDB4ODAwNjQsIDB4ODAwMjQsIDB4OTAwYTgsIDB4ODAwMDQsIDB4ODAwODQsIDB4ODAwNDQsIDB4OTAwZTgsIDB4NzAxMDYsIDB4ODAwNWMsIDB4ODAwMWMsIDB4OTAwOTgsIDB4NzAxMTYsIDB4ODAwN2MsIDB4ODAwM2MsIDB4OTAwZDgsIDB4NzAxMGUsIDB4ODAwNmMsIDB4ODAwMmMsIDB4OTAwYjgsIDB4ODAwMGMsIDB4ODAwOGMsIDB4ODAwNGMsIDB4OTAwZjgsIDB4NzAxMDEsIDB4ODAwNTIsIDB4ODAwMTIsIDB4ODAxMWEsIDB4NzAxMTEsIDB4ODAwNzIsIDB4ODAwMzIsIDB4OTAwYzQsIDB4NzAxMDksIDB4ODAwNjIsIDB4ODAwMjIsIDB4OTAwYTQsIDB4ODAwMDIsIDB4ODAwODIsIDB4ODAwNDIsIDB4OTAwZTQsIDB4NzAxMDUsIDB4ODAwNWEsIDB4ODAwMWEsIDB4OTAwOTQsIDB4NzAxMTUsIDB4ODAwN2EsIDB4ODAwM2EsIDB4OTAwZDQsIDB4NzAxMGQsIDB4ODAwNmEsIDB4ODAwMmEsIDB4OTAwYjQsIDB4ODAwMGEsIDB4ODAwOGEsIDB4ODAwNGEsIDB4OTAwZjQsIDB4NzAxMDMsIDB4ODAwNTYsIDB4ODAwMTYsIDB4ODAxMWUsIDB4NzAxMTMsIDB4ODAwNzYsIDB4ODAwMzYsIDB4OTAwY2MsIDB4NzAxMGIsIDB4ODAwNjYsIDB4ODAwMjYsIDB4OTAwYWMsIDB4ODAwMDYsIDB4ODAwODYsIDB4ODAwNDYsIDB4OTAwZWMsIDB4NzAxMDcsIDB4ODAwNWUsIDB4ODAwMWUsIDB4OTAwOWMsIDB4NzAxMTcsIDB4ODAwN2UsIDB4ODAwM2UsIDB4OTAwZGMsIDB4NzAxMGYsIDB4ODAwNmUsIDB4ODAwMmUsIDB4OTAwYmMsIDB4ODAwMGUsIDB4ODAwOGUsIDB4ODAwNGUsIDB4OTAwZmMsIDB4NzAxMDAsIDB4ODAwNTEsIDB4ODAwMTEsIDB4ODAxMTksIDB4NzAxMTAsIDB4ODAwNzEsIDB4ODAwMzEsIDB4OTAwYzIsIDB4NzAxMDgsIDB4ODAwNjEsIDB4ODAwMjEsIDB4OTAwYTIsIDB4ODAwMDEsIDB4ODAwODEsIDB4ODAwNDEsIDB4OTAwZTIsIDB4NzAxMDQsIDB4ODAwNTksIDB4ODAwMTksIDB4OTAwOTIsIDB4NzAxMTQsIDB4ODAwNzksIDB4ODAwMzksIDB4OTAwZDIsIDB4NzAxMGMsIDB4ODAwNjksIDB4ODAwMjksIDB4OTAwYjIsIDB4ODAwMDksIDB4ODAwODksIDB4ODAwNDksIDB4OTAwZjIsIDB4NzAxMDIsIDB4ODAwNTUsIDB4ODAwMTUsIDB4ODAxMWQsIDB4NzAxMTIsIDB4ODAwNzUsIDB4ODAwMzUsIDB4OTAwY2EsIDB4NzAxMGEsIDB4ODAwNjUsIDB4ODAwMjUsIDB4OTAwYWEsIDB4ODAwMDUsIDB4ODAwODUsIDB4ODAwNDUsIDB4OTAwZWEsIDB4NzAxMDYsIDB4ODAwNWQsIDB4ODAwMWQsIDB4OTAwOWEsIDB4NzAxMTYsIDB4ODAwN2QsIDB4ODAwM2QsIDB4OTAwZGEsIDB4NzAxMGUsIDB4ODAwNmQsIDB4ODAwMmQsIDB4OTAwYmEsIDB4ODAwMGQsIDB4ODAwOGQsIDB4ODAwNGQsIDB4OTAwZmEsIDB4NzAxMDEsIDB4ODAwNTMsIDB4ODAwMTMsIDB4ODAxMWIsIDB4NzAxMTEsIDB4ODAwNzMsIDB4ODAwMzMsIDB4OTAwYzYsIDB4NzAxMDksIDB4ODAwNjMsIDB4ODAwMjMsIDB4OTAwYTYsIDB4ODAwMDMsIDB4ODAwODMsIDB4ODAwNDMsIDB4OTAwZTYsIDB4NzAxMDUsIDB4ODAwNWIsIDB4ODAwMWIsIDB4OTAwOTYsIDB4NzAxMTUsIDB4ODAwN2IsIDB4ODAwM2IsIDB4OTAwZDYsIDB4NzAxMGQsIDB4ODAwNmIsIDB4ODAwMmIsIDB4OTAwYjYsIDB4ODAwMGIsIDB4ODAwOGIsIDB4ODAwNGIsIDB4OTAwZjYsIDB4NzAxMDMsIDB4ODAwNTcsIDB4ODAwMTcsIDB4ODAxMWYsIDB4NzAxMTMsIDB4ODAwNzcsIDB4ODAwMzcsIDB4OTAwY2UsIDB4NzAxMGIsIDB4ODAwNjcsIDB4ODAwMjcsIDB4OTAwYWUsIDB4ODAwMDcsIDB4ODAwODcsIDB4ODAwNDcsIDB4OTAwZWUsIDB4NzAxMDcsIDB4ODAwNWYsIDB4ODAwMWYsIDB4OTAwOWUsIDB4NzAxMTcsIDB4ODAwN2YsIDB4ODAwM2YsIDB4OTAwZGUsIDB4NzAxMGYsIDB4ODAwNmYsIDB4ODAwMmYsIDB4OTAwYmUsIDB4ODAwMGYsIDB4ODAwOGYsIDB4ODAwNGYsIDB4OTAwZmUsIDB4NzAxMDAsIDB4ODAwNTAsIDB4ODAwMTAsIDB4ODAxMTgsIDB4NzAxMTAsIDB4ODAwNzAsIDB4ODAwMzAsIDB4OTAwYzEsIDB4NzAxMDgsIDB4ODAwNjAsIDB4ODAwMjAsIDB4OTAwYTEsIDB4ODAwMDAsIDB4ODAwODAsIDB4ODAwNDAsIDB4OTAwZTEsIDB4NzAxMDQsIDB4ODAwNTgsIDB4ODAwMTgsIDB4OTAwOTEsIDB4NzAxMTQsIDB4ODAwNzgsIDB4ODAwMzgsIDB4OTAwZDEsIDB4NzAxMGMsIDB4ODAwNjgsIDB4ODAwMjgsIDB4OTAwYjEsIDB4ODAwMDgsIDB4ODAwODgsIDB4ODAwNDgsIDB4OTAwZjEsIDB4NzAxMDIsIDB4ODAwNTQsIDB4ODAwMTQsIDB4ODAxMWMsIDB4NzAxMTIsIDB4ODAwNzQsIDB4ODAwMzQsIDB4OTAwYzksIDB4NzAxMGEsIDB4ODAwNjQsIDB4ODAwMjQsIDB4OTAwYTksIDB4ODAwMDQsIDB4ODAwODQsIDB4ODAwNDQsIDB4OTAwZTksIDB4NzAxMDYsIDB4ODAwNWMsIDB4ODAwMWMsIDB4OTAwOTksIDB4NzAxMTYsIDB4ODAwN2MsIDB4ODAwM2MsIDB4OTAwZDksIDB4NzAxMGUsIDB4ODAwNmMsIDB4ODAwMmMsIDB4OTAwYjksIDB4ODAwMGMsIDB4ODAwOGMsIDB4ODAwNGMsIDB4OTAwZjksIDB4NzAxMDEsIDB4ODAwNTIsIDB4ODAwMTIsIDB4ODAxMWEsIDB4NzAxMTEsIDB4ODAwNzIsIDB4ODAwMzIsIDB4OTAwYzUsIDB4NzAxMDksIDB4ODAwNjIsIDB4ODAwMjIsIDB4OTAwYTUsIDB4ODAwMDIsIDB4ODAwODIsIDB4ODAwNDIsIDB4OTAwZTUsIDB4NzAxMDUsIDB4ODAwNWEsIDB4ODAwMWEsIDB4OTAwOTUsIDB4NzAxMTUsIDB4ODAwN2EsIDB4ODAwM2EsIDB4OTAwZDUsIDB4NzAxMGQsIDB4ODAwNmEsIDB4ODAwMmEsIDB4OTAwYjUsIDB4ODAwMGEsIDB4ODAwOGEsIDB4ODAwNGEsIDB4OTAwZjUsIDB4NzAxMDMsIDB4ODAwNTYsIDB4ODAwMTYsIDB4ODAxMWUsIDB4NzAxMTMsIDB4ODAwNzYsIDB4ODAwMzYsIDB4OTAwY2QsIDB4NzAxMGIsIDB4ODAwNjYsIDB4ODAwMjYsIDB4OTAwYWQsIDB4ODAwMDYsIDB4ODAwODYsIDB4ODAwNDYsIDB4OTAwZWQsIDB4NzAxMDcsIDB4ODAwNWUsIDB4ODAwMWUsIDB4OTAwOWQsIDB4NzAxMTcsIDB4ODAwN2UsIDB4ODAwM2UsIDB4OTAwZGQsIDB4NzAxMGYsIDB4ODAwNmUsIDB4ODAwMmUsIDB4OTAwYmQsIDB4ODAwMGUsIDB4ODAwOGUsIDB4ODAwNGUsIDB4OTAwZmQsIDB4NzAxMDAsIDB4ODAwNTEsIDB4ODAwMTEsIDB4ODAxMTksIDB4NzAxMTAsIDB4ODAwNzEsIDB4ODAwMzEsIDB4OTAwYzMsIDB4NzAxMDgsIDB4ODAwNjEsIDB4ODAwMjEsIDB4OTAwYTMsIDB4ODAwMDEsIDB4ODAwODEsIDB4ODAwNDEsIDB4OTAwZTMsIDB4NzAxMDQsIDB4ODAwNTksIDB4ODAwMTksIDB4OTAwOTMsIDB4NzAxMTQsIDB4ODAwNzksIDB4ODAwMzksIDB4OTAwZDMsIDB4NzAxMGMsIDB4ODAwNjksIDB4ODAwMjksIDB4OTAwYjMsIDB4ODAwMDksIDB4ODAwODksIDB4ODAwNDksIDB4OTAwZjMsIDB4NzAxMDIsIDB4ODAwNTUsIDB4ODAwMTUsIDB4ODAxMWQsIDB4NzAxMTIsIDB4ODAwNzUsIDB4ODAwMzUsIDB4OTAwY2IsIDB4NzAxMGEsIDB4ODAwNjUsIDB4ODAwMjUsIDB4OTAwYWIsIDB4ODAwMDUsIDB4ODAwODUsIDB4ODAwNDUsIDB4OTAwZWIsIDB4NzAxMDYsIDB4ODAwNWQsIDB4ODAwMWQsIDB4OTAwOWIsIDB4NzAxMTYsIDB4ODAwN2QsIDB4ODAwM2QsIDB4OTAwZGIsIDB4NzAxMGUsIDB4ODAwNmQsIDB4ODAwMmQsIDB4OTAwYmIsIDB4ODAwMGQsIDB4ODAwOGQsIDB4ODAwNGQsIDB4OTAwZmIsIDB4NzAxMDEsIDB4ODAwNTMsIDB4ODAwMTMsIDB4ODAxMWIsIDB4NzAxMTEsIDB4ODAwNzMsIDB4ODAwMzMsIDB4OTAwYzcsIDB4NzAxMDksIDB4ODAwNjMsIDB4ODAwMjMsIDB4OTAwYTcsIDB4ODAwMDMsIDB4ODAwODMsIDB4ODAwNDMsIDB4OTAwZTcsIDB4NzAxMDUsIDB4ODAwNWIsIDB4ODAwMWIsIDB4OTAwOTcsIDB4NzAxMTUsIDB4ODAwN2IsIDB4ODAwM2IsIDB4OTAwZDcsIDB4NzAxMGQsIDB4ODAwNmIsIDB4ODAwMmIsIDB4OTAwYjcsIDB4ODAwMGIsIDB4ODAwOGIsIDB4ODAwNGIsIDB4OTAwZjcsIDB4NzAxMDMsIDB4ODAwNTcsIDB4ODAwMTcsIDB4ODAxMWYsIDB4NzAxMTMsIDB4ODAwNzcsIDB4ODAwMzcsIDB4OTAwY2YsIDB4NzAxMGIsIDB4ODAwNjcsIDB4ODAwMjcsIDB4OTAwYWYsIDB4ODAwMDcsIDB4ODAwODcsIDB4ODAwNDcsIDB4OTAwZWYsIDB4NzAxMDcsIDB4ODAwNWYsIDB4ODAwMWYsIDB4OTAwOWYsIDB4NzAxMTcsIDB4ODAwN2YsIDB4ODAwM2YsIDB4OTAwZGYsIDB4NzAxMGYsIDB4ODAwNmYsIDB4ODAwMmYsIDB4OTAwYmYsIDB4ODAwMGYsIDB4ODAwOGYsIDB4ODAwNGYsIDB4OTAwZmZdKSwgOV07XG5jb25zdCBmaXhlZERpc3RDb2RlVGFiID0gW25ldyBJbnQzMkFycmF5KFsweDUwMDAwLCAweDUwMDEwLCAweDUwMDA4LCAweDUwMDE4LCAweDUwMDA0LCAweDUwMDE0LCAweDUwMDBjLCAweDUwMDFjLCAweDUwMDAyLCAweDUwMDEyLCAweDUwMDBhLCAweDUwMDFhLCAweDUwMDA2LCAweDUwMDE2LCAweDUwMDBlLCAweDAwMDAwLCAweDUwMDAxLCAweDUwMDExLCAweDUwMDA5LCAweDUwMDE5LCAweDUwMDA1LCAweDUwMDE1LCAweDUwMDBkLCAweDUwMDFkLCAweDUwMDAzLCAweDUwMDEzLCAweDUwMDBiLCAweDUwMDFiLCAweDUwMDA3LCAweDUwMDE3LCAweDUwMDBmLCAweDAwMDAwXSksIDVdO1xuXG5jbGFzcyBGbGF0ZVN0cmVhbSBleHRlbmRzIF9kZWNvZGVfc3RyZWFtLkRlY29kZVN0cmVhbSB7XG4gIGNvbnN0cnVjdG9yKHN0ciwgbWF5YmVMZW5ndGgpIHtcbiAgICBzdXBlcihtYXliZUxlbmd0aCk7XG4gICAgdGhpcy5zdHIgPSBzdHI7XG4gICAgdGhpcy5kaWN0ID0gc3RyLmRpY3Q7XG4gICAgY29uc3QgY21mID0gc3RyLmdldEJ5dGUoKTtcbiAgICBjb25zdCBmbGcgPSBzdHIuZ2V0Qnl0ZSgpO1xuXG4gICAgaWYgKGNtZiA9PT0gLTEgfHwgZmxnID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBJbnZhbGlkIGhlYWRlciBpbiBmbGF0ZSBzdHJlYW06ICR7Y21mfSwgJHtmbGd9YCk7XG4gICAgfVxuXG4gICAgaWYgKChjbWYgJiAweDBmKSAhPT0gMHgwOCkge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBVbmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCBpbiBmbGF0ZSBzdHJlYW06ICR7Y21mfSwgJHtmbGd9YCk7XG4gICAgfVxuXG4gICAgaWYgKCgoY21mIDw8IDgpICsgZmxnKSAlIDMxICE9PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYEJhZCBGQ0hFQ0sgaW4gZmxhdGUgc3RyZWFtOiAke2NtZn0sICR7ZmxnfWApO1xuICAgIH1cblxuICAgIGlmIChmbGcgJiAweDIwKSB7XG4gICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYEZESUNUIGJpdCBzZXQgaW4gZmxhdGUgc3RyZWFtOiAke2NtZn0sICR7ZmxnfWApO1xuICAgIH1cblxuICAgIHRoaXMuY29kZVNpemUgPSAwO1xuICAgIHRoaXMuY29kZUJ1ZiA9IDA7XG4gIH1cblxuICBnZXRCaXRzKGJpdHMpIHtcbiAgICBjb25zdCBzdHIgPSB0aGlzLnN0cjtcbiAgICBsZXQgY29kZVNpemUgPSB0aGlzLmNvZGVTaXplO1xuICAgIGxldCBjb2RlQnVmID0gdGhpcy5jb2RlQnVmO1xuICAgIGxldCBiO1xuXG4gICAgd2hpbGUgKGNvZGVTaXplIDwgYml0cykge1xuICAgICAgaWYgKChiID0gc3RyLmdldEJ5dGUoKSkgPT09IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkJhZCBlbmNvZGluZyBpbiBmbGF0ZSBzdHJlYW1cIik7XG4gICAgICB9XG5cbiAgICAgIGNvZGVCdWYgfD0gYiA8PCBjb2RlU2l6ZTtcbiAgICAgIGNvZGVTaXplICs9IDg7XG4gICAgfVxuXG4gICAgYiA9IGNvZGVCdWYgJiAoMSA8PCBiaXRzKSAtIDE7XG4gICAgdGhpcy5jb2RlQnVmID0gY29kZUJ1ZiA+PiBiaXRzO1xuICAgIHRoaXMuY29kZVNpemUgPSBjb2RlU2l6ZSAtPSBiaXRzO1xuICAgIHJldHVybiBiO1xuICB9XG5cbiAgZ2V0Q29kZSh0YWJsZSkge1xuICAgIGNvbnN0IHN0ciA9IHRoaXMuc3RyO1xuICAgIGNvbnN0IGNvZGVzID0gdGFibGVbMF07XG4gICAgY29uc3QgbWF4TGVuID0gdGFibGVbMV07XG4gICAgbGV0IGNvZGVTaXplID0gdGhpcy5jb2RlU2l6ZTtcbiAgICBsZXQgY29kZUJ1ZiA9IHRoaXMuY29kZUJ1ZjtcbiAgICBsZXQgYjtcblxuICAgIHdoaWxlIChjb2RlU2l6ZSA8IG1heExlbikge1xuICAgICAgaWYgKChiID0gc3RyLmdldEJ5dGUoKSkgPT09IC0xKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjb2RlQnVmIHw9IGIgPDwgY29kZVNpemU7XG4gICAgICBjb2RlU2l6ZSArPSA4O1xuICAgIH1cblxuICAgIGNvbnN0IGNvZGUgPSBjb2Rlc1tjb2RlQnVmICYgKDEgPDwgbWF4TGVuKSAtIDFdO1xuICAgIGNvbnN0IGNvZGVMZW4gPSBjb2RlID4+IDE2O1xuICAgIGNvbnN0IGNvZGVWYWwgPSBjb2RlICYgMHhmZmZmO1xuXG4gICAgaWYgKGNvZGVMZW4gPCAxIHx8IGNvZGVTaXplIDwgY29kZUxlbikge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiQmFkIGVuY29kaW5nIGluIGZsYXRlIHN0cmVhbVwiKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvZGVCdWYgPSBjb2RlQnVmID4+IGNvZGVMZW47XG4gICAgdGhpcy5jb2RlU2l6ZSA9IGNvZGVTaXplIC0gY29kZUxlbjtcbiAgICByZXR1cm4gY29kZVZhbDtcbiAgfVxuXG4gIGdlbmVyYXRlSHVmZm1hblRhYmxlKGxlbmd0aHMpIHtcbiAgICBjb25zdCBuID0gbGVuZ3Rocy5sZW5ndGg7XG4gICAgbGV0IG1heExlbiA9IDA7XG4gICAgbGV0IGk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobGVuZ3Roc1tpXSA+IG1heExlbikge1xuICAgICAgICBtYXhMZW4gPSBsZW5ndGhzW2ldO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNpemUgPSAxIDw8IG1heExlbjtcbiAgICBjb25zdCBjb2RlcyA9IG5ldyBJbnQzMkFycmF5KHNpemUpO1xuXG4gICAgZm9yIChsZXQgbGVuID0gMSwgY29kZSA9IDAsIHNraXAgPSAyOyBsZW4gPD0gbWF4TGVuOyArK2xlbiwgY29kZSA8PD0gMSwgc2tpcCA8PD0gMSkge1xuICAgICAgZm9yIChsZXQgdmFsID0gMDsgdmFsIDwgbjsgKyt2YWwpIHtcbiAgICAgICAgaWYgKGxlbmd0aHNbdmFsXSA9PT0gbGVuKSB7XG4gICAgICAgICAgbGV0IGNvZGUyID0gMDtcbiAgICAgICAgICBsZXQgdCA9IGNvZGU7XG5cbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgICAgIGNvZGUyID0gY29kZTIgPDwgMSB8IHQgJiAxO1xuICAgICAgICAgICAgdCA+Pj0gMTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3IgKGkgPSBjb2RlMjsgaSA8IHNpemU7IGkgKz0gc2tpcCkge1xuICAgICAgICAgICAgY29kZXNbaV0gPSBsZW4gPDwgMTYgfCB2YWw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgKytjb2RlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFtjb2RlcywgbWF4TGVuXTtcbiAgfVxuXG4gIHJlYWRCbG9jaygpIHtcbiAgICBsZXQgYnVmZmVyLCBsZW47XG4gICAgY29uc3Qgc3RyID0gdGhpcy5zdHI7XG4gICAgbGV0IGhkciA9IHRoaXMuZ2V0Qml0cygzKTtcblxuICAgIGlmIChoZHIgJiAxKSB7XG4gICAgICB0aGlzLmVvZiA9IHRydWU7XG4gICAgfVxuXG4gICAgaGRyID4+PSAxO1xuXG4gICAgaWYgKGhkciA9PT0gMCkge1xuICAgICAgbGV0IGI7XG5cbiAgICAgIGlmICgoYiA9IHN0ci5nZXRCeXRlKCkpID09PSAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJCYWQgYmxvY2sgaGVhZGVyIGluIGZsYXRlIHN0cmVhbVwiKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGJsb2NrTGVuID0gYjtcblxuICAgICAgaWYgKChiID0gc3RyLmdldEJ5dGUoKSkgPT09IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkJhZCBibG9jayBoZWFkZXIgaW4gZmxhdGUgc3RyZWFtXCIpO1xuICAgICAgfVxuXG4gICAgICBibG9ja0xlbiB8PSBiIDw8IDg7XG5cbiAgICAgIGlmICgoYiA9IHN0ci5nZXRCeXRlKCkpID09PSAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJCYWQgYmxvY2sgaGVhZGVyIGluIGZsYXRlIHN0cmVhbVwiKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGNoZWNrID0gYjtcblxuICAgICAgaWYgKChiID0gc3RyLmdldEJ5dGUoKSkgPT09IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkJhZCBibG9jayBoZWFkZXIgaW4gZmxhdGUgc3RyZWFtXCIpO1xuICAgICAgfVxuXG4gICAgICBjaGVjayB8PSBiIDw8IDg7XG5cbiAgICAgIGlmIChjaGVjayAhPT0gKH5ibG9ja0xlbiAmIDB4ZmZmZikgJiYgKGJsb2NrTGVuICE9PSAwIHx8IGNoZWNrICE9PSAwKSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJCYWQgdW5jb21wcmVzc2VkIGJsb2NrIGxlbmd0aCBpbiBmbGF0ZSBzdHJlYW1cIik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29kZUJ1ZiA9IDA7XG4gICAgICB0aGlzLmNvZGVTaXplID0gMDtcbiAgICAgIGNvbnN0IGJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyTGVuZ3RoLFxuICAgICAgICAgICAgZW5kID0gYnVmZmVyTGVuZ3RoICsgYmxvY2tMZW47XG4gICAgICBidWZmZXIgPSB0aGlzLmVuc3VyZUJ1ZmZlcihlbmQpO1xuICAgICAgdGhpcy5idWZmZXJMZW5ndGggPSBlbmQ7XG5cbiAgICAgIGlmIChibG9ja0xlbiA9PT0gMCkge1xuICAgICAgICBpZiAoc3RyLnBlZWtCeXRlKCkgPT09IC0xKSB7XG4gICAgICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBibG9jayA9IHN0ci5nZXRCeXRlcyhibG9ja0xlbik7XG4gICAgICAgIGJ1ZmZlci5zZXQoYmxvY2ssIGJ1ZmZlckxlbmd0aCk7XG5cbiAgICAgICAgaWYgKGJsb2NrLmxlbmd0aCA8IGJsb2NrTGVuKSB7XG4gICAgICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgbGl0Q29kZVRhYmxlO1xuICAgIGxldCBkaXN0Q29kZVRhYmxlO1xuXG4gICAgaWYgKGhkciA9PT0gMSkge1xuICAgICAgbGl0Q29kZVRhYmxlID0gZml4ZWRMaXRDb2RlVGFiO1xuICAgICAgZGlzdENvZGVUYWJsZSA9IGZpeGVkRGlzdENvZGVUYWI7XG4gICAgfSBlbHNlIGlmIChoZHIgPT09IDIpIHtcbiAgICAgIGNvbnN0IG51bUxpdENvZGVzID0gdGhpcy5nZXRCaXRzKDUpICsgMjU3O1xuICAgICAgY29uc3QgbnVtRGlzdENvZGVzID0gdGhpcy5nZXRCaXRzKDUpICsgMTtcbiAgICAgIGNvbnN0IG51bUNvZGVMZW5Db2RlcyA9IHRoaXMuZ2V0Qml0cyg0KSArIDQ7XG4gICAgICBjb25zdCBjb2RlTGVuQ29kZUxlbmd0aHMgPSBuZXcgVWludDhBcnJheShjb2RlTGVuQ29kZU1hcC5sZW5ndGgpO1xuICAgICAgbGV0IGk7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1Db2RlTGVuQ29kZXM7ICsraSkge1xuICAgICAgICBjb2RlTGVuQ29kZUxlbmd0aHNbY29kZUxlbkNvZGVNYXBbaV1dID0gdGhpcy5nZXRCaXRzKDMpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb2RlTGVuQ29kZVRhYiA9IHRoaXMuZ2VuZXJhdGVIdWZmbWFuVGFibGUoY29kZUxlbkNvZGVMZW5ndGhzKTtcbiAgICAgIGxlbiA9IDA7XG4gICAgICBpID0gMDtcbiAgICAgIGNvbnN0IGNvZGVzID0gbnVtTGl0Q29kZXMgKyBudW1EaXN0Q29kZXM7XG4gICAgICBjb25zdCBjb2RlTGVuZ3RocyA9IG5ldyBVaW50OEFycmF5KGNvZGVzKTtcbiAgICAgIGxldCBiaXRzTGVuZ3RoLCBiaXRzT2Zmc2V0LCB3aGF0O1xuXG4gICAgICB3aGlsZSAoaSA8IGNvZGVzKSB7XG4gICAgICAgIGNvbnN0IGNvZGUgPSB0aGlzLmdldENvZGUoY29kZUxlbkNvZGVUYWIpO1xuXG4gICAgICAgIGlmIChjb2RlID09PSAxNikge1xuICAgICAgICAgIGJpdHNMZW5ndGggPSAyO1xuICAgICAgICAgIGJpdHNPZmZzZXQgPSAzO1xuICAgICAgICAgIHdoYXQgPSBsZW47XG4gICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gMTcpIHtcbiAgICAgICAgICBiaXRzTGVuZ3RoID0gMztcbiAgICAgICAgICBiaXRzT2Zmc2V0ID0gMztcbiAgICAgICAgICB3aGF0ID0gbGVuID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChjb2RlID09PSAxOCkge1xuICAgICAgICAgIGJpdHNMZW5ndGggPSA3O1xuICAgICAgICAgIGJpdHNPZmZzZXQgPSAxMTtcbiAgICAgICAgICB3aGF0ID0gbGVuID0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb2RlTGVuZ3Roc1tpKytdID0gbGVuID0gY29kZTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXBlYXRMZW5ndGggPSB0aGlzLmdldEJpdHMoYml0c0xlbmd0aCkgKyBiaXRzT2Zmc2V0O1xuXG4gICAgICAgIHdoaWxlIChyZXBlYXRMZW5ndGgtLSA+IDApIHtcbiAgICAgICAgICBjb2RlTGVuZ3Roc1tpKytdID0gd2hhdDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsaXRDb2RlVGFibGUgPSB0aGlzLmdlbmVyYXRlSHVmZm1hblRhYmxlKGNvZGVMZW5ndGhzLnN1YmFycmF5KDAsIG51bUxpdENvZGVzKSk7XG4gICAgICBkaXN0Q29kZVRhYmxlID0gdGhpcy5nZW5lcmF0ZUh1ZmZtYW5UYWJsZShjb2RlTGVuZ3Rocy5zdWJhcnJheShudW1MaXRDb2RlcywgY29kZXMpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiVW5rbm93biBibG9jayB0eXBlIGluIGZsYXRlIHN0cmVhbVwiKTtcbiAgICB9XG5cbiAgICBidWZmZXIgPSB0aGlzLmJ1ZmZlcjtcbiAgICBsZXQgbGltaXQgPSBidWZmZXIgPyBidWZmZXIubGVuZ3RoIDogMDtcbiAgICBsZXQgcG9zID0gdGhpcy5idWZmZXJMZW5ndGg7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgbGV0IGNvZGUxID0gdGhpcy5nZXRDb2RlKGxpdENvZGVUYWJsZSk7XG5cbiAgICAgIGlmIChjb2RlMSA8IDI1Nikge1xuICAgICAgICBpZiAocG9zICsgMSA+PSBsaW1pdCkge1xuICAgICAgICAgIGJ1ZmZlciA9IHRoaXMuZW5zdXJlQnVmZmVyKHBvcyArIDEpO1xuICAgICAgICAgIGxpbWl0ID0gYnVmZmVyLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1ZmZlcltwb3MrK10gPSBjb2RlMTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb2RlMSA9PT0gMjU2KSB7XG4gICAgICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gcG9zO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvZGUxIC09IDI1NztcbiAgICAgIGNvZGUxID0gbGVuZ3RoRGVjb2RlW2NvZGUxXTtcbiAgICAgIGxldCBjb2RlMiA9IGNvZGUxID4+IDE2O1xuXG4gICAgICBpZiAoY29kZTIgPiAwKSB7XG4gICAgICAgIGNvZGUyID0gdGhpcy5nZXRCaXRzKGNvZGUyKTtcbiAgICAgIH1cblxuICAgICAgbGVuID0gKGNvZGUxICYgMHhmZmZmKSArIGNvZGUyO1xuICAgICAgY29kZTEgPSB0aGlzLmdldENvZGUoZGlzdENvZGVUYWJsZSk7XG4gICAgICBjb2RlMSA9IGRpc3REZWNvZGVbY29kZTFdO1xuICAgICAgY29kZTIgPSBjb2RlMSA+PiAxNjtcblxuICAgICAgaWYgKGNvZGUyID4gMCkge1xuICAgICAgICBjb2RlMiA9IHRoaXMuZ2V0Qml0cyhjb2RlMik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRpc3QgPSAoY29kZTEgJiAweGZmZmYpICsgY29kZTI7XG5cbiAgICAgIGlmIChwb3MgKyBsZW4gPj0gbGltaXQpIHtcbiAgICAgICAgYnVmZmVyID0gdGhpcy5lbnN1cmVCdWZmZXIocG9zICsgbGVuKTtcbiAgICAgICAgbGltaXQgPSBidWZmZXIubGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBrID0gMDsgayA8IGxlbjsgKytrLCArK3Bvcykge1xuICAgICAgICBidWZmZXJbcG9zXSA9IGJ1ZmZlcltwb3MgLSBkaXN0XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxufVxuXG5leHBvcnRzLkZsYXRlU3RyZWFtID0gRmxhdGVTdHJlYW07XG5cbi8qKiovIH0pLFxuLyogMzQgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuSmJpZzJTdHJlYW0gPSB2b2lkIDA7XG5cbnZhciBfcHJpbWl0aXZlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNSk7XG5cbnZhciBfZGVjb2RlX3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oMjkpO1xuXG52YXIgX2piaWcgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDM1KTtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxuY2xhc3MgSmJpZzJTdHJlYW0gZXh0ZW5kcyBfZGVjb2RlX3N0cmVhbS5EZWNvZGVTdHJlYW0ge1xuICBjb25zdHJ1Y3RvcihzdHJlYW0sIG1heWJlTGVuZ3RoLCBwYXJhbXMpIHtcbiAgICBzdXBlcihtYXliZUxlbmd0aCk7XG4gICAgdGhpcy5zdHJlYW0gPSBzdHJlYW07XG4gICAgdGhpcy5kaWN0ID0gc3RyZWFtLmRpY3Q7XG4gICAgdGhpcy5tYXliZUxlbmd0aCA9IG1heWJlTGVuZ3RoO1xuICAgIHRoaXMucGFyYW1zID0gcGFyYW1zO1xuICB9XG5cbiAgZ2V0IGJ5dGVzKCkge1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImJ5dGVzXCIsIHRoaXMuc3RyZWFtLmdldEJ5dGVzKHRoaXMubWF5YmVMZW5ndGgpKTtcbiAgfVxuXG4gIGVuc3VyZUJ1ZmZlcihyZXF1ZXN0ZWQpIHt9XG5cbiAgcmVhZEJsb2NrKCkge1xuICAgIGlmICh0aGlzLmVvZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGpiaWcySW1hZ2UgPSBuZXcgX2piaWcuSmJpZzJJbWFnZSgpO1xuICAgIGNvbnN0IGNodW5rcyA9IFtdO1xuXG4gICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKHRoaXMucGFyYW1zKSkge1xuICAgICAgY29uc3QgZ2xvYmFsc1N0cmVhbSA9IHRoaXMucGFyYW1zLmdldChcIkpCSUcyR2xvYmFsc1wiKTtcblxuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkoZ2xvYmFsc1N0cmVhbSkpIHtcbiAgICAgICAgY29uc3QgZ2xvYmFscyA9IGdsb2JhbHNTdHJlYW0uZ2V0Qnl0ZXMoKTtcbiAgICAgICAgY2h1bmtzLnB1c2goe1xuICAgICAgICAgIGRhdGE6IGdsb2JhbHMsXG4gICAgICAgICAgc3RhcnQ6IDAsXG4gICAgICAgICAgZW5kOiBnbG9iYWxzLmxlbmd0aFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjaHVua3MucHVzaCh7XG4gICAgICBkYXRhOiB0aGlzLmJ5dGVzLFxuICAgICAgc3RhcnQ6IDAsXG4gICAgICBlbmQ6IHRoaXMuYnl0ZXMubGVuZ3RoXG4gICAgfSk7XG4gICAgY29uc3QgZGF0YSA9IGpiaWcySW1hZ2UucGFyc2VDaHVua3MoY2h1bmtzKTtcbiAgICBjb25zdCBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGg7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGFMZW5ndGg7IGkrKykge1xuICAgICAgZGF0YVtpXSBePSAweGZmO1xuICAgIH1cblxuICAgIHRoaXMuYnVmZmVyID0gZGF0YTtcbiAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IGRhdGFMZW5ndGg7XG4gICAgdGhpcy5lb2YgPSB0cnVlO1xuICB9XG5cbn1cblxuZXhwb3J0cy5KYmlnMlN0cmVhbSA9IEpiaWcyU3RyZWFtO1xuXG4vKioqLyB9KSxcbi8qIDM1ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLkpiaWcySW1hZ2UgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfY29yZV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oOSk7XG5cbnZhciBfYXJpdGhtZXRpY19kZWNvZGVyID0gX193X3BkZmpzX3JlcXVpcmVfXygzNik7XG5cbnZhciBfY2NpdHQgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDMyKTtcblxuY2xhc3MgSmJpZzJFcnJvciBleHRlbmRzIF91dGlsLkJhc2VFeGNlcHRpb24ge1xuICBjb25zdHJ1Y3Rvcihtc2cpIHtcbiAgICBzdXBlcihgSkJJRzIgZXJyb3I6ICR7bXNnfWAsIFwiSmJpZzJFcnJvclwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIENvbnRleHRDYWNoZSB7XG4gIGdldENvbnRleHRzKGlkKSB7XG4gICAgaWYgKGlkIGluIHRoaXMpIHtcbiAgICAgIHJldHVybiB0aGlzW2lkXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1tpZF0gPSBuZXcgSW50OEFycmF5KDEgPDwgMTYpO1xuICB9XG5cbn1cblxuY2xhc3MgRGVjb2RpbmdDb250ZXh0IHtcbiAgY29uc3RydWN0b3IoZGF0YSwgc3RhcnQsIGVuZCkge1xuICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICAgIHRoaXMuZW5kID0gZW5kO1xuICB9XG5cbiAgZ2V0IGRlY29kZXIoKSB7XG4gICAgY29uc3QgZGVjb2RlciA9IG5ldyBfYXJpdGhtZXRpY19kZWNvZGVyLkFyaXRobWV0aWNEZWNvZGVyKHRoaXMuZGF0YSwgdGhpcy5zdGFydCwgdGhpcy5lbmQpO1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImRlY29kZXJcIiwgZGVjb2Rlcik7XG4gIH1cblxuICBnZXQgY29udGV4dENhY2hlKCkge1xuICAgIGNvbnN0IGNhY2hlID0gbmV3IENvbnRleHRDYWNoZSgpO1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImNvbnRleHRDYWNoZVwiLCBjYWNoZSk7XG4gIH1cblxufVxuXG5mdW5jdGlvbiBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgcHJvY2VkdXJlLCBkZWNvZGVyKSB7XG4gIGNvbnN0IGNvbnRleHRzID0gY29udGV4dENhY2hlLmdldENvbnRleHRzKHByb2NlZHVyZSk7XG4gIGxldCBwcmV2ID0gMTtcblxuICBmdW5jdGlvbiByZWFkQml0cyhsZW5ndGgpIHtcbiAgICBsZXQgdiA9IDA7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBiaXQgPSBkZWNvZGVyLnJlYWRCaXQoY29udGV4dHMsIHByZXYpO1xuICAgICAgcHJldiA9IHByZXYgPCAyNTYgPyBwcmV2IDw8IDEgfCBiaXQgOiAocHJldiA8PCAxIHwgYml0KSAmIDUxMSB8IDI1NjtcbiAgICAgIHYgPSB2IDw8IDEgfCBiaXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHYgPj4+IDA7XG4gIH1cblxuICBjb25zdCBzaWduID0gcmVhZEJpdHMoMSk7XG4gIGNvbnN0IHZhbHVlID0gcmVhZEJpdHMoMSkgPyByZWFkQml0cygxKSA/IHJlYWRCaXRzKDEpID8gcmVhZEJpdHMoMSkgPyByZWFkQml0cygxKSA/IHJlYWRCaXRzKDMyKSArIDQ0MzYgOiByZWFkQml0cygxMikgKyAzNDAgOiByZWFkQml0cyg4KSArIDg0IDogcmVhZEJpdHMoNikgKyAyMCA6IHJlYWRCaXRzKDQpICsgNCA6IHJlYWRCaXRzKDIpO1xuXG4gIGlmIChzaWduID09PSAwKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9IGVsc2UgaWYgKHZhbHVlID4gMCkge1xuICAgIHJldHVybiAtdmFsdWU7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZGVjb2RlSUFJRChjb250ZXh0Q2FjaGUsIGRlY29kZXIsIGNvZGVMZW5ndGgpIHtcbiAgY29uc3QgY29udGV4dHMgPSBjb250ZXh0Q2FjaGUuZ2V0Q29udGV4dHMoXCJJQUlEXCIpO1xuICBsZXQgcHJldiA9IDE7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2RlTGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBiaXQgPSBkZWNvZGVyLnJlYWRCaXQoY29udGV4dHMsIHByZXYpO1xuICAgIHByZXYgPSBwcmV2IDw8IDEgfCBiaXQ7XG4gIH1cblxuICBpZiAoY29kZUxlbmd0aCA8IDMxKSB7XG4gICAgcmV0dXJuIHByZXYgJiAoMSA8PCBjb2RlTGVuZ3RoKSAtIDE7XG4gIH1cblxuICByZXR1cm4gcHJldiAmIDB4N2ZmZmZmZmY7XG59XG5cbmNvbnN0IFNlZ21lbnRUeXBlcyA9IFtcIlN5bWJvbERpY3Rpb25hcnlcIiwgbnVsbCwgbnVsbCwgbnVsbCwgXCJJbnRlcm1lZGlhdGVUZXh0UmVnaW9uXCIsIG51bGwsIFwiSW1tZWRpYXRlVGV4dFJlZ2lvblwiLCBcIkltbWVkaWF0ZUxvc3NsZXNzVGV4dFJlZ2lvblwiLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBcIlBhdHRlcm5EaWN0aW9uYXJ5XCIsIG51bGwsIG51bGwsIG51bGwsIFwiSW50ZXJtZWRpYXRlSGFsZnRvbmVSZWdpb25cIiwgbnVsbCwgXCJJbW1lZGlhdGVIYWxmdG9uZVJlZ2lvblwiLCBcIkltbWVkaWF0ZUxvc3NsZXNzSGFsZnRvbmVSZWdpb25cIiwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgXCJJbnRlcm1lZGlhdGVHZW5lcmljUmVnaW9uXCIsIG51bGwsIFwiSW1tZWRpYXRlR2VuZXJpY1JlZ2lvblwiLCBcIkltbWVkaWF0ZUxvc3NsZXNzR2VuZXJpY1JlZ2lvblwiLCBcIkludGVybWVkaWF0ZUdlbmVyaWNSZWZpbmVtZW50UmVnaW9uXCIsIG51bGwsIFwiSW1tZWRpYXRlR2VuZXJpY1JlZmluZW1lbnRSZWdpb25cIiwgXCJJbW1lZGlhdGVMb3NzbGVzc0dlbmVyaWNSZWZpbmVtZW50UmVnaW9uXCIsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIFwiUGFnZUluZm9ybWF0aW9uXCIsIFwiRW5kT2ZQYWdlXCIsIFwiRW5kT2ZTdHJpcGVcIiwgXCJFbmRPZkZpbGVcIiwgXCJQcm9maWxlc1wiLCBcIlRhYmxlc1wiLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBcIkV4dGVuc2lvblwiXTtcbmNvbnN0IENvZGluZ1RlbXBsYXRlcyA9IFtbe1xuICB4OiAtMSxcbiAgeTogLTJcbn0sIHtcbiAgeDogMCxcbiAgeTogLTJcbn0sIHtcbiAgeDogMSxcbiAgeTogLTJcbn0sIHtcbiAgeDogLTIsXG4gIHk6IC0xXG59LCB7XG4gIHg6IC0xLFxuICB5OiAtMVxufSwge1xuICB4OiAwLFxuICB5OiAtMVxufSwge1xuICB4OiAxLFxuICB5OiAtMVxufSwge1xuICB4OiAyLFxuICB5OiAtMVxufSwge1xuICB4OiAtNCxcbiAgeTogMFxufSwge1xuICB4OiAtMyxcbiAgeTogMFxufSwge1xuICB4OiAtMixcbiAgeTogMFxufSwge1xuICB4OiAtMSxcbiAgeTogMFxufV0sIFt7XG4gIHg6IC0xLFxuICB5OiAtMlxufSwge1xuICB4OiAwLFxuICB5OiAtMlxufSwge1xuICB4OiAxLFxuICB5OiAtMlxufSwge1xuICB4OiAyLFxuICB5OiAtMlxufSwge1xuICB4OiAtMixcbiAgeTogLTFcbn0sIHtcbiAgeDogLTEsXG4gIHk6IC0xXG59LCB7XG4gIHg6IDAsXG4gIHk6IC0xXG59LCB7XG4gIHg6IDEsXG4gIHk6IC0xXG59LCB7XG4gIHg6IDIsXG4gIHk6IC0xXG59LCB7XG4gIHg6IC0zLFxuICB5OiAwXG59LCB7XG4gIHg6IC0yLFxuICB5OiAwXG59LCB7XG4gIHg6IC0xLFxuICB5OiAwXG59XSwgW3tcbiAgeDogLTEsXG4gIHk6IC0yXG59LCB7XG4gIHg6IDAsXG4gIHk6IC0yXG59LCB7XG4gIHg6IDEsXG4gIHk6IC0yXG59LCB7XG4gIHg6IC0yLFxuICB5OiAtMVxufSwge1xuICB4OiAtMSxcbiAgeTogLTFcbn0sIHtcbiAgeDogMCxcbiAgeTogLTFcbn0sIHtcbiAgeDogMSxcbiAgeTogLTFcbn0sIHtcbiAgeDogLTIsXG4gIHk6IDBcbn0sIHtcbiAgeDogLTEsXG4gIHk6IDBcbn1dLCBbe1xuICB4OiAtMyxcbiAgeTogLTFcbn0sIHtcbiAgeDogLTIsXG4gIHk6IC0xXG59LCB7XG4gIHg6IC0xLFxuICB5OiAtMVxufSwge1xuICB4OiAwLFxuICB5OiAtMVxufSwge1xuICB4OiAxLFxuICB5OiAtMVxufSwge1xuICB4OiAtNCxcbiAgeTogMFxufSwge1xuICB4OiAtMyxcbiAgeTogMFxufSwge1xuICB4OiAtMixcbiAgeTogMFxufSwge1xuICB4OiAtMSxcbiAgeTogMFxufV1dO1xuY29uc3QgUmVmaW5lbWVudFRlbXBsYXRlcyA9IFt7XG4gIGNvZGluZzogW3tcbiAgICB4OiAwLFxuICAgIHk6IC0xXG4gIH0sIHtcbiAgICB4OiAxLFxuICAgIHk6IC0xXG4gIH0sIHtcbiAgICB4OiAtMSxcbiAgICB5OiAwXG4gIH1dLFxuICByZWZlcmVuY2U6IFt7XG4gICAgeDogMCxcbiAgICB5OiAtMVxuICB9LCB7XG4gICAgeDogMSxcbiAgICB5OiAtMVxuICB9LCB7XG4gICAgeDogLTEsXG4gICAgeTogMFxuICB9LCB7XG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH0sIHtcbiAgICB4OiAxLFxuICAgIHk6IDBcbiAgfSwge1xuICAgIHg6IC0xLFxuICAgIHk6IDFcbiAgfSwge1xuICAgIHg6IDAsXG4gICAgeTogMVxuICB9LCB7XG4gICAgeDogMSxcbiAgICB5OiAxXG4gIH1dXG59LCB7XG4gIGNvZGluZzogW3tcbiAgICB4OiAtMSxcbiAgICB5OiAtMVxuICB9LCB7XG4gICAgeDogMCxcbiAgICB5OiAtMVxuICB9LCB7XG4gICAgeDogMSxcbiAgICB5OiAtMVxuICB9LCB7XG4gICAgeDogLTEsXG4gICAgeTogMFxuICB9XSxcbiAgcmVmZXJlbmNlOiBbe1xuICAgIHg6IDAsXG4gICAgeTogLTFcbiAgfSwge1xuICAgIHg6IC0xLFxuICAgIHk6IDBcbiAgfSwge1xuICAgIHg6IDAsXG4gICAgeTogMFxuICB9LCB7XG4gICAgeDogMSxcbiAgICB5OiAwXG4gIH0sIHtcbiAgICB4OiAwLFxuICAgIHk6IDFcbiAgfSwge1xuICAgIHg6IDEsXG4gICAgeTogMVxuICB9XVxufV07XG5jb25zdCBSZXVzZWRDb250ZXh0cyA9IFsweDliMjUsIDB4MDc5NSwgMHgwMGU1LCAweDAxOTVdO1xuY29uc3QgUmVmaW5lbWVudFJldXNlZENvbnRleHRzID0gWzB4MDAyMCwgMHgwMDA4XTtcblxuZnVuY3Rpb24gZGVjb2RlQml0bWFwVGVtcGxhdGUwKHdpZHRoLCBoZWlnaHQsIGRlY29kaW5nQ29udGV4dCkge1xuICBjb25zdCBkZWNvZGVyID0gZGVjb2RpbmdDb250ZXh0LmRlY29kZXI7XG4gIGNvbnN0IGNvbnRleHRzID0gZGVjb2RpbmdDb250ZXh0LmNvbnRleHRDYWNoZS5nZXRDb250ZXh0cyhcIkdCXCIpO1xuICBjb25zdCBiaXRtYXAgPSBbXTtcbiAgbGV0IGNvbnRleHRMYWJlbCwgaSwgaiwgcGl4ZWwsIHJvdywgcm93MSwgcm93MjtcbiAgY29uc3QgT0xEX1BJWEVMX01BU0sgPSAweDdiZjc7XG5cbiAgZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7XG4gICAgcm93ID0gYml0bWFwW2ldID0gbmV3IFVpbnQ4QXJyYXkod2lkdGgpO1xuICAgIHJvdzEgPSBpIDwgMSA/IHJvdyA6IGJpdG1hcFtpIC0gMV07XG4gICAgcm93MiA9IGkgPCAyID8gcm93IDogYml0bWFwW2kgLSAyXTtcbiAgICBjb250ZXh0TGFiZWwgPSByb3cyWzBdIDw8IDEzIHwgcm93MlsxXSA8PCAxMiB8IHJvdzJbMl0gPDwgMTEgfCByb3cxWzBdIDw8IDcgfCByb3cxWzFdIDw8IDYgfCByb3cxWzJdIDw8IDUgfCByb3cxWzNdIDw8IDQ7XG5cbiAgICBmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykge1xuICAgICAgcm93W2pdID0gcGl4ZWwgPSBkZWNvZGVyLnJlYWRCaXQoY29udGV4dHMsIGNvbnRleHRMYWJlbCk7XG4gICAgICBjb250ZXh0TGFiZWwgPSAoY29udGV4dExhYmVsICYgT0xEX1BJWEVMX01BU0spIDw8IDEgfCAoaiArIDMgPCB3aWR0aCA/IHJvdzJbaiArIDNdIDw8IDExIDogMCkgfCAoaiArIDQgPCB3aWR0aCA/IHJvdzFbaiArIDRdIDw8IDQgOiAwKSB8IHBpeGVsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBiaXRtYXA7XG59XG5cbmZ1bmN0aW9uIGRlY29kZUJpdG1hcChtbXIsIHdpZHRoLCBoZWlnaHQsIHRlbXBsYXRlSW5kZXgsIHByZWRpY3Rpb24sIHNraXAsIGF0LCBkZWNvZGluZ0NvbnRleHQpIHtcbiAgaWYgKG1tcikge1xuICAgIGNvbnN0IGlucHV0ID0gbmV3IFJlYWRlcihkZWNvZGluZ0NvbnRleHQuZGF0YSwgZGVjb2RpbmdDb250ZXh0LnN0YXJ0LCBkZWNvZGluZ0NvbnRleHQuZW5kKTtcbiAgICByZXR1cm4gZGVjb2RlTU1SQml0bWFwKGlucHV0LCB3aWR0aCwgaGVpZ2h0LCBmYWxzZSk7XG4gIH1cblxuICBpZiAodGVtcGxhdGVJbmRleCA9PT0gMCAmJiAhc2tpcCAmJiAhcHJlZGljdGlvbiAmJiBhdC5sZW5ndGggPT09IDQgJiYgYXRbMF0ueCA9PT0gMyAmJiBhdFswXS55ID09PSAtMSAmJiBhdFsxXS54ID09PSAtMyAmJiBhdFsxXS55ID09PSAtMSAmJiBhdFsyXS54ID09PSAyICYmIGF0WzJdLnkgPT09IC0yICYmIGF0WzNdLnggPT09IC0yICYmIGF0WzNdLnkgPT09IC0yKSB7XG4gICAgcmV0dXJuIGRlY29kZUJpdG1hcFRlbXBsYXRlMCh3aWR0aCwgaGVpZ2h0LCBkZWNvZGluZ0NvbnRleHQpO1xuICB9XG5cbiAgY29uc3QgdXNlc2tpcCA9ICEhc2tpcDtcbiAgY29uc3QgdGVtcGxhdGUgPSBDb2RpbmdUZW1wbGF0ZXNbdGVtcGxhdGVJbmRleF0uY29uY2F0KGF0KTtcbiAgdGVtcGxhdGUuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBhLnkgLSBiLnkgfHwgYS54IC0gYi54O1xuICB9KTtcbiAgY29uc3QgdGVtcGxhdGVMZW5ndGggPSB0ZW1wbGF0ZS5sZW5ndGg7XG4gIGNvbnN0IHRlbXBsYXRlWCA9IG5ldyBJbnQ4QXJyYXkodGVtcGxhdGVMZW5ndGgpO1xuICBjb25zdCB0ZW1wbGF0ZVkgPSBuZXcgSW50OEFycmF5KHRlbXBsYXRlTGVuZ3RoKTtcbiAgY29uc3QgY2hhbmdpbmdUZW1wbGF0ZUVudHJpZXMgPSBbXTtcbiAgbGV0IHJldXNlTWFzayA9IDAsXG4gICAgICBtaW5YID0gMCxcbiAgICAgIG1heFggPSAwLFxuICAgICAgbWluWSA9IDA7XG4gIGxldCBjLCBrO1xuXG4gIGZvciAoayA9IDA7IGsgPCB0ZW1wbGF0ZUxlbmd0aDsgaysrKSB7XG4gICAgdGVtcGxhdGVYW2tdID0gdGVtcGxhdGVba10ueDtcbiAgICB0ZW1wbGF0ZVlba10gPSB0ZW1wbGF0ZVtrXS55O1xuICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCB0ZW1wbGF0ZVtrXS54KTtcbiAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgdGVtcGxhdGVba10ueCk7XG4gICAgbWluWSA9IE1hdGgubWluKG1pblksIHRlbXBsYXRlW2tdLnkpO1xuXG4gICAgaWYgKGsgPCB0ZW1wbGF0ZUxlbmd0aCAtIDEgJiYgdGVtcGxhdGVba10ueSA9PT0gdGVtcGxhdGVbayArIDFdLnkgJiYgdGVtcGxhdGVba10ueCA9PT0gdGVtcGxhdGVbayArIDFdLnggLSAxKSB7XG4gICAgICByZXVzZU1hc2sgfD0gMSA8PCB0ZW1wbGF0ZUxlbmd0aCAtIDEgLSBrO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGFuZ2luZ1RlbXBsYXRlRW50cmllcy5wdXNoKGspO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNoYW5naW5nRW50cmllc0xlbmd0aCA9IGNoYW5naW5nVGVtcGxhdGVFbnRyaWVzLmxlbmd0aDtcbiAgY29uc3QgY2hhbmdpbmdUZW1wbGF0ZVggPSBuZXcgSW50OEFycmF5KGNoYW5naW5nRW50cmllc0xlbmd0aCk7XG4gIGNvbnN0IGNoYW5naW5nVGVtcGxhdGVZID0gbmV3IEludDhBcnJheShjaGFuZ2luZ0VudHJpZXNMZW5ndGgpO1xuICBjb25zdCBjaGFuZ2luZ1RlbXBsYXRlQml0ID0gbmV3IFVpbnQxNkFycmF5KGNoYW5naW5nRW50cmllc0xlbmd0aCk7XG5cbiAgZm9yIChjID0gMDsgYyA8IGNoYW5naW5nRW50cmllc0xlbmd0aDsgYysrKSB7XG4gICAgayA9IGNoYW5naW5nVGVtcGxhdGVFbnRyaWVzW2NdO1xuICAgIGNoYW5naW5nVGVtcGxhdGVYW2NdID0gdGVtcGxhdGVba10ueDtcbiAgICBjaGFuZ2luZ1RlbXBsYXRlWVtjXSA9IHRlbXBsYXRlW2tdLnk7XG4gICAgY2hhbmdpbmdUZW1wbGF0ZUJpdFtjXSA9IDEgPDwgdGVtcGxhdGVMZW5ndGggLSAxIC0gaztcbiAgfVxuXG4gIGNvbnN0IHNiYl9sZWZ0ID0gLW1pblg7XG4gIGNvbnN0IHNiYl90b3AgPSAtbWluWTtcbiAgY29uc3Qgc2JiX3JpZ2h0ID0gd2lkdGggLSBtYXhYO1xuICBjb25zdCBwc2V1ZG9QaXhlbENvbnRleHQgPSBSZXVzZWRDb250ZXh0c1t0ZW1wbGF0ZUluZGV4XTtcbiAgbGV0IHJvdyA9IG5ldyBVaW50OEFycmF5KHdpZHRoKTtcbiAgY29uc3QgYml0bWFwID0gW107XG4gIGNvbnN0IGRlY29kZXIgPSBkZWNvZGluZ0NvbnRleHQuZGVjb2RlcjtcbiAgY29uc3QgY29udGV4dHMgPSBkZWNvZGluZ0NvbnRleHQuY29udGV4dENhY2hlLmdldENvbnRleHRzKFwiR0JcIik7XG4gIGxldCBsdHAgPSAwLFxuICAgICAgaixcbiAgICAgIGkwLFxuICAgICAgajAsXG4gICAgICBjb250ZXh0TGFiZWwgPSAwLFxuICAgICAgYml0LFxuICAgICAgc2hpZnQ7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykge1xuICAgIGlmIChwcmVkaWN0aW9uKSB7XG4gICAgICBjb25zdCBzbHRwID0gZGVjb2Rlci5yZWFkQml0KGNvbnRleHRzLCBwc2V1ZG9QaXhlbENvbnRleHQpO1xuICAgICAgbHRwIF49IHNsdHA7XG5cbiAgICAgIGlmIChsdHApIHtcbiAgICAgICAgYml0bWFwLnB1c2gocm93KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcm93ID0gbmV3IFVpbnQ4QXJyYXkocm93KTtcbiAgICBiaXRtYXAucHVzaChyb3cpO1xuXG4gICAgZm9yIChqID0gMDsgaiA8IHdpZHRoOyBqKyspIHtcbiAgICAgIGlmICh1c2Vza2lwICYmIHNraXBbaV1bal0pIHtcbiAgICAgICAgcm93W2pdID0gMDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChqID49IHNiYl9sZWZ0ICYmIGogPCBzYmJfcmlnaHQgJiYgaSA+PSBzYmJfdG9wKSB7XG4gICAgICAgIGNvbnRleHRMYWJlbCA9IGNvbnRleHRMYWJlbCA8PCAxICYgcmV1c2VNYXNrO1xuXG4gICAgICAgIGZvciAoayA9IDA7IGsgPCBjaGFuZ2luZ0VudHJpZXNMZW5ndGg7IGsrKykge1xuICAgICAgICAgIGkwID0gaSArIGNoYW5naW5nVGVtcGxhdGVZW2tdO1xuICAgICAgICAgIGowID0gaiArIGNoYW5naW5nVGVtcGxhdGVYW2tdO1xuICAgICAgICAgIGJpdCA9IGJpdG1hcFtpMF1bajBdO1xuXG4gICAgICAgICAgaWYgKGJpdCkge1xuICAgICAgICAgICAgYml0ID0gY2hhbmdpbmdUZW1wbGF0ZUJpdFtrXTtcbiAgICAgICAgICAgIGNvbnRleHRMYWJlbCB8PSBiaXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250ZXh0TGFiZWwgPSAwO1xuICAgICAgICBzaGlmdCA9IHRlbXBsYXRlTGVuZ3RoIC0gMTtcblxuICAgICAgICBmb3IgKGsgPSAwOyBrIDwgdGVtcGxhdGVMZW5ndGg7IGsrKywgc2hpZnQtLSkge1xuICAgICAgICAgIGowID0gaiArIHRlbXBsYXRlWFtrXTtcblxuICAgICAgICAgIGlmIChqMCA+PSAwICYmIGowIDwgd2lkdGgpIHtcbiAgICAgICAgICAgIGkwID0gaSArIHRlbXBsYXRlWVtrXTtcblxuICAgICAgICAgICAgaWYgKGkwID49IDApIHtcbiAgICAgICAgICAgICAgYml0ID0gYml0bWFwW2kwXVtqMF07XG5cbiAgICAgICAgICAgICAgaWYgKGJpdCkge1xuICAgICAgICAgICAgICAgIGNvbnRleHRMYWJlbCB8PSBiaXQgPDwgc2hpZnQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgcGl4ZWwgPSBkZWNvZGVyLnJlYWRCaXQoY29udGV4dHMsIGNvbnRleHRMYWJlbCk7XG4gICAgICByb3dbal0gPSBwaXhlbDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYml0bWFwO1xufVxuXG5mdW5jdGlvbiBkZWNvZGVSZWZpbmVtZW50KHdpZHRoLCBoZWlnaHQsIHRlbXBsYXRlSW5kZXgsIHJlZmVyZW5jZUJpdG1hcCwgb2Zmc2V0WCwgb2Zmc2V0WSwgcHJlZGljdGlvbiwgYXQsIGRlY29kaW5nQ29udGV4dCkge1xuICBsZXQgY29kaW5nVGVtcGxhdGUgPSBSZWZpbmVtZW50VGVtcGxhdGVzW3RlbXBsYXRlSW5kZXhdLmNvZGluZztcblxuICBpZiAodGVtcGxhdGVJbmRleCA9PT0gMCkge1xuICAgIGNvZGluZ1RlbXBsYXRlID0gY29kaW5nVGVtcGxhdGUuY29uY2F0KFthdFswXV0pO1xuICB9XG5cbiAgY29uc3QgY29kaW5nVGVtcGxhdGVMZW5ndGggPSBjb2RpbmdUZW1wbGF0ZS5sZW5ndGg7XG4gIGNvbnN0IGNvZGluZ1RlbXBsYXRlWCA9IG5ldyBJbnQzMkFycmF5KGNvZGluZ1RlbXBsYXRlTGVuZ3RoKTtcbiAgY29uc3QgY29kaW5nVGVtcGxhdGVZID0gbmV3IEludDMyQXJyYXkoY29kaW5nVGVtcGxhdGVMZW5ndGgpO1xuICBsZXQgaztcblxuICBmb3IgKGsgPSAwOyBrIDwgY29kaW5nVGVtcGxhdGVMZW5ndGg7IGsrKykge1xuICAgIGNvZGluZ1RlbXBsYXRlWFtrXSA9IGNvZGluZ1RlbXBsYXRlW2tdLng7XG4gICAgY29kaW5nVGVtcGxhdGVZW2tdID0gY29kaW5nVGVtcGxhdGVba10ueTtcbiAgfVxuXG4gIGxldCByZWZlcmVuY2VUZW1wbGF0ZSA9IFJlZmluZW1lbnRUZW1wbGF0ZXNbdGVtcGxhdGVJbmRleF0ucmVmZXJlbmNlO1xuXG4gIGlmICh0ZW1wbGF0ZUluZGV4ID09PSAwKSB7XG4gICAgcmVmZXJlbmNlVGVtcGxhdGUgPSByZWZlcmVuY2VUZW1wbGF0ZS5jb25jYXQoW2F0WzFdXSk7XG4gIH1cblxuICBjb25zdCByZWZlcmVuY2VUZW1wbGF0ZUxlbmd0aCA9IHJlZmVyZW5jZVRlbXBsYXRlLmxlbmd0aDtcbiAgY29uc3QgcmVmZXJlbmNlVGVtcGxhdGVYID0gbmV3IEludDMyQXJyYXkocmVmZXJlbmNlVGVtcGxhdGVMZW5ndGgpO1xuICBjb25zdCByZWZlcmVuY2VUZW1wbGF0ZVkgPSBuZXcgSW50MzJBcnJheShyZWZlcmVuY2VUZW1wbGF0ZUxlbmd0aCk7XG5cbiAgZm9yIChrID0gMDsgayA8IHJlZmVyZW5jZVRlbXBsYXRlTGVuZ3RoOyBrKyspIHtcbiAgICByZWZlcmVuY2VUZW1wbGF0ZVhba10gPSByZWZlcmVuY2VUZW1wbGF0ZVtrXS54O1xuICAgIHJlZmVyZW5jZVRlbXBsYXRlWVtrXSA9IHJlZmVyZW5jZVRlbXBsYXRlW2tdLnk7XG4gIH1cblxuICBjb25zdCByZWZlcmVuY2VXaWR0aCA9IHJlZmVyZW5jZUJpdG1hcFswXS5sZW5ndGg7XG4gIGNvbnN0IHJlZmVyZW5jZUhlaWdodCA9IHJlZmVyZW5jZUJpdG1hcC5sZW5ndGg7XG4gIGNvbnN0IHBzZXVkb1BpeGVsQ29udGV4dCA9IFJlZmluZW1lbnRSZXVzZWRDb250ZXh0c1t0ZW1wbGF0ZUluZGV4XTtcbiAgY29uc3QgYml0bWFwID0gW107XG4gIGNvbnN0IGRlY29kZXIgPSBkZWNvZGluZ0NvbnRleHQuZGVjb2RlcjtcbiAgY29uc3QgY29udGV4dHMgPSBkZWNvZGluZ0NvbnRleHQuY29udGV4dENhY2hlLmdldENvbnRleHRzKFwiR1JcIik7XG4gIGxldCBsdHAgPSAwO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHtcbiAgICBpZiAocHJlZGljdGlvbikge1xuICAgICAgY29uc3Qgc2x0cCA9IGRlY29kZXIucmVhZEJpdChjb250ZXh0cywgcHNldWRvUGl4ZWxDb250ZXh0KTtcbiAgICAgIGx0cCBePSBzbHRwO1xuXG4gICAgICBpZiAobHRwKSB7XG4gICAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKFwicHJlZGljdGlvbiBpcyBub3Qgc3VwcG9ydGVkXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJvdyA9IG5ldyBVaW50OEFycmF5KHdpZHRoKTtcbiAgICBiaXRtYXAucHVzaChyb3cpO1xuXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB3aWR0aDsgaisrKSB7XG4gICAgICBsZXQgaTAsIGowO1xuICAgICAgbGV0IGNvbnRleHRMYWJlbCA9IDA7XG5cbiAgICAgIGZvciAoayA9IDA7IGsgPCBjb2RpbmdUZW1wbGF0ZUxlbmd0aDsgaysrKSB7XG4gICAgICAgIGkwID0gaSArIGNvZGluZ1RlbXBsYXRlWVtrXTtcbiAgICAgICAgajAgPSBqICsgY29kaW5nVGVtcGxhdGVYW2tdO1xuXG4gICAgICAgIGlmIChpMCA8IDAgfHwgajAgPCAwIHx8IGowID49IHdpZHRoKSB7XG4gICAgICAgICAgY29udGV4dExhYmVsIDw8PSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnRleHRMYWJlbCA9IGNvbnRleHRMYWJlbCA8PCAxIHwgYml0bWFwW2kwXVtqMF07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChrID0gMDsgayA8IHJlZmVyZW5jZVRlbXBsYXRlTGVuZ3RoOyBrKyspIHtcbiAgICAgICAgaTAgPSBpICsgcmVmZXJlbmNlVGVtcGxhdGVZW2tdIC0gb2Zmc2V0WTtcbiAgICAgICAgajAgPSBqICsgcmVmZXJlbmNlVGVtcGxhdGVYW2tdIC0gb2Zmc2V0WDtcblxuICAgICAgICBpZiAoaTAgPCAwIHx8IGkwID49IHJlZmVyZW5jZUhlaWdodCB8fCBqMCA8IDAgfHwgajAgPj0gcmVmZXJlbmNlV2lkdGgpIHtcbiAgICAgICAgICBjb250ZXh0TGFiZWwgPDw9IDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udGV4dExhYmVsID0gY29udGV4dExhYmVsIDw8IDEgfCByZWZlcmVuY2VCaXRtYXBbaTBdW2owXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBwaXhlbCA9IGRlY29kZXIucmVhZEJpdChjb250ZXh0cywgY29udGV4dExhYmVsKTtcbiAgICAgIHJvd1tqXSA9IHBpeGVsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBiaXRtYXA7XG59XG5cbmZ1bmN0aW9uIGRlY29kZVN5bWJvbERpY3Rpb25hcnkoaHVmZm1hbiwgcmVmaW5lbWVudCwgc3ltYm9scywgbnVtYmVyT2ZOZXdTeW1ib2xzLCBudW1iZXJPZkV4cG9ydGVkU3ltYm9scywgaHVmZm1hblRhYmxlcywgdGVtcGxhdGVJbmRleCwgYXQsIHJlZmluZW1lbnRUZW1wbGF0ZUluZGV4LCByZWZpbmVtZW50QXQsIGRlY29kaW5nQ29udGV4dCwgaHVmZm1hbklucHV0KSB7XG4gIGlmIChodWZmbWFuICYmIHJlZmluZW1lbnQpIHtcbiAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihcInN5bWJvbCByZWZpbmVtZW50IHdpdGggSHVmZm1hbiBpcyBub3Qgc3VwcG9ydGVkXCIpO1xuICB9XG5cbiAgY29uc3QgbmV3U3ltYm9scyA9IFtdO1xuICBsZXQgY3VycmVudEhlaWdodCA9IDA7XG4gIGxldCBzeW1ib2xDb2RlTGVuZ3RoID0gKDAsIF9jb3JlX3V0aWxzLmxvZzIpKHN5bWJvbHMubGVuZ3RoICsgbnVtYmVyT2ZOZXdTeW1ib2xzKTtcbiAgY29uc3QgZGVjb2RlciA9IGRlY29kaW5nQ29udGV4dC5kZWNvZGVyO1xuICBjb25zdCBjb250ZXh0Q2FjaGUgPSBkZWNvZGluZ0NvbnRleHQuY29udGV4dENhY2hlO1xuICBsZXQgdGFibGVCMSwgc3ltYm9sV2lkdGhzO1xuXG4gIGlmIChodWZmbWFuKSB7XG4gICAgdGFibGVCMSA9IGdldFN0YW5kYXJkVGFibGUoMSk7XG4gICAgc3ltYm9sV2lkdGhzID0gW107XG4gICAgc3ltYm9sQ29kZUxlbmd0aCA9IE1hdGgubWF4KHN5bWJvbENvZGVMZW5ndGgsIDEpO1xuICB9XG5cbiAgd2hpbGUgKG5ld1N5bWJvbHMubGVuZ3RoIDwgbnVtYmVyT2ZOZXdTeW1ib2xzKSB7XG4gICAgY29uc3QgZGVsdGFIZWlnaHQgPSBodWZmbWFuID8gaHVmZm1hblRhYmxlcy50YWJsZURlbHRhSGVpZ2h0LmRlY29kZShodWZmbWFuSW5wdXQpIDogZGVjb2RlSW50ZWdlcihjb250ZXh0Q2FjaGUsIFwiSUFESFwiLCBkZWNvZGVyKTtcbiAgICBjdXJyZW50SGVpZ2h0ICs9IGRlbHRhSGVpZ2h0O1xuICAgIGxldCBjdXJyZW50V2lkdGggPSAwLFxuICAgICAgICB0b3RhbFdpZHRoID0gMDtcbiAgICBjb25zdCBmaXJzdFN5bWJvbCA9IGh1ZmZtYW4gPyBzeW1ib2xXaWR0aHMubGVuZ3RoIDogMDtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCBkZWx0YVdpZHRoID0gaHVmZm1hbiA/IGh1ZmZtYW5UYWJsZXMudGFibGVEZWx0YVdpZHRoLmRlY29kZShodWZmbWFuSW5wdXQpIDogZGVjb2RlSW50ZWdlcihjb250ZXh0Q2FjaGUsIFwiSUFEV1wiLCBkZWNvZGVyKTtcblxuICAgICAgaWYgKGRlbHRhV2lkdGggPT09IG51bGwpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnRXaWR0aCArPSBkZWx0YVdpZHRoO1xuICAgICAgdG90YWxXaWR0aCArPSBjdXJyZW50V2lkdGg7XG4gICAgICBsZXQgYml0bWFwO1xuXG4gICAgICBpZiAocmVmaW5lbWVudCkge1xuICAgICAgICBjb25zdCBudW1iZXJPZkluc3RhbmNlcyA9IGRlY29kZUludGVnZXIoY29udGV4dENhY2hlLCBcIklBQUlcIiwgZGVjb2Rlcik7XG5cbiAgICAgICAgaWYgKG51bWJlck9mSW5zdGFuY2VzID4gMSkge1xuICAgICAgICAgIGJpdG1hcCA9IGRlY29kZVRleHRSZWdpb24oaHVmZm1hbiwgcmVmaW5lbWVudCwgY3VycmVudFdpZHRoLCBjdXJyZW50SGVpZ2h0LCAwLCBudW1iZXJPZkluc3RhbmNlcywgMSwgc3ltYm9scy5jb25jYXQobmV3U3ltYm9scyksIHN5bWJvbENvZGVMZW5ndGgsIDAsIDAsIDEsIDAsIGh1ZmZtYW5UYWJsZXMsIHJlZmluZW1lbnRUZW1wbGF0ZUluZGV4LCByZWZpbmVtZW50QXQsIGRlY29kaW5nQ29udGV4dCwgMCwgaHVmZm1hbklucHV0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBzeW1ib2xJZCA9IGRlY29kZUlBSUQoY29udGV4dENhY2hlLCBkZWNvZGVyLCBzeW1ib2xDb2RlTGVuZ3RoKTtcbiAgICAgICAgICBjb25zdCByZHggPSBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgXCJJQVJEWFwiLCBkZWNvZGVyKTtcbiAgICAgICAgICBjb25zdCByZHkgPSBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgXCJJQVJEWVwiLCBkZWNvZGVyKTtcbiAgICAgICAgICBjb25zdCBzeW1ib2wgPSBzeW1ib2xJZCA8IHN5bWJvbHMubGVuZ3RoID8gc3ltYm9sc1tzeW1ib2xJZF0gOiBuZXdTeW1ib2xzW3N5bWJvbElkIC0gc3ltYm9scy5sZW5ndGhdO1xuICAgICAgICAgIGJpdG1hcCA9IGRlY29kZVJlZmluZW1lbnQoY3VycmVudFdpZHRoLCBjdXJyZW50SGVpZ2h0LCByZWZpbmVtZW50VGVtcGxhdGVJbmRleCwgc3ltYm9sLCByZHgsIHJkeSwgZmFsc2UsIHJlZmluZW1lbnRBdCwgZGVjb2RpbmdDb250ZXh0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5ld1N5bWJvbHMucHVzaChiaXRtYXApO1xuICAgICAgfSBlbHNlIGlmIChodWZmbWFuKSB7XG4gICAgICAgIHN5bWJvbFdpZHRocy5wdXNoKGN1cnJlbnRXaWR0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiaXRtYXAgPSBkZWNvZGVCaXRtYXAoZmFsc2UsIGN1cnJlbnRXaWR0aCwgY3VycmVudEhlaWdodCwgdGVtcGxhdGVJbmRleCwgZmFsc2UsIG51bGwsIGF0LCBkZWNvZGluZ0NvbnRleHQpO1xuICAgICAgICBuZXdTeW1ib2xzLnB1c2goYml0bWFwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaHVmZm1hbiAmJiAhcmVmaW5lbWVudCkge1xuICAgICAgY29uc3QgYml0bWFwU2l6ZSA9IGh1ZmZtYW5UYWJsZXMudGFibGVCaXRtYXBTaXplLmRlY29kZShodWZmbWFuSW5wdXQpO1xuICAgICAgaHVmZm1hbklucHV0LmJ5dGVBbGlnbigpO1xuICAgICAgbGV0IGNvbGxlY3RpdmVCaXRtYXA7XG5cbiAgICAgIGlmIChiaXRtYXBTaXplID09PSAwKSB7XG4gICAgICAgIGNvbGxlY3RpdmVCaXRtYXAgPSByZWFkVW5jb21wcmVzc2VkQml0bWFwKGh1ZmZtYW5JbnB1dCwgdG90YWxXaWR0aCwgY3VycmVudEhlaWdodCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBvcmlnaW5hbEVuZCA9IGh1ZmZtYW5JbnB1dC5lbmQ7XG4gICAgICAgIGNvbnN0IGJpdG1hcEVuZCA9IGh1ZmZtYW5JbnB1dC5wb3NpdGlvbiArIGJpdG1hcFNpemU7XG4gICAgICAgIGh1ZmZtYW5JbnB1dC5lbmQgPSBiaXRtYXBFbmQ7XG4gICAgICAgIGNvbGxlY3RpdmVCaXRtYXAgPSBkZWNvZGVNTVJCaXRtYXAoaHVmZm1hbklucHV0LCB0b3RhbFdpZHRoLCBjdXJyZW50SGVpZ2h0LCBmYWxzZSk7XG4gICAgICAgIGh1ZmZtYW5JbnB1dC5lbmQgPSBvcmlnaW5hbEVuZDtcbiAgICAgICAgaHVmZm1hbklucHV0LnBvc2l0aW9uID0gYml0bWFwRW5kO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBudW1iZXJPZlN5bWJvbHNEZWNvZGVkID0gc3ltYm9sV2lkdGhzLmxlbmd0aDtcblxuICAgICAgaWYgKGZpcnN0U3ltYm9sID09PSBudW1iZXJPZlN5bWJvbHNEZWNvZGVkIC0gMSkge1xuICAgICAgICBuZXdTeW1ib2xzLnB1c2goY29sbGVjdGl2ZUJpdG1hcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgaSxcbiAgICAgICAgICAgIHksXG4gICAgICAgICAgICB4TWluID0gMCxcbiAgICAgICAgICAgIHhNYXgsXG4gICAgICAgICAgICBiaXRtYXBXaWR0aCxcbiAgICAgICAgICAgIHN5bWJvbEJpdG1hcDtcblxuICAgICAgICBmb3IgKGkgPSBmaXJzdFN5bWJvbDsgaSA8IG51bWJlck9mU3ltYm9sc0RlY29kZWQ7IGkrKykge1xuICAgICAgICAgIGJpdG1hcFdpZHRoID0gc3ltYm9sV2lkdGhzW2ldO1xuICAgICAgICAgIHhNYXggPSB4TWluICsgYml0bWFwV2lkdGg7XG4gICAgICAgICAgc3ltYm9sQml0bWFwID0gW107XG5cbiAgICAgICAgICBmb3IgKHkgPSAwOyB5IDwgY3VycmVudEhlaWdodDsgeSsrKSB7XG4gICAgICAgICAgICBzeW1ib2xCaXRtYXAucHVzaChjb2xsZWN0aXZlQml0bWFwW3ldLnN1YmFycmF5KHhNaW4sIHhNYXgpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXdTeW1ib2xzLnB1c2goc3ltYm9sQml0bWFwKTtcbiAgICAgICAgICB4TWluID0geE1heDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGV4cG9ydGVkU3ltYm9scyA9IFtdLFxuICAgICAgICBmbGFncyA9IFtdO1xuICBsZXQgY3VycmVudEZsYWcgPSBmYWxzZSxcbiAgICAgIGksXG4gICAgICBpaTtcbiAgY29uc3QgdG90YWxTeW1ib2xzTGVuZ3RoID0gc3ltYm9scy5sZW5ndGggKyBudW1iZXJPZk5ld1N5bWJvbHM7XG5cbiAgd2hpbGUgKGZsYWdzLmxlbmd0aCA8IHRvdGFsU3ltYm9sc0xlbmd0aCkge1xuICAgIGxldCBydW5MZW5ndGggPSBodWZmbWFuID8gdGFibGVCMS5kZWNvZGUoaHVmZm1hbklucHV0KSA6IGRlY29kZUludGVnZXIoY29udGV4dENhY2hlLCBcIklBRVhcIiwgZGVjb2Rlcik7XG5cbiAgICB3aGlsZSAocnVuTGVuZ3RoLS0pIHtcbiAgICAgIGZsYWdzLnB1c2goY3VycmVudEZsYWcpO1xuICAgIH1cblxuICAgIGN1cnJlbnRGbGFnID0gIWN1cnJlbnRGbGFnO1xuICB9XG5cbiAgZm9yIChpID0gMCwgaWkgPSBzeW1ib2xzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICBpZiAoZmxhZ3NbaV0pIHtcbiAgICAgIGV4cG9ydGVkU3ltYm9scy5wdXNoKHN5bWJvbHNbaV0pO1xuICAgIH1cbiAgfVxuXG4gIGZvciAobGV0IGogPSAwOyBqIDwgbnVtYmVyT2ZOZXdTeW1ib2xzOyBpKyssIGorKykge1xuICAgIGlmIChmbGFnc1tpXSkge1xuICAgICAgZXhwb3J0ZWRTeW1ib2xzLnB1c2gobmV3U3ltYm9sc1tqXSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGV4cG9ydGVkU3ltYm9scztcbn1cblxuZnVuY3Rpb24gZGVjb2RlVGV4dFJlZ2lvbihodWZmbWFuLCByZWZpbmVtZW50LCB3aWR0aCwgaGVpZ2h0LCBkZWZhdWx0UGl4ZWxWYWx1ZSwgbnVtYmVyT2ZTeW1ib2xJbnN0YW5jZXMsIHN0cmlwU2l6ZSwgaW5wdXRTeW1ib2xzLCBzeW1ib2xDb2RlTGVuZ3RoLCB0cmFuc3Bvc2VkLCBkc09mZnNldCwgcmVmZXJlbmNlQ29ybmVyLCBjb21iaW5hdGlvbk9wZXJhdG9yLCBodWZmbWFuVGFibGVzLCByZWZpbmVtZW50VGVtcGxhdGVJbmRleCwgcmVmaW5lbWVudEF0LCBkZWNvZGluZ0NvbnRleHQsIGxvZ1N0cmlwU2l6ZSwgaHVmZm1hbklucHV0KSB7XG4gIGlmIChodWZmbWFuICYmIHJlZmluZW1lbnQpIHtcbiAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihcInJlZmluZW1lbnQgd2l0aCBIdWZmbWFuIGlzIG5vdCBzdXBwb3J0ZWRcIik7XG4gIH1cblxuICBjb25zdCBiaXRtYXAgPSBbXTtcbiAgbGV0IGksIHJvdztcblxuICBmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHtcbiAgICByb3cgPSBuZXcgVWludDhBcnJheSh3aWR0aCk7XG5cbiAgICBpZiAoZGVmYXVsdFBpeGVsVmFsdWUpIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgd2lkdGg7IGorKykge1xuICAgICAgICByb3dbal0gPSBkZWZhdWx0UGl4ZWxWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBiaXRtYXAucHVzaChyb3cpO1xuICB9XG5cbiAgY29uc3QgZGVjb2RlciA9IGRlY29kaW5nQ29udGV4dC5kZWNvZGVyO1xuICBjb25zdCBjb250ZXh0Q2FjaGUgPSBkZWNvZGluZ0NvbnRleHQuY29udGV4dENhY2hlO1xuICBsZXQgc3RyaXBUID0gaHVmZm1hbiA/IC1odWZmbWFuVGFibGVzLnRhYmxlRGVsdGFULmRlY29kZShodWZmbWFuSW5wdXQpIDogLWRlY29kZUludGVnZXIoY29udGV4dENhY2hlLCBcIklBRFRcIiwgZGVjb2Rlcik7XG4gIGxldCBmaXJzdFMgPSAwO1xuICBpID0gMDtcblxuICB3aGlsZSAoaSA8IG51bWJlck9mU3ltYm9sSW5zdGFuY2VzKSB7XG4gICAgY29uc3QgZGVsdGFUID0gaHVmZm1hbiA/IGh1ZmZtYW5UYWJsZXMudGFibGVEZWx0YVQuZGVjb2RlKGh1ZmZtYW5JbnB1dCkgOiBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgXCJJQURUXCIsIGRlY29kZXIpO1xuICAgIHN0cmlwVCArPSBkZWx0YVQ7XG4gICAgY29uc3QgZGVsdGFGaXJzdFMgPSBodWZmbWFuID8gaHVmZm1hblRhYmxlcy50YWJsZUZpcnN0Uy5kZWNvZGUoaHVmZm1hbklucHV0KSA6IGRlY29kZUludGVnZXIoY29udGV4dENhY2hlLCBcIklBRlNcIiwgZGVjb2Rlcik7XG4gICAgZmlyc3RTICs9IGRlbHRhRmlyc3RTO1xuICAgIGxldCBjdXJyZW50UyA9IGZpcnN0UztcblxuICAgIGRvIHtcbiAgICAgIGxldCBjdXJyZW50VCA9IDA7XG5cbiAgICAgIGlmIChzdHJpcFNpemUgPiAxKSB7XG4gICAgICAgIGN1cnJlbnRUID0gaHVmZm1hbiA/IGh1ZmZtYW5JbnB1dC5yZWFkQml0cyhsb2dTdHJpcFNpemUpIDogZGVjb2RlSW50ZWdlcihjb250ZXh0Q2FjaGUsIFwiSUFJVFwiLCBkZWNvZGVyKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdCA9IHN0cmlwU2l6ZSAqIHN0cmlwVCArIGN1cnJlbnRUO1xuICAgICAgY29uc3Qgc3ltYm9sSWQgPSBodWZmbWFuID8gaHVmZm1hblRhYmxlcy5zeW1ib2xJRFRhYmxlLmRlY29kZShodWZmbWFuSW5wdXQpIDogZGVjb2RlSUFJRChjb250ZXh0Q2FjaGUsIGRlY29kZXIsIHN5bWJvbENvZGVMZW5ndGgpO1xuICAgICAgY29uc3QgYXBwbHlSZWZpbmVtZW50ID0gcmVmaW5lbWVudCAmJiAoaHVmZm1hbiA/IGh1ZmZtYW5JbnB1dC5yZWFkQml0KCkgOiBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgXCJJQVJJXCIsIGRlY29kZXIpKTtcbiAgICAgIGxldCBzeW1ib2xCaXRtYXAgPSBpbnB1dFN5bWJvbHNbc3ltYm9sSWRdO1xuICAgICAgbGV0IHN5bWJvbFdpZHRoID0gc3ltYm9sQml0bWFwWzBdLmxlbmd0aDtcbiAgICAgIGxldCBzeW1ib2xIZWlnaHQgPSBzeW1ib2xCaXRtYXAubGVuZ3RoO1xuXG4gICAgICBpZiAoYXBwbHlSZWZpbmVtZW50KSB7XG4gICAgICAgIGNvbnN0IHJkdyA9IGRlY29kZUludGVnZXIoY29udGV4dENhY2hlLCBcIklBUkRXXCIsIGRlY29kZXIpO1xuICAgICAgICBjb25zdCByZGggPSBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgXCJJQVJESFwiLCBkZWNvZGVyKTtcbiAgICAgICAgY29uc3QgcmR4ID0gZGVjb2RlSW50ZWdlcihjb250ZXh0Q2FjaGUsIFwiSUFSRFhcIiwgZGVjb2Rlcik7XG4gICAgICAgIGNvbnN0IHJkeSA9IGRlY29kZUludGVnZXIoY29udGV4dENhY2hlLCBcIklBUkRZXCIsIGRlY29kZXIpO1xuICAgICAgICBzeW1ib2xXaWR0aCArPSByZHc7XG4gICAgICAgIHN5bWJvbEhlaWdodCArPSByZGg7XG4gICAgICAgIHN5bWJvbEJpdG1hcCA9IGRlY29kZVJlZmluZW1lbnQoc3ltYm9sV2lkdGgsIHN5bWJvbEhlaWdodCwgcmVmaW5lbWVudFRlbXBsYXRlSW5kZXgsIHN5bWJvbEJpdG1hcCwgKHJkdyA+PiAxKSArIHJkeCwgKHJkaCA+PiAxKSArIHJkeSwgZmFsc2UsIHJlZmluZW1lbnRBdCwgZGVjb2RpbmdDb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2Zmc2V0VCA9IHQgLSAocmVmZXJlbmNlQ29ybmVyICYgMSA/IDAgOiBzeW1ib2xIZWlnaHQgLSAxKTtcbiAgICAgIGNvbnN0IG9mZnNldFMgPSBjdXJyZW50UyAtIChyZWZlcmVuY2VDb3JuZXIgJiAyID8gc3ltYm9sV2lkdGggLSAxIDogMCk7XG4gICAgICBsZXQgczIsIHQyLCBzeW1ib2xSb3c7XG5cbiAgICAgIGlmICh0cmFuc3Bvc2VkKSB7XG4gICAgICAgIGZvciAoczIgPSAwOyBzMiA8IHN5bWJvbEhlaWdodDsgczIrKykge1xuICAgICAgICAgIHJvdyA9IGJpdG1hcFtvZmZzZXRTICsgczJdO1xuXG4gICAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN5bWJvbFJvdyA9IHN5bWJvbEJpdG1hcFtzMl07XG4gICAgICAgICAgY29uc3QgbWF4V2lkdGggPSBNYXRoLm1pbih3aWR0aCAtIG9mZnNldFQsIHN5bWJvbFdpZHRoKTtcblxuICAgICAgICAgIHN3aXRjaCAoY29tYmluYXRpb25PcGVyYXRvcikge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICBmb3IgKHQyID0gMDsgdDIgPCBtYXhXaWR0aDsgdDIrKykge1xuICAgICAgICAgICAgICAgIHJvd1tvZmZzZXRUICsgdDJdIHw9IHN5bWJvbFJvd1t0Ml07XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICBmb3IgKHQyID0gMDsgdDIgPCBtYXhXaWR0aDsgdDIrKykge1xuICAgICAgICAgICAgICAgIHJvd1tvZmZzZXRUICsgdDJdIF49IHN5bWJvbFJvd1t0Ml07XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoYG9wZXJhdG9yICR7Y29tYmluYXRpb25PcGVyYXRvcn0gaXMgbm90IHN1cHBvcnRlZGApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnRTICs9IHN5bWJvbEhlaWdodCAtIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKHQyID0gMDsgdDIgPCBzeW1ib2xIZWlnaHQ7IHQyKyspIHtcbiAgICAgICAgICByb3cgPSBiaXRtYXBbb2Zmc2V0VCArIHQyXTtcblxuICAgICAgICAgIGlmICghcm93KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzeW1ib2xSb3cgPSBzeW1ib2xCaXRtYXBbdDJdO1xuXG4gICAgICAgICAgc3dpdGNoIChjb21iaW5hdGlvbk9wZXJhdG9yKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIGZvciAoczIgPSAwOyBzMiA8IHN5bWJvbFdpZHRoOyBzMisrKSB7XG4gICAgICAgICAgICAgICAgcm93W29mZnNldFMgKyBzMl0gfD0gc3ltYm9sUm93W3MyXTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgIGZvciAoczIgPSAwOyBzMiA8IHN5bWJvbFdpZHRoOyBzMisrKSB7XG4gICAgICAgICAgICAgICAgcm93W29mZnNldFMgKyBzMl0gXj0gc3ltYm9sUm93W3MyXTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihgb3BlcmF0b3IgJHtjb21iaW5hdGlvbk9wZXJhdG9yfSBpcyBub3Qgc3VwcG9ydGVkYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudFMgKz0gc3ltYm9sV2lkdGggLSAxO1xuICAgICAgfVxuXG4gICAgICBpKys7XG4gICAgICBjb25zdCBkZWx0YVMgPSBodWZmbWFuID8gaHVmZm1hblRhYmxlcy50YWJsZURlbHRhUy5kZWNvZGUoaHVmZm1hbklucHV0KSA6IGRlY29kZUludGVnZXIoY29udGV4dENhY2hlLCBcIklBRFNcIiwgZGVjb2Rlcik7XG5cbiAgICAgIGlmIChkZWx0YVMgPT09IG51bGwpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnRTICs9IGRlbHRhUyArIGRzT2Zmc2V0O1xuICAgIH0gd2hpbGUgKHRydWUpO1xuICB9XG5cbiAgcmV0dXJuIGJpdG1hcDtcbn1cblxuZnVuY3Rpb24gZGVjb2RlUGF0dGVybkRpY3Rpb25hcnkobW1yLCBwYXR0ZXJuV2lkdGgsIHBhdHRlcm5IZWlnaHQsIG1heFBhdHRlcm5JbmRleCwgdGVtcGxhdGUsIGRlY29kaW5nQ29udGV4dCkge1xuICBjb25zdCBhdCA9IFtdO1xuXG4gIGlmICghbW1yKSB7XG4gICAgYXQucHVzaCh7XG4gICAgICB4OiAtcGF0dGVybldpZHRoLFxuICAgICAgeTogMFxuICAgIH0pO1xuXG4gICAgaWYgKHRlbXBsYXRlID09PSAwKSB7XG4gICAgICBhdC5wdXNoKHtcbiAgICAgICAgeDogLTMsXG4gICAgICAgIHk6IC0xXG4gICAgICB9LCB7XG4gICAgICAgIHg6IDIsXG4gICAgICAgIHk6IC0yXG4gICAgICB9LCB7XG4gICAgICAgIHg6IC0yLFxuICAgICAgICB5OiAtMlxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgY29sbGVjdGl2ZVdpZHRoID0gKG1heFBhdHRlcm5JbmRleCArIDEpICogcGF0dGVybldpZHRoO1xuICBjb25zdCBjb2xsZWN0aXZlQml0bWFwID0gZGVjb2RlQml0bWFwKG1tciwgY29sbGVjdGl2ZVdpZHRoLCBwYXR0ZXJuSGVpZ2h0LCB0ZW1wbGF0ZSwgZmFsc2UsIG51bGwsIGF0LCBkZWNvZGluZ0NvbnRleHQpO1xuICBjb25zdCBwYXR0ZXJucyA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDw9IG1heFBhdHRlcm5JbmRleDsgaSsrKSB7XG4gICAgY29uc3QgcGF0dGVybkJpdG1hcCA9IFtdO1xuICAgIGNvbnN0IHhNaW4gPSBwYXR0ZXJuV2lkdGggKiBpO1xuICAgIGNvbnN0IHhNYXggPSB4TWluICsgcGF0dGVybldpZHRoO1xuXG4gICAgZm9yIChsZXQgeSA9IDA7IHkgPCBwYXR0ZXJuSGVpZ2h0OyB5KyspIHtcbiAgICAgIHBhdHRlcm5CaXRtYXAucHVzaChjb2xsZWN0aXZlQml0bWFwW3ldLnN1YmFycmF5KHhNaW4sIHhNYXgpKTtcbiAgICB9XG5cbiAgICBwYXR0ZXJucy5wdXNoKHBhdHRlcm5CaXRtYXApO1xuICB9XG5cbiAgcmV0dXJuIHBhdHRlcm5zO1xufVxuXG5mdW5jdGlvbiBkZWNvZGVIYWxmdG9uZVJlZ2lvbihtbXIsIHBhdHRlcm5zLCB0ZW1wbGF0ZSwgcmVnaW9uV2lkdGgsIHJlZ2lvbkhlaWdodCwgZGVmYXVsdFBpeGVsVmFsdWUsIGVuYWJsZVNraXAsIGNvbWJpbmF0aW9uT3BlcmF0b3IsIGdyaWRXaWR0aCwgZ3JpZEhlaWdodCwgZ3JpZE9mZnNldFgsIGdyaWRPZmZzZXRZLCBncmlkVmVjdG9yWCwgZ3JpZFZlY3RvclksIGRlY29kaW5nQ29udGV4dCkge1xuICBjb25zdCBza2lwID0gbnVsbDtcblxuICBpZiAoZW5hYmxlU2tpcCkge1xuICAgIHRocm93IG5ldyBKYmlnMkVycm9yKFwic2tpcCBpcyBub3Qgc3VwcG9ydGVkXCIpO1xuICB9XG5cbiAgaWYgKGNvbWJpbmF0aW9uT3BlcmF0b3IgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihgb3BlcmF0b3IgXCIke2NvbWJpbmF0aW9uT3BlcmF0b3J9XCIgaXMgbm90IHN1cHBvcnRlZCBpbiBoYWxmdG9uZSByZWdpb25gKTtcbiAgfVxuXG4gIGNvbnN0IHJlZ2lvbkJpdG1hcCA9IFtdO1xuICBsZXQgaSwgaiwgcm93O1xuXG4gIGZvciAoaSA9IDA7IGkgPCByZWdpb25IZWlnaHQ7IGkrKykge1xuICAgIHJvdyA9IG5ldyBVaW50OEFycmF5KHJlZ2lvbldpZHRoKTtcblxuICAgIGlmIChkZWZhdWx0UGl4ZWxWYWx1ZSkge1xuICAgICAgZm9yIChqID0gMDsgaiA8IHJlZ2lvbldpZHRoOyBqKyspIHtcbiAgICAgICAgcm93W2pdID0gZGVmYXVsdFBpeGVsVmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVnaW9uQml0bWFwLnB1c2gocm93KTtcbiAgfVxuXG4gIGNvbnN0IG51bWJlck9mUGF0dGVybnMgPSBwYXR0ZXJucy5sZW5ndGg7XG4gIGNvbnN0IHBhdHRlcm4wID0gcGF0dGVybnNbMF07XG4gIGNvbnN0IHBhdHRlcm5XaWR0aCA9IHBhdHRlcm4wWzBdLmxlbmd0aCxcbiAgICAgICAgcGF0dGVybkhlaWdodCA9IHBhdHRlcm4wLmxlbmd0aDtcbiAgY29uc3QgYml0c1BlclZhbHVlID0gKDAsIF9jb3JlX3V0aWxzLmxvZzIpKG51bWJlck9mUGF0dGVybnMpO1xuICBjb25zdCBhdCA9IFtdO1xuXG4gIGlmICghbW1yKSB7XG4gICAgYXQucHVzaCh7XG4gICAgICB4OiB0ZW1wbGF0ZSA8PSAxID8gMyA6IDIsXG4gICAgICB5OiAtMVxuICAgIH0pO1xuXG4gICAgaWYgKHRlbXBsYXRlID09PSAwKSB7XG4gICAgICBhdC5wdXNoKHtcbiAgICAgICAgeDogLTMsXG4gICAgICAgIHk6IC0xXG4gICAgICB9LCB7XG4gICAgICAgIHg6IDIsXG4gICAgICAgIHk6IC0yXG4gICAgICB9LCB7XG4gICAgICAgIHg6IC0yLFxuICAgICAgICB5OiAtMlxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZ3JheVNjYWxlQml0UGxhbmVzID0gW107XG4gIGxldCBtbXJJbnB1dCwgYml0bWFwO1xuXG4gIGlmIChtbXIpIHtcbiAgICBtbXJJbnB1dCA9IG5ldyBSZWFkZXIoZGVjb2RpbmdDb250ZXh0LmRhdGEsIGRlY29kaW5nQ29udGV4dC5zdGFydCwgZGVjb2RpbmdDb250ZXh0LmVuZCk7XG4gIH1cblxuICBmb3IgKGkgPSBiaXRzUGVyVmFsdWUgLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChtbXIpIHtcbiAgICAgIGJpdG1hcCA9IGRlY29kZU1NUkJpdG1hcChtbXJJbnB1dCwgZ3JpZFdpZHRoLCBncmlkSGVpZ2h0LCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYml0bWFwID0gZGVjb2RlQml0bWFwKGZhbHNlLCBncmlkV2lkdGgsIGdyaWRIZWlnaHQsIHRlbXBsYXRlLCBmYWxzZSwgc2tpcCwgYXQsIGRlY29kaW5nQ29udGV4dCk7XG4gICAgfVxuXG4gICAgZ3JheVNjYWxlQml0UGxhbmVzW2ldID0gYml0bWFwO1xuICB9XG5cbiAgbGV0IG1nLCBuZywgYml0LCBwYXR0ZXJuSW5kZXgsIHBhdHRlcm5CaXRtYXAsIHgsIHksIHBhdHRlcm5Sb3csIHJlZ2lvblJvdztcblxuICBmb3IgKG1nID0gMDsgbWcgPCBncmlkSGVpZ2h0OyBtZysrKSB7XG4gICAgZm9yIChuZyA9IDA7IG5nIDwgZ3JpZFdpZHRoOyBuZysrKSB7XG4gICAgICBiaXQgPSAwO1xuICAgICAgcGF0dGVybkluZGV4ID0gMDtcblxuICAgICAgZm9yIChqID0gYml0c1BlclZhbHVlIC0gMTsgaiA+PSAwOyBqLS0pIHtcbiAgICAgICAgYml0IF49IGdyYXlTY2FsZUJpdFBsYW5lc1tqXVttZ11bbmddO1xuICAgICAgICBwYXR0ZXJuSW5kZXggfD0gYml0IDw8IGo7XG4gICAgICB9XG5cbiAgICAgIHBhdHRlcm5CaXRtYXAgPSBwYXR0ZXJuc1twYXR0ZXJuSW5kZXhdO1xuICAgICAgeCA9IGdyaWRPZmZzZXRYICsgbWcgKiBncmlkVmVjdG9yWSArIG5nICogZ3JpZFZlY3RvclggPj4gODtcbiAgICAgIHkgPSBncmlkT2Zmc2V0WSArIG1nICogZ3JpZFZlY3RvclggLSBuZyAqIGdyaWRWZWN0b3JZID4+IDg7XG5cbiAgICAgIGlmICh4ID49IDAgJiYgeCArIHBhdHRlcm5XaWR0aCA8PSByZWdpb25XaWR0aCAmJiB5ID49IDAgJiYgeSArIHBhdHRlcm5IZWlnaHQgPD0gcmVnaW9uSGVpZ2h0KSB7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwYXR0ZXJuSGVpZ2h0OyBpKyspIHtcbiAgICAgICAgICByZWdpb25Sb3cgPSByZWdpb25CaXRtYXBbeSArIGldO1xuICAgICAgICAgIHBhdHRlcm5Sb3cgPSBwYXR0ZXJuQml0bWFwW2ldO1xuXG4gICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBhdHRlcm5XaWR0aDsgaisrKSB7XG4gICAgICAgICAgICByZWdpb25Sb3dbeCArIGpdIHw9IHBhdHRlcm5Sb3dbal07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgcmVnaW9uWCwgcmVnaW9uWTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGF0dGVybkhlaWdodDsgaSsrKSB7XG4gICAgICAgICAgcmVnaW9uWSA9IHkgKyBpO1xuXG4gICAgICAgICAgaWYgKHJlZ2lvblkgPCAwIHx8IHJlZ2lvblkgPj0gcmVnaW9uSGVpZ2h0KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZWdpb25Sb3cgPSByZWdpb25CaXRtYXBbcmVnaW9uWV07XG4gICAgICAgICAgcGF0dGVyblJvdyA9IHBhdHRlcm5CaXRtYXBbaV07XG5cbiAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcGF0dGVybldpZHRoOyBqKyspIHtcbiAgICAgICAgICAgIHJlZ2lvblggPSB4ICsgajtcblxuICAgICAgICAgICAgaWYgKHJlZ2lvblggPj0gMCAmJiByZWdpb25YIDwgcmVnaW9uV2lkdGgpIHtcbiAgICAgICAgICAgICAgcmVnaW9uUm93W3JlZ2lvblhdIHw9IHBhdHRlcm5Sb3dbal07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlZ2lvbkJpdG1hcDtcbn1cblxuZnVuY3Rpb24gcmVhZFNlZ21lbnRIZWFkZXIoZGF0YSwgc3RhcnQpIHtcbiAgY29uc3Qgc2VnbWVudEhlYWRlciA9IHt9O1xuICBzZWdtZW50SGVhZGVyLm51bWJlciA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBzdGFydCk7XG4gIGNvbnN0IGZsYWdzID0gZGF0YVtzdGFydCArIDRdO1xuICBjb25zdCBzZWdtZW50VHlwZSA9IGZsYWdzICYgMHgzZjtcblxuICBpZiAoIVNlZ21lbnRUeXBlc1tzZWdtZW50VHlwZV0pIHtcbiAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihcImludmFsaWQgc2VnbWVudCB0eXBlOiBcIiArIHNlZ21lbnRUeXBlKTtcbiAgfVxuXG4gIHNlZ21lbnRIZWFkZXIudHlwZSA9IHNlZ21lbnRUeXBlO1xuICBzZWdtZW50SGVhZGVyLnR5cGVOYW1lID0gU2VnbWVudFR5cGVzW3NlZ21lbnRUeXBlXTtcbiAgc2VnbWVudEhlYWRlci5kZWZlcnJlZE5vblJldGFpbiA9ICEhKGZsYWdzICYgMHg4MCk7XG4gIGNvbnN0IHBhZ2VBc3NvY2lhdGlvbkZpZWxkU2l6ZSA9ICEhKGZsYWdzICYgMHg0MCk7XG4gIGNvbnN0IHJlZmVycmVkRmxhZ3MgPSBkYXRhW3N0YXJ0ICsgNV07XG4gIGxldCByZWZlcnJlZFRvQ291bnQgPSByZWZlcnJlZEZsYWdzID4+IDUgJiA3O1xuICBjb25zdCByZXRhaW5CaXRzID0gW3JlZmVycmVkRmxhZ3MgJiAzMV07XG4gIGxldCBwb3NpdGlvbiA9IHN0YXJ0ICsgNjtcblxuICBpZiAocmVmZXJyZWRGbGFncyA9PT0gNykge1xuICAgIHJlZmVycmVkVG9Db3VudCA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbiAtIDEpICYgMHgxZmZmZmZmZjtcbiAgICBwb3NpdGlvbiArPSAzO1xuICAgIGxldCBieXRlcyA9IHJlZmVycmVkVG9Db3VudCArIDcgPj4gMztcbiAgICByZXRhaW5CaXRzWzBdID0gZGF0YVtwb3NpdGlvbisrXTtcblxuICAgIHdoaWxlICgtLWJ5dGVzID4gMCkge1xuICAgICAgcmV0YWluQml0cy5wdXNoKGRhdGFbcG9zaXRpb24rK10pO1xuICAgIH1cbiAgfSBlbHNlIGlmIChyZWZlcnJlZEZsYWdzID09PSA1IHx8IHJlZmVycmVkRmxhZ3MgPT09IDYpIHtcbiAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihcImludmFsaWQgcmVmZXJyZWQtdG8gZmxhZ3NcIik7XG4gIH1cblxuICBzZWdtZW50SGVhZGVyLnJldGFpbkJpdHMgPSByZXRhaW5CaXRzO1xuICBsZXQgcmVmZXJyZWRUb1NlZ21lbnROdW1iZXJTaXplID0gNDtcblxuICBpZiAoc2VnbWVudEhlYWRlci5udW1iZXIgPD0gMjU2KSB7XG4gICAgcmVmZXJyZWRUb1NlZ21lbnROdW1iZXJTaXplID0gMTtcbiAgfSBlbHNlIGlmIChzZWdtZW50SGVhZGVyLm51bWJlciA8PSA2NTUzNikge1xuICAgIHJlZmVycmVkVG9TZWdtZW50TnVtYmVyU2l6ZSA9IDI7XG4gIH1cblxuICBjb25zdCByZWZlcnJlZFRvID0gW107XG4gIGxldCBpLCBpaTtcblxuICBmb3IgKGkgPSAwOyBpIDwgcmVmZXJyZWRUb0NvdW50OyBpKyspIHtcbiAgICBsZXQgbnVtYmVyO1xuXG4gICAgaWYgKHJlZmVycmVkVG9TZWdtZW50TnVtYmVyU2l6ZSA9PT0gMSkge1xuICAgICAgbnVtYmVyID0gZGF0YVtwb3NpdGlvbl07XG4gICAgfSBlbHNlIGlmIChyZWZlcnJlZFRvU2VnbWVudE51bWJlclNpemUgPT09IDIpIHtcbiAgICAgIG51bWJlciA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBwb3NpdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG51bWJlciA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbik7XG4gICAgfVxuXG4gICAgcmVmZXJyZWRUby5wdXNoKG51bWJlcik7XG4gICAgcG9zaXRpb24gKz0gcmVmZXJyZWRUb1NlZ21lbnROdW1iZXJTaXplO1xuICB9XG5cbiAgc2VnbWVudEhlYWRlci5yZWZlcnJlZFRvID0gcmVmZXJyZWRUbztcblxuICBpZiAoIXBhZ2VBc3NvY2lhdGlvbkZpZWxkU2l6ZSkge1xuICAgIHNlZ21lbnRIZWFkZXIucGFnZUFzc29jaWF0aW9uID0gZGF0YVtwb3NpdGlvbisrXTtcbiAgfSBlbHNlIHtcbiAgICBzZWdtZW50SGVhZGVyLnBhZ2VBc3NvY2lhdGlvbiA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbik7XG4gICAgcG9zaXRpb24gKz0gNDtcbiAgfVxuXG4gIHNlZ21lbnRIZWFkZXIubGVuZ3RoID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uKTtcbiAgcG9zaXRpb24gKz0gNDtcblxuICBpZiAoc2VnbWVudEhlYWRlci5sZW5ndGggPT09IDB4ZmZmZmZmZmYpIHtcbiAgICBpZiAoc2VnbWVudFR5cGUgPT09IDM4KSB7XG4gICAgICBjb25zdCBnZW5lcmljUmVnaW9uSW5mbyA9IHJlYWRSZWdpb25TZWdtZW50SW5mb3JtYXRpb24oZGF0YSwgcG9zaXRpb24pO1xuICAgICAgY29uc3QgZ2VuZXJpY1JlZ2lvblNlZ21lbnRGbGFncyA9IGRhdGFbcG9zaXRpb24gKyBSZWdpb25TZWdtZW50SW5mb3JtYXRpb25GaWVsZExlbmd0aF07XG4gICAgICBjb25zdCBnZW5lcmljUmVnaW9uTW1yID0gISEoZ2VuZXJpY1JlZ2lvblNlZ21lbnRGbGFncyAmIDEpO1xuICAgICAgY29uc3Qgc2VhcmNoUGF0dGVybkxlbmd0aCA9IDY7XG4gICAgICBjb25zdCBzZWFyY2hQYXR0ZXJuID0gbmV3IFVpbnQ4QXJyYXkoc2VhcmNoUGF0dGVybkxlbmd0aCk7XG5cbiAgICAgIGlmICghZ2VuZXJpY1JlZ2lvbk1tcikge1xuICAgICAgICBzZWFyY2hQYXR0ZXJuWzBdID0gMHhmZjtcbiAgICAgICAgc2VhcmNoUGF0dGVyblsxXSA9IDB4YWM7XG4gICAgICB9XG5cbiAgICAgIHNlYXJjaFBhdHRlcm5bMl0gPSBnZW5lcmljUmVnaW9uSW5mby5oZWlnaHQgPj4+IDI0ICYgMHhmZjtcbiAgICAgIHNlYXJjaFBhdHRlcm5bM10gPSBnZW5lcmljUmVnaW9uSW5mby5oZWlnaHQgPj4gMTYgJiAweGZmO1xuICAgICAgc2VhcmNoUGF0dGVybls0XSA9IGdlbmVyaWNSZWdpb25JbmZvLmhlaWdodCA+PiA4ICYgMHhmZjtcbiAgICAgIHNlYXJjaFBhdHRlcm5bNV0gPSBnZW5lcmljUmVnaW9uSW5mby5oZWlnaHQgJiAweGZmO1xuXG4gICAgICBmb3IgKGkgPSBwb3NpdGlvbiwgaWkgPSBkYXRhLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgbGV0IGogPSAwO1xuXG4gICAgICAgIHdoaWxlIChqIDwgc2VhcmNoUGF0dGVybkxlbmd0aCAmJiBzZWFyY2hQYXR0ZXJuW2pdID09PSBkYXRhW2kgKyBqXSkge1xuICAgICAgICAgIGorKztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChqID09PSBzZWFyY2hQYXR0ZXJuTGVuZ3RoKSB7XG4gICAgICAgICAgc2VnbWVudEhlYWRlci5sZW5ndGggPSBpICsgc2VhcmNoUGF0dGVybkxlbmd0aDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc2VnbWVudEhlYWRlci5sZW5ndGggPT09IDB4ZmZmZmZmZmYpIHtcbiAgICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoXCJzZWdtZW50IGVuZCB3YXMgbm90IGZvdW5kXCIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihcImludmFsaWQgdW5rbm93biBzZWdtZW50IGxlbmd0aFwiKTtcbiAgICB9XG4gIH1cblxuICBzZWdtZW50SGVhZGVyLmhlYWRlckVuZCA9IHBvc2l0aW9uO1xuICByZXR1cm4gc2VnbWVudEhlYWRlcjtcbn1cblxuZnVuY3Rpb24gcmVhZFNlZ21lbnRzKGhlYWRlciwgZGF0YSwgc3RhcnQsIGVuZCkge1xuICBjb25zdCBzZWdtZW50cyA9IFtdO1xuICBsZXQgcG9zaXRpb24gPSBzdGFydDtcblxuICB3aGlsZSAocG9zaXRpb24gPCBlbmQpIHtcbiAgICBjb25zdCBzZWdtZW50SGVhZGVyID0gcmVhZFNlZ21lbnRIZWFkZXIoZGF0YSwgcG9zaXRpb24pO1xuICAgIHBvc2l0aW9uID0gc2VnbWVudEhlYWRlci5oZWFkZXJFbmQ7XG4gICAgY29uc3Qgc2VnbWVudCA9IHtcbiAgICAgIGhlYWRlcjogc2VnbWVudEhlYWRlcixcbiAgICAgIGRhdGFcbiAgICB9O1xuXG4gICAgaWYgKCFoZWFkZXIucmFuZG9tQWNjZXNzKSB7XG4gICAgICBzZWdtZW50LnN0YXJ0ID0gcG9zaXRpb247XG4gICAgICBwb3NpdGlvbiArPSBzZWdtZW50SGVhZGVyLmxlbmd0aDtcbiAgICAgIHNlZ21lbnQuZW5kID0gcG9zaXRpb247XG4gICAgfVxuXG4gICAgc2VnbWVudHMucHVzaChzZWdtZW50KTtcblxuICAgIGlmIChzZWdtZW50SGVhZGVyLnR5cGUgPT09IDUxKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoaGVhZGVyLnJhbmRvbUFjY2Vzcykge1xuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHNlZ21lbnRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIHNlZ21lbnRzW2ldLnN0YXJ0ID0gcG9zaXRpb247XG4gICAgICBwb3NpdGlvbiArPSBzZWdtZW50c1tpXS5oZWFkZXIubGVuZ3RoO1xuICAgICAgc2VnbWVudHNbaV0uZW5kID0gcG9zaXRpb247XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNlZ21lbnRzO1xufVxuXG5mdW5jdGlvbiByZWFkUmVnaW9uU2VnbWVudEluZm9ybWF0aW9uKGRhdGEsIHN0YXJ0KSB7XG4gIHJldHVybiB7XG4gICAgd2lkdGg6ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBzdGFydCksXG4gICAgaGVpZ2h0OiAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgc3RhcnQgKyA0KSxcbiAgICB4OiAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgc3RhcnQgKyA4KSxcbiAgICB5OiAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgc3RhcnQgKyAxMiksXG4gICAgY29tYmluYXRpb25PcGVyYXRvcjogZGF0YVtzdGFydCArIDE2XSAmIDdcbiAgfTtcbn1cblxuY29uc3QgUmVnaW9uU2VnbWVudEluZm9ybWF0aW9uRmllbGRMZW5ndGggPSAxNztcblxuZnVuY3Rpb24gcHJvY2Vzc1NlZ21lbnQoc2VnbWVudCwgdmlzaXRvcikge1xuICBjb25zdCBoZWFkZXIgPSBzZWdtZW50LmhlYWRlcjtcbiAgY29uc3QgZGF0YSA9IHNlZ21lbnQuZGF0YSxcbiAgICAgICAgZW5kID0gc2VnbWVudC5lbmQ7XG4gIGxldCBwb3NpdGlvbiA9IHNlZ21lbnQuc3RhcnQ7XG4gIGxldCBhcmdzLCBhdCwgaSwgYXRMZW5ndGg7XG5cbiAgc3dpdGNoIChoZWFkZXIudHlwZSkge1xuICAgIGNhc2UgMDpcbiAgICAgIGNvbnN0IGRpY3Rpb25hcnkgPSB7fTtcbiAgICAgIGNvbnN0IGRpY3Rpb25hcnlGbGFncyA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBwb3NpdGlvbik7XG4gICAgICBkaWN0aW9uYXJ5Lmh1ZmZtYW4gPSAhIShkaWN0aW9uYXJ5RmxhZ3MgJiAxKTtcbiAgICAgIGRpY3Rpb25hcnkucmVmaW5lbWVudCA9ICEhKGRpY3Rpb25hcnlGbGFncyAmIDIpO1xuICAgICAgZGljdGlvbmFyeS5odWZmbWFuREhTZWxlY3RvciA9IGRpY3Rpb25hcnlGbGFncyA+PiAyICYgMztcbiAgICAgIGRpY3Rpb25hcnkuaHVmZm1hbkRXU2VsZWN0b3IgPSBkaWN0aW9uYXJ5RmxhZ3MgPj4gNCAmIDM7XG4gICAgICBkaWN0aW9uYXJ5LmJpdG1hcFNpemVTZWxlY3RvciA9IGRpY3Rpb25hcnlGbGFncyA+PiA2ICYgMTtcbiAgICAgIGRpY3Rpb25hcnkuYWdncmVnYXRpb25JbnN0YW5jZXNTZWxlY3RvciA9IGRpY3Rpb25hcnlGbGFncyA+PiA3ICYgMTtcbiAgICAgIGRpY3Rpb25hcnkuYml0bWFwQ29kaW5nQ29udGV4dFVzZWQgPSAhIShkaWN0aW9uYXJ5RmxhZ3MgJiAyNTYpO1xuICAgICAgZGljdGlvbmFyeS5iaXRtYXBDb2RpbmdDb250ZXh0UmV0YWluZWQgPSAhIShkaWN0aW9uYXJ5RmxhZ3MgJiA1MTIpO1xuICAgICAgZGljdGlvbmFyeS50ZW1wbGF0ZSA9IGRpY3Rpb25hcnlGbGFncyA+PiAxMCAmIDM7XG4gICAgICBkaWN0aW9uYXJ5LnJlZmluZW1lbnRUZW1wbGF0ZSA9IGRpY3Rpb25hcnlGbGFncyA+PiAxMiAmIDE7XG4gICAgICBwb3NpdGlvbiArPSAyO1xuXG4gICAgICBpZiAoIWRpY3Rpb25hcnkuaHVmZm1hbikge1xuICAgICAgICBhdExlbmd0aCA9IGRpY3Rpb25hcnkudGVtcGxhdGUgPT09IDAgPyA0IDogMTtcbiAgICAgICAgYXQgPSBbXTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXRMZW5ndGg7IGkrKykge1xuICAgICAgICAgIGF0LnB1c2goe1xuICAgICAgICAgICAgeDogKDAsIF9jb3JlX3V0aWxzLnJlYWRJbnQ4KShkYXRhLCBwb3NpdGlvbiksXG4gICAgICAgICAgICB5OiAoMCwgX2NvcmVfdXRpbHMucmVhZEludDgpKGRhdGEsIHBvc2l0aW9uICsgMSlcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBwb3NpdGlvbiArPSAyO1xuICAgICAgICB9XG5cbiAgICAgICAgZGljdGlvbmFyeS5hdCA9IGF0O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGljdGlvbmFyeS5yZWZpbmVtZW50ICYmICFkaWN0aW9uYXJ5LnJlZmluZW1lbnRUZW1wbGF0ZSkge1xuICAgICAgICBhdCA9IFtdO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHtcbiAgICAgICAgICBhdC5wdXNoKHtcbiAgICAgICAgICAgIHg6ICgwLCBfY29yZV91dGlscy5yZWFkSW50OCkoZGF0YSwgcG9zaXRpb24pLFxuICAgICAgICAgICAgeTogKDAsIF9jb3JlX3V0aWxzLnJlYWRJbnQ4KShkYXRhLCBwb3NpdGlvbiArIDEpXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcG9zaXRpb24gKz0gMjtcbiAgICAgICAgfVxuXG4gICAgICAgIGRpY3Rpb25hcnkucmVmaW5lbWVudEF0ID0gYXQ7XG4gICAgICB9XG5cbiAgICAgIGRpY3Rpb25hcnkubnVtYmVyT2ZFeHBvcnRlZFN5bWJvbHMgPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgcG9zaXRpb24gKz0gNDtcbiAgICAgIGRpY3Rpb25hcnkubnVtYmVyT2ZOZXdTeW1ib2xzID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgIHBvc2l0aW9uICs9IDQ7XG4gICAgICBhcmdzID0gW2RpY3Rpb25hcnksIGhlYWRlci5udW1iZXIsIGhlYWRlci5yZWZlcnJlZFRvLCBkYXRhLCBwb3NpdGlvbiwgZW5kXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSA2OlxuICAgIGNhc2UgNzpcbiAgICAgIGNvbnN0IHRleHRSZWdpb24gPSB7fTtcbiAgICAgIHRleHRSZWdpb24uaW5mbyA9IHJlYWRSZWdpb25TZWdtZW50SW5mb3JtYXRpb24oZGF0YSwgcG9zaXRpb24pO1xuICAgICAgcG9zaXRpb24gKz0gUmVnaW9uU2VnbWVudEluZm9ybWF0aW9uRmllbGRMZW5ndGg7XG4gICAgICBjb25zdCB0ZXh0UmVnaW9uU2VnbWVudEZsYWdzID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgIHBvc2l0aW9uICs9IDI7XG4gICAgICB0ZXh0UmVnaW9uLmh1ZmZtYW4gPSAhISh0ZXh0UmVnaW9uU2VnbWVudEZsYWdzICYgMSk7XG4gICAgICB0ZXh0UmVnaW9uLnJlZmluZW1lbnQgPSAhISh0ZXh0UmVnaW9uU2VnbWVudEZsYWdzICYgMik7XG4gICAgICB0ZXh0UmVnaW9uLmxvZ1N0cmlwU2l6ZSA9IHRleHRSZWdpb25TZWdtZW50RmxhZ3MgPj4gMiAmIDM7XG4gICAgICB0ZXh0UmVnaW9uLnN0cmlwU2l6ZSA9IDEgPDwgdGV4dFJlZ2lvbi5sb2dTdHJpcFNpemU7XG4gICAgICB0ZXh0UmVnaW9uLnJlZmVyZW5jZUNvcm5lciA9IHRleHRSZWdpb25TZWdtZW50RmxhZ3MgPj4gNCAmIDM7XG4gICAgICB0ZXh0UmVnaW9uLnRyYW5zcG9zZWQgPSAhISh0ZXh0UmVnaW9uU2VnbWVudEZsYWdzICYgNjQpO1xuICAgICAgdGV4dFJlZ2lvbi5jb21iaW5hdGlvbk9wZXJhdG9yID0gdGV4dFJlZ2lvblNlZ21lbnRGbGFncyA+PiA3ICYgMztcbiAgICAgIHRleHRSZWdpb24uZGVmYXVsdFBpeGVsVmFsdWUgPSB0ZXh0UmVnaW9uU2VnbWVudEZsYWdzID4+IDkgJiAxO1xuICAgICAgdGV4dFJlZ2lvbi5kc09mZnNldCA9IHRleHRSZWdpb25TZWdtZW50RmxhZ3MgPDwgMTcgPj4gMjc7XG4gICAgICB0ZXh0UmVnaW9uLnJlZmluZW1lbnRUZW1wbGF0ZSA9IHRleHRSZWdpb25TZWdtZW50RmxhZ3MgPj4gMTUgJiAxO1xuXG4gICAgICBpZiAodGV4dFJlZ2lvbi5odWZmbWFuKSB7XG4gICAgICAgIGNvbnN0IHRleHRSZWdpb25IdWZmbWFuRmxhZ3MgPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQxNikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICBwb3NpdGlvbiArPSAyO1xuICAgICAgICB0ZXh0UmVnaW9uLmh1ZmZtYW5GUyA9IHRleHRSZWdpb25IdWZmbWFuRmxhZ3MgJiAzO1xuICAgICAgICB0ZXh0UmVnaW9uLmh1ZmZtYW5EUyA9IHRleHRSZWdpb25IdWZmbWFuRmxhZ3MgPj4gMiAmIDM7XG4gICAgICAgIHRleHRSZWdpb24uaHVmZm1hbkRUID0gdGV4dFJlZ2lvbkh1ZmZtYW5GbGFncyA+PiA0ICYgMztcbiAgICAgICAgdGV4dFJlZ2lvbi5odWZmbWFuUmVmaW5lbWVudERXID0gdGV4dFJlZ2lvbkh1ZmZtYW5GbGFncyA+PiA2ICYgMztcbiAgICAgICAgdGV4dFJlZ2lvbi5odWZmbWFuUmVmaW5lbWVudERIID0gdGV4dFJlZ2lvbkh1ZmZtYW5GbGFncyA+PiA4ICYgMztcbiAgICAgICAgdGV4dFJlZ2lvbi5odWZmbWFuUmVmaW5lbWVudERYID0gdGV4dFJlZ2lvbkh1ZmZtYW5GbGFncyA+PiAxMCAmIDM7XG4gICAgICAgIHRleHRSZWdpb24uaHVmZm1hblJlZmluZW1lbnREWSA9IHRleHRSZWdpb25IdWZmbWFuRmxhZ3MgPj4gMTIgJiAzO1xuICAgICAgICB0ZXh0UmVnaW9uLmh1ZmZtYW5SZWZpbmVtZW50U2l6ZVNlbGVjdG9yID0gISEodGV4dFJlZ2lvbkh1ZmZtYW5GbGFncyAmIDB4NDAwMCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0ZXh0UmVnaW9uLnJlZmluZW1lbnQgJiYgIXRleHRSZWdpb24ucmVmaW5lbWVudFRlbXBsYXRlKSB7XG4gICAgICAgIGF0ID0gW107XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDI7IGkrKykge1xuICAgICAgICAgIGF0LnB1c2goe1xuICAgICAgICAgICAgeDogKDAsIF9jb3JlX3V0aWxzLnJlYWRJbnQ4KShkYXRhLCBwb3NpdGlvbiksXG4gICAgICAgICAgICB5OiAoMCwgX2NvcmVfdXRpbHMucmVhZEludDgpKGRhdGEsIHBvc2l0aW9uICsgMSlcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBwb3NpdGlvbiArPSAyO1xuICAgICAgICB9XG5cbiAgICAgICAgdGV4dFJlZ2lvbi5yZWZpbmVtZW50QXQgPSBhdDtcbiAgICAgIH1cblxuICAgICAgdGV4dFJlZ2lvbi5udW1iZXJPZlN5bWJvbEluc3RhbmNlcyA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbik7XG4gICAgICBwb3NpdGlvbiArPSA0O1xuICAgICAgYXJncyA9IFt0ZXh0UmVnaW9uLCBoZWFkZXIucmVmZXJyZWRUbywgZGF0YSwgcG9zaXRpb24sIGVuZF07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgMTY6XG4gICAgICBjb25zdCBwYXR0ZXJuRGljdGlvbmFyeSA9IHt9O1xuICAgICAgY29uc3QgcGF0dGVybkRpY3Rpb25hcnlGbGFncyA9IGRhdGFbcG9zaXRpb24rK107XG4gICAgICBwYXR0ZXJuRGljdGlvbmFyeS5tbXIgPSAhIShwYXR0ZXJuRGljdGlvbmFyeUZsYWdzICYgMSk7XG4gICAgICBwYXR0ZXJuRGljdGlvbmFyeS50ZW1wbGF0ZSA9IHBhdHRlcm5EaWN0aW9uYXJ5RmxhZ3MgPj4gMSAmIDM7XG4gICAgICBwYXR0ZXJuRGljdGlvbmFyeS5wYXR0ZXJuV2lkdGggPSBkYXRhW3Bvc2l0aW9uKytdO1xuICAgICAgcGF0dGVybkRpY3Rpb25hcnkucGF0dGVybkhlaWdodCA9IGRhdGFbcG9zaXRpb24rK107XG4gICAgICBwYXR0ZXJuRGljdGlvbmFyeS5tYXhQYXR0ZXJuSW5kZXggPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgcG9zaXRpb24gKz0gNDtcbiAgICAgIGFyZ3MgPSBbcGF0dGVybkRpY3Rpb25hcnksIGhlYWRlci5udW1iZXIsIGRhdGEsIHBvc2l0aW9uLCBlbmRdO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIDIyOlxuICAgIGNhc2UgMjM6XG4gICAgICBjb25zdCBoYWxmdG9uZVJlZ2lvbiA9IHt9O1xuICAgICAgaGFsZnRvbmVSZWdpb24uaW5mbyA9IHJlYWRSZWdpb25TZWdtZW50SW5mb3JtYXRpb24oZGF0YSwgcG9zaXRpb24pO1xuICAgICAgcG9zaXRpb24gKz0gUmVnaW9uU2VnbWVudEluZm9ybWF0aW9uRmllbGRMZW5ndGg7XG4gICAgICBjb25zdCBoYWxmdG9uZVJlZ2lvbkZsYWdzID0gZGF0YVtwb3NpdGlvbisrXTtcbiAgICAgIGhhbGZ0b25lUmVnaW9uLm1tciA9ICEhKGhhbGZ0b25lUmVnaW9uRmxhZ3MgJiAxKTtcbiAgICAgIGhhbGZ0b25lUmVnaW9uLnRlbXBsYXRlID0gaGFsZnRvbmVSZWdpb25GbGFncyA+PiAxICYgMztcbiAgICAgIGhhbGZ0b25lUmVnaW9uLmVuYWJsZVNraXAgPSAhIShoYWxmdG9uZVJlZ2lvbkZsYWdzICYgOCk7XG4gICAgICBoYWxmdG9uZVJlZ2lvbi5jb21iaW5hdGlvbk9wZXJhdG9yID0gaGFsZnRvbmVSZWdpb25GbGFncyA+PiA0ICYgNztcbiAgICAgIGhhbGZ0b25lUmVnaW9uLmRlZmF1bHRQaXhlbFZhbHVlID0gaGFsZnRvbmVSZWdpb25GbGFncyA+PiA3ICYgMTtcbiAgICAgIGhhbGZ0b25lUmVnaW9uLmdyaWRXaWR0aCA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbik7XG4gICAgICBwb3NpdGlvbiArPSA0O1xuICAgICAgaGFsZnRvbmVSZWdpb24uZ3JpZEhlaWdodCA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbik7XG4gICAgICBwb3NpdGlvbiArPSA0O1xuICAgICAgaGFsZnRvbmVSZWdpb24uZ3JpZE9mZnNldFggPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24pICYgMHhmZmZmZmZmZjtcbiAgICAgIHBvc2l0aW9uICs9IDQ7XG4gICAgICBoYWxmdG9uZVJlZ2lvbi5ncmlkT2Zmc2V0WSA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbikgJiAweGZmZmZmZmZmO1xuICAgICAgcG9zaXRpb24gKz0gNDtcbiAgICAgIGhhbGZ0b25lUmVnaW9uLmdyaWRWZWN0b3JYID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgIHBvc2l0aW9uICs9IDI7XG4gICAgICBoYWxmdG9uZVJlZ2lvbi5ncmlkVmVjdG9yWSA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBwb3NpdGlvbik7XG4gICAgICBwb3NpdGlvbiArPSAyO1xuICAgICAgYXJncyA9IFtoYWxmdG9uZVJlZ2lvbiwgaGVhZGVyLnJlZmVycmVkVG8sIGRhdGEsIHBvc2l0aW9uLCBlbmRdO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIDM4OlxuICAgIGNhc2UgMzk6XG4gICAgICBjb25zdCBnZW5lcmljUmVnaW9uID0ge307XG4gICAgICBnZW5lcmljUmVnaW9uLmluZm8gPSByZWFkUmVnaW9uU2VnbWVudEluZm9ybWF0aW9uKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgIHBvc2l0aW9uICs9IFJlZ2lvblNlZ21lbnRJbmZvcm1hdGlvbkZpZWxkTGVuZ3RoO1xuICAgICAgY29uc3QgZ2VuZXJpY1JlZ2lvblNlZ21lbnRGbGFncyA9IGRhdGFbcG9zaXRpb24rK107XG4gICAgICBnZW5lcmljUmVnaW9uLm1tciA9ICEhKGdlbmVyaWNSZWdpb25TZWdtZW50RmxhZ3MgJiAxKTtcbiAgICAgIGdlbmVyaWNSZWdpb24udGVtcGxhdGUgPSBnZW5lcmljUmVnaW9uU2VnbWVudEZsYWdzID4+IDEgJiAzO1xuICAgICAgZ2VuZXJpY1JlZ2lvbi5wcmVkaWN0aW9uID0gISEoZ2VuZXJpY1JlZ2lvblNlZ21lbnRGbGFncyAmIDgpO1xuXG4gICAgICBpZiAoIWdlbmVyaWNSZWdpb24ubW1yKSB7XG4gICAgICAgIGF0TGVuZ3RoID0gZ2VuZXJpY1JlZ2lvbi50ZW1wbGF0ZSA9PT0gMCA/IDQgOiAxO1xuICAgICAgICBhdCA9IFtdO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBhdExlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgYXQucHVzaCh7XG4gICAgICAgICAgICB4OiAoMCwgX2NvcmVfdXRpbHMucmVhZEludDgpKGRhdGEsIHBvc2l0aW9uKSxcbiAgICAgICAgICAgIHk6ICgwLCBfY29yZV91dGlscy5yZWFkSW50OCkoZGF0YSwgcG9zaXRpb24gKyAxKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHBvc2l0aW9uICs9IDI7XG4gICAgICAgIH1cblxuICAgICAgICBnZW5lcmljUmVnaW9uLmF0ID0gYXQ7XG4gICAgICB9XG5cbiAgICAgIGFyZ3MgPSBbZ2VuZXJpY1JlZ2lvbiwgZGF0YSwgcG9zaXRpb24sIGVuZF07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgNDg6XG4gICAgICBjb25zdCBwYWdlSW5mbyA9IHtcbiAgICAgICAgd2lkdGg6ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbiksXG4gICAgICAgIGhlaWdodDogKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uICsgNCksXG4gICAgICAgIHJlc29sdXRpb25YOiAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gKyA4KSxcbiAgICAgICAgcmVzb2x1dGlvblk6ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbiArIDEyKVxuICAgICAgfTtcblxuICAgICAgaWYgKHBhZ2VJbmZvLmhlaWdodCA9PT0gMHhmZmZmZmZmZikge1xuICAgICAgICBkZWxldGUgcGFnZUluZm8uaGVpZ2h0O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwYWdlU2VnbWVudEZsYWdzID0gZGF0YVtwb3NpdGlvbiArIDE2XTtcbiAgICAgICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBwb3NpdGlvbiArIDE3KTtcbiAgICAgIHBhZ2VJbmZvLmxvc3NsZXNzID0gISEocGFnZVNlZ21lbnRGbGFncyAmIDEpO1xuICAgICAgcGFnZUluZm8ucmVmaW5lbWVudCA9ICEhKHBhZ2VTZWdtZW50RmxhZ3MgJiAyKTtcbiAgICAgIHBhZ2VJbmZvLmRlZmF1bHRQaXhlbFZhbHVlID0gcGFnZVNlZ21lbnRGbGFncyA+PiAyICYgMTtcbiAgICAgIHBhZ2VJbmZvLmNvbWJpbmF0aW9uT3BlcmF0b3IgPSBwYWdlU2VnbWVudEZsYWdzID4+IDMgJiAzO1xuICAgICAgcGFnZUluZm8ucmVxdWlyZXNCdWZmZXIgPSAhIShwYWdlU2VnbWVudEZsYWdzICYgMzIpO1xuICAgICAgcGFnZUluZm8uY29tYmluYXRpb25PcGVyYXRvck92ZXJyaWRlID0gISEocGFnZVNlZ21lbnRGbGFncyAmIDY0KTtcbiAgICAgIGFyZ3MgPSBbcGFnZUluZm9dO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIDQ5OlxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIDUwOlxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIDUxOlxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIDUzOlxuICAgICAgYXJncyA9IFtoZWFkZXIubnVtYmVyLCBkYXRhLCBwb3NpdGlvbiwgZW5kXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSA2MjpcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKGBzZWdtZW50IHR5cGUgJHtoZWFkZXIudHlwZU5hbWV9KCR7aGVhZGVyLnR5cGV9KWAgKyBcIiBpcyBub3QgaW1wbGVtZW50ZWRcIik7XG4gIH1cblxuICBjb25zdCBjYWxsYmFja05hbWUgPSBcIm9uXCIgKyBoZWFkZXIudHlwZU5hbWU7XG5cbiAgaWYgKGNhbGxiYWNrTmFtZSBpbiB2aXNpdG9yKSB7XG4gICAgdmlzaXRvcltjYWxsYmFja05hbWVdLmFwcGx5KHZpc2l0b3IsIGFyZ3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NTZWdtZW50cyhzZWdtZW50cywgdmlzaXRvcikge1xuICBmb3IgKGxldCBpID0gMCwgaWkgPSBzZWdtZW50cy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgcHJvY2Vzc1NlZ21lbnQoc2VnbWVudHNbaV0sIHZpc2l0b3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlSmJpZzJDaHVua3MoY2h1bmtzKSB7XG4gIGNvbnN0IHZpc2l0b3IgPSBuZXcgU2ltcGxlU2VnbWVudFZpc2l0b3IoKTtcblxuICBmb3IgKGxldCBpID0gMCwgaWkgPSBjaHVua3MubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgIGNvbnN0IGNodW5rID0gY2h1bmtzW2ldO1xuICAgIGNvbnN0IHNlZ21lbnRzID0gcmVhZFNlZ21lbnRzKHt9LCBjaHVuay5kYXRhLCBjaHVuay5zdGFydCwgY2h1bmsuZW5kKTtcbiAgICBwcm9jZXNzU2VnbWVudHMoc2VnbWVudHMsIHZpc2l0b3IpO1xuICB9XG5cbiAgcmV0dXJuIHZpc2l0b3IuYnVmZmVyO1xufVxuXG5mdW5jdGlvbiBwYXJzZUpiaWcyKGRhdGEpIHtcbiAgY29uc3QgZW5kID0gZGF0YS5sZW5ndGg7XG4gIGxldCBwb3NpdGlvbiA9IDA7XG5cbiAgaWYgKGRhdGFbcG9zaXRpb25dICE9PSAweDk3IHx8IGRhdGFbcG9zaXRpb24gKyAxXSAhPT0gMHg0YSB8fCBkYXRhW3Bvc2l0aW9uICsgMl0gIT09IDB4NDIgfHwgZGF0YVtwb3NpdGlvbiArIDNdICE9PSAweDMyIHx8IGRhdGFbcG9zaXRpb24gKyA0XSAhPT0gMHgwZCB8fCBkYXRhW3Bvc2l0aW9uICsgNV0gIT09IDB4MGEgfHwgZGF0YVtwb3NpdGlvbiArIDZdICE9PSAweDFhIHx8IGRhdGFbcG9zaXRpb24gKyA3XSAhPT0gMHgwYSkge1xuICAgIHRocm93IG5ldyBKYmlnMkVycm9yKFwicGFyc2VKYmlnMiAtIGludmFsaWQgaGVhZGVyLlwiKTtcbiAgfVxuXG4gIGNvbnN0IGhlYWRlciA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHBvc2l0aW9uICs9IDg7XG4gIGNvbnN0IGZsYWdzID0gZGF0YVtwb3NpdGlvbisrXTtcbiAgaGVhZGVyLnJhbmRvbUFjY2VzcyA9ICEoZmxhZ3MgJiAxKTtcblxuICBpZiAoIShmbGFncyAmIDIpKSB7XG4gICAgaGVhZGVyLm51bWJlck9mUGFnZXMgPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24pO1xuICAgIHBvc2l0aW9uICs9IDQ7XG4gIH1cblxuICBjb25zdCBzZWdtZW50cyA9IHJlYWRTZWdtZW50cyhoZWFkZXIsIGRhdGEsIHBvc2l0aW9uLCBlbmQpO1xuICBjb25zdCB2aXNpdG9yID0gbmV3IFNpbXBsZVNlZ21lbnRWaXNpdG9yKCk7XG4gIHByb2Nlc3NTZWdtZW50cyhzZWdtZW50cywgdmlzaXRvcik7XG4gIGNvbnN0IHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHRcbiAgfSA9IHZpc2l0b3IuY3VycmVudFBhZ2VJbmZvO1xuICBjb25zdCBiaXRQYWNrZWQgPSB2aXNpdG9yLmJ1ZmZlcjtcbiAgY29uc3QgaW1nRGF0YSA9IG5ldyBVaW50OENsYW1wZWRBcnJheSh3aWR0aCAqIGhlaWdodCk7XG4gIGxldCBxID0gMCxcbiAgICAgIGsgPSAwO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHtcbiAgICBsZXQgbWFzayA9IDAsXG4gICAgICAgIGJ1ZmZlcjtcblxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgd2lkdGg7IGorKykge1xuICAgICAgaWYgKCFtYXNrKSB7XG4gICAgICAgIG1hc2sgPSAxMjg7XG4gICAgICAgIGJ1ZmZlciA9IGJpdFBhY2tlZFtrKytdO1xuICAgICAgfVxuXG4gICAgICBpbWdEYXRhW3ErK10gPSBidWZmZXIgJiBtYXNrID8gMCA6IDI1NTtcbiAgICAgIG1hc2sgPj49IDE7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBpbWdEYXRhLFxuICAgIHdpZHRoLFxuICAgIGhlaWdodFxuICB9O1xufVxuXG5jbGFzcyBTaW1wbGVTZWdtZW50VmlzaXRvciB7XG4gIG9uUGFnZUluZm9ybWF0aW9uKGluZm8pIHtcbiAgICB0aGlzLmN1cnJlbnRQYWdlSW5mbyA9IGluZm87XG4gICAgY29uc3Qgcm93U2l6ZSA9IGluZm8ud2lkdGggKyA3ID4+IDM7XG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHJvd1NpemUgKiBpbmZvLmhlaWdodCk7XG5cbiAgICBpZiAoaW5mby5kZWZhdWx0UGl4ZWxWYWx1ZSkge1xuICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gYnVmZmVyLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgYnVmZmVyW2ldID0gMHhmZjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjtcbiAgfVxuXG4gIGRyYXdCaXRtYXAocmVnaW9uSW5mbywgYml0bWFwKSB7XG4gICAgY29uc3QgcGFnZUluZm8gPSB0aGlzLmN1cnJlbnRQYWdlSW5mbztcbiAgICBjb25zdCB3aWR0aCA9IHJlZ2lvbkluZm8ud2lkdGgsXG4gICAgICAgICAgaGVpZ2h0ID0gcmVnaW9uSW5mby5oZWlnaHQ7XG4gICAgY29uc3Qgcm93U2l6ZSA9IHBhZ2VJbmZvLndpZHRoICsgNyA+PiAzO1xuICAgIGNvbnN0IGNvbWJpbmF0aW9uT3BlcmF0b3IgPSBwYWdlSW5mby5jb21iaW5hdGlvbk9wZXJhdG9yT3ZlcnJpZGUgPyByZWdpb25JbmZvLmNvbWJpbmF0aW9uT3BlcmF0b3IgOiBwYWdlSW5mby5jb21iaW5hdGlvbk9wZXJhdG9yO1xuICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMuYnVmZmVyO1xuICAgIGNvbnN0IG1hc2swID0gMTI4ID4+IChyZWdpb25JbmZvLnggJiA3KTtcbiAgICBsZXQgb2Zmc2V0MCA9IHJlZ2lvbkluZm8ueSAqIHJvd1NpemUgKyAocmVnaW9uSW5mby54ID4+IDMpO1xuICAgIGxldCBpLCBqLCBtYXNrLCBvZmZzZXQ7XG5cbiAgICBzd2l0Y2ggKGNvbWJpbmF0aW9uT3BlcmF0b3IpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7XG4gICAgICAgICAgbWFzayA9IG1hc2swO1xuICAgICAgICAgIG9mZnNldCA9IG9mZnNldDA7XG5cbiAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykge1xuICAgICAgICAgICAgaWYgKGJpdG1hcFtpXVtqXSkge1xuICAgICAgICAgICAgICBidWZmZXJbb2Zmc2V0XSB8PSBtYXNrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBtYXNrID4+PSAxO1xuXG4gICAgICAgICAgICBpZiAoIW1hc2spIHtcbiAgICAgICAgICAgICAgbWFzayA9IDEyODtcbiAgICAgICAgICAgICAgb2Zmc2V0Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgb2Zmc2V0MCArPSByb3dTaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgMjpcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7XG4gICAgICAgICAgbWFzayA9IG1hc2swO1xuICAgICAgICAgIG9mZnNldCA9IG9mZnNldDA7XG5cbiAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykge1xuICAgICAgICAgICAgaWYgKGJpdG1hcFtpXVtqXSkge1xuICAgICAgICAgICAgICBidWZmZXJbb2Zmc2V0XSBePSBtYXNrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBtYXNrID4+PSAxO1xuXG4gICAgICAgICAgICBpZiAoIW1hc2spIHtcbiAgICAgICAgICAgICAgbWFzayA9IDEyODtcbiAgICAgICAgICAgICAgb2Zmc2V0Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgb2Zmc2V0MCArPSByb3dTaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKGBvcGVyYXRvciAke2NvbWJpbmF0aW9uT3BlcmF0b3J9IGlzIG5vdCBzdXBwb3J0ZWRgKTtcbiAgICB9XG4gIH1cblxuICBvbkltbWVkaWF0ZUdlbmVyaWNSZWdpb24ocmVnaW9uLCBkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgY29uc3QgcmVnaW9uSW5mbyA9IHJlZ2lvbi5pbmZvO1xuICAgIGNvbnN0IGRlY29kaW5nQ29udGV4dCA9IG5ldyBEZWNvZGluZ0NvbnRleHQoZGF0YSwgc3RhcnQsIGVuZCk7XG4gICAgY29uc3QgYml0bWFwID0gZGVjb2RlQml0bWFwKHJlZ2lvbi5tbXIsIHJlZ2lvbkluZm8ud2lkdGgsIHJlZ2lvbkluZm8uaGVpZ2h0LCByZWdpb24udGVtcGxhdGUsIHJlZ2lvbi5wcmVkaWN0aW9uLCBudWxsLCByZWdpb24uYXQsIGRlY29kaW5nQ29udGV4dCk7XG4gICAgdGhpcy5kcmF3Qml0bWFwKHJlZ2lvbkluZm8sIGJpdG1hcCk7XG4gIH1cblxuICBvbkltbWVkaWF0ZUxvc3NsZXNzR2VuZXJpY1JlZ2lvbigpIHtcbiAgICB0aGlzLm9uSW1tZWRpYXRlR2VuZXJpY1JlZ2lvbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgb25TeW1ib2xEaWN0aW9uYXJ5KGRpY3Rpb25hcnksIGN1cnJlbnRTZWdtZW50LCByZWZlcnJlZFNlZ21lbnRzLCBkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgbGV0IGh1ZmZtYW5UYWJsZXMsIGh1ZmZtYW5JbnB1dDtcblxuICAgIGlmIChkaWN0aW9uYXJ5Lmh1ZmZtYW4pIHtcbiAgICAgIGh1ZmZtYW5UYWJsZXMgPSBnZXRTeW1ib2xEaWN0aW9uYXJ5SHVmZm1hblRhYmxlcyhkaWN0aW9uYXJ5LCByZWZlcnJlZFNlZ21lbnRzLCB0aGlzLmN1c3RvbVRhYmxlcyk7XG4gICAgICBodWZmbWFuSW5wdXQgPSBuZXcgUmVhZGVyKGRhdGEsIHN0YXJ0LCBlbmQpO1xuICAgIH1cblxuICAgIGxldCBzeW1ib2xzID0gdGhpcy5zeW1ib2xzO1xuXG4gICAgaWYgKCFzeW1ib2xzKSB7XG4gICAgICB0aGlzLnN5bWJvbHMgPSBzeW1ib2xzID0ge307XG4gICAgfVxuXG4gICAgbGV0IGlucHV0U3ltYm9scyA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gcmVmZXJyZWRTZWdtZW50cy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBjb25zdCByZWZlcnJlZFN5bWJvbHMgPSBzeW1ib2xzW3JlZmVycmVkU2VnbWVudHNbaV1dO1xuXG4gICAgICBpZiAocmVmZXJyZWRTeW1ib2xzKSB7XG4gICAgICAgIGlucHV0U3ltYm9scyA9IGlucHV0U3ltYm9scy5jb25jYXQocmVmZXJyZWRTeW1ib2xzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBkZWNvZGluZ0NvbnRleHQgPSBuZXcgRGVjb2RpbmdDb250ZXh0KGRhdGEsIHN0YXJ0LCBlbmQpO1xuICAgIHN5bWJvbHNbY3VycmVudFNlZ21lbnRdID0gZGVjb2RlU3ltYm9sRGljdGlvbmFyeShkaWN0aW9uYXJ5Lmh1ZmZtYW4sIGRpY3Rpb25hcnkucmVmaW5lbWVudCwgaW5wdXRTeW1ib2xzLCBkaWN0aW9uYXJ5Lm51bWJlck9mTmV3U3ltYm9scywgZGljdGlvbmFyeS5udW1iZXJPZkV4cG9ydGVkU3ltYm9scywgaHVmZm1hblRhYmxlcywgZGljdGlvbmFyeS50ZW1wbGF0ZSwgZGljdGlvbmFyeS5hdCwgZGljdGlvbmFyeS5yZWZpbmVtZW50VGVtcGxhdGUsIGRpY3Rpb25hcnkucmVmaW5lbWVudEF0LCBkZWNvZGluZ0NvbnRleHQsIGh1ZmZtYW5JbnB1dCk7XG4gIH1cblxuICBvbkltbWVkaWF0ZVRleHRSZWdpb24ocmVnaW9uLCByZWZlcnJlZFNlZ21lbnRzLCBkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgY29uc3QgcmVnaW9uSW5mbyA9IHJlZ2lvbi5pbmZvO1xuICAgIGxldCBodWZmbWFuVGFibGVzLCBodWZmbWFuSW5wdXQ7XG4gICAgY29uc3Qgc3ltYm9scyA9IHRoaXMuc3ltYm9scztcbiAgICBsZXQgaW5wdXRTeW1ib2xzID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSByZWZlcnJlZFNlZ21lbnRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGNvbnN0IHJlZmVycmVkU3ltYm9scyA9IHN5bWJvbHNbcmVmZXJyZWRTZWdtZW50c1tpXV07XG5cbiAgICAgIGlmIChyZWZlcnJlZFN5bWJvbHMpIHtcbiAgICAgICAgaW5wdXRTeW1ib2xzID0gaW5wdXRTeW1ib2xzLmNvbmNhdChyZWZlcnJlZFN5bWJvbHMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHN5bWJvbENvZGVMZW5ndGggPSAoMCwgX2NvcmVfdXRpbHMubG9nMikoaW5wdXRTeW1ib2xzLmxlbmd0aCk7XG5cbiAgICBpZiAocmVnaW9uLmh1ZmZtYW4pIHtcbiAgICAgIGh1ZmZtYW5JbnB1dCA9IG5ldyBSZWFkZXIoZGF0YSwgc3RhcnQsIGVuZCk7XG4gICAgICBodWZmbWFuVGFibGVzID0gZ2V0VGV4dFJlZ2lvbkh1ZmZtYW5UYWJsZXMocmVnaW9uLCByZWZlcnJlZFNlZ21lbnRzLCB0aGlzLmN1c3RvbVRhYmxlcywgaW5wdXRTeW1ib2xzLmxlbmd0aCwgaHVmZm1hbklucHV0KTtcbiAgICB9XG5cbiAgICBjb25zdCBkZWNvZGluZ0NvbnRleHQgPSBuZXcgRGVjb2RpbmdDb250ZXh0KGRhdGEsIHN0YXJ0LCBlbmQpO1xuICAgIGNvbnN0IGJpdG1hcCA9IGRlY29kZVRleHRSZWdpb24ocmVnaW9uLmh1ZmZtYW4sIHJlZ2lvbi5yZWZpbmVtZW50LCByZWdpb25JbmZvLndpZHRoLCByZWdpb25JbmZvLmhlaWdodCwgcmVnaW9uLmRlZmF1bHRQaXhlbFZhbHVlLCByZWdpb24ubnVtYmVyT2ZTeW1ib2xJbnN0YW5jZXMsIHJlZ2lvbi5zdHJpcFNpemUsIGlucHV0U3ltYm9scywgc3ltYm9sQ29kZUxlbmd0aCwgcmVnaW9uLnRyYW5zcG9zZWQsIHJlZ2lvbi5kc09mZnNldCwgcmVnaW9uLnJlZmVyZW5jZUNvcm5lciwgcmVnaW9uLmNvbWJpbmF0aW9uT3BlcmF0b3IsIGh1ZmZtYW5UYWJsZXMsIHJlZ2lvbi5yZWZpbmVtZW50VGVtcGxhdGUsIHJlZ2lvbi5yZWZpbmVtZW50QXQsIGRlY29kaW5nQ29udGV4dCwgcmVnaW9uLmxvZ1N0cmlwU2l6ZSwgaHVmZm1hbklucHV0KTtcbiAgICB0aGlzLmRyYXdCaXRtYXAocmVnaW9uSW5mbywgYml0bWFwKTtcbiAgfVxuXG4gIG9uSW1tZWRpYXRlTG9zc2xlc3NUZXh0UmVnaW9uKCkge1xuICAgIHRoaXMub25JbW1lZGlhdGVUZXh0UmVnaW9uLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBvblBhdHRlcm5EaWN0aW9uYXJ5KGRpY3Rpb25hcnksIGN1cnJlbnRTZWdtZW50LCBkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgbGV0IHBhdHRlcm5zID0gdGhpcy5wYXR0ZXJucztcblxuICAgIGlmICghcGF0dGVybnMpIHtcbiAgICAgIHRoaXMucGF0dGVybnMgPSBwYXR0ZXJucyA9IHt9O1xuICAgIH1cblxuICAgIGNvbnN0IGRlY29kaW5nQ29udGV4dCA9IG5ldyBEZWNvZGluZ0NvbnRleHQoZGF0YSwgc3RhcnQsIGVuZCk7XG4gICAgcGF0dGVybnNbY3VycmVudFNlZ21lbnRdID0gZGVjb2RlUGF0dGVybkRpY3Rpb25hcnkoZGljdGlvbmFyeS5tbXIsIGRpY3Rpb25hcnkucGF0dGVybldpZHRoLCBkaWN0aW9uYXJ5LnBhdHRlcm5IZWlnaHQsIGRpY3Rpb25hcnkubWF4UGF0dGVybkluZGV4LCBkaWN0aW9uYXJ5LnRlbXBsYXRlLCBkZWNvZGluZ0NvbnRleHQpO1xuICB9XG5cbiAgb25JbW1lZGlhdGVIYWxmdG9uZVJlZ2lvbihyZWdpb24sIHJlZmVycmVkU2VnbWVudHMsIGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgICBjb25zdCBwYXR0ZXJucyA9IHRoaXMucGF0dGVybnNbcmVmZXJyZWRTZWdtZW50c1swXV07XG4gICAgY29uc3QgcmVnaW9uSW5mbyA9IHJlZ2lvbi5pbmZvO1xuICAgIGNvbnN0IGRlY29kaW5nQ29udGV4dCA9IG5ldyBEZWNvZGluZ0NvbnRleHQoZGF0YSwgc3RhcnQsIGVuZCk7XG4gICAgY29uc3QgYml0bWFwID0gZGVjb2RlSGFsZnRvbmVSZWdpb24ocmVnaW9uLm1tciwgcGF0dGVybnMsIHJlZ2lvbi50ZW1wbGF0ZSwgcmVnaW9uSW5mby53aWR0aCwgcmVnaW9uSW5mby5oZWlnaHQsIHJlZ2lvbi5kZWZhdWx0UGl4ZWxWYWx1ZSwgcmVnaW9uLmVuYWJsZVNraXAsIHJlZ2lvbi5jb21iaW5hdGlvbk9wZXJhdG9yLCByZWdpb24uZ3JpZFdpZHRoLCByZWdpb24uZ3JpZEhlaWdodCwgcmVnaW9uLmdyaWRPZmZzZXRYLCByZWdpb24uZ3JpZE9mZnNldFksIHJlZ2lvbi5ncmlkVmVjdG9yWCwgcmVnaW9uLmdyaWRWZWN0b3JZLCBkZWNvZGluZ0NvbnRleHQpO1xuICAgIHRoaXMuZHJhd0JpdG1hcChyZWdpb25JbmZvLCBiaXRtYXApO1xuICB9XG5cbiAgb25JbW1lZGlhdGVMb3NzbGVzc0hhbGZ0b25lUmVnaW9uKCkge1xuICAgIHRoaXMub25JbW1lZGlhdGVIYWxmdG9uZVJlZ2lvbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgb25UYWJsZXMoY3VycmVudFNlZ21lbnQsIGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgICBsZXQgY3VzdG9tVGFibGVzID0gdGhpcy5jdXN0b21UYWJsZXM7XG5cbiAgICBpZiAoIWN1c3RvbVRhYmxlcykge1xuICAgICAgdGhpcy5jdXN0b21UYWJsZXMgPSBjdXN0b21UYWJsZXMgPSB7fTtcbiAgICB9XG5cbiAgICBjdXN0b21UYWJsZXNbY3VycmVudFNlZ21lbnRdID0gZGVjb2RlVGFibGVzU2VnbWVudChkYXRhLCBzdGFydCwgZW5kKTtcbiAgfVxuXG59XG5cbmNsYXNzIEh1ZmZtYW5MaW5lIHtcbiAgY29uc3RydWN0b3IobGluZURhdGEpIHtcbiAgICBpZiAobGluZURhdGEubGVuZ3RoID09PSAyKSB7XG4gICAgICB0aGlzLmlzT09CID0gdHJ1ZTtcbiAgICAgIHRoaXMucmFuZ2VMb3cgPSAwO1xuICAgICAgdGhpcy5wcmVmaXhMZW5ndGggPSBsaW5lRGF0YVswXTtcbiAgICAgIHRoaXMucmFuZ2VMZW5ndGggPSAwO1xuICAgICAgdGhpcy5wcmVmaXhDb2RlID0gbGluZURhdGFbMV07XG4gICAgICB0aGlzLmlzTG93ZXJSYW5nZSA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzT09CID0gZmFsc2U7XG4gICAgICB0aGlzLnJhbmdlTG93ID0gbGluZURhdGFbMF07XG4gICAgICB0aGlzLnByZWZpeExlbmd0aCA9IGxpbmVEYXRhWzFdO1xuICAgICAgdGhpcy5yYW5nZUxlbmd0aCA9IGxpbmVEYXRhWzJdO1xuICAgICAgdGhpcy5wcmVmaXhDb2RlID0gbGluZURhdGFbM107XG4gICAgICB0aGlzLmlzTG93ZXJSYW5nZSA9IGxpbmVEYXRhWzRdID09PSBcImxvd2VyXCI7XG4gICAgfVxuICB9XG5cbn1cblxuY2xhc3MgSHVmZm1hblRyZWVOb2RlIHtcbiAgY29uc3RydWN0b3IobGluZSkge1xuICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcblxuICAgIGlmIChsaW5lKSB7XG4gICAgICB0aGlzLmlzTGVhZiA9IHRydWU7XG4gICAgICB0aGlzLnJhbmdlTGVuZ3RoID0gbGluZS5yYW5nZUxlbmd0aDtcbiAgICAgIHRoaXMucmFuZ2VMb3cgPSBsaW5lLnJhbmdlTG93O1xuICAgICAgdGhpcy5pc0xvd2VyUmFuZ2UgPSBsaW5lLmlzTG93ZXJSYW5nZTtcbiAgICAgIHRoaXMuaXNPT0IgPSBsaW5lLmlzT09CO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzTGVhZiA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGJ1aWxkVHJlZShsaW5lLCBzaGlmdCkge1xuICAgIGNvbnN0IGJpdCA9IGxpbmUucHJlZml4Q29kZSA+PiBzaGlmdCAmIDE7XG5cbiAgICBpZiAoc2hpZnQgPD0gMCkge1xuICAgICAgdGhpcy5jaGlsZHJlbltiaXRdID0gbmV3IEh1ZmZtYW5UcmVlTm9kZShsaW5lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IG5vZGUgPSB0aGlzLmNoaWxkcmVuW2JpdF07XG5cbiAgICAgIGlmICghbm9kZSkge1xuICAgICAgICB0aGlzLmNoaWxkcmVuW2JpdF0gPSBub2RlID0gbmV3IEh1ZmZtYW5UcmVlTm9kZShudWxsKTtcbiAgICAgIH1cblxuICAgICAgbm9kZS5idWlsZFRyZWUobGluZSwgc2hpZnQgLSAxKTtcbiAgICB9XG4gIH1cblxuICBkZWNvZGVOb2RlKHJlYWRlcikge1xuICAgIGlmICh0aGlzLmlzTGVhZikge1xuICAgICAgaWYgKHRoaXMuaXNPT0IpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGh0T2Zmc2V0ID0gcmVhZGVyLnJlYWRCaXRzKHRoaXMucmFuZ2VMZW5ndGgpO1xuICAgICAgcmV0dXJuIHRoaXMucmFuZ2VMb3cgKyAodGhpcy5pc0xvd2VyUmFuZ2UgPyAtaHRPZmZzZXQgOiBodE9mZnNldCk7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuY2hpbGRyZW5bcmVhZGVyLnJlYWRCaXQoKV07XG5cbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKFwiaW52YWxpZCBIdWZmbWFuIGRhdGFcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGUuZGVjb2RlTm9kZShyZWFkZXIpO1xuICB9XG5cbn1cblxuY2xhc3MgSHVmZm1hblRhYmxlIHtcbiAgY29uc3RydWN0b3IobGluZXMsIHByZWZpeENvZGVzRG9uZSkge1xuICAgIGlmICghcHJlZml4Q29kZXNEb25lKSB7XG4gICAgICB0aGlzLmFzc2lnblByZWZpeENvZGVzKGxpbmVzKTtcbiAgICB9XG5cbiAgICB0aGlzLnJvb3ROb2RlID0gbmV3IEh1ZmZtYW5UcmVlTm9kZShudWxsKTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGxpbmVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGNvbnN0IGxpbmUgPSBsaW5lc1tpXTtcblxuICAgICAgaWYgKGxpbmUucHJlZml4TGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnJvb3ROb2RlLmJ1aWxkVHJlZShsaW5lLCBsaW5lLnByZWZpeExlbmd0aCAtIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGRlY29kZShyZWFkZXIpIHtcbiAgICByZXR1cm4gdGhpcy5yb290Tm9kZS5kZWNvZGVOb2RlKHJlYWRlcik7XG4gIH1cblxuICBhc3NpZ25QcmVmaXhDb2RlcyhsaW5lcykge1xuICAgIGNvbnN0IGxpbmVzTGVuZ3RoID0gbGluZXMubGVuZ3RoO1xuICAgIGxldCBwcmVmaXhMZW5ndGhNYXggPSAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lc0xlbmd0aDsgaSsrKSB7XG4gICAgICBwcmVmaXhMZW5ndGhNYXggPSBNYXRoLm1heChwcmVmaXhMZW5ndGhNYXgsIGxpbmVzW2ldLnByZWZpeExlbmd0aCk7XG4gICAgfVxuXG4gICAgY29uc3QgaGlzdG9ncmFtID0gbmV3IFVpbnQzMkFycmF5KHByZWZpeExlbmd0aE1heCArIDEpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lc0xlbmd0aDsgaSsrKSB7XG4gICAgICBoaXN0b2dyYW1bbGluZXNbaV0ucHJlZml4TGVuZ3RoXSsrO1xuICAgIH1cblxuICAgIGxldCBjdXJyZW50TGVuZ3RoID0gMSxcbiAgICAgICAgZmlyc3RDb2RlID0gMCxcbiAgICAgICAgY3VycmVudENvZGUsXG4gICAgICAgIGN1cnJlbnRUZW1wLFxuICAgICAgICBsaW5lO1xuICAgIGhpc3RvZ3JhbVswXSA9IDA7XG5cbiAgICB3aGlsZSAoY3VycmVudExlbmd0aCA8PSBwcmVmaXhMZW5ndGhNYXgpIHtcbiAgICAgIGZpcnN0Q29kZSA9IGZpcnN0Q29kZSArIGhpc3RvZ3JhbVtjdXJyZW50TGVuZ3RoIC0gMV0gPDwgMTtcbiAgICAgIGN1cnJlbnRDb2RlID0gZmlyc3RDb2RlO1xuICAgICAgY3VycmVudFRlbXAgPSAwO1xuXG4gICAgICB3aGlsZSAoY3VycmVudFRlbXAgPCBsaW5lc0xlbmd0aCkge1xuICAgICAgICBsaW5lID0gbGluZXNbY3VycmVudFRlbXBdO1xuXG4gICAgICAgIGlmIChsaW5lLnByZWZpeExlbmd0aCA9PT0gY3VycmVudExlbmd0aCkge1xuICAgICAgICAgIGxpbmUucHJlZml4Q29kZSA9IGN1cnJlbnRDb2RlO1xuICAgICAgICAgIGN1cnJlbnRDb2RlKys7XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50VGVtcCsrO1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50TGVuZ3RoKys7XG4gICAgfVxuICB9XG5cbn1cblxuZnVuY3Rpb24gZGVjb2RlVGFibGVzU2VnbWVudChkYXRhLCBzdGFydCwgZW5kKSB7XG4gIGNvbnN0IGZsYWdzID0gZGF0YVtzdGFydF07XG4gIGNvbnN0IGxvd2VzdFZhbHVlID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MzIpKGRhdGEsIHN0YXJ0ICsgMSkgJiAweGZmZmZmZmZmO1xuICBjb25zdCBoaWdoZXN0VmFsdWUgPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgc3RhcnQgKyA1KSAmIDB4ZmZmZmZmZmY7XG4gIGNvbnN0IHJlYWRlciA9IG5ldyBSZWFkZXIoZGF0YSwgc3RhcnQgKyA5LCBlbmQpO1xuICBjb25zdCBwcmVmaXhTaXplQml0cyA9IChmbGFncyA+PiAxICYgNykgKyAxO1xuICBjb25zdCByYW5nZVNpemVCaXRzID0gKGZsYWdzID4+IDQgJiA3KSArIDE7XG4gIGNvbnN0IGxpbmVzID0gW107XG4gIGxldCBwcmVmaXhMZW5ndGgsXG4gICAgICByYW5nZUxlbmd0aCxcbiAgICAgIGN1cnJlbnRSYW5nZUxvdyA9IGxvd2VzdFZhbHVlO1xuXG4gIGRvIHtcbiAgICBwcmVmaXhMZW5ndGggPSByZWFkZXIucmVhZEJpdHMocHJlZml4U2l6ZUJpdHMpO1xuICAgIHJhbmdlTGVuZ3RoID0gcmVhZGVyLnJlYWRCaXRzKHJhbmdlU2l6ZUJpdHMpO1xuICAgIGxpbmVzLnB1c2gobmV3IEh1ZmZtYW5MaW5lKFtjdXJyZW50UmFuZ2VMb3csIHByZWZpeExlbmd0aCwgcmFuZ2VMZW5ndGgsIDBdKSk7XG4gICAgY3VycmVudFJhbmdlTG93ICs9IDEgPDwgcmFuZ2VMZW5ndGg7XG4gIH0gd2hpbGUgKGN1cnJlbnRSYW5nZUxvdyA8IGhpZ2hlc3RWYWx1ZSk7XG5cbiAgcHJlZml4TGVuZ3RoID0gcmVhZGVyLnJlYWRCaXRzKHByZWZpeFNpemVCaXRzKTtcbiAgbGluZXMucHVzaChuZXcgSHVmZm1hbkxpbmUoW2xvd2VzdFZhbHVlIC0gMSwgcHJlZml4TGVuZ3RoLCAzMiwgMCwgXCJsb3dlclwiXSkpO1xuICBwcmVmaXhMZW5ndGggPSByZWFkZXIucmVhZEJpdHMocHJlZml4U2l6ZUJpdHMpO1xuICBsaW5lcy5wdXNoKG5ldyBIdWZmbWFuTGluZShbaGlnaGVzdFZhbHVlLCBwcmVmaXhMZW5ndGgsIDMyLCAwXSkpO1xuXG4gIGlmIChmbGFncyAmIDEpIHtcbiAgICBwcmVmaXhMZW5ndGggPSByZWFkZXIucmVhZEJpdHMocHJlZml4U2l6ZUJpdHMpO1xuICAgIGxpbmVzLnB1c2gobmV3IEh1ZmZtYW5MaW5lKFtwcmVmaXhMZW5ndGgsIDBdKSk7XG4gIH1cblxuICByZXR1cm4gbmV3IEh1ZmZtYW5UYWJsZShsaW5lcywgZmFsc2UpO1xufVxuXG5jb25zdCBzdGFuZGFyZFRhYmxlc0NhY2hlID0ge307XG5cbmZ1bmN0aW9uIGdldFN0YW5kYXJkVGFibGUobnVtYmVyKSB7XG4gIGxldCB0YWJsZSA9IHN0YW5kYXJkVGFibGVzQ2FjaGVbbnVtYmVyXTtcblxuICBpZiAodGFibGUpIHtcbiAgICByZXR1cm4gdGFibGU7XG4gIH1cblxuICBsZXQgbGluZXM7XG5cbiAgc3dpdGNoIChudW1iZXIpIHtcbiAgICBjYXNlIDE6XG4gICAgICBsaW5lcyA9IFtbMCwgMSwgNCwgMHgwXSwgWzE2LCAyLCA4LCAweDJdLCBbMjcyLCAzLCAxNiwgMHg2XSwgWzY1ODA4LCAzLCAzMiwgMHg3XV07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgMjpcbiAgICAgIGxpbmVzID0gW1swLCAxLCAwLCAweDBdLCBbMSwgMiwgMCwgMHgyXSwgWzIsIDMsIDAsIDB4Nl0sIFszLCA0LCAzLCAweGVdLCBbMTEsIDUsIDYsIDB4MWVdLCBbNzUsIDYsIDMyLCAweDNlXSwgWzYsIDB4M2ZdXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAzOlxuICAgICAgbGluZXMgPSBbWy0yNTYsIDgsIDgsIDB4ZmVdLCBbMCwgMSwgMCwgMHgwXSwgWzEsIDIsIDAsIDB4Ml0sIFsyLCAzLCAwLCAweDZdLCBbMywgNCwgMywgMHhlXSwgWzExLCA1LCA2LCAweDFlXSwgWy0yNTcsIDgsIDMyLCAweGZmLCBcImxvd2VyXCJdLCBbNzUsIDcsIDMyLCAweDdlXSwgWzYsIDB4M2VdXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSA0OlxuICAgICAgbGluZXMgPSBbWzEsIDEsIDAsIDB4MF0sIFsyLCAyLCAwLCAweDJdLCBbMywgMywgMCwgMHg2XSwgWzQsIDQsIDMsIDB4ZV0sIFsxMiwgNSwgNiwgMHgxZV0sIFs3NiwgNSwgMzIsIDB4MWZdXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSA1OlxuICAgICAgbGluZXMgPSBbWy0yNTUsIDcsIDgsIDB4N2VdLCBbMSwgMSwgMCwgMHgwXSwgWzIsIDIsIDAsIDB4Ml0sIFszLCAzLCAwLCAweDZdLCBbNCwgNCwgMywgMHhlXSwgWzEyLCA1LCA2LCAweDFlXSwgWy0yNTYsIDcsIDMyLCAweDdmLCBcImxvd2VyXCJdLCBbNzYsIDYsIDMyLCAweDNlXV07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgNjpcbiAgICAgIGxpbmVzID0gW1stMjA0OCwgNSwgMTAsIDB4MWNdLCBbLTEwMjQsIDQsIDksIDB4OF0sIFstNTEyLCA0LCA4LCAweDldLCBbLTI1NiwgNCwgNywgMHhhXSwgWy0xMjgsIDUsIDYsIDB4MWRdLCBbLTY0LCA1LCA1LCAweDFlXSwgWy0zMiwgNCwgNSwgMHhiXSwgWzAsIDIsIDcsIDB4MF0sIFsxMjgsIDMsIDcsIDB4Ml0sIFsyNTYsIDMsIDgsIDB4M10sIFs1MTIsIDQsIDksIDB4Y10sIFsxMDI0LCA0LCAxMCwgMHhkXSwgWy0yMDQ5LCA2LCAzMiwgMHgzZSwgXCJsb3dlclwiXSwgWzIwNDgsIDYsIDMyLCAweDNmXV07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgNzpcbiAgICAgIGxpbmVzID0gW1stMTAyNCwgNCwgOSwgMHg4XSwgWy01MTIsIDMsIDgsIDB4MF0sIFstMjU2LCA0LCA3LCAweDldLCBbLTEyOCwgNSwgNiwgMHgxYV0sIFstNjQsIDUsIDUsIDB4MWJdLCBbLTMyLCA0LCA1LCAweGFdLCBbMCwgNCwgNSwgMHhiXSwgWzMyLCA1LCA1LCAweDFjXSwgWzY0LCA1LCA2LCAweDFkXSwgWzEyOCwgNCwgNywgMHhjXSwgWzI1NiwgMywgOCwgMHgxXSwgWzUxMiwgMywgOSwgMHgyXSwgWzEwMjQsIDMsIDEwLCAweDNdLCBbLTEwMjUsIDUsIDMyLCAweDFlLCBcImxvd2VyXCJdLCBbMjA0OCwgNSwgMzIsIDB4MWZdXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSA4OlxuICAgICAgbGluZXMgPSBbWy0xNSwgOCwgMywgMHhmY10sIFstNywgOSwgMSwgMHgxZmNdLCBbLTUsIDgsIDEsIDB4ZmRdLCBbLTMsIDksIDAsIDB4MWZkXSwgWy0yLCA3LCAwLCAweDdjXSwgWy0xLCA0LCAwLCAweGFdLCBbMCwgMiwgMSwgMHgwXSwgWzIsIDUsIDAsIDB4MWFdLCBbMywgNiwgMCwgMHgzYV0sIFs0LCAzLCA0LCAweDRdLCBbMjAsIDYsIDEsIDB4M2JdLCBbMjIsIDQsIDQsIDB4Yl0sIFszOCwgNCwgNSwgMHhjXSwgWzcwLCA1LCA2LCAweDFiXSwgWzEzNCwgNSwgNywgMHgxY10sIFsyNjIsIDYsIDcsIDB4M2NdLCBbMzkwLCA3LCA4LCAweDdkXSwgWzY0NiwgNiwgMTAsIDB4M2RdLCBbLTE2LCA5LCAzMiwgMHgxZmUsIFwibG93ZXJcIl0sIFsxNjcwLCA5LCAzMiwgMHgxZmZdLCBbMiwgMHgxXV07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgOTpcbiAgICAgIGxpbmVzID0gW1stMzEsIDgsIDQsIDB4ZmNdLCBbLTE1LCA5LCAyLCAweDFmY10sIFstMTEsIDgsIDIsIDB4ZmRdLCBbLTcsIDksIDEsIDB4MWZkXSwgWy01LCA3LCAxLCAweDdjXSwgWy0zLCA0LCAxLCAweGFdLCBbLTEsIDMsIDEsIDB4Ml0sIFsxLCAzLCAxLCAweDNdLCBbMywgNSwgMSwgMHgxYV0sIFs1LCA2LCAxLCAweDNhXSwgWzcsIDMsIDUsIDB4NF0sIFszOSwgNiwgMiwgMHgzYl0sIFs0MywgNCwgNSwgMHhiXSwgWzc1LCA0LCA2LCAweGNdLCBbMTM5LCA1LCA3LCAweDFiXSwgWzI2NywgNSwgOCwgMHgxY10sIFs1MjMsIDYsIDgsIDB4M2NdLCBbNzc5LCA3LCA5LCAweDdkXSwgWzEyOTEsIDYsIDExLCAweDNkXSwgWy0zMiwgOSwgMzIsIDB4MWZlLCBcImxvd2VyXCJdLCBbMzMzOSwgOSwgMzIsIDB4MWZmXSwgWzIsIDB4MF1dO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIDEwOlxuICAgICAgbGluZXMgPSBbWy0yMSwgNywgNCwgMHg3YV0sIFstNSwgOCwgMCwgMHhmY10sIFstNCwgNywgMCwgMHg3Yl0sIFstMywgNSwgMCwgMHgxOF0sIFstMiwgMiwgMiwgMHgwXSwgWzIsIDUsIDAsIDB4MTldLCBbMywgNiwgMCwgMHgzNl0sIFs0LCA3LCAwLCAweDdjXSwgWzUsIDgsIDAsIDB4ZmRdLCBbNiwgMiwgNiwgMHgxXSwgWzcwLCA1LCA1LCAweDFhXSwgWzEwMiwgNiwgNSwgMHgzN10sIFsxMzQsIDYsIDYsIDB4MzhdLCBbMTk4LCA2LCA3LCAweDM5XSwgWzMyNiwgNiwgOCwgMHgzYV0sIFs1ODIsIDYsIDksIDB4M2JdLCBbMTA5NCwgNiwgMTAsIDB4M2NdLCBbMjExOCwgNywgMTEsIDB4N2RdLCBbLTIyLCA4LCAzMiwgMHhmZSwgXCJsb3dlclwiXSwgWzQxNjYsIDgsIDMyLCAweGZmXSwgWzIsIDB4Ml1dO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIDExOlxuICAgICAgbGluZXMgPSBbWzEsIDEsIDAsIDB4MF0sIFsyLCAyLCAxLCAweDJdLCBbNCwgNCwgMCwgMHhjXSwgWzUsIDQsIDEsIDB4ZF0sIFs3LCA1LCAxLCAweDFjXSwgWzksIDUsIDIsIDB4MWRdLCBbMTMsIDYsIDIsIDB4M2NdLCBbMTcsIDcsIDIsIDB4N2FdLCBbMjEsIDcsIDMsIDB4N2JdLCBbMjksIDcsIDQsIDB4N2NdLCBbNDUsIDcsIDUsIDB4N2RdLCBbNzcsIDcsIDYsIDB4N2VdLCBbMTQxLCA3LCAzMiwgMHg3Zl1dO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIDEyOlxuICAgICAgbGluZXMgPSBbWzEsIDEsIDAsIDB4MF0sIFsyLCAyLCAwLCAweDJdLCBbMywgMywgMSwgMHg2XSwgWzUsIDUsIDAsIDB4MWNdLCBbNiwgNSwgMSwgMHgxZF0sIFs4LCA2LCAxLCAweDNjXSwgWzEwLCA3LCAwLCAweDdhXSwgWzExLCA3LCAxLCAweDdiXSwgWzEzLCA3LCAyLCAweDdjXSwgWzE3LCA3LCAzLCAweDdkXSwgWzI1LCA3LCA0LCAweDdlXSwgWzQxLCA4LCA1LCAweGZlXSwgWzczLCA4LCAzMiwgMHhmZl1dO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIDEzOlxuICAgICAgbGluZXMgPSBbWzEsIDEsIDAsIDB4MF0sIFsyLCAzLCAwLCAweDRdLCBbMywgNCwgMCwgMHhjXSwgWzQsIDUsIDAsIDB4MWNdLCBbNSwgNCwgMSwgMHhkXSwgWzcsIDMsIDMsIDB4NV0sIFsxNSwgNiwgMSwgMHgzYV0sIFsxNywgNiwgMiwgMHgzYl0sIFsyMSwgNiwgMywgMHgzY10sIFsyOSwgNiwgNCwgMHgzZF0sIFs0NSwgNiwgNSwgMHgzZV0sIFs3NywgNywgNiwgMHg3ZV0sIFsxNDEsIDcsIDMyLCAweDdmXV07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgMTQ6XG4gICAgICBsaW5lcyA9IFtbLTIsIDMsIDAsIDB4NF0sIFstMSwgMywgMCwgMHg1XSwgWzAsIDEsIDAsIDB4MF0sIFsxLCAzLCAwLCAweDZdLCBbMiwgMywgMCwgMHg3XV07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgMTU6XG4gICAgICBsaW5lcyA9IFtbLTI0LCA3LCA0LCAweDdjXSwgWy04LCA2LCAyLCAweDNjXSwgWy00LCA1LCAxLCAweDFjXSwgWy0yLCA0LCAwLCAweGNdLCBbLTEsIDMsIDAsIDB4NF0sIFswLCAxLCAwLCAweDBdLCBbMSwgMywgMCwgMHg1XSwgWzIsIDQsIDAsIDB4ZF0sIFszLCA1LCAxLCAweDFkXSwgWzUsIDYsIDIsIDB4M2RdLCBbOSwgNywgNCwgMHg3ZF0sIFstMjUsIDcsIDMyLCAweDdlLCBcImxvd2VyXCJdLCBbMjUsIDcsIDMyLCAweDdmXV07XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihgc3RhbmRhcmQgdGFibGUgQi4ke251bWJlcn0gZG9lcyBub3QgZXhpc3RgKTtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwLCBpaSA9IGxpbmVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICBsaW5lc1tpXSA9IG5ldyBIdWZmbWFuTGluZShsaW5lc1tpXSk7XG4gIH1cblxuICB0YWJsZSA9IG5ldyBIdWZmbWFuVGFibGUobGluZXMsIHRydWUpO1xuICBzdGFuZGFyZFRhYmxlc0NhY2hlW251bWJlcl0gPSB0YWJsZTtcbiAgcmV0dXJuIHRhYmxlO1xufVxuXG5jbGFzcyBSZWFkZXIge1xuICBjb25zdHJ1Y3RvcihkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgdGhpcy5lbmQgPSBlbmQ7XG4gICAgdGhpcy5wb3NpdGlvbiA9IHN0YXJ0O1xuICAgIHRoaXMuc2hpZnQgPSAtMTtcbiAgICB0aGlzLmN1cnJlbnRCeXRlID0gMDtcbiAgfVxuXG4gIHJlYWRCaXQoKSB7XG4gICAgaWYgKHRoaXMuc2hpZnQgPCAwKSB7XG4gICAgICBpZiAodGhpcy5wb3NpdGlvbiA+PSB0aGlzLmVuZCkge1xuICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihcImVuZCBvZiBkYXRhIHdoaWxlIHJlYWRpbmcgYml0XCIpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmN1cnJlbnRCeXRlID0gdGhpcy5kYXRhW3RoaXMucG9zaXRpb24rK107XG4gICAgICB0aGlzLnNoaWZ0ID0gNztcbiAgICB9XG5cbiAgICBjb25zdCBiaXQgPSB0aGlzLmN1cnJlbnRCeXRlID4+IHRoaXMuc2hpZnQgJiAxO1xuICAgIHRoaXMuc2hpZnQtLTtcbiAgICByZXR1cm4gYml0O1xuICB9XG5cbiAgcmVhZEJpdHMobnVtQml0cykge1xuICAgIGxldCByZXN1bHQgPSAwLFxuICAgICAgICBpO1xuXG4gICAgZm9yIChpID0gbnVtQml0cyAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICByZXN1bHQgfD0gdGhpcy5yZWFkQml0KCkgPDwgaTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgYnl0ZUFsaWduKCkge1xuICAgIHRoaXMuc2hpZnQgPSAtMTtcbiAgfVxuXG4gIG5leHQoKSB7XG4gICAgaWYgKHRoaXMucG9zaXRpb24gPj0gdGhpcy5lbmQpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5kYXRhW3RoaXMucG9zaXRpb24rK107XG4gIH1cblxufVxuXG5mdW5jdGlvbiBnZXRDdXN0b21IdWZmbWFuVGFibGUoaW5kZXgsIHJlZmVycmVkVG8sIGN1c3RvbVRhYmxlcykge1xuICBsZXQgY3VycmVudEluZGV4ID0gMDtcblxuICBmb3IgKGxldCBpID0gMCwgaWkgPSByZWZlcnJlZFRvLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICBjb25zdCB0YWJsZSA9IGN1c3RvbVRhYmxlc1tyZWZlcnJlZFRvW2ldXTtcblxuICAgIGlmICh0YWJsZSkge1xuICAgICAgaWYgKGluZGV4ID09PSBjdXJyZW50SW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHRhYmxlO1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50SW5kZXgrKztcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgSmJpZzJFcnJvcihcImNhbid0IGZpbmQgY3VzdG9tIEh1ZmZtYW4gdGFibGVcIik7XG59XG5cbmZ1bmN0aW9uIGdldFRleHRSZWdpb25IdWZmbWFuVGFibGVzKHRleHRSZWdpb24sIHJlZmVycmVkVG8sIGN1c3RvbVRhYmxlcywgbnVtYmVyT2ZTeW1ib2xzLCByZWFkZXIpIHtcbiAgY29uc3QgY29kZXMgPSBbXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8PSAzNDsgaSsrKSB7XG4gICAgY29uc3QgY29kZUxlbmd0aCA9IHJlYWRlci5yZWFkQml0cyg0KTtcbiAgICBjb2Rlcy5wdXNoKG5ldyBIdWZmbWFuTGluZShbaSwgY29kZUxlbmd0aCwgMCwgMF0pKTtcbiAgfVxuXG4gIGNvbnN0IHJ1bkNvZGVzVGFibGUgPSBuZXcgSHVmZm1hblRhYmxlKGNvZGVzLCBmYWxzZSk7XG4gIGNvZGVzLmxlbmd0aCA9IDA7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1iZXJPZlN5bWJvbHM7KSB7XG4gICAgY29uc3QgY29kZUxlbmd0aCA9IHJ1bkNvZGVzVGFibGUuZGVjb2RlKHJlYWRlcik7XG5cbiAgICBpZiAoY29kZUxlbmd0aCA+PSAzMikge1xuICAgICAgbGV0IHJlcGVhdGVkTGVuZ3RoLCBudW1iZXJPZlJlcGVhdHMsIGo7XG5cbiAgICAgIHN3aXRjaCAoY29kZUxlbmd0aCkge1xuICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihcIm5vIHByZXZpb3VzIHZhbHVlIGluIHN5bWJvbCBJRCB0YWJsZVwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBudW1iZXJPZlJlcGVhdHMgPSByZWFkZXIucmVhZEJpdHMoMikgKyAzO1xuICAgICAgICAgIHJlcGVhdGVkTGVuZ3RoID0gY29kZXNbaSAtIDFdLnByZWZpeExlbmd0aDtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDMzOlxuICAgICAgICAgIG51bWJlck9mUmVwZWF0cyA9IHJlYWRlci5yZWFkQml0cygzKSArIDM7XG4gICAgICAgICAgcmVwZWF0ZWRMZW5ndGggPSAwO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMzQ6XG4gICAgICAgICAgbnVtYmVyT2ZSZXBlYXRzID0gcmVhZGVyLnJlYWRCaXRzKDcpICsgMTE7XG4gICAgICAgICAgcmVwZWF0ZWRMZW5ndGggPSAwO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoXCJpbnZhbGlkIGNvZGUgbGVuZ3RoIGluIHN5bWJvbCBJRCB0YWJsZVwiKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChqID0gMDsgaiA8IG51bWJlck9mUmVwZWF0czsgaisrKSB7XG4gICAgICAgIGNvZGVzLnB1c2gobmV3IEh1ZmZtYW5MaW5lKFtpLCByZXBlYXRlZExlbmd0aCwgMCwgMF0pKTtcbiAgICAgICAgaSsrO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb2Rlcy5wdXNoKG5ldyBIdWZmbWFuTGluZShbaSwgY29kZUxlbmd0aCwgMCwgMF0pKTtcbiAgICAgIGkrKztcbiAgICB9XG4gIH1cblxuICByZWFkZXIuYnl0ZUFsaWduKCk7XG4gIGNvbnN0IHN5bWJvbElEVGFibGUgPSBuZXcgSHVmZm1hblRhYmxlKGNvZGVzLCBmYWxzZSk7XG4gIGxldCBjdXN0b21JbmRleCA9IDAsXG4gICAgICB0YWJsZUZpcnN0UyxcbiAgICAgIHRhYmxlRGVsdGFTLFxuICAgICAgdGFibGVEZWx0YVQ7XG5cbiAgc3dpdGNoICh0ZXh0UmVnaW9uLmh1ZmZtYW5GUykge1xuICAgIGNhc2UgMDpcbiAgICBjYXNlIDE6XG4gICAgICB0YWJsZUZpcnN0UyA9IGdldFN0YW5kYXJkVGFibGUodGV4dFJlZ2lvbi5odWZmbWFuRlMgKyA2KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAzOlxuICAgICAgdGFibGVGaXJzdFMgPSBnZXRDdXN0b21IdWZmbWFuVGFibGUoY3VzdG9tSW5kZXgsIHJlZmVycmVkVG8sIGN1c3RvbVRhYmxlcyk7XG4gICAgICBjdXN0b21JbmRleCsrO1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoXCJpbnZhbGlkIEh1ZmZtYW4gRlMgc2VsZWN0b3JcIik7XG4gIH1cblxuICBzd2l0Y2ggKHRleHRSZWdpb24uaHVmZm1hbkRTKSB7XG4gICAgY2FzZSAwOlxuICAgIGNhc2UgMTpcbiAgICBjYXNlIDI6XG4gICAgICB0YWJsZURlbHRhUyA9IGdldFN0YW5kYXJkVGFibGUodGV4dFJlZ2lvbi5odWZmbWFuRFMgKyA4KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAzOlxuICAgICAgdGFibGVEZWx0YVMgPSBnZXRDdXN0b21IdWZmbWFuVGFibGUoY3VzdG9tSW5kZXgsIHJlZmVycmVkVG8sIGN1c3RvbVRhYmxlcyk7XG4gICAgICBjdXN0b21JbmRleCsrO1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoXCJpbnZhbGlkIEh1ZmZtYW4gRFMgc2VsZWN0b3JcIik7XG4gIH1cblxuICBzd2l0Y2ggKHRleHRSZWdpb24uaHVmZm1hbkRUKSB7XG4gICAgY2FzZSAwOlxuICAgIGNhc2UgMTpcbiAgICBjYXNlIDI6XG4gICAgICB0YWJsZURlbHRhVCA9IGdldFN0YW5kYXJkVGFibGUodGV4dFJlZ2lvbi5odWZmbWFuRFQgKyAxMSk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgMzpcbiAgICAgIHRhYmxlRGVsdGFUID0gZ2V0Q3VzdG9tSHVmZm1hblRhYmxlKGN1c3RvbUluZGV4LCByZWZlcnJlZFRvLCBjdXN0b21UYWJsZXMpO1xuICAgICAgY3VzdG9tSW5kZXgrKztcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKFwiaW52YWxpZCBIdWZmbWFuIERUIHNlbGVjdG9yXCIpO1xuICB9XG5cbiAgaWYgKHRleHRSZWdpb24ucmVmaW5lbWVudCkge1xuICAgIHRocm93IG5ldyBKYmlnMkVycm9yKFwicmVmaW5lbWVudCB3aXRoIEh1ZmZtYW4gaXMgbm90IHN1cHBvcnRlZFwiKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3ltYm9sSURUYWJsZSxcbiAgICB0YWJsZUZpcnN0UyxcbiAgICB0YWJsZURlbHRhUyxcbiAgICB0YWJsZURlbHRhVFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRTeW1ib2xEaWN0aW9uYXJ5SHVmZm1hblRhYmxlcyhkaWN0aW9uYXJ5LCByZWZlcnJlZFRvLCBjdXN0b21UYWJsZXMpIHtcbiAgbGV0IGN1c3RvbUluZGV4ID0gMCxcbiAgICAgIHRhYmxlRGVsdGFIZWlnaHQsXG4gICAgICB0YWJsZURlbHRhV2lkdGg7XG5cbiAgc3dpdGNoIChkaWN0aW9uYXJ5Lmh1ZmZtYW5ESFNlbGVjdG9yKSB7XG4gICAgY2FzZSAwOlxuICAgIGNhc2UgMTpcbiAgICAgIHRhYmxlRGVsdGFIZWlnaHQgPSBnZXRTdGFuZGFyZFRhYmxlKGRpY3Rpb25hcnkuaHVmZm1hbkRIU2VsZWN0b3IgKyA0KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAzOlxuICAgICAgdGFibGVEZWx0YUhlaWdodCA9IGdldEN1c3RvbUh1ZmZtYW5UYWJsZShjdXN0b21JbmRleCwgcmVmZXJyZWRUbywgY3VzdG9tVGFibGVzKTtcbiAgICAgIGN1c3RvbUluZGV4Kys7XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihcImludmFsaWQgSHVmZm1hbiBESCBzZWxlY3RvclwiKTtcbiAgfVxuXG4gIHN3aXRjaCAoZGljdGlvbmFyeS5odWZmbWFuRFdTZWxlY3Rvcikge1xuICAgIGNhc2UgMDpcbiAgICBjYXNlIDE6XG4gICAgICB0YWJsZURlbHRhV2lkdGggPSBnZXRTdGFuZGFyZFRhYmxlKGRpY3Rpb25hcnkuaHVmZm1hbkRXU2VsZWN0b3IgKyAyKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAzOlxuICAgICAgdGFibGVEZWx0YVdpZHRoID0gZ2V0Q3VzdG9tSHVmZm1hblRhYmxlKGN1c3RvbUluZGV4LCByZWZlcnJlZFRvLCBjdXN0b21UYWJsZXMpO1xuICAgICAgY3VzdG9tSW5kZXgrKztcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKFwiaW52YWxpZCBIdWZmbWFuIERXIHNlbGVjdG9yXCIpO1xuICB9XG5cbiAgbGV0IHRhYmxlQml0bWFwU2l6ZSwgdGFibGVBZ2dyZWdhdGVJbnN0YW5jZXM7XG5cbiAgaWYgKGRpY3Rpb25hcnkuYml0bWFwU2l6ZVNlbGVjdG9yKSB7XG4gICAgdGFibGVCaXRtYXBTaXplID0gZ2V0Q3VzdG9tSHVmZm1hblRhYmxlKGN1c3RvbUluZGV4LCByZWZlcnJlZFRvLCBjdXN0b21UYWJsZXMpO1xuICAgIGN1c3RvbUluZGV4Kys7XG4gIH0gZWxzZSB7XG4gICAgdGFibGVCaXRtYXBTaXplID0gZ2V0U3RhbmRhcmRUYWJsZSgxKTtcbiAgfVxuXG4gIGlmIChkaWN0aW9uYXJ5LmFnZ3JlZ2F0aW9uSW5zdGFuY2VzU2VsZWN0b3IpIHtcbiAgICB0YWJsZUFnZ3JlZ2F0ZUluc3RhbmNlcyA9IGdldEN1c3RvbUh1ZmZtYW5UYWJsZShjdXN0b21JbmRleCwgcmVmZXJyZWRUbywgY3VzdG9tVGFibGVzKTtcbiAgfSBlbHNlIHtcbiAgICB0YWJsZUFnZ3JlZ2F0ZUluc3RhbmNlcyA9IGdldFN0YW5kYXJkVGFibGUoMSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRhYmxlRGVsdGFIZWlnaHQsXG4gICAgdGFibGVEZWx0YVdpZHRoLFxuICAgIHRhYmxlQml0bWFwU2l6ZSxcbiAgICB0YWJsZUFnZ3JlZ2F0ZUluc3RhbmNlc1xuICB9O1xufVxuXG5mdW5jdGlvbiByZWFkVW5jb21wcmVzc2VkQml0bWFwKHJlYWRlciwgd2lkdGgsIGhlaWdodCkge1xuICBjb25zdCBiaXRtYXAgPSBbXTtcblxuICBmb3IgKGxldCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7XG4gICAgY29uc3Qgcm93ID0gbmV3IFVpbnQ4QXJyYXkod2lkdGgpO1xuICAgIGJpdG1hcC5wdXNoKHJvdyk7XG5cbiAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcbiAgICAgIHJvd1t4XSA9IHJlYWRlci5yZWFkQml0KCk7XG4gICAgfVxuXG4gICAgcmVhZGVyLmJ5dGVBbGlnbigpO1xuICB9XG5cbiAgcmV0dXJuIGJpdG1hcDtcbn1cblxuZnVuY3Rpb24gZGVjb2RlTU1SQml0bWFwKGlucHV0LCB3aWR0aCwgaGVpZ2h0LCBlbmRPZkJsb2NrKSB7XG4gIGNvbnN0IHBhcmFtcyA9IHtcbiAgICBLOiAtMSxcbiAgICBDb2x1bW5zOiB3aWR0aCxcbiAgICBSb3dzOiBoZWlnaHQsXG4gICAgQmxhY2tJczE6IHRydWUsXG4gICAgRW5kT2ZCbG9jazogZW5kT2ZCbG9ja1xuICB9O1xuICBjb25zdCBkZWNvZGVyID0gbmV3IF9jY2l0dC5DQ0lUVEZheERlY29kZXIoaW5wdXQsIHBhcmFtcyk7XG4gIGNvbnN0IGJpdG1hcCA9IFtdO1xuICBsZXQgY3VycmVudEJ5dGUsXG4gICAgICBlb2YgPSBmYWxzZTtcblxuICBmb3IgKGxldCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7XG4gICAgY29uc3Qgcm93ID0gbmV3IFVpbnQ4QXJyYXkod2lkdGgpO1xuICAgIGJpdG1hcC5wdXNoKHJvdyk7XG4gICAgbGV0IHNoaWZ0ID0gLTE7XG5cbiAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcbiAgICAgIGlmIChzaGlmdCA8IDApIHtcbiAgICAgICAgY3VycmVudEJ5dGUgPSBkZWNvZGVyLnJlYWROZXh0Q2hhcigpO1xuXG4gICAgICAgIGlmIChjdXJyZW50Qnl0ZSA9PT0gLTEpIHtcbiAgICAgICAgICBjdXJyZW50Qnl0ZSA9IDA7XG4gICAgICAgICAgZW9mID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNoaWZ0ID0gNztcbiAgICAgIH1cblxuICAgICAgcm93W3hdID0gY3VycmVudEJ5dGUgPj4gc2hpZnQgJiAxO1xuICAgICAgc2hpZnQtLTtcbiAgICB9XG4gIH1cblxuICBpZiAoZW5kT2ZCbG9jayAmJiAhZW9mKSB7XG4gICAgY29uc3QgbG9va0ZvckVPRkxpbWl0ID0gNTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbG9va0ZvckVPRkxpbWl0OyBpKyspIHtcbiAgICAgIGlmIChkZWNvZGVyLnJlYWROZXh0Q2hhcigpID09PSAtMSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gYml0bWFwO1xufVxuXG5jbGFzcyBKYmlnMkltYWdlIHtcbiAgcGFyc2VDaHVua3MoY2h1bmtzKSB7XG4gICAgcmV0dXJuIHBhcnNlSmJpZzJDaHVua3MoY2h1bmtzKTtcbiAgfVxuXG4gIHBhcnNlKGRhdGEpIHtcbiAgICBjb25zdCB7XG4gICAgICBpbWdEYXRhLFxuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHRcbiAgICB9ID0gcGFyc2VKYmlnMihkYXRhKTtcbiAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgcmV0dXJuIGltZ0RhdGE7XG4gIH1cblxufVxuXG5leHBvcnRzLkpiaWcySW1hZ2UgPSBKYmlnMkltYWdlO1xuXG4vKioqLyB9KSxcbi8qIDM2ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLkFyaXRobWV0aWNEZWNvZGVyID0gdm9pZCAwO1xuY29uc3QgUWVUYWJsZSA9IFt7XG4gIHFlOiAweDU2MDEsXG4gIG5tcHM6IDEsXG4gIG5scHM6IDEsXG4gIHN3aXRjaEZsYWc6IDFcbn0sIHtcbiAgcWU6IDB4MzQwMSxcbiAgbm1wczogMixcbiAgbmxwczogNixcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgxODAxLFxuICBubXBzOiAzLFxuICBubHBzOiA5LFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDBhYzEsXG4gIG5tcHM6IDQsXG4gIG5scHM6IDEyLFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDA1MjEsXG4gIG5tcHM6IDUsXG4gIG5scHM6IDI5LFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDAyMjEsXG4gIG5tcHM6IDM4LFxuICBubHBzOiAzMyxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHg1NjAxLFxuICBubXBzOiA3LFxuICBubHBzOiA2LFxuICBzd2l0Y2hGbGFnOiAxXG59LCB7XG4gIHFlOiAweDU0MDEsXG4gIG5tcHM6IDgsXG4gIG5scHM6IDE0LFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDQ4MDEsXG4gIG5tcHM6IDksXG4gIG5scHM6IDE0LFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDM4MDEsXG4gIG5tcHM6IDEwLFxuICBubHBzOiAxNCxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgzMDAxLFxuICBubXBzOiAxMSxcbiAgbmxwczogMTcsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MjQwMSxcbiAgbm1wczogMTIsXG4gIG5scHM6IDE4LFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDFjMDEsXG4gIG5tcHM6IDEzLFxuICBubHBzOiAyMCxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgxNjAxLFxuICBubXBzOiAyOSxcbiAgbmxwczogMjEsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4NTYwMSxcbiAgbm1wczogMTUsXG4gIG5scHM6IDE0LFxuICBzd2l0Y2hGbGFnOiAxXG59LCB7XG4gIHFlOiAweDU0MDEsXG4gIG5tcHM6IDE2LFxuICBubHBzOiAxNCxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHg1MTAxLFxuICBubXBzOiAxNyxcbiAgbmxwczogMTUsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4NDgwMSxcbiAgbm1wczogMTgsXG4gIG5scHM6IDE2LFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDM4MDEsXG4gIG5tcHM6IDE5LFxuICBubHBzOiAxNyxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgzNDAxLFxuICBubXBzOiAyMCxcbiAgbmxwczogMTgsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MzAwMSxcbiAgbm1wczogMjEsXG4gIG5scHM6IDE5LFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDI4MDEsXG4gIG5tcHM6IDIyLFxuICBubHBzOiAxOSxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgyNDAxLFxuICBubXBzOiAyMyxcbiAgbmxwczogMjAsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MjIwMSxcbiAgbm1wczogMjQsXG4gIG5scHM6IDIxLFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDFjMDEsXG4gIG5tcHM6IDI1LFxuICBubHBzOiAyMixcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgxODAxLFxuICBubXBzOiAyNixcbiAgbmxwczogMjMsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MTYwMSxcbiAgbm1wczogMjcsXG4gIG5scHM6IDI0LFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDE0MDEsXG4gIG5tcHM6IDI4LFxuICBubHBzOiAyNSxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgxMjAxLFxuICBubXBzOiAyOSxcbiAgbmxwczogMjYsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MTEwMSxcbiAgbm1wczogMzAsXG4gIG5scHM6IDI3LFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDBhYzEsXG4gIG5tcHM6IDMxLFxuICBubHBzOiAyOCxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgwOWMxLFxuICBubXBzOiAzMixcbiAgbmxwczogMjksXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MDhhMSxcbiAgbm1wczogMzMsXG4gIG5scHM6IDMwLFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDA1MjEsXG4gIG5tcHM6IDM0LFxuICBubHBzOiAzMSxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgwNDQxLFxuICBubXBzOiAzNSxcbiAgbmxwczogMzIsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MDJhMSxcbiAgbm1wczogMzYsXG4gIG5scHM6IDMzLFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDAyMjEsXG4gIG5tcHM6IDM3LFxuICBubHBzOiAzNCxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgwMTQxLFxuICBubXBzOiAzOCxcbiAgbmxwczogMzUsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MDExMSxcbiAgbm1wczogMzksXG4gIG5scHM6IDM2LFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDAwODUsXG4gIG5tcHM6IDQwLFxuICBubHBzOiAzNyxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgwMDQ5LFxuICBubXBzOiA0MSxcbiAgbmxwczogMzgsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MDAyNSxcbiAgbm1wczogNDIsXG4gIG5scHM6IDM5LFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDAwMTUsXG4gIG5tcHM6IDQzLFxuICBubHBzOiA0MCxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHgwMDA5LFxuICBubXBzOiA0NCxcbiAgbmxwczogNDEsXG4gIHN3aXRjaEZsYWc6IDBcbn0sIHtcbiAgcWU6IDB4MDAwNSxcbiAgbm1wczogNDUsXG4gIG5scHM6IDQyLFxuICBzd2l0Y2hGbGFnOiAwXG59LCB7XG4gIHFlOiAweDAwMDEsXG4gIG5tcHM6IDQ1LFxuICBubHBzOiA0MyxcbiAgc3dpdGNoRmxhZzogMFxufSwge1xuICBxZTogMHg1NjAxLFxuICBubXBzOiA0NixcbiAgbmxwczogNDYsXG4gIHN3aXRjaEZsYWc6IDBcbn1dO1xuXG5jbGFzcyBBcml0aG1ldGljRGVjb2RlciB7XG4gIGNvbnN0cnVjdG9yKGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIHRoaXMuYnAgPSBzdGFydDtcbiAgICB0aGlzLmRhdGFFbmQgPSBlbmQ7XG4gICAgdGhpcy5jaGlnaCA9IGRhdGFbc3RhcnRdO1xuICAgIHRoaXMuY2xvdyA9IDA7XG4gICAgdGhpcy5ieXRlSW4oKTtcbiAgICB0aGlzLmNoaWdoID0gdGhpcy5jaGlnaCA8PCA3ICYgMHhmZmZmIHwgdGhpcy5jbG93ID4+IDkgJiAweDdmO1xuICAgIHRoaXMuY2xvdyA9IHRoaXMuY2xvdyA8PCA3ICYgMHhmZmZmO1xuICAgIHRoaXMuY3QgLT0gNztcbiAgICB0aGlzLmEgPSAweDgwMDA7XG4gIH1cblxuICBieXRlSW4oKSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICBsZXQgYnAgPSB0aGlzLmJwO1xuXG4gICAgaWYgKGRhdGFbYnBdID09PSAweGZmKSB7XG4gICAgICBpZiAoZGF0YVticCArIDFdID4gMHg4Zikge1xuICAgICAgICB0aGlzLmNsb3cgKz0gMHhmZjAwO1xuICAgICAgICB0aGlzLmN0ID0gODtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJwKys7XG4gICAgICAgIHRoaXMuY2xvdyArPSBkYXRhW2JwXSA8PCA5O1xuICAgICAgICB0aGlzLmN0ID0gNztcbiAgICAgICAgdGhpcy5icCA9IGJwO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBicCsrO1xuICAgICAgdGhpcy5jbG93ICs9IGJwIDwgdGhpcy5kYXRhRW5kID8gZGF0YVticF0gPDwgOCA6IDB4ZmYwMDtcbiAgICAgIHRoaXMuY3QgPSA4O1xuICAgICAgdGhpcy5icCA9IGJwO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNsb3cgPiAweGZmZmYpIHtcbiAgICAgIHRoaXMuY2hpZ2ggKz0gdGhpcy5jbG93ID4+IDE2O1xuICAgICAgdGhpcy5jbG93ICY9IDB4ZmZmZjtcbiAgICB9XG4gIH1cblxuICByZWFkQml0KGNvbnRleHRzLCBwb3MpIHtcbiAgICBsZXQgY3hfaW5kZXggPSBjb250ZXh0c1twb3NdID4+IDEsXG4gICAgICAgIGN4X21wcyA9IGNvbnRleHRzW3Bvc10gJiAxO1xuICAgIGNvbnN0IHFlVGFibGVJY3ggPSBRZVRhYmxlW2N4X2luZGV4XTtcbiAgICBjb25zdCBxZUljeCA9IHFlVGFibGVJY3gucWU7XG4gICAgbGV0IGQ7XG4gICAgbGV0IGEgPSB0aGlzLmEgLSBxZUljeDtcblxuICAgIGlmICh0aGlzLmNoaWdoIDwgcWVJY3gpIHtcbiAgICAgIGlmIChhIDwgcWVJY3gpIHtcbiAgICAgICAgYSA9IHFlSWN4O1xuICAgICAgICBkID0gY3hfbXBzO1xuICAgICAgICBjeF9pbmRleCA9IHFlVGFibGVJY3gubm1wcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGEgPSBxZUljeDtcbiAgICAgICAgZCA9IDEgXiBjeF9tcHM7XG5cbiAgICAgICAgaWYgKHFlVGFibGVJY3guc3dpdGNoRmxhZyA9PT0gMSkge1xuICAgICAgICAgIGN4X21wcyA9IGQ7XG4gICAgICAgIH1cblxuICAgICAgICBjeF9pbmRleCA9IHFlVGFibGVJY3gubmxwcztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jaGlnaCAtPSBxZUljeDtcblxuICAgICAgaWYgKChhICYgMHg4MDAwKSAhPT0gMCkge1xuICAgICAgICB0aGlzLmEgPSBhO1xuICAgICAgICByZXR1cm4gY3hfbXBzO1xuICAgICAgfVxuXG4gICAgICBpZiAoYSA8IHFlSWN4KSB7XG4gICAgICAgIGQgPSAxIF4gY3hfbXBzO1xuXG4gICAgICAgIGlmIChxZVRhYmxlSWN4LnN3aXRjaEZsYWcgPT09IDEpIHtcbiAgICAgICAgICBjeF9tcHMgPSBkO1xuICAgICAgICB9XG5cbiAgICAgICAgY3hfaW5kZXggPSBxZVRhYmxlSWN4Lm5scHM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkID0gY3hfbXBzO1xuICAgICAgICBjeF9pbmRleCA9IHFlVGFibGVJY3gubm1wcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkbyB7XG4gICAgICBpZiAodGhpcy5jdCA9PT0gMCkge1xuICAgICAgICB0aGlzLmJ5dGVJbigpO1xuICAgICAgfVxuXG4gICAgICBhIDw8PSAxO1xuICAgICAgdGhpcy5jaGlnaCA9IHRoaXMuY2hpZ2ggPDwgMSAmIDB4ZmZmZiB8IHRoaXMuY2xvdyA+PiAxNSAmIDE7XG4gICAgICB0aGlzLmNsb3cgPSB0aGlzLmNsb3cgPDwgMSAmIDB4ZmZmZjtcbiAgICAgIHRoaXMuY3QtLTtcbiAgICB9IHdoaWxlICgoYSAmIDB4ODAwMCkgPT09IDApO1xuXG4gICAgdGhpcy5hID0gYTtcbiAgICBjb250ZXh0c1twb3NdID0gY3hfaW5kZXggPDwgMSB8IGN4X21wcztcbiAgICByZXR1cm4gZDtcbiAgfVxuXG59XG5cbmV4cG9ydHMuQXJpdGhtZXRpY0RlY29kZXIgPSBBcml0aG1ldGljRGVjb2RlcjtcblxuLyoqKi8gfSksXG4vKiAzNyAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5KcGVnU3RyZWFtID0gdm9pZCAwO1xuXG52YXIgX2RlY29kZV9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDI5KTtcblxudmFyIF9wcmltaXRpdmVzID0gX193X3BkZmpzX3JlcXVpcmVfXyg1KTtcblxudmFyIF9qcGcgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDM4KTtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxuY2xhc3MgSnBlZ1N0cmVhbSBleHRlbmRzIF9kZWNvZGVfc3RyZWFtLkRlY29kZVN0cmVhbSB7XG4gIGNvbnN0cnVjdG9yKHN0cmVhbSwgbWF5YmVMZW5ndGgsIHBhcmFtcykge1xuICAgIGxldCBjaDtcblxuICAgIHdoaWxlICgoY2ggPSBzdHJlYW0uZ2V0Qnl0ZSgpKSAhPT0gLTEpIHtcbiAgICAgIGlmIChjaCA9PT0gMHhmZikge1xuICAgICAgICBzdHJlYW0uc2tpcCgtMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN1cGVyKG1heWJlTGVuZ3RoKTtcbiAgICB0aGlzLnN0cmVhbSA9IHN0cmVhbTtcbiAgICB0aGlzLmRpY3QgPSBzdHJlYW0uZGljdDtcbiAgICB0aGlzLm1heWJlTGVuZ3RoID0gbWF5YmVMZW5ndGg7XG4gICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7XG4gIH1cblxuICBnZXQgYnl0ZXMoKSB7XG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiYnl0ZXNcIiwgdGhpcy5zdHJlYW0uZ2V0Qnl0ZXModGhpcy5tYXliZUxlbmd0aCkpO1xuICB9XG5cbiAgZW5zdXJlQnVmZmVyKHJlcXVlc3RlZCkge31cblxuICByZWFkQmxvY2soKSB7XG4gICAgaWYgKHRoaXMuZW9mKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QganBlZ09wdGlvbnMgPSB7XG4gICAgICBkZWNvZGVUcmFuc2Zvcm06IHVuZGVmaW5lZCxcbiAgICAgIGNvbG9yVHJhbnNmb3JtOiB1bmRlZmluZWRcbiAgICB9O1xuICAgIGNvbnN0IGRlY29kZUFyciA9IHRoaXMuZGljdC5nZXRBcnJheShcIkRcIiwgXCJEZWNvZGVcIik7XG5cbiAgICBpZiAodGhpcy5mb3JjZVJHQiAmJiBBcnJheS5pc0FycmF5KGRlY29kZUFycikpIHtcbiAgICAgIGNvbnN0IGJpdHNQZXJDb21wb25lbnQgPSB0aGlzLmRpY3QuZ2V0KFwiQlBDXCIsIFwiQml0c1BlckNvbXBvbmVudFwiKSB8fCA4O1xuICAgICAgY29uc3QgZGVjb2RlQXJyTGVuZ3RoID0gZGVjb2RlQXJyLmxlbmd0aDtcbiAgICAgIGNvbnN0IHRyYW5zZm9ybSA9IG5ldyBJbnQzMkFycmF5KGRlY29kZUFyckxlbmd0aCk7XG4gICAgICBsZXQgdHJhbnNmb3JtTmVlZGVkID0gZmFsc2U7XG4gICAgICBjb25zdCBtYXhWYWx1ZSA9ICgxIDw8IGJpdHNQZXJDb21wb25lbnQpIC0gMTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZWNvZGVBcnJMZW5ndGg7IGkgKz0gMikge1xuICAgICAgICB0cmFuc2Zvcm1baV0gPSAoZGVjb2RlQXJyW2kgKyAxXSAtIGRlY29kZUFycltpXSkgKiAyNTYgfCAwO1xuICAgICAgICB0cmFuc2Zvcm1baSArIDFdID0gZGVjb2RlQXJyW2ldICogbWF4VmFsdWUgfCAwO1xuXG4gICAgICAgIGlmICh0cmFuc2Zvcm1baV0gIT09IDI1NiB8fCB0cmFuc2Zvcm1baSArIDFdICE9PSAwKSB7XG4gICAgICAgICAgdHJhbnNmb3JtTmVlZGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHJhbnNmb3JtTmVlZGVkKSB7XG4gICAgICAgIGpwZWdPcHRpb25zLmRlY29kZVRyYW5zZm9ybSA9IHRyYW5zZm9ybTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkodGhpcy5wYXJhbXMpKSB7XG4gICAgICBjb25zdCBjb2xvclRyYW5zZm9ybSA9IHRoaXMucGFyYW1zLmdldChcIkNvbG9yVHJhbnNmb3JtXCIpO1xuXG4gICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihjb2xvclRyYW5zZm9ybSkpIHtcbiAgICAgICAganBlZ09wdGlvbnMuY29sb3JUcmFuc2Zvcm0gPSBjb2xvclRyYW5zZm9ybTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBqcGVnSW1hZ2UgPSBuZXcgX2pwZy5KcGVnSW1hZ2UoanBlZ09wdGlvbnMpO1xuICAgIGpwZWdJbWFnZS5wYXJzZSh0aGlzLmJ5dGVzKTtcbiAgICBjb25zdCBkYXRhID0ganBlZ0ltYWdlLmdldERhdGEoe1xuICAgICAgd2lkdGg6IHRoaXMuZHJhd1dpZHRoLFxuICAgICAgaGVpZ2h0OiB0aGlzLmRyYXdIZWlnaHQsXG4gICAgICBmb3JjZVJHQjogdGhpcy5mb3JjZVJHQixcbiAgICAgIGlzU291cmNlUERGOiB0cnVlXG4gICAgfSk7XG4gICAgdGhpcy5idWZmZXIgPSBkYXRhO1xuICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gZGF0YS5sZW5ndGg7XG4gICAgdGhpcy5lb2YgPSB0cnVlO1xuICB9XG5cbn1cblxuZXhwb3J0cy5KcGVnU3RyZWFtID0gSnBlZ1N0cmVhbTtcblxuLyoqKi8gfSksXG4vKiAzOCAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5KcGVnSW1hZ2UgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfY29yZV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oOSk7XG5cbmNsYXNzIEpwZWdFcnJvciBleHRlbmRzIF91dGlsLkJhc2VFeGNlcHRpb24ge1xuICBjb25zdHJ1Y3Rvcihtc2cpIHtcbiAgICBzdXBlcihgSlBFRyBlcnJvcjogJHttc2d9YCwgXCJKcGVnRXJyb3JcIik7XG4gIH1cblxufVxuXG5jbGFzcyBETkxNYXJrZXJFcnJvciBleHRlbmRzIF91dGlsLkJhc2VFeGNlcHRpb24ge1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBzY2FuTGluZXMpIHtcbiAgICBzdXBlcihtZXNzYWdlLCBcIkROTE1hcmtlckVycm9yXCIpO1xuICAgIHRoaXMuc2NhbkxpbmVzID0gc2NhbkxpbmVzO1xuICB9XG5cbn1cblxuY2xhc3MgRU9JTWFya2VyRXJyb3IgZXh0ZW5kcyBfdXRpbC5CYXNlRXhjZXB0aW9uIHtcbiAgY29uc3RydWN0b3IobXNnKSB7XG4gICAgc3VwZXIobXNnLCBcIkVPSU1hcmtlckVycm9yXCIpO1xuICB9XG5cbn1cblxuY29uc3QgZGN0WmlnWmFnID0gbmV3IFVpbnQ4QXJyYXkoWzAsIDEsIDgsIDE2LCA5LCAyLCAzLCAxMCwgMTcsIDI0LCAzMiwgMjUsIDE4LCAxMSwgNCwgNSwgMTIsIDE5LCAyNiwgMzMsIDQwLCA0OCwgNDEsIDM0LCAyNywgMjAsIDEzLCA2LCA3LCAxNCwgMjEsIDI4LCAzNSwgNDIsIDQ5LCA1NiwgNTcsIDUwLCA0MywgMzYsIDI5LCAyMiwgMTUsIDIzLCAzMCwgMzcsIDQ0LCA1MSwgNTgsIDU5LCA1MiwgNDUsIDM4LCAzMSwgMzksIDQ2LCA1MywgNjAsIDYxLCA1NCwgNDcsIDU1LCA2MiwgNjNdKTtcbmNvbnN0IGRjdENvczEgPSA0MDE3O1xuY29uc3QgZGN0U2luMSA9IDc5OTtcbmNvbnN0IGRjdENvczMgPSAzNDA2O1xuY29uc3QgZGN0U2luMyA9IDIyNzY7XG5jb25zdCBkY3RDb3M2ID0gMTU2NztcbmNvbnN0IGRjdFNpbjYgPSAzNzg0O1xuY29uc3QgZGN0U3FydDIgPSA1NzkzO1xuY29uc3QgZGN0U3FydDFkMiA9IDI4OTY7XG5cbmZ1bmN0aW9uIGJ1aWxkSHVmZm1hblRhYmxlKGNvZGVMZW5ndGhzLCB2YWx1ZXMpIHtcbiAgbGV0IGsgPSAwLFxuICAgICAgaSxcbiAgICAgIGosXG4gICAgICBsZW5ndGggPSAxNjtcblxuICB3aGlsZSAobGVuZ3RoID4gMCAmJiAhY29kZUxlbmd0aHNbbGVuZ3RoIC0gMV0pIHtcbiAgICBsZW5ndGgtLTtcbiAgfVxuXG4gIGNvbnN0IGNvZGUgPSBbe1xuICAgIGNoaWxkcmVuOiBbXSxcbiAgICBpbmRleDogMFxuICB9XTtcbiAgbGV0IHAgPSBjb2RlWzBdLFxuICAgICAgcTtcblxuICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGogPSAwOyBqIDwgY29kZUxlbmd0aHNbaV07IGorKykge1xuICAgICAgcCA9IGNvZGUucG9wKCk7XG4gICAgICBwLmNoaWxkcmVuW3AuaW5kZXhdID0gdmFsdWVzW2tdO1xuXG4gICAgICB3aGlsZSAocC5pbmRleCA+IDApIHtcbiAgICAgICAgcCA9IGNvZGUucG9wKCk7XG4gICAgICB9XG5cbiAgICAgIHAuaW5kZXgrKztcbiAgICAgIGNvZGUucHVzaChwKTtcblxuICAgICAgd2hpbGUgKGNvZGUubGVuZ3RoIDw9IGkpIHtcbiAgICAgICAgY29kZS5wdXNoKHEgPSB7XG4gICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgIGluZGV4OiAwXG4gICAgICAgIH0pO1xuICAgICAgICBwLmNoaWxkcmVuW3AuaW5kZXhdID0gcS5jaGlsZHJlbjtcbiAgICAgICAgcCA9IHE7XG4gICAgICB9XG5cbiAgICAgIGsrKztcbiAgICB9XG5cbiAgICBpZiAoaSArIDEgPCBsZW5ndGgpIHtcbiAgICAgIGNvZGUucHVzaChxID0ge1xuICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgIGluZGV4OiAwXG4gICAgICB9KTtcbiAgICAgIHAuY2hpbGRyZW5bcC5pbmRleF0gPSBxLmNoaWxkcmVuO1xuICAgICAgcCA9IHE7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvZGVbMF0uY2hpbGRyZW47XG59XG5cbmZ1bmN0aW9uIGdldEJsb2NrQnVmZmVyT2Zmc2V0KGNvbXBvbmVudCwgcm93LCBjb2wpIHtcbiAgcmV0dXJuIDY0ICogKChjb21wb25lbnQuYmxvY2tzUGVyTGluZSArIDEpICogcm93ICsgY29sKTtcbn1cblxuZnVuY3Rpb24gZGVjb2RlU2NhbihkYXRhLCBvZmZzZXQsIGZyYW1lLCBjb21wb25lbnRzLCByZXNldEludGVydmFsLCBzcGVjdHJhbFN0YXJ0LCBzcGVjdHJhbEVuZCwgc3VjY2Vzc2l2ZVByZXYsIHN1Y2Nlc3NpdmUsIHBhcnNlRE5MTWFya2VyID0gZmFsc2UpIHtcbiAgY29uc3QgbWN1c1BlckxpbmUgPSBmcmFtZS5tY3VzUGVyTGluZTtcbiAgY29uc3QgcHJvZ3Jlc3NpdmUgPSBmcmFtZS5wcm9ncmVzc2l2ZTtcbiAgY29uc3Qgc3RhcnRPZmZzZXQgPSBvZmZzZXQ7XG4gIGxldCBiaXRzRGF0YSA9IDAsXG4gICAgICBiaXRzQ291bnQgPSAwO1xuXG4gIGZ1bmN0aW9uIHJlYWRCaXQoKSB7XG4gICAgaWYgKGJpdHNDb3VudCA+IDApIHtcbiAgICAgIGJpdHNDb3VudC0tO1xuICAgICAgcmV0dXJuIGJpdHNEYXRhID4+IGJpdHNDb3VudCAmIDE7XG4gICAgfVxuXG4gICAgYml0c0RhdGEgPSBkYXRhW29mZnNldCsrXTtcblxuICAgIGlmIChiaXRzRGF0YSA9PT0gMHhmZikge1xuICAgICAgY29uc3QgbmV4dEJ5dGUgPSBkYXRhW29mZnNldCsrXTtcblxuICAgICAgaWYgKG5leHRCeXRlKSB7XG4gICAgICAgIGlmIChuZXh0Qnl0ZSA9PT0gMHhkYyAmJiBwYXJzZUROTE1hcmtlcikge1xuICAgICAgICAgIG9mZnNldCArPSAyO1xuICAgICAgICAgIGNvbnN0IHNjYW5MaW5lcyA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBvZmZzZXQpO1xuICAgICAgICAgIG9mZnNldCArPSAyO1xuXG4gICAgICAgICAgaWYgKHNjYW5MaW5lcyA+IDAgJiYgc2NhbkxpbmVzICE9PSBmcmFtZS5zY2FuTGluZXMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBETkxNYXJrZXJFcnJvcihcIkZvdW5kIEROTCBtYXJrZXIgKDB4RkZEQykgd2hpbGUgcGFyc2luZyBzY2FuIGRhdGFcIiwgc2NhbkxpbmVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobmV4dEJ5dGUgPT09IDB4ZDkpIHtcbiAgICAgICAgICBpZiAocGFyc2VETkxNYXJrZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IG1heWJlU2NhbkxpbmVzID0gYmxvY2tSb3cgKiAoZnJhbWUucHJlY2lzaW9uID09PSA4ID8gOCA6IDApO1xuXG4gICAgICAgICAgICBpZiAobWF5YmVTY2FuTGluZXMgPiAwICYmIE1hdGgucm91bmQoZnJhbWUuc2NhbkxpbmVzIC8gbWF5YmVTY2FuTGluZXMpID49IDEwKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBETkxNYXJrZXJFcnJvcihcIkZvdW5kIEVPSSBtYXJrZXIgKDB4RkZEOSkgd2hpbGUgcGFyc2luZyBzY2FuIGRhdGEsIFwiICsgXCJwb3NzaWJseSBjYXVzZWQgYnkgaW5jb3JyZWN0IGBzY2FuTGluZXNgIHBhcmFtZXRlclwiLCBtYXliZVNjYW5MaW5lcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhyb3cgbmV3IEVPSU1hcmtlckVycm9yKFwiRm91bmQgRU9JIG1hcmtlciAoMHhGRkQ5KSB3aGlsZSBwYXJzaW5nIHNjYW4gZGF0YVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBKcGVnRXJyb3IoYHVuZXhwZWN0ZWQgbWFya2VyICR7KGJpdHNEYXRhIDw8IDggfCBuZXh0Qnl0ZSkudG9TdHJpbmcoMTYpfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGJpdHNDb3VudCA9IDc7XG4gICAgcmV0dXJuIGJpdHNEYXRhID4+PiA3O1xuICB9XG5cbiAgZnVuY3Rpb24gZGVjb2RlSHVmZm1hbih0cmVlKSB7XG4gICAgbGV0IG5vZGUgPSB0cmVlO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIG5vZGUgPSBub2RlW3JlYWRCaXQoKV07XG5cbiAgICAgIHN3aXRjaCAodHlwZW9mIG5vZGUpIHtcbiAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgIHJldHVybiBub2RlO1xuXG4gICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEpwZWdFcnJvcihcImludmFsaWQgaHVmZm1hbiBzZXF1ZW5jZVwiKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWNlaXZlKGxlbmd0aCkge1xuICAgIGxldCBuID0gMDtcblxuICAgIHdoaWxlIChsZW5ndGggPiAwKSB7XG4gICAgICBuID0gbiA8PCAxIHwgcmVhZEJpdCgpO1xuICAgICAgbGVuZ3RoLS07XG4gICAgfVxuXG4gICAgcmV0dXJuIG47XG4gIH1cblxuICBmdW5jdGlvbiByZWNlaXZlQW5kRXh0ZW5kKGxlbmd0aCkge1xuICAgIGlmIChsZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiByZWFkQml0KCkgPT09IDEgPyAxIDogLTE7XG4gICAgfVxuXG4gICAgY29uc3QgbiA9IHJlY2VpdmUobGVuZ3RoKTtcblxuICAgIGlmIChuID49IDEgPDwgbGVuZ3RoIC0gMSkge1xuICAgICAgcmV0dXJuIG47XG4gICAgfVxuXG4gICAgcmV0dXJuIG4gKyAoLTEgPDwgbGVuZ3RoKSArIDE7XG4gIH1cblxuICBmdW5jdGlvbiBkZWNvZGVCYXNlbGluZShjb21wb25lbnQsIGJsb2NrT2Zmc2V0KSB7XG4gICAgY29uc3QgdCA9IGRlY29kZUh1ZmZtYW4oY29tcG9uZW50Lmh1ZmZtYW5UYWJsZURDKTtcbiAgICBjb25zdCBkaWZmID0gdCA9PT0gMCA/IDAgOiByZWNlaXZlQW5kRXh0ZW5kKHQpO1xuICAgIGNvbXBvbmVudC5ibG9ja0RhdGFbYmxvY2tPZmZzZXRdID0gY29tcG9uZW50LnByZWQgKz0gZGlmZjtcbiAgICBsZXQgayA9IDE7XG5cbiAgICB3aGlsZSAoayA8IDY0KSB7XG4gICAgICBjb25zdCBycyA9IGRlY29kZUh1ZmZtYW4oY29tcG9uZW50Lmh1ZmZtYW5UYWJsZUFDKTtcbiAgICAgIGNvbnN0IHMgPSBycyAmIDE1LFxuICAgICAgICAgICAgciA9IHJzID4+IDQ7XG5cbiAgICAgIGlmIChzID09PSAwKSB7XG4gICAgICAgIGlmIChyIDwgMTUpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGsgKz0gMTY7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBrICs9IHI7XG4gICAgICBjb25zdCB6ID0gZGN0WmlnWmFnW2tdO1xuICAgICAgY29tcG9uZW50LmJsb2NrRGF0YVtibG9ja09mZnNldCArIHpdID0gcmVjZWl2ZUFuZEV4dGVuZChzKTtcbiAgICAgIGsrKztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkZWNvZGVEQ0ZpcnN0KGNvbXBvbmVudCwgYmxvY2tPZmZzZXQpIHtcbiAgICBjb25zdCB0ID0gZGVjb2RlSHVmZm1hbihjb21wb25lbnQuaHVmZm1hblRhYmxlREMpO1xuICAgIGNvbnN0IGRpZmYgPSB0ID09PSAwID8gMCA6IHJlY2VpdmVBbmRFeHRlbmQodCkgPDwgc3VjY2Vzc2l2ZTtcbiAgICBjb21wb25lbnQuYmxvY2tEYXRhW2Jsb2NrT2Zmc2V0XSA9IGNvbXBvbmVudC5wcmVkICs9IGRpZmY7XG4gIH1cblxuICBmdW5jdGlvbiBkZWNvZGVEQ1N1Y2Nlc3NpdmUoY29tcG9uZW50LCBibG9ja09mZnNldCkge1xuICAgIGNvbXBvbmVudC5ibG9ja0RhdGFbYmxvY2tPZmZzZXRdIHw9IHJlYWRCaXQoKSA8PCBzdWNjZXNzaXZlO1xuICB9XG5cbiAgbGV0IGVvYnJ1biA9IDA7XG5cbiAgZnVuY3Rpb24gZGVjb2RlQUNGaXJzdChjb21wb25lbnQsIGJsb2NrT2Zmc2V0KSB7XG4gICAgaWYgKGVvYnJ1biA+IDApIHtcbiAgICAgIGVvYnJ1bi0tO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBrID0gc3BlY3RyYWxTdGFydDtcbiAgICBjb25zdCBlID0gc3BlY3RyYWxFbmQ7XG5cbiAgICB3aGlsZSAoayA8PSBlKSB7XG4gICAgICBjb25zdCBycyA9IGRlY29kZUh1ZmZtYW4oY29tcG9uZW50Lmh1ZmZtYW5UYWJsZUFDKTtcbiAgICAgIGNvbnN0IHMgPSBycyAmIDE1LFxuICAgICAgICAgICAgciA9IHJzID4+IDQ7XG5cbiAgICAgIGlmIChzID09PSAwKSB7XG4gICAgICAgIGlmIChyIDwgMTUpIHtcbiAgICAgICAgICBlb2JydW4gPSByZWNlaXZlKHIpICsgKDEgPDwgcikgLSAxO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgayArPSAxNjtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGsgKz0gcjtcbiAgICAgIGNvbnN0IHogPSBkY3RaaWdaYWdba107XG4gICAgICBjb21wb25lbnQuYmxvY2tEYXRhW2Jsb2NrT2Zmc2V0ICsgel0gPSByZWNlaXZlQW5kRXh0ZW5kKHMpICogKDEgPDwgc3VjY2Vzc2l2ZSk7XG4gICAgICBrKys7XG4gICAgfVxuICB9XG5cbiAgbGV0IHN1Y2Nlc3NpdmVBQ1N0YXRlID0gMCxcbiAgICAgIHN1Y2Nlc3NpdmVBQ05leHRWYWx1ZTtcblxuICBmdW5jdGlvbiBkZWNvZGVBQ1N1Y2Nlc3NpdmUoY29tcG9uZW50LCBibG9ja09mZnNldCkge1xuICAgIGxldCBrID0gc3BlY3RyYWxTdGFydDtcbiAgICBjb25zdCBlID0gc3BlY3RyYWxFbmQ7XG4gICAgbGV0IHIgPSAwO1xuICAgIGxldCBzO1xuICAgIGxldCBycztcblxuICAgIHdoaWxlIChrIDw9IGUpIHtcbiAgICAgIGNvbnN0IG9mZnNldFogPSBibG9ja09mZnNldCArIGRjdFppZ1phZ1trXTtcbiAgICAgIGNvbnN0IHNpZ24gPSBjb21wb25lbnQuYmxvY2tEYXRhW29mZnNldFpdIDwgMCA/IC0xIDogMTtcblxuICAgICAgc3dpdGNoIChzdWNjZXNzaXZlQUNTdGF0ZSkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgcnMgPSBkZWNvZGVIdWZmbWFuKGNvbXBvbmVudC5odWZmbWFuVGFibGVBQyk7XG4gICAgICAgICAgcyA9IHJzICYgMTU7XG4gICAgICAgICAgciA9IHJzID4+IDQ7XG5cbiAgICAgICAgICBpZiAocyA9PT0gMCkge1xuICAgICAgICAgICAgaWYgKHIgPCAxNSkge1xuICAgICAgICAgICAgICBlb2JydW4gPSByZWNlaXZlKHIpICsgKDEgPDwgcik7XG4gICAgICAgICAgICAgIHN1Y2Nlc3NpdmVBQ1N0YXRlID0gNDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHIgPSAxNjtcbiAgICAgICAgICAgICAgc3VjY2Vzc2l2ZUFDU3RhdGUgPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAocyAhPT0gMSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgSnBlZ0Vycm9yKFwiaW52YWxpZCBBQ24gZW5jb2RpbmdcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN1Y2Nlc3NpdmVBQ05leHRWYWx1ZSA9IHJlY2VpdmVBbmRFeHRlbmQocyk7XG4gICAgICAgICAgICBzdWNjZXNzaXZlQUNTdGF0ZSA9IHIgPyAyIDogMztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICBjYXNlIDE6XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAoY29tcG9uZW50LmJsb2NrRGF0YVtvZmZzZXRaXSkge1xuICAgICAgICAgICAgY29tcG9uZW50LmJsb2NrRGF0YVtvZmZzZXRaXSArPSBzaWduICogKHJlYWRCaXQoKSA8PCBzdWNjZXNzaXZlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgci0tO1xuXG4gICAgICAgICAgICBpZiAociA9PT0gMCkge1xuICAgICAgICAgICAgICBzdWNjZXNzaXZlQUNTdGF0ZSA9IHN1Y2Nlc3NpdmVBQ1N0YXRlID09PSAyID8gMyA6IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIGlmIChjb21wb25lbnQuYmxvY2tEYXRhW29mZnNldFpdKSB7XG4gICAgICAgICAgICBjb21wb25lbnQuYmxvY2tEYXRhW29mZnNldFpdICs9IHNpZ24gKiAocmVhZEJpdCgpIDw8IHN1Y2Nlc3NpdmUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb21wb25lbnQuYmxvY2tEYXRhW29mZnNldFpdID0gc3VjY2Vzc2l2ZUFDTmV4dFZhbHVlIDw8IHN1Y2Nlc3NpdmU7XG4gICAgICAgICAgICBzdWNjZXNzaXZlQUNTdGF0ZSA9IDA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIGlmIChjb21wb25lbnQuYmxvY2tEYXRhW29mZnNldFpdKSB7XG4gICAgICAgICAgICBjb21wb25lbnQuYmxvY2tEYXRhW29mZnNldFpdICs9IHNpZ24gKiAocmVhZEJpdCgpIDw8IHN1Y2Nlc3NpdmUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBrKys7XG4gICAgfVxuXG4gICAgaWYgKHN1Y2Nlc3NpdmVBQ1N0YXRlID09PSA0KSB7XG4gICAgICBlb2JydW4tLTtcblxuICAgICAgaWYgKGVvYnJ1biA9PT0gMCkge1xuICAgICAgICBzdWNjZXNzaXZlQUNTdGF0ZSA9IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IGJsb2NrUm93ID0gMDtcblxuICBmdW5jdGlvbiBkZWNvZGVNY3UoY29tcG9uZW50LCBkZWNvZGUsIG1jdSwgcm93LCBjb2wpIHtcbiAgICBjb25zdCBtY3VSb3cgPSBtY3UgLyBtY3VzUGVyTGluZSB8IDA7XG4gICAgY29uc3QgbWN1Q29sID0gbWN1ICUgbWN1c1BlckxpbmU7XG4gICAgYmxvY2tSb3cgPSBtY3VSb3cgKiBjb21wb25lbnQudiArIHJvdztcbiAgICBjb25zdCBibG9ja0NvbCA9IG1jdUNvbCAqIGNvbXBvbmVudC5oICsgY29sO1xuICAgIGNvbnN0IGJsb2NrT2Zmc2V0ID0gZ2V0QmxvY2tCdWZmZXJPZmZzZXQoY29tcG9uZW50LCBibG9ja1JvdywgYmxvY2tDb2wpO1xuICAgIGRlY29kZShjb21wb25lbnQsIGJsb2NrT2Zmc2V0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlY29kZUJsb2NrKGNvbXBvbmVudCwgZGVjb2RlLCBtY3UpIHtcbiAgICBibG9ja1JvdyA9IG1jdSAvIGNvbXBvbmVudC5ibG9ja3NQZXJMaW5lIHwgMDtcbiAgICBjb25zdCBibG9ja0NvbCA9IG1jdSAlIGNvbXBvbmVudC5ibG9ja3NQZXJMaW5lO1xuICAgIGNvbnN0IGJsb2NrT2Zmc2V0ID0gZ2V0QmxvY2tCdWZmZXJPZmZzZXQoY29tcG9uZW50LCBibG9ja1JvdywgYmxvY2tDb2wpO1xuICAgIGRlY29kZShjb21wb25lbnQsIGJsb2NrT2Zmc2V0KTtcbiAgfVxuXG4gIGNvbnN0IGNvbXBvbmVudHNMZW5ndGggPSBjb21wb25lbnRzLmxlbmd0aDtcbiAgbGV0IGNvbXBvbmVudCwgaSwgaiwgaywgbjtcbiAgbGV0IGRlY29kZUZuO1xuXG4gIGlmIChwcm9ncmVzc2l2ZSkge1xuICAgIGlmIChzcGVjdHJhbFN0YXJ0ID09PSAwKSB7XG4gICAgICBkZWNvZGVGbiA9IHN1Y2Nlc3NpdmVQcmV2ID09PSAwID8gZGVjb2RlRENGaXJzdCA6IGRlY29kZURDU3VjY2Vzc2l2ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVjb2RlRm4gPSBzdWNjZXNzaXZlUHJldiA9PT0gMCA/IGRlY29kZUFDRmlyc3QgOiBkZWNvZGVBQ1N1Y2Nlc3NpdmU7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGRlY29kZUZuID0gZGVjb2RlQmFzZWxpbmU7XG4gIH1cblxuICBsZXQgbWN1ID0gMCxcbiAgICAgIGZpbGVNYXJrZXI7XG4gIGxldCBtY3VFeHBlY3RlZDtcblxuICBpZiAoY29tcG9uZW50c0xlbmd0aCA9PT0gMSkge1xuICAgIG1jdUV4cGVjdGVkID0gY29tcG9uZW50c1swXS5ibG9ja3NQZXJMaW5lICogY29tcG9uZW50c1swXS5ibG9ja3NQZXJDb2x1bW47XG4gIH0gZWxzZSB7XG4gICAgbWN1RXhwZWN0ZWQgPSBtY3VzUGVyTGluZSAqIGZyYW1lLm1jdXNQZXJDb2x1bW47XG4gIH1cblxuICBsZXQgaCwgdjtcblxuICB3aGlsZSAobWN1IDw9IG1jdUV4cGVjdGVkKSB7XG4gICAgY29uc3QgbWN1VG9SZWFkID0gcmVzZXRJbnRlcnZhbCA/IE1hdGgubWluKG1jdUV4cGVjdGVkIC0gbWN1LCByZXNldEludGVydmFsKSA6IG1jdUV4cGVjdGVkO1xuXG4gICAgaWYgKG1jdVRvUmVhZCA+IDApIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjb21wb25lbnRzTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29tcG9uZW50c1tpXS5wcmVkID0gMDtcbiAgICAgIH1cblxuICAgICAgZW9icnVuID0gMDtcblxuICAgICAgaWYgKGNvbXBvbmVudHNMZW5ndGggPT09IDEpIHtcbiAgICAgICAgY29tcG9uZW50ID0gY29tcG9uZW50c1swXTtcblxuICAgICAgICBmb3IgKG4gPSAwOyBuIDwgbWN1VG9SZWFkOyBuKyspIHtcbiAgICAgICAgICBkZWNvZGVCbG9jayhjb21wb25lbnQsIGRlY29kZUZuLCBtY3UpO1xuICAgICAgICAgIG1jdSsrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKG4gPSAwOyBuIDwgbWN1VG9SZWFkOyBuKyspIHtcbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29tcG9uZW50c0xlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb21wb25lbnQgPSBjb21wb25lbnRzW2ldO1xuICAgICAgICAgICAgaCA9IGNvbXBvbmVudC5oO1xuICAgICAgICAgICAgdiA9IGNvbXBvbmVudC52O1xuXG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgdjsgaisrKSB7XG4gICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBoOyBrKyspIHtcbiAgICAgICAgICAgICAgICBkZWNvZGVNY3UoY29tcG9uZW50LCBkZWNvZGVGbiwgbWN1LCBqLCBrKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG1jdSsrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgYml0c0NvdW50ID0gMDtcbiAgICBmaWxlTWFya2VyID0gZmluZE5leHRGaWxlTWFya2VyKGRhdGEsIG9mZnNldCk7XG5cbiAgICBpZiAoIWZpbGVNYXJrZXIpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChmaWxlTWFya2VyLmludmFsaWQpIHtcbiAgICAgIGNvbnN0IHBhcnRpYWxNc2cgPSBtY3VUb1JlYWQgPiAwID8gXCJ1bmV4cGVjdGVkXCIgOiBcImV4Y2Vzc2l2ZVwiO1xuICAgICAgKDAsIF91dGlsLndhcm4pKGBkZWNvZGVTY2FuIC0gJHtwYXJ0aWFsTXNnfSBNQ1UgZGF0YSwgY3VycmVudCBtYXJrZXIgaXM6ICR7ZmlsZU1hcmtlci5pbnZhbGlkfWApO1xuICAgICAgb2Zmc2V0ID0gZmlsZU1hcmtlci5vZmZzZXQ7XG4gICAgfVxuXG4gICAgaWYgKGZpbGVNYXJrZXIubWFya2VyID49IDB4ZmZkMCAmJiBmaWxlTWFya2VyLm1hcmtlciA8PSAweGZmZDcpIHtcbiAgICAgIG9mZnNldCArPSAyO1xuICAgIH0gZWxzZSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2Zmc2V0IC0gc3RhcnRPZmZzZXQ7XG59XG5cbmZ1bmN0aW9uIHF1YW50aXplQW5kSW52ZXJzZShjb21wb25lbnQsIGJsb2NrQnVmZmVyT2Zmc2V0LCBwKSB7XG4gIGNvbnN0IHF0ID0gY29tcG9uZW50LnF1YW50aXphdGlvblRhYmxlLFxuICAgICAgICBibG9ja0RhdGEgPSBjb21wb25lbnQuYmxvY2tEYXRhO1xuICBsZXQgdjAsIHYxLCB2MiwgdjMsIHY0LCB2NSwgdjYsIHY3O1xuICBsZXQgcDAsIHAxLCBwMiwgcDMsIHA0LCBwNSwgcDYsIHA3O1xuICBsZXQgdDtcblxuICBpZiAoIXF0KSB7XG4gICAgdGhyb3cgbmV3IEpwZWdFcnJvcihcIm1pc3NpbmcgcmVxdWlyZWQgUXVhbnRpemF0aW9uIFRhYmxlLlwiKTtcbiAgfVxuXG4gIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8IDY0OyByb3cgKz0gOCkge1xuICAgIHAwID0gYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgcm93XTtcbiAgICBwMSA9IGJsb2NrRGF0YVtibG9ja0J1ZmZlck9mZnNldCArIHJvdyArIDFdO1xuICAgIHAyID0gYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgcm93ICsgMl07XG4gICAgcDMgPSBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyByb3cgKyAzXTtcbiAgICBwNCA9IGJsb2NrRGF0YVtibG9ja0J1ZmZlck9mZnNldCArIHJvdyArIDRdO1xuICAgIHA1ID0gYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgcm93ICsgNV07XG4gICAgcDYgPSBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyByb3cgKyA2XTtcbiAgICBwNyA9IGJsb2NrRGF0YVtibG9ja0J1ZmZlck9mZnNldCArIHJvdyArIDddO1xuICAgIHAwICo9IHF0W3Jvd107XG5cbiAgICBpZiAoKHAxIHwgcDIgfCBwMyB8IHA0IHwgcDUgfCBwNiB8IHA3KSA9PT0gMCkge1xuICAgICAgdCA9IGRjdFNxcnQyICogcDAgKyA1MTIgPj4gMTA7XG4gICAgICBwW3Jvd10gPSB0O1xuICAgICAgcFtyb3cgKyAxXSA9IHQ7XG4gICAgICBwW3JvdyArIDJdID0gdDtcbiAgICAgIHBbcm93ICsgM10gPSB0O1xuICAgICAgcFtyb3cgKyA0XSA9IHQ7XG4gICAgICBwW3JvdyArIDVdID0gdDtcbiAgICAgIHBbcm93ICsgNl0gPSB0O1xuICAgICAgcFtyb3cgKyA3XSA9IHQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBwMSAqPSBxdFtyb3cgKyAxXTtcbiAgICBwMiAqPSBxdFtyb3cgKyAyXTtcbiAgICBwMyAqPSBxdFtyb3cgKyAzXTtcbiAgICBwNCAqPSBxdFtyb3cgKyA0XTtcbiAgICBwNSAqPSBxdFtyb3cgKyA1XTtcbiAgICBwNiAqPSBxdFtyb3cgKyA2XTtcbiAgICBwNyAqPSBxdFtyb3cgKyA3XTtcbiAgICB2MCA9IGRjdFNxcnQyICogcDAgKyAxMjggPj4gODtcbiAgICB2MSA9IGRjdFNxcnQyICogcDQgKyAxMjggPj4gODtcbiAgICB2MiA9IHAyO1xuICAgIHYzID0gcDY7XG4gICAgdjQgPSBkY3RTcXJ0MWQyICogKHAxIC0gcDcpICsgMTI4ID4+IDg7XG4gICAgdjcgPSBkY3RTcXJ0MWQyICogKHAxICsgcDcpICsgMTI4ID4+IDg7XG4gICAgdjUgPSBwMyA8PCA0O1xuICAgIHY2ID0gcDUgPDwgNDtcbiAgICB2MCA9IHYwICsgdjEgKyAxID4+IDE7XG4gICAgdjEgPSB2MCAtIHYxO1xuICAgIHQgPSB2MiAqIGRjdFNpbjYgKyB2MyAqIGRjdENvczYgKyAxMjggPj4gODtcbiAgICB2MiA9IHYyICogZGN0Q29zNiAtIHYzICogZGN0U2luNiArIDEyOCA+PiA4O1xuICAgIHYzID0gdDtcbiAgICB2NCA9IHY0ICsgdjYgKyAxID4+IDE7XG4gICAgdjYgPSB2NCAtIHY2O1xuICAgIHY3ID0gdjcgKyB2NSArIDEgPj4gMTtcbiAgICB2NSA9IHY3IC0gdjU7XG4gICAgdjAgPSB2MCArIHYzICsgMSA+PiAxO1xuICAgIHYzID0gdjAgLSB2MztcbiAgICB2MSA9IHYxICsgdjIgKyAxID4+IDE7XG4gICAgdjIgPSB2MSAtIHYyO1xuICAgIHQgPSB2NCAqIGRjdFNpbjMgKyB2NyAqIGRjdENvczMgKyAyMDQ4ID4+IDEyO1xuICAgIHY0ID0gdjQgKiBkY3RDb3MzIC0gdjcgKiBkY3RTaW4zICsgMjA0OCA+PiAxMjtcbiAgICB2NyA9IHQ7XG4gICAgdCA9IHY1ICogZGN0U2luMSArIHY2ICogZGN0Q29zMSArIDIwNDggPj4gMTI7XG4gICAgdjUgPSB2NSAqIGRjdENvczEgLSB2NiAqIGRjdFNpbjEgKyAyMDQ4ID4+IDEyO1xuICAgIHY2ID0gdDtcbiAgICBwW3Jvd10gPSB2MCArIHY3O1xuICAgIHBbcm93ICsgN10gPSB2MCAtIHY3O1xuICAgIHBbcm93ICsgMV0gPSB2MSArIHY2O1xuICAgIHBbcm93ICsgNl0gPSB2MSAtIHY2O1xuICAgIHBbcm93ICsgMl0gPSB2MiArIHY1O1xuICAgIHBbcm93ICsgNV0gPSB2MiAtIHY1O1xuICAgIHBbcm93ICsgM10gPSB2MyArIHY0O1xuICAgIHBbcm93ICsgNF0gPSB2MyAtIHY0O1xuICB9XG5cbiAgZm9yIChsZXQgY29sID0gMDsgY29sIDwgODsgKytjb2wpIHtcbiAgICBwMCA9IHBbY29sXTtcbiAgICBwMSA9IHBbY29sICsgOF07XG4gICAgcDIgPSBwW2NvbCArIDE2XTtcbiAgICBwMyA9IHBbY29sICsgMjRdO1xuICAgIHA0ID0gcFtjb2wgKyAzMl07XG4gICAgcDUgPSBwW2NvbCArIDQwXTtcbiAgICBwNiA9IHBbY29sICsgNDhdO1xuICAgIHA3ID0gcFtjb2wgKyA1Nl07XG5cbiAgICBpZiAoKHAxIHwgcDIgfCBwMyB8IHA0IHwgcDUgfCBwNiB8IHA3KSA9PT0gMCkge1xuICAgICAgdCA9IGRjdFNxcnQyICogcDAgKyA4MTkyID4+IDE0O1xuXG4gICAgICBpZiAodCA8IC0yMDQwKSB7XG4gICAgICAgIHQgPSAwO1xuICAgICAgfSBlbHNlIGlmICh0ID49IDIwMjQpIHtcbiAgICAgICAgdCA9IDI1NTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHQgPSB0ICsgMjA1NiA+PiA0O1xuICAgICAgfVxuXG4gICAgICBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyBjb2xdID0gdDtcbiAgICAgIGJsb2NrRGF0YVtibG9ja0J1ZmZlck9mZnNldCArIGNvbCArIDhdID0gdDtcbiAgICAgIGJsb2NrRGF0YVtibG9ja0J1ZmZlck9mZnNldCArIGNvbCArIDE2XSA9IHQ7XG4gICAgICBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyBjb2wgKyAyNF0gPSB0O1xuICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgMzJdID0gdDtcbiAgICAgIGJsb2NrRGF0YVtibG9ja0J1ZmZlck9mZnNldCArIGNvbCArIDQwXSA9IHQ7XG4gICAgICBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyBjb2wgKyA0OF0gPSB0O1xuICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgNTZdID0gdDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHYwID0gZGN0U3FydDIgKiBwMCArIDIwNDggPj4gMTI7XG4gICAgdjEgPSBkY3RTcXJ0MiAqIHA0ICsgMjA0OCA+PiAxMjtcbiAgICB2MiA9IHAyO1xuICAgIHYzID0gcDY7XG4gICAgdjQgPSBkY3RTcXJ0MWQyICogKHAxIC0gcDcpICsgMjA0OCA+PiAxMjtcbiAgICB2NyA9IGRjdFNxcnQxZDIgKiAocDEgKyBwNykgKyAyMDQ4ID4+IDEyO1xuICAgIHY1ID0gcDM7XG4gICAgdjYgPSBwNTtcbiAgICB2MCA9ICh2MCArIHYxICsgMSA+PiAxKSArIDQxMTI7XG4gICAgdjEgPSB2MCAtIHYxO1xuICAgIHQgPSB2MiAqIGRjdFNpbjYgKyB2MyAqIGRjdENvczYgKyAyMDQ4ID4+IDEyO1xuICAgIHYyID0gdjIgKiBkY3RDb3M2IC0gdjMgKiBkY3RTaW42ICsgMjA0OCA+PiAxMjtcbiAgICB2MyA9IHQ7XG4gICAgdjQgPSB2NCArIHY2ICsgMSA+PiAxO1xuICAgIHY2ID0gdjQgLSB2NjtcbiAgICB2NyA9IHY3ICsgdjUgKyAxID4+IDE7XG4gICAgdjUgPSB2NyAtIHY1O1xuICAgIHYwID0gdjAgKyB2MyArIDEgPj4gMTtcbiAgICB2MyA9IHYwIC0gdjM7XG4gICAgdjEgPSB2MSArIHYyICsgMSA+PiAxO1xuICAgIHYyID0gdjEgLSB2MjtcbiAgICB0ID0gdjQgKiBkY3RTaW4zICsgdjcgKiBkY3RDb3MzICsgMjA0OCA+PiAxMjtcbiAgICB2NCA9IHY0ICogZGN0Q29zMyAtIHY3ICogZGN0U2luMyArIDIwNDggPj4gMTI7XG4gICAgdjcgPSB0O1xuICAgIHQgPSB2NSAqIGRjdFNpbjEgKyB2NiAqIGRjdENvczEgKyAyMDQ4ID4+IDEyO1xuICAgIHY1ID0gdjUgKiBkY3RDb3MxIC0gdjYgKiBkY3RTaW4xICsgMjA0OCA+PiAxMjtcbiAgICB2NiA9IHQ7XG4gICAgcDAgPSB2MCArIHY3O1xuICAgIHA3ID0gdjAgLSB2NztcbiAgICBwMSA9IHYxICsgdjY7XG4gICAgcDYgPSB2MSAtIHY2O1xuICAgIHAyID0gdjIgKyB2NTtcbiAgICBwNSA9IHYyIC0gdjU7XG4gICAgcDMgPSB2MyArIHY0O1xuICAgIHA0ID0gdjMgLSB2NDtcblxuICAgIGlmIChwMCA8IDE2KSB7XG4gICAgICBwMCA9IDA7XG4gICAgfSBlbHNlIGlmIChwMCA+PSA0MDgwKSB7XG4gICAgICBwMCA9IDI1NTtcbiAgICB9IGVsc2Uge1xuICAgICAgcDAgPj49IDQ7XG4gICAgfVxuXG4gICAgaWYgKHAxIDwgMTYpIHtcbiAgICAgIHAxID0gMDtcbiAgICB9IGVsc2UgaWYgKHAxID49IDQwODApIHtcbiAgICAgIHAxID0gMjU1O1xuICAgIH0gZWxzZSB7XG4gICAgICBwMSA+Pj0gNDtcbiAgICB9XG5cbiAgICBpZiAocDIgPCAxNikge1xuICAgICAgcDIgPSAwO1xuICAgIH0gZWxzZSBpZiAocDIgPj0gNDA4MCkge1xuICAgICAgcDIgPSAyNTU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHAyID4+PSA0O1xuICAgIH1cblxuICAgIGlmIChwMyA8IDE2KSB7XG4gICAgICBwMyA9IDA7XG4gICAgfSBlbHNlIGlmIChwMyA+PSA0MDgwKSB7XG4gICAgICBwMyA9IDI1NTtcbiAgICB9IGVsc2Uge1xuICAgICAgcDMgPj49IDQ7XG4gICAgfVxuXG4gICAgaWYgKHA0IDwgMTYpIHtcbiAgICAgIHA0ID0gMDtcbiAgICB9IGVsc2UgaWYgKHA0ID49IDQwODApIHtcbiAgICAgIHA0ID0gMjU1O1xuICAgIH0gZWxzZSB7XG4gICAgICBwNCA+Pj0gNDtcbiAgICB9XG5cbiAgICBpZiAocDUgPCAxNikge1xuICAgICAgcDUgPSAwO1xuICAgIH0gZWxzZSBpZiAocDUgPj0gNDA4MCkge1xuICAgICAgcDUgPSAyNTU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHA1ID4+PSA0O1xuICAgIH1cblxuICAgIGlmIChwNiA8IDE2KSB7XG4gICAgICBwNiA9IDA7XG4gICAgfSBlbHNlIGlmIChwNiA+PSA0MDgwKSB7XG4gICAgICBwNiA9IDI1NTtcbiAgICB9IGVsc2Uge1xuICAgICAgcDYgPj49IDQ7XG4gICAgfVxuXG4gICAgaWYgKHA3IDwgMTYpIHtcbiAgICAgIHA3ID0gMDtcbiAgICB9IGVsc2UgaWYgKHA3ID49IDQwODApIHtcbiAgICAgIHA3ID0gMjU1O1xuICAgIH0gZWxzZSB7XG4gICAgICBwNyA+Pj0gNDtcbiAgICB9XG5cbiAgICBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyBjb2xdID0gcDA7XG4gICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgOF0gPSBwMTtcbiAgICBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyBjb2wgKyAxNl0gPSBwMjtcbiAgICBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyBjb2wgKyAyNF0gPSBwMztcbiAgICBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyBjb2wgKyAzMl0gPSBwNDtcbiAgICBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyBjb2wgKyA0MF0gPSBwNTtcbiAgICBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyBjb2wgKyA0OF0gPSBwNjtcbiAgICBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyBjb2wgKyA1Nl0gPSBwNztcbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZENvbXBvbmVudERhdGEoZnJhbWUsIGNvbXBvbmVudCkge1xuICBjb25zdCBibG9ja3NQZXJMaW5lID0gY29tcG9uZW50LmJsb2Nrc1BlckxpbmU7XG4gIGNvbnN0IGJsb2Nrc1BlckNvbHVtbiA9IGNvbXBvbmVudC5ibG9ja3NQZXJDb2x1bW47XG4gIGNvbnN0IGNvbXB1dGF0aW9uQnVmZmVyID0gbmV3IEludDE2QXJyYXkoNjQpO1xuXG4gIGZvciAobGV0IGJsb2NrUm93ID0gMDsgYmxvY2tSb3cgPCBibG9ja3NQZXJDb2x1bW47IGJsb2NrUm93KyspIHtcbiAgICBmb3IgKGxldCBibG9ja0NvbCA9IDA7IGJsb2NrQ29sIDwgYmxvY2tzUGVyTGluZTsgYmxvY2tDb2wrKykge1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gZ2V0QmxvY2tCdWZmZXJPZmZzZXQoY29tcG9uZW50LCBibG9ja1JvdywgYmxvY2tDb2wpO1xuICAgICAgcXVhbnRpemVBbmRJbnZlcnNlKGNvbXBvbmVudCwgb2Zmc2V0LCBjb21wdXRhdGlvbkJ1ZmZlcik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbXBvbmVudC5ibG9ja0RhdGE7XG59XG5cbmZ1bmN0aW9uIGZpbmROZXh0RmlsZU1hcmtlcihkYXRhLCBjdXJyZW50UG9zLCBzdGFydFBvcyA9IGN1cnJlbnRQb3MpIHtcbiAgY29uc3QgbWF4UG9zID0gZGF0YS5sZW5ndGggLSAxO1xuICBsZXQgbmV3UG9zID0gc3RhcnRQb3MgPCBjdXJyZW50UG9zID8gc3RhcnRQb3MgOiBjdXJyZW50UG9zO1xuXG4gIGlmIChjdXJyZW50UG9zID49IG1heFBvcykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgY3VycmVudE1hcmtlciA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBjdXJyZW50UG9zKTtcblxuICBpZiAoY3VycmVudE1hcmtlciA+PSAweGZmYzAgJiYgY3VycmVudE1hcmtlciA8PSAweGZmZmUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaW52YWxpZDogbnVsbCxcbiAgICAgIG1hcmtlcjogY3VycmVudE1hcmtlcixcbiAgICAgIG9mZnNldDogY3VycmVudFBvc1xuICAgIH07XG4gIH1cblxuICBsZXQgbmV3TWFya2VyID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIG5ld1Bvcyk7XG5cbiAgd2hpbGUgKCEobmV3TWFya2VyID49IDB4ZmZjMCAmJiBuZXdNYXJrZXIgPD0gMHhmZmZlKSkge1xuICAgIGlmICgrK25ld1BvcyA+PSBtYXhQb3MpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIG5ld01hcmtlciA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBuZXdQb3MpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBpbnZhbGlkOiBjdXJyZW50TWFya2VyLnRvU3RyaW5nKDE2KSxcbiAgICBtYXJrZXI6IG5ld01hcmtlcixcbiAgICBvZmZzZXQ6IG5ld1Bvc1xuICB9O1xufVxuXG5jbGFzcyBKcGVnSW1hZ2Uge1xuICBjb25zdHJ1Y3Rvcih7XG4gICAgZGVjb2RlVHJhbnNmb3JtID0gbnVsbCxcbiAgICBjb2xvclRyYW5zZm9ybSA9IC0xXG4gIH0gPSB7fSkge1xuICAgIHRoaXMuX2RlY29kZVRyYW5zZm9ybSA9IGRlY29kZVRyYW5zZm9ybTtcbiAgICB0aGlzLl9jb2xvclRyYW5zZm9ybSA9IGNvbG9yVHJhbnNmb3JtO1xuICB9XG5cbiAgcGFyc2UoZGF0YSwge1xuICAgIGRubFNjYW5MaW5lcyA9IG51bGxcbiAgfSA9IHt9KSB7XG4gICAgZnVuY3Rpb24gcmVhZERhdGFCbG9jaygpIHtcbiAgICAgIGNvbnN0IGxlbmd0aCA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBvZmZzZXQpO1xuICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICBsZXQgZW5kT2Zmc2V0ID0gb2Zmc2V0ICsgbGVuZ3RoIC0gMjtcbiAgICAgIGNvbnN0IGZpbGVNYXJrZXIgPSBmaW5kTmV4dEZpbGVNYXJrZXIoZGF0YSwgZW5kT2Zmc2V0LCBvZmZzZXQpO1xuXG4gICAgICBpZiAoZmlsZU1hcmtlciAmJiBmaWxlTWFya2VyLmludmFsaWQpIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKFwicmVhZERhdGFCbG9jayAtIGluY29ycmVjdCBsZW5ndGgsIGN1cnJlbnQgbWFya2VyIGlzOiBcIiArIGZpbGVNYXJrZXIuaW52YWxpZCk7XG4gICAgICAgIGVuZE9mZnNldCA9IGZpbGVNYXJrZXIub2Zmc2V0O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhcnJheSA9IGRhdGEuc3ViYXJyYXkob2Zmc2V0LCBlbmRPZmZzZXQpO1xuICAgICAgb2Zmc2V0ICs9IGFycmF5Lmxlbmd0aDtcbiAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcmVwYXJlQ29tcG9uZW50cyhmcmFtZSkge1xuICAgICAgY29uc3QgbWN1c1BlckxpbmUgPSBNYXRoLmNlaWwoZnJhbWUuc2FtcGxlc1BlckxpbmUgLyA4IC8gZnJhbWUubWF4SCk7XG4gICAgICBjb25zdCBtY3VzUGVyQ29sdW1uID0gTWF0aC5jZWlsKGZyYW1lLnNjYW5MaW5lcyAvIDggLyBmcmFtZS5tYXhWKTtcblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gZnJhbWUuY29tcG9uZW50cy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGZyYW1lLmNvbXBvbmVudHNbaV07XG4gICAgICAgIGNvbnN0IGJsb2Nrc1BlckxpbmUgPSBNYXRoLmNlaWwoTWF0aC5jZWlsKGZyYW1lLnNhbXBsZXNQZXJMaW5lIC8gOCkgKiBjb21wb25lbnQuaCAvIGZyYW1lLm1heEgpO1xuICAgICAgICBjb25zdCBibG9ja3NQZXJDb2x1bW4gPSBNYXRoLmNlaWwoTWF0aC5jZWlsKGZyYW1lLnNjYW5MaW5lcyAvIDgpICogY29tcG9uZW50LnYgLyBmcmFtZS5tYXhWKTtcbiAgICAgICAgY29uc3QgYmxvY2tzUGVyTGluZUZvck1jdSA9IG1jdXNQZXJMaW5lICogY29tcG9uZW50Lmg7XG4gICAgICAgIGNvbnN0IGJsb2Nrc1BlckNvbHVtbkZvck1jdSA9IG1jdXNQZXJDb2x1bW4gKiBjb21wb25lbnQudjtcbiAgICAgICAgY29uc3QgYmxvY2tzQnVmZmVyU2l6ZSA9IDY0ICogYmxvY2tzUGVyQ29sdW1uRm9yTWN1ICogKGJsb2Nrc1BlckxpbmVGb3JNY3UgKyAxKTtcbiAgICAgICAgY29tcG9uZW50LmJsb2NrRGF0YSA9IG5ldyBJbnQxNkFycmF5KGJsb2Nrc0J1ZmZlclNpemUpO1xuICAgICAgICBjb21wb25lbnQuYmxvY2tzUGVyTGluZSA9IGJsb2Nrc1BlckxpbmU7XG4gICAgICAgIGNvbXBvbmVudC5ibG9ja3NQZXJDb2x1bW4gPSBibG9ja3NQZXJDb2x1bW47XG4gICAgICB9XG5cbiAgICAgIGZyYW1lLm1jdXNQZXJMaW5lID0gbWN1c1BlckxpbmU7XG4gICAgICBmcmFtZS5tY3VzUGVyQ29sdW1uID0gbWN1c1BlckNvbHVtbjtcbiAgICB9XG5cbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICBsZXQgamZpZiA9IG51bGw7XG4gICAgbGV0IGFkb2JlID0gbnVsbDtcbiAgICBsZXQgZnJhbWUsIHJlc2V0SW50ZXJ2YWw7XG4gICAgbGV0IG51bVNPU01hcmtlcnMgPSAwO1xuICAgIGNvbnN0IHF1YW50aXphdGlvblRhYmxlcyA9IFtdO1xuICAgIGNvbnN0IGh1ZmZtYW5UYWJsZXNBQyA9IFtdLFxuICAgICAgICAgIGh1ZmZtYW5UYWJsZXNEQyA9IFtdO1xuICAgIGxldCBmaWxlTWFya2VyID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIG9mZnNldCk7XG4gICAgb2Zmc2V0ICs9IDI7XG5cbiAgICBpZiAoZmlsZU1hcmtlciAhPT0gMHhmZmQ4KSB7XG4gICAgICB0aHJvdyBuZXcgSnBlZ0Vycm9yKFwiU09JIG5vdCBmb3VuZFwiKTtcbiAgICB9XG5cbiAgICBmaWxlTWFya2VyID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIG9mZnNldCk7XG4gICAgb2Zmc2V0ICs9IDI7XG5cbiAgICBtYXJrZXJMb29wOiB3aGlsZSAoZmlsZU1hcmtlciAhPT0gMHhmZmQ5KSB7XG4gICAgICBsZXQgaSwgaiwgbDtcblxuICAgICAgc3dpdGNoIChmaWxlTWFya2VyKSB7XG4gICAgICAgIGNhc2UgMHhmZmUwOlxuICAgICAgICBjYXNlIDB4ZmZlMTpcbiAgICAgICAgY2FzZSAweGZmZTI6XG4gICAgICAgIGNhc2UgMHhmZmUzOlxuICAgICAgICBjYXNlIDB4ZmZlNDpcbiAgICAgICAgY2FzZSAweGZmZTU6XG4gICAgICAgIGNhc2UgMHhmZmU2OlxuICAgICAgICBjYXNlIDB4ZmZlNzpcbiAgICAgICAgY2FzZSAweGZmZTg6XG4gICAgICAgIGNhc2UgMHhmZmU5OlxuICAgICAgICBjYXNlIDB4ZmZlYTpcbiAgICAgICAgY2FzZSAweGZmZWI6XG4gICAgICAgIGNhc2UgMHhmZmVjOlxuICAgICAgICBjYXNlIDB4ZmZlZDpcbiAgICAgICAgY2FzZSAweGZmZWU6XG4gICAgICAgIGNhc2UgMHhmZmVmOlxuICAgICAgICBjYXNlIDB4ZmZmZTpcbiAgICAgICAgICBjb25zdCBhcHBEYXRhID0gcmVhZERhdGFCbG9jaygpO1xuXG4gICAgICAgICAgaWYgKGZpbGVNYXJrZXIgPT09IDB4ZmZlMCkge1xuICAgICAgICAgICAgaWYgKGFwcERhdGFbMF0gPT09IDB4NGEgJiYgYXBwRGF0YVsxXSA9PT0gMHg0NiAmJiBhcHBEYXRhWzJdID09PSAweDQ5ICYmIGFwcERhdGFbM10gPT09IDB4NDYgJiYgYXBwRGF0YVs0XSA9PT0gMCkge1xuICAgICAgICAgICAgICBqZmlmID0ge1xuICAgICAgICAgICAgICAgIHZlcnNpb246IHtcbiAgICAgICAgICAgICAgICAgIG1ham9yOiBhcHBEYXRhWzVdLFxuICAgICAgICAgICAgICAgICAgbWlub3I6IGFwcERhdGFbNl1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGRlbnNpdHlVbml0czogYXBwRGF0YVs3XSxcbiAgICAgICAgICAgICAgICB4RGVuc2l0eTogYXBwRGF0YVs4XSA8PCA4IHwgYXBwRGF0YVs5XSxcbiAgICAgICAgICAgICAgICB5RGVuc2l0eTogYXBwRGF0YVsxMF0gPDwgOCB8IGFwcERhdGFbMTFdLFxuICAgICAgICAgICAgICAgIHRodW1iV2lkdGg6IGFwcERhdGFbMTJdLFxuICAgICAgICAgICAgICAgIHRodW1iSGVpZ2h0OiBhcHBEYXRhWzEzXSxcbiAgICAgICAgICAgICAgICB0aHVtYkRhdGE6IGFwcERhdGEuc3ViYXJyYXkoMTQsIDE0ICsgMyAqIGFwcERhdGFbMTJdICogYXBwRGF0YVsxM10pXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGZpbGVNYXJrZXIgPT09IDB4ZmZlZSkge1xuICAgICAgICAgICAgaWYgKGFwcERhdGFbMF0gPT09IDB4NDEgJiYgYXBwRGF0YVsxXSA9PT0gMHg2NCAmJiBhcHBEYXRhWzJdID09PSAweDZmICYmIGFwcERhdGFbM10gPT09IDB4NjIgJiYgYXBwRGF0YVs0XSA9PT0gMHg2NSkge1xuICAgICAgICAgICAgICBhZG9iZSA9IHtcbiAgICAgICAgICAgICAgICB2ZXJzaW9uOiBhcHBEYXRhWzVdIDw8IDggfCBhcHBEYXRhWzZdLFxuICAgICAgICAgICAgICAgIGZsYWdzMDogYXBwRGF0YVs3XSA8PCA4IHwgYXBwRGF0YVs4XSxcbiAgICAgICAgICAgICAgICBmbGFnczE6IGFwcERhdGFbOV0gPDwgOCB8IGFwcERhdGFbMTBdLFxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybUNvZGU6IGFwcERhdGFbMTFdXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAweGZmZGI6XG4gICAgICAgICAgY29uc3QgcXVhbnRpemF0aW9uVGFibGVzTGVuZ3RoID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIG9mZnNldCk7XG4gICAgICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICAgICAgY29uc3QgcXVhbnRpemF0aW9uVGFibGVzRW5kID0gcXVhbnRpemF0aW9uVGFibGVzTGVuZ3RoICsgb2Zmc2V0IC0gMjtcbiAgICAgICAgICBsZXQgejtcblxuICAgICAgICAgIHdoaWxlIChvZmZzZXQgPCBxdWFudGl6YXRpb25UYWJsZXNFbmQpIHtcbiAgICAgICAgICAgIGNvbnN0IHF1YW50aXphdGlvblRhYmxlU3BlYyA9IGRhdGFbb2Zmc2V0KytdO1xuICAgICAgICAgICAgY29uc3QgdGFibGVEYXRhID0gbmV3IFVpbnQxNkFycmF5KDY0KTtcblxuICAgICAgICAgICAgaWYgKHF1YW50aXphdGlvblRhYmxlU3BlYyA+PiA0ID09PSAwKSB7XG4gICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCA2NDsgaisrKSB7XG4gICAgICAgICAgICAgICAgeiA9IGRjdFppZ1phZ1tqXTtcbiAgICAgICAgICAgICAgICB0YWJsZURhdGFbel0gPSBkYXRhW29mZnNldCsrXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChxdWFudGl6YXRpb25UYWJsZVNwZWMgPj4gNCA9PT0gMSkge1xuICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgNjQ7IGorKykge1xuICAgICAgICAgICAgICAgIHogPSBkY3RaaWdaYWdbal07XG4gICAgICAgICAgICAgICAgdGFibGVEYXRhW3pdID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBKcGVnRXJyb3IoXCJEUVQgLSBpbnZhbGlkIHRhYmxlIHNwZWNcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHF1YW50aXphdGlvblRhYmxlc1txdWFudGl6YXRpb25UYWJsZVNwZWMgJiAxNV0gPSB0YWJsZURhdGE7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAweGZmYzA6XG4gICAgICAgIGNhc2UgMHhmZmMxOlxuICAgICAgICBjYXNlIDB4ZmZjMjpcbiAgICAgICAgICBpZiAoZnJhbWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBKcGVnRXJyb3IoXCJPbmx5IHNpbmdsZSBmcmFtZSBKUEVHcyBzdXBwb3J0ZWRcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICAgICAgZnJhbWUgPSB7fTtcbiAgICAgICAgICBmcmFtZS5leHRlbmRlZCA9IGZpbGVNYXJrZXIgPT09IDB4ZmZjMTtcbiAgICAgICAgICBmcmFtZS5wcm9ncmVzc2l2ZSA9IGZpbGVNYXJrZXIgPT09IDB4ZmZjMjtcbiAgICAgICAgICBmcmFtZS5wcmVjaXNpb24gPSBkYXRhW29mZnNldCsrXTtcbiAgICAgICAgICBjb25zdCBzb2ZTY2FuTGluZXMgPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQxNikoZGF0YSwgb2Zmc2V0KTtcbiAgICAgICAgICBvZmZzZXQgKz0gMjtcbiAgICAgICAgICBmcmFtZS5zY2FuTGluZXMgPSBkbmxTY2FuTGluZXMgfHwgc29mU2NhbkxpbmVzO1xuICAgICAgICAgIGZyYW1lLnNhbXBsZXNQZXJMaW5lID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIG9mZnNldCk7XG4gICAgICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICAgICAgZnJhbWUuY29tcG9uZW50cyA9IFtdO1xuICAgICAgICAgIGZyYW1lLmNvbXBvbmVudElkcyA9IHt9O1xuICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHNDb3VudCA9IGRhdGFbb2Zmc2V0KytdO1xuICAgICAgICAgIGxldCBtYXhIID0gMCxcbiAgICAgICAgICAgICAgbWF4ViA9IDA7XG5cbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29tcG9uZW50c0NvdW50OyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudElkID0gZGF0YVtvZmZzZXRdO1xuICAgICAgICAgICAgY29uc3QgaCA9IGRhdGFbb2Zmc2V0ICsgMV0gPj4gNDtcbiAgICAgICAgICAgIGNvbnN0IHYgPSBkYXRhW29mZnNldCArIDFdICYgMTU7XG5cbiAgICAgICAgICAgIGlmIChtYXhIIDwgaCkge1xuICAgICAgICAgICAgICBtYXhIID0gaDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG1heFYgPCB2KSB7XG4gICAgICAgICAgICAgIG1heFYgPSB2O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBxSWQgPSBkYXRhW29mZnNldCArIDJdO1xuICAgICAgICAgICAgbCA9IGZyYW1lLmNvbXBvbmVudHMucHVzaCh7XG4gICAgICAgICAgICAgIGgsXG4gICAgICAgICAgICAgIHYsXG4gICAgICAgICAgICAgIHF1YW50aXphdGlvbklkOiBxSWQsXG4gICAgICAgICAgICAgIHF1YW50aXphdGlvblRhYmxlOiBudWxsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZyYW1lLmNvbXBvbmVudElkc1tjb21wb25lbnRJZF0gPSBsIC0gMTtcbiAgICAgICAgICAgIG9mZnNldCArPSAzO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZyYW1lLm1heEggPSBtYXhIO1xuICAgICAgICAgIGZyYW1lLm1heFYgPSBtYXhWO1xuICAgICAgICAgIHByZXBhcmVDb21wb25lbnRzKGZyYW1lKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDB4ZmZjNDpcbiAgICAgICAgICBjb25zdCBodWZmbWFuTGVuZ3RoID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIG9mZnNldCk7XG4gICAgICAgICAgb2Zmc2V0ICs9IDI7XG5cbiAgICAgICAgICBmb3IgKGkgPSAyOyBpIDwgaHVmZm1hbkxlbmd0aDspIHtcbiAgICAgICAgICAgIGNvbnN0IGh1ZmZtYW5UYWJsZVNwZWMgPSBkYXRhW29mZnNldCsrXTtcbiAgICAgICAgICAgIGNvbnN0IGNvZGVMZW5ndGhzID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xuICAgICAgICAgICAgbGV0IGNvZGVMZW5ndGhTdW0gPSAwO1xuXG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgMTY7IGorKywgb2Zmc2V0KyspIHtcbiAgICAgICAgICAgICAgY29kZUxlbmd0aFN1bSArPSBjb2RlTGVuZ3Roc1tqXSA9IGRhdGFbb2Zmc2V0XTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgaHVmZm1hblZhbHVlcyA9IG5ldyBVaW50OEFycmF5KGNvZGVMZW5ndGhTdW0pO1xuXG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgY29kZUxlbmd0aFN1bTsgaisrLCBvZmZzZXQrKykge1xuICAgICAgICAgICAgICBodWZmbWFuVmFsdWVzW2pdID0gZGF0YVtvZmZzZXRdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpICs9IDE3ICsgY29kZUxlbmd0aFN1bTtcbiAgICAgICAgICAgIChodWZmbWFuVGFibGVTcGVjID4+IDQgPT09IDAgPyBodWZmbWFuVGFibGVzREMgOiBodWZmbWFuVGFibGVzQUMpW2h1ZmZtYW5UYWJsZVNwZWMgJiAxNV0gPSBidWlsZEh1ZmZtYW5UYWJsZShjb2RlTGVuZ3RocywgaHVmZm1hblZhbHVlcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAweGZmZGQ6XG4gICAgICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICAgICAgcmVzZXRJbnRlcnZhbCA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBvZmZzZXQpO1xuICAgICAgICAgIG9mZnNldCArPSAyO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMHhmZmRhOlxuICAgICAgICAgIGNvbnN0IHBhcnNlRE5MTWFya2VyID0gKytudW1TT1NNYXJrZXJzID09PSAxICYmICFkbmxTY2FuTGluZXM7XG4gICAgICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0b3JzQ291bnQgPSBkYXRhW29mZnNldCsrXSxcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzID0gW107XG5cbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2VsZWN0b3JzQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBkYXRhW29mZnNldCsrXTtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudEluZGV4ID0gZnJhbWUuY29tcG9uZW50SWRzW2luZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGZyYW1lLmNvbXBvbmVudHNbY29tcG9uZW50SW5kZXhdO1xuICAgICAgICAgICAgY29tcG9uZW50LmluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICBjb25zdCB0YWJsZVNwZWMgPSBkYXRhW29mZnNldCsrXTtcbiAgICAgICAgICAgIGNvbXBvbmVudC5odWZmbWFuVGFibGVEQyA9IGh1ZmZtYW5UYWJsZXNEQ1t0YWJsZVNwZWMgPj4gNF07XG4gICAgICAgICAgICBjb21wb25lbnQuaHVmZm1hblRhYmxlQUMgPSBodWZmbWFuVGFibGVzQUNbdGFibGVTcGVjICYgMTVdO1xuICAgICAgICAgICAgY29tcG9uZW50cy5wdXNoKGNvbXBvbmVudCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qgc3BlY3RyYWxTdGFydCA9IGRhdGFbb2Zmc2V0KytdLFxuICAgICAgICAgICAgICAgIHNwZWN0cmFsRW5kID0gZGF0YVtvZmZzZXQrK10sXG4gICAgICAgICAgICAgICAgc3VjY2Vzc2l2ZUFwcHJveGltYXRpb24gPSBkYXRhW29mZnNldCsrXTtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBwcm9jZXNzZWQgPSBkZWNvZGVTY2FuKGRhdGEsIG9mZnNldCwgZnJhbWUsIGNvbXBvbmVudHMsIHJlc2V0SW50ZXJ2YWwsIHNwZWN0cmFsU3RhcnQsIHNwZWN0cmFsRW5kLCBzdWNjZXNzaXZlQXBwcm94aW1hdGlvbiA+PiA0LCBzdWNjZXNzaXZlQXBwcm94aW1hdGlvbiAmIDE1LCBwYXJzZUROTE1hcmtlcik7XG4gICAgICAgICAgICBvZmZzZXQgKz0gcHJvY2Vzc2VkO1xuICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICBpZiAoZXggaW5zdGFuY2VvZiBETkxNYXJrZXJFcnJvcikge1xuICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoYCR7ZXgubWVzc2FnZX0gLS0gYXR0ZW1wdGluZyB0byByZS1wYXJzZSB0aGUgSlBFRyBpbWFnZS5gKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2UoZGF0YSwge1xuICAgICAgICAgICAgICAgIGRubFNjYW5MaW5lczogZXguc2NhbkxpbmVzXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChleCBpbnN0YW5jZW9mIEVPSU1hcmtlckVycm9yKSB7XG4gICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgJHtleC5tZXNzYWdlfSAtLSBpZ25vcmluZyB0aGUgcmVzdCBvZiB0aGUgaW1hZ2UgZGF0YS5gKTtcbiAgICAgICAgICAgICAgYnJlYWsgbWFya2VyTG9vcDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhyb3cgZXg7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAweGZmZGM6XG4gICAgICAgICAgb2Zmc2V0ICs9IDQ7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAweGZmZmY6XG4gICAgICAgICAgaWYgKGRhdGFbb2Zmc2V0XSAhPT0gMHhmZikge1xuICAgICAgICAgICAgb2Zmc2V0LS07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zdCBuZXh0RmlsZU1hcmtlciA9IGZpbmROZXh0RmlsZU1hcmtlcihkYXRhLCBvZmZzZXQgLSAyLCBvZmZzZXQgLSAzKTtcblxuICAgICAgICAgIGlmIChuZXh0RmlsZU1hcmtlciAmJiBuZXh0RmlsZU1hcmtlci5pbnZhbGlkKSB7XG4gICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJKcGVnSW1hZ2UucGFyc2UgLSB1bmV4cGVjdGVkIGRhdGEsIGN1cnJlbnQgbWFya2VyIGlzOiBcIiArIG5leHRGaWxlTWFya2VyLmludmFsaWQpO1xuICAgICAgICAgICAgb2Zmc2V0ID0gbmV4dEZpbGVNYXJrZXIub2Zmc2V0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFuZXh0RmlsZU1hcmtlciB8fCBvZmZzZXQgPj0gZGF0YS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJKcGVnSW1hZ2UucGFyc2UgLSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGltYWdlIGRhdGEgXCIgKyBcIndpdGhvdXQgZmluZGluZyBhbiBFT0kgbWFya2VyICgweEZGRDkpLlwiKTtcbiAgICAgICAgICAgIGJyZWFrIG1hcmtlckxvb3A7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhyb3cgbmV3IEpwZWdFcnJvcihcIkpwZWdJbWFnZS5wYXJzZSAtIHVua25vd24gbWFya2VyOiBcIiArIGZpbGVNYXJrZXIudG9TdHJpbmcoMTYpKTtcbiAgICAgIH1cblxuICAgICAgZmlsZU1hcmtlciA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBvZmZzZXQpO1xuICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgfVxuXG4gICAgdGhpcy53aWR0aCA9IGZyYW1lLnNhbXBsZXNQZXJMaW5lO1xuICAgIHRoaXMuaGVpZ2h0ID0gZnJhbWUuc2NhbkxpbmVzO1xuICAgIHRoaXMuamZpZiA9IGpmaWY7XG4gICAgdGhpcy5hZG9iZSA9IGFkb2JlO1xuICAgIHRoaXMuY29tcG9uZW50cyA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gZnJhbWUuY29tcG9uZW50cy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSBmcmFtZS5jb21wb25lbnRzW2ldO1xuICAgICAgY29uc3QgcXVhbnRpemF0aW9uVGFibGUgPSBxdWFudGl6YXRpb25UYWJsZXNbY29tcG9uZW50LnF1YW50aXphdGlvbklkXTtcblxuICAgICAgaWYgKHF1YW50aXphdGlvblRhYmxlKSB7XG4gICAgICAgIGNvbXBvbmVudC5xdWFudGl6YXRpb25UYWJsZSA9IHF1YW50aXphdGlvblRhYmxlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNvbXBvbmVudHMucHVzaCh7XG4gICAgICAgIGluZGV4OiBjb21wb25lbnQuaW5kZXgsXG4gICAgICAgIG91dHB1dDogYnVpbGRDb21wb25lbnREYXRhKGZyYW1lLCBjb21wb25lbnQpLFxuICAgICAgICBzY2FsZVg6IGNvbXBvbmVudC5oIC8gZnJhbWUubWF4SCxcbiAgICAgICAgc2NhbGVZOiBjb21wb25lbnQudiAvIGZyYW1lLm1heFYsXG4gICAgICAgIGJsb2Nrc1BlckxpbmU6IGNvbXBvbmVudC5ibG9ja3NQZXJMaW5lLFxuICAgICAgICBibG9ja3NQZXJDb2x1bW46IGNvbXBvbmVudC5ibG9ja3NQZXJDb2x1bW5cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMubnVtQ29tcG9uZW50cyA9IHRoaXMuY29tcG9uZW50cy5sZW5ndGg7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIF9nZXRMaW5lYXJpemVkQmxvY2tEYXRhKHdpZHRoLCBoZWlnaHQsIGlzU291cmNlUERGID0gZmFsc2UpIHtcbiAgICBjb25zdCBzY2FsZVggPSB0aGlzLndpZHRoIC8gd2lkdGgsXG4gICAgICAgICAgc2NhbGVZID0gdGhpcy5oZWlnaHQgLyBoZWlnaHQ7XG4gICAgbGV0IGNvbXBvbmVudCwgY29tcG9uZW50U2NhbGVYLCBjb21wb25lbnRTY2FsZVksIGJsb2Nrc1BlclNjYW5saW5lO1xuICAgIGxldCB4LCB5LCBpLCBqLCBrO1xuICAgIGxldCBpbmRleDtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICBsZXQgb3V0cHV0O1xuICAgIGNvbnN0IG51bUNvbXBvbmVudHMgPSB0aGlzLmNvbXBvbmVudHMubGVuZ3RoO1xuICAgIGNvbnN0IGRhdGFMZW5ndGggPSB3aWR0aCAqIGhlaWdodCAqIG51bUNvbXBvbmVudHM7XG4gICAgY29uc3QgZGF0YSA9IG5ldyBVaW50OENsYW1wZWRBcnJheShkYXRhTGVuZ3RoKTtcbiAgICBjb25zdCB4U2NhbGVCbG9ja09mZnNldCA9IG5ldyBVaW50MzJBcnJheSh3aWR0aCk7XG4gICAgY29uc3QgbWFzazNMU0IgPSAweGZmZmZmZmY4O1xuICAgIGxldCBsYXN0Q29tcG9uZW50U2NhbGVYO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IG51bUNvbXBvbmVudHM7IGkrKykge1xuICAgICAgY29tcG9uZW50ID0gdGhpcy5jb21wb25lbnRzW2ldO1xuICAgICAgY29tcG9uZW50U2NhbGVYID0gY29tcG9uZW50LnNjYWxlWCAqIHNjYWxlWDtcbiAgICAgIGNvbXBvbmVudFNjYWxlWSA9IGNvbXBvbmVudC5zY2FsZVkgKiBzY2FsZVk7XG4gICAgICBvZmZzZXQgPSBpO1xuICAgICAgb3V0cHV0ID0gY29tcG9uZW50Lm91dHB1dDtcbiAgICAgIGJsb2Nrc1BlclNjYW5saW5lID0gY29tcG9uZW50LmJsb2Nrc1BlckxpbmUgKyAxIDw8IDM7XG5cbiAgICAgIGlmIChjb21wb25lbnRTY2FsZVggIT09IGxhc3RDb21wb25lbnRTY2FsZVgpIHtcbiAgICAgICAgZm9yICh4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcbiAgICAgICAgICBqID0gMCB8IHggKiBjb21wb25lbnRTY2FsZVg7XG4gICAgICAgICAgeFNjYWxlQmxvY2tPZmZzZXRbeF0gPSAoaiAmIG1hc2szTFNCKSA8PCAzIHwgaiAmIDc7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0Q29tcG9uZW50U2NhbGVYID0gY29tcG9uZW50U2NhbGVYO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHtcbiAgICAgICAgaiA9IDAgfCB5ICogY29tcG9uZW50U2NhbGVZO1xuICAgICAgICBpbmRleCA9IGJsb2Nrc1BlclNjYW5saW5lICogKGogJiBtYXNrM0xTQikgfCAoaiAmIDcpIDw8IDM7XG5cbiAgICAgICAgZm9yICh4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcbiAgICAgICAgICBkYXRhW29mZnNldF0gPSBvdXRwdXRbaW5kZXggKyB4U2NhbGVCbG9ja09mZnNldFt4XV07XG4gICAgICAgICAgb2Zmc2V0ICs9IG51bUNvbXBvbmVudHM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgdHJhbnNmb3JtID0gdGhpcy5fZGVjb2RlVHJhbnNmb3JtO1xuXG4gICAgaWYgKCFpc1NvdXJjZVBERiAmJiBudW1Db21wb25lbnRzID09PSA0ICYmICF0cmFuc2Zvcm0pIHtcbiAgICAgIHRyYW5zZm9ybSA9IG5ldyBJbnQzMkFycmF5KFstMjU2LCAyNTUsIC0yNTYsIDI1NSwgLTI1NiwgMjU1LCAtMjU2LCAyNTVdKTtcbiAgICB9XG5cbiAgICBpZiAodHJhbnNmb3JtKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgZGF0YUxlbmd0aDspIHtcbiAgICAgICAgZm9yIChqID0gMCwgayA9IDA7IGogPCBudW1Db21wb25lbnRzOyBqKyssIGkrKywgayArPSAyKSB7XG4gICAgICAgICAgZGF0YVtpXSA9IChkYXRhW2ldICogdHJhbnNmb3JtW2tdID4+IDgpICsgdHJhbnNmb3JtW2sgKyAxXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgZ2V0IF9pc0NvbG9yQ29udmVyc2lvbk5lZWRlZCgpIHtcbiAgICBpZiAodGhpcy5hZG9iZSkge1xuICAgICAgcmV0dXJuICEhdGhpcy5hZG9iZS50cmFuc2Zvcm1Db2RlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm51bUNvbXBvbmVudHMgPT09IDMpIHtcbiAgICAgIGlmICh0aGlzLl9jb2xvclRyYW5zZm9ybSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY29tcG9uZW50c1swXS5pbmRleCA9PT0gMHg1MiAmJiB0aGlzLmNvbXBvbmVudHNbMV0uaW5kZXggPT09IDB4NDcgJiYgdGhpcy5jb21wb25lbnRzWzJdLmluZGV4ID09PSAweDQyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NvbG9yVHJhbnNmb3JtID09PSAxKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBfY29udmVydFljY1RvUmdiKGRhdGEpIHtcbiAgICBsZXQgWSwgQ2IsIENyO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbmd0aCA9IGRhdGEubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpICs9IDMpIHtcbiAgICAgIFkgPSBkYXRhW2ldO1xuICAgICAgQ2IgPSBkYXRhW2kgKyAxXTtcbiAgICAgIENyID0gZGF0YVtpICsgMl07XG4gICAgICBkYXRhW2ldID0gWSAtIDE3OS40NTYgKyAxLjQwMiAqIENyO1xuICAgICAgZGF0YVtpICsgMV0gPSBZICsgMTM1LjQ1OSAtIDAuMzQ0ICogQ2IgLSAwLjcxNCAqIENyO1xuICAgICAgZGF0YVtpICsgMl0gPSBZIC0gMjI2LjgxNiArIDEuNzcyICogQ2I7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBfY29udmVydFljY2tUb1JnYihkYXRhKSB7XG4gICAgbGV0IFksIENiLCBDciwgaztcbiAgICBsZXQgb2Zmc2V0ID0gMDtcblxuICAgIGZvciAobGV0IGkgPSAwLCBsZW5ndGggPSBkYXRhLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSArPSA0KSB7XG4gICAgICBZID0gZGF0YVtpXTtcbiAgICAgIENiID0gZGF0YVtpICsgMV07XG4gICAgICBDciA9IGRhdGFbaSArIDJdO1xuICAgICAgayA9IGRhdGFbaSArIDNdO1xuICAgICAgZGF0YVtvZmZzZXQrK10gPSAtMTIyLjY3MTk1NDA2ODk0ICsgQ2IgKiAoLTYuNjA2MzU2Njk0MjAzNjRlLTUgKiBDYiArIDAuMDAwNDM3MTMwNDc1OTI2MjMyICogQ3IgLSA1LjQwODA2MTAwNjQ1OTllLTUgKiBZICsgMC4wMDA0ODQ0OTc5NzEyMDI4MSAqIGsgLSAwLjE1NDM2MjE1MTg3MTEyNikgKyBDciAqICgtMC4wMDA5NTc5NjQzNzg0NDU3NzMgKiBDciArIDAuMDAwODE3MDc2OTExMzQ2NjI1ICogWSAtIDAuMDA0NzcyNzE0MDU0MDg3NDcgKiBrICsgMS41MzM4MDI1MzIyMTczNCkgKyBZICogKDAuMDAwOTYxMjUwMTg0MTMwNjg4ICogWSAtIDAuMDAyNjYyNTczMzIyODM5MzMgKiBrICsgMC40ODM1NzA4ODQ1MTI2NSkgKyBrICogKC0wLjAwMDMzNjE5NzE3NzYxODM5NCAqIGsgKyAwLjQ4NDc5MTU2MTQ5MDc3Nik7XG4gICAgICBkYXRhW29mZnNldCsrXSA9IDEwNy4yNjgwMzkzOTc3MjQgKyBDYiAqICgyLjE5OTI3MTA0NTI1NzQxZS01ICogQ2IgLSAwLjAwMDY0MDk5MjAxODI5Nzk0NSAqIENyICsgMC4wMDA2NTkzOTcwMDEyNDU1NzcgKiBZICsgMC4wMDA0MjYxMDU2NTI5Mzg4MzcgKiBrIC0gMC4xNzY0OTE3OTI0NjI4NzUpICsgQ3IgKiAoLTAuMDAwNzc4MjY5OTQxNTEzNjgzICogQ3IgKyAwLjAwMTMwODcyMjYxNDA4Mjc1ICogWSArIDAuMDAwNzcwNDgyNjMxODAxMTMyICogayAtIDAuMTUxMDUxNDkyNzc1NTYyKSArIFkgKiAoMC4wMDEyNjkzNTM2ODExNDg0MyAqIFkgLSAwLjAwMjY1MDkwMTg5MDEwODk4ICogayArIDAuMjU4MDI5MTAyMDY4NDUpICsgayAqICgtMC4wMDAzMTg5MTMxMTc1ODgzMjggKiBrIC0gMC4yMTM3NDI0MDAzMjM2NjUpO1xuICAgICAgZGF0YVtvZmZzZXQrK10gPSAtMjAuODEwMDEyNTQ2OTQ3ICsgQ2IgKiAoLTAuMDAwNTcwMTE1MTk2OTczNjc3ICogQ2IgLSAyLjYzNDA5MDUxMDA0NTg5ZS01ICogQ3IgKyAwLjAwMjA3NDEwODgxMTUwMTIgKiBZIC0gMC4wMDI4ODI2MDIzNjg1MzQ0MiAqIGsgKyAwLjgxNDI3Mjk2ODM1OTI5NSkgKyBDciAqICgtMS41MzQ5NjA1NzQ0MDk3NWUtNSAqIENyIC0gMC4wMDAxMzI2ODkwNDM5NjE0NDYgKiBZICsgMC4wMDA1NjA4MzM2OTEyNDI4MTIgKiBrIC0gMC4xOTUxNTIwMjc1MzQwNDkpICsgWSAqICgwLjAwMTc0NDE4MTMyOTI3NTgyICogWSAtIDAuMDAyNTUyNDMzMjE0MzkzNDcgKiBrICsgMC4xMTY5MzUwMjA0NjUxNDUpICsgayAqICgtMC4wMDAzNDM1MzE5OTY1MTA1NTUgKiBrICsgMC4yNDE2NTI2MDIzMjQwNyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGEuc3ViYXJyYXkoMCwgb2Zmc2V0KTtcbiAgfVxuXG4gIF9jb252ZXJ0WWNja1RvQ215ayhkYXRhKSB7XG4gICAgbGV0IFksIENiLCBDcjtcblxuICAgIGZvciAobGV0IGkgPSAwLCBsZW5ndGggPSBkYXRhLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSArPSA0KSB7XG4gICAgICBZID0gZGF0YVtpXTtcbiAgICAgIENiID0gZGF0YVtpICsgMV07XG4gICAgICBDciA9IGRhdGFbaSArIDJdO1xuICAgICAgZGF0YVtpXSA9IDQzNC40NTYgLSBZIC0gMS40MDIgKiBDcjtcbiAgICAgIGRhdGFbaSArIDFdID0gMTE5LjU0MSAtIFkgKyAwLjM0NCAqIENiICsgMC43MTQgKiBDcjtcbiAgICAgIGRhdGFbaSArIDJdID0gNDgxLjgxNiAtIFkgLSAxLjc3MiAqIENiO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgX2NvbnZlcnRDbXlrVG9SZ2IoZGF0YSkge1xuICAgIGxldCBjLCBtLCB5LCBrO1xuICAgIGxldCBvZmZzZXQgPSAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbmd0aCA9IGRhdGEubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpICs9IDQpIHtcbiAgICAgIGMgPSBkYXRhW2ldO1xuICAgICAgbSA9IGRhdGFbaSArIDFdO1xuICAgICAgeSA9IGRhdGFbaSArIDJdO1xuICAgICAgayA9IGRhdGFbaSArIDNdO1xuICAgICAgZGF0YVtvZmZzZXQrK10gPSAyNTUgKyBjICogKC0wLjAwMDA2NzQ3MTQ3MDczNjAyNDQxICogYyArIDAuMDAwODM3OTI2MjEyMTAxMzcyNyAqIG0gKyAwLjAwMDI4OTQ3MTgxODg2NDMyOTQgKiB5ICsgMC4wMDMyNjQyMzEwNTc1Mzc4MDYgKiBrIC0gMS4xMTg1NjExODY3MjAzOTM3KSArIG0gKiAoMC4wMDAwMjYzNzQxMDc2MTYwODk0MDUgKiBtIC0gMC4wMDAwODYyNjk0OTE1ODYzODU3MiAqIHkgLSAwLjAwMDI3NDg3NjkwNjc0OTk0OTEgKiBrIC0gMC4wMjE1NTY4ODc5NDk3ODk2NykgKyB5ICogKC0wLjAwMDAzODc4MDk5MjEyODY5MzYzICogeSAtIDAuMDAwMzI2NzgwODI3OTQ4NTI4NiAqIGsgKyAwLjA2ODY3NDIyMzg1OTUzNDUpIC0gayAqICgwLjAwMDMzNjE5NzE3NzYxODM5MzcgKiBrICsgMC43NDMwNjU5MTUxMzQyMjU0KTtcbiAgICAgIGRhdGFbb2Zmc2V0KytdID0gMjU1ICsgYyAqICgwLjAwMDEzNTk2MzcyODEzNTg4ODQ4ICogYyArIDAuMDAwOTI0NTM3MTMyNTczNTg1ICogbSArIDAuMDAwMTA1NjczNTk2MTg2ODM1OTMgKiB5ICsgMC4wMDA0NzkxODY0Njg3NDM2NTEyICogayAtIDAuMzEwOTY4OTU4NzUxNTg3NSkgKyBtICogKC0wLjAwMDIzNTQ1MzQ2MTA4MzcwMzQ0ICogbSArIDAuMDAwMjcwMjg0NTI1MzUzNDcxNCAqIHkgKyAwLjAwMjAyMDAzMDg5NzczMDcxNTYgKiBrIC0gMC43NDg4MDUyMTY3MDE1NDk0KSArIHkgKiAoMC4wMDAwNjgzNDgxNTk5ODIzNTY2MiAqIHkgKyAwLjAwMDE1MTY4NDUyMzYzNDYwOTczICogayAtIDAuMDk3NTE5Mjc3NzQ3Mjg5MzMpIC0gayAqICgwLjAwMDMxODkxMzExNzU4ODMyODEgKiBrICsgMC43MzY0ODgzODA3NzMzMTY4KTtcbiAgICAgIGRhdGFbb2Zmc2V0KytdID0gMjU1ICsgYyAqICgwLjAwMDAxMzU5ODY1MDQxMTM4NTMwNyAqIGMgKyAwLjAwMDEyNDIzOTU2MTc1NDkwODUxICogbSArIDAuMDAwNDc1MTk4NTA5NzU4MzU4OSAqIHkgLSAwLjAwMDAwMzY3MjkzMTc0NzY2MzA0MjIgKiBrIC0gMC4wNTU2MjE4Njk4MDI2NDAzNCkgKyBtICogKDAuMDAwMTYxNDEzODA1OTg3MjQ2NzYgKiBtICsgMC4wMDA5NjkyMjM5MTMwNzI1MTg2ICogeSArIDAuMDAwNzc4MjY5MjQ1MDAzNjI1MyAqIGsgLSAwLjQ0MDE1MjMyMzY3NTI2NDYzKSArIHkgKiAoNS4wNjg4ODI5MTQwNjg3NjllLTcgKiB5ICsgMC4wMDE3Nzc4MzY5MDExMzc1MDcxICogayAtIDAuNzU5MTQ1NDY0OTc0OTYwOSkgLSBrICogKDAuMDAwMzQzNTMxOTk2NTEwNTU1MyAqIGsgKyAwLjcwNjM3NzAxODYxNjAxNDQpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhLnN1YmFycmF5KDAsIG9mZnNldCk7XG4gIH1cblxuICBnZXREYXRhKHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgZm9yY2VSR0IgPSBmYWxzZSxcbiAgICBpc1NvdXJjZVBERiA9IGZhbHNlXG4gIH0pIHtcbiAgICBpZiAodGhpcy5udW1Db21wb25lbnRzID4gNCkge1xuICAgICAgdGhyb3cgbmV3IEpwZWdFcnJvcihcIlVuc3VwcG9ydGVkIGNvbG9yIG1vZGVcIik7XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuX2dldExpbmVhcml6ZWRCbG9ja0RhdGEod2lkdGgsIGhlaWdodCwgaXNTb3VyY2VQREYpO1xuXG4gICAgaWYgKHRoaXMubnVtQ29tcG9uZW50cyA9PT0gMSAmJiBmb3JjZVJHQikge1xuICAgICAgY29uc3QgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoO1xuICAgICAgY29uc3QgcmdiRGF0YSA9IG5ldyBVaW50OENsYW1wZWRBcnJheShkYXRhTGVuZ3RoICogMyk7XG4gICAgICBsZXQgb2Zmc2V0ID0gMDtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgZ3JheUNvbG9yID0gZGF0YVtpXTtcbiAgICAgICAgcmdiRGF0YVtvZmZzZXQrK10gPSBncmF5Q29sb3I7XG4gICAgICAgIHJnYkRhdGFbb2Zmc2V0KytdID0gZ3JheUNvbG9yO1xuICAgICAgICByZ2JEYXRhW29mZnNldCsrXSA9IGdyYXlDb2xvcjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJnYkRhdGE7XG4gICAgfSBlbHNlIGlmICh0aGlzLm51bUNvbXBvbmVudHMgPT09IDMgJiYgdGhpcy5faXNDb2xvckNvbnZlcnNpb25OZWVkZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jb252ZXJ0WWNjVG9SZ2IoZGF0YSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm51bUNvbXBvbmVudHMgPT09IDQpIHtcbiAgICAgIGlmICh0aGlzLl9pc0NvbG9yQ29udmVyc2lvbk5lZWRlZCkge1xuICAgICAgICBpZiAoZm9yY2VSR0IpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fY29udmVydFljY2tUb1JnYihkYXRhKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9jb252ZXJ0WWNja1RvQ215ayhkYXRhKTtcbiAgICAgIH0gZWxzZSBpZiAoZm9yY2VSR0IpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnZlcnRDbXlrVG9SZ2IoZGF0YSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxufVxuXG5leHBvcnRzLkpwZWdJbWFnZSA9IEpwZWdJbWFnZTtcblxuLyoqKi8gfSksXG4vKiAzOSAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5KcHhTdHJlYW0gPSB2b2lkIDA7XG5cbnZhciBfZGVjb2RlX3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oMjkpO1xuXG52YXIgX2pweCA9IF9fd19wZGZqc19yZXF1aXJlX18oNDApO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5jbGFzcyBKcHhTdHJlYW0gZXh0ZW5kcyBfZGVjb2RlX3N0cmVhbS5EZWNvZGVTdHJlYW0ge1xuICBjb25zdHJ1Y3RvcihzdHJlYW0sIG1heWJlTGVuZ3RoLCBwYXJhbXMpIHtcbiAgICBzdXBlcihtYXliZUxlbmd0aCk7XG4gICAgdGhpcy5zdHJlYW0gPSBzdHJlYW07XG4gICAgdGhpcy5kaWN0ID0gc3RyZWFtLmRpY3Q7XG4gICAgdGhpcy5tYXliZUxlbmd0aCA9IG1heWJlTGVuZ3RoO1xuICAgIHRoaXMucGFyYW1zID0gcGFyYW1zO1xuICB9XG5cbiAgZ2V0IGJ5dGVzKCkge1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImJ5dGVzXCIsIHRoaXMuc3RyZWFtLmdldEJ5dGVzKHRoaXMubWF5YmVMZW5ndGgpKTtcbiAgfVxuXG4gIGVuc3VyZUJ1ZmZlcihyZXF1ZXN0ZWQpIHt9XG5cbiAgcmVhZEJsb2NrKCkge1xuICAgIGlmICh0aGlzLmVvZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGpweEltYWdlID0gbmV3IF9qcHguSnB4SW1hZ2UoKTtcbiAgICBqcHhJbWFnZS5wYXJzZSh0aGlzLmJ5dGVzKTtcbiAgICBjb25zdCB3aWR0aCA9IGpweEltYWdlLndpZHRoO1xuICAgIGNvbnN0IGhlaWdodCA9IGpweEltYWdlLmhlaWdodDtcbiAgICBjb25zdCBjb21wb25lbnRzQ291bnQgPSBqcHhJbWFnZS5jb21wb25lbnRzQ291bnQ7XG4gICAgY29uc3QgdGlsZUNvdW50ID0ganB4SW1hZ2UudGlsZXMubGVuZ3RoO1xuXG4gICAgaWYgKHRpbGVDb3VudCA9PT0gMSkge1xuICAgICAgdGhpcy5idWZmZXIgPSBqcHhJbWFnZS50aWxlc1swXS5pdGVtcztcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZGF0YSA9IG5ldyBVaW50OENsYW1wZWRBcnJheSh3aWR0aCAqIGhlaWdodCAqIGNvbXBvbmVudHNDb3VudCk7XG5cbiAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgdGlsZUNvdW50OyBrKyspIHtcbiAgICAgICAgY29uc3QgdGlsZUNvbXBvbmVudHMgPSBqcHhJbWFnZS50aWxlc1trXTtcbiAgICAgICAgY29uc3QgdGlsZVdpZHRoID0gdGlsZUNvbXBvbmVudHMud2lkdGg7XG4gICAgICAgIGNvbnN0IHRpbGVIZWlnaHQgPSB0aWxlQ29tcG9uZW50cy5oZWlnaHQ7XG4gICAgICAgIGNvbnN0IHRpbGVMZWZ0ID0gdGlsZUNvbXBvbmVudHMubGVmdDtcbiAgICAgICAgY29uc3QgdGlsZVRvcCA9IHRpbGVDb21wb25lbnRzLnRvcDtcbiAgICAgICAgY29uc3Qgc3JjID0gdGlsZUNvbXBvbmVudHMuaXRlbXM7XG4gICAgICAgIGxldCBzcmNQb3NpdGlvbiA9IDA7XG4gICAgICAgIGxldCBkYXRhUG9zaXRpb24gPSAod2lkdGggKiB0aWxlVG9wICsgdGlsZUxlZnQpICogY29tcG9uZW50c0NvdW50O1xuICAgICAgICBjb25zdCBpbWdSb3dTaXplID0gd2lkdGggKiBjb21wb25lbnRzQ291bnQ7XG4gICAgICAgIGNvbnN0IHRpbGVSb3dTaXplID0gdGlsZVdpZHRoICogY29tcG9uZW50c0NvdW50O1xuXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGlsZUhlaWdodDsgaisrKSB7XG4gICAgICAgICAgY29uc3Qgcm93Qnl0ZXMgPSBzcmMuc3ViYXJyYXkoc3JjUG9zaXRpb24sIHNyY1Bvc2l0aW9uICsgdGlsZVJvd1NpemUpO1xuICAgICAgICAgIGRhdGEuc2V0KHJvd0J5dGVzLCBkYXRhUG9zaXRpb24pO1xuICAgICAgICAgIHNyY1Bvc2l0aW9uICs9IHRpbGVSb3dTaXplO1xuICAgICAgICAgIGRhdGFQb3NpdGlvbiArPSBpbWdSb3dTaXplO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYnVmZmVyID0gZGF0YTtcbiAgICB9XG5cbiAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyLmxlbmd0aDtcbiAgICB0aGlzLmVvZiA9IHRydWU7XG4gIH1cblxufVxuXG5leHBvcnRzLkpweFN0cmVhbSA9IEpweFN0cmVhbTtcblxuLyoqKi8gfSksXG4vKiA0MCAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5KcHhJbWFnZSA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9jb3JlX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXyg5KTtcblxudmFyIF9hcml0aG1ldGljX2RlY29kZXIgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDM2KTtcblxuY2xhc3MgSnB4RXJyb3IgZXh0ZW5kcyBfdXRpbC5CYXNlRXhjZXB0aW9uIHtcbiAgY29uc3RydWN0b3IobXNnKSB7XG4gICAgc3VwZXIoYEpQWCBlcnJvcjogJHttc2d9YCwgXCJKcHhFcnJvclwiKTtcbiAgfVxuXG59XG5cbmNvbnN0IFN1YmJhbmRzR2FpbkxvZzIgPSB7XG4gIExMOiAwLFxuICBMSDogMSxcbiAgSEw6IDEsXG4gIEhIOiAyXG59O1xuXG5jbGFzcyBKcHhJbWFnZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuZmFpbE9uQ29ycnVwdGVkSW1hZ2UgPSBmYWxzZTtcbiAgfVxuXG4gIHBhcnNlKGRhdGEpIHtcbiAgICBjb25zdCBoZWFkID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIDApO1xuXG4gICAgaWYgKGhlYWQgPT09IDB4ZmY0Zikge1xuICAgICAgdGhpcy5wYXJzZUNvZGVzdHJlYW0oZGF0YSwgMCwgZGF0YS5sZW5ndGgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGxlbmd0aCA9IGRhdGEubGVuZ3RoO1xuICAgIGxldCBwb3NpdGlvbiA9IDA7XG5cbiAgICB3aGlsZSAocG9zaXRpb24gPCBsZW5ndGgpIHtcbiAgICAgIGxldCBoZWFkZXJTaXplID0gODtcbiAgICAgIGxldCBsYm94ID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgIGNvbnN0IHRib3ggPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gKyA0KTtcbiAgICAgIHBvc2l0aW9uICs9IGhlYWRlclNpemU7XG5cbiAgICAgIGlmIChsYm94ID09PSAxKSB7XG4gICAgICAgIGxib3ggPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24pICogNDI5NDk2NzI5NiArICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbiArIDQpO1xuICAgICAgICBwb3NpdGlvbiArPSA4O1xuICAgICAgICBoZWFkZXJTaXplICs9IDg7XG4gICAgICB9XG5cbiAgICAgIGlmIChsYm94ID09PSAwKSB7XG4gICAgICAgIGxib3ggPSBsZW5ndGggLSBwb3NpdGlvbiArIGhlYWRlclNpemU7XG4gICAgICB9XG5cbiAgICAgIGlmIChsYm94IDwgaGVhZGVyU2l6ZSkge1xuICAgICAgICB0aHJvdyBuZXcgSnB4RXJyb3IoXCJJbnZhbGlkIGJveCBmaWVsZCBzaXplXCIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhTGVuZ3RoID0gbGJveCAtIGhlYWRlclNpemU7XG4gICAgICBsZXQganVtcERhdGFMZW5ndGggPSB0cnVlO1xuXG4gICAgICBzd2l0Y2ggKHRib3gpIHtcbiAgICAgICAgY2FzZSAweDZhNzAzMjY4OlxuICAgICAgICAgIGp1bXBEYXRhTGVuZ3RoID0gZmFsc2U7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAweDYzNmY2YzcyOlxuICAgICAgICAgIGNvbnN0IG1ldGhvZCA9IGRhdGFbcG9zaXRpb25dO1xuXG4gICAgICAgICAgaWYgKG1ldGhvZCA9PT0gMSkge1xuICAgICAgICAgICAgY29uc3QgY29sb3JzcGFjZSA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbiArIDMpO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKGNvbG9yc3BhY2UpIHtcbiAgICAgICAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICAgICAgY2FzZSAxNzpcbiAgICAgICAgICAgICAgY2FzZSAxODpcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIlVua25vd24gY29sb3JzcGFjZSBcIiArIGNvbG9yc3BhY2UpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kID09PSAyKSB7XG4gICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoXCJJQ0MgcHJvZmlsZSBub3Qgc3VwcG9ydGVkXCIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMHg2YTcwMzI2MzpcbiAgICAgICAgICB0aGlzLnBhcnNlQ29kZXN0cmVhbShkYXRhLCBwb3NpdGlvbiwgcG9zaXRpb24gKyBkYXRhTGVuZ3RoKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDB4NmE1MDIwMjA6XG4gICAgICAgICAgaWYgKCgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbikgIT09IDB4MGQwYTg3MGEpIHtcbiAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIkludmFsaWQgSlAyIHNpZ25hdHVyZVwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDB4NmE1MDFhMWE6XG4gICAgICAgIGNhc2UgMHg2Njc0Nzk3MDpcbiAgICAgICAgY2FzZSAweDcyNzI2NTcxOlxuICAgICAgICBjYXNlIDB4NzI2NTczMjA6XG4gICAgICAgIGNhc2UgMHg2OTY4NjQ3MjpcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnN0IGhlYWRlclR5cGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRib3ggPj4gMjQgJiAweGZmLCB0Ym94ID4+IDE2ICYgMHhmZiwgdGJveCA+PiA4ICYgMHhmZiwgdGJveCAmIDB4ZmYpO1xuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgVW5zdXBwb3J0ZWQgaGVhZGVyIHR5cGUgJHt0Ym94fSAoJHtoZWFkZXJUeXBlfSkuYCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChqdW1wRGF0YUxlbmd0aCkge1xuICAgICAgICBwb3NpdGlvbiArPSBkYXRhTGVuZ3RoO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHBhcnNlSW1hZ2VQcm9wZXJ0aWVzKHN0cmVhbSkge1xuICAgIGxldCBuZXdCeXRlID0gc3RyZWFtLmdldEJ5dGUoKTtcblxuICAgIHdoaWxlIChuZXdCeXRlID49IDApIHtcbiAgICAgIGNvbnN0IG9sZEJ5dGUgPSBuZXdCeXRlO1xuICAgICAgbmV3Qnl0ZSA9IHN0cmVhbS5nZXRCeXRlKCk7XG4gICAgICBjb25zdCBjb2RlID0gb2xkQnl0ZSA8PCA4IHwgbmV3Qnl0ZTtcblxuICAgICAgaWYgKGNvZGUgPT09IDB4ZmY1MSkge1xuICAgICAgICBzdHJlYW0uc2tpcCg0KTtcbiAgICAgICAgY29uc3QgWHNpeiA9IHN0cmVhbS5nZXRJbnQzMigpID4+PiAwO1xuICAgICAgICBjb25zdCBZc2l6ID0gc3RyZWFtLmdldEludDMyKCkgPj4+IDA7XG4gICAgICAgIGNvbnN0IFhPc2l6ID0gc3RyZWFtLmdldEludDMyKCkgPj4+IDA7XG4gICAgICAgIGNvbnN0IFlPc2l6ID0gc3RyZWFtLmdldEludDMyKCkgPj4+IDA7XG4gICAgICAgIHN0cmVhbS5za2lwKDE2KTtcbiAgICAgICAgY29uc3QgQ3NpeiA9IHN0cmVhbS5nZXRVaW50MTYoKTtcbiAgICAgICAgdGhpcy53aWR0aCA9IFhzaXogLSBYT3NpejtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBZc2l6IC0gWU9zaXo7XG4gICAgICAgIHRoaXMuY29tcG9uZW50c0NvdW50ID0gQ3NpejtcbiAgICAgICAgdGhpcy5iaXRzUGVyQ29tcG9uZW50ID0gODtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBKcHhFcnJvcihcIk5vIHNpemUgbWFya2VyIGZvdW5kIGluIEpQWCBzdHJlYW1cIik7XG4gIH1cblxuICBwYXJzZUNvZGVzdHJlYW0oZGF0YSwgc3RhcnQsIGVuZCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB7fTtcbiAgICBsZXQgZG9Ob3RSZWNvdmVyID0gZmFsc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHBvc2l0aW9uID0gc3RhcnQ7XG5cbiAgICAgIHdoaWxlIChwb3NpdGlvbiArIDEgPCBlbmQpIHtcbiAgICAgICAgY29uc3QgY29kZSA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBwb3NpdGlvbik7XG4gICAgICAgIHBvc2l0aW9uICs9IDI7XG4gICAgICAgIGxldCBsZW5ndGggPSAwLFxuICAgICAgICAgICAgaixcbiAgICAgICAgICAgIHNxY2QsXG4gICAgICAgICAgICBzcHFjZHMsXG4gICAgICAgICAgICBzcHFjZFNpemUsXG4gICAgICAgICAgICBzY2FsYXJFeHBvdW5kZWQsXG4gICAgICAgICAgICB0aWxlO1xuXG4gICAgICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgICAgIGNhc2UgMHhmZjRmOlxuICAgICAgICAgICAgY29udGV4dC5tYWluSGVhZGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAweGZmZDk6XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMHhmZjUxOlxuICAgICAgICAgICAgbGVuZ3RoID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgICAgICAgIGNvbnN0IHNpeiA9IHt9O1xuICAgICAgICAgICAgc2l6LlhzaXogPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gKyA0KTtcbiAgICAgICAgICAgIHNpei5Zc2l6ID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uICsgOCk7XG4gICAgICAgICAgICBzaXouWE9zaXogPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gKyAxMik7XG4gICAgICAgICAgICBzaXouWU9zaXogPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gKyAxNik7XG4gICAgICAgICAgICBzaXouWFRzaXogPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gKyAyMCk7XG4gICAgICAgICAgICBzaXouWVRzaXogPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gKyAyNCk7XG4gICAgICAgICAgICBzaXouWFRPc2l6ID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uICsgMjgpO1xuICAgICAgICAgICAgc2l6LllUT3NpeiA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbiArIDMyKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHNDb3VudCA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBwb3NpdGlvbiArIDM2KTtcbiAgICAgICAgICAgIHNpei5Dc2l6ID0gY29tcG9uZW50c0NvdW50O1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IFtdO1xuICAgICAgICAgICAgaiA9IHBvc2l0aW9uICsgMzg7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29tcG9uZW50c0NvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgY29uc3QgY29tcG9uZW50ID0ge1xuICAgICAgICAgICAgICAgIHByZWNpc2lvbjogKGRhdGFbal0gJiAweDdmKSArIDEsXG4gICAgICAgICAgICAgICAgaXNTaWduZWQ6ICEhKGRhdGFbal0gJiAweDgwKSxcbiAgICAgICAgICAgICAgICBYUnNpejogZGF0YVtqICsgMV0sXG4gICAgICAgICAgICAgICAgWVJzaXo6IGRhdGFbaiArIDJdXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGogKz0gMztcbiAgICAgICAgICAgICAgY2FsY3VsYXRlQ29tcG9uZW50RGltZW5zaW9ucyhjb21wb25lbnQsIHNpeik7XG4gICAgICAgICAgICAgIGNvbXBvbmVudHMucHVzaChjb21wb25lbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb250ZXh0LlNJWiA9IHNpejtcbiAgICAgICAgICAgIGNvbnRleHQuY29tcG9uZW50cyA9IGNvbXBvbmVudHM7XG4gICAgICAgICAgICBjYWxjdWxhdGVUaWxlR3JpZHMoY29udGV4dCwgY29tcG9uZW50cyk7XG4gICAgICAgICAgICBjb250ZXh0LlFDQyA9IFtdO1xuICAgICAgICAgICAgY29udGV4dC5DT0MgPSBbXTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAweGZmNWM6XG4gICAgICAgICAgICBsZW5ndGggPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQxNikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgY29uc3QgcWNkID0ge307XG4gICAgICAgICAgICBqID0gcG9zaXRpb24gKyAyO1xuICAgICAgICAgICAgc3FjZCA9IGRhdGFbaisrXTtcblxuICAgICAgICAgICAgc3dpdGNoIChzcWNkICYgMHgxZikge1xuICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgc3BxY2RTaXplID0gODtcbiAgICAgICAgICAgICAgICBzY2FsYXJFeHBvdW5kZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICBzcHFjZFNpemUgPSAxNjtcbiAgICAgICAgICAgICAgICBzY2FsYXJFeHBvdW5kZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgc3BxY2RTaXplID0gMTY7XG4gICAgICAgICAgICAgICAgc2NhbGFyRXhwb3VuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgU1FjZCB2YWx1ZSBcIiArIHNxY2QpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBxY2Qubm9RdWFudGl6YXRpb24gPSBzcHFjZFNpemUgPT09IDg7XG4gICAgICAgICAgICBxY2Quc2NhbGFyRXhwb3VuZGVkID0gc2NhbGFyRXhwb3VuZGVkO1xuICAgICAgICAgICAgcWNkLmd1YXJkQml0cyA9IHNxY2QgPj4gNTtcbiAgICAgICAgICAgIHNwcWNkcyA9IFtdO1xuXG4gICAgICAgICAgICB3aGlsZSAoaiA8IGxlbmd0aCArIHBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHNwcWNkID0ge307XG5cbiAgICAgICAgICAgICAgaWYgKHNwcWNkU2l6ZSA9PT0gOCkge1xuICAgICAgICAgICAgICAgIHNwcWNkLmVwc2lsb24gPSBkYXRhW2orK10gPj4gMztcbiAgICAgICAgICAgICAgICBzcHFjZC5tdSA9IDA7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3BxY2QuZXBzaWxvbiA9IGRhdGFbal0gPj4gMztcbiAgICAgICAgICAgICAgICBzcHFjZC5tdSA9IChkYXRhW2pdICYgMHg3KSA8PCA4IHwgZGF0YVtqICsgMV07XG4gICAgICAgICAgICAgICAgaiArPSAyO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgc3BxY2RzLnB1c2goc3BxY2QpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBxY2QuU1BxY2RzID0gc3BxY2RzO1xuXG4gICAgICAgICAgICBpZiAoY29udGV4dC5tYWluSGVhZGVyKSB7XG4gICAgICAgICAgICAgIGNvbnRleHQuUUNEID0gcWNkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29udGV4dC5jdXJyZW50VGlsZS5RQ0QgPSBxY2Q7XG4gICAgICAgICAgICAgIGNvbnRleHQuY3VycmVudFRpbGUuUUNDID0gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAweGZmNWQ6XG4gICAgICAgICAgICBsZW5ndGggPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQxNikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgY29uc3QgcWNjID0ge307XG4gICAgICAgICAgICBqID0gcG9zaXRpb24gKyAyO1xuICAgICAgICAgICAgbGV0IGNxY2M7XG5cbiAgICAgICAgICAgIGlmIChjb250ZXh0LlNJWi5Dc2l6IDwgMjU3KSB7XG4gICAgICAgICAgICAgIGNxY2MgPSBkYXRhW2orK107XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjcWNjID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIGopO1xuICAgICAgICAgICAgICBqICs9IDI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNxY2QgPSBkYXRhW2orK107XG5cbiAgICAgICAgICAgIHN3aXRjaCAoc3FjZCAmIDB4MWYpIHtcbiAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIHNwcWNkU2l6ZSA9IDg7XG4gICAgICAgICAgICAgICAgc2NhbGFyRXhwb3VuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgc3BxY2RTaXplID0gMTY7XG4gICAgICAgICAgICAgICAgc2NhbGFyRXhwb3VuZGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIHNwcWNkU2l6ZSA9IDE2O1xuICAgICAgICAgICAgICAgIHNjYWxhckV4cG91bmRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIFNRY2QgdmFsdWUgXCIgKyBzcWNkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcWNjLm5vUXVhbnRpemF0aW9uID0gc3BxY2RTaXplID09PSA4O1xuICAgICAgICAgICAgcWNjLnNjYWxhckV4cG91bmRlZCA9IHNjYWxhckV4cG91bmRlZDtcbiAgICAgICAgICAgIHFjYy5ndWFyZEJpdHMgPSBzcWNkID4+IDU7XG4gICAgICAgICAgICBzcHFjZHMgPSBbXTtcblxuICAgICAgICAgICAgd2hpbGUgKGogPCBsZW5ndGggKyBwb3NpdGlvbikge1xuICAgICAgICAgICAgICBjb25zdCBzcHFjZCA9IHt9O1xuXG4gICAgICAgICAgICAgIGlmIChzcHFjZFNpemUgPT09IDgpIHtcbiAgICAgICAgICAgICAgICBzcHFjZC5lcHNpbG9uID0gZGF0YVtqKytdID4+IDM7XG4gICAgICAgICAgICAgICAgc3BxY2QubXUgPSAwO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNwcWNkLmVwc2lsb24gPSBkYXRhW2pdID4+IDM7XG4gICAgICAgICAgICAgICAgc3BxY2QubXUgPSAoZGF0YVtqXSAmIDB4NykgPDwgOCB8IGRhdGFbaiArIDFdO1xuICAgICAgICAgICAgICAgIGogKz0gMjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHNwcWNkcy5wdXNoKHNwcWNkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcWNjLlNQcWNkcyA9IHNwcWNkcztcblxuICAgICAgICAgICAgaWYgKGNvbnRleHQubWFpbkhlYWRlcikge1xuICAgICAgICAgICAgICBjb250ZXh0LlFDQ1tjcWNjXSA9IHFjYztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnRleHQuY3VycmVudFRpbGUuUUNDW2NxY2NdID0gcWNjO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMHhmZjUyOlxuICAgICAgICAgICAgbGVuZ3RoID0gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MTYpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgICAgICAgIGNvbnN0IGNvZCA9IHt9O1xuICAgICAgICAgICAgaiA9IHBvc2l0aW9uICsgMjtcbiAgICAgICAgICAgIGNvbnN0IHNjb2QgPSBkYXRhW2orK107XG4gICAgICAgICAgICBjb2QuZW50cm9weUNvZGVyV2l0aEN1c3RvbVByZWNpbmN0cyA9ICEhKHNjb2QgJiAxKTtcbiAgICAgICAgICAgIGNvZC5zb3BNYXJrZXJVc2VkID0gISEoc2NvZCAmIDIpO1xuICAgICAgICAgICAgY29kLmVwaE1hcmtlclVzZWQgPSAhIShzY29kICYgNCk7XG4gICAgICAgICAgICBjb2QucHJvZ3Jlc3Npb25PcmRlciA9IGRhdGFbaisrXTtcbiAgICAgICAgICAgIGNvZC5sYXllcnNDb3VudCA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBqKTtcbiAgICAgICAgICAgIGogKz0gMjtcbiAgICAgICAgICAgIGNvZC5tdWx0aXBsZUNvbXBvbmVudFRyYW5zZm9ybSA9IGRhdGFbaisrXTtcbiAgICAgICAgICAgIGNvZC5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQgPSBkYXRhW2orK107XG4gICAgICAgICAgICBjb2QueGNiID0gKGRhdGFbaisrXSAmIDB4ZikgKyAyO1xuICAgICAgICAgICAgY29kLnljYiA9IChkYXRhW2orK10gJiAweGYpICsgMjtcbiAgICAgICAgICAgIGNvbnN0IGJsb2NrU3R5bGUgPSBkYXRhW2orK107XG4gICAgICAgICAgICBjb2Quc2VsZWN0aXZlQXJpdGhtZXRpY0NvZGluZ0J5cGFzcyA9ICEhKGJsb2NrU3R5bGUgJiAxKTtcbiAgICAgICAgICAgIGNvZC5yZXNldENvbnRleHRQcm9iYWJpbGl0aWVzID0gISEoYmxvY2tTdHlsZSAmIDIpO1xuICAgICAgICAgICAgY29kLnRlcm1pbmF0aW9uT25FYWNoQ29kaW5nUGFzcyA9ICEhKGJsb2NrU3R5bGUgJiA0KTtcbiAgICAgICAgICAgIGNvZC52ZXJ0aWNhbGx5U3RyaXBlID0gISEoYmxvY2tTdHlsZSAmIDgpO1xuICAgICAgICAgICAgY29kLnByZWRpY3RhYmxlVGVybWluYXRpb24gPSAhIShibG9ja1N0eWxlICYgMTYpO1xuICAgICAgICAgICAgY29kLnNlZ21lbnRhdGlvblN5bWJvbFVzZWQgPSAhIShibG9ja1N0eWxlICYgMzIpO1xuICAgICAgICAgICAgY29kLnJldmVyc2libGVUcmFuc2Zvcm1hdGlvbiA9IGRhdGFbaisrXTtcblxuICAgICAgICAgICAgaWYgKGNvZC5lbnRyb3B5Q29kZXJXaXRoQ3VzdG9tUHJlY2luY3RzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHByZWNpbmN0c1NpemVzID0gW107XG5cbiAgICAgICAgICAgICAgd2hpbGUgKGogPCBsZW5ndGggKyBwb3NpdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZWNpbmN0c1NpemUgPSBkYXRhW2orK107XG4gICAgICAgICAgICAgICAgcHJlY2luY3RzU2l6ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICBQUHg6IHByZWNpbmN0c1NpemUgJiAweGYsXG4gICAgICAgICAgICAgICAgICBQUHk6IHByZWNpbmN0c1NpemUgPj4gNFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29kLnByZWNpbmN0c1NpemVzID0gcHJlY2luY3RzU2l6ZXM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHVuc3VwcG9ydGVkID0gW107XG5cbiAgICAgICAgICAgIGlmIChjb2Quc2VsZWN0aXZlQXJpdGhtZXRpY0NvZGluZ0J5cGFzcykge1xuICAgICAgICAgICAgICB1bnN1cHBvcnRlZC5wdXNoKFwic2VsZWN0aXZlQXJpdGhtZXRpY0NvZGluZ0J5cGFzc1wiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvZC5yZXNldENvbnRleHRQcm9iYWJpbGl0aWVzKSB7XG4gICAgICAgICAgICAgIHVuc3VwcG9ydGVkLnB1c2goXCJyZXNldENvbnRleHRQcm9iYWJpbGl0aWVzXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29kLnRlcm1pbmF0aW9uT25FYWNoQ29kaW5nUGFzcykge1xuICAgICAgICAgICAgICB1bnN1cHBvcnRlZC5wdXNoKFwidGVybWluYXRpb25PbkVhY2hDb2RpbmdQYXNzXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29kLnZlcnRpY2FsbHlTdHJpcGUpIHtcbiAgICAgICAgICAgICAgdW5zdXBwb3J0ZWQucHVzaChcInZlcnRpY2FsbHlTdHJpcGVcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb2QucHJlZGljdGFibGVUZXJtaW5hdGlvbikge1xuICAgICAgICAgICAgICB1bnN1cHBvcnRlZC5wdXNoKFwicHJlZGljdGFibGVUZXJtaW5hdGlvblwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHVuc3VwcG9ydGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgZG9Ob3RSZWNvdmVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKGBKUFg6IFVuc3VwcG9ydGVkIENPRCBvcHRpb25zICgke3Vuc3VwcG9ydGVkLmpvaW4oXCIsIFwiKX0pLmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29udGV4dC5tYWluSGVhZGVyKSB7XG4gICAgICAgICAgICAgIGNvbnRleHQuQ09EID0gY29kO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29udGV4dC5jdXJyZW50VGlsZS5DT0QgPSBjb2Q7XG4gICAgICAgICAgICAgIGNvbnRleHQuY3VycmVudFRpbGUuQ09DID0gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAweGZmOTA6XG4gICAgICAgICAgICBsZW5ndGggPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQxNikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgdGlsZSA9IHt9O1xuICAgICAgICAgICAgdGlsZS5pbmRleCA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDE2KShkYXRhLCBwb3NpdGlvbiArIDIpO1xuICAgICAgICAgICAgdGlsZS5sZW5ndGggPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gKyA0KTtcbiAgICAgICAgICAgIHRpbGUuZGF0YUVuZCA9IHRpbGUubGVuZ3RoICsgcG9zaXRpb24gLSAyO1xuICAgICAgICAgICAgdGlsZS5wYXJ0SW5kZXggPSBkYXRhW3Bvc2l0aW9uICsgOF07XG4gICAgICAgICAgICB0aWxlLnBhcnRzQ291bnQgPSBkYXRhW3Bvc2l0aW9uICsgOV07XG4gICAgICAgICAgICBjb250ZXh0Lm1haW5IZWFkZXIgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKHRpbGUucGFydEluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgIHRpbGUuQ09EID0gY29udGV4dC5DT0Q7XG4gICAgICAgICAgICAgIHRpbGUuQ09DID0gY29udGV4dC5DT0Muc2xpY2UoMCk7XG4gICAgICAgICAgICAgIHRpbGUuUUNEID0gY29udGV4dC5RQ0Q7XG4gICAgICAgICAgICAgIHRpbGUuUUNDID0gY29udGV4dC5RQ0Muc2xpY2UoMCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnRleHQuY3VycmVudFRpbGUgPSB0aWxlO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDB4ZmY5MzpcbiAgICAgICAgICAgIHRpbGUgPSBjb250ZXh0LmN1cnJlbnRUaWxlO1xuXG4gICAgICAgICAgICBpZiAodGlsZS5wYXJ0SW5kZXggPT09IDApIHtcbiAgICAgICAgICAgICAgaW5pdGlhbGl6ZVRpbGUoY29udGV4dCwgdGlsZS5pbmRleCk7XG4gICAgICAgICAgICAgIGJ1aWxkUGFja2V0cyhjb250ZXh0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGVuZ3RoID0gdGlsZS5kYXRhRW5kIC0gcG9zaXRpb247XG4gICAgICAgICAgICBwYXJzZVRpbGVQYWNrZXRzKGNvbnRleHQsIGRhdGEsIHBvc2l0aW9uLCBsZW5ndGgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDB4ZmY1MzpcbiAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIkpQWDogQ29kZXN0cmVhbSBjb2RlIDB4RkY1MyAoQ09DKSBpcyBub3QgaW1wbGVtZW50ZWQuXCIpO1xuXG4gICAgICAgICAgY2FzZSAweGZmNTU6XG4gICAgICAgICAgY2FzZSAweGZmNTc6XG4gICAgICAgICAgY2FzZSAweGZmNTg6XG4gICAgICAgICAgY2FzZSAweGZmNjQ6XG4gICAgICAgICAgICBsZW5ndGggPSAoMCwgX2NvcmVfdXRpbHMucmVhZFVpbnQxNikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBjb2Rlc3RyZWFtIGNvZGU6IFwiICsgY29kZS50b1N0cmluZygxNikpO1xuICAgICAgICB9XG5cbiAgICAgICAgcG9zaXRpb24gKz0gbGVuZ3RoO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChkb05vdFJlY292ZXIgfHwgdGhpcy5mYWlsT25Db3JydXB0ZWRJbWFnZSkge1xuICAgICAgICB0aHJvdyBuZXcgSnB4RXJyb3IoZS5tZXNzYWdlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShgSlBYOiBUcnlpbmcgdG8gcmVjb3ZlciBmcm9tOiBcIiR7ZS5tZXNzYWdlfVwiLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudGlsZXMgPSB0cmFuc2Zvcm1Db21wb25lbnRzKGNvbnRleHQpO1xuICAgIHRoaXMud2lkdGggPSBjb250ZXh0LlNJWi5Yc2l6IC0gY29udGV4dC5TSVouWE9zaXo7XG4gICAgdGhpcy5oZWlnaHQgPSBjb250ZXh0LlNJWi5Zc2l6IC0gY29udGV4dC5TSVouWU9zaXo7XG4gICAgdGhpcy5jb21wb25lbnRzQ291bnQgPSBjb250ZXh0LlNJWi5Dc2l6O1xuICB9XG5cbn1cblxuZXhwb3J0cy5KcHhJbWFnZSA9IEpweEltYWdlO1xuXG5mdW5jdGlvbiBjYWxjdWxhdGVDb21wb25lbnREaW1lbnNpb25zKGNvbXBvbmVudCwgc2l6KSB7XG4gIGNvbXBvbmVudC54MCA9IE1hdGguY2VpbChzaXouWE9zaXogLyBjb21wb25lbnQuWFJzaXopO1xuICBjb21wb25lbnQueDEgPSBNYXRoLmNlaWwoc2l6LlhzaXogLyBjb21wb25lbnQuWFJzaXopO1xuICBjb21wb25lbnQueTAgPSBNYXRoLmNlaWwoc2l6LllPc2l6IC8gY29tcG9uZW50LllSc2l6KTtcbiAgY29tcG9uZW50LnkxID0gTWF0aC5jZWlsKHNpei5Zc2l6IC8gY29tcG9uZW50LllSc2l6KTtcbiAgY29tcG9uZW50LndpZHRoID0gY29tcG9uZW50LngxIC0gY29tcG9uZW50LngwO1xuICBjb21wb25lbnQuaGVpZ2h0ID0gY29tcG9uZW50LnkxIC0gY29tcG9uZW50LnkwO1xufVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVUaWxlR3JpZHMoY29udGV4dCwgY29tcG9uZW50cykge1xuICBjb25zdCBzaXogPSBjb250ZXh0LlNJWjtcbiAgY29uc3QgdGlsZXMgPSBbXTtcbiAgbGV0IHRpbGU7XG4gIGNvbnN0IG51bVh0aWxlcyA9IE1hdGguY2VpbCgoc2l6LlhzaXogLSBzaXouWFRPc2l6KSAvIHNpei5YVHNpeik7XG4gIGNvbnN0IG51bVl0aWxlcyA9IE1hdGguY2VpbCgoc2l6LllzaXogLSBzaXouWVRPc2l6KSAvIHNpei5ZVHNpeik7XG5cbiAgZm9yIChsZXQgcSA9IDA7IHEgPCBudW1ZdGlsZXM7IHErKykge1xuICAgIGZvciAobGV0IHAgPSAwOyBwIDwgbnVtWHRpbGVzOyBwKyspIHtcbiAgICAgIHRpbGUgPSB7fTtcbiAgICAgIHRpbGUudHgwID0gTWF0aC5tYXgoc2l6LlhUT3NpeiArIHAgKiBzaXouWFRzaXosIHNpei5YT3Npeik7XG4gICAgICB0aWxlLnR5MCA9IE1hdGgubWF4KHNpei5ZVE9zaXogKyBxICogc2l6LllUc2l6LCBzaXouWU9zaXopO1xuICAgICAgdGlsZS50eDEgPSBNYXRoLm1pbihzaXouWFRPc2l6ICsgKHAgKyAxKSAqIHNpei5YVHNpeiwgc2l6LlhzaXopO1xuICAgICAgdGlsZS50eTEgPSBNYXRoLm1pbihzaXouWVRPc2l6ICsgKHEgKyAxKSAqIHNpei5ZVHNpeiwgc2l6LllzaXopO1xuICAgICAgdGlsZS53aWR0aCA9IHRpbGUudHgxIC0gdGlsZS50eDA7XG4gICAgICB0aWxlLmhlaWdodCA9IHRpbGUudHkxIC0gdGlsZS50eTA7XG4gICAgICB0aWxlLmNvbXBvbmVudHMgPSBbXTtcbiAgICAgIHRpbGVzLnB1c2godGlsZSk7XG4gICAgfVxuICB9XG5cbiAgY29udGV4dC50aWxlcyA9IHRpbGVzO1xuICBjb25zdCBjb21wb25lbnRzQ291bnQgPSBzaXouQ3NpejtcblxuICBmb3IgKGxldCBpID0gMCwgaWkgPSBjb21wb25lbnRzQ291bnQ7IGkgPCBpaTsgaSsrKSB7XG4gICAgY29uc3QgY29tcG9uZW50ID0gY29tcG9uZW50c1tpXTtcblxuICAgIGZvciAobGV0IGogPSAwLCBqaiA9IHRpbGVzLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgIGNvbnN0IHRpbGVDb21wb25lbnQgPSB7fTtcbiAgICAgIHRpbGUgPSB0aWxlc1tqXTtcbiAgICAgIHRpbGVDb21wb25lbnQudGN4MCA9IE1hdGguY2VpbCh0aWxlLnR4MCAvIGNvbXBvbmVudC5YUnNpeik7XG4gICAgICB0aWxlQ29tcG9uZW50LnRjeTAgPSBNYXRoLmNlaWwodGlsZS50eTAgLyBjb21wb25lbnQuWVJzaXopO1xuICAgICAgdGlsZUNvbXBvbmVudC50Y3gxID0gTWF0aC5jZWlsKHRpbGUudHgxIC8gY29tcG9uZW50LlhSc2l6KTtcbiAgICAgIHRpbGVDb21wb25lbnQudGN5MSA9IE1hdGguY2VpbCh0aWxlLnR5MSAvIGNvbXBvbmVudC5ZUnNpeik7XG4gICAgICB0aWxlQ29tcG9uZW50LndpZHRoID0gdGlsZUNvbXBvbmVudC50Y3gxIC0gdGlsZUNvbXBvbmVudC50Y3gwO1xuICAgICAgdGlsZUNvbXBvbmVudC5oZWlnaHQgPSB0aWxlQ29tcG9uZW50LnRjeTEgLSB0aWxlQ29tcG9uZW50LnRjeTA7XG4gICAgICB0aWxlLmNvbXBvbmVudHNbaV0gPSB0aWxlQ29tcG9uZW50O1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRCbG9ja3NEaW1lbnNpb25zKGNvbnRleHQsIGNvbXBvbmVudCwgcikge1xuICBjb25zdCBjb2RPckNvYyA9IGNvbXBvbmVudC5jb2RpbmdTdHlsZVBhcmFtZXRlcnM7XG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuXG4gIGlmICghY29kT3JDb2MuZW50cm9weUNvZGVyV2l0aEN1c3RvbVByZWNpbmN0cykge1xuICAgIHJlc3VsdC5QUHggPSAxNTtcbiAgICByZXN1bHQuUFB5ID0gMTU7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0LlBQeCA9IGNvZE9yQ29jLnByZWNpbmN0c1NpemVzW3JdLlBQeDtcbiAgICByZXN1bHQuUFB5ID0gY29kT3JDb2MucHJlY2luY3RzU2l6ZXNbcl0uUFB5O1xuICB9XG5cbiAgcmVzdWx0LnhjYl8gPSByID4gMCA/IE1hdGgubWluKGNvZE9yQ29jLnhjYiwgcmVzdWx0LlBQeCAtIDEpIDogTWF0aC5taW4oY29kT3JDb2MueGNiLCByZXN1bHQuUFB4KTtcbiAgcmVzdWx0LnljYl8gPSByID4gMCA/IE1hdGgubWluKGNvZE9yQ29jLnljYiwgcmVzdWx0LlBQeSAtIDEpIDogTWF0aC5taW4oY29kT3JDb2MueWNiLCByZXN1bHQuUFB5KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gYnVpbGRQcmVjaW5jdHMoY29udGV4dCwgcmVzb2x1dGlvbiwgZGltZW5zaW9ucykge1xuICBjb25zdCBwcmVjaW5jdFdpZHRoID0gMSA8PCBkaW1lbnNpb25zLlBQeDtcbiAgY29uc3QgcHJlY2luY3RIZWlnaHQgPSAxIDw8IGRpbWVuc2lvbnMuUFB5O1xuICBjb25zdCBpc1plcm9SZXMgPSByZXNvbHV0aW9uLnJlc0xldmVsID09PSAwO1xuICBjb25zdCBwcmVjaW5jdFdpZHRoSW5TdWJiYW5kID0gMSA8PCBkaW1lbnNpb25zLlBQeCArIChpc1plcm9SZXMgPyAwIDogLTEpO1xuICBjb25zdCBwcmVjaW5jdEhlaWdodEluU3ViYmFuZCA9IDEgPDwgZGltZW5zaW9ucy5QUHkgKyAoaXNaZXJvUmVzID8gMCA6IC0xKTtcbiAgY29uc3QgbnVtcHJlY2luY3Rzd2lkZSA9IHJlc29sdXRpb24udHJ4MSA+IHJlc29sdXRpb24udHJ4MCA/IE1hdGguY2VpbChyZXNvbHV0aW9uLnRyeDEgLyBwcmVjaW5jdFdpZHRoKSAtIE1hdGguZmxvb3IocmVzb2x1dGlvbi50cngwIC8gcHJlY2luY3RXaWR0aCkgOiAwO1xuICBjb25zdCBudW1wcmVjaW5jdHNoaWdoID0gcmVzb2x1dGlvbi50cnkxID4gcmVzb2x1dGlvbi50cnkwID8gTWF0aC5jZWlsKHJlc29sdXRpb24udHJ5MSAvIHByZWNpbmN0SGVpZ2h0KSAtIE1hdGguZmxvb3IocmVzb2x1dGlvbi50cnkwIC8gcHJlY2luY3RIZWlnaHQpIDogMDtcbiAgY29uc3QgbnVtcHJlY2luY3RzID0gbnVtcHJlY2luY3Rzd2lkZSAqIG51bXByZWNpbmN0c2hpZ2g7XG4gIHJlc29sdXRpb24ucHJlY2luY3RQYXJhbWV0ZXJzID0ge1xuICAgIHByZWNpbmN0V2lkdGgsXG4gICAgcHJlY2luY3RIZWlnaHQsXG4gICAgbnVtcHJlY2luY3Rzd2lkZSxcbiAgICBudW1wcmVjaW5jdHNoaWdoLFxuICAgIG51bXByZWNpbmN0cyxcbiAgICBwcmVjaW5jdFdpZHRoSW5TdWJiYW5kLFxuICAgIHByZWNpbmN0SGVpZ2h0SW5TdWJiYW5kXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQ29kZWJsb2Nrcyhjb250ZXh0LCBzdWJiYW5kLCBkaW1lbnNpb25zKSB7XG4gIGNvbnN0IHhjYl8gPSBkaW1lbnNpb25zLnhjYl87XG4gIGNvbnN0IHljYl8gPSBkaW1lbnNpb25zLnljYl87XG4gIGNvbnN0IGNvZGVibG9ja1dpZHRoID0gMSA8PCB4Y2JfO1xuICBjb25zdCBjb2RlYmxvY2tIZWlnaHQgPSAxIDw8IHljYl87XG4gIGNvbnN0IGNieDAgPSBzdWJiYW5kLnRieDAgPj4geGNiXztcbiAgY29uc3QgY2J5MCA9IHN1YmJhbmQudGJ5MCA+PiB5Y2JfO1xuICBjb25zdCBjYngxID0gc3ViYmFuZC50YngxICsgY29kZWJsb2NrV2lkdGggLSAxID4+IHhjYl87XG4gIGNvbnN0IGNieTEgPSBzdWJiYW5kLnRieTEgKyBjb2RlYmxvY2tIZWlnaHQgLSAxID4+IHljYl87XG4gIGNvbnN0IHByZWNpbmN0UGFyYW1ldGVycyA9IHN1YmJhbmQucmVzb2x1dGlvbi5wcmVjaW5jdFBhcmFtZXRlcnM7XG4gIGNvbnN0IGNvZGVibG9ja3MgPSBbXTtcbiAgY29uc3QgcHJlY2luY3RzID0gW107XG4gIGxldCBpLCBqLCBjb2RlYmxvY2ssIHByZWNpbmN0TnVtYmVyO1xuXG4gIGZvciAoaiA9IGNieTA7IGogPCBjYnkxOyBqKyspIHtcbiAgICBmb3IgKGkgPSBjYngwOyBpIDwgY2J4MTsgaSsrKSB7XG4gICAgICBjb2RlYmxvY2sgPSB7XG4gICAgICAgIGNieDogaSxcbiAgICAgICAgY2J5OiBqLFxuICAgICAgICB0YngwOiBjb2RlYmxvY2tXaWR0aCAqIGksXG4gICAgICAgIHRieTA6IGNvZGVibG9ja0hlaWdodCAqIGosXG4gICAgICAgIHRieDE6IGNvZGVibG9ja1dpZHRoICogKGkgKyAxKSxcbiAgICAgICAgdGJ5MTogY29kZWJsb2NrSGVpZ2h0ICogKGogKyAxKVxuICAgICAgfTtcbiAgICAgIGNvZGVibG9jay50YngwXyA9IE1hdGgubWF4KHN1YmJhbmQudGJ4MCwgY29kZWJsb2NrLnRieDApO1xuICAgICAgY29kZWJsb2NrLnRieTBfID0gTWF0aC5tYXgoc3ViYmFuZC50YnkwLCBjb2RlYmxvY2sudGJ5MCk7XG4gICAgICBjb2RlYmxvY2sudGJ4MV8gPSBNYXRoLm1pbihzdWJiYW5kLnRieDEsIGNvZGVibG9jay50YngxKTtcbiAgICAgIGNvZGVibG9jay50YnkxXyA9IE1hdGgubWluKHN1YmJhbmQudGJ5MSwgY29kZWJsb2NrLnRieTEpO1xuICAgICAgY29uc3QgcGkgPSBNYXRoLmZsb29yKChjb2RlYmxvY2sudGJ4MF8gLSBzdWJiYW5kLnRieDApIC8gcHJlY2luY3RQYXJhbWV0ZXJzLnByZWNpbmN0V2lkdGhJblN1YmJhbmQpO1xuICAgICAgY29uc3QgcGogPSBNYXRoLmZsb29yKChjb2RlYmxvY2sudGJ5MF8gLSBzdWJiYW5kLnRieTApIC8gcHJlY2luY3RQYXJhbWV0ZXJzLnByZWNpbmN0SGVpZ2h0SW5TdWJiYW5kKTtcbiAgICAgIHByZWNpbmN0TnVtYmVyID0gcGkgKyBwaiAqIHByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHN3aWRlO1xuICAgICAgY29kZWJsb2NrLnByZWNpbmN0TnVtYmVyID0gcHJlY2luY3ROdW1iZXI7XG4gICAgICBjb2RlYmxvY2suc3ViYmFuZFR5cGUgPSBzdWJiYW5kLnR5cGU7XG4gICAgICBjb2RlYmxvY2suTGJsb2NrID0gMztcblxuICAgICAgaWYgKGNvZGVibG9jay50YngxXyA8PSBjb2RlYmxvY2sudGJ4MF8gfHwgY29kZWJsb2NrLnRieTFfIDw9IGNvZGVibG9jay50YnkwXykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29kZWJsb2Nrcy5wdXNoKGNvZGVibG9jayk7XG4gICAgICBsZXQgcHJlY2luY3QgPSBwcmVjaW5jdHNbcHJlY2luY3ROdW1iZXJdO1xuXG4gICAgICBpZiAocHJlY2luY3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoaSA8IHByZWNpbmN0LmNieE1pbikge1xuICAgICAgICAgIHByZWNpbmN0LmNieE1pbiA9IGk7XG4gICAgICAgIH0gZWxzZSBpZiAoaSA+IHByZWNpbmN0LmNieE1heCkge1xuICAgICAgICAgIHByZWNpbmN0LmNieE1heCA9IGk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaiA8IHByZWNpbmN0LmNieU1pbikge1xuICAgICAgICAgIHByZWNpbmN0LmNieE1pbiA9IGo7XG4gICAgICAgIH0gZWxzZSBpZiAoaiA+IHByZWNpbmN0LmNieU1heCkge1xuICAgICAgICAgIHByZWNpbmN0LmNieU1heCA9IGo7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByZWNpbmN0c1twcmVjaW5jdE51bWJlcl0gPSBwcmVjaW5jdCA9IHtcbiAgICAgICAgICBjYnhNaW46IGksXG4gICAgICAgICAgY2J5TWluOiBqLFxuICAgICAgICAgIGNieE1heDogaSxcbiAgICAgICAgICBjYnlNYXg6IGpcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgY29kZWJsb2NrLnByZWNpbmN0ID0gcHJlY2luY3Q7XG4gICAgfVxuICB9XG5cbiAgc3ViYmFuZC5jb2RlYmxvY2tQYXJhbWV0ZXJzID0ge1xuICAgIGNvZGVibG9ja1dpZHRoOiB4Y2JfLFxuICAgIGNvZGVibG9ja0hlaWdodDogeWNiXyxcbiAgICBudW1jb2RlYmxvY2t3aWRlOiBjYngxIC0gY2J4MCArIDEsXG4gICAgbnVtY29kZWJsb2NraGlnaDogY2J5MSAtIGNieTAgKyAxXG4gIH07XG4gIHN1YmJhbmQuY29kZWJsb2NrcyA9IGNvZGVibG9ja3M7XG4gIHN1YmJhbmQucHJlY2luY3RzID0gcHJlY2luY3RzO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVQYWNrZXQocmVzb2x1dGlvbiwgcHJlY2luY3ROdW1iZXIsIGxheWVyTnVtYmVyKSB7XG4gIGNvbnN0IHByZWNpbmN0Q29kZWJsb2NrcyA9IFtdO1xuICBjb25zdCBzdWJiYW5kcyA9IHJlc29sdXRpb24uc3ViYmFuZHM7XG5cbiAgZm9yIChsZXQgaSA9IDAsIGlpID0gc3ViYmFuZHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgIGNvbnN0IHN1YmJhbmQgPSBzdWJiYW5kc1tpXTtcbiAgICBjb25zdCBjb2RlYmxvY2tzID0gc3ViYmFuZC5jb2RlYmxvY2tzO1xuXG4gICAgZm9yIChsZXQgaiA9IDAsIGpqID0gY29kZWJsb2Nrcy5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICBjb25zdCBjb2RlYmxvY2sgPSBjb2RlYmxvY2tzW2pdO1xuXG4gICAgICBpZiAoY29kZWJsb2NrLnByZWNpbmN0TnVtYmVyICE9PSBwcmVjaW5jdE51bWJlcikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgcHJlY2luY3RDb2RlYmxvY2tzLnB1c2goY29kZWJsb2NrKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxheWVyTnVtYmVyLFxuICAgIGNvZGVibG9ja3M6IHByZWNpbmN0Q29kZWJsb2Nrc1xuICB9O1xufVxuXG5mdW5jdGlvbiBMYXllclJlc29sdXRpb25Db21wb25lbnRQb3NpdGlvbkl0ZXJhdG9yKGNvbnRleHQpIHtcbiAgY29uc3Qgc2l6ID0gY29udGV4dC5TSVo7XG4gIGNvbnN0IHRpbGVJbmRleCA9IGNvbnRleHQuY3VycmVudFRpbGUuaW5kZXg7XG4gIGNvbnN0IHRpbGUgPSBjb250ZXh0LnRpbGVzW3RpbGVJbmRleF07XG4gIGNvbnN0IGxheWVyc0NvdW50ID0gdGlsZS5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50O1xuICBjb25zdCBjb21wb25lbnRzQ291bnQgPSBzaXouQ3NpejtcbiAgbGV0IG1heERlY29tcG9zaXRpb25MZXZlbHNDb3VudCA9IDA7XG5cbiAgZm9yIChsZXQgcSA9IDA7IHEgPCBjb21wb25lbnRzQ291bnQ7IHErKykge1xuICAgIG1heERlY29tcG9zaXRpb25MZXZlbHNDb3VudCA9IE1hdGgubWF4KG1heERlY29tcG9zaXRpb25MZXZlbHNDb3VudCwgdGlsZS5jb21wb25lbnRzW3FdLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpO1xuICB9XG5cbiAgbGV0IGwgPSAwLFxuICAgICAgciA9IDAsXG4gICAgICBpID0gMCxcbiAgICAgIGsgPSAwO1xuXG4gIHRoaXMubmV4dFBhY2tldCA9IGZ1bmN0aW9uIEpweEltYWdlX25leHRQYWNrZXQoKSB7XG4gICAgZm9yICg7IGwgPCBsYXllcnNDb3VudDsgbCsrKSB7XG4gICAgICBmb3IgKDsgciA8PSBtYXhEZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQ7IHIrKykge1xuICAgICAgICBmb3IgKDsgaSA8IGNvbXBvbmVudHNDb3VudDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gdGlsZS5jb21wb25lbnRzW2ldO1xuXG4gICAgICAgICAgaWYgKHIgPiBjb21wb25lbnQuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgcmVzb2x1dGlvbiA9IGNvbXBvbmVudC5yZXNvbHV0aW9uc1tyXTtcbiAgICAgICAgICBjb25zdCBudW1wcmVjaW5jdHMgPSByZXNvbHV0aW9uLnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHM7XG5cbiAgICAgICAgICBmb3IgKDsgayA8IG51bXByZWNpbmN0czspIHtcbiAgICAgICAgICAgIGNvbnN0IHBhY2tldCA9IGNyZWF0ZVBhY2tldChyZXNvbHV0aW9uLCBrLCBsKTtcbiAgICAgICAgICAgIGsrKztcbiAgICAgICAgICAgIHJldHVybiBwYWNrZXQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgayA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBpID0gMDtcbiAgICAgIH1cblxuICAgICAgciA9IDA7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEpweEVycm9yKFwiT3V0IG9mIHBhY2tldHNcIik7XG4gIH07XG59XG5cbmZ1bmN0aW9uIFJlc29sdXRpb25MYXllckNvbXBvbmVudFBvc2l0aW9uSXRlcmF0b3IoY29udGV4dCkge1xuICBjb25zdCBzaXogPSBjb250ZXh0LlNJWjtcbiAgY29uc3QgdGlsZUluZGV4ID0gY29udGV4dC5jdXJyZW50VGlsZS5pbmRleDtcbiAgY29uc3QgdGlsZSA9IGNvbnRleHQudGlsZXNbdGlsZUluZGV4XTtcbiAgY29uc3QgbGF5ZXJzQ291bnQgPSB0aWxlLmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnMubGF5ZXJzQ291bnQ7XG4gIGNvbnN0IGNvbXBvbmVudHNDb3VudCA9IHNpei5Dc2l6O1xuICBsZXQgbWF4RGVjb21wb3NpdGlvbkxldmVsc0NvdW50ID0gMDtcblxuICBmb3IgKGxldCBxID0gMDsgcSA8IGNvbXBvbmVudHNDb3VudDsgcSsrKSB7XG4gICAgbWF4RGVjb21wb3NpdGlvbkxldmVsc0NvdW50ID0gTWF0aC5tYXgobWF4RGVjb21wb3NpdGlvbkxldmVsc0NvdW50LCB0aWxlLmNvbXBvbmVudHNbcV0uY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCk7XG4gIH1cblxuICBsZXQgciA9IDAsXG4gICAgICBsID0gMCxcbiAgICAgIGkgPSAwLFxuICAgICAgayA9IDA7XG5cbiAgdGhpcy5uZXh0UGFja2V0ID0gZnVuY3Rpb24gSnB4SW1hZ2VfbmV4dFBhY2tldCgpIHtcbiAgICBmb3IgKDsgciA8PSBtYXhEZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQ7IHIrKykge1xuICAgICAgZm9yICg7IGwgPCBsYXllcnNDb3VudDsgbCsrKSB7XG4gICAgICAgIGZvciAoOyBpIDwgY29tcG9uZW50c0NvdW50OyBpKyspIHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnQgPSB0aWxlLmNvbXBvbmVudHNbaV07XG5cbiAgICAgICAgICBpZiAociA+IGNvbXBvbmVudC5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCByZXNvbHV0aW9uID0gY29tcG9uZW50LnJlc29sdXRpb25zW3JdO1xuICAgICAgICAgIGNvbnN0IG51bXByZWNpbmN0cyA9IHJlc29sdXRpb24ucHJlY2luY3RQYXJhbWV0ZXJzLm51bXByZWNpbmN0cztcblxuICAgICAgICAgIGZvciAoOyBrIDwgbnVtcHJlY2luY3RzOykge1xuICAgICAgICAgICAgY29uc3QgcGFja2V0ID0gY3JlYXRlUGFja2V0KHJlc29sdXRpb24sIGssIGwpO1xuICAgICAgICAgICAgaysrO1xuICAgICAgICAgICAgcmV0dXJuIHBhY2tldDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBrID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGkgPSAwO1xuICAgICAgfVxuXG4gICAgICBsID0gMDtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgSnB4RXJyb3IoXCJPdXQgb2YgcGFja2V0c1wiKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gUmVzb2x1dGlvblBvc2l0aW9uQ29tcG9uZW50TGF5ZXJJdGVyYXRvcihjb250ZXh0KSB7XG4gIGNvbnN0IHNpeiA9IGNvbnRleHQuU0laO1xuICBjb25zdCB0aWxlSW5kZXggPSBjb250ZXh0LmN1cnJlbnRUaWxlLmluZGV4O1xuICBjb25zdCB0aWxlID0gY29udGV4dC50aWxlc1t0aWxlSW5kZXhdO1xuICBjb25zdCBsYXllcnNDb3VudCA9IHRpbGUuY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycy5sYXllcnNDb3VudDtcbiAgY29uc3QgY29tcG9uZW50c0NvdW50ID0gc2l6LkNzaXo7XG4gIGxldCBsLCByLCBjLCBwO1xuICBsZXQgbWF4RGVjb21wb3NpdGlvbkxldmVsc0NvdW50ID0gMDtcblxuICBmb3IgKGMgPSAwOyBjIDwgY29tcG9uZW50c0NvdW50OyBjKyspIHtcbiAgICBjb25zdCBjb21wb25lbnQgPSB0aWxlLmNvbXBvbmVudHNbY107XG4gICAgbWF4RGVjb21wb3NpdGlvbkxldmVsc0NvdW50ID0gTWF0aC5tYXgobWF4RGVjb21wb3NpdGlvbkxldmVsc0NvdW50LCBjb21wb25lbnQuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCk7XG4gIH1cblxuICBjb25zdCBtYXhOdW1QcmVjaW5jdHNJbkxldmVsID0gbmV3IEludDMyQXJyYXkobWF4RGVjb21wb3NpdGlvbkxldmVsc0NvdW50ICsgMSk7XG5cbiAgZm9yIChyID0gMDsgciA8PSBtYXhEZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQ7ICsrcikge1xuICAgIGxldCBtYXhOdW1QcmVjaW5jdHMgPSAwO1xuXG4gICAgZm9yIChjID0gMDsgYyA8IGNvbXBvbmVudHNDb3VudDsgKytjKSB7XG4gICAgICBjb25zdCByZXNvbHV0aW9ucyA9IHRpbGUuY29tcG9uZW50c1tjXS5yZXNvbHV0aW9ucztcblxuICAgICAgaWYgKHIgPCByZXNvbHV0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgbWF4TnVtUHJlY2luY3RzID0gTWF0aC5tYXgobWF4TnVtUHJlY2luY3RzLCByZXNvbHV0aW9uc1tyXS5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3RzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBtYXhOdW1QcmVjaW5jdHNJbkxldmVsW3JdID0gbWF4TnVtUHJlY2luY3RzO1xuICB9XG5cbiAgbCA9IDA7XG4gIHIgPSAwO1xuICBjID0gMDtcbiAgcCA9IDA7XG5cbiAgdGhpcy5uZXh0UGFja2V0ID0gZnVuY3Rpb24gSnB4SW1hZ2VfbmV4dFBhY2tldCgpIHtcbiAgICBmb3IgKDsgciA8PSBtYXhEZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQ7IHIrKykge1xuICAgICAgZm9yICg7IHAgPCBtYXhOdW1QcmVjaW5jdHNJbkxldmVsW3JdOyBwKyspIHtcbiAgICAgICAgZm9yICg7IGMgPCBjb21wb25lbnRzQ291bnQ7IGMrKykge1xuICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRpbGUuY29tcG9uZW50c1tjXTtcblxuICAgICAgICAgIGlmIChyID4gY29tcG9uZW50LmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHJlc29sdXRpb24gPSBjb21wb25lbnQucmVzb2x1dGlvbnNbcl07XG4gICAgICAgICAgY29uc3QgbnVtcHJlY2luY3RzID0gcmVzb2x1dGlvbi5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3RzO1xuXG4gICAgICAgICAgaWYgKHAgPj0gbnVtcHJlY2luY3RzKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3IgKDsgbCA8IGxheWVyc0NvdW50Oykge1xuICAgICAgICAgICAgY29uc3QgcGFja2V0ID0gY3JlYXRlUGFja2V0KHJlc29sdXRpb24sIHAsIGwpO1xuICAgICAgICAgICAgbCsrO1xuICAgICAgICAgICAgcmV0dXJuIHBhY2tldDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGMgPSAwO1xuICAgICAgfVxuXG4gICAgICBwID0gMDtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgSnB4RXJyb3IoXCJPdXQgb2YgcGFja2V0c1wiKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gUG9zaXRpb25Db21wb25lbnRSZXNvbHV0aW9uTGF5ZXJJdGVyYXRvcihjb250ZXh0KSB7XG4gIGNvbnN0IHNpeiA9IGNvbnRleHQuU0laO1xuICBjb25zdCB0aWxlSW5kZXggPSBjb250ZXh0LmN1cnJlbnRUaWxlLmluZGV4O1xuICBjb25zdCB0aWxlID0gY29udGV4dC50aWxlc1t0aWxlSW5kZXhdO1xuICBjb25zdCBsYXllcnNDb3VudCA9IHRpbGUuY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycy5sYXllcnNDb3VudDtcbiAgY29uc3QgY29tcG9uZW50c0NvdW50ID0gc2l6LkNzaXo7XG4gIGNvbnN0IHByZWNpbmN0c1NpemVzID0gZ2V0UHJlY2luY3RTaXplc0luSW1hZ2VTY2FsZSh0aWxlKTtcbiAgY29uc3QgcHJlY2luY3RzSXRlcmF0aW9uU2l6ZXMgPSBwcmVjaW5jdHNTaXplcztcbiAgbGV0IGwgPSAwLFxuICAgICAgciA9IDAsXG4gICAgICBjID0gMCxcbiAgICAgIHB4ID0gMCxcbiAgICAgIHB5ID0gMDtcblxuICB0aGlzLm5leHRQYWNrZXQgPSBmdW5jdGlvbiBKcHhJbWFnZV9uZXh0UGFja2V0KCkge1xuICAgIGZvciAoOyBweSA8IHByZWNpbmN0c0l0ZXJhdGlvblNpemVzLm1heE51bUhpZ2g7IHB5KyspIHtcbiAgICAgIGZvciAoOyBweCA8IHByZWNpbmN0c0l0ZXJhdGlvblNpemVzLm1heE51bVdpZGU7IHB4KyspIHtcbiAgICAgICAgZm9yICg7IGMgPCBjb21wb25lbnRzQ291bnQ7IGMrKykge1xuICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRpbGUuY29tcG9uZW50c1tjXTtcbiAgICAgICAgICBjb25zdCBkZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQgPSBjb21wb25lbnQuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudDtcblxuICAgICAgICAgIGZvciAoOyByIDw9IGRlY29tcG9zaXRpb25MZXZlbHNDb3VudDsgcisrKSB7XG4gICAgICAgICAgICBjb25zdCByZXNvbHV0aW9uID0gY29tcG9uZW50LnJlc29sdXRpb25zW3JdO1xuICAgICAgICAgICAgY29uc3Qgc2l6ZUluSW1hZ2VTY2FsZSA9IHByZWNpbmN0c1NpemVzLmNvbXBvbmVudHNbY10ucmVzb2x1dGlvbnNbcl07XG4gICAgICAgICAgICBjb25zdCBrID0gZ2V0UHJlY2luY3RJbmRleElmRXhpc3QocHgsIHB5LCBzaXplSW5JbWFnZVNjYWxlLCBwcmVjaW5jdHNJdGVyYXRpb25TaXplcywgcmVzb2x1dGlvbik7XG5cbiAgICAgICAgICAgIGlmIChrID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKDsgbCA8IGxheWVyc0NvdW50Oykge1xuICAgICAgICAgICAgICBjb25zdCBwYWNrZXQgPSBjcmVhdGVQYWNrZXQocmVzb2x1dGlvbiwgaywgbCk7XG4gICAgICAgICAgICAgIGwrKztcbiAgICAgICAgICAgICAgcmV0dXJuIHBhY2tldDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbCA9IDA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgciA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBjID0gMDtcbiAgICAgIH1cblxuICAgICAgcHggPSAwO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBKcHhFcnJvcihcIk91dCBvZiBwYWNrZXRzXCIpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBDb21wb25lbnRQb3NpdGlvblJlc29sdXRpb25MYXllckl0ZXJhdG9yKGNvbnRleHQpIHtcbiAgY29uc3Qgc2l6ID0gY29udGV4dC5TSVo7XG4gIGNvbnN0IHRpbGVJbmRleCA9IGNvbnRleHQuY3VycmVudFRpbGUuaW5kZXg7XG4gIGNvbnN0IHRpbGUgPSBjb250ZXh0LnRpbGVzW3RpbGVJbmRleF07XG4gIGNvbnN0IGxheWVyc0NvdW50ID0gdGlsZS5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50O1xuICBjb25zdCBjb21wb25lbnRzQ291bnQgPSBzaXouQ3NpejtcbiAgY29uc3QgcHJlY2luY3RzU2l6ZXMgPSBnZXRQcmVjaW5jdFNpemVzSW5JbWFnZVNjYWxlKHRpbGUpO1xuICBsZXQgbCA9IDAsXG4gICAgICByID0gMCxcbiAgICAgIGMgPSAwLFxuICAgICAgcHggPSAwLFxuICAgICAgcHkgPSAwO1xuXG4gIHRoaXMubmV4dFBhY2tldCA9IGZ1bmN0aW9uIEpweEltYWdlX25leHRQYWNrZXQoKSB7XG4gICAgZm9yICg7IGMgPCBjb21wb25lbnRzQ291bnQ7ICsrYykge1xuICAgICAgY29uc3QgY29tcG9uZW50ID0gdGlsZS5jb21wb25lbnRzW2NdO1xuICAgICAgY29uc3QgcHJlY2luY3RzSXRlcmF0aW9uU2l6ZXMgPSBwcmVjaW5jdHNTaXplcy5jb21wb25lbnRzW2NdO1xuICAgICAgY29uc3QgZGVjb21wb3NpdGlvbkxldmVsc0NvdW50ID0gY29tcG9uZW50LmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQ7XG5cbiAgICAgIGZvciAoOyBweSA8IHByZWNpbmN0c0l0ZXJhdGlvblNpemVzLm1heE51bUhpZ2g7IHB5KyspIHtcbiAgICAgICAgZm9yICg7IHB4IDwgcHJlY2luY3RzSXRlcmF0aW9uU2l6ZXMubWF4TnVtV2lkZTsgcHgrKykge1xuICAgICAgICAgIGZvciAoOyByIDw9IGRlY29tcG9zaXRpb25MZXZlbHNDb3VudDsgcisrKSB7XG4gICAgICAgICAgICBjb25zdCByZXNvbHV0aW9uID0gY29tcG9uZW50LnJlc29sdXRpb25zW3JdO1xuICAgICAgICAgICAgY29uc3Qgc2l6ZUluSW1hZ2VTY2FsZSA9IHByZWNpbmN0c0l0ZXJhdGlvblNpemVzLnJlc29sdXRpb25zW3JdO1xuICAgICAgICAgICAgY29uc3QgayA9IGdldFByZWNpbmN0SW5kZXhJZkV4aXN0KHB4LCBweSwgc2l6ZUluSW1hZ2VTY2FsZSwgcHJlY2luY3RzSXRlcmF0aW9uU2l6ZXMsIHJlc29sdXRpb24pO1xuXG4gICAgICAgICAgICBpZiAoayA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yICg7IGwgPCBsYXllcnNDb3VudDspIHtcbiAgICAgICAgICAgICAgY29uc3QgcGFja2V0ID0gY3JlYXRlUGFja2V0KHJlc29sdXRpb24sIGssIGwpO1xuICAgICAgICAgICAgICBsKys7XG4gICAgICAgICAgICAgIHJldHVybiBwYWNrZXQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGwgPSAwO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHIgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgcHggPSAwO1xuICAgICAgfVxuXG4gICAgICBweSA9IDA7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEpweEVycm9yKFwiT3V0IG9mIHBhY2tldHNcIik7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFByZWNpbmN0SW5kZXhJZkV4aXN0KHB4SW5kZXgsIHB5SW5kZXgsIHNpemVJbkltYWdlU2NhbGUsIHByZWNpbmN0SXRlcmF0aW9uU2l6ZXMsIHJlc29sdXRpb24pIHtcbiAgY29uc3QgcG9zWCA9IHB4SW5kZXggKiBwcmVjaW5jdEl0ZXJhdGlvblNpemVzLm1pbldpZHRoO1xuICBjb25zdCBwb3NZID0gcHlJbmRleCAqIHByZWNpbmN0SXRlcmF0aW9uU2l6ZXMubWluSGVpZ2h0O1xuXG4gIGlmIChwb3NYICUgc2l6ZUluSW1hZ2VTY2FsZS53aWR0aCAhPT0gMCB8fCBwb3NZICUgc2l6ZUluSW1hZ2VTY2FsZS5oZWlnaHQgIT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IHN0YXJ0UHJlY2luY3RSb3dJbmRleCA9IHBvc1kgLyBzaXplSW5JbWFnZVNjYWxlLndpZHRoICogcmVzb2x1dGlvbi5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3Rzd2lkZTtcbiAgcmV0dXJuIHBvc1ggLyBzaXplSW5JbWFnZVNjYWxlLmhlaWdodCArIHN0YXJ0UHJlY2luY3RSb3dJbmRleDtcbn1cblxuZnVuY3Rpb24gZ2V0UHJlY2luY3RTaXplc0luSW1hZ2VTY2FsZSh0aWxlKSB7XG4gIGNvbnN0IGNvbXBvbmVudHNDb3VudCA9IHRpbGUuY29tcG9uZW50cy5sZW5ndGg7XG4gIGxldCBtaW5XaWR0aCA9IE51bWJlci5NQVhfVkFMVUU7XG4gIGxldCBtaW5IZWlnaHQgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICBsZXQgbWF4TnVtV2lkZSA9IDA7XG4gIGxldCBtYXhOdW1IaWdoID0gMDtcbiAgY29uc3Qgc2l6ZVBlckNvbXBvbmVudCA9IG5ldyBBcnJheShjb21wb25lbnRzQ291bnQpO1xuXG4gIGZvciAobGV0IGMgPSAwOyBjIDwgY29tcG9uZW50c0NvdW50OyBjKyspIHtcbiAgICBjb25zdCBjb21wb25lbnQgPSB0aWxlLmNvbXBvbmVudHNbY107XG4gICAgY29uc3QgZGVjb21wb3NpdGlvbkxldmVsc0NvdW50ID0gY29tcG9uZW50LmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQ7XG4gICAgY29uc3Qgc2l6ZVBlclJlc29sdXRpb24gPSBuZXcgQXJyYXkoZGVjb21wb3NpdGlvbkxldmVsc0NvdW50ICsgMSk7XG4gICAgbGV0IG1pbldpZHRoQ3VycmVudENvbXBvbmVudCA9IE51bWJlci5NQVhfVkFMVUU7XG4gICAgbGV0IG1pbkhlaWdodEN1cnJlbnRDb21wb25lbnQgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgIGxldCBtYXhOdW1XaWRlQ3VycmVudENvbXBvbmVudCA9IDA7XG4gICAgbGV0IG1heE51bUhpZ2hDdXJyZW50Q29tcG9uZW50ID0gMDtcbiAgICBsZXQgc2NhbGUgPSAxO1xuXG4gICAgZm9yIChsZXQgciA9IGRlY29tcG9zaXRpb25MZXZlbHNDb3VudDsgciA+PSAwOyAtLXIpIHtcbiAgICAgIGNvbnN0IHJlc29sdXRpb24gPSBjb21wb25lbnQucmVzb2x1dGlvbnNbcl07XG4gICAgICBjb25zdCB3aWR0aEN1cnJlbnRSZXNvbHV0aW9uID0gc2NhbGUgKiByZXNvbHV0aW9uLnByZWNpbmN0UGFyYW1ldGVycy5wcmVjaW5jdFdpZHRoO1xuICAgICAgY29uc3QgaGVpZ2h0Q3VycmVudFJlc29sdXRpb24gPSBzY2FsZSAqIHJlc29sdXRpb24ucHJlY2luY3RQYXJhbWV0ZXJzLnByZWNpbmN0SGVpZ2h0O1xuICAgICAgbWluV2lkdGhDdXJyZW50Q29tcG9uZW50ID0gTWF0aC5taW4obWluV2lkdGhDdXJyZW50Q29tcG9uZW50LCB3aWR0aEN1cnJlbnRSZXNvbHV0aW9uKTtcbiAgICAgIG1pbkhlaWdodEN1cnJlbnRDb21wb25lbnQgPSBNYXRoLm1pbihtaW5IZWlnaHRDdXJyZW50Q29tcG9uZW50LCBoZWlnaHRDdXJyZW50UmVzb2x1dGlvbik7XG4gICAgICBtYXhOdW1XaWRlQ3VycmVudENvbXBvbmVudCA9IE1hdGgubWF4KG1heE51bVdpZGVDdXJyZW50Q29tcG9uZW50LCByZXNvbHV0aW9uLnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHN3aWRlKTtcbiAgICAgIG1heE51bUhpZ2hDdXJyZW50Q29tcG9uZW50ID0gTWF0aC5tYXgobWF4TnVtSGlnaEN1cnJlbnRDb21wb25lbnQsIHJlc29sdXRpb24ucHJlY2luY3RQYXJhbWV0ZXJzLm51bXByZWNpbmN0c2hpZ2gpO1xuICAgICAgc2l6ZVBlclJlc29sdXRpb25bcl0gPSB7XG4gICAgICAgIHdpZHRoOiB3aWR0aEN1cnJlbnRSZXNvbHV0aW9uLFxuICAgICAgICBoZWlnaHQ6IGhlaWdodEN1cnJlbnRSZXNvbHV0aW9uXG4gICAgICB9O1xuICAgICAgc2NhbGUgPDw9IDE7XG4gICAgfVxuXG4gICAgbWluV2lkdGggPSBNYXRoLm1pbihtaW5XaWR0aCwgbWluV2lkdGhDdXJyZW50Q29tcG9uZW50KTtcbiAgICBtaW5IZWlnaHQgPSBNYXRoLm1pbihtaW5IZWlnaHQsIG1pbkhlaWdodEN1cnJlbnRDb21wb25lbnQpO1xuICAgIG1heE51bVdpZGUgPSBNYXRoLm1heChtYXhOdW1XaWRlLCBtYXhOdW1XaWRlQ3VycmVudENvbXBvbmVudCk7XG4gICAgbWF4TnVtSGlnaCA9IE1hdGgubWF4KG1heE51bUhpZ2gsIG1heE51bUhpZ2hDdXJyZW50Q29tcG9uZW50KTtcbiAgICBzaXplUGVyQ29tcG9uZW50W2NdID0ge1xuICAgICAgcmVzb2x1dGlvbnM6IHNpemVQZXJSZXNvbHV0aW9uLFxuICAgICAgbWluV2lkdGg6IG1pbldpZHRoQ3VycmVudENvbXBvbmVudCxcbiAgICAgIG1pbkhlaWdodDogbWluSGVpZ2h0Q3VycmVudENvbXBvbmVudCxcbiAgICAgIG1heE51bVdpZGU6IG1heE51bVdpZGVDdXJyZW50Q29tcG9uZW50LFxuICAgICAgbWF4TnVtSGlnaDogbWF4TnVtSGlnaEN1cnJlbnRDb21wb25lbnRcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjb21wb25lbnRzOiBzaXplUGVyQ29tcG9uZW50LFxuICAgIG1pbldpZHRoLFxuICAgIG1pbkhlaWdodCxcbiAgICBtYXhOdW1XaWRlLFxuICAgIG1heE51bUhpZ2hcbiAgfTtcbn1cblxuZnVuY3Rpb24gYnVpbGRQYWNrZXRzKGNvbnRleHQpIHtcbiAgY29uc3Qgc2l6ID0gY29udGV4dC5TSVo7XG4gIGNvbnN0IHRpbGVJbmRleCA9IGNvbnRleHQuY3VycmVudFRpbGUuaW5kZXg7XG4gIGNvbnN0IHRpbGUgPSBjb250ZXh0LnRpbGVzW3RpbGVJbmRleF07XG4gIGNvbnN0IGNvbXBvbmVudHNDb3VudCA9IHNpei5Dc2l6O1xuXG4gIGZvciAobGV0IGMgPSAwOyBjIDwgY29tcG9uZW50c0NvdW50OyBjKyspIHtcbiAgICBjb25zdCBjb21wb25lbnQgPSB0aWxlLmNvbXBvbmVudHNbY107XG4gICAgY29uc3QgZGVjb21wb3NpdGlvbkxldmVsc0NvdW50ID0gY29tcG9uZW50LmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQ7XG4gICAgY29uc3QgcmVzb2x1dGlvbnMgPSBbXTtcbiAgICBjb25zdCBzdWJiYW5kcyA9IFtdO1xuXG4gICAgZm9yIChsZXQgciA9IDA7IHIgPD0gZGVjb21wb3NpdGlvbkxldmVsc0NvdW50OyByKyspIHtcbiAgICAgIGNvbnN0IGJsb2Nrc0RpbWVuc2lvbnMgPSBnZXRCbG9ja3NEaW1lbnNpb25zKGNvbnRleHQsIGNvbXBvbmVudCwgcik7XG4gICAgICBjb25zdCByZXNvbHV0aW9uID0ge307XG4gICAgICBjb25zdCBzY2FsZSA9IDEgPDwgZGVjb21wb3NpdGlvbkxldmVsc0NvdW50IC0gcjtcbiAgICAgIHJlc29sdXRpb24udHJ4MCA9IE1hdGguY2VpbChjb21wb25lbnQudGN4MCAvIHNjYWxlKTtcbiAgICAgIHJlc29sdXRpb24udHJ5MCA9IE1hdGguY2VpbChjb21wb25lbnQudGN5MCAvIHNjYWxlKTtcbiAgICAgIHJlc29sdXRpb24udHJ4MSA9IE1hdGguY2VpbChjb21wb25lbnQudGN4MSAvIHNjYWxlKTtcbiAgICAgIHJlc29sdXRpb24udHJ5MSA9IE1hdGguY2VpbChjb21wb25lbnQudGN5MSAvIHNjYWxlKTtcbiAgICAgIHJlc29sdXRpb24ucmVzTGV2ZWwgPSByO1xuICAgICAgYnVpbGRQcmVjaW5jdHMoY29udGV4dCwgcmVzb2x1dGlvbiwgYmxvY2tzRGltZW5zaW9ucyk7XG4gICAgICByZXNvbHV0aW9ucy5wdXNoKHJlc29sdXRpb24pO1xuICAgICAgbGV0IHN1YmJhbmQ7XG5cbiAgICAgIGlmIChyID09PSAwKSB7XG4gICAgICAgIHN1YmJhbmQgPSB7fTtcbiAgICAgICAgc3ViYmFuZC50eXBlID0gXCJMTFwiO1xuICAgICAgICBzdWJiYW5kLnRieDAgPSBNYXRoLmNlaWwoY29tcG9uZW50LnRjeDAgLyBzY2FsZSk7XG4gICAgICAgIHN1YmJhbmQudGJ5MCA9IE1hdGguY2VpbChjb21wb25lbnQudGN5MCAvIHNjYWxlKTtcbiAgICAgICAgc3ViYmFuZC50YngxID0gTWF0aC5jZWlsKGNvbXBvbmVudC50Y3gxIC8gc2NhbGUpO1xuICAgICAgICBzdWJiYW5kLnRieTEgPSBNYXRoLmNlaWwoY29tcG9uZW50LnRjeTEgLyBzY2FsZSk7XG4gICAgICAgIHN1YmJhbmQucmVzb2x1dGlvbiA9IHJlc29sdXRpb247XG4gICAgICAgIGJ1aWxkQ29kZWJsb2Nrcyhjb250ZXh0LCBzdWJiYW5kLCBibG9ja3NEaW1lbnNpb25zKTtcbiAgICAgICAgc3ViYmFuZHMucHVzaChzdWJiYW5kKTtcbiAgICAgICAgcmVzb2x1dGlvbi5zdWJiYW5kcyA9IFtzdWJiYW5kXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGJzY2FsZSA9IDEgPDwgZGVjb21wb3NpdGlvbkxldmVsc0NvdW50IC0gciArIDE7XG4gICAgICAgIGNvbnN0IHJlc29sdXRpb25TdWJiYW5kcyA9IFtdO1xuICAgICAgICBzdWJiYW5kID0ge307XG4gICAgICAgIHN1YmJhbmQudHlwZSA9IFwiSExcIjtcbiAgICAgICAgc3ViYmFuZC50YngwID0gTWF0aC5jZWlsKGNvbXBvbmVudC50Y3gwIC8gYnNjYWxlIC0gMC41KTtcbiAgICAgICAgc3ViYmFuZC50YnkwID0gTWF0aC5jZWlsKGNvbXBvbmVudC50Y3kwIC8gYnNjYWxlKTtcbiAgICAgICAgc3ViYmFuZC50YngxID0gTWF0aC5jZWlsKGNvbXBvbmVudC50Y3gxIC8gYnNjYWxlIC0gMC41KTtcbiAgICAgICAgc3ViYmFuZC50YnkxID0gTWF0aC5jZWlsKGNvbXBvbmVudC50Y3kxIC8gYnNjYWxlKTtcbiAgICAgICAgc3ViYmFuZC5yZXNvbHV0aW9uID0gcmVzb2x1dGlvbjtcbiAgICAgICAgYnVpbGRDb2RlYmxvY2tzKGNvbnRleHQsIHN1YmJhbmQsIGJsb2Nrc0RpbWVuc2lvbnMpO1xuICAgICAgICBzdWJiYW5kcy5wdXNoKHN1YmJhbmQpO1xuICAgICAgICByZXNvbHV0aW9uU3ViYmFuZHMucHVzaChzdWJiYW5kKTtcbiAgICAgICAgc3ViYmFuZCA9IHt9O1xuICAgICAgICBzdWJiYW5kLnR5cGUgPSBcIkxIXCI7XG4gICAgICAgIHN1YmJhbmQudGJ4MCA9IE1hdGguY2VpbChjb21wb25lbnQudGN4MCAvIGJzY2FsZSk7XG4gICAgICAgIHN1YmJhbmQudGJ5MCA9IE1hdGguY2VpbChjb21wb25lbnQudGN5MCAvIGJzY2FsZSAtIDAuNSk7XG4gICAgICAgIHN1YmJhbmQudGJ4MSA9IE1hdGguY2VpbChjb21wb25lbnQudGN4MSAvIGJzY2FsZSk7XG4gICAgICAgIHN1YmJhbmQudGJ5MSA9IE1hdGguY2VpbChjb21wb25lbnQudGN5MSAvIGJzY2FsZSAtIDAuNSk7XG4gICAgICAgIHN1YmJhbmQucmVzb2x1dGlvbiA9IHJlc29sdXRpb247XG4gICAgICAgIGJ1aWxkQ29kZWJsb2Nrcyhjb250ZXh0LCBzdWJiYW5kLCBibG9ja3NEaW1lbnNpb25zKTtcbiAgICAgICAgc3ViYmFuZHMucHVzaChzdWJiYW5kKTtcbiAgICAgICAgcmVzb2x1dGlvblN1YmJhbmRzLnB1c2goc3ViYmFuZCk7XG4gICAgICAgIHN1YmJhbmQgPSB7fTtcbiAgICAgICAgc3ViYmFuZC50eXBlID0gXCJISFwiO1xuICAgICAgICBzdWJiYW5kLnRieDAgPSBNYXRoLmNlaWwoY29tcG9uZW50LnRjeDAgLyBic2NhbGUgLSAwLjUpO1xuICAgICAgICBzdWJiYW5kLnRieTAgPSBNYXRoLmNlaWwoY29tcG9uZW50LnRjeTAgLyBic2NhbGUgLSAwLjUpO1xuICAgICAgICBzdWJiYW5kLnRieDEgPSBNYXRoLmNlaWwoY29tcG9uZW50LnRjeDEgLyBic2NhbGUgLSAwLjUpO1xuICAgICAgICBzdWJiYW5kLnRieTEgPSBNYXRoLmNlaWwoY29tcG9uZW50LnRjeTEgLyBic2NhbGUgLSAwLjUpO1xuICAgICAgICBzdWJiYW5kLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xuICAgICAgICBidWlsZENvZGVibG9ja3MoY29udGV4dCwgc3ViYmFuZCwgYmxvY2tzRGltZW5zaW9ucyk7XG4gICAgICAgIHN1YmJhbmRzLnB1c2goc3ViYmFuZCk7XG4gICAgICAgIHJlc29sdXRpb25TdWJiYW5kcy5wdXNoKHN1YmJhbmQpO1xuICAgICAgICByZXNvbHV0aW9uLnN1YmJhbmRzID0gcmVzb2x1dGlvblN1YmJhbmRzO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbXBvbmVudC5yZXNvbHV0aW9ucyA9IHJlc29sdXRpb25zO1xuICAgIGNvbXBvbmVudC5zdWJiYW5kcyA9IHN1YmJhbmRzO1xuICB9XG5cbiAgY29uc3QgcHJvZ3Jlc3Npb25PcmRlciA9IHRpbGUuY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycy5wcm9ncmVzc2lvbk9yZGVyO1xuXG4gIHN3aXRjaCAocHJvZ3Jlc3Npb25PcmRlcikge1xuICAgIGNhc2UgMDpcbiAgICAgIHRpbGUucGFja2V0c0l0ZXJhdG9yID0gbmV3IExheWVyUmVzb2x1dGlvbkNvbXBvbmVudFBvc2l0aW9uSXRlcmF0b3IoY29udGV4dCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgMTpcbiAgICAgIHRpbGUucGFja2V0c0l0ZXJhdG9yID0gbmV3IFJlc29sdXRpb25MYXllckNvbXBvbmVudFBvc2l0aW9uSXRlcmF0b3IoY29udGV4dCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgMjpcbiAgICAgIHRpbGUucGFja2V0c0l0ZXJhdG9yID0gbmV3IFJlc29sdXRpb25Qb3NpdGlvbkNvbXBvbmVudExheWVySXRlcmF0b3IoY29udGV4dCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgMzpcbiAgICAgIHRpbGUucGFja2V0c0l0ZXJhdG9yID0gbmV3IFBvc2l0aW9uQ29tcG9uZW50UmVzb2x1dGlvbkxheWVySXRlcmF0b3IoY29udGV4dCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgNDpcbiAgICAgIHRpbGUucGFja2V0c0l0ZXJhdG9yID0gbmV3IENvbXBvbmVudFBvc2l0aW9uUmVzb2x1dGlvbkxheWVySXRlcmF0b3IoY29udGV4dCk7XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgSnB4RXJyb3IoYFVuc3VwcG9ydGVkIHByb2dyZXNzaW9uIG9yZGVyICR7cHJvZ3Jlc3Npb25PcmRlcn1gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVRpbGVQYWNrZXRzKGNvbnRleHQsIGRhdGEsIG9mZnNldCwgZGF0YUxlbmd0aCkge1xuICBsZXQgcG9zaXRpb24gPSAwO1xuICBsZXQgYnVmZmVyLFxuICAgICAgYnVmZmVyU2l6ZSA9IDAsXG4gICAgICBza2lwTmV4dEJpdCA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIHJlYWRCaXRzKGNvdW50KSB7XG4gICAgd2hpbGUgKGJ1ZmZlclNpemUgPCBjb3VudCkge1xuICAgICAgY29uc3QgYiA9IGRhdGFbb2Zmc2V0ICsgcG9zaXRpb25dO1xuICAgICAgcG9zaXRpb24rKztcblxuICAgICAgaWYgKHNraXBOZXh0Qml0KSB7XG4gICAgICAgIGJ1ZmZlciA9IGJ1ZmZlciA8PCA3IHwgYjtcbiAgICAgICAgYnVmZmVyU2l6ZSArPSA3O1xuICAgICAgICBza2lwTmV4dEJpdCA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnVmZmVyID0gYnVmZmVyIDw8IDggfCBiO1xuICAgICAgICBidWZmZXJTaXplICs9IDg7XG4gICAgICB9XG5cbiAgICAgIGlmIChiID09PSAweGZmKSB7XG4gICAgICAgIHNraXBOZXh0Qml0ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBidWZmZXJTaXplIC09IGNvdW50O1xuICAgIHJldHVybiBidWZmZXIgPj4+IGJ1ZmZlclNpemUgJiAoMSA8PCBjb3VudCkgLSAxO1xuICB9XG5cbiAgZnVuY3Rpb24gc2tpcE1hcmtlcklmRXF1YWwodmFsdWUpIHtcbiAgICBpZiAoZGF0YVtvZmZzZXQgKyBwb3NpdGlvbiAtIDFdID09PSAweGZmICYmIGRhdGFbb2Zmc2V0ICsgcG9zaXRpb25dID09PSB2YWx1ZSkge1xuICAgICAgc2tpcEJ5dGVzKDEpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChkYXRhW29mZnNldCArIHBvc2l0aW9uXSA9PT0gMHhmZiAmJiBkYXRhW29mZnNldCArIHBvc2l0aW9uICsgMV0gPT09IHZhbHVlKSB7XG4gICAgICBza2lwQnl0ZXMoMik7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiBza2lwQnl0ZXMoY291bnQpIHtcbiAgICBwb3NpdGlvbiArPSBjb3VudDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFsaWduVG9CeXRlKCkge1xuICAgIGJ1ZmZlclNpemUgPSAwO1xuXG4gICAgaWYgKHNraXBOZXh0Qml0KSB7XG4gICAgICBwb3NpdGlvbisrO1xuICAgICAgc2tpcE5leHRCaXQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWFkQ29kaW5ncGFzc2VzKCkge1xuICAgIGlmIChyZWFkQml0cygxKSA9PT0gMCkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgaWYgKHJlYWRCaXRzKDEpID09PSAwKSB7XG4gICAgICByZXR1cm4gMjtcbiAgICB9XG5cbiAgICBsZXQgdmFsdWUgPSByZWFkQml0cygyKTtcblxuICAgIGlmICh2YWx1ZSA8IDMpIHtcbiAgICAgIHJldHVybiB2YWx1ZSArIDM7XG4gICAgfVxuXG4gICAgdmFsdWUgPSByZWFkQml0cyg1KTtcblxuICAgIGlmICh2YWx1ZSA8IDMxKSB7XG4gICAgICByZXR1cm4gdmFsdWUgKyA2O1xuICAgIH1cblxuICAgIHZhbHVlID0gcmVhZEJpdHMoNyk7XG4gICAgcmV0dXJuIHZhbHVlICsgMzc7XG4gIH1cblxuICBjb25zdCB0aWxlSW5kZXggPSBjb250ZXh0LmN1cnJlbnRUaWxlLmluZGV4O1xuICBjb25zdCB0aWxlID0gY29udGV4dC50aWxlc1t0aWxlSW5kZXhdO1xuICBjb25zdCBzb3BNYXJrZXJVc2VkID0gY29udGV4dC5DT0Quc29wTWFya2VyVXNlZDtcbiAgY29uc3QgZXBoTWFya2VyVXNlZCA9IGNvbnRleHQuQ09ELmVwaE1hcmtlclVzZWQ7XG4gIGNvbnN0IHBhY2tldHNJdGVyYXRvciA9IHRpbGUucGFja2V0c0l0ZXJhdG9yO1xuXG4gIHdoaWxlIChwb3NpdGlvbiA8IGRhdGFMZW5ndGgpIHtcbiAgICBhbGlnblRvQnl0ZSgpO1xuXG4gICAgaWYgKHNvcE1hcmtlclVzZWQgJiYgc2tpcE1hcmtlcklmRXF1YWwoMHg5MSkpIHtcbiAgICAgIHNraXBCeXRlcyg0KTtcbiAgICB9XG5cbiAgICBjb25zdCBwYWNrZXQgPSBwYWNrZXRzSXRlcmF0b3IubmV4dFBhY2tldCgpO1xuXG4gICAgaWYgKCFyZWFkQml0cygxKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgbGF5ZXJOdW1iZXIgPSBwYWNrZXQubGF5ZXJOdW1iZXIsXG4gICAgICAgICAgcXVldWUgPSBbXTtcbiAgICBsZXQgY29kZWJsb2NrO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gcGFja2V0LmNvZGVibG9ja3MubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgY29kZWJsb2NrID0gcGFja2V0LmNvZGVibG9ja3NbaV07XG4gICAgICBsZXQgcHJlY2luY3QgPSBjb2RlYmxvY2sucHJlY2luY3Q7XG4gICAgICBjb25zdCBjb2RlYmxvY2tDb2x1bW4gPSBjb2RlYmxvY2suY2J4IC0gcHJlY2luY3QuY2J4TWluO1xuICAgICAgY29uc3QgY29kZWJsb2NrUm93ID0gY29kZWJsb2NrLmNieSAtIHByZWNpbmN0LmNieU1pbjtcbiAgICAgIGxldCBjb2RlYmxvY2tJbmNsdWRlZCA9IGZhbHNlO1xuICAgICAgbGV0IGZpcnN0VGltZUluY2x1c2lvbiA9IGZhbHNlO1xuICAgICAgbGV0IHZhbHVlUmVhZHksIHplcm9CaXRQbGFuZXNUcmVlO1xuXG4gICAgICBpZiAoY29kZWJsb2NrLmluY2x1ZGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29kZWJsb2NrSW5jbHVkZWQgPSAhIXJlYWRCaXRzKDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJlY2luY3QgPSBjb2RlYmxvY2sucHJlY2luY3Q7XG4gICAgICAgIGxldCBpbmNsdXNpb25UcmVlO1xuXG4gICAgICAgIGlmIChwcmVjaW5jdC5pbmNsdXNpb25UcmVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpbmNsdXNpb25UcmVlID0gcHJlY2luY3QuaW5jbHVzaW9uVHJlZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB3aWR0aCA9IHByZWNpbmN0LmNieE1heCAtIHByZWNpbmN0LmNieE1pbiArIDE7XG4gICAgICAgICAgY29uc3QgaGVpZ2h0ID0gcHJlY2luY3QuY2J5TWF4IC0gcHJlY2luY3QuY2J5TWluICsgMTtcbiAgICAgICAgICBpbmNsdXNpb25UcmVlID0gbmV3IEluY2x1c2lvblRyZWUod2lkdGgsIGhlaWdodCwgbGF5ZXJOdW1iZXIpO1xuICAgICAgICAgIHplcm9CaXRQbGFuZXNUcmVlID0gbmV3IFRhZ1RyZWUod2lkdGgsIGhlaWdodCk7XG4gICAgICAgICAgcHJlY2luY3QuaW5jbHVzaW9uVHJlZSA9IGluY2x1c2lvblRyZWU7XG4gICAgICAgICAgcHJlY2luY3QuemVyb0JpdFBsYW5lc1RyZWUgPSB6ZXJvQml0UGxhbmVzVHJlZTtcblxuICAgICAgICAgIGZvciAobGV0IGwgPSAwOyBsIDwgbGF5ZXJOdW1iZXI7IGwrKykge1xuICAgICAgICAgICAgaWYgKHJlYWRCaXRzKDEpICE9PSAwKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBKcHhFcnJvcihcIkludmFsaWQgdGFnIHRyZWVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluY2x1c2lvblRyZWUucmVzZXQoY29kZWJsb2NrQ29sdW1uLCBjb2RlYmxvY2tSb3csIGxheWVyTnVtYmVyKSkge1xuICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICBpZiAocmVhZEJpdHMoMSkpIHtcbiAgICAgICAgICAgICAgdmFsdWVSZWFkeSA9ICFpbmNsdXNpb25UcmVlLm5leHRMZXZlbCgpO1xuXG4gICAgICAgICAgICAgIGlmICh2YWx1ZVJlYWR5KSB7XG4gICAgICAgICAgICAgICAgY29kZWJsb2NrLmluY2x1ZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb2RlYmxvY2tJbmNsdWRlZCA9IGZpcnN0VGltZUluY2x1c2lvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGluY2x1c2lvblRyZWUuaW5jcmVtZW50VmFsdWUobGF5ZXJOdW1iZXIpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFjb2RlYmxvY2tJbmNsdWRlZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpcnN0VGltZUluY2x1c2lvbikge1xuICAgICAgICB6ZXJvQml0UGxhbmVzVHJlZSA9IHByZWNpbmN0Lnplcm9CaXRQbGFuZXNUcmVlO1xuICAgICAgICB6ZXJvQml0UGxhbmVzVHJlZS5yZXNldChjb2RlYmxvY2tDb2x1bW4sIGNvZGVibG9ja1Jvdyk7XG5cbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICBpZiAocmVhZEJpdHMoMSkpIHtcbiAgICAgICAgICAgIHZhbHVlUmVhZHkgPSAhemVyb0JpdFBsYW5lc1RyZWUubmV4dExldmVsKCk7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZVJlYWR5KSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB6ZXJvQml0UGxhbmVzVHJlZS5pbmNyZW1lbnRWYWx1ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvZGVibG9jay56ZXJvQml0UGxhbmVzID0gemVyb0JpdFBsYW5lc1RyZWUudmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvZGluZ3Bhc3NlcyA9IHJlYWRDb2RpbmdwYXNzZXMoKTtcblxuICAgICAgd2hpbGUgKHJlYWRCaXRzKDEpKSB7XG4gICAgICAgIGNvZGVibG9jay5MYmxvY2srKztcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29kaW5ncGFzc2VzTG9nMiA9ICgwLCBfY29yZV91dGlscy5sb2cyKShjb2RpbmdwYXNzZXMpO1xuICAgICAgY29uc3QgYml0cyA9IChjb2RpbmdwYXNzZXMgPCAxIDw8IGNvZGluZ3Bhc3Nlc0xvZzIgPyBjb2RpbmdwYXNzZXNMb2cyIC0gMSA6IGNvZGluZ3Bhc3Nlc0xvZzIpICsgY29kZWJsb2NrLkxibG9jaztcbiAgICAgIGNvbnN0IGNvZGVkRGF0YUxlbmd0aCA9IHJlYWRCaXRzKGJpdHMpO1xuICAgICAgcXVldWUucHVzaCh7XG4gICAgICAgIGNvZGVibG9jayxcbiAgICAgICAgY29kaW5ncGFzc2VzLFxuICAgICAgICBkYXRhTGVuZ3RoOiBjb2RlZERhdGFMZW5ndGhcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGFsaWduVG9CeXRlKCk7XG5cbiAgICBpZiAoZXBoTWFya2VyVXNlZCkge1xuICAgICAgc2tpcE1hcmtlcklmRXF1YWwoMHg5Mik7XG4gICAgfVxuXG4gICAgd2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHBhY2tldEl0ZW0gPSBxdWV1ZS5zaGlmdCgpO1xuICAgICAgY29kZWJsb2NrID0gcGFja2V0SXRlbS5jb2RlYmxvY2s7XG5cbiAgICAgIGlmIChjb2RlYmxvY2suZGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvZGVibG9jay5kYXRhID0gW107XG4gICAgICB9XG5cbiAgICAgIGNvZGVibG9jay5kYXRhLnB1c2goe1xuICAgICAgICBkYXRhLFxuICAgICAgICBzdGFydDogb2Zmc2V0ICsgcG9zaXRpb24sXG4gICAgICAgIGVuZDogb2Zmc2V0ICsgcG9zaXRpb24gKyBwYWNrZXRJdGVtLmRhdGFMZW5ndGgsXG4gICAgICAgIGNvZGluZ3Bhc3NlczogcGFja2V0SXRlbS5jb2RpbmdwYXNzZXNcbiAgICAgIH0pO1xuICAgICAgcG9zaXRpb24gKz0gcGFja2V0SXRlbS5kYXRhTGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwb3NpdGlvbjtcbn1cblxuZnVuY3Rpb24gY29weUNvZWZmaWNpZW50cyhjb2VmZmljaWVudHMsIGxldmVsV2lkdGgsIGxldmVsSGVpZ2h0LCBzdWJiYW5kLCBkZWx0YSwgbWIsIHJldmVyc2libGUsIHNlZ21lbnRhdGlvblN5bWJvbFVzZWQpIHtcbiAgY29uc3QgeDAgPSBzdWJiYW5kLnRieDA7XG4gIGNvbnN0IHkwID0gc3ViYmFuZC50YnkwO1xuICBjb25zdCB3aWR0aCA9IHN1YmJhbmQudGJ4MSAtIHN1YmJhbmQudGJ4MDtcbiAgY29uc3QgY29kZWJsb2NrcyA9IHN1YmJhbmQuY29kZWJsb2NrcztcbiAgY29uc3QgcmlnaHQgPSBzdWJiYW5kLnR5cGUuY2hhckF0KDApID09PSBcIkhcIiA/IDEgOiAwO1xuICBjb25zdCBib3R0b20gPSBzdWJiYW5kLnR5cGUuY2hhckF0KDEpID09PSBcIkhcIiA/IGxldmVsV2lkdGggOiAwO1xuXG4gIGZvciAobGV0IGkgPSAwLCBpaSA9IGNvZGVibG9ja3MubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgIGNvbnN0IGNvZGVibG9jayA9IGNvZGVibG9ja3NbaV07XG4gICAgY29uc3QgYmxvY2tXaWR0aCA9IGNvZGVibG9jay50YngxXyAtIGNvZGVibG9jay50YngwXztcbiAgICBjb25zdCBibG9ja0hlaWdodCA9IGNvZGVibG9jay50YnkxXyAtIGNvZGVibG9jay50YnkwXztcblxuICAgIGlmIChibG9ja1dpZHRoID09PSAwIHx8IGJsb2NrSGVpZ2h0ID09PSAwKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoY29kZWJsb2NrLmRhdGEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgYml0TW9kZWwgPSBuZXcgQml0TW9kZWwoYmxvY2tXaWR0aCwgYmxvY2tIZWlnaHQsIGNvZGVibG9jay5zdWJiYW5kVHlwZSwgY29kZWJsb2NrLnplcm9CaXRQbGFuZXMsIG1iKTtcbiAgICBsZXQgY3VycmVudENvZGluZ3Bhc3NUeXBlID0gMjtcbiAgICBjb25zdCBkYXRhID0gY29kZWJsb2NrLmRhdGE7XG4gICAgbGV0IHRvdGFsTGVuZ3RoID0gMCxcbiAgICAgICAgY29kaW5ncGFzc2VzID0gMDtcbiAgICBsZXQgaiwgamosIGRhdGFJdGVtO1xuXG4gICAgZm9yIChqID0gMCwgamogPSBkYXRhLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgIGRhdGFJdGVtID0gZGF0YVtqXTtcbiAgICAgIHRvdGFsTGVuZ3RoICs9IGRhdGFJdGVtLmVuZCAtIGRhdGFJdGVtLnN0YXJ0O1xuICAgICAgY29kaW5ncGFzc2VzICs9IGRhdGFJdGVtLmNvZGluZ3Bhc3NlcztcbiAgICB9XG5cbiAgICBjb25zdCBlbmNvZGVkRGF0YSA9IG5ldyBVaW50OEFycmF5KHRvdGFsTGVuZ3RoKTtcbiAgICBsZXQgcG9zaXRpb24gPSAwO1xuXG4gICAgZm9yIChqID0gMCwgamogPSBkYXRhLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgIGRhdGFJdGVtID0gZGF0YVtqXTtcbiAgICAgIGNvbnN0IGNodW5rID0gZGF0YUl0ZW0uZGF0YS5zdWJhcnJheShkYXRhSXRlbS5zdGFydCwgZGF0YUl0ZW0uZW5kKTtcbiAgICAgIGVuY29kZWREYXRhLnNldChjaHVuaywgcG9zaXRpb24pO1xuICAgICAgcG9zaXRpb24gKz0gY2h1bmsubGVuZ3RoO1xuICAgIH1cblxuICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgX2FyaXRobWV0aWNfZGVjb2Rlci5Bcml0aG1ldGljRGVjb2RlcihlbmNvZGVkRGF0YSwgMCwgdG90YWxMZW5ndGgpO1xuICAgIGJpdE1vZGVsLnNldERlY29kZXIoZGVjb2Rlcik7XG5cbiAgICBmb3IgKGogPSAwOyBqIDwgY29kaW5ncGFzc2VzOyBqKyspIHtcbiAgICAgIHN3aXRjaCAoY3VycmVudENvZGluZ3Bhc3NUeXBlKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBiaXRNb2RlbC5ydW5TaWduaWZpY2FuY2VQcm9wYWdhdGlvblBhc3MoKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgYml0TW9kZWwucnVuTWFnbml0dWRlUmVmaW5lbWVudFBhc3MoKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgYml0TW9kZWwucnVuQ2xlYW51cFBhc3MoKTtcblxuICAgICAgICAgIGlmIChzZWdtZW50YXRpb25TeW1ib2xVc2VkKSB7XG4gICAgICAgICAgICBiaXRNb2RlbC5jaGVja1NlZ21lbnRhdGlvblN5bWJvbCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50Q29kaW5ncGFzc1R5cGUgPSAoY3VycmVudENvZGluZ3Bhc3NUeXBlICsgMSkgJSAzO1xuICAgIH1cblxuICAgIGxldCBvZmZzZXQgPSBjb2RlYmxvY2sudGJ4MF8gLSB4MCArIChjb2RlYmxvY2sudGJ5MF8gLSB5MCkgKiB3aWR0aDtcbiAgICBjb25zdCBzaWduID0gYml0TW9kZWwuY29lZmZpY2VudHNTaWduO1xuICAgIGNvbnN0IG1hZ25pdHVkZSA9IGJpdE1vZGVsLmNvZWZmaWNlbnRzTWFnbml0dWRlO1xuICAgIGNvbnN0IGJpdHNEZWNvZGVkID0gYml0TW9kZWwuYml0c0RlY29kZWQ7XG4gICAgY29uc3QgbWFnbml0dWRlQ29ycmVjdGlvbiA9IHJldmVyc2libGUgPyAwIDogMC41O1xuICAgIGxldCBrLCBuLCBuYjtcbiAgICBwb3NpdGlvbiA9IDA7XG4gICAgY29uc3QgaW50ZXJsZWF2ZSA9IHN1YmJhbmQudHlwZSAhPT0gXCJMTFwiO1xuXG4gICAgZm9yIChqID0gMDsgaiA8IGJsb2NrSGVpZ2h0OyBqKyspIHtcbiAgICAgIGNvbnN0IHJvdyA9IG9mZnNldCAvIHdpZHRoIHwgMDtcbiAgICAgIGNvbnN0IGxldmVsT2Zmc2V0ID0gMiAqIHJvdyAqIChsZXZlbFdpZHRoIC0gd2lkdGgpICsgcmlnaHQgKyBib3R0b207XG5cbiAgICAgIGZvciAoayA9IDA7IGsgPCBibG9ja1dpZHRoOyBrKyspIHtcbiAgICAgICAgbiA9IG1hZ25pdHVkZVtwb3NpdGlvbl07XG5cbiAgICAgICAgaWYgKG4gIT09IDApIHtcbiAgICAgICAgICBuID0gKG4gKyBtYWduaXR1ZGVDb3JyZWN0aW9uKSAqIGRlbHRhO1xuXG4gICAgICAgICAgaWYgKHNpZ25bcG9zaXRpb25dICE9PSAwKSB7XG4gICAgICAgICAgICBuID0gLW47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmIgPSBiaXRzRGVjb2RlZFtwb3NpdGlvbl07XG4gICAgICAgICAgY29uc3QgcG9zID0gaW50ZXJsZWF2ZSA/IGxldmVsT2Zmc2V0ICsgKG9mZnNldCA8PCAxKSA6IG9mZnNldDtcblxuICAgICAgICAgIGlmIChyZXZlcnNpYmxlICYmIG5iID49IG1iKSB7XG4gICAgICAgICAgICBjb2VmZmljaWVudHNbcG9zXSA9IG47XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvZWZmaWNpZW50c1twb3NdID0gbiAqICgxIDw8IG1iIC0gbmIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG9mZnNldCsrO1xuICAgICAgICBwb3NpdGlvbisrO1xuICAgICAgfVxuXG4gICAgICBvZmZzZXQgKz0gd2lkdGggLSBibG9ja1dpZHRoO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1UaWxlKGNvbnRleHQsIHRpbGUsIGMpIHtcbiAgY29uc3QgY29tcG9uZW50ID0gdGlsZS5jb21wb25lbnRzW2NdO1xuICBjb25zdCBjb2RpbmdTdHlsZVBhcmFtZXRlcnMgPSBjb21wb25lbnQuY29kaW5nU3R5bGVQYXJhbWV0ZXJzO1xuICBjb25zdCBxdWFudGl6YXRpb25QYXJhbWV0ZXJzID0gY29tcG9uZW50LnF1YW50aXphdGlvblBhcmFtZXRlcnM7XG4gIGNvbnN0IGRlY29tcG9zaXRpb25MZXZlbHNDb3VudCA9IGNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQ7XG4gIGNvbnN0IHNwcWNkcyA9IHF1YW50aXphdGlvblBhcmFtZXRlcnMuU1BxY2RzO1xuICBjb25zdCBzY2FsYXJFeHBvdW5kZWQgPSBxdWFudGl6YXRpb25QYXJhbWV0ZXJzLnNjYWxhckV4cG91bmRlZDtcbiAgY29uc3QgZ3VhcmRCaXRzID0gcXVhbnRpemF0aW9uUGFyYW1ldGVycy5ndWFyZEJpdHM7XG4gIGNvbnN0IHNlZ21lbnRhdGlvblN5bWJvbFVzZWQgPSBjb2RpbmdTdHlsZVBhcmFtZXRlcnMuc2VnbWVudGF0aW9uU3ltYm9sVXNlZDtcbiAgY29uc3QgcHJlY2lzaW9uID0gY29udGV4dC5jb21wb25lbnRzW2NdLnByZWNpc2lvbjtcbiAgY29uc3QgcmV2ZXJzaWJsZSA9IGNvZGluZ1N0eWxlUGFyYW1ldGVycy5yZXZlcnNpYmxlVHJhbnNmb3JtYXRpb247XG4gIGNvbnN0IHRyYW5zZm9ybSA9IHJldmVyc2libGUgPyBuZXcgUmV2ZXJzaWJsZVRyYW5zZm9ybSgpIDogbmV3IElycmV2ZXJzaWJsZVRyYW5zZm9ybSgpO1xuICBjb25zdCBzdWJiYW5kQ29lZmZpY2llbnRzID0gW107XG4gIGxldCBiID0gMDtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8PSBkZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQ7IGkrKykge1xuICAgIGNvbnN0IHJlc29sdXRpb24gPSBjb21wb25lbnQucmVzb2x1dGlvbnNbaV07XG4gICAgY29uc3Qgd2lkdGggPSByZXNvbHV0aW9uLnRyeDEgLSByZXNvbHV0aW9uLnRyeDA7XG4gICAgY29uc3QgaGVpZ2h0ID0gcmVzb2x1dGlvbi50cnkxIC0gcmVzb2x1dGlvbi50cnkwO1xuICAgIGNvbnN0IGNvZWZmaWNpZW50cyA9IG5ldyBGbG9hdDMyQXJyYXkod2lkdGggKiBoZWlnaHQpO1xuXG4gICAgZm9yIChsZXQgaiA9IDAsIGpqID0gcmVzb2x1dGlvbi5zdWJiYW5kcy5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICBsZXQgbXUsIGVwc2lsb247XG5cbiAgICAgIGlmICghc2NhbGFyRXhwb3VuZGVkKSB7XG4gICAgICAgIG11ID0gc3BxY2RzWzBdLm11O1xuICAgICAgICBlcHNpbG9uID0gc3BxY2RzWzBdLmVwc2lsb24gKyAoaSA+IDAgPyAxIC0gaSA6IDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbXUgPSBzcHFjZHNbYl0ubXU7XG4gICAgICAgIGVwc2lsb24gPSBzcHFjZHNbYl0uZXBzaWxvbjtcbiAgICAgICAgYisrO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdWJiYW5kID0gcmVzb2x1dGlvbi5zdWJiYW5kc1tqXTtcbiAgICAgIGNvbnN0IGdhaW5Mb2cyID0gU3ViYmFuZHNHYWluTG9nMltzdWJiYW5kLnR5cGVdO1xuICAgICAgY29uc3QgZGVsdGEgPSByZXZlcnNpYmxlID8gMSA6IDIgKiogKHByZWNpc2lvbiArIGdhaW5Mb2cyIC0gZXBzaWxvbikgKiAoMSArIG11IC8gMjA0OCk7XG4gICAgICBjb25zdCBtYiA9IGd1YXJkQml0cyArIGVwc2lsb24gLSAxO1xuICAgICAgY29weUNvZWZmaWNpZW50cyhjb2VmZmljaWVudHMsIHdpZHRoLCBoZWlnaHQsIHN1YmJhbmQsIGRlbHRhLCBtYiwgcmV2ZXJzaWJsZSwgc2VnbWVudGF0aW9uU3ltYm9sVXNlZCk7XG4gICAgfVxuXG4gICAgc3ViYmFuZENvZWZmaWNpZW50cy5wdXNoKHtcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgaXRlbXM6IGNvZWZmaWNpZW50c1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gdHJhbnNmb3JtLmNhbGN1bGF0ZShzdWJiYW5kQ29lZmZpY2llbnRzLCBjb21wb25lbnQudGN4MCwgY29tcG9uZW50LnRjeTApO1xuICByZXR1cm4ge1xuICAgIGxlZnQ6IGNvbXBvbmVudC50Y3gwLFxuICAgIHRvcDogY29tcG9uZW50LnRjeTAsXG4gICAgd2lkdGg6IHJlc3VsdC53aWR0aCxcbiAgICBoZWlnaHQ6IHJlc3VsdC5oZWlnaHQsXG4gICAgaXRlbXM6IHJlc3VsdC5pdGVtc1xuICB9O1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1Db21wb25lbnRzKGNvbnRleHQpIHtcbiAgY29uc3Qgc2l6ID0gY29udGV4dC5TSVo7XG4gIGNvbnN0IGNvbXBvbmVudHMgPSBjb250ZXh0LmNvbXBvbmVudHM7XG4gIGNvbnN0IGNvbXBvbmVudHNDb3VudCA9IHNpei5Dc2l6O1xuICBjb25zdCByZXN1bHRJbWFnZXMgPSBbXTtcblxuICBmb3IgKGxldCBpID0gMCwgaWkgPSBjb250ZXh0LnRpbGVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICBjb25zdCB0aWxlID0gY29udGV4dC50aWxlc1tpXTtcbiAgICBjb25zdCB0cmFuc2Zvcm1lZFRpbGVzID0gW107XG5cbiAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNvbXBvbmVudHNDb3VudDsgYysrKSB7XG4gICAgICB0cmFuc2Zvcm1lZFRpbGVzW2NdID0gdHJhbnNmb3JtVGlsZShjb250ZXh0LCB0aWxlLCBjKTtcbiAgICB9XG5cbiAgICBjb25zdCB0aWxlMCA9IHRyYW5zZm9ybWVkVGlsZXNbMF07XG4gICAgY29uc3Qgb3V0ID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHRpbGUwLml0ZW1zLmxlbmd0aCAqIGNvbXBvbmVudHNDb3VudCk7XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgbGVmdDogdGlsZTAubGVmdCxcbiAgICAgIHRvcDogdGlsZTAudG9wLFxuICAgICAgd2lkdGg6IHRpbGUwLndpZHRoLFxuICAgICAgaGVpZ2h0OiB0aWxlMC5oZWlnaHQsXG4gICAgICBpdGVtczogb3V0XG4gICAgfTtcbiAgICBsZXQgc2hpZnQsIG9mZnNldDtcbiAgICBsZXQgcG9zID0gMCxcbiAgICAgICAgaixcbiAgICAgICAgamosXG4gICAgICAgIHkwLFxuICAgICAgICB5MSxcbiAgICAgICAgeTI7XG5cbiAgICBpZiAodGlsZS5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLm11bHRpcGxlQ29tcG9uZW50VHJhbnNmb3JtKSB7XG4gICAgICBjb25zdCBmb3VyQ29tcG9uZW50cyA9IGNvbXBvbmVudHNDb3VudCA9PT0gNDtcbiAgICAgIGNvbnN0IHkwaXRlbXMgPSB0cmFuc2Zvcm1lZFRpbGVzWzBdLml0ZW1zO1xuICAgICAgY29uc3QgeTFpdGVtcyA9IHRyYW5zZm9ybWVkVGlsZXNbMV0uaXRlbXM7XG4gICAgICBjb25zdCB5Mml0ZW1zID0gdHJhbnNmb3JtZWRUaWxlc1syXS5pdGVtcztcbiAgICAgIGNvbnN0IHkzaXRlbXMgPSBmb3VyQ29tcG9uZW50cyA/IHRyYW5zZm9ybWVkVGlsZXNbM10uaXRlbXMgOiBudWxsO1xuICAgICAgc2hpZnQgPSBjb21wb25lbnRzWzBdLnByZWNpc2lvbiAtIDg7XG4gICAgICBvZmZzZXQgPSAoMTI4IDw8IHNoaWZ0KSArIDAuNTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudDAgPSB0aWxlLmNvbXBvbmVudHNbMF07XG4gICAgICBjb25zdCBhbHBoYTAxID0gY29tcG9uZW50c0NvdW50IC0gMztcbiAgICAgIGpqID0geTBpdGVtcy5sZW5ndGg7XG5cbiAgICAgIGlmICghY29tcG9uZW50MC5jb2RpbmdTdHlsZVBhcmFtZXRlcnMucmV2ZXJzaWJsZVRyYW5zZm9ybWF0aW9uKSB7XG4gICAgICAgIGZvciAoaiA9IDA7IGogPCBqajsgaisrLCBwb3MgKz0gYWxwaGEwMSkge1xuICAgICAgICAgIHkwID0geTBpdGVtc1tqXSArIG9mZnNldDtcbiAgICAgICAgICB5MSA9IHkxaXRlbXNbal07XG4gICAgICAgICAgeTIgPSB5Mml0ZW1zW2pdO1xuICAgICAgICAgIG91dFtwb3MrK10gPSB5MCArIDEuNDAyICogeTIgPj4gc2hpZnQ7XG4gICAgICAgICAgb3V0W3BvcysrXSA9IHkwIC0gMC4zNDQxMyAqIHkxIC0gMC43MTQxNCAqIHkyID4+IHNoaWZ0O1xuICAgICAgICAgIG91dFtwb3MrK10gPSB5MCArIDEuNzcyICogeTEgPj4gc2hpZnQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoaiA9IDA7IGogPCBqajsgaisrLCBwb3MgKz0gYWxwaGEwMSkge1xuICAgICAgICAgIHkwID0geTBpdGVtc1tqXSArIG9mZnNldDtcbiAgICAgICAgICB5MSA9IHkxaXRlbXNbal07XG4gICAgICAgICAgeTIgPSB5Mml0ZW1zW2pdO1xuICAgICAgICAgIGNvbnN0IGcgPSB5MCAtICh5MiArIHkxID4+IDIpO1xuICAgICAgICAgIG91dFtwb3MrK10gPSBnICsgeTIgPj4gc2hpZnQ7XG4gICAgICAgICAgb3V0W3BvcysrXSA9IGcgPj4gc2hpZnQ7XG4gICAgICAgICAgb3V0W3BvcysrXSA9IGcgKyB5MSA+PiBzaGlmdDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZm91ckNvbXBvbmVudHMpIHtcbiAgICAgICAgZm9yIChqID0gMCwgcG9zID0gMzsgaiA8IGpqOyBqKyssIHBvcyArPSA0KSB7XG4gICAgICAgICAgb3V0W3Bvc10gPSB5M2l0ZW1zW2pdICsgb2Zmc2V0ID4+IHNoaWZ0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY29tcG9uZW50c0NvdW50OyBjKyspIHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0cmFuc2Zvcm1lZFRpbGVzW2NdLml0ZW1zO1xuICAgICAgICBzaGlmdCA9IGNvbXBvbmVudHNbY10ucHJlY2lzaW9uIC0gODtcbiAgICAgICAgb2Zmc2V0ID0gKDEyOCA8PCBzaGlmdCkgKyAwLjU7XG5cbiAgICAgICAgZm9yIChwb3MgPSBjLCBqID0gMCwgamogPSBpdGVtcy5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgb3V0W3Bvc10gPSBpdGVtc1tqXSArIG9mZnNldCA+PiBzaGlmdDtcbiAgICAgICAgICBwb3MgKz0gY29tcG9uZW50c0NvdW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVzdWx0SW1hZ2VzLnB1c2gocmVzdWx0KTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHRJbWFnZXM7XG59XG5cbmZ1bmN0aW9uIGluaXRpYWxpemVUaWxlKGNvbnRleHQsIHRpbGVJbmRleCkge1xuICBjb25zdCBzaXogPSBjb250ZXh0LlNJWjtcbiAgY29uc3QgY29tcG9uZW50c0NvdW50ID0gc2l6LkNzaXo7XG4gIGNvbnN0IHRpbGUgPSBjb250ZXh0LnRpbGVzW3RpbGVJbmRleF07XG5cbiAgZm9yIChsZXQgYyA9IDA7IGMgPCBjb21wb25lbnRzQ291bnQ7IGMrKykge1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IHRpbGUuY29tcG9uZW50c1tjXTtcbiAgICBjb25zdCBxY2RPclFjYyA9IGNvbnRleHQuY3VycmVudFRpbGUuUUNDW2NdICE9PSB1bmRlZmluZWQgPyBjb250ZXh0LmN1cnJlbnRUaWxlLlFDQ1tjXSA6IGNvbnRleHQuY3VycmVudFRpbGUuUUNEO1xuICAgIGNvbXBvbmVudC5xdWFudGl6YXRpb25QYXJhbWV0ZXJzID0gcWNkT3JRY2M7XG4gICAgY29uc3QgY29kT3JDb2MgPSBjb250ZXh0LmN1cnJlbnRUaWxlLkNPQ1tjXSAhPT0gdW5kZWZpbmVkID8gY29udGV4dC5jdXJyZW50VGlsZS5DT0NbY10gOiBjb250ZXh0LmN1cnJlbnRUaWxlLkNPRDtcbiAgICBjb21wb25lbnQuY29kaW5nU3R5bGVQYXJhbWV0ZXJzID0gY29kT3JDb2M7XG4gIH1cblxuICB0aWxlLmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnMgPSBjb250ZXh0LmN1cnJlbnRUaWxlLkNPRDtcbn1cblxuY2xhc3MgVGFnVHJlZSB7XG4gIGNvbnN0cnVjdG9yKHdpZHRoLCBoZWlnaHQpIHtcbiAgICBjb25zdCBsZXZlbHNMZW5ndGggPSAoMCwgX2NvcmVfdXRpbHMubG9nMikoTWF0aC5tYXgod2lkdGgsIGhlaWdodCkpICsgMTtcbiAgICB0aGlzLmxldmVscyA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZXZlbHNMZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgbGV2ZWwgPSB7XG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQsXG4gICAgICAgIGl0ZW1zOiBbXVxuICAgICAgfTtcbiAgICAgIHRoaXMubGV2ZWxzLnB1c2gobGV2ZWwpO1xuICAgICAgd2lkdGggPSBNYXRoLmNlaWwod2lkdGggLyAyKTtcbiAgICAgIGhlaWdodCA9IE1hdGguY2VpbChoZWlnaHQgLyAyKTtcbiAgICB9XG4gIH1cblxuICByZXNldChpLCBqKSB7XG4gICAgbGV0IGN1cnJlbnRMZXZlbCA9IDAsXG4gICAgICAgIHZhbHVlID0gMCxcbiAgICAgICAgbGV2ZWw7XG5cbiAgICB3aGlsZSAoY3VycmVudExldmVsIDwgdGhpcy5sZXZlbHMubGVuZ3RoKSB7XG4gICAgICBsZXZlbCA9IHRoaXMubGV2ZWxzW2N1cnJlbnRMZXZlbF07XG4gICAgICBjb25zdCBpbmRleCA9IGkgKyBqICogbGV2ZWwud2lkdGg7XG5cbiAgICAgIGlmIChsZXZlbC5pdGVtc1tpbmRleF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YWx1ZSA9IGxldmVsLml0ZW1zW2luZGV4XTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGxldmVsLmluZGV4ID0gaW5kZXg7XG4gICAgICBpID4+PSAxO1xuICAgICAgaiA+Pj0gMTtcbiAgICAgIGN1cnJlbnRMZXZlbCsrO1xuICAgIH1cblxuICAgIGN1cnJlbnRMZXZlbC0tO1xuICAgIGxldmVsID0gdGhpcy5sZXZlbHNbY3VycmVudExldmVsXTtcbiAgICBsZXZlbC5pdGVtc1tsZXZlbC5pbmRleF0gPSB2YWx1ZTtcbiAgICB0aGlzLmN1cnJlbnRMZXZlbCA9IGN1cnJlbnRMZXZlbDtcbiAgICBkZWxldGUgdGhpcy52YWx1ZTtcbiAgfVxuXG4gIGluY3JlbWVudFZhbHVlKCkge1xuICAgIGNvbnN0IGxldmVsID0gdGhpcy5sZXZlbHNbdGhpcy5jdXJyZW50TGV2ZWxdO1xuICAgIGxldmVsLml0ZW1zW2xldmVsLmluZGV4XSsrO1xuICB9XG5cbiAgbmV4dExldmVsKCkge1xuICAgIGxldCBjdXJyZW50TGV2ZWwgPSB0aGlzLmN1cnJlbnRMZXZlbDtcbiAgICBsZXQgbGV2ZWwgPSB0aGlzLmxldmVsc1tjdXJyZW50TGV2ZWxdO1xuICAgIGNvbnN0IHZhbHVlID0gbGV2ZWwuaXRlbXNbbGV2ZWwuaW5kZXhdO1xuICAgIGN1cnJlbnRMZXZlbC0tO1xuXG4gICAgaWYgKGN1cnJlbnRMZXZlbCA8IDApIHtcbiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRMZXZlbCA9IGN1cnJlbnRMZXZlbDtcbiAgICBsZXZlbCA9IHRoaXMubGV2ZWxzW2N1cnJlbnRMZXZlbF07XG4gICAgbGV2ZWwuaXRlbXNbbGV2ZWwuaW5kZXhdID0gdmFsdWU7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxufVxuXG5jbGFzcyBJbmNsdXNpb25UcmVlIHtcbiAgY29uc3RydWN0b3Iod2lkdGgsIGhlaWdodCwgZGVmYXVsdFZhbHVlKSB7XG4gICAgY29uc3QgbGV2ZWxzTGVuZ3RoID0gKDAsIF9jb3JlX3V0aWxzLmxvZzIpKE1hdGgubWF4KHdpZHRoLCBoZWlnaHQpKSArIDE7XG4gICAgdGhpcy5sZXZlbHMgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGV2ZWxzTGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGl0ZW1zID0gbmV3IFVpbnQ4QXJyYXkod2lkdGggKiBoZWlnaHQpO1xuXG4gICAgICBmb3IgKGxldCBqID0gMCwgamogPSBpdGVtcy5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgIGl0ZW1zW2pdID0gZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsZXZlbCA9IHtcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodCxcbiAgICAgICAgaXRlbXNcbiAgICAgIH07XG4gICAgICB0aGlzLmxldmVscy5wdXNoKGxldmVsKTtcbiAgICAgIHdpZHRoID0gTWF0aC5jZWlsKHdpZHRoIC8gMik7XG4gICAgICBoZWlnaHQgPSBNYXRoLmNlaWwoaGVpZ2h0IC8gMik7XG4gICAgfVxuICB9XG5cbiAgcmVzZXQoaSwgaiwgc3RvcFZhbHVlKSB7XG4gICAgbGV0IGN1cnJlbnRMZXZlbCA9IDA7XG5cbiAgICB3aGlsZSAoY3VycmVudExldmVsIDwgdGhpcy5sZXZlbHMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBsZXZlbCA9IHRoaXMubGV2ZWxzW2N1cnJlbnRMZXZlbF07XG4gICAgICBjb25zdCBpbmRleCA9IGkgKyBqICogbGV2ZWwud2lkdGg7XG4gICAgICBsZXZlbC5pbmRleCA9IGluZGV4O1xuICAgICAgY29uc3QgdmFsdWUgPSBsZXZlbC5pdGVtc1tpbmRleF07XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gMHhmZikge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKHZhbHVlID4gc3RvcFZhbHVlKSB7XG4gICAgICAgIHRoaXMuY3VycmVudExldmVsID0gY3VycmVudExldmVsO1xuICAgICAgICB0aGlzLnByb3BhZ2F0ZVZhbHVlcygpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGkgPj49IDE7XG4gICAgICBqID4+PSAxO1xuICAgICAgY3VycmVudExldmVsKys7XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50TGV2ZWwgPSBjdXJyZW50TGV2ZWwgLSAxO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaW5jcmVtZW50VmFsdWUoc3RvcFZhbHVlKSB7XG4gICAgY29uc3QgbGV2ZWwgPSB0aGlzLmxldmVsc1t0aGlzLmN1cnJlbnRMZXZlbF07XG4gICAgbGV2ZWwuaXRlbXNbbGV2ZWwuaW5kZXhdID0gc3RvcFZhbHVlICsgMTtcbiAgICB0aGlzLnByb3BhZ2F0ZVZhbHVlcygpO1xuICB9XG5cbiAgcHJvcGFnYXRlVmFsdWVzKCkge1xuICAgIGxldCBsZXZlbEluZGV4ID0gdGhpcy5jdXJyZW50TGV2ZWw7XG4gICAgbGV0IGxldmVsID0gdGhpcy5sZXZlbHNbbGV2ZWxJbmRleF07XG4gICAgY29uc3QgY3VycmVudFZhbHVlID0gbGV2ZWwuaXRlbXNbbGV2ZWwuaW5kZXhdO1xuXG4gICAgd2hpbGUgKC0tbGV2ZWxJbmRleCA+PSAwKSB7XG4gICAgICBsZXZlbCA9IHRoaXMubGV2ZWxzW2xldmVsSW5kZXhdO1xuICAgICAgbGV2ZWwuaXRlbXNbbGV2ZWwuaW5kZXhdID0gY3VycmVudFZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIG5leHRMZXZlbCgpIHtcbiAgICBsZXQgY3VycmVudExldmVsID0gdGhpcy5jdXJyZW50TGV2ZWw7XG4gICAgbGV0IGxldmVsID0gdGhpcy5sZXZlbHNbY3VycmVudExldmVsXTtcbiAgICBjb25zdCB2YWx1ZSA9IGxldmVsLml0ZW1zW2xldmVsLmluZGV4XTtcbiAgICBsZXZlbC5pdGVtc1tsZXZlbC5pbmRleF0gPSAweGZmO1xuICAgIGN1cnJlbnRMZXZlbC0tO1xuXG4gICAgaWYgKGN1cnJlbnRMZXZlbCA8IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmN1cnJlbnRMZXZlbCA9IGN1cnJlbnRMZXZlbDtcbiAgICBsZXZlbCA9IHRoaXMubGV2ZWxzW2N1cnJlbnRMZXZlbF07XG4gICAgbGV2ZWwuaXRlbXNbbGV2ZWwuaW5kZXhdID0gdmFsdWU7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxufVxuXG5jb25zdCBCaXRNb2RlbCA9IGZ1bmN0aW9uIEJpdE1vZGVsQ2xvc3VyZSgpIHtcbiAgY29uc3QgVU5JRk9STV9DT05URVhUID0gMTc7XG4gIGNvbnN0IFJVTkxFTkdUSF9DT05URVhUID0gMTg7XG4gIGNvbnN0IExMQW5kTEhDb250ZXh0c0xhYmVsID0gbmV3IFVpbnQ4QXJyYXkoWzAsIDUsIDgsIDAsIDMsIDcsIDgsIDAsIDQsIDcsIDgsIDAsIDAsIDAsIDAsIDAsIDEsIDYsIDgsIDAsIDMsIDcsIDgsIDAsIDQsIDcsIDgsIDAsIDAsIDAsIDAsIDAsIDIsIDYsIDgsIDAsIDMsIDcsIDgsIDAsIDQsIDcsIDgsIDAsIDAsIDAsIDAsIDAsIDIsIDYsIDgsIDAsIDMsIDcsIDgsIDAsIDQsIDcsIDgsIDAsIDAsIDAsIDAsIDAsIDIsIDYsIDgsIDAsIDMsIDcsIDgsIDAsIDQsIDcsIDhdKTtcbiAgY29uc3QgSExDb250ZXh0TGFiZWwgPSBuZXcgVWludDhBcnJheShbMCwgMywgNCwgMCwgNSwgNywgNywgMCwgOCwgOCwgOCwgMCwgMCwgMCwgMCwgMCwgMSwgMywgNCwgMCwgNiwgNywgNywgMCwgOCwgOCwgOCwgMCwgMCwgMCwgMCwgMCwgMiwgMywgNCwgMCwgNiwgNywgNywgMCwgOCwgOCwgOCwgMCwgMCwgMCwgMCwgMCwgMiwgMywgNCwgMCwgNiwgNywgNywgMCwgOCwgOCwgOCwgMCwgMCwgMCwgMCwgMCwgMiwgMywgNCwgMCwgNiwgNywgNywgMCwgOCwgOCwgOF0pO1xuICBjb25zdCBISENvbnRleHRMYWJlbCA9IG5ldyBVaW50OEFycmF5KFswLCAxLCAyLCAwLCAxLCAyLCAyLCAwLCAyLCAyLCAyLCAwLCAwLCAwLCAwLCAwLCAzLCA0LCA1LCAwLCA0LCA1LCA1LCAwLCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAwLCA2LCA3LCA3LCAwLCA3LCA3LCA3LCAwLCA3LCA3LCA3LCAwLCAwLCAwLCAwLCAwLCA4LCA4LCA4LCAwLCA4LCA4LCA4LCAwLCA4LCA4LCA4LCAwLCAwLCAwLCAwLCAwLCA4LCA4LCA4LCAwLCA4LCA4LCA4LCAwLCA4LCA4LCA4XSk7XG5cbiAgY2xhc3MgQml0TW9kZWwge1xuICAgIGNvbnN0cnVjdG9yKHdpZHRoLCBoZWlnaHQsIHN1YmJhbmQsIHplcm9CaXRQbGFuZXMsIG1iKSB7XG4gICAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgIGxldCBjb250ZXh0TGFiZWxUYWJsZTtcblxuICAgICAgaWYgKHN1YmJhbmQgPT09IFwiSEhcIikge1xuICAgICAgICBjb250ZXh0TGFiZWxUYWJsZSA9IEhIQ29udGV4dExhYmVsO1xuICAgICAgfSBlbHNlIGlmIChzdWJiYW5kID09PSBcIkhMXCIpIHtcbiAgICAgICAgY29udGV4dExhYmVsVGFibGUgPSBITENvbnRleHRMYWJlbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHRMYWJlbFRhYmxlID0gTExBbmRMSENvbnRleHRzTGFiZWw7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29udGV4dExhYmVsVGFibGUgPSBjb250ZXh0TGFiZWxUYWJsZTtcbiAgICAgIGNvbnN0IGNvZWZmaWNpZW50Q291bnQgPSB3aWR0aCAqIGhlaWdodDtcbiAgICAgIHRoaXMubmVpZ2hib3JzU2lnbmlmaWNhbmNlID0gbmV3IFVpbnQ4QXJyYXkoY29lZmZpY2llbnRDb3VudCk7XG4gICAgICB0aGlzLmNvZWZmaWNlbnRzU2lnbiA9IG5ldyBVaW50OEFycmF5KGNvZWZmaWNpZW50Q291bnQpO1xuICAgICAgbGV0IGNvZWZmaWNlbnRzTWFnbml0dWRlO1xuXG4gICAgICBpZiAobWIgPiAxNCkge1xuICAgICAgICBjb2VmZmljZW50c01hZ25pdHVkZSA9IG5ldyBVaW50MzJBcnJheShjb2VmZmljaWVudENvdW50KTtcbiAgICAgIH0gZWxzZSBpZiAobWIgPiA2KSB7XG4gICAgICAgIGNvZWZmaWNlbnRzTWFnbml0dWRlID0gbmV3IFVpbnQxNkFycmF5KGNvZWZmaWNpZW50Q291bnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29lZmZpY2VudHNNYWduaXR1ZGUgPSBuZXcgVWludDhBcnJheShjb2VmZmljaWVudENvdW50KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jb2VmZmljZW50c01hZ25pdHVkZSA9IGNvZWZmaWNlbnRzTWFnbml0dWRlO1xuICAgICAgdGhpcy5wcm9jZXNzaW5nRmxhZ3MgPSBuZXcgVWludDhBcnJheShjb2VmZmljaWVudENvdW50KTtcbiAgICAgIGNvbnN0IGJpdHNEZWNvZGVkID0gbmV3IFVpbnQ4QXJyYXkoY29lZmZpY2llbnRDb3VudCk7XG5cbiAgICAgIGlmICh6ZXJvQml0UGxhbmVzICE9PSAwKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29lZmZpY2llbnRDb3VudDsgaSsrKSB7XG4gICAgICAgICAgYml0c0RlY29kZWRbaV0gPSB6ZXJvQml0UGxhbmVzO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYml0c0RlY29kZWQgPSBiaXRzRGVjb2RlZDtcbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9XG5cbiAgICBzZXREZWNvZGVyKGRlY29kZXIpIHtcbiAgICAgIHRoaXMuZGVjb2RlciA9IGRlY29kZXI7XG4gICAgfVxuXG4gICAgcmVzZXQoKSB7XG4gICAgICB0aGlzLmNvbnRleHRzID0gbmV3IEludDhBcnJheSgxOSk7XG4gICAgICB0aGlzLmNvbnRleHRzWzBdID0gNCA8PCAxIHwgMDtcbiAgICAgIHRoaXMuY29udGV4dHNbVU5JRk9STV9DT05URVhUXSA9IDQ2IDw8IDEgfCAwO1xuICAgICAgdGhpcy5jb250ZXh0c1tSVU5MRU5HVEhfQ09OVEVYVF0gPSAzIDw8IDEgfCAwO1xuICAgIH1cblxuICAgIHNldE5laWdoYm9yc1NpZ25pZmljYW5jZShyb3csIGNvbHVtbiwgaW5kZXgpIHtcbiAgICAgIGNvbnN0IG5laWdoYm9yc1NpZ25pZmljYW5jZSA9IHRoaXMubmVpZ2hib3JzU2lnbmlmaWNhbmNlO1xuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLndpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG4gICAgICBjb25zdCBsZWZ0ID0gY29sdW1uID4gMDtcbiAgICAgIGNvbnN0IHJpZ2h0ID0gY29sdW1uICsgMSA8IHdpZHRoO1xuICAgICAgbGV0IGk7XG5cbiAgICAgIGlmIChyb3cgPiAwKSB7XG4gICAgICAgIGkgPSBpbmRleCAtIHdpZHRoO1xuXG4gICAgICAgIGlmIChsZWZ0KSB7XG4gICAgICAgICAgbmVpZ2hib3JzU2lnbmlmaWNhbmNlW2kgLSAxXSArPSAweDEwO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJpZ2h0KSB7XG4gICAgICAgICAgbmVpZ2hib3JzU2lnbmlmaWNhbmNlW2kgKyAxXSArPSAweDEwO1xuICAgICAgICB9XG5cbiAgICAgICAgbmVpZ2hib3JzU2lnbmlmaWNhbmNlW2ldICs9IDB4MDQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChyb3cgKyAxIDwgaGVpZ2h0KSB7XG4gICAgICAgIGkgPSBpbmRleCArIHdpZHRoO1xuXG4gICAgICAgIGlmIChsZWZ0KSB7XG4gICAgICAgICAgbmVpZ2hib3JzU2lnbmlmaWNhbmNlW2kgLSAxXSArPSAweDEwO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJpZ2h0KSB7XG4gICAgICAgICAgbmVpZ2hib3JzU2lnbmlmaWNhbmNlW2kgKyAxXSArPSAweDEwO1xuICAgICAgICB9XG5cbiAgICAgICAgbmVpZ2hib3JzU2lnbmlmaWNhbmNlW2ldICs9IDB4MDQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChsZWZ0KSB7XG4gICAgICAgIG5laWdoYm9yc1NpZ25pZmljYW5jZVtpbmRleCAtIDFdICs9IDB4MDE7XG4gICAgICB9XG5cbiAgICAgIGlmIChyaWdodCkge1xuICAgICAgICBuZWlnaGJvcnNTaWduaWZpY2FuY2VbaW5kZXggKyAxXSArPSAweDAxO1xuICAgICAgfVxuXG4gICAgICBuZWlnaGJvcnNTaWduaWZpY2FuY2VbaW5kZXhdIHw9IDB4ODA7XG4gICAgfVxuXG4gICAgcnVuU2lnbmlmaWNhbmNlUHJvcGFnYXRpb25QYXNzKCkge1xuICAgICAgY29uc3QgZGVjb2RlciA9IHRoaXMuZGVjb2RlcjtcbiAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy53aWR0aCxcbiAgICAgICAgICAgIGhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgICAgY29uc3QgY29lZmZpY2VudHNNYWduaXR1ZGUgPSB0aGlzLmNvZWZmaWNlbnRzTWFnbml0dWRlO1xuICAgICAgY29uc3QgY29lZmZpY2VudHNTaWduID0gdGhpcy5jb2VmZmljZW50c1NpZ247XG4gICAgICBjb25zdCBuZWlnaGJvcnNTaWduaWZpY2FuY2UgPSB0aGlzLm5laWdoYm9yc1NpZ25pZmljYW5jZTtcbiAgICAgIGNvbnN0IHByb2Nlc3NpbmdGbGFncyA9IHRoaXMucHJvY2Vzc2luZ0ZsYWdzO1xuICAgICAgY29uc3QgY29udGV4dHMgPSB0aGlzLmNvbnRleHRzO1xuICAgICAgY29uc3QgbGFiZWxzID0gdGhpcy5jb250ZXh0TGFiZWxUYWJsZTtcbiAgICAgIGNvbnN0IGJpdHNEZWNvZGVkID0gdGhpcy5iaXRzRGVjb2RlZDtcbiAgICAgIGNvbnN0IHByb2Nlc3NlZEludmVyc2VNYXNrID0gfjE7XG4gICAgICBjb25zdCBwcm9jZXNzZWRNYXNrID0gMTtcbiAgICAgIGNvbnN0IGZpcnN0TWFnbml0dWRlQml0TWFzayA9IDI7XG5cbiAgICAgIGZvciAobGV0IGkwID0gMDsgaTAgPCBoZWlnaHQ7IGkwICs9IDQpIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB3aWR0aDsgaisrKSB7XG4gICAgICAgICAgbGV0IGluZGV4ID0gaTAgKiB3aWR0aCArIGo7XG5cbiAgICAgICAgICBmb3IgKGxldCBpMSA9IDA7IGkxIDwgNDsgaTErKywgaW5kZXggKz0gd2lkdGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGkgPSBpMCArIGkxO1xuXG4gICAgICAgICAgICBpZiAoaSA+PSBoZWlnaHQpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByb2Nlc3NpbmdGbGFnc1tpbmRleF0gJj0gcHJvY2Vzc2VkSW52ZXJzZU1hc2s7XG5cbiAgICAgICAgICAgIGlmIChjb2VmZmljZW50c01hZ25pdHVkZVtpbmRleF0gfHwgIW5laWdoYm9yc1NpZ25pZmljYW5jZVtpbmRleF0pIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHRMYWJlbCA9IGxhYmVsc1tuZWlnaGJvcnNTaWduaWZpY2FuY2VbaW5kZXhdXTtcbiAgICAgICAgICAgIGNvbnN0IGRlY2lzaW9uID0gZGVjb2Rlci5yZWFkQml0KGNvbnRleHRzLCBjb250ZXh0TGFiZWwpO1xuXG4gICAgICAgICAgICBpZiAoZGVjaXNpb24pIHtcbiAgICAgICAgICAgICAgY29uc3Qgc2lnbiA9IHRoaXMuZGVjb2RlU2lnbkJpdChpLCBqLCBpbmRleCk7XG4gICAgICAgICAgICAgIGNvZWZmaWNlbnRzU2lnbltpbmRleF0gPSBzaWduO1xuICAgICAgICAgICAgICBjb2VmZmljZW50c01hZ25pdHVkZVtpbmRleF0gPSAxO1xuICAgICAgICAgICAgICB0aGlzLnNldE5laWdoYm9yc1NpZ25pZmljYW5jZShpLCBqLCBpbmRleCk7XG4gICAgICAgICAgICAgIHByb2Nlc3NpbmdGbGFnc1tpbmRleF0gfD0gZmlyc3RNYWduaXR1ZGVCaXRNYXNrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBiaXRzRGVjb2RlZFtpbmRleF0rKztcbiAgICAgICAgICAgIHByb2Nlc3NpbmdGbGFnc1tpbmRleF0gfD0gcHJvY2Vzc2VkTWFzaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBkZWNvZGVTaWduQml0KHJvdywgY29sdW1uLCBpbmRleCkge1xuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLndpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG4gICAgICBjb25zdCBjb2VmZmljZW50c01hZ25pdHVkZSA9IHRoaXMuY29lZmZpY2VudHNNYWduaXR1ZGU7XG4gICAgICBjb25zdCBjb2VmZmljZW50c1NpZ24gPSB0aGlzLmNvZWZmaWNlbnRzU2lnbjtcbiAgICAgIGxldCBjb250cmlidXRpb24sIHNpZ24wLCBzaWduMSwgc2lnbmlmaWNhbmNlMTtcbiAgICAgIGxldCBjb250ZXh0TGFiZWwsIGRlY29kZWQ7XG4gICAgICBzaWduaWZpY2FuY2UxID0gY29sdW1uID4gMCAmJiBjb2VmZmljZW50c01hZ25pdHVkZVtpbmRleCAtIDFdICE9PSAwO1xuXG4gICAgICBpZiAoY29sdW1uICsgMSA8IHdpZHRoICYmIGNvZWZmaWNlbnRzTWFnbml0dWRlW2luZGV4ICsgMV0gIT09IDApIHtcbiAgICAgICAgc2lnbjEgPSBjb2VmZmljZW50c1NpZ25baW5kZXggKyAxXTtcblxuICAgICAgICBpZiAoc2lnbmlmaWNhbmNlMSkge1xuICAgICAgICAgIHNpZ24wID0gY29lZmZpY2VudHNTaWduW2luZGV4IC0gMV07XG4gICAgICAgICAgY29udHJpYnV0aW9uID0gMSAtIHNpZ24xIC0gc2lnbjA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29udHJpYnV0aW9uID0gMSAtIHNpZ24xIC0gc2lnbjE7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc2lnbmlmaWNhbmNlMSkge1xuICAgICAgICBzaWduMCA9IGNvZWZmaWNlbnRzU2lnbltpbmRleCAtIDFdO1xuICAgICAgICBjb250cmlidXRpb24gPSAxIC0gc2lnbjAgLSBzaWduMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRyaWJ1dGlvbiA9IDA7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhvcml6b250YWxDb250cmlidXRpb24gPSAzICogY29udHJpYnV0aW9uO1xuICAgICAgc2lnbmlmaWNhbmNlMSA9IHJvdyA+IDAgJiYgY29lZmZpY2VudHNNYWduaXR1ZGVbaW5kZXggLSB3aWR0aF0gIT09IDA7XG5cbiAgICAgIGlmIChyb3cgKyAxIDwgaGVpZ2h0ICYmIGNvZWZmaWNlbnRzTWFnbml0dWRlW2luZGV4ICsgd2lkdGhdICE9PSAwKSB7XG4gICAgICAgIHNpZ24xID0gY29lZmZpY2VudHNTaWduW2luZGV4ICsgd2lkdGhdO1xuXG4gICAgICAgIGlmIChzaWduaWZpY2FuY2UxKSB7XG4gICAgICAgICAgc2lnbjAgPSBjb2VmZmljZW50c1NpZ25baW5kZXggLSB3aWR0aF07XG4gICAgICAgICAgY29udHJpYnV0aW9uID0gMSAtIHNpZ24xIC0gc2lnbjAgKyBob3Jpem9udGFsQ29udHJpYnV0aW9uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnRyaWJ1dGlvbiA9IDEgLSBzaWduMSAtIHNpZ24xICsgaG9yaXpvbnRhbENvbnRyaWJ1dGlvbjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzaWduaWZpY2FuY2UxKSB7XG4gICAgICAgIHNpZ24wID0gY29lZmZpY2VudHNTaWduW2luZGV4IC0gd2lkdGhdO1xuICAgICAgICBjb250cmlidXRpb24gPSAxIC0gc2lnbjAgLSBzaWduMCArIGhvcml6b250YWxDb250cmlidXRpb247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250cmlidXRpb24gPSBob3Jpem9udGFsQ29udHJpYnV0aW9uO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29udHJpYnV0aW9uID49IDApIHtcbiAgICAgICAgY29udGV4dExhYmVsID0gOSArIGNvbnRyaWJ1dGlvbjtcbiAgICAgICAgZGVjb2RlZCA9IHRoaXMuZGVjb2Rlci5yZWFkQml0KHRoaXMuY29udGV4dHMsIGNvbnRleHRMYWJlbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250ZXh0TGFiZWwgPSA5IC0gY29udHJpYnV0aW9uO1xuICAgICAgICBkZWNvZGVkID0gdGhpcy5kZWNvZGVyLnJlYWRCaXQodGhpcy5jb250ZXh0cywgY29udGV4dExhYmVsKSBeIDE7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkZWNvZGVkO1xuICAgIH1cblxuICAgIHJ1bk1hZ25pdHVkZVJlZmluZW1lbnRQYXNzKCkge1xuICAgICAgY29uc3QgZGVjb2RlciA9IHRoaXMuZGVjb2RlcjtcbiAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy53aWR0aCxcbiAgICAgICAgICAgIGhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgICAgY29uc3QgY29lZmZpY2VudHNNYWduaXR1ZGUgPSB0aGlzLmNvZWZmaWNlbnRzTWFnbml0dWRlO1xuICAgICAgY29uc3QgbmVpZ2hib3JzU2lnbmlmaWNhbmNlID0gdGhpcy5uZWlnaGJvcnNTaWduaWZpY2FuY2U7XG4gICAgICBjb25zdCBjb250ZXh0cyA9IHRoaXMuY29udGV4dHM7XG4gICAgICBjb25zdCBiaXRzRGVjb2RlZCA9IHRoaXMuYml0c0RlY29kZWQ7XG4gICAgICBjb25zdCBwcm9jZXNzaW5nRmxhZ3MgPSB0aGlzLnByb2Nlc3NpbmdGbGFncztcbiAgICAgIGNvbnN0IHByb2Nlc3NlZE1hc2sgPSAxO1xuICAgICAgY29uc3QgZmlyc3RNYWduaXR1ZGVCaXRNYXNrID0gMjtcbiAgICAgIGNvbnN0IGxlbmd0aCA9IHdpZHRoICogaGVpZ2h0O1xuICAgICAgY29uc3Qgd2lkdGg0ID0gd2lkdGggKiA0O1xuXG4gICAgICBmb3IgKGxldCBpbmRleDAgPSAwLCBpbmRleE5leHQ7IGluZGV4MCA8IGxlbmd0aDsgaW5kZXgwID0gaW5kZXhOZXh0KSB7XG4gICAgICAgIGluZGV4TmV4dCA9IE1hdGgubWluKGxlbmd0aCwgaW5kZXgwICsgd2lkdGg0KTtcblxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHdpZHRoOyBqKyspIHtcbiAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IGluZGV4MCArIGo7IGluZGV4IDwgaW5kZXhOZXh0OyBpbmRleCArPSB3aWR0aCkge1xuICAgICAgICAgICAgaWYgKCFjb2VmZmljZW50c01hZ25pdHVkZVtpbmRleF0gfHwgKHByb2Nlc3NpbmdGbGFnc1tpbmRleF0gJiBwcm9jZXNzZWRNYXNrKSAhPT0gMCkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGNvbnRleHRMYWJlbCA9IDE2O1xuXG4gICAgICAgICAgICBpZiAoKHByb2Nlc3NpbmdGbGFnc1tpbmRleF0gJiBmaXJzdE1hZ25pdHVkZUJpdE1hc2spICE9PSAwKSB7XG4gICAgICAgICAgICAgIHByb2Nlc3NpbmdGbGFnc1tpbmRleF0gXj0gZmlyc3RNYWduaXR1ZGVCaXRNYXNrO1xuICAgICAgICAgICAgICBjb25zdCBzaWduaWZpY2FuY2UgPSBuZWlnaGJvcnNTaWduaWZpY2FuY2VbaW5kZXhdICYgMTI3O1xuICAgICAgICAgICAgICBjb250ZXh0TGFiZWwgPSBzaWduaWZpY2FuY2UgPT09IDAgPyAxNSA6IDE0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBiaXQgPSBkZWNvZGVyLnJlYWRCaXQoY29udGV4dHMsIGNvbnRleHRMYWJlbCk7XG4gICAgICAgICAgICBjb2VmZmljZW50c01hZ25pdHVkZVtpbmRleF0gPSBjb2VmZmljZW50c01hZ25pdHVkZVtpbmRleF0gPDwgMSB8IGJpdDtcbiAgICAgICAgICAgIGJpdHNEZWNvZGVkW2luZGV4XSsrO1xuICAgICAgICAgICAgcHJvY2Vzc2luZ0ZsYWdzW2luZGV4XSB8PSBwcm9jZXNzZWRNYXNrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJ1bkNsZWFudXBQYXNzKCkge1xuICAgICAgY29uc3QgZGVjb2RlciA9IHRoaXMuZGVjb2RlcjtcbiAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy53aWR0aCxcbiAgICAgICAgICAgIGhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgICAgY29uc3QgbmVpZ2hib3JzU2lnbmlmaWNhbmNlID0gdGhpcy5uZWlnaGJvcnNTaWduaWZpY2FuY2U7XG4gICAgICBjb25zdCBjb2VmZmljZW50c01hZ25pdHVkZSA9IHRoaXMuY29lZmZpY2VudHNNYWduaXR1ZGU7XG4gICAgICBjb25zdCBjb2VmZmljZW50c1NpZ24gPSB0aGlzLmNvZWZmaWNlbnRzU2lnbjtcbiAgICAgIGNvbnN0IGNvbnRleHRzID0gdGhpcy5jb250ZXh0cztcbiAgICAgIGNvbnN0IGxhYmVscyA9IHRoaXMuY29udGV4dExhYmVsVGFibGU7XG4gICAgICBjb25zdCBiaXRzRGVjb2RlZCA9IHRoaXMuYml0c0RlY29kZWQ7XG4gICAgICBjb25zdCBwcm9jZXNzaW5nRmxhZ3MgPSB0aGlzLnByb2Nlc3NpbmdGbGFncztcbiAgICAgIGNvbnN0IHByb2Nlc3NlZE1hc2sgPSAxO1xuICAgICAgY29uc3QgZmlyc3RNYWduaXR1ZGVCaXRNYXNrID0gMjtcbiAgICAgIGNvbnN0IG9uZVJvd0Rvd24gPSB3aWR0aDtcbiAgICAgIGNvbnN0IHR3b1Jvd3NEb3duID0gd2lkdGggKiAyO1xuICAgICAgY29uc3QgdGhyZWVSb3dzRG93biA9IHdpZHRoICogMztcbiAgICAgIGxldCBpTmV4dDtcblxuICAgICAgZm9yIChsZXQgaTAgPSAwOyBpMCA8IGhlaWdodDsgaTAgPSBpTmV4dCkge1xuICAgICAgICBpTmV4dCA9IE1hdGgubWluKGkwICsgNCwgaGVpZ2h0KTtcbiAgICAgICAgY29uc3QgaW5kZXhCYXNlID0gaTAgKiB3aWR0aDtcbiAgICAgICAgY29uc3QgY2hlY2tBbGxFbXB0eSA9IGkwICsgMyA8IGhlaWdodDtcblxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHdpZHRoOyBqKyspIHtcbiAgICAgICAgICBjb25zdCBpbmRleDAgPSBpbmRleEJhc2UgKyBqO1xuICAgICAgICAgIGNvbnN0IGFsbEVtcHR5ID0gY2hlY2tBbGxFbXB0eSAmJiBwcm9jZXNzaW5nRmxhZ3NbaW5kZXgwXSA9PT0gMCAmJiBwcm9jZXNzaW5nRmxhZ3NbaW5kZXgwICsgb25lUm93RG93bl0gPT09IDAgJiYgcHJvY2Vzc2luZ0ZsYWdzW2luZGV4MCArIHR3b1Jvd3NEb3duXSA9PT0gMCAmJiBwcm9jZXNzaW5nRmxhZ3NbaW5kZXgwICsgdGhyZWVSb3dzRG93bl0gPT09IDAgJiYgbmVpZ2hib3JzU2lnbmlmaWNhbmNlW2luZGV4MF0gPT09IDAgJiYgbmVpZ2hib3JzU2lnbmlmaWNhbmNlW2luZGV4MCArIG9uZVJvd0Rvd25dID09PSAwICYmIG5laWdoYm9yc1NpZ25pZmljYW5jZVtpbmRleDAgKyB0d29Sb3dzRG93bl0gPT09IDAgJiYgbmVpZ2hib3JzU2lnbmlmaWNhbmNlW2luZGV4MCArIHRocmVlUm93c0Rvd25dID09PSAwO1xuICAgICAgICAgIGxldCBpMSA9IDAsXG4gICAgICAgICAgICAgIGluZGV4ID0gaW5kZXgwO1xuICAgICAgICAgIGxldCBpID0gaTAsXG4gICAgICAgICAgICAgIHNpZ247XG5cbiAgICAgICAgICBpZiAoYWxsRW1wdHkpIHtcbiAgICAgICAgICAgIGNvbnN0IGhhc1NpZ25pZmljYW50Q29lZmZpY2VudCA9IGRlY29kZXIucmVhZEJpdChjb250ZXh0cywgUlVOTEVOR1RIX0NPTlRFWFQpO1xuXG4gICAgICAgICAgICBpZiAoIWhhc1NpZ25pZmljYW50Q29lZmZpY2VudCkge1xuICAgICAgICAgICAgICBiaXRzRGVjb2RlZFtpbmRleDBdKys7XG4gICAgICAgICAgICAgIGJpdHNEZWNvZGVkW2luZGV4MCArIG9uZVJvd0Rvd25dKys7XG4gICAgICAgICAgICAgIGJpdHNEZWNvZGVkW2luZGV4MCArIHR3b1Jvd3NEb3duXSsrO1xuICAgICAgICAgICAgICBiaXRzRGVjb2RlZFtpbmRleDAgKyB0aHJlZVJvd3NEb3duXSsrO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaTEgPSBkZWNvZGVyLnJlYWRCaXQoY29udGV4dHMsIFVOSUZPUk1fQ09OVEVYVCkgPDwgMSB8IGRlY29kZXIucmVhZEJpdChjb250ZXh0cywgVU5JRk9STV9DT05URVhUKTtcblxuICAgICAgICAgICAgaWYgKGkxICE9PSAwKSB7XG4gICAgICAgICAgICAgIGkgPSBpMCArIGkxO1xuICAgICAgICAgICAgICBpbmRleCArPSBpMSAqIHdpZHRoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzaWduID0gdGhpcy5kZWNvZGVTaWduQml0KGksIGosIGluZGV4KTtcbiAgICAgICAgICAgIGNvZWZmaWNlbnRzU2lnbltpbmRleF0gPSBzaWduO1xuICAgICAgICAgICAgY29lZmZpY2VudHNNYWduaXR1ZGVbaW5kZXhdID0gMTtcbiAgICAgICAgICAgIHRoaXMuc2V0TmVpZ2hib3JzU2lnbmlmaWNhbmNlKGksIGosIGluZGV4KTtcbiAgICAgICAgICAgIHByb2Nlc3NpbmdGbGFnc1tpbmRleF0gfD0gZmlyc3RNYWduaXR1ZGVCaXRNYXNrO1xuICAgICAgICAgICAgaW5kZXggPSBpbmRleDA7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkyID0gaTA7IGkyIDw9IGk7IGkyKyssIGluZGV4ICs9IHdpZHRoKSB7XG4gICAgICAgICAgICAgIGJpdHNEZWNvZGVkW2luZGV4XSsrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpMSsrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZvciAoaSA9IGkwICsgaTE7IGkgPCBpTmV4dDsgaSsrLCBpbmRleCArPSB3aWR0aCkge1xuICAgICAgICAgICAgaWYgKGNvZWZmaWNlbnRzTWFnbml0dWRlW2luZGV4XSB8fCAocHJvY2Vzc2luZ0ZsYWdzW2luZGV4XSAmIHByb2Nlc3NlZE1hc2spICE9PSAwKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0TGFiZWwgPSBsYWJlbHNbbmVpZ2hib3JzU2lnbmlmaWNhbmNlW2luZGV4XV07XG4gICAgICAgICAgICBjb25zdCBkZWNpc2lvbiA9IGRlY29kZXIucmVhZEJpdChjb250ZXh0cywgY29udGV4dExhYmVsKTtcblxuICAgICAgICAgICAgaWYgKGRlY2lzaW9uID09PSAxKSB7XG4gICAgICAgICAgICAgIHNpZ24gPSB0aGlzLmRlY29kZVNpZ25CaXQoaSwgaiwgaW5kZXgpO1xuICAgICAgICAgICAgICBjb2VmZmljZW50c1NpZ25baW5kZXhdID0gc2lnbjtcbiAgICAgICAgICAgICAgY29lZmZpY2VudHNNYWduaXR1ZGVbaW5kZXhdID0gMTtcbiAgICAgICAgICAgICAgdGhpcy5zZXROZWlnaGJvcnNTaWduaWZpY2FuY2UoaSwgaiwgaW5kZXgpO1xuICAgICAgICAgICAgICBwcm9jZXNzaW5nRmxhZ3NbaW5kZXhdIHw9IGZpcnN0TWFnbml0dWRlQml0TWFzaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYml0c0RlY29kZWRbaW5kZXhdKys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2hlY2tTZWdtZW50YXRpb25TeW1ib2woKSB7XG4gICAgICBjb25zdCBkZWNvZGVyID0gdGhpcy5kZWNvZGVyO1xuICAgICAgY29uc3QgY29udGV4dHMgPSB0aGlzLmNvbnRleHRzO1xuICAgICAgY29uc3Qgc3ltYm9sID0gZGVjb2Rlci5yZWFkQml0KGNvbnRleHRzLCBVTklGT1JNX0NPTlRFWFQpIDw8IDMgfCBkZWNvZGVyLnJlYWRCaXQoY29udGV4dHMsIFVOSUZPUk1fQ09OVEVYVCkgPDwgMiB8IGRlY29kZXIucmVhZEJpdChjb250ZXh0cywgVU5JRk9STV9DT05URVhUKSA8PCAxIHwgZGVjb2Rlci5yZWFkQml0KGNvbnRleHRzLCBVTklGT1JNX0NPTlRFWFQpO1xuXG4gICAgICBpZiAoc3ltYm9sICE9PSAweGEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEpweEVycm9yKFwiSW52YWxpZCBzZWdtZW50YXRpb24gc3ltYm9sXCIpO1xuICAgICAgfVxuICAgIH1cblxuICB9XG5cbiAgcmV0dXJuIEJpdE1vZGVsO1xufSgpO1xuXG5jbGFzcyBUcmFuc2Zvcm0ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gVHJhbnNmb3JtKSB7XG4gICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQ2Fubm90IGluaXRpYWxpemUgVHJhbnNmb3JtLlwiKTtcbiAgICB9XG4gIH1cblxuICBjYWxjdWxhdGUoc3ViYmFuZHMsIHUwLCB2MCkge1xuICAgIGxldCBsbCA9IHN1YmJhbmRzWzBdO1xuXG4gICAgZm9yIChsZXQgaSA9IDEsIGlpID0gc3ViYmFuZHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgbGwgPSB0aGlzLml0ZXJhdGUobGwsIHN1YmJhbmRzW2ldLCB1MCwgdjApO1xuICAgIH1cblxuICAgIHJldHVybiBsbDtcbiAgfVxuXG4gIGV4dGVuZChidWZmZXIsIG9mZnNldCwgc2l6ZSkge1xuICAgIGxldCBpMSA9IG9mZnNldCAtIDEsXG4gICAgICAgIGoxID0gb2Zmc2V0ICsgMTtcbiAgICBsZXQgaTIgPSBvZmZzZXQgKyBzaXplIC0gMixcbiAgICAgICAgajIgPSBvZmZzZXQgKyBzaXplO1xuICAgIGJ1ZmZlcltpMS0tXSA9IGJ1ZmZlcltqMSsrXTtcbiAgICBidWZmZXJbajIrK10gPSBidWZmZXJbaTItLV07XG4gICAgYnVmZmVyW2kxLS1dID0gYnVmZmVyW2oxKytdO1xuICAgIGJ1ZmZlcltqMisrXSA9IGJ1ZmZlcltpMi0tXTtcbiAgICBidWZmZXJbaTEtLV0gPSBidWZmZXJbajErK107XG4gICAgYnVmZmVyW2oyKytdID0gYnVmZmVyW2kyLS1dO1xuICAgIGJ1ZmZlcltpMV0gPSBidWZmZXJbajFdO1xuICAgIGJ1ZmZlcltqMl0gPSBidWZmZXJbaTJdO1xuICB9XG5cbiAgZmlsdGVyKHgsIG9mZnNldCwgbGVuZ3RoKSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIkFic3RyYWN0IG1ldGhvZCBgZmlsdGVyYCBjYWxsZWRcIik7XG4gIH1cblxuICBpdGVyYXRlKGxsLCBobF9saF9oaCwgdTAsIHYwKSB7XG4gICAgY29uc3QgbGxXaWR0aCA9IGxsLndpZHRoLFxuICAgICAgICAgIGxsSGVpZ2h0ID0gbGwuaGVpZ2h0O1xuICAgIGxldCBsbEl0ZW1zID0gbGwuaXRlbXM7XG4gICAgY29uc3Qgd2lkdGggPSBobF9saF9oaC53aWR0aDtcbiAgICBjb25zdCBoZWlnaHQgPSBobF9saF9oaC5oZWlnaHQ7XG4gICAgY29uc3QgaXRlbXMgPSBobF9saF9oaC5pdGVtcztcbiAgICBsZXQgaSwgaiwgaywgbCwgdSwgdjtcblxuICAgIGZvciAoayA9IDAsIGkgPSAwOyBpIDwgbGxIZWlnaHQ7IGkrKykge1xuICAgICAgbCA9IGkgKiAyICogd2lkdGg7XG5cbiAgICAgIGZvciAoaiA9IDA7IGogPCBsbFdpZHRoOyBqKyssIGsrKywgbCArPSAyKSB7XG4gICAgICAgIGl0ZW1zW2xdID0gbGxJdGVtc1trXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsbEl0ZW1zID0gbGwuaXRlbXMgPSBudWxsO1xuICAgIGNvbnN0IGJ1ZmZlclBhZGRpbmcgPSA0O1xuICAgIGNvbnN0IHJvd0J1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkod2lkdGggKyAyICogYnVmZmVyUGFkZGluZyk7XG5cbiAgICBpZiAod2lkdGggPT09IDEpIHtcbiAgICAgIGlmICgodTAgJiAxKSAhPT0gMCkge1xuICAgICAgICBmb3IgKHYgPSAwLCBrID0gMDsgdiA8IGhlaWdodDsgdisrLCBrICs9IHdpZHRoKSB7XG4gICAgICAgICAgaXRlbXNba10gKj0gMC41O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodiA9IDAsIGsgPSAwOyB2IDwgaGVpZ2h0OyB2KyssIGsgKz0gd2lkdGgpIHtcbiAgICAgICAgcm93QnVmZmVyLnNldChpdGVtcy5zdWJhcnJheShrLCBrICsgd2lkdGgpLCBidWZmZXJQYWRkaW5nKTtcbiAgICAgICAgdGhpcy5leHRlbmQocm93QnVmZmVyLCBidWZmZXJQYWRkaW5nLCB3aWR0aCk7XG4gICAgICAgIHRoaXMuZmlsdGVyKHJvd0J1ZmZlciwgYnVmZmVyUGFkZGluZywgd2lkdGgpO1xuICAgICAgICBpdGVtcy5zZXQocm93QnVmZmVyLnN1YmFycmF5KGJ1ZmZlclBhZGRpbmcsIGJ1ZmZlclBhZGRpbmcgKyB3aWR0aCksIGspO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBudW1CdWZmZXJzID0gMTY7XG4gICAgY29uc3QgY29sQnVmZmVycyA9IFtdO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IG51bUJ1ZmZlcnM7IGkrKykge1xuICAgICAgY29sQnVmZmVycy5wdXNoKG5ldyBGbG9hdDMyQXJyYXkoaGVpZ2h0ICsgMiAqIGJ1ZmZlclBhZGRpbmcpKTtcbiAgICB9XG5cbiAgICBsZXQgYixcbiAgICAgICAgY3VycmVudEJ1ZmZlciA9IDA7XG4gICAgbGwgPSBidWZmZXJQYWRkaW5nICsgaGVpZ2h0O1xuXG4gICAgaWYgKGhlaWdodCA9PT0gMSkge1xuICAgICAgaWYgKCh2MCAmIDEpICE9PSAwKSB7XG4gICAgICAgIGZvciAodSA9IDA7IHUgPCB3aWR0aDsgdSsrKSB7XG4gICAgICAgICAgaXRlbXNbdV0gKj0gMC41O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodSA9IDA7IHUgPCB3aWR0aDsgdSsrKSB7XG4gICAgICAgIGlmIChjdXJyZW50QnVmZmVyID09PSAwKSB7XG4gICAgICAgICAgbnVtQnVmZmVycyA9IE1hdGgubWluKHdpZHRoIC0gdSwgbnVtQnVmZmVycyk7XG5cbiAgICAgICAgICBmb3IgKGsgPSB1LCBsID0gYnVmZmVyUGFkZGluZzsgbCA8IGxsOyBrICs9IHdpZHRoLCBsKyspIHtcbiAgICAgICAgICAgIGZvciAoYiA9IDA7IGIgPCBudW1CdWZmZXJzOyBiKyspIHtcbiAgICAgICAgICAgICAgY29sQnVmZmVyc1tiXVtsXSA9IGl0ZW1zW2sgKyBiXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjdXJyZW50QnVmZmVyID0gbnVtQnVmZmVycztcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnRCdWZmZXItLTtcbiAgICAgICAgY29uc3QgYnVmZmVyID0gY29sQnVmZmVyc1tjdXJyZW50QnVmZmVyXTtcbiAgICAgICAgdGhpcy5leHRlbmQoYnVmZmVyLCBidWZmZXJQYWRkaW5nLCBoZWlnaHQpO1xuICAgICAgICB0aGlzLmZpbHRlcihidWZmZXIsIGJ1ZmZlclBhZGRpbmcsIGhlaWdodCk7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRCdWZmZXIgPT09IDApIHtcbiAgICAgICAgICBrID0gdSAtIG51bUJ1ZmZlcnMgKyAxO1xuXG4gICAgICAgICAgZm9yIChsID0gYnVmZmVyUGFkZGluZzsgbCA8IGxsOyBrICs9IHdpZHRoLCBsKyspIHtcbiAgICAgICAgICAgIGZvciAoYiA9IDA7IGIgPCBudW1CdWZmZXJzOyBiKyspIHtcbiAgICAgICAgICAgICAgaXRlbXNbayArIGJdID0gY29sQnVmZmVyc1tiXVtsXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgICBpdGVtc1xuICAgIH07XG4gIH1cblxufVxuXG5jbGFzcyBJcnJldmVyc2libGVUcmFuc2Zvcm0gZXh0ZW5kcyBUcmFuc2Zvcm0ge1xuICBmaWx0ZXIoeCwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgICBjb25zdCBsZW4gPSBsZW5ndGggPj4gMTtcbiAgICBvZmZzZXQgfD0gMDtcbiAgICBsZXQgaiwgbiwgY3VycmVudCwgbmV4dDtcbiAgICBjb25zdCBhbHBoYSA9IC0xLjU4NjEzNDM0MjA1OTkyNDtcbiAgICBjb25zdCBiZXRhID0gLTAuMDUyOTgwMTE4NTcyOTYxO1xuICAgIGNvbnN0IGdhbW1hID0gMC44ODI5MTEwNzU1MzA5MzQ7XG4gICAgY29uc3QgZGVsdGEgPSAwLjQ0MzUwNjg1MjA0Mzk3MTtcbiAgICBjb25zdCBLID0gMS4yMzAxNzQxMDQ5MTQwMDE7XG4gICAgY29uc3QgS18gPSAxIC8gSztcbiAgICBqID0gb2Zmc2V0IC0gMztcblxuICAgIGZvciAobiA9IGxlbiArIDQ7IG4tLTsgaiArPSAyKSB7XG4gICAgICB4W2pdICo9IEtfO1xuICAgIH1cblxuICAgIGogPSBvZmZzZXQgLSAyO1xuICAgIGN1cnJlbnQgPSBkZWx0YSAqIHhbaiAtIDFdO1xuXG4gICAgZm9yIChuID0gbGVuICsgMzsgbi0tOyBqICs9IDIpIHtcbiAgICAgIG5leHQgPSBkZWx0YSAqIHhbaiArIDFdO1xuICAgICAgeFtqXSA9IEsgKiB4W2pdIC0gY3VycmVudCAtIG5leHQ7XG5cbiAgICAgIGlmIChuLS0pIHtcbiAgICAgICAgaiArPSAyO1xuICAgICAgICBjdXJyZW50ID0gZGVsdGEgKiB4W2ogKyAxXTtcbiAgICAgICAgeFtqXSA9IEsgKiB4W2pdIC0gY3VycmVudCAtIG5leHQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBqID0gb2Zmc2V0IC0gMTtcbiAgICBjdXJyZW50ID0gZ2FtbWEgKiB4W2ogLSAxXTtcblxuICAgIGZvciAobiA9IGxlbiArIDI7IG4tLTsgaiArPSAyKSB7XG4gICAgICBuZXh0ID0gZ2FtbWEgKiB4W2ogKyAxXTtcbiAgICAgIHhbal0gLT0gY3VycmVudCArIG5leHQ7XG5cbiAgICAgIGlmIChuLS0pIHtcbiAgICAgICAgaiArPSAyO1xuICAgICAgICBjdXJyZW50ID0gZ2FtbWEgKiB4W2ogKyAxXTtcbiAgICAgICAgeFtqXSAtPSBjdXJyZW50ICsgbmV4dDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGogPSBvZmZzZXQ7XG4gICAgY3VycmVudCA9IGJldGEgKiB4W2ogLSAxXTtcblxuICAgIGZvciAobiA9IGxlbiArIDE7IG4tLTsgaiArPSAyKSB7XG4gICAgICBuZXh0ID0gYmV0YSAqIHhbaiArIDFdO1xuICAgICAgeFtqXSAtPSBjdXJyZW50ICsgbmV4dDtcblxuICAgICAgaWYgKG4tLSkge1xuICAgICAgICBqICs9IDI7XG4gICAgICAgIGN1cnJlbnQgPSBiZXRhICogeFtqICsgMV07XG4gICAgICAgIHhbal0gLT0gY3VycmVudCArIG5leHQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobGVuICE9PSAwKSB7XG4gICAgICBqID0gb2Zmc2V0ICsgMTtcbiAgICAgIGN1cnJlbnQgPSBhbHBoYSAqIHhbaiAtIDFdO1xuXG4gICAgICBmb3IgKG4gPSBsZW47IG4tLTsgaiArPSAyKSB7XG4gICAgICAgIG5leHQgPSBhbHBoYSAqIHhbaiArIDFdO1xuICAgICAgICB4W2pdIC09IGN1cnJlbnQgKyBuZXh0O1xuXG4gICAgICAgIGlmIChuLS0pIHtcbiAgICAgICAgICBqICs9IDI7XG4gICAgICAgICAgY3VycmVudCA9IGFscGhhICogeFtqICsgMV07XG4gICAgICAgICAgeFtqXSAtPSBjdXJyZW50ICsgbmV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG59XG5cbmNsYXNzIFJldmVyc2libGVUcmFuc2Zvcm0gZXh0ZW5kcyBUcmFuc2Zvcm0ge1xuICBmaWx0ZXIoeCwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgICBjb25zdCBsZW4gPSBsZW5ndGggPj4gMTtcbiAgICBvZmZzZXQgfD0gMDtcbiAgICBsZXQgaiwgbjtcblxuICAgIGZvciAoaiA9IG9mZnNldCwgbiA9IGxlbiArIDE7IG4tLTsgaiArPSAyKSB7XG4gICAgICB4W2pdIC09IHhbaiAtIDFdICsgeFtqICsgMV0gKyAyID4+IDI7XG4gICAgfVxuXG4gICAgZm9yIChqID0gb2Zmc2V0ICsgMSwgbiA9IGxlbjsgbi0tOyBqICs9IDIpIHtcbiAgICAgIHhbal0gKz0geFtqIC0gMV0gKyB4W2ogKyAxXSA+PiAxO1xuICAgIH1cbiAgfVxuXG59XG5cbi8qKiovIH0pLFxuLyogNDEgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuTFpXU3RyZWFtID0gdm9pZCAwO1xuXG52YXIgX2RlY29kZV9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDI5KTtcblxuY2xhc3MgTFpXU3RyZWFtIGV4dGVuZHMgX2RlY29kZV9zdHJlYW0uRGVjb2RlU3RyZWFtIHtcbiAgY29uc3RydWN0b3Ioc3RyLCBtYXliZUxlbmd0aCwgZWFybHlDaGFuZ2UpIHtcbiAgICBzdXBlcihtYXliZUxlbmd0aCk7XG4gICAgdGhpcy5zdHIgPSBzdHI7XG4gICAgdGhpcy5kaWN0ID0gc3RyLmRpY3Q7XG4gICAgdGhpcy5jYWNoZWREYXRhID0gMDtcbiAgICB0aGlzLmJpdHNDYWNoZWQgPSAwO1xuICAgIGNvbnN0IG1heEx6d0RpY3Rpb25hcnlTaXplID0gNDA5NjtcbiAgICBjb25zdCBsendTdGF0ZSA9IHtcbiAgICAgIGVhcmx5Q2hhbmdlLFxuICAgICAgY29kZUxlbmd0aDogOSxcbiAgICAgIG5leHRDb2RlOiAyNTgsXG4gICAgICBkaWN0aW9uYXJ5VmFsdWVzOiBuZXcgVWludDhBcnJheShtYXhMendEaWN0aW9uYXJ5U2l6ZSksXG4gICAgICBkaWN0aW9uYXJ5TGVuZ3RoczogbmV3IFVpbnQxNkFycmF5KG1heEx6d0RpY3Rpb25hcnlTaXplKSxcbiAgICAgIGRpY3Rpb25hcnlQcmV2Q29kZXM6IG5ldyBVaW50MTZBcnJheShtYXhMendEaWN0aW9uYXJ5U2l6ZSksXG4gICAgICBjdXJyZW50U2VxdWVuY2U6IG5ldyBVaW50OEFycmF5KG1heEx6d0RpY3Rpb25hcnlTaXplKSxcbiAgICAgIGN1cnJlbnRTZXF1ZW5jZUxlbmd0aDogMFxuICAgIH07XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDI1NjsgKytpKSB7XG4gICAgICBsendTdGF0ZS5kaWN0aW9uYXJ5VmFsdWVzW2ldID0gaTtcbiAgICAgIGx6d1N0YXRlLmRpY3Rpb25hcnlMZW5ndGhzW2ldID0gMTtcbiAgICB9XG5cbiAgICB0aGlzLmx6d1N0YXRlID0gbHp3U3RhdGU7XG4gIH1cblxuICByZWFkQml0cyhuKSB7XG4gICAgbGV0IGJpdHNDYWNoZWQgPSB0aGlzLmJpdHNDYWNoZWQ7XG4gICAgbGV0IGNhY2hlZERhdGEgPSB0aGlzLmNhY2hlZERhdGE7XG5cbiAgICB3aGlsZSAoYml0c0NhY2hlZCA8IG4pIHtcbiAgICAgIGNvbnN0IGMgPSB0aGlzLnN0ci5nZXRCeXRlKCk7XG5cbiAgICAgIGlmIChjID09PSAtMSkge1xuICAgICAgICB0aGlzLmVvZiA9IHRydWU7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjYWNoZWREYXRhID0gY2FjaGVkRGF0YSA8PCA4IHwgYztcbiAgICAgIGJpdHNDYWNoZWQgKz0gODtcbiAgICB9XG5cbiAgICB0aGlzLmJpdHNDYWNoZWQgPSBiaXRzQ2FjaGVkIC09IG47XG4gICAgdGhpcy5jYWNoZWREYXRhID0gY2FjaGVkRGF0YTtcbiAgICB0aGlzLmxhc3RDb2RlID0gbnVsbDtcbiAgICByZXR1cm4gY2FjaGVkRGF0YSA+Pj4gYml0c0NhY2hlZCAmICgxIDw8IG4pIC0gMTtcbiAgfVxuXG4gIHJlYWRCbG9jaygpIHtcbiAgICBjb25zdCBibG9ja1NpemUgPSA1MTIsXG4gICAgICAgICAgZGVjb2RlZFNpemVEZWx0YSA9IGJsb2NrU2l6ZTtcbiAgICBsZXQgZXN0aW1hdGVkRGVjb2RlZFNpemUgPSBibG9ja1NpemUgKiAyO1xuICAgIGxldCBpLCBqLCBxO1xuICAgIGNvbnN0IGx6d1N0YXRlID0gdGhpcy5sendTdGF0ZTtcblxuICAgIGlmICghbHp3U3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBlYXJseUNoYW5nZSA9IGx6d1N0YXRlLmVhcmx5Q2hhbmdlO1xuICAgIGxldCBuZXh0Q29kZSA9IGx6d1N0YXRlLm5leHRDb2RlO1xuICAgIGNvbnN0IGRpY3Rpb25hcnlWYWx1ZXMgPSBsendTdGF0ZS5kaWN0aW9uYXJ5VmFsdWVzO1xuICAgIGNvbnN0IGRpY3Rpb25hcnlMZW5ndGhzID0gbHp3U3RhdGUuZGljdGlvbmFyeUxlbmd0aHM7XG4gICAgY29uc3QgZGljdGlvbmFyeVByZXZDb2RlcyA9IGx6d1N0YXRlLmRpY3Rpb25hcnlQcmV2Q29kZXM7XG4gICAgbGV0IGNvZGVMZW5ndGggPSBsendTdGF0ZS5jb2RlTGVuZ3RoO1xuICAgIGxldCBwcmV2Q29kZSA9IGx6d1N0YXRlLnByZXZDb2RlO1xuICAgIGNvbnN0IGN1cnJlbnRTZXF1ZW5jZSA9IGx6d1N0YXRlLmN1cnJlbnRTZXF1ZW5jZTtcbiAgICBsZXQgY3VycmVudFNlcXVlbmNlTGVuZ3RoID0gbHp3U3RhdGUuY3VycmVudFNlcXVlbmNlTGVuZ3RoO1xuICAgIGxldCBkZWNvZGVkTGVuZ3RoID0gMDtcbiAgICBsZXQgY3VycmVudEJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyTGVuZ3RoO1xuICAgIGxldCBidWZmZXIgPSB0aGlzLmVuc3VyZUJ1ZmZlcih0aGlzLmJ1ZmZlckxlbmd0aCArIGVzdGltYXRlZERlY29kZWRTaXplKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBibG9ja1NpemU7IGkrKykge1xuICAgICAgY29uc3QgY29kZSA9IHRoaXMucmVhZEJpdHMoY29kZUxlbmd0aCk7XG4gICAgICBjb25zdCBoYXNQcmV2ID0gY3VycmVudFNlcXVlbmNlTGVuZ3RoID4gMDtcblxuICAgICAgaWYgKGNvZGUgPCAyNTYpIHtcbiAgICAgICAgY3VycmVudFNlcXVlbmNlWzBdID0gY29kZTtcbiAgICAgICAgY3VycmVudFNlcXVlbmNlTGVuZ3RoID0gMTtcbiAgICAgIH0gZWxzZSBpZiAoY29kZSA+PSAyNTgpIHtcbiAgICAgICAgaWYgKGNvZGUgPCBuZXh0Q29kZSkge1xuICAgICAgICAgIGN1cnJlbnRTZXF1ZW5jZUxlbmd0aCA9IGRpY3Rpb25hcnlMZW5ndGhzW2NvZGVdO1xuXG4gICAgICAgICAgZm9yIChqID0gY3VycmVudFNlcXVlbmNlTGVuZ3RoIC0gMSwgcSA9IGNvZGU7IGogPj0gMDsgai0tKSB7XG4gICAgICAgICAgICBjdXJyZW50U2VxdWVuY2Vbal0gPSBkaWN0aW9uYXJ5VmFsdWVzW3FdO1xuICAgICAgICAgICAgcSA9IGRpY3Rpb25hcnlQcmV2Q29kZXNbcV07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN1cnJlbnRTZXF1ZW5jZVtjdXJyZW50U2VxdWVuY2VMZW5ndGgrK10gPSBjdXJyZW50U2VxdWVuY2VbMF07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gMjU2KSB7XG4gICAgICAgIGNvZGVMZW5ndGggPSA5O1xuICAgICAgICBuZXh0Q29kZSA9IDI1ODtcbiAgICAgICAgY3VycmVudFNlcXVlbmNlTGVuZ3RoID0gMDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVvZiA9IHRydWU7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmx6d1N0YXRlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKGhhc1ByZXYpIHtcbiAgICAgICAgZGljdGlvbmFyeVByZXZDb2Rlc1tuZXh0Q29kZV0gPSBwcmV2Q29kZTtcbiAgICAgICAgZGljdGlvbmFyeUxlbmd0aHNbbmV4dENvZGVdID0gZGljdGlvbmFyeUxlbmd0aHNbcHJldkNvZGVdICsgMTtcbiAgICAgICAgZGljdGlvbmFyeVZhbHVlc1tuZXh0Q29kZV0gPSBjdXJyZW50U2VxdWVuY2VbMF07XG4gICAgICAgIG5leHRDb2RlKys7XG4gICAgICAgIGNvZGVMZW5ndGggPSBuZXh0Q29kZSArIGVhcmx5Q2hhbmdlICYgbmV4dENvZGUgKyBlYXJseUNoYW5nZSAtIDEgPyBjb2RlTGVuZ3RoIDogTWF0aC5taW4oTWF0aC5sb2cobmV4dENvZGUgKyBlYXJseUNoYW5nZSkgLyAwLjY5MzE0NzE4MDU1OTk0NTMgKyAxLCAxMikgfCAwO1xuICAgICAgfVxuXG4gICAgICBwcmV2Q29kZSA9IGNvZGU7XG4gICAgICBkZWNvZGVkTGVuZ3RoICs9IGN1cnJlbnRTZXF1ZW5jZUxlbmd0aDtcblxuICAgICAgaWYgKGVzdGltYXRlZERlY29kZWRTaXplIDwgZGVjb2RlZExlbmd0aCkge1xuICAgICAgICBkbyB7XG4gICAgICAgICAgZXN0aW1hdGVkRGVjb2RlZFNpemUgKz0gZGVjb2RlZFNpemVEZWx0YTtcbiAgICAgICAgfSB3aGlsZSAoZXN0aW1hdGVkRGVjb2RlZFNpemUgPCBkZWNvZGVkTGVuZ3RoKTtcblxuICAgICAgICBidWZmZXIgPSB0aGlzLmVuc3VyZUJ1ZmZlcih0aGlzLmJ1ZmZlckxlbmd0aCArIGVzdGltYXRlZERlY29kZWRTaXplKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChqID0gMDsgaiA8IGN1cnJlbnRTZXF1ZW5jZUxlbmd0aDsgaisrKSB7XG4gICAgICAgIGJ1ZmZlcltjdXJyZW50QnVmZmVyTGVuZ3RoKytdID0gY3VycmVudFNlcXVlbmNlW2pdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGx6d1N0YXRlLm5leHRDb2RlID0gbmV4dENvZGU7XG4gICAgbHp3U3RhdGUuY29kZUxlbmd0aCA9IGNvZGVMZW5ndGg7XG4gICAgbHp3U3RhdGUucHJldkNvZGUgPSBwcmV2Q29kZTtcbiAgICBsendTdGF0ZS5jdXJyZW50U2VxdWVuY2VMZW5ndGggPSBjdXJyZW50U2VxdWVuY2VMZW5ndGg7XG4gICAgdGhpcy5idWZmZXJMZW5ndGggPSBjdXJyZW50QnVmZmVyTGVuZ3RoO1xuICB9XG5cbn1cblxuZXhwb3J0cy5MWldTdHJlYW0gPSBMWldTdHJlYW07XG5cbi8qKiovIH0pLFxuLyogNDIgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuUHJlZGljdG9yU3RyZWFtID0gdm9pZCAwO1xuXG52YXIgX2RlY29kZV9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDI5KTtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9wcmltaXRpdmVzID0gX193X3BkZmpzX3JlcXVpcmVfXyg1KTtcblxuY2xhc3MgUHJlZGljdG9yU3RyZWFtIGV4dGVuZHMgX2RlY29kZV9zdHJlYW0uRGVjb2RlU3RyZWFtIHtcbiAgY29uc3RydWN0b3Ioc3RyLCBtYXliZUxlbmd0aCwgcGFyYW1zKSB7XG4gICAgc3VwZXIobWF5YmVMZW5ndGgpO1xuXG4gICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShwYXJhbXMpKSB7XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cblxuICAgIGNvbnN0IHByZWRpY3RvciA9IHRoaXMucHJlZGljdG9yID0gcGFyYW1zLmdldChcIlByZWRpY3RvclwiKSB8fCAxO1xuXG4gICAgaWYgKHByZWRpY3RvciA8PSAxKSB7XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cblxuICAgIGlmIChwcmVkaWN0b3IgIT09IDIgJiYgKHByZWRpY3RvciA8IDEwIHx8IHByZWRpY3RvciA+IDE1KSkge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBVbnN1cHBvcnRlZCBwcmVkaWN0b3I6ICR7cHJlZGljdG9yfWApO1xuICAgIH1cblxuICAgIGlmIChwcmVkaWN0b3IgPT09IDIpIHtcbiAgICAgIHRoaXMucmVhZEJsb2NrID0gdGhpcy5yZWFkQmxvY2tUaWZmO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlYWRCbG9jayA9IHRoaXMucmVhZEJsb2NrUG5nO1xuICAgIH1cblxuICAgIHRoaXMuc3RyID0gc3RyO1xuICAgIHRoaXMuZGljdCA9IHN0ci5kaWN0O1xuICAgIGNvbnN0IGNvbG9ycyA9IHRoaXMuY29sb3JzID0gcGFyYW1zLmdldChcIkNvbG9yc1wiKSB8fCAxO1xuICAgIGNvbnN0IGJpdHMgPSB0aGlzLmJpdHMgPSBwYXJhbXMuZ2V0KFwiQlBDXCIsIFwiQml0c1BlckNvbXBvbmVudFwiKSB8fCA4O1xuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnMgPSBwYXJhbXMuZ2V0KFwiQ29sdW1uc1wiKSB8fCAxO1xuICAgIHRoaXMucGl4Qnl0ZXMgPSBjb2xvcnMgKiBiaXRzICsgNyA+PiAzO1xuICAgIHRoaXMucm93Qnl0ZXMgPSBjb2x1bW5zICogY29sb3JzICogYml0cyArIDcgPj4gMztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHJlYWRCbG9ja1RpZmYoKSB7XG4gICAgY29uc3Qgcm93Qnl0ZXMgPSB0aGlzLnJvd0J5dGVzO1xuICAgIGNvbnN0IGJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyTGVuZ3RoO1xuICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMuZW5zdXJlQnVmZmVyKGJ1ZmZlckxlbmd0aCArIHJvd0J5dGVzKTtcbiAgICBjb25zdCBiaXRzID0gdGhpcy5iaXRzO1xuICAgIGNvbnN0IGNvbG9ycyA9IHRoaXMuY29sb3JzO1xuICAgIGNvbnN0IHJhd0J5dGVzID0gdGhpcy5zdHIuZ2V0Qnl0ZXMocm93Qnl0ZXMpO1xuICAgIHRoaXMuZW9mID0gIXJhd0J5dGVzLmxlbmd0aDtcblxuICAgIGlmICh0aGlzLmVvZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpbmJ1ZiA9IDAsXG4gICAgICAgIG91dGJ1ZiA9IDA7XG4gICAgbGV0IGluYml0cyA9IDAsXG4gICAgICAgIG91dGJpdHMgPSAwO1xuICAgIGxldCBwb3MgPSBidWZmZXJMZW5ndGg7XG4gICAgbGV0IGk7XG5cbiAgICBpZiAoYml0cyA9PT0gMSAmJiBjb2xvcnMgPT09IDEpIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dCeXRlczsgKytpKSB7XG4gICAgICAgIGxldCBjID0gcmF3Qnl0ZXNbaV0gXiBpbmJ1ZjtcbiAgICAgICAgYyBePSBjID4+IDE7XG4gICAgICAgIGMgXj0gYyA+PiAyO1xuICAgICAgICBjIF49IGMgPj4gNDtcbiAgICAgICAgaW5idWYgPSAoYyAmIDEpIDw8IDc7XG4gICAgICAgIGJ1ZmZlcltwb3MrK10gPSBjO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYml0cyA9PT0gOCkge1xuICAgICAgZm9yIChpID0gMDsgaSA8IGNvbG9yczsgKytpKSB7XG4gICAgICAgIGJ1ZmZlcltwb3MrK10gPSByYXdCeXRlc1tpXTtcbiAgICAgIH1cblxuICAgICAgZm9yICg7IGkgPCByb3dCeXRlczsgKytpKSB7XG4gICAgICAgIGJ1ZmZlcltwb3NdID0gYnVmZmVyW3BvcyAtIGNvbG9yc10gKyByYXdCeXRlc1tpXTtcbiAgICAgICAgcG9zKys7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChiaXRzID09PSAxNikge1xuICAgICAgY29uc3QgYnl0ZXNQZXJQaXhlbCA9IGNvbG9ycyAqIDI7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBieXRlc1BlclBpeGVsOyArK2kpIHtcbiAgICAgICAgYnVmZmVyW3BvcysrXSA9IHJhd0J5dGVzW2ldO1xuICAgICAgfVxuXG4gICAgICBmb3IgKDsgaSA8IHJvd0J5dGVzOyBpICs9IDIpIHtcbiAgICAgICAgY29uc3Qgc3VtID0gKChyYXdCeXRlc1tpXSAmIDB4ZmYpIDw8IDgpICsgKHJhd0J5dGVzW2kgKyAxXSAmIDB4ZmYpICsgKChidWZmZXJbcG9zIC0gYnl0ZXNQZXJQaXhlbF0gJiAweGZmKSA8PCA4KSArIChidWZmZXJbcG9zIC0gYnl0ZXNQZXJQaXhlbCArIDFdICYgMHhmZik7XG4gICAgICAgIGJ1ZmZlcltwb3MrK10gPSBzdW0gPj4gOCAmIDB4ZmY7XG4gICAgICAgIGJ1ZmZlcltwb3MrK10gPSBzdW0gJiAweGZmO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjb21wQXJyYXkgPSBuZXcgVWludDhBcnJheShjb2xvcnMgKyAxKTtcbiAgICAgIGNvbnN0IGJpdE1hc2sgPSAoMSA8PCBiaXRzKSAtIDE7XG4gICAgICBsZXQgaiA9IDAsXG4gICAgICAgICAgayA9IGJ1ZmZlckxlbmd0aDtcbiAgICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBjb2x1bW5zOyArK2kpIHtcbiAgICAgICAgZm9yIChsZXQga2sgPSAwOyBrayA8IGNvbG9yczsgKytraykge1xuICAgICAgICAgIGlmIChpbmJpdHMgPCBiaXRzKSB7XG4gICAgICAgICAgICBpbmJ1ZiA9IGluYnVmIDw8IDggfCByYXdCeXRlc1tqKytdICYgMHhmZjtcbiAgICAgICAgICAgIGluYml0cyArPSA4O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbXBBcnJheVtra10gPSBjb21wQXJyYXlba2tdICsgKGluYnVmID4+IGluYml0cyAtIGJpdHMpICYgYml0TWFzaztcbiAgICAgICAgICBpbmJpdHMgLT0gYml0cztcbiAgICAgICAgICBvdXRidWYgPSBvdXRidWYgPDwgYml0cyB8IGNvbXBBcnJheVtra107XG4gICAgICAgICAgb3V0Yml0cyArPSBiaXRzO1xuXG4gICAgICAgICAgaWYgKG91dGJpdHMgPj0gOCkge1xuICAgICAgICAgICAgYnVmZmVyW2srK10gPSBvdXRidWYgPj4gb3V0Yml0cyAtIDggJiAweGZmO1xuICAgICAgICAgICAgb3V0Yml0cyAtPSA4O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAob3V0Yml0cyA+IDApIHtcbiAgICAgICAgYnVmZmVyW2srK10gPSAob3V0YnVmIDw8IDggLSBvdXRiaXRzKSArIChpbmJ1ZiAmICgxIDw8IDggLSBvdXRiaXRzKSAtIDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuYnVmZmVyTGVuZ3RoICs9IHJvd0J5dGVzO1xuICB9XG5cbiAgcmVhZEJsb2NrUG5nKCkge1xuICAgIGNvbnN0IHJvd0J5dGVzID0gdGhpcy5yb3dCeXRlcztcbiAgICBjb25zdCBwaXhCeXRlcyA9IHRoaXMucGl4Qnl0ZXM7XG4gICAgY29uc3QgcHJlZGljdG9yID0gdGhpcy5zdHIuZ2V0Qnl0ZSgpO1xuICAgIGNvbnN0IHJhd0J5dGVzID0gdGhpcy5zdHIuZ2V0Qnl0ZXMocm93Qnl0ZXMpO1xuICAgIHRoaXMuZW9mID0gIXJhd0J5dGVzLmxlbmd0aDtcblxuICAgIGlmICh0aGlzLmVvZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyTGVuZ3RoO1xuICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMuZW5zdXJlQnVmZmVyKGJ1ZmZlckxlbmd0aCArIHJvd0J5dGVzKTtcbiAgICBsZXQgcHJldlJvdyA9IGJ1ZmZlci5zdWJhcnJheShidWZmZXJMZW5ndGggLSByb3dCeXRlcywgYnVmZmVyTGVuZ3RoKTtcblxuICAgIGlmIChwcmV2Um93Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcHJldlJvdyA9IG5ldyBVaW50OEFycmF5KHJvd0J5dGVzKTtcbiAgICB9XG5cbiAgICBsZXQgaSxcbiAgICAgICAgaiA9IGJ1ZmZlckxlbmd0aCxcbiAgICAgICAgdXAsXG4gICAgICAgIGM7XG5cbiAgICBzd2l0Y2ggKHByZWRpY3Rvcikge1xuICAgICAgY2FzZSAwOlxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcm93Qnl0ZXM7ICsraSkge1xuICAgICAgICAgIGJ1ZmZlcltqKytdID0gcmF3Qnl0ZXNbaV07XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAxOlxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGl4Qnl0ZXM7ICsraSkge1xuICAgICAgICAgIGJ1ZmZlcltqKytdID0gcmF3Qnl0ZXNbaV07XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKDsgaSA8IHJvd0J5dGVzOyArK2kpIHtcbiAgICAgICAgICBidWZmZXJbal0gPSBidWZmZXJbaiAtIHBpeEJ5dGVzXSArIHJhd0J5dGVzW2ldICYgMHhmZjtcbiAgICAgICAgICBqKys7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAyOlxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcm93Qnl0ZXM7ICsraSkge1xuICAgICAgICAgIGJ1ZmZlcltqKytdID0gcHJldlJvd1tpXSArIHJhd0J5dGVzW2ldICYgMHhmZjtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDM6XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwaXhCeXRlczsgKytpKSB7XG4gICAgICAgICAgYnVmZmVyW2orK10gPSAocHJldlJvd1tpXSA+PiAxKSArIHJhd0J5dGVzW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICg7IGkgPCByb3dCeXRlczsgKytpKSB7XG4gICAgICAgICAgYnVmZmVyW2pdID0gKHByZXZSb3dbaV0gKyBidWZmZXJbaiAtIHBpeEJ5dGVzXSA+PiAxKSArIHJhd0J5dGVzW2ldICYgMHhmZjtcbiAgICAgICAgICBqKys7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSA0OlxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGl4Qnl0ZXM7ICsraSkge1xuICAgICAgICAgIHVwID0gcHJldlJvd1tpXTtcbiAgICAgICAgICBjID0gcmF3Qnl0ZXNbaV07XG4gICAgICAgICAgYnVmZmVyW2orK10gPSB1cCArIGM7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKDsgaSA8IHJvd0J5dGVzOyArK2kpIHtcbiAgICAgICAgICB1cCA9IHByZXZSb3dbaV07XG4gICAgICAgICAgY29uc3QgdXBMZWZ0ID0gcHJldlJvd1tpIC0gcGl4Qnl0ZXNdO1xuICAgICAgICAgIGNvbnN0IGxlZnQgPSBidWZmZXJbaiAtIHBpeEJ5dGVzXTtcbiAgICAgICAgICBjb25zdCBwID0gbGVmdCArIHVwIC0gdXBMZWZ0O1xuICAgICAgICAgIGxldCBwYSA9IHAgLSBsZWZ0O1xuXG4gICAgICAgICAgaWYgKHBhIDwgMCkge1xuICAgICAgICAgICAgcGEgPSAtcGE7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IHBiID0gcCAtIHVwO1xuXG4gICAgICAgICAgaWYgKHBiIDwgMCkge1xuICAgICAgICAgICAgcGIgPSAtcGI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IHBjID0gcCAtIHVwTGVmdDtcblxuICAgICAgICAgIGlmIChwYyA8IDApIHtcbiAgICAgICAgICAgIHBjID0gLXBjO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGMgPSByYXdCeXRlc1tpXTtcblxuICAgICAgICAgIGlmIChwYSA8PSBwYiAmJiBwYSA8PSBwYykge1xuICAgICAgICAgICAgYnVmZmVyW2orK10gPSBsZWZ0ICsgYztcbiAgICAgICAgICB9IGVsc2UgaWYgKHBiIDw9IHBjKSB7XG4gICAgICAgICAgICBidWZmZXJbaisrXSA9IHVwICsgYztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnVmZmVyW2orK10gPSB1cExlZnQgKyBjO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYFVuc3VwcG9ydGVkIHByZWRpY3RvcjogJHtwcmVkaWN0b3J9YCk7XG4gICAgfVxuXG4gICAgdGhpcy5idWZmZXJMZW5ndGggKz0gcm93Qnl0ZXM7XG4gIH1cblxufVxuXG5leHBvcnRzLlByZWRpY3RvclN0cmVhbSA9IFByZWRpY3RvclN0cmVhbTtcblxuLyoqKi8gfSksXG4vKiA0MyAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5SdW5MZW5ndGhTdHJlYW0gPSB2b2lkIDA7XG5cbnZhciBfZGVjb2RlX3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oMjkpO1xuXG5jbGFzcyBSdW5MZW5ndGhTdHJlYW0gZXh0ZW5kcyBfZGVjb2RlX3N0cmVhbS5EZWNvZGVTdHJlYW0ge1xuICBjb25zdHJ1Y3RvcihzdHIsIG1heWJlTGVuZ3RoKSB7XG4gICAgc3VwZXIobWF5YmVMZW5ndGgpO1xuICAgIHRoaXMuc3RyID0gc3RyO1xuICAgIHRoaXMuZGljdCA9IHN0ci5kaWN0O1xuICB9XG5cbiAgcmVhZEJsb2NrKCkge1xuICAgIGNvbnN0IHJlcGVhdEhlYWRlciA9IHRoaXMuc3RyLmdldEJ5dGVzKDIpO1xuXG4gICAgaWYgKCFyZXBlYXRIZWFkZXIgfHwgcmVwZWF0SGVhZGVyLmxlbmd0aCA8IDIgfHwgcmVwZWF0SGVhZGVyWzBdID09PSAxMjgpIHtcbiAgICAgIHRoaXMuZW9mID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgYnVmZmVyO1xuICAgIGxldCBidWZmZXJMZW5ndGggPSB0aGlzLmJ1ZmZlckxlbmd0aDtcbiAgICBsZXQgbiA9IHJlcGVhdEhlYWRlclswXTtcblxuICAgIGlmIChuIDwgMTI4KSB7XG4gICAgICBidWZmZXIgPSB0aGlzLmVuc3VyZUJ1ZmZlcihidWZmZXJMZW5ndGggKyBuICsgMSk7XG4gICAgICBidWZmZXJbYnVmZmVyTGVuZ3RoKytdID0gcmVwZWF0SGVhZGVyWzFdO1xuXG4gICAgICBpZiAobiA+IDApIHtcbiAgICAgICAgY29uc3Qgc291cmNlID0gdGhpcy5zdHIuZ2V0Qnl0ZXMobik7XG4gICAgICAgIGJ1ZmZlci5zZXQoc291cmNlLCBidWZmZXJMZW5ndGgpO1xuICAgICAgICBidWZmZXJMZW5ndGggKz0gbjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbiA9IDI1NyAtIG47XG4gICAgICBjb25zdCBiID0gcmVwZWF0SGVhZGVyWzFdO1xuICAgICAgYnVmZmVyID0gdGhpcy5lbnN1cmVCdWZmZXIoYnVmZmVyTGVuZ3RoICsgbiArIDEpO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICBidWZmZXJbYnVmZmVyTGVuZ3RoKytdID0gYjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IGJ1ZmZlckxlbmd0aDtcbiAgfVxuXG59XG5cbmV4cG9ydHMuUnVuTGVuZ3RoU3RyZWFtID0gUnVuTGVuZ3RoU3RyZWFtO1xuXG4vKioqLyB9KSxcbi8qIDQ0ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLkZvbnQgPSBleHBvcnRzLkVycm9yRm9udCA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9jZmZfcGFyc2VyID0gX193X3BkZmpzX3JlcXVpcmVfXyg0NSk7XG5cbnZhciBfZm9udHNfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDE4KTtcblxudmFyIF9nbHlwaGxpc3QgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIwKTtcblxudmFyIF9lbmNvZGluZ3MgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDE5KTtcblxudmFyIF9zdGFuZGFyZF9mb250cyA9IF9fd19wZGZqc19yZXF1aXJlX18oNDcpO1xuXG52YXIgX3VuaWNvZGUgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIxKTtcblxudmFyIF90b191bmljb2RlX21hcCA9IF9fd19wZGZqc19yZXF1aXJlX18oNDgpO1xuXG52YXIgX2NmZl9mb250ID0gX193X3BkZmpzX3JlcXVpcmVfXyg0OSk7XG5cbnZhciBfZm9udF9yZW5kZXJlciA9IF9fd19wZGZqc19yZXF1aXJlX18oNTApO1xuXG52YXIgX2dseWYgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDUxKTtcblxudmFyIF9jbWFwID0gX193X3BkZmpzX3JlcXVpcmVfXygyNik7XG5cbnZhciBfb3BlbnR5cGVfZmlsZV9idWlsZGVyID0gX193X3BkZmpzX3JlcXVpcmVfXyg1Mik7XG5cbnZhciBfY29yZV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oOSk7XG5cbnZhciBfc3RyZWFtID0gX193X3BkZmpzX3JlcXVpcmVfXygxMCk7XG5cbnZhciBfdHlwZTFfZm9udCA9IF9fd19wZGZqc19yZXF1aXJlX18oNTMpO1xuXG5jb25zdCBQUklWQVRFX1VTRV9BUkVBUyA9IFtbMHhlMDAwLCAweGY4ZmZdLCBbMHgxMDAwMDAsIDB4MTBmZmZkXV07XG5jb25zdCBQREZfR0xZUEhfU1BBQ0VfVU5JVFMgPSAxMDAwO1xuY29uc3QgRVhQT1JUX0RBVEFfUFJPUEVSVElFUyA9IFtcImFzY2VudFwiLCBcImJib3hcIiwgXCJibGFja1wiLCBcImJvbGRcIiwgXCJjaGFyUHJvY09wZXJhdG9yTGlzdFwiLCBcImNvbXBvc2l0ZVwiLCBcImNzc0ZvbnRJbmZvXCIsIFwiZGF0YVwiLCBcImRlZmF1bHRWTWV0cmljc1wiLCBcImRlZmF1bHRXaWR0aFwiLCBcImRlc2NlbnRcIiwgXCJmYWxsYmFja05hbWVcIiwgXCJmb250TWF0cml4XCIsIFwiZm9udFR5cGVcIiwgXCJpc1R5cGUzRm9udFwiLCBcIml0YWxpY1wiLCBcImxvYWRlZE5hbWVcIiwgXCJtaW1ldHlwZVwiLCBcIm1pc3NpbmdGaWxlXCIsIFwibmFtZVwiLCBcInJlbWVhc3VyZVwiLCBcInN1YnR5cGVcIiwgXCJ0eXBlXCIsIFwidmVydGljYWxcIl07XG5jb25zdCBFWFBPUlRfREFUQV9FWFRSQV9QUk9QRVJUSUVTID0gW1wiY01hcFwiLCBcImRlZmF1bHRFbmNvZGluZ1wiLCBcImRpZmZlcmVuY2VzXCIsIFwiaXNNb25vc3BhY2VcIiwgXCJpc1NlcmlmRm9udFwiLCBcImlzU3ltYm9saWNGb250XCIsIFwic2VhY01hcFwiLCBcInRvRm9udENoYXJcIiwgXCJ0b1VuaWNvZGVcIiwgXCJ2bWV0cmljc1wiLCBcIndpZHRoc1wiXTtcblxuZnVuY3Rpb24gYWRqdXN0V2lkdGhzKHByb3BlcnRpZXMpIHtcbiAgaWYgKCFwcm9wZXJ0aWVzLmZvbnRNYXRyaXgpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocHJvcGVydGllcy5mb250TWF0cml4WzBdID09PSBfdXRpbC5GT05UX0lERU5USVRZX01BVFJJWFswXSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHNjYWxlID0gMC4wMDEgLyBwcm9wZXJ0aWVzLmZvbnRNYXRyaXhbMF07XG4gIGNvbnN0IGdseXBoc1dpZHRocyA9IHByb3BlcnRpZXMud2lkdGhzO1xuXG4gIGZvciAoY29uc3QgZ2x5cGggaW4gZ2x5cGhzV2lkdGhzKSB7XG4gICAgZ2x5cGhzV2lkdGhzW2dseXBoXSAqPSBzY2FsZTtcbiAgfVxuXG4gIHByb3BlcnRpZXMuZGVmYXVsdFdpZHRoICo9IHNjYWxlO1xufVxuXG5mdW5jdGlvbiBhZGp1c3RUb1VuaWNvZGUocHJvcGVydGllcywgYnVpbHRJbkVuY29kaW5nKSB7XG4gIGlmIChwcm9wZXJ0aWVzLmlzSW50ZXJuYWxGb250KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGJ1aWx0SW5FbmNvZGluZyA9PT0gcHJvcGVydGllcy5kZWZhdWx0RW5jb2RpbmcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocHJvcGVydGllcy50b1VuaWNvZGUgaW5zdGFuY2VvZiBfdG9fdW5pY29kZV9tYXAuSWRlbnRpdHlUb1VuaWNvZGVNYXApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB0b1VuaWNvZGUgPSBbXSxcbiAgICAgICAgZ2x5cGhzVW5pY29kZU1hcCA9ICgwLCBfZ2x5cGhsaXN0LmdldEdseXBoc1VuaWNvZGUpKCk7XG5cbiAgZm9yIChjb25zdCBjaGFyQ29kZSBpbiBidWlsdEluRW5jb2RpbmcpIHtcbiAgICBpZiAocHJvcGVydGllcy5oYXNJbmNsdWRlZFRvVW5pY29kZU1hcCkge1xuICAgICAgaWYgKHByb3BlcnRpZXMudG9Vbmljb2RlLmhhcyhjaGFyQ29kZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wZXJ0aWVzLmhhc0VuY29kaW5nKSB7XG4gICAgICBpZiAocHJvcGVydGllcy5kaWZmZXJlbmNlcy5sZW5ndGggPT09IDAgfHwgcHJvcGVydGllcy5kaWZmZXJlbmNlc1tjaGFyQ29kZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBnbHlwaE5hbWUgPSBidWlsdEluRW5jb2RpbmdbY2hhckNvZGVdO1xuICAgIGNvbnN0IHVuaWNvZGUgPSAoMCwgX3VuaWNvZGUuZ2V0VW5pY29kZUZvckdseXBoKShnbHlwaE5hbWUsIGdseXBoc1VuaWNvZGVNYXApO1xuXG4gICAgaWYgKHVuaWNvZGUgIT09IC0xKSB7XG4gICAgICB0b1VuaWNvZGVbY2hhckNvZGVdID0gU3RyaW5nLmZyb21DaGFyQ29kZSh1bmljb2RlKTtcbiAgICB9XG4gIH1cblxuICBpZiAodG9Vbmljb2RlLmxlbmd0aCA+IDApIHtcbiAgICBwcm9wZXJ0aWVzLnRvVW5pY29kZS5hbWVuZCh0b1VuaWNvZGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFtZW5kRmFsbGJhY2tUb1VuaWNvZGUocHJvcGVydGllcykge1xuICBpZiAoIXByb3BlcnRpZXMuZmFsbGJhY2tUb1VuaWNvZGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocHJvcGVydGllcy50b1VuaWNvZGUgaW5zdGFuY2VvZiBfdG9fdW5pY29kZV9tYXAuSWRlbnRpdHlUb1VuaWNvZGVNYXApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB0b1VuaWNvZGUgPSBbXTtcblxuICBmb3IgKGNvbnN0IGNoYXJDb2RlIGluIHByb3BlcnRpZXMuZmFsbGJhY2tUb1VuaWNvZGUpIHtcbiAgICBpZiAocHJvcGVydGllcy50b1VuaWNvZGUuaGFzKGNoYXJDb2RlKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdG9Vbmljb2RlW2NoYXJDb2RlXSA9IHByb3BlcnRpZXMuZmFsbGJhY2tUb1VuaWNvZGVbY2hhckNvZGVdO1xuICB9XG5cbiAgaWYgKHRvVW5pY29kZS5sZW5ndGggPiAwKSB7XG4gICAgcHJvcGVydGllcy50b1VuaWNvZGUuYW1lbmQodG9Vbmljb2RlKTtcbiAgfVxufVxuXG5jbGFzcyBHbHlwaCB7XG4gIGNvbnN0cnVjdG9yKG9yaWdpbmFsQ2hhckNvZGUsIGZvbnRDaGFyLCB1bmljb2RlLCBhY2NlbnQsIHdpZHRoLCB2bWV0cmljLCBvcGVyYXRvckxpc3RJZCwgaXNTcGFjZSwgaXNJbkZvbnQpIHtcbiAgICB0aGlzLm9yaWdpbmFsQ2hhckNvZGUgPSBvcmlnaW5hbENoYXJDb2RlO1xuICAgIHRoaXMuZm9udENoYXIgPSBmb250Q2hhcjtcbiAgICB0aGlzLnVuaWNvZGUgPSB1bmljb2RlO1xuICAgIHRoaXMuYWNjZW50ID0gYWNjZW50O1xuICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLnZtZXRyaWMgPSB2bWV0cmljO1xuICAgIHRoaXMub3BlcmF0b3JMaXN0SWQgPSBvcGVyYXRvckxpc3RJZDtcbiAgICB0aGlzLmlzU3BhY2UgPSBpc1NwYWNlO1xuICAgIHRoaXMuaXNJbkZvbnQgPSBpc0luRm9udDtcbiAgfVxuXG4gIG1hdGNoZXNGb3JDYWNoZShvcmlnaW5hbENoYXJDb2RlLCBmb250Q2hhciwgdW5pY29kZSwgYWNjZW50LCB3aWR0aCwgdm1ldHJpYywgb3BlcmF0b3JMaXN0SWQsIGlzU3BhY2UsIGlzSW5Gb250KSB7XG4gICAgcmV0dXJuIHRoaXMub3JpZ2luYWxDaGFyQ29kZSA9PT0gb3JpZ2luYWxDaGFyQ29kZSAmJiB0aGlzLmZvbnRDaGFyID09PSBmb250Q2hhciAmJiB0aGlzLnVuaWNvZGUgPT09IHVuaWNvZGUgJiYgdGhpcy5hY2NlbnQgPT09IGFjY2VudCAmJiB0aGlzLndpZHRoID09PSB3aWR0aCAmJiB0aGlzLnZtZXRyaWMgPT09IHZtZXRyaWMgJiYgdGhpcy5vcGVyYXRvckxpc3RJZCA9PT0gb3BlcmF0b3JMaXN0SWQgJiYgdGhpcy5pc1NwYWNlID09PSBpc1NwYWNlICYmIHRoaXMuaXNJbkZvbnQgPT09IGlzSW5Gb250O1xuICB9XG5cbn1cblxuZnVuY3Rpb24gaW50MTYoYjAsIGIxKSB7XG4gIHJldHVybiAoYjAgPDwgOCkgKyBiMTtcbn1cblxuZnVuY3Rpb24gd3JpdGVTaWduZWRJbnQxNihieXRlcywgaW5kZXgsIHZhbHVlKSB7XG4gIGJ5dGVzW2luZGV4ICsgMV0gPSB2YWx1ZTtcbiAgYnl0ZXNbaW5kZXhdID0gdmFsdWUgPj4+IDg7XG59XG5cbmZ1bmN0aW9uIHNpZ25lZEludDE2KGIwLCBiMSkge1xuICBjb25zdCB2YWx1ZSA9IChiMCA8PCA4KSArIGIxO1xuICByZXR1cm4gdmFsdWUgJiAxIDw8IDE1ID8gdmFsdWUgLSAweDEwMDAwIDogdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGludDMyKGIwLCBiMSwgYjIsIGIzKSB7XG4gIHJldHVybiAoYjAgPDwgMjQpICsgKGIxIDw8IDE2KSArIChiMiA8PCA4KSArIGIzO1xufVxuXG5mdW5jdGlvbiBzdHJpbmcxNih2YWx1ZSkge1xuICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSh2YWx1ZSA+PiA4ICYgMHhmZiwgdmFsdWUgJiAweGZmKTtcbn1cblxuZnVuY3Rpb24gc2FmZVN0cmluZzE2KHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA+IDB4N2ZmZikge1xuICAgIHZhbHVlID0gMHg3ZmZmO1xuICB9IGVsc2UgaWYgKHZhbHVlIDwgLTB4ODAwMCkge1xuICAgIHZhbHVlID0gLTB4ODAwMDtcbiAgfVxuXG4gIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHZhbHVlID4+IDggJiAweGZmLCB2YWx1ZSAmIDB4ZmYpO1xufVxuXG5mdW5jdGlvbiBpc1RydWVUeXBlRmlsZShmaWxlKSB7XG4gIGNvbnN0IGhlYWRlciA9IGZpbGUucGVla0J5dGVzKDQpO1xuICByZXR1cm4gKDAsIF9jb3JlX3V0aWxzLnJlYWRVaW50MzIpKGhlYWRlciwgMCkgPT09IDB4MDAwMTAwMDAgfHwgKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKGhlYWRlcikgPT09IFwidHJ1ZVwiO1xufVxuXG5mdW5jdGlvbiBpc1RydWVUeXBlQ29sbGVjdGlvbkZpbGUoZmlsZSkge1xuICBjb25zdCBoZWFkZXIgPSBmaWxlLnBlZWtCeXRlcyg0KTtcbiAgcmV0dXJuICgwLCBfdXRpbC5ieXRlc1RvU3RyaW5nKShoZWFkZXIpID09PSBcInR0Y2ZcIjtcbn1cblxuZnVuY3Rpb24gaXNPcGVuVHlwZUZpbGUoZmlsZSkge1xuICBjb25zdCBoZWFkZXIgPSBmaWxlLnBlZWtCeXRlcyg0KTtcbiAgcmV0dXJuICgwLCBfdXRpbC5ieXRlc1RvU3RyaW5nKShoZWFkZXIpID09PSBcIk9UVE9cIjtcbn1cblxuZnVuY3Rpb24gaXNUeXBlMUZpbGUoZmlsZSkge1xuICBjb25zdCBoZWFkZXIgPSBmaWxlLnBlZWtCeXRlcygyKTtcblxuICBpZiAoaGVhZGVyWzBdID09PSAweDI1ICYmIGhlYWRlclsxXSA9PT0gMHgyMSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGhlYWRlclswXSA9PT0gMHg4MCAmJiBoZWFkZXJbMV0gPT09IDB4MDEpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNDRkZGaWxlKGZpbGUpIHtcbiAgY29uc3QgaGVhZGVyID0gZmlsZS5wZWVrQnl0ZXMoNCk7XG5cbiAgaWYgKGhlYWRlclswXSA+PSAxICYmIGhlYWRlclszXSA+PSAxICYmIGhlYWRlclszXSA8PSA0KSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldEZvbnRGaWxlVHlwZShmaWxlLCB7XG4gIHR5cGUsXG4gIHN1YnR5cGUsXG4gIGNvbXBvc2l0ZVxufSkge1xuICBsZXQgZmlsZVR5cGUsIGZpbGVTdWJ0eXBlO1xuXG4gIGlmIChpc1RydWVUeXBlRmlsZShmaWxlKSB8fCBpc1RydWVUeXBlQ29sbGVjdGlvbkZpbGUoZmlsZSkpIHtcbiAgICBpZiAoY29tcG9zaXRlKSB7XG4gICAgICBmaWxlVHlwZSA9IFwiQ0lERm9udFR5cGUyXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpbGVUeXBlID0gXCJUcnVlVHlwZVwiO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc09wZW5UeXBlRmlsZShmaWxlKSkge1xuICAgIGlmIChjb21wb3NpdGUpIHtcbiAgICAgIGZpbGVUeXBlID0gXCJDSURGb250VHlwZTJcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgZmlsZVR5cGUgPSBcIk9wZW5UeXBlXCI7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzVHlwZTFGaWxlKGZpbGUpKSB7XG4gICAgaWYgKGNvbXBvc2l0ZSkge1xuICAgICAgZmlsZVR5cGUgPSBcIkNJREZvbnRUeXBlMFwiO1xuICAgIH0gZWxzZSB7XG4gICAgICBmaWxlVHlwZSA9IHR5cGUgPT09IFwiTU1UeXBlMVwiID8gXCJNTVR5cGUxXCIgOiBcIlR5cGUxXCI7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzQ0ZGRmlsZShmaWxlKSkge1xuICAgIGlmIChjb21wb3NpdGUpIHtcbiAgICAgIGZpbGVUeXBlID0gXCJDSURGb250VHlwZTBcIjtcbiAgICAgIGZpbGVTdWJ0eXBlID0gXCJDSURGb250VHlwZTBDXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpbGVUeXBlID0gdHlwZSA9PT0gXCJNTVR5cGUxXCIgPyBcIk1NVHlwZTFcIiA6IFwiVHlwZTFcIjtcbiAgICAgIGZpbGVTdWJ0eXBlID0gXCJUeXBlMUNcIjtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgKDAsIF91dGlsLndhcm4pKFwiZ2V0Rm9udEZpbGVUeXBlOiBVbmFibGUgdG8gZGV0ZWN0IGNvcnJlY3QgZm9udCBmaWxlIFR5cGUvU3VidHlwZS5cIik7XG4gICAgZmlsZVR5cGUgPSB0eXBlO1xuICAgIGZpbGVTdWJ0eXBlID0gc3VidHlwZTtcbiAgfVxuXG4gIHJldHVybiBbZmlsZVR5cGUsIGZpbGVTdWJ0eXBlXTtcbn1cblxuZnVuY3Rpb24gYXBwbHlTdGFuZGFyZEZvbnRHbHlwaE1hcChtYXAsIGdseXBoTWFwKSB7XG4gIGZvciAoY29uc3QgY2hhckNvZGUgaW4gZ2x5cGhNYXApIHtcbiAgICBtYXBbK2NoYXJDb2RlXSA9IGdseXBoTWFwW2NoYXJDb2RlXTtcbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZFRvRm9udENoYXIoZW5jb2RpbmcsIGdseXBoc1VuaWNvZGVNYXAsIGRpZmZlcmVuY2VzKSB7XG4gIGNvbnN0IHRvRm9udENoYXIgPSBbXTtcbiAgbGV0IHVuaWNvZGU7XG5cbiAgZm9yIChsZXQgaSA9IDAsIGlpID0gZW5jb2RpbmcubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgIHVuaWNvZGUgPSAoMCwgX3VuaWNvZGUuZ2V0VW5pY29kZUZvckdseXBoKShlbmNvZGluZ1tpXSwgZ2x5cGhzVW5pY29kZU1hcCk7XG5cbiAgICBpZiAodW5pY29kZSAhPT0gLTEpIHtcbiAgICAgIHRvRm9udENoYXJbaV0gPSB1bmljb2RlO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgY2hhckNvZGUgaW4gZGlmZmVyZW5jZXMpIHtcbiAgICB1bmljb2RlID0gKDAsIF91bmljb2RlLmdldFVuaWNvZGVGb3JHbHlwaCkoZGlmZmVyZW5jZXNbY2hhckNvZGVdLCBnbHlwaHNVbmljb2RlTWFwKTtcblxuICAgIGlmICh1bmljb2RlICE9PSAtMSkge1xuICAgICAgdG9Gb250Q2hhclsrY2hhckNvZGVdID0gdW5pY29kZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdG9Gb250Q2hhcjtcbn1cblxuZnVuY3Rpb24gY29udmVydENpZFN0cmluZyhjaGFyQ29kZSwgY2lkLCBzaG91bGRUaHJvdyA9IGZhbHNlKSB7XG4gIHN3aXRjaCAoY2lkLmxlbmd0aCkge1xuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiBjaWQuY2hhckNvZGVBdCgwKTtcblxuICAgIGNhc2UgMjpcbiAgICAgIHJldHVybiBjaWQuY2hhckNvZGVBdCgwKSA8PCA4IHwgY2lkLmNoYXJDb2RlQXQoMSk7XG4gIH1cblxuICBjb25zdCBtc2cgPSBgVW5zdXBwb3J0ZWQgQ0lEIHN0cmluZyAoY2hhckNvZGUgJHtjaGFyQ29kZX0pOiBcIiR7Y2lkfVwiLmA7XG5cbiAgaWYgKHNob3VsZFRocm93KSB7XG4gICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKG1zZyk7XG4gIH1cblxuICAoMCwgX3V0aWwud2FybikobXNnKTtcbiAgcmV0dXJuIGNpZDtcbn1cblxuZnVuY3Rpb24gYWRqdXN0TWFwcGluZyhjaGFyQ29kZVRvR2x5cGhJZCwgaGFzR2x5cGgsIG5ld0dseXBoWmVyb0lkKSB7XG4gIGNvbnN0IG5ld01hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGNvbnN0IHRvRm9udENoYXIgPSBbXTtcbiAgbGV0IHByaXZhdGVVc2VBcmVhSW5kZXggPSAwO1xuICBsZXQgbmV4dEF2YWlsYWJsZUZvbnRDaGFyQ29kZSA9IFBSSVZBVEVfVVNFX0FSRUFTW3ByaXZhdGVVc2VBcmVhSW5kZXhdWzBdO1xuICBsZXQgcHJpdmF0ZVVzZU9mZmV0RW5kID0gUFJJVkFURV9VU0VfQVJFQVNbcHJpdmF0ZVVzZUFyZWFJbmRleF1bMV07XG5cbiAgZm9yIChsZXQgb3JpZ2luYWxDaGFyQ29kZSBpbiBjaGFyQ29kZVRvR2x5cGhJZCkge1xuICAgIG9yaWdpbmFsQ2hhckNvZGUgfD0gMDtcbiAgICBsZXQgZ2x5cGhJZCA9IGNoYXJDb2RlVG9HbHlwaElkW29yaWdpbmFsQ2hhckNvZGVdO1xuXG4gICAgaWYgKCFoYXNHbHlwaChnbHlwaElkKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG5leHRBdmFpbGFibGVGb250Q2hhckNvZGUgPiBwcml2YXRlVXNlT2ZmZXRFbmQpIHtcbiAgICAgIHByaXZhdGVVc2VBcmVhSW5kZXgrKztcblxuICAgICAgaWYgKHByaXZhdGVVc2VBcmVhSW5kZXggPj0gUFJJVkFURV9VU0VfQVJFQVMubGVuZ3RoKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShcIlJhbiBvdXQgb2Ygc3BhY2UgaW4gZm9udCBwcml2YXRlIHVzZSBhcmVhLlwiKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIG5leHRBdmFpbGFibGVGb250Q2hhckNvZGUgPSBQUklWQVRFX1VTRV9BUkVBU1twcml2YXRlVXNlQXJlYUluZGV4XVswXTtcbiAgICAgIHByaXZhdGVVc2VPZmZldEVuZCA9IFBSSVZBVEVfVVNFX0FSRUFTW3ByaXZhdGVVc2VBcmVhSW5kZXhdWzFdO1xuICAgIH1cblxuICAgIGNvbnN0IGZvbnRDaGFyQ29kZSA9IG5leHRBdmFpbGFibGVGb250Q2hhckNvZGUrKztcblxuICAgIGlmIChnbHlwaElkID09PSAwKSB7XG4gICAgICBnbHlwaElkID0gbmV3R2x5cGhaZXJvSWQ7XG4gICAgfVxuXG4gICAgbmV3TWFwW2ZvbnRDaGFyQ29kZV0gPSBnbHlwaElkO1xuICAgIHRvRm9udENoYXJbb3JpZ2luYWxDaGFyQ29kZV0gPSBmb250Q2hhckNvZGU7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRvRm9udENoYXIsXG4gICAgY2hhckNvZGVUb0dseXBoSWQ6IG5ld01hcCxcbiAgICBuZXh0QXZhaWxhYmxlRm9udENoYXJDb2RlXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFJhbmdlcyhnbHlwaHMsIG51bUdseXBocykge1xuICBjb25zdCBjb2RlcyA9IFtdO1xuXG4gIGZvciAoY29uc3QgY2hhckNvZGUgaW4gZ2x5cGhzKSB7XG4gICAgaWYgKGdseXBoc1tjaGFyQ29kZV0gPj0gbnVtR2x5cGhzKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb2Rlcy5wdXNoKHtcbiAgICAgIGZvbnRDaGFyQ29kZTogY2hhckNvZGUgfCAwLFxuICAgICAgZ2x5cGhJZDogZ2x5cGhzW2NoYXJDb2RlXVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKGNvZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIGNvZGVzLnB1c2goe1xuICAgICAgZm9udENoYXJDb2RlOiAwLFxuICAgICAgZ2x5cGhJZDogMFxuICAgIH0pO1xuICB9XG5cbiAgY29kZXMuc29ydChmdW5jdGlvbiBmb250R2V0UmFuZ2VzU29ydChhLCBiKSB7XG4gICAgcmV0dXJuIGEuZm9udENoYXJDb2RlIC0gYi5mb250Q2hhckNvZGU7XG4gIH0pO1xuICBjb25zdCByYW5nZXMgPSBbXTtcbiAgY29uc3QgbGVuZ3RoID0gY29kZXMubGVuZ3RoO1xuXG4gIGZvciAobGV0IG4gPSAwOyBuIDwgbGVuZ3RoOykge1xuICAgIGNvbnN0IHN0YXJ0ID0gY29kZXNbbl0uZm9udENoYXJDb2RlO1xuICAgIGNvbnN0IGNvZGVJbmRpY2VzID0gW2NvZGVzW25dLmdseXBoSWRdO1xuICAgICsrbjtcbiAgICBsZXQgZW5kID0gc3RhcnQ7XG5cbiAgICB3aGlsZSAobiA8IGxlbmd0aCAmJiBlbmQgKyAxID09PSBjb2Rlc1tuXS5mb250Q2hhckNvZGUpIHtcbiAgICAgIGNvZGVJbmRpY2VzLnB1c2goY29kZXNbbl0uZ2x5cGhJZCk7XG4gICAgICArK2VuZDtcbiAgICAgICsrbjtcblxuICAgICAgaWYgKGVuZCA9PT0gMHhmZmZmKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJhbmdlcy5wdXNoKFtzdGFydCwgZW5kLCBjb2RlSW5kaWNlc10pO1xuICB9XG5cbiAgcmV0dXJuIHJhbmdlcztcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ21hcFRhYmxlKGdseXBocywgbnVtR2x5cGhzKSB7XG4gIGNvbnN0IHJhbmdlcyA9IGdldFJhbmdlcyhnbHlwaHMsIG51bUdseXBocyk7XG4gIGNvbnN0IG51bVRhYmxlcyA9IHJhbmdlc1tyYW5nZXMubGVuZ3RoIC0gMV1bMV0gPiAweGZmZmYgPyAyIDogMTtcbiAgbGV0IGNtYXAgPSBcIlxceDAwXFx4MDBcIiArIHN0cmluZzE2KG51bVRhYmxlcykgKyBcIlxceDAwXFx4MDNcIiArIFwiXFx4MDBcXHgwMVwiICsgKDAsIF91dGlsLnN0cmluZzMyKSg0ICsgbnVtVGFibGVzICogOCk7XG4gIGxldCBpLCBpaSwgaiwgamo7XG5cbiAgZm9yIChpID0gcmFuZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgaWYgKHJhbmdlc1tpXVswXSA8PSAweGZmZmYpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGJtcExlbmd0aCA9IGkgKyAxO1xuXG4gIGlmIChyYW5nZXNbaV1bMF0gPCAweGZmZmYgJiYgcmFuZ2VzW2ldWzFdID09PSAweGZmZmYpIHtcbiAgICByYW5nZXNbaV1bMV0gPSAweGZmZmU7XG4gIH1cblxuICBjb25zdCB0cmFpbGluZ1Jhbmdlc0NvdW50ID0gcmFuZ2VzW2ldWzFdIDwgMHhmZmZmID8gMSA6IDA7XG4gIGNvbnN0IHNlZ0NvdW50ID0gYm1wTGVuZ3RoICsgdHJhaWxpbmdSYW5nZXNDb3VudDtcblxuICBjb25zdCBzZWFyY2hQYXJhbXMgPSBfb3BlbnR5cGVfZmlsZV9idWlsZGVyLk9wZW5UeXBlRmlsZUJ1aWxkZXIuZ2V0U2VhcmNoUGFyYW1zKHNlZ0NvdW50LCAyKTtcblxuICBsZXQgc3RhcnRDb3VudCA9IFwiXCI7XG4gIGxldCBlbmRDb3VudCA9IFwiXCI7XG4gIGxldCBpZERlbHRhcyA9IFwiXCI7XG4gIGxldCBpZFJhbmdlT2Zmc2V0cyA9IFwiXCI7XG4gIGxldCBnbHlwaHNJZHMgPSBcIlwiO1xuICBsZXQgYmlhcyA9IDA7XG4gIGxldCByYW5nZSwgc3RhcnQsIGVuZCwgY29kZXM7XG5cbiAgZm9yIChpID0gMCwgaWkgPSBibXBMZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgcmFuZ2UgPSByYW5nZXNbaV07XG4gICAgc3RhcnQgPSByYW5nZVswXTtcbiAgICBlbmQgPSByYW5nZVsxXTtcbiAgICBzdGFydENvdW50ICs9IHN0cmluZzE2KHN0YXJ0KTtcbiAgICBlbmRDb3VudCArPSBzdHJpbmcxNihlbmQpO1xuICAgIGNvZGVzID0gcmFuZ2VbMl07XG4gICAgbGV0IGNvbnRpZ3VvdXMgPSB0cnVlO1xuXG4gICAgZm9yIChqID0gMSwgamogPSBjb2Rlcy5sZW5ndGg7IGogPCBqajsgKytqKSB7XG4gICAgICBpZiAoY29kZXNbal0gIT09IGNvZGVzW2ogLSAxXSArIDEpIHtcbiAgICAgICAgY29udGlndW91cyA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWNvbnRpZ3VvdXMpIHtcbiAgICAgIGNvbnN0IG9mZnNldCA9IChzZWdDb3VudCAtIGkpICogMiArIGJpYXMgKiAyO1xuICAgICAgYmlhcyArPSBlbmQgLSBzdGFydCArIDE7XG4gICAgICBpZERlbHRhcyArPSBzdHJpbmcxNigwKTtcbiAgICAgIGlkUmFuZ2VPZmZzZXRzICs9IHN0cmluZzE2KG9mZnNldCk7XG5cbiAgICAgIGZvciAoaiA9IDAsIGpqID0gY29kZXMubGVuZ3RoOyBqIDwgamo7ICsraikge1xuICAgICAgICBnbHlwaHNJZHMgKz0gc3RyaW5nMTYoY29kZXNbal0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzdGFydENvZGUgPSBjb2Rlc1swXTtcbiAgICAgIGlkRGVsdGFzICs9IHN0cmluZzE2KHN0YXJ0Q29kZSAtIHN0YXJ0ICYgMHhmZmZmKTtcbiAgICAgIGlkUmFuZ2VPZmZzZXRzICs9IHN0cmluZzE2KDApO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0cmFpbGluZ1Jhbmdlc0NvdW50ID4gMCkge1xuICAgIGVuZENvdW50ICs9IFwiXFx4RkZcXHhGRlwiO1xuICAgIHN0YXJ0Q291bnQgKz0gXCJcXHhGRlxceEZGXCI7XG4gICAgaWREZWx0YXMgKz0gXCJcXHgwMFxceDAxXCI7XG4gICAgaWRSYW5nZU9mZnNldHMgKz0gXCJcXHgwMFxceDAwXCI7XG4gIH1cblxuICBjb25zdCBmb3JtYXQzMTQgPSBcIlxceDAwXFx4MDBcIiArIHN0cmluZzE2KDIgKiBzZWdDb3VudCkgKyBzdHJpbmcxNihzZWFyY2hQYXJhbXMucmFuZ2UpICsgc3RyaW5nMTYoc2VhcmNoUGFyYW1zLmVudHJ5KSArIHN0cmluZzE2KHNlYXJjaFBhcmFtcy5yYW5nZVNoaWZ0KSArIGVuZENvdW50ICsgXCJcXHgwMFxceDAwXCIgKyBzdGFydENvdW50ICsgaWREZWx0YXMgKyBpZFJhbmdlT2Zmc2V0cyArIGdseXBoc0lkcztcbiAgbGV0IGZvcm1hdDMxMDEyID0gXCJcIjtcbiAgbGV0IGhlYWRlcjMxMDEyID0gXCJcIjtcblxuICBpZiAobnVtVGFibGVzID4gMSkge1xuICAgIGNtYXAgKz0gXCJcXHgwMFxceDAzXCIgKyBcIlxceDAwXFx4MEFcIiArICgwLCBfdXRpbC5zdHJpbmczMikoNCArIG51bVRhYmxlcyAqIDggKyA0ICsgZm9ybWF0MzE0Lmxlbmd0aCk7XG4gICAgZm9ybWF0MzEwMTIgPSBcIlwiO1xuXG4gICAgZm9yIChpID0gMCwgaWkgPSByYW5nZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgcmFuZ2UgPSByYW5nZXNbaV07XG4gICAgICBzdGFydCA9IHJhbmdlWzBdO1xuICAgICAgY29kZXMgPSByYW5nZVsyXTtcbiAgICAgIGxldCBjb2RlID0gY29kZXNbMF07XG5cbiAgICAgIGZvciAoaiA9IDEsIGpqID0gY29kZXMubGVuZ3RoOyBqIDwgamo7ICsraikge1xuICAgICAgICBpZiAoY29kZXNbal0gIT09IGNvZGVzW2ogLSAxXSArIDEpIHtcbiAgICAgICAgICBlbmQgPSByYW5nZVswXSArIGogLSAxO1xuICAgICAgICAgIGZvcm1hdDMxMDEyICs9ICgwLCBfdXRpbC5zdHJpbmczMikoc3RhcnQpICsgKDAsIF91dGlsLnN0cmluZzMyKShlbmQpICsgKDAsIF91dGlsLnN0cmluZzMyKShjb2RlKTtcbiAgICAgICAgICBzdGFydCA9IGVuZCArIDE7XG4gICAgICAgICAgY29kZSA9IGNvZGVzW2pdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvcm1hdDMxMDEyICs9ICgwLCBfdXRpbC5zdHJpbmczMikoc3RhcnQpICsgKDAsIF91dGlsLnN0cmluZzMyKShyYW5nZVsxXSkgKyAoMCwgX3V0aWwuc3RyaW5nMzIpKGNvZGUpO1xuICAgIH1cblxuICAgIGhlYWRlcjMxMDEyID0gXCJcXHgwMFxceDBDXCIgKyBcIlxceDAwXFx4MDBcIiArICgwLCBfdXRpbC5zdHJpbmczMikoZm9ybWF0MzEwMTIubGVuZ3RoICsgMTYpICsgXCJcXHgwMFxceDAwXFx4MDBcXHgwMFwiICsgKDAsIF91dGlsLnN0cmluZzMyKShmb3JtYXQzMTAxMi5sZW5ndGggLyAxMik7XG4gIH1cblxuICByZXR1cm4gY21hcCArIFwiXFx4MDBcXHgwNFwiICsgc3RyaW5nMTYoZm9ybWF0MzE0Lmxlbmd0aCArIDQpICsgZm9ybWF0MzE0ICsgaGVhZGVyMzEwMTIgKyBmb3JtYXQzMTAxMjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVPUzJUYWJsZShvczIsIGZpbGUpIHtcbiAgZmlsZS5wb3MgPSAoZmlsZS5zdGFydCB8fCAwKSArIG9zMi5vZmZzZXQ7XG4gIGNvbnN0IHZlcnNpb24gPSBmaWxlLmdldFVpbnQxNigpO1xuICBmaWxlLnNraXAoNjApO1xuICBjb25zdCBzZWxlY3Rpb24gPSBmaWxlLmdldFVpbnQxNigpO1xuXG4gIGlmICh2ZXJzaW9uIDwgNCAmJiBzZWxlY3Rpb24gJiAweDAzMDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBmaXJzdENoYXIgPSBmaWxlLmdldFVpbnQxNigpO1xuICBjb25zdCBsYXN0Q2hhciA9IGZpbGUuZ2V0VWludDE2KCk7XG5cbiAgaWYgKGZpcnN0Q2hhciA+IGxhc3RDaGFyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZmlsZS5za2lwKDYpO1xuICBjb25zdCB1c1dpbkFzY2VudCA9IGZpbGUuZ2V0VWludDE2KCk7XG5cbiAgaWYgKHVzV2luQXNjZW50ID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgb3MyLmRhdGFbOF0gPSBvczIuZGF0YVs5XSA9IDA7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVPUzJUYWJsZShwcm9wZXJ0aWVzLCBjaGFyc3RyaW5ncywgb3ZlcnJpZGUpIHtcbiAgb3ZlcnJpZGUgPSBvdmVycmlkZSB8fCB7XG4gICAgdW5pdHNQZXJFbTogMCxcbiAgICB5TWF4OiAwLFxuICAgIHlNaW46IDAsXG4gICAgYXNjZW50OiAwLFxuICAgIGRlc2NlbnQ6IDBcbiAgfTtcbiAgbGV0IHVsVW5pY29kZVJhbmdlMSA9IDA7XG4gIGxldCB1bFVuaWNvZGVSYW5nZTIgPSAwO1xuICBsZXQgdWxVbmljb2RlUmFuZ2UzID0gMDtcbiAgbGV0IHVsVW5pY29kZVJhbmdlNCA9IDA7XG4gIGxldCBmaXJzdENoYXJJbmRleCA9IG51bGw7XG4gIGxldCBsYXN0Q2hhckluZGV4ID0gMDtcblxuICBpZiAoY2hhcnN0cmluZ3MpIHtcbiAgICBmb3IgKGxldCBjb2RlIGluIGNoYXJzdHJpbmdzKSB7XG4gICAgICBjb2RlIHw9IDA7XG5cbiAgICAgIGlmIChmaXJzdENoYXJJbmRleCA+IGNvZGUgfHwgIWZpcnN0Q2hhckluZGV4KSB7XG4gICAgICAgIGZpcnN0Q2hhckluZGV4ID0gY29kZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGxhc3RDaGFySW5kZXggPCBjb2RlKSB7XG4gICAgICAgIGxhc3RDaGFySW5kZXggPSBjb2RlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwb3NpdGlvbiA9ICgwLCBfdW5pY29kZS5nZXRVbmljb2RlUmFuZ2VGb3IpKGNvZGUpO1xuXG4gICAgICBpZiAocG9zaXRpb24gPCAzMikge1xuICAgICAgICB1bFVuaWNvZGVSYW5nZTEgfD0gMSA8PCBwb3NpdGlvbjtcbiAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24gPCA2NCkge1xuICAgICAgICB1bFVuaWNvZGVSYW5nZTIgfD0gMSA8PCBwb3NpdGlvbiAtIDMyO1xuICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbiA8IDk2KSB7XG4gICAgICAgIHVsVW5pY29kZVJhbmdlMyB8PSAxIDw8IHBvc2l0aW9uIC0gNjQ7XG4gICAgICB9IGVsc2UgaWYgKHBvc2l0aW9uIDwgMTIzKSB7XG4gICAgICAgIHVsVW5pY29kZVJhbmdlNCB8PSAxIDw8IHBvc2l0aW9uIC0gOTY7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJVbmljb2RlIHJhbmdlcyBCaXRzID4gMTIzIGFyZSByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNhZ2VcIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGxhc3RDaGFySW5kZXggPiAweGZmZmYpIHtcbiAgICAgIGxhc3RDaGFySW5kZXggPSAweGZmZmY7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZpcnN0Q2hhckluZGV4ID0gMDtcbiAgICBsYXN0Q2hhckluZGV4ID0gMjU1O1xuICB9XG5cbiAgY29uc3QgYmJveCA9IHByb3BlcnRpZXMuYmJveCB8fCBbMCwgMCwgMCwgMF07XG4gIGNvbnN0IHVuaXRzUGVyRW0gPSBvdmVycmlkZS51bml0c1BlckVtIHx8IDEgLyAocHJvcGVydGllcy5mb250TWF0cml4IHx8IF91dGlsLkZPTlRfSURFTlRJVFlfTUFUUklYKVswXTtcbiAgY29uc3Qgc2NhbGUgPSBwcm9wZXJ0aWVzLmFzY2VudFNjYWxlZCA/IDEuMCA6IHVuaXRzUGVyRW0gLyBQREZfR0xZUEhfU1BBQ0VfVU5JVFM7XG4gIGNvbnN0IHR5cG9Bc2NlbnQgPSBvdmVycmlkZS5hc2NlbnQgfHwgTWF0aC5yb3VuZChzY2FsZSAqIChwcm9wZXJ0aWVzLmFzY2VudCB8fCBiYm94WzNdKSk7XG4gIGxldCB0eXBvRGVzY2VudCA9IG92ZXJyaWRlLmRlc2NlbnQgfHwgTWF0aC5yb3VuZChzY2FsZSAqIChwcm9wZXJ0aWVzLmRlc2NlbnQgfHwgYmJveFsxXSkpO1xuXG4gIGlmICh0eXBvRGVzY2VudCA+IDAgJiYgcHJvcGVydGllcy5kZXNjZW50ID4gMCAmJiBiYm94WzFdIDwgMCkge1xuICAgIHR5cG9EZXNjZW50ID0gLXR5cG9EZXNjZW50O1xuICB9XG5cbiAgY29uc3Qgd2luQXNjZW50ID0gb3ZlcnJpZGUueU1heCB8fCB0eXBvQXNjZW50O1xuICBjb25zdCB3aW5EZXNjZW50ID0gLW92ZXJyaWRlLnlNaW4gfHwgLXR5cG9EZXNjZW50O1xuICByZXR1cm4gXCJcXHgwMFxceDAzXCIgKyBcIlxceDAyXFx4MjRcIiArIFwiXFx4MDFcXHhGNFwiICsgXCJcXHgwMFxceDA1XCIgKyBcIlxceDAwXFx4MDBcIiArIFwiXFx4MDJcXHg4QVwiICsgXCJcXHgwMlxceEJCXCIgKyBcIlxceDAwXFx4MDBcIiArIFwiXFx4MDBcXHg4Q1wiICsgXCJcXHgwMlxceDhBXCIgKyBcIlxceDAyXFx4QkJcIiArIFwiXFx4MDBcXHgwMFwiICsgXCJcXHgwMVxceERGXCIgKyBcIlxceDAwXFx4MzFcIiArIFwiXFx4MDFcXHgwMlwiICsgXCJcXHgwMFxceDAwXCIgKyBcIlxceDAwXFx4MDBcXHgwNlwiICsgU3RyaW5nLmZyb21DaGFyQ29kZShwcm9wZXJ0aWVzLmZpeGVkUGl0Y2ggPyAweDA5IDogMHgwMCkgKyBcIlxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFwiICsgKDAsIF91dGlsLnN0cmluZzMyKSh1bFVuaWNvZGVSYW5nZTEpICsgKDAsIF91dGlsLnN0cmluZzMyKSh1bFVuaWNvZGVSYW5nZTIpICsgKDAsIF91dGlsLnN0cmluZzMyKSh1bFVuaWNvZGVSYW5nZTMpICsgKDAsIF91dGlsLnN0cmluZzMyKSh1bFVuaWNvZGVSYW5nZTQpICsgXCJcXHgyQVxceDMyXFx4MzFcXHgyQVwiICsgc3RyaW5nMTYocHJvcGVydGllcy5pdGFsaWNBbmdsZSA/IDEgOiAwKSArIHN0cmluZzE2KGZpcnN0Q2hhckluZGV4IHx8IHByb3BlcnRpZXMuZmlyc3RDaGFyKSArIHN0cmluZzE2KGxhc3RDaGFySW5kZXggfHwgcHJvcGVydGllcy5sYXN0Q2hhcikgKyBzdHJpbmcxNih0eXBvQXNjZW50KSArIHN0cmluZzE2KHR5cG9EZXNjZW50KSArIFwiXFx4MDBcXHg2NFwiICsgc3RyaW5nMTYod2luQXNjZW50KSArIHN0cmluZzE2KHdpbkRlc2NlbnQpICsgXCJcXHgwMFxceDAwXFx4MDBcXHgwMFwiICsgXCJcXHgwMFxceDAwXFx4MDBcXHgwMFwiICsgc3RyaW5nMTYocHJvcGVydGllcy54SGVpZ2h0KSArIHN0cmluZzE2KHByb3BlcnRpZXMuY2FwSGVpZ2h0KSArIHN0cmluZzE2KDApICsgc3RyaW5nMTYoZmlyc3RDaGFySW5kZXggfHwgcHJvcGVydGllcy5maXJzdENoYXIpICsgXCJcXHgwMFxceDAzXCI7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVBvc3RUYWJsZShwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IGFuZ2xlID0gTWF0aC5mbG9vcihwcm9wZXJ0aWVzLml0YWxpY0FuZ2xlICogMiAqKiAxNik7XG4gIHJldHVybiBcIlxceDAwXFx4MDNcXHgwMFxceDAwXCIgKyAoMCwgX3V0aWwuc3RyaW5nMzIpKGFuZ2xlKSArIFwiXFx4MDBcXHgwMFwiICsgXCJcXHgwMFxceDAwXCIgKyAoMCwgX3V0aWwuc3RyaW5nMzIpKHByb3BlcnRpZXMuZml4ZWRQaXRjaCA/IDEgOiAwKSArIFwiXFx4MDBcXHgwMFxceDAwXFx4MDBcIiArIFwiXFx4MDBcXHgwMFxceDAwXFx4MDBcIiArIFwiXFx4MDBcXHgwMFxceDAwXFx4MDBcIiArIFwiXFx4MDBcXHgwMFxceDAwXFx4MDBcIjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlUG9zdHNjcmlwdE5hbWUobmFtZSkge1xuICByZXR1cm4gbmFtZS5yZXBsYWNlKC9bXlxceDIxLVxceDdFXXxbW1xcXSgpe308Pi8lXS9nLCBcIlwiKS5zbGljZSgwLCA2Myk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU5hbWVUYWJsZShuYW1lLCBwcm90bykge1xuICBpZiAoIXByb3RvKSB7XG4gICAgcHJvdG8gPSBbW10sIFtdXTtcbiAgfVxuXG4gIGNvbnN0IHN0cmluZ3MgPSBbcHJvdG9bMF1bMF0gfHwgXCJPcmlnaW5hbCBsaWNlbmNlXCIsIHByb3RvWzBdWzFdIHx8IG5hbWUsIHByb3RvWzBdWzJdIHx8IFwiVW5rbm93blwiLCBwcm90b1swXVszXSB8fCBcInVuaXF1ZUlEXCIsIHByb3RvWzBdWzRdIHx8IG5hbWUsIHByb3RvWzBdWzVdIHx8IFwiVmVyc2lvbiAwLjExXCIsIHByb3RvWzBdWzZdIHx8IGNyZWF0ZVBvc3RzY3JpcHROYW1lKG5hbWUpLCBwcm90b1swXVs3XSB8fCBcIlVua25vd25cIiwgcHJvdG9bMF1bOF0gfHwgXCJVbmtub3duXCIsIHByb3RvWzBdWzldIHx8IFwiVW5rbm93blwiXTtcbiAgY29uc3Qgc3RyaW5nc1VuaWNvZGUgPSBbXTtcbiAgbGV0IGksIGlpLCBqLCBqaiwgc3RyO1xuXG4gIGZvciAoaSA9IDAsIGlpID0gc3RyaW5ncy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgc3RyID0gcHJvdG9bMV1baV0gfHwgc3RyaW5nc1tpXTtcbiAgICBjb25zdCBzdHJCdWZVbmljb2RlID0gW107XG5cbiAgICBmb3IgKGogPSAwLCBqaiA9IHN0ci5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICBzdHJCdWZVbmljb2RlLnB1c2goc3RyaW5nMTYoc3RyLmNoYXJDb2RlQXQoaikpKTtcbiAgICB9XG5cbiAgICBzdHJpbmdzVW5pY29kZS5wdXNoKHN0ckJ1ZlVuaWNvZGUuam9pbihcIlwiKSk7XG4gIH1cblxuICBjb25zdCBuYW1lcyA9IFtzdHJpbmdzLCBzdHJpbmdzVW5pY29kZV07XG4gIGNvbnN0IHBsYXRmb3JtcyA9IFtcIlxceDAwXFx4MDFcIiwgXCJcXHgwMFxceDAzXCJdO1xuICBjb25zdCBlbmNvZGluZ3MgPSBbXCJcXHgwMFxceDAwXCIsIFwiXFx4MDBcXHgwMVwiXTtcbiAgY29uc3QgbGFuZ3VhZ2VzID0gW1wiXFx4MDBcXHgwMFwiLCBcIlxceDA0XFx4MDlcIl07XG4gIGNvbnN0IG5hbWVzUmVjb3JkQ291bnQgPSBzdHJpbmdzLmxlbmd0aCAqIHBsYXRmb3Jtcy5sZW5ndGg7XG4gIGxldCBuYW1lVGFibGUgPSBcIlxceDAwXFx4MDBcIiArIHN0cmluZzE2KG5hbWVzUmVjb3JkQ291bnQpICsgc3RyaW5nMTYobmFtZXNSZWNvcmRDb3VudCAqIDEyICsgNik7XG4gIGxldCBzdHJPZmZzZXQgPSAwO1xuXG4gIGZvciAoaSA9IDAsIGlpID0gcGxhdGZvcm1zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICBjb25zdCBzdHJzID0gbmFtZXNbaV07XG5cbiAgICBmb3IgKGogPSAwLCBqaiA9IHN0cnMubGVuZ3RoOyBqIDwgamo7IGorKykge1xuICAgICAgc3RyID0gc3Ryc1tqXTtcbiAgICAgIGNvbnN0IG5hbWVSZWNvcmQgPSBwbGF0Zm9ybXNbaV0gKyBlbmNvZGluZ3NbaV0gKyBsYW5ndWFnZXNbaV0gKyBzdHJpbmcxNihqKSArIHN0cmluZzE2KHN0ci5sZW5ndGgpICsgc3RyaW5nMTYoc3RyT2Zmc2V0KTtcbiAgICAgIG5hbWVUYWJsZSArPSBuYW1lUmVjb3JkO1xuICAgICAgc3RyT2Zmc2V0ICs9IHN0ci5sZW5ndGg7XG4gICAgfVxuICB9XG5cbiAgbmFtZVRhYmxlICs9IHN0cmluZ3Muam9pbihcIlwiKSArIHN0cmluZ3NVbmljb2RlLmpvaW4oXCJcIik7XG4gIHJldHVybiBuYW1lVGFibGU7XG59XG5cbmNsYXNzIEZvbnQge1xuICBjb25zdHJ1Y3RvcihuYW1lLCBmaWxlLCBwcm9wZXJ0aWVzKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLnBzTmFtZSA9IG51bGw7XG4gICAgdGhpcy5taW1ldHlwZSA9IG51bGw7XG4gICAgdGhpcy5kaXNhYmxlRm9udEZhY2UgPSBmYWxzZTtcbiAgICB0aGlzLmxvYWRlZE5hbWUgPSBwcm9wZXJ0aWVzLmxvYWRlZE5hbWU7XG4gICAgdGhpcy5pc1R5cGUzRm9udCA9IHByb3BlcnRpZXMuaXNUeXBlM0ZvbnQ7XG4gICAgdGhpcy5taXNzaW5nRmlsZSA9IGZhbHNlO1xuICAgIHRoaXMuY3NzRm9udEluZm8gPSBwcm9wZXJ0aWVzLmNzc0ZvbnRJbmZvO1xuICAgIHRoaXMuX2NoYXJzQ2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMuX2dseXBoQ2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIGxldCBpc1NlcmlmRm9udCA9ICEhKHByb3BlcnRpZXMuZmxhZ3MgJiBfZm9udHNfdXRpbHMuRm9udEZsYWdzLlNlcmlmKTtcblxuICAgIGlmICghaXNTZXJpZkZvbnQgJiYgIXByb3BlcnRpZXMuaXNTaW11bGF0ZWRGbGFncykge1xuICAgICAgY29uc3QgYmFzZU5hbWUgPSBuYW1lLnJlcGxhY2UoL1ssX10vZywgXCItXCIpLnNwbGl0KFwiLVwiKVswXSxcbiAgICAgICAgICAgIHNlcmlmRm9udHMgPSAoMCwgX3N0YW5kYXJkX2ZvbnRzLmdldFNlcmlmRm9udHMpKCk7XG5cbiAgICAgIGZvciAoY29uc3QgbmFtZVBhcnQgb2YgYmFzZU5hbWUuc3BsaXQoXCIrXCIpKSB7XG4gICAgICAgIGlmIChzZXJpZkZvbnRzW25hbWVQYXJ0XSkge1xuICAgICAgICAgIGlzU2VyaWZGb250ID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuaXNTZXJpZkZvbnQgPSBpc1NlcmlmRm9udDtcbiAgICB0aGlzLmlzU3ltYm9saWNGb250ID0gISEocHJvcGVydGllcy5mbGFncyAmIF9mb250c191dGlscy5Gb250RmxhZ3MuU3ltYm9saWMpO1xuICAgIHRoaXMuaXNNb25vc3BhY2UgPSAhIShwcm9wZXJ0aWVzLmZsYWdzICYgX2ZvbnRzX3V0aWxzLkZvbnRGbGFncy5GaXhlZFBpdGNoKTtcbiAgICBsZXQgdHlwZSA9IHByb3BlcnRpZXMudHlwZTtcbiAgICBsZXQgc3VidHlwZSA9IHByb3BlcnRpZXMuc3VidHlwZTtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMuc3VidHlwZSA9IHN1YnR5cGU7XG4gICAgbGV0IGZhbGxiYWNrTmFtZSA9IFwic2Fucy1zZXJpZlwiO1xuXG4gICAgaWYgKHRoaXMuaXNNb25vc3BhY2UpIHtcbiAgICAgIGZhbGxiYWNrTmFtZSA9IFwibW9ub3NwYWNlXCI7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzU2VyaWZGb250KSB7XG4gICAgICBmYWxsYmFja05hbWUgPSBcInNlcmlmXCI7XG4gICAgfVxuXG4gICAgdGhpcy5mYWxsYmFja05hbWUgPSBmYWxsYmFja05hbWU7XG4gICAgdGhpcy5kaWZmZXJlbmNlcyA9IHByb3BlcnRpZXMuZGlmZmVyZW5jZXM7XG4gICAgdGhpcy53aWR0aHMgPSBwcm9wZXJ0aWVzLndpZHRocztcbiAgICB0aGlzLmRlZmF1bHRXaWR0aCA9IHByb3BlcnRpZXMuZGVmYXVsdFdpZHRoO1xuICAgIHRoaXMuY29tcG9zaXRlID0gcHJvcGVydGllcy5jb21wb3NpdGU7XG4gICAgdGhpcy5jTWFwID0gcHJvcGVydGllcy5jTWFwO1xuICAgIHRoaXMuY2FwSGVpZ2h0ID0gcHJvcGVydGllcy5jYXBIZWlnaHQgLyBQREZfR0xZUEhfU1BBQ0VfVU5JVFM7XG4gICAgdGhpcy5hc2NlbnQgPSBwcm9wZXJ0aWVzLmFzY2VudCAvIFBERl9HTFlQSF9TUEFDRV9VTklUUztcbiAgICB0aGlzLmRlc2NlbnQgPSBwcm9wZXJ0aWVzLmRlc2NlbnQgLyBQREZfR0xZUEhfU1BBQ0VfVU5JVFM7XG4gICAgdGhpcy5saW5lSGVpZ2h0ID0gdGhpcy5hc2NlbnQgLSB0aGlzLmRlc2NlbnQ7XG4gICAgdGhpcy5mb250TWF0cml4ID0gcHJvcGVydGllcy5mb250TWF0cml4O1xuICAgIHRoaXMuYmJveCA9IHByb3BlcnRpZXMuYmJveDtcbiAgICB0aGlzLmRlZmF1bHRFbmNvZGluZyA9IHByb3BlcnRpZXMuZGVmYXVsdEVuY29kaW5nO1xuICAgIHRoaXMudG9Vbmljb2RlID0gcHJvcGVydGllcy50b1VuaWNvZGU7XG4gICAgdGhpcy50b0ZvbnRDaGFyID0gW107XG5cbiAgICBpZiAocHJvcGVydGllcy50eXBlID09PSBcIlR5cGUzXCIpIHtcbiAgICAgIGZvciAobGV0IGNoYXJDb2RlID0gMDsgY2hhckNvZGUgPCAyNTY7IGNoYXJDb2RlKyspIHtcbiAgICAgICAgdGhpcy50b0ZvbnRDaGFyW2NoYXJDb2RlXSA9IHRoaXMuZGlmZmVyZW5jZXNbY2hhckNvZGVdIHx8IHByb3BlcnRpZXMuZGVmYXVsdEVuY29kaW5nW2NoYXJDb2RlXTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5mb250VHlwZSA9IF91dGlsLkZvbnRUeXBlLlRZUEUzO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2lkRW5jb2RpbmcgPSBwcm9wZXJ0aWVzLmNpZEVuY29kaW5nIHx8IFwiXCI7XG4gICAgdGhpcy52ZXJ0aWNhbCA9ICEhcHJvcGVydGllcy52ZXJ0aWNhbDtcblxuICAgIGlmICh0aGlzLnZlcnRpY2FsKSB7XG4gICAgICB0aGlzLnZtZXRyaWNzID0gcHJvcGVydGllcy52bWV0cmljcztcbiAgICAgIHRoaXMuZGVmYXVsdFZNZXRyaWNzID0gcHJvcGVydGllcy5kZWZhdWx0Vk1ldHJpY3M7XG4gICAgfVxuXG4gICAgaWYgKCFmaWxlIHx8IGZpbGUuaXNFbXB0eSkge1xuICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKCdGb250IGZpbGUgaXMgZW1wdHkgaW4gXCInICsgbmFtZSArICdcIiAoJyArIHRoaXMubG9hZGVkTmFtZSArIFwiKVwiKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5mYWxsYmFja1RvU3lzdGVtRm9udChwcm9wZXJ0aWVzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBbdHlwZSwgc3VidHlwZV0gPSBnZXRGb250RmlsZVR5cGUoZmlsZSwgcHJvcGVydGllcyk7XG5cbiAgICBpZiAodHlwZSAhPT0gdGhpcy50eXBlIHx8IHN1YnR5cGUgIT09IHRoaXMuc3VidHlwZSkge1xuICAgICAgKDAsIF91dGlsLmluZm8pKFwiSW5jb25zaXN0ZW50IGZvbnQgZmlsZSBUeXBlL1N1YlR5cGUsIGV4cGVjdGVkOiBcIiArIGAke3RoaXMudHlwZX0vJHt0aGlzLnN1YnR5cGV9IGJ1dCBmb3VuZDogJHt0eXBlfS8ke3N1YnR5cGV9LmApO1xuICAgIH1cblxuICAgIGxldCBkYXRhO1xuXG4gICAgdHJ5IHtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFwiTU1UeXBlMVwiOlxuICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShcIk1NVHlwZTEgZm9udCAoXCIgKyBuYW1lICsgXCIpLCBmYWxsaW5nIGJhY2sgdG8gVHlwZTEuXCIpO1xuXG4gICAgICAgIGNhc2UgXCJUeXBlMVwiOlxuICAgICAgICBjYXNlIFwiQ0lERm9udFR5cGUwXCI6XG4gICAgICAgICAgdGhpcy5taW1ldHlwZSA9IFwiZm9udC9vcGVudHlwZVwiO1xuICAgICAgICAgIGNvbnN0IGNmZiA9IHN1YnR5cGUgPT09IFwiVHlwZTFDXCIgfHwgc3VidHlwZSA9PT0gXCJDSURGb250VHlwZTBDXCIgPyBuZXcgX2NmZl9mb250LkNGRkZvbnQoZmlsZSwgcHJvcGVydGllcykgOiBuZXcgX3R5cGUxX2ZvbnQuVHlwZTFGb250KG5hbWUsIGZpbGUsIHByb3BlcnRpZXMpO1xuICAgICAgICAgIGFkanVzdFdpZHRocyhwcm9wZXJ0aWVzKTtcbiAgICAgICAgICBkYXRhID0gdGhpcy5jb252ZXJ0KG5hbWUsIGNmZiwgcHJvcGVydGllcyk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIk9wZW5UeXBlXCI6XG4gICAgICAgIGNhc2UgXCJUcnVlVHlwZVwiOlxuICAgICAgICBjYXNlIFwiQ0lERm9udFR5cGUyXCI6XG4gICAgICAgICAgdGhpcy5taW1ldHlwZSA9IFwiZm9udC9vcGVudHlwZVwiO1xuICAgICAgICAgIGRhdGEgPSB0aGlzLmNoZWNrQW5kUmVwYWlyKG5hbWUsIGZpbGUsIHByb3BlcnRpZXMpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuaXNPcGVuVHlwZSkge1xuICAgICAgICAgICAgYWRqdXN0V2lkdGhzKHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgdHlwZSA9IFwiT3BlblR5cGVcIjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgRm9udCAke3R5cGV9IGlzIG5vdCBzdXBwb3J0ZWRgKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoZSk7XG4gICAgICB0aGlzLmZhbGxiYWNrVG9TeXN0ZW1Gb250KHByb3BlcnRpZXMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGFtZW5kRmFsbGJhY2tUb1VuaWNvZGUocHJvcGVydGllcyk7XG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB0aGlzLmZvbnRUeXBlID0gKDAsIF9mb250c191dGlscy5nZXRGb250VHlwZSkodHlwZSwgc3VidHlwZSwgcHJvcGVydGllcy5pc1N0YW5kYXJkRm9udCk7XG4gICAgdGhpcy5mb250TWF0cml4ID0gcHJvcGVydGllcy5mb250TWF0cml4O1xuICAgIHRoaXMud2lkdGhzID0gcHJvcGVydGllcy53aWR0aHM7XG4gICAgdGhpcy5kZWZhdWx0V2lkdGggPSBwcm9wZXJ0aWVzLmRlZmF1bHRXaWR0aDtcbiAgICB0aGlzLnRvVW5pY29kZSA9IHByb3BlcnRpZXMudG9Vbmljb2RlO1xuICAgIHRoaXMuc2VhY01hcCA9IHByb3BlcnRpZXMuc2VhY01hcDtcbiAgfVxuXG4gIGdldCByZW5kZXJlcigpIHtcbiAgICBjb25zdCByZW5kZXJlciA9IF9mb250X3JlbmRlcmVyLkZvbnRSZW5kZXJlckZhY3RvcnkuY3JlYXRlKHRoaXMsIF9mb250c191dGlscy5TRUFDX0FOQUxZU0lTX0VOQUJMRUQpO1xuXG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwicmVuZGVyZXJcIiwgcmVuZGVyZXIpO1xuICB9XG5cbiAgZXhwb3J0RGF0YShleHRyYVByb3BlcnRpZXMgPSBmYWxzZSkge1xuICAgIGNvbnN0IGV4cG9ydERhdGFQcm9wZXJ0aWVzID0gZXh0cmFQcm9wZXJ0aWVzID8gWy4uLkVYUE9SVF9EQVRBX1BST1BFUlRJRVMsIC4uLkVYUE9SVF9EQVRBX0VYVFJBX1BST1BFUlRJRVNdIDogRVhQT1JUX0RBVEFfUFJPUEVSVElFUztcbiAgICBjb25zdCBkYXRhID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBsZXQgcHJvcGVydHksIHZhbHVlO1xuXG4gICAgZm9yIChwcm9wZXJ0eSBvZiBleHBvcnREYXRhUHJvcGVydGllcykge1xuICAgICAgdmFsdWUgPSB0aGlzW3Byb3BlcnR5XTtcblxuICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZGF0YVtwcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGZhbGxiYWNrVG9TeXN0ZW1Gb250KHByb3BlcnRpZXMpIHtcbiAgICB0aGlzLm1pc3NpbmdGaWxlID0gdHJ1ZTtcbiAgICBjb25zdCBuYW1lID0gdGhpcy5uYW1lO1xuICAgIGNvbnN0IHR5cGUgPSB0aGlzLnR5cGU7XG4gICAgY29uc3Qgc3VidHlwZSA9IHRoaXMuc3VidHlwZTtcbiAgICBsZXQgZm9udE5hbWUgPSAoMCwgX2ZvbnRzX3V0aWxzLm5vcm1hbGl6ZUZvbnROYW1lKShuYW1lKTtcbiAgICBjb25zdCBzdGRGb250TWFwID0gKDAsIF9zdGFuZGFyZF9mb250cy5nZXRTdGRGb250TWFwKSgpLFxuICAgICAgICAgIG5vblN0ZEZvbnRNYXAgPSAoMCwgX3N0YW5kYXJkX2ZvbnRzLmdldE5vblN0ZEZvbnRNYXApKCk7XG4gICAgY29uc3QgaXNTdGFuZGFyZEZvbnQgPSAhIXN0ZEZvbnRNYXBbZm9udE5hbWVdO1xuICAgIGNvbnN0IGlzTWFwcGVkVG9TdGFuZGFyZEZvbnQgPSAhIShub25TdGRGb250TWFwW2ZvbnROYW1lXSAmJiBzdGRGb250TWFwW25vblN0ZEZvbnRNYXBbZm9udE5hbWVdXSk7XG4gICAgZm9udE5hbWUgPSBzdGRGb250TWFwW2ZvbnROYW1lXSB8fCBub25TdGRGb250TWFwW2ZvbnROYW1lXSB8fCBmb250TmFtZTtcbiAgICB0aGlzLmJvbGQgPSBmb250TmFtZS5zZWFyY2goL2JvbGQvZ2kpICE9PSAtMTtcbiAgICB0aGlzLml0YWxpYyA9IGZvbnROYW1lLnNlYXJjaCgvb2JsaXF1ZS9naSkgIT09IC0xIHx8IGZvbnROYW1lLnNlYXJjaCgvaXRhbGljL2dpKSAhPT0gLTE7XG4gICAgdGhpcy5ibGFjayA9IG5hbWUuc2VhcmNoKC9CbGFjay9nKSAhPT0gLTE7XG4gICAgY29uc3QgaXNOYXJyb3cgPSBuYW1lLnNlYXJjaCgvTmFycm93L2cpICE9PSAtMTtcbiAgICB0aGlzLnJlbWVhc3VyZSA9ICghaXNTdGFuZGFyZEZvbnQgfHwgaXNOYXJyb3cpICYmIE9iamVjdC5rZXlzKHRoaXMud2lkdGhzKS5sZW5ndGggPiAwO1xuXG4gICAgaWYgKChpc1N0YW5kYXJkRm9udCB8fCBpc01hcHBlZFRvU3RhbmRhcmRGb250KSAmJiB0eXBlID09PSBcIkNJREZvbnRUeXBlMlwiICYmIHRoaXMuY2lkRW5jb2Rpbmcuc3RhcnRzV2l0aChcIklkZW50aXR5LVwiKSkge1xuICAgICAgY29uc3QgY2lkVG9HaWRNYXAgPSBwcm9wZXJ0aWVzLmNpZFRvR2lkTWFwO1xuICAgICAgY29uc3QgbWFwID0gW107XG4gICAgICBhcHBseVN0YW5kYXJkRm9udEdseXBoTWFwKG1hcCwgKDAsIF9zdGFuZGFyZF9mb250cy5nZXRHbHlwaE1hcEZvclN0YW5kYXJkRm9udHMpKCkpO1xuXG4gICAgICBpZiAoL0FyaWFsLT9CbGFjay9pLnRlc3QobmFtZSkpIHtcbiAgICAgICAgYXBwbHlTdGFuZGFyZEZvbnRHbHlwaE1hcChtYXAsICgwLCBfc3RhbmRhcmRfZm9udHMuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JBcmlhbEJsYWNrKSgpKTtcbiAgICAgIH0gZWxzZSBpZiAoL0NhbGlicmkvaS50ZXN0KG5hbWUpKSB7XG4gICAgICAgIGFwcGx5U3RhbmRhcmRGb250R2x5cGhNYXAobWFwLCAoMCwgX3N0YW5kYXJkX2ZvbnRzLmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQ2FsaWJyaSkoKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjaWRUb0dpZE1hcCkge1xuICAgICAgICBmb3IgKGNvbnN0IGNoYXJDb2RlIGluIG1hcCkge1xuICAgICAgICAgIGNvbnN0IGNpZCA9IG1hcFtjaGFyQ29kZV07XG5cbiAgICAgICAgICBpZiAoY2lkVG9HaWRNYXBbY2lkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBtYXBbK2NoYXJDb2RlXSA9IGNpZFRvR2lkTWFwW2NpZF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNpZFRvR2lkTWFwLmxlbmd0aCAhPT0gdGhpcy50b1VuaWNvZGUubGVuZ3RoICYmIHByb3BlcnRpZXMuaGFzSW5jbHVkZWRUb1VuaWNvZGVNYXAgJiYgdGhpcy50b1VuaWNvZGUgaW5zdGFuY2VvZiBfdG9fdW5pY29kZV9tYXAuSWRlbnRpdHlUb1VuaWNvZGVNYXApIHtcbiAgICAgICAgICB0aGlzLnRvVW5pY29kZS5mb3JFYWNoKGZ1bmN0aW9uIChjaGFyQ29kZSwgdW5pY29kZUNoYXJDb2RlKSB7XG4gICAgICAgICAgICBjb25zdCBjaWQgPSBtYXBbY2hhckNvZGVdO1xuXG4gICAgICAgICAgICBpZiAoY2lkVG9HaWRNYXBbY2lkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIG1hcFsrY2hhckNvZGVdID0gdW5pY29kZUNoYXJDb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghKHRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgX3RvX3VuaWNvZGVfbWFwLklkZW50aXR5VG9Vbmljb2RlTWFwKSkge1xuICAgICAgICB0aGlzLnRvVW5pY29kZS5mb3JFYWNoKGZ1bmN0aW9uIChjaGFyQ29kZSwgdW5pY29kZUNoYXJDb2RlKSB7XG4gICAgICAgICAgbWFwWytjaGFyQ29kZV0gPSB1bmljb2RlQ2hhckNvZGU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnRvRm9udENoYXIgPSBtYXA7XG4gICAgICB0aGlzLnRvVW5pY29kZSA9IG5ldyBfdG9fdW5pY29kZV9tYXAuVG9Vbmljb2RlTWFwKG1hcCk7XG4gICAgfSBlbHNlIGlmICgvU3ltYm9sL2kudGVzdChmb250TmFtZSkpIHtcbiAgICAgIHRoaXMudG9Gb250Q2hhciA9IGJ1aWxkVG9Gb250Q2hhcihfZW5jb2RpbmdzLlN5bWJvbFNldEVuY29kaW5nLCAoMCwgX2dseXBobGlzdC5nZXRHbHlwaHNVbmljb2RlKSgpLCB0aGlzLmRpZmZlcmVuY2VzKTtcbiAgICB9IGVsc2UgaWYgKC9EaW5nYmF0cy9pLnRlc3QoZm9udE5hbWUpKSB7XG4gICAgICBpZiAoL1dpbmdkaW5ncy9pLnRlc3QobmFtZSkpIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiTm9uLWVtYmVkZGVkIFdpbmdkaW5ncyBmb250LCBmYWxsaW5nIGJhY2sgdG8gWmFwZkRpbmdiYXRzLlwiKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy50b0ZvbnRDaGFyID0gYnVpbGRUb0ZvbnRDaGFyKF9lbmNvZGluZ3MuWmFwZkRpbmdiYXRzRW5jb2RpbmcsICgwLCBfZ2x5cGhsaXN0LmdldERpbmdiYXRzR2x5cGhzVW5pY29kZSkoKSwgdGhpcy5kaWZmZXJlbmNlcyk7XG4gICAgfSBlbHNlIGlmIChpc1N0YW5kYXJkRm9udCkge1xuICAgICAgY29uc3QgbWFwID0gYnVpbGRUb0ZvbnRDaGFyKHRoaXMuZGVmYXVsdEVuY29kaW5nLCAoMCwgX2dseXBobGlzdC5nZXRHbHlwaHNVbmljb2RlKSgpLCB0aGlzLmRpZmZlcmVuY2VzKTtcblxuICAgICAgaWYgKHR5cGUgPT09IFwiQ0lERm9udFR5cGUyXCIgJiYgIXRoaXMuY2lkRW5jb2Rpbmcuc3RhcnRzV2l0aChcIklkZW50aXR5LVwiKSAmJiAhKHRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgX3RvX3VuaWNvZGVfbWFwLklkZW50aXR5VG9Vbmljb2RlTWFwKSkge1xuICAgICAgICB0aGlzLnRvVW5pY29kZS5mb3JFYWNoKGZ1bmN0aW9uIChjaGFyQ29kZSwgdW5pY29kZUNoYXJDb2RlKSB7XG4gICAgICAgICAgbWFwWytjaGFyQ29kZV0gPSB1bmljb2RlQ2hhckNvZGU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnRvRm9udENoYXIgPSBtYXA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGdseXBoc1VuaWNvZGVNYXAgPSAoMCwgX2dseXBobGlzdC5nZXRHbHlwaHNVbmljb2RlKSgpO1xuICAgICAgY29uc3QgbWFwID0gW107XG4gICAgICB0aGlzLnRvVW5pY29kZS5mb3JFYWNoKChjaGFyQ29kZSwgdW5pY29kZUNoYXJDb2RlKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5jb21wb3NpdGUpIHtcbiAgICAgICAgICBjb25zdCBnbHlwaE5hbWUgPSB0aGlzLmRpZmZlcmVuY2VzW2NoYXJDb2RlXSB8fCB0aGlzLmRlZmF1bHRFbmNvZGluZ1tjaGFyQ29kZV07XG4gICAgICAgICAgY29uc3QgdW5pY29kZSA9ICgwLCBfdW5pY29kZS5nZXRVbmljb2RlRm9yR2x5cGgpKGdseXBoTmFtZSwgZ2x5cGhzVW5pY29kZU1hcCk7XG5cbiAgICAgICAgICBpZiAodW5pY29kZSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHVuaWNvZGVDaGFyQ29kZSA9IHVuaWNvZGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbWFwWytjaGFyQ29kZV0gPSB1bmljb2RlQ2hhckNvZGU7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMuY29tcG9zaXRlICYmIHRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgX3RvX3VuaWNvZGVfbWFwLklkZW50aXR5VG9Vbmljb2RlTWFwKSB7XG4gICAgICAgIGlmICgvVmVyZGFuYS9pLnRlc3QobmFtZSkpIHtcbiAgICAgICAgICBhcHBseVN0YW5kYXJkRm9udEdseXBoTWFwKG1hcCwgKDAsIF9zdGFuZGFyZF9mb250cy5nZXRHbHlwaE1hcEZvclN0YW5kYXJkRm9udHMpKCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMudG9Gb250Q2hhciA9IG1hcDtcbiAgICB9XG5cbiAgICBhbWVuZEZhbGxiYWNrVG9Vbmljb2RlKHByb3BlcnRpZXMpO1xuICAgIHRoaXMubG9hZGVkTmFtZSA9IGZvbnROYW1lLnNwbGl0KFwiLVwiKVswXTtcbiAgICB0aGlzLmZvbnRUeXBlID0gKDAsIF9mb250c191dGlscy5nZXRGb250VHlwZSkodHlwZSwgc3VidHlwZSwgcHJvcGVydGllcy5pc1N0YW5kYXJkRm9udCk7XG4gIH1cblxuICBjaGVja0FuZFJlcGFpcihuYW1lLCBmb250LCBwcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgVkFMSURfVEFCTEVTID0gW1wiT1MvMlwiLCBcImNtYXBcIiwgXCJoZWFkXCIsIFwiaGhlYVwiLCBcImhtdHhcIiwgXCJtYXhwXCIsIFwibmFtZVwiLCBcInBvc3RcIiwgXCJsb2NhXCIsIFwiZ2x5ZlwiLCBcImZwZ21cIiwgXCJwcmVwXCIsIFwiY3Z0IFwiLCBcIkNGRiBcIl07XG5cbiAgICBmdW5jdGlvbiByZWFkVGFibGVzKGZpbGUsIG51bVRhYmxlcykge1xuICAgICAgY29uc3QgdGFibGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIHRhYmxlc1tcIk9TLzJcIl0gPSBudWxsO1xuICAgICAgdGFibGVzLmNtYXAgPSBudWxsO1xuICAgICAgdGFibGVzLmhlYWQgPSBudWxsO1xuICAgICAgdGFibGVzLmhoZWEgPSBudWxsO1xuICAgICAgdGFibGVzLmhtdHggPSBudWxsO1xuICAgICAgdGFibGVzLm1heHAgPSBudWxsO1xuICAgICAgdGFibGVzLm5hbWUgPSBudWxsO1xuICAgICAgdGFibGVzLnBvc3QgPSBudWxsO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVRhYmxlczsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gcmVhZFRhYmxlRW50cnkoZmlsZSk7XG5cbiAgICAgICAgaWYgKCFWQUxJRF9UQUJMRVMuaW5jbHVkZXModGFibGUudGFnKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRhYmxlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGFibGVzW3RhYmxlLnRhZ10gPSB0YWJsZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRhYmxlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWFkVGFibGVFbnRyeShmaWxlKSB7XG4gICAgICBjb25zdCB0YWcgPSBmaWxlLmdldFN0cmluZyg0KTtcbiAgICAgIGNvbnN0IGNoZWNrc3VtID0gZmlsZS5nZXRJbnQzMigpID4+PiAwO1xuICAgICAgY29uc3Qgb2Zmc2V0ID0gZmlsZS5nZXRJbnQzMigpID4+PiAwO1xuICAgICAgY29uc3QgbGVuZ3RoID0gZmlsZS5nZXRJbnQzMigpID4+PiAwO1xuICAgICAgY29uc3QgcHJldmlvdXNQb3NpdGlvbiA9IGZpbGUucG9zO1xuICAgICAgZmlsZS5wb3MgPSBmaWxlLnN0YXJ0ID8gZmlsZS5zdGFydCA6IDA7XG4gICAgICBmaWxlLnNraXAob2Zmc2V0KTtcbiAgICAgIGNvbnN0IGRhdGEgPSBmaWxlLmdldEJ5dGVzKGxlbmd0aCk7XG4gICAgICBmaWxlLnBvcyA9IHByZXZpb3VzUG9zaXRpb247XG5cbiAgICAgIGlmICh0YWcgPT09IFwiaGVhZFwiKSB7XG4gICAgICAgIGRhdGFbOF0gPSBkYXRhWzldID0gZGF0YVsxMF0gPSBkYXRhWzExXSA9IDA7XG4gICAgICAgIGRhdGFbMTddIHw9IDB4MjA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRhZyxcbiAgICAgICAgY2hlY2tzdW0sXG4gICAgICAgIGxlbmd0aCxcbiAgICAgICAgb2Zmc2V0LFxuICAgICAgICBkYXRhXG4gICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlYWRPcGVuVHlwZUhlYWRlcih0dGYpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZlcnNpb246IHR0Zi5nZXRTdHJpbmcoNCksXG4gICAgICAgIG51bVRhYmxlczogdHRmLmdldFVpbnQxNigpLFxuICAgICAgICBzZWFyY2hSYW5nZTogdHRmLmdldFVpbnQxNigpLFxuICAgICAgICBlbnRyeVNlbGVjdG9yOiB0dGYuZ2V0VWludDE2KCksXG4gICAgICAgIHJhbmdlU2hpZnQ6IHR0Zi5nZXRVaW50MTYoKVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWFkVHJ1ZVR5cGVDb2xsZWN0aW9uSGVhZGVyKHR0Yykge1xuICAgICAgY29uc3QgdHRjVGFnID0gdHRjLmdldFN0cmluZyg0KTtcbiAgICAgICgwLCBfdXRpbC5hc3NlcnQpKHR0Y1RhZyA9PT0gXCJ0dGNmXCIsIFwiTXVzdCBiZSBhIFRydWVUeXBlIENvbGxlY3Rpb24gZm9udC5cIik7XG4gICAgICBjb25zdCBtYWpvclZlcnNpb24gPSB0dGMuZ2V0VWludDE2KCk7XG4gICAgICBjb25zdCBtaW5vclZlcnNpb24gPSB0dGMuZ2V0VWludDE2KCk7XG4gICAgICBjb25zdCBudW1Gb250cyA9IHR0Yy5nZXRJbnQzMigpID4+PiAwO1xuICAgICAgY29uc3Qgb2Zmc2V0VGFibGUgPSBbXTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1Gb250czsgaSsrKSB7XG4gICAgICAgIG9mZnNldFRhYmxlLnB1c2godHRjLmdldEludDMyKCkgPj4+IDApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBoZWFkZXIgPSB7XG4gICAgICAgIHR0Y1RhZyxcbiAgICAgICAgbWFqb3JWZXJzaW9uLFxuICAgICAgICBtaW5vclZlcnNpb24sXG4gICAgICAgIG51bUZvbnRzLFxuICAgICAgICBvZmZzZXRUYWJsZVxuICAgICAgfTtcblxuICAgICAgc3dpdGNoIChtYWpvclZlcnNpb24pIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiBoZWFkZXI7XG5cbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIGhlYWRlci5kc2lnVGFnID0gdHRjLmdldEludDMyKCkgPj4+IDA7XG4gICAgICAgICAgaGVhZGVyLmRzaWdMZW5ndGggPSB0dGMuZ2V0SW50MzIoKSA+Pj4gMDtcbiAgICAgICAgICBoZWFkZXIuZHNpZ09mZnNldCA9IHR0Yy5nZXRJbnQzMigpID4+PiAwO1xuICAgICAgICAgIHJldHVybiBoZWFkZXI7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgSW52YWxpZCBUcnVlVHlwZSBDb2xsZWN0aW9uIG1ham9yVmVyc2lvbjogJHttYWpvclZlcnNpb259LmApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlYWRUcnVlVHlwZUNvbGxlY3Rpb25EYXRhKHR0YywgZm9udE5hbWUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbnVtRm9udHMsXG4gICAgICAgIG9mZnNldFRhYmxlXG4gICAgICB9ID0gcmVhZFRydWVUeXBlQ29sbGVjdGlvbkhlYWRlcih0dGMpO1xuICAgICAgY29uc3QgZm9udE5hbWVQYXJ0cyA9IGZvbnROYW1lLnNwbGl0KFwiK1wiKTtcbiAgICAgIGxldCBmYWxsYmFja0RhdGE7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtRm9udHM7IGkrKykge1xuICAgICAgICB0dGMucG9zID0gKHR0Yy5zdGFydCB8fCAwKSArIG9mZnNldFRhYmxlW2ldO1xuICAgICAgICBjb25zdCBwb3RlbnRpYWxIZWFkZXIgPSByZWFkT3BlblR5cGVIZWFkZXIodHRjKTtcbiAgICAgICAgY29uc3QgcG90ZW50aWFsVGFibGVzID0gcmVhZFRhYmxlcyh0dGMsIHBvdGVudGlhbEhlYWRlci5udW1UYWJsZXMpO1xuXG4gICAgICAgIGlmICghcG90ZW50aWFsVGFibGVzLm5hbWUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ1RydWVUeXBlIENvbGxlY3Rpb24gZm9udCBtdXN0IGNvbnRhaW4gYSBcIm5hbWVcIiB0YWJsZS4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5hbWVUYWJsZSA9IHJlYWROYW1lVGFibGUocG90ZW50aWFsVGFibGVzLm5hbWUpO1xuXG4gICAgICAgIGZvciAobGV0IGogPSAwLCBqaiA9IG5hbWVUYWJsZS5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgZm9yIChsZXQgayA9IDAsIGtrID0gbmFtZVRhYmxlW2pdLmxlbmd0aDsgayA8IGtrOyBrKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG5hbWVFbnRyeSA9IG5hbWVUYWJsZVtqXVtrXSAmJiBuYW1lVGFibGVbal1ba10ucmVwbGFjZSgvXFxzL2csIFwiXCIpO1xuXG4gICAgICAgICAgICBpZiAoIW5hbWVFbnRyeSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG5hbWVFbnRyeSA9PT0gZm9udE5hbWUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBoZWFkZXI6IHBvdGVudGlhbEhlYWRlcixcbiAgICAgICAgICAgICAgICB0YWJsZXM6IHBvdGVudGlhbFRhYmxlc1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZm9udE5hbWVQYXJ0cy5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgZm9udE5hbWVQYXJ0cykge1xuICAgICAgICAgICAgICBpZiAobmFtZUVudHJ5ID09PSBwYXJ0KSB7XG4gICAgICAgICAgICAgICAgZmFsbGJhY2tEYXRhID0ge1xuICAgICAgICAgICAgICAgICAgbmFtZTogcGFydCxcbiAgICAgICAgICAgICAgICAgIGhlYWRlcjogcG90ZW50aWFsSGVhZGVyLFxuICAgICAgICAgICAgICAgICAgdGFibGVzOiBwb3RlbnRpYWxUYWJsZXNcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChmYWxsYmFja0RhdGEpIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKGBUcnVlVHlwZSBDb2xsZWN0aW9uIGRvZXMgbm90IGNvbnRhaW4gXCIke2ZvbnROYW1lfVwiIGZvbnQsIGAgKyBgZmFsbGluZyBiYWNrIHRvIFwiJHtmYWxsYmFja0RhdGEubmFtZX1cIiBmb250IGluc3RlYWQuYCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaGVhZGVyOiBmYWxsYmFja0RhdGEuaGVhZGVyLFxuICAgICAgICAgIHRhYmxlczogZmFsbGJhY2tEYXRhLnRhYmxlc1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYFRydWVUeXBlIENvbGxlY3Rpb24gZG9lcyBub3QgY29udGFpbiBcIiR7Zm9udE5hbWV9XCIgZm9udC5gKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWFkQ21hcFRhYmxlKGNtYXAsIGZpbGUsIGlzU3ltYm9saWNGb250LCBoYXNFbmNvZGluZykge1xuICAgICAgaWYgKCFjbWFwKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShcIk5vIGNtYXAgdGFibGUgYXZhaWxhYmxlLlwiKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwbGF0Zm9ybUlkOiAtMSxcbiAgICAgICAgICBlbmNvZGluZ0lkOiAtMSxcbiAgICAgICAgICBtYXBwaW5nczogW10sXG4gICAgICAgICAgaGFzU2hvcnRDbWFwOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBsZXQgc2VnbWVudDtcbiAgICAgIGxldCBzdGFydCA9IChmaWxlLnN0YXJ0ID8gZmlsZS5zdGFydCA6IDApICsgY21hcC5vZmZzZXQ7XG4gICAgICBmaWxlLnBvcyA9IHN0YXJ0O1xuICAgICAgZmlsZS5za2lwKDIpO1xuICAgICAgY29uc3QgbnVtVGFibGVzID0gZmlsZS5nZXRVaW50MTYoKTtcbiAgICAgIGxldCBwb3RlbnRpYWxUYWJsZTtcbiAgICAgIGxldCBjYW5CcmVhayA9IGZhbHNlO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVRhYmxlczsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHBsYXRmb3JtSWQgPSBmaWxlLmdldFVpbnQxNigpO1xuICAgICAgICBjb25zdCBlbmNvZGluZ0lkID0gZmlsZS5nZXRVaW50MTYoKTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gZmlsZS5nZXRJbnQzMigpID4+PiAwO1xuICAgICAgICBsZXQgdXNlVGFibGUgPSBmYWxzZTtcblxuICAgICAgICBpZiAocG90ZW50aWFsVGFibGUgJiYgcG90ZW50aWFsVGFibGUucGxhdGZvcm1JZCA9PT0gcGxhdGZvcm1JZCAmJiBwb3RlbnRpYWxUYWJsZS5lbmNvZGluZ0lkID09PSBlbmNvZGluZ0lkKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGxhdGZvcm1JZCA9PT0gMCAmJiAoZW5jb2RpbmdJZCA9PT0gMCB8fCBlbmNvZGluZ0lkID09PSAxIHx8IGVuY29kaW5nSWQgPT09IDMpKSB7XG4gICAgICAgICAgdXNlVGFibGUgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHBsYXRmb3JtSWQgPT09IDEgJiYgZW5jb2RpbmdJZCA9PT0gMCkge1xuICAgICAgICAgIHVzZVRhYmxlID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChwbGF0Zm9ybUlkID09PSAzICYmIGVuY29kaW5nSWQgPT09IDEgJiYgKGhhc0VuY29kaW5nIHx8ICFwb3RlbnRpYWxUYWJsZSkpIHtcbiAgICAgICAgICB1c2VUYWJsZSA9IHRydWU7XG5cbiAgICAgICAgICBpZiAoIWlzU3ltYm9saWNGb250KSB7XG4gICAgICAgICAgICBjYW5CcmVhayA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGlzU3ltYm9saWNGb250ICYmIHBsYXRmb3JtSWQgPT09IDMgJiYgZW5jb2RpbmdJZCA9PT0gMCkge1xuICAgICAgICAgIHVzZVRhYmxlID0gdHJ1ZTtcbiAgICAgICAgICBsZXQgY29ycmVjdGx5U29ydGVkID0gdHJ1ZTtcblxuICAgICAgICAgIGlmIChpIDwgbnVtVGFibGVzIC0gMSkge1xuICAgICAgICAgICAgY29uc3QgbmV4dEJ5dGVzID0gZmlsZS5wZWVrQnl0ZXMoMiksXG4gICAgICAgICAgICAgICAgICBuZXh0UGxhdGZvcm1JZCA9IGludDE2KG5leHRCeXRlc1swXSwgbmV4dEJ5dGVzWzFdKTtcblxuICAgICAgICAgICAgaWYgKG5leHRQbGF0Zm9ybUlkIDwgcGxhdGZvcm1JZCkge1xuICAgICAgICAgICAgICBjb3JyZWN0bHlTb3J0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY29ycmVjdGx5U29ydGVkKSB7XG4gICAgICAgICAgICBjYW5CcmVhayA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHVzZVRhYmxlKSB7XG4gICAgICAgICAgcG90ZW50aWFsVGFibGUgPSB7XG4gICAgICAgICAgICBwbGF0Zm9ybUlkLFxuICAgICAgICAgICAgZW5jb2RpbmdJZCxcbiAgICAgICAgICAgIG9mZnNldFxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2FuQnJlYWspIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocG90ZW50aWFsVGFibGUpIHtcbiAgICAgICAgZmlsZS5wb3MgPSBzdGFydCArIHBvdGVudGlhbFRhYmxlLm9mZnNldDtcbiAgICAgIH1cblxuICAgICAgaWYgKCFwb3RlbnRpYWxUYWJsZSB8fCBmaWxlLnBlZWtCeXRlKCkgPT09IC0xKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShcIkNvdWxkIG5vdCBmaW5kIGEgcHJlZmVycmVkIGNtYXAgdGFibGUuXCIpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBsYXRmb3JtSWQ6IC0xLFxuICAgICAgICAgIGVuY29kaW5nSWQ6IC0xLFxuICAgICAgICAgIG1hcHBpbmdzOiBbXSxcbiAgICAgICAgICBoYXNTaG9ydENtYXA6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvcm1hdCA9IGZpbGUuZ2V0VWludDE2KCk7XG4gICAgICBmaWxlLnNraXAoMiArIDIpO1xuICAgICAgbGV0IGhhc1Nob3J0Q21hcCA9IGZhbHNlO1xuICAgICAgY29uc3QgbWFwcGluZ3MgPSBbXTtcbiAgICAgIGxldCBqLCBnbHlwaElkO1xuXG4gICAgICBpZiAoZm9ybWF0ID09PSAwKSB7XG4gICAgICAgIGZvciAoaiA9IDA7IGogPCAyNTY7IGorKykge1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gZmlsZS5nZXRCeXRlKCk7XG5cbiAgICAgICAgICBpZiAoIWluZGV4KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGNoYXJDb2RlOiBqLFxuICAgICAgICAgICAgZ2x5cGhJZDogaW5kZXhcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGhhc1Nob3J0Q21hcCA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gMikge1xuICAgICAgICBjb25zdCBzdWJIZWFkZXJLZXlzID0gW107XG4gICAgICAgIGxldCBtYXhTdWJIZWFkZXJLZXkgPSAwO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcbiAgICAgICAgICBjb25zdCBzdWJIZWFkZXJLZXkgPSBmaWxlLmdldFVpbnQxNigpID4+IDM7XG4gICAgICAgICAgc3ViSGVhZGVyS2V5cy5wdXNoKHN1YkhlYWRlcktleSk7XG4gICAgICAgICAgbWF4U3ViSGVhZGVyS2V5ID0gTWF0aC5tYXgoc3ViSGVhZGVyS2V5LCBtYXhTdWJIZWFkZXJLZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3ViSGVhZGVycyA9IFtdO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IG1heFN1YkhlYWRlcktleTsgaSsrKSB7XG4gICAgICAgICAgc3ViSGVhZGVycy5wdXNoKHtcbiAgICAgICAgICAgIGZpcnN0Q29kZTogZmlsZS5nZXRVaW50MTYoKSxcbiAgICAgICAgICAgIGVudHJ5Q291bnQ6IGZpbGUuZ2V0VWludDE2KCksXG4gICAgICAgICAgICBpZERlbHRhOiBzaWduZWRJbnQxNihmaWxlLmdldEJ5dGUoKSwgZmlsZS5nZXRCeXRlKCkpLFxuICAgICAgICAgICAgaWRSYW5nZVBvczogZmlsZS5wb3MgKyBmaWxlLmdldFVpbnQxNigpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7XG4gICAgICAgICAgaWYgKHN1YkhlYWRlcktleXNbaV0gPT09IDApIHtcbiAgICAgICAgICAgIGZpbGUucG9zID0gc3ViSGVhZGVyc1swXS5pZFJhbmdlUG9zICsgMiAqIGk7XG4gICAgICAgICAgICBnbHlwaElkID0gZmlsZS5nZXRVaW50MTYoKTtcbiAgICAgICAgICAgIG1hcHBpbmdzLnB1c2goe1xuICAgICAgICAgICAgICBjaGFyQ29kZTogaSxcbiAgICAgICAgICAgICAgZ2x5cGhJZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHMgPSBzdWJIZWFkZXJzW3N1YkhlYWRlcktleXNbaV1dO1xuXG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgcy5lbnRyeUNvdW50OyBqKyspIHtcbiAgICAgICAgICAgICAgY29uc3QgY2hhckNvZGUgPSAoaSA8PCA4KSArIGogKyBzLmZpcnN0Q29kZTtcbiAgICAgICAgICAgICAgZmlsZS5wb3MgPSBzLmlkUmFuZ2VQb3MgKyAyICogajtcbiAgICAgICAgICAgICAgZ2x5cGhJZCA9IGZpbGUuZ2V0VWludDE2KCk7XG5cbiAgICAgICAgICAgICAgaWYgKGdseXBoSWQgIT09IDApIHtcbiAgICAgICAgICAgICAgICBnbHlwaElkID0gKGdseXBoSWQgKyBzLmlkRGVsdGEpICUgNjU1MzY7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBtYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgICAgICBjaGFyQ29kZSxcbiAgICAgICAgICAgICAgICBnbHlwaElkXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09IDQpIHtcbiAgICAgICAgY29uc3Qgc2VnQ291bnQgPSBmaWxlLmdldFVpbnQxNigpID4+IDE7XG4gICAgICAgIGZpbGUuc2tpcCg2KTtcbiAgICAgICAgY29uc3Qgc2VnbWVudHMgPSBbXTtcbiAgICAgICAgbGV0IHNlZ0luZGV4O1xuXG4gICAgICAgIGZvciAoc2VnSW5kZXggPSAwOyBzZWdJbmRleCA8IHNlZ0NvdW50OyBzZWdJbmRleCsrKSB7XG4gICAgICAgICAgc2VnbWVudHMucHVzaCh7XG4gICAgICAgICAgICBlbmQ6IGZpbGUuZ2V0VWludDE2KClcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZpbGUuc2tpcCgyKTtcblxuICAgICAgICBmb3IgKHNlZ0luZGV4ID0gMDsgc2VnSW5kZXggPCBzZWdDb3VudDsgc2VnSW5kZXgrKykge1xuICAgICAgICAgIHNlZ21lbnRzW3NlZ0luZGV4XS5zdGFydCA9IGZpbGUuZ2V0VWludDE2KCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHNlZ0luZGV4ID0gMDsgc2VnSW5kZXggPCBzZWdDb3VudDsgc2VnSW5kZXgrKykge1xuICAgICAgICAgIHNlZ21lbnRzW3NlZ0luZGV4XS5kZWx0YSA9IGZpbGUuZ2V0VWludDE2KCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgb2Zmc2V0c0NvdW50ID0gMCxcbiAgICAgICAgICAgIG9mZnNldEluZGV4O1xuXG4gICAgICAgIGZvciAoc2VnSW5kZXggPSAwOyBzZWdJbmRleCA8IHNlZ0NvdW50OyBzZWdJbmRleCsrKSB7XG4gICAgICAgICAgc2VnbWVudCA9IHNlZ21lbnRzW3NlZ0luZGV4XTtcbiAgICAgICAgICBjb25zdCByYW5nZU9mZnNldCA9IGZpbGUuZ2V0VWludDE2KCk7XG5cbiAgICAgICAgICBpZiAoIXJhbmdlT2Zmc2V0KSB7XG4gICAgICAgICAgICBzZWdtZW50Lm9mZnNldEluZGV4ID0gLTE7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvZmZzZXRJbmRleCA9IChyYW5nZU9mZnNldCA+PiAxKSAtIChzZWdDb3VudCAtIHNlZ0luZGV4KTtcbiAgICAgICAgICBzZWdtZW50Lm9mZnNldEluZGV4ID0gb2Zmc2V0SW5kZXg7XG4gICAgICAgICAgb2Zmc2V0c0NvdW50ID0gTWF0aC5tYXgob2Zmc2V0c0NvdW50LCBvZmZzZXRJbmRleCArIHNlZ21lbnQuZW5kIC0gc2VnbWVudC5zdGFydCArIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb2Zmc2V0cyA9IFtdO1xuXG4gICAgICAgIGZvciAoaiA9IDA7IGogPCBvZmZzZXRzQ291bnQ7IGorKykge1xuICAgICAgICAgIG9mZnNldHMucHVzaChmaWxlLmdldFVpbnQxNigpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoc2VnSW5kZXggPSAwOyBzZWdJbmRleCA8IHNlZ0NvdW50OyBzZWdJbmRleCsrKSB7XG4gICAgICAgICAgc2VnbWVudCA9IHNlZ21lbnRzW3NlZ0luZGV4XTtcbiAgICAgICAgICBzdGFydCA9IHNlZ21lbnQuc3RhcnQ7XG4gICAgICAgICAgY29uc3QgZW5kID0gc2VnbWVudC5lbmQ7XG4gICAgICAgICAgY29uc3QgZGVsdGEgPSBzZWdtZW50LmRlbHRhO1xuICAgICAgICAgIG9mZnNldEluZGV4ID0gc2VnbWVudC5vZmZzZXRJbmRleDtcblxuICAgICAgICAgIGZvciAoaiA9IHN0YXJ0OyBqIDw9IGVuZDsgaisrKSB7XG4gICAgICAgICAgICBpZiAoaiA9PT0gMHhmZmZmKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbHlwaElkID0gb2Zmc2V0SW5kZXggPCAwID8gaiA6IG9mZnNldHNbb2Zmc2V0SW5kZXggKyBqIC0gc3RhcnRdO1xuICAgICAgICAgICAgZ2x5cGhJZCA9IGdseXBoSWQgKyBkZWx0YSAmIDB4ZmZmZjtcbiAgICAgICAgICAgIG1hcHBpbmdzLnB1c2goe1xuICAgICAgICAgICAgICBjaGFyQ29kZTogaixcbiAgICAgICAgICAgICAgZ2x5cGhJZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gNikge1xuICAgICAgICBjb25zdCBmaXJzdENvZGUgPSBmaWxlLmdldFVpbnQxNigpO1xuICAgICAgICBjb25zdCBlbnRyeUNvdW50ID0gZmlsZS5nZXRVaW50MTYoKTtcblxuICAgICAgICBmb3IgKGogPSAwOyBqIDwgZW50cnlDb3VudDsgaisrKSB7XG4gICAgICAgICAgZ2x5cGhJZCA9IGZpbGUuZ2V0VWludDE2KCk7XG4gICAgICAgICAgY29uc3QgY2hhckNvZGUgPSBmaXJzdENvZGUgKyBqO1xuICAgICAgICAgIG1hcHBpbmdzLnB1c2goe1xuICAgICAgICAgICAgY2hhckNvZGUsXG4gICAgICAgICAgICBnbHlwaElkXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShcImNtYXAgdGFibGUgaGFzIHVuc3VwcG9ydGVkIGZvcm1hdDogXCIgKyBmb3JtYXQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBsYXRmb3JtSWQ6IC0xLFxuICAgICAgICAgIGVuY29kaW5nSWQ6IC0xLFxuICAgICAgICAgIG1hcHBpbmdzOiBbXSxcbiAgICAgICAgICBoYXNTaG9ydENtYXA6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIG1hcHBpbmdzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIGEuY2hhckNvZGUgLSBiLmNoYXJDb2RlO1xuICAgICAgfSk7XG5cbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgbWFwcGluZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKG1hcHBpbmdzW2kgLSAxXS5jaGFyQ29kZSA9PT0gbWFwcGluZ3NbaV0uY2hhckNvZGUpIHtcbiAgICAgICAgICBtYXBwaW5ncy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgaS0tO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBsYXRmb3JtSWQ6IHBvdGVudGlhbFRhYmxlLnBsYXRmb3JtSWQsXG4gICAgICAgIGVuY29kaW5nSWQ6IHBvdGVudGlhbFRhYmxlLmVuY29kaW5nSWQsXG4gICAgICAgIG1hcHBpbmdzLFxuICAgICAgICBoYXNTaG9ydENtYXBcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2FuaXRpemVNZXRyaWNzKGZpbGUsIGhlYWRlciwgbWV0cmljcywgaGVhZFRhYmxlLCBudW1HbHlwaHMsIGR1cEZpcnN0RW50cnkpIHtcbiAgICAgIGlmICghaGVhZGVyKSB7XG4gICAgICAgIGlmIChtZXRyaWNzKSB7XG4gICAgICAgICAgbWV0cmljcy5kYXRhID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZmlsZS5wb3MgPSAoZmlsZS5zdGFydCA/IGZpbGUuc3RhcnQgOiAwKSArIGhlYWRlci5vZmZzZXQ7XG4gICAgICBmaWxlLnBvcyArPSA0O1xuICAgICAgZmlsZS5wb3MgKz0gMjtcbiAgICAgIGZpbGUucG9zICs9IDI7XG4gICAgICBmaWxlLnBvcyArPSAyO1xuICAgICAgZmlsZS5wb3MgKz0gMjtcbiAgICAgIGZpbGUucG9zICs9IDI7XG4gICAgICBmaWxlLnBvcyArPSAyO1xuICAgICAgZmlsZS5wb3MgKz0gMjtcbiAgICAgIGZpbGUucG9zICs9IDI7XG4gICAgICBmaWxlLnBvcyArPSAyO1xuICAgICAgY29uc3QgY2FyZXRPZmZzZXQgPSBmaWxlLmdldFVpbnQxNigpO1xuICAgICAgZmlsZS5wb3MgKz0gODtcbiAgICAgIGZpbGUucG9zICs9IDI7XG4gICAgICBsZXQgbnVtT2ZNZXRyaWNzID0gZmlsZS5nZXRVaW50MTYoKTtcblxuICAgICAgaWYgKGNhcmV0T2Zmc2V0ICE9PSAwKSB7XG4gICAgICAgIGNvbnN0IG1hY1N0eWxlID0gaW50MTYoaGVhZFRhYmxlLmRhdGFbNDRdLCBoZWFkVGFibGUuZGF0YVs0NV0pO1xuXG4gICAgICAgIGlmICghKG1hY1N0eWxlICYgMikpIHtcbiAgICAgICAgICBoZWFkZXIuZGF0YVsyMl0gPSAwO1xuICAgICAgICAgIGhlYWRlci5kYXRhWzIzXSA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG51bU9mTWV0cmljcyA+IG51bUdseXBocykge1xuICAgICAgICAoMCwgX3V0aWwuaW5mbykoYFRoZSBudW1PZk1ldHJpY3MgKCR7bnVtT2ZNZXRyaWNzfSkgc2hvdWxkIG5vdCBiZSBgICsgYGdyZWF0ZXIgdGhhbiB0aGUgbnVtR2x5cGhzICgke251bUdseXBoc30pLmApO1xuICAgICAgICBudW1PZk1ldHJpY3MgPSBudW1HbHlwaHM7XG4gICAgICAgIGhlYWRlci5kYXRhWzM0XSA9IChudW1PZk1ldHJpY3MgJiAweGZmMDApID4+IDg7XG4gICAgICAgIGhlYWRlci5kYXRhWzM1XSA9IG51bU9mTWV0cmljcyAmIDB4MDBmZjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbnVtT2ZTaWRlYmVhcmluZ3MgPSBudW1HbHlwaHMgLSBudW1PZk1ldHJpY3M7XG4gICAgICBjb25zdCBudW1NaXNzaW5nID0gbnVtT2ZTaWRlYmVhcmluZ3MgLSAobWV0cmljcy5sZW5ndGggLSBudW1PZk1ldHJpY3MgKiA0ID4+IDEpO1xuXG4gICAgICBpZiAobnVtTWlzc2luZyA+IDApIHtcbiAgICAgICAgY29uc3QgZW50cmllcyA9IG5ldyBVaW50OEFycmF5KG1ldHJpY3MubGVuZ3RoICsgbnVtTWlzc2luZyAqIDIpO1xuICAgICAgICBlbnRyaWVzLnNldChtZXRyaWNzLmRhdGEpO1xuXG4gICAgICAgIGlmIChkdXBGaXJzdEVudHJ5KSB7XG4gICAgICAgICAgZW50cmllc1ttZXRyaWNzLmxlbmd0aF0gPSBtZXRyaWNzLmRhdGFbMl07XG4gICAgICAgICAgZW50cmllc1ttZXRyaWNzLmxlbmd0aCArIDFdID0gbWV0cmljcy5kYXRhWzNdO1xuICAgICAgICB9XG5cbiAgICAgICAgbWV0cmljcy5kYXRhID0gZW50cmllcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzYW5pdGl6ZUdseXBoKHNvdXJjZSwgc291cmNlU3RhcnQsIHNvdXJjZUVuZCwgZGVzdCwgZGVzdFN0YXJ0LCBoaW50c1ZhbGlkKSB7XG4gICAgICBjb25zdCBnbHlwaFByb2ZpbGUgPSB7XG4gICAgICAgIGxlbmd0aDogMCxcbiAgICAgICAgc2l6ZU9mSW5zdHJ1Y3Rpb25zOiAwXG4gICAgICB9O1xuXG4gICAgICBpZiAoc291cmNlRW5kIC0gc291cmNlU3RhcnQgPD0gMTIpIHtcbiAgICAgICAgcmV0dXJuIGdseXBoUHJvZmlsZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZ2x5ZiA9IHNvdXJjZS5zdWJhcnJheShzb3VyY2VTdGFydCwgc291cmNlRW5kKTtcbiAgICAgIGxldCBjb250b3Vyc0NvdW50ID0gc2lnbmVkSW50MTYoZ2x5ZlswXSwgZ2x5ZlsxXSk7XG5cbiAgICAgIGlmIChjb250b3Vyc0NvdW50IDwgMCkge1xuICAgICAgICBjb250b3Vyc0NvdW50ID0gLTE7XG4gICAgICAgIHdyaXRlU2lnbmVkSW50MTYoZ2x5ZiwgMCwgY29udG91cnNDb3VudCk7XG4gICAgICAgIGRlc3Quc2V0KGdseWYsIGRlc3RTdGFydCk7XG4gICAgICAgIGdseXBoUHJvZmlsZS5sZW5ndGggPSBnbHlmLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIGdseXBoUHJvZmlsZTtcbiAgICAgIH1cblxuICAgICAgbGV0IGksXG4gICAgICAgICAgaiA9IDEwLFxuICAgICAgICAgIGZsYWdzQ291bnQgPSAwO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgY29udG91cnNDb3VudDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGVuZFBvaW50ID0gZ2x5ZltqXSA8PCA4IHwgZ2x5ZltqICsgMV07XG4gICAgICAgIGZsYWdzQ291bnQgPSBlbmRQb2ludCArIDE7XG4gICAgICAgIGogKz0gMjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25zU3RhcnQgPSBqO1xuICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25zTGVuZ3RoID0gZ2x5ZltqXSA8PCA4IHwgZ2x5ZltqICsgMV07XG4gICAgICBnbHlwaFByb2ZpbGUuc2l6ZU9mSW5zdHJ1Y3Rpb25zID0gaW5zdHJ1Y3Rpb25zTGVuZ3RoO1xuICAgICAgaiArPSAyICsgaW5zdHJ1Y3Rpb25zTGVuZ3RoO1xuICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25zRW5kID0gajtcbiAgICAgIGxldCBjb29yZGluYXRlc0xlbmd0aCA9IDA7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBmbGFnc0NvdW50OyBpKyspIHtcbiAgICAgICAgY29uc3QgZmxhZyA9IGdseWZbaisrXTtcblxuICAgICAgICBpZiAoZmxhZyAmIDB4YzApIHtcbiAgICAgICAgICBnbHlmW2ogLSAxXSA9IGZsYWcgJiAweDNmO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHhMZW5ndGggPSAyO1xuXG4gICAgICAgIGlmIChmbGFnICYgMikge1xuICAgICAgICAgIHhMZW5ndGggPSAxO1xuICAgICAgICB9IGVsc2UgaWYgKGZsYWcgJiAxNikge1xuICAgICAgICAgIHhMZW5ndGggPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHlMZW5ndGggPSAyO1xuXG4gICAgICAgIGlmIChmbGFnICYgNCkge1xuICAgICAgICAgIHlMZW5ndGggPSAxO1xuICAgICAgICB9IGVsc2UgaWYgKGZsYWcgJiAzMikge1xuICAgICAgICAgIHlMZW5ndGggPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeHlMZW5ndGggPSB4TGVuZ3RoICsgeUxlbmd0aDtcbiAgICAgICAgY29vcmRpbmF0ZXNMZW5ndGggKz0geHlMZW5ndGg7XG5cbiAgICAgICAgaWYgKGZsYWcgJiA4KSB7XG4gICAgICAgICAgY29uc3QgcmVwZWF0ID0gZ2x5ZltqKytdO1xuICAgICAgICAgIGkgKz0gcmVwZWF0O1xuICAgICAgICAgIGNvb3JkaW5hdGVzTGVuZ3RoICs9IHJlcGVhdCAqIHh5TGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChjb29yZGluYXRlc0xlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZ2x5cGhQcm9maWxlO1xuICAgICAgfVxuXG4gICAgICBsZXQgZ2x5cGhEYXRhTGVuZ3RoID0gaiArIGNvb3JkaW5hdGVzTGVuZ3RoO1xuXG4gICAgICBpZiAoZ2x5cGhEYXRhTGVuZ3RoID4gZ2x5Zi5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGdseXBoUHJvZmlsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFoaW50c1ZhbGlkICYmIGluc3RydWN0aW9uc0xlbmd0aCA+IDApIHtcbiAgICAgICAgZGVzdC5zZXQoZ2x5Zi5zdWJhcnJheSgwLCBpbnN0cnVjdGlvbnNTdGFydCksIGRlc3RTdGFydCk7XG4gICAgICAgIGRlc3Quc2V0KFswLCAwXSwgZGVzdFN0YXJ0ICsgaW5zdHJ1Y3Rpb25zU3RhcnQpO1xuICAgICAgICBkZXN0LnNldChnbHlmLnN1YmFycmF5KGluc3RydWN0aW9uc0VuZCwgZ2x5cGhEYXRhTGVuZ3RoKSwgZGVzdFN0YXJ0ICsgaW5zdHJ1Y3Rpb25zU3RhcnQgKyAyKTtcbiAgICAgICAgZ2x5cGhEYXRhTGVuZ3RoIC09IGluc3RydWN0aW9uc0xlbmd0aDtcblxuICAgICAgICBpZiAoZ2x5Zi5sZW5ndGggLSBnbHlwaERhdGFMZW5ndGggPiAzKSB7XG4gICAgICAgICAgZ2x5cGhEYXRhTGVuZ3RoID0gZ2x5cGhEYXRhTGVuZ3RoICsgMyAmIH4zO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2x5cGhQcm9maWxlLmxlbmd0aCA9IGdseXBoRGF0YUxlbmd0aDtcbiAgICAgICAgcmV0dXJuIGdseXBoUHJvZmlsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGdseWYubGVuZ3RoIC0gZ2x5cGhEYXRhTGVuZ3RoID4gMykge1xuICAgICAgICBnbHlwaERhdGFMZW5ndGggPSBnbHlwaERhdGFMZW5ndGggKyAzICYgfjM7XG4gICAgICAgIGRlc3Quc2V0KGdseWYuc3ViYXJyYXkoMCwgZ2x5cGhEYXRhTGVuZ3RoKSwgZGVzdFN0YXJ0KTtcbiAgICAgICAgZ2x5cGhQcm9maWxlLmxlbmd0aCA9IGdseXBoRGF0YUxlbmd0aDtcbiAgICAgICAgcmV0dXJuIGdseXBoUHJvZmlsZTtcbiAgICAgIH1cblxuICAgICAgZGVzdC5zZXQoZ2x5ZiwgZGVzdFN0YXJ0KTtcbiAgICAgIGdseXBoUHJvZmlsZS5sZW5ndGggPSBnbHlmLmxlbmd0aDtcbiAgICAgIHJldHVybiBnbHlwaFByb2ZpbGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2FuaXRpemVIZWFkKGhlYWQsIG51bUdseXBocywgbG9jYUxlbmd0aCkge1xuICAgICAgY29uc3QgZGF0YSA9IGhlYWQuZGF0YTtcbiAgICAgIGNvbnN0IHZlcnNpb24gPSBpbnQzMihkYXRhWzBdLCBkYXRhWzFdLCBkYXRhWzJdLCBkYXRhWzNdKTtcblxuICAgICAgaWYgKHZlcnNpb24gPj4gMTYgIT09IDEpIHtcbiAgICAgICAgKDAsIF91dGlsLmluZm8pKFwiQXR0ZW1wdGluZyB0byBmaXggaW52YWxpZCB2ZXJzaW9uIGluIGhlYWQgdGFibGU6IFwiICsgdmVyc2lvbik7XG4gICAgICAgIGRhdGFbMF0gPSAwO1xuICAgICAgICBkYXRhWzFdID0gMTtcbiAgICAgICAgZGF0YVsyXSA9IDA7XG4gICAgICAgIGRhdGFbM10gPSAwO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpbmRleFRvTG9jRm9ybWF0ID0gaW50MTYoZGF0YVs1MF0sIGRhdGFbNTFdKTtcblxuICAgICAgaWYgKGluZGV4VG9Mb2NGb3JtYXQgPCAwIHx8IGluZGV4VG9Mb2NGb3JtYXQgPiAxKSB7XG4gICAgICAgICgwLCBfdXRpbC5pbmZvKShcIkF0dGVtcHRpbmcgdG8gZml4IGludmFsaWQgaW5kZXhUb0xvY0Zvcm1hdCBpbiBoZWFkIHRhYmxlOiBcIiArIGluZGV4VG9Mb2NGb3JtYXQpO1xuICAgICAgICBjb25zdCBudW1HbHlwaHNQbHVzT25lID0gbnVtR2x5cGhzICsgMTtcblxuICAgICAgICBpZiAobG9jYUxlbmd0aCA9PT0gbnVtR2x5cGhzUGx1c09uZSA8PCAxKSB7XG4gICAgICAgICAgZGF0YVs1MF0gPSAwO1xuICAgICAgICAgIGRhdGFbNTFdID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChsb2NhTGVuZ3RoID09PSBudW1HbHlwaHNQbHVzT25lIDw8IDIpIHtcbiAgICAgICAgICBkYXRhWzUwXSA9IDA7XG4gICAgICAgICAgZGF0YVs1MV0gPSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkNvdWxkIG5vdCBmaXggaW5kZXhUb0xvY0Zvcm1hdDogXCIgKyBpbmRleFRvTG9jRm9ybWF0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNhbml0aXplR2x5cGhMb2NhdGlvbnMobG9jYSwgZ2x5ZiwgbnVtR2x5cGhzLCBpc0dseXBoTG9jYXRpb25zTG9uZywgaGludHNWYWxpZCwgZHVwRmlyc3RFbnRyeSwgbWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zKSB7XG4gICAgICBsZXQgaXRlbVNpemUsIGl0ZW1EZWNvZGUsIGl0ZW1FbmNvZGU7XG5cbiAgICAgIGlmIChpc0dseXBoTG9jYXRpb25zTG9uZykge1xuICAgICAgICBpdGVtU2l6ZSA9IDQ7XG5cbiAgICAgICAgaXRlbURlY29kZSA9IGZ1bmN0aW9uIGZvbnRJdGVtRGVjb2RlTG9uZyhkYXRhLCBvZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gZGF0YVtvZmZzZXRdIDw8IDI0IHwgZGF0YVtvZmZzZXQgKyAxXSA8PCAxNiB8IGRhdGFbb2Zmc2V0ICsgMl0gPDwgOCB8IGRhdGFbb2Zmc2V0ICsgM107XG4gICAgICAgIH07XG5cbiAgICAgICAgaXRlbUVuY29kZSA9IGZ1bmN0aW9uIGZvbnRJdGVtRW5jb2RlTG9uZyhkYXRhLCBvZmZzZXQsIHZhbHVlKSB7XG4gICAgICAgICAgZGF0YVtvZmZzZXRdID0gdmFsdWUgPj4+IDI0ICYgMHhmZjtcbiAgICAgICAgICBkYXRhW29mZnNldCArIDFdID0gdmFsdWUgPj4gMTYgJiAweGZmO1xuICAgICAgICAgIGRhdGFbb2Zmc2V0ICsgMl0gPSB2YWx1ZSA+PiA4ICYgMHhmZjtcbiAgICAgICAgICBkYXRhW29mZnNldCArIDNdID0gdmFsdWUgJiAweGZmO1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXRlbVNpemUgPSAyO1xuXG4gICAgICAgIGl0ZW1EZWNvZGUgPSBmdW5jdGlvbiBmb250SXRlbURlY29kZShkYXRhLCBvZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gZGF0YVtvZmZzZXRdIDw8IDkgfCBkYXRhW29mZnNldCArIDFdIDw8IDE7XG4gICAgICAgIH07XG5cbiAgICAgICAgaXRlbUVuY29kZSA9IGZ1bmN0aW9uIGZvbnRJdGVtRW5jb2RlKGRhdGEsIG9mZnNldCwgdmFsdWUpIHtcbiAgICAgICAgICBkYXRhW29mZnNldF0gPSB2YWx1ZSA+PiA5ICYgMHhmZjtcbiAgICAgICAgICBkYXRhW29mZnNldCArIDFdID0gdmFsdWUgPj4gMSAmIDB4ZmY7XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG51bUdseXBoc091dCA9IGR1cEZpcnN0RW50cnkgPyBudW1HbHlwaHMgKyAxIDogbnVtR2x5cGhzO1xuICAgICAgY29uc3QgbG9jYURhdGFTaXplID0gaXRlbVNpemUgKiAoMSArIG51bUdseXBoc091dCk7XG4gICAgICBjb25zdCBsb2NhRGF0YSA9IG5ldyBVaW50OEFycmF5KGxvY2FEYXRhU2l6ZSk7XG4gICAgICBsb2NhRGF0YS5zZXQobG9jYS5kYXRhLnN1YmFycmF5KDAsIGxvY2FEYXRhU2l6ZSkpO1xuICAgICAgbG9jYS5kYXRhID0gbG9jYURhdGE7XG4gICAgICBjb25zdCBvbGRHbHlmRGF0YSA9IGdseWYuZGF0YTtcbiAgICAgIGNvbnN0IG9sZEdseWZEYXRhTGVuZ3RoID0gb2xkR2x5ZkRhdGEubGVuZ3RoO1xuICAgICAgY29uc3QgbmV3R2x5ZkRhdGEgPSBuZXcgVWludDhBcnJheShvbGRHbHlmRGF0YUxlbmd0aCk7XG4gICAgICBsZXQgaSwgajtcbiAgICAgIGNvbnN0IGxvY2FFbnRyaWVzID0gW107XG5cbiAgICAgIGZvciAoaSA9IDAsIGogPSAwOyBpIDwgbnVtR2x5cGhzICsgMTsgaSsrLCBqICs9IGl0ZW1TaXplKSB7XG4gICAgICAgIGxldCBvZmZzZXQgPSBpdGVtRGVjb2RlKGxvY2FEYXRhLCBqKTtcblxuICAgICAgICBpZiAob2Zmc2V0ID4gb2xkR2x5ZkRhdGFMZW5ndGgpIHtcbiAgICAgICAgICBvZmZzZXQgPSBvbGRHbHlmRGF0YUxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxvY2FFbnRyaWVzLnB1c2goe1xuICAgICAgICAgIGluZGV4OiBpLFxuICAgICAgICAgIG9mZnNldCxcbiAgICAgICAgICBlbmRPZmZzZXQ6IDBcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGxvY2FFbnRyaWVzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgcmV0dXJuIGEub2Zmc2V0IC0gYi5vZmZzZXQ7XG4gICAgICB9KTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IG51bUdseXBoczsgaSsrKSB7XG4gICAgICAgIGxvY2FFbnRyaWVzW2ldLmVuZE9mZnNldCA9IGxvY2FFbnRyaWVzW2kgKyAxXS5vZmZzZXQ7XG4gICAgICB9XG5cbiAgICAgIGxvY2FFbnRyaWVzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgcmV0dXJuIGEuaW5kZXggLSBiLmluZGV4O1xuICAgICAgfSk7XG4gICAgICBjb25zdCBtaXNzaW5nR2x5cGhzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIGxldCB3cml0ZU9mZnNldCA9IDA7XG4gICAgICBpdGVtRW5jb2RlKGxvY2FEYXRhLCAwLCB3cml0ZU9mZnNldCk7XG5cbiAgICAgIGZvciAoaSA9IDAsIGogPSBpdGVtU2l6ZTsgaSA8IG51bUdseXBoczsgaSsrLCBqICs9IGl0ZW1TaXplKSB7XG4gICAgICAgIGNvbnN0IGdseXBoUHJvZmlsZSA9IHNhbml0aXplR2x5cGgob2xkR2x5ZkRhdGEsIGxvY2FFbnRyaWVzW2ldLm9mZnNldCwgbG9jYUVudHJpZXNbaV0uZW5kT2Zmc2V0LCBuZXdHbHlmRGF0YSwgd3JpdGVPZmZzZXQsIGhpbnRzVmFsaWQpO1xuICAgICAgICBjb25zdCBuZXdMZW5ndGggPSBnbHlwaFByb2ZpbGUubGVuZ3RoO1xuXG4gICAgICAgIGlmIChuZXdMZW5ndGggPT09IDApIHtcbiAgICAgICAgICBtaXNzaW5nR2x5cGhzW2ldID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChnbHlwaFByb2ZpbGUuc2l6ZU9mSW5zdHJ1Y3Rpb25zID4gbWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zKSB7XG4gICAgICAgICAgbWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zID0gZ2x5cGhQcm9maWxlLnNpemVPZkluc3RydWN0aW9ucztcbiAgICAgICAgfVxuXG4gICAgICAgIHdyaXRlT2Zmc2V0ICs9IG5ld0xlbmd0aDtcbiAgICAgICAgaXRlbUVuY29kZShsb2NhRGF0YSwgaiwgd3JpdGVPZmZzZXQpO1xuICAgICAgfVxuXG4gICAgICBpZiAod3JpdGVPZmZzZXQgPT09IDApIHtcbiAgICAgICAgY29uc3Qgc2ltcGxlR2x5cGggPSBuZXcgVWludDhBcnJheShbMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDksIDBdKTtcblxuICAgICAgICBmb3IgKGkgPSAwLCBqID0gaXRlbVNpemU7IGkgPCBudW1HbHlwaHNPdXQ7IGkrKywgaiArPSBpdGVtU2l6ZSkge1xuICAgICAgICAgIGl0ZW1FbmNvZGUobG9jYURhdGEsIGosIHNpbXBsZUdseXBoLmxlbmd0aCk7XG4gICAgICAgIH1cblxuICAgICAgICBnbHlmLmRhdGEgPSBzaW1wbGVHbHlwaDtcbiAgICAgIH0gZWxzZSBpZiAoZHVwRmlyc3RFbnRyeSkge1xuICAgICAgICBjb25zdCBmaXJzdEVudHJ5TGVuZ3RoID0gaXRlbURlY29kZShsb2NhRGF0YSwgaXRlbVNpemUpO1xuXG4gICAgICAgIGlmIChuZXdHbHlmRGF0YS5sZW5ndGggPiBmaXJzdEVudHJ5TGVuZ3RoICsgd3JpdGVPZmZzZXQpIHtcbiAgICAgICAgICBnbHlmLmRhdGEgPSBuZXdHbHlmRGF0YS5zdWJhcnJheSgwLCBmaXJzdEVudHJ5TGVuZ3RoICsgd3JpdGVPZmZzZXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGdseWYuZGF0YSA9IG5ldyBVaW50OEFycmF5KGZpcnN0RW50cnlMZW5ndGggKyB3cml0ZU9mZnNldCk7XG4gICAgICAgICAgZ2x5Zi5kYXRhLnNldChuZXdHbHlmRGF0YS5zdWJhcnJheSgwLCB3cml0ZU9mZnNldCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2x5Zi5kYXRhLnNldChuZXdHbHlmRGF0YS5zdWJhcnJheSgwLCBmaXJzdEVudHJ5TGVuZ3RoKSwgd3JpdGVPZmZzZXQpO1xuICAgICAgICBpdGVtRW5jb2RlKGxvY2EuZGF0YSwgbG9jYURhdGEubGVuZ3RoIC0gaXRlbVNpemUsIHdyaXRlT2Zmc2V0ICsgZmlyc3RFbnRyeUxlbmd0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnbHlmLmRhdGEgPSBuZXdHbHlmRGF0YS5zdWJhcnJheSgwLCB3cml0ZU9mZnNldCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1pc3NpbmdHbHlwaHMsXG4gICAgICAgIG1heFNpemVPZkluc3RydWN0aW9uc1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWFkUG9zdFNjcmlwdFRhYmxlKHBvc3QsIHByb3BlcnRpZXNPYmosIG1heHBOdW1HbHlwaHMpIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gKGZvbnQuc3RhcnQgPyBmb250LnN0YXJ0IDogMCkgKyBwb3N0Lm9mZnNldDtcbiAgICAgIGZvbnQucG9zID0gc3RhcnQ7XG4gICAgICBjb25zdCBsZW5ndGggPSBwb3N0Lmxlbmd0aCxcbiAgICAgICAgICAgIGVuZCA9IHN0YXJ0ICsgbGVuZ3RoO1xuICAgICAgY29uc3QgdmVyc2lvbiA9IGZvbnQuZ2V0SW50MzIoKTtcbiAgICAgIGZvbnQuc2tpcCgyOCk7XG4gICAgICBsZXQgZ2x5cGhOYW1lcztcbiAgICAgIGxldCB2YWxpZCA9IHRydWU7XG4gICAgICBsZXQgaTtcblxuICAgICAgc3dpdGNoICh2ZXJzaW9uKSB7XG4gICAgICAgIGNhc2UgMHgwMDAxMDAwMDpcbiAgICAgICAgICBnbHlwaE5hbWVzID0gX2ZvbnRzX3V0aWxzLk1hY1N0YW5kYXJkR2x5cGhPcmRlcmluZztcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDB4MDAwMjAwMDA6XG4gICAgICAgICAgY29uc3QgbnVtR2x5cGhzID0gZm9udC5nZXRVaW50MTYoKTtcblxuICAgICAgICAgIGlmIChudW1HbHlwaHMgIT09IG1heHBOdW1HbHlwaHMpIHtcbiAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBnbHlwaE5hbWVJbmRleGVzID0gW107XG5cbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gZm9udC5nZXRVaW50MTYoKTtcblxuICAgICAgICAgICAgaWYgKGluZGV4ID49IDMyNzY4KSB7XG4gICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbHlwaE5hbWVJbmRleGVzLnB1c2goaW5kZXgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGN1c3RvbU5hbWVzID0gW10sXG4gICAgICAgICAgICAgICAgc3RyQnVmID0gW107XG5cbiAgICAgICAgICB3aGlsZSAoZm9udC5wb3MgPCBlbmQpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0cmluZ0xlbmd0aCA9IGZvbnQuZ2V0Qnl0ZSgpO1xuICAgICAgICAgICAgc3RyQnVmLmxlbmd0aCA9IHN0cmluZ0xlbmd0aDtcblxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHN0cmluZ0xlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgIHN0ckJ1ZltpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoZm9udC5nZXRCeXRlKCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdXN0b21OYW1lcy5wdXNoKHN0ckJ1Zi5qb2luKFwiXCIpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBnbHlwaE5hbWVzID0gW107XG5cbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kpIHtcbiAgICAgICAgICAgIGNvbnN0IGogPSBnbHlwaE5hbWVJbmRleGVzW2ldO1xuXG4gICAgICAgICAgICBpZiAoaiA8IDI1OCkge1xuICAgICAgICAgICAgICBnbHlwaE5hbWVzLnB1c2goX2ZvbnRzX3V0aWxzLk1hY1N0YW5kYXJkR2x5cGhPcmRlcmluZ1tqXSk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnbHlwaE5hbWVzLnB1c2goY3VzdG9tTmFtZXNbaiAtIDI1OF0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMHgwMDAzMDAwMDpcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIlVua25vd24vdW5zdXBwb3J0ZWQgcG9zdCB0YWJsZSB2ZXJzaW9uIFwiICsgdmVyc2lvbik7XG4gICAgICAgICAgdmFsaWQgPSBmYWxzZTtcblxuICAgICAgICAgIGlmIChwcm9wZXJ0aWVzT2JqLmRlZmF1bHRFbmNvZGluZykge1xuICAgICAgICAgICAgZ2x5cGhOYW1lcyA9IHByb3BlcnRpZXNPYmouZGVmYXVsdEVuY29kaW5nO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBwcm9wZXJ0aWVzT2JqLmdseXBoTmFtZXMgPSBnbHlwaE5hbWVzO1xuICAgICAgcmV0dXJuIHZhbGlkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlYWROYW1lVGFibGUobmFtZVRhYmxlKSB7XG4gICAgICBjb25zdCBzdGFydCA9IChmb250LnN0YXJ0ID8gZm9udC5zdGFydCA6IDApICsgbmFtZVRhYmxlLm9mZnNldDtcbiAgICAgIGZvbnQucG9zID0gc3RhcnQ7XG4gICAgICBjb25zdCBuYW1lcyA9IFtbXSwgW11dO1xuICAgICAgY29uc3QgbGVuZ3RoID0gbmFtZVRhYmxlLmxlbmd0aCxcbiAgICAgICAgICAgIGVuZCA9IHN0YXJ0ICsgbGVuZ3RoO1xuICAgICAgY29uc3QgZm9ybWF0ID0gZm9udC5nZXRVaW50MTYoKTtcbiAgICAgIGNvbnN0IEZPUk1BVF8wX0hFQURFUl9MRU5HVEggPSA2O1xuXG4gICAgICBpZiAoZm9ybWF0ICE9PSAwIHx8IGxlbmd0aCA8IEZPUk1BVF8wX0hFQURFUl9MRU5HVEgpIHtcbiAgICAgICAgcmV0dXJuIG5hbWVzO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBudW1SZWNvcmRzID0gZm9udC5nZXRVaW50MTYoKTtcbiAgICAgIGNvbnN0IHN0cmluZ3NTdGFydCA9IGZvbnQuZ2V0VWludDE2KCk7XG4gICAgICBjb25zdCByZWNvcmRzID0gW107XG4gICAgICBjb25zdCBOQU1FX1JFQ09SRF9MRU5HVEggPSAxMjtcbiAgICAgIGxldCBpLCBpaTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IG51bVJlY29yZHMgJiYgZm9udC5wb3MgKyBOQU1FX1JFQ09SRF9MRU5HVEggPD0gZW5kOyBpKyspIHtcbiAgICAgICAgY29uc3QgciA9IHtcbiAgICAgICAgICBwbGF0Zm9ybTogZm9udC5nZXRVaW50MTYoKSxcbiAgICAgICAgICBlbmNvZGluZzogZm9udC5nZXRVaW50MTYoKSxcbiAgICAgICAgICBsYW5ndWFnZTogZm9udC5nZXRVaW50MTYoKSxcbiAgICAgICAgICBuYW1lOiBmb250LmdldFVpbnQxNigpLFxuICAgICAgICAgIGxlbmd0aDogZm9udC5nZXRVaW50MTYoKSxcbiAgICAgICAgICBvZmZzZXQ6IGZvbnQuZ2V0VWludDE2KClcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoci5wbGF0Zm9ybSA9PT0gMSAmJiByLmVuY29kaW5nID09PSAwICYmIHIubGFuZ3VhZ2UgPT09IDAgfHwgci5wbGF0Zm9ybSA9PT0gMyAmJiByLmVuY29kaW5nID09PSAxICYmIHIubGFuZ3VhZ2UgPT09IDB4NDA5KSB7XG4gICAgICAgICAgcmVjb3Jkcy5wdXNoKHIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoaSA9IDAsIGlpID0gcmVjb3Jkcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IHJlY29yZHNbaV07XG5cbiAgICAgICAgaWYgKHJlY29yZC5sZW5ndGggPD0gMCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcG9zID0gc3RhcnQgKyBzdHJpbmdzU3RhcnQgKyByZWNvcmQub2Zmc2V0O1xuXG4gICAgICAgIGlmIChwb3MgKyByZWNvcmQubGVuZ3RoID4gZW5kKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBmb250LnBvcyA9IHBvcztcbiAgICAgICAgY29uc3QgbmFtZUluZGV4ID0gcmVjb3JkLm5hbWU7XG5cbiAgICAgICAgaWYgKHJlY29yZC5lbmNvZGluZykge1xuICAgICAgICAgIGxldCBzdHIgPSBcIlwiO1xuXG4gICAgICAgICAgZm9yIChsZXQgaiA9IDAsIGpqID0gcmVjb3JkLmxlbmd0aDsgaiA8IGpqOyBqICs9IDIpIHtcbiAgICAgICAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGZvbnQuZ2V0VWludDE2KCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG5hbWVzWzFdW25hbWVJbmRleF0gPSBzdHI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmFtZXNbMF1bbmFtZUluZGV4XSA9IGZvbnQuZ2V0U3RyaW5nKHJlY29yZC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuYW1lcztcbiAgICB9XG5cbiAgICBjb25zdCBUVE9wc1N0YWNrRGVsdGFzID0gWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIC0yLCAtMiwgLTIsIC0yLCAwLCAwLCAtMiwgLTUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMCwgMCwgLTEsIDAsIC0xLCAtMSwgLTEsIC0xLCAxLCAtMSwgLTk5OSwgMCwgMSwgMCwgLTEsIC0yLCAwLCAtMSwgLTIsIC0xLCAtMSwgMCwgLTEsIC0xLCAwLCAwLCAtOTk5LCAtOTk5LCAtMSwgLTEsIC0xLCAtMSwgLTIsIC05OTksIC0yLCAtMiwgLTk5OSwgMCwgLTIsIC0yLCAwLCAwLCAtMiwgMCwgLTIsIDAsIDAsIDAsIC0yLCAtMSwgLTEsIDEsIDEsIDAsIDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAwLCAwLCAtMSwgMCwgLTEsIC0xLCAwLCAtOTk5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAtMiwgLTk5OSwgLTk5OSwgLTk5OSwgLTk5OSwgLTk5OSwgLTEsIC0xLCAtMiwgLTIsIDAsIDAsIDAsIDAsIC0xLCAtMSwgLTk5OSwgLTIsIC0yLCAwLCAwLCAtMSwgLTIsIC0yLCAwLCAwLCAwLCAtMSwgLTEsIC0xLCAtMl07XG5cbiAgICBmdW5jdGlvbiBzYW5pdGl6ZVRUUHJvZ3JhbSh0YWJsZSwgdHRDb250ZXh0KSB7XG4gICAgICBsZXQgZGF0YSA9IHRhYmxlLmRhdGE7XG4gICAgICBsZXQgaSA9IDAsXG4gICAgICAgICAgaixcbiAgICAgICAgICBuLFxuICAgICAgICAgIGIsXG4gICAgICAgICAgZnVuY0lkLFxuICAgICAgICAgIHBjLFxuICAgICAgICAgIGxhc3RFbmRmID0gMCxcbiAgICAgICAgICBsYXN0RGVmZiA9IDA7XG4gICAgICBjb25zdCBzdGFjayA9IFtdO1xuICAgICAgY29uc3QgY2FsbHN0YWNrID0gW107XG4gICAgICBjb25zdCBmdW5jdGlvbnNDYWxsZWQgPSBbXTtcbiAgICAgIGxldCB0b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnMgPSB0dENvbnRleHQudG9vQ29tcGxleFRvRm9sbG93RnVuY3Rpb25zO1xuICAgICAgbGV0IGluRkRFRiA9IGZhbHNlLFxuICAgICAgICAgIGlmTGV2ZWwgPSAwLFxuICAgICAgICAgIGluRUxTRSA9IDA7XG5cbiAgICAgIGZvciAobGV0IGlpID0gZGF0YS5sZW5ndGg7IGkgPCBpaTspIHtcbiAgICAgICAgY29uc3Qgb3AgPSBkYXRhW2krK107XG5cbiAgICAgICAgaWYgKG9wID09PSAweDQwKSB7XG4gICAgICAgICAgbiA9IGRhdGFbaSsrXTtcblxuICAgICAgICAgIGlmIChpbkZERUYgfHwgaW5FTFNFKSB7XG4gICAgICAgICAgICBpICs9IG47XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAgICAgICAgICAgc3RhY2sucHVzaChkYXRhW2krK10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChvcCA9PT0gMHg0MSkge1xuICAgICAgICAgIG4gPSBkYXRhW2krK107XG5cbiAgICAgICAgICBpZiAoaW5GREVGIHx8IGluRUxTRSkge1xuICAgICAgICAgICAgaSArPSBuICogMjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IG47IGorKykge1xuICAgICAgICAgICAgICBiID0gZGF0YVtpKytdO1xuICAgICAgICAgICAgICBzdGFjay5wdXNoKGIgPDwgOCB8IGRhdGFbaSsrXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKChvcCAmIDB4ZjgpID09PSAweGIwKSB7XG4gICAgICAgICAgbiA9IG9wIC0gMHhiMCArIDE7XG5cbiAgICAgICAgICBpZiAoaW5GREVGIHx8IGluRUxTRSkge1xuICAgICAgICAgICAgaSArPSBuO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICAgICAgICAgIHN0YWNrLnB1c2goZGF0YVtpKytdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoKG9wICYgMHhmOCkgPT09IDB4YjgpIHtcbiAgICAgICAgICBuID0gb3AgLSAweGI4ICsgMTtcblxuICAgICAgICAgIGlmIChpbkZERUYgfHwgaW5FTFNFKSB7XG4gICAgICAgICAgICBpICs9IG4gKiAyO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICAgICAgICAgIGIgPSBkYXRhW2krK107XG4gICAgICAgICAgICAgIHN0YWNrLnB1c2goYiA8PCA4IHwgZGF0YVtpKytdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAob3AgPT09IDB4MmIgJiYgIXRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9ucykge1xuICAgICAgICAgIGlmICghaW5GREVGICYmICFpbkVMU0UpIHtcbiAgICAgICAgICAgIGZ1bmNJZCA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgICAgICBpZiAoaXNOYU4oZnVuY0lkKSkge1xuICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoXCJUVDogQ0FMTCBlbXB0eSBzdGFjayAob3IgaW52YWxpZCBlbnRyeSkuXCIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdHRDb250ZXh0LmZ1bmN0aW9uc1VzZWRbZnVuY0lkXSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgaWYgKGZ1bmNJZCBpbiB0dENvbnRleHQuZnVuY3Rpb25zU3RhY2tEZWx0YXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdTdGFja0xlbmd0aCA9IHN0YWNrLmxlbmd0aCArIHR0Q29udGV4dC5mdW5jdGlvbnNTdGFja0RlbHRhc1tmdW5jSWRdO1xuXG4gICAgICAgICAgICAgICAgaWYgKG5ld1N0YWNrTGVuZ3RoIDwgMCkge1xuICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiVFQ6IENBTEwgaW52YWxpZCBmdW5jdGlvbnMgc3RhY2sgZGVsdGEuXCIpO1xuICAgICAgICAgICAgICAgICAgdHRDb250ZXh0LmhpbnRzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzdGFjay5sZW5ndGggPSBuZXdTdGFja0xlbmd0aDtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChmdW5jSWQgaW4gdHRDb250ZXh0LmZ1bmN0aW9uc0RlZmluZWQgJiYgIWZ1bmN0aW9uc0NhbGxlZC5pbmNsdWRlcyhmdW5jSWQpKSB7XG4gICAgICAgICAgICAgICAgY2FsbHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgICBzdGFja1RvcDogc3RhY2subGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uc0NhbGxlZC5wdXNoKGZ1bmNJZCk7XG4gICAgICAgICAgICAgICAgcGMgPSB0dENvbnRleHQuZnVuY3Rpb25zRGVmaW5lZFtmdW5jSWRdO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFwYykge1xuICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiVFQ6IENBTEwgbm9uLWV4aXN0ZW50IGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgICAgICAgdHRDb250ZXh0LmhpbnRzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBkYXRhID0gcGMuZGF0YTtcbiAgICAgICAgICAgICAgICBpID0gcGMuaTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChvcCA9PT0gMHgyYyAmJiAhdG9vQ29tcGxleFRvRm9sbG93RnVuY3Rpb25zKSB7XG4gICAgICAgICAgaWYgKGluRkRFRiB8fCBpbkVMU0UpIHtcbiAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIlRUOiBuZXN0ZWQgRkRFRnMgbm90IGFsbG93ZWRcIik7XG4gICAgICAgICAgICB0b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGluRkRFRiA9IHRydWU7XG4gICAgICAgICAgbGFzdERlZmYgPSBpO1xuICAgICAgICAgIGZ1bmNJZCA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgIHR0Q29udGV4dC5mdW5jdGlvbnNEZWZpbmVkW2Z1bmNJZF0gPSB7XG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgaVxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAob3AgPT09IDB4MmQpIHtcbiAgICAgICAgICBpZiAoaW5GREVGKSB7XG4gICAgICAgICAgICBpbkZERUYgPSBmYWxzZTtcbiAgICAgICAgICAgIGxhc3RFbmRmID0gaTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGMgPSBjYWxsc3RhY2sucG9wKCk7XG5cbiAgICAgICAgICAgIGlmICghcGMpIHtcbiAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiVFQ6IEVOREYgYmFkIHN0YWNrXCIpO1xuICAgICAgICAgICAgICB0dENvbnRleHQuaGludHNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmNJZCA9IGZ1bmN0aW9uc0NhbGxlZC5wb3AoKTtcbiAgICAgICAgICAgIGRhdGEgPSBwYy5kYXRhO1xuICAgICAgICAgICAgaSA9IHBjLmk7XG4gICAgICAgICAgICB0dENvbnRleHQuZnVuY3Rpb25zU3RhY2tEZWx0YXNbZnVuY0lkXSA9IHN0YWNrLmxlbmd0aCAtIHBjLnN0YWNrVG9wO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChvcCA9PT0gMHg4OSkge1xuICAgICAgICAgIGlmIChpbkZERUYgfHwgaW5FTFNFKSB7XG4gICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJUVDogbmVzdGVkIElERUZzIG5vdCBhbGxvd2VkXCIpO1xuICAgICAgICAgICAgdG9vQ29tcGxleFRvRm9sbG93RnVuY3Rpb25zID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpbkZERUYgPSB0cnVlO1xuICAgICAgICAgIGxhc3REZWZmID0gaTtcbiAgICAgICAgfSBlbHNlIGlmIChvcCA9PT0gMHg1OCkge1xuICAgICAgICAgICsraWZMZXZlbDtcbiAgICAgICAgfSBlbHNlIGlmIChvcCA9PT0gMHgxYikge1xuICAgICAgICAgIGluRUxTRSA9IGlmTGV2ZWw7XG4gICAgICAgIH0gZWxzZSBpZiAob3AgPT09IDB4NTkpIHtcbiAgICAgICAgICBpZiAoaW5FTFNFID09PSBpZkxldmVsKSB7XG4gICAgICAgICAgICBpbkVMU0UgPSAwO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC0taWZMZXZlbDtcbiAgICAgICAgfSBlbHNlIGlmIChvcCA9PT0gMHgxYykge1xuICAgICAgICAgIGlmICghaW5GREVGICYmICFpbkVMU0UpIHtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgICAgICBpZiAob2Zmc2V0ID4gMCkge1xuICAgICAgICAgICAgICBpICs9IG9mZnNldCAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpbkZERUYgJiYgIWluRUxTRSkge1xuICAgICAgICAgIGxldCBzdGFja0RlbHRhID0gMDtcblxuICAgICAgICAgIGlmIChvcCA8PSAweDhlKSB7XG4gICAgICAgICAgICBzdGFja0RlbHRhID0gVFRPcHNTdGFja0RlbHRhc1tvcF07XG4gICAgICAgICAgfSBlbHNlIGlmIChvcCA+PSAweGMwICYmIG9wIDw9IDB4ZGYpIHtcbiAgICAgICAgICAgIHN0YWNrRGVsdGEgPSAtMTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wID49IDB4ZTApIHtcbiAgICAgICAgICAgIHN0YWNrRGVsdGEgPSAtMjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAob3AgPj0gMHg3MSAmJiBvcCA8PSAweDc1KSB7XG4gICAgICAgICAgICBuID0gc3RhY2sucG9wKCk7XG5cbiAgICAgICAgICAgIGlmICghaXNOYU4obikpIHtcbiAgICAgICAgICAgICAgc3RhY2tEZWx0YSA9IC1uICogMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB3aGlsZSAoc3RhY2tEZWx0YSA8IDAgJiYgc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBzdGFja0RlbHRhKys7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgd2hpbGUgKHN0YWNrRGVsdGEgPiAwKSB7XG4gICAgICAgICAgICBzdGFjay5wdXNoKE5hTik7XG4gICAgICAgICAgICBzdGFja0RlbHRhLS07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHR0Q29udGV4dC50b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnMgPSB0b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnM7XG4gICAgICBjb25zdCBjb250ZW50ID0gW2RhdGFdO1xuXG4gICAgICBpZiAoaSA+IGRhdGEubGVuZ3RoKSB7XG4gICAgICAgIGNvbnRlbnQucHVzaChuZXcgVWludDhBcnJheShpIC0gZGF0YS5sZW5ndGgpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGxhc3REZWZmID4gbGFzdEVuZGYpIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiVFQ6IGNvbXBsZW1lbnRpbmcgYSBtaXNzaW5nIGZ1bmN0aW9uIHRhaWxcIik7XG4gICAgICAgIGNvbnRlbnQucHVzaChuZXcgVWludDhBcnJheShbMHgyMiwgMHgyZF0pKTtcbiAgICAgIH1cblxuICAgICAgZm9sZFRUVGFibGUodGFibGUsIGNvbnRlbnQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrSW52YWxpZEZ1bmN0aW9ucyh0dENvbnRleHQsIG1heEZ1bmN0aW9uRGVmcykge1xuICAgICAgaWYgKHR0Q29udGV4dC50b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAodHRDb250ZXh0LmZ1bmN0aW9uc0RlZmluZWQubGVuZ3RoID4gbWF4RnVuY3Rpb25EZWZzKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShcIlRUOiBtb3JlIGZ1bmN0aW9ucyBkZWZpbmVkIHRoYW4gZXhwZWN0ZWRcIik7XG4gICAgICAgIHR0Q29udGV4dC5oaW50c1ZhbGlkID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgaiA9IDAsIGpqID0gdHRDb250ZXh0LmZ1bmN0aW9uc1VzZWQubGVuZ3RoOyBqIDwgamo7IGorKykge1xuICAgICAgICBpZiAoaiA+IG1heEZ1bmN0aW9uRGVmcykge1xuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIlRUOiBpbnZhbGlkIGZ1bmN0aW9uIGlkOiBcIiArIGopO1xuICAgICAgICAgIHR0Q29udGV4dC5oaW50c1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR0Q29udGV4dC5mdW5jdGlvbnNVc2VkW2pdICYmICF0dENvbnRleHQuZnVuY3Rpb25zRGVmaW5lZFtqXSkge1xuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIlRUOiB1bmRlZmluZWQgZnVuY3Rpb246IFwiICsgaik7XG4gICAgICAgICAgdHRDb250ZXh0LmhpbnRzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmb2xkVFRUYWJsZSh0YWJsZSwgY29udGVudCkge1xuICAgICAgaWYgKGNvbnRlbnQubGVuZ3RoID4gMSkge1xuICAgICAgICBsZXQgbmV3TGVuZ3RoID0gMDtcbiAgICAgICAgbGV0IGosIGpqO1xuXG4gICAgICAgIGZvciAoaiA9IDAsIGpqID0gY29udGVudC5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgbmV3TGVuZ3RoICs9IGNvbnRlbnRbal0ubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV3TGVuZ3RoID0gbmV3TGVuZ3RoICsgMyAmIH4zO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgVWludDhBcnJheShuZXdMZW5ndGgpO1xuICAgICAgICBsZXQgcG9zID0gMDtcblxuICAgICAgICBmb3IgKGogPSAwLCBqaiA9IGNvbnRlbnQubGVuZ3RoOyBqIDwgamo7IGorKykge1xuICAgICAgICAgIHJlc3VsdC5zZXQoY29udGVudFtqXSwgcG9zKTtcbiAgICAgICAgICBwb3MgKz0gY29udGVudFtqXS5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICB0YWJsZS5kYXRhID0gcmVzdWx0O1xuICAgICAgICB0YWJsZS5sZW5ndGggPSBuZXdMZW5ndGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2FuaXRpemVUVFByb2dyYW1zKGZwZ20sIHByZXAsIGN2dCwgbWF4RnVuY3Rpb25EZWZzKSB7XG4gICAgICBjb25zdCB0dENvbnRleHQgPSB7XG4gICAgICAgIGZ1bmN0aW9uc0RlZmluZWQ6IFtdLFxuICAgICAgICBmdW5jdGlvbnNVc2VkOiBbXSxcbiAgICAgICAgZnVuY3Rpb25zU3RhY2tEZWx0YXM6IFtdLFxuICAgICAgICB0b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnM6IGZhbHNlLFxuICAgICAgICBoaW50c1ZhbGlkOiB0cnVlXG4gICAgICB9O1xuXG4gICAgICBpZiAoZnBnbSkge1xuICAgICAgICBzYW5pdGl6ZVRUUHJvZ3JhbShmcGdtLCB0dENvbnRleHQpO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJlcCkge1xuICAgICAgICBzYW5pdGl6ZVRUUHJvZ3JhbShwcmVwLCB0dENvbnRleHQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZnBnbSkge1xuICAgICAgICBjaGVja0ludmFsaWRGdW5jdGlvbnModHRDb250ZXh0LCBtYXhGdW5jdGlvbkRlZnMpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY3Z0ICYmIGN2dC5sZW5ndGggJiAxKSB7XG4gICAgICAgIGNvbnN0IGN2dERhdGEgPSBuZXcgVWludDhBcnJheShjdnQubGVuZ3RoICsgMSk7XG4gICAgICAgIGN2dERhdGEuc2V0KGN2dC5kYXRhKTtcbiAgICAgICAgY3Z0LmRhdGEgPSBjdnREYXRhO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHRDb250ZXh0LmhpbnRzVmFsaWQ7XG4gICAgfVxuXG4gICAgZm9udCA9IG5ldyBfc3RyZWFtLlN0cmVhbShuZXcgVWludDhBcnJheShmb250LmdldEJ5dGVzKCkpKTtcbiAgICBsZXQgaGVhZGVyLCB0YWJsZXM7XG5cbiAgICBpZiAoaXNUcnVlVHlwZUNvbGxlY3Rpb25GaWxlKGZvbnQpKSB7XG4gICAgICBjb25zdCB0dGNEYXRhID0gcmVhZFRydWVUeXBlQ29sbGVjdGlvbkRhdGEoZm9udCwgdGhpcy5uYW1lKTtcbiAgICAgIGhlYWRlciA9IHR0Y0RhdGEuaGVhZGVyO1xuICAgICAgdGFibGVzID0gdHRjRGF0YS50YWJsZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWRlciA9IHJlYWRPcGVuVHlwZUhlYWRlcihmb250KTtcbiAgICAgIHRhYmxlcyA9IHJlYWRUYWJsZXMoZm9udCwgaGVhZGVyLm51bVRhYmxlcyk7XG4gICAgfVxuXG4gICAgbGV0IGNmZiwgY2ZmRmlsZTtcbiAgICBjb25zdCBpc1RydWVUeXBlID0gIXRhYmxlc1tcIkNGRiBcIl07XG5cbiAgICBpZiAoIWlzVHJ1ZVR5cGUpIHtcbiAgICAgIGNvbnN0IGlzQ29tcG9zaXRlID0gcHJvcGVydGllcy5jb21wb3NpdGUgJiYgKChwcm9wZXJ0aWVzLmNpZFRvR2lkTWFwIHx8IFtdKS5sZW5ndGggPiAwIHx8ICEocHJvcGVydGllcy5jTWFwIGluc3RhbmNlb2YgX2NtYXAuSWRlbnRpdHlDTWFwKSk7XG5cbiAgICAgIGlmIChoZWFkZXIudmVyc2lvbiA9PT0gXCJPVFRPXCIgJiYgIWlzQ29tcG9zaXRlIHx8ICF0YWJsZXMuaGVhZCB8fCAhdGFibGVzLmhoZWEgfHwgIXRhYmxlcy5tYXhwIHx8ICF0YWJsZXMucG9zdCkge1xuICAgICAgICBjZmZGaWxlID0gbmV3IF9zdHJlYW0uU3RyZWFtKHRhYmxlc1tcIkNGRiBcIl0uZGF0YSk7XG4gICAgICAgIGNmZiA9IG5ldyBfY2ZmX2ZvbnQuQ0ZGRm9udChjZmZGaWxlLCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgYWRqdXN0V2lkdGhzKHByb3BlcnRpZXMpO1xuICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0KG5hbWUsIGNmZiwgcHJvcGVydGllcyk7XG4gICAgICB9XG5cbiAgICAgIGRlbGV0ZSB0YWJsZXMuZ2x5ZjtcbiAgICAgIGRlbGV0ZSB0YWJsZXMubG9jYTtcbiAgICAgIGRlbGV0ZSB0YWJsZXMuZnBnbTtcbiAgICAgIGRlbGV0ZSB0YWJsZXMucHJlcDtcbiAgICAgIGRlbGV0ZSB0YWJsZXNbXCJjdnQgXCJdO1xuICAgICAgdGhpcy5pc09wZW5UeXBlID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCF0YWJsZXMubG9jYSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ1JlcXVpcmVkIFwibG9jYVwiIHRhYmxlIGlzIG5vdCBmb3VuZCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRhYmxlcy5nbHlmKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKSgnUmVxdWlyZWQgXCJnbHlmXCIgdGFibGUgaXMgbm90IGZvdW5kIC0tIHRyeWluZyB0byByZWNvdmVyLicpO1xuICAgICAgICB0YWJsZXMuZ2x5ZiA9IHtcbiAgICAgICAgICB0YWc6IFwiZ2x5ZlwiLFxuICAgICAgICAgIGRhdGE6IG5ldyBVaW50OEFycmF5KDApXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaXNPcGVuVHlwZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghdGFibGVzLm1heHApIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignUmVxdWlyZWQgXCJtYXhwXCIgdGFibGUgaXMgbm90IGZvdW5kJyk7XG4gICAgfVxuXG4gICAgZm9udC5wb3MgPSAoZm9udC5zdGFydCB8fCAwKSArIHRhYmxlcy5tYXhwLm9mZnNldDtcbiAgICBjb25zdCB2ZXJzaW9uID0gZm9udC5nZXRJbnQzMigpO1xuICAgIGNvbnN0IG51bUdseXBocyA9IGZvbnQuZ2V0VWludDE2KCk7XG5cbiAgICBpZiAocHJvcGVydGllcy5zY2FsZUZhY3RvcnMgJiYgcHJvcGVydGllcy5zY2FsZUZhY3RvcnMubGVuZ3RoID09PSBudW1HbHlwaHMgJiYgaXNUcnVlVHlwZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBzY2FsZUZhY3RvcnNcbiAgICAgIH0gPSBwcm9wZXJ0aWVzO1xuICAgICAgY29uc3QgaXNHbHlwaExvY2F0aW9uc0xvbmcgPSBpbnQxNih0YWJsZXMuaGVhZC5kYXRhWzUwXSwgdGFibGVzLmhlYWQuZGF0YVs1MV0pO1xuICAgICAgY29uc3QgZ2x5cGhzID0gbmV3IF9nbHlmLkdseWZUYWJsZSh7XG4gICAgICAgIGdseWZUYWJsZTogdGFibGVzLmdseWYuZGF0YSxcbiAgICAgICAgaXNHbHlwaExvY2F0aW9uc0xvbmcsXG4gICAgICAgIGxvY2FUYWJsZTogdGFibGVzLmxvY2EuZGF0YSxcbiAgICAgICAgbnVtR2x5cGhzXG4gICAgICB9KTtcbiAgICAgIGdseXBocy5zY2FsZShzY2FsZUZhY3RvcnMpO1xuICAgICAgY29uc3Qge1xuICAgICAgICBnbHlmLFxuICAgICAgICBsb2NhLFxuICAgICAgICBpc0xvY2F0aW9uTG9uZ1xuICAgICAgfSA9IGdseXBocy53cml0ZSgpO1xuICAgICAgdGFibGVzLmdseWYuZGF0YSA9IGdseWY7XG4gICAgICB0YWJsZXMubG9jYS5kYXRhID0gbG9jYTtcblxuICAgICAgaWYgKGlzTG9jYXRpb25Mb25nICE9PSAhIWlzR2x5cGhMb2NhdGlvbnNMb25nKSB7XG4gICAgICAgIHRhYmxlcy5oZWFkLmRhdGFbNTBdID0gMDtcbiAgICAgICAgdGFibGVzLmhlYWQuZGF0YVs1MV0gPSBpc0xvY2F0aW9uTG9uZyA/IDEgOiAwO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXRyaWNzID0gdGFibGVzLmhtdHguZGF0YTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1HbHlwaHM7IGkrKykge1xuICAgICAgICBjb25zdCBqID0gNCAqIGk7XG4gICAgICAgIGNvbnN0IGFkdmFuY2VXaWR0aCA9IE1hdGgucm91bmQoc2NhbGVGYWN0b3JzW2ldICogaW50MTYobWV0cmljc1tqXSwgbWV0cmljc1tqICsgMV0pKTtcbiAgICAgICAgbWV0cmljc1tqXSA9IGFkdmFuY2VXaWR0aCA+PiA4ICYgMHhmZjtcbiAgICAgICAgbWV0cmljc1tqICsgMV0gPSBhZHZhbmNlV2lkdGggJiAweGZmO1xuICAgICAgICBjb25zdCBsc2IgPSBNYXRoLnJvdW5kKHNjYWxlRmFjdG9yc1tpXSAqIHNpZ25lZEludDE2KG1ldHJpY3NbaiArIDJdLCBtZXRyaWNzW2ogKyAzXSkpO1xuICAgICAgICB3cml0ZVNpZ25lZEludDE2KG1ldHJpY3MsIGogKyAyLCBsc2IpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBudW1HbHlwaHNPdXQgPSBudW1HbHlwaHMgKyAxO1xuICAgIGxldCBkdXBGaXJzdEVudHJ5ID0gdHJ1ZTtcblxuICAgIGlmIChudW1HbHlwaHNPdXQgPiAweGZmZmYpIHtcbiAgICAgIGR1cEZpcnN0RW50cnkgPSBmYWxzZTtcbiAgICAgIG51bUdseXBoc091dCA9IG51bUdseXBocztcbiAgICAgICgwLCBfdXRpbC53YXJuKShcIk5vdCBlbm91Z2ggc3BhY2UgaW4gZ2x5ZnMgdG8gZHVwbGljYXRlIGZpcnN0IGdseXBoLlwiKTtcbiAgICB9XG5cbiAgICBsZXQgbWF4RnVuY3Rpb25EZWZzID0gMDtcbiAgICBsZXQgbWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zID0gMDtcblxuICAgIGlmICh2ZXJzaW9uID49IDB4MDAwMTAwMDAgJiYgdGFibGVzLm1heHAubGVuZ3RoID49IDIyKSB7XG4gICAgICBmb250LnBvcyArPSA4O1xuICAgICAgY29uc3QgbWF4Wm9uZXMgPSBmb250LmdldFVpbnQxNigpO1xuXG4gICAgICBpZiAobWF4Wm9uZXMgPiAyKSB7XG4gICAgICAgIHRhYmxlcy5tYXhwLmRhdGFbMTRdID0gMDtcbiAgICAgICAgdGFibGVzLm1heHAuZGF0YVsxNV0gPSAyO1xuICAgICAgfVxuXG4gICAgICBmb250LnBvcyArPSA0O1xuICAgICAgbWF4RnVuY3Rpb25EZWZzID0gZm9udC5nZXRVaW50MTYoKTtcbiAgICAgIGZvbnQucG9zICs9IDQ7XG4gICAgICBtYXhTaXplT2ZJbnN0cnVjdGlvbnMgPSBmb250LmdldFVpbnQxNigpO1xuICAgIH1cblxuICAgIHRhYmxlcy5tYXhwLmRhdGFbNF0gPSBudW1HbHlwaHNPdXQgPj4gODtcbiAgICB0YWJsZXMubWF4cC5kYXRhWzVdID0gbnVtR2x5cGhzT3V0ICYgMjU1O1xuICAgIGNvbnN0IGhpbnRzVmFsaWQgPSBzYW5pdGl6ZVRUUHJvZ3JhbXModGFibGVzLmZwZ20sIHRhYmxlcy5wcmVwLCB0YWJsZXNbXCJjdnQgXCJdLCBtYXhGdW5jdGlvbkRlZnMpO1xuXG4gICAgaWYgKCFoaW50c1ZhbGlkKSB7XG4gICAgICBkZWxldGUgdGFibGVzLmZwZ207XG4gICAgICBkZWxldGUgdGFibGVzLnByZXA7XG4gICAgICBkZWxldGUgdGFibGVzW1wiY3Z0IFwiXTtcbiAgICB9XG5cbiAgICBzYW5pdGl6ZU1ldHJpY3MoZm9udCwgdGFibGVzLmhoZWEsIHRhYmxlcy5obXR4LCB0YWJsZXMuaGVhZCwgbnVtR2x5cGhzT3V0LCBkdXBGaXJzdEVudHJ5KTtcblxuICAgIGlmICghdGFibGVzLmhlYWQpIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignUmVxdWlyZWQgXCJoZWFkXCIgdGFibGUgaXMgbm90IGZvdW5kJyk7XG4gICAgfVxuXG4gICAgc2FuaXRpemVIZWFkKHRhYmxlcy5oZWFkLCBudW1HbHlwaHMsIGlzVHJ1ZVR5cGUgPyB0YWJsZXMubG9jYS5sZW5ndGggOiAwKTtcbiAgICBsZXQgbWlzc2luZ0dseXBocyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICBpZiAoaXNUcnVlVHlwZSkge1xuICAgICAgY29uc3QgaXNHbHlwaExvY2F0aW9uc0xvbmcgPSBpbnQxNih0YWJsZXMuaGVhZC5kYXRhWzUwXSwgdGFibGVzLmhlYWQuZGF0YVs1MV0pO1xuICAgICAgY29uc3QgZ2x5cGhzSW5mbyA9IHNhbml0aXplR2x5cGhMb2NhdGlvbnModGFibGVzLmxvY2EsIHRhYmxlcy5nbHlmLCBudW1HbHlwaHMsIGlzR2x5cGhMb2NhdGlvbnNMb25nLCBoaW50c1ZhbGlkLCBkdXBGaXJzdEVudHJ5LCBtYXhTaXplT2ZJbnN0cnVjdGlvbnMpO1xuICAgICAgbWlzc2luZ0dseXBocyA9IGdseXBoc0luZm8ubWlzc2luZ0dseXBocztcblxuICAgICAgaWYgKHZlcnNpb24gPj0gMHgwMDAxMDAwMCAmJiB0YWJsZXMubWF4cC5sZW5ndGggPj0gMjIpIHtcbiAgICAgICAgdGFibGVzLm1heHAuZGF0YVsyNl0gPSBnbHlwaHNJbmZvLm1heFNpemVPZkluc3RydWN0aW9ucyA+PiA4O1xuICAgICAgICB0YWJsZXMubWF4cC5kYXRhWzI3XSA9IGdseXBoc0luZm8ubWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zICYgMjU1O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdGFibGVzLmhoZWEpIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignUmVxdWlyZWQgXCJoaGVhXCIgdGFibGUgaXMgbm90IGZvdW5kJyk7XG4gICAgfVxuXG4gICAgaWYgKHRhYmxlcy5oaGVhLmRhdGFbMTBdID09PSAwICYmIHRhYmxlcy5oaGVhLmRhdGFbMTFdID09PSAwKSB7XG4gICAgICB0YWJsZXMuaGhlYS5kYXRhWzEwXSA9IDB4ZmY7XG4gICAgICB0YWJsZXMuaGhlYS5kYXRhWzExXSA9IDB4ZmY7XG4gICAgfVxuXG4gICAgY29uc3QgbWV0cmljc092ZXJyaWRlID0ge1xuICAgICAgdW5pdHNQZXJFbTogaW50MTYodGFibGVzLmhlYWQuZGF0YVsxOF0sIHRhYmxlcy5oZWFkLmRhdGFbMTldKSxcbiAgICAgIHlNYXg6IGludDE2KHRhYmxlcy5oZWFkLmRhdGFbNDJdLCB0YWJsZXMuaGVhZC5kYXRhWzQzXSksXG4gICAgICB5TWluOiBzaWduZWRJbnQxNih0YWJsZXMuaGVhZC5kYXRhWzM4XSwgdGFibGVzLmhlYWQuZGF0YVszOV0pLFxuICAgICAgYXNjZW50OiBzaWduZWRJbnQxNih0YWJsZXMuaGhlYS5kYXRhWzRdLCB0YWJsZXMuaGhlYS5kYXRhWzVdKSxcbiAgICAgIGRlc2NlbnQ6IHNpZ25lZEludDE2KHRhYmxlcy5oaGVhLmRhdGFbNl0sIHRhYmxlcy5oaGVhLmRhdGFbN10pLFxuICAgICAgbGluZUdhcDogc2lnbmVkSW50MTYodGFibGVzLmhoZWEuZGF0YVs4XSwgdGFibGVzLmhoZWEuZGF0YVs5XSlcbiAgICB9O1xuICAgIHRoaXMuYXNjZW50ID0gbWV0cmljc092ZXJyaWRlLmFzY2VudCAvIG1ldHJpY3NPdmVycmlkZS51bml0c1BlckVtO1xuICAgIHRoaXMuZGVzY2VudCA9IG1ldHJpY3NPdmVycmlkZS5kZXNjZW50IC8gbWV0cmljc092ZXJyaWRlLnVuaXRzUGVyRW07XG4gICAgdGhpcy5saW5lR2FwID0gbWV0cmljc092ZXJyaWRlLmxpbmVHYXAgLyBtZXRyaWNzT3ZlcnJpZGUudW5pdHNQZXJFbTtcblxuICAgIGlmICh0aGlzLmNzc0ZvbnRJbmZvICYmIHRoaXMuY3NzRm9udEluZm8ubGluZUhlaWdodCkge1xuICAgICAgdGhpcy5saW5lSGVpZ2h0ID0gdGhpcy5jc3NGb250SW5mby5tZXRyaWNzLmxpbmVIZWlnaHQ7XG4gICAgICB0aGlzLmxpbmVHYXAgPSB0aGlzLmNzc0ZvbnRJbmZvLm1ldHJpY3MubGluZUdhcDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5saW5lSGVpZ2h0ID0gdGhpcy5hc2NlbnQgLSB0aGlzLmRlc2NlbnQgKyB0aGlzLmxpbmVHYXA7XG4gICAgfVxuXG4gICAgaWYgKHRhYmxlcy5wb3N0KSB7XG4gICAgICByZWFkUG9zdFNjcmlwdFRhYmxlKHRhYmxlcy5wb3N0LCBwcm9wZXJ0aWVzLCBudW1HbHlwaHMpO1xuICAgIH1cblxuICAgIHRhYmxlcy5wb3N0ID0ge1xuICAgICAgdGFnOiBcInBvc3RcIixcbiAgICAgIGRhdGE6IGNyZWF0ZVBvc3RUYWJsZShwcm9wZXJ0aWVzKVxuICAgIH07XG4gICAgY29uc3QgY2hhckNvZGVUb0dseXBoSWQgPSBbXTtcblxuICAgIGZ1bmN0aW9uIGhhc0dseXBoKGdseXBoSWQpIHtcbiAgICAgIHJldHVybiAhbWlzc2luZ0dseXBoc1tnbHlwaElkXTtcbiAgICB9XG5cbiAgICBpZiAocHJvcGVydGllcy5jb21wb3NpdGUpIHtcbiAgICAgIGNvbnN0IGNpZFRvR2lkTWFwID0gcHJvcGVydGllcy5jaWRUb0dpZE1hcCB8fCBbXTtcbiAgICAgIGNvbnN0IGlzQ2lkVG9HaWRNYXBFbXB0eSA9IGNpZFRvR2lkTWFwLmxlbmd0aCA9PT0gMDtcbiAgICAgIHByb3BlcnRpZXMuY01hcC5mb3JFYWNoKGZ1bmN0aW9uIChjaGFyQ29kZSwgY2lkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2lkID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgY2lkID0gY29udmVydENpZFN0cmluZyhjaGFyQ29kZSwgY2lkLCB0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaWQgPiAweGZmZmYpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJNYXggc2l6ZSBvZiBDSUQgaXMgNjUsNTM1XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGdseXBoSWQgPSAtMTtcblxuICAgICAgICBpZiAoaXNDaWRUb0dpZE1hcEVtcHR5KSB7XG4gICAgICAgICAgZ2x5cGhJZCA9IGNpZDtcbiAgICAgICAgfSBlbHNlIGlmIChjaWRUb0dpZE1hcFtjaWRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBnbHlwaElkID0gY2lkVG9HaWRNYXBbY2lkXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChnbHlwaElkID49IDAgJiYgZ2x5cGhJZCA8IG51bUdseXBocyAmJiBoYXNHbHlwaChnbHlwaElkKSkge1xuICAgICAgICAgIGNoYXJDb2RlVG9HbHlwaElkW2NoYXJDb2RlXSA9IGdseXBoSWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjbWFwVGFibGUgPSByZWFkQ21hcFRhYmxlKHRhYmxlcy5jbWFwLCBmb250LCB0aGlzLmlzU3ltYm9saWNGb250LCBwcm9wZXJ0aWVzLmhhc0VuY29kaW5nKTtcbiAgICAgIGNvbnN0IGNtYXBQbGF0Zm9ybUlkID0gY21hcFRhYmxlLnBsYXRmb3JtSWQ7XG4gICAgICBjb25zdCBjbWFwRW5jb2RpbmdJZCA9IGNtYXBUYWJsZS5lbmNvZGluZ0lkO1xuICAgICAgY29uc3QgY21hcE1hcHBpbmdzID0gY21hcFRhYmxlLm1hcHBpbmdzO1xuICAgICAgY29uc3QgY21hcE1hcHBpbmdzTGVuZ3RoID0gY21hcE1hcHBpbmdzLmxlbmd0aDtcbiAgICAgIGxldCBiYXNlRW5jb2RpbmcgPSBbXSxcbiAgICAgICAgICBmb3JjZVBvc3RUYWJsZSA9IGZhbHNlO1xuXG4gICAgICBpZiAocHJvcGVydGllcy5oYXNFbmNvZGluZyAmJiAocHJvcGVydGllcy5iYXNlRW5jb2RpbmdOYW1lID09PSBcIk1hY1JvbWFuRW5jb2RpbmdcIiB8fCBwcm9wZXJ0aWVzLmJhc2VFbmNvZGluZ05hbWUgPT09IFwiV2luQW5zaUVuY29kaW5nXCIpKSB7XG4gICAgICAgIGJhc2VFbmNvZGluZyA9ICgwLCBfZW5jb2RpbmdzLmdldEVuY29kaW5nKShwcm9wZXJ0aWVzLmJhc2VFbmNvZGluZ05hbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvcGVydGllcy5oYXNFbmNvZGluZyAmJiAhdGhpcy5pc1N5bWJvbGljRm9udCAmJiAoY21hcFBsYXRmb3JtSWQgPT09IDMgJiYgY21hcEVuY29kaW5nSWQgPT09IDEgfHwgY21hcFBsYXRmb3JtSWQgPT09IDEgJiYgY21hcEVuY29kaW5nSWQgPT09IDApKSB7XG4gICAgICAgIGNvbnN0IGdseXBoc1VuaWNvZGVNYXAgPSAoMCwgX2dseXBobGlzdC5nZXRHbHlwaHNVbmljb2RlKSgpO1xuXG4gICAgICAgIGZvciAobGV0IGNoYXJDb2RlID0gMDsgY2hhckNvZGUgPCAyNTY7IGNoYXJDb2RlKyspIHtcbiAgICAgICAgICBsZXQgZ2x5cGhOYW1lO1xuXG4gICAgICAgICAgaWYgKHRoaXMuZGlmZmVyZW5jZXNbY2hhckNvZGVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGdseXBoTmFtZSA9IHRoaXMuZGlmZmVyZW5jZXNbY2hhckNvZGVdO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYmFzZUVuY29kaW5nLmxlbmd0aCAmJiBiYXNlRW5jb2RpbmdbY2hhckNvZGVdICE9PSBcIlwiKSB7XG4gICAgICAgICAgICBnbHlwaE5hbWUgPSBiYXNlRW5jb2RpbmdbY2hhckNvZGVdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnbHlwaE5hbWUgPSBfZW5jb2RpbmdzLlN0YW5kYXJkRW5jb2RpbmdbY2hhckNvZGVdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghZ2x5cGhOYW1lKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBzdGFuZGFyZEdseXBoTmFtZSA9ICgwLCBfZm9udHNfdXRpbHMucmVjb3ZlckdseXBoTmFtZSkoZ2x5cGhOYW1lLCBnbHlwaHNVbmljb2RlTWFwKTtcbiAgICAgICAgICBsZXQgdW5pY29kZU9yQ2hhckNvZGU7XG5cbiAgICAgICAgICBpZiAoY21hcFBsYXRmb3JtSWQgPT09IDMgJiYgY21hcEVuY29kaW5nSWQgPT09IDEpIHtcbiAgICAgICAgICAgIHVuaWNvZGVPckNoYXJDb2RlID0gZ2x5cGhzVW5pY29kZU1hcFtzdGFuZGFyZEdseXBoTmFtZV07XG4gICAgICAgICAgfSBlbHNlIGlmIChjbWFwUGxhdGZvcm1JZCA9PT0gMSAmJiBjbWFwRW5jb2RpbmdJZCA9PT0gMCkge1xuICAgICAgICAgICAgdW5pY29kZU9yQ2hhckNvZGUgPSBfZW5jb2RpbmdzLk1hY1JvbWFuRW5jb2RpbmcuaW5kZXhPZihzdGFuZGFyZEdseXBoTmFtZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHVuaWNvZGVPckNoYXJDb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmICghcHJvcGVydGllcy5nbHlwaE5hbWVzICYmIHByb3BlcnRpZXMuaGFzSW5jbHVkZWRUb1VuaWNvZGVNYXAgJiYgISh0aGlzLnRvVW5pY29kZSBpbnN0YW5jZW9mIF90b191bmljb2RlX21hcC5JZGVudGl0eVRvVW5pY29kZU1hcCkpIHtcbiAgICAgICAgICAgICAgY29uc3QgdW5pY29kZSA9IHRoaXMudG9Vbmljb2RlLmdldChjaGFyQ29kZSk7XG5cbiAgICAgICAgICAgICAgaWYgKHVuaWNvZGUpIHtcbiAgICAgICAgICAgICAgICB1bmljb2RlT3JDaGFyQ29kZSA9IHVuaWNvZGUuY29kZVBvaW50QXQoMCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHVuaWNvZGVPckNoYXJDb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbWFwTWFwcGluZ3NMZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgaWYgKGNtYXBNYXBwaW5nc1tpXS5jaGFyQ29kZSAhPT0gdW5pY29kZU9yQ2hhckNvZGUpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNoYXJDb2RlVG9HbHlwaElkW2NoYXJDb2RlXSA9IGNtYXBNYXBwaW5nc1tpXS5nbHlwaElkO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNtYXBQbGF0Zm9ybUlkID09PSAwKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY21hcE1hcHBpbmdzTGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBjaGFyQ29kZVRvR2x5cGhJZFtjbWFwTWFwcGluZ3NbaV0uY2hhckNvZGVdID0gY21hcE1hcHBpbmdzW2ldLmdseXBoSWQ7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JjZVBvc3RUYWJsZSA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNtYXBNYXBwaW5nc0xlbmd0aDsgKytpKSB7XG4gICAgICAgICAgbGV0IGNoYXJDb2RlID0gY21hcE1hcHBpbmdzW2ldLmNoYXJDb2RlO1xuXG4gICAgICAgICAgaWYgKGNtYXBQbGF0Zm9ybUlkID09PSAzICYmIGNoYXJDb2RlID49IDB4ZjAwMCAmJiBjaGFyQ29kZSA8PSAweGYwZmYpIHtcbiAgICAgICAgICAgIGNoYXJDb2RlICY9IDB4ZmY7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdID0gY21hcE1hcHBpbmdzW2ldLmdseXBoSWQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BlcnRpZXMuZ2x5cGhOYW1lcyAmJiAoYmFzZUVuY29kaW5nLmxlbmd0aCB8fCB0aGlzLmRpZmZlcmVuY2VzLmxlbmd0aCkpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICAgICAgICAgIGlmICghZm9yY2VQb3N0VGFibGUgJiYgY2hhckNvZGVUb0dseXBoSWRbaV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZ2x5cGhOYW1lID0gdGhpcy5kaWZmZXJlbmNlc1tpXSB8fCBiYXNlRW5jb2RpbmdbaV07XG5cbiAgICAgICAgICBpZiAoIWdseXBoTmFtZSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZ2x5cGhJZCA9IHByb3BlcnRpZXMuZ2x5cGhOYW1lcy5pbmRleE9mKGdseXBoTmFtZSk7XG5cbiAgICAgICAgICBpZiAoZ2x5cGhJZCA+IDAgJiYgaGFzR2x5cGgoZ2x5cGhJZCkpIHtcbiAgICAgICAgICAgIGNoYXJDb2RlVG9HbHlwaElkW2ldID0gZ2x5cGhJZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hhckNvZGVUb0dseXBoSWQubGVuZ3RoID09PSAwKSB7XG4gICAgICBjaGFyQ29kZVRvR2x5cGhJZFswXSA9IDA7XG4gICAgfVxuXG4gICAgbGV0IGdseXBoWmVyb0lkID0gbnVtR2x5cGhzT3V0IC0gMTtcblxuICAgIGlmICghZHVwRmlyc3RFbnRyeSkge1xuICAgICAgZ2x5cGhaZXJvSWQgPSAwO1xuICAgIH1cblxuICAgIGlmICghcHJvcGVydGllcy5jc3NGb250SW5mbykge1xuICAgICAgY29uc3QgbmV3TWFwcGluZyA9IGFkanVzdE1hcHBpbmcoY2hhckNvZGVUb0dseXBoSWQsIGhhc0dseXBoLCBnbHlwaFplcm9JZCk7XG4gICAgICB0aGlzLnRvRm9udENoYXIgPSBuZXdNYXBwaW5nLnRvRm9udENoYXI7XG4gICAgICB0YWJsZXMuY21hcCA9IHtcbiAgICAgICAgdGFnOiBcImNtYXBcIixcbiAgICAgICAgZGF0YTogY3JlYXRlQ21hcFRhYmxlKG5ld01hcHBpbmcuY2hhckNvZGVUb0dseXBoSWQsIG51bUdseXBoc091dClcbiAgICAgIH07XG5cbiAgICAgIGlmICghdGFibGVzW1wiT1MvMlwiXSB8fCAhdmFsaWRhdGVPUzJUYWJsZSh0YWJsZXNbXCJPUy8yXCJdLCBmb250KSkge1xuICAgICAgICB0YWJsZXNbXCJPUy8yXCJdID0ge1xuICAgICAgICAgIHRhZzogXCJPUy8yXCIsXG4gICAgICAgICAgZGF0YTogY3JlYXRlT1MyVGFibGUocHJvcGVydGllcywgbmV3TWFwcGluZy5jaGFyQ29kZVRvR2x5cGhJZCwgbWV0cmljc092ZXJyaWRlKVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghaXNUcnVlVHlwZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY2ZmRmlsZSA9IG5ldyBfc3RyZWFtLlN0cmVhbSh0YWJsZXNbXCJDRkYgXCJdLmRhdGEpO1xuICAgICAgICBjb25zdCBwYXJzZXIgPSBuZXcgX2NmZl9wYXJzZXIuQ0ZGUGFyc2VyKGNmZkZpbGUsIHByb3BlcnRpZXMsIF9mb250c191dGlscy5TRUFDX0FOQUxZU0lTX0VOQUJMRUQpO1xuICAgICAgICBjZmYgPSBwYXJzZXIucGFyc2UoKTtcbiAgICAgICAgY2ZmLmR1cGxpY2F0ZUZpcnN0R2x5cGgoKTtcbiAgICAgICAgY29uc3QgY29tcGlsZXIgPSBuZXcgX2NmZl9wYXJzZXIuQ0ZGQ29tcGlsZXIoY2ZmKTtcbiAgICAgICAgdGFibGVzW1wiQ0ZGIFwiXS5kYXRhID0gY29tcGlsZXIuY29tcGlsZSgpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoXCJGYWlsZWQgdG8gY29tcGlsZSBmb250IFwiICsgcHJvcGVydGllcy5sb2FkZWROYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRhYmxlcy5uYW1lKSB7XG4gICAgICB0YWJsZXMubmFtZSA9IHtcbiAgICAgICAgdGFnOiBcIm5hbWVcIixcbiAgICAgICAgZGF0YTogY3JlYXRlTmFtZVRhYmxlKHRoaXMubmFtZSlcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5hbWVQcm90b3R5cGUgPSByZWFkTmFtZVRhYmxlKHRhYmxlcy5uYW1lKTtcbiAgICAgIHRhYmxlcy5uYW1lLmRhdGEgPSBjcmVhdGVOYW1lVGFibGUobmFtZSwgbmFtZVByb3RvdHlwZSk7XG4gICAgICB0aGlzLnBzTmFtZSA9IG5hbWVQcm90b3R5cGVbMF1bNl0gfHwgbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBidWlsZGVyID0gbmV3IF9vcGVudHlwZV9maWxlX2J1aWxkZXIuT3BlblR5cGVGaWxlQnVpbGRlcihoZWFkZXIudmVyc2lvbik7XG5cbiAgICBmb3IgKGNvbnN0IHRhYmxlVGFnIGluIHRhYmxlcykge1xuICAgICAgYnVpbGRlci5hZGRUYWJsZSh0YWJsZVRhZywgdGFibGVzW3RhYmxlVGFnXS5kYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVpbGRlci50b0FycmF5KCk7XG4gIH1cblxuICBjb252ZXJ0KGZvbnROYW1lLCBmb250LCBwcm9wZXJ0aWVzKSB7XG4gICAgcHJvcGVydGllcy5maXhlZFBpdGNoID0gZmFsc2U7XG5cbiAgICBpZiAocHJvcGVydGllcy5idWlsdEluRW5jb2RpbmcpIHtcbiAgICAgIGFkanVzdFRvVW5pY29kZShwcm9wZXJ0aWVzLCBwcm9wZXJ0aWVzLmJ1aWx0SW5FbmNvZGluZyk7XG4gICAgfVxuXG4gICAgbGV0IGdseXBoWmVyb0lkID0gMTtcblxuICAgIGlmIChmb250IGluc3RhbmNlb2YgX2NmZl9mb250LkNGRkZvbnQpIHtcbiAgICAgIGdseXBoWmVyb0lkID0gZm9udC5udW1HbHlwaHMgLSAxO1xuICAgIH1cblxuICAgIGNvbnN0IG1hcHBpbmcgPSBmb250LmdldEdseXBoTWFwcGluZyhwcm9wZXJ0aWVzKTtcbiAgICBsZXQgbmV3TWFwcGluZyA9IG51bGw7XG4gICAgbGV0IG5ld0NoYXJDb2RlVG9HbHlwaElkID0gbWFwcGluZztcblxuICAgIGlmICghcHJvcGVydGllcy5jc3NGb250SW5mbykge1xuICAgICAgbmV3TWFwcGluZyA9IGFkanVzdE1hcHBpbmcobWFwcGluZywgZm9udC5oYXNHbHlwaElkLmJpbmQoZm9udCksIGdseXBoWmVyb0lkKTtcbiAgICAgIHRoaXMudG9Gb250Q2hhciA9IG5ld01hcHBpbmcudG9Gb250Q2hhcjtcbiAgICAgIG5ld0NoYXJDb2RlVG9HbHlwaElkID0gbmV3TWFwcGluZy5jaGFyQ29kZVRvR2x5cGhJZDtcbiAgICB9XG5cbiAgICBjb25zdCBudW1HbHlwaHMgPSBmb250Lm51bUdseXBocztcblxuICAgIGZ1bmN0aW9uIGdldENoYXJDb2RlcyhjaGFyQ29kZVRvR2x5cGhJZCwgZ2x5cGhJZCkge1xuICAgICAgbGV0IGNoYXJDb2RlcyA9IG51bGw7XG5cbiAgICAgIGZvciAoY29uc3QgY2hhckNvZGUgaW4gY2hhckNvZGVUb0dseXBoSWQpIHtcbiAgICAgICAgaWYgKGdseXBoSWQgPT09IGNoYXJDb2RlVG9HbHlwaElkW2NoYXJDb2RlXSkge1xuICAgICAgICAgIGlmICghY2hhckNvZGVzKSB7XG4gICAgICAgICAgICBjaGFyQ29kZXMgPSBbXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjaGFyQ29kZXMucHVzaChjaGFyQ29kZSB8IDApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjaGFyQ29kZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlQ2hhckNvZGUoY2hhckNvZGVUb0dseXBoSWQsIGdseXBoSWQpIHtcbiAgICAgIGZvciAoY29uc3QgY2hhckNvZGUgaW4gY2hhckNvZGVUb0dseXBoSWQpIHtcbiAgICAgICAgaWYgKGdseXBoSWQgPT09IGNoYXJDb2RlVG9HbHlwaElkW2NoYXJDb2RlXSkge1xuICAgICAgICAgIHJldHVybiBjaGFyQ29kZSB8IDA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbmV3TWFwcGluZy5jaGFyQ29kZVRvR2x5cGhJZFtuZXdNYXBwaW5nLm5leHRBdmFpbGFibGVGb250Q2hhckNvZGVdID0gZ2x5cGhJZDtcbiAgICAgIHJldHVybiBuZXdNYXBwaW5nLm5leHRBdmFpbGFibGVGb250Q2hhckNvZGUrKztcbiAgICB9XG5cbiAgICBjb25zdCBzZWFjcyA9IGZvbnQuc2VhY3M7XG5cbiAgICBpZiAobmV3TWFwcGluZyAmJiBfZm9udHNfdXRpbHMuU0VBQ19BTkFMWVNJU19FTkFCTEVEICYmIHNlYWNzICYmIHNlYWNzLmxlbmd0aCkge1xuICAgICAgY29uc3QgbWF0cml4ID0gcHJvcGVydGllcy5mb250TWF0cml4IHx8IF91dGlsLkZPTlRfSURFTlRJVFlfTUFUUklYO1xuICAgICAgY29uc3QgY2hhcnNldCA9IGZvbnQuZ2V0Q2hhcnNldCgpO1xuICAgICAgY29uc3Qgc2VhY01hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICAgIGZvciAobGV0IGdseXBoSWQgaW4gc2VhY3MpIHtcbiAgICAgICAgZ2x5cGhJZCB8PSAwO1xuICAgICAgICBjb25zdCBzZWFjID0gc2VhY3NbZ2x5cGhJZF07XG4gICAgICAgIGNvbnN0IGJhc2VHbHlwaE5hbWUgPSBfZW5jb2RpbmdzLlN0YW5kYXJkRW5jb2Rpbmdbc2VhY1syXV07XG4gICAgICAgIGNvbnN0IGFjY2VudEdseXBoTmFtZSA9IF9lbmNvZGluZ3MuU3RhbmRhcmRFbmNvZGluZ1tzZWFjWzNdXTtcbiAgICAgICAgY29uc3QgYmFzZUdseXBoSWQgPSBjaGFyc2V0LmluZGV4T2YoYmFzZUdseXBoTmFtZSk7XG4gICAgICAgIGNvbnN0IGFjY2VudEdseXBoSWQgPSBjaGFyc2V0LmluZGV4T2YoYWNjZW50R2x5cGhOYW1lKTtcblxuICAgICAgICBpZiAoYmFzZUdseXBoSWQgPCAwIHx8IGFjY2VudEdseXBoSWQgPCAwKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhY2NlbnRPZmZzZXQgPSB7XG4gICAgICAgICAgeDogc2VhY1swXSAqIG1hdHJpeFswXSArIHNlYWNbMV0gKiBtYXRyaXhbMl0gKyBtYXRyaXhbNF0sXG4gICAgICAgICAgeTogc2VhY1swXSAqIG1hdHJpeFsxXSArIHNlYWNbMV0gKiBtYXRyaXhbM10gKyBtYXRyaXhbNV1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgY2hhckNvZGVzID0gZ2V0Q2hhckNvZGVzKG1hcHBpbmcsIGdseXBoSWQpO1xuXG4gICAgICAgIGlmICghY2hhckNvZGVzKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBjaGFyQ29kZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGNoYXJDb2RlID0gY2hhckNvZGVzW2ldO1xuICAgICAgICAgIGNvbnN0IGNoYXJDb2RlVG9HbHlwaElkID0gbmV3TWFwcGluZy5jaGFyQ29kZVRvR2x5cGhJZDtcbiAgICAgICAgICBjb25zdCBiYXNlRm9udENoYXJDb2RlID0gY3JlYXRlQ2hhckNvZGUoY2hhckNvZGVUb0dseXBoSWQsIGJhc2VHbHlwaElkKTtcbiAgICAgICAgICBjb25zdCBhY2NlbnRGb250Q2hhckNvZGUgPSBjcmVhdGVDaGFyQ29kZShjaGFyQ29kZVRvR2x5cGhJZCwgYWNjZW50R2x5cGhJZCk7XG4gICAgICAgICAgc2VhY01hcFtjaGFyQ29kZV0gPSB7XG4gICAgICAgICAgICBiYXNlRm9udENoYXJDb2RlLFxuICAgICAgICAgICAgYWNjZW50Rm9udENoYXJDb2RlLFxuICAgICAgICAgICAgYWNjZW50T2Zmc2V0XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwcm9wZXJ0aWVzLnNlYWNNYXAgPSBzZWFjTWFwO1xuICAgIH1cblxuICAgIGNvbnN0IHVuaXRzUGVyRW0gPSAxIC8gKHByb3BlcnRpZXMuZm9udE1hdHJpeCB8fCBfdXRpbC5GT05UX0lERU5USVRZX01BVFJJWClbMF07XG4gICAgY29uc3QgYnVpbGRlciA9IG5ldyBfb3BlbnR5cGVfZmlsZV9idWlsZGVyLk9wZW5UeXBlRmlsZUJ1aWxkZXIoXCJcXHg0RlxceDU0XFx4NTRcXHg0RlwiKTtcbiAgICBidWlsZGVyLmFkZFRhYmxlKFwiQ0ZGIFwiLCBmb250LmRhdGEpO1xuICAgIGJ1aWxkZXIuYWRkVGFibGUoXCJPUy8yXCIsIGNyZWF0ZU9TMlRhYmxlKHByb3BlcnRpZXMsIG5ld0NoYXJDb2RlVG9HbHlwaElkKSk7XG4gICAgYnVpbGRlci5hZGRUYWJsZShcImNtYXBcIiwgY3JlYXRlQ21hcFRhYmxlKG5ld0NoYXJDb2RlVG9HbHlwaElkLCBudW1HbHlwaHMpKTtcbiAgICBidWlsZGVyLmFkZFRhYmxlKFwiaGVhZFwiLCBcIlxceDAwXFx4MDFcXHgwMFxceDAwXCIgKyBcIlxceDAwXFx4MDBcXHgxMFxceDAwXCIgKyBcIlxceDAwXFx4MDBcXHgwMFxceDAwXCIgKyBcIlxceDVGXFx4MEZcXHgzQ1xceEY1XCIgKyBcIlxceDAwXFx4MDBcIiArIHNhZmVTdHJpbmcxNih1bml0c1BlckVtKSArIFwiXFx4MDBcXHgwMFxceDAwXFx4MDBcXHg5ZVxceDBiXFx4N2VcXHgyN1wiICsgXCJcXHgwMFxceDAwXFx4MDBcXHgwMFxceDllXFx4MGJcXHg3ZVxceDI3XCIgKyBcIlxceDAwXFx4MDBcIiArIHNhZmVTdHJpbmcxNihwcm9wZXJ0aWVzLmRlc2NlbnQpICsgXCJcXHgwRlxceEZGXCIgKyBzYWZlU3RyaW5nMTYocHJvcGVydGllcy5hc2NlbnQpICsgc3RyaW5nMTYocHJvcGVydGllcy5pdGFsaWNBbmdsZSA/IDIgOiAwKSArIFwiXFx4MDBcXHgxMVwiICsgXCJcXHgwMFxceDAwXCIgKyBcIlxceDAwXFx4MDBcIiArIFwiXFx4MDBcXHgwMFwiKTtcbiAgICBidWlsZGVyLmFkZFRhYmxlKFwiaGhlYVwiLCBcIlxceDAwXFx4MDFcXHgwMFxceDAwXCIgKyBzYWZlU3RyaW5nMTYocHJvcGVydGllcy5hc2NlbnQpICsgc2FmZVN0cmluZzE2KHByb3BlcnRpZXMuZGVzY2VudCkgKyBcIlxceDAwXFx4MDBcIiArIFwiXFx4RkZcXHhGRlwiICsgXCJcXHgwMFxceDAwXCIgKyBcIlxceDAwXFx4MDBcIiArIFwiXFx4MDBcXHgwMFwiICsgc2FmZVN0cmluZzE2KHByb3BlcnRpZXMuY2FwSGVpZ2h0KSArIHNhZmVTdHJpbmcxNihNYXRoLnRhbihwcm9wZXJ0aWVzLml0YWxpY0FuZ2xlKSAqIHByb3BlcnRpZXMueEhlaWdodCkgKyBcIlxceDAwXFx4MDBcIiArIFwiXFx4MDBcXHgwMFwiICsgXCJcXHgwMFxceDAwXCIgKyBcIlxceDAwXFx4MDBcIiArIFwiXFx4MDBcXHgwMFwiICsgXCJcXHgwMFxceDAwXCIgKyBzdHJpbmcxNihudW1HbHlwaHMpKTtcbiAgICBidWlsZGVyLmFkZFRhYmxlKFwiaG10eFwiLCBmdW5jdGlvbiBmb250RmllbGRzSG10eCgpIHtcbiAgICAgIGNvbnN0IGNoYXJzdHJpbmdzID0gZm9udC5jaGFyc3RyaW5ncztcbiAgICAgIGNvbnN0IGNmZldpZHRocyA9IGZvbnQuY2ZmID8gZm9udC5jZmYud2lkdGhzIDogbnVsbDtcbiAgICAgIGxldCBobXR4ID0gXCJcXHgwMFxceDAwXFx4MDBcXHgwMFwiO1xuXG4gICAgICBmb3IgKGxldCBpID0gMSwgaWkgPSBudW1HbHlwaHM7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIGxldCB3aWR0aCA9IDA7XG5cbiAgICAgICAgaWYgKGNoYXJzdHJpbmdzKSB7XG4gICAgICAgICAgY29uc3QgY2hhcnN0cmluZyA9IGNoYXJzdHJpbmdzW2kgLSAxXTtcbiAgICAgICAgICB3aWR0aCA9IFwid2lkdGhcIiBpbiBjaGFyc3RyaW5nID8gY2hhcnN0cmluZy53aWR0aCA6IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoY2ZmV2lkdGhzKSB7XG4gICAgICAgICAgd2lkdGggPSBNYXRoLmNlaWwoY2ZmV2lkdGhzW2ldIHx8IDApO1xuICAgICAgICB9XG5cbiAgICAgICAgaG10eCArPSBzdHJpbmcxNih3aWR0aCkgKyBzdHJpbmcxNigwKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGhtdHg7XG4gICAgfSgpKTtcbiAgICBidWlsZGVyLmFkZFRhYmxlKFwibWF4cFwiLCBcIlxceDAwXFx4MDBcXHg1MFxceDAwXCIgKyBzdHJpbmcxNihudW1HbHlwaHMpKTtcbiAgICBidWlsZGVyLmFkZFRhYmxlKFwibmFtZVwiLCBjcmVhdGVOYW1lVGFibGUoZm9udE5hbWUpKTtcbiAgICBidWlsZGVyLmFkZFRhYmxlKFwicG9zdFwiLCBjcmVhdGVQb3N0VGFibGUocHJvcGVydGllcykpO1xuICAgIHJldHVybiBidWlsZGVyLnRvQXJyYXkoKTtcbiAgfVxuXG4gIGdldCBzcGFjZVdpZHRoKCkge1xuICAgIGNvbnN0IHBvc3NpYmxlU3BhY2VSZXBsYWNlbWVudHMgPSBbXCJzcGFjZVwiLCBcIm1pbnVzXCIsIFwib25lXCIsIFwiaVwiLCBcIklcIl07XG4gICAgbGV0IHdpZHRoO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gcG9zc2libGVTcGFjZVJlcGxhY2VtZW50cy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBjb25zdCBnbHlwaE5hbWUgPSBwb3NzaWJsZVNwYWNlUmVwbGFjZW1lbnRzW2ldO1xuXG4gICAgICBpZiAoZ2x5cGhOYW1lIGluIHRoaXMud2lkdGhzKSB7XG4gICAgICAgIHdpZHRoID0gdGhpcy53aWR0aHNbZ2x5cGhOYW1lXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGdseXBoc1VuaWNvZGVNYXAgPSAoMCwgX2dseXBobGlzdC5nZXRHbHlwaHNVbmljb2RlKSgpO1xuICAgICAgY29uc3QgZ2x5cGhVbmljb2RlID0gZ2x5cGhzVW5pY29kZU1hcFtnbHlwaE5hbWVdO1xuICAgICAgbGV0IGNoYXJjb2RlID0gMDtcblxuICAgICAgaWYgKHRoaXMuY29tcG9zaXRlICYmIHRoaXMuY01hcC5jb250YWlucyhnbHlwaFVuaWNvZGUpKSB7XG4gICAgICAgIGNoYXJjb2RlID0gdGhpcy5jTWFwLmxvb2t1cChnbHlwaFVuaWNvZGUpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgY2hhcmNvZGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBjaGFyY29kZSA9IGNvbnZlcnRDaWRTdHJpbmcoZ2x5cGhVbmljb2RlLCBjaGFyY29kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFjaGFyY29kZSAmJiB0aGlzLnRvVW5pY29kZSkge1xuICAgICAgICBjaGFyY29kZSA9IHRoaXMudG9Vbmljb2RlLmNoYXJDb2RlT2YoZ2x5cGhVbmljb2RlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoYXJjb2RlIDw9IDApIHtcbiAgICAgICAgY2hhcmNvZGUgPSBnbHlwaFVuaWNvZGU7XG4gICAgICB9XG5cbiAgICAgIHdpZHRoID0gdGhpcy53aWR0aHNbY2hhcmNvZGVdO1xuXG4gICAgICBpZiAod2lkdGgpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgd2lkdGggPSB3aWR0aCB8fCB0aGlzLmRlZmF1bHRXaWR0aDtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJzcGFjZVdpZHRoXCIsIHdpZHRoKTtcbiAgfVxuXG4gIF9jaGFyVG9HbHlwaChjaGFyY29kZSwgaXNTcGFjZSA9IGZhbHNlKSB7XG4gICAgbGV0IGZvbnRDaGFyQ29kZSwgd2lkdGgsIG9wZXJhdG9yTGlzdElkO1xuICAgIGxldCB3aWR0aENvZGUgPSBjaGFyY29kZTtcblxuICAgIGlmICh0aGlzLmNNYXAgJiYgdGhpcy5jTWFwLmNvbnRhaW5zKGNoYXJjb2RlKSkge1xuICAgICAgd2lkdGhDb2RlID0gdGhpcy5jTWFwLmxvb2t1cChjaGFyY29kZSk7XG5cbiAgICAgIGlmICh0eXBlb2Ygd2lkdGhDb2RlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHdpZHRoQ29kZSA9IGNvbnZlcnRDaWRTdHJpbmcoY2hhcmNvZGUsIHdpZHRoQ29kZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgd2lkdGggPSB0aGlzLndpZHRoc1t3aWR0aENvZGVdO1xuICAgIHdpZHRoID0gKDAsIF91dGlsLmlzTnVtKSh3aWR0aCkgPyB3aWR0aCA6IHRoaXMuZGVmYXVsdFdpZHRoO1xuICAgIGNvbnN0IHZtZXRyaWMgPSB0aGlzLnZtZXRyaWNzICYmIHRoaXMudm1ldHJpY3Nbd2lkdGhDb2RlXTtcbiAgICBsZXQgdW5pY29kZSA9IHRoaXMudG9Vbmljb2RlLmdldChjaGFyY29kZSkgfHwgY2hhcmNvZGU7XG5cbiAgICBpZiAodHlwZW9mIHVuaWNvZGUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHVuaWNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHVuaWNvZGUpO1xuICAgIH1cblxuICAgIGxldCBpc0luRm9udCA9IHRoaXMudG9Gb250Q2hhcltjaGFyY29kZV0gIT09IHVuZGVmaW5lZDtcbiAgICBmb250Q2hhckNvZGUgPSB0aGlzLnRvRm9udENoYXJbY2hhcmNvZGVdIHx8IGNoYXJjb2RlO1xuXG4gICAgaWYgKHRoaXMubWlzc2luZ0ZpbGUpIHtcbiAgICAgIGNvbnN0IGdseXBoTmFtZSA9IHRoaXMuZGlmZmVyZW5jZXNbY2hhcmNvZGVdIHx8IHRoaXMuZGVmYXVsdEVuY29kaW5nW2NoYXJjb2RlXTtcblxuICAgICAgaWYgKChnbHlwaE5hbWUgPT09IFwiLm5vdGRlZlwiIHx8IGdseXBoTmFtZSA9PT0gXCJcIikgJiYgdGhpcy50eXBlID09PSBcIlR5cGUxXCIpIHtcbiAgICAgICAgZm9udENoYXJDb2RlID0gMHgyMDtcbiAgICAgIH1cblxuICAgICAgZm9udENoYXJDb2RlID0gKDAsIF91bmljb2RlLm1hcFNwZWNpYWxVbmljb2RlVmFsdWVzKShmb250Q2hhckNvZGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzVHlwZTNGb250KSB7XG4gICAgICBvcGVyYXRvckxpc3RJZCA9IGZvbnRDaGFyQ29kZTtcbiAgICB9XG5cbiAgICBsZXQgYWNjZW50ID0gbnVsbDtcblxuICAgIGlmICh0aGlzLnNlYWNNYXAgJiYgdGhpcy5zZWFjTWFwW2NoYXJjb2RlXSkge1xuICAgICAgaXNJbkZvbnQgPSB0cnVlO1xuICAgICAgY29uc3Qgc2VhYyA9IHRoaXMuc2VhY01hcFtjaGFyY29kZV07XG4gICAgICBmb250Q2hhckNvZGUgPSBzZWFjLmJhc2VGb250Q2hhckNvZGU7XG4gICAgICBhY2NlbnQgPSB7XG4gICAgICAgIGZvbnRDaGFyOiBTdHJpbmcuZnJvbUNvZGVQb2ludChzZWFjLmFjY2VudEZvbnRDaGFyQ29kZSksXG4gICAgICAgIG9mZnNldDogc2VhYy5hY2NlbnRPZmZzZXRcbiAgICAgIH07XG4gICAgfVxuXG4gICAgbGV0IGZvbnRDaGFyID0gXCJcIjtcblxuICAgIGlmICh0eXBlb2YgZm9udENoYXJDb2RlID09PSBcIm51bWJlclwiKSB7XG4gICAgICBpZiAoZm9udENoYXJDb2RlIDw9IDB4MTBmZmZmKSB7XG4gICAgICAgIGZvbnRDaGFyID0gU3RyaW5nLmZyb21Db2RlUG9pbnQoZm9udENoYXJDb2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShgY2hhclRvR2x5cGggLSBpbnZhbGlkIGZvbnRDaGFyQ29kZTogJHtmb250Q2hhckNvZGV9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGdseXBoID0gdGhpcy5fZ2x5cGhDYWNoZVtjaGFyY29kZV07XG5cbiAgICBpZiAoIWdseXBoIHx8ICFnbHlwaC5tYXRjaGVzRm9yQ2FjaGUoY2hhcmNvZGUsIGZvbnRDaGFyLCB1bmljb2RlLCBhY2NlbnQsIHdpZHRoLCB2bWV0cmljLCBvcGVyYXRvckxpc3RJZCwgaXNTcGFjZSwgaXNJbkZvbnQpKSB7XG4gICAgICBnbHlwaCA9IG5ldyBHbHlwaChjaGFyY29kZSwgZm9udENoYXIsIHVuaWNvZGUsIGFjY2VudCwgd2lkdGgsIHZtZXRyaWMsIG9wZXJhdG9yTGlzdElkLCBpc1NwYWNlLCBpc0luRm9udCk7XG4gICAgICB0aGlzLl9nbHlwaENhY2hlW2NoYXJjb2RlXSA9IGdseXBoO1xuICAgIH1cblxuICAgIHJldHVybiBnbHlwaDtcbiAgfVxuXG4gIGNoYXJzVG9HbHlwaHMoY2hhcnMpIHtcbiAgICBsZXQgZ2x5cGhzID0gdGhpcy5fY2hhcnNDYWNoZVtjaGFyc107XG5cbiAgICBpZiAoZ2x5cGhzKSB7XG4gICAgICByZXR1cm4gZ2x5cGhzO1xuICAgIH1cblxuICAgIGdseXBocyA9IFtdO1xuXG4gICAgaWYgKHRoaXMuY01hcCkge1xuICAgICAgY29uc3QgYyA9IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBpaSA9IGNoYXJzLmxlbmd0aDtcbiAgICAgIGxldCBpID0gMDtcblxuICAgICAgd2hpbGUgKGkgPCBpaSkge1xuICAgICAgICB0aGlzLmNNYXAucmVhZENoYXJDb2RlKGNoYXJzLCBpLCBjKTtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGNoYXJjb2RlLFxuICAgICAgICAgIGxlbmd0aFxuICAgICAgICB9ID0gYztcbiAgICAgICAgaSArPSBsZW5ndGg7XG5cbiAgICAgICAgY29uc3QgZ2x5cGggPSB0aGlzLl9jaGFyVG9HbHlwaChjaGFyY29kZSwgbGVuZ3RoID09PSAxICYmIGNoYXJzLmNoYXJDb2RlQXQoaSAtIDEpID09PSAweDIwKTtcblxuICAgICAgICBnbHlwaHMucHVzaChnbHlwaCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGNoYXJzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgY29uc3QgY2hhcmNvZGUgPSBjaGFycy5jaGFyQ29kZUF0KGkpO1xuXG4gICAgICAgIGNvbnN0IGdseXBoID0gdGhpcy5fY2hhclRvR2x5cGgoY2hhcmNvZGUsIGNoYXJjb2RlID09PSAweDIwKTtcblxuICAgICAgICBnbHlwaHMucHVzaChnbHlwaCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2NoYXJzQ2FjaGVbY2hhcnNdID0gZ2x5cGhzO1xuICB9XG5cbiAgZ2V0Q2hhclBvc2l0aW9ucyhjaGFycykge1xuICAgIGNvbnN0IHBvc2l0aW9ucyA9IFtdO1xuXG4gICAgaWYgKHRoaXMuY01hcCkge1xuICAgICAgY29uc3QgYyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICBsZXQgaSA9IDA7XG5cbiAgICAgIHdoaWxlIChpIDwgY2hhcnMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuY01hcC5yZWFkQ2hhckNvZGUoY2hhcnMsIGksIGMpO1xuICAgICAgICBjb25zdCBsZW5ndGggPSBjLmxlbmd0aDtcbiAgICAgICAgcG9zaXRpb25zLnB1c2goW2ksIGkgKyBsZW5ndGhdKTtcbiAgICAgICAgaSArPSBsZW5ndGg7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGNoYXJzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgcG9zaXRpb25zLnB1c2goW2ksIGkgKyAxXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvc2l0aW9ucztcbiAgfVxuXG4gIGdldCBnbHlwaENhY2hlVmFsdWVzKCkge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuX2dseXBoQ2FjaGUpO1xuICB9XG5cbiAgZW5jb2RlU3RyaW5nKHN0cikge1xuICAgIGNvbnN0IGJ1ZmZlcnMgPSBbXTtcbiAgICBjb25zdCBjdXJyZW50QnVmID0gW107XG5cbiAgICBjb25zdCBoYXNDdXJyZW50QnVmRXJyb3JzID0gKCkgPT4gYnVmZmVycy5sZW5ndGggJSAyID09PSAxO1xuXG4gICAgY29uc3QgZ2V0Q2hhckNvZGUgPSB0aGlzLnRvVW5pY29kZSBpbnN0YW5jZW9mIF90b191bmljb2RlX21hcC5JZGVudGl0eVRvVW5pY29kZU1hcCA/IHVuaWNvZGUgPT4gdGhpcy50b1VuaWNvZGUuY2hhckNvZGVPZih1bmljb2RlKSA6IHVuaWNvZGUgPT4gdGhpcy50b1VuaWNvZGUuY2hhckNvZGVPZihTdHJpbmcuZnJvbUNvZGVQb2ludCh1bmljb2RlKSk7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBzdHIubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgY29uc3QgdW5pY29kZSA9IHN0ci5jb2RlUG9pbnRBdChpKTtcblxuICAgICAgaWYgKHVuaWNvZGUgPiAweGQ3ZmYgJiYgKHVuaWNvZGUgPCAweGUwMDAgfHwgdW5pY29kZSA+IDB4ZmZmZCkpIHtcbiAgICAgICAgaSsrO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy50b1VuaWNvZGUpIHtcbiAgICAgICAgY29uc3QgY2hhckNvZGUgPSBnZXRDaGFyQ29kZSh1bmljb2RlKTtcblxuICAgICAgICBpZiAoY2hhckNvZGUgIT09IC0xKSB7XG4gICAgICAgICAgaWYgKGhhc0N1cnJlbnRCdWZFcnJvcnMoKSkge1xuICAgICAgICAgICAgYnVmZmVycy5wdXNoKGN1cnJlbnRCdWYuam9pbihcIlwiKSk7XG4gICAgICAgICAgICBjdXJyZW50QnVmLmxlbmd0aCA9IDA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgY2hhckNvZGVMZW5ndGggPSB0aGlzLmNNYXAgPyB0aGlzLmNNYXAuZ2V0Q2hhckNvZGVMZW5ndGgoY2hhckNvZGUpIDogMTtcblxuICAgICAgICAgIGZvciAobGV0IGogPSBjaGFyQ29kZUxlbmd0aCAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgICAgICAgICBjdXJyZW50QnVmLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSA+PiA4ICogaiAmIDB4ZmYpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWhhc0N1cnJlbnRCdWZFcnJvcnMoKSkge1xuICAgICAgICBidWZmZXJzLnB1c2goY3VycmVudEJ1Zi5qb2luKFwiXCIpKTtcbiAgICAgICAgY3VycmVudEJ1Zi5sZW5ndGggPSAwO1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50QnVmLnB1c2goU3RyaW5nLmZyb21Db2RlUG9pbnQodW5pY29kZSkpO1xuICAgIH1cblxuICAgIGJ1ZmZlcnMucHVzaChjdXJyZW50QnVmLmpvaW4oXCJcIikpO1xuICAgIHJldHVybiBidWZmZXJzO1xuICB9XG5cbn1cblxuZXhwb3J0cy5Gb250ID0gRm9udDtcblxuY2xhc3MgRXJyb3JGb250IHtcbiAgY29uc3RydWN0b3IoZXJyb3IpIHtcbiAgICB0aGlzLmVycm9yID0gZXJyb3I7XG4gICAgdGhpcy5sb2FkZWROYW1lID0gXCJnX2ZvbnRfZXJyb3JcIjtcbiAgICB0aGlzLm1pc3NpbmdGaWxlID0gdHJ1ZTtcbiAgfVxuXG4gIGNoYXJzVG9HbHlwaHMoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgZW5jb2RlU3RyaW5nKGNoYXJzKSB7XG4gICAgcmV0dXJuIFtjaGFyc107XG4gIH1cblxuICBleHBvcnREYXRhKGV4dHJhUHJvcGVydGllcyA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yOiB0aGlzLmVycm9yXG4gICAgfTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuRXJyb3JGb250ID0gRXJyb3JGb250O1xuXG4vKioqLyB9KSxcbi8qIDQ1ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLkNGRlRvcERpY3QgPSBleHBvcnRzLkNGRlN0cmluZ3MgPSBleHBvcnRzLkNGRlN0YW5kYXJkU3RyaW5ncyA9IGV4cG9ydHMuQ0ZGUHJpdmF0ZURpY3QgPSBleHBvcnRzLkNGRlBhcnNlciA9IGV4cG9ydHMuQ0ZGSW5kZXggPSBleHBvcnRzLkNGRkhlYWRlciA9IGV4cG9ydHMuQ0ZGRkRTZWxlY3QgPSBleHBvcnRzLkNGRkNvbXBpbGVyID0gZXhwb3J0cy5DRkZDaGFyc2V0ID0gZXhwb3J0cy5DRkYgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfY2hhcnNldHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDQ2KTtcblxudmFyIF9lbmNvZGluZ3MgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDE5KTtcblxuY29uc3QgTUFYX1NVQlJfTkVTVElORyA9IDEwO1xuY29uc3QgQ0ZGU3RhbmRhcmRTdHJpbmdzID0gW1wiLm5vdGRlZlwiLCBcInNwYWNlXCIsIFwiZXhjbGFtXCIsIFwicXVvdGVkYmxcIiwgXCJudW1iZXJzaWduXCIsIFwiZG9sbGFyXCIsIFwicGVyY2VudFwiLCBcImFtcGVyc2FuZFwiLCBcInF1b3RlcmlnaHRcIiwgXCJwYXJlbmxlZnRcIiwgXCJwYXJlbnJpZ2h0XCIsIFwiYXN0ZXJpc2tcIiwgXCJwbHVzXCIsIFwiY29tbWFcIiwgXCJoeXBoZW5cIiwgXCJwZXJpb2RcIiwgXCJzbGFzaFwiLCBcInplcm9cIiwgXCJvbmVcIiwgXCJ0d29cIiwgXCJ0aHJlZVwiLCBcImZvdXJcIiwgXCJmaXZlXCIsIFwic2l4XCIsIFwic2V2ZW5cIiwgXCJlaWdodFwiLCBcIm5pbmVcIiwgXCJjb2xvblwiLCBcInNlbWljb2xvblwiLCBcImxlc3NcIiwgXCJlcXVhbFwiLCBcImdyZWF0ZXJcIiwgXCJxdWVzdGlvblwiLCBcImF0XCIsIFwiQVwiLCBcIkJcIiwgXCJDXCIsIFwiRFwiLCBcIkVcIiwgXCJGXCIsIFwiR1wiLCBcIkhcIiwgXCJJXCIsIFwiSlwiLCBcIktcIiwgXCJMXCIsIFwiTVwiLCBcIk5cIiwgXCJPXCIsIFwiUFwiLCBcIlFcIiwgXCJSXCIsIFwiU1wiLCBcIlRcIiwgXCJVXCIsIFwiVlwiLCBcIldcIiwgXCJYXCIsIFwiWVwiLCBcIlpcIiwgXCJicmFja2V0bGVmdFwiLCBcImJhY2tzbGFzaFwiLCBcImJyYWNrZXRyaWdodFwiLCBcImFzY2lpY2lyY3VtXCIsIFwidW5kZXJzY29yZVwiLCBcInF1b3RlbGVmdFwiLCBcImFcIiwgXCJiXCIsIFwiY1wiLCBcImRcIiwgXCJlXCIsIFwiZlwiLCBcImdcIiwgXCJoXCIsIFwiaVwiLCBcImpcIiwgXCJrXCIsIFwibFwiLCBcIm1cIiwgXCJuXCIsIFwib1wiLCBcInBcIiwgXCJxXCIsIFwiclwiLCBcInNcIiwgXCJ0XCIsIFwidVwiLCBcInZcIiwgXCJ3XCIsIFwieFwiLCBcInlcIiwgXCJ6XCIsIFwiYnJhY2VsZWZ0XCIsIFwiYmFyXCIsIFwiYnJhY2VyaWdodFwiLCBcImFzY2lpdGlsZGVcIiwgXCJleGNsYW1kb3duXCIsIFwiY2VudFwiLCBcInN0ZXJsaW5nXCIsIFwiZnJhY3Rpb25cIiwgXCJ5ZW5cIiwgXCJmbG9yaW5cIiwgXCJzZWN0aW9uXCIsIFwiY3VycmVuY3lcIiwgXCJxdW90ZXNpbmdsZVwiLCBcInF1b3RlZGJsbGVmdFwiLCBcImd1aWxsZW1vdGxlZnRcIiwgXCJndWlsc2luZ2xsZWZ0XCIsIFwiZ3VpbHNpbmdscmlnaHRcIiwgXCJmaVwiLCBcImZsXCIsIFwiZW5kYXNoXCIsIFwiZGFnZ2VyXCIsIFwiZGFnZ2VyZGJsXCIsIFwicGVyaW9kY2VudGVyZWRcIiwgXCJwYXJhZ3JhcGhcIiwgXCJidWxsZXRcIiwgXCJxdW90ZXNpbmdsYmFzZVwiLCBcInF1b3RlZGJsYmFzZVwiLCBcInF1b3RlZGJscmlnaHRcIiwgXCJndWlsbGVtb3RyaWdodFwiLCBcImVsbGlwc2lzXCIsIFwicGVydGhvdXNhbmRcIiwgXCJxdWVzdGlvbmRvd25cIiwgXCJncmF2ZVwiLCBcImFjdXRlXCIsIFwiY2lyY3VtZmxleFwiLCBcInRpbGRlXCIsIFwibWFjcm9uXCIsIFwiYnJldmVcIiwgXCJkb3RhY2NlbnRcIiwgXCJkaWVyZXNpc1wiLCBcInJpbmdcIiwgXCJjZWRpbGxhXCIsIFwiaHVuZ2FydW1sYXV0XCIsIFwib2dvbmVrXCIsIFwiY2Fyb25cIiwgXCJlbWRhc2hcIiwgXCJBRVwiLCBcIm9yZGZlbWluaW5lXCIsIFwiTHNsYXNoXCIsIFwiT3NsYXNoXCIsIFwiT0VcIiwgXCJvcmRtYXNjdWxpbmVcIiwgXCJhZVwiLCBcImRvdGxlc3NpXCIsIFwibHNsYXNoXCIsIFwib3NsYXNoXCIsIFwib2VcIiwgXCJnZXJtYW5kYmxzXCIsIFwib25lc3VwZXJpb3JcIiwgXCJsb2dpY2Fsbm90XCIsIFwibXVcIiwgXCJ0cmFkZW1hcmtcIiwgXCJFdGhcIiwgXCJvbmVoYWxmXCIsIFwicGx1c21pbnVzXCIsIFwiVGhvcm5cIiwgXCJvbmVxdWFydGVyXCIsIFwiZGl2aWRlXCIsIFwiYnJva2VuYmFyXCIsIFwiZGVncmVlXCIsIFwidGhvcm5cIiwgXCJ0aHJlZXF1YXJ0ZXJzXCIsIFwidHdvc3VwZXJpb3JcIiwgXCJyZWdpc3RlcmVkXCIsIFwibWludXNcIiwgXCJldGhcIiwgXCJtdWx0aXBseVwiLCBcInRocmVlc3VwZXJpb3JcIiwgXCJjb3B5cmlnaHRcIiwgXCJBYWN1dGVcIiwgXCJBY2lyY3VtZmxleFwiLCBcIkFkaWVyZXNpc1wiLCBcIkFncmF2ZVwiLCBcIkFyaW5nXCIsIFwiQXRpbGRlXCIsIFwiQ2NlZGlsbGFcIiwgXCJFYWN1dGVcIiwgXCJFY2lyY3VtZmxleFwiLCBcIkVkaWVyZXNpc1wiLCBcIkVncmF2ZVwiLCBcIklhY3V0ZVwiLCBcIkljaXJjdW1mbGV4XCIsIFwiSWRpZXJlc2lzXCIsIFwiSWdyYXZlXCIsIFwiTnRpbGRlXCIsIFwiT2FjdXRlXCIsIFwiT2NpcmN1bWZsZXhcIiwgXCJPZGllcmVzaXNcIiwgXCJPZ3JhdmVcIiwgXCJPdGlsZGVcIiwgXCJTY2Fyb25cIiwgXCJVYWN1dGVcIiwgXCJVY2lyY3VtZmxleFwiLCBcIlVkaWVyZXNpc1wiLCBcIlVncmF2ZVwiLCBcIllhY3V0ZVwiLCBcIllkaWVyZXNpc1wiLCBcIlpjYXJvblwiLCBcImFhY3V0ZVwiLCBcImFjaXJjdW1mbGV4XCIsIFwiYWRpZXJlc2lzXCIsIFwiYWdyYXZlXCIsIFwiYXJpbmdcIiwgXCJhdGlsZGVcIiwgXCJjY2VkaWxsYVwiLCBcImVhY3V0ZVwiLCBcImVjaXJjdW1mbGV4XCIsIFwiZWRpZXJlc2lzXCIsIFwiZWdyYXZlXCIsIFwiaWFjdXRlXCIsIFwiaWNpcmN1bWZsZXhcIiwgXCJpZGllcmVzaXNcIiwgXCJpZ3JhdmVcIiwgXCJudGlsZGVcIiwgXCJvYWN1dGVcIiwgXCJvY2lyY3VtZmxleFwiLCBcIm9kaWVyZXNpc1wiLCBcIm9ncmF2ZVwiLCBcIm90aWxkZVwiLCBcInNjYXJvblwiLCBcInVhY3V0ZVwiLCBcInVjaXJjdW1mbGV4XCIsIFwidWRpZXJlc2lzXCIsIFwidWdyYXZlXCIsIFwieWFjdXRlXCIsIFwieWRpZXJlc2lzXCIsIFwiemNhcm9uXCIsIFwiZXhjbGFtc21hbGxcIiwgXCJIdW5nYXJ1bWxhdXRzbWFsbFwiLCBcImRvbGxhcm9sZHN0eWxlXCIsIFwiZG9sbGFyc3VwZXJpb3JcIiwgXCJhbXBlcnNhbmRzbWFsbFwiLCBcIkFjdXRlc21hbGxcIiwgXCJwYXJlbmxlZnRzdXBlcmlvclwiLCBcInBhcmVucmlnaHRzdXBlcmlvclwiLCBcInR3b2RvdGVubGVhZGVyXCIsIFwib25lZG90ZW5sZWFkZXJcIiwgXCJ6ZXJvb2xkc3R5bGVcIiwgXCJvbmVvbGRzdHlsZVwiLCBcInR3b29sZHN0eWxlXCIsIFwidGhyZWVvbGRzdHlsZVwiLCBcImZvdXJvbGRzdHlsZVwiLCBcImZpdmVvbGRzdHlsZVwiLCBcInNpeG9sZHN0eWxlXCIsIFwic2V2ZW5vbGRzdHlsZVwiLCBcImVpZ2h0b2xkc3R5bGVcIiwgXCJuaW5lb2xkc3R5bGVcIiwgXCJjb21tYXN1cGVyaW9yXCIsIFwidGhyZWVxdWFydGVyc2VtZGFzaFwiLCBcInBlcmlvZHN1cGVyaW9yXCIsIFwicXVlc3Rpb25zbWFsbFwiLCBcImFzdXBlcmlvclwiLCBcImJzdXBlcmlvclwiLCBcImNlbnRzdXBlcmlvclwiLCBcImRzdXBlcmlvclwiLCBcImVzdXBlcmlvclwiLCBcImlzdXBlcmlvclwiLCBcImxzdXBlcmlvclwiLCBcIm1zdXBlcmlvclwiLCBcIm5zdXBlcmlvclwiLCBcIm9zdXBlcmlvclwiLCBcInJzdXBlcmlvclwiLCBcInNzdXBlcmlvclwiLCBcInRzdXBlcmlvclwiLCBcImZmXCIsIFwiZmZpXCIsIFwiZmZsXCIsIFwicGFyZW5sZWZ0aW5mZXJpb3JcIiwgXCJwYXJlbnJpZ2h0aW5mZXJpb3JcIiwgXCJDaXJjdW1mbGV4c21hbGxcIiwgXCJoeXBoZW5zdXBlcmlvclwiLCBcIkdyYXZlc21hbGxcIiwgXCJBc21hbGxcIiwgXCJCc21hbGxcIiwgXCJDc21hbGxcIiwgXCJEc21hbGxcIiwgXCJFc21hbGxcIiwgXCJGc21hbGxcIiwgXCJHc21hbGxcIiwgXCJIc21hbGxcIiwgXCJJc21hbGxcIiwgXCJKc21hbGxcIiwgXCJLc21hbGxcIiwgXCJMc21hbGxcIiwgXCJNc21hbGxcIiwgXCJOc21hbGxcIiwgXCJPc21hbGxcIiwgXCJQc21hbGxcIiwgXCJRc21hbGxcIiwgXCJSc21hbGxcIiwgXCJTc21hbGxcIiwgXCJUc21hbGxcIiwgXCJVc21hbGxcIiwgXCJWc21hbGxcIiwgXCJXc21hbGxcIiwgXCJYc21hbGxcIiwgXCJZc21hbGxcIiwgXCJac21hbGxcIiwgXCJjb2xvbm1vbmV0YXJ5XCIsIFwib25lZml0dGVkXCIsIFwicnVwaWFoXCIsIFwiVGlsZGVzbWFsbFwiLCBcImV4Y2xhbWRvd25zbWFsbFwiLCBcImNlbnRvbGRzdHlsZVwiLCBcIkxzbGFzaHNtYWxsXCIsIFwiU2Nhcm9uc21hbGxcIiwgXCJaY2Fyb25zbWFsbFwiLCBcIkRpZXJlc2lzc21hbGxcIiwgXCJCcmV2ZXNtYWxsXCIsIFwiQ2Fyb25zbWFsbFwiLCBcIkRvdGFjY2VudHNtYWxsXCIsIFwiTWFjcm9uc21hbGxcIiwgXCJmaWd1cmVkYXNoXCIsIFwiaHlwaGVuaW5mZXJpb3JcIiwgXCJPZ29uZWtzbWFsbFwiLCBcIlJpbmdzbWFsbFwiLCBcIkNlZGlsbGFzbWFsbFwiLCBcInF1ZXN0aW9uZG93bnNtYWxsXCIsIFwib25lZWlnaHRoXCIsIFwidGhyZWVlaWdodGhzXCIsIFwiZml2ZWVpZ2h0aHNcIiwgXCJzZXZlbmVpZ2h0aHNcIiwgXCJvbmV0aGlyZFwiLCBcInR3b3RoaXJkc1wiLCBcInplcm9zdXBlcmlvclwiLCBcImZvdXJzdXBlcmlvclwiLCBcImZpdmVzdXBlcmlvclwiLCBcInNpeHN1cGVyaW9yXCIsIFwic2V2ZW5zdXBlcmlvclwiLCBcImVpZ2h0c3VwZXJpb3JcIiwgXCJuaW5lc3VwZXJpb3JcIiwgXCJ6ZXJvaW5mZXJpb3JcIiwgXCJvbmVpbmZlcmlvclwiLCBcInR3b2luZmVyaW9yXCIsIFwidGhyZWVpbmZlcmlvclwiLCBcImZvdXJpbmZlcmlvclwiLCBcImZpdmVpbmZlcmlvclwiLCBcInNpeGluZmVyaW9yXCIsIFwic2V2ZW5pbmZlcmlvclwiLCBcImVpZ2h0aW5mZXJpb3JcIiwgXCJuaW5laW5mZXJpb3JcIiwgXCJjZW50aW5mZXJpb3JcIiwgXCJkb2xsYXJpbmZlcmlvclwiLCBcInBlcmlvZGluZmVyaW9yXCIsIFwiY29tbWFpbmZlcmlvclwiLCBcIkFncmF2ZXNtYWxsXCIsIFwiQWFjdXRlc21hbGxcIiwgXCJBY2lyY3VtZmxleHNtYWxsXCIsIFwiQXRpbGRlc21hbGxcIiwgXCJBZGllcmVzaXNzbWFsbFwiLCBcIkFyaW5nc21hbGxcIiwgXCJBRXNtYWxsXCIsIFwiQ2NlZGlsbGFzbWFsbFwiLCBcIkVncmF2ZXNtYWxsXCIsIFwiRWFjdXRlc21hbGxcIiwgXCJFY2lyY3VtZmxleHNtYWxsXCIsIFwiRWRpZXJlc2lzc21hbGxcIiwgXCJJZ3JhdmVzbWFsbFwiLCBcIklhY3V0ZXNtYWxsXCIsIFwiSWNpcmN1bWZsZXhzbWFsbFwiLCBcIklkaWVyZXNpc3NtYWxsXCIsIFwiRXRoc21hbGxcIiwgXCJOdGlsZGVzbWFsbFwiLCBcIk9ncmF2ZXNtYWxsXCIsIFwiT2FjdXRlc21hbGxcIiwgXCJPY2lyY3VtZmxleHNtYWxsXCIsIFwiT3RpbGRlc21hbGxcIiwgXCJPZGllcmVzaXNzbWFsbFwiLCBcIk9Fc21hbGxcIiwgXCJPc2xhc2hzbWFsbFwiLCBcIlVncmF2ZXNtYWxsXCIsIFwiVWFjdXRlc21hbGxcIiwgXCJVY2lyY3VtZmxleHNtYWxsXCIsIFwiVWRpZXJlc2lzc21hbGxcIiwgXCJZYWN1dGVzbWFsbFwiLCBcIlRob3Juc21hbGxcIiwgXCJZZGllcmVzaXNzbWFsbFwiLCBcIjAwMS4wMDBcIiwgXCIwMDEuMDAxXCIsIFwiMDAxLjAwMlwiLCBcIjAwMS4wMDNcIiwgXCJCbGFja1wiLCBcIkJvbGRcIiwgXCJCb29rXCIsIFwiTGlnaHRcIiwgXCJNZWRpdW1cIiwgXCJSZWd1bGFyXCIsIFwiUm9tYW5cIiwgXCJTZW1pYm9sZFwiXTtcbmV4cG9ydHMuQ0ZGU3RhbmRhcmRTdHJpbmdzID0gQ0ZGU3RhbmRhcmRTdHJpbmdzO1xuY29uc3QgTlVNX1NUQU5EQVJEX0NGRl9TVFJJTkdTID0gMzkxO1xuXG5jb25zdCBDRkZQYXJzZXIgPSBmdW5jdGlvbiBDRkZQYXJzZXJDbG9zdXJlKCkge1xuICBjb25zdCBDaGFyc3RyaW5nVmFsaWRhdGlvbkRhdGEgPSBbbnVsbCwge1xuICAgIGlkOiBcImhzdGVtXCIsXG4gICAgbWluOiAyLFxuICAgIHN0YWNrQ2xlYXJpbmc6IHRydWUsXG4gICAgc3RlbTogdHJ1ZVxuICB9LCBudWxsLCB7XG4gICAgaWQ6IFwidnN0ZW1cIixcbiAgICBtaW46IDIsXG4gICAgc3RhY2tDbGVhcmluZzogdHJ1ZSxcbiAgICBzdGVtOiB0cnVlXG4gIH0sIHtcbiAgICBpZDogXCJ2bW92ZXRvXCIsXG4gICAgbWluOiAxLFxuICAgIHN0YWNrQ2xlYXJpbmc6IHRydWVcbiAgfSwge1xuICAgIGlkOiBcInJsaW5ldG9cIixcbiAgICBtaW46IDIsXG4gICAgcmVzZXRTdGFjazogdHJ1ZVxuICB9LCB7XG4gICAgaWQ6IFwiaGxpbmV0b1wiLFxuICAgIG1pbjogMSxcbiAgICByZXNldFN0YWNrOiB0cnVlXG4gIH0sIHtcbiAgICBpZDogXCJ2bGluZXRvXCIsXG4gICAgbWluOiAxLFxuICAgIHJlc2V0U3RhY2s6IHRydWVcbiAgfSwge1xuICAgIGlkOiBcInJyY3VydmV0b1wiLFxuICAgIG1pbjogNixcbiAgICByZXNldFN0YWNrOiB0cnVlXG4gIH0sIG51bGwsIHtcbiAgICBpZDogXCJjYWxsc3ViclwiLFxuICAgIG1pbjogMSxcbiAgICB1bmRlZlN0YWNrOiB0cnVlXG4gIH0sIHtcbiAgICBpZDogXCJyZXR1cm5cIixcbiAgICBtaW46IDAsXG4gICAgdW5kZWZTdGFjazogdHJ1ZVxuICB9LCBudWxsLCBudWxsLCB7XG4gICAgaWQ6IFwiZW5kY2hhclwiLFxuICAgIG1pbjogMCxcbiAgICBzdGFja0NsZWFyaW5nOiB0cnVlXG4gIH0sIG51bGwsIG51bGwsIG51bGwsIHtcbiAgICBpZDogXCJoc3RlbWhtXCIsXG4gICAgbWluOiAyLFxuICAgIHN0YWNrQ2xlYXJpbmc6IHRydWUsXG4gICAgc3RlbTogdHJ1ZVxuICB9LCB7XG4gICAgaWQ6IFwiaGludG1hc2tcIixcbiAgICBtaW46IDAsXG4gICAgc3RhY2tDbGVhcmluZzogdHJ1ZVxuICB9LCB7XG4gICAgaWQ6IFwiY250cm1hc2tcIixcbiAgICBtaW46IDAsXG4gICAgc3RhY2tDbGVhcmluZzogdHJ1ZVxuICB9LCB7XG4gICAgaWQ6IFwicm1vdmV0b1wiLFxuICAgIG1pbjogMixcbiAgICBzdGFja0NsZWFyaW5nOiB0cnVlXG4gIH0sIHtcbiAgICBpZDogXCJobW92ZXRvXCIsXG4gICAgbWluOiAxLFxuICAgIHN0YWNrQ2xlYXJpbmc6IHRydWVcbiAgfSwge1xuICAgIGlkOiBcInZzdGVtaG1cIixcbiAgICBtaW46IDIsXG4gICAgc3RhY2tDbGVhcmluZzogdHJ1ZSxcbiAgICBzdGVtOiB0cnVlXG4gIH0sIHtcbiAgICBpZDogXCJyY3VydmVsaW5lXCIsXG4gICAgbWluOiA4LFxuICAgIHJlc2V0U3RhY2s6IHRydWVcbiAgfSwge1xuICAgIGlkOiBcInJsaW5lY3VydmVcIixcbiAgICBtaW46IDgsXG4gICAgcmVzZXRTdGFjazogdHJ1ZVxuICB9LCB7XG4gICAgaWQ6IFwidnZjdXJ2ZXRvXCIsXG4gICAgbWluOiA0LFxuICAgIHJlc2V0U3RhY2s6IHRydWVcbiAgfSwge1xuICAgIGlkOiBcImhoY3VydmV0b1wiLFxuICAgIG1pbjogNCxcbiAgICByZXNldFN0YWNrOiB0cnVlXG4gIH0sIG51bGwsIHtcbiAgICBpZDogXCJjYWxsZ3N1YnJcIixcbiAgICBtaW46IDEsXG4gICAgdW5kZWZTdGFjazogdHJ1ZVxuICB9LCB7XG4gICAgaWQ6IFwidmhjdXJ2ZXRvXCIsXG4gICAgbWluOiA0LFxuICAgIHJlc2V0U3RhY2s6IHRydWVcbiAgfSwge1xuICAgIGlkOiBcImh2Y3VydmV0b1wiLFxuICAgIG1pbjogNCxcbiAgICByZXNldFN0YWNrOiB0cnVlXG4gIH1dO1xuICBjb25zdCBDaGFyc3RyaW5nVmFsaWRhdGlvbkRhdGExMiA9IFtudWxsLCBudWxsLCBudWxsLCB7XG4gICAgaWQ6IFwiYW5kXCIsXG4gICAgbWluOiAyLFxuICAgIHN0YWNrRGVsdGE6IC0xXG4gIH0sIHtcbiAgICBpZDogXCJvclwiLFxuICAgIG1pbjogMixcbiAgICBzdGFja0RlbHRhOiAtMVxuICB9LCB7XG4gICAgaWQ6IFwibm90XCIsXG4gICAgbWluOiAxLFxuICAgIHN0YWNrRGVsdGE6IDBcbiAgfSwgbnVsbCwgbnVsbCwgbnVsbCwge1xuICAgIGlkOiBcImFic1wiLFxuICAgIG1pbjogMSxcbiAgICBzdGFja0RlbHRhOiAwXG4gIH0sIHtcbiAgICBpZDogXCJhZGRcIixcbiAgICBtaW46IDIsXG4gICAgc3RhY2tEZWx0YTogLTEsXG4gICAgc3RhY2tGbjogZnVuY3Rpb24gc3RhY2tfZGl2KHN0YWNrLCBpbmRleCkge1xuICAgICAgc3RhY2tbaW5kZXggLSAyXSA9IHN0YWNrW2luZGV4IC0gMl0gKyBzdGFja1tpbmRleCAtIDFdO1xuICAgIH1cbiAgfSwge1xuICAgIGlkOiBcInN1YlwiLFxuICAgIG1pbjogMixcbiAgICBzdGFja0RlbHRhOiAtMSxcbiAgICBzdGFja0ZuOiBmdW5jdGlvbiBzdGFja19kaXYoc3RhY2ssIGluZGV4KSB7XG4gICAgICBzdGFja1tpbmRleCAtIDJdID0gc3RhY2tbaW5kZXggLSAyXSAtIHN0YWNrW2luZGV4IC0gMV07XG4gICAgfVxuICB9LCB7XG4gICAgaWQ6IFwiZGl2XCIsXG4gICAgbWluOiAyLFxuICAgIHN0YWNrRGVsdGE6IC0xLFxuICAgIHN0YWNrRm46IGZ1bmN0aW9uIHN0YWNrX2RpdihzdGFjaywgaW5kZXgpIHtcbiAgICAgIHN0YWNrW2luZGV4IC0gMl0gPSBzdGFja1tpbmRleCAtIDJdIC8gc3RhY2tbaW5kZXggLSAxXTtcbiAgICB9XG4gIH0sIG51bGwsIHtcbiAgICBpZDogXCJuZWdcIixcbiAgICBtaW46IDEsXG4gICAgc3RhY2tEZWx0YTogMCxcbiAgICBzdGFja0ZuOiBmdW5jdGlvbiBzdGFja19kaXYoc3RhY2ssIGluZGV4KSB7XG4gICAgICBzdGFja1tpbmRleCAtIDFdID0gLXN0YWNrW2luZGV4IC0gMV07XG4gICAgfVxuICB9LCB7XG4gICAgaWQ6IFwiZXFcIixcbiAgICBtaW46IDIsXG4gICAgc3RhY2tEZWx0YTogLTFcbiAgfSwgbnVsbCwgbnVsbCwge1xuICAgIGlkOiBcImRyb3BcIixcbiAgICBtaW46IDEsXG4gICAgc3RhY2tEZWx0YTogLTFcbiAgfSwgbnVsbCwge1xuICAgIGlkOiBcInB1dFwiLFxuICAgIG1pbjogMixcbiAgICBzdGFja0RlbHRhOiAtMlxuICB9LCB7XG4gICAgaWQ6IFwiZ2V0XCIsXG4gICAgbWluOiAxLFxuICAgIHN0YWNrRGVsdGE6IDBcbiAgfSwge1xuICAgIGlkOiBcImlmZWxzZVwiLFxuICAgIG1pbjogNCxcbiAgICBzdGFja0RlbHRhOiAtM1xuICB9LCB7XG4gICAgaWQ6IFwicmFuZG9tXCIsXG4gICAgbWluOiAwLFxuICAgIHN0YWNrRGVsdGE6IDFcbiAgfSwge1xuICAgIGlkOiBcIm11bFwiLFxuICAgIG1pbjogMixcbiAgICBzdGFja0RlbHRhOiAtMSxcbiAgICBzdGFja0ZuOiBmdW5jdGlvbiBzdGFja19kaXYoc3RhY2ssIGluZGV4KSB7XG4gICAgICBzdGFja1tpbmRleCAtIDJdID0gc3RhY2tbaW5kZXggLSAyXSAqIHN0YWNrW2luZGV4IC0gMV07XG4gICAgfVxuICB9LCBudWxsLCB7XG4gICAgaWQ6IFwic3FydFwiLFxuICAgIG1pbjogMSxcbiAgICBzdGFja0RlbHRhOiAwXG4gIH0sIHtcbiAgICBpZDogXCJkdXBcIixcbiAgICBtaW46IDEsXG4gICAgc3RhY2tEZWx0YTogMVxuICB9LCB7XG4gICAgaWQ6IFwiZXhjaFwiLFxuICAgIG1pbjogMixcbiAgICBzdGFja0RlbHRhOiAwXG4gIH0sIHtcbiAgICBpZDogXCJpbmRleFwiLFxuICAgIG1pbjogMixcbiAgICBzdGFja0RlbHRhOiAwXG4gIH0sIHtcbiAgICBpZDogXCJyb2xsXCIsXG4gICAgbWluOiAzLFxuICAgIHN0YWNrRGVsdGE6IC0yXG4gIH0sIG51bGwsIG51bGwsIG51bGwsIHtcbiAgICBpZDogXCJoZmxleFwiLFxuICAgIG1pbjogNyxcbiAgICByZXNldFN0YWNrOiB0cnVlXG4gIH0sIHtcbiAgICBpZDogXCJmbGV4XCIsXG4gICAgbWluOiAxMyxcbiAgICByZXNldFN0YWNrOiB0cnVlXG4gIH0sIHtcbiAgICBpZDogXCJoZmxleDFcIixcbiAgICBtaW46IDksXG4gICAgcmVzZXRTdGFjazogdHJ1ZVxuICB9LCB7XG4gICAgaWQ6IFwiZmxleDFcIixcbiAgICBtaW46IDExLFxuICAgIHJlc2V0U3RhY2s6IHRydWVcbiAgfV07XG5cbiAgY2xhc3MgQ0ZGUGFyc2VyIHtcbiAgICBjb25zdHJ1Y3RvcihmaWxlLCBwcm9wZXJ0aWVzLCBzZWFjQW5hbHlzaXNFbmFibGVkKSB7XG4gICAgICB0aGlzLmJ5dGVzID0gZmlsZS5nZXRCeXRlcygpO1xuICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgICAgIHRoaXMuc2VhY0FuYWx5c2lzRW5hYmxlZCA9ICEhc2VhY0FuYWx5c2lzRW5hYmxlZDtcbiAgICB9XG5cbiAgICBwYXJzZSgpIHtcbiAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzLnByb3BlcnRpZXM7XG4gICAgICBjb25zdCBjZmYgPSBuZXcgQ0ZGKCk7XG4gICAgICB0aGlzLmNmZiA9IGNmZjtcbiAgICAgIGNvbnN0IGhlYWRlciA9IHRoaXMucGFyc2VIZWFkZXIoKTtcbiAgICAgIGNvbnN0IG5hbWVJbmRleCA9IHRoaXMucGFyc2VJbmRleChoZWFkZXIuZW5kUG9zKTtcbiAgICAgIGNvbnN0IHRvcERpY3RJbmRleCA9IHRoaXMucGFyc2VJbmRleChuYW1lSW5kZXguZW5kUG9zKTtcbiAgICAgIGNvbnN0IHN0cmluZ0luZGV4ID0gdGhpcy5wYXJzZUluZGV4KHRvcERpY3RJbmRleC5lbmRQb3MpO1xuICAgICAgY29uc3QgZ2xvYmFsU3VickluZGV4ID0gdGhpcy5wYXJzZUluZGV4KHN0cmluZ0luZGV4LmVuZFBvcyk7XG4gICAgICBjb25zdCB0b3BEaWN0UGFyc2VkID0gdGhpcy5wYXJzZURpY3QodG9wRGljdEluZGV4Lm9iai5nZXQoMCkpO1xuICAgICAgY29uc3QgdG9wRGljdCA9IHRoaXMuY3JlYXRlRGljdChDRkZUb3BEaWN0LCB0b3BEaWN0UGFyc2VkLCBjZmYuc3RyaW5ncyk7XG4gICAgICBjZmYuaGVhZGVyID0gaGVhZGVyLm9iajtcbiAgICAgIGNmZi5uYW1lcyA9IHRoaXMucGFyc2VOYW1lSW5kZXgobmFtZUluZGV4Lm9iaik7XG4gICAgICBjZmYuc3RyaW5ncyA9IHRoaXMucGFyc2VTdHJpbmdJbmRleChzdHJpbmdJbmRleC5vYmopO1xuICAgICAgY2ZmLnRvcERpY3QgPSB0b3BEaWN0O1xuICAgICAgY2ZmLmdsb2JhbFN1YnJJbmRleCA9IGdsb2JhbFN1YnJJbmRleC5vYmo7XG4gICAgICB0aGlzLnBhcnNlUHJpdmF0ZURpY3QoY2ZmLnRvcERpY3QpO1xuICAgICAgY2ZmLmlzQ0lERm9udCA9IHRvcERpY3QuaGFzTmFtZShcIlJPU1wiKTtcbiAgICAgIGNvbnN0IGNoYXJTdHJpbmdPZmZzZXQgPSB0b3BEaWN0LmdldEJ5TmFtZShcIkNoYXJTdHJpbmdzXCIpO1xuICAgICAgY29uc3QgY2hhclN0cmluZ0luZGV4ID0gdGhpcy5wYXJzZUluZGV4KGNoYXJTdHJpbmdPZmZzZXQpLm9iajtcbiAgICAgIGNvbnN0IGZvbnRNYXRyaXggPSB0b3BEaWN0LmdldEJ5TmFtZShcIkZvbnRNYXRyaXhcIik7XG5cbiAgICAgIGlmIChmb250TWF0cml4KSB7XG4gICAgICAgIHByb3BlcnRpZXMuZm9udE1hdHJpeCA9IGZvbnRNYXRyaXg7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvbnRCQm94ID0gdG9wRGljdC5nZXRCeU5hbWUoXCJGb250QkJveFwiKTtcblxuICAgICAgaWYgKGZvbnRCQm94KSB7XG4gICAgICAgIHByb3BlcnRpZXMuYXNjZW50ID0gTWF0aC5tYXgoZm9udEJCb3hbM10sIGZvbnRCQm94WzFdKTtcbiAgICAgICAgcHJvcGVydGllcy5kZXNjZW50ID0gTWF0aC5taW4oZm9udEJCb3hbMV0sIGZvbnRCQm94WzNdKTtcbiAgICAgICAgcHJvcGVydGllcy5hc2NlbnRTY2FsZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBsZXQgY2hhcnNldCwgZW5jb2Rpbmc7XG5cbiAgICAgIGlmIChjZmYuaXNDSURGb250KSB7XG4gICAgICAgIGNvbnN0IGZkQXJyYXlJbmRleCA9IHRoaXMucGFyc2VJbmRleCh0b3BEaWN0LmdldEJ5TmFtZShcIkZEQXJyYXlcIikpLm9iajtcblxuICAgICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBmZEFycmF5SW5kZXguY291bnQ7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgY29uc3QgZGljdFJhdyA9IGZkQXJyYXlJbmRleC5nZXQoaSk7XG4gICAgICAgICAgY29uc3QgZm9udERpY3QgPSB0aGlzLmNyZWF0ZURpY3QoQ0ZGVG9wRGljdCwgdGhpcy5wYXJzZURpY3QoZGljdFJhdyksIGNmZi5zdHJpbmdzKTtcbiAgICAgICAgICB0aGlzLnBhcnNlUHJpdmF0ZURpY3QoZm9udERpY3QpO1xuICAgICAgICAgIGNmZi5mZEFycmF5LnB1c2goZm9udERpY3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgZW5jb2RpbmcgPSBudWxsO1xuICAgICAgICBjaGFyc2V0ID0gdGhpcy5wYXJzZUNoYXJzZXRzKHRvcERpY3QuZ2V0QnlOYW1lKFwiY2hhcnNldFwiKSwgY2hhclN0cmluZ0luZGV4LmNvdW50LCBjZmYuc3RyaW5ncywgdHJ1ZSk7XG4gICAgICAgIGNmZi5mZFNlbGVjdCA9IHRoaXMucGFyc2VGRFNlbGVjdCh0b3BEaWN0LmdldEJ5TmFtZShcIkZEU2VsZWN0XCIpLCBjaGFyU3RyaW5nSW5kZXguY291bnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hhcnNldCA9IHRoaXMucGFyc2VDaGFyc2V0cyh0b3BEaWN0LmdldEJ5TmFtZShcImNoYXJzZXRcIiksIGNoYXJTdHJpbmdJbmRleC5jb3VudCwgY2ZmLnN0cmluZ3MsIGZhbHNlKTtcbiAgICAgICAgZW5jb2RpbmcgPSB0aGlzLnBhcnNlRW5jb2RpbmcodG9wRGljdC5nZXRCeU5hbWUoXCJFbmNvZGluZ1wiKSwgcHJvcGVydGllcywgY2ZmLnN0cmluZ3MsIGNoYXJzZXQuY2hhcnNldCk7XG4gICAgICB9XG5cbiAgICAgIGNmZi5jaGFyc2V0ID0gY2hhcnNldDtcbiAgICAgIGNmZi5lbmNvZGluZyA9IGVuY29kaW5nO1xuICAgICAgY29uc3QgY2hhclN0cmluZ3NBbmRTZWFjcyA9IHRoaXMucGFyc2VDaGFyU3RyaW5ncyh7XG4gICAgICAgIGNoYXJTdHJpbmdzOiBjaGFyU3RyaW5nSW5kZXgsXG4gICAgICAgIGxvY2FsU3VickluZGV4OiB0b3BEaWN0LnByaXZhdGVEaWN0LnN1YnJzSW5kZXgsXG4gICAgICAgIGdsb2JhbFN1YnJJbmRleDogZ2xvYmFsU3VickluZGV4Lm9iaixcbiAgICAgICAgZmRTZWxlY3Q6IGNmZi5mZFNlbGVjdCxcbiAgICAgICAgZmRBcnJheTogY2ZmLmZkQXJyYXksXG4gICAgICAgIHByaXZhdGVEaWN0OiB0b3BEaWN0LnByaXZhdGVEaWN0XG4gICAgICB9KTtcbiAgICAgIGNmZi5jaGFyU3RyaW5ncyA9IGNoYXJTdHJpbmdzQW5kU2VhY3MuY2hhclN0cmluZ3M7XG4gICAgICBjZmYuc2VhY3MgPSBjaGFyU3RyaW5nc0FuZFNlYWNzLnNlYWNzO1xuICAgICAgY2ZmLndpZHRocyA9IGNoYXJTdHJpbmdzQW5kU2VhY3Mud2lkdGhzO1xuICAgICAgcmV0dXJuIGNmZjtcbiAgICB9XG5cbiAgICBwYXJzZUhlYWRlcigpIHtcbiAgICAgIGxldCBieXRlcyA9IHRoaXMuYnl0ZXM7XG4gICAgICBjb25zdCBieXRlc0xlbmd0aCA9IGJ5dGVzLmxlbmd0aDtcbiAgICAgIGxldCBvZmZzZXQgPSAwO1xuXG4gICAgICB3aGlsZSAob2Zmc2V0IDwgYnl0ZXNMZW5ndGggJiYgYnl0ZXNbb2Zmc2V0XSAhPT0gMSkge1xuICAgICAgICArK29mZnNldDtcbiAgICAgIH1cblxuICAgICAgaWYgKG9mZnNldCA+PSBieXRlc0xlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJJbnZhbGlkIENGRiBoZWFkZXJcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChvZmZzZXQgIT09IDApIHtcbiAgICAgICAgKDAsIF91dGlsLmluZm8pKFwiY2ZmIGRhdGEgaXMgc2hpZnRlZFwiKTtcbiAgICAgICAgYnl0ZXMgPSBieXRlcy5zdWJhcnJheShvZmZzZXQpO1xuICAgICAgICB0aGlzLmJ5dGVzID0gYnl0ZXM7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1ham9yID0gYnl0ZXNbMF07XG4gICAgICBjb25zdCBtaW5vciA9IGJ5dGVzWzFdO1xuICAgICAgY29uc3QgaGRyU2l6ZSA9IGJ5dGVzWzJdO1xuICAgICAgY29uc3Qgb2ZmU2l6ZSA9IGJ5dGVzWzNdO1xuICAgICAgY29uc3QgaGVhZGVyID0gbmV3IENGRkhlYWRlcihtYWpvciwgbWlub3IsIGhkclNpemUsIG9mZlNpemUpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb2JqOiBoZWFkZXIsXG4gICAgICAgIGVuZFBvczogaGRyU2l6ZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBwYXJzZURpY3QoZGljdCkge1xuICAgICAgbGV0IHBvcyA9IDA7XG5cbiAgICAgIGZ1bmN0aW9uIHBhcnNlT3BlcmFuZCgpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gZGljdFtwb3MrK107XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSAzMCkge1xuICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0T3BlcmFuZCgpO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAyOCkge1xuICAgICAgICAgIHZhbHVlID0gZGljdFtwb3MrK107XG4gICAgICAgICAgdmFsdWUgPSAodmFsdWUgPDwgMjQgfCBkaWN0W3BvcysrXSA8PCAxNikgPj4gMTY7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAyOSkge1xuICAgICAgICAgIHZhbHVlID0gZGljdFtwb3MrK107XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZSA8PCA4IHwgZGljdFtwb3MrK107XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZSA8PCA4IHwgZGljdFtwb3MrK107XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZSA8PCA4IHwgZGljdFtwb3MrK107XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID49IDMyICYmIHZhbHVlIDw9IDI0Nikge1xuICAgICAgICAgIHJldHVybiB2YWx1ZSAtIDEzOTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA+PSAyNDcgJiYgdmFsdWUgPD0gMjUwKSB7XG4gICAgICAgICAgcmV0dXJuICh2YWx1ZSAtIDI0NykgKiAyNTYgKyBkaWN0W3BvcysrXSArIDEwODtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA+PSAyNTEgJiYgdmFsdWUgPD0gMjU0KSB7XG4gICAgICAgICAgcmV0dXJuIC0oKHZhbHVlIC0gMjUxKSAqIDI1NikgLSBkaWN0W3BvcysrXSAtIDEwODtcbiAgICAgICAgfVxuXG4gICAgICAgICgwLCBfdXRpbC53YXJuKSgnQ0ZGUGFyc2VyX3BhcnNlRGljdDogXCInICsgdmFsdWUgKyAnXCIgaXMgYSByZXNlcnZlZCBjb21tYW5kLicpO1xuICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBwYXJzZUZsb2F0T3BlcmFuZCgpIHtcbiAgICAgICAgbGV0IHN0ciA9IFwiXCI7XG4gICAgICAgIGNvbnN0IGVvZiA9IDE1O1xuICAgICAgICBjb25zdCBsb29rdXAgPSBbXCIwXCIsIFwiMVwiLCBcIjJcIiwgXCIzXCIsIFwiNFwiLCBcIjVcIiwgXCI2XCIsIFwiN1wiLCBcIjhcIiwgXCI5XCIsIFwiLlwiLCBcIkVcIiwgXCJFLVwiLCBudWxsLCBcIi1cIl07XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IGRpY3QubGVuZ3RoO1xuXG4gICAgICAgIHdoaWxlIChwb3MgPCBsZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCBiID0gZGljdFtwb3MrK107XG4gICAgICAgICAgY29uc3QgYjEgPSBiID4+IDQ7XG4gICAgICAgICAgY29uc3QgYjIgPSBiICYgMTU7XG5cbiAgICAgICAgICBpZiAoYjEgPT09IGVvZikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3RyICs9IGxvb2t1cFtiMV07XG5cbiAgICAgICAgICBpZiAoYjIgPT09IGVvZikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3RyICs9IGxvb2t1cFtiMl07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChzdHIpO1xuICAgICAgfVxuXG4gICAgICBsZXQgb3BlcmFuZHMgPSBbXTtcbiAgICAgIGNvbnN0IGVudHJpZXMgPSBbXTtcbiAgICAgIHBvcyA9IDA7XG4gICAgICBjb25zdCBlbmQgPSBkaWN0Lmxlbmd0aDtcblxuICAgICAgd2hpbGUgKHBvcyA8IGVuZCkge1xuICAgICAgICBsZXQgYiA9IGRpY3RbcG9zXTtcblxuICAgICAgICBpZiAoYiA8PSAyMSkge1xuICAgICAgICAgIGlmIChiID09PSAxMikge1xuICAgICAgICAgICAgYiA9IGIgPDwgOCB8IGRpY3RbKytwb3NdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVudHJpZXMucHVzaChbYiwgb3BlcmFuZHNdKTtcbiAgICAgICAgICBvcGVyYW5kcyA9IFtdO1xuICAgICAgICAgICsrcG9zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wZXJhbmRzLnB1c2gocGFyc2VPcGVyYW5kKCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlbnRyaWVzO1xuICAgIH1cblxuICAgIHBhcnNlSW5kZXgocG9zKSB7XG4gICAgICBjb25zdCBjZmZJbmRleCA9IG5ldyBDRkZJbmRleCgpO1xuICAgICAgY29uc3QgYnl0ZXMgPSB0aGlzLmJ5dGVzO1xuICAgICAgY29uc3QgY291bnQgPSBieXRlc1twb3MrK10gPDwgOCB8IGJ5dGVzW3BvcysrXTtcbiAgICAgIGNvbnN0IG9mZnNldHMgPSBbXTtcbiAgICAgIGxldCBlbmQgPSBwb3M7XG4gICAgICBsZXQgaSwgaWk7XG5cbiAgICAgIGlmIChjb3VudCAhPT0gMCkge1xuICAgICAgICBjb25zdCBvZmZzZXRTaXplID0gYnl0ZXNbcG9zKytdO1xuICAgICAgICBjb25zdCBzdGFydFBvcyA9IHBvcyArIChjb3VudCArIDEpICogb2Zmc2V0U2l6ZSAtIDE7XG5cbiAgICAgICAgZm9yIChpID0gMCwgaWkgPSBjb3VudCArIDE7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgbGV0IG9mZnNldCA9IDA7XG5cbiAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG9mZnNldFNpemU7ICsraikge1xuICAgICAgICAgICAgb2Zmc2V0IDw8PSA4O1xuICAgICAgICAgICAgb2Zmc2V0ICs9IGJ5dGVzW3BvcysrXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvZmZzZXRzLnB1c2goc3RhcnRQb3MgKyBvZmZzZXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgZW5kID0gb2Zmc2V0c1tjb3VudF07XG4gICAgICB9XG5cbiAgICAgIGZvciAoaSA9IDAsIGlpID0gb2Zmc2V0cy5sZW5ndGggLSAxOyBpIDwgaWk7ICsraSkge1xuICAgICAgICBjb25zdCBvZmZzZXRTdGFydCA9IG9mZnNldHNbaV07XG4gICAgICAgIGNvbnN0IG9mZnNldEVuZCA9IG9mZnNldHNbaSArIDFdO1xuICAgICAgICBjZmZJbmRleC5hZGQoYnl0ZXMuc3ViYXJyYXkob2Zmc2V0U3RhcnQsIG9mZnNldEVuZCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBvYmo6IGNmZkluZGV4LFxuICAgICAgICBlbmRQb3M6IGVuZFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBwYXJzZU5hbWVJbmRleChpbmRleCkge1xuICAgICAgY29uc3QgbmFtZXMgPSBbXTtcblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gaW5kZXguY291bnQ7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBpbmRleC5nZXQoaSk7XG4gICAgICAgIG5hbWVzLnB1c2goKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKG5hbWUpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5hbWVzO1xuICAgIH1cblxuICAgIHBhcnNlU3RyaW5nSW5kZXgoaW5kZXgpIHtcbiAgICAgIGNvbnN0IHN0cmluZ3MgPSBuZXcgQ0ZGU3RyaW5ncygpO1xuXG4gICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBpbmRleC5jb3VudDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGluZGV4LmdldChpKTtcbiAgICAgICAgc3RyaW5ncy5hZGQoKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKGRhdGEpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0cmluZ3M7XG4gICAgfVxuXG4gICAgY3JlYXRlRGljdChUeXBlLCBkaWN0LCBzdHJpbmdzKSB7XG4gICAgICBjb25zdCBjZmZEaWN0ID0gbmV3IFR5cGUoc3RyaW5ncyk7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGRpY3QubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgICBjb25zdCBwYWlyID0gZGljdFtpXTtcbiAgICAgICAgY29uc3Qga2V5ID0gcGFpclswXTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBwYWlyWzFdO1xuICAgICAgICBjZmZEaWN0LnNldEJ5S2V5KGtleSwgdmFsdWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2ZmRGljdDtcbiAgICB9XG5cbiAgICBwYXJzZUNoYXJTdHJpbmcoc3RhdGUsIGRhdGEsIGxvY2FsU3VickluZGV4LCBnbG9iYWxTdWJySW5kZXgpIHtcbiAgICAgIGlmICghZGF0YSB8fCBzdGF0ZS5jYWxsRGVwdGggPiBNQVhfU1VCUl9ORVNUSU5HKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgbGV0IHN0YWNrU2l6ZSA9IHN0YXRlLnN0YWNrU2l6ZTtcbiAgICAgIGNvbnN0IHN0YWNrID0gc3RhdGUuc3RhY2s7XG4gICAgICBjb25zdCBsZW5ndGggPSBkYXRhLmxlbmd0aDtcblxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsZW5ndGg7KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZGF0YVtqKytdO1xuICAgICAgICBsZXQgdmFsaWRhdGlvbkNvbW1hbmQgPSBudWxsO1xuXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gMTIpIHtcbiAgICAgICAgICBjb25zdCBxID0gZGF0YVtqKytdO1xuXG4gICAgICAgICAgaWYgKHEgPT09IDApIHtcbiAgICAgICAgICAgIGRhdGFbaiAtIDJdID0gMTM5O1xuICAgICAgICAgICAgZGF0YVtqIC0gMV0gPSAyMjtcbiAgICAgICAgICAgIHN0YWNrU2l6ZSA9IDA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbGlkYXRpb25Db21tYW5kID0gQ2hhcnN0cmluZ1ZhbGlkYXRpb25EYXRhMTJbcV07XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAyOCkge1xuICAgICAgICAgIHN0YWNrW3N0YWNrU2l6ZV0gPSAoZGF0YVtqXSA8PCAyNCB8IGRhdGFbaiArIDFdIDw8IDE2KSA+PiAxNjtcbiAgICAgICAgICBqICs9IDI7XG4gICAgICAgICAgc3RhY2tTaXplKys7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IDE0KSB7XG4gICAgICAgICAgaWYgKHN0YWNrU2l6ZSA+PSA0KSB7XG4gICAgICAgICAgICBzdGFja1NpemUgLT0gNDtcblxuICAgICAgICAgICAgaWYgKHRoaXMuc2VhY0FuYWx5c2lzRW5hYmxlZCkge1xuICAgICAgICAgICAgICBzdGF0ZS5zZWFjID0gc3RhY2suc2xpY2Uoc3RhY2tTaXplLCBzdGFja1NpemUgKyA0KTtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhbGlkYXRpb25Db21tYW5kID0gQ2hhcnN0cmluZ1ZhbGlkYXRpb25EYXRhW3ZhbHVlXTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA+PSAzMiAmJiB2YWx1ZSA8PSAyNDYpIHtcbiAgICAgICAgICBzdGFja1tzdGFja1NpemVdID0gdmFsdWUgLSAxMzk7XG4gICAgICAgICAgc3RhY2tTaXplKys7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPj0gMjQ3ICYmIHZhbHVlIDw9IDI1NCkge1xuICAgICAgICAgIHN0YWNrW3N0YWNrU2l6ZV0gPSB2YWx1ZSA8IDI1MSA/ICh2YWx1ZSAtIDI0NyA8PCA4KSArIGRhdGFbal0gKyAxMDggOiAtKHZhbHVlIC0gMjUxIDw8IDgpIC0gZGF0YVtqXSAtIDEwODtcbiAgICAgICAgICBqKys7XG4gICAgICAgICAgc3RhY2tTaXplKys7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IDI1NSkge1xuICAgICAgICAgIHN0YWNrW3N0YWNrU2l6ZV0gPSAoZGF0YVtqXSA8PCAyNCB8IGRhdGFbaiArIDFdIDw8IDE2IHwgZGF0YVtqICsgMl0gPDwgOCB8IGRhdGFbaiArIDNdKSAvIDY1NTM2O1xuICAgICAgICAgIGogKz0gNDtcbiAgICAgICAgICBzdGFja1NpemUrKztcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gMTkgfHwgdmFsdWUgPT09IDIwKSB7XG4gICAgICAgICAgc3RhdGUuaGludHMgKz0gc3RhY2tTaXplID4+IDE7XG4gICAgICAgICAgaiArPSBzdGF0ZS5oaW50cyArIDcgPj4gMztcbiAgICAgICAgICBzdGFja1NpemUgJT0gMjtcbiAgICAgICAgICB2YWxpZGF0aW9uQ29tbWFuZCA9IENoYXJzdHJpbmdWYWxpZGF0aW9uRGF0YVt2YWx1ZV07XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IDEwIHx8IHZhbHVlID09PSAyOSkge1xuICAgICAgICAgIGxldCBzdWJyc0luZGV4O1xuXG4gICAgICAgICAgaWYgKHZhbHVlID09PSAxMCkge1xuICAgICAgICAgICAgc3VicnNJbmRleCA9IGxvY2FsU3VickluZGV4O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdWJyc0luZGV4ID0gZ2xvYmFsU3VickluZGV4O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghc3VicnNJbmRleCkge1xuICAgICAgICAgICAgdmFsaWRhdGlvbkNvbW1hbmQgPSBDaGFyc3RyaW5nVmFsaWRhdGlvbkRhdGFbdmFsdWVdO1xuICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiTWlzc2luZyBzdWJyc0luZGV4IGZvciBcIiArIHZhbGlkYXRpb25Db21tYW5kLmlkKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgYmlhcyA9IDMyNzY4O1xuXG4gICAgICAgICAgaWYgKHN1YnJzSW5kZXguY291bnQgPCAxMjQwKSB7XG4gICAgICAgICAgICBiaWFzID0gMTA3O1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3VicnNJbmRleC5jb3VudCA8IDMzOTAwKSB7XG4gICAgICAgICAgICBiaWFzID0gMTEzMTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBzdWJyTnVtYmVyID0gc3RhY2tbLS1zdGFja1NpemVdICsgYmlhcztcblxuICAgICAgICAgIGlmIChzdWJyTnVtYmVyIDwgMCB8fCBzdWJyTnVtYmVyID49IHN1YnJzSW5kZXguY291bnQgfHwgaXNOYU4oc3Vick51bWJlcikpIHtcbiAgICAgICAgICAgIHZhbGlkYXRpb25Db21tYW5kID0gQ2hhcnN0cmluZ1ZhbGlkYXRpb25EYXRhW3ZhbHVlXTtcbiAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIk91dCBvZiBib3VuZHMgc3VickluZGV4IGZvciBcIiArIHZhbGlkYXRpb25Db21tYW5kLmlkKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzdGF0ZS5zdGFja1NpemUgPSBzdGFja1NpemU7XG4gICAgICAgICAgc3RhdGUuY2FsbERlcHRoKys7XG4gICAgICAgICAgY29uc3QgdmFsaWQgPSB0aGlzLnBhcnNlQ2hhclN0cmluZyhzdGF0ZSwgc3VicnNJbmRleC5nZXQoc3Vick51bWJlciksIGxvY2FsU3VickluZGV4LCBnbG9iYWxTdWJySW5kZXgpO1xuXG4gICAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN0YXRlLmNhbGxEZXB0aC0tO1xuICAgICAgICAgIHN0YWNrU2l6ZSA9IHN0YXRlLnN0YWNrU2l6ZTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gMTEpIHtcbiAgICAgICAgICBzdGF0ZS5zdGFja1NpemUgPSBzdGFja1NpemU7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IDAgJiYgaiA9PT0gZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICBkYXRhW2ogLSAxXSA9IDE0O1xuICAgICAgICAgIHZhbGlkYXRpb25Db21tYW5kID0gQ2hhcnN0cmluZ1ZhbGlkYXRpb25EYXRhWzE0XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWxpZGF0aW9uQ29tbWFuZCA9IENoYXJzdHJpbmdWYWxpZGF0aW9uRGF0YVt2YWx1ZV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsaWRhdGlvbkNvbW1hbmQpIHtcbiAgICAgICAgICBpZiAodmFsaWRhdGlvbkNvbW1hbmQuc3RlbSkge1xuICAgICAgICAgICAgc3RhdGUuaGludHMgKz0gc3RhY2tTaXplID4+IDE7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMyB8fCB2YWx1ZSA9PT0gMjMpIHtcbiAgICAgICAgICAgICAgc3RhdGUuaGFzVlN0ZW1zID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUuaGFzVlN0ZW1zICYmICh2YWx1ZSA9PT0gMSB8fCB2YWx1ZSA9PT0gMTgpKSB7XG4gICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIkNGRiBzdGVtIGhpbnRzIGFyZSBpbiB3cm9uZyBvcmRlclwiKTtcbiAgICAgICAgICAgICAgZGF0YVtqIC0gMV0gPSB2YWx1ZSA9PT0gMSA/IDMgOiAyMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXCJtaW5cIiBpbiB2YWxpZGF0aW9uQ29tbWFuZCkge1xuICAgICAgICAgICAgaWYgKCFzdGF0ZS51bmRlZlN0YWNrICYmIHN0YWNrU2l6ZSA8IHZhbGlkYXRpb25Db21tYW5kLm1pbikge1xuICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJOb3QgZW5vdWdoIHBhcmFtZXRlcnMgZm9yIFwiICsgdmFsaWRhdGlvbkNvbW1hbmQuaWQgKyBcIjsgYWN0dWFsOiBcIiArIHN0YWNrU2l6ZSArIFwiLCBleHBlY3RlZDogXCIgKyB2YWxpZGF0aW9uQ29tbWFuZC5taW4pO1xuXG4gICAgICAgICAgICAgIGlmIChzdGFja1NpemUgPT09IDApIHtcbiAgICAgICAgICAgICAgICBkYXRhW2ogLSAxXSA9IDE0O1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzdGF0ZS5maXJzdFN0YWNrQ2xlYXJpbmcgJiYgdmFsaWRhdGlvbkNvbW1hbmQuc3RhY2tDbGVhcmluZykge1xuICAgICAgICAgICAgc3RhdGUuZmlyc3RTdGFja0NsZWFyaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzdGFja1NpemUgLT0gdmFsaWRhdGlvbkNvbW1hbmQubWluO1xuXG4gICAgICAgICAgICBpZiAoc3RhY2tTaXplID49IDIgJiYgdmFsaWRhdGlvbkNvbW1hbmQuc3RlbSkge1xuICAgICAgICAgICAgICBzdGFja1NpemUgJT0gMjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhY2tTaXplID4gMSkge1xuICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJGb3VuZCB0b28gbWFueSBwYXJhbWV0ZXJzIGZvciBzdGFjay1jbGVhcmluZyBjb21tYW5kXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3RhY2tTaXplID4gMCkge1xuICAgICAgICAgICAgICBzdGF0ZS53aWR0aCA9IHN0YWNrW3N0YWNrU2l6ZSAtIDFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcInN0YWNrRGVsdGFcIiBpbiB2YWxpZGF0aW9uQ29tbWFuZCkge1xuICAgICAgICAgICAgaWYgKFwic3RhY2tGblwiIGluIHZhbGlkYXRpb25Db21tYW5kKSB7XG4gICAgICAgICAgICAgIHZhbGlkYXRpb25Db21tYW5kLnN0YWNrRm4oc3RhY2ssIHN0YWNrU2l6ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0YWNrU2l6ZSArPSB2YWxpZGF0aW9uQ29tbWFuZC5zdGFja0RlbHRhO1xuICAgICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGlvbkNvbW1hbmQuc3RhY2tDbGVhcmluZykge1xuICAgICAgICAgICAgc3RhY2tTaXplID0gMDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbGlkYXRpb25Db21tYW5kLnJlc2V0U3RhY2spIHtcbiAgICAgICAgICAgIHN0YWNrU2l6ZSA9IDA7XG4gICAgICAgICAgICBzdGF0ZS51bmRlZlN0YWNrID0gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWxpZGF0aW9uQ29tbWFuZC51bmRlZlN0YWNrKSB7XG4gICAgICAgICAgICBzdGFja1NpemUgPSAwO1xuICAgICAgICAgICAgc3RhdGUudW5kZWZTdGFjayA9IHRydWU7XG4gICAgICAgICAgICBzdGF0ZS5maXJzdFN0YWNrQ2xlYXJpbmcgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc3RhdGUuc3RhY2tTaXplID0gc3RhY2tTaXplO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcGFyc2VDaGFyU3RyaW5ncyh7XG4gICAgICBjaGFyU3RyaW5ncyxcbiAgICAgIGxvY2FsU3VickluZGV4LFxuICAgICAgZ2xvYmFsU3VickluZGV4LFxuICAgICAgZmRTZWxlY3QsXG4gICAgICBmZEFycmF5LFxuICAgICAgcHJpdmF0ZURpY3RcbiAgICB9KSB7XG4gICAgICBjb25zdCBzZWFjcyA9IFtdO1xuICAgICAgY29uc3Qgd2lkdGhzID0gW107XG4gICAgICBjb25zdCBjb3VudCA9IGNoYXJTdHJpbmdzLmNvdW50O1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgY29uc3QgY2hhcnN0cmluZyA9IGNoYXJTdHJpbmdzLmdldChpKTtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB7XG4gICAgICAgICAgY2FsbERlcHRoOiAwLFxuICAgICAgICAgIHN0YWNrU2l6ZTogMCxcbiAgICAgICAgICBzdGFjazogW10sXG4gICAgICAgICAgdW5kZWZTdGFjazogdHJ1ZSxcbiAgICAgICAgICBoaW50czogMCxcbiAgICAgICAgICBmaXJzdFN0YWNrQ2xlYXJpbmc6IHRydWUsXG4gICAgICAgICAgc2VhYzogbnVsbCxcbiAgICAgICAgICB3aWR0aDogbnVsbCxcbiAgICAgICAgICBoYXNWU3RlbXM6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICAgIGxldCB2YWxpZCA9IHRydWU7XG4gICAgICAgIGxldCBsb2NhbFN1YnJUb1VzZSA9IG51bGw7XG4gICAgICAgIGxldCBwcml2YXRlRGljdFRvVXNlID0gcHJpdmF0ZURpY3Q7XG5cbiAgICAgICAgaWYgKGZkU2VsZWN0ICYmIGZkQXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgZmRJbmRleCA9IGZkU2VsZWN0LmdldEZESW5kZXgoaSk7XG5cbiAgICAgICAgICBpZiAoZmRJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIkdseXBoIGluZGV4IGlzIG5vdCBpbiBmZCBzZWxlY3QuXCIpO1xuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmRJbmRleCA+PSBmZEFycmF5Lmxlbmd0aCkge1xuICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiSW52YWxpZCBmZCBpbmRleCBmb3IgZ2x5cGggaW5kZXguXCIpO1xuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodmFsaWQpIHtcbiAgICAgICAgICAgIHByaXZhdGVEaWN0VG9Vc2UgPSBmZEFycmF5W2ZkSW5kZXhdLnByaXZhdGVEaWN0O1xuICAgICAgICAgICAgbG9jYWxTdWJyVG9Vc2UgPSBwcml2YXRlRGljdFRvVXNlLnN1YnJzSW5kZXg7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGxvY2FsU3VickluZGV4KSB7XG4gICAgICAgICAgbG9jYWxTdWJyVG9Vc2UgPSBsb2NhbFN1YnJJbmRleDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWxpZCkge1xuICAgICAgICAgIHZhbGlkID0gdGhpcy5wYXJzZUNoYXJTdHJpbmcoc3RhdGUsIGNoYXJzdHJpbmcsIGxvY2FsU3ViclRvVXNlLCBnbG9iYWxTdWJySW5kZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlLndpZHRoICE9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3Qgbm9taW5hbFdpZHRoID0gcHJpdmF0ZURpY3RUb1VzZS5nZXRCeU5hbWUoXCJub21pbmFsV2lkdGhYXCIpO1xuICAgICAgICAgIHdpZHRoc1tpXSA9IG5vbWluYWxXaWR0aCArIHN0YXRlLndpZHRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGRlZmF1bHRXaWR0aCA9IHByaXZhdGVEaWN0VG9Vc2UuZ2V0QnlOYW1lKFwiZGVmYXVsdFdpZHRoWFwiKTtcbiAgICAgICAgICB3aWR0aHNbaV0gPSBkZWZhdWx0V2lkdGg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGUuc2VhYyAhPT0gbnVsbCkge1xuICAgICAgICAgIHNlYWNzW2ldID0gc3RhdGUuc2VhYztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICBjaGFyU3RyaW5ncy5zZXQoaSwgbmV3IFVpbnQ4QXJyYXkoWzE0XSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNoYXJTdHJpbmdzLFxuICAgICAgICBzZWFjcyxcbiAgICAgICAgd2lkdGhzXG4gICAgICB9O1xuICAgIH1cblxuICAgIGVtcHR5UHJpdmF0ZURpY3Rpb25hcnkocGFyZW50RGljdCkge1xuICAgICAgY29uc3QgcHJpdmF0ZURpY3QgPSB0aGlzLmNyZWF0ZURpY3QoQ0ZGUHJpdmF0ZURpY3QsIFtdLCBwYXJlbnREaWN0LnN0cmluZ3MpO1xuICAgICAgcGFyZW50RGljdC5zZXRCeUtleSgxOCwgWzAsIDBdKTtcbiAgICAgIHBhcmVudERpY3QucHJpdmF0ZURpY3QgPSBwcml2YXRlRGljdDtcbiAgICB9XG5cbiAgICBwYXJzZVByaXZhdGVEaWN0KHBhcmVudERpY3QpIHtcbiAgICAgIGlmICghcGFyZW50RGljdC5oYXNOYW1lKFwiUHJpdmF0ZVwiKSkge1xuICAgICAgICB0aGlzLmVtcHR5UHJpdmF0ZURpY3Rpb25hcnkocGFyZW50RGljdCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJpdmF0ZU9mZnNldCA9IHBhcmVudERpY3QuZ2V0QnlOYW1lKFwiUHJpdmF0ZVwiKTtcblxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHByaXZhdGVPZmZzZXQpIHx8IHByaXZhdGVPZmZzZXQubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgIHBhcmVudERpY3QucmVtb3ZlQnlOYW1lKFwiUHJpdmF0ZVwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzaXplID0gcHJpdmF0ZU9mZnNldFswXTtcbiAgICAgIGNvbnN0IG9mZnNldCA9IHByaXZhdGVPZmZzZXRbMV07XG5cbiAgICAgIGlmIChzaXplID09PSAwIHx8IG9mZnNldCA+PSB0aGlzLmJ5dGVzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmVtcHR5UHJpdmF0ZURpY3Rpb25hcnkocGFyZW50RGljdCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJpdmF0ZURpY3RFbmQgPSBvZmZzZXQgKyBzaXplO1xuICAgICAgY29uc3QgZGljdERhdGEgPSB0aGlzLmJ5dGVzLnN1YmFycmF5KG9mZnNldCwgcHJpdmF0ZURpY3RFbmQpO1xuICAgICAgY29uc3QgZGljdCA9IHRoaXMucGFyc2VEaWN0KGRpY3REYXRhKTtcbiAgICAgIGNvbnN0IHByaXZhdGVEaWN0ID0gdGhpcy5jcmVhdGVEaWN0KENGRlByaXZhdGVEaWN0LCBkaWN0LCBwYXJlbnREaWN0LnN0cmluZ3MpO1xuICAgICAgcGFyZW50RGljdC5wcml2YXRlRGljdCA9IHByaXZhdGVEaWN0O1xuXG4gICAgICBpZiAoIXByaXZhdGVEaWN0LmdldEJ5TmFtZShcIlN1YnJzXCIpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3VicnNPZmZzZXQgPSBwcml2YXRlRGljdC5nZXRCeU5hbWUoXCJTdWJyc1wiKTtcbiAgICAgIGNvbnN0IHJlbGF0aXZlT2Zmc2V0ID0gb2Zmc2V0ICsgc3VicnNPZmZzZXQ7XG5cbiAgICAgIGlmIChzdWJyc09mZnNldCA9PT0gMCB8fCByZWxhdGl2ZU9mZnNldCA+PSB0aGlzLmJ5dGVzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmVtcHR5UHJpdmF0ZURpY3Rpb25hcnkocGFyZW50RGljdCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3VicnNJbmRleCA9IHRoaXMucGFyc2VJbmRleChyZWxhdGl2ZU9mZnNldCk7XG4gICAgICBwcml2YXRlRGljdC5zdWJyc0luZGV4ID0gc3VicnNJbmRleC5vYmo7XG4gICAgfVxuXG4gICAgcGFyc2VDaGFyc2V0cyhwb3MsIGxlbmd0aCwgc3RyaW5ncywgY2lkKSB7XG4gICAgICBpZiAocG9zID09PSAwKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ0ZGQ2hhcnNldCh0cnVlLCBDRkZDaGFyc2V0UHJlZGVmaW5lZFR5cGVzLklTT19BRE9CRSwgX2NoYXJzZXRzLklTT0Fkb2JlQ2hhcnNldCk7XG4gICAgICB9IGVsc2UgaWYgKHBvcyA9PT0gMSkge1xuICAgICAgICByZXR1cm4gbmV3IENGRkNoYXJzZXQodHJ1ZSwgQ0ZGQ2hhcnNldFByZWRlZmluZWRUeXBlcy5FWFBFUlQsIF9jaGFyc2V0cy5FeHBlcnRDaGFyc2V0KTtcbiAgICAgIH0gZWxzZSBpZiAocG9zID09PSAyKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ0ZGQ2hhcnNldCh0cnVlLCBDRkZDaGFyc2V0UHJlZGVmaW5lZFR5cGVzLkVYUEVSVF9TVUJTRVQsIF9jaGFyc2V0cy5FeHBlcnRTdWJzZXRDaGFyc2V0KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYnl0ZXMgPSB0aGlzLmJ5dGVzO1xuICAgICAgY29uc3Qgc3RhcnQgPSBwb3M7XG4gICAgICBjb25zdCBmb3JtYXQgPSBieXRlc1twb3MrK107XG4gICAgICBjb25zdCBjaGFyc2V0ID0gW2NpZCA/IDAgOiBcIi5ub3RkZWZcIl07XG4gICAgICBsZXQgaWQsIGNvdW50LCBpO1xuICAgICAgbGVuZ3RoIC09IDE7XG5cbiAgICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlkID0gYnl0ZXNbcG9zKytdIDw8IDggfCBieXRlc1twb3MrK107XG4gICAgICAgICAgICBjaGFyc2V0LnB1c2goY2lkID8gaWQgOiBzdHJpbmdzLmdldChpZCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICB3aGlsZSAoY2hhcnNldC5sZW5ndGggPD0gbGVuZ3RoKSB7XG4gICAgICAgICAgICBpZCA9IGJ5dGVzW3BvcysrXSA8PCA4IHwgYnl0ZXNbcG9zKytdO1xuICAgICAgICAgICAgY291bnQgPSBieXRlc1twb3MrK107XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gY291bnQ7IGkrKykge1xuICAgICAgICAgICAgICBjaGFyc2V0LnB1c2goY2lkID8gaWQrKyA6IHN0cmluZ3MuZ2V0KGlkKyspKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgd2hpbGUgKGNoYXJzZXQubGVuZ3RoIDw9IGxlbmd0aCkge1xuICAgICAgICAgICAgaWQgPSBieXRlc1twb3MrK10gPDwgOCB8IGJ5dGVzW3BvcysrXTtcbiAgICAgICAgICAgIGNvdW50ID0gYnl0ZXNbcG9zKytdIDw8IDggfCBieXRlc1twb3MrK107XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gY291bnQ7IGkrKykge1xuICAgICAgICAgICAgICBjaGFyc2V0LnB1c2goY2lkID8gaWQrKyA6IHN0cmluZ3MuZ2V0KGlkKyspKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIlVua25vd24gY2hhcnNldCBmb3JtYXRcIik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVuZCA9IHBvcztcbiAgICAgIGNvbnN0IHJhdyA9IGJ5dGVzLnN1YmFycmF5KHN0YXJ0LCBlbmQpO1xuICAgICAgcmV0dXJuIG5ldyBDRkZDaGFyc2V0KGZhbHNlLCBmb3JtYXQsIGNoYXJzZXQsIHJhdyk7XG4gICAgfVxuXG4gICAgcGFyc2VFbmNvZGluZyhwb3MsIHByb3BlcnRpZXMsIHN0cmluZ3MsIGNoYXJzZXQpIHtcbiAgICAgIGNvbnN0IGVuY29kaW5nID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIGNvbnN0IGJ5dGVzID0gdGhpcy5ieXRlcztcbiAgICAgIGxldCBwcmVkZWZpbmVkID0gZmFsc2U7XG4gICAgICBsZXQgZm9ybWF0LCBpLCBpaTtcbiAgICAgIGxldCByYXcgPSBudWxsO1xuXG4gICAgICBmdW5jdGlvbiByZWFkU3VwcGxlbWVudCgpIHtcbiAgICAgICAgY29uc3Qgc3VwcGxlbWVudHNDb3VudCA9IGJ5dGVzW3BvcysrXTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3VwcGxlbWVudHNDb3VudDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgY29kZSA9IGJ5dGVzW3BvcysrXTtcbiAgICAgICAgICBjb25zdCBzaWQgPSAoYnl0ZXNbcG9zKytdIDw8IDgpICsgKGJ5dGVzW3BvcysrXSAmIDB4ZmYpO1xuICAgICAgICAgIGVuY29kaW5nW2NvZGVdID0gY2hhcnNldC5pbmRleE9mKHN0cmluZ3MuZ2V0KHNpZCkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChwb3MgPT09IDAgfHwgcG9zID09PSAxKSB7XG4gICAgICAgIHByZWRlZmluZWQgPSB0cnVlO1xuICAgICAgICBmb3JtYXQgPSBwb3M7XG4gICAgICAgIGNvbnN0IGJhc2VFbmNvZGluZyA9IHBvcyA/IF9lbmNvZGluZ3MuRXhwZXJ0RW5jb2RpbmcgOiBfZW5jb2RpbmdzLlN0YW5kYXJkRW5jb2Rpbmc7XG5cbiAgICAgICAgZm9yIChpID0gMCwgaWkgPSBjaGFyc2V0Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IGJhc2VFbmNvZGluZy5pbmRleE9mKGNoYXJzZXRbaV0pO1xuXG4gICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgZW5jb2RpbmdbaW5kZXhdID0gaTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGRhdGFTdGFydCA9IHBvcztcbiAgICAgICAgZm9ybWF0ID0gYnl0ZXNbcG9zKytdO1xuXG4gICAgICAgIHN3aXRjaCAoZm9ybWF0ICYgMHg3Zikge1xuICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIGNvbnN0IGdseXBoc0NvdW50ID0gYnl0ZXNbcG9zKytdO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IGdseXBoc0NvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgZW5jb2RpbmdbYnl0ZXNbcG9zKytdXSA9IGk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgY29uc3QgcmFuZ2VzQ291bnQgPSBieXRlc1twb3MrK107XG4gICAgICAgICAgICBsZXQgZ2lkID0gMTtcblxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHJhbmdlc0NvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBieXRlc1twb3MrK107XG4gICAgICAgICAgICAgIGNvbnN0IGxlZnQgPSBieXRlc1twb3MrK107XG5cbiAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IHN0YXJ0OyBqIDw9IHN0YXJ0ICsgbGVmdDsgaisrKSB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmdbal0gPSBnaWQrKztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYFVua25vd24gZW5jb2RpbmcgZm9ybWF0OiAke2Zvcm1hdH0gaW4gQ0ZGYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhRW5kID0gcG9zO1xuXG4gICAgICAgIGlmIChmb3JtYXQgJiAweDgwKSB7XG4gICAgICAgICAgYnl0ZXNbZGF0YVN0YXJ0XSAmPSAweDdmO1xuICAgICAgICAgIHJlYWRTdXBwbGVtZW50KCk7XG4gICAgICAgIH1cblxuICAgICAgICByYXcgPSBieXRlcy5zdWJhcnJheShkYXRhU3RhcnQsIGRhdGFFbmQpO1xuICAgICAgfVxuXG4gICAgICBmb3JtYXQgJj0gMHg3ZjtcbiAgICAgIHJldHVybiBuZXcgQ0ZGRW5jb2RpbmcocHJlZGVmaW5lZCwgZm9ybWF0LCBlbmNvZGluZywgcmF3KTtcbiAgICB9XG5cbiAgICBwYXJzZUZEU2VsZWN0KHBvcywgbGVuZ3RoKSB7XG4gICAgICBjb25zdCBieXRlcyA9IHRoaXMuYnl0ZXM7XG4gICAgICBjb25zdCBmb3JtYXQgPSBieXRlc1twb3MrK107XG4gICAgICBjb25zdCBmZFNlbGVjdCA9IFtdO1xuICAgICAgbGV0IGk7XG5cbiAgICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gYnl0ZXNbcG9zKytdO1xuICAgICAgICAgICAgZmRTZWxlY3QucHVzaChpZCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIGNvbnN0IHJhbmdlc0NvdW50ID0gYnl0ZXNbcG9zKytdIDw8IDggfCBieXRlc1twb3MrK107XG5cbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmFuZ2VzQ291bnQ7ICsraSkge1xuICAgICAgICAgICAgbGV0IGZpcnN0ID0gYnl0ZXNbcG9zKytdIDw8IDggfCBieXRlc1twb3MrK107XG5cbiAgICAgICAgICAgIGlmIChpID09PSAwICYmIGZpcnN0ICE9PSAwKSB7XG4gICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcInBhcnNlRkRTZWxlY3Q6IFRoZSBmaXJzdCByYW5nZSBtdXN0IGhhdmUgYSBmaXJzdCBHSUQgb2YgMFwiICsgXCIgLS0gdHJ5aW5nIHRvIHJlY292ZXIuXCIpO1xuICAgICAgICAgICAgICBmaXJzdCA9IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGZkSW5kZXggPSBieXRlc1twb3MrK107XG4gICAgICAgICAgICBjb25zdCBuZXh0ID0gYnl0ZXNbcG9zXSA8PCA4IHwgYnl0ZXNbcG9zICsgMV07XG5cbiAgICAgICAgICAgIGZvciAobGV0IGogPSBmaXJzdDsgaiA8IG5leHQ7ICsraikge1xuICAgICAgICAgICAgICBmZFNlbGVjdC5wdXNoKGZkSW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHBvcyArPSAyO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBwYXJzZUZEU2VsZWN0OiBVbmtub3duIGZvcm1hdCBcIiR7Zm9ybWF0fVwiLmApO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmRTZWxlY3QubGVuZ3RoICE9PSBsZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwicGFyc2VGRFNlbGVjdDogSW52YWxpZCBmb250IGRhdGEuXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IENGRkZEU2VsZWN0KGZvcm1hdCwgZmRTZWxlY3QpO1xuICAgIH1cblxuICB9XG5cbiAgcmV0dXJuIENGRlBhcnNlcjtcbn0oKTtcblxuZXhwb3J0cy5DRkZQYXJzZXIgPSBDRkZQYXJzZXI7XG5cbmNsYXNzIENGRiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaGVhZGVyID0gbnVsbDtcbiAgICB0aGlzLm5hbWVzID0gW107XG4gICAgdGhpcy50b3BEaWN0ID0gbnVsbDtcbiAgICB0aGlzLnN0cmluZ3MgPSBuZXcgQ0ZGU3RyaW5ncygpO1xuICAgIHRoaXMuZ2xvYmFsU3VickluZGV4ID0gbnVsbDtcbiAgICB0aGlzLmVuY29kaW5nID0gbnVsbDtcbiAgICB0aGlzLmNoYXJzZXQgPSBudWxsO1xuICAgIHRoaXMuY2hhclN0cmluZ3MgPSBudWxsO1xuICAgIHRoaXMuZmRBcnJheSA9IFtdO1xuICAgIHRoaXMuZmRTZWxlY3QgPSBudWxsO1xuICAgIHRoaXMuaXNDSURGb250ID0gZmFsc2U7XG4gIH1cblxuICBkdXBsaWNhdGVGaXJzdEdseXBoKCkge1xuICAgIGlmICh0aGlzLmNoYXJTdHJpbmdzLmNvdW50ID49IDY1NTM1KSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJOb3QgZW5vdWdoIHNwYWNlIGluIGNoYXJzdHJpbmdzIHRvIGR1cGxpY2F0ZSBmaXJzdCBnbHlwaC5cIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZ2x5cGhaZXJvID0gdGhpcy5jaGFyU3RyaW5ncy5nZXQoMCk7XG4gICAgdGhpcy5jaGFyU3RyaW5ncy5hZGQoZ2x5cGhaZXJvKTtcblxuICAgIGlmICh0aGlzLmlzQ0lERm9udCkge1xuICAgICAgdGhpcy5mZFNlbGVjdC5mZFNlbGVjdC5wdXNoKHRoaXMuZmRTZWxlY3QuZmRTZWxlY3RbMF0pO1xuICAgIH1cbiAgfVxuXG4gIGhhc0dseXBoSWQoaWQpIHtcbiAgICBpZiAoaWQgPCAwIHx8IGlkID49IHRoaXMuY2hhclN0cmluZ3MuY291bnQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBnbHlwaCA9IHRoaXMuY2hhclN0cmluZ3MuZ2V0KGlkKTtcbiAgICByZXR1cm4gZ2x5cGgubGVuZ3RoID4gMDtcbiAgfVxuXG59XG5cbmV4cG9ydHMuQ0ZGID0gQ0ZGO1xuXG5jbGFzcyBDRkZIZWFkZXIge1xuICBjb25zdHJ1Y3RvcihtYWpvciwgbWlub3IsIGhkclNpemUsIG9mZlNpemUpIHtcbiAgICB0aGlzLm1ham9yID0gbWFqb3I7XG4gICAgdGhpcy5taW5vciA9IG1pbm9yO1xuICAgIHRoaXMuaGRyU2l6ZSA9IGhkclNpemU7XG4gICAgdGhpcy5vZmZTaXplID0gb2ZmU2l6ZTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuQ0ZGSGVhZGVyID0gQ0ZGSGVhZGVyO1xuXG5jbGFzcyBDRkZTdHJpbmdzIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zdHJpbmdzID0gW107XG4gIH1cblxuICBnZXQoaW5kZXgpIHtcbiAgICBpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8PSBOVU1fU1RBTkRBUkRfQ0ZGX1NUUklOR1MgLSAxKSB7XG4gICAgICByZXR1cm4gQ0ZGU3RhbmRhcmRTdHJpbmdzW2luZGV4XTtcbiAgICB9XG5cbiAgICBpZiAoaW5kZXggLSBOVU1fU1RBTkRBUkRfQ0ZGX1NUUklOR1MgPD0gdGhpcy5zdHJpbmdzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RyaW5nc1tpbmRleCAtIE5VTV9TVEFOREFSRF9DRkZfU1RSSU5HU107XG4gICAgfVxuXG4gICAgcmV0dXJuIENGRlN0YW5kYXJkU3RyaW5nc1swXTtcbiAgfVxuXG4gIGdldFNJRChzdHIpIHtcbiAgICBsZXQgaW5kZXggPSBDRkZTdGFuZGFyZFN0cmluZ3MuaW5kZXhPZihzdHIpO1xuXG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIGluZGV4ID0gdGhpcy5zdHJpbmdzLmluZGV4T2Yoc3RyKTtcblxuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHJldHVybiBpbmRleCArIE5VTV9TVEFOREFSRF9DRkZfU1RSSU5HUztcbiAgICB9XG5cbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICBhZGQodmFsdWUpIHtcbiAgICB0aGlzLnN0cmluZ3MucHVzaCh2YWx1ZSk7XG4gIH1cblxuICBnZXQgY291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RyaW5ncy5sZW5ndGg7XG4gIH1cblxufVxuXG5leHBvcnRzLkNGRlN0cmluZ3MgPSBDRkZTdHJpbmdzO1xuXG5jbGFzcyBDRkZJbmRleCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMub2JqZWN0cyA9IFtdO1xuICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgfVxuXG4gIGFkZChkYXRhKSB7XG4gICAgdGhpcy5sZW5ndGggKz0gZGF0YS5sZW5ndGg7XG4gICAgdGhpcy5vYmplY3RzLnB1c2goZGF0YSk7XG4gIH1cblxuICBzZXQoaW5kZXgsIGRhdGEpIHtcbiAgICB0aGlzLmxlbmd0aCArPSBkYXRhLmxlbmd0aCAtIHRoaXMub2JqZWN0c1tpbmRleF0ubGVuZ3RoO1xuICAgIHRoaXMub2JqZWN0c1tpbmRleF0gPSBkYXRhO1xuICB9XG5cbiAgZ2V0KGluZGV4KSB7XG4gICAgcmV0dXJuIHRoaXMub2JqZWN0c1tpbmRleF07XG4gIH1cblxuICBnZXQgY291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMub2JqZWN0cy5sZW5ndGg7XG4gIH1cblxufVxuXG5leHBvcnRzLkNGRkluZGV4ID0gQ0ZGSW5kZXg7XG5cbmNsYXNzIENGRkRpY3Qge1xuICBjb25zdHJ1Y3Rvcih0YWJsZXMsIHN0cmluZ3MpIHtcbiAgICB0aGlzLmtleVRvTmFtZU1hcCA9IHRhYmxlcy5rZXlUb05hbWVNYXA7XG4gICAgdGhpcy5uYW1lVG9LZXlNYXAgPSB0YWJsZXMubmFtZVRvS2V5TWFwO1xuICAgIHRoaXMuZGVmYXVsdHMgPSB0YWJsZXMuZGVmYXVsdHM7XG4gICAgdGhpcy50eXBlcyA9IHRhYmxlcy50eXBlcztcbiAgICB0aGlzLm9wY29kZXMgPSB0YWJsZXMub3Bjb2RlcztcbiAgICB0aGlzLm9yZGVyID0gdGFibGVzLm9yZGVyO1xuICAgIHRoaXMuc3RyaW5ncyA9IHN0cmluZ3M7XG4gICAgdGhpcy52YWx1ZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB9XG5cbiAgc2V0QnlLZXkoa2V5LCB2YWx1ZSkge1xuICAgIGlmICghKGtleSBpbiB0aGlzLmtleVRvTmFtZU1hcCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZUxlbmd0aCA9IHZhbHVlLmxlbmd0aDtcblxuICAgIGlmICh2YWx1ZUxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZUxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoaXNOYU4odmFsdWVbaV0pKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKSgnSW52YWxpZCBDRkZEaWN0IHZhbHVlOiBcIicgKyB2YWx1ZSArICdcIiBmb3Iga2V5IFwiJyArIGtleSArICdcIi4nKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZSA9IHRoaXMudHlwZXNba2V5XTtcblxuICAgIGlmICh0eXBlID09PSBcIm51bVwiIHx8IHR5cGUgPT09IFwic2lkXCIgfHwgdHlwZSA9PT0gXCJvZmZzZXRcIikge1xuICAgICAgdmFsdWUgPSB2YWx1ZVswXTtcbiAgICB9XG5cbiAgICB0aGlzLnZhbHVlc1trZXldID0gdmFsdWU7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzZXRCeU5hbWUobmFtZSwgdmFsdWUpIHtcbiAgICBpZiAoIShuYW1lIGluIHRoaXMubmFtZVRvS2V5TWFwKSkge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBJbnZhbGlkIGRpY3Rpb25hcnkgbmFtZSBcIiR7bmFtZX1cImApO1xuICAgIH1cblxuICAgIHRoaXMudmFsdWVzW3RoaXMubmFtZVRvS2V5TWFwW25hbWVdXSA9IHZhbHVlO1xuICB9XG5cbiAgaGFzTmFtZShuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMubmFtZVRvS2V5TWFwW25hbWVdIGluIHRoaXMudmFsdWVzO1xuICB9XG5cbiAgZ2V0QnlOYW1lKG5hbWUpIHtcbiAgICBpZiAoIShuYW1lIGluIHRoaXMubmFtZVRvS2V5TWFwKSkge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBJbnZhbGlkIGRpY3Rpb25hcnkgbmFtZSAke25hbWV9XCJgKTtcbiAgICB9XG5cbiAgICBjb25zdCBrZXkgPSB0aGlzLm5hbWVUb0tleU1hcFtuYW1lXTtcblxuICAgIGlmICghKGtleSBpbiB0aGlzLnZhbHVlcykpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRzW2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudmFsdWVzW2tleV07XG4gIH1cblxuICByZW1vdmVCeU5hbWUobmFtZSkge1xuICAgIGRlbGV0ZSB0aGlzLnZhbHVlc1t0aGlzLm5hbWVUb0tleU1hcFtuYW1lXV07XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlVGFibGVzKGxheW91dCkge1xuICAgIGNvbnN0IHRhYmxlcyA9IHtcbiAgICAgIGtleVRvTmFtZU1hcDoge30sXG4gICAgICBuYW1lVG9LZXlNYXA6IHt9LFxuICAgICAgZGVmYXVsdHM6IHt9LFxuICAgICAgdHlwZXM6IHt9LFxuICAgICAgb3Bjb2Rlczoge30sXG4gICAgICBvcmRlcjogW11cbiAgICB9O1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gbGF5b3V0Lmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgIGNvbnN0IGVudHJ5ID0gbGF5b3V0W2ldO1xuICAgICAgY29uc3Qga2V5ID0gQXJyYXkuaXNBcnJheShlbnRyeVswXSkgPyAoZW50cnlbMF1bMF0gPDwgOCkgKyBlbnRyeVswXVsxXSA6IGVudHJ5WzBdO1xuICAgICAgdGFibGVzLmtleVRvTmFtZU1hcFtrZXldID0gZW50cnlbMV07XG4gICAgICB0YWJsZXMubmFtZVRvS2V5TWFwW2VudHJ5WzFdXSA9IGtleTtcbiAgICAgIHRhYmxlcy50eXBlc1trZXldID0gZW50cnlbMl07XG4gICAgICB0YWJsZXMuZGVmYXVsdHNba2V5XSA9IGVudHJ5WzNdO1xuICAgICAgdGFibGVzLm9wY29kZXNba2V5XSA9IEFycmF5LmlzQXJyYXkoZW50cnlbMF0pID8gZW50cnlbMF0gOiBbZW50cnlbMF1dO1xuICAgICAgdGFibGVzLm9yZGVyLnB1c2goa2V5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGFibGVzO1xuICB9XG5cbn1cblxuY29uc3QgQ0ZGVG9wRGljdCA9IGZ1bmN0aW9uIENGRlRvcERpY3RDbG9zdXJlKCkge1xuICBjb25zdCBsYXlvdXQgPSBbW1sxMiwgMzBdLCBcIlJPU1wiLCBbXCJzaWRcIiwgXCJzaWRcIiwgXCJudW1cIl0sIG51bGxdLCBbWzEyLCAyMF0sIFwiU3ludGhldGljQmFzZVwiLCBcIm51bVwiLCBudWxsXSwgWzAsIFwidmVyc2lvblwiLCBcInNpZFwiLCBudWxsXSwgWzEsIFwiTm90aWNlXCIsIFwic2lkXCIsIG51bGxdLCBbWzEyLCAwXSwgXCJDb3B5cmlnaHRcIiwgXCJzaWRcIiwgbnVsbF0sIFsyLCBcIkZ1bGxOYW1lXCIsIFwic2lkXCIsIG51bGxdLCBbMywgXCJGYW1pbHlOYW1lXCIsIFwic2lkXCIsIG51bGxdLCBbNCwgXCJXZWlnaHRcIiwgXCJzaWRcIiwgbnVsbF0sIFtbMTIsIDFdLCBcImlzRml4ZWRQaXRjaFwiLCBcIm51bVwiLCAwXSwgW1sxMiwgMl0sIFwiSXRhbGljQW5nbGVcIiwgXCJudW1cIiwgMF0sIFtbMTIsIDNdLCBcIlVuZGVybGluZVBvc2l0aW9uXCIsIFwibnVtXCIsIC0xMDBdLCBbWzEyLCA0XSwgXCJVbmRlcmxpbmVUaGlja25lc3NcIiwgXCJudW1cIiwgNTBdLCBbWzEyLCA1XSwgXCJQYWludFR5cGVcIiwgXCJudW1cIiwgMF0sIFtbMTIsIDZdLCBcIkNoYXJzdHJpbmdUeXBlXCIsIFwibnVtXCIsIDJdLCBbWzEyLCA3XSwgXCJGb250TWF0cml4XCIsIFtcIm51bVwiLCBcIm51bVwiLCBcIm51bVwiLCBcIm51bVwiLCBcIm51bVwiLCBcIm51bVwiXSwgWzAuMDAxLCAwLCAwLCAwLjAwMSwgMCwgMF1dLCBbMTMsIFwiVW5pcXVlSURcIiwgXCJudW1cIiwgbnVsbF0sIFs1LCBcIkZvbnRCQm94XCIsIFtcIm51bVwiLCBcIm51bVwiLCBcIm51bVwiLCBcIm51bVwiXSwgWzAsIDAsIDAsIDBdXSwgW1sxMiwgOF0sIFwiU3Ryb2tlV2lkdGhcIiwgXCJudW1cIiwgMF0sIFsxNCwgXCJYVUlEXCIsIFwiYXJyYXlcIiwgbnVsbF0sIFsxNSwgXCJjaGFyc2V0XCIsIFwib2Zmc2V0XCIsIDBdLCBbMTYsIFwiRW5jb2RpbmdcIiwgXCJvZmZzZXRcIiwgMF0sIFsxNywgXCJDaGFyU3RyaW5nc1wiLCBcIm9mZnNldFwiLCAwXSwgWzE4LCBcIlByaXZhdGVcIiwgW1wib2Zmc2V0XCIsIFwib2Zmc2V0XCJdLCBudWxsXSwgW1sxMiwgMjFdLCBcIlBvc3RTY3JpcHRcIiwgXCJzaWRcIiwgbnVsbF0sIFtbMTIsIDIyXSwgXCJCYXNlRm9udE5hbWVcIiwgXCJzaWRcIiwgbnVsbF0sIFtbMTIsIDIzXSwgXCJCYXNlRm9udEJsZW5kXCIsIFwiZGVsdGFcIiwgbnVsbF0sIFtbMTIsIDMxXSwgXCJDSURGb250VmVyc2lvblwiLCBcIm51bVwiLCAwXSwgW1sxMiwgMzJdLCBcIkNJREZvbnRSZXZpc2lvblwiLCBcIm51bVwiLCAwXSwgW1sxMiwgMzNdLCBcIkNJREZvbnRUeXBlXCIsIFwibnVtXCIsIDBdLCBbWzEyLCAzNF0sIFwiQ0lEQ291bnRcIiwgXCJudW1cIiwgODcyMF0sIFtbMTIsIDM1XSwgXCJVSURCYXNlXCIsIFwibnVtXCIsIG51bGxdLCBbWzEyLCAzN10sIFwiRkRTZWxlY3RcIiwgXCJvZmZzZXRcIiwgbnVsbF0sIFtbMTIsIDM2XSwgXCJGREFycmF5XCIsIFwib2Zmc2V0XCIsIG51bGxdLCBbWzEyLCAzOF0sIFwiRm9udE5hbWVcIiwgXCJzaWRcIiwgbnVsbF1dO1xuICBsZXQgdGFibGVzID0gbnVsbDtcblxuICBjbGFzcyBDRkZUb3BEaWN0IGV4dGVuZHMgQ0ZGRGljdCB7XG4gICAgY29uc3RydWN0b3Ioc3RyaW5ncykge1xuICAgICAgaWYgKHRhYmxlcyA9PT0gbnVsbCkge1xuICAgICAgICB0YWJsZXMgPSBDRkZEaWN0LmNyZWF0ZVRhYmxlcyhsYXlvdXQpO1xuICAgICAgfVxuXG4gICAgICBzdXBlcih0YWJsZXMsIHN0cmluZ3MpO1xuICAgICAgdGhpcy5wcml2YXRlRGljdCA9IG51bGw7XG4gICAgfVxuXG4gIH1cblxuICByZXR1cm4gQ0ZGVG9wRGljdDtcbn0oKTtcblxuZXhwb3J0cy5DRkZUb3BEaWN0ID0gQ0ZGVG9wRGljdDtcblxuY29uc3QgQ0ZGUHJpdmF0ZURpY3QgPSBmdW5jdGlvbiBDRkZQcml2YXRlRGljdENsb3N1cmUoKSB7XG4gIGNvbnN0IGxheW91dCA9IFtbNiwgXCJCbHVlVmFsdWVzXCIsIFwiZGVsdGFcIiwgbnVsbF0sIFs3LCBcIk90aGVyQmx1ZXNcIiwgXCJkZWx0YVwiLCBudWxsXSwgWzgsIFwiRmFtaWx5Qmx1ZXNcIiwgXCJkZWx0YVwiLCBudWxsXSwgWzksIFwiRmFtaWx5T3RoZXJCbHVlc1wiLCBcImRlbHRhXCIsIG51bGxdLCBbWzEyLCA5XSwgXCJCbHVlU2NhbGVcIiwgXCJudW1cIiwgMC4wMzk2MjVdLCBbWzEyLCAxMF0sIFwiQmx1ZVNoaWZ0XCIsIFwibnVtXCIsIDddLCBbWzEyLCAxMV0sIFwiQmx1ZUZ1enpcIiwgXCJudW1cIiwgMV0sIFsxMCwgXCJTdGRIV1wiLCBcIm51bVwiLCBudWxsXSwgWzExLCBcIlN0ZFZXXCIsIFwibnVtXCIsIG51bGxdLCBbWzEyLCAxMl0sIFwiU3RlbVNuYXBIXCIsIFwiZGVsdGFcIiwgbnVsbF0sIFtbMTIsIDEzXSwgXCJTdGVtU25hcFZcIiwgXCJkZWx0YVwiLCBudWxsXSwgW1sxMiwgMTRdLCBcIkZvcmNlQm9sZFwiLCBcIm51bVwiLCAwXSwgW1sxMiwgMTddLCBcIkxhbmd1YWdlR3JvdXBcIiwgXCJudW1cIiwgMF0sIFtbMTIsIDE4XSwgXCJFeHBhbnNpb25GYWN0b3JcIiwgXCJudW1cIiwgMC4wNl0sIFtbMTIsIDE5XSwgXCJpbml0aWFsUmFuZG9tU2VlZFwiLCBcIm51bVwiLCAwXSwgWzIwLCBcImRlZmF1bHRXaWR0aFhcIiwgXCJudW1cIiwgMF0sIFsyMSwgXCJub21pbmFsV2lkdGhYXCIsIFwibnVtXCIsIDBdLCBbMTksIFwiU3VicnNcIiwgXCJvZmZzZXRcIiwgbnVsbF1dO1xuICBsZXQgdGFibGVzID0gbnVsbDtcblxuICBjbGFzcyBDRkZQcml2YXRlRGljdCBleHRlbmRzIENGRkRpY3Qge1xuICAgIGNvbnN0cnVjdG9yKHN0cmluZ3MpIHtcbiAgICAgIGlmICh0YWJsZXMgPT09IG51bGwpIHtcbiAgICAgICAgdGFibGVzID0gQ0ZGRGljdC5jcmVhdGVUYWJsZXMobGF5b3V0KTtcbiAgICAgIH1cblxuICAgICAgc3VwZXIodGFibGVzLCBzdHJpbmdzKTtcbiAgICAgIHRoaXMuc3VicnNJbmRleCA9IG51bGw7XG4gICAgfVxuXG4gIH1cblxuICByZXR1cm4gQ0ZGUHJpdmF0ZURpY3Q7XG59KCk7XG5cbmV4cG9ydHMuQ0ZGUHJpdmF0ZURpY3QgPSBDRkZQcml2YXRlRGljdDtcbmNvbnN0IENGRkNoYXJzZXRQcmVkZWZpbmVkVHlwZXMgPSB7XG4gIElTT19BRE9CRTogMCxcbiAgRVhQRVJUOiAxLFxuICBFWFBFUlRfU1VCU0VUOiAyXG59O1xuXG5jbGFzcyBDRkZDaGFyc2V0IHtcbiAgY29uc3RydWN0b3IocHJlZGVmaW5lZCwgZm9ybWF0LCBjaGFyc2V0LCByYXcpIHtcbiAgICB0aGlzLnByZWRlZmluZWQgPSBwcmVkZWZpbmVkO1xuICAgIHRoaXMuZm9ybWF0ID0gZm9ybWF0O1xuICAgIHRoaXMuY2hhcnNldCA9IGNoYXJzZXQ7XG4gICAgdGhpcy5yYXcgPSByYXc7XG4gIH1cblxufVxuXG5leHBvcnRzLkNGRkNoYXJzZXQgPSBDRkZDaGFyc2V0O1xuXG5jbGFzcyBDRkZFbmNvZGluZyB7XG4gIGNvbnN0cnVjdG9yKHByZWRlZmluZWQsIGZvcm1hdCwgZW5jb2RpbmcsIHJhdykge1xuICAgIHRoaXMucHJlZGVmaW5lZCA9IHByZWRlZmluZWQ7XG4gICAgdGhpcy5mb3JtYXQgPSBmb3JtYXQ7XG4gICAgdGhpcy5lbmNvZGluZyA9IGVuY29kaW5nO1xuICAgIHRoaXMucmF3ID0gcmF3O1xuICB9XG5cbn1cblxuY2xhc3MgQ0ZGRkRTZWxlY3Qge1xuICBjb25zdHJ1Y3Rvcihmb3JtYXQsIGZkU2VsZWN0KSB7XG4gICAgdGhpcy5mb3JtYXQgPSBmb3JtYXQ7XG4gICAgdGhpcy5mZFNlbGVjdCA9IGZkU2VsZWN0O1xuICB9XG5cbiAgZ2V0RkRJbmRleChnbHlwaEluZGV4KSB7XG4gICAgaWYgKGdseXBoSW5kZXggPCAwIHx8IGdseXBoSW5kZXggPj0gdGhpcy5mZFNlbGVjdC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5mZFNlbGVjdFtnbHlwaEluZGV4XTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuQ0ZGRkRTZWxlY3QgPSBDRkZGRFNlbGVjdDtcblxuY2xhc3MgQ0ZGT2Zmc2V0VHJhY2tlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMub2Zmc2V0cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIH1cblxuICBpc1RyYWNraW5nKGtleSkge1xuICAgIHJldHVybiBrZXkgaW4gdGhpcy5vZmZzZXRzO1xuICB9XG5cbiAgdHJhY2soa2V5LCBsb2NhdGlvbikge1xuICAgIGlmIChrZXkgaW4gdGhpcy5vZmZzZXRzKSB7XG4gICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYEFscmVhZHkgdHJhY2tpbmcgbG9jYXRpb24gb2YgJHtrZXl9YCk7XG4gICAgfVxuXG4gICAgdGhpcy5vZmZzZXRzW2tleV0gPSBsb2NhdGlvbjtcbiAgfVxuXG4gIG9mZnNldCh2YWx1ZSkge1xuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMub2Zmc2V0cykge1xuICAgICAgdGhpcy5vZmZzZXRzW2tleV0gKz0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgc2V0RW50cnlMb2NhdGlvbihrZXksIHZhbHVlcywgb3V0cHV0KSB7XG4gICAgaWYgKCEoa2V5IGluIHRoaXMub2Zmc2V0cykpIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgTm90IHRyYWNraW5nIGxvY2F0aW9uIG9mICR7a2V5fWApO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGEgPSBvdXRwdXQuZGF0YTtcbiAgICBjb25zdCBkYXRhT2Zmc2V0ID0gdGhpcy5vZmZzZXRzW2tleV07XG4gICAgY29uc3Qgc2l6ZSA9IDU7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSB2YWx1ZXMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgY29uc3Qgb2Zmc2V0MCA9IGkgKiBzaXplICsgZGF0YU9mZnNldDtcbiAgICAgIGNvbnN0IG9mZnNldDEgPSBvZmZzZXQwICsgMTtcbiAgICAgIGNvbnN0IG9mZnNldDIgPSBvZmZzZXQwICsgMjtcbiAgICAgIGNvbnN0IG9mZnNldDMgPSBvZmZzZXQwICsgMztcbiAgICAgIGNvbnN0IG9mZnNldDQgPSBvZmZzZXQwICsgNDtcblxuICAgICAgaWYgKGRhdGFbb2Zmc2V0MF0gIT09IDB4MWQgfHwgZGF0YVtvZmZzZXQxXSAhPT0gMCB8fCBkYXRhW29mZnNldDJdICE9PSAwIHx8IGRhdGFbb2Zmc2V0M10gIT09IDAgfHwgZGF0YVtvZmZzZXQ0XSAhPT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJ3cml0aW5nIHRvIGFuIG9mZnNldCB0aGF0IGlzIG5vdCBlbXB0eVwiKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdmFsdWUgPSB2YWx1ZXNbaV07XG4gICAgICBkYXRhW29mZnNldDBdID0gMHgxZDtcbiAgICAgIGRhdGFbb2Zmc2V0MV0gPSB2YWx1ZSA+PiAyNCAmIDB4ZmY7XG4gICAgICBkYXRhW29mZnNldDJdID0gdmFsdWUgPj4gMTYgJiAweGZmO1xuICAgICAgZGF0YVtvZmZzZXQzXSA9IHZhbHVlID4+IDggJiAweGZmO1xuICAgICAgZGF0YVtvZmZzZXQ0XSA9IHZhbHVlICYgMHhmZjtcbiAgICB9XG4gIH1cblxufVxuXG5jbGFzcyBDRkZDb21waWxlciB7XG4gIGNvbnN0cnVjdG9yKGNmZikge1xuICAgIHRoaXMuY2ZmID0gY2ZmO1xuICB9XG5cbiAgY29tcGlsZSgpIHtcbiAgICBjb25zdCBjZmYgPSB0aGlzLmNmZjtcbiAgICBjb25zdCBvdXRwdXQgPSB7XG4gICAgICBkYXRhOiBbXSxcbiAgICAgIGxlbmd0aDogMCxcbiAgICAgIGFkZDogZnVuY3Rpb24gQ0ZGQ29tcGlsZXJfYWRkKGRhdGEpIHtcbiAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5kYXRhLmNvbmNhdChkYXRhKTtcbiAgICAgICAgdGhpcy5sZW5ndGggPSB0aGlzLmRhdGEubGVuZ3RoO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaGVhZGVyID0gdGhpcy5jb21waWxlSGVhZGVyKGNmZi5oZWFkZXIpO1xuICAgIG91dHB1dC5hZGQoaGVhZGVyKTtcbiAgICBjb25zdCBuYW1lSW5kZXggPSB0aGlzLmNvbXBpbGVOYW1lSW5kZXgoY2ZmLm5hbWVzKTtcbiAgICBvdXRwdXQuYWRkKG5hbWVJbmRleCk7XG5cbiAgICBpZiAoY2ZmLmlzQ0lERm9udCkge1xuICAgICAgaWYgKGNmZi50b3BEaWN0Lmhhc05hbWUoXCJGb250TWF0cml4XCIpKSB7XG4gICAgICAgIGNvbnN0IGJhc2UgPSBjZmYudG9wRGljdC5nZXRCeU5hbWUoXCJGb250TWF0cml4XCIpO1xuICAgICAgICBjZmYudG9wRGljdC5yZW1vdmVCeU5hbWUoXCJGb250TWF0cml4XCIpO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGNmZi5mZEFycmF5Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBzdWJEaWN0ID0gY2ZmLmZkQXJyYXlbaV07XG4gICAgICAgICAgbGV0IG1hdHJpeCA9IGJhc2Uuc2xpY2UoMCk7XG5cbiAgICAgICAgICBpZiAoc3ViRGljdC5oYXNOYW1lKFwiRm9udE1hdHJpeFwiKSkge1xuICAgICAgICAgICAgbWF0cml4ID0gX3V0aWwuVXRpbC50cmFuc2Zvcm0obWF0cml4LCBzdWJEaWN0LmdldEJ5TmFtZShcIkZvbnRNYXRyaXhcIikpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN1YkRpY3Quc2V0QnlOYW1lKFwiRm9udE1hdHJpeFwiLCBtYXRyaXgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgeHVpZCA9IGNmZi50b3BEaWN0LmdldEJ5TmFtZShcIlhVSURcIik7XG5cbiAgICBpZiAoeHVpZCAmJiB4dWlkLmxlbmd0aCA+IDE2KSB7XG4gICAgICBjZmYudG9wRGljdC5yZW1vdmVCeU5hbWUoXCJYVUlEXCIpO1xuICAgIH1cblxuICAgIGNmZi50b3BEaWN0LnNldEJ5TmFtZShcImNoYXJzZXRcIiwgMCk7XG4gICAgbGV0IGNvbXBpbGVkID0gdGhpcy5jb21waWxlVG9wRGljdHMoW2NmZi50b3BEaWN0XSwgb3V0cHV0Lmxlbmd0aCwgY2ZmLmlzQ0lERm9udCk7XG4gICAgb3V0cHV0LmFkZChjb21waWxlZC5vdXRwdXQpO1xuICAgIGNvbnN0IHRvcERpY3RUcmFja2VyID0gY29tcGlsZWQudHJhY2tlcnNbMF07XG4gICAgY29uc3Qgc3RyaW5nSW5kZXggPSB0aGlzLmNvbXBpbGVTdHJpbmdJbmRleChjZmYuc3RyaW5ncy5zdHJpbmdzKTtcbiAgICBvdXRwdXQuYWRkKHN0cmluZ0luZGV4KTtcbiAgICBjb25zdCBnbG9iYWxTdWJySW5kZXggPSB0aGlzLmNvbXBpbGVJbmRleChjZmYuZ2xvYmFsU3VickluZGV4KTtcbiAgICBvdXRwdXQuYWRkKGdsb2JhbFN1YnJJbmRleCk7XG5cbiAgICBpZiAoY2ZmLmVuY29kaW5nICYmIGNmZi50b3BEaWN0Lmhhc05hbWUoXCJFbmNvZGluZ1wiKSkge1xuICAgICAgaWYgKGNmZi5lbmNvZGluZy5wcmVkZWZpbmVkKSB7XG4gICAgICAgIHRvcERpY3RUcmFja2VyLnNldEVudHJ5TG9jYXRpb24oXCJFbmNvZGluZ1wiLCBbY2ZmLmVuY29kaW5nLmZvcm1hdF0sIG91dHB1dCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBlbmNvZGluZyA9IHRoaXMuY29tcGlsZUVuY29kaW5nKGNmZi5lbmNvZGluZyk7XG4gICAgICAgIHRvcERpY3RUcmFja2VyLnNldEVudHJ5TG9jYXRpb24oXCJFbmNvZGluZ1wiLCBbb3V0cHV0Lmxlbmd0aF0sIG91dHB1dCk7XG4gICAgICAgIG91dHB1dC5hZGQoZW5jb2RpbmcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNoYXJzZXQgPSB0aGlzLmNvbXBpbGVDaGFyc2V0KGNmZi5jaGFyc2V0LCBjZmYuY2hhclN0cmluZ3MuY291bnQsIGNmZi5zdHJpbmdzLCBjZmYuaXNDSURGb250KTtcbiAgICB0b3BEaWN0VHJhY2tlci5zZXRFbnRyeUxvY2F0aW9uKFwiY2hhcnNldFwiLCBbb3V0cHV0Lmxlbmd0aF0sIG91dHB1dCk7XG4gICAgb3V0cHV0LmFkZChjaGFyc2V0KTtcbiAgICBjb25zdCBjaGFyU3RyaW5ncyA9IHRoaXMuY29tcGlsZUNoYXJTdHJpbmdzKGNmZi5jaGFyU3RyaW5ncyk7XG4gICAgdG9wRGljdFRyYWNrZXIuc2V0RW50cnlMb2NhdGlvbihcIkNoYXJTdHJpbmdzXCIsIFtvdXRwdXQubGVuZ3RoXSwgb3V0cHV0KTtcbiAgICBvdXRwdXQuYWRkKGNoYXJTdHJpbmdzKTtcblxuICAgIGlmIChjZmYuaXNDSURGb250KSB7XG4gICAgICB0b3BEaWN0VHJhY2tlci5zZXRFbnRyeUxvY2F0aW9uKFwiRkRTZWxlY3RcIiwgW291dHB1dC5sZW5ndGhdLCBvdXRwdXQpO1xuICAgICAgY29uc3QgZmRTZWxlY3QgPSB0aGlzLmNvbXBpbGVGRFNlbGVjdChjZmYuZmRTZWxlY3QpO1xuICAgICAgb3V0cHV0LmFkZChmZFNlbGVjdCk7XG4gICAgICBjb21waWxlZCA9IHRoaXMuY29tcGlsZVRvcERpY3RzKGNmZi5mZEFycmF5LCBvdXRwdXQubGVuZ3RoLCB0cnVlKTtcbiAgICAgIHRvcERpY3RUcmFja2VyLnNldEVudHJ5TG9jYXRpb24oXCJGREFycmF5XCIsIFtvdXRwdXQubGVuZ3RoXSwgb3V0cHV0KTtcbiAgICAgIG91dHB1dC5hZGQoY29tcGlsZWQub3V0cHV0KTtcbiAgICAgIGNvbnN0IGZvbnREaWN0VHJhY2tlcnMgPSBjb21waWxlZC50cmFja2VycztcbiAgICAgIHRoaXMuY29tcGlsZVByaXZhdGVEaWN0cyhjZmYuZmRBcnJheSwgZm9udERpY3RUcmFja2Vycywgb3V0cHV0KTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbXBpbGVQcml2YXRlRGljdHMoW2NmZi50b3BEaWN0XSwgW3RvcERpY3RUcmFja2VyXSwgb3V0cHV0KTtcbiAgICBvdXRwdXQuYWRkKFswXSk7XG4gICAgcmV0dXJuIG91dHB1dC5kYXRhO1xuICB9XG5cbiAgZW5jb2RlTnVtYmVyKHZhbHVlKSB7XG4gICAgaWYgKE51bWJlci5pc0ludGVnZXIodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbmNvZGVJbnRlZ2VyKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5lbmNvZGVGbG9hdCh2YWx1ZSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IEVuY29kZUZsb2F0UmVnRXhwKCkge1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIkVuY29kZUZsb2F0UmVnRXhwXCIsIC9cXC4oXFxkKj8pKD86OXs1LDIwfXwwezUsMjB9KVxcZHswLDJ9KD86ZSguKyl8JCkvKTtcbiAgfVxuXG4gIGVuY29kZUZsb2F0KG51bSkge1xuICAgIGxldCB2YWx1ZSA9IG51bS50b1N0cmluZygpO1xuICAgIGNvbnN0IG0gPSBDRkZDb21waWxlci5FbmNvZGVGbG9hdFJlZ0V4cC5leGVjKHZhbHVlKTtcblxuICAgIGlmIChtKSB7XG4gICAgICBjb25zdCBlcHNpbG9uID0gcGFyc2VGbG9hdChcIjFlXCIgKyAoKG1bMl0gPyArbVsyXSA6IDApICsgbVsxXS5sZW5ndGgpKTtcbiAgICAgIHZhbHVlID0gKE1hdGgucm91bmQobnVtICogZXBzaWxvbikgLyBlcHNpbG9uKS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGxldCBuaWJibGVzID0gXCJcIjtcbiAgICBsZXQgaSwgaWk7XG5cbiAgICBmb3IgKGkgPSAwLCBpaSA9IHZhbHVlLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgIGNvbnN0IGEgPSB2YWx1ZVtpXTtcblxuICAgICAgaWYgKGEgPT09IFwiZVwiKSB7XG4gICAgICAgIG5pYmJsZXMgKz0gdmFsdWVbKytpXSA9PT0gXCItXCIgPyBcImNcIiA6IFwiYlwiO1xuICAgICAgfSBlbHNlIGlmIChhID09PSBcIi5cIikge1xuICAgICAgICBuaWJibGVzICs9IFwiYVwiO1xuICAgICAgfSBlbHNlIGlmIChhID09PSBcIi1cIikge1xuICAgICAgICBuaWJibGVzICs9IFwiZVwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmliYmxlcyArPSBhO1xuICAgICAgfVxuICAgIH1cblxuICAgIG5pYmJsZXMgKz0gbmliYmxlcy5sZW5ndGggJiAxID8gXCJmXCIgOiBcImZmXCI7XG4gICAgY29uc3Qgb3V0ID0gWzMwXTtcblxuICAgIGZvciAoaSA9IDAsIGlpID0gbmliYmxlcy5sZW5ndGg7IGkgPCBpaTsgaSArPSAyKSB7XG4gICAgICBvdXQucHVzaChwYXJzZUludChuaWJibGVzLnN1YnN0cmluZyhpLCBpICsgMiksIDE2KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIGVuY29kZUludGVnZXIodmFsdWUpIHtcbiAgICBsZXQgY29kZTtcblxuICAgIGlmICh2YWx1ZSA+PSAtMTA3ICYmIHZhbHVlIDw9IDEwNykge1xuICAgICAgY29kZSA9IFt2YWx1ZSArIDEzOV07XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA+PSAxMDggJiYgdmFsdWUgPD0gMTEzMSkge1xuICAgICAgdmFsdWUgLT0gMTA4O1xuICAgICAgY29kZSA9IFsodmFsdWUgPj4gOCkgKyAyNDcsIHZhbHVlICYgMHhmZl07XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA+PSAtMTEzMSAmJiB2YWx1ZSA8PSAtMTA4KSB7XG4gICAgICB2YWx1ZSA9IC12YWx1ZSAtIDEwODtcbiAgICAgIGNvZGUgPSBbKHZhbHVlID4+IDgpICsgMjUxLCB2YWx1ZSAmIDB4ZmZdO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPj0gLTMyNzY4ICYmIHZhbHVlIDw9IDMyNzY3KSB7XG4gICAgICBjb2RlID0gWzB4MWMsIHZhbHVlID4+IDggJiAweGZmLCB2YWx1ZSAmIDB4ZmZdO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb2RlID0gWzB4MWQsIHZhbHVlID4+IDI0ICYgMHhmZiwgdmFsdWUgPj4gMTYgJiAweGZmLCB2YWx1ZSA+PiA4ICYgMHhmZiwgdmFsdWUgJiAweGZmXTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29kZTtcbiAgfVxuXG4gIGNvbXBpbGVIZWFkZXIoaGVhZGVyKSB7XG4gICAgcmV0dXJuIFtoZWFkZXIubWFqb3IsIGhlYWRlci5taW5vciwgNCwgaGVhZGVyLm9mZlNpemVdO1xuICB9XG5cbiAgY29tcGlsZU5hbWVJbmRleChuYW1lcykge1xuICAgIGNvbnN0IG5hbWVJbmRleCA9IG5ldyBDRkZJbmRleCgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gbmFtZXMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgY29uc3QgbmFtZSA9IG5hbWVzW2ldO1xuICAgICAgY29uc3QgbGVuZ3RoID0gTWF0aC5taW4obmFtZS5sZW5ndGgsIDEyNyk7XG4gICAgICBsZXQgc2FuaXRpemVkTmFtZSA9IG5ldyBBcnJheShsZW5ndGgpO1xuXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxlbmd0aDsgaisrKSB7XG4gICAgICAgIGxldCBjaGFyID0gbmFtZVtqXTtcblxuICAgICAgICBpZiAoY2hhciA8IFwiIVwiIHx8IGNoYXIgPiBcIn5cIiB8fCBjaGFyID09PSBcIltcIiB8fCBjaGFyID09PSBcIl1cIiB8fCBjaGFyID09PSBcIihcIiB8fCBjaGFyID09PSBcIilcIiB8fCBjaGFyID09PSBcIntcIiB8fCBjaGFyID09PSBcIn1cIiB8fCBjaGFyID09PSBcIjxcIiB8fCBjaGFyID09PSBcIj5cIiB8fCBjaGFyID09PSBcIi9cIiB8fCBjaGFyID09PSBcIiVcIikge1xuICAgICAgICAgIGNoYXIgPSBcIl9cIjtcbiAgICAgICAgfVxuXG4gICAgICAgIHNhbml0aXplZE5hbWVbal0gPSBjaGFyO1xuICAgICAgfVxuXG4gICAgICBzYW5pdGl6ZWROYW1lID0gc2FuaXRpemVkTmFtZS5qb2luKFwiXCIpO1xuXG4gICAgICBpZiAoc2FuaXRpemVkTmFtZSA9PT0gXCJcIikge1xuICAgICAgICBzYW5pdGl6ZWROYW1lID0gXCJCYWRfRm9udF9OYW1lXCI7XG4gICAgICB9XG5cbiAgICAgIG5hbWVJbmRleC5hZGQoKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKHNhbml0aXplZE5hbWUpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jb21waWxlSW5kZXgobmFtZUluZGV4KTtcbiAgfVxuXG4gIGNvbXBpbGVUb3BEaWN0cyhkaWN0cywgbGVuZ3RoLCByZW1vdmVDaWRLZXlzKSB7XG4gICAgY29uc3QgZm9udERpY3RUcmFja2VycyA9IFtdO1xuICAgIGxldCBmZEFycmF5SW5kZXggPSBuZXcgQ0ZGSW5kZXgoKTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGRpY3RzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgIGNvbnN0IGZvbnREaWN0ID0gZGljdHNbaV07XG5cbiAgICAgIGlmIChyZW1vdmVDaWRLZXlzKSB7XG4gICAgICAgIGZvbnREaWN0LnJlbW92ZUJ5TmFtZShcIkNJREZvbnRWZXJzaW9uXCIpO1xuICAgICAgICBmb250RGljdC5yZW1vdmVCeU5hbWUoXCJDSURGb250UmV2aXNpb25cIik7XG4gICAgICAgIGZvbnREaWN0LnJlbW92ZUJ5TmFtZShcIkNJREZvbnRUeXBlXCIpO1xuICAgICAgICBmb250RGljdC5yZW1vdmVCeU5hbWUoXCJDSURDb3VudFwiKTtcbiAgICAgICAgZm9udERpY3QucmVtb3ZlQnlOYW1lKFwiVUlEQmFzZVwiKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm9udERpY3RUcmFja2VyID0gbmV3IENGRk9mZnNldFRyYWNrZXIoKTtcbiAgICAgIGNvbnN0IGZvbnREaWN0RGF0YSA9IHRoaXMuY29tcGlsZURpY3QoZm9udERpY3QsIGZvbnREaWN0VHJhY2tlcik7XG4gICAgICBmb250RGljdFRyYWNrZXJzLnB1c2goZm9udERpY3RUcmFja2VyKTtcbiAgICAgIGZkQXJyYXlJbmRleC5hZGQoZm9udERpY3REYXRhKTtcbiAgICAgIGZvbnREaWN0VHJhY2tlci5vZmZzZXQobGVuZ3RoKTtcbiAgICB9XG5cbiAgICBmZEFycmF5SW5kZXggPSB0aGlzLmNvbXBpbGVJbmRleChmZEFycmF5SW5kZXgsIGZvbnREaWN0VHJhY2tlcnMpO1xuICAgIHJldHVybiB7XG4gICAgICB0cmFja2VyczogZm9udERpY3RUcmFja2VycyxcbiAgICAgIG91dHB1dDogZmRBcnJheUluZGV4XG4gICAgfTtcbiAgfVxuXG4gIGNvbXBpbGVQcml2YXRlRGljdHMoZGljdHMsIHRyYWNrZXJzLCBvdXRwdXQpIHtcbiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBkaWN0cy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICBjb25zdCBmb250RGljdCA9IGRpY3RzW2ldO1xuICAgICAgY29uc3QgcHJpdmF0ZURpY3QgPSBmb250RGljdC5wcml2YXRlRGljdDtcblxuICAgICAgaWYgKCFwcml2YXRlRGljdCB8fCAhZm9udERpY3QuaGFzTmFtZShcIlByaXZhdGVcIikpIHtcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiVGhlcmUgbXVzdCBiZSBhIHByaXZhdGUgZGljdGlvbmFyeS5cIik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByaXZhdGVEaWN0VHJhY2tlciA9IG5ldyBDRkZPZmZzZXRUcmFja2VyKCk7XG4gICAgICBjb25zdCBwcml2YXRlRGljdERhdGEgPSB0aGlzLmNvbXBpbGVEaWN0KHByaXZhdGVEaWN0LCBwcml2YXRlRGljdFRyYWNrZXIpO1xuICAgICAgbGV0IG91dHB1dExlbmd0aCA9IG91dHB1dC5sZW5ndGg7XG4gICAgICBwcml2YXRlRGljdFRyYWNrZXIub2Zmc2V0KG91dHB1dExlbmd0aCk7XG5cbiAgICAgIGlmICghcHJpdmF0ZURpY3REYXRhLmxlbmd0aCkge1xuICAgICAgICBvdXRwdXRMZW5ndGggPSAwO1xuICAgICAgfVxuXG4gICAgICB0cmFja2Vyc1tpXS5zZXRFbnRyeUxvY2F0aW9uKFwiUHJpdmF0ZVwiLCBbcHJpdmF0ZURpY3REYXRhLmxlbmd0aCwgb3V0cHV0TGVuZ3RoXSwgb3V0cHV0KTtcbiAgICAgIG91dHB1dC5hZGQocHJpdmF0ZURpY3REYXRhKTtcblxuICAgICAgaWYgKHByaXZhdGVEaWN0LnN1YnJzSW5kZXggJiYgcHJpdmF0ZURpY3QuaGFzTmFtZShcIlN1YnJzXCIpKSB7XG4gICAgICAgIGNvbnN0IHN1YnJzID0gdGhpcy5jb21waWxlSW5kZXgocHJpdmF0ZURpY3Quc3VicnNJbmRleCk7XG4gICAgICAgIHByaXZhdGVEaWN0VHJhY2tlci5zZXRFbnRyeUxvY2F0aW9uKFwiU3VicnNcIiwgW3ByaXZhdGVEaWN0RGF0YS5sZW5ndGhdLCBvdXRwdXQpO1xuICAgICAgICBvdXRwdXQuYWRkKHN1YnJzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb21waWxlRGljdChkaWN0LCBvZmZzZXRUcmFja2VyKSB7XG4gICAgbGV0IG91dCA9IFtdO1xuICAgIGNvbnN0IG9yZGVyID0gZGljdC5vcmRlcjtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXIubGVuZ3RoOyArK2kpIHtcbiAgICAgIGNvbnN0IGtleSA9IG9yZGVyW2ldO1xuXG4gICAgICBpZiAoIShrZXkgaW4gZGljdC52YWx1ZXMpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBsZXQgdmFsdWVzID0gZGljdC52YWx1ZXNba2V5XTtcbiAgICAgIGxldCB0eXBlcyA9IGRpY3QudHlwZXNba2V5XTtcblxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHR5cGVzKSkge1xuICAgICAgICB0eXBlcyA9IFt0eXBlc107XG4gICAgICB9XG5cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSB7XG4gICAgICAgIHZhbHVlcyA9IFt2YWx1ZXNdO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgaiA9IDAsIGpqID0gdHlwZXMubGVuZ3RoOyBqIDwgamo7ICsraikge1xuICAgICAgICBjb25zdCB0eXBlID0gdHlwZXNbal07XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdmFsdWVzW2pdO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgXCJudW1cIjpcbiAgICAgICAgICBjYXNlIFwic2lkXCI6XG4gICAgICAgICAgICBvdXQgPSBvdXQuY29uY2F0KHRoaXMuZW5jb2RlTnVtYmVyKHZhbHVlKSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJvZmZzZXRcIjpcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBkaWN0LmtleVRvTmFtZU1hcFtrZXldO1xuXG4gICAgICAgICAgICBpZiAoIW9mZnNldFRyYWNrZXIuaXNUcmFja2luZyhuYW1lKSkge1xuICAgICAgICAgICAgICBvZmZzZXRUcmFja2VyLnRyYWNrKG5hbWUsIG91dC5sZW5ndGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvdXQgPSBvdXQuY29uY2F0KFsweDFkLCAwLCAwLCAwLCAwXSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgICAgIGNhc2UgXCJkZWx0YVwiOlxuICAgICAgICAgICAgb3V0ID0gb3V0LmNvbmNhdCh0aGlzLmVuY29kZU51bWJlcih2YWx1ZSkpO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBrID0gMSwga2sgPSB2YWx1ZXMubGVuZ3RoOyBrIDwga2s7ICsraykge1xuICAgICAgICAgICAgICBvdXQgPSBvdXQuY29uY2F0KHRoaXMuZW5jb2RlTnVtYmVyKHZhbHVlc1trXSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYFVua25vd24gZGF0YSB0eXBlIG9mICR7dHlwZX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBvdXQgPSBvdXQuY29uY2F0KGRpY3Qub3Bjb2Rlc1trZXldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgY29tcGlsZVN0cmluZ0luZGV4KHN0cmluZ3MpIHtcbiAgICBjb25zdCBzdHJpbmdJbmRleCA9IG5ldyBDRkZJbmRleCgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gc3RyaW5ncy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICBzdHJpbmdJbmRleC5hZGQoKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKHN0cmluZ3NbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jb21waWxlSW5kZXgoc3RyaW5nSW5kZXgpO1xuICB9XG5cbiAgY29tcGlsZUdsb2JhbFN1YnJJbmRleCgpIHtcbiAgICBjb25zdCBnbG9iYWxTdWJySW5kZXggPSB0aGlzLmNmZi5nbG9iYWxTdWJySW5kZXg7XG4gICAgdGhpcy5vdXQud3JpdGVCeXRlQXJyYXkodGhpcy5jb21waWxlSW5kZXgoZ2xvYmFsU3VickluZGV4KSk7XG4gIH1cblxuICBjb21waWxlQ2hhclN0cmluZ3MoY2hhclN0cmluZ3MpIHtcbiAgICBjb25zdCBjaGFyU3RyaW5nc0luZGV4ID0gbmV3IENGRkluZGV4KCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoYXJTdHJpbmdzLmNvdW50OyBpKyspIHtcbiAgICAgIGNvbnN0IGdseXBoID0gY2hhclN0cmluZ3MuZ2V0KGkpO1xuXG4gICAgICBpZiAoZ2x5cGgubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNoYXJTdHJpbmdzSW5kZXguYWRkKG5ldyBVaW50OEFycmF5KFsweDhiLCAweDBlXSkpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY2hhclN0cmluZ3NJbmRleC5hZGQoZ2x5cGgpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNvbXBpbGVJbmRleChjaGFyU3RyaW5nc0luZGV4KTtcbiAgfVxuXG4gIGNvbXBpbGVDaGFyc2V0KGNoYXJzZXQsIG51bUdseXBocywgc3RyaW5ncywgaXNDSURGb250KSB7XG4gICAgbGV0IG91dDtcbiAgICBjb25zdCBudW1HbHlwaHNMZXNzTm90RGVmID0gbnVtR2x5cGhzIC0gMTtcblxuICAgIGlmIChpc0NJREZvbnQpIHtcbiAgICAgIG91dCA9IG5ldyBVaW50OEFycmF5KFsyLCAwLCAwLCBudW1HbHlwaHNMZXNzTm90RGVmID4+IDggJiAweGZmLCBudW1HbHlwaHNMZXNzTm90RGVmICYgMHhmZl0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBsZW5ndGggPSAxICsgbnVtR2x5cGhzTGVzc05vdERlZiAqIDI7XG4gICAgICBvdXQgPSBuZXcgVWludDhBcnJheShsZW5ndGgpO1xuICAgICAgb3V0WzBdID0gMDtcbiAgICAgIGxldCBjaGFyc2V0SW5kZXggPSAwO1xuICAgICAgY29uc3QgbnVtQ2hhcnNldHMgPSBjaGFyc2V0LmNoYXJzZXQubGVuZ3RoO1xuICAgICAgbGV0IHdhcm5lZCA9IGZhbHNlO1xuXG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8IG91dC5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICBsZXQgc2lkID0gMDtcblxuICAgICAgICBpZiAoY2hhcnNldEluZGV4IDwgbnVtQ2hhcnNldHMpIHtcbiAgICAgICAgICBjb25zdCBuYW1lID0gY2hhcnNldC5jaGFyc2V0W2NoYXJzZXRJbmRleCsrXTtcbiAgICAgICAgICBzaWQgPSBzdHJpbmdzLmdldFNJRChuYW1lKTtcblxuICAgICAgICAgIGlmIChzaWQgPT09IC0xKSB7XG4gICAgICAgICAgICBzaWQgPSAwO1xuXG4gICAgICAgICAgICBpZiAoIXdhcm5lZCkge1xuICAgICAgICAgICAgICB3YXJuZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoYENvdWxkbid0IGZpbmQgJHtuYW1lfSBpbiBDRkYgc3RyaW5nc2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG91dFtpXSA9IHNpZCA+PiA4ICYgMHhmZjtcbiAgICAgICAgb3V0W2kgKyAxXSA9IHNpZCAmIDB4ZmY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29tcGlsZVR5cGVkQXJyYXkob3V0KTtcbiAgfVxuXG4gIGNvbXBpbGVFbmNvZGluZyhlbmNvZGluZykge1xuICAgIHJldHVybiB0aGlzLmNvbXBpbGVUeXBlZEFycmF5KGVuY29kaW5nLnJhdyk7XG4gIH1cblxuICBjb21waWxlRkRTZWxlY3QoZmRTZWxlY3QpIHtcbiAgICBjb25zdCBmb3JtYXQgPSBmZFNlbGVjdC5mb3JtYXQ7XG4gICAgbGV0IG91dCwgaTtcblxuICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIG91dCA9IG5ldyBVaW50OEFycmF5KDEgKyBmZFNlbGVjdC5mZFNlbGVjdC5sZW5ndGgpO1xuICAgICAgICBvdXRbMF0gPSBmb3JtYXQ7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGZkU2VsZWN0LmZkU2VsZWN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgb3V0W2kgKyAxXSA9IGZkU2VsZWN0LmZkU2VsZWN0W2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgMzpcbiAgICAgICAgY29uc3Qgc3RhcnQgPSAwO1xuICAgICAgICBsZXQgbGFzdEZEID0gZmRTZWxlY3QuZmRTZWxlY3RbMF07XG4gICAgICAgIGNvbnN0IHJhbmdlcyA9IFtmb3JtYXQsIDAsIDAsIHN0YXJ0ID4+IDggJiAweGZmLCBzdGFydCAmIDB4ZmYsIGxhc3RGRF07XG5cbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGZkU2VsZWN0LmZkU2VsZWN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgY3VycmVudEZEID0gZmRTZWxlY3QuZmRTZWxlY3RbaV07XG5cbiAgICAgICAgICBpZiAoY3VycmVudEZEICE9PSBsYXN0RkQpIHtcbiAgICAgICAgICAgIHJhbmdlcy5wdXNoKGkgPj4gOCAmIDB4ZmYsIGkgJiAweGZmLCBjdXJyZW50RkQpO1xuICAgICAgICAgICAgbGFzdEZEID0gY3VycmVudEZEO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG51bVJhbmdlcyA9IChyYW5nZXMubGVuZ3RoIC0gMykgLyAzO1xuICAgICAgICByYW5nZXNbMV0gPSBudW1SYW5nZXMgPj4gOCAmIDB4ZmY7XG4gICAgICAgIHJhbmdlc1syXSA9IG51bVJhbmdlcyAmIDB4ZmY7XG4gICAgICAgIHJhbmdlcy5wdXNoKGkgPj4gOCAmIDB4ZmYsIGkgJiAweGZmKTtcbiAgICAgICAgb3V0ID0gbmV3IFVpbnQ4QXJyYXkocmFuZ2VzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29tcGlsZVR5cGVkQXJyYXkob3V0KTtcbiAgfVxuXG4gIGNvbXBpbGVUeXBlZEFycmF5KGRhdGEpIHtcbiAgICBjb25zdCBvdXQgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGRhdGEubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgb3V0W2ldID0gZGF0YVtpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgY29tcGlsZUluZGV4KGluZGV4LCB0cmFja2VycyA9IFtdKSB7XG4gICAgY29uc3Qgb2JqZWN0cyA9IGluZGV4Lm9iamVjdHM7XG4gICAgY29uc3QgY291bnQgPSBvYmplY3RzLmxlbmd0aDtcblxuICAgIGlmIChjb3VudCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFswLCAwLCAwXTtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0gW2NvdW50ID4+IDggJiAweGZmLCBjb3VudCAmIDB4ZmZdO1xuICAgIGxldCBsYXN0T2Zmc2V0ID0gMSxcbiAgICAgICAgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7XG4gICAgICBsYXN0T2Zmc2V0ICs9IG9iamVjdHNbaV0ubGVuZ3RoO1xuICAgIH1cblxuICAgIGxldCBvZmZzZXRTaXplO1xuXG4gICAgaWYgKGxhc3RPZmZzZXQgPCAweDEwMCkge1xuICAgICAgb2Zmc2V0U2l6ZSA9IDE7XG4gICAgfSBlbHNlIGlmIChsYXN0T2Zmc2V0IDwgMHgxMDAwMCkge1xuICAgICAgb2Zmc2V0U2l6ZSA9IDI7XG4gICAgfSBlbHNlIGlmIChsYXN0T2Zmc2V0IDwgMHgxMDAwMDAwKSB7XG4gICAgICBvZmZzZXRTaXplID0gMztcbiAgICB9IGVsc2Uge1xuICAgICAgb2Zmc2V0U2l6ZSA9IDQ7XG4gICAgfVxuXG4gICAgZGF0YS5wdXNoKG9mZnNldFNpemUpO1xuICAgIGxldCByZWxhdGl2ZU9mZnNldCA9IDE7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQgKyAxOyBpKyspIHtcbiAgICAgIGlmIChvZmZzZXRTaXplID09PSAxKSB7XG4gICAgICAgIGRhdGEucHVzaChyZWxhdGl2ZU9mZnNldCAmIDB4ZmYpO1xuICAgICAgfSBlbHNlIGlmIChvZmZzZXRTaXplID09PSAyKSB7XG4gICAgICAgIGRhdGEucHVzaChyZWxhdGl2ZU9mZnNldCA+PiA4ICYgMHhmZiwgcmVsYXRpdmVPZmZzZXQgJiAweGZmKTtcbiAgICAgIH0gZWxzZSBpZiAob2Zmc2V0U2l6ZSA9PT0gMykge1xuICAgICAgICBkYXRhLnB1c2gocmVsYXRpdmVPZmZzZXQgPj4gMTYgJiAweGZmLCByZWxhdGl2ZU9mZnNldCA+PiA4ICYgMHhmZiwgcmVsYXRpdmVPZmZzZXQgJiAweGZmKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGEucHVzaChyZWxhdGl2ZU9mZnNldCA+Pj4gMjQgJiAweGZmLCByZWxhdGl2ZU9mZnNldCA+PiAxNiAmIDB4ZmYsIHJlbGF0aXZlT2Zmc2V0ID4+IDggJiAweGZmLCByZWxhdGl2ZU9mZnNldCAmIDB4ZmYpO1xuICAgICAgfVxuXG4gICAgICBpZiAob2JqZWN0c1tpXSkge1xuICAgICAgICByZWxhdGl2ZU9mZnNldCArPSBvYmplY3RzW2ldLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgaWYgKHRyYWNrZXJzW2ldKSB7XG4gICAgICAgIHRyYWNrZXJzW2ldLm9mZnNldChkYXRhLmxlbmd0aCk7XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGogPSAwLCBqaiA9IG9iamVjdHNbaV0ubGVuZ3RoOyBqIDwgamo7IGorKykge1xuICAgICAgICBkYXRhLnB1c2gob2JqZWN0c1tpXVtqXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxufVxuXG5leHBvcnRzLkNGRkNvbXBpbGVyID0gQ0ZGQ29tcGlsZXI7XG5cbi8qKiovIH0pLFxuLyogNDYgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMpID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuSVNPQWRvYmVDaGFyc2V0ID0gZXhwb3J0cy5FeHBlcnRTdWJzZXRDaGFyc2V0ID0gZXhwb3J0cy5FeHBlcnRDaGFyc2V0ID0gdm9pZCAwO1xuY29uc3QgSVNPQWRvYmVDaGFyc2V0ID0gW1wiLm5vdGRlZlwiLCBcInNwYWNlXCIsIFwiZXhjbGFtXCIsIFwicXVvdGVkYmxcIiwgXCJudW1iZXJzaWduXCIsIFwiZG9sbGFyXCIsIFwicGVyY2VudFwiLCBcImFtcGVyc2FuZFwiLCBcInF1b3RlcmlnaHRcIiwgXCJwYXJlbmxlZnRcIiwgXCJwYXJlbnJpZ2h0XCIsIFwiYXN0ZXJpc2tcIiwgXCJwbHVzXCIsIFwiY29tbWFcIiwgXCJoeXBoZW5cIiwgXCJwZXJpb2RcIiwgXCJzbGFzaFwiLCBcInplcm9cIiwgXCJvbmVcIiwgXCJ0d29cIiwgXCJ0aHJlZVwiLCBcImZvdXJcIiwgXCJmaXZlXCIsIFwic2l4XCIsIFwic2V2ZW5cIiwgXCJlaWdodFwiLCBcIm5pbmVcIiwgXCJjb2xvblwiLCBcInNlbWljb2xvblwiLCBcImxlc3NcIiwgXCJlcXVhbFwiLCBcImdyZWF0ZXJcIiwgXCJxdWVzdGlvblwiLCBcImF0XCIsIFwiQVwiLCBcIkJcIiwgXCJDXCIsIFwiRFwiLCBcIkVcIiwgXCJGXCIsIFwiR1wiLCBcIkhcIiwgXCJJXCIsIFwiSlwiLCBcIktcIiwgXCJMXCIsIFwiTVwiLCBcIk5cIiwgXCJPXCIsIFwiUFwiLCBcIlFcIiwgXCJSXCIsIFwiU1wiLCBcIlRcIiwgXCJVXCIsIFwiVlwiLCBcIldcIiwgXCJYXCIsIFwiWVwiLCBcIlpcIiwgXCJicmFja2V0bGVmdFwiLCBcImJhY2tzbGFzaFwiLCBcImJyYWNrZXRyaWdodFwiLCBcImFzY2lpY2lyY3VtXCIsIFwidW5kZXJzY29yZVwiLCBcInF1b3RlbGVmdFwiLCBcImFcIiwgXCJiXCIsIFwiY1wiLCBcImRcIiwgXCJlXCIsIFwiZlwiLCBcImdcIiwgXCJoXCIsIFwiaVwiLCBcImpcIiwgXCJrXCIsIFwibFwiLCBcIm1cIiwgXCJuXCIsIFwib1wiLCBcInBcIiwgXCJxXCIsIFwiclwiLCBcInNcIiwgXCJ0XCIsIFwidVwiLCBcInZcIiwgXCJ3XCIsIFwieFwiLCBcInlcIiwgXCJ6XCIsIFwiYnJhY2VsZWZ0XCIsIFwiYmFyXCIsIFwiYnJhY2VyaWdodFwiLCBcImFzY2lpdGlsZGVcIiwgXCJleGNsYW1kb3duXCIsIFwiY2VudFwiLCBcInN0ZXJsaW5nXCIsIFwiZnJhY3Rpb25cIiwgXCJ5ZW5cIiwgXCJmbG9yaW5cIiwgXCJzZWN0aW9uXCIsIFwiY3VycmVuY3lcIiwgXCJxdW90ZXNpbmdsZVwiLCBcInF1b3RlZGJsbGVmdFwiLCBcImd1aWxsZW1vdGxlZnRcIiwgXCJndWlsc2luZ2xsZWZ0XCIsIFwiZ3VpbHNpbmdscmlnaHRcIiwgXCJmaVwiLCBcImZsXCIsIFwiZW5kYXNoXCIsIFwiZGFnZ2VyXCIsIFwiZGFnZ2VyZGJsXCIsIFwicGVyaW9kY2VudGVyZWRcIiwgXCJwYXJhZ3JhcGhcIiwgXCJidWxsZXRcIiwgXCJxdW90ZXNpbmdsYmFzZVwiLCBcInF1b3RlZGJsYmFzZVwiLCBcInF1b3RlZGJscmlnaHRcIiwgXCJndWlsbGVtb3RyaWdodFwiLCBcImVsbGlwc2lzXCIsIFwicGVydGhvdXNhbmRcIiwgXCJxdWVzdGlvbmRvd25cIiwgXCJncmF2ZVwiLCBcImFjdXRlXCIsIFwiY2lyY3VtZmxleFwiLCBcInRpbGRlXCIsIFwibWFjcm9uXCIsIFwiYnJldmVcIiwgXCJkb3RhY2NlbnRcIiwgXCJkaWVyZXNpc1wiLCBcInJpbmdcIiwgXCJjZWRpbGxhXCIsIFwiaHVuZ2FydW1sYXV0XCIsIFwib2dvbmVrXCIsIFwiY2Fyb25cIiwgXCJlbWRhc2hcIiwgXCJBRVwiLCBcIm9yZGZlbWluaW5lXCIsIFwiTHNsYXNoXCIsIFwiT3NsYXNoXCIsIFwiT0VcIiwgXCJvcmRtYXNjdWxpbmVcIiwgXCJhZVwiLCBcImRvdGxlc3NpXCIsIFwibHNsYXNoXCIsIFwib3NsYXNoXCIsIFwib2VcIiwgXCJnZXJtYW5kYmxzXCIsIFwib25lc3VwZXJpb3JcIiwgXCJsb2dpY2Fsbm90XCIsIFwibXVcIiwgXCJ0cmFkZW1hcmtcIiwgXCJFdGhcIiwgXCJvbmVoYWxmXCIsIFwicGx1c21pbnVzXCIsIFwiVGhvcm5cIiwgXCJvbmVxdWFydGVyXCIsIFwiZGl2aWRlXCIsIFwiYnJva2VuYmFyXCIsIFwiZGVncmVlXCIsIFwidGhvcm5cIiwgXCJ0aHJlZXF1YXJ0ZXJzXCIsIFwidHdvc3VwZXJpb3JcIiwgXCJyZWdpc3RlcmVkXCIsIFwibWludXNcIiwgXCJldGhcIiwgXCJtdWx0aXBseVwiLCBcInRocmVlc3VwZXJpb3JcIiwgXCJjb3B5cmlnaHRcIiwgXCJBYWN1dGVcIiwgXCJBY2lyY3VtZmxleFwiLCBcIkFkaWVyZXNpc1wiLCBcIkFncmF2ZVwiLCBcIkFyaW5nXCIsIFwiQXRpbGRlXCIsIFwiQ2NlZGlsbGFcIiwgXCJFYWN1dGVcIiwgXCJFY2lyY3VtZmxleFwiLCBcIkVkaWVyZXNpc1wiLCBcIkVncmF2ZVwiLCBcIklhY3V0ZVwiLCBcIkljaXJjdW1mbGV4XCIsIFwiSWRpZXJlc2lzXCIsIFwiSWdyYXZlXCIsIFwiTnRpbGRlXCIsIFwiT2FjdXRlXCIsIFwiT2NpcmN1bWZsZXhcIiwgXCJPZGllcmVzaXNcIiwgXCJPZ3JhdmVcIiwgXCJPdGlsZGVcIiwgXCJTY2Fyb25cIiwgXCJVYWN1dGVcIiwgXCJVY2lyY3VtZmxleFwiLCBcIlVkaWVyZXNpc1wiLCBcIlVncmF2ZVwiLCBcIllhY3V0ZVwiLCBcIllkaWVyZXNpc1wiLCBcIlpjYXJvblwiLCBcImFhY3V0ZVwiLCBcImFjaXJjdW1mbGV4XCIsIFwiYWRpZXJlc2lzXCIsIFwiYWdyYXZlXCIsIFwiYXJpbmdcIiwgXCJhdGlsZGVcIiwgXCJjY2VkaWxsYVwiLCBcImVhY3V0ZVwiLCBcImVjaXJjdW1mbGV4XCIsIFwiZWRpZXJlc2lzXCIsIFwiZWdyYXZlXCIsIFwiaWFjdXRlXCIsIFwiaWNpcmN1bWZsZXhcIiwgXCJpZGllcmVzaXNcIiwgXCJpZ3JhdmVcIiwgXCJudGlsZGVcIiwgXCJvYWN1dGVcIiwgXCJvY2lyY3VtZmxleFwiLCBcIm9kaWVyZXNpc1wiLCBcIm9ncmF2ZVwiLCBcIm90aWxkZVwiLCBcInNjYXJvblwiLCBcInVhY3V0ZVwiLCBcInVjaXJjdW1mbGV4XCIsIFwidWRpZXJlc2lzXCIsIFwidWdyYXZlXCIsIFwieWFjdXRlXCIsIFwieWRpZXJlc2lzXCIsIFwiemNhcm9uXCJdO1xuZXhwb3J0cy5JU09BZG9iZUNoYXJzZXQgPSBJU09BZG9iZUNoYXJzZXQ7XG5jb25zdCBFeHBlcnRDaGFyc2V0ID0gW1wiLm5vdGRlZlwiLCBcInNwYWNlXCIsIFwiZXhjbGFtc21hbGxcIiwgXCJIdW5nYXJ1bWxhdXRzbWFsbFwiLCBcImRvbGxhcm9sZHN0eWxlXCIsIFwiZG9sbGFyc3VwZXJpb3JcIiwgXCJhbXBlcnNhbmRzbWFsbFwiLCBcIkFjdXRlc21hbGxcIiwgXCJwYXJlbmxlZnRzdXBlcmlvclwiLCBcInBhcmVucmlnaHRzdXBlcmlvclwiLCBcInR3b2RvdGVubGVhZGVyXCIsIFwib25lZG90ZW5sZWFkZXJcIiwgXCJjb21tYVwiLCBcImh5cGhlblwiLCBcInBlcmlvZFwiLCBcImZyYWN0aW9uXCIsIFwiemVyb29sZHN0eWxlXCIsIFwib25lb2xkc3R5bGVcIiwgXCJ0d29vbGRzdHlsZVwiLCBcInRocmVlb2xkc3R5bGVcIiwgXCJmb3Vyb2xkc3R5bGVcIiwgXCJmaXZlb2xkc3R5bGVcIiwgXCJzaXhvbGRzdHlsZVwiLCBcInNldmVub2xkc3R5bGVcIiwgXCJlaWdodG9sZHN0eWxlXCIsIFwibmluZW9sZHN0eWxlXCIsIFwiY29sb25cIiwgXCJzZW1pY29sb25cIiwgXCJjb21tYXN1cGVyaW9yXCIsIFwidGhyZWVxdWFydGVyc2VtZGFzaFwiLCBcInBlcmlvZHN1cGVyaW9yXCIsIFwicXVlc3Rpb25zbWFsbFwiLCBcImFzdXBlcmlvclwiLCBcImJzdXBlcmlvclwiLCBcImNlbnRzdXBlcmlvclwiLCBcImRzdXBlcmlvclwiLCBcImVzdXBlcmlvclwiLCBcImlzdXBlcmlvclwiLCBcImxzdXBlcmlvclwiLCBcIm1zdXBlcmlvclwiLCBcIm5zdXBlcmlvclwiLCBcIm9zdXBlcmlvclwiLCBcInJzdXBlcmlvclwiLCBcInNzdXBlcmlvclwiLCBcInRzdXBlcmlvclwiLCBcImZmXCIsIFwiZmlcIiwgXCJmbFwiLCBcImZmaVwiLCBcImZmbFwiLCBcInBhcmVubGVmdGluZmVyaW9yXCIsIFwicGFyZW5yaWdodGluZmVyaW9yXCIsIFwiQ2lyY3VtZmxleHNtYWxsXCIsIFwiaHlwaGVuc3VwZXJpb3JcIiwgXCJHcmF2ZXNtYWxsXCIsIFwiQXNtYWxsXCIsIFwiQnNtYWxsXCIsIFwiQ3NtYWxsXCIsIFwiRHNtYWxsXCIsIFwiRXNtYWxsXCIsIFwiRnNtYWxsXCIsIFwiR3NtYWxsXCIsIFwiSHNtYWxsXCIsIFwiSXNtYWxsXCIsIFwiSnNtYWxsXCIsIFwiS3NtYWxsXCIsIFwiTHNtYWxsXCIsIFwiTXNtYWxsXCIsIFwiTnNtYWxsXCIsIFwiT3NtYWxsXCIsIFwiUHNtYWxsXCIsIFwiUXNtYWxsXCIsIFwiUnNtYWxsXCIsIFwiU3NtYWxsXCIsIFwiVHNtYWxsXCIsIFwiVXNtYWxsXCIsIFwiVnNtYWxsXCIsIFwiV3NtYWxsXCIsIFwiWHNtYWxsXCIsIFwiWXNtYWxsXCIsIFwiWnNtYWxsXCIsIFwiY29sb25tb25ldGFyeVwiLCBcIm9uZWZpdHRlZFwiLCBcInJ1cGlhaFwiLCBcIlRpbGRlc21hbGxcIiwgXCJleGNsYW1kb3duc21hbGxcIiwgXCJjZW50b2xkc3R5bGVcIiwgXCJMc2xhc2hzbWFsbFwiLCBcIlNjYXJvbnNtYWxsXCIsIFwiWmNhcm9uc21hbGxcIiwgXCJEaWVyZXNpc3NtYWxsXCIsIFwiQnJldmVzbWFsbFwiLCBcIkNhcm9uc21hbGxcIiwgXCJEb3RhY2NlbnRzbWFsbFwiLCBcIk1hY3JvbnNtYWxsXCIsIFwiZmlndXJlZGFzaFwiLCBcImh5cGhlbmluZmVyaW9yXCIsIFwiT2dvbmVrc21hbGxcIiwgXCJSaW5nc21hbGxcIiwgXCJDZWRpbGxhc21hbGxcIiwgXCJvbmVxdWFydGVyXCIsIFwib25laGFsZlwiLCBcInRocmVlcXVhcnRlcnNcIiwgXCJxdWVzdGlvbmRvd25zbWFsbFwiLCBcIm9uZWVpZ2h0aFwiLCBcInRocmVlZWlnaHRoc1wiLCBcImZpdmVlaWdodGhzXCIsIFwic2V2ZW5laWdodGhzXCIsIFwib25ldGhpcmRcIiwgXCJ0d290aGlyZHNcIiwgXCJ6ZXJvc3VwZXJpb3JcIiwgXCJvbmVzdXBlcmlvclwiLCBcInR3b3N1cGVyaW9yXCIsIFwidGhyZWVzdXBlcmlvclwiLCBcImZvdXJzdXBlcmlvclwiLCBcImZpdmVzdXBlcmlvclwiLCBcInNpeHN1cGVyaW9yXCIsIFwic2V2ZW5zdXBlcmlvclwiLCBcImVpZ2h0c3VwZXJpb3JcIiwgXCJuaW5lc3VwZXJpb3JcIiwgXCJ6ZXJvaW5mZXJpb3JcIiwgXCJvbmVpbmZlcmlvclwiLCBcInR3b2luZmVyaW9yXCIsIFwidGhyZWVpbmZlcmlvclwiLCBcImZvdXJpbmZlcmlvclwiLCBcImZpdmVpbmZlcmlvclwiLCBcInNpeGluZmVyaW9yXCIsIFwic2V2ZW5pbmZlcmlvclwiLCBcImVpZ2h0aW5mZXJpb3JcIiwgXCJuaW5laW5mZXJpb3JcIiwgXCJjZW50aW5mZXJpb3JcIiwgXCJkb2xsYXJpbmZlcmlvclwiLCBcInBlcmlvZGluZmVyaW9yXCIsIFwiY29tbWFpbmZlcmlvclwiLCBcIkFncmF2ZXNtYWxsXCIsIFwiQWFjdXRlc21hbGxcIiwgXCJBY2lyY3VtZmxleHNtYWxsXCIsIFwiQXRpbGRlc21hbGxcIiwgXCJBZGllcmVzaXNzbWFsbFwiLCBcIkFyaW5nc21hbGxcIiwgXCJBRXNtYWxsXCIsIFwiQ2NlZGlsbGFzbWFsbFwiLCBcIkVncmF2ZXNtYWxsXCIsIFwiRWFjdXRlc21hbGxcIiwgXCJFY2lyY3VtZmxleHNtYWxsXCIsIFwiRWRpZXJlc2lzc21hbGxcIiwgXCJJZ3JhdmVzbWFsbFwiLCBcIklhY3V0ZXNtYWxsXCIsIFwiSWNpcmN1bWZsZXhzbWFsbFwiLCBcIklkaWVyZXNpc3NtYWxsXCIsIFwiRXRoc21hbGxcIiwgXCJOdGlsZGVzbWFsbFwiLCBcIk9ncmF2ZXNtYWxsXCIsIFwiT2FjdXRlc21hbGxcIiwgXCJPY2lyY3VtZmxleHNtYWxsXCIsIFwiT3RpbGRlc21hbGxcIiwgXCJPZGllcmVzaXNzbWFsbFwiLCBcIk9Fc21hbGxcIiwgXCJPc2xhc2hzbWFsbFwiLCBcIlVncmF2ZXNtYWxsXCIsIFwiVWFjdXRlc21hbGxcIiwgXCJVY2lyY3VtZmxleHNtYWxsXCIsIFwiVWRpZXJlc2lzc21hbGxcIiwgXCJZYWN1dGVzbWFsbFwiLCBcIlRob3Juc21hbGxcIiwgXCJZZGllcmVzaXNzbWFsbFwiXTtcbmV4cG9ydHMuRXhwZXJ0Q2hhcnNldCA9IEV4cGVydENoYXJzZXQ7XG5jb25zdCBFeHBlcnRTdWJzZXRDaGFyc2V0ID0gW1wiLm5vdGRlZlwiLCBcInNwYWNlXCIsIFwiZG9sbGFyb2xkc3R5bGVcIiwgXCJkb2xsYXJzdXBlcmlvclwiLCBcInBhcmVubGVmdHN1cGVyaW9yXCIsIFwicGFyZW5yaWdodHN1cGVyaW9yXCIsIFwidHdvZG90ZW5sZWFkZXJcIiwgXCJvbmVkb3RlbmxlYWRlclwiLCBcImNvbW1hXCIsIFwiaHlwaGVuXCIsIFwicGVyaW9kXCIsIFwiZnJhY3Rpb25cIiwgXCJ6ZXJvb2xkc3R5bGVcIiwgXCJvbmVvbGRzdHlsZVwiLCBcInR3b29sZHN0eWxlXCIsIFwidGhyZWVvbGRzdHlsZVwiLCBcImZvdXJvbGRzdHlsZVwiLCBcImZpdmVvbGRzdHlsZVwiLCBcInNpeG9sZHN0eWxlXCIsIFwic2V2ZW5vbGRzdHlsZVwiLCBcImVpZ2h0b2xkc3R5bGVcIiwgXCJuaW5lb2xkc3R5bGVcIiwgXCJjb2xvblwiLCBcInNlbWljb2xvblwiLCBcImNvbW1hc3VwZXJpb3JcIiwgXCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoXCIsIFwicGVyaW9kc3VwZXJpb3JcIiwgXCJhc3VwZXJpb3JcIiwgXCJic3VwZXJpb3JcIiwgXCJjZW50c3VwZXJpb3JcIiwgXCJkc3VwZXJpb3JcIiwgXCJlc3VwZXJpb3JcIiwgXCJpc3VwZXJpb3JcIiwgXCJsc3VwZXJpb3JcIiwgXCJtc3VwZXJpb3JcIiwgXCJuc3VwZXJpb3JcIiwgXCJvc3VwZXJpb3JcIiwgXCJyc3VwZXJpb3JcIiwgXCJzc3VwZXJpb3JcIiwgXCJ0c3VwZXJpb3JcIiwgXCJmZlwiLCBcImZpXCIsIFwiZmxcIiwgXCJmZmlcIiwgXCJmZmxcIiwgXCJwYXJlbmxlZnRpbmZlcmlvclwiLCBcInBhcmVucmlnaHRpbmZlcmlvclwiLCBcImh5cGhlbnN1cGVyaW9yXCIsIFwiY29sb25tb25ldGFyeVwiLCBcIm9uZWZpdHRlZFwiLCBcInJ1cGlhaFwiLCBcImNlbnRvbGRzdHlsZVwiLCBcImZpZ3VyZWRhc2hcIiwgXCJoeXBoZW5pbmZlcmlvclwiLCBcIm9uZXF1YXJ0ZXJcIiwgXCJvbmVoYWxmXCIsIFwidGhyZWVxdWFydGVyc1wiLCBcIm9uZWVpZ2h0aFwiLCBcInRocmVlZWlnaHRoc1wiLCBcImZpdmVlaWdodGhzXCIsIFwic2V2ZW5laWdodGhzXCIsIFwib25ldGhpcmRcIiwgXCJ0d290aGlyZHNcIiwgXCJ6ZXJvc3VwZXJpb3JcIiwgXCJvbmVzdXBlcmlvclwiLCBcInR3b3N1cGVyaW9yXCIsIFwidGhyZWVzdXBlcmlvclwiLCBcImZvdXJzdXBlcmlvclwiLCBcImZpdmVzdXBlcmlvclwiLCBcInNpeHN1cGVyaW9yXCIsIFwic2V2ZW5zdXBlcmlvclwiLCBcImVpZ2h0c3VwZXJpb3JcIiwgXCJuaW5lc3VwZXJpb3JcIiwgXCJ6ZXJvaW5mZXJpb3JcIiwgXCJvbmVpbmZlcmlvclwiLCBcInR3b2luZmVyaW9yXCIsIFwidGhyZWVpbmZlcmlvclwiLCBcImZvdXJpbmZlcmlvclwiLCBcImZpdmVpbmZlcmlvclwiLCBcInNpeGluZmVyaW9yXCIsIFwic2V2ZW5pbmZlcmlvclwiLCBcImVpZ2h0aW5mZXJpb3JcIiwgXCJuaW5laW5mZXJpb3JcIiwgXCJjZW50aW5mZXJpb3JcIiwgXCJkb2xsYXJpbmZlcmlvclwiLCBcInBlcmlvZGluZmVyaW9yXCIsIFwiY29tbWFpbmZlcmlvclwiXTtcbmV4cG9ydHMuRXhwZXJ0U3Vic2V0Q2hhcnNldCA9IEV4cGVydFN1YnNldENoYXJzZXQ7XG5cbi8qKiovIH0pLFxuLyogNDcgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuZ2V0U2VyaWZGb250cyA9IGV4cG9ydHMuZ2V0Tm9uU3RkRm9udE1hcCA9IGV4cG9ydHMuZ2V0R2x5cGhNYXBGb3JTdGFuZGFyZEZvbnRzID0gZXhwb3J0cy5nZXRGb250TmFtZVRvRmlsZU1hcCA9IHZvaWQgMDtcbmV4cG9ydHMuZ2V0U3RhbmRhcmRGb250TmFtZSA9IGdldFN0YW5kYXJkRm9udE5hbWU7XG5leHBvcnRzLmdldFN5bWJvbHNGb250cyA9IGV4cG9ydHMuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JDYWxpYnJpID0gZXhwb3J0cy5nZXRTdXBwbGVtZW50YWxHbHlwaE1hcEZvckFyaWFsQmxhY2sgPSBleHBvcnRzLmdldFN0ZEZvbnRNYXAgPSB2b2lkIDA7XG5cbnZhciBfY29yZV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oOSk7XG5cbnZhciBfZm9udHNfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDE4KTtcblxuY29uc3QgZ2V0U3RkRm9udE1hcCA9ICgwLCBfY29yZV91dGlscy5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gIHRbXCJUaW1lcy1Sb21hblwiXSA9IFwiVGltZXMtUm9tYW5cIjtcbiAgdC5IZWx2ZXRpY2EgPSBcIkhlbHZldGljYVwiO1xuICB0LkNvdXJpZXIgPSBcIkNvdXJpZXJcIjtcbiAgdC5TeW1ib2wgPSBcIlN5bWJvbFwiO1xuICB0W1wiVGltZXMtQm9sZFwiXSA9IFwiVGltZXMtQm9sZFwiO1xuICB0W1wiSGVsdmV0aWNhLUJvbGRcIl0gPSBcIkhlbHZldGljYS1Cb2xkXCI7XG4gIHRbXCJDb3VyaWVyLUJvbGRcIl0gPSBcIkNvdXJpZXItQm9sZFwiO1xuICB0LlphcGZEaW5nYmF0cyA9IFwiWmFwZkRpbmdiYXRzXCI7XG4gIHRbXCJUaW1lcy1JdGFsaWNcIl0gPSBcIlRpbWVzLUl0YWxpY1wiO1xuICB0W1wiSGVsdmV0aWNhLU9ibGlxdWVcIl0gPSBcIkhlbHZldGljYS1PYmxpcXVlXCI7XG4gIHRbXCJDb3VyaWVyLU9ibGlxdWVcIl0gPSBcIkNvdXJpZXItT2JsaXF1ZVwiO1xuICB0W1wiVGltZXMtQm9sZEl0YWxpY1wiXSA9IFwiVGltZXMtQm9sZEl0YWxpY1wiO1xuICB0W1wiSGVsdmV0aWNhLUJvbGRPYmxpcXVlXCJdID0gXCJIZWx2ZXRpY2EtQm9sZE9ibGlxdWVcIjtcbiAgdFtcIkNvdXJpZXItQm9sZE9ibGlxdWVcIl0gPSBcIkNvdXJpZXItQm9sZE9ibGlxdWVcIjtcbiAgdC5BcmlhbE5hcnJvdyA9IFwiSGVsdmV0aWNhXCI7XG4gIHRbXCJBcmlhbE5hcnJvdy1Cb2xkXCJdID0gXCJIZWx2ZXRpY2EtQm9sZFwiO1xuICB0W1wiQXJpYWxOYXJyb3ctQm9sZEl0YWxpY1wiXSA9IFwiSGVsdmV0aWNhLUJvbGRPYmxpcXVlXCI7XG4gIHRbXCJBcmlhbE5hcnJvdy1JdGFsaWNcIl0gPSBcIkhlbHZldGljYS1PYmxpcXVlXCI7XG4gIHQuQXJpYWxCbGFjayA9IFwiSGVsdmV0aWNhXCI7XG4gIHRbXCJBcmlhbEJsYWNrLUJvbGRcIl0gPSBcIkhlbHZldGljYS1Cb2xkXCI7XG4gIHRbXCJBcmlhbEJsYWNrLUJvbGRJdGFsaWNcIl0gPSBcIkhlbHZldGljYS1Cb2xkT2JsaXF1ZVwiO1xuICB0W1wiQXJpYWxCbGFjay1JdGFsaWNcIl0gPSBcIkhlbHZldGljYS1PYmxpcXVlXCI7XG4gIHRbXCJBcmlhbC1CbGFja1wiXSA9IFwiSGVsdmV0aWNhXCI7XG4gIHRbXCJBcmlhbC1CbGFjay1Cb2xkXCJdID0gXCJIZWx2ZXRpY2EtQm9sZFwiO1xuICB0W1wiQXJpYWwtQmxhY2stQm9sZEl0YWxpY1wiXSA9IFwiSGVsdmV0aWNhLUJvbGRPYmxpcXVlXCI7XG4gIHRbXCJBcmlhbC1CbGFjay1JdGFsaWNcIl0gPSBcIkhlbHZldGljYS1PYmxpcXVlXCI7XG4gIHQuQXJpYWwgPSBcIkhlbHZldGljYVwiO1xuICB0W1wiQXJpYWwtQm9sZFwiXSA9IFwiSGVsdmV0aWNhLUJvbGRcIjtcbiAgdFtcIkFyaWFsLUJvbGRJdGFsaWNcIl0gPSBcIkhlbHZldGljYS1Cb2xkT2JsaXF1ZVwiO1xuICB0W1wiQXJpYWwtSXRhbGljXCJdID0gXCJIZWx2ZXRpY2EtT2JsaXF1ZVwiO1xuICB0W1wiQXJpYWwtQm9sZEl0YWxpY01UXCJdID0gXCJIZWx2ZXRpY2EtQm9sZE9ibGlxdWVcIjtcbiAgdFtcIkFyaWFsLUJvbGRNVFwiXSA9IFwiSGVsdmV0aWNhLUJvbGRcIjtcbiAgdFtcIkFyaWFsLUl0YWxpY01UXCJdID0gXCJIZWx2ZXRpY2EtT2JsaXF1ZVwiO1xuICB0LkFyaWFsTVQgPSBcIkhlbHZldGljYVwiO1xuICB0W1wiQ291cmllci1Cb2xkSXRhbGljXCJdID0gXCJDb3VyaWVyLUJvbGRPYmxpcXVlXCI7XG4gIHRbXCJDb3VyaWVyLUl0YWxpY1wiXSA9IFwiQ291cmllci1PYmxpcXVlXCI7XG4gIHQuQ291cmllck5ldyA9IFwiQ291cmllclwiO1xuICB0W1wiQ291cmllck5ldy1Cb2xkXCJdID0gXCJDb3VyaWVyLUJvbGRcIjtcbiAgdFtcIkNvdXJpZXJOZXctQm9sZEl0YWxpY1wiXSA9IFwiQ291cmllci1Cb2xkT2JsaXF1ZVwiO1xuICB0W1wiQ291cmllck5ldy1JdGFsaWNcIl0gPSBcIkNvdXJpZXItT2JsaXF1ZVwiO1xuICB0W1wiQ291cmllck5ld1BTLUJvbGRJdGFsaWNNVFwiXSA9IFwiQ291cmllci1Cb2xkT2JsaXF1ZVwiO1xuICB0W1wiQ291cmllck5ld1BTLUJvbGRNVFwiXSA9IFwiQ291cmllci1Cb2xkXCI7XG4gIHRbXCJDb3VyaWVyTmV3UFMtSXRhbGljTVRcIl0gPSBcIkNvdXJpZXItT2JsaXF1ZVwiO1xuICB0LkNvdXJpZXJOZXdQU01UID0gXCJDb3VyaWVyXCI7XG4gIHRbXCJIZWx2ZXRpY2EtQm9sZEl0YWxpY1wiXSA9IFwiSGVsdmV0aWNhLUJvbGRPYmxpcXVlXCI7XG4gIHRbXCJIZWx2ZXRpY2EtSXRhbGljXCJdID0gXCJIZWx2ZXRpY2EtT2JsaXF1ZVwiO1xuICB0W1wiU3ltYm9sLUJvbGRcIl0gPSBcIlN5bWJvbFwiO1xuICB0W1wiU3ltYm9sLUJvbGRJdGFsaWNcIl0gPSBcIlN5bWJvbFwiO1xuICB0W1wiU3ltYm9sLUl0YWxpY1wiXSA9IFwiU3ltYm9sXCI7XG4gIHQuVGltZXNOZXdSb21hbiA9IFwiVGltZXMtUm9tYW5cIjtcbiAgdFtcIlRpbWVzTmV3Um9tYW4tQm9sZFwiXSA9IFwiVGltZXMtQm9sZFwiO1xuICB0W1wiVGltZXNOZXdSb21hbi1Cb2xkSXRhbGljXCJdID0gXCJUaW1lcy1Cb2xkSXRhbGljXCI7XG4gIHRbXCJUaW1lc05ld1JvbWFuLUl0YWxpY1wiXSA9IFwiVGltZXMtSXRhbGljXCI7XG4gIHQuVGltZXNOZXdSb21hblBTID0gXCJUaW1lcy1Sb21hblwiO1xuICB0W1wiVGltZXNOZXdSb21hblBTLUJvbGRcIl0gPSBcIlRpbWVzLUJvbGRcIjtcbiAgdFtcIlRpbWVzTmV3Um9tYW5QUy1Cb2xkSXRhbGljXCJdID0gXCJUaW1lcy1Cb2xkSXRhbGljXCI7XG4gIHRbXCJUaW1lc05ld1JvbWFuUFMtQm9sZEl0YWxpY01UXCJdID0gXCJUaW1lcy1Cb2xkSXRhbGljXCI7XG4gIHRbXCJUaW1lc05ld1JvbWFuUFMtQm9sZE1UXCJdID0gXCJUaW1lcy1Cb2xkXCI7XG4gIHRbXCJUaW1lc05ld1JvbWFuUFMtSXRhbGljXCJdID0gXCJUaW1lcy1JdGFsaWNcIjtcbiAgdFtcIlRpbWVzTmV3Um9tYW5QUy1JdGFsaWNNVFwiXSA9IFwiVGltZXMtSXRhbGljXCI7XG4gIHQuVGltZXNOZXdSb21hblBTTVQgPSBcIlRpbWVzLVJvbWFuXCI7XG4gIHRbXCJUaW1lc05ld1JvbWFuUFNNVC1Cb2xkXCJdID0gXCJUaW1lcy1Cb2xkXCI7XG4gIHRbXCJUaW1lc05ld1JvbWFuUFNNVC1Cb2xkSXRhbGljXCJdID0gXCJUaW1lcy1Cb2xkSXRhbGljXCI7XG4gIHRbXCJUaW1lc05ld1JvbWFuUFNNVC1JdGFsaWNcIl0gPSBcIlRpbWVzLUl0YWxpY1wiO1xufSk7XG5leHBvcnRzLmdldFN0ZEZvbnRNYXAgPSBnZXRTdGRGb250TWFwO1xuY29uc3QgZ2V0Rm9udE5hbWVUb0ZpbGVNYXAgPSAoMCwgX2NvcmVfdXRpbHMuZ2V0TG9va3VwVGFibGVGYWN0b3J5KShmdW5jdGlvbiAodCkge1xuICB0LkNvdXJpZXIgPSBcIkZveGl0Rml4ZWQucGZiXCI7XG4gIHRbXCJDb3VyaWVyLUJvbGRcIl0gPSBcIkZveGl0Rml4ZWRCb2xkLnBmYlwiO1xuICB0W1wiQ291cmllci1Cb2xkT2JsaXF1ZVwiXSA9IFwiRm94aXRGaXhlZEJvbGRJdGFsaWMucGZiXCI7XG4gIHRbXCJDb3VyaWVyLU9ibGlxdWVcIl0gPSBcIkZveGl0Rml4ZWRJdGFsaWMucGZiXCI7XG4gIHQuSGVsdmV0aWNhID0gXCJGb3hpdFNhbnMucGZiXCI7XG4gIHRbXCJIZWx2ZXRpY2EtQm9sZFwiXSA9IFwiRm94aXRTYW5zQm9sZC5wZmJcIjtcbiAgdFtcIkhlbHZldGljYS1Cb2xkT2JsaXF1ZVwiXSA9IFwiRm94aXRTYW5zQm9sZEl0YWxpYy5wZmJcIjtcbiAgdFtcIkhlbHZldGljYS1PYmxpcXVlXCJdID0gXCJGb3hpdFNhbnNJdGFsaWMucGZiXCI7XG4gIHRbXCJUaW1lcy1Sb21hblwiXSA9IFwiRm94aXRTZXJpZi5wZmJcIjtcbiAgdFtcIlRpbWVzLUJvbGRcIl0gPSBcIkZveGl0U2VyaWZCb2xkLnBmYlwiO1xuICB0W1wiVGltZXMtQm9sZEl0YWxpY1wiXSA9IFwiRm94aXRTZXJpZkJvbGRJdGFsaWMucGZiXCI7XG4gIHRbXCJUaW1lcy1JdGFsaWNcIl0gPSBcIkZveGl0U2VyaWZJdGFsaWMucGZiXCI7XG4gIHQuU3ltYm9sID0gXCJGb3hpdFN5bWJvbC5wZmJcIjtcbiAgdC5aYXBmRGluZ2JhdHMgPSBcIkZveGl0RGluZ2JhdHMucGZiXCI7XG4gIHRbXCJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyXCJdID0gXCJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyLnR0ZlwiO1xuICB0W1wiTGliZXJhdGlvblNhbnMtQm9sZFwiXSA9IFwiTGliZXJhdGlvblNhbnMtQm9sZC50dGZcIjtcbiAgdFtcIkxpYmVyYXRpb25TYW5zLUl0YWxpY1wiXSA9IFwiTGliZXJhdGlvblNhbnMtSXRhbGljLnR0ZlwiO1xuICB0W1wiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpY1wiXSA9IFwiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYy50dGZcIjtcbn0pO1xuZXhwb3J0cy5nZXRGb250TmFtZVRvRmlsZU1hcCA9IGdldEZvbnROYW1lVG9GaWxlTWFwO1xuY29uc3QgZ2V0Tm9uU3RkRm9udE1hcCA9ICgwLCBfY29yZV91dGlscy5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gIHQuQ2FsaWJyaSA9IFwiSGVsdmV0aWNhXCI7XG4gIHRbXCJDYWxpYnJpLUJvbGRcIl0gPSBcIkhlbHZldGljYS1Cb2xkXCI7XG4gIHRbXCJDYWxpYnJpLUJvbGRJdGFsaWNcIl0gPSBcIkhlbHZldGljYS1Cb2xkT2JsaXF1ZVwiO1xuICB0W1wiQ2FsaWJyaS1JdGFsaWNcIl0gPSBcIkhlbHZldGljYS1PYmxpcXVlXCI7XG4gIHQuQ2VudHVyeUdvdGhpYyA9IFwiSGVsdmV0aWNhXCI7XG4gIHRbXCJDZW50dXJ5R290aGljLUJvbGRcIl0gPSBcIkhlbHZldGljYS1Cb2xkXCI7XG4gIHRbXCJDZW50dXJ5R290aGljLUJvbGRJdGFsaWNcIl0gPSBcIkhlbHZldGljYS1Cb2xkT2JsaXF1ZVwiO1xuICB0W1wiQ2VudHVyeUdvdGhpYy1JdGFsaWNcIl0gPSBcIkhlbHZldGljYS1PYmxpcXVlXCI7XG4gIHQuQ29taWNTYW5zTVMgPSBcIkNvbWljIFNhbnMgTVNcIjtcbiAgdFtcIkNvbWljU2Fuc01TLUJvbGRcIl0gPSBcIkNvbWljIFNhbnMgTVMtQm9sZFwiO1xuICB0W1wiQ29taWNTYW5zTVMtQm9sZEl0YWxpY1wiXSA9IFwiQ29taWMgU2FucyBNUy1Cb2xkSXRhbGljXCI7XG4gIHRbXCJDb21pY1NhbnNNUy1JdGFsaWNcIl0gPSBcIkNvbWljIFNhbnMgTVMtSXRhbGljXCI7XG4gIHRbXCJJdGNTeW1ib2wtQm9sZFwiXSA9IFwiSGVsdmV0aWNhLUJvbGRcIjtcbiAgdFtcIkl0Y1N5bWJvbC1Cb2xkSXRhbGljXCJdID0gXCJIZWx2ZXRpY2EtQm9sZE9ibGlxdWVcIjtcbiAgdFtcIkl0Y1N5bWJvbC1Cb29rXCJdID0gXCJIZWx2ZXRpY2FcIjtcbiAgdFtcIkl0Y1N5bWJvbC1Cb29rSXRhbGljXCJdID0gXCJIZWx2ZXRpY2EtT2JsaXF1ZVwiO1xuICB0W1wiSXRjU3ltYm9sLU1lZGl1bVwiXSA9IFwiSGVsdmV0aWNhXCI7XG4gIHRbXCJJdGNTeW1ib2wtTWVkaXVtSXRhbGljXCJdID0gXCJIZWx2ZXRpY2EtT2JsaXF1ZVwiO1xuICB0Lkx1Y2lkYUNvbnNvbGUgPSBcIkNvdXJpZXJcIjtcbiAgdFtcIkx1Y2lkYUNvbnNvbGUtQm9sZFwiXSA9IFwiQ291cmllci1Cb2xkXCI7XG4gIHRbXCJMdWNpZGFDb25zb2xlLUJvbGRJdGFsaWNcIl0gPSBcIkNvdXJpZXItQm9sZE9ibGlxdWVcIjtcbiAgdFtcIkx1Y2lkYUNvbnNvbGUtSXRhbGljXCJdID0gXCJDb3VyaWVyLU9ibGlxdWVcIjtcbiAgdFtcIkx1Y2lkYVNhbnMtRGVtaVwiXSA9IFwiSGVsdmV0aWNhLUJvbGRcIjtcbiAgdFtcIk1TLUdvdGhpY1wiXSA9IFwiTVMgR290aGljXCI7XG4gIHRbXCJNUy1Hb3RoaWMtQm9sZFwiXSA9IFwiTVMgR290aGljLUJvbGRcIjtcbiAgdFtcIk1TLUdvdGhpYy1Cb2xkSXRhbGljXCJdID0gXCJNUyBHb3RoaWMtQm9sZEl0YWxpY1wiO1xuICB0W1wiTVMtR290aGljLUl0YWxpY1wiXSA9IFwiTVMgR290aGljLUl0YWxpY1wiO1xuICB0W1wiTVMtTWluY2hvXCJdID0gXCJNUyBNaW5jaG9cIjtcbiAgdFtcIk1TLU1pbmNoby1Cb2xkXCJdID0gXCJNUyBNaW5jaG8tQm9sZFwiO1xuICB0W1wiTVMtTWluY2hvLUJvbGRJdGFsaWNcIl0gPSBcIk1TIE1pbmNoby1Cb2xkSXRhbGljXCI7XG4gIHRbXCJNUy1NaW5jaG8tSXRhbGljXCJdID0gXCJNUyBNaW5jaG8tSXRhbGljXCI7XG4gIHRbXCJNUy1QR290aGljXCJdID0gXCJNUyBQR290aGljXCI7XG4gIHRbXCJNUy1QR290aGljLUJvbGRcIl0gPSBcIk1TIFBHb3RoaWMtQm9sZFwiO1xuICB0W1wiTVMtUEdvdGhpYy1Cb2xkSXRhbGljXCJdID0gXCJNUyBQR290aGljLUJvbGRJdGFsaWNcIjtcbiAgdFtcIk1TLVBHb3RoaWMtSXRhbGljXCJdID0gXCJNUyBQR290aGljLUl0YWxpY1wiO1xuICB0W1wiTVMtUE1pbmNob1wiXSA9IFwiTVMgUE1pbmNob1wiO1xuICB0W1wiTVMtUE1pbmNoby1Cb2xkXCJdID0gXCJNUyBQTWluY2hvLUJvbGRcIjtcbiAgdFtcIk1TLVBNaW5jaG8tQm9sZEl0YWxpY1wiXSA9IFwiTVMgUE1pbmNoby1Cb2xkSXRhbGljXCI7XG4gIHRbXCJNUy1QTWluY2hvLUl0YWxpY1wiXSA9IFwiTVMgUE1pbmNoby1JdGFsaWNcIjtcbiAgdC5OdXB0aWFsU2NyaXB0ID0gXCJUaW1lcy1JdGFsaWNcIjtcbiAgdC5TZWdvZVVJU3ltYm9sID0gXCJIZWx2ZXRpY2FcIjtcbiAgdC5XaW5nZGluZ3MgPSBcIlphcGZEaW5nYmF0c1wiO1xuICB0W1wiV2luZ2RpbmdzLVJlZ3VsYXJcIl0gPSBcIlphcGZEaW5nYmF0c1wiO1xufSk7XG5leHBvcnRzLmdldE5vblN0ZEZvbnRNYXAgPSBnZXROb25TdGRGb250TWFwO1xuY29uc3QgZ2V0U2VyaWZGb250cyA9ICgwLCBfY29yZV91dGlscy5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gIHRbXCJBZG9iZSBKZW5zb25cIl0gPSB0cnVlO1xuICB0W1wiQWRvYmUgVGV4dFwiXSA9IHRydWU7XG4gIHQuQWxiZXJ0dXMgPSB0cnVlO1xuICB0LkFsZHVzID0gdHJ1ZTtcbiAgdC5BbGV4YW5kcmlhID0gdHJ1ZTtcbiAgdC5BbGdlcmlhbiA9IHRydWU7XG4gIHRbXCJBbWVyaWNhbiBUeXBld3JpdGVyXCJdID0gdHJ1ZTtcbiAgdC5BbnRpcXVhID0gdHJ1ZTtcbiAgdC5BcGV4ID0gdHJ1ZTtcbiAgdC5Bcm5vID0gdHJ1ZTtcbiAgdC5Bc3RlciA9IHRydWU7XG4gIHQuQXVyb3JhID0gdHJ1ZTtcbiAgdC5CYXNrZXJ2aWxsZSA9IHRydWU7XG4gIHQuQmVsbCA9IHRydWU7XG4gIHQuQmVtYm8gPSB0cnVlO1xuICB0W1wiQmVtYm8gU2Nob29sYm9va1wiXSA9IHRydWU7XG4gIHQuQmVuZ3VpYXQgPSB0cnVlO1xuICB0W1wiQmVya2VsZXkgT2xkIFN0eWxlXCJdID0gdHJ1ZTtcbiAgdFtcIkJlcm5oYXJkIE1vZGVyblwiXSA9IHRydWU7XG4gIHRbXCJCZXJ0aG9sZCBDaXR5XCJdID0gdHJ1ZTtcbiAgdC5Cb2RvbmkgPSB0cnVlO1xuICB0W1wiQmF1ZXIgQm9kb25pXCJdID0gdHJ1ZTtcbiAgdFtcIkJvb2sgQW50aXF1YVwiXSA9IHRydWU7XG4gIHQuQm9va21hbiA9IHRydWU7XG4gIHRbXCJCb3JkZWF1eCBSb21hblwiXSA9IHRydWU7XG4gIHRbXCJDYWxpZm9ybmlhbiBGQlwiXSA9IHRydWU7XG4gIHQuQ2FsaXN0byA9IHRydWU7XG4gIHQuQ2FsdmVydCA9IHRydWU7XG4gIHQuQ2FwaXRhbHMgPSB0cnVlO1xuICB0LkNhbWJyaWEgPSB0cnVlO1xuICB0LkNhcnRpZXIgPSB0cnVlO1xuICB0LkNhc2xvbiA9IHRydWU7XG4gIHQuQ2F0dWxsID0gdHJ1ZTtcbiAgdC5DZW50YXVyID0gdHJ1ZTtcbiAgdFtcIkNlbnR1cnkgT2xkIFN0eWxlXCJdID0gdHJ1ZTtcbiAgdFtcIkNlbnR1cnkgU2Nob29sYm9va1wiXSA9IHRydWU7XG4gIHQuQ2hhcGFycmFsID0gdHJ1ZTtcbiAgdFtcIkNoYXJpcyBTSUxcIl0gPSB0cnVlO1xuICB0LkNoZWx0ZW5oYW0gPSB0cnVlO1xuICB0W1wiQ2hvbGxhIFNsYWJcIl0gPSB0cnVlO1xuICB0LkNsYXJlbmRvbiA9IHRydWU7XG4gIHQuQ2xlYXJmYWNlID0gdHJ1ZTtcbiAgdC5Db2NoaW4gPSB0cnVlO1xuICB0LkNvbG9ubmEgPSB0cnVlO1xuICB0W1wiQ29tcHV0ZXIgTW9kZXJuXCJdID0gdHJ1ZTtcbiAgdFtcIkNvbmNyZXRlIFJvbWFuXCJdID0gdHJ1ZTtcbiAgdC5Db25zdGFudGlhID0gdHJ1ZTtcbiAgdFtcIkNvb3BlciBCbGFja1wiXSA9IHRydWU7XG4gIHQuQ29yb25hID0gdHJ1ZTtcbiAgdC5FY290eXBlID0gdHJ1ZTtcbiAgdC5FZ3lwdGllbm5lID0gdHJ1ZTtcbiAgdC5FbGVwaGFudCA9IHRydWU7XG4gIHQuRXhjZWxzaW9yID0gdHJ1ZTtcbiAgdC5GYWlyZmllbGQgPSB0cnVlO1xuICB0W1wiRkYgU2NhbGFcIl0gPSB0cnVlO1xuICB0LkZvbGthcmQgPSB0cnVlO1xuICB0LkZvb3RsaWdodCA9IHRydWU7XG4gIHQuRnJlZVNlcmlmID0gdHJ1ZTtcbiAgdFtcIkZyaXogUXVhZHJhdGFcIl0gPSB0cnVlO1xuICB0LkdhcmFtb25kID0gdHJ1ZTtcbiAgdC5HZW50aXVtID0gdHJ1ZTtcbiAgdC5HZW9yZ2lhID0gdHJ1ZTtcbiAgdC5HbG91Y2VzdGVyID0gdHJ1ZTtcbiAgdFtcIkdvdWR5IE9sZCBTdHlsZVwiXSA9IHRydWU7XG4gIHRbXCJHb3VkeSBTY2hvb2xib29rXCJdID0gdHJ1ZTtcbiAgdFtcIkdvdWR5IFBybyBGb250XCJdID0gdHJ1ZTtcbiAgdC5HcmFuam9uID0gdHJ1ZTtcbiAgdFtcIkd1YXJkaWFuIEVneXB0aWFuXCJdID0gdHJ1ZTtcbiAgdC5IZWF0aGVyID0gdHJ1ZTtcbiAgdC5IZXJjdWxlcyA9IHRydWU7XG4gIHRbXCJIaWdoIFRvd2VyIFRleHRcIl0gPSB0cnVlO1xuICB0Lkhpcm9zaGlnZSA9IHRydWU7XG4gIHRbXCJIb2VmbGVyIFRleHRcIl0gPSB0cnVlO1xuICB0W1wiSHVtYW5hIFNlcmlmXCJdID0gdHJ1ZTtcbiAgdC5JbXByaW50ID0gdHJ1ZTtcbiAgdFtcIklvbmljIE5vLiA1XCJdID0gdHJ1ZTtcbiAgdC5KYW5zb24gPSB0cnVlO1xuICB0LkpvYW5uYSA9IHRydWU7XG4gIHQuS29yaW5uYSA9IHRydWU7XG4gIHQuTGV4aWNvbiA9IHRydWU7XG4gIHQuTGliZXJhdGlvblNlcmlmID0gdHJ1ZTtcbiAgdFtcIkxpYmVyYXRpb24gU2VyaWZcIl0gPSB0cnVlO1xuICB0W1wiTGludXggTGliZXJ0aW5lXCJdID0gdHJ1ZTtcbiAgdC5MaXRlcmF0dXJuYXlhID0gdHJ1ZTtcbiAgdC5MdWNpZGEgPSB0cnVlO1xuICB0W1wiTHVjaWRhIEJyaWdodFwiXSA9IHRydWU7XG4gIHQuTWVsaW9yID0gdHJ1ZTtcbiAgdC5NZW1waGlzID0gdHJ1ZTtcbiAgdC5NaWxsZXIgPSB0cnVlO1xuICB0Lk1pbmlvbiA9IHRydWU7XG4gIHQuTW9kZXJuID0gdHJ1ZTtcbiAgdFtcIk1vbmEgTGlzYVwiXSA9IHRydWU7XG4gIHRbXCJNcnMgRWF2ZXNcIl0gPSB0cnVlO1xuICB0W1wiTVMgU2VyaWZcIl0gPSB0cnVlO1xuICB0W1wiTXVzZW8gU2xhYlwiXSA9IHRydWU7XG4gIHRbXCJOZXcgWW9ya1wiXSA9IHRydWU7XG4gIHRbXCJOaW1idXMgUm9tYW5cIl0gPSB0cnVlO1xuICB0W1wiTlBTIFJhd2xpbnNvbiBSb2Fkd2F5XCJdID0gdHJ1ZTtcbiAgdC5OdXB0aWFsU2NyaXB0ID0gdHJ1ZTtcbiAgdC5QYWxhdGlubyA9IHRydWU7XG4gIHQuUGVycGV0dWEgPSB0cnVlO1xuICB0LlBsYW50aW4gPSB0cnVlO1xuICB0W1wiUGxhbnRpbiBTY2hvb2xib29rXCJdID0gdHJ1ZTtcbiAgdC5QbGF5YmlsbCA9IHRydWU7XG4gIHRbXCJQb29yIFJpY2hhcmRcIl0gPSB0cnVlO1xuICB0W1wiUmF3bGluc29uIFJvYWR3YXlcIl0gPSB0cnVlO1xuICB0LlJlbmF1bHQgPSB0cnVlO1xuICB0LlJlcXVpZW0gPSB0cnVlO1xuICB0LlJvY2t3ZWxsID0gdHJ1ZTtcbiAgdC5Sb21hbiA9IHRydWU7XG4gIHRbXCJSb3RpcyBTZXJpZlwiXSA9IHRydWU7XG4gIHQuU2Fib24gPSB0cnVlO1xuICB0LlNjYWxhID0gdHJ1ZTtcbiAgdC5TZWFndWxsID0gdHJ1ZTtcbiAgdC5TaXN0aW5hID0gdHJ1ZTtcbiAgdC5Tb3V2ZW5pciA9IHRydWU7XG4gIHQuU1RJWCA9IHRydWU7XG4gIHRbXCJTdG9uZSBJbmZvcm1hbFwiXSA9IHRydWU7XG4gIHRbXCJTdG9uZSBTZXJpZlwiXSA9IHRydWU7XG4gIHQuU3lsZmFlbiA9IHRydWU7XG4gIHQuVGltZXMgPSB0cnVlO1xuICB0LlRyYWphbiA9IHRydWU7XG4gIHRbXCJUcmluaXTDqVwiXSA9IHRydWU7XG4gIHRbXCJUcnVtcCBNZWRpYWV2YWxcIl0gPSB0cnVlO1xuICB0LlV0b3BpYSA9IHRydWU7XG4gIHRbXCJWYWxlIFR5cGVcIl0gPSB0cnVlO1xuICB0W1wiQml0c3RyZWFtIFZlcmFcIl0gPSB0cnVlO1xuICB0W1wiVmVyYSBTZXJpZlwiXSA9IHRydWU7XG4gIHQuVmVyc2FpbGxlcyA9IHRydWU7XG4gIHQuV2FudGVkID0gdHJ1ZTtcbiAgdC5XZWlzcyA9IHRydWU7XG4gIHRbXCJXaWRlIExhdGluXCJdID0gdHJ1ZTtcbiAgdC5XaW5kc29yID0gdHJ1ZTtcbiAgdC5YSVRTID0gdHJ1ZTtcbn0pO1xuZXhwb3J0cy5nZXRTZXJpZkZvbnRzID0gZ2V0U2VyaWZGb250cztcbmNvbnN0IGdldFN5bWJvbHNGb250cyA9ICgwLCBfY29yZV91dGlscy5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gIHQuRGluZ2JhdHMgPSB0cnVlO1xuICB0LlN5bWJvbCA9IHRydWU7XG4gIHQuWmFwZkRpbmdiYXRzID0gdHJ1ZTtcbn0pO1xuZXhwb3J0cy5nZXRTeW1ib2xzRm9udHMgPSBnZXRTeW1ib2xzRm9udHM7XG5jb25zdCBnZXRHbHlwaE1hcEZvclN0YW5kYXJkRm9udHMgPSAoMCwgX2NvcmVfdXRpbHMuZ2V0TG9va3VwVGFibGVGYWN0b3J5KShmdW5jdGlvbiAodCkge1xuICB0WzJdID0gMTA7XG4gIHRbM10gPSAzMjtcbiAgdFs0XSA9IDMzO1xuICB0WzVdID0gMzQ7XG4gIHRbNl0gPSAzNTtcbiAgdFs3XSA9IDM2O1xuICB0WzhdID0gMzc7XG4gIHRbOV0gPSAzODtcbiAgdFsxMF0gPSAzOTtcbiAgdFsxMV0gPSA0MDtcbiAgdFsxMl0gPSA0MTtcbiAgdFsxM10gPSA0MjtcbiAgdFsxNF0gPSA0MztcbiAgdFsxNV0gPSA0NDtcbiAgdFsxNl0gPSA0NTtcbiAgdFsxN10gPSA0NjtcbiAgdFsxOF0gPSA0NztcbiAgdFsxOV0gPSA0ODtcbiAgdFsyMF0gPSA0OTtcbiAgdFsyMV0gPSA1MDtcbiAgdFsyMl0gPSA1MTtcbiAgdFsyM10gPSA1MjtcbiAgdFsyNF0gPSA1MztcbiAgdFsyNV0gPSA1NDtcbiAgdFsyNl0gPSA1NTtcbiAgdFsyN10gPSA1NjtcbiAgdFsyOF0gPSA1NztcbiAgdFsyOV0gPSA1ODtcbiAgdFszMF0gPSA4OTQ7XG4gIHRbMzFdID0gNjA7XG4gIHRbMzJdID0gNjE7XG4gIHRbMzNdID0gNjI7XG4gIHRbMzRdID0gNjM7XG4gIHRbMzVdID0gNjQ7XG4gIHRbMzZdID0gNjU7XG4gIHRbMzddID0gNjY7XG4gIHRbMzhdID0gNjc7XG4gIHRbMzldID0gNjg7XG4gIHRbNDBdID0gNjk7XG4gIHRbNDFdID0gNzA7XG4gIHRbNDJdID0gNzE7XG4gIHRbNDNdID0gNzI7XG4gIHRbNDRdID0gNzM7XG4gIHRbNDVdID0gNzQ7XG4gIHRbNDZdID0gNzU7XG4gIHRbNDddID0gNzY7XG4gIHRbNDhdID0gNzc7XG4gIHRbNDldID0gNzg7XG4gIHRbNTBdID0gNzk7XG4gIHRbNTFdID0gODA7XG4gIHRbNTJdID0gODE7XG4gIHRbNTNdID0gODI7XG4gIHRbNTRdID0gODM7XG4gIHRbNTVdID0gODQ7XG4gIHRbNTZdID0gODU7XG4gIHRbNTddID0gODY7XG4gIHRbNThdID0gODc7XG4gIHRbNTldID0gODg7XG4gIHRbNjBdID0gODk7XG4gIHRbNjFdID0gOTA7XG4gIHRbNjJdID0gOTE7XG4gIHRbNjNdID0gOTI7XG4gIHRbNjRdID0gOTM7XG4gIHRbNjVdID0gOTQ7XG4gIHRbNjZdID0gOTU7XG4gIHRbNjddID0gOTY7XG4gIHRbNjhdID0gOTc7XG4gIHRbNjldID0gOTg7XG4gIHRbNzBdID0gOTk7XG4gIHRbNzFdID0gMTAwO1xuICB0WzcyXSA9IDEwMTtcbiAgdFs3M10gPSAxMDI7XG4gIHRbNzRdID0gMTAzO1xuICB0Wzc1XSA9IDEwNDtcbiAgdFs3Nl0gPSAxMDU7XG4gIHRbNzddID0gMTA2O1xuICB0Wzc4XSA9IDEwNztcbiAgdFs3OV0gPSAxMDg7XG4gIHRbODBdID0gMTA5O1xuICB0WzgxXSA9IDExMDtcbiAgdFs4Ml0gPSAxMTE7XG4gIHRbODNdID0gMTEyO1xuICB0Wzg0XSA9IDExMztcbiAgdFs4NV0gPSAxMTQ7XG4gIHRbODZdID0gMTE1O1xuICB0Wzg3XSA9IDExNjtcbiAgdFs4OF0gPSAxMTc7XG4gIHRbODldID0gMTE4O1xuICB0WzkwXSA9IDExOTtcbiAgdFs5MV0gPSAxMjA7XG4gIHRbOTJdID0gMTIxO1xuICB0WzkzXSA9IDEyMjtcbiAgdFs5NF0gPSAxMjM7XG4gIHRbOTVdID0gMTI0O1xuICB0Wzk2XSA9IDEyNTtcbiAgdFs5N10gPSAxMjY7XG4gIHRbOThdID0gMTk2O1xuICB0Wzk5XSA9IDE5NztcbiAgdFsxMDBdID0gMTk5O1xuICB0WzEwMV0gPSAyMDE7XG4gIHRbMTAyXSA9IDIwOTtcbiAgdFsxMDNdID0gMjE0O1xuICB0WzEwNF0gPSAyMjA7XG4gIHRbMTA1XSA9IDIyNTtcbiAgdFsxMDZdID0gMjI0O1xuICB0WzEwN10gPSAyMjY7XG4gIHRbMTA4XSA9IDIyODtcbiAgdFsxMDldID0gMjI3O1xuICB0WzExMF0gPSAyMjk7XG4gIHRbMTExXSA9IDIzMTtcbiAgdFsxMTJdID0gMjMzO1xuICB0WzExM10gPSAyMzI7XG4gIHRbMTE0XSA9IDIzNDtcbiAgdFsxMTVdID0gMjM1O1xuICB0WzExNl0gPSAyMzc7XG4gIHRbMTE3XSA9IDIzNjtcbiAgdFsxMThdID0gMjM4O1xuICB0WzExOV0gPSAyMzk7XG4gIHRbMTIwXSA9IDI0MTtcbiAgdFsxMjFdID0gMjQzO1xuICB0WzEyMl0gPSAyNDI7XG4gIHRbMTIzXSA9IDI0NDtcbiAgdFsxMjRdID0gMjQ2O1xuICB0WzEyNV0gPSAyNDU7XG4gIHRbMTI2XSA9IDI1MDtcbiAgdFsxMjddID0gMjQ5O1xuICB0WzEyOF0gPSAyNTE7XG4gIHRbMTI5XSA9IDI1MjtcbiAgdFsxMzBdID0gODIyNDtcbiAgdFsxMzFdID0gMTc2O1xuICB0WzEzMl0gPSAxNjI7XG4gIHRbMTMzXSA9IDE2MztcbiAgdFsxMzRdID0gMTY3O1xuICB0WzEzNV0gPSA4MjI2O1xuICB0WzEzNl0gPSAxODI7XG4gIHRbMTM3XSA9IDIyMztcbiAgdFsxMzhdID0gMTc0O1xuICB0WzEzOV0gPSAxNjk7XG4gIHRbMTQwXSA9IDg0ODI7XG4gIHRbMTQxXSA9IDE4MDtcbiAgdFsxNDJdID0gMTY4O1xuICB0WzE0M10gPSA4ODAwO1xuICB0WzE0NF0gPSAxOTg7XG4gIHRbMTQ1XSA9IDIxNjtcbiAgdFsxNDZdID0gODczNDtcbiAgdFsxNDddID0gMTc3O1xuICB0WzE0OF0gPSA4ODA0O1xuICB0WzE0OV0gPSA4ODA1O1xuICB0WzE1MF0gPSAxNjU7XG4gIHRbMTUxXSA9IDE4MTtcbiAgdFsxNTJdID0gODcwNjtcbiAgdFsxNTNdID0gODcyMTtcbiAgdFsxNTRdID0gODcxOTtcbiAgdFsxNTZdID0gODc0NztcbiAgdFsxNTddID0gMTcwO1xuICB0WzE1OF0gPSAxODY7XG4gIHRbMTU5XSA9IDg0ODY7XG4gIHRbMTYwXSA9IDIzMDtcbiAgdFsxNjFdID0gMjQ4O1xuICB0WzE2Ml0gPSAxOTE7XG4gIHRbMTYzXSA9IDE2MTtcbiAgdFsxNjRdID0gMTcyO1xuICB0WzE2NV0gPSA4NzMwO1xuICB0WzE2Nl0gPSA0MDI7XG4gIHRbMTY3XSA9IDg3NzY7XG4gIHRbMTY4XSA9IDg3MTA7XG4gIHRbMTY5XSA9IDE3MTtcbiAgdFsxNzBdID0gMTg3O1xuICB0WzE3MV0gPSA4MjMwO1xuICB0WzIwMF0gPSAxOTM7XG4gIHRbMjAzXSA9IDIwNTtcbiAgdFsyMTBdID0gMjE4O1xuICB0WzIyM10gPSA3MTE7XG4gIHRbMjI0XSA9IDMyMTtcbiAgdFsyMjVdID0gMzIyO1xuICB0WzIyNl0gPSAzNTI7XG4gIHRbMjI3XSA9IDM1MztcbiAgdFsyMjhdID0gMzgxO1xuICB0WzIyOV0gPSAzODI7XG4gIHRbMjMzXSA9IDIyMTtcbiAgdFsyMzRdID0gMjUzO1xuICB0WzI1Ml0gPSAyNjM7XG4gIHRbMjUzXSA9IDI2ODtcbiAgdFsyNTRdID0gMjY5O1xuICB0WzI1OF0gPSAyNTg7XG4gIHRbMjYwXSA9IDI2MDtcbiAgdFsyNjFdID0gMjYxO1xuICB0WzI2NV0gPSAyODA7XG4gIHRbMjY2XSA9IDI4MTtcbiAgdFsyNjddID0gMjgyO1xuICB0WzI2OF0gPSAyODM7XG4gIHRbMjY5XSA9IDMxMztcbiAgdFsyNzVdID0gMzIzO1xuICB0WzI3Nl0gPSAzMjQ7XG4gIHRbMjc4XSA9IDMyODtcbiAgdFsyODNdID0gMzQ0O1xuICB0WzI4NF0gPSAzNDU7XG4gIHRbMjg1XSA9IDM0NjtcbiAgdFsyODZdID0gMzQ3O1xuICB0WzI5Ml0gPSAzNjc7XG4gIHRbMjk1XSA9IDM3NztcbiAgdFsyOTZdID0gMzc4O1xuICB0WzI5OF0gPSAzODA7XG4gIHRbMzA1XSA9IDk2MztcbiAgdFszMDZdID0gOTY0O1xuICB0WzMwN10gPSA5NjY7XG4gIHRbMzA4XSA9IDgyMTU7XG4gIHRbMzA5XSA9IDgyNTI7XG4gIHRbMzEwXSA9IDgzMTk7XG4gIHRbMzExXSA9IDgzNTk7XG4gIHRbMzEyXSA9IDg1OTI7XG4gIHRbMzEzXSA9IDg1OTM7XG4gIHRbMzM3XSA9IDk1NTI7XG4gIHRbNDkzXSA9IDEwMzk7XG4gIHRbNDk0XSA9IDEwNDA7XG4gIHRbNzA1XSA9IDE1MjQ7XG4gIHRbNzA2XSA9IDgzNjI7XG4gIHRbNzEwXSA9IDY0Mjg4O1xuICB0WzcxMV0gPSA2NDI5ODtcbiAgdFs3NTldID0gMTYxNztcbiAgdFs3NjFdID0gMTc3NjtcbiAgdFs3NjNdID0gMTc3ODtcbiAgdFs3NzVdID0gMTY1MjtcbiAgdFs3NzddID0gMTc2NDtcbiAgdFs3NzhdID0gMTc4MDtcbiAgdFs3NzldID0gMTc4MTtcbiAgdFs3ODBdID0gMTc4MjtcbiAgdFs3ODJdID0gNzcxO1xuICB0Wzc4M10gPSA2NDcyNjtcbiAgdFs3ODZdID0gODM2MztcbiAgdFs3ODhdID0gODUzMjtcbiAgdFs3OTBdID0gNzY4O1xuICB0Wzc5MV0gPSA3Njk7XG4gIHRbNzkyXSA9IDc2ODtcbiAgdFs3OTVdID0gODAzO1xuICB0Wzc5N10gPSA2NDMzNjtcbiAgdFs3OThdID0gNjQzMzc7XG4gIHRbNzk5XSA9IDY0MzQyO1xuICB0WzgwMF0gPSA2NDM0MztcbiAgdFs4MDFdID0gNjQzNDQ7XG4gIHRbODAyXSA9IDY0MzQ1O1xuICB0WzgwM10gPSA2NDM2MjtcbiAgdFs4MDRdID0gNjQzNjM7XG4gIHRbODA1XSA9IDY0MzY0O1xuICB0WzI0MjRdID0gNzgyMTtcbiAgdFsyNDI1XSA9IDc4MjI7XG4gIHRbMjQyNl0gPSA3ODIzO1xuICB0WzI0MjddID0gNzgyNDtcbiAgdFsyNDI4XSA9IDc4MjU7XG4gIHRbMjQyOV0gPSA3ODI2O1xuICB0WzI0MzBdID0gNzgyNztcbiAgdFsyNDMzXSA9IDc2ODI7XG4gIHRbMjY3OF0gPSA4MDQ1O1xuICB0WzI2NzldID0gODA0NjtcbiAgdFsyODMwXSA9IDE1NTI7XG4gIHRbMjgzOF0gPSA2ODY7XG4gIHRbMjg0MF0gPSA3NTE7XG4gIHRbMjg0Ml0gPSA3NTM7XG4gIHRbMjg0M10gPSA3NTQ7XG4gIHRbMjg0NF0gPSA3NTU7XG4gIHRbMjg0Nl0gPSA3NTc7XG4gIHRbMjg1Nl0gPSA3Njc7XG4gIHRbMjg1N10gPSA4NDg7XG4gIHRbMjg1OF0gPSA4NDk7XG4gIHRbMjg2Ml0gPSA4NTM7XG4gIHRbMjg2M10gPSA4NTQ7XG4gIHRbMjg2NF0gPSA4NTU7XG4gIHRbMjg2NV0gPSA4NjE7XG4gIHRbMjg2Nl0gPSA4NjI7XG4gIHRbMjkwNl0gPSA3NDYwO1xuICB0WzI5MDhdID0gNzQ2MjtcbiAgdFsyOTA5XSA9IDc0NjM7XG4gIHRbMjkxMF0gPSA3NDY0O1xuICB0WzI5MTJdID0gNzQ2NjtcbiAgdFsyOTEzXSA9IDc0Njc7XG4gIHRbMjkxNF0gPSA3NDY4O1xuICB0WzI5MTZdID0gNzQ3MDtcbiAgdFsyOTE3XSA9IDc0NzE7XG4gIHRbMjkxOF0gPSA3NDcyO1xuICB0WzI5MjBdID0gNzQ3NDtcbiAgdFsyOTIxXSA9IDc0NzU7XG4gIHRbMjkyMl0gPSA3NDc2O1xuICB0WzI5MjRdID0gNzQ3ODtcbiAgdFsyOTI1XSA9IDc0Nzk7XG4gIHRbMjkyNl0gPSA3NDgwO1xuICB0WzI5MjhdID0gNzQ4MjtcbiAgdFsyOTI5XSA9IDc0ODM7XG4gIHRbMjkzMF0gPSA3NDg0O1xuICB0WzI5MzJdID0gNzQ4NjtcbiAgdFsyOTMzXSA9IDc0ODc7XG4gIHRbMjkzNF0gPSA3NDg4O1xuICB0WzI5MzZdID0gNzQ5MDtcbiAgdFsyOTM3XSA9IDc0OTE7XG4gIHRbMjkzOF0gPSA3NDkyO1xuICB0WzI5NDBdID0gNzQ5NDtcbiAgdFsyOTQxXSA9IDc0OTU7XG4gIHRbMjk0Ml0gPSA3NDk2O1xuICB0WzI5NDRdID0gNzQ5ODtcbiAgdFsyOTQ2XSA9IDc1MDA7XG4gIHRbMjk0OF0gPSA3NTAyO1xuICB0WzI5NTBdID0gNzUwNDtcbiAgdFsyOTUxXSA9IDc1MDU7XG4gIHRbMjk1Ml0gPSA3NTA2O1xuICB0WzI5NTRdID0gNzUwODtcbiAgdFsyOTU1XSA9IDc1MDk7XG4gIHRbMjk1Nl0gPSA3NTEwO1xuICB0WzI5NThdID0gNzUxMjtcbiAgdFsyOTU5XSA9IDc1MTM7XG4gIHRbMjk2MF0gPSA3NTE0O1xuICB0WzI5NjJdID0gNzUxNjtcbiAgdFsyOTYzXSA9IDc1MTc7XG4gIHRbMjk2NF0gPSA3NTE4O1xuICB0WzI5NjZdID0gNzUyMDtcbiAgdFsyOTY3XSA9IDc1MjE7XG4gIHRbMjk2OF0gPSA3NTIyO1xuICB0WzI5NzBdID0gNzUyNDtcbiAgdFsyOTcxXSA9IDc1MjU7XG4gIHRbMjk3Ml0gPSA3NTI2O1xuICB0WzI5NzRdID0gNzUyODtcbiAgdFsyOTc1XSA9IDc1Mjk7XG4gIHRbMjk3Nl0gPSA3NTMwO1xuICB0WzI5NzhdID0gMTUzNztcbiAgdFsyOTc5XSA9IDE1Mzg7XG4gIHRbMjk4MF0gPSAxNTM5O1xuICB0WzI5ODJdID0gMTU0OTtcbiAgdFsyOTgzXSA9IDE1NTE7XG4gIHRbMjk4NF0gPSAxNTUyO1xuICB0WzI5ODZdID0gMTU1NDtcbiAgdFsyOTg3XSA9IDE1NTU7XG4gIHRbMjk4OF0gPSAxNTU2O1xuICB0WzI5OTBdID0gMTYyMztcbiAgdFsyOTkxXSA9IDE2MjQ7XG4gIHRbMjk5NV0gPSAxNzc1O1xuICB0WzI5OTldID0gMTc5MTtcbiAgdFszMDAyXSA9IDY0MjkwO1xuICB0WzMwMDNdID0gNjQyOTE7XG4gIHRbMzAwNF0gPSA2NDI5MjtcbiAgdFszMDA2XSA9IDY0Mjk0O1xuICB0WzMwMDddID0gNjQyOTU7XG4gIHRbMzAwOF0gPSA2NDI5NjtcbiAgdFszMDExXSA9IDE5MDA7XG4gIHRbMzAxNF0gPSA4MjIzO1xuICB0WzMwMTVdID0gODI0NDtcbiAgdFszMDE3XSA9IDc1MzI7XG4gIHRbMzAxOF0gPSA3NTMzO1xuICB0WzMwMTldID0gNzUzNDtcbiAgdFszMDc1XSA9IDc1OTA7XG4gIHRbMzA3Nl0gPSA3NTkxO1xuICB0WzMwNzldID0gNzU5NDtcbiAgdFszMDgwXSA9IDc1OTU7XG4gIHRbMzA4M10gPSA3NTk4O1xuICB0WzMwODRdID0gNzU5OTtcbiAgdFszMDg3XSA9IDc2MDI7XG4gIHRbMzA4OF0gPSA3NjAzO1xuICB0WzMwOTFdID0gNzYwNjtcbiAgdFszMDkyXSA9IDc2MDc7XG4gIHRbMzA5NV0gPSA3NjEwO1xuICB0WzMwOTZdID0gNzYxMTtcbiAgdFszMDk5XSA9IDc2MTQ7XG4gIHRbMzEwMF0gPSA3NjE1O1xuICB0WzMxMDNdID0gNzYxODtcbiAgdFszMTA0XSA9IDc2MTk7XG4gIHRbMzEwN10gPSA4MzM3O1xuICB0WzMxMDhdID0gODMzODtcbiAgdFszMTE2XSA9IDE4ODQ7XG4gIHRbMzExOV0gPSAxODg1O1xuICB0WzMxMjBdID0gMTg4NTtcbiAgdFszMTIzXSA9IDE4ODY7XG4gIHRbMzEyNF0gPSAxODg2O1xuICB0WzMxMjddID0gMTg4NztcbiAgdFszMTI4XSA9IDE4ODc7XG4gIHRbMzEzMV0gPSAxODg4O1xuICB0WzMxMzJdID0gMTg4ODtcbiAgdFszMTM1XSA9IDE4ODk7XG4gIHRbMzEzNl0gPSAxODg5O1xuICB0WzMxMzldID0gMTg5MDtcbiAgdFszMTQwXSA9IDE4OTA7XG4gIHRbMzE0M10gPSAxODkxO1xuICB0WzMxNDRdID0gMTg5MTtcbiAgdFszMTQ3XSA9IDE4OTI7XG4gIHRbMzE0OF0gPSAxODkyO1xuICB0WzMxNTNdID0gNTgwO1xuICB0WzMxNTRdID0gNTgxO1xuICB0WzMxNTddID0gNTg0O1xuICB0WzMxNThdID0gNTg1O1xuICB0WzMxNjFdID0gNTg4O1xuICB0WzMxNjJdID0gNTg5O1xuICB0WzMxNjVdID0gODkxO1xuICB0WzMxNjZdID0gODkyO1xuICB0WzMxNjldID0gMTI3NDtcbiAgdFszMTcwXSA9IDEyNzU7XG4gIHRbMzE3M10gPSAxMjc4O1xuICB0WzMxNzRdID0gMTI3OTtcbiAgdFszMTgxXSA9IDc2MjI7XG4gIHRbMzE4Ml0gPSA3NjIzO1xuICB0WzMyODJdID0gMTE3OTk7XG4gIHRbMzMxNl0gPSA1Nzg7XG4gIHRbMzM3OV0gPSA0Mjc4NTtcbiAgdFszMzkzXSA9IDExNTk7XG4gIHRbMzQxNl0gPSA4Mzc3O1xufSk7XG5leHBvcnRzLmdldEdseXBoTWFwRm9yU3RhbmRhcmRGb250cyA9IGdldEdseXBoTWFwRm9yU3RhbmRhcmRGb250cztcbmNvbnN0IGdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQXJpYWxCbGFjayA9ICgwLCBfY29yZV91dGlscy5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gIHRbMjI3XSA9IDMyMjtcbiAgdFsyNjRdID0gMjYxO1xuICB0WzI5MV0gPSAzNDY7XG59KTtcbmV4cG9ydHMuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JBcmlhbEJsYWNrID0gZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JBcmlhbEJsYWNrO1xuY29uc3QgZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JDYWxpYnJpID0gKDAsIF9jb3JlX3V0aWxzLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoZnVuY3Rpb24gKHQpIHtcbiAgdFsxXSA9IDMyO1xuICB0WzRdID0gNjU7XG4gIHRbNl0gPSAxOTM7XG4gIHRbMTddID0gNjY7XG4gIHRbMThdID0gNjc7XG4gIHRbMjFdID0gMjY4O1xuICB0WzI0XSA9IDY4O1xuICB0WzI4XSA9IDY5O1xuICB0WzMwXSA9IDIwMTtcbiAgdFszMl0gPSAyODI7XG4gIHRbMzhdID0gNzA7XG4gIHRbMzldID0gNzE7XG4gIHRbNDRdID0gNzI7XG4gIHRbNDddID0gNzM7XG4gIHRbNDldID0gMjA1O1xuICB0WzU4XSA9IDc0O1xuICB0WzYwXSA9IDc1O1xuICB0WzYyXSA9IDc2O1xuICB0WzY4XSA9IDc3O1xuICB0WzY5XSA9IDc4O1xuICB0Wzc1XSA9IDc5O1xuICB0Wzg3XSA9IDgwO1xuICB0Wzg5XSA9IDgxO1xuICB0WzkwXSA9IDgyO1xuICB0WzkyXSA9IDM0NDtcbiAgdFs5NF0gPSA4MztcbiAgdFs5N10gPSAzNTI7XG4gIHRbMTAwXSA9IDg0O1xuICB0WzEwNF0gPSA4NTtcbiAgdFsxMTVdID0gODY7XG4gIHRbMTE2XSA9IDg3O1xuICB0WzEyMV0gPSA4ODtcbiAgdFsxMjJdID0gODk7XG4gIHRbMTI0XSA9IDIyMTtcbiAgdFsxMjddID0gOTA7XG4gIHRbMTI5XSA9IDM4MTtcbiAgdFsyNThdID0gOTc7XG4gIHRbMjYwXSA9IDIyNTtcbiAgdFsyNjhdID0gMjYxO1xuICB0WzI3MV0gPSA5ODtcbiAgdFsyNzJdID0gOTk7XG4gIHRbMjczXSA9IDI2MztcbiAgdFsyNzVdID0gMjY5O1xuICB0WzI4Ml0gPSAxMDA7XG4gIHRbMjg2XSA9IDEwMTtcbiAgdFsyODhdID0gMjMzO1xuICB0WzI5MF0gPSAyODM7XG4gIHRbMjk1XSA9IDI4MTtcbiAgdFsyOTZdID0gMTAyO1xuICB0WzMzNl0gPSAxMDM7XG4gIHRbMzQ2XSA9IDEwNDtcbiAgdFszNDldID0gMTA1O1xuICB0WzM1MV0gPSAyMzc7XG4gIHRbMzYxXSA9IDEwNjtcbiAgdFszNjRdID0gMTA3O1xuICB0WzM2N10gPSAxMDg7XG4gIHRbMzcxXSA9IDMyMjtcbiAgdFszNzNdID0gMTA5O1xuICB0WzM3NF0gPSAxMTA7XG4gIHRbMzgxXSA9IDExMTtcbiAgdFszODNdID0gMjQzO1xuICB0WzM5M10gPSAxMTI7XG4gIHRbMzk1XSA9IDExMztcbiAgdFszOTZdID0gMTE0O1xuICB0WzM5OF0gPSAzNDU7XG4gIHRbNDAwXSA9IDExNTtcbiAgdFs0MDFdID0gMzQ3O1xuICB0WzQwM10gPSAzNTM7XG4gIHRbNDEwXSA9IDExNjtcbiAgdFs0MzddID0gMTE3O1xuICB0WzQ0OF0gPSAxMTg7XG4gIHRbNDQ5XSA9IDExOTtcbiAgdFs0NTRdID0gMTIwO1xuICB0WzQ1NV0gPSAxMjE7XG4gIHRbNDU3XSA9IDI1MztcbiAgdFs0NjBdID0gMTIyO1xuICB0WzQ2Ml0gPSAzODI7XG4gIHRbNDYzXSA9IDM4MDtcbiAgdFs4NTNdID0gNDQ7XG4gIHRbODU1XSA9IDU4O1xuICB0Wzg1Nl0gPSA0NjtcbiAgdFs4NzZdID0gNDc7XG4gIHRbODc4XSA9IDQ1O1xuICB0Wzg4Ml0gPSA0NTtcbiAgdFs4OTRdID0gNDA7XG4gIHRbODk1XSA9IDQxO1xuICB0Wzg5Nl0gPSA5MTtcbiAgdFs4OTddID0gOTM7XG4gIHRbOTIzXSA9IDY0O1xuICB0WzEwMDRdID0gNDg7XG4gIHRbMTAwNV0gPSA0OTtcbiAgdFsxMDA2XSA9IDUwO1xuICB0WzEwMDddID0gNTE7XG4gIHRbMTAwOF0gPSA1MjtcbiAgdFsxMDA5XSA9IDUzO1xuICB0WzEwMTBdID0gNTQ7XG4gIHRbMTAxMV0gPSA1NTtcbiAgdFsxMDEyXSA9IDU2O1xuICB0WzEwMTNdID0gNTc7XG4gIHRbMTA4MV0gPSAzNztcbiAgdFsxMDg1XSA9IDQzO1xuICB0WzEwODZdID0gNDU7XG59KTtcbmV4cG9ydHMuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JDYWxpYnJpID0gZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JDYWxpYnJpO1xuXG5mdW5jdGlvbiBnZXRTdGFuZGFyZEZvbnROYW1lKG5hbWUpIHtcbiAgY29uc3QgZm9udE5hbWUgPSAoMCwgX2ZvbnRzX3V0aWxzLm5vcm1hbGl6ZUZvbnROYW1lKShuYW1lKTtcbiAgY29uc3Qgc3RkRm9udE1hcCA9IGdldFN0ZEZvbnRNYXAoKTtcbiAgcmV0dXJuIHN0ZEZvbnRNYXBbZm9udE5hbWVdO1xufVxuXG4vKioqLyB9KSxcbi8qIDQ4ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLlRvVW5pY29kZU1hcCA9IGV4cG9ydHMuSWRlbnRpdHlUb1VuaWNvZGVNYXAgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbmNsYXNzIFRvVW5pY29kZU1hcCB7XG4gIGNvbnN0cnVjdG9yKGNtYXAgPSBbXSkge1xuICAgIHRoaXMuX21hcCA9IGNtYXA7XG4gIH1cblxuICBnZXQgbGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLl9tYXAubGVuZ3RoO1xuICB9XG5cbiAgZm9yRWFjaChjYWxsYmFjaykge1xuICAgIGZvciAoY29uc3QgY2hhckNvZGUgaW4gdGhpcy5fbWFwKSB7XG4gICAgICBjYWxsYmFjayhjaGFyQ29kZSwgdGhpcy5fbWFwW2NoYXJDb2RlXS5jaGFyQ29kZUF0KDApKTtcbiAgICB9XG4gIH1cblxuICBoYXMoaSkge1xuICAgIHJldHVybiB0aGlzLl9tYXBbaV0gIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldChpKSB7XG4gICAgcmV0dXJuIHRoaXMuX21hcFtpXTtcbiAgfVxuXG4gIGNoYXJDb2RlT2YodmFsdWUpIHtcbiAgICBjb25zdCBtYXAgPSB0aGlzLl9tYXA7XG5cbiAgICBpZiAobWFwLmxlbmd0aCA8PSAweDEwMDAwKSB7XG4gICAgICByZXR1cm4gbWFwLmluZGV4T2YodmFsdWUpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2hhckNvZGUgaW4gbWFwKSB7XG4gICAgICBpZiAobWFwW2NoYXJDb2RlXSA9PT0gdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGNoYXJDb2RlIHwgMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICBhbWVuZChtYXApIHtcbiAgICBmb3IgKGNvbnN0IGNoYXJDb2RlIGluIG1hcCkge1xuICAgICAgdGhpcy5fbWFwW2NoYXJDb2RlXSA9IG1hcFtjaGFyQ29kZV07XG4gICAgfVxuICB9XG5cbn1cblxuZXhwb3J0cy5Ub1VuaWNvZGVNYXAgPSBUb1VuaWNvZGVNYXA7XG5cbmNsYXNzIElkZW50aXR5VG9Vbmljb2RlTWFwIHtcbiAgY29uc3RydWN0b3IoZmlyc3RDaGFyLCBsYXN0Q2hhcikge1xuICAgIHRoaXMuZmlyc3RDaGFyID0gZmlyc3RDaGFyO1xuICAgIHRoaXMubGFzdENoYXIgPSBsYXN0Q2hhcjtcbiAgfVxuXG4gIGdldCBsZW5ndGgoKSB7XG4gICAgcmV0dXJuIHRoaXMubGFzdENoYXIgKyAxIC0gdGhpcy5maXJzdENoYXI7XG4gIH1cblxuICBmb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgZm9yIChsZXQgaSA9IHRoaXMuZmlyc3RDaGFyLCBpaSA9IHRoaXMubGFzdENoYXI7IGkgPD0gaWk7IGkrKykge1xuICAgICAgY2FsbGJhY2soaSwgaSk7XG4gICAgfVxuICB9XG5cbiAgaGFzKGkpIHtcbiAgICByZXR1cm4gdGhpcy5maXJzdENoYXIgPD0gaSAmJiBpIDw9IHRoaXMubGFzdENoYXI7XG4gIH1cblxuICBnZXQoaSkge1xuICAgIGlmICh0aGlzLmZpcnN0Q2hhciA8PSBpICYmIGkgPD0gdGhpcy5sYXN0Q2hhcikge1xuICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoaSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNoYXJDb2RlT2Yodikge1xuICAgIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKHYpICYmIHYgPj0gdGhpcy5maXJzdENoYXIgJiYgdiA8PSB0aGlzLmxhc3RDaGFyID8gdiA6IC0xO1xuICB9XG5cbiAgYW1lbmQobWFwKSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIlNob3VsZCBub3QgY2FsbCBhbWVuZCgpXCIpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5JZGVudGl0eVRvVW5pY29kZU1hcCA9IElkZW50aXR5VG9Vbmljb2RlTWFwO1xuXG4vKioqLyB9KSxcbi8qIDQ5ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLkNGRkZvbnQgPSB2b2lkIDA7XG5cbnZhciBfY2ZmX3BhcnNlciA9IF9fd19wZGZqc19yZXF1aXJlX18oNDUpO1xuXG52YXIgX2ZvbnRzX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXygxOCk7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbmNsYXNzIENGRkZvbnQge1xuICBjb25zdHJ1Y3RvcihmaWxlLCBwcm9wZXJ0aWVzKSB7XG4gICAgdGhpcy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgX2NmZl9wYXJzZXIuQ0ZGUGFyc2VyKGZpbGUsIHByb3BlcnRpZXMsIF9mb250c191dGlscy5TRUFDX0FOQUxZU0lTX0VOQUJMRUQpO1xuICAgIHRoaXMuY2ZmID0gcGFyc2VyLnBhcnNlKCk7XG4gICAgdGhpcy5jZmYuZHVwbGljYXRlRmlyc3RHbHlwaCgpO1xuICAgIGNvbnN0IGNvbXBpbGVyID0gbmV3IF9jZmZfcGFyc2VyLkNGRkNvbXBpbGVyKHRoaXMuY2ZmKTtcbiAgICB0aGlzLnNlYWNzID0gdGhpcy5jZmYuc2VhY3M7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5kYXRhID0gY29tcGlsZXIuY29tcGlsZSgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShcIkZhaWxlZCB0byBjb21waWxlIGZvbnQgXCIgKyBwcm9wZXJ0aWVzLmxvYWRlZE5hbWUpO1xuICAgICAgdGhpcy5kYXRhID0gZmlsZTtcbiAgICB9XG5cbiAgICB0aGlzLl9jcmVhdGVCdWlsdEluRW5jb2RpbmcoKTtcbiAgfVxuXG4gIGdldCBudW1HbHlwaHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2ZmLmNoYXJTdHJpbmdzLmNvdW50O1xuICB9XG5cbiAgZ2V0Q2hhcnNldCgpIHtcbiAgICByZXR1cm4gdGhpcy5jZmYuY2hhcnNldC5jaGFyc2V0O1xuICB9XG5cbiAgZ2V0R2x5cGhNYXBwaW5nKCkge1xuICAgIGNvbnN0IGNmZiA9IHRoaXMuY2ZmO1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzLnByb3BlcnRpZXM7XG4gICAgY29uc3QgY2hhcnNldHMgPSBjZmYuY2hhcnNldC5jaGFyc2V0O1xuICAgIGxldCBjaGFyQ29kZVRvR2x5cGhJZDtcbiAgICBsZXQgZ2x5cGhJZDtcblxuICAgIGlmIChwcm9wZXJ0aWVzLmNvbXBvc2l0ZSkge1xuICAgICAgY2hhckNvZGVUb0dseXBoSWQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgbGV0IGNoYXJDb2RlO1xuXG4gICAgICBpZiAoY2ZmLmlzQ0lERm9udCkge1xuICAgICAgICBmb3IgKGdseXBoSWQgPSAwOyBnbHlwaElkIDwgY2hhcnNldHMubGVuZ3RoOyBnbHlwaElkKyspIHtcbiAgICAgICAgICBjb25zdCBjaWQgPSBjaGFyc2V0c1tnbHlwaElkXTtcbiAgICAgICAgICBjaGFyQ29kZSA9IHByb3BlcnRpZXMuY01hcC5jaGFyQ29kZU9mKGNpZCk7XG4gICAgICAgICAgY2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdID0gZ2x5cGhJZDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChnbHlwaElkID0gMDsgZ2x5cGhJZCA8IGNmZi5jaGFyU3RyaW5ncy5jb3VudDsgZ2x5cGhJZCsrKSB7XG4gICAgICAgICAgY2hhckNvZGUgPSBwcm9wZXJ0aWVzLmNNYXAuY2hhckNvZGVPZihnbHlwaElkKTtcbiAgICAgICAgICBjaGFyQ29kZVRvR2x5cGhJZFtjaGFyQ29kZV0gPSBnbHlwaElkO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjaGFyQ29kZVRvR2x5cGhJZDtcbiAgICB9XG5cbiAgICBsZXQgZW5jb2RpbmcgPSBjZmYuZW5jb2RpbmcgPyBjZmYuZW5jb2RpbmcuZW5jb2RpbmcgOiBudWxsO1xuXG4gICAgaWYgKHByb3BlcnRpZXMuaXNJbnRlcm5hbEZvbnQpIHtcbiAgICAgIGVuY29kaW5nID0gcHJvcGVydGllcy5kZWZhdWx0RW5jb2Rpbmc7XG4gICAgfVxuXG4gICAgY2hhckNvZGVUb0dseXBoSWQgPSAoMCwgX2ZvbnRzX3V0aWxzLnR5cGUxRm9udEdseXBoTWFwcGluZykocHJvcGVydGllcywgZW5jb2RpbmcsIGNoYXJzZXRzKTtcbiAgICByZXR1cm4gY2hhckNvZGVUb0dseXBoSWQ7XG4gIH1cblxuICBoYXNHbHlwaElkKGlkKSB7XG4gICAgcmV0dXJuIHRoaXMuY2ZmLmhhc0dseXBoSWQoaWQpO1xuICB9XG5cbiAgX2NyZWF0ZUJ1aWx0SW5FbmNvZGluZygpIHtcbiAgICBjb25zdCB7XG4gICAgICBjaGFyc2V0LFxuICAgICAgZW5jb2RpbmdcbiAgICB9ID0gdGhpcy5jZmY7XG5cbiAgICBpZiAoIWNoYXJzZXQgfHwgIWVuY29kaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY2hhcnNldHMgPSBjaGFyc2V0LmNoYXJzZXQsXG4gICAgICAgICAgZW5jb2RpbmdzID0gZW5jb2RpbmcuZW5jb2Rpbmc7XG4gICAgY29uc3QgbWFwID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGNoYXJDb2RlIGluIGVuY29kaW5ncykge1xuICAgICAgY29uc3QgZ2x5cGhJZCA9IGVuY29kaW5nc1tjaGFyQ29kZV07XG5cbiAgICAgIGlmIChnbHlwaElkID49IDApIHtcbiAgICAgICAgY29uc3QgZ2x5cGhOYW1lID0gY2hhcnNldHNbZ2x5cGhJZF07XG5cbiAgICAgICAgaWYgKGdseXBoTmFtZSkge1xuICAgICAgICAgIG1hcFtjaGFyQ29kZV0gPSBnbHlwaE5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWFwLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucHJvcGVydGllcy5idWlsdEluRW5jb2RpbmcgPSBtYXA7XG4gICAgfVxuICB9XG5cbn1cblxuZXhwb3J0cy5DRkZGb250ID0gQ0ZGRm9udDtcblxuLyoqKi8gfSksXG4vKiA1MCAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5Gb250UmVuZGVyZXJGYWN0b3J5ID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX2NmZl9wYXJzZXIgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDQ1KTtcblxudmFyIF9nbHlwaGxpc3QgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIwKTtcblxudmFyIF9lbmNvZGluZ3MgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDE5KTtcblxudmFyIF9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEwKTtcblxuZnVuY3Rpb24gZ2V0TG9uZyhkYXRhLCBvZmZzZXQpIHtcbiAgcmV0dXJuIGRhdGFbb2Zmc2V0XSA8PCAyNCB8IGRhdGFbb2Zmc2V0ICsgMV0gPDwgMTYgfCBkYXRhW29mZnNldCArIDJdIDw8IDggfCBkYXRhW29mZnNldCArIDNdO1xufVxuXG5mdW5jdGlvbiBnZXRVc2hvcnQoZGF0YSwgb2Zmc2V0KSB7XG4gIHJldHVybiBkYXRhW29mZnNldF0gPDwgOCB8IGRhdGFbb2Zmc2V0ICsgMV07XG59XG5cbmZ1bmN0aW9uIGdldFN1YnJvdXRpbmVCaWFzKHN1YnJzKSB7XG4gIGNvbnN0IG51bVN1YnJzID0gc3VicnMubGVuZ3RoO1xuICBsZXQgYmlhcyA9IDMyNzY4O1xuXG4gIGlmIChudW1TdWJycyA8IDEyNDApIHtcbiAgICBiaWFzID0gMTA3O1xuICB9IGVsc2UgaWYgKG51bVN1YnJzIDwgMzM5MDApIHtcbiAgICBiaWFzID0gMTEzMTtcbiAgfVxuXG4gIHJldHVybiBiaWFzO1xufVxuXG5mdW5jdGlvbiBwYXJzZUNtYXAoZGF0YSwgc3RhcnQsIGVuZCkge1xuICBjb25zdCBvZmZzZXQgPSBnZXRVc2hvcnQoZGF0YSwgc3RhcnQgKyAyKSA9PT0gMSA/IGdldExvbmcoZGF0YSwgc3RhcnQgKyA4KSA6IGdldExvbmcoZGF0YSwgc3RhcnQgKyAxNik7XG4gIGNvbnN0IGZvcm1hdCA9IGdldFVzaG9ydChkYXRhLCBzdGFydCArIG9mZnNldCk7XG4gIGxldCByYW5nZXMsIHAsIGk7XG5cbiAgaWYgKGZvcm1hdCA9PT0gNCkge1xuICAgIGdldFVzaG9ydChkYXRhLCBzdGFydCArIG9mZnNldCArIDIpO1xuICAgIGNvbnN0IHNlZ0NvdW50ID0gZ2V0VXNob3J0KGRhdGEsIHN0YXJ0ICsgb2Zmc2V0ICsgNikgPj4gMTtcbiAgICBwID0gc3RhcnQgKyBvZmZzZXQgKyAxNDtcbiAgICByYW5nZXMgPSBbXTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBzZWdDb3VudDsgaSsrLCBwICs9IDIpIHtcbiAgICAgIHJhbmdlc1tpXSA9IHtcbiAgICAgICAgZW5kOiBnZXRVc2hvcnQoZGF0YSwgcClcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcCArPSAyO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHNlZ0NvdW50OyBpKyssIHAgKz0gMikge1xuICAgICAgcmFuZ2VzW2ldLnN0YXJ0ID0gZ2V0VXNob3J0KGRhdGEsIHApO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCBzZWdDb3VudDsgaSsrLCBwICs9IDIpIHtcbiAgICAgIHJhbmdlc1tpXS5pZERlbHRhID0gZ2V0VXNob3J0KGRhdGEsIHApO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCBzZWdDb3VudDsgaSsrLCBwICs9IDIpIHtcbiAgICAgIGxldCBpZE9mZnNldCA9IGdldFVzaG9ydChkYXRhLCBwKTtcblxuICAgICAgaWYgKGlkT2Zmc2V0ID09PSAwKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICByYW5nZXNbaV0uaWRzID0gW107XG5cbiAgICAgIGZvciAobGV0IGogPSAwLCBqaiA9IHJhbmdlc1tpXS5lbmQgLSByYW5nZXNbaV0uc3RhcnQgKyAxOyBqIDwgamo7IGorKykge1xuICAgICAgICByYW5nZXNbaV0uaWRzW2pdID0gZ2V0VXNob3J0KGRhdGEsIHAgKyBpZE9mZnNldCk7XG4gICAgICAgIGlkT2Zmc2V0ICs9IDI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJhbmdlcztcbiAgfSBlbHNlIGlmIChmb3JtYXQgPT09IDEyKSB7XG4gICAgZ2V0TG9uZyhkYXRhLCBzdGFydCArIG9mZnNldCArIDQpO1xuICAgIGNvbnN0IGdyb3VwcyA9IGdldExvbmcoZGF0YSwgc3RhcnQgKyBvZmZzZXQgKyAxMik7XG4gICAgcCA9IHN0YXJ0ICsgb2Zmc2V0ICsgMTY7XG4gICAgcmFuZ2VzID0gW107XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXBzOyBpKyspIHtcbiAgICAgIHJhbmdlcy5wdXNoKHtcbiAgICAgICAgc3RhcnQ6IGdldExvbmcoZGF0YSwgcCksXG4gICAgICAgIGVuZDogZ2V0TG9uZyhkYXRhLCBwICsgNCksXG4gICAgICAgIGlkRGVsdGE6IGdldExvbmcoZGF0YSwgcCArIDgpIC0gZ2V0TG9uZyhkYXRhLCBwKVxuICAgICAgfSk7XG4gICAgICBwICs9IDEyO1xuICAgIH1cblxuICAgIHJldHVybiByYW5nZXM7XG4gIH1cblxuICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYHVuc3VwcG9ydGVkIGNtYXA6ICR7Zm9ybWF0fWApO1xufVxuXG5mdW5jdGlvbiBwYXJzZUNmZihkYXRhLCBzdGFydCwgZW5kLCBzZWFjQW5hbHlzaXNFbmFibGVkKSB7XG4gIGNvbnN0IHByb3BlcnRpZXMgPSB7fTtcbiAgY29uc3QgcGFyc2VyID0gbmV3IF9jZmZfcGFyc2VyLkNGRlBhcnNlcihuZXcgX3N0cmVhbS5TdHJlYW0oZGF0YSwgc3RhcnQsIGVuZCAtIHN0YXJ0KSwgcHJvcGVydGllcywgc2VhY0FuYWx5c2lzRW5hYmxlZCk7XG4gIGNvbnN0IGNmZiA9IHBhcnNlci5wYXJzZSgpO1xuICByZXR1cm4ge1xuICAgIGdseXBoczogY2ZmLmNoYXJTdHJpbmdzLm9iamVjdHMsXG4gICAgc3VicnM6IGNmZi50b3BEaWN0LnByaXZhdGVEaWN0ICYmIGNmZi50b3BEaWN0LnByaXZhdGVEaWN0LnN1YnJzSW5kZXggJiYgY2ZmLnRvcERpY3QucHJpdmF0ZURpY3Quc3VicnNJbmRleC5vYmplY3RzLFxuICAgIGdzdWJyczogY2ZmLmdsb2JhbFN1YnJJbmRleCAmJiBjZmYuZ2xvYmFsU3VickluZGV4Lm9iamVjdHMsXG4gICAgaXNDRkZDSURGb250OiBjZmYuaXNDSURGb250LFxuICAgIGZkU2VsZWN0OiBjZmYuZmRTZWxlY3QsXG4gICAgZmRBcnJheTogY2ZmLmZkQXJyYXlcbiAgfTtcbn1cblxuZnVuY3Rpb24gcGFyc2VHbHlmVGFibGUoZ2x5ZiwgbG9jYSwgaXNHbHlwaExvY2F0aW9uc0xvbmcpIHtcbiAgbGV0IGl0ZW1TaXplLCBpdGVtRGVjb2RlO1xuXG4gIGlmIChpc0dseXBoTG9jYXRpb25zTG9uZykge1xuICAgIGl0ZW1TaXplID0gNDtcblxuICAgIGl0ZW1EZWNvZGUgPSBmdW5jdGlvbiBmb250SXRlbURlY29kZUxvbmcoZGF0YSwgb2Zmc2V0KSB7XG4gICAgICByZXR1cm4gZGF0YVtvZmZzZXRdIDw8IDI0IHwgZGF0YVtvZmZzZXQgKyAxXSA8PCAxNiB8IGRhdGFbb2Zmc2V0ICsgMl0gPDwgOCB8IGRhdGFbb2Zmc2V0ICsgM107XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBpdGVtU2l6ZSA9IDI7XG5cbiAgICBpdGVtRGVjb2RlID0gZnVuY3Rpb24gZm9udEl0ZW1EZWNvZGUoZGF0YSwgb2Zmc2V0KSB7XG4gICAgICByZXR1cm4gZGF0YVtvZmZzZXRdIDw8IDkgfCBkYXRhW29mZnNldCArIDFdIDw8IDE7XG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGdseXBocyA9IFtdO1xuICBsZXQgc3RhcnRPZmZzZXQgPSBpdGVtRGVjb2RlKGxvY2EsIDApO1xuXG4gIGZvciAobGV0IGogPSBpdGVtU2l6ZTsgaiA8IGxvY2EubGVuZ3RoOyBqICs9IGl0ZW1TaXplKSB7XG4gICAgY29uc3QgZW5kT2Zmc2V0ID0gaXRlbURlY29kZShsb2NhLCBqKTtcbiAgICBnbHlwaHMucHVzaChnbHlmLnN1YmFycmF5KHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpKTtcbiAgICBzdGFydE9mZnNldCA9IGVuZE9mZnNldDtcbiAgfVxuXG4gIHJldHVybiBnbHlwaHM7XG59XG5cbmZ1bmN0aW9uIGxvb2t1cENtYXAocmFuZ2VzLCB1bmljb2RlKSB7XG4gIGNvbnN0IGNvZGUgPSB1bmljb2RlLmNvZGVQb2ludEF0KDApO1xuICBsZXQgZ2lkID0gMCxcbiAgICAgIGwgPSAwLFxuICAgICAgciA9IHJhbmdlcy5sZW5ndGggLSAxO1xuXG4gIHdoaWxlIChsIDwgcikge1xuICAgIGNvbnN0IGMgPSBsICsgciArIDEgPj4gMTtcblxuICAgIGlmIChjb2RlIDwgcmFuZ2VzW2NdLnN0YXJ0KSB7XG4gICAgICByID0gYyAtIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGwgPSBjO1xuICAgIH1cbiAgfVxuXG4gIGlmIChyYW5nZXNbbF0uc3RhcnQgPD0gY29kZSAmJiBjb2RlIDw9IHJhbmdlc1tsXS5lbmQpIHtcbiAgICBnaWQgPSByYW5nZXNbbF0uaWREZWx0YSArIChyYW5nZXNbbF0uaWRzID8gcmFuZ2VzW2xdLmlkc1tjb2RlIC0gcmFuZ2VzW2xdLnN0YXJ0XSA6IGNvZGUpICYgMHhmZmZmO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjaGFyQ29kZTogY29kZSxcbiAgICBnbHlwaElkOiBnaWRcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tcGlsZUdseWYoY29kZSwgY21kcywgZm9udCkge1xuICBmdW5jdGlvbiBtb3ZlVG8oeCwgeSkge1xuICAgIGNtZHMucHVzaCh7XG4gICAgICBjbWQ6IFwibW92ZVRvXCIsXG4gICAgICBhcmdzOiBbeCwgeV1cbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxpbmVUbyh4LCB5KSB7XG4gICAgY21kcy5wdXNoKHtcbiAgICAgIGNtZDogXCJsaW5lVG9cIixcbiAgICAgIGFyZ3M6IFt4LCB5XVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gcXVhZHJhdGljQ3VydmVUbyh4YSwgeWEsIHgsIHkpIHtcbiAgICBjbWRzLnB1c2goe1xuICAgICAgY21kOiBcInF1YWRyYXRpY0N1cnZlVG9cIixcbiAgICAgIGFyZ3M6IFt4YSwgeWEsIHgsIHldXG4gICAgfSk7XG4gIH1cblxuICBsZXQgaSA9IDA7XG4gIGNvbnN0IG51bWJlck9mQ29udG91cnMgPSAoY29kZVtpXSA8PCAyNCB8IGNvZGVbaSArIDFdIDw8IDE2KSA+PiAxNjtcbiAgbGV0IGZsYWdzO1xuICBsZXQgeCA9IDAsXG4gICAgICB5ID0gMDtcbiAgaSArPSAxMDtcblxuICBpZiAobnVtYmVyT2ZDb250b3VycyA8IDApIHtcbiAgICBkbyB7XG4gICAgICBmbGFncyA9IGNvZGVbaV0gPDwgOCB8IGNvZGVbaSArIDFdO1xuICAgICAgY29uc3QgZ2x5cGhJbmRleCA9IGNvZGVbaSArIDJdIDw8IDggfCBjb2RlW2kgKyAzXTtcbiAgICAgIGkgKz0gNDtcbiAgICAgIGxldCBhcmcxLCBhcmcyO1xuXG4gICAgICBpZiAoZmxhZ3MgJiAweDAxKSB7XG4gICAgICAgIGFyZzEgPSAoY29kZVtpXSA8PCAyNCB8IGNvZGVbaSArIDFdIDw8IDE2KSA+PiAxNjtcbiAgICAgICAgYXJnMiA9IChjb2RlW2kgKyAyXSA8PCAyNCB8IGNvZGVbaSArIDNdIDw8IDE2KSA+PiAxNjtcbiAgICAgICAgaSArPSA0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXJnMSA9IGNvZGVbaSsrXTtcbiAgICAgICAgYXJnMiA9IGNvZGVbaSsrXTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZsYWdzICYgMHgwMikge1xuICAgICAgICB4ID0gYXJnMTtcbiAgICAgICAgeSA9IGFyZzI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB4ID0gMDtcbiAgICAgICAgeSA9IDA7XG4gICAgICB9XG5cbiAgICAgIGxldCBzY2FsZVggPSAxLFxuICAgICAgICAgIHNjYWxlWSA9IDEsXG4gICAgICAgICAgc2NhbGUwMSA9IDAsXG4gICAgICAgICAgc2NhbGUxMCA9IDA7XG5cbiAgICAgIGlmIChmbGFncyAmIDB4MDgpIHtcbiAgICAgICAgc2NhbGVYID0gc2NhbGVZID0gKGNvZGVbaV0gPDwgMjQgfCBjb2RlW2kgKyAxXSA8PCAxNikgLyAxMDczNzQxODI0O1xuICAgICAgICBpICs9IDI7XG4gICAgICB9IGVsc2UgaWYgKGZsYWdzICYgMHg0MCkge1xuICAgICAgICBzY2FsZVggPSAoY29kZVtpXSA8PCAyNCB8IGNvZGVbaSArIDFdIDw8IDE2KSAvIDEwNzM3NDE4MjQ7XG4gICAgICAgIHNjYWxlWSA9IChjb2RlW2kgKyAyXSA8PCAyNCB8IGNvZGVbaSArIDNdIDw8IDE2KSAvIDEwNzM3NDE4MjQ7XG4gICAgICAgIGkgKz0gNDtcbiAgICAgIH0gZWxzZSBpZiAoZmxhZ3MgJiAweDgwKSB7XG4gICAgICAgIHNjYWxlWCA9IChjb2RlW2ldIDw8IDI0IHwgY29kZVtpICsgMV0gPDwgMTYpIC8gMTA3Mzc0MTgyNDtcbiAgICAgICAgc2NhbGUwMSA9IChjb2RlW2kgKyAyXSA8PCAyNCB8IGNvZGVbaSArIDNdIDw8IDE2KSAvIDEwNzM3NDE4MjQ7XG4gICAgICAgIHNjYWxlMTAgPSAoY29kZVtpICsgNF0gPDwgMjQgfCBjb2RlW2kgKyA1XSA8PCAxNikgLyAxMDczNzQxODI0O1xuICAgICAgICBzY2FsZVkgPSAoY29kZVtpICsgNl0gPDwgMjQgfCBjb2RlW2kgKyA3XSA8PCAxNikgLyAxMDczNzQxODI0O1xuICAgICAgICBpICs9IDg7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN1YmdseXBoID0gZm9udC5nbHlwaHNbZ2x5cGhJbmRleF07XG5cbiAgICAgIGlmIChzdWJnbHlwaCkge1xuICAgICAgICBjbWRzLnB1c2goe1xuICAgICAgICAgIGNtZDogXCJzYXZlXCJcbiAgICAgICAgfSwge1xuICAgICAgICAgIGNtZDogXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgICBhcmdzOiBbc2NhbGVYLCBzY2FsZTAxLCBzY2FsZTEwLCBzY2FsZVksIHgsIHldXG4gICAgICAgIH0pO1xuICAgICAgICBjb21waWxlR2x5ZihzdWJnbHlwaCwgY21kcywgZm9udCk7XG4gICAgICAgIGNtZHMucHVzaCh7XG4gICAgICAgICAgY21kOiBcInJlc3RvcmVcIlxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IHdoaWxlIChmbGFncyAmIDB4MjApO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGVuZFB0c09mQ29udG91cnMgPSBbXTtcbiAgICBsZXQgaiwgamo7XG5cbiAgICBmb3IgKGogPSAwOyBqIDwgbnVtYmVyT2ZDb250b3VyczsgaisrKSB7XG4gICAgICBlbmRQdHNPZkNvbnRvdXJzLnB1c2goY29kZVtpXSA8PCA4IHwgY29kZVtpICsgMV0pO1xuICAgICAgaSArPSAyO1xuICAgIH1cblxuICAgIGNvbnN0IGluc3RydWN0aW9uTGVuZ3RoID0gY29kZVtpXSA8PCA4IHwgY29kZVtpICsgMV07XG4gICAgaSArPSAyICsgaW5zdHJ1Y3Rpb25MZW5ndGg7XG4gICAgY29uc3QgbnVtYmVyT2ZQb2ludHMgPSBlbmRQdHNPZkNvbnRvdXJzW2VuZFB0c09mQ29udG91cnMubGVuZ3RoIC0gMV0gKyAxO1xuICAgIGNvbnN0IHBvaW50cyA9IFtdO1xuXG4gICAgd2hpbGUgKHBvaW50cy5sZW5ndGggPCBudW1iZXJPZlBvaW50cykge1xuICAgICAgZmxhZ3MgPSBjb2RlW2krK107XG4gICAgICBsZXQgcmVwZWF0ID0gMTtcblxuICAgICAgaWYgKGZsYWdzICYgMHgwOCkge1xuICAgICAgICByZXBlYXQgKz0gY29kZVtpKytdO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAocmVwZWF0LS0gPiAwKSB7XG4gICAgICAgIHBvaW50cy5wdXNoKHtcbiAgICAgICAgICBmbGFnc1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGogPSAwOyBqIDwgbnVtYmVyT2ZQb2ludHM7IGorKykge1xuICAgICAgc3dpdGNoIChwb2ludHNbal0uZmxhZ3MgJiAweDEyKSB7XG4gICAgICAgIGNhc2UgMHgwMDpcbiAgICAgICAgICB4ICs9IChjb2RlW2ldIDw8IDI0IHwgY29kZVtpICsgMV0gPDwgMTYpID4+IDE2O1xuICAgICAgICAgIGkgKz0gMjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDB4MDI6XG4gICAgICAgICAgeCAtPSBjb2RlW2krK107XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAweDEyOlxuICAgICAgICAgIHggKz0gY29kZVtpKytdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBwb2ludHNbal0ueCA9IHg7XG4gICAgfVxuXG4gICAgZm9yIChqID0gMDsgaiA8IG51bWJlck9mUG9pbnRzOyBqKyspIHtcbiAgICAgIHN3aXRjaCAocG9pbnRzW2pdLmZsYWdzICYgMHgyNCkge1xuICAgICAgICBjYXNlIDB4MDA6XG4gICAgICAgICAgeSArPSAoY29kZVtpXSA8PCAyNCB8IGNvZGVbaSArIDFdIDw8IDE2KSA+PiAxNjtcbiAgICAgICAgICBpICs9IDI7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAweDA0OlxuICAgICAgICAgIHkgLT0gY29kZVtpKytdO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMHgyNDpcbiAgICAgICAgICB5ICs9IGNvZGVbaSsrXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgcG9pbnRzW2pdLnkgPSB5O1xuICAgIH1cblxuICAgIGxldCBzdGFydFBvaW50ID0gMDtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBudW1iZXJPZkNvbnRvdXJzOyBpKyspIHtcbiAgICAgIGNvbnN0IGVuZFBvaW50ID0gZW5kUHRzT2ZDb250b3Vyc1tpXTtcbiAgICAgIGNvbnN0IGNvbnRvdXIgPSBwb2ludHMuc2xpY2Uoc3RhcnRQb2ludCwgZW5kUG9pbnQgKyAxKTtcblxuICAgICAgaWYgKGNvbnRvdXJbMF0uZmxhZ3MgJiAxKSB7XG4gICAgICAgIGNvbnRvdXIucHVzaChjb250b3VyWzBdKTtcbiAgICAgIH0gZWxzZSBpZiAoY29udG91cltjb250b3VyLmxlbmd0aCAtIDFdLmZsYWdzICYgMSkge1xuICAgICAgICBjb250b3VyLnVuc2hpZnQoY29udG91cltjb250b3VyLmxlbmd0aCAtIDFdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHAgPSB7XG4gICAgICAgICAgZmxhZ3M6IDEsXG4gICAgICAgICAgeDogKGNvbnRvdXJbMF0ueCArIGNvbnRvdXJbY29udG91ci5sZW5ndGggLSAxXS54KSAvIDIsXG4gICAgICAgICAgeTogKGNvbnRvdXJbMF0ueSArIGNvbnRvdXJbY29udG91ci5sZW5ndGggLSAxXS55KSAvIDJcbiAgICAgICAgfTtcbiAgICAgICAgY29udG91ci51bnNoaWZ0KHApO1xuICAgICAgICBjb250b3VyLnB1c2gocCk7XG4gICAgICB9XG5cbiAgICAgIG1vdmVUbyhjb250b3VyWzBdLngsIGNvbnRvdXJbMF0ueSk7XG5cbiAgICAgIGZvciAoaiA9IDEsIGpqID0gY29udG91ci5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgIGlmIChjb250b3VyW2pdLmZsYWdzICYgMSkge1xuICAgICAgICAgIGxpbmVUbyhjb250b3VyW2pdLngsIGNvbnRvdXJbal0ueSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udG91cltqICsgMV0uZmxhZ3MgJiAxKSB7XG4gICAgICAgICAgcXVhZHJhdGljQ3VydmVUbyhjb250b3VyW2pdLngsIGNvbnRvdXJbal0ueSwgY29udG91cltqICsgMV0ueCwgY29udG91cltqICsgMV0ueSk7XG4gICAgICAgICAgaisrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHF1YWRyYXRpY0N1cnZlVG8oY29udG91cltqXS54LCBjb250b3VyW2pdLnksIChjb250b3VyW2pdLnggKyBjb250b3VyW2ogKyAxXS54KSAvIDIsIChjb250b3VyW2pdLnkgKyBjb250b3VyW2ogKyAxXS55KSAvIDIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN0YXJ0UG9pbnQgPSBlbmRQb2ludCArIDE7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXBpbGVDaGFyU3RyaW5nKGNoYXJTdHJpbmdDb2RlLCBjbWRzLCBmb250LCBnbHlwaElkKSB7XG4gIGZ1bmN0aW9uIG1vdmVUbyh4LCB5KSB7XG4gICAgY21kcy5wdXNoKHtcbiAgICAgIGNtZDogXCJtb3ZlVG9cIixcbiAgICAgIGFyZ3M6IFt4LCB5XVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gbGluZVRvKHgsIHkpIHtcbiAgICBjbWRzLnB1c2goe1xuICAgICAgY21kOiBcImxpbmVUb1wiLFxuICAgICAgYXJnczogW3gsIHldXG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBiZXppZXJDdXJ2ZVRvKHgxLCB5MSwgeDIsIHkyLCB4LCB5KSB7XG4gICAgY21kcy5wdXNoKHtcbiAgICAgIGNtZDogXCJiZXppZXJDdXJ2ZVRvXCIsXG4gICAgICBhcmdzOiBbeDEsIHkxLCB4MiwgeTIsIHgsIHldXG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBzdGFjayA9IFtdO1xuICBsZXQgeCA9IDAsXG4gICAgICB5ID0gMDtcbiAgbGV0IHN0ZW1zID0gMDtcblxuICBmdW5jdGlvbiBwYXJzZShjb2RlKSB7XG4gICAgbGV0IGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBjb2RlLmxlbmd0aCkge1xuICAgICAgbGV0IHN0YWNrQ2xlYW4gPSBmYWxzZTtcbiAgICAgIGxldCB2ID0gY29kZVtpKytdO1xuICAgICAgbGV0IHhhLCB4YiwgeWEsIHliLCB5MSwgeTIsIHkzLCBuLCBzdWJyQ29kZTtcblxuICAgICAgc3dpdGNoICh2KSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBzdGVtcyArPSBzdGFjay5sZW5ndGggPj4gMTtcbiAgICAgICAgICBzdGFja0NsZWFuID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgc3RlbXMgKz0gc3RhY2subGVuZ3RoID4+IDE7XG4gICAgICAgICAgc3RhY2tDbGVhbiA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHkgKz0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgbW92ZVRvKHgsIHkpO1xuICAgICAgICAgIHN0YWNrQ2xlYW4gPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgeCArPSBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgeSArPSBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgbGluZVRvKHgsIHkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgeCArPSBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgbGluZVRvKHgsIHkpO1xuXG4gICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB5ICs9IHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICBsaW5lVG8oeCwgeSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB5ICs9IHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICBsaW5lVG8oeCwgeSk7XG5cbiAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHggKz0gc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgIGxpbmVUbyh4LCB5KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHhhID0geCArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICB5YSA9IHkgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICB5YiA9IHlhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgIHggPSB4YiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICB5ID0geWIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgYmV6aWVyQ3VydmVUbyh4YSwgeWEsIHhiLCB5YiwgeCwgeSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICBuID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgc3VickNvZGUgPSBudWxsO1xuXG4gICAgICAgICAgaWYgKGZvbnQuaXNDRkZDSURGb250KSB7XG4gICAgICAgICAgICBjb25zdCBmZEluZGV4ID0gZm9udC5mZFNlbGVjdC5nZXRGREluZGV4KGdseXBoSWQpO1xuXG4gICAgICAgICAgICBpZiAoZmRJbmRleCA+PSAwICYmIGZkSW5kZXggPCBmb250LmZkQXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZvbnREaWN0ID0gZm9udC5mZEFycmF5W2ZkSW5kZXhdO1xuICAgICAgICAgICAgICBsZXQgc3VicnM7XG5cbiAgICAgICAgICAgICAgaWYgKGZvbnREaWN0LnByaXZhdGVEaWN0ICYmIGZvbnREaWN0LnByaXZhdGVEaWN0LnN1YnJzSW5kZXgpIHtcbiAgICAgICAgICAgICAgICBzdWJycyA9IGZvbnREaWN0LnByaXZhdGVEaWN0LnN1YnJzSW5kZXgub2JqZWN0cztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChzdWJycykge1xuICAgICAgICAgICAgICAgIG4gKz0gZ2V0U3Vicm91dGluZUJpYXMoc3VicnMpO1xuICAgICAgICAgICAgICAgIHN1YnJDb2RlID0gc3VicnNbbl07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIkludmFsaWQgZmQgaW5kZXggZm9yIGdseXBoIGluZGV4LlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VickNvZGUgPSBmb250LnN1YnJzW24gKyBmb250LnN1YnJzQmlhc107XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN1YnJDb2RlKSB7XG4gICAgICAgICAgICBwYXJzZShzdWJyQ29kZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICB2ID0gY29kZVtpKytdO1xuXG4gICAgICAgICAgc3dpdGNoICh2KSB7XG4gICAgICAgICAgICBjYXNlIDM0OlxuICAgICAgICAgICAgICB4YSA9IHggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB4YiA9IHhhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeTEgPSB5ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeCA9IHhiICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgYmV6aWVyQ3VydmVUbyh4YSwgeSwgeGIsIHkxLCB4LCB5MSk7XG4gICAgICAgICAgICAgIHhhID0geCArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIHhiID0geGEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB4ID0geGIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICBiZXppZXJDdXJ2ZVRvKHhhLCB5MSwgeGIsIHksIHgsIHkpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAzNTpcbiAgICAgICAgICAgICAgeGEgPSB4ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeWEgPSB5ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIHliID0geWEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB4ID0geGIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB5ID0geWIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICBiZXppZXJDdXJ2ZVRvKHhhLCB5YSwgeGIsIHliLCB4LCB5KTtcbiAgICAgICAgICAgICAgeGEgPSB4ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeWEgPSB5ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIHliID0geWEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB4ID0geGIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB5ID0geWIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICBiZXppZXJDdXJ2ZVRvKHhhLCB5YSwgeGIsIHliLCB4LCB5KTtcbiAgICAgICAgICAgICAgc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDM2OlxuICAgICAgICAgICAgICB4YSA9IHggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB5MSA9IHkgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB4YiA9IHhhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeTIgPSB5MSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIHggPSB4YiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHkxLCB4YiwgeTIsIHgsIHkyKTtcbiAgICAgICAgICAgICAgeGEgPSB4ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIHkzID0geTIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB4ID0geGIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICBiZXppZXJDdXJ2ZVRvKHhhLCB5MiwgeGIsIHkzLCB4LCB5KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMzc6XG4gICAgICAgICAgICAgIGNvbnN0IHgwID0geCxcbiAgICAgICAgICAgICAgICAgICAgeTAgPSB5O1xuICAgICAgICAgICAgICB4YSA9IHggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB5YSA9IHkgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB4YiA9IHhhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeWIgPSB5YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIHggPSB4YiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIHkgPSB5YiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHlhLCB4YiwgeWIsIHgsIHkpO1xuICAgICAgICAgICAgICB4YSA9IHggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB5YSA9IHkgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICB4YiA9IHhhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgeWIgPSB5YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIHggPSB4YjtcbiAgICAgICAgICAgICAgeSA9IHliO1xuXG4gICAgICAgICAgICAgIGlmIChNYXRoLmFicyh4IC0geDApID4gTWF0aC5hYnMoeSAtIHkwKSkge1xuICAgICAgICAgICAgICAgIHggKz0gc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB5ICs9IHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBiZXppZXJDdXJ2ZVRvKHhhLCB5YSwgeGIsIHliLCB4LCB5KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgdW5rbm93biBvcGVyYXRvcjogMTIgJHt2fWApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA+PSA0KSB7XG4gICAgICAgICAgICBjb25zdCBhY2hhciA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgY29uc3QgYmNoYXIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIHkgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIHggPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIGNtZHMucHVzaCh7XG4gICAgICAgICAgICAgIGNtZDogXCJzYXZlXCJcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgY21kOiBcInRyYW5zbGF0ZVwiLFxuICAgICAgICAgICAgICBhcmdzOiBbeCwgeV1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbGV0IGNtYXAgPSBsb29rdXBDbWFwKGZvbnQuY21hcCwgU3RyaW5nLmZyb21DaGFyQ29kZShmb250LmdseXBoTmFtZU1hcFtfZW5jb2RpbmdzLlN0YW5kYXJkRW5jb2RpbmdbYWNoYXJdXSkpO1xuICAgICAgICAgICAgY29tcGlsZUNoYXJTdHJpbmcoZm9udC5nbHlwaHNbY21hcC5nbHlwaElkXSwgY21kcywgZm9udCwgY21hcC5nbHlwaElkKTtcbiAgICAgICAgICAgIGNtZHMucHVzaCh7XG4gICAgICAgICAgICAgIGNtZDogXCJyZXN0b3JlXCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY21hcCA9IGxvb2t1cENtYXAoZm9udC5jbWFwLCBTdHJpbmcuZnJvbUNoYXJDb2RlKGZvbnQuZ2x5cGhOYW1lTWFwW19lbmNvZGluZ3MuU3RhbmRhcmRFbmNvZGluZ1tiY2hhcl1dKSk7XG4gICAgICAgICAgICBjb21waWxlQ2hhclN0cmluZyhmb250LmdseXBoc1tjbWFwLmdseXBoSWRdLCBjbWRzLCBmb250LCBjbWFwLmdseXBoSWQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgIHN0ZW1zICs9IHN0YWNrLmxlbmd0aCA+PiAxO1xuICAgICAgICAgIHN0YWNrQ2xlYW4gPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMTk6XG4gICAgICAgICAgc3RlbXMgKz0gc3RhY2subGVuZ3RoID4+IDE7XG4gICAgICAgICAgaSArPSBzdGVtcyArIDcgPj4gMztcbiAgICAgICAgICBzdGFja0NsZWFuID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDIwOlxuICAgICAgICAgIHN0ZW1zICs9IHN0YWNrLmxlbmd0aCA+PiAxO1xuICAgICAgICAgIGkgKz0gc3RlbXMgKyA3ID4+IDM7XG4gICAgICAgICAgc3RhY2tDbGVhbiA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAyMTpcbiAgICAgICAgICB5ICs9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgIHggKz0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgbW92ZVRvKHgsIHkpO1xuICAgICAgICAgIHN0YWNrQ2xlYW4gPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMjI6XG4gICAgICAgICAgeCArPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICBtb3ZlVG8oeCwgeSk7XG4gICAgICAgICAgc3RhY2tDbGVhbiA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICBzdGVtcyArPSBzdGFjay5sZW5ndGggPj4gMTtcbiAgICAgICAgICBzdGFja0NsZWFuID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDI0OlxuICAgICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICB4YSA9IHggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgeWEgPSB5ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgIHhiID0geGEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgeWIgPSB5YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICB4ID0geGIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgeSA9IHliICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHlhLCB4YiwgeWIsIHgsIHkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHggKz0gc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICB5ICs9IHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgbGluZVRvKHgsIHkpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMjU6XG4gICAgICAgICAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDYpIHtcbiAgICAgICAgICAgIHggKz0gc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgIHkgKz0gc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgIGxpbmVUbyh4LCB5KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB4YSA9IHggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgIHlhID0geSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgeWIgPSB5YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgeCA9IHhiICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICB5ID0geWIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHlhLCB4YiwgeWIsIHgsIHkpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMjY6XG4gICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCAlIDIpIHtcbiAgICAgICAgICAgIHggKz0gc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgeGEgPSB4O1xuICAgICAgICAgICAgeWEgPSB5ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgIHhiID0geGEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgeWIgPSB5YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICB4ID0geGI7XG4gICAgICAgICAgICB5ID0geWIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgYmV6aWVyQ3VydmVUbyh4YSwgeWEsIHhiLCB5YiwgeCwgeSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAyNzpcbiAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoICUgMikge1xuICAgICAgICAgICAgeSArPSBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB4YSA9IHggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgeWEgPSB5O1xuICAgICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICB5YiA9IHlhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgIHggPSB4YiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICB5ID0geWI7XG4gICAgICAgICAgICBiZXppZXJDdXJ2ZVRvKHhhLCB5YSwgeGIsIHliLCB4LCB5KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDI4OlxuICAgICAgICAgIHN0YWNrLnB1c2goKGNvZGVbaV0gPDwgMjQgfCBjb2RlW2kgKyAxXSA8PCAxNikgPj4gMTYpO1xuICAgICAgICAgIGkgKz0gMjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDI5OlxuICAgICAgICAgIG4gPSBzdGFjay5wb3AoKSArIGZvbnQuZ3N1YnJzQmlhcztcbiAgICAgICAgICBzdWJyQ29kZSA9IGZvbnQuZ3N1YnJzW25dO1xuXG4gICAgICAgICAgaWYgKHN1YnJDb2RlKSB7XG4gICAgICAgICAgICBwYXJzZShzdWJyQ29kZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgeGEgPSB4O1xuICAgICAgICAgICAgeWEgPSB5ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgIHhiID0geGEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgeWIgPSB5YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICB4ID0geGIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgeSA9IHliICsgKHN0YWNrLmxlbmd0aCA9PT0gMSA/IHN0YWNrLnNoaWZ0KCkgOiAwKTtcbiAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHlhLCB4YiwgeWIsIHgsIHkpO1xuXG4gICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB4YSA9IHggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgeWEgPSB5O1xuICAgICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICB5YiA9IHlhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgIHkgPSB5YiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICB4ID0geGIgKyAoc3RhY2subGVuZ3RoID09PSAxID8gc3RhY2suc2hpZnQoKSA6IDApO1xuICAgICAgICAgICAgYmV6aWVyQ3VydmVUbyh4YSwgeWEsIHhiLCB5YiwgeCwgeSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgeGEgPSB4ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgIHlhID0geTtcbiAgICAgICAgICAgIHhiID0geGEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgeWIgPSB5YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICB5ID0geWIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgeCA9IHhiICsgKHN0YWNrLmxlbmd0aCA9PT0gMSA/IHN0YWNrLnNoaWZ0KCkgOiAwKTtcbiAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHlhLCB4YiwgeWIsIHgsIHkpO1xuXG4gICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB4YSA9IHg7XG4gICAgICAgICAgICB5YSA9IHkgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICB5YiA9IHlhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgIHggPSB4YiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICB5ID0geWIgKyAoc3RhY2subGVuZ3RoID09PSAxID8gc3RhY2suc2hpZnQoKSA6IDApO1xuICAgICAgICAgICAgYmV6aWVyQ3VydmVUbyh4YSwgeWEsIHhiLCB5YiwgeCwgeSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAodiA8IDMyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYHVua25vd24gb3BlcmF0b3I6ICR7dn1gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodiA8IDI0Nykge1xuICAgICAgICAgICAgc3RhY2sucHVzaCh2IC0gMTM5KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHYgPCAyNTEpIHtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goKHYgLSAyNDcpICogMjU2ICsgY29kZVtpKytdICsgMTA4KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHYgPCAyNTUpIHtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goLSh2IC0gMjUxKSAqIDI1NiAtIGNvZGVbaSsrXSAtIDEwOCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goKGNvZGVbaV0gPDwgMjQgfCBjb2RlW2kgKyAxXSA8PCAxNiB8IGNvZGVbaSArIDJdIDw8IDggfCBjb2RlW2kgKyAzXSkgLyA2NTUzNik7XG4gICAgICAgICAgICBpICs9IDQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGFja0NsZWFuKSB7XG4gICAgICAgIHN0YWNrLmxlbmd0aCA9IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcGFyc2UoY2hhclN0cmluZ0NvZGUpO1xufVxuXG5jb25zdCBOT09QID0gW107XG5cbmNsYXNzIENvbXBpbGVkRm9udCB7XG4gIGNvbnN0cnVjdG9yKGZvbnRNYXRyaXgpIHtcbiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gQ29tcGlsZWRGb250KSB7XG4gICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQ2Fubm90IGluaXRpYWxpemUgQ29tcGlsZWRGb250LlwiKTtcbiAgICB9XG5cbiAgICB0aGlzLmZvbnRNYXRyaXggPSBmb250TWF0cml4O1xuICAgIHRoaXMuY29tcGlsZWRHbHlwaHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMuY29tcGlsZWRDaGFyQ29kZVRvR2x5cGhJZCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIH1cblxuICBnZXRQYXRoSnModW5pY29kZSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGNoYXJDb2RlLFxuICAgICAgZ2x5cGhJZFxuICAgIH0gPSBsb29rdXBDbWFwKHRoaXMuY21hcCwgdW5pY29kZSk7XG4gICAgbGV0IGZuID0gdGhpcy5jb21waWxlZEdseXBoc1tnbHlwaElkXTtcblxuICAgIGlmICghZm4pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZuID0gdGhpcy5jb21waWxlR2x5cGgodGhpcy5nbHlwaHNbZ2x5cGhJZF0sIGdseXBoSWQpO1xuICAgICAgICB0aGlzLmNvbXBpbGVkR2x5cGhzW2dseXBoSWRdID0gZm47XG4gICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICB0aGlzLmNvbXBpbGVkR2x5cGhzW2dseXBoSWRdID0gTk9PUDtcblxuICAgICAgICBpZiAodGhpcy5jb21waWxlZENoYXJDb2RlVG9HbHlwaElkW2NoYXJDb2RlXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5jb21waWxlZENoYXJDb2RlVG9HbHlwaElkW2NoYXJDb2RlXSA9IGdseXBoSWQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBleDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb21waWxlZENoYXJDb2RlVG9HbHlwaElkW2NoYXJDb2RlXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdID0gZ2x5cGhJZDtcbiAgICB9XG5cbiAgICByZXR1cm4gZm47XG4gIH1cblxuICBjb21waWxlR2x5cGgoY29kZSwgZ2x5cGhJZCkge1xuICAgIGlmICghY29kZSB8fCBjb2RlLmxlbmd0aCA9PT0gMCB8fCBjb2RlWzBdID09PSAxNCkge1xuICAgICAgcmV0dXJuIE5PT1A7XG4gICAgfVxuXG4gICAgbGV0IGZvbnRNYXRyaXggPSB0aGlzLmZvbnRNYXRyaXg7XG5cbiAgICBpZiAodGhpcy5pc0NGRkNJREZvbnQpIHtcbiAgICAgIGNvbnN0IGZkSW5kZXggPSB0aGlzLmZkU2VsZWN0LmdldEZESW5kZXgoZ2x5cGhJZCk7XG5cbiAgICAgIGlmIChmZEluZGV4ID49IDAgJiYgZmRJbmRleCA8IHRoaXMuZmRBcnJheS5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgZm9udERpY3QgPSB0aGlzLmZkQXJyYXlbZmRJbmRleF07XG4gICAgICAgIGZvbnRNYXRyaXggPSBmb250RGljdC5nZXRCeU5hbWUoXCJGb250TWF0cml4XCIpIHx8IF91dGlsLkZPTlRfSURFTlRJVFlfTUFUUklYO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiSW52YWxpZCBmZCBpbmRleCBmb3IgZ2x5cGggaW5kZXguXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNtZHMgPSBbe1xuICAgICAgY21kOiBcInNhdmVcIlxuICAgIH0sIHtcbiAgICAgIGNtZDogXCJ0cmFuc2Zvcm1cIixcbiAgICAgIGFyZ3M6IGZvbnRNYXRyaXguc2xpY2UoKVxuICAgIH0sIHtcbiAgICAgIGNtZDogXCJzY2FsZVwiLFxuICAgICAgYXJnczogW1wic2l6ZVwiLCBcIi1zaXplXCJdXG4gICAgfV07XG4gICAgdGhpcy5jb21waWxlR2x5cGhJbXBsKGNvZGUsIGNtZHMsIGdseXBoSWQpO1xuICAgIGNtZHMucHVzaCh7XG4gICAgICBjbWQ6IFwicmVzdG9yZVwiXG4gICAgfSk7XG4gICAgcmV0dXJuIGNtZHM7XG4gIH1cblxuICBjb21waWxlR2x5cGhJbXBsKCkge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJDaGlsZHJlbiBjbGFzc2VzIHNob3VsZCBpbXBsZW1lbnQgdGhpcy5cIik7XG4gIH1cblxuICBoYXNCdWlsdFBhdGgodW5pY29kZSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGNoYXJDb2RlLFxuICAgICAgZ2x5cGhJZFxuICAgIH0gPSBsb29rdXBDbWFwKHRoaXMuY21hcCwgdW5pY29kZSk7XG4gICAgcmV0dXJuIHRoaXMuY29tcGlsZWRHbHlwaHNbZ2x5cGhJZF0gIT09IHVuZGVmaW5lZCAmJiB0aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdICE9PSB1bmRlZmluZWQ7XG4gIH1cblxufVxuXG5jbGFzcyBUcnVlVHlwZUNvbXBpbGVkIGV4dGVuZHMgQ29tcGlsZWRGb250IHtcbiAgY29uc3RydWN0b3IoZ2x5cGhzLCBjbWFwLCBmb250TWF0cml4KSB7XG4gICAgc3VwZXIoZm9udE1hdHJpeCB8fCBbMC4wMDA0ODgsIDAsIDAsIDAuMDAwNDg4LCAwLCAwXSk7XG4gICAgdGhpcy5nbHlwaHMgPSBnbHlwaHM7XG4gICAgdGhpcy5jbWFwID0gY21hcDtcbiAgfVxuXG4gIGNvbXBpbGVHbHlwaEltcGwoY29kZSwgY21kcykge1xuICAgIGNvbXBpbGVHbHlmKGNvZGUsIGNtZHMsIHRoaXMpO1xuICB9XG5cbn1cblxuY2xhc3MgVHlwZTJDb21waWxlZCBleHRlbmRzIENvbXBpbGVkRm9udCB7XG4gIGNvbnN0cnVjdG9yKGNmZkluZm8sIGNtYXAsIGZvbnRNYXRyaXgsIGdseXBoTmFtZU1hcCkge1xuICAgIHN1cGVyKGZvbnRNYXRyaXggfHwgWzAuMDAxLCAwLCAwLCAwLjAwMSwgMCwgMF0pO1xuICAgIHRoaXMuZ2x5cGhzID0gY2ZmSW5mby5nbHlwaHM7XG4gICAgdGhpcy5nc3VicnMgPSBjZmZJbmZvLmdzdWJycyB8fCBbXTtcbiAgICB0aGlzLnN1YnJzID0gY2ZmSW5mby5zdWJycyB8fCBbXTtcbiAgICB0aGlzLmNtYXAgPSBjbWFwO1xuICAgIHRoaXMuZ2x5cGhOYW1lTWFwID0gZ2x5cGhOYW1lTWFwIHx8ICgwLCBfZ2x5cGhsaXN0LmdldEdseXBoc1VuaWNvZGUpKCk7XG4gICAgdGhpcy5nc3VicnNCaWFzID0gZ2V0U3Vicm91dGluZUJpYXModGhpcy5nc3VicnMpO1xuICAgIHRoaXMuc3VicnNCaWFzID0gZ2V0U3Vicm91dGluZUJpYXModGhpcy5zdWJycyk7XG4gICAgdGhpcy5pc0NGRkNJREZvbnQgPSBjZmZJbmZvLmlzQ0ZGQ0lERm9udDtcbiAgICB0aGlzLmZkU2VsZWN0ID0gY2ZmSW5mby5mZFNlbGVjdDtcbiAgICB0aGlzLmZkQXJyYXkgPSBjZmZJbmZvLmZkQXJyYXk7XG4gIH1cblxuICBjb21waWxlR2x5cGhJbXBsKGNvZGUsIGNtZHMsIGdseXBoSWQpIHtcbiAgICBjb21waWxlQ2hhclN0cmluZyhjb2RlLCBjbWRzLCB0aGlzLCBnbHlwaElkKTtcbiAgfVxuXG59XG5cbmNsYXNzIEZvbnRSZW5kZXJlckZhY3Rvcnkge1xuICBzdGF0aWMgY3JlYXRlKGZvbnQsIHNlYWNBbmFseXNpc0VuYWJsZWQpIHtcbiAgICBjb25zdCBkYXRhID0gbmV3IFVpbnQ4QXJyYXkoZm9udC5kYXRhKTtcbiAgICBsZXQgY21hcCwgZ2x5ZiwgbG9jYSwgY2ZmLCBpbmRleFRvTG9jRm9ybWF0LCB1bml0c1BlckVtO1xuICAgIGNvbnN0IG51bVRhYmxlcyA9IGdldFVzaG9ydChkYXRhLCA0KTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBwID0gMTI7IGkgPCBudW1UYWJsZXM7IGkrKywgcCArPSAxNikge1xuICAgICAgY29uc3QgdGFnID0gKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKGRhdGEuc3ViYXJyYXkocCwgcCArIDQpKTtcbiAgICAgIGNvbnN0IG9mZnNldCA9IGdldExvbmcoZGF0YSwgcCArIDgpO1xuICAgICAgY29uc3QgbGVuZ3RoID0gZ2V0TG9uZyhkYXRhLCBwICsgMTIpO1xuXG4gICAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgICBjYXNlIFwiY21hcFwiOlxuICAgICAgICAgIGNtYXAgPSBwYXJzZUNtYXAoZGF0YSwgb2Zmc2V0LCBvZmZzZXQgKyBsZW5ndGgpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJnbHlmXCI6XG4gICAgICAgICAgZ2x5ZiA9IGRhdGEuc3ViYXJyYXkob2Zmc2V0LCBvZmZzZXQgKyBsZW5ndGgpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJsb2NhXCI6XG4gICAgICAgICAgbG9jYSA9IGRhdGEuc3ViYXJyYXkob2Zmc2V0LCBvZmZzZXQgKyBsZW5ndGgpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJoZWFkXCI6XG4gICAgICAgICAgdW5pdHNQZXJFbSA9IGdldFVzaG9ydChkYXRhLCBvZmZzZXQgKyAxOCk7XG4gICAgICAgICAgaW5kZXhUb0xvY0Zvcm1hdCA9IGdldFVzaG9ydChkYXRhLCBvZmZzZXQgKyA1MCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIkNGRiBcIjpcbiAgICAgICAgICBjZmYgPSBwYXJzZUNmZihkYXRhLCBvZmZzZXQsIG9mZnNldCArIGxlbmd0aCwgc2VhY0FuYWx5c2lzRW5hYmxlZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGdseWYpIHtcbiAgICAgIGNvbnN0IGZvbnRNYXRyaXggPSAhdW5pdHNQZXJFbSA/IGZvbnQuZm9udE1hdHJpeCA6IFsxIC8gdW5pdHNQZXJFbSwgMCwgMCwgMSAvIHVuaXRzUGVyRW0sIDAsIDBdO1xuICAgICAgcmV0dXJuIG5ldyBUcnVlVHlwZUNvbXBpbGVkKHBhcnNlR2x5ZlRhYmxlKGdseWYsIGxvY2EsIGluZGV4VG9Mb2NGb3JtYXQpLCBjbWFwLCBmb250TWF0cml4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFR5cGUyQ29tcGlsZWQoY2ZmLCBjbWFwLCBmb250LmZvbnRNYXRyaXgsIGZvbnQuZ2x5cGhOYW1lTWFwKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuRm9udFJlbmRlcmVyRmFjdG9yeSA9IEZvbnRSZW5kZXJlckZhY3Rvcnk7XG5cbi8qKiovIH0pLFxuLyogNTEgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMpID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuR2x5ZlRhYmxlID0gdm9pZCAwO1xuY29uc3QgT05fQ1VSVkVfUE9JTlQgPSAxIDw8IDA7XG5jb25zdCBYX1NIT1JUX1ZFQ1RPUiA9IDEgPDwgMTtcbmNvbnN0IFlfU0hPUlRfVkVDVE9SID0gMSA8PCAyO1xuY29uc3QgUkVQRUFUX0ZMQUcgPSAxIDw8IDM7XG5jb25zdCBYX0lTX1NBTUVfT1JfUE9TSVRJVkVfWF9TSE9SVF9WRUNUT1IgPSAxIDw8IDQ7XG5jb25zdCBZX0lTX1NBTUVfT1JfUE9TSVRJVkVfWV9TSE9SVF9WRUNUT1IgPSAxIDw8IDU7XG5jb25zdCBPVkVSTEFQX1NJTVBMRSA9IDEgPDwgNjtcbmNvbnN0IEFSR18xX0FORF8yX0FSRV9XT1JEUyA9IDEgPDwgMDtcbmNvbnN0IEFSR1NfQVJFX1hZX1ZBTFVFUyA9IDEgPDwgMTtcbmNvbnN0IFdFX0hBVkVfQV9TQ0FMRSA9IDEgPDwgMztcbmNvbnN0IE1PUkVfQ09NUE9ORU5UUyA9IDEgPDwgNTtcbmNvbnN0IFdFX0hBVkVfQU5fWF9BTkRfWV9TQ0FMRSA9IDEgPDwgNjtcbmNvbnN0IFdFX0hBVkVfQV9UV09fQllfVFdPID0gMSA8PCA3O1xuY29uc3QgV0VfSEFWRV9JTlNUUlVDVElPTlMgPSAxIDw8IDg7XG5cbmNsYXNzIEdseWZUYWJsZSB7XG4gIGNvbnN0cnVjdG9yKHtcbiAgICBnbHlmVGFibGUsXG4gICAgaXNHbHlwaExvY2F0aW9uc0xvbmcsXG4gICAgbG9jYVRhYmxlLFxuICAgIG51bUdseXBoc1xuICB9KSB7XG4gICAgdGhpcy5nbHlwaHMgPSBbXTtcbiAgICBjb25zdCBsb2NhID0gbmV3IERhdGFWaWV3KGxvY2FUYWJsZS5idWZmZXIsIGxvY2FUYWJsZS5ieXRlT2Zmc2V0LCBsb2NhVGFibGUuYnl0ZUxlbmd0aCk7XG4gICAgY29uc3QgZ2x5ZiA9IG5ldyBEYXRhVmlldyhnbHlmVGFibGUuYnVmZmVyLCBnbHlmVGFibGUuYnl0ZU9mZnNldCwgZ2x5ZlRhYmxlLmJ5dGVMZW5ndGgpO1xuICAgIGNvbnN0IG9mZnNldFNpemUgPSBpc0dseXBoTG9jYXRpb25zTG9uZyA/IDQgOiAyO1xuICAgIGxldCBwcmV2ID0gaXNHbHlwaExvY2F0aW9uc0xvbmcgPyBsb2NhLmdldFVpbnQzMigwKSA6IDIgKiBsb2NhLmdldFVpbnQxNigwKTtcbiAgICBsZXQgcG9zID0gMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtR2x5cGhzOyBpKyspIHtcbiAgICAgIHBvcyArPSBvZmZzZXRTaXplO1xuICAgICAgY29uc3QgbmV4dCA9IGlzR2x5cGhMb2NhdGlvbnNMb25nID8gbG9jYS5nZXRVaW50MzIocG9zKSA6IDIgKiBsb2NhLmdldFVpbnQxNihwb3MpO1xuXG4gICAgICBpZiAobmV4dCA9PT0gcHJldikge1xuICAgICAgICB0aGlzLmdseXBocy5wdXNoKG5ldyBHbHlwaCh7fSkpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZ2x5cGggPSBHbHlwaC5wYXJzZShwcmV2LCBnbHlmKTtcbiAgICAgIHRoaXMuZ2x5cGhzLnB1c2goZ2x5cGgpO1xuICAgICAgcHJldiA9IG5leHQ7XG4gICAgfVxuICB9XG5cbiAgZ2V0U2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nbHlwaHMucmVkdWNlKChhLCBnKSA9PiB7XG4gICAgICBjb25zdCBzaXplID0gZy5nZXRTaXplKCk7XG4gICAgICByZXR1cm4gYSArIChzaXplICsgMyAmIH4zKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIHdyaXRlKCkge1xuICAgIGNvbnN0IHRvdGFsU2l6ZSA9IHRoaXMuZ2V0U2l6ZSgpO1xuICAgIGNvbnN0IGdseWZUYWJsZSA9IG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIodG90YWxTaXplKSk7XG4gICAgY29uc3QgaXNMb2NhdGlvbkxvbmcgPSB0b3RhbFNpemUgPiAweDFmZmZlO1xuICAgIGNvbnN0IG9mZnNldFNpemUgPSBpc0xvY2F0aW9uTG9uZyA/IDQgOiAyO1xuICAgIGNvbnN0IGxvY2FUYWJsZSA9IG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoKHRoaXMuZ2x5cGhzLmxlbmd0aCArIDEpICogb2Zmc2V0U2l6ZSkpO1xuXG4gICAgaWYgKGlzTG9jYXRpb25Mb25nKSB7XG4gICAgICBsb2NhVGFibGUuc2V0VWludDMyKDAsIDApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2NhVGFibGUuc2V0VWludDE2KDAsIDApO1xuICAgIH1cblxuICAgIGxldCBwb3MgPSAwO1xuICAgIGxldCBsb2NhSW5kZXggPSAwO1xuXG4gICAgZm9yIChjb25zdCBnbHlwaCBvZiB0aGlzLmdseXBocykge1xuICAgICAgcG9zICs9IGdseXBoLndyaXRlKHBvcywgZ2x5ZlRhYmxlKTtcbiAgICAgIHBvcyA9IHBvcyArIDMgJiB+MztcbiAgICAgIGxvY2FJbmRleCArPSBvZmZzZXRTaXplO1xuXG4gICAgICBpZiAoaXNMb2NhdGlvbkxvbmcpIHtcbiAgICAgICAgbG9jYVRhYmxlLnNldFVpbnQzMihsb2NhSW5kZXgsIHBvcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2NhVGFibGUuc2V0VWludDE2KGxvY2FJbmRleCwgcG9zID4+IDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpc0xvY2F0aW9uTG9uZyxcbiAgICAgIGxvY2E6IG5ldyBVaW50OEFycmF5KGxvY2FUYWJsZS5idWZmZXIpLFxuICAgICAgZ2x5ZjogbmV3IFVpbnQ4QXJyYXkoZ2x5ZlRhYmxlLmJ1ZmZlcilcbiAgICB9O1xuICB9XG5cbiAgc2NhbGUoZmFjdG9ycykge1xuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHRoaXMuZ2x5cGhzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIHRoaXMuZ2x5cGhzW2ldLnNjYWxlKGZhY3RvcnNbaV0pO1xuICAgIH1cbiAgfVxuXG59XG5cbmV4cG9ydHMuR2x5ZlRhYmxlID0gR2x5ZlRhYmxlO1xuXG5jbGFzcyBHbHlwaCB7XG4gIGNvbnN0cnVjdG9yKHtcbiAgICBoZWFkZXIgPSBudWxsLFxuICAgIHNpbXBsZSA9IG51bGwsXG4gICAgY29tcG9zaXRlcyA9IG51bGxcbiAgfSkge1xuICAgIHRoaXMuaGVhZGVyID0gaGVhZGVyO1xuICAgIHRoaXMuc2ltcGxlID0gc2ltcGxlO1xuICAgIHRoaXMuY29tcG9zaXRlcyA9IGNvbXBvc2l0ZXM7XG4gIH1cblxuICBzdGF0aWMgcGFyc2UocG9zLCBnbHlmKSB7XG4gICAgY29uc3QgW3JlYWQsIGhlYWRlcl0gPSBHbHlwaEhlYWRlci5wYXJzZShwb3MsIGdseWYpO1xuICAgIHBvcyArPSByZWFkO1xuXG4gICAgaWYgKGhlYWRlci5udW1iZXJPZkNvbnRvdXJzIDwgMCkge1xuICAgICAgY29uc3QgY29tcG9zaXRlcyA9IFtdO1xuXG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBjb25zdCBbbiwgY29tcG9zaXRlXSA9IENvbXBvc2l0ZUdseXBoLnBhcnNlKHBvcywgZ2x5Zik7XG4gICAgICAgIHBvcyArPSBuO1xuICAgICAgICBjb21wb3NpdGVzLnB1c2goY29tcG9zaXRlKTtcblxuICAgICAgICBpZiAoIShjb21wb3NpdGUuZmxhZ3MgJiBNT1JFX0NPTVBPTkVOVFMpKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBHbHlwaCh7XG4gICAgICAgIGhlYWRlcixcbiAgICAgICAgY29tcG9zaXRlc1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2ltcGxlID0gU2ltcGxlR2x5cGgucGFyc2UocG9zLCBnbHlmLCBoZWFkZXIubnVtYmVyT2ZDb250b3Vycyk7XG4gICAgcmV0dXJuIG5ldyBHbHlwaCh7XG4gICAgICBoZWFkZXIsXG4gICAgICBzaW1wbGVcbiAgICB9KTtcbiAgfVxuXG4gIGdldFNpemUoKSB7XG4gICAgaWYgKCF0aGlzLmhlYWRlcikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3Qgc2l6ZSA9IHRoaXMuc2ltcGxlID8gdGhpcy5zaW1wbGUuZ2V0U2l6ZSgpIDogdGhpcy5jb21wb3NpdGVzLnJlZHVjZSgoYSwgYykgPT4gYSArIGMuZ2V0U2l6ZSgpLCAwKTtcbiAgICByZXR1cm4gdGhpcy5oZWFkZXIuZ2V0U2l6ZSgpICsgc2l6ZTtcbiAgfVxuXG4gIHdyaXRlKHBvcywgYnVmKSB7XG4gICAgaWYgKCF0aGlzLmhlYWRlcikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3Qgc3BvcyA9IHBvcztcbiAgICBwb3MgKz0gdGhpcy5oZWFkZXIud3JpdGUocG9zLCBidWYpO1xuXG4gICAgaWYgKHRoaXMuc2ltcGxlKSB7XG4gICAgICBwb3MgKz0gdGhpcy5zaW1wbGUud3JpdGUocG9zLCBidWYpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbXBvc2l0ZSBvZiB0aGlzLmNvbXBvc2l0ZXMpIHtcbiAgICAgICAgcG9zICs9IGNvbXBvc2l0ZS53cml0ZShwb3MsIGJ1Zik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvcyAtIHNwb3M7XG4gIH1cblxuICBzY2FsZShmYWN0b3IpIHtcbiAgICBpZiAoIXRoaXMuaGVhZGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeE1pZGRsZSA9ICh0aGlzLmhlYWRlci54TWluICsgdGhpcy5oZWFkZXIueE1heCkgLyAyO1xuICAgIHRoaXMuaGVhZGVyLnNjYWxlKHhNaWRkbGUsIGZhY3Rvcik7XG5cbiAgICBpZiAodGhpcy5zaW1wbGUpIHtcbiAgICAgIHRoaXMuc2ltcGxlLnNjYWxlKHhNaWRkbGUsIGZhY3Rvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3QgY29tcG9zaXRlIG9mIHRoaXMuY29tcG9zaXRlcykge1xuICAgICAgICBjb21wb3NpdGUuc2NhbGUoeE1pZGRsZSwgZmFjdG9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxufVxuXG5jbGFzcyBHbHlwaEhlYWRlciB7XG4gIGNvbnN0cnVjdG9yKHtcbiAgICBudW1iZXJPZkNvbnRvdXJzLFxuICAgIHhNaW4sXG4gICAgeU1pbixcbiAgICB4TWF4LFxuICAgIHlNYXhcbiAgfSkge1xuICAgIHRoaXMubnVtYmVyT2ZDb250b3VycyA9IG51bWJlck9mQ29udG91cnM7XG4gICAgdGhpcy54TWluID0geE1pbjtcbiAgICB0aGlzLnlNaW4gPSB5TWluO1xuICAgIHRoaXMueE1heCA9IHhNYXg7XG4gICAgdGhpcy55TWF4ID0geU1heDtcbiAgfVxuXG4gIHN0YXRpYyBwYXJzZShwb3MsIGdseWYpIHtcbiAgICByZXR1cm4gWzEwLCBuZXcgR2x5cGhIZWFkZXIoe1xuICAgICAgbnVtYmVyT2ZDb250b3VyczogZ2x5Zi5nZXRJbnQxNihwb3MpLFxuICAgICAgeE1pbjogZ2x5Zi5nZXRJbnQxNihwb3MgKyAyKSxcbiAgICAgIHlNaW46IGdseWYuZ2V0SW50MTYocG9zICsgNCksXG4gICAgICB4TWF4OiBnbHlmLmdldEludDE2KHBvcyArIDYpLFxuICAgICAgeU1heDogZ2x5Zi5nZXRJbnQxNihwb3MgKyA4KVxuICAgIH0pXTtcbiAgfVxuXG4gIGdldFNpemUoKSB7XG4gICAgcmV0dXJuIDEwO1xuICB9XG5cbiAgd3JpdGUocG9zLCBidWYpIHtcbiAgICBidWYuc2V0SW50MTYocG9zLCB0aGlzLm51bWJlck9mQ29udG91cnMpO1xuICAgIGJ1Zi5zZXRJbnQxNihwb3MgKyAyLCB0aGlzLnhNaW4pO1xuICAgIGJ1Zi5zZXRJbnQxNihwb3MgKyA0LCB0aGlzLnlNaW4pO1xuICAgIGJ1Zi5zZXRJbnQxNihwb3MgKyA2LCB0aGlzLnhNYXgpO1xuICAgIGJ1Zi5zZXRJbnQxNihwb3MgKyA4LCB0aGlzLnlNYXgpO1xuICAgIHJldHVybiAxMDtcbiAgfVxuXG4gIHNjYWxlKHgsIGZhY3Rvcikge1xuICAgIHRoaXMueE1pbiA9IE1hdGgucm91bmQoeCArICh0aGlzLnhNaW4gLSB4KSAqIGZhY3Rvcik7XG4gICAgdGhpcy54TWF4ID0gTWF0aC5yb3VuZCh4ICsgKHRoaXMueE1heCAtIHgpICogZmFjdG9yKTtcbiAgfVxuXG59XG5cbmNsYXNzIENvbnRvdXIge1xuICBjb25zdHJ1Y3Rvcih7XG4gICAgZmxhZ3MsXG4gICAgeENvb3JkaW5hdGVzLFxuICAgIHlDb29yZGluYXRlc1xuICB9KSB7XG4gICAgdGhpcy54Q29vcmRpbmF0ZXMgPSB4Q29vcmRpbmF0ZXM7XG4gICAgdGhpcy55Q29vcmRpbmF0ZXMgPSB5Q29vcmRpbmF0ZXM7XG4gICAgdGhpcy5mbGFncyA9IGZsYWdzO1xuICB9XG5cbn1cblxuY2xhc3MgU2ltcGxlR2x5cGgge1xuICBjb25zdHJ1Y3Rvcih7XG4gICAgY29udG91cnMsXG4gICAgaW5zdHJ1Y3Rpb25zXG4gIH0pIHtcbiAgICB0aGlzLmNvbnRvdXJzID0gY29udG91cnM7XG4gICAgdGhpcy5pbnN0cnVjdGlvbnMgPSBpbnN0cnVjdGlvbnM7XG4gIH1cblxuICBzdGF0aWMgcGFyc2UocG9zLCBnbHlmLCBudW1iZXJPZkNvbnRvdXJzKSB7XG4gICAgY29uc3QgZW5kUHRzT2ZDb250b3VycyA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1iZXJPZkNvbnRvdXJzOyBpKyspIHtcbiAgICAgIGNvbnN0IGVuZFB0ID0gZ2x5Zi5nZXRVaW50MTYocG9zKTtcbiAgICAgIHBvcyArPSAyO1xuICAgICAgZW5kUHRzT2ZDb250b3Vycy5wdXNoKGVuZFB0KTtcbiAgICB9XG5cbiAgICBjb25zdCBudW1iZXJPZlB0ID0gZW5kUHRzT2ZDb250b3Vyc1tudW1iZXJPZkNvbnRvdXJzIC0gMV0gKyAxO1xuICAgIGNvbnN0IGluc3RydWN0aW9uTGVuZ3RoID0gZ2x5Zi5nZXRVaW50MTYocG9zKTtcbiAgICBwb3MgKz0gMjtcbiAgICBjb25zdCBpbnN0cnVjdGlvbnMgPSBuZXcgVWludDhBcnJheShnbHlmKS5zbGljZShwb3MsIHBvcyArIGluc3RydWN0aW9uTGVuZ3RoKTtcbiAgICBwb3MgKz0gaW5zdHJ1Y3Rpb25MZW5ndGg7XG4gICAgY29uc3QgZmxhZ3MgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtYmVyT2ZQdDsgcG9zKyssIGkrKykge1xuICAgICAgbGV0IGZsYWcgPSBnbHlmLmdldFVpbnQ4KHBvcyk7XG4gICAgICBmbGFncy5wdXNoKGZsYWcpO1xuXG4gICAgICBpZiAoZmxhZyAmIFJFUEVBVF9GTEFHKSB7XG4gICAgICAgIGNvbnN0IGNvdW50ID0gZ2x5Zi5nZXRVaW50OCgrK3Bvcyk7XG4gICAgICAgIGZsYWcgXj0gUkVQRUFUX0ZMQUc7XG5cbiAgICAgICAgZm9yIChsZXQgbSA9IDA7IG0gPCBjb3VudDsgbSsrKSB7XG4gICAgICAgICAgZmxhZ3MucHVzaChmbGFnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGkgKz0gY291bnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYWxsWENvb3JkaW5hdGVzID0gW107XG4gICAgbGV0IHhDb29yZGluYXRlcyA9IFtdO1xuICAgIGxldCB5Q29vcmRpbmF0ZXMgPSBbXTtcbiAgICBsZXQgcG9pbnRGbGFncyA9IFtdO1xuICAgIGNvbnN0IGNvbnRvdXJzID0gW107XG4gICAgbGV0IGVuZFB0c09mQ29udG91cnNJbmRleCA9IDA7XG4gICAgbGV0IGxhc3RDb29yZGluYXRlID0gMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtYmVyT2ZQdDsgaSsrKSB7XG4gICAgICBjb25zdCBmbGFnID0gZmxhZ3NbaV07XG5cbiAgICAgIGlmIChmbGFnICYgWF9TSE9SVF9WRUNUT1IpIHtcbiAgICAgICAgY29uc3QgeCA9IGdseWYuZ2V0VWludDgocG9zKyspO1xuICAgICAgICBsYXN0Q29vcmRpbmF0ZSArPSBmbGFnICYgWF9JU19TQU1FX09SX1BPU0lUSVZFX1hfU0hPUlRfVkVDVE9SID8geCA6IC14O1xuICAgICAgICB4Q29vcmRpbmF0ZXMucHVzaChsYXN0Q29vcmRpbmF0ZSk7XG4gICAgICB9IGVsc2UgaWYgKGZsYWcgJiBYX0lTX1NBTUVfT1JfUE9TSVRJVkVfWF9TSE9SVF9WRUNUT1IpIHtcbiAgICAgICAgeENvb3JkaW5hdGVzLnB1c2gobGFzdENvb3JkaW5hdGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGFzdENvb3JkaW5hdGUgKz0gZ2x5Zi5nZXRJbnQxNihwb3MpO1xuICAgICAgICBwb3MgKz0gMjtcbiAgICAgICAgeENvb3JkaW5hdGVzLnB1c2gobGFzdENvb3JkaW5hdGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZW5kUHRzT2ZDb250b3Vyc1tlbmRQdHNPZkNvbnRvdXJzSW5kZXhdID09PSBpKSB7XG4gICAgICAgIGVuZFB0c09mQ29udG91cnNJbmRleCsrO1xuICAgICAgICBhbGxYQ29vcmRpbmF0ZXMucHVzaCh4Q29vcmRpbmF0ZXMpO1xuICAgICAgICB4Q29vcmRpbmF0ZXMgPSBbXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsYXN0Q29vcmRpbmF0ZSA9IDA7XG4gICAgZW5kUHRzT2ZDb250b3Vyc0luZGV4ID0gMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtYmVyT2ZQdDsgaSsrKSB7XG4gICAgICBjb25zdCBmbGFnID0gZmxhZ3NbaV07XG5cbiAgICAgIGlmIChmbGFnICYgWV9TSE9SVF9WRUNUT1IpIHtcbiAgICAgICAgY29uc3QgeSA9IGdseWYuZ2V0VWludDgocG9zKyspO1xuICAgICAgICBsYXN0Q29vcmRpbmF0ZSArPSBmbGFnICYgWV9JU19TQU1FX09SX1BPU0lUSVZFX1lfU0hPUlRfVkVDVE9SID8geSA6IC15O1xuICAgICAgICB5Q29vcmRpbmF0ZXMucHVzaChsYXN0Q29vcmRpbmF0ZSk7XG4gICAgICB9IGVsc2UgaWYgKGZsYWcgJiBZX0lTX1NBTUVfT1JfUE9TSVRJVkVfWV9TSE9SVF9WRUNUT1IpIHtcbiAgICAgICAgeUNvb3JkaW5hdGVzLnB1c2gobGFzdENvb3JkaW5hdGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGFzdENvb3JkaW5hdGUgKz0gZ2x5Zi5nZXRJbnQxNihwb3MpO1xuICAgICAgICBwb3MgKz0gMjtcbiAgICAgICAgeUNvb3JkaW5hdGVzLnB1c2gobGFzdENvb3JkaW5hdGUpO1xuICAgICAgfVxuXG4gICAgICBwb2ludEZsYWdzLnB1c2goZmxhZyAmIE9OX0NVUlZFX1BPSU5UIHwgZmxhZyAmIE9WRVJMQVBfU0lNUExFKTtcblxuICAgICAgaWYgKGVuZFB0c09mQ29udG91cnNbZW5kUHRzT2ZDb250b3Vyc0luZGV4XSA9PT0gaSkge1xuICAgICAgICB4Q29vcmRpbmF0ZXMgPSBhbGxYQ29vcmRpbmF0ZXNbZW5kUHRzT2ZDb250b3Vyc0luZGV4XTtcbiAgICAgICAgZW5kUHRzT2ZDb250b3Vyc0luZGV4Kys7XG4gICAgICAgIGNvbnRvdXJzLnB1c2gobmV3IENvbnRvdXIoe1xuICAgICAgICAgIGZsYWdzOiBwb2ludEZsYWdzLFxuICAgICAgICAgIHhDb29yZGluYXRlcyxcbiAgICAgICAgICB5Q29vcmRpbmF0ZXNcbiAgICAgICAgfSkpO1xuICAgICAgICB5Q29vcmRpbmF0ZXMgPSBbXTtcbiAgICAgICAgcG9pbnRGbGFncyA9IFtdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgU2ltcGxlR2x5cGgoe1xuICAgICAgY29udG91cnMsXG4gICAgICBpbnN0cnVjdGlvbnNcbiAgICB9KTtcbiAgfVxuXG4gIGdldFNpemUoKSB7XG4gICAgbGV0IHNpemUgPSB0aGlzLmNvbnRvdXJzLmxlbmd0aCAqIDIgKyAyICsgdGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoO1xuICAgIGxldCBsYXN0WCA9IDA7XG4gICAgbGV0IGxhc3RZID0gMDtcblxuICAgIGZvciAoY29uc3QgY29udG91ciBvZiB0aGlzLmNvbnRvdXJzKSB7XG4gICAgICBzaXplICs9IGNvbnRvdXIuZmxhZ3MubGVuZ3RoO1xuXG4gICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBjb250b3VyLnhDb29yZGluYXRlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHggPSBjb250b3VyLnhDb29yZGluYXRlc1tpXTtcbiAgICAgICAgY29uc3QgeSA9IGNvbnRvdXIueUNvb3JkaW5hdGVzW2ldO1xuICAgICAgICBsZXQgYWJzID0gTWF0aC5hYnMoeCAtIGxhc3RYKTtcblxuICAgICAgICBpZiAoYWJzID4gMjU1KSB7XG4gICAgICAgICAgc2l6ZSArPSAyO1xuICAgICAgICB9IGVsc2UgaWYgKGFicyA+IDApIHtcbiAgICAgICAgICBzaXplICs9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0WCA9IHg7XG4gICAgICAgIGFicyA9IE1hdGguYWJzKHkgLSBsYXN0WSk7XG5cbiAgICAgICAgaWYgKGFicyA+IDI1NSkge1xuICAgICAgICAgIHNpemUgKz0gMjtcbiAgICAgICAgfSBlbHNlIGlmIChhYnMgPiAwKSB7XG4gICAgICAgICAgc2l6ZSArPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFzdFkgPSB5O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzaXplO1xuICB9XG5cbiAgd3JpdGUocG9zLCBidWYpIHtcbiAgICBjb25zdCBzcG9zID0gcG9zO1xuICAgIGNvbnN0IHhDb29yZGluYXRlcyA9IFtdO1xuICAgIGNvbnN0IHlDb29yZGluYXRlcyA9IFtdO1xuICAgIGNvbnN0IGZsYWdzID0gW107XG4gICAgbGV0IGxhc3RYID0gMDtcbiAgICBsZXQgbGFzdFkgPSAwO1xuXG4gICAgZm9yIChjb25zdCBjb250b3VyIG9mIHRoaXMuY29udG91cnMpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGNvbnRvdXIueENvb3JkaW5hdGVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgbGV0IGZsYWcgPSBjb250b3VyLmZsYWdzW2ldO1xuICAgICAgICBjb25zdCB4ID0gY29udG91ci54Q29vcmRpbmF0ZXNbaV07XG4gICAgICAgIGxldCBkZWx0YSA9IHggLSBsYXN0WDtcblxuICAgICAgICBpZiAoZGVsdGEgPT09IDApIHtcbiAgICAgICAgICBmbGFnIHw9IFhfSVNfU0FNRV9PUl9QT1NJVElWRV9YX1NIT1JUX1ZFQ1RPUjtcbiAgICAgICAgICB4Q29vcmRpbmF0ZXMucHVzaCgwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBhYnMgPSBNYXRoLmFicyhkZWx0YSk7XG5cbiAgICAgICAgICBpZiAoYWJzIDw9IDI1NSkge1xuICAgICAgICAgICAgZmxhZyB8PSBkZWx0YSA+PSAwID8gWF9TSE9SVF9WRUNUT1IgfCBYX0lTX1NBTUVfT1JfUE9TSVRJVkVfWF9TSE9SVF9WRUNUT1IgOiBYX1NIT1JUX1ZFQ1RPUjtcbiAgICAgICAgICAgIHhDb29yZGluYXRlcy5wdXNoKGFicyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhDb29yZGluYXRlcy5wdXNoKGRlbHRhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0WCA9IHg7XG4gICAgICAgIGNvbnN0IHkgPSBjb250b3VyLnlDb29yZGluYXRlc1tpXTtcbiAgICAgICAgZGVsdGEgPSB5IC0gbGFzdFk7XG5cbiAgICAgICAgaWYgKGRlbHRhID09PSAwKSB7XG4gICAgICAgICAgZmxhZyB8PSBZX0lTX1NBTUVfT1JfUE9TSVRJVkVfWV9TSE9SVF9WRUNUT1I7XG4gICAgICAgICAgeUNvb3JkaW5hdGVzLnB1c2goMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgYWJzID0gTWF0aC5hYnMoZGVsdGEpO1xuXG4gICAgICAgICAgaWYgKGFicyA8PSAyNTUpIHtcbiAgICAgICAgICAgIGZsYWcgfD0gZGVsdGEgPj0gMCA/IFlfU0hPUlRfVkVDVE9SIHwgWV9JU19TQU1FX09SX1BPU0lUSVZFX1lfU0hPUlRfVkVDVE9SIDogWV9TSE9SVF9WRUNUT1I7XG4gICAgICAgICAgICB5Q29vcmRpbmF0ZXMucHVzaChhYnMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB5Q29vcmRpbmF0ZXMucHVzaChkZWx0YSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGFzdFkgPSB5O1xuICAgICAgICBmbGFncy5wdXNoKGZsYWcpO1xuICAgICAgfVxuXG4gICAgICBidWYuc2V0VWludDE2KHBvcywgeENvb3JkaW5hdGVzLmxlbmd0aCAtIDEpO1xuICAgICAgcG9zICs9IDI7XG4gICAgfVxuXG4gICAgYnVmLnNldFVpbnQxNihwb3MsIHRoaXMuaW5zdHJ1Y3Rpb25zLmxlbmd0aCk7XG4gICAgcG9zICs9IDI7XG5cbiAgICBpZiAodGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoKSB7XG4gICAgICBuZXcgVWludDhBcnJheShidWYuYnVmZmVyLCAwLCBidWYuYnVmZmVyLmJ5dGVMZW5ndGgpLnNldCh0aGlzLmluc3RydWN0aW9ucywgcG9zKTtcbiAgICAgIHBvcyArPSB0aGlzLmluc3RydWN0aW9ucy5sZW5ndGg7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBmbGFnIG9mIGZsYWdzKSB7XG4gICAgICBidWYuc2V0VWludDgocG9zKyssIGZsYWcpO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHhDb29yZGluYXRlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBjb25zdCB4ID0geENvb3JkaW5hdGVzW2ldO1xuICAgICAgY29uc3QgZmxhZyA9IGZsYWdzW2ldO1xuXG4gICAgICBpZiAoZmxhZyAmIFhfU0hPUlRfVkVDVE9SKSB7XG4gICAgICAgIGJ1Zi5zZXRVaW50OChwb3MrKywgeCk7XG4gICAgICB9IGVsc2UgaWYgKCEoZmxhZyAmIFhfSVNfU0FNRV9PUl9QT1NJVElWRV9YX1NIT1JUX1ZFQ1RPUikpIHtcbiAgICAgICAgYnVmLnNldEludDE2KHBvcywgeCk7XG4gICAgICAgIHBvcyArPSAyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHlDb29yZGluYXRlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBjb25zdCB5ID0geUNvb3JkaW5hdGVzW2ldO1xuICAgICAgY29uc3QgZmxhZyA9IGZsYWdzW2ldO1xuXG4gICAgICBpZiAoZmxhZyAmIFlfU0hPUlRfVkVDVE9SKSB7XG4gICAgICAgIGJ1Zi5zZXRVaW50OChwb3MrKywgeSk7XG4gICAgICB9IGVsc2UgaWYgKCEoZmxhZyAmIFlfSVNfU0FNRV9PUl9QT1NJVElWRV9ZX1NIT1JUX1ZFQ1RPUikpIHtcbiAgICAgICAgYnVmLnNldEludDE2KHBvcywgeSk7XG4gICAgICAgIHBvcyArPSAyO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwb3MgLSBzcG9zO1xuICB9XG5cbiAgc2NhbGUoeCwgZmFjdG9yKSB7XG4gICAgZm9yIChjb25zdCBjb250b3VyIG9mIHRoaXMuY29udG91cnMpIHtcbiAgICAgIGlmIChjb250b3VyLnhDb29yZGluYXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGNvbnRvdXIueENvb3JkaW5hdGVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgY29udG91ci54Q29vcmRpbmF0ZXNbaV0gPSBNYXRoLnJvdW5kKHggKyAoY29udG91ci54Q29vcmRpbmF0ZXNbaV0gLSB4KSAqIGZhY3Rvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbn1cblxuY2xhc3MgQ29tcG9zaXRlR2x5cGgge1xuICBjb25zdHJ1Y3Rvcih7XG4gICAgZmxhZ3MsXG4gICAgZ2x5cGhJbmRleCxcbiAgICBhcmd1bWVudDEsXG4gICAgYXJndW1lbnQyLFxuICAgIHRyYW5zZixcbiAgICBpbnN0cnVjdGlvbnNcbiAgfSkge1xuICAgIHRoaXMuZmxhZ3MgPSBmbGFncztcbiAgICB0aGlzLmdseXBoSW5kZXggPSBnbHlwaEluZGV4O1xuICAgIHRoaXMuYXJndW1lbnQxID0gYXJndW1lbnQxO1xuICAgIHRoaXMuYXJndW1lbnQyID0gYXJndW1lbnQyO1xuICAgIHRoaXMudHJhbnNmID0gdHJhbnNmO1xuICAgIHRoaXMuaW5zdHJ1Y3Rpb25zID0gaW5zdHJ1Y3Rpb25zO1xuICB9XG5cbiAgc3RhdGljIHBhcnNlKHBvcywgZ2x5Zikge1xuICAgIGNvbnN0IHNwb3MgPSBwb3M7XG4gICAgY29uc3QgdHJhbnNmID0gW107XG4gICAgbGV0IGZsYWdzID0gZ2x5Zi5nZXRVaW50MTYocG9zKTtcbiAgICBjb25zdCBnbHlwaEluZGV4ID0gZ2x5Zi5nZXRVaW50MTYocG9zICsgMik7XG4gICAgcG9zICs9IDQ7XG4gICAgbGV0IGFyZ3VtZW50MSwgYXJndW1lbnQyO1xuXG4gICAgaWYgKGZsYWdzICYgQVJHXzFfQU5EXzJfQVJFX1dPUkRTKSB7XG4gICAgICBpZiAoZmxhZ3MgJiBBUkdTX0FSRV9YWV9WQUxVRVMpIHtcbiAgICAgICAgYXJndW1lbnQxID0gZ2x5Zi5nZXRJbnQxNihwb3MpO1xuICAgICAgICBhcmd1bWVudDIgPSBnbHlmLmdldEludDE2KHBvcyArIDIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXJndW1lbnQxID0gZ2x5Zi5nZXRVaW50MTYocG9zKTtcbiAgICAgICAgYXJndW1lbnQyID0gZ2x5Zi5nZXRVaW50MTYocG9zICsgMik7XG4gICAgICB9XG5cbiAgICAgIHBvcyArPSA0O1xuICAgICAgZmxhZ3MgXj0gQVJHXzFfQU5EXzJfQVJFX1dPUkRTO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcmd1bWVudDEgPSBnbHlmLmdldFVpbnQ4KHBvcyk7XG4gICAgICBhcmd1bWVudDIgPSBnbHlmLmdldFVpbnQ4KHBvcyArIDEpO1xuXG4gICAgICBpZiAoZmxhZ3MgJiBBUkdTX0FSRV9YWV9WQUxVRVMpIHtcbiAgICAgICAgY29uc3QgYWJzMSA9IGFyZ3VtZW50MSAmIDB4N2Y7XG4gICAgICAgIGFyZ3VtZW50MSA9IGFyZ3VtZW50MSAmIDB4ODAgPyAtYWJzMSA6IGFiczE7XG4gICAgICAgIGNvbnN0IGFiczIgPSBhcmd1bWVudDIgJiAweDdmO1xuICAgICAgICBhcmd1bWVudDIgPSBhcmd1bWVudDIgJiAweDgwID8gLWFiczIgOiBhYnMyO1xuICAgICAgfVxuXG4gICAgICBwb3MgKz0gMjtcbiAgICB9XG5cbiAgICBpZiAoZmxhZ3MgJiBXRV9IQVZFX0FfU0NBTEUpIHtcbiAgICAgIHRyYW5zZi5wdXNoKGdseWYuZ2V0VWludDE2KHBvcykpO1xuICAgICAgcG9zICs9IDI7XG4gICAgfSBlbHNlIGlmIChmbGFncyAmIFdFX0hBVkVfQU5fWF9BTkRfWV9TQ0FMRSkge1xuICAgICAgdHJhbnNmLnB1c2goZ2x5Zi5nZXRVaW50MTYocG9zKSwgZ2x5Zi5nZXRVaW50MTYocG9zICsgMikpO1xuICAgICAgcG9zICs9IDQ7XG4gICAgfSBlbHNlIGlmIChmbGFncyAmIFdFX0hBVkVfQV9UV09fQllfVFdPKSB7XG4gICAgICB0cmFuc2YucHVzaChnbHlmLmdldFVpbnQxNihwb3MpLCBnbHlmLmdldFVpbnQxNihwb3MgKyAyKSwgZ2x5Zi5nZXRVaW50MTYocG9zICsgNCksIGdseWYuZ2V0VWludDE2KHBvcyArIDYpKTtcbiAgICAgIHBvcyArPSA4O1xuICAgIH1cblxuICAgIGxldCBpbnN0cnVjdGlvbnMgPSBudWxsO1xuXG4gICAgaWYgKGZsYWdzICYgV0VfSEFWRV9JTlNUUlVDVElPTlMpIHtcbiAgICAgIGNvbnN0IGluc3RydWN0aW9uTGVuZ3RoID0gZ2x5Zi5nZXRVaW50MTYocG9zKTtcbiAgICAgIHBvcyArPSAyO1xuICAgICAgaW5zdHJ1Y3Rpb25zID0gbmV3IFVpbnQ4QXJyYXkoZ2x5Zikuc2xpY2UocG9zLCBwb3MgKyBpbnN0cnVjdGlvbkxlbmd0aCk7XG4gICAgICBwb3MgKz0gaW5zdHJ1Y3Rpb25MZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtwb3MgLSBzcG9zLCBuZXcgQ29tcG9zaXRlR2x5cGgoe1xuICAgICAgZmxhZ3MsXG4gICAgICBnbHlwaEluZGV4LFxuICAgICAgYXJndW1lbnQxLFxuICAgICAgYXJndW1lbnQyLFxuICAgICAgdHJhbnNmLFxuICAgICAgaW5zdHJ1Y3Rpb25zXG4gICAgfSldO1xuICB9XG5cbiAgZ2V0U2l6ZSgpIHtcbiAgICBsZXQgc2l6ZSA9IDIgKyAyICsgdGhpcy50cmFuc2YubGVuZ3RoICogMjtcblxuICAgIGlmICh0aGlzLmZsYWdzICYgV0VfSEFWRV9JTlNUUlVDVElPTlMpIHtcbiAgICAgIHNpemUgKz0gMiArIHRoaXMuaW5zdHJ1Y3Rpb25zLmxlbmd0aDtcbiAgICB9XG5cbiAgICBzaXplICs9IDI7XG5cbiAgICBpZiAodGhpcy5mbGFncyAmIDIpIHtcbiAgICAgIGlmICghKHRoaXMuYXJndW1lbnQxID49IC0xMjggJiYgdGhpcy5hcmd1bWVudDEgPD0gMTI3ICYmIHRoaXMuYXJndW1lbnQyID49IC0xMjggJiYgdGhpcy5hcmd1bWVudDIgPD0gMTI3KSkge1xuICAgICAgICBzaXplICs9IDI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghKHRoaXMuYXJndW1lbnQxID49IDAgJiYgdGhpcy5hcmd1bWVudDEgPD0gMjU1ICYmIHRoaXMuYXJndW1lbnQyID49IDAgJiYgdGhpcy5hcmd1bWVudDIgPD0gMjU1KSkge1xuICAgICAgICBzaXplICs9IDI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNpemU7XG4gIH1cblxuICB3cml0ZShwb3MsIGJ1Zikge1xuICAgIGNvbnN0IHNwb3MgPSBwb3M7XG5cbiAgICBpZiAodGhpcy5mbGFncyAmIEFSR1NfQVJFX1hZX1ZBTFVFUykge1xuICAgICAgaWYgKCEodGhpcy5hcmd1bWVudDEgPj0gLTEyOCAmJiB0aGlzLmFyZ3VtZW50MSA8PSAxMjcgJiYgdGhpcy5hcmd1bWVudDIgPj0gLTEyOCAmJiB0aGlzLmFyZ3VtZW50MiA8PSAxMjcpKSB7XG4gICAgICAgIHRoaXMuZmxhZ3MgfD0gQVJHXzFfQU5EXzJfQVJFX1dPUkRTO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoISh0aGlzLmFyZ3VtZW50MSA+PSAwICYmIHRoaXMuYXJndW1lbnQxIDw9IDI1NSAmJiB0aGlzLmFyZ3VtZW50MiA+PSAwICYmIHRoaXMuYXJndW1lbnQyIDw9IDI1NSkpIHtcbiAgICAgICAgdGhpcy5mbGFncyB8PSBBUkdfMV9BTkRfMl9BUkVfV09SRFM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYnVmLnNldFVpbnQxNihwb3MsIHRoaXMuZmxhZ3MpO1xuICAgIGJ1Zi5zZXRVaW50MTYocG9zICsgMiwgdGhpcy5nbHlwaEluZGV4KTtcbiAgICBwb3MgKz0gNDtcblxuICAgIGlmICh0aGlzLmZsYWdzICYgQVJHXzFfQU5EXzJfQVJFX1dPUkRTKSB7XG4gICAgICBpZiAodGhpcy5mbGFncyAmIEFSR1NfQVJFX1hZX1ZBTFVFUykge1xuICAgICAgICBidWYuc2V0SW50MTYocG9zLCB0aGlzLmFyZ3VtZW50MSk7XG4gICAgICAgIGJ1Zi5zZXRJbnQxNihwb3MgKyAyLCB0aGlzLmFyZ3VtZW50Mik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBidWYuc2V0VWludDE2KHBvcywgdGhpcy5hcmd1bWVudDEpO1xuICAgICAgICBidWYuc2V0VWludDE2KHBvcyArIDIsIHRoaXMuYXJndW1lbnQyKTtcbiAgICAgIH1cblxuICAgICAgcG9zICs9IDQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1Zi5zZXRVaW50OChwb3MsIHRoaXMuYXJndW1lbnQxKTtcbiAgICAgIGJ1Zi5zZXRVaW50OChwb3MgKyAxLCB0aGlzLmFyZ3VtZW50Mik7XG4gICAgICBwb3MgKz0gMjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5mbGFncyAmIFdFX0hBVkVfSU5TVFJVQ1RJT05TKSB7XG4gICAgICBidWYuc2V0VWludDE2KHBvcywgdGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoKTtcbiAgICAgIHBvcyArPSAyO1xuXG4gICAgICBpZiAodGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIG5ldyBVaW50OEFycmF5KGJ1Zi5idWZmZXIsIDAsIGJ1Zi5idWZmZXIuYnl0ZUxlbmd0aCkuc2V0KHRoaXMuaW5zdHJ1Y3Rpb25zLCBwb3MpO1xuICAgICAgICBwb3MgKz0gdGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwb3MgLSBzcG9zO1xuICB9XG5cbiAgc2NhbGUoeCwgZmFjdG9yKSB7fVxuXG59XG5cbi8qKiovIH0pLFxuLyogNTIgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuT3BlblR5cGVGaWxlQnVpbGRlciA9IHZvaWQgMDtcblxudmFyIF9jb3JlX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXyg5KTtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxuZnVuY3Rpb24gd3JpdGVJbnQxNihkZXN0LCBvZmZzZXQsIG51bSkge1xuICBkZXN0W29mZnNldF0gPSBudW0gPj4gOCAmIDB4ZmY7XG4gIGRlc3Rbb2Zmc2V0ICsgMV0gPSBudW0gJiAweGZmO1xufVxuXG5mdW5jdGlvbiB3cml0ZUludDMyKGRlc3QsIG9mZnNldCwgbnVtKSB7XG4gIGRlc3Rbb2Zmc2V0XSA9IG51bSA+PiAyNCAmIDB4ZmY7XG4gIGRlc3Rbb2Zmc2V0ICsgMV0gPSBudW0gPj4gMTYgJiAweGZmO1xuICBkZXN0W29mZnNldCArIDJdID0gbnVtID4+IDggJiAweGZmO1xuICBkZXN0W29mZnNldCArIDNdID0gbnVtICYgMHhmZjtcbn1cblxuZnVuY3Rpb24gd3JpdGVEYXRhKGRlc3QsIG9mZnNldCwgZGF0YSkge1xuICBpZiAoZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICBkZXN0LnNldChkYXRhLCBvZmZzZXQpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiKSB7XG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gZGF0YS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBkZXN0W29mZnNldCsrXSA9IGRhdGEuY2hhckNvZGVBdChpKSAmIDB4ZmY7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGRhdGEubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgZGVzdFtvZmZzZXQrK10gPSBkYXRhW2ldICYgMHhmZjtcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgT1RGX0hFQURFUl9TSVpFID0gMTI7XG5jb25zdCBPVEZfVEFCTEVfRU5UUllfU0laRSA9IDE2O1xuXG5jbGFzcyBPcGVuVHlwZUZpbGVCdWlsZGVyIHtcbiAgY29uc3RydWN0b3Ioc2ZudCkge1xuICAgIHRoaXMuc2ZudCA9IHNmbnQ7XG4gICAgdGhpcy50YWJsZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB9XG5cbiAgc3RhdGljIGdldFNlYXJjaFBhcmFtcyhlbnRyaWVzQ291bnQsIGVudHJ5U2l6ZSkge1xuICAgIGxldCBtYXhQb3dlcjIgPSAxLFxuICAgICAgICBsb2cyID0gMDtcblxuICAgIHdoaWxlICgobWF4UG93ZXIyIF4gZW50cmllc0NvdW50KSA+IG1heFBvd2VyMikge1xuICAgICAgbWF4UG93ZXIyIDw8PSAxO1xuICAgICAgbG9nMisrO1xuICAgIH1cblxuICAgIGNvbnN0IHNlYXJjaFJhbmdlID0gbWF4UG93ZXIyICogZW50cnlTaXplO1xuICAgIHJldHVybiB7XG4gICAgICByYW5nZTogc2VhcmNoUmFuZ2UsXG4gICAgICBlbnRyeTogbG9nMixcbiAgICAgIHJhbmdlU2hpZnQ6IGVudHJ5U2l6ZSAqIGVudHJpZXNDb3VudCAtIHNlYXJjaFJhbmdlXG4gICAgfTtcbiAgfVxuXG4gIHRvQXJyYXkoKSB7XG4gICAgbGV0IHNmbnQgPSB0aGlzLnNmbnQ7XG4gICAgY29uc3QgdGFibGVzID0gdGhpcy50YWJsZXM7XG4gICAgY29uc3QgdGFibGVzTmFtZXMgPSBPYmplY3Qua2V5cyh0YWJsZXMpO1xuICAgIHRhYmxlc05hbWVzLnNvcnQoKTtcbiAgICBjb25zdCBudW1UYWJsZXMgPSB0YWJsZXNOYW1lcy5sZW5ndGg7XG4gICAgbGV0IGksIGosIGpqLCB0YWJsZSwgdGFibGVOYW1lO1xuICAgIGxldCBvZmZzZXQgPSBPVEZfSEVBREVSX1NJWkUgKyBudW1UYWJsZXMgKiBPVEZfVEFCTEVfRU5UUllfU0laRTtcbiAgICBjb25zdCB0YWJsZU9mZnNldHMgPSBbb2Zmc2V0XTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBudW1UYWJsZXM7IGkrKykge1xuICAgICAgdGFibGUgPSB0YWJsZXNbdGFibGVzTmFtZXNbaV1dO1xuICAgICAgY29uc3QgcGFkZGVkTGVuZ3RoID0gKHRhYmxlLmxlbmd0aCArIDMgJiB+MykgPj4+IDA7XG4gICAgICBvZmZzZXQgKz0gcGFkZGVkTGVuZ3RoO1xuICAgICAgdGFibGVPZmZzZXRzLnB1c2gob2Zmc2V0KTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWxlID0gbmV3IFVpbnQ4QXJyYXkob2Zmc2V0KTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBudW1UYWJsZXM7IGkrKykge1xuICAgICAgdGFibGUgPSB0YWJsZXNbdGFibGVzTmFtZXNbaV1dO1xuICAgICAgd3JpdGVEYXRhKGZpbGUsIHRhYmxlT2Zmc2V0c1tpXSwgdGFibGUpO1xuICAgIH1cblxuICAgIGlmIChzZm50ID09PSBcInRydWVcIikge1xuICAgICAgc2ZudCA9ICgwLCBfdXRpbC5zdHJpbmczMikoMHgwMDAxMDAwMCk7XG4gICAgfVxuXG4gICAgZmlsZVswXSA9IHNmbnQuY2hhckNvZGVBdCgwKSAmIDB4ZmY7XG4gICAgZmlsZVsxXSA9IHNmbnQuY2hhckNvZGVBdCgxKSAmIDB4ZmY7XG4gICAgZmlsZVsyXSA9IHNmbnQuY2hhckNvZGVBdCgyKSAmIDB4ZmY7XG4gICAgZmlsZVszXSA9IHNmbnQuY2hhckNvZGVBdCgzKSAmIDB4ZmY7XG4gICAgd3JpdGVJbnQxNihmaWxlLCA0LCBudW1UYWJsZXMpO1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IE9wZW5UeXBlRmlsZUJ1aWxkZXIuZ2V0U2VhcmNoUGFyYW1zKG51bVRhYmxlcywgMTYpO1xuICAgIHdyaXRlSW50MTYoZmlsZSwgNiwgc2VhcmNoUGFyYW1zLnJhbmdlKTtcbiAgICB3cml0ZUludDE2KGZpbGUsIDgsIHNlYXJjaFBhcmFtcy5lbnRyeSk7XG4gICAgd3JpdGVJbnQxNihmaWxlLCAxMCwgc2VhcmNoUGFyYW1zLnJhbmdlU2hpZnQpO1xuICAgIG9mZnNldCA9IE9URl9IRUFERVJfU0laRTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBudW1UYWJsZXM7IGkrKykge1xuICAgICAgdGFibGVOYW1lID0gdGFibGVzTmFtZXNbaV07XG4gICAgICBmaWxlW29mZnNldF0gPSB0YWJsZU5hbWUuY2hhckNvZGVBdCgwKSAmIDB4ZmY7XG4gICAgICBmaWxlW29mZnNldCArIDFdID0gdGFibGVOYW1lLmNoYXJDb2RlQXQoMSkgJiAweGZmO1xuICAgICAgZmlsZVtvZmZzZXQgKyAyXSA9IHRhYmxlTmFtZS5jaGFyQ29kZUF0KDIpICYgMHhmZjtcbiAgICAgIGZpbGVbb2Zmc2V0ICsgM10gPSB0YWJsZU5hbWUuY2hhckNvZGVBdCgzKSAmIDB4ZmY7XG4gICAgICBsZXQgY2hlY2tzdW0gPSAwO1xuXG4gICAgICBmb3IgKGogPSB0YWJsZU9mZnNldHNbaV0sIGpqID0gdGFibGVPZmZzZXRzW2kgKyAxXTsgaiA8IGpqOyBqICs9IDQpIHtcbiAgICAgICAgY29uc3QgcXVhZCA9ICgwLCBfY29yZV91dGlscy5yZWFkVWludDMyKShmaWxlLCBqKTtcbiAgICAgICAgY2hlY2tzdW0gPSBjaGVja3N1bSArIHF1YWQgPj4+IDA7XG4gICAgICB9XG5cbiAgICAgIHdyaXRlSW50MzIoZmlsZSwgb2Zmc2V0ICsgNCwgY2hlY2tzdW0pO1xuICAgICAgd3JpdGVJbnQzMihmaWxlLCBvZmZzZXQgKyA4LCB0YWJsZU9mZnNldHNbaV0pO1xuICAgICAgd3JpdGVJbnQzMihmaWxlLCBvZmZzZXQgKyAxMiwgdGFibGVzW3RhYmxlTmFtZV0ubGVuZ3RoKTtcbiAgICAgIG9mZnNldCArPSBPVEZfVEFCTEVfRU5UUllfU0laRTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlsZTtcbiAgfVxuXG4gIGFkZFRhYmxlKHRhZywgZGF0YSkge1xuICAgIGlmICh0YWcgaW4gdGhpcy50YWJsZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRhYmxlIFwiICsgdGFnICsgXCIgYWxyZWFkeSBleGlzdHNcIik7XG4gICAgfVxuXG4gICAgdGhpcy50YWJsZXNbdGFnXSA9IGRhdGE7XG4gIH1cblxufVxuXG5leHBvcnRzLk9wZW5UeXBlRmlsZUJ1aWxkZXIgPSBPcGVuVHlwZUZpbGVCdWlsZGVyO1xuXG4vKioqLyB9KSxcbi8qIDUzICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLlR5cGUxRm9udCA9IHZvaWQgMDtcblxudmFyIF9jZmZfcGFyc2VyID0gX193X3BkZmpzX3JlcXVpcmVfXyg0NSk7XG5cbnZhciBfZm9udHNfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDE4KTtcblxudmFyIF9jb3JlX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXyg5KTtcblxudmFyIF9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEwKTtcblxudmFyIF90eXBlMV9wYXJzZXIgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDU0KTtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxuZnVuY3Rpb24gZmluZEJsb2NrKHN0cmVhbUJ5dGVzLCBzaWduYXR1cmUsIHN0YXJ0SW5kZXgpIHtcbiAgY29uc3Qgc3RyZWFtQnl0ZXNMZW5ndGggPSBzdHJlYW1CeXRlcy5sZW5ndGg7XG4gIGNvbnN0IHNpZ25hdHVyZUxlbmd0aCA9IHNpZ25hdHVyZS5sZW5ndGg7XG4gIGNvbnN0IHNjYW5MZW5ndGggPSBzdHJlYW1CeXRlc0xlbmd0aCAtIHNpZ25hdHVyZUxlbmd0aDtcbiAgbGV0IGkgPSBzdGFydEluZGV4LFxuICAgICAgZm91bmQgPSBmYWxzZTtcblxuICB3aGlsZSAoaSA8IHNjYW5MZW5ndGgpIHtcbiAgICBsZXQgaiA9IDA7XG5cbiAgICB3aGlsZSAoaiA8IHNpZ25hdHVyZUxlbmd0aCAmJiBzdHJlYW1CeXRlc1tpICsgal0gPT09IHNpZ25hdHVyZVtqXSkge1xuICAgICAgaisrO1xuICAgIH1cblxuICAgIGlmIChqID49IHNpZ25hdHVyZUxlbmd0aCkge1xuICAgICAgaSArPSBqO1xuXG4gICAgICB3aGlsZSAoaSA8IHN0cmVhbUJ5dGVzTGVuZ3RoICYmICgwLCBfY29yZV91dGlscy5pc1doaXRlU3BhY2UpKHN0cmVhbUJ5dGVzW2ldKSkge1xuICAgICAgICBpKys7XG4gICAgICB9XG5cbiAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGkrKztcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZm91bmQsXG4gICAgbGVuZ3RoOiBpXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldEhlYWRlckJsb2NrKHN0cmVhbSwgc3VnZ2VzdGVkTGVuZ3RoKSB7XG4gIGNvbnN0IEVFWEVDX1NJR05BVFVSRSA9IFsweDY1LCAweDY1LCAweDc4LCAweDY1LCAweDYzXTtcbiAgY29uc3Qgc3RyZWFtU3RhcnRQb3MgPSBzdHJlYW0ucG9zO1xuICBsZXQgaGVhZGVyQnl0ZXMsIGhlYWRlckJ5dGVzTGVuZ3RoLCBibG9jaztcblxuICB0cnkge1xuICAgIGhlYWRlckJ5dGVzID0gc3RyZWFtLmdldEJ5dGVzKHN1Z2dlc3RlZExlbmd0aCk7XG4gICAgaGVhZGVyQnl0ZXNMZW5ndGggPSBoZWFkZXJCeXRlcy5sZW5ndGg7XG4gIH0gY2F0Y2ggKGV4KSB7fVxuXG4gIGlmIChoZWFkZXJCeXRlc0xlbmd0aCA9PT0gc3VnZ2VzdGVkTGVuZ3RoKSB7XG4gICAgYmxvY2sgPSBmaW5kQmxvY2soaGVhZGVyQnl0ZXMsIEVFWEVDX1NJR05BVFVSRSwgc3VnZ2VzdGVkTGVuZ3RoIC0gMiAqIEVFWEVDX1NJR05BVFVSRS5sZW5ndGgpO1xuXG4gICAgaWYgKGJsb2NrLmZvdW5kICYmIGJsb2NrLmxlbmd0aCA9PT0gc3VnZ2VzdGVkTGVuZ3RoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdHJlYW06IG5ldyBfc3RyZWFtLlN0cmVhbShoZWFkZXJCeXRlcyksXG4gICAgICAgIGxlbmd0aDogc3VnZ2VzdGVkTGVuZ3RoXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gICgwLCBfdXRpbC53YXJuKSgnSW52YWxpZCBcIkxlbmd0aDFcIiBwcm9wZXJ0eSBpbiBUeXBlMSBmb250IC0tIHRyeWluZyB0byByZWNvdmVyLicpO1xuICBzdHJlYW0ucG9zID0gc3RyZWFtU3RhcnRQb3M7XG4gIGNvbnN0IFNDQU5fQkxPQ0tfTEVOR1RIID0gMjA0ODtcbiAgbGV0IGFjdHVhbExlbmd0aDtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IHNjYW5CeXRlcyA9IHN0cmVhbS5wZWVrQnl0ZXMoU0NBTl9CTE9DS19MRU5HVEgpO1xuICAgIGJsb2NrID0gZmluZEJsb2NrKHNjYW5CeXRlcywgRUVYRUNfU0lHTkFUVVJFLCAwKTtcblxuICAgIGlmIChibG9jay5sZW5ndGggPT09IDApIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHN0cmVhbS5wb3MgKz0gYmxvY2subGVuZ3RoO1xuXG4gICAgaWYgKGJsb2NrLmZvdW5kKSB7XG4gICAgICBhY3R1YWxMZW5ndGggPSBzdHJlYW0ucG9zIC0gc3RyZWFtU3RhcnRQb3M7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBzdHJlYW0ucG9zID0gc3RyZWFtU3RhcnRQb3M7XG5cbiAgaWYgKGFjdHVhbExlbmd0aCkge1xuICAgIHJldHVybiB7XG4gICAgICBzdHJlYW06IG5ldyBfc3RyZWFtLlN0cmVhbShzdHJlYW0uZ2V0Qnl0ZXMoYWN0dWFsTGVuZ3RoKSksXG4gICAgICBsZW5ndGg6IGFjdHVhbExlbmd0aFxuICAgIH07XG4gIH1cblxuICAoMCwgX3V0aWwud2FybikoJ1VuYWJsZSB0byByZWNvdmVyIFwiTGVuZ3RoMVwiIHByb3BlcnR5IGluIFR5cGUxIGZvbnQgLS0gdXNpbmcgYXMgaXMuJyk7XG4gIHJldHVybiB7XG4gICAgc3RyZWFtOiBuZXcgX3N0cmVhbS5TdHJlYW0oc3RyZWFtLmdldEJ5dGVzKHN1Z2dlc3RlZExlbmd0aCkpLFxuICAgIGxlbmd0aDogc3VnZ2VzdGVkTGVuZ3RoXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldEVleGVjQmxvY2soc3RyZWFtLCBzdWdnZXN0ZWRMZW5ndGgpIHtcbiAgY29uc3QgZWV4ZWNCeXRlcyA9IHN0cmVhbS5nZXRCeXRlcygpO1xuICByZXR1cm4ge1xuICAgIHN0cmVhbTogbmV3IF9zdHJlYW0uU3RyZWFtKGVleGVjQnl0ZXMpLFxuICAgIGxlbmd0aDogZWV4ZWNCeXRlcy5sZW5ndGhcbiAgfTtcbn1cblxuY2xhc3MgVHlwZTFGb250IHtcbiAgY29uc3RydWN0b3IobmFtZSwgZmlsZSwgcHJvcGVydGllcykge1xuICAgIGNvbnN0IFBGQl9IRUFERVJfU0laRSA9IDY7XG4gICAgbGV0IGhlYWRlckJsb2NrTGVuZ3RoID0gcHJvcGVydGllcy5sZW5ndGgxO1xuICAgIGxldCBlZXhlY0Jsb2NrTGVuZ3RoID0gcHJvcGVydGllcy5sZW5ndGgyO1xuICAgIGxldCBwZmJIZWFkZXIgPSBmaWxlLnBlZWtCeXRlcyhQRkJfSEVBREVSX1NJWkUpO1xuICAgIGNvbnN0IHBmYkhlYWRlclByZXNlbnQgPSBwZmJIZWFkZXJbMF0gPT09IDB4ODAgJiYgcGZiSGVhZGVyWzFdID09PSAweDAxO1xuXG4gICAgaWYgKHBmYkhlYWRlclByZXNlbnQpIHtcbiAgICAgIGZpbGUuc2tpcChQRkJfSEVBREVSX1NJWkUpO1xuICAgICAgaGVhZGVyQmxvY2tMZW5ndGggPSBwZmJIZWFkZXJbNV0gPDwgMjQgfCBwZmJIZWFkZXJbNF0gPDwgMTYgfCBwZmJIZWFkZXJbM10gPDwgOCB8IHBmYkhlYWRlclsyXTtcbiAgICB9XG5cbiAgICBjb25zdCBoZWFkZXJCbG9jayA9IGdldEhlYWRlckJsb2NrKGZpbGUsIGhlYWRlckJsb2NrTGVuZ3RoKTtcbiAgICBjb25zdCBoZWFkZXJCbG9ja1BhcnNlciA9IG5ldyBfdHlwZTFfcGFyc2VyLlR5cGUxUGFyc2VyKGhlYWRlckJsb2NrLnN0cmVhbSwgZmFsc2UsIF9mb250c191dGlscy5TRUFDX0FOQUxZU0lTX0VOQUJMRUQpO1xuICAgIGhlYWRlckJsb2NrUGFyc2VyLmV4dHJhY3RGb250SGVhZGVyKHByb3BlcnRpZXMpO1xuXG4gICAgaWYgKHBmYkhlYWRlclByZXNlbnQpIHtcbiAgICAgIHBmYkhlYWRlciA9IGZpbGUuZ2V0Qnl0ZXMoUEZCX0hFQURFUl9TSVpFKTtcbiAgICAgIGVleGVjQmxvY2tMZW5ndGggPSBwZmJIZWFkZXJbNV0gPDwgMjQgfCBwZmJIZWFkZXJbNF0gPDwgMTYgfCBwZmJIZWFkZXJbM10gPDwgOCB8IHBmYkhlYWRlclsyXTtcbiAgICB9XG5cbiAgICBjb25zdCBlZXhlY0Jsb2NrID0gZ2V0RWV4ZWNCbG9jayhmaWxlLCBlZXhlY0Jsb2NrTGVuZ3RoKTtcbiAgICBjb25zdCBlZXhlY0Jsb2NrUGFyc2VyID0gbmV3IF90eXBlMV9wYXJzZXIuVHlwZTFQYXJzZXIoZWV4ZWNCbG9jay5zdHJlYW0sIHRydWUsIF9mb250c191dGlscy5TRUFDX0FOQUxZU0lTX0VOQUJMRUQpO1xuICAgIGNvbnN0IGRhdGEgPSBlZXhlY0Jsb2NrUGFyc2VyLmV4dHJhY3RGb250UHJvZ3JhbShwcm9wZXJ0aWVzKTtcblxuICAgIGZvciAoY29uc3Qga2V5IGluIGRhdGEucHJvcGVydGllcykge1xuICAgICAgcHJvcGVydGllc1trZXldID0gZGF0YS5wcm9wZXJ0aWVzW2tleV07XG4gICAgfVxuXG4gICAgY29uc3QgY2hhcnN0cmluZ3MgPSBkYXRhLmNoYXJzdHJpbmdzO1xuICAgIGNvbnN0IHR5cGUyQ2hhcnN0cmluZ3MgPSB0aGlzLmdldFR5cGUyQ2hhcnN0cmluZ3MoY2hhcnN0cmluZ3MpO1xuICAgIGNvbnN0IHN1YnJzID0gdGhpcy5nZXRUeXBlMlN1YnJzKGRhdGEuc3VicnMpO1xuICAgIHRoaXMuY2hhcnN0cmluZ3MgPSBjaGFyc3RyaW5ncztcbiAgICB0aGlzLmRhdGEgPSB0aGlzLndyYXAobmFtZSwgdHlwZTJDaGFyc3RyaW5ncywgdGhpcy5jaGFyc3RyaW5ncywgc3VicnMsIHByb3BlcnRpZXMpO1xuICAgIHRoaXMuc2VhY3MgPSB0aGlzLmdldFNlYWNzKGRhdGEuY2hhcnN0cmluZ3MpO1xuICB9XG5cbiAgZ2V0IG51bUdseXBocygpIHtcbiAgICByZXR1cm4gdGhpcy5jaGFyc3RyaW5ncy5sZW5ndGggKyAxO1xuICB9XG5cbiAgZ2V0Q2hhcnNldCgpIHtcbiAgICBjb25zdCBjaGFyc2V0ID0gW1wiLm5vdGRlZlwiXTtcbiAgICBjb25zdCBjaGFyc3RyaW5ncyA9IHRoaXMuY2hhcnN0cmluZ3M7XG5cbiAgICBmb3IgKGxldCBnbHlwaElkID0gMDsgZ2x5cGhJZCA8IGNoYXJzdHJpbmdzLmxlbmd0aDsgZ2x5cGhJZCsrKSB7XG4gICAgICBjaGFyc2V0LnB1c2goY2hhcnN0cmluZ3NbZ2x5cGhJZF0uZ2x5cGhOYW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hhcnNldDtcbiAgfVxuXG4gIGdldEdseXBoTWFwcGluZyhwcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgY2hhcnN0cmluZ3MgPSB0aGlzLmNoYXJzdHJpbmdzO1xuXG4gICAgaWYgKHByb3BlcnRpZXMuY29tcG9zaXRlKSB7XG4gICAgICBjb25zdCBjaGFyQ29kZVRvR2x5cGhJZCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICAgIGZvciAobGV0IGdseXBoSWQgPSAwLCBjaGFyc3RyaW5nc0xlbiA9IGNoYXJzdHJpbmdzLmxlbmd0aDsgZ2x5cGhJZCA8IGNoYXJzdHJpbmdzTGVuOyBnbHlwaElkKyspIHtcbiAgICAgICAgY29uc3QgY2hhckNvZGUgPSBwcm9wZXJ0aWVzLmNNYXAuY2hhckNvZGVPZihnbHlwaElkKTtcbiAgICAgICAgY2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdID0gZ2x5cGhJZCArIDE7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjaGFyQ29kZVRvR2x5cGhJZDtcbiAgICB9XG5cbiAgICBjb25zdCBnbHlwaE5hbWVzID0gW1wiLm5vdGRlZlwiXTtcbiAgICBsZXQgYnVpbHRJbkVuY29kaW5nLCBnbHlwaElkO1xuXG4gICAgZm9yIChnbHlwaElkID0gMDsgZ2x5cGhJZCA8IGNoYXJzdHJpbmdzLmxlbmd0aDsgZ2x5cGhJZCsrKSB7XG4gICAgICBnbHlwaE5hbWVzLnB1c2goY2hhcnN0cmluZ3NbZ2x5cGhJZF0uZ2x5cGhOYW1lKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbmNvZGluZyA9IHByb3BlcnRpZXMuYnVpbHRJbkVuY29kaW5nO1xuXG4gICAgaWYgKGVuY29kaW5nKSB7XG4gICAgICBidWlsdEluRW5jb2RpbmcgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgICBmb3IgKGNvbnN0IGNoYXJDb2RlIGluIGVuY29kaW5nKSB7XG4gICAgICAgIGdseXBoSWQgPSBnbHlwaE5hbWVzLmluZGV4T2YoZW5jb2RpbmdbY2hhckNvZGVdKTtcblxuICAgICAgICBpZiAoZ2x5cGhJZCA+PSAwKSB7XG4gICAgICAgICAgYnVpbHRJbkVuY29kaW5nW2NoYXJDb2RlXSA9IGdseXBoSWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF9mb250c191dGlscy50eXBlMUZvbnRHbHlwaE1hcHBpbmcpKHByb3BlcnRpZXMsIGJ1aWx0SW5FbmNvZGluZywgZ2x5cGhOYW1lcyk7XG4gIH1cblxuICBoYXNHbHlwaElkKGlkKSB7XG4gICAgaWYgKGlkIDwgMCB8fCBpZCA+PSB0aGlzLm51bUdseXBocykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChpZCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgZ2x5cGggPSB0aGlzLmNoYXJzdHJpbmdzW2lkIC0gMV07XG4gICAgcmV0dXJuIGdseXBoLmNoYXJzdHJpbmcubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGdldFNlYWNzKGNoYXJzdHJpbmdzKSB7XG4gICAgY29uc3Qgc2VhY01hcCA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gY2hhcnN0cmluZ3MubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgY29uc3QgY2hhcnN0cmluZyA9IGNoYXJzdHJpbmdzW2ldO1xuXG4gICAgICBpZiAoY2hhcnN0cmluZy5zZWFjKSB7XG4gICAgICAgIHNlYWNNYXBbaSArIDFdID0gY2hhcnN0cmluZy5zZWFjO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzZWFjTWFwO1xuICB9XG5cbiAgZ2V0VHlwZTJDaGFyc3RyaW5ncyh0eXBlMUNoYXJzdHJpbmdzKSB7XG4gICAgY29uc3QgdHlwZTJDaGFyc3RyaW5ncyA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gdHlwZTFDaGFyc3RyaW5ncy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICB0eXBlMkNoYXJzdHJpbmdzLnB1c2godHlwZTFDaGFyc3RyaW5nc1tpXS5jaGFyc3RyaW5nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZTJDaGFyc3RyaW5ncztcbiAgfVxuXG4gIGdldFR5cGUyU3VicnModHlwZTFTdWJycykge1xuICAgIGxldCBiaWFzID0gMDtcbiAgICBjb25zdCBjb3VudCA9IHR5cGUxU3VicnMubGVuZ3RoO1xuXG4gICAgaWYgKGNvdW50IDwgMTEzMykge1xuICAgICAgYmlhcyA9IDEwNztcbiAgICB9IGVsc2UgaWYgKGNvdW50IDwgMzM3NjkpIHtcbiAgICAgIGJpYXMgPSAxMTMxO1xuICAgIH0gZWxzZSB7XG4gICAgICBiaWFzID0gMzI3Njg7XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZTJTdWJycyA9IFtdO1xuICAgIGxldCBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGJpYXM7IGkrKykge1xuICAgICAgdHlwZTJTdWJycy5wdXNoKFsweDBiXSk7XG4gICAgfVxuXG4gICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgIHR5cGUyU3VicnMucHVzaCh0eXBlMVN1YnJzW2ldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZTJTdWJycztcbiAgfVxuXG4gIHdyYXAobmFtZSwgZ2x5cGhzLCBjaGFyc3RyaW5ncywgc3VicnMsIHByb3BlcnRpZXMpIHtcbiAgICBjb25zdCBjZmYgPSBuZXcgX2NmZl9wYXJzZXIuQ0ZGKCk7XG4gICAgY2ZmLmhlYWRlciA9IG5ldyBfY2ZmX3BhcnNlci5DRkZIZWFkZXIoMSwgMCwgNCwgNCk7XG4gICAgY2ZmLm5hbWVzID0gW25hbWVdO1xuICAgIGNvbnN0IHRvcERpY3QgPSBuZXcgX2NmZl9wYXJzZXIuQ0ZGVG9wRGljdCgpO1xuICAgIHRvcERpY3Quc2V0QnlOYW1lKFwidmVyc2lvblwiLCAzOTEpO1xuICAgIHRvcERpY3Quc2V0QnlOYW1lKFwiTm90aWNlXCIsIDM5Mik7XG4gICAgdG9wRGljdC5zZXRCeU5hbWUoXCJGdWxsTmFtZVwiLCAzOTMpO1xuICAgIHRvcERpY3Quc2V0QnlOYW1lKFwiRmFtaWx5TmFtZVwiLCAzOTQpO1xuICAgIHRvcERpY3Quc2V0QnlOYW1lKFwiV2VpZ2h0XCIsIDM5NSk7XG4gICAgdG9wRGljdC5zZXRCeU5hbWUoXCJFbmNvZGluZ1wiLCBudWxsKTtcbiAgICB0b3BEaWN0LnNldEJ5TmFtZShcIkZvbnRNYXRyaXhcIiwgcHJvcGVydGllcy5mb250TWF0cml4KTtcbiAgICB0b3BEaWN0LnNldEJ5TmFtZShcIkZvbnRCQm94XCIsIHByb3BlcnRpZXMuYmJveCk7XG4gICAgdG9wRGljdC5zZXRCeU5hbWUoXCJjaGFyc2V0XCIsIG51bGwpO1xuICAgIHRvcERpY3Quc2V0QnlOYW1lKFwiQ2hhclN0cmluZ3NcIiwgbnVsbCk7XG4gICAgdG9wRGljdC5zZXRCeU5hbWUoXCJQcml2YXRlXCIsIG51bGwpO1xuICAgIGNmZi50b3BEaWN0ID0gdG9wRGljdDtcbiAgICBjb25zdCBzdHJpbmdzID0gbmV3IF9jZmZfcGFyc2VyLkNGRlN0cmluZ3MoKTtcbiAgICBzdHJpbmdzLmFkZChcIlZlcnNpb24gMC4xMVwiKTtcbiAgICBzdHJpbmdzLmFkZChcIlNlZSBvcmlnaW5hbCBub3RpY2VcIik7XG4gICAgc3RyaW5ncy5hZGQobmFtZSk7XG4gICAgc3RyaW5ncy5hZGQobmFtZSk7XG4gICAgc3RyaW5ncy5hZGQoXCJNZWRpdW1cIik7XG4gICAgY2ZmLnN0cmluZ3MgPSBzdHJpbmdzO1xuICAgIGNmZi5nbG9iYWxTdWJySW5kZXggPSBuZXcgX2NmZl9wYXJzZXIuQ0ZGSW5kZXgoKTtcbiAgICBjb25zdCBjb3VudCA9IGdseXBocy5sZW5ndGg7XG4gICAgY29uc3QgY2hhcnNldEFycmF5ID0gW1wiLm5vdGRlZlwiXTtcbiAgICBsZXQgaSwgaWk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgY29uc3QgZ2x5cGhOYW1lID0gY2hhcnN0cmluZ3NbaV0uZ2x5cGhOYW1lO1xuXG4gICAgICBjb25zdCBpbmRleCA9IF9jZmZfcGFyc2VyLkNGRlN0YW5kYXJkU3RyaW5ncy5pbmRleE9mKGdseXBoTmFtZSk7XG5cbiAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgICAgc3RyaW5ncy5hZGQoZ2x5cGhOYW1lKTtcbiAgICAgIH1cblxuICAgICAgY2hhcnNldEFycmF5LnB1c2goZ2x5cGhOYW1lKTtcbiAgICB9XG5cbiAgICBjZmYuY2hhcnNldCA9IG5ldyBfY2ZmX3BhcnNlci5DRkZDaGFyc2V0KGZhbHNlLCAwLCBjaGFyc2V0QXJyYXkpO1xuICAgIGNvbnN0IGNoYXJTdHJpbmdzSW5kZXggPSBuZXcgX2NmZl9wYXJzZXIuQ0ZGSW5kZXgoKTtcbiAgICBjaGFyU3RyaW5nc0luZGV4LmFkZChbMHg4YiwgMHgwZV0pO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgIGNoYXJTdHJpbmdzSW5kZXguYWRkKGdseXBoc1tpXSk7XG4gICAgfVxuXG4gICAgY2ZmLmNoYXJTdHJpbmdzID0gY2hhclN0cmluZ3NJbmRleDtcbiAgICBjb25zdCBwcml2YXRlRGljdCA9IG5ldyBfY2ZmX3BhcnNlci5DRkZQcml2YXRlRGljdCgpO1xuICAgIHByaXZhdGVEaWN0LnNldEJ5TmFtZShcIlN1YnJzXCIsIG51bGwpO1xuICAgIGNvbnN0IGZpZWxkcyA9IFtcIkJsdWVWYWx1ZXNcIiwgXCJPdGhlckJsdWVzXCIsIFwiRmFtaWx5Qmx1ZXNcIiwgXCJGYW1pbHlPdGhlckJsdWVzXCIsIFwiU3RlbVNuYXBIXCIsIFwiU3RlbVNuYXBWXCIsIFwiQmx1ZVNoaWZ0XCIsIFwiQmx1ZUZ1enpcIiwgXCJCbHVlU2NhbGVcIiwgXCJMYW5ndWFnZUdyb3VwXCIsIFwiRXhwYW5zaW9uRmFjdG9yXCIsIFwiRm9yY2VCb2xkXCIsIFwiU3RkSFdcIiwgXCJTdGRWV1wiXTtcblxuICAgIGZvciAoaSA9IDAsIGlpID0gZmllbGRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGNvbnN0IGZpZWxkID0gZmllbGRzW2ldO1xuXG4gICAgICBpZiAoIShmaWVsZCBpbiBwcm9wZXJ0aWVzLnByaXZhdGVEYXRhKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdmFsdWUgPSBwcm9wZXJ0aWVzLnByaXZhdGVEYXRhW2ZpZWxkXTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGZvciAobGV0IGogPSB2YWx1ZS5sZW5ndGggLSAxOyBqID4gMDsgai0tKSB7XG4gICAgICAgICAgdmFsdWVbal0gLT0gdmFsdWVbaiAtIDFdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHByaXZhdGVEaWN0LnNldEJ5TmFtZShmaWVsZCwgdmFsdWUpO1xuICAgIH1cblxuICAgIGNmZi50b3BEaWN0LnByaXZhdGVEaWN0ID0gcHJpdmF0ZURpY3Q7XG4gICAgY29uc3Qgc3VickluZGV4ID0gbmV3IF9jZmZfcGFyc2VyLkNGRkluZGV4KCk7XG5cbiAgICBmb3IgKGkgPSAwLCBpaSA9IHN1YnJzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIHN1YnJJbmRleC5hZGQoc3VicnNbaV0pO1xuICAgIH1cblxuICAgIHByaXZhdGVEaWN0LnN1YnJzSW5kZXggPSBzdWJySW5kZXg7XG4gICAgY29uc3QgY29tcGlsZXIgPSBuZXcgX2NmZl9wYXJzZXIuQ0ZGQ29tcGlsZXIoY2ZmKTtcbiAgICByZXR1cm4gY29tcGlsZXIuY29tcGlsZSgpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5UeXBlMUZvbnQgPSBUeXBlMUZvbnQ7XG5cbi8qKiovIH0pLFxuLyogNTQgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuVHlwZTFQYXJzZXIgPSB2b2lkIDA7XG5cbnZhciBfZW5jb2RpbmdzID0gX193X3BkZmpzX3JlcXVpcmVfXygxOSk7XG5cbnZhciBfY29yZV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oOSk7XG5cbnZhciBfc3RyZWFtID0gX193X3BkZmpzX3JlcXVpcmVfXygxMCk7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbmNvbnN0IEhJTlRJTkdfRU5BQkxFRCA9IGZhbHNlO1xuXG5jb25zdCBUeXBlMUNoYXJTdHJpbmcgPSBmdW5jdGlvbiBUeXBlMUNoYXJTdHJpbmdDbG9zdXJlKCkge1xuICBjb25zdCBDT01NQU5EX01BUCA9IHtcbiAgICBoc3RlbTogWzFdLFxuICAgIHZzdGVtOiBbM10sXG4gICAgdm1vdmV0bzogWzRdLFxuICAgIHJsaW5ldG86IFs1XSxcbiAgICBobGluZXRvOiBbNl0sXG4gICAgdmxpbmV0bzogWzddLFxuICAgIHJyY3VydmV0bzogWzhdLFxuICAgIGNhbGxzdWJyOiBbMTBdLFxuICAgIGZsZXg6IFsxMiwgMzVdLFxuICAgIGRyb3A6IFsxMiwgMThdLFxuICAgIGVuZGNoYXI6IFsxNF0sXG4gICAgcm1vdmV0bzogWzIxXSxcbiAgICBobW92ZXRvOiBbMjJdLFxuICAgIHZoY3VydmV0bzogWzMwXSxcbiAgICBodmN1cnZldG86IFszMV1cbiAgfTtcblxuICBjbGFzcyBUeXBlMUNoYXJTdHJpbmcge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgdGhpcy53aWR0aCA9IDA7XG4gICAgICB0aGlzLmxzYiA9IDA7XG4gICAgICB0aGlzLmZsZXhpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMub3V0cHV0ID0gW107XG4gICAgICB0aGlzLnN0YWNrID0gW107XG4gICAgfVxuXG4gICAgY29udmVydChlbmNvZGVkLCBzdWJycywgc2VhY0FuYWx5c2lzRW5hYmxlZCkge1xuICAgICAgY29uc3QgY291bnQgPSBlbmNvZGVkLmxlbmd0aDtcbiAgICAgIGxldCBlcnJvciA9IGZhbHNlO1xuICAgICAgbGV0IHd4LCBzYngsIHN1YnJOdW1iZXI7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICBsZXQgdmFsdWUgPSBlbmNvZGVkW2ldO1xuXG4gICAgICAgIGlmICh2YWx1ZSA8IDMyKSB7XG4gICAgICAgICAgaWYgKHZhbHVlID09PSAxMikge1xuICAgICAgICAgICAgdmFsdWUgPSAodmFsdWUgPDwgOCkgKyBlbmNvZGVkWysraV07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICBpZiAoIUhJTlRJTkdfRU5BQkxFRCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhY2sgPSBbXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGVycm9yID0gdGhpcy5leGVjdXRlQ29tbWFuZCgyLCBDT01NQU5EX01BUC5oc3RlbSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgIGlmICghSElOVElOR19FTkFCTEVEKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFjayA9IFtdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDIsIENPTU1BTkRfTUFQLnZzdGVtKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZmxleGluZykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YWNrLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgICAgICAgIGVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGR5ID0gdGhpcy5zdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YWNrLnB1c2goMCwgZHkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDEsIENPTU1BTkRfTUFQLnZtb3ZldG8pO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICBlcnJvciA9IHRoaXMuZXhlY3V0ZUNvbW1hbmQoMiwgQ09NTUFORF9NQVAucmxpbmV0byk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgIGVycm9yID0gdGhpcy5leGVjdXRlQ29tbWFuZCgxLCBDT01NQU5EX01BUC5obGluZXRvKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDEsIENPTU1BTkRfTUFQLnZsaW5ldG8pO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgICBlcnJvciA9IHRoaXMuZXhlY3V0ZUNvbW1hbmQoNiwgQ09NTUFORF9NQVAucnJjdXJ2ZXRvKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgdGhpcy5zdGFjayA9IFtdO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgICAgIGVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHN1YnJOdW1iZXIgPSB0aGlzLnN0YWNrLnBvcCgpO1xuXG4gICAgICAgICAgICAgIGlmICghc3VicnNbc3Vick51bWJlcl0pIHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBlcnJvciA9IHRoaXMuY29udmVydChzdWJyc1tzdWJyTnVtYmVyXSwgc3VicnMsIHNlYWNBbmFseXNpc0VuYWJsZWQpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuXG4gICAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgICBpZiAodGhpcy5zdGFjay5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgd3ggPSB0aGlzLnN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICBzYnggPSB0aGlzLnN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICB0aGlzLmxzYiA9IHNieDtcbiAgICAgICAgICAgICAgdGhpcy53aWR0aCA9IHd4O1xuICAgICAgICAgICAgICB0aGlzLnN0YWNrLnB1c2god3gsIHNieCk7XG4gICAgICAgICAgICAgIGVycm9yID0gdGhpcy5leGVjdXRlQ29tbWFuZCgyLCBDT01NQU5EX01BUC5obW92ZXRvKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgICAgIHRoaXMub3V0cHV0LnB1c2goQ09NTUFORF9NQVAuZW5kY2hhclswXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDIxOlxuICAgICAgICAgICAgICBpZiAodGhpcy5mbGV4aW5nKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBlcnJvciA9IHRoaXMuZXhlY3V0ZUNvbW1hbmQoMiwgQ09NTUFORF9NQVAucm1vdmV0byk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgICAgICBpZiAodGhpcy5mbGV4aW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKDApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDEsIENPTU1BTkRfTUFQLmhtb3ZldG8pO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDQsIENPTU1BTkRfTUFQLnZoY3VydmV0byk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIDMxOlxuICAgICAgICAgICAgICBlcnJvciA9IHRoaXMuZXhlY3V0ZUNvbW1hbmQoNCwgQ09NTUFORF9NQVAuaHZjdXJ2ZXRvKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgKDEyIDw8IDgpICsgMDpcbiAgICAgICAgICAgICAgdGhpcy5zdGFjayA9IFtdO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAoMTIgPDwgOCkgKyAxOlxuICAgICAgICAgICAgICBpZiAoIUhJTlRJTkdfRU5BQkxFRCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhY2sgPSBbXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGVycm9yID0gdGhpcy5leGVjdXRlQ29tbWFuZCgyLCBDT01NQU5EX01BUC52c3RlbSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICgxMiA8PCA4KSArIDI6XG4gICAgICAgICAgICAgIGlmICghSElOVElOR19FTkFCTEVEKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFjayA9IFtdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDIsIENPTU1BTkRfTUFQLmhzdGVtKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgKDEyIDw8IDgpICsgNjpcbiAgICAgICAgICAgICAgaWYgKHNlYWNBbmFseXNpc0VuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhc2IgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gNV07XG4gICAgICAgICAgICAgICAgdGhpcy5zZWFjID0gdGhpcy5zdGFjay5zcGxpY2UoLTQsIDQpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VhY1swXSArPSB0aGlzLmxzYiAtIGFzYjtcbiAgICAgICAgICAgICAgICBlcnJvciA9IHRoaXMuZXhlY3V0ZUNvbW1hbmQoMCwgQ09NTUFORF9NQVAuZW5kY2hhcik7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDQsIENPTU1BTkRfTUFQLmVuZGNoYXIpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgKDEyIDw8IDgpICsgNzpcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoIDwgNCkge1xuICAgICAgICAgICAgICAgIGVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgIHd4ID0gdGhpcy5zdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgY29uc3Qgc2J5ID0gdGhpcy5zdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgc2J4ID0gdGhpcy5zdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgdGhpcy5sc2IgPSBzYng7XG4gICAgICAgICAgICAgIHRoaXMud2lkdGggPSB3eDtcbiAgICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKHd4LCBzYngsIHNieSk7XG4gICAgICAgICAgICAgIGVycm9yID0gdGhpcy5leGVjdXRlQ29tbWFuZCgzLCBDT01NQU5EX01BUC5ybW92ZXRvKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgKDEyIDw8IDgpICsgMTI6XG4gICAgICAgICAgICAgIGlmICh0aGlzLnN0YWNrLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCBudW0yID0gdGhpcy5zdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgY29uc3QgbnVtMSA9IHRoaXMuc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgIHRoaXMuc3RhY2sucHVzaChudW0xIC8gbnVtMik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICgxMiA8PCA4KSArIDE2OlxuICAgICAgICAgICAgICBpZiAodGhpcy5zdGFjay5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgc3Vick51bWJlciA9IHRoaXMuc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgIGNvbnN0IG51bUFyZ3MgPSB0aGlzLnN0YWNrLnBvcCgpO1xuXG4gICAgICAgICAgICAgIGlmIChzdWJyTnVtYmVyID09PSAwICYmIG51bUFyZ3MgPT09IDMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmbGV4QXJncyA9IHRoaXMuc3RhY2suc3BsaWNlKHRoaXMuc3RhY2subGVuZ3RoIC0gMTcsIDE3KTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YWNrLnB1c2goZmxleEFyZ3NbMl0gKyBmbGV4QXJnc1swXSwgZmxleEFyZ3NbM10gKyBmbGV4QXJnc1sxXSwgZmxleEFyZ3NbNF0sIGZsZXhBcmdzWzVdLCBmbGV4QXJnc1s2XSwgZmxleEFyZ3NbN10sIGZsZXhBcmdzWzhdLCBmbGV4QXJnc1s5XSwgZmxleEFyZ3NbMTBdLCBmbGV4QXJnc1sxMV0sIGZsZXhBcmdzWzEyXSwgZmxleEFyZ3NbMTNdLCBmbGV4QXJnc1sxNF0pO1xuICAgICAgICAgICAgICAgIGVycm9yID0gdGhpcy5leGVjdXRlQ29tbWFuZCgxMywgQ09NTUFORF9NQVAuZmxleCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mbGV4aW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKGZsZXhBcmdzWzE1XSwgZmxleEFyZ3NbMTZdKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdWJyTnVtYmVyID09PSAxICYmIG51bUFyZ3MgPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZsZXhpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgKDEyIDw8IDgpICsgMTc6XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICgxMiA8PCA4KSArIDMzOlxuICAgICAgICAgICAgICB0aGlzLnN0YWNrID0gW107XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ1Vua25vd24gdHlwZSAxIGNoYXJzdHJpbmcgY29tbWFuZCBvZiBcIicgKyB2YWx1ZSArICdcIicpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIDw9IDI0Nikge1xuICAgICAgICAgIHZhbHVlIC09IDEzOTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA8PSAyNTApIHtcbiAgICAgICAgICB2YWx1ZSA9ICh2YWx1ZSAtIDI0NykgKiAyNTYgKyBlbmNvZGVkWysraV0gKyAxMDg7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPD0gMjU0KSB7XG4gICAgICAgICAgdmFsdWUgPSAtKCh2YWx1ZSAtIDI1MSkgKiAyNTYpIC0gZW5jb2RlZFsrK2ldIC0gMTA4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbHVlID0gKGVuY29kZWRbKytpXSAmIDB4ZmYpIDw8IDI0IHwgKGVuY29kZWRbKytpXSAmIDB4ZmYpIDw8IDE2IHwgKGVuY29kZWRbKytpXSAmIDB4ZmYpIDw8IDggfCAoZW5jb2RlZFsrK2ldICYgMHhmZikgPDwgMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RhY2sucHVzaCh2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9XG5cbiAgICBleGVjdXRlQ29tbWFuZChob3dNYW55QXJncywgY29tbWFuZCwga2VlcFN0YWNrKSB7XG4gICAgICBjb25zdCBzdGFja0xlbmd0aCA9IHRoaXMuc3RhY2subGVuZ3RoO1xuXG4gICAgICBpZiAoaG93TWFueUFyZ3MgPiBzdGFja0xlbmd0aCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc3RhcnQgPSBzdGFja0xlbmd0aCAtIGhvd01hbnlBcmdzO1xuXG4gICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBzdGFja0xlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IHRoaXMuc3RhY2tbaV07XG5cbiAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIodmFsdWUpKSB7XG4gICAgICAgICAgdGhpcy5vdXRwdXQucHVzaCgyOCwgdmFsdWUgPj4gOCAmIDB4ZmYsIHZhbHVlICYgMHhmZik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsdWUgPSA2NTUzNiAqIHZhbHVlIHwgMDtcbiAgICAgICAgICB0aGlzLm91dHB1dC5wdXNoKDI1NSwgdmFsdWUgPj4gMjQgJiAweGZmLCB2YWx1ZSA+PiAxNiAmIDB4ZmYsIHZhbHVlID4+IDggJiAweGZmLCB2YWx1ZSAmIDB4ZmYpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMub3V0cHV0LnB1c2guYXBwbHkodGhpcy5vdXRwdXQsIGNvbW1hbmQpO1xuXG4gICAgICBpZiAoa2VlcFN0YWNrKSB7XG4gICAgICAgIHRoaXMuc3RhY2suc3BsaWNlKHN0YXJ0LCBob3dNYW55QXJncyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN0YWNrLmxlbmd0aCA9IDA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgfVxuXG4gIHJldHVybiBUeXBlMUNoYXJTdHJpbmc7XG59KCk7XG5cbmNvbnN0IFR5cGUxUGFyc2VyID0gZnVuY3Rpb24gVHlwZTFQYXJzZXJDbG9zdXJlKCkge1xuICBjb25zdCBFRVhFQ19FTkNSWVBUX0tFWSA9IDU1NjY1O1xuICBjb25zdCBDSEFSX1NUUlNfRU5DUllQVF9LRVkgPSA0MzMwO1xuXG4gIGZ1bmN0aW9uIGlzSGV4RGlnaXQoY29kZSkge1xuICAgIHJldHVybiBjb2RlID49IDQ4ICYmIGNvZGUgPD0gNTcgfHwgY29kZSA+PSA2NSAmJiBjb2RlIDw9IDcwIHx8IGNvZGUgPj0gOTcgJiYgY29kZSA8PSAxMDI7XG4gIH1cblxuICBmdW5jdGlvbiBkZWNyeXB0KGRhdGEsIGtleSwgZGlzY2FyZE51bWJlcikge1xuICAgIGlmIChkaXNjYXJkTnVtYmVyID49IGRhdGEubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7XG4gICAgfVxuXG4gICAgY29uc3QgYzEgPSA1Mjg0NSxcbiAgICAgICAgICBjMiA9IDIyNzE5O1xuICAgIGxldCByID0ga2V5IHwgMCxcbiAgICAgICAgaSxcbiAgICAgICAgajtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBkaXNjYXJkTnVtYmVyOyBpKyspIHtcbiAgICAgIHIgPSAoZGF0YVtpXSArIHIpICogYzEgKyBjMiAmICgxIDw8IDE2KSAtIDE7XG4gICAgfVxuXG4gICAgY29uc3QgY291bnQgPSBkYXRhLmxlbmd0aCAtIGRpc2NhcmROdW1iZXI7XG4gICAgY29uc3QgZGVjcnlwdGVkID0gbmV3IFVpbnQ4QXJyYXkoY291bnQpO1xuXG4gICAgZm9yIChpID0gZGlzY2FyZE51bWJlciwgaiA9IDA7IGogPCBjb3VudDsgaSsrLCBqKyspIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gZGF0YVtpXTtcbiAgICAgIGRlY3J5cHRlZFtqXSA9IHZhbHVlIF4gciA+PiA4O1xuICAgICAgciA9ICh2YWx1ZSArIHIpICogYzEgKyBjMiAmICgxIDw8IDE2KSAtIDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlY3J5cHRlZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlY3J5cHRBc2NpaShkYXRhLCBrZXksIGRpc2NhcmROdW1iZXIpIHtcbiAgICBjb25zdCBjMSA9IDUyODQ1LFxuICAgICAgICAgIGMyID0gMjI3MTk7XG4gICAgbGV0IHIgPSBrZXkgfCAwO1xuICAgIGNvbnN0IGNvdW50ID0gZGF0YS5sZW5ndGgsXG4gICAgICAgICAgbWF5YmVMZW5ndGggPSBjb3VudCA+Pj4gMTtcbiAgICBjb25zdCBkZWNyeXB0ZWQgPSBuZXcgVWludDhBcnJheShtYXliZUxlbmd0aCk7XG4gICAgbGV0IGksIGo7XG5cbiAgICBmb3IgKGkgPSAwLCBqID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgIGNvbnN0IGRpZ2l0MSA9IGRhdGFbaV07XG5cbiAgICAgIGlmICghaXNIZXhEaWdpdChkaWdpdDEpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpKys7XG4gICAgICBsZXQgZGlnaXQyO1xuXG4gICAgICB3aGlsZSAoaSA8IGNvdW50ICYmICFpc0hleERpZ2l0KGRpZ2l0MiA9IGRhdGFbaV0pKSB7XG4gICAgICAgIGkrKztcbiAgICAgIH1cblxuICAgICAgaWYgKGkgPCBjb3VudCkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KFN0cmluZy5mcm9tQ2hhckNvZGUoZGlnaXQxLCBkaWdpdDIpLCAxNik7XG4gICAgICAgIGRlY3J5cHRlZFtqKytdID0gdmFsdWUgXiByID4+IDg7XG4gICAgICAgIHIgPSAodmFsdWUgKyByKSAqIGMxICsgYzIgJiAoMSA8PCAxNikgLSAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkZWNyeXB0ZWQuc2xpY2UoZGlzY2FyZE51bWJlciwgaik7XG4gIH1cblxuICBmdW5jdGlvbiBpc1NwZWNpYWwoYykge1xuICAgIHJldHVybiBjID09PSAweDJmIHx8IGMgPT09IDB4NWIgfHwgYyA9PT0gMHg1ZCB8fCBjID09PSAweDdiIHx8IGMgPT09IDB4N2QgfHwgYyA9PT0gMHgyOCB8fCBjID09PSAweDI5O1xuICB9XG5cbiAgY2xhc3MgVHlwZTFQYXJzZXIge1xuICAgIGNvbnN0cnVjdG9yKHN0cmVhbSwgZW5jcnlwdGVkLCBzZWFjQW5hbHlzaXNFbmFibGVkKSB7XG4gICAgICBpZiAoZW5jcnlwdGVkKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBzdHJlYW0uZ2V0Qnl0ZXMoKTtcbiAgICAgICAgY29uc3QgaXNCaW5hcnkgPSAhKChpc0hleERpZ2l0KGRhdGFbMF0pIHx8ICgwLCBfY29yZV91dGlscy5pc1doaXRlU3BhY2UpKGRhdGFbMF0pKSAmJiBpc0hleERpZ2l0KGRhdGFbMV0pICYmIGlzSGV4RGlnaXQoZGF0YVsyXSkgJiYgaXNIZXhEaWdpdChkYXRhWzNdKSAmJiBpc0hleERpZ2l0KGRhdGFbNF0pICYmIGlzSGV4RGlnaXQoZGF0YVs1XSkgJiYgaXNIZXhEaWdpdChkYXRhWzZdKSAmJiBpc0hleERpZ2l0KGRhdGFbN10pKTtcbiAgICAgICAgc3RyZWFtID0gbmV3IF9zdHJlYW0uU3RyZWFtKGlzQmluYXJ5ID8gZGVjcnlwdChkYXRhLCBFRVhFQ19FTkNSWVBUX0tFWSwgNCkgOiBkZWNyeXB0QXNjaWkoZGF0YSwgRUVYRUNfRU5DUllQVF9LRVksIDQpKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zZWFjQW5hbHlzaXNFbmFibGVkID0gISFzZWFjQW5hbHlzaXNFbmFibGVkO1xuICAgICAgdGhpcy5zdHJlYW0gPSBzdHJlYW07XG4gICAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgfVxuXG4gICAgcmVhZE51bWJlckFycmF5KCkge1xuICAgICAgdGhpcy5nZXRUb2tlbigpO1xuICAgICAgY29uc3QgYXJyYXkgPSBbXTtcblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7XG5cbiAgICAgICAgaWYgKHRva2VuID09PSBudWxsIHx8IHRva2VuID09PSBcIl1cIiB8fCB0b2tlbiA9PT0gXCJ9XCIpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGFycmF5LnB1c2gocGFyc2VGbG9hdCh0b2tlbiB8fCAwKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhcnJheTtcbiAgICB9XG5cbiAgICByZWFkTnVtYmVyKCkge1xuICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7XG4gICAgICByZXR1cm4gcGFyc2VGbG9hdCh0b2tlbiB8fCAwKTtcbiAgICB9XG5cbiAgICByZWFkSW50KCkge1xuICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7XG4gICAgICByZXR1cm4gcGFyc2VJbnQodG9rZW4gfHwgMCwgMTApIHwgMDtcbiAgICB9XG5cbiAgICByZWFkQm9vbGVhbigpIHtcbiAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5nZXRUb2tlbigpO1xuICAgICAgcmV0dXJuIHRva2VuID09PSBcInRydWVcIiA/IDEgOiAwO1xuICAgIH1cblxuICAgIG5leHRDaGFyKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY3VycmVudENoYXIgPSB0aGlzLnN0cmVhbS5nZXRCeXRlKCk7XG4gICAgfVxuXG4gICAgZ2V0VG9rZW4oKSB7XG4gICAgICBsZXQgY29tbWVudCA9IGZhbHNlO1xuICAgICAgbGV0IGNoID0gdGhpcy5jdXJyZW50Q2hhcjtcblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgaWYgKGNoID09PSAtMSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbW1lbnQpIHtcbiAgICAgICAgICBpZiAoY2ggPT09IDB4MGEgfHwgY2ggPT09IDB4MGQpIHtcbiAgICAgICAgICAgIGNvbW1lbnQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4MjUpIHtcbiAgICAgICAgICBjb21tZW50ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICghKDAsIF9jb3JlX3V0aWxzLmlzV2hpdGVTcGFjZSkoY2gpKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzU3BlY2lhbChjaCkpIHtcbiAgICAgICAgdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XG4gICAgICB9XG5cbiAgICAgIGxldCB0b2tlbiA9IFwiXCI7XG5cbiAgICAgIGRvIHtcbiAgICAgICAgdG9rZW4gKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XG4gICAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgfSB3aGlsZSAoY2ggPj0gMCAmJiAhKDAsIF9jb3JlX3V0aWxzLmlzV2hpdGVTcGFjZSkoY2gpICYmICFpc1NwZWNpYWwoY2gpKTtcblxuICAgICAgcmV0dXJuIHRva2VuO1xuICAgIH1cblxuICAgIHJlYWRDaGFyU3RyaW5ncyhieXRlcywgbGVuSVYpIHtcbiAgICAgIGlmIChsZW5JViA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIGJ5dGVzO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGVjcnlwdChieXRlcywgQ0hBUl9TVFJTX0VOQ1JZUFRfS0VZLCBsZW5JVik7XG4gICAgfVxuXG4gICAgZXh0cmFjdEZvbnRQcm9ncmFtKHByb3BlcnRpZXMpIHtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtO1xuICAgICAgY29uc3Qgc3VicnMgPSBbXSxcbiAgICAgICAgICAgIGNoYXJzdHJpbmdzID0gW107XG4gICAgICBjb25zdCBwcml2YXRlRGF0YSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICBwcml2YXRlRGF0YS5sZW5JViA9IDQ7XG4gICAgICBjb25zdCBwcm9ncmFtID0ge1xuICAgICAgICBzdWJyczogW10sXG4gICAgICAgIGNoYXJzdHJpbmdzOiBbXSxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIHByaXZhdGVEYXRhXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBsZXQgdG9rZW4sIGxlbmd0aCwgZGF0YSwgbGVuSVYsIGVuY29kZWQ7XG5cbiAgICAgIHdoaWxlICgodG9rZW4gPSB0aGlzLmdldFRva2VuKCkpICE9PSBudWxsKSB7XG4gICAgICAgIGlmICh0b2tlbiAhPT0gXCIvXCIpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRva2VuID0gdGhpcy5nZXRUb2tlbigpO1xuXG4gICAgICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgICAgICBjYXNlIFwiQ2hhclN0cmluZ3NcIjpcbiAgICAgICAgICAgIHRoaXMuZ2V0VG9rZW4oKTtcbiAgICAgICAgICAgIHRoaXMuZ2V0VG9rZW4oKTtcbiAgICAgICAgICAgIHRoaXMuZ2V0VG9rZW4oKTtcbiAgICAgICAgICAgIHRoaXMuZ2V0VG9rZW4oKTtcblxuICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7XG5cbiAgICAgICAgICAgICAgaWYgKHRva2VuID09PSBudWxsIHx8IHRva2VuID09PSBcImVuZFwiKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodG9rZW4gIT09IFwiL1wiKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCBnbHlwaCA9IHRoaXMuZ2V0VG9rZW4oKTtcbiAgICAgICAgICAgICAgbGVuZ3RoID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgICAgICAgIHRoaXMuZ2V0VG9rZW4oKTtcbiAgICAgICAgICAgICAgZGF0YSA9IGxlbmd0aCA+IDAgPyBzdHJlYW0uZ2V0Qnl0ZXMobGVuZ3RoKSA6IG5ldyBVaW50OEFycmF5KDApO1xuICAgICAgICAgICAgICBsZW5JViA9IHByb2dyYW0ucHJvcGVydGllcy5wcml2YXRlRGF0YS5sZW5JVjtcbiAgICAgICAgICAgICAgZW5jb2RlZCA9IHRoaXMucmVhZENoYXJTdHJpbmdzKGRhdGEsIGxlbklWKTtcbiAgICAgICAgICAgICAgdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcblxuICAgICAgICAgICAgICBpZiAodG9rZW4gPT09IFwibm9hY2Nlc3NcIikge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0VG9rZW4oKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNoYXJzdHJpbmdzLnB1c2goe1xuICAgICAgICAgICAgICAgIGdseXBoLFxuICAgICAgICAgICAgICAgIGVuY29kZWRcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIlN1YnJzXCI6XG4gICAgICAgICAgICB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgICAgIHRoaXMuZ2V0VG9rZW4oKTtcblxuICAgICAgICAgICAgd2hpbGUgKHRoaXMuZ2V0VG9rZW4oKSA9PT0gXCJkdXBcIikge1xuICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICAgICAgICBsZW5ndGggPSB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgICAgICAgdGhpcy5nZXRUb2tlbigpO1xuICAgICAgICAgICAgICBkYXRhID0gbGVuZ3RoID4gMCA/IHN0cmVhbS5nZXRCeXRlcyhsZW5ndGgpIDogbmV3IFVpbnQ4QXJyYXkoMCk7XG4gICAgICAgICAgICAgIGxlbklWID0gcHJvZ3JhbS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhLmxlbklWO1xuICAgICAgICAgICAgICBlbmNvZGVkID0gdGhpcy5yZWFkQ2hhclN0cmluZ3MoZGF0YSwgbGVuSVYpO1xuICAgICAgICAgICAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgICAgICAgIHRva2VuID0gdGhpcy5nZXRUb2tlbigpO1xuXG4gICAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gXCJub2FjY2Vzc1wiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRUb2tlbigpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgc3VicnNbaW5kZXhdID0gZW5jb2RlZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiQmx1ZVZhbHVlc1wiOlxuICAgICAgICAgIGNhc2UgXCJPdGhlckJsdWVzXCI6XG4gICAgICAgICAgY2FzZSBcIkZhbWlseUJsdWVzXCI6XG4gICAgICAgICAgY2FzZSBcIkZhbWlseU90aGVyQmx1ZXNcIjpcbiAgICAgICAgICAgIGNvbnN0IGJsdWVBcnJheSA9IHRoaXMucmVhZE51bWJlckFycmF5KCk7XG5cbiAgICAgICAgICAgIGlmIChibHVlQXJyYXkubGVuZ3RoID4gMCAmJiBibHVlQXJyYXkubGVuZ3RoICUgMiA9PT0gMCAmJiBISU5USU5HX0VOQUJMRUQpIHtcbiAgICAgICAgICAgICAgcHJvZ3JhbS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhW3Rva2VuXSA9IGJsdWVBcnJheTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiU3RlbVNuYXBIXCI6XG4gICAgICAgICAgY2FzZSBcIlN0ZW1TbmFwVlwiOlxuICAgICAgICAgICAgcHJvZ3JhbS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhW3Rva2VuXSA9IHRoaXMucmVhZE51bWJlckFycmF5KCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJTdGRIV1wiOlxuICAgICAgICAgIGNhc2UgXCJTdGRWV1wiOlxuICAgICAgICAgICAgcHJvZ3JhbS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhW3Rva2VuXSA9IHRoaXMucmVhZE51bWJlckFycmF5KClbMF07XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJCbHVlU2hpZnRcIjpcbiAgICAgICAgICBjYXNlIFwibGVuSVZcIjpcbiAgICAgICAgICBjYXNlIFwiQmx1ZUZ1enpcIjpcbiAgICAgICAgICBjYXNlIFwiQmx1ZVNjYWxlXCI6XG4gICAgICAgICAgY2FzZSBcIkxhbmd1YWdlR3JvdXBcIjpcbiAgICAgICAgICBjYXNlIFwiRXhwYW5zaW9uRmFjdG9yXCI6XG4gICAgICAgICAgICBwcm9ncmFtLnByb3BlcnRpZXMucHJpdmF0ZURhdGFbdG9rZW5dID0gdGhpcy5yZWFkTnVtYmVyKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJGb3JjZUJvbGRcIjpcbiAgICAgICAgICAgIHByb2dyYW0ucHJvcGVydGllcy5wcml2YXRlRGF0YVt0b2tlbl0gPSB0aGlzLnJlYWRCb29sZWFuKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoYXJzdHJpbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGdseXBoID0gY2hhcnN0cmluZ3NbaV0uZ2x5cGg7XG4gICAgICAgIGVuY29kZWQgPSBjaGFyc3RyaW5nc1tpXS5lbmNvZGVkO1xuICAgICAgICBjb25zdCBjaGFyU3RyaW5nID0gbmV3IFR5cGUxQ2hhclN0cmluZygpO1xuICAgICAgICBjb25zdCBlcnJvciA9IGNoYXJTdHJpbmcuY29udmVydChlbmNvZGVkLCBzdWJycywgdGhpcy5zZWFjQW5hbHlzaXNFbmFibGVkKTtcbiAgICAgICAgbGV0IG91dHB1dCA9IGNoYXJTdHJpbmcub3V0cHV0O1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIG91dHB1dCA9IFsxNF07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjaGFyU3RyaW5nT2JqZWN0ID0ge1xuICAgICAgICAgIGdseXBoTmFtZTogZ2x5cGgsXG4gICAgICAgICAgY2hhcnN0cmluZzogb3V0cHV0LFxuICAgICAgICAgIHdpZHRoOiBjaGFyU3RyaW5nLndpZHRoLFxuICAgICAgICAgIGxzYjogY2hhclN0cmluZy5sc2IsXG4gICAgICAgICAgc2VhYzogY2hhclN0cmluZy5zZWFjXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGdseXBoID09PSBcIi5ub3RkZWZcIikge1xuICAgICAgICAgIHByb2dyYW0uY2hhcnN0cmluZ3MudW5zaGlmdChjaGFyU3RyaW5nT2JqZWN0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9ncmFtLmNoYXJzdHJpbmdzLnB1c2goY2hhclN0cmluZ09iamVjdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcGVydGllcy5idWlsdEluRW5jb2RpbmcpIHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHByb3BlcnRpZXMuYnVpbHRJbkVuY29kaW5nLmluZGV4T2YoZ2x5cGgpO1xuXG4gICAgICAgICAgaWYgKGluZGV4ID4gLTEgJiYgcHJvcGVydGllcy53aWR0aHNbaW5kZXhdID09PSB1bmRlZmluZWQgJiYgaW5kZXggPj0gcHJvcGVydGllcy5maXJzdENoYXIgJiYgaW5kZXggPD0gcHJvcGVydGllcy5sYXN0Q2hhcikge1xuICAgICAgICAgICAgcHJvcGVydGllcy53aWR0aHNbaW5kZXhdID0gY2hhclN0cmluZy53aWR0aDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb2dyYW07XG4gICAgfVxuXG4gICAgZXh0cmFjdEZvbnRIZWFkZXIocHJvcGVydGllcykge1xuICAgICAgbGV0IHRva2VuO1xuXG4gICAgICB3aGlsZSAoKHRva2VuID0gdGhpcy5nZXRUb2tlbigpKSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAodG9rZW4gIT09IFwiL1wiKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcblxuICAgICAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAgICAgY2FzZSBcIkZvbnRNYXRyaXhcIjpcbiAgICAgICAgICAgIGNvbnN0IG1hdHJpeCA9IHRoaXMucmVhZE51bWJlckFycmF5KCk7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzLmZvbnRNYXRyaXggPSBtYXRyaXg7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJFbmNvZGluZ1wiOlxuICAgICAgICAgICAgY29uc3QgZW5jb2RpbmdBcmcgPSB0aGlzLmdldFRva2VuKCk7XG4gICAgICAgICAgICBsZXQgZW5jb2Rpbmc7XG5cbiAgICAgICAgICAgIGlmICghL15cXGQrJC8udGVzdChlbmNvZGluZ0FyZykpIHtcbiAgICAgICAgICAgICAgZW5jb2RpbmcgPSAoMCwgX2VuY29kaW5ncy5nZXRFbmNvZGluZykoZW5jb2RpbmdBcmcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZW5jb2RpbmcgPSBbXTtcbiAgICAgICAgICAgICAgY29uc3Qgc2l6ZSA9IHBhcnNlSW50KGVuY29kaW5nQXJnLCAxMCkgfCAwO1xuICAgICAgICAgICAgICB0aGlzLmdldFRva2VuKCk7XG5cbiAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBzaXplOyBqKyspIHtcbiAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcblxuICAgICAgICAgICAgICAgIHdoaWxlICh0b2tlbiAhPT0gXCJkdXBcIiAmJiB0b2tlbiAhPT0gXCJkZWZcIikge1xuICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7XG5cbiAgICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRva2VuID09PSBcImRlZlwiKSB7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0VG9rZW4oKTtcbiAgICAgICAgICAgICAgICBjb25zdCBnbHlwaCA9IHRoaXMuZ2V0VG9rZW4oKTtcbiAgICAgICAgICAgICAgICBlbmNvZGluZ1tpbmRleF0gPSBnbHlwaDtcbiAgICAgICAgICAgICAgICB0aGlzLmdldFRva2VuKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvcGVydGllcy5idWlsdEluRW5jb2RpbmcgPSBlbmNvZGluZztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIkZvbnRCQm94XCI6XG4gICAgICAgICAgICBjb25zdCBmb250QkJveCA9IHRoaXMucmVhZE51bWJlckFycmF5KCk7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzLmFzY2VudCA9IE1hdGgubWF4KGZvbnRCQm94WzNdLCBmb250QkJveFsxXSk7XG4gICAgICAgICAgICBwcm9wZXJ0aWVzLmRlc2NlbnQgPSBNYXRoLm1pbihmb250QkJveFsxXSwgZm9udEJCb3hbM10pO1xuICAgICAgICAgICAgcHJvcGVydGllcy5hc2NlbnRTY2FsZWQgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgfVxuXG4gIHJldHVybiBUeXBlMVBhcnNlcjtcbn0oKTtcblxuZXhwb3J0cy5UeXBlMVBhcnNlciA9IFR5cGUxUGFyc2VyO1xuXG4vKioqLyB9KSxcbi8qIDU1ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLlBhdHRlcm4gPSB2b2lkIDA7XG5leHBvcnRzLmdldFRpbGluZ1BhdHRlcm5JUiA9IGdldFRpbGluZ1BhdHRlcm5JUjtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9jb2xvcnNwYWNlID0gX193X3BkZmpzX3JlcXVpcmVfXygyNCk7XG5cbnZhciBfcHJpbWl0aXZlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNSk7XG5cbnZhciBfY29yZV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oOSk7XG5cbmNvbnN0IFNoYWRpbmdUeXBlID0ge1xuICBGVU5DVElPTl9CQVNFRDogMSxcbiAgQVhJQUw6IDIsXG4gIFJBRElBTDogMyxcbiAgRlJFRV9GT1JNX01FU0g6IDQsXG4gIExBVFRJQ0VfRk9STV9NRVNIOiA1LFxuICBDT09OU19QQVRDSF9NRVNIOiA2LFxuICBURU5TT1JfUEFUQ0hfTUVTSDogN1xufTtcblxuY2xhc3MgUGF0dGVybiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJDYW5ub3QgaW5pdGlhbGl6ZSBQYXR0ZXJuLlwiKTtcbiAgfVxuXG4gIHN0YXRpYyBwYXJzZVNoYWRpbmcoc2hhZGluZywgeHJlZiwgcmVzLCBoYW5kbGVyLCBwZGZGdW5jdGlvbkZhY3RvcnksIGxvY2FsQ29sb3JTcGFjZUNhY2hlKSB7XG4gICAgY29uc3QgZGljdCA9ICgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkoc2hhZGluZykgPyBzaGFkaW5nLmRpY3QgOiBzaGFkaW5nO1xuICAgIGNvbnN0IHR5cGUgPSBkaWN0LmdldChcIlNoYWRpbmdUeXBlXCIpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFNoYWRpbmdUeXBlLkFYSUFMOlxuICAgICAgICBjYXNlIFNoYWRpbmdUeXBlLlJBRElBTDpcbiAgICAgICAgICByZXR1cm4gbmV3IFJhZGlhbEF4aWFsU2hhZGluZyhkaWN0LCB4cmVmLCByZXMsIHBkZkZ1bmN0aW9uRmFjdG9yeSwgbG9jYWxDb2xvclNwYWNlQ2FjaGUpO1xuXG4gICAgICAgIGNhc2UgU2hhZGluZ1R5cGUuRlJFRV9GT1JNX01FU0g6XG4gICAgICAgIGNhc2UgU2hhZGluZ1R5cGUuTEFUVElDRV9GT1JNX01FU0g6XG4gICAgICAgIGNhc2UgU2hhZGluZ1R5cGUuQ09PTlNfUEFUQ0hfTUVTSDpcbiAgICAgICAgY2FzZSBTaGFkaW5nVHlwZS5URU5TT1JfUEFUQ0hfTUVTSDpcbiAgICAgICAgICByZXR1cm4gbmV3IE1lc2hTaGFkaW5nKHNoYWRpbmcsIHhyZWYsIHJlcywgcGRmRnVuY3Rpb25GYWN0b3J5LCBsb2NhbENvbG9yU3BhY2VDYWNoZSk7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJVbnN1cHBvcnRlZCBTaGFkaW5nVHlwZTogXCIgKyB0eXBlKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgaWYgKGV4IGluc3RhbmNlb2YgX2NvcmVfdXRpbHMuTWlzc2luZ0RhdGFFeGNlcHRpb24pIHtcbiAgICAgICAgdGhyb3cgZXg7XG4gICAgICB9XG5cbiAgICAgIGhhbmRsZXIuc2VuZChcIlVuc3VwcG9ydGVkRmVhdHVyZVwiLCB7XG4gICAgICAgIGZlYXR1cmVJZDogX3V0aWwuVU5TVVBQT1JURURfRkVBVFVSRVMuc2hhZGluZ1BhdHRlcm5cbiAgICAgIH0pO1xuICAgICAgKDAsIF91dGlsLndhcm4pKGV4KTtcbiAgICAgIHJldHVybiBuZXcgRHVtbXlTaGFkaW5nKCk7XG4gICAgfVxuICB9XG5cbn1cblxuZXhwb3J0cy5QYXR0ZXJuID0gUGF0dGVybjtcblxuY2xhc3MgQmFzZVNoYWRpbmcge1xuICBzdGF0aWMgZ2V0IFNNQUxMX05VTUJFUigpIHtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJTTUFMTF9OVU1CRVJcIiwgMWUtNik7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gQmFzZVNoYWRpbmcpIHtcbiAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlU2hhZGluZy5cIik7XG4gICAgfVxuICB9XG5cbiAgZ2V0SVIoKSB7XG4gICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIkFic3RyYWN0IG1ldGhvZCBgZ2V0SVJgIGNhbGxlZC5cIik7XG4gIH1cblxufVxuXG5jbGFzcyBSYWRpYWxBeGlhbFNoYWRpbmcgZXh0ZW5kcyBCYXNlU2hhZGluZyB7XG4gIGNvbnN0cnVjdG9yKGRpY3QsIHhyZWYsIHJlc291cmNlcywgcGRmRnVuY3Rpb25GYWN0b3J5LCBsb2NhbENvbG9yU3BhY2VDYWNoZSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jb29yZHNBcnIgPSBkaWN0LmdldEFycmF5KFwiQ29vcmRzXCIpO1xuICAgIHRoaXMuc2hhZGluZ1R5cGUgPSBkaWN0LmdldChcIlNoYWRpbmdUeXBlXCIpO1xuXG4gICAgY29uc3QgY3MgPSBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnBhcnNlKHtcbiAgICAgIGNzOiBkaWN0LmdldFJhdyhcIkNTXCIpIHx8IGRpY3QuZ2V0UmF3KFwiQ29sb3JTcGFjZVwiKSxcbiAgICAgIHhyZWYsXG4gICAgICByZXNvdXJjZXMsXG4gICAgICBwZGZGdW5jdGlvbkZhY3RvcnksXG4gICAgICBsb2NhbENvbG9yU3BhY2VDYWNoZVxuICAgIH0pO1xuXG4gICAgY29uc3QgYmJveCA9IGRpY3QuZ2V0QXJyYXkoXCJCQm94XCIpO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYmJveCkgJiYgYmJveC5sZW5ndGggPT09IDQpIHtcbiAgICAgIHRoaXMuYmJveCA9IF91dGlsLlV0aWwubm9ybWFsaXplUmVjdChiYm94KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5iYm94ID0gbnVsbDtcbiAgICB9XG5cbiAgICBsZXQgdDAgPSAwLjAsXG4gICAgICAgIHQxID0gMS4wO1xuXG4gICAgaWYgKGRpY3QuaGFzKFwiRG9tYWluXCIpKSB7XG4gICAgICBjb25zdCBkb21haW5BcnIgPSBkaWN0LmdldEFycmF5KFwiRG9tYWluXCIpO1xuICAgICAgdDAgPSBkb21haW5BcnJbMF07XG4gICAgICB0MSA9IGRvbWFpbkFyclsxXTtcbiAgICB9XG5cbiAgICBsZXQgZXh0ZW5kU3RhcnQgPSBmYWxzZSxcbiAgICAgICAgZXh0ZW5kRW5kID0gZmFsc2U7XG5cbiAgICBpZiAoZGljdC5oYXMoXCJFeHRlbmRcIikpIHtcbiAgICAgIGNvbnN0IGV4dGVuZEFyciA9IGRpY3QuZ2V0QXJyYXkoXCJFeHRlbmRcIik7XG4gICAgICBleHRlbmRTdGFydCA9IGV4dGVuZEFyclswXTtcbiAgICAgIGV4dGVuZEVuZCA9IGV4dGVuZEFyclsxXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zaGFkaW5nVHlwZSA9PT0gU2hhZGluZ1R5cGUuUkFESUFMICYmICghZXh0ZW5kU3RhcnQgfHwgIWV4dGVuZEVuZCkpIHtcbiAgICAgIGNvbnN0IFt4MSwgeTEsIHIxLCB4MiwgeTIsIHIyXSA9IHRoaXMuY29vcmRzQXJyO1xuICAgICAgY29uc3QgZGlzdGFuY2UgPSBNYXRoLmh5cG90KHgxIC0geDIsIHkxIC0geTIpO1xuXG4gICAgICBpZiAocjEgPD0gcjIgKyBkaXN0YW5jZSAmJiByMiA8PSByMSArIGRpc3RhbmNlKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShcIlVuc3VwcG9ydGVkIHJhZGlhbCBncmFkaWVudC5cIik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5leHRlbmRTdGFydCA9IGV4dGVuZFN0YXJ0O1xuICAgIHRoaXMuZXh0ZW5kRW5kID0gZXh0ZW5kRW5kO1xuICAgIGNvbnN0IGZuT2JqID0gZGljdC5nZXRSYXcoXCJGdW5jdGlvblwiKTtcbiAgICBjb25zdCBmbiA9IHBkZkZ1bmN0aW9uRmFjdG9yeS5jcmVhdGVGcm9tQXJyYXkoZm5PYmopO1xuICAgIGNvbnN0IE5VTUJFUl9PRl9TQU1QTEVTID0gMTA7XG4gICAgY29uc3Qgc3RlcCA9ICh0MSAtIHQwKSAvIE5VTUJFUl9PRl9TQU1QTEVTO1xuICAgIGNvbnN0IGNvbG9yU3RvcHMgPSB0aGlzLmNvbG9yU3RvcHMgPSBbXTtcblxuICAgIGlmICh0MCA+PSB0MSB8fCBzdGVwIDw9IDApIHtcbiAgICAgICgwLCBfdXRpbC5pbmZvKShcIkJhZCBzaGFkaW5nIGRvbWFpbi5cIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29sb3IgPSBuZXcgRmxvYXQzMkFycmF5KGNzLm51bUNvbXBzKSxcbiAgICAgICAgICByYXRpbyA9IG5ldyBGbG9hdDMyQXJyYXkoMSk7XG4gICAgbGV0IHJnYkNvbG9yO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gTlVNQkVSX09GX1NBTVBMRVM7IGkrKykge1xuICAgICAgcmF0aW9bMF0gPSB0MCArIGkgKiBzdGVwO1xuICAgICAgZm4ocmF0aW8sIDAsIGNvbG9yLCAwKTtcbiAgICAgIHJnYkNvbG9yID0gY3MuZ2V0UmdiKGNvbG9yLCAwKTtcblxuICAgICAgY29uc3QgY3NzQ29sb3IgPSBfdXRpbC5VdGlsLm1ha2VIZXhDb2xvcihyZ2JDb2xvclswXSwgcmdiQ29sb3JbMV0sIHJnYkNvbG9yWzJdKTtcblxuICAgICAgY29sb3JTdG9wcy5wdXNoKFtpIC8gTlVNQkVSX09GX1NBTVBMRVMsIGNzc0NvbG9yXSk7XG4gICAgfVxuXG4gICAgbGV0IGJhY2tncm91bmQgPSBcInRyYW5zcGFyZW50XCI7XG5cbiAgICBpZiAoZGljdC5oYXMoXCJCYWNrZ3JvdW5kXCIpKSB7XG4gICAgICByZ2JDb2xvciA9IGNzLmdldFJnYihkaWN0LmdldChcIkJhY2tncm91bmRcIiksIDApO1xuICAgICAgYmFja2dyb3VuZCA9IF91dGlsLlV0aWwubWFrZUhleENvbG9yKHJnYkNvbG9yWzBdLCByZ2JDb2xvclsxXSwgcmdiQ29sb3JbMl0pO1xuICAgIH1cblxuICAgIGlmICghZXh0ZW5kU3RhcnQpIHtcbiAgICAgIGNvbG9yU3RvcHMudW5zaGlmdChbMCwgYmFja2dyb3VuZF0pO1xuICAgICAgY29sb3JTdG9wc1sxXVswXSArPSBCYXNlU2hhZGluZy5TTUFMTF9OVU1CRVI7XG4gICAgfVxuXG4gICAgaWYgKCFleHRlbmRFbmQpIHtcbiAgICAgIGNvbG9yU3RvcHNbY29sb3JTdG9wcy5sZW5ndGggLSAxXVswXSAtPSBCYXNlU2hhZGluZy5TTUFMTF9OVU1CRVI7XG4gICAgICBjb2xvclN0b3BzLnB1c2goWzEsIGJhY2tncm91bmRdKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbG9yU3RvcHMgPSBjb2xvclN0b3BzO1xuICB9XG5cbiAgZ2V0SVIoKSB7XG4gICAgY29uc3QgY29vcmRzQXJyID0gdGhpcy5jb29yZHNBcnI7XG4gICAgY29uc3Qgc2hhZGluZ1R5cGUgPSB0aGlzLnNoYWRpbmdUeXBlO1xuICAgIGxldCB0eXBlLCBwMCwgcDEsIHIwLCByMTtcblxuICAgIGlmIChzaGFkaW5nVHlwZSA9PT0gU2hhZGluZ1R5cGUuQVhJQUwpIHtcbiAgICAgIHAwID0gW2Nvb3Jkc0FyclswXSwgY29vcmRzQXJyWzFdXTtcbiAgICAgIHAxID0gW2Nvb3Jkc0FyclsyXSwgY29vcmRzQXJyWzNdXTtcbiAgICAgIHIwID0gbnVsbDtcbiAgICAgIHIxID0gbnVsbDtcbiAgICAgIHR5cGUgPSBcImF4aWFsXCI7XG4gICAgfSBlbHNlIGlmIChzaGFkaW5nVHlwZSA9PT0gU2hhZGluZ1R5cGUuUkFESUFMKSB7XG4gICAgICBwMCA9IFtjb29yZHNBcnJbMF0sIGNvb3Jkc0FyclsxXV07XG4gICAgICBwMSA9IFtjb29yZHNBcnJbM10sIGNvb3Jkc0Fycls0XV07XG4gICAgICByMCA9IGNvb3Jkc0FyclsyXTtcbiAgICAgIHIxID0gY29vcmRzQXJyWzVdO1xuICAgICAgdHlwZSA9IFwicmFkaWFsXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoYGdldFBhdHRlcm4gdHlwZSB1bmtub3duOiAke3NoYWRpbmdUeXBlfWApO1xuICAgIH1cblxuICAgIHJldHVybiBbXCJSYWRpYWxBeGlhbFwiLCB0eXBlLCB0aGlzLmJib3gsIHRoaXMuY29sb3JTdG9wcywgcDAsIHAxLCByMCwgcjFdO1xuICB9XG5cbn1cblxuY2xhc3MgTWVzaFN0cmVhbVJlYWRlciB7XG4gIGNvbnN0cnVjdG9yKHN0cmVhbSwgY29udGV4dCkge1xuICAgIHRoaXMuc3RyZWFtID0gc3RyZWFtO1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgdGhpcy5idWZmZXIgPSAwO1xuICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gMDtcbiAgICBjb25zdCBudW1Db21wcyA9IGNvbnRleHQubnVtQ29tcHM7XG4gICAgdGhpcy50bXBDb21wc0J1ZiA9IG5ldyBGbG9hdDMyQXJyYXkobnVtQ29tcHMpO1xuICAgIGNvbnN0IGNzTnVtQ29tcHMgPSBjb250ZXh0LmNvbG9yU3BhY2UubnVtQ29tcHM7XG4gICAgdGhpcy50bXBDc0NvbXBzQnVmID0gY29udGV4dC5jb2xvckZuID8gbmV3IEZsb2F0MzJBcnJheShjc051bUNvbXBzKSA6IHRoaXMudG1wQ29tcHNCdWY7XG4gIH1cblxuICBnZXQgaGFzRGF0YSgpIHtcbiAgICBpZiAodGhpcy5zdHJlYW0uZW5kKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdHJlYW0ucG9zIDwgdGhpcy5zdHJlYW0uZW5kO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmJ1ZmZlckxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG5leHRCeXRlID0gdGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpO1xuXG4gICAgaWYgKG5leHRCeXRlIDwgMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuYnVmZmVyID0gbmV4dEJ5dGU7XG4gICAgdGhpcy5idWZmZXJMZW5ndGggPSA4O1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmVhZEJpdHMobikge1xuICAgIGxldCBidWZmZXIgPSB0aGlzLmJ1ZmZlcjtcbiAgICBsZXQgYnVmZmVyTGVuZ3RoID0gdGhpcy5idWZmZXJMZW5ndGg7XG5cbiAgICBpZiAobiA9PT0gMzIpIHtcbiAgICAgIGlmIChidWZmZXJMZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLnN0cmVhbS5nZXRCeXRlKCkgPDwgMjQgfCB0aGlzLnN0cmVhbS5nZXRCeXRlKCkgPDwgMTYgfCB0aGlzLnN0cmVhbS5nZXRCeXRlKCkgPDwgOCB8IHRoaXMuc3RyZWFtLmdldEJ5dGUoKSkgPj4+IDA7XG4gICAgICB9XG5cbiAgICAgIGJ1ZmZlciA9IGJ1ZmZlciA8PCAyNCB8IHRoaXMuc3RyZWFtLmdldEJ5dGUoKSA8PCAxNiB8IHRoaXMuc3RyZWFtLmdldEJ5dGUoKSA8PCA4IHwgdGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpO1xuICAgICAgY29uc3QgbmV4dEJ5dGUgPSB0aGlzLnN0cmVhbS5nZXRCeXRlKCk7XG4gICAgICB0aGlzLmJ1ZmZlciA9IG5leHRCeXRlICYgKDEgPDwgYnVmZmVyTGVuZ3RoKSAtIDE7XG4gICAgICByZXR1cm4gKGJ1ZmZlciA8PCA4IC0gYnVmZmVyTGVuZ3RoIHwgKG5leHRCeXRlICYgMHhmZikgPj4gYnVmZmVyTGVuZ3RoKSA+Pj4gMDtcbiAgICB9XG5cbiAgICBpZiAobiA9PT0gOCAmJiBidWZmZXJMZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzLnN0cmVhbS5nZXRCeXRlKCk7XG4gICAgfVxuXG4gICAgd2hpbGUgKGJ1ZmZlckxlbmd0aCA8IG4pIHtcbiAgICAgIGJ1ZmZlciA9IGJ1ZmZlciA8PCA4IHwgdGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpO1xuICAgICAgYnVmZmVyTGVuZ3RoICs9IDg7XG4gICAgfVxuXG4gICAgYnVmZmVyTGVuZ3RoIC09IG47XG4gICAgdGhpcy5idWZmZXJMZW5ndGggPSBidWZmZXJMZW5ndGg7XG4gICAgdGhpcy5idWZmZXIgPSBidWZmZXIgJiAoMSA8PCBidWZmZXJMZW5ndGgpIC0gMTtcbiAgICByZXR1cm4gYnVmZmVyID4+IGJ1ZmZlckxlbmd0aDtcbiAgfVxuXG4gIGFsaWduKCkge1xuICAgIHRoaXMuYnVmZmVyID0gMDtcbiAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IDA7XG4gIH1cblxuICByZWFkRmxhZygpIHtcbiAgICByZXR1cm4gdGhpcy5yZWFkQml0cyh0aGlzLmNvbnRleHQuYml0c1BlckZsYWcpO1xuICB9XG5cbiAgcmVhZENvb3JkaW5hdGUoKSB7XG4gICAgY29uc3QgYml0c1BlckNvb3JkaW5hdGUgPSB0aGlzLmNvbnRleHQuYml0c1BlckNvb3JkaW5hdGU7XG4gICAgY29uc3QgeGkgPSB0aGlzLnJlYWRCaXRzKGJpdHNQZXJDb29yZGluYXRlKTtcbiAgICBjb25zdCB5aSA9IHRoaXMucmVhZEJpdHMoYml0c1BlckNvb3JkaW5hdGUpO1xuICAgIGNvbnN0IGRlY29kZSA9IHRoaXMuY29udGV4dC5kZWNvZGU7XG4gICAgY29uc3Qgc2NhbGUgPSBiaXRzUGVyQ29vcmRpbmF0ZSA8IDMyID8gMSAvICgoMSA8PCBiaXRzUGVyQ29vcmRpbmF0ZSkgLSAxKSA6IDIuMzI4MzA2NDM2NTM4Njk2M2UtMTA7XG4gICAgcmV0dXJuIFt4aSAqIHNjYWxlICogKGRlY29kZVsxXSAtIGRlY29kZVswXSkgKyBkZWNvZGVbMF0sIHlpICogc2NhbGUgKiAoZGVjb2RlWzNdIC0gZGVjb2RlWzJdKSArIGRlY29kZVsyXV07XG4gIH1cblxuICByZWFkQ29tcG9uZW50cygpIHtcbiAgICBjb25zdCBudW1Db21wcyA9IHRoaXMuY29udGV4dC5udW1Db21wcztcbiAgICBjb25zdCBiaXRzUGVyQ29tcG9uZW50ID0gdGhpcy5jb250ZXh0LmJpdHNQZXJDb21wb25lbnQ7XG4gICAgY29uc3Qgc2NhbGUgPSBiaXRzUGVyQ29tcG9uZW50IDwgMzIgPyAxIC8gKCgxIDw8IGJpdHNQZXJDb21wb25lbnQpIC0gMSkgOiAyLjMyODMwNjQzNjUzODY5NjNlLTEwO1xuICAgIGNvbnN0IGRlY29kZSA9IHRoaXMuY29udGV4dC5kZWNvZGU7XG4gICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMudG1wQ29tcHNCdWY7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgaiA9IDQ7IGkgPCBudW1Db21wczsgaSsrLCBqICs9IDIpIHtcbiAgICAgIGNvbnN0IGNpID0gdGhpcy5yZWFkQml0cyhiaXRzUGVyQ29tcG9uZW50KTtcbiAgICAgIGNvbXBvbmVudHNbaV0gPSBjaSAqIHNjYWxlICogKGRlY29kZVtqICsgMV0gLSBkZWNvZGVbal0pICsgZGVjb2RlW2pdO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbG9yID0gdGhpcy50bXBDc0NvbXBzQnVmO1xuXG4gICAgaWYgKHRoaXMuY29udGV4dC5jb2xvckZuKSB7XG4gICAgICB0aGlzLmNvbnRleHQuY29sb3JGbihjb21wb25lbnRzLCAwLCBjb2xvciwgMCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29udGV4dC5jb2xvclNwYWNlLmdldFJnYihjb2xvciwgMCk7XG4gIH1cblxufVxuXG5jb25zdCBnZXRCID0gZnVuY3Rpb24gZ2V0QkNsb3N1cmUoKSB7XG4gIGZ1bmN0aW9uIGJ1aWxkQihjb3VudCkge1xuICAgIGNvbnN0IGx1dCA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gY291bnQ7IGkrKykge1xuICAgICAgY29uc3QgdCA9IGkgLyBjb3VudCxcbiAgICAgICAgICAgIHRfID0gMSAtIHQ7XG4gICAgICBsdXQucHVzaChuZXcgRmxvYXQzMkFycmF5KFt0XyAqIHRfICogdF8sIDMgKiB0ICogdF8gKiB0XywgMyAqIHQgKiB0ICogdF8sIHQgKiB0ICogdF0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbHV0O1xuICB9XG5cbiAgY29uc3QgY2FjaGUgPSBbXTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChjb3VudCkge1xuICAgIGlmICghY2FjaGVbY291bnRdKSB7XG4gICAgICBjYWNoZVtjb3VudF0gPSBidWlsZEIoY291bnQpO1xuICAgIH1cblxuICAgIHJldHVybiBjYWNoZVtjb3VudF07XG4gIH07XG59KCk7XG5cbmNsYXNzIE1lc2hTaGFkaW5nIGV4dGVuZHMgQmFzZVNoYWRpbmcge1xuICBzdGF0aWMgZ2V0IE1JTl9TUExJVF9QQVRDSF9DSFVOS1NfQU1PVU5UKCkge1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIk1JTl9TUExJVF9QQVRDSF9DSFVOS1NfQU1PVU5UXCIsIDMpO1xuICB9XG5cbiAgc3RhdGljIGdldCBNQVhfU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCgpIHtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJNQVhfU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVFwiLCAyMCk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IFRSSUFOR0xFX0RFTlNJVFkoKSB7XG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiVFJJQU5HTEVfREVOU0lUWVwiLCAyMCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihzdHJlYW0sIHhyZWYsIHJlc291cmNlcywgcGRmRnVuY3Rpb25GYWN0b3J5LCBsb2NhbENvbG9yU3BhY2VDYWNoZSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkoc3RyZWFtKSkge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiTWVzaCBkYXRhIGlzIG5vdCBhIHN0cmVhbVwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBkaWN0ID0gc3RyZWFtLmRpY3Q7XG4gICAgdGhpcy5zaGFkaW5nVHlwZSA9IGRpY3QuZ2V0KFwiU2hhZGluZ1R5cGVcIik7XG4gICAgY29uc3QgYmJveCA9IGRpY3QuZ2V0QXJyYXkoXCJCQm94XCIpO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYmJveCkgJiYgYmJveC5sZW5ndGggPT09IDQpIHtcbiAgICAgIHRoaXMuYmJveCA9IF91dGlsLlV0aWwubm9ybWFsaXplUmVjdChiYm94KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5iYm94ID0gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjcyA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2UucGFyc2Uoe1xuICAgICAgY3M6IGRpY3QuZ2V0UmF3KFwiQ1NcIikgfHwgZGljdC5nZXRSYXcoXCJDb2xvclNwYWNlXCIpLFxuICAgICAgeHJlZixcbiAgICAgIHJlc291cmNlcyxcbiAgICAgIHBkZkZ1bmN0aW9uRmFjdG9yeSxcbiAgICAgIGxvY2FsQ29sb3JTcGFjZUNhY2hlXG4gICAgfSk7XG5cbiAgICB0aGlzLmJhY2tncm91bmQgPSBkaWN0LmhhcyhcIkJhY2tncm91bmRcIikgPyBjcy5nZXRSZ2IoZGljdC5nZXQoXCJCYWNrZ3JvdW5kXCIpLCAwKSA6IG51bGw7XG4gICAgY29uc3QgZm5PYmogPSBkaWN0LmdldFJhdyhcIkZ1bmN0aW9uXCIpO1xuICAgIGNvbnN0IGZuID0gZm5PYmogPyBwZGZGdW5jdGlvbkZhY3RvcnkuY3JlYXRlRnJvbUFycmF5KGZuT2JqKSA6IG51bGw7XG4gICAgdGhpcy5jb29yZHMgPSBbXTtcbiAgICB0aGlzLmNvbG9ycyA9IFtdO1xuICAgIHRoaXMuZmlndXJlcyA9IFtdO1xuICAgIGNvbnN0IGRlY29kZUNvbnRleHQgPSB7XG4gICAgICBiaXRzUGVyQ29vcmRpbmF0ZTogZGljdC5nZXQoXCJCaXRzUGVyQ29vcmRpbmF0ZVwiKSxcbiAgICAgIGJpdHNQZXJDb21wb25lbnQ6IGRpY3QuZ2V0KFwiQml0c1BlckNvbXBvbmVudFwiKSxcbiAgICAgIGJpdHNQZXJGbGFnOiBkaWN0LmdldChcIkJpdHNQZXJGbGFnXCIpLFxuICAgICAgZGVjb2RlOiBkaWN0LmdldEFycmF5KFwiRGVjb2RlXCIpLFxuICAgICAgY29sb3JGbjogZm4sXG4gICAgICBjb2xvclNwYWNlOiBjcyxcbiAgICAgIG51bUNvbXBzOiBmbiA/IDEgOiBjcy5udW1Db21wc1xuICAgIH07XG4gICAgY29uc3QgcmVhZGVyID0gbmV3IE1lc2hTdHJlYW1SZWFkZXIoc3RyZWFtLCBkZWNvZGVDb250ZXh0KTtcbiAgICBsZXQgcGF0Y2hNZXNoID0gZmFsc2U7XG5cbiAgICBzd2l0Y2ggKHRoaXMuc2hhZGluZ1R5cGUpIHtcbiAgICAgIGNhc2UgU2hhZGluZ1R5cGUuRlJFRV9GT1JNX01FU0g6XG4gICAgICAgIHRoaXMuX2RlY29kZVR5cGU0U2hhZGluZyhyZWFkZXIpO1xuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFNoYWRpbmdUeXBlLkxBVFRJQ0VfRk9STV9NRVNIOlxuICAgICAgICBjb25zdCB2ZXJ0aWNlc1BlclJvdyA9IGRpY3QuZ2V0KFwiVmVydGljZXNQZXJSb3dcIikgfCAwO1xuXG4gICAgICAgIGlmICh2ZXJ0aWNlc1BlclJvdyA8IDIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJJbnZhbGlkIFZlcnRpY2VzUGVyUm93XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZGVjb2RlVHlwZTVTaGFkaW5nKHJlYWRlciwgdmVydGljZXNQZXJSb3cpO1xuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFNoYWRpbmdUeXBlLkNPT05TX1BBVENIX01FU0g6XG4gICAgICAgIHRoaXMuX2RlY29kZVR5cGU2U2hhZGluZyhyZWFkZXIpO1xuXG4gICAgICAgIHBhdGNoTWVzaCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFNoYWRpbmdUeXBlLlRFTlNPUl9QQVRDSF9NRVNIOlxuICAgICAgICB0aGlzLl9kZWNvZGVUeXBlN1NoYWRpbmcocmVhZGVyKTtcblxuICAgICAgICBwYXRjaE1lc2ggPSB0cnVlO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIlVuc3VwcG9ydGVkIG1lc2ggdHlwZS5cIik7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChwYXRjaE1lc2gpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZUJvdW5kcygpO1xuXG4gICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSB0aGlzLmZpZ3VyZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICB0aGlzLl9idWlsZEZpZ3VyZUZyb21QYXRjaChpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVCb3VuZHMoKTtcblxuICAgIHRoaXMuX3BhY2tEYXRhKCk7XG4gIH1cblxuICBfZGVjb2RlVHlwZTRTaGFkaW5nKHJlYWRlcikge1xuICAgIGNvbnN0IGNvb3JkcyA9IHRoaXMuY29vcmRzO1xuICAgIGNvbnN0IGNvbG9ycyA9IHRoaXMuY29sb3JzO1xuICAgIGNvbnN0IG9wZXJhdG9ycyA9IFtdO1xuICAgIGNvbnN0IHBzID0gW107XG4gICAgbGV0IHZlcnRpY2VzTGVmdCA9IDA7XG5cbiAgICB3aGlsZSAocmVhZGVyLmhhc0RhdGEpIHtcbiAgICAgIGNvbnN0IGYgPSByZWFkZXIucmVhZEZsYWcoKTtcbiAgICAgIGNvbnN0IGNvb3JkID0gcmVhZGVyLnJlYWRDb29yZGluYXRlKCk7XG4gICAgICBjb25zdCBjb2xvciA9IHJlYWRlci5yZWFkQ29tcG9uZW50cygpO1xuXG4gICAgICBpZiAodmVydGljZXNMZWZ0ID09PSAwKSB7XG4gICAgICAgIGlmICghKDAgPD0gZiAmJiBmIDw9IDIpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiVW5rbm93biB0eXBlNCBmbGFnXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoIChmKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgdmVydGljZXNMZWZ0ID0gMztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgcHMucHVzaChwc1twcy5sZW5ndGggLSAyXSwgcHNbcHMubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgICAgdmVydGljZXNMZWZ0ID0gMTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgcHMucHVzaChwc1twcy5sZW5ndGggLSAzXSwgcHNbcHMubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgICAgdmVydGljZXNMZWZ0ID0gMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgb3BlcmF0b3JzLnB1c2goZik7XG4gICAgICB9XG5cbiAgICAgIHBzLnB1c2goY29vcmRzLmxlbmd0aCk7XG4gICAgICBjb29yZHMucHVzaChjb29yZCk7XG4gICAgICBjb2xvcnMucHVzaChjb2xvcik7XG4gICAgICB2ZXJ0aWNlc0xlZnQtLTtcbiAgICAgIHJlYWRlci5hbGlnbigpO1xuICAgIH1cblxuICAgIHRoaXMuZmlndXJlcy5wdXNoKHtcbiAgICAgIHR5cGU6IFwidHJpYW5nbGVzXCIsXG4gICAgICBjb29yZHM6IG5ldyBJbnQzMkFycmF5KHBzKSxcbiAgICAgIGNvbG9yczogbmV3IEludDMyQXJyYXkocHMpXG4gICAgfSk7XG4gIH1cblxuICBfZGVjb2RlVHlwZTVTaGFkaW5nKHJlYWRlciwgdmVydGljZXNQZXJSb3cpIHtcbiAgICBjb25zdCBjb29yZHMgPSB0aGlzLmNvb3JkcztcbiAgICBjb25zdCBjb2xvcnMgPSB0aGlzLmNvbG9ycztcbiAgICBjb25zdCBwcyA9IFtdO1xuXG4gICAgd2hpbGUgKHJlYWRlci5oYXNEYXRhKSB7XG4gICAgICBjb25zdCBjb29yZCA9IHJlYWRlci5yZWFkQ29vcmRpbmF0ZSgpO1xuICAgICAgY29uc3QgY29sb3IgPSByZWFkZXIucmVhZENvbXBvbmVudHMoKTtcbiAgICAgIHBzLnB1c2goY29vcmRzLmxlbmd0aCk7XG4gICAgICBjb29yZHMucHVzaChjb29yZCk7XG4gICAgICBjb2xvcnMucHVzaChjb2xvcik7XG4gICAgfVxuXG4gICAgdGhpcy5maWd1cmVzLnB1c2goe1xuICAgICAgdHlwZTogXCJsYXR0aWNlXCIsXG4gICAgICBjb29yZHM6IG5ldyBJbnQzMkFycmF5KHBzKSxcbiAgICAgIGNvbG9yczogbmV3IEludDMyQXJyYXkocHMpLFxuICAgICAgdmVydGljZXNQZXJSb3dcbiAgICB9KTtcbiAgfVxuXG4gIF9kZWNvZGVUeXBlNlNoYWRpbmcocmVhZGVyKSB7XG4gICAgY29uc3QgY29vcmRzID0gdGhpcy5jb29yZHM7XG4gICAgY29uc3QgY29sb3JzID0gdGhpcy5jb2xvcnM7XG4gICAgY29uc3QgcHMgPSBuZXcgSW50MzJBcnJheSgxNik7XG4gICAgY29uc3QgY3MgPSBuZXcgSW50MzJBcnJheSg0KTtcblxuICAgIHdoaWxlIChyZWFkZXIuaGFzRGF0YSkge1xuICAgICAgY29uc3QgZiA9IHJlYWRlci5yZWFkRmxhZygpO1xuXG4gICAgICBpZiAoISgwIDw9IGYgJiYgZiA8PSAzKSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJVbmtub3duIHR5cGU2IGZsYWdcIik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBpID0gY29vcmRzLmxlbmd0aDtcblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gZiAhPT0gMCA/IDggOiAxMjsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgY29vcmRzLnB1c2gocmVhZGVyLnJlYWRDb29yZGluYXRlKCkpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjaSA9IGNvbG9ycy5sZW5ndGg7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGYgIT09IDAgPyAyIDogNDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgY29sb3JzLnB1c2gocmVhZGVyLnJlYWRDb21wb25lbnRzKCkpO1xuICAgICAgfVxuXG4gICAgICBsZXQgdG1wMSwgdG1wMiwgdG1wMywgdG1wNDtcblxuICAgICAgc3dpdGNoIChmKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBwc1sxMl0gPSBwaSArIDM7XG4gICAgICAgICAgcHNbMTNdID0gcGkgKyA0O1xuICAgICAgICAgIHBzWzE0XSA9IHBpICsgNTtcbiAgICAgICAgICBwc1sxNV0gPSBwaSArIDY7XG4gICAgICAgICAgcHNbOF0gPSBwaSArIDI7XG4gICAgICAgICAgcHNbMTFdID0gcGkgKyA3O1xuICAgICAgICAgIHBzWzRdID0gcGkgKyAxO1xuICAgICAgICAgIHBzWzddID0gcGkgKyA4O1xuICAgICAgICAgIHBzWzBdID0gcGk7XG4gICAgICAgICAgcHNbMV0gPSBwaSArIDExO1xuICAgICAgICAgIHBzWzJdID0gcGkgKyAxMDtcbiAgICAgICAgICBwc1szXSA9IHBpICsgOTtcbiAgICAgICAgICBjc1syXSA9IGNpICsgMTtcbiAgICAgICAgICBjc1szXSA9IGNpICsgMjtcbiAgICAgICAgICBjc1swXSA9IGNpO1xuICAgICAgICAgIGNzWzFdID0gY2kgKyAzO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICB0bXAxID0gcHNbMTJdO1xuICAgICAgICAgIHRtcDIgPSBwc1sxM107XG4gICAgICAgICAgdG1wMyA9IHBzWzE0XTtcbiAgICAgICAgICB0bXA0ID0gcHNbMTVdO1xuICAgICAgICAgIHBzWzEyXSA9IHRtcDQ7XG4gICAgICAgICAgcHNbMTNdID0gcGkgKyAwO1xuICAgICAgICAgIHBzWzE0XSA9IHBpICsgMTtcbiAgICAgICAgICBwc1sxNV0gPSBwaSArIDI7XG4gICAgICAgICAgcHNbOF0gPSB0bXAzO1xuICAgICAgICAgIHBzWzExXSA9IHBpICsgMztcbiAgICAgICAgICBwc1s0XSA9IHRtcDI7XG4gICAgICAgICAgcHNbN10gPSBwaSArIDQ7XG4gICAgICAgICAgcHNbMF0gPSB0bXAxO1xuICAgICAgICAgIHBzWzFdID0gcGkgKyA3O1xuICAgICAgICAgIHBzWzJdID0gcGkgKyA2O1xuICAgICAgICAgIHBzWzNdID0gcGkgKyA1O1xuICAgICAgICAgIHRtcDEgPSBjc1syXTtcbiAgICAgICAgICB0bXAyID0gY3NbM107XG4gICAgICAgICAgY3NbMl0gPSB0bXAyO1xuICAgICAgICAgIGNzWzNdID0gY2k7XG4gICAgICAgICAgY3NbMF0gPSB0bXAxO1xuICAgICAgICAgIGNzWzFdID0gY2kgKyAxO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICB0bXAxID0gcHNbMTVdO1xuICAgICAgICAgIHRtcDIgPSBwc1sxMV07XG4gICAgICAgICAgcHNbMTJdID0gcHNbM107XG4gICAgICAgICAgcHNbMTNdID0gcGkgKyAwO1xuICAgICAgICAgIHBzWzE0XSA9IHBpICsgMTtcbiAgICAgICAgICBwc1sxNV0gPSBwaSArIDI7XG4gICAgICAgICAgcHNbOF0gPSBwc1s3XTtcbiAgICAgICAgICBwc1sxMV0gPSBwaSArIDM7XG4gICAgICAgICAgcHNbNF0gPSB0bXAyO1xuICAgICAgICAgIHBzWzddID0gcGkgKyA0O1xuICAgICAgICAgIHBzWzBdID0gdG1wMTtcbiAgICAgICAgICBwc1sxXSA9IHBpICsgNztcbiAgICAgICAgICBwc1syXSA9IHBpICsgNjtcbiAgICAgICAgICBwc1szXSA9IHBpICsgNTtcbiAgICAgICAgICB0bXAxID0gY3NbM107XG4gICAgICAgICAgY3NbMl0gPSBjc1sxXTtcbiAgICAgICAgICBjc1szXSA9IGNpO1xuICAgICAgICAgIGNzWzBdID0gdG1wMTtcbiAgICAgICAgICBjc1sxXSA9IGNpICsgMTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcHNbMTJdID0gcHNbMF07XG4gICAgICAgICAgcHNbMTNdID0gcGkgKyAwO1xuICAgICAgICAgIHBzWzE0XSA9IHBpICsgMTtcbiAgICAgICAgICBwc1sxNV0gPSBwaSArIDI7XG4gICAgICAgICAgcHNbOF0gPSBwc1sxXTtcbiAgICAgICAgICBwc1sxMV0gPSBwaSArIDM7XG4gICAgICAgICAgcHNbNF0gPSBwc1syXTtcbiAgICAgICAgICBwc1s3XSA9IHBpICsgNDtcbiAgICAgICAgICBwc1swXSA9IHBzWzNdO1xuICAgICAgICAgIHBzWzFdID0gcGkgKyA3O1xuICAgICAgICAgIHBzWzJdID0gcGkgKyA2O1xuICAgICAgICAgIHBzWzNdID0gcGkgKyA1O1xuICAgICAgICAgIGNzWzJdID0gY3NbMF07XG4gICAgICAgICAgY3NbM10gPSBjaTtcbiAgICAgICAgICBjc1swXSA9IGNzWzFdO1xuICAgICAgICAgIGNzWzFdID0gY2kgKyAxO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBwc1s1XSA9IGNvb3Jkcy5sZW5ndGg7XG4gICAgICBjb29yZHMucHVzaChbKC00ICogY29vcmRzW3BzWzBdXVswXSAtIGNvb3Jkc1twc1sxNV1dWzBdICsgNiAqIChjb29yZHNbcHNbNF1dWzBdICsgY29vcmRzW3BzWzFdXVswXSkgLSAyICogKGNvb3Jkc1twc1sxMl1dWzBdICsgY29vcmRzW3BzWzNdXVswXSkgKyAzICogKGNvb3Jkc1twc1sxM11dWzBdICsgY29vcmRzW3BzWzddXVswXSkpIC8gOSwgKC00ICogY29vcmRzW3BzWzBdXVsxXSAtIGNvb3Jkc1twc1sxNV1dWzFdICsgNiAqIChjb29yZHNbcHNbNF1dWzFdICsgY29vcmRzW3BzWzFdXVsxXSkgLSAyICogKGNvb3Jkc1twc1sxMl1dWzFdICsgY29vcmRzW3BzWzNdXVsxXSkgKyAzICogKGNvb3Jkc1twc1sxM11dWzFdICsgY29vcmRzW3BzWzddXVsxXSkpIC8gOV0pO1xuICAgICAgcHNbNl0gPSBjb29yZHMubGVuZ3RoO1xuICAgICAgY29vcmRzLnB1c2goWygtNCAqIGNvb3Jkc1twc1szXV1bMF0gLSBjb29yZHNbcHNbMTJdXVswXSArIDYgKiAoY29vcmRzW3BzWzJdXVswXSArIGNvb3Jkc1twc1s3XV1bMF0pIC0gMiAqIChjb29yZHNbcHNbMF1dWzBdICsgY29vcmRzW3BzWzE1XV1bMF0pICsgMyAqIChjb29yZHNbcHNbNF1dWzBdICsgY29vcmRzW3BzWzE0XV1bMF0pKSAvIDksICgtNCAqIGNvb3Jkc1twc1szXV1bMV0gLSBjb29yZHNbcHNbMTJdXVsxXSArIDYgKiAoY29vcmRzW3BzWzJdXVsxXSArIGNvb3Jkc1twc1s3XV1bMV0pIC0gMiAqIChjb29yZHNbcHNbMF1dWzFdICsgY29vcmRzW3BzWzE1XV1bMV0pICsgMyAqIChjb29yZHNbcHNbNF1dWzFdICsgY29vcmRzW3BzWzE0XV1bMV0pKSAvIDldKTtcbiAgICAgIHBzWzldID0gY29vcmRzLmxlbmd0aDtcbiAgICAgIGNvb3Jkcy5wdXNoKFsoLTQgKiBjb29yZHNbcHNbMTJdXVswXSAtIGNvb3Jkc1twc1szXV1bMF0gKyA2ICogKGNvb3Jkc1twc1s4XV1bMF0gKyBjb29yZHNbcHNbMTNdXVswXSkgLSAyICogKGNvb3Jkc1twc1swXV1bMF0gKyBjb29yZHNbcHNbMTVdXVswXSkgKyAzICogKGNvb3Jkc1twc1sxMV1dWzBdICsgY29vcmRzW3BzWzFdXVswXSkpIC8gOSwgKC00ICogY29vcmRzW3BzWzEyXV1bMV0gLSBjb29yZHNbcHNbM11dWzFdICsgNiAqIChjb29yZHNbcHNbOF1dWzFdICsgY29vcmRzW3BzWzEzXV1bMV0pIC0gMiAqIChjb29yZHNbcHNbMF1dWzFdICsgY29vcmRzW3BzWzE1XV1bMV0pICsgMyAqIChjb29yZHNbcHNbMTFdXVsxXSArIGNvb3Jkc1twc1sxXV1bMV0pKSAvIDldKTtcbiAgICAgIHBzWzEwXSA9IGNvb3Jkcy5sZW5ndGg7XG4gICAgICBjb29yZHMucHVzaChbKC00ICogY29vcmRzW3BzWzE1XV1bMF0gLSBjb29yZHNbcHNbMF1dWzBdICsgNiAqIChjb29yZHNbcHNbMTFdXVswXSArIGNvb3Jkc1twc1sxNF1dWzBdKSAtIDIgKiAoY29vcmRzW3BzWzEyXV1bMF0gKyBjb29yZHNbcHNbM11dWzBdKSArIDMgKiAoY29vcmRzW3BzWzJdXVswXSArIGNvb3Jkc1twc1s4XV1bMF0pKSAvIDksICgtNCAqIGNvb3Jkc1twc1sxNV1dWzFdIC0gY29vcmRzW3BzWzBdXVsxXSArIDYgKiAoY29vcmRzW3BzWzExXV1bMV0gKyBjb29yZHNbcHNbMTRdXVsxXSkgLSAyICogKGNvb3Jkc1twc1sxMl1dWzFdICsgY29vcmRzW3BzWzNdXVsxXSkgKyAzICogKGNvb3Jkc1twc1syXV1bMV0gKyBjb29yZHNbcHNbOF1dWzFdKSkgLyA5XSk7XG4gICAgICB0aGlzLmZpZ3VyZXMucHVzaCh7XG4gICAgICAgIHR5cGU6IFwicGF0Y2hcIixcbiAgICAgICAgY29vcmRzOiBuZXcgSW50MzJBcnJheShwcyksXG4gICAgICAgIGNvbG9yczogbmV3IEludDMyQXJyYXkoY3MpXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBfZGVjb2RlVHlwZTdTaGFkaW5nKHJlYWRlcikge1xuICAgIGNvbnN0IGNvb3JkcyA9IHRoaXMuY29vcmRzO1xuICAgIGNvbnN0IGNvbG9ycyA9IHRoaXMuY29sb3JzO1xuICAgIGNvbnN0IHBzID0gbmV3IEludDMyQXJyYXkoMTYpO1xuICAgIGNvbnN0IGNzID0gbmV3IEludDMyQXJyYXkoNCk7XG5cbiAgICB3aGlsZSAocmVhZGVyLmhhc0RhdGEpIHtcbiAgICAgIGNvbnN0IGYgPSByZWFkZXIucmVhZEZsYWcoKTtcblxuICAgICAgaWYgKCEoMCA8PSBmICYmIGYgPD0gMykpIHtcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiVW5rbm93biB0eXBlNyBmbGFnXCIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwaSA9IGNvb3Jkcy5sZW5ndGg7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGYgIT09IDAgPyAxMiA6IDE2OyBpIDwgaWk7IGkrKykge1xuICAgICAgICBjb29yZHMucHVzaChyZWFkZXIucmVhZENvb3JkaW5hdGUoKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNpID0gY29sb3JzLmxlbmd0aDtcblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gZiAhPT0gMCA/IDIgOiA0OyBpIDwgaWk7IGkrKykge1xuICAgICAgICBjb2xvcnMucHVzaChyZWFkZXIucmVhZENvbXBvbmVudHMoKSk7XG4gICAgICB9XG5cbiAgICAgIGxldCB0bXAxLCB0bXAyLCB0bXAzLCB0bXA0O1xuXG4gICAgICBzd2l0Y2ggKGYpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIHBzWzEyXSA9IHBpICsgMztcbiAgICAgICAgICBwc1sxM10gPSBwaSArIDQ7XG4gICAgICAgICAgcHNbMTRdID0gcGkgKyA1O1xuICAgICAgICAgIHBzWzE1XSA9IHBpICsgNjtcbiAgICAgICAgICBwc1s4XSA9IHBpICsgMjtcbiAgICAgICAgICBwc1s5XSA9IHBpICsgMTM7XG4gICAgICAgICAgcHNbMTBdID0gcGkgKyAxNDtcbiAgICAgICAgICBwc1sxMV0gPSBwaSArIDc7XG4gICAgICAgICAgcHNbNF0gPSBwaSArIDE7XG4gICAgICAgICAgcHNbNV0gPSBwaSArIDEyO1xuICAgICAgICAgIHBzWzZdID0gcGkgKyAxNTtcbiAgICAgICAgICBwc1s3XSA9IHBpICsgODtcbiAgICAgICAgICBwc1swXSA9IHBpO1xuICAgICAgICAgIHBzWzFdID0gcGkgKyAxMTtcbiAgICAgICAgICBwc1syXSA9IHBpICsgMTA7XG4gICAgICAgICAgcHNbM10gPSBwaSArIDk7XG4gICAgICAgICAgY3NbMl0gPSBjaSArIDE7XG4gICAgICAgICAgY3NbM10gPSBjaSArIDI7XG4gICAgICAgICAgY3NbMF0gPSBjaTtcbiAgICAgICAgICBjc1sxXSA9IGNpICsgMztcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgdG1wMSA9IHBzWzEyXTtcbiAgICAgICAgICB0bXAyID0gcHNbMTNdO1xuICAgICAgICAgIHRtcDMgPSBwc1sxNF07XG4gICAgICAgICAgdG1wNCA9IHBzWzE1XTtcbiAgICAgICAgICBwc1sxMl0gPSB0bXA0O1xuICAgICAgICAgIHBzWzEzXSA9IHBpICsgMDtcbiAgICAgICAgICBwc1sxNF0gPSBwaSArIDE7XG4gICAgICAgICAgcHNbMTVdID0gcGkgKyAyO1xuICAgICAgICAgIHBzWzhdID0gdG1wMztcbiAgICAgICAgICBwc1s5XSA9IHBpICsgOTtcbiAgICAgICAgICBwc1sxMF0gPSBwaSArIDEwO1xuICAgICAgICAgIHBzWzExXSA9IHBpICsgMztcbiAgICAgICAgICBwc1s0XSA9IHRtcDI7XG4gICAgICAgICAgcHNbNV0gPSBwaSArIDg7XG4gICAgICAgICAgcHNbNl0gPSBwaSArIDExO1xuICAgICAgICAgIHBzWzddID0gcGkgKyA0O1xuICAgICAgICAgIHBzWzBdID0gdG1wMTtcbiAgICAgICAgICBwc1sxXSA9IHBpICsgNztcbiAgICAgICAgICBwc1syXSA9IHBpICsgNjtcbiAgICAgICAgICBwc1szXSA9IHBpICsgNTtcbiAgICAgICAgICB0bXAxID0gY3NbMl07XG4gICAgICAgICAgdG1wMiA9IGNzWzNdO1xuICAgICAgICAgIGNzWzJdID0gdG1wMjtcbiAgICAgICAgICBjc1szXSA9IGNpO1xuICAgICAgICAgIGNzWzBdID0gdG1wMTtcbiAgICAgICAgICBjc1sxXSA9IGNpICsgMTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgdG1wMSA9IHBzWzE1XTtcbiAgICAgICAgICB0bXAyID0gcHNbMTFdO1xuICAgICAgICAgIHBzWzEyXSA9IHBzWzNdO1xuICAgICAgICAgIHBzWzEzXSA9IHBpICsgMDtcbiAgICAgICAgICBwc1sxNF0gPSBwaSArIDE7XG4gICAgICAgICAgcHNbMTVdID0gcGkgKyAyO1xuICAgICAgICAgIHBzWzhdID0gcHNbN107XG4gICAgICAgICAgcHNbOV0gPSBwaSArIDk7XG4gICAgICAgICAgcHNbMTBdID0gcGkgKyAxMDtcbiAgICAgICAgICBwc1sxMV0gPSBwaSArIDM7XG4gICAgICAgICAgcHNbNF0gPSB0bXAyO1xuICAgICAgICAgIHBzWzVdID0gcGkgKyA4O1xuICAgICAgICAgIHBzWzZdID0gcGkgKyAxMTtcbiAgICAgICAgICBwc1s3XSA9IHBpICsgNDtcbiAgICAgICAgICBwc1swXSA9IHRtcDE7XG4gICAgICAgICAgcHNbMV0gPSBwaSArIDc7XG4gICAgICAgICAgcHNbMl0gPSBwaSArIDY7XG4gICAgICAgICAgcHNbM10gPSBwaSArIDU7XG4gICAgICAgICAgdG1wMSA9IGNzWzNdO1xuICAgICAgICAgIGNzWzJdID0gY3NbMV07XG4gICAgICAgICAgY3NbM10gPSBjaTtcbiAgICAgICAgICBjc1swXSA9IHRtcDE7XG4gICAgICAgICAgY3NbMV0gPSBjaSArIDE7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHBzWzEyXSA9IHBzWzBdO1xuICAgICAgICAgIHBzWzEzXSA9IHBpICsgMDtcbiAgICAgICAgICBwc1sxNF0gPSBwaSArIDE7XG4gICAgICAgICAgcHNbMTVdID0gcGkgKyAyO1xuICAgICAgICAgIHBzWzhdID0gcHNbMV07XG4gICAgICAgICAgcHNbOV0gPSBwaSArIDk7XG4gICAgICAgICAgcHNbMTBdID0gcGkgKyAxMDtcbiAgICAgICAgICBwc1sxMV0gPSBwaSArIDM7XG4gICAgICAgICAgcHNbNF0gPSBwc1syXTtcbiAgICAgICAgICBwc1s1XSA9IHBpICsgODtcbiAgICAgICAgICBwc1s2XSA9IHBpICsgMTE7XG4gICAgICAgICAgcHNbN10gPSBwaSArIDQ7XG4gICAgICAgICAgcHNbMF0gPSBwc1szXTtcbiAgICAgICAgICBwc1sxXSA9IHBpICsgNztcbiAgICAgICAgICBwc1syXSA9IHBpICsgNjtcbiAgICAgICAgICBwc1szXSA9IHBpICsgNTtcbiAgICAgICAgICBjc1syXSA9IGNzWzBdO1xuICAgICAgICAgIGNzWzNdID0gY2k7XG4gICAgICAgICAgY3NbMF0gPSBjc1sxXTtcbiAgICAgICAgICBjc1sxXSA9IGNpICsgMTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgdGhpcy5maWd1cmVzLnB1c2goe1xuICAgICAgICB0eXBlOiBcInBhdGNoXCIsXG4gICAgICAgIGNvb3JkczogbmV3IEludDMyQXJyYXkocHMpLFxuICAgICAgICBjb2xvcnM6IG5ldyBJbnQzMkFycmF5KGNzKVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgX2J1aWxkRmlndXJlRnJvbVBhdGNoKGluZGV4KSB7XG4gICAgY29uc3QgZmlndXJlID0gdGhpcy5maWd1cmVzW2luZGV4XTtcbiAgICAoMCwgX3V0aWwuYXNzZXJ0KShmaWd1cmUudHlwZSA9PT0gXCJwYXRjaFwiLCBcIlVuZXhwZWN0ZWQgcGF0Y2ggbWVzaCBmaWd1cmVcIik7XG4gICAgY29uc3QgY29vcmRzID0gdGhpcy5jb29yZHMsXG4gICAgICAgICAgY29sb3JzID0gdGhpcy5jb2xvcnM7XG4gICAgY29uc3QgcGkgPSBmaWd1cmUuY29vcmRzO1xuICAgIGNvbnN0IGNpID0gZmlndXJlLmNvbG9ycztcbiAgICBjb25zdCBmaWd1cmVNaW5YID0gTWF0aC5taW4oY29vcmRzW3BpWzBdXVswXSwgY29vcmRzW3BpWzNdXVswXSwgY29vcmRzW3BpWzEyXV1bMF0sIGNvb3Jkc1twaVsxNV1dWzBdKTtcbiAgICBjb25zdCBmaWd1cmVNaW5ZID0gTWF0aC5taW4oY29vcmRzW3BpWzBdXVsxXSwgY29vcmRzW3BpWzNdXVsxXSwgY29vcmRzW3BpWzEyXV1bMV0sIGNvb3Jkc1twaVsxNV1dWzFdKTtcbiAgICBjb25zdCBmaWd1cmVNYXhYID0gTWF0aC5tYXgoY29vcmRzW3BpWzBdXVswXSwgY29vcmRzW3BpWzNdXVswXSwgY29vcmRzW3BpWzEyXV1bMF0sIGNvb3Jkc1twaVsxNV1dWzBdKTtcbiAgICBjb25zdCBmaWd1cmVNYXhZID0gTWF0aC5tYXgoY29vcmRzW3BpWzBdXVsxXSwgY29vcmRzW3BpWzNdXVsxXSwgY29vcmRzW3BpWzEyXV1bMV0sIGNvb3Jkc1twaVsxNV1dWzFdKTtcbiAgICBsZXQgc3BsaXRYQnkgPSBNYXRoLmNlaWwoKGZpZ3VyZU1heFggLSBmaWd1cmVNaW5YKSAqIE1lc2hTaGFkaW5nLlRSSUFOR0xFX0RFTlNJVFkgLyAodGhpcy5ib3VuZHNbMl0gLSB0aGlzLmJvdW5kc1swXSkpO1xuICAgIHNwbGl0WEJ5ID0gTWF0aC5tYXgoTWVzaFNoYWRpbmcuTUlOX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQsIE1hdGgubWluKE1lc2hTaGFkaW5nLk1BWF9TUExJVF9QQVRDSF9DSFVOS1NfQU1PVU5ULCBzcGxpdFhCeSkpO1xuICAgIGxldCBzcGxpdFlCeSA9IE1hdGguY2VpbCgoZmlndXJlTWF4WSAtIGZpZ3VyZU1pblkpICogTWVzaFNoYWRpbmcuVFJJQU5HTEVfREVOU0lUWSAvICh0aGlzLmJvdW5kc1szXSAtIHRoaXMuYm91bmRzWzFdKSk7XG4gICAgc3BsaXRZQnkgPSBNYXRoLm1heChNZXNoU2hhZGluZy5NSU5fU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCwgTWF0aC5taW4oTWVzaFNoYWRpbmcuTUFYX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQsIHNwbGl0WUJ5KSk7XG4gICAgY29uc3QgdmVydGljZXNQZXJSb3cgPSBzcGxpdFhCeSArIDE7XG4gICAgY29uc3QgZmlndXJlQ29vcmRzID0gbmV3IEludDMyQXJyYXkoKHNwbGl0WUJ5ICsgMSkgKiB2ZXJ0aWNlc1BlclJvdyk7XG4gICAgY29uc3QgZmlndXJlQ29sb3JzID0gbmV3IEludDMyQXJyYXkoKHNwbGl0WUJ5ICsgMSkgKiB2ZXJ0aWNlc1BlclJvdyk7XG4gICAgbGV0IGsgPSAwO1xuICAgIGNvbnN0IGNsID0gbmV3IFVpbnQ4QXJyYXkoMyksXG4gICAgICAgICAgY3IgPSBuZXcgVWludDhBcnJheSgzKTtcbiAgICBjb25zdCBjMCA9IGNvbG9yc1tjaVswXV0sXG4gICAgICAgICAgYzEgPSBjb2xvcnNbY2lbMV1dLFxuICAgICAgICAgIGMyID0gY29sb3JzW2NpWzJdXSxcbiAgICAgICAgICBjMyA9IGNvbG9yc1tjaVszXV07XG4gICAgY29uc3QgYlJvdyA9IGdldEIoc3BsaXRZQnkpLFxuICAgICAgICAgIGJDb2wgPSBnZXRCKHNwbGl0WEJ5KTtcblxuICAgIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8PSBzcGxpdFlCeTsgcm93KyspIHtcbiAgICAgIGNsWzBdID0gKGMwWzBdICogKHNwbGl0WUJ5IC0gcm93KSArIGMyWzBdICogcm93KSAvIHNwbGl0WUJ5IHwgMDtcbiAgICAgIGNsWzFdID0gKGMwWzFdICogKHNwbGl0WUJ5IC0gcm93KSArIGMyWzFdICogcm93KSAvIHNwbGl0WUJ5IHwgMDtcbiAgICAgIGNsWzJdID0gKGMwWzJdICogKHNwbGl0WUJ5IC0gcm93KSArIGMyWzJdICogcm93KSAvIHNwbGl0WUJ5IHwgMDtcbiAgICAgIGNyWzBdID0gKGMxWzBdICogKHNwbGl0WUJ5IC0gcm93KSArIGMzWzBdICogcm93KSAvIHNwbGl0WUJ5IHwgMDtcbiAgICAgIGNyWzFdID0gKGMxWzFdICogKHNwbGl0WUJ5IC0gcm93KSArIGMzWzFdICogcm93KSAvIHNwbGl0WUJ5IHwgMDtcbiAgICAgIGNyWzJdID0gKGMxWzJdICogKHNwbGl0WUJ5IC0gcm93KSArIGMzWzJdICogcm93KSAvIHNwbGl0WUJ5IHwgMDtcblxuICAgICAgZm9yIChsZXQgY29sID0gMDsgY29sIDw9IHNwbGl0WEJ5OyBjb2wrKywgaysrKSB7XG4gICAgICAgIGlmICgocm93ID09PSAwIHx8IHJvdyA9PT0gc3BsaXRZQnkpICYmIChjb2wgPT09IDAgfHwgY29sID09PSBzcGxpdFhCeSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB4ID0gMCxcbiAgICAgICAgICAgIHkgPSAwO1xuICAgICAgICBsZXQgcSA9IDA7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gMzsgaSsrKSB7XG4gICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPD0gMzsgaisrLCBxKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG0gPSBiUm93W3Jvd11baV0gKiBiQ29sW2NvbF1bal07XG4gICAgICAgICAgICB4ICs9IGNvb3Jkc1twaVtxXV1bMF0gKiBtO1xuICAgICAgICAgICAgeSArPSBjb29yZHNbcGlbcV1dWzFdICogbTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmaWd1cmVDb29yZHNba10gPSBjb29yZHMubGVuZ3RoO1xuICAgICAgICBjb29yZHMucHVzaChbeCwgeV0pO1xuICAgICAgICBmaWd1cmVDb2xvcnNba10gPSBjb2xvcnMubGVuZ3RoO1xuICAgICAgICBjb25zdCBuZXdDb2xvciA9IG5ldyBVaW50OEFycmF5KDMpO1xuICAgICAgICBuZXdDb2xvclswXSA9IChjbFswXSAqIChzcGxpdFhCeSAtIGNvbCkgKyBjclswXSAqIGNvbCkgLyBzcGxpdFhCeSB8IDA7XG4gICAgICAgIG5ld0NvbG9yWzFdID0gKGNsWzFdICogKHNwbGl0WEJ5IC0gY29sKSArIGNyWzFdICogY29sKSAvIHNwbGl0WEJ5IHwgMDtcbiAgICAgICAgbmV3Q29sb3JbMl0gPSAoY2xbMl0gKiAoc3BsaXRYQnkgLSBjb2wpICsgY3JbMl0gKiBjb2wpIC8gc3BsaXRYQnkgfCAwO1xuICAgICAgICBjb2xvcnMucHVzaChuZXdDb2xvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmlndXJlQ29vcmRzWzBdID0gcGlbMF07XG4gICAgZmlndXJlQ29sb3JzWzBdID0gY2lbMF07XG4gICAgZmlndXJlQ29vcmRzW3NwbGl0WEJ5XSA9IHBpWzNdO1xuICAgIGZpZ3VyZUNvbG9yc1tzcGxpdFhCeV0gPSBjaVsxXTtcbiAgICBmaWd1cmVDb29yZHNbdmVydGljZXNQZXJSb3cgKiBzcGxpdFlCeV0gPSBwaVsxMl07XG4gICAgZmlndXJlQ29sb3JzW3ZlcnRpY2VzUGVyUm93ICogc3BsaXRZQnldID0gY2lbMl07XG4gICAgZmlndXJlQ29vcmRzW3ZlcnRpY2VzUGVyUm93ICogc3BsaXRZQnkgKyBzcGxpdFhCeV0gPSBwaVsxNV07XG4gICAgZmlndXJlQ29sb3JzW3ZlcnRpY2VzUGVyUm93ICogc3BsaXRZQnkgKyBzcGxpdFhCeV0gPSBjaVszXTtcbiAgICB0aGlzLmZpZ3VyZXNbaW5kZXhdID0ge1xuICAgICAgdHlwZTogXCJsYXR0aWNlXCIsXG4gICAgICBjb29yZHM6IGZpZ3VyZUNvb3JkcyxcbiAgICAgIGNvbG9yczogZmlndXJlQ29sb3JzLFxuICAgICAgdmVydGljZXNQZXJSb3dcbiAgICB9O1xuICB9XG5cbiAgX3VwZGF0ZUJvdW5kcygpIHtcbiAgICBsZXQgbWluWCA9IHRoaXMuY29vcmRzWzBdWzBdLFxuICAgICAgICBtaW5ZID0gdGhpcy5jb29yZHNbMF1bMV0sXG4gICAgICAgIG1heFggPSBtaW5YLFxuICAgICAgICBtYXhZID0gbWluWTtcblxuICAgIGZvciAobGV0IGkgPSAxLCBpaSA9IHRoaXMuY29vcmRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGNvbnN0IHggPSB0aGlzLmNvb3Jkc1tpXVswXSxcbiAgICAgICAgICAgIHkgPSB0aGlzLmNvb3Jkc1tpXVsxXTtcbiAgICAgIG1pblggPSBtaW5YID4geCA/IHggOiBtaW5YO1xuICAgICAgbWluWSA9IG1pblkgPiB5ID8geSA6IG1pblk7XG4gICAgICBtYXhYID0gbWF4WCA8IHggPyB4IDogbWF4WDtcbiAgICAgIG1heFkgPSBtYXhZIDwgeSA/IHkgOiBtYXhZO1xuICAgIH1cblxuICAgIHRoaXMuYm91bmRzID0gW21pblgsIG1pblksIG1heFgsIG1heFldO1xuICB9XG5cbiAgX3BhY2tEYXRhKCkge1xuICAgIGxldCBpLCBpaSwgaiwgamo7XG4gICAgY29uc3QgY29vcmRzID0gdGhpcy5jb29yZHM7XG4gICAgY29uc3QgY29vcmRzUGFja2VkID0gbmV3IEZsb2F0MzJBcnJheShjb29yZHMubGVuZ3RoICogMik7XG5cbiAgICBmb3IgKGkgPSAwLCBqID0gMCwgaWkgPSBjb29yZHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgY29uc3QgeHkgPSBjb29yZHNbaV07XG4gICAgICBjb29yZHNQYWNrZWRbaisrXSA9IHh5WzBdO1xuICAgICAgY29vcmRzUGFja2VkW2orK10gPSB4eVsxXTtcbiAgICB9XG5cbiAgICB0aGlzLmNvb3JkcyA9IGNvb3Jkc1BhY2tlZDtcbiAgICBjb25zdCBjb2xvcnMgPSB0aGlzLmNvbG9ycztcbiAgICBjb25zdCBjb2xvcnNQYWNrZWQgPSBuZXcgVWludDhBcnJheShjb2xvcnMubGVuZ3RoICogMyk7XG5cbiAgICBmb3IgKGkgPSAwLCBqID0gMCwgaWkgPSBjb2xvcnMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgY29uc3QgYyA9IGNvbG9yc1tpXTtcbiAgICAgIGNvbG9yc1BhY2tlZFtqKytdID0gY1swXTtcbiAgICAgIGNvbG9yc1BhY2tlZFtqKytdID0gY1sxXTtcbiAgICAgIGNvbG9yc1BhY2tlZFtqKytdID0gY1syXTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbG9ycyA9IGNvbG9yc1BhY2tlZDtcbiAgICBjb25zdCBmaWd1cmVzID0gdGhpcy5maWd1cmVzO1xuXG4gICAgZm9yIChpID0gMCwgaWkgPSBmaWd1cmVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGNvbnN0IGZpZ3VyZSA9IGZpZ3VyZXNbaV0sXG4gICAgICAgICAgICBwcyA9IGZpZ3VyZS5jb29yZHMsXG4gICAgICAgICAgICBjcyA9IGZpZ3VyZS5jb2xvcnM7XG5cbiAgICAgIGZvciAoaiA9IDAsIGpqID0gcHMubGVuZ3RoOyBqIDwgamo7IGorKykge1xuICAgICAgICBwc1tqXSAqPSAyO1xuICAgICAgICBjc1tqXSAqPSAzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldElSKCkge1xuICAgIHJldHVybiBbXCJNZXNoXCIsIHRoaXMuc2hhZGluZ1R5cGUsIHRoaXMuY29vcmRzLCB0aGlzLmNvbG9ycywgdGhpcy5maWd1cmVzLCB0aGlzLmJvdW5kcywgdGhpcy5iYm94LCB0aGlzLmJhY2tncm91bmRdO1xuICB9XG5cbn1cblxuY2xhc3MgRHVtbXlTaGFkaW5nIGV4dGVuZHMgQmFzZVNoYWRpbmcge1xuICBnZXRJUigpIHtcbiAgICByZXR1cm4gW1wiRHVtbXlcIl07XG4gIH1cblxufVxuXG5mdW5jdGlvbiBnZXRUaWxpbmdQYXR0ZXJuSVIob3BlcmF0b3JMaXN0LCBkaWN0LCBjb2xvcikge1xuICBjb25zdCBtYXRyaXggPSBkaWN0LmdldEFycmF5KFwiTWF0cml4XCIpO1xuXG4gIGNvbnN0IGJib3ggPSBfdXRpbC5VdGlsLm5vcm1hbGl6ZVJlY3QoZGljdC5nZXRBcnJheShcIkJCb3hcIikpO1xuXG4gIGNvbnN0IHhzdGVwID0gZGljdC5nZXQoXCJYU3RlcFwiKTtcbiAgY29uc3QgeXN0ZXAgPSBkaWN0LmdldChcIllTdGVwXCIpO1xuICBjb25zdCBwYWludFR5cGUgPSBkaWN0LmdldChcIlBhaW50VHlwZVwiKTtcbiAgY29uc3QgdGlsaW5nVHlwZSA9IGRpY3QuZ2V0KFwiVGlsaW5nVHlwZVwiKTtcblxuICBpZiAoYmJveFsyXSAtIGJib3hbMF0gPT09IDAgfHwgYmJveFszXSAtIGJib3hbMV0gPT09IDApIHtcbiAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYEludmFsaWQgZ2V0VGlsaW5nUGF0dGVybklSIC9CQm94IGFycmF5OiBbJHtiYm94fV0uYCk7XG4gIH1cblxuICByZXR1cm4gW1wiVGlsaW5nUGF0dGVyblwiLCBjb2xvciwgb3BlcmF0b3JMaXN0LCBtYXRyaXgsIGJib3gsIHhzdGVwLCB5c3RlcCwgcGFpbnRUeXBlLCB0aWxpbmdUeXBlXTtcbn1cblxuLyoqKi8gfSksXG4vKiA1NiAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5Qb3N0U2NyaXB0RXZhbHVhdG9yID0gZXhwb3J0cy5Qb3N0U2NyaXB0Q29tcGlsZXIgPSBleHBvcnRzLlBERkZ1bmN0aW9uRmFjdG9yeSA9IHZvaWQgMDtcbmV4cG9ydHMuaXNQREZGdW5jdGlvbiA9IGlzUERGRnVuY3Rpb247XG5cbnZhciBfcHJpbWl0aXZlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNSk7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfcHNfcGFyc2VyID0gX193X3BkZmpzX3JlcXVpcmVfXyg1Nyk7XG5cbnZhciBfaW1hZ2VfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDU4KTtcblxuY2xhc3MgUERGRnVuY3Rpb25GYWN0b3J5IHtcbiAgY29uc3RydWN0b3Ioe1xuICAgIHhyZWYsXG4gICAgaXNFdmFsU3VwcG9ydGVkID0gdHJ1ZVxuICB9KSB7XG4gICAgdGhpcy54cmVmID0geHJlZjtcbiAgICB0aGlzLmlzRXZhbFN1cHBvcnRlZCA9IGlzRXZhbFN1cHBvcnRlZCAhPT0gZmFsc2U7XG4gIH1cblxuICBjcmVhdGUoZm4pIHtcbiAgICBjb25zdCBjYWNoZWRGdW5jdGlvbiA9IHRoaXMuZ2V0Q2FjaGVkKGZuKTtcblxuICAgIGlmIChjYWNoZWRGdW5jdGlvbikge1xuICAgICAgcmV0dXJuIGNhY2hlZEZ1bmN0aW9uO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZEZ1bmN0aW9uID0gUERGRnVuY3Rpb24ucGFyc2Uoe1xuICAgICAgeHJlZjogdGhpcy54cmVmLFxuICAgICAgaXNFdmFsU3VwcG9ydGVkOiB0aGlzLmlzRXZhbFN1cHBvcnRlZCxcbiAgICAgIGZuOiBmbiBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLlJlZiA/IHRoaXMueHJlZi5mZXRjaChmbikgOiBmblxuICAgIH0pO1xuXG4gICAgdGhpcy5fY2FjaGUoZm4sIHBhcnNlZEZ1bmN0aW9uKTtcblxuICAgIHJldHVybiBwYXJzZWRGdW5jdGlvbjtcbiAgfVxuXG4gIGNyZWF0ZUZyb21BcnJheShmbk9iaikge1xuICAgIGNvbnN0IGNhY2hlZEZ1bmN0aW9uID0gdGhpcy5nZXRDYWNoZWQoZm5PYmopO1xuXG4gICAgaWYgKGNhY2hlZEZ1bmN0aW9uKSB7XG4gICAgICByZXR1cm4gY2FjaGVkRnVuY3Rpb247XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkRnVuY3Rpb24gPSBQREZGdW5jdGlvbi5wYXJzZUFycmF5KHtcbiAgICAgIHhyZWY6IHRoaXMueHJlZixcbiAgICAgIGlzRXZhbFN1cHBvcnRlZDogdGhpcy5pc0V2YWxTdXBwb3J0ZWQsXG4gICAgICBmbk9iajogZm5PYmogaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5SZWYgPyB0aGlzLnhyZWYuZmV0Y2goZm5PYmopIDogZm5PYmpcbiAgICB9KTtcblxuICAgIHRoaXMuX2NhY2hlKGZuT2JqLCBwYXJzZWRGdW5jdGlvbik7XG5cbiAgICByZXR1cm4gcGFyc2VkRnVuY3Rpb247XG4gIH1cblxuICBnZXRDYWNoZWQoY2FjaGVLZXkpIHtcbiAgICBsZXQgZm5SZWY7XG5cbiAgICBpZiAoY2FjaGVLZXkgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5SZWYpIHtcbiAgICAgIGZuUmVmID0gY2FjaGVLZXk7XG4gICAgfSBlbHNlIGlmIChjYWNoZUtleSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpIHtcbiAgICAgIGZuUmVmID0gY2FjaGVLZXkub2JqSWQ7XG4gICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKGNhY2hlS2V5KSkge1xuICAgICAgZm5SZWYgPSBjYWNoZUtleS5kaWN0ICYmIGNhY2hlS2V5LmRpY3Qub2JqSWQ7XG4gICAgfVxuXG4gICAgaWYgKGZuUmVmKSB7XG4gICAgICBjb25zdCBsb2NhbEZ1bmN0aW9uID0gdGhpcy5fbG9jYWxGdW5jdGlvbkNhY2hlLmdldEJ5UmVmKGZuUmVmKTtcblxuICAgICAgaWYgKGxvY2FsRnVuY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsRnVuY3Rpb247XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBfY2FjaGUoY2FjaGVLZXksIHBhcnNlZEZ1bmN0aW9uKSB7XG4gICAgaWYgKCFwYXJzZWRGdW5jdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQREZGdW5jdGlvbkZhY3RvcnkuX2NhY2hlIC0gZXhwZWN0ZWQgXCJwYXJzZWRGdW5jdGlvblwiIGFyZ3VtZW50LicpO1xuICAgIH1cblxuICAgIGxldCBmblJlZjtcblxuICAgIGlmIChjYWNoZUtleSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLlJlZikge1xuICAgICAgZm5SZWYgPSBjYWNoZUtleTtcbiAgICB9IGVsc2UgaWYgKGNhY2hlS2V5IGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCkge1xuICAgICAgZm5SZWYgPSBjYWNoZUtleS5vYmpJZDtcbiAgICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkoY2FjaGVLZXkpKSB7XG4gICAgICBmblJlZiA9IGNhY2hlS2V5LmRpY3QgJiYgY2FjaGVLZXkuZGljdC5vYmpJZDtcbiAgICB9XG5cbiAgICBpZiAoZm5SZWYpIHtcbiAgICAgIHRoaXMuX2xvY2FsRnVuY3Rpb25DYWNoZS5zZXQobnVsbCwgZm5SZWYsIHBhcnNlZEZ1bmN0aW9uKTtcbiAgICB9XG4gIH1cblxuICBnZXQgX2xvY2FsRnVuY3Rpb25DYWNoZSgpIHtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJfbG9jYWxGdW5jdGlvbkNhY2hlXCIsIG5ldyBfaW1hZ2VfdXRpbHMuTG9jYWxGdW5jdGlvbkNhY2hlKCkpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5QREZGdW5jdGlvbkZhY3RvcnkgPSBQREZGdW5jdGlvbkZhY3Rvcnk7XG5cbmZ1bmN0aW9uIHRvTnVtYmVyQXJyYXkoYXJyKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBsZW5ndGggPSBhcnIubGVuZ3RoO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBpZiAodHlwZW9mIGFycltpXSAhPT0gXCJudW1iZXJcIikge1xuICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IEFycmF5KGxlbmd0aCk7XG5cbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbGVuZ3RoOyBqKyspIHtcbiAgICAgICAgcmVzdWx0W2pdID0gK2FycltqXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXJyO1xufVxuXG5jbGFzcyBQREZGdW5jdGlvbiB7XG4gIHN0YXRpYyBnZXRTYW1wbGVBcnJheShzaXplLCBvdXRwdXRTaXplLCBicHMsIHN0cmVhbSkge1xuICAgIGxldCBpLCBpaTtcbiAgICBsZXQgbGVuZ3RoID0gMTtcblxuICAgIGZvciAoaSA9IDAsIGlpID0gc2l6ZS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBsZW5ndGggKj0gc2l6ZVtpXTtcbiAgICB9XG5cbiAgICBsZW5ndGggKj0gb3V0cHV0U2l6ZTtcbiAgICBjb25zdCBhcnJheSA9IG5ldyBBcnJheShsZW5ndGgpO1xuICAgIGxldCBjb2RlU2l6ZSA9IDA7XG4gICAgbGV0IGNvZGVCdWYgPSAwO1xuICAgIGNvbnN0IHNhbXBsZU11bCA9IDEuMCAvICgyLjAgKiogYnBzIC0gMSk7XG4gICAgY29uc3Qgc3RyQnl0ZXMgPSBzdHJlYW0uZ2V0Qnl0ZXMoKGxlbmd0aCAqIGJwcyArIDcpIC8gOCk7XG4gICAgbGV0IHN0cklkeCA9IDA7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHdoaWxlIChjb2RlU2l6ZSA8IGJwcykge1xuICAgICAgICBjb2RlQnVmIDw8PSA4O1xuICAgICAgICBjb2RlQnVmIHw9IHN0ckJ5dGVzW3N0cklkeCsrXTtcbiAgICAgICAgY29kZVNpemUgKz0gODtcbiAgICAgIH1cblxuICAgICAgY29kZVNpemUgLT0gYnBzO1xuICAgICAgYXJyYXlbaV0gPSAoY29kZUJ1ZiA+PiBjb2RlU2l6ZSkgKiBzYW1wbGVNdWw7XG4gICAgICBjb2RlQnVmICY9ICgxIDw8IGNvZGVTaXplKSAtIDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG5cbiAgc3RhdGljIHBhcnNlKHtcbiAgICB4cmVmLFxuICAgIGlzRXZhbFN1cHBvcnRlZCxcbiAgICBmblxuICB9KSB7XG4gICAgY29uc3QgZGljdCA9IGZuLmRpY3QgfHwgZm47XG4gICAgY29uc3QgdHlwZU51bSA9IGRpY3QuZ2V0KFwiRnVuY3Rpb25UeXBlXCIpO1xuXG4gICAgc3dpdGNoICh0eXBlTnVtKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdFNhbXBsZWQoe1xuICAgICAgICAgIHhyZWYsXG4gICAgICAgICAgaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgICAgIGZuLFxuICAgICAgICAgIGRpY3RcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgMTpcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0SW50ZXJwb2xhdGVkKHtcbiAgICAgICAgICB4cmVmLFxuICAgICAgICAgIGlzRXZhbFN1cHBvcnRlZCxcbiAgICAgICAgICBkaWN0XG4gICAgICAgIH0pO1xuXG4gICAgICBjYXNlIDM6XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdFN0aWNoZWQoe1xuICAgICAgICAgIHhyZWYsXG4gICAgICAgICAgaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgICAgIGRpY3RcbiAgICAgICAgfSk7XG5cbiAgICAgIGNhc2UgNDpcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0UG9zdFNjcmlwdCh7XG4gICAgICAgICAgeHJlZixcbiAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQsXG4gICAgICAgICAgZm4sXG4gICAgICAgICAgZGljdFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJVbmtub3duIHR5cGUgb2YgZnVuY3Rpb25cIik7XG4gIH1cblxuICBzdGF0aWMgcGFyc2VBcnJheSh7XG4gICAgeHJlZixcbiAgICBpc0V2YWxTdXBwb3J0ZWQsXG4gICAgZm5PYmpcbiAgfSkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShmbk9iaikpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlKHtcbiAgICAgICAgeHJlZixcbiAgICAgICAgaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgICBmbjogZm5PYmpcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGZuQXJyYXkgPSBbXTtcblxuICAgIGZvciAobGV0IGogPSAwLCBqaiA9IGZuT2JqLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgIGZuQXJyYXkucHVzaCh0aGlzLnBhcnNlKHtcbiAgICAgICAgeHJlZixcbiAgICAgICAgaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgICBmbjogeHJlZi5mZXRjaElmUmVmKGZuT2JqW2pdKVxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbiAoc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGZuQXJyYXkubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICBmbkFycmF5W2ldKHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0ICsgaSk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBjb25zdHJ1Y3RTYW1wbGVkKHtcbiAgICB4cmVmLFxuICAgIGlzRXZhbFN1cHBvcnRlZCxcbiAgICBmbixcbiAgICBkaWN0XG4gIH0pIHtcbiAgICBmdW5jdGlvbiB0b011bHRpQXJyYXkoYXJyKSB7XG4gICAgICBjb25zdCBpbnB1dExlbmd0aCA9IGFyci5sZW5ndGg7XG4gICAgICBjb25zdCBvdXQgPSBbXTtcbiAgICAgIGxldCBpbmRleCA9IDA7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRMZW5ndGg7IGkgKz0gMikge1xuICAgICAgICBvdXRbaW5kZXgrK10gPSBbYXJyW2ldLCBhcnJbaSArIDFdXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnRlcnBvbGF0ZSh4LCB4bWluLCB4bWF4LCB5bWluLCB5bWF4KSB7XG4gICAgICByZXR1cm4geW1pbiArICh4IC0geG1pbikgKiAoKHltYXggLSB5bWluKSAvICh4bWF4IC0geG1pbikpO1xuICAgIH1cblxuICAgIGxldCBkb21haW4gPSB0b051bWJlckFycmF5KGRpY3QuZ2V0QXJyYXkoXCJEb21haW5cIikpO1xuICAgIGxldCByYW5nZSA9IHRvTnVtYmVyQXJyYXkoZGljdC5nZXRBcnJheShcIlJhbmdlXCIpKTtcblxuICAgIGlmICghZG9tYWluIHx8ICFyYW5nZSkge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiTm8gZG9tYWluIG9yIHJhbmdlXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGlucHV0U2l6ZSA9IGRvbWFpbi5sZW5ndGggLyAyO1xuICAgIGNvbnN0IG91dHB1dFNpemUgPSByYW5nZS5sZW5ndGggLyAyO1xuICAgIGRvbWFpbiA9IHRvTXVsdGlBcnJheShkb21haW4pO1xuICAgIHJhbmdlID0gdG9NdWx0aUFycmF5KHJhbmdlKTtcbiAgICBjb25zdCBzaXplID0gdG9OdW1iZXJBcnJheShkaWN0LmdldEFycmF5KFwiU2l6ZVwiKSk7XG4gICAgY29uc3QgYnBzID0gZGljdC5nZXQoXCJCaXRzUGVyU2FtcGxlXCIpO1xuICAgIGNvbnN0IG9yZGVyID0gZGljdC5nZXQoXCJPcmRlclwiKSB8fCAxO1xuXG4gICAgaWYgKG9yZGVyICE9PSAxKSB7XG4gICAgICAoMCwgX3V0aWwuaW5mbykoXCJObyBzdXBwb3J0IGZvciBjdWJpYyBzcGxpbmUgaW50ZXJwb2xhdGlvbjogXCIgKyBvcmRlcik7XG4gICAgfVxuXG4gICAgbGV0IGVuY29kZSA9IHRvTnVtYmVyQXJyYXkoZGljdC5nZXRBcnJheShcIkVuY29kZVwiKSk7XG5cbiAgICBpZiAoIWVuY29kZSkge1xuICAgICAgZW5jb2RlID0gW107XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXRTaXplOyArK2kpIHtcbiAgICAgICAgZW5jb2RlLnB1c2goWzAsIHNpemVbaV0gLSAxXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGVuY29kZSA9IHRvTXVsdGlBcnJheShlbmNvZGUpO1xuICAgIH1cblxuICAgIGxldCBkZWNvZGUgPSB0b051bWJlckFycmF5KGRpY3QuZ2V0QXJyYXkoXCJEZWNvZGVcIikpO1xuXG4gICAgaWYgKCFkZWNvZGUpIHtcbiAgICAgIGRlY29kZSA9IHJhbmdlO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWNvZGUgPSB0b011bHRpQXJyYXkoZGVjb2RlKTtcbiAgICB9XG5cbiAgICBjb25zdCBzYW1wbGVzID0gdGhpcy5nZXRTYW1wbGVBcnJheShzaXplLCBvdXRwdXRTaXplLCBicHMsIGZuKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gY29uc3RydWN0U2FtcGxlZEZuKHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0KSB7XG4gICAgICBjb25zdCBjdWJlVmVydGljZXMgPSAxIDw8IGlucHV0U2l6ZTtcbiAgICAgIGNvbnN0IGN1YmVOID0gbmV3IEZsb2F0NjRBcnJheShjdWJlVmVydGljZXMpO1xuICAgICAgY29uc3QgY3ViZVZlcnRleCA9IG5ldyBVaW50MzJBcnJheShjdWJlVmVydGljZXMpO1xuICAgICAgbGV0IGksIGo7XG5cbiAgICAgIGZvciAoaiA9IDA7IGogPCBjdWJlVmVydGljZXM7IGorKykge1xuICAgICAgICBjdWJlTltqXSA9IDE7XG4gICAgICB9XG5cbiAgICAgIGxldCBrID0gb3V0cHV0U2l6ZSxcbiAgICAgICAgICBwb3MgPSAxO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgaW5wdXRTaXplOyArK2kpIHtcbiAgICAgICAgY29uc3QgZG9tYWluXzJpID0gZG9tYWluW2ldWzBdO1xuICAgICAgICBjb25zdCBkb21haW5fMmlfMSA9IGRvbWFpbltpXVsxXTtcbiAgICAgICAgY29uc3QgeGkgPSBNYXRoLm1pbihNYXRoLm1heChzcmNbc3JjT2Zmc2V0ICsgaV0sIGRvbWFpbl8yaSksIGRvbWFpbl8yaV8xKTtcbiAgICAgICAgbGV0IGUgPSBpbnRlcnBvbGF0ZSh4aSwgZG9tYWluXzJpLCBkb21haW5fMmlfMSwgZW5jb2RlW2ldWzBdLCBlbmNvZGVbaV1bMV0pO1xuICAgICAgICBjb25zdCBzaXplX2kgPSBzaXplW2ldO1xuICAgICAgICBlID0gTWF0aC5taW4oTWF0aC5tYXgoZSwgMCksIHNpemVfaSAtIDEpO1xuICAgICAgICBjb25zdCBlMCA9IGUgPCBzaXplX2kgLSAxID8gTWF0aC5mbG9vcihlKSA6IGUgLSAxO1xuICAgICAgICBjb25zdCBuMCA9IGUwICsgMSAtIGU7XG4gICAgICAgIGNvbnN0IG4xID0gZSAtIGUwO1xuICAgICAgICBjb25zdCBvZmZzZXQwID0gZTAgKiBrO1xuICAgICAgICBjb25zdCBvZmZzZXQxID0gb2Zmc2V0MCArIGs7XG5cbiAgICAgICAgZm9yIChqID0gMDsgaiA8IGN1YmVWZXJ0aWNlczsgaisrKSB7XG4gICAgICAgICAgaWYgKGogJiBwb3MpIHtcbiAgICAgICAgICAgIGN1YmVOW2pdICo9IG4xO1xuICAgICAgICAgICAgY3ViZVZlcnRleFtqXSArPSBvZmZzZXQxO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjdWJlTltqXSAqPSBuMDtcbiAgICAgICAgICAgIGN1YmVWZXJ0ZXhbal0gKz0gb2Zmc2V0MDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBrICo9IHNpemVfaTtcbiAgICAgICAgcG9zIDw8PSAxO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGogPSAwOyBqIDwgb3V0cHV0U2l6ZTsgKytqKSB7XG4gICAgICAgIGxldCByaiA9IDA7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGN1YmVWZXJ0aWNlczsgaSsrKSB7XG4gICAgICAgICAgcmogKz0gc2FtcGxlc1tjdWJlVmVydGV4W2ldICsgal0gKiBjdWJlTltpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJqID0gaW50ZXJwb2xhdGUocmosIDAsIDEsIGRlY29kZVtqXVswXSwgZGVjb2RlW2pdWzFdKTtcbiAgICAgICAgZGVzdFtkZXN0T2Zmc2V0ICsgal0gPSBNYXRoLm1pbihNYXRoLm1heChyaiwgcmFuZ2Vbal1bMF0pLCByYW5nZVtqXVsxXSk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBjb25zdHJ1Y3RJbnRlcnBvbGF0ZWQoe1xuICAgIHhyZWYsXG4gICAgaXNFdmFsU3VwcG9ydGVkLFxuICAgIGRpY3RcbiAgfSkge1xuICAgIGNvbnN0IGMwID0gdG9OdW1iZXJBcnJheShkaWN0LmdldEFycmF5KFwiQzBcIikpIHx8IFswXTtcbiAgICBjb25zdCBjMSA9IHRvTnVtYmVyQXJyYXkoZGljdC5nZXRBcnJheShcIkMxXCIpKSB8fCBbMV07XG4gICAgY29uc3QgbiA9IGRpY3QuZ2V0KFwiTlwiKTtcbiAgICBjb25zdCBkaWZmID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBjMC5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICBkaWZmLnB1c2goYzFbaV0gLSBjMFtpXSk7XG4gICAgfVxuXG4gICAgY29uc3QgbGVuZ3RoID0gZGlmZi5sZW5ndGg7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNvbnN0cnVjdEludGVycG9sYXRlZEZuKHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0KSB7XG4gICAgICBjb25zdCB4ID0gbiA9PT0gMSA/IHNyY1tzcmNPZmZzZXRdIDogc3JjW3NyY09mZnNldF0gKiogbjtcblxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsZW5ndGg7ICsraikge1xuICAgICAgICBkZXN0W2Rlc3RPZmZzZXQgKyBqXSA9IGMwW2pdICsgeCAqIGRpZmZbal07XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBjb25zdHJ1Y3RTdGljaGVkKHtcbiAgICB4cmVmLFxuICAgIGlzRXZhbFN1cHBvcnRlZCxcbiAgICBkaWN0XG4gIH0pIHtcbiAgICBjb25zdCBkb21haW4gPSB0b051bWJlckFycmF5KGRpY3QuZ2V0QXJyYXkoXCJEb21haW5cIikpO1xuXG4gICAgaWYgKCFkb21haW4pIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIk5vIGRvbWFpblwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnB1dFNpemUgPSBkb21haW4ubGVuZ3RoIC8gMjtcblxuICAgIGlmIChpbnB1dFNpemUgIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkJhZCBkb21haW4gZm9yIHN0aWNoZWQgZnVuY3Rpb25cIik7XG4gICAgfVxuXG4gICAgY29uc3QgZm5SZWZzID0gZGljdC5nZXQoXCJGdW5jdGlvbnNcIik7XG4gICAgY29uc3QgZm5zID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBmblJlZnMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgZm5zLnB1c2godGhpcy5wYXJzZSh7XG4gICAgICAgIHhyZWYsXG4gICAgICAgIGlzRXZhbFN1cHBvcnRlZCxcbiAgICAgICAgZm46IHhyZWYuZmV0Y2hJZlJlZihmblJlZnNbaV0pXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgY29uc3QgYm91bmRzID0gdG9OdW1iZXJBcnJheShkaWN0LmdldEFycmF5KFwiQm91bmRzXCIpKTtcbiAgICBjb25zdCBlbmNvZGUgPSB0b051bWJlckFycmF5KGRpY3QuZ2V0QXJyYXkoXCJFbmNvZGVcIikpO1xuICAgIGNvbnN0IHRtcEJ1ZiA9IG5ldyBGbG9hdDMyQXJyYXkoMSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNvbnN0cnVjdFN0aWNoZWRGbihzcmMsIHNyY09mZnNldCwgZGVzdCwgZGVzdE9mZnNldCkge1xuICAgICAgY29uc3QgY2xpcCA9IGZ1bmN0aW9uIGNvbnN0cnVjdFN0aWNoZWRGcm9tSVJDbGlwKHYsIG1pbiwgbWF4KSB7XG4gICAgICAgIGlmICh2ID4gbWF4KSB7XG4gICAgICAgICAgdiA9IG1heDtcbiAgICAgICAgfSBlbHNlIGlmICh2IDwgbWluKSB7XG4gICAgICAgICAgdiA9IG1pbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2O1xuICAgICAgfTtcblxuICAgICAgY29uc3QgdiA9IGNsaXAoc3JjW3NyY09mZnNldF0sIGRvbWFpblswXSwgZG9tYWluWzFdKTtcbiAgICAgIGNvbnN0IGxlbmd0aCA9IGJvdW5kcy5sZW5ndGg7XG4gICAgICBsZXQgaTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICh2IDwgYm91bmRzW2ldKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGV0IGRtaW4gPSBkb21haW5bMF07XG5cbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICBkbWluID0gYm91bmRzW2kgLSAxXTtcbiAgICAgIH1cblxuICAgICAgbGV0IGRtYXggPSBkb21haW5bMV07XG5cbiAgICAgIGlmIChpIDwgYm91bmRzLmxlbmd0aCkge1xuICAgICAgICBkbWF4ID0gYm91bmRzW2ldO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBybWluID0gZW5jb2RlWzIgKiBpXTtcbiAgICAgIGNvbnN0IHJtYXggPSBlbmNvZGVbMiAqIGkgKyAxXTtcbiAgICAgIHRtcEJ1ZlswXSA9IGRtaW4gPT09IGRtYXggPyBybWluIDogcm1pbiArICh2IC0gZG1pbikgKiAocm1heCAtIHJtaW4pIC8gKGRtYXggLSBkbWluKTtcbiAgICAgIGZuc1tpXSh0bXBCdWYsIDAsIGRlc3QsIGRlc3RPZmZzZXQpO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgY29uc3RydWN0UG9zdFNjcmlwdCh7XG4gICAgeHJlZixcbiAgICBpc0V2YWxTdXBwb3J0ZWQsXG4gICAgZm4sXG4gICAgZGljdFxuICB9KSB7XG4gICAgY29uc3QgZG9tYWluID0gdG9OdW1iZXJBcnJheShkaWN0LmdldEFycmF5KFwiRG9tYWluXCIpKTtcbiAgICBjb25zdCByYW5nZSA9IHRvTnVtYmVyQXJyYXkoZGljdC5nZXRBcnJheShcIlJhbmdlXCIpKTtcblxuICAgIGlmICghZG9tYWluKSB7XG4gICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJObyBkb21haW4uXCIpO1xuICAgIH1cblxuICAgIGlmICghcmFuZ2UpIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIk5vIHJhbmdlLlwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBsZXhlciA9IG5ldyBfcHNfcGFyc2VyLlBvc3RTY3JpcHRMZXhlcihmbik7XG4gICAgY29uc3QgcGFyc2VyID0gbmV3IF9wc19wYXJzZXIuUG9zdFNjcmlwdFBhcnNlcihsZXhlcik7XG4gICAgY29uc3QgY29kZSA9IHBhcnNlci5wYXJzZSgpO1xuXG4gICAgaWYgKGlzRXZhbFN1cHBvcnRlZCAmJiBfdXRpbC5Jc0V2YWxTdXBwb3J0ZWRDYWNoZWQudmFsdWUpIHtcbiAgICAgIGNvbnN0IGNvbXBpbGVkID0gbmV3IFBvc3RTY3JpcHRDb21waWxlcigpLmNvbXBpbGUoY29kZSwgZG9tYWluLCByYW5nZSk7XG5cbiAgICAgIGlmIChjb21waWxlZCkge1xuICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uKFwic3JjXCIsIFwic3JjT2Zmc2V0XCIsIFwiZGVzdFwiLCBcImRlc3RPZmZzZXRcIiwgY29tcGlsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgICgwLCBfdXRpbC5pbmZvKShcIlVuYWJsZSB0byBjb21waWxlIFBTIGZ1bmN0aW9uXCIpO1xuICAgIGNvbnN0IG51bU91dHB1dHMgPSByYW5nZS5sZW5ndGggPj4gMTtcbiAgICBjb25zdCBudW1JbnB1dHMgPSBkb21haW4ubGVuZ3RoID4+IDE7XG4gICAgY29uc3QgZXZhbHVhdG9yID0gbmV3IFBvc3RTY3JpcHRFdmFsdWF0b3IoY29kZSk7XG4gICAgY29uc3QgY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIGNvbnN0IE1BWF9DQUNIRV9TSVpFID0gMjA0OCAqIDQ7XG4gICAgbGV0IGNhY2hlX2F2YWlsYWJsZSA9IE1BWF9DQUNIRV9TSVpFO1xuICAgIGNvbnN0IHRtcEJ1ZiA9IG5ldyBGbG9hdDMyQXJyYXkobnVtSW5wdXRzKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gY29uc3RydWN0UG9zdFNjcmlwdEZuKHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0KSB7XG4gICAgICBsZXQgaSwgdmFsdWU7XG4gICAgICBsZXQga2V5ID0gXCJcIjtcbiAgICAgIGNvbnN0IGlucHV0ID0gdG1wQnVmO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtSW5wdXRzOyBpKyspIHtcbiAgICAgICAgdmFsdWUgPSBzcmNbc3JjT2Zmc2V0ICsgaV07XG4gICAgICAgIGlucHV0W2ldID0gdmFsdWU7XG4gICAgICAgIGtleSArPSB2YWx1ZSArIFwiX1wiO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjYWNoZWRWYWx1ZSA9IGNhY2hlW2tleV07XG5cbiAgICAgIGlmIChjYWNoZWRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGRlc3Quc2V0KGNhY2hlZFZhbHVlLCBkZXN0T2Zmc2V0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvdXRwdXQgPSBuZXcgRmxvYXQzMkFycmF5KG51bU91dHB1dHMpO1xuICAgICAgY29uc3Qgc3RhY2sgPSBldmFsdWF0b3IuZXhlY3V0ZShpbnB1dCk7XG4gICAgICBjb25zdCBzdGFja0luZGV4ID0gc3RhY2subGVuZ3RoIC0gbnVtT3V0cHV0cztcblxuICAgICAgZm9yIChpID0gMDsgaSA8IG51bU91dHB1dHM7IGkrKykge1xuICAgICAgICB2YWx1ZSA9IHN0YWNrW3N0YWNrSW5kZXggKyBpXTtcbiAgICAgICAgbGV0IGJvdW5kID0gcmFuZ2VbaSAqIDJdO1xuXG4gICAgICAgIGlmICh2YWx1ZSA8IGJvdW5kKSB7XG4gICAgICAgICAgdmFsdWUgPSBib3VuZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBib3VuZCA9IHJhbmdlW2kgKiAyICsgMV07XG5cbiAgICAgICAgICBpZiAodmFsdWUgPiBib3VuZCkge1xuICAgICAgICAgICAgdmFsdWUgPSBib3VuZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBvdXRwdXRbaV0gPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNhY2hlX2F2YWlsYWJsZSA+IDApIHtcbiAgICAgICAgY2FjaGVfYXZhaWxhYmxlLS07XG4gICAgICAgIGNhY2hlW2tleV0gPSBvdXRwdXQ7XG4gICAgICB9XG5cbiAgICAgIGRlc3Quc2V0KG91dHB1dCwgZGVzdE9mZnNldCk7XG4gICAgfTtcbiAgfVxuXG59XG5cbmZ1bmN0aW9uIGlzUERGRnVuY3Rpb24odikge1xuICBsZXQgZm5EaWN0O1xuXG4gIGlmICh0eXBlb2YgdiAhPT0gXCJvYmplY3RcIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KSh2KSkge1xuICAgIGZuRGljdCA9IHY7XG4gIH0gZWxzZSBpZiAoKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKSh2KSkge1xuICAgIGZuRGljdCA9IHYuZGljdDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gZm5EaWN0LmhhcyhcIkZ1bmN0aW9uVHlwZVwiKTtcbn1cblxuY2xhc3MgUG9zdFNjcmlwdFN0YWNrIHtcbiAgc3RhdGljIGdldCBNQVhfU1RBQ0tfU0laRSgpIHtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJNQVhfU1RBQ0tfU0laRVwiLCAxMDApO1xuICB9XG5cbiAgY29uc3RydWN0b3IoaW5pdGlhbFN0YWNrKSB7XG4gICAgdGhpcy5zdGFjayA9ICFpbml0aWFsU3RhY2sgPyBbXSA6IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGluaXRpYWxTdGFjaywgMCk7XG4gIH1cblxuICBwdXNoKHZhbHVlKSB7XG4gICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoID49IFBvc3RTY3JpcHRTdGFjay5NQVhfU1RBQ0tfU0laRSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUG9zdFNjcmlwdCBmdW5jdGlvbiBzdGFjayBvdmVyZmxvdy5cIik7XG4gICAgfVxuXG4gICAgdGhpcy5zdGFjay5wdXNoKHZhbHVlKTtcbiAgfVxuXG4gIHBvcCgpIHtcbiAgICBpZiAodGhpcy5zdGFjay5sZW5ndGggPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUG9zdFNjcmlwdCBmdW5jdGlvbiBzdGFjayB1bmRlcmZsb3cuXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnN0YWNrLnBvcCgpO1xuICB9XG5cbiAgY29weShuKSB7XG4gICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoICsgbiA+PSBQb3N0U2NyaXB0U3RhY2suTUFYX1NUQUNLX1NJWkUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlBvc3RTY3JpcHQgZnVuY3Rpb24gc3RhY2sgb3ZlcmZsb3cuXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YWNrID0gdGhpcy5zdGFjaztcblxuICAgIGZvciAobGV0IGkgPSBzdGFjay5sZW5ndGggLSBuLCBqID0gbiAtIDE7IGogPj0gMDsgai0tLCBpKyspIHtcbiAgICAgIHN0YWNrLnB1c2goc3RhY2tbaV0pO1xuICAgIH1cbiAgfVxuXG4gIGluZGV4KG4pIHtcbiAgICB0aGlzLnB1c2godGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIG4gLSAxXSk7XG4gIH1cblxuICByb2xsKG4sIHApIHtcbiAgICBjb25zdCBzdGFjayA9IHRoaXMuc3RhY2s7XG4gICAgY29uc3QgbCA9IHN0YWNrLmxlbmd0aCAtIG47XG4gICAgY29uc3QgciA9IHN0YWNrLmxlbmd0aCAtIDE7XG4gICAgY29uc3QgYyA9IGwgKyAocCAtIE1hdGguZmxvb3IocCAvIG4pICogbik7XG5cbiAgICBmb3IgKGxldCBpID0gbCwgaiA9IHI7IGkgPCBqOyBpKyssIGotLSkge1xuICAgICAgY29uc3QgdCA9IHN0YWNrW2ldO1xuICAgICAgc3RhY2tbaV0gPSBzdGFja1tqXTtcbiAgICAgIHN0YWNrW2pdID0gdDtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gbCwgaiA9IGMgLSAxOyBpIDwgajsgaSsrLCBqLS0pIHtcbiAgICAgIGNvbnN0IHQgPSBzdGFja1tpXTtcbiAgICAgIHN0YWNrW2ldID0gc3RhY2tbal07XG4gICAgICBzdGFja1tqXSA9IHQ7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IGMsIGogPSByOyBpIDwgajsgaSsrLCBqLS0pIHtcbiAgICAgIGNvbnN0IHQgPSBzdGFja1tpXTtcbiAgICAgIHN0YWNrW2ldID0gc3RhY2tbal07XG4gICAgICBzdGFja1tqXSA9IHQ7XG4gICAgfVxuICB9XG5cbn1cblxuY2xhc3MgUG9zdFNjcmlwdEV2YWx1YXRvciB7XG4gIGNvbnN0cnVjdG9yKG9wZXJhdG9ycykge1xuICAgIHRoaXMub3BlcmF0b3JzID0gb3BlcmF0b3JzO1xuICB9XG5cbiAgZXhlY3V0ZShpbml0aWFsU3RhY2spIHtcbiAgICBjb25zdCBzdGFjayA9IG5ldyBQb3N0U2NyaXB0U3RhY2soaW5pdGlhbFN0YWNrKTtcbiAgICBsZXQgY291bnRlciA9IDA7XG4gICAgY29uc3Qgb3BlcmF0b3JzID0gdGhpcy5vcGVyYXRvcnM7XG4gICAgY29uc3QgbGVuZ3RoID0gb3BlcmF0b3JzLmxlbmd0aDtcbiAgICBsZXQgb3BlcmF0b3IsIGEsIGI7XG5cbiAgICB3aGlsZSAoY291bnRlciA8IGxlbmd0aCkge1xuICAgICAgb3BlcmF0b3IgPSBvcGVyYXRvcnNbY291bnRlcisrXTtcblxuICAgICAgaWYgKHR5cGVvZiBvcGVyYXRvciA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBzdGFjay5wdXNoKG9wZXJhdG9yKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAob3BlcmF0b3IpIHtcbiAgICAgICAgY2FzZSBcImp6XCI6XG4gICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcblxuICAgICAgICAgIGlmICghYSkge1xuICAgICAgICAgICAgY291bnRlciA9IGI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcImpcIjpcbiAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgY291bnRlciA9IGE7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcImFic1wiOlxuICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICBzdGFjay5wdXNoKE1hdGguYWJzKGEpKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiYWRkXCI6XG4gICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICBzdGFjay5wdXNoKGEgKyBiKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiYW5kXCI6XG4gICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcblxuICAgICAgICAgIGlmICgoMCwgX3V0aWwuaXNCb29sKShhKSAmJiAoMCwgX3V0aWwuaXNCb29sKShiKSkge1xuICAgICAgICAgICAgc3RhY2sucHVzaChhICYmIGIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGEgJiBiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiYXRhblwiOlxuICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICBzdGFjay5wdXNoKE1hdGguYXRhbihhKSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcImJpdHNoaWZ0XCI6XG4gICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcblxuICAgICAgICAgIGlmIChhID4gMCkge1xuICAgICAgICAgICAgc3RhY2sucHVzaChhIDw8IGIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGEgPj4gYik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcImNlaWxpbmdcIjpcbiAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgc3RhY2sucHVzaChNYXRoLmNlaWwoYSkpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJjb3B5XCI6XG4gICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgIHN0YWNrLmNvcHkoYSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcImNvc1wiOlxuICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICBzdGFjay5wdXNoKE1hdGguY29zKGEpKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiY3ZpXCI6XG4gICAgICAgICAgYSA9IHN0YWNrLnBvcCgpIHwgMDtcbiAgICAgICAgICBzdGFjay5wdXNoKGEpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJjdnJcIjpcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiZGl2XCI6XG4gICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICBzdGFjay5wdXNoKGEgLyBiKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiZHVwXCI6XG4gICAgICAgICAgc3RhY2suY29weSgxKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiZXFcIjpcbiAgICAgICAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgIHN0YWNrLnB1c2goYSA9PT0gYik7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcImV4Y2hcIjpcbiAgICAgICAgICBzdGFjay5yb2xsKDIsIDEpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJleHBcIjpcbiAgICAgICAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgIHN0YWNrLnB1c2goYSAqKiBiKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiZmFsc2VcIjpcbiAgICAgICAgICBzdGFjay5wdXNoKGZhbHNlKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiZmxvb3JcIjpcbiAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgc3RhY2sucHVzaChNYXRoLmZsb29yKGEpKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiZ2VcIjpcbiAgICAgICAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgIHN0YWNrLnB1c2goYSA+PSBiKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiZ3RcIjpcbiAgICAgICAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgIHN0YWNrLnB1c2goYSA+IGIpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJpZGl2XCI6XG4gICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICBzdGFjay5wdXNoKGEgLyBiIHwgMCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcImluZGV4XCI6XG4gICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgIHN0YWNrLmluZGV4KGEpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJsZVwiOlxuICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgc3RhY2sucHVzaChhIDw9IGIpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJsblwiOlxuICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICBzdGFjay5wdXNoKE1hdGgubG9nKGEpKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwibG9nXCI6XG4gICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgIHN0YWNrLnB1c2goTWF0aC5sb2coYSkgLyBNYXRoLkxOMTApO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJsdFwiOlxuICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgc3RhY2sucHVzaChhIDwgYik7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIm1vZFwiOlxuICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgc3RhY2sucHVzaChhICUgYik7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIm11bFwiOlxuICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgc3RhY2sucHVzaChhICogYik7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIm5lXCI6XG4gICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICBzdGFjay5wdXNoKGEgIT09IGIpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJuZWdcIjpcbiAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgc3RhY2sucHVzaCgtYSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIm5vdFwiOlxuICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcblxuICAgICAgICAgIGlmICgoMCwgX3V0aWwuaXNCb29sKShhKSkge1xuICAgICAgICAgICAgc3RhY2sucHVzaCghYSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YWNrLnB1c2gofmEpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJvclwiOlxuICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG5cbiAgICAgICAgICBpZiAoKDAsIF91dGlsLmlzQm9vbCkoYSkgJiYgKDAsIF91dGlsLmlzQm9vbCkoYikpIHtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goYSB8fCBiKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RhY2sucHVzaChhIHwgYik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcInBvcFwiOlxuICAgICAgICAgIHN0YWNrLnBvcCgpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJyb2xsXCI6XG4gICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICBzdGFjay5yb2xsKGEsIGIpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJyb3VuZFwiOlxuICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICBzdGFjay5wdXNoKE1hdGgucm91bmQoYSkpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJzaW5cIjpcbiAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgc3RhY2sucHVzaChNYXRoLnNpbihhKSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcInNxcnRcIjpcbiAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgc3RhY2sucHVzaChNYXRoLnNxcnQoYSkpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJzdWJcIjpcbiAgICAgICAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgIHN0YWNrLnB1c2goYSAtIGIpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJ0cnVlXCI6XG4gICAgICAgICAgc3RhY2sucHVzaCh0cnVlKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwidHJ1bmNhdGVcIjpcbiAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgYSA9IGEgPCAwID8gTWF0aC5jZWlsKGEpIDogTWF0aC5mbG9vcihhKTtcbiAgICAgICAgICBzdGFjay5wdXNoKGEpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJ4b3JcIjpcbiAgICAgICAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuXG4gICAgICAgICAgaWYgKCgwLCBfdXRpbC5pc0Jvb2wpKGEpICYmICgwLCBfdXRpbC5pc0Jvb2wpKGIpKSB7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGEgIT09IGIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGEgXiBiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgVW5rbm93biBvcGVyYXRvciAke29wZXJhdG9yfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdGFjay5zdGFjaztcbiAgfVxuXG59XG5cbmV4cG9ydHMuUG9zdFNjcmlwdEV2YWx1YXRvciA9IFBvc3RTY3JpcHRFdmFsdWF0b3I7XG5cbmNvbnN0IFBvc3RTY3JpcHRDb21waWxlciA9IGZ1bmN0aW9uIFBvc3RTY3JpcHRDb21waWxlckNsb3N1cmUoKSB7XG4gIGNsYXNzIEFzdE5vZGUge1xuICAgIGNvbnN0cnVjdG9yKHR5cGUpIHtcbiAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgfVxuXG4gICAgdmlzaXQodmlzaXRvcikge1xuICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcImFic3RyYWN0IG1ldGhvZFwiKTtcbiAgICB9XG5cbiAgfVxuXG4gIGNsYXNzIEFzdEFyZ3VtZW50IGV4dGVuZHMgQXN0Tm9kZSB7XG4gICAgY29uc3RydWN0b3IoaW5kZXgsIG1pbiwgbWF4KSB7XG4gICAgICBzdXBlcihcImFyZ3NcIik7XG4gICAgICB0aGlzLmluZGV4ID0gaW5kZXg7XG4gICAgICB0aGlzLm1pbiA9IG1pbjtcbiAgICAgIHRoaXMubWF4ID0gbWF4O1xuICAgIH1cblxuICAgIHZpc2l0KHZpc2l0b3IpIHtcbiAgICAgIHZpc2l0b3IudmlzaXRBcmd1bWVudCh0aGlzKTtcbiAgICB9XG5cbiAgfVxuXG4gIGNsYXNzIEFzdExpdGVyYWwgZXh0ZW5kcyBBc3ROb2RlIHtcbiAgICBjb25zdHJ1Y3RvcihudW1iZXIpIHtcbiAgICAgIHN1cGVyKFwibGl0ZXJhbFwiKTtcbiAgICAgIHRoaXMubnVtYmVyID0gbnVtYmVyO1xuICAgICAgdGhpcy5taW4gPSBudW1iZXI7XG4gICAgICB0aGlzLm1heCA9IG51bWJlcjtcbiAgICB9XG5cbiAgICB2aXNpdCh2aXNpdG9yKSB7XG4gICAgICB2aXNpdG9yLnZpc2l0TGl0ZXJhbCh0aGlzKTtcbiAgICB9XG5cbiAgfVxuXG4gIGNsYXNzIEFzdEJpbmFyeU9wZXJhdGlvbiBleHRlbmRzIEFzdE5vZGUge1xuICAgIGNvbnN0cnVjdG9yKG9wLCBhcmcxLCBhcmcyLCBtaW4sIG1heCkge1xuICAgICAgc3VwZXIoXCJiaW5hcnlcIik7XG4gICAgICB0aGlzLm9wID0gb3A7XG4gICAgICB0aGlzLmFyZzEgPSBhcmcxO1xuICAgICAgdGhpcy5hcmcyID0gYXJnMjtcbiAgICAgIHRoaXMubWluID0gbWluO1xuICAgICAgdGhpcy5tYXggPSBtYXg7XG4gICAgfVxuXG4gICAgdmlzaXQodmlzaXRvcikge1xuICAgICAgdmlzaXRvci52aXNpdEJpbmFyeU9wZXJhdGlvbih0aGlzKTtcbiAgICB9XG5cbiAgfVxuXG4gIGNsYXNzIEFzdE1pbiBleHRlbmRzIEFzdE5vZGUge1xuICAgIGNvbnN0cnVjdG9yKGFyZywgbWF4KSB7XG4gICAgICBzdXBlcihcIm1heFwiKTtcbiAgICAgIHRoaXMuYXJnID0gYXJnO1xuICAgICAgdGhpcy5taW4gPSBhcmcubWluO1xuICAgICAgdGhpcy5tYXggPSBtYXg7XG4gICAgfVxuXG4gICAgdmlzaXQodmlzaXRvcikge1xuICAgICAgdmlzaXRvci52aXNpdE1pbih0aGlzKTtcbiAgICB9XG5cbiAgfVxuXG4gIGNsYXNzIEFzdFZhcmlhYmxlIGV4dGVuZHMgQXN0Tm9kZSB7XG4gICAgY29uc3RydWN0b3IoaW5kZXgsIG1pbiwgbWF4KSB7XG4gICAgICBzdXBlcihcInZhclwiKTtcbiAgICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbiAgICAgIHRoaXMubWluID0gbWluO1xuICAgICAgdGhpcy5tYXggPSBtYXg7XG4gICAgfVxuXG4gICAgdmlzaXQodmlzaXRvcikge1xuICAgICAgdmlzaXRvci52aXNpdFZhcmlhYmxlKHRoaXMpO1xuICAgIH1cblxuICB9XG5cbiAgY2xhc3MgQXN0VmFyaWFibGVEZWZpbml0aW9uIGV4dGVuZHMgQXN0Tm9kZSB7XG4gICAgY29uc3RydWN0b3IodmFyaWFibGUsIGFyZykge1xuICAgICAgc3VwZXIoXCJkZWZpbml0aW9uXCIpO1xuICAgICAgdGhpcy52YXJpYWJsZSA9IHZhcmlhYmxlO1xuICAgICAgdGhpcy5hcmcgPSBhcmc7XG4gICAgfVxuXG4gICAgdmlzaXQodmlzaXRvcikge1xuICAgICAgdmlzaXRvci52aXNpdFZhcmlhYmxlRGVmaW5pdGlvbih0aGlzKTtcbiAgICB9XG5cbiAgfVxuXG4gIGNsYXNzIEV4cHJlc3Npb25CdWlsZGVyVmlzaXRvciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICB0aGlzLnBhcnRzID0gW107XG4gICAgfVxuXG4gICAgdmlzaXRBcmd1bWVudChhcmcpIHtcbiAgICAgIHRoaXMucGFydHMucHVzaChcIk1hdGgubWF4KFwiLCBhcmcubWluLCBcIiwgTWF0aC5taW4oXCIsIGFyZy5tYXgsIFwiLCBzcmNbc3JjT2Zmc2V0ICsgXCIsIGFyZy5pbmRleCwgXCJdKSlcIik7XG4gICAgfVxuXG4gICAgdmlzaXRWYXJpYWJsZSh2YXJpYWJsZSkge1xuICAgICAgdGhpcy5wYXJ0cy5wdXNoKFwidlwiLCB2YXJpYWJsZS5pbmRleCk7XG4gICAgfVxuXG4gICAgdmlzaXRMaXRlcmFsKGxpdGVyYWwpIHtcbiAgICAgIHRoaXMucGFydHMucHVzaChsaXRlcmFsLm51bWJlcik7XG4gICAgfVxuXG4gICAgdmlzaXRCaW5hcnlPcGVyYXRpb24ob3BlcmF0aW9uKSB7XG4gICAgICB0aGlzLnBhcnRzLnB1c2goXCIoXCIpO1xuICAgICAgb3BlcmF0aW9uLmFyZzEudmlzaXQodGhpcyk7XG4gICAgICB0aGlzLnBhcnRzLnB1c2goXCIgXCIsIG9wZXJhdGlvbi5vcCwgXCIgXCIpO1xuICAgICAgb3BlcmF0aW9uLmFyZzIudmlzaXQodGhpcyk7XG4gICAgICB0aGlzLnBhcnRzLnB1c2goXCIpXCIpO1xuICAgIH1cblxuICAgIHZpc2l0VmFyaWFibGVEZWZpbml0aW9uKGRlZmluaXRpb24pIHtcbiAgICAgIHRoaXMucGFydHMucHVzaChcInZhciBcIik7XG4gICAgICBkZWZpbml0aW9uLnZhcmlhYmxlLnZpc2l0KHRoaXMpO1xuICAgICAgdGhpcy5wYXJ0cy5wdXNoKFwiID0gXCIpO1xuICAgICAgZGVmaW5pdGlvbi5hcmcudmlzaXQodGhpcyk7XG4gICAgICB0aGlzLnBhcnRzLnB1c2goXCI7XCIpO1xuICAgIH1cblxuICAgIHZpc2l0TWluKG1heCkge1xuICAgICAgdGhpcy5wYXJ0cy5wdXNoKFwiTWF0aC5taW4oXCIpO1xuICAgICAgbWF4LmFyZy52aXNpdCh0aGlzKTtcbiAgICAgIHRoaXMucGFydHMucHVzaChcIiwgXCIsIG1heC5tYXgsIFwiKVwiKTtcbiAgICB9XG5cbiAgICB0b1N0cmluZygpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhcnRzLmpvaW4oXCJcIik7XG4gICAgfVxuXG4gIH1cblxuICBmdW5jdGlvbiBidWlsZEFkZE9wZXJhdGlvbihudW0xLCBudW0yKSB7XG4gICAgaWYgKG51bTIudHlwZSA9PT0gXCJsaXRlcmFsXCIgJiYgbnVtMi5udW1iZXIgPT09IDApIHtcbiAgICAgIHJldHVybiBudW0xO1xuICAgIH1cblxuICAgIGlmIChudW0xLnR5cGUgPT09IFwibGl0ZXJhbFwiICYmIG51bTEubnVtYmVyID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVtMjtcbiAgICB9XG5cbiAgICBpZiAobnVtMi50eXBlID09PSBcImxpdGVyYWxcIiAmJiBudW0xLnR5cGUgPT09IFwibGl0ZXJhbFwiKSB7XG4gICAgICByZXR1cm4gbmV3IEFzdExpdGVyYWwobnVtMS5udW1iZXIgKyBudW0yLm51bWJlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBBc3RCaW5hcnlPcGVyYXRpb24oXCIrXCIsIG51bTEsIG51bTIsIG51bTEubWluICsgbnVtMi5taW4sIG51bTEubWF4ICsgbnVtMi5tYXgpO1xuICB9XG5cbiAgZnVuY3Rpb24gYnVpbGRNdWxPcGVyYXRpb24obnVtMSwgbnVtMikge1xuICAgIGlmIChudW0yLnR5cGUgPT09IFwibGl0ZXJhbFwiKSB7XG4gICAgICBpZiAobnVtMi5udW1iZXIgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBc3RMaXRlcmFsKDApO1xuICAgICAgfSBlbHNlIGlmIChudW0yLm51bWJlciA9PT0gMSkge1xuICAgICAgICByZXR1cm4gbnVtMTtcbiAgICAgIH0gZWxzZSBpZiAobnVtMS50eXBlID09PSBcImxpdGVyYWxcIikge1xuICAgICAgICByZXR1cm4gbmV3IEFzdExpdGVyYWwobnVtMS5udW1iZXIgKiBudW0yLm51bWJlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG51bTEudHlwZSA9PT0gXCJsaXRlcmFsXCIpIHtcbiAgICAgIGlmIChudW0xLm51bWJlciA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbmV3IEFzdExpdGVyYWwoMCk7XG4gICAgICB9IGVsc2UgaWYgKG51bTEubnVtYmVyID09PSAxKSB7XG4gICAgICAgIHJldHVybiBudW0yO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1pbiA9IE1hdGgubWluKG51bTEubWluICogbnVtMi5taW4sIG51bTEubWluICogbnVtMi5tYXgsIG51bTEubWF4ICogbnVtMi5taW4sIG51bTEubWF4ICogbnVtMi5tYXgpO1xuICAgIGNvbnN0IG1heCA9IE1hdGgubWF4KG51bTEubWluICogbnVtMi5taW4sIG51bTEubWluICogbnVtMi5tYXgsIG51bTEubWF4ICogbnVtMi5taW4sIG51bTEubWF4ICogbnVtMi5tYXgpO1xuICAgIHJldHVybiBuZXcgQXN0QmluYXJ5T3BlcmF0aW9uKFwiKlwiLCBudW0xLCBudW0yLCBtaW4sIG1heCk7XG4gIH1cblxuICBmdW5jdGlvbiBidWlsZFN1Yk9wZXJhdGlvbihudW0xLCBudW0yKSB7XG4gICAgaWYgKG51bTIudHlwZSA9PT0gXCJsaXRlcmFsXCIpIHtcbiAgICAgIGlmIChudW0yLm51bWJlciA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbnVtMTtcbiAgICAgIH0gZWxzZSBpZiAobnVtMS50eXBlID09PSBcImxpdGVyYWxcIikge1xuICAgICAgICByZXR1cm4gbmV3IEFzdExpdGVyYWwobnVtMS5udW1iZXIgLSBudW0yLm51bWJlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG51bTIudHlwZSA9PT0gXCJiaW5hcnlcIiAmJiBudW0yLm9wID09PSBcIi1cIiAmJiBudW0xLnR5cGUgPT09IFwibGl0ZXJhbFwiICYmIG51bTEubnVtYmVyID09PSAxICYmIG51bTIuYXJnMS50eXBlID09PSBcImxpdGVyYWxcIiAmJiBudW0yLmFyZzEubnVtYmVyID09PSAxKSB7XG4gICAgICByZXR1cm4gbnVtMi5hcmcyO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgQXN0QmluYXJ5T3BlcmF0aW9uKFwiLVwiLCBudW0xLCBudW0yLCBudW0xLm1pbiAtIG51bTIubWF4LCBudW0xLm1heCAtIG51bTIubWluKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJ1aWxkTWluT3BlcmF0aW9uKG51bTEsIG1heCkge1xuICAgIGlmIChudW0xLm1pbiA+PSBtYXgpIHtcbiAgICAgIHJldHVybiBuZXcgQXN0TGl0ZXJhbChtYXgpO1xuICAgIH0gZWxzZSBpZiAobnVtMS5tYXggPD0gbWF4KSB7XG4gICAgICByZXR1cm4gbnVtMTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEFzdE1pbihudW0xLCBtYXgpO1xuICB9XG5cbiAgY2xhc3MgUG9zdFNjcmlwdENvbXBpbGVyIHtcbiAgICBjb21waWxlKGNvZGUsIGRvbWFpbiwgcmFuZ2UpIHtcbiAgICAgIGNvbnN0IHN0YWNrID0gW107XG4gICAgICBjb25zdCBpbnN0cnVjdGlvbnMgPSBbXTtcbiAgICAgIGNvbnN0IGlucHV0U2l6ZSA9IGRvbWFpbi5sZW5ndGggPj4gMSxcbiAgICAgICAgICAgIG91dHB1dFNpemUgPSByYW5nZS5sZW5ndGggPj4gMTtcbiAgICAgIGxldCBsYXN0UmVnaXN0ZXIgPSAwO1xuICAgICAgbGV0IG4sIGo7XG4gICAgICBsZXQgbnVtMSwgbnVtMiwgYXN0MSwgYXN0MiwgdG1wVmFyLCBpdGVtO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0U2l6ZTsgaSsrKSB7XG4gICAgICAgIHN0YWNrLnB1c2gobmV3IEFzdEFyZ3VtZW50KGksIGRvbWFpbltpICogMl0sIGRvbWFpbltpICogMiArIDFdKSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGNvZGUubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICBpdGVtID0gY29kZVtpXTtcblxuICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICBzdGFjay5wdXNoKG5ldyBBc3RMaXRlcmFsKGl0ZW0pKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAoaXRlbSkge1xuICAgICAgICAgIGNhc2UgXCJhZGRcIjpcbiAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBudW0yID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBudW0xID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICBzdGFjay5wdXNoKGJ1aWxkQWRkT3BlcmF0aW9uKG51bTEsIG51bTIpKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcImN2clwiOlxuICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIm11bFwiOlxuICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG51bTIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIG51bTEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goYnVpbGRNdWxPcGVyYXRpb24obnVtMSwgbnVtMikpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwic3ViXCI6XG4gICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbnVtMiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgbnVtMSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChidWlsZFN1Yk9wZXJhdGlvbihudW0xLCBudW0yKSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJleGNoXCI6XG4gICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYXN0MSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgYXN0MiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChhc3QxLCBhc3QyKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcInBvcFwiOlxuICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiaW5kZXhcIjpcbiAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBudW0xID0gc3RhY2sucG9wKCk7XG5cbiAgICAgICAgICAgIGlmIChudW0xLnR5cGUgIT09IFwibGl0ZXJhbFwiKSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBuID0gbnVtMS5udW1iZXI7XG5cbiAgICAgICAgICAgIGlmIChuIDwgMCB8fCAhTnVtYmVyLmlzSW50ZWdlcihuKSB8fCBzdGFjay5sZW5ndGggPCBuKSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3QxID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gbiAtIDFdO1xuXG4gICAgICAgICAgICBpZiAoYXN0MS50eXBlID09PSBcImxpdGVyYWxcIiB8fCBhc3QxLnR5cGUgPT09IFwidmFyXCIpIHtcbiAgICAgICAgICAgICAgc3RhY2sucHVzaChhc3QxKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRtcFZhciA9IG5ldyBBc3RWYXJpYWJsZShsYXN0UmVnaXN0ZXIrKywgYXN0MS5taW4sIGFzdDEubWF4KTtcbiAgICAgICAgICAgIHN0YWNrW3N0YWNrLmxlbmd0aCAtIG4gLSAxXSA9IHRtcFZhcjtcbiAgICAgICAgICAgIHN0YWNrLnB1c2godG1wVmFyKTtcbiAgICAgICAgICAgIGluc3RydWN0aW9ucy5wdXNoKG5ldyBBc3RWYXJpYWJsZURlZmluaXRpb24odG1wVmFyLCBhc3QxKSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJkdXBcIjpcbiAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGNvZGVbaSArIDFdID09PSBcIm51bWJlclwiICYmIGNvZGVbaSArIDJdID09PSBcImd0XCIgJiYgY29kZVtpICsgM10gPT09IGkgKyA3ICYmIGNvZGVbaSArIDRdID09PSBcImp6XCIgJiYgY29kZVtpICsgNV0gPT09IFwicG9wXCIgJiYgY29kZVtpICsgNl0gPT09IGNvZGVbaSArIDFdKSB7XG4gICAgICAgICAgICAgIG51bTEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgc3RhY2sucHVzaChidWlsZE1pbk9wZXJhdGlvbihudW0xLCBjb2RlW2kgKyAxXSkpO1xuICAgICAgICAgICAgICBpICs9IDY7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBhc3QxID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG5cbiAgICAgICAgICAgIGlmIChhc3QxLnR5cGUgPT09IFwibGl0ZXJhbFwiIHx8IGFzdDEudHlwZSA9PT0gXCJ2YXJcIikge1xuICAgICAgICAgICAgICBzdGFjay5wdXNoKGFzdDEpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdG1wVmFyID0gbmV3IEFzdFZhcmlhYmxlKGxhc3RSZWdpc3RlcisrLCBhc3QxLm1pbiwgYXN0MS5tYXgpO1xuICAgICAgICAgICAgc3RhY2tbc3RhY2subGVuZ3RoIC0gMV0gPSB0bXBWYXI7XG4gICAgICAgICAgICBzdGFjay5wdXNoKHRtcFZhcik7XG4gICAgICAgICAgICBpbnN0cnVjdGlvbnMucHVzaChuZXcgQXN0VmFyaWFibGVEZWZpbml0aW9uKHRtcFZhciwgYXN0MSkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwicm9sbFwiOlxuICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG51bTIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgIG51bTEgPSBzdGFjay5wb3AoKTtcblxuICAgICAgICAgICAgaWYgKG51bTIudHlwZSAhPT0gXCJsaXRlcmFsXCIgfHwgbnVtMS50eXBlICE9PSBcImxpdGVyYWxcIikge1xuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaiA9IG51bTIubnVtYmVyO1xuICAgICAgICAgICAgbiA9IG51bTEubnVtYmVyO1xuXG4gICAgICAgICAgICBpZiAobiA8PSAwIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKG4pIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKGopIHx8IHN0YWNrLmxlbmd0aCA8IG4pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGogPSAoaiAlIG4gKyBuKSAlIG47XG5cbiAgICAgICAgICAgIGlmIChqID09PSAwKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShzdGFjaywgc3RhY2suc3BsaWNlKHN0YWNrLmxlbmd0aCAtIG4sIG4gLSBqKSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc3RhY2subGVuZ3RoICE9PSBvdXRwdXRTaXplKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXN1bHQgPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBpbnN0cnVjdGlvbiBvZiBpbnN0cnVjdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgc3RhdGVtZW50QnVpbGRlciA9IG5ldyBFeHByZXNzaW9uQnVpbGRlclZpc2l0b3IoKTtcbiAgICAgICAgaW5zdHJ1Y3Rpb24udmlzaXQoc3RhdGVtZW50QnVpbGRlcik7XG4gICAgICAgIHJlc3VsdC5wdXNoKHN0YXRlbWVudEJ1aWxkZXIudG9TdHJpbmcoKSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHN0YWNrLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgY29uc3QgZXhwciA9IHN0YWNrW2ldLFxuICAgICAgICAgICAgICBzdGF0ZW1lbnRCdWlsZGVyID0gbmV3IEV4cHJlc3Npb25CdWlsZGVyVmlzaXRvcigpO1xuICAgICAgICBleHByLnZpc2l0KHN0YXRlbWVudEJ1aWxkZXIpO1xuICAgICAgICBjb25zdCBtaW4gPSByYW5nZVtpICogMl0sXG4gICAgICAgICAgICAgIG1heCA9IHJhbmdlW2kgKiAyICsgMV07XG4gICAgICAgIGNvbnN0IG91dCA9IFtzdGF0ZW1lbnRCdWlsZGVyLnRvU3RyaW5nKCldO1xuXG4gICAgICAgIGlmIChtaW4gPiBleHByLm1pbikge1xuICAgICAgICAgIG91dC51bnNoaWZ0KFwiTWF0aC5tYXgoXCIsIG1pbiwgXCIsIFwiKTtcbiAgICAgICAgICBvdXQucHVzaChcIilcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWF4IDwgZXhwci5tYXgpIHtcbiAgICAgICAgICBvdXQudW5zaGlmdChcIk1hdGgubWluKFwiLCBtYXgsIFwiLCBcIik7XG4gICAgICAgICAgb3V0LnB1c2goXCIpXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgb3V0LnVuc2hpZnQoXCJkZXN0W2Rlc3RPZmZzZXQgKyBcIiwgaSwgXCJdID0gXCIpO1xuICAgICAgICBvdXQucHVzaChcIjtcIik7XG4gICAgICAgIHJlc3VsdC5wdXNoKG91dC5qb2luKFwiXCIpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdC5qb2luKFwiXFxuXCIpO1xuICAgIH1cblxuICB9XG5cbiAgcmV0dXJuIFBvc3RTY3JpcHRDb21waWxlcjtcbn0oKTtcblxuZXhwb3J0cy5Qb3N0U2NyaXB0Q29tcGlsZXIgPSBQb3N0U2NyaXB0Q29tcGlsZXI7XG5cbi8qKiovIH0pLFxuLyogNTcgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuUG9zdFNjcmlwdFBhcnNlciA9IGV4cG9ydHMuUG9zdFNjcmlwdExleGVyID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX3ByaW1pdGl2ZXMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDUpO1xuXG52YXIgX2NvcmVfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDkpO1xuXG5jbGFzcyBQb3N0U2NyaXB0UGFyc2VyIHtcbiAgY29uc3RydWN0b3IobGV4ZXIpIHtcbiAgICB0aGlzLmxleGVyID0gbGV4ZXI7XG4gICAgdGhpcy5vcGVyYXRvcnMgPSBbXTtcbiAgICB0aGlzLnRva2VuID0gbnVsbDtcbiAgICB0aGlzLnByZXYgPSBudWxsO1xuICB9XG5cbiAgbmV4dFRva2VuKCkge1xuICAgIHRoaXMucHJldiA9IHRoaXMudG9rZW47XG4gICAgdGhpcy50b2tlbiA9IHRoaXMubGV4ZXIuZ2V0VG9rZW4oKTtcbiAgfVxuXG4gIGFjY2VwdCh0eXBlKSB7XG4gICAgaWYgKHRoaXMudG9rZW4udHlwZSA9PT0gdHlwZSkge1xuICAgICAgdGhpcy5uZXh0VG9rZW4oKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGV4cGVjdCh0eXBlKSB7XG4gICAgaWYgKHRoaXMuYWNjZXB0KHR5cGUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYFVuZXhwZWN0ZWQgc3ltYm9sOiBmb3VuZCAke3RoaXMudG9rZW4udHlwZX0gZXhwZWN0ZWQgJHt0eXBlfS5gKTtcbiAgfVxuXG4gIHBhcnNlKCkge1xuICAgIHRoaXMubmV4dFRva2VuKCk7XG4gICAgdGhpcy5leHBlY3QoUG9zdFNjcmlwdFRva2VuVHlwZXMuTEJSQUNFKTtcbiAgICB0aGlzLnBhcnNlQmxvY2soKTtcbiAgICB0aGlzLmV4cGVjdChQb3N0U2NyaXB0VG9rZW5UeXBlcy5SQlJBQ0UpO1xuICAgIHJldHVybiB0aGlzLm9wZXJhdG9ycztcbiAgfVxuXG4gIHBhcnNlQmxvY2soKSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmICh0aGlzLmFjY2VwdChQb3N0U2NyaXB0VG9rZW5UeXBlcy5OVU1CRVIpKSB7XG4gICAgICAgIHRoaXMub3BlcmF0b3JzLnB1c2godGhpcy5wcmV2LnZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5hY2NlcHQoUG9zdFNjcmlwdFRva2VuVHlwZXMuT1BFUkFUT1IpKSB7XG4gICAgICAgIHRoaXMub3BlcmF0b3JzLnB1c2godGhpcy5wcmV2LnZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5hY2NlcHQoUG9zdFNjcmlwdFRva2VuVHlwZXMuTEJSQUNFKSkge1xuICAgICAgICB0aGlzLnBhcnNlQ29uZGl0aW9uKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcGFyc2VDb25kaXRpb24oKSB7XG4gICAgY29uc3QgY29uZGl0aW9uTG9jYXRpb24gPSB0aGlzLm9wZXJhdG9ycy5sZW5ndGg7XG4gICAgdGhpcy5vcGVyYXRvcnMucHVzaChudWxsLCBudWxsKTtcbiAgICB0aGlzLnBhcnNlQmxvY2soKTtcbiAgICB0aGlzLmV4cGVjdChQb3N0U2NyaXB0VG9rZW5UeXBlcy5SQlJBQ0UpO1xuXG4gICAgaWYgKHRoaXMuYWNjZXB0KFBvc3RTY3JpcHRUb2tlblR5cGVzLklGKSkge1xuICAgICAgdGhpcy5vcGVyYXRvcnNbY29uZGl0aW9uTG9jYXRpb25dID0gdGhpcy5vcGVyYXRvcnMubGVuZ3RoO1xuICAgICAgdGhpcy5vcGVyYXRvcnNbY29uZGl0aW9uTG9jYXRpb24gKyAxXSA9IFwianpcIjtcbiAgICB9IGVsc2UgaWYgKHRoaXMuYWNjZXB0KFBvc3RTY3JpcHRUb2tlblR5cGVzLkxCUkFDRSkpIHtcbiAgICAgIGNvbnN0IGp1bXBMb2NhdGlvbiA9IHRoaXMub3BlcmF0b3JzLmxlbmd0aDtcbiAgICAgIHRoaXMub3BlcmF0b3JzLnB1c2gobnVsbCwgbnVsbCk7XG4gICAgICBjb25zdCBlbmRPZlRydWUgPSB0aGlzLm9wZXJhdG9ycy5sZW5ndGg7XG4gICAgICB0aGlzLnBhcnNlQmxvY2soKTtcbiAgICAgIHRoaXMuZXhwZWN0KFBvc3RTY3JpcHRUb2tlblR5cGVzLlJCUkFDRSk7XG4gICAgICB0aGlzLmV4cGVjdChQb3N0U2NyaXB0VG9rZW5UeXBlcy5JRkVMU0UpO1xuICAgICAgdGhpcy5vcGVyYXRvcnNbanVtcExvY2F0aW9uXSA9IHRoaXMub3BlcmF0b3JzLmxlbmd0aDtcbiAgICAgIHRoaXMub3BlcmF0b3JzW2p1bXBMb2NhdGlvbiArIDFdID0gXCJqXCI7XG4gICAgICB0aGlzLm9wZXJhdG9yc1tjb25kaXRpb25Mb2NhdGlvbl0gPSBlbmRPZlRydWU7XG4gICAgICB0aGlzLm9wZXJhdG9yc1tjb25kaXRpb25Mb2NhdGlvbiArIDFdID0gXCJqelwiO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJQUyBGdW5jdGlvbjogZXJyb3IgcGFyc2luZyBjb25kaXRpb25hbC5cIik7XG4gICAgfVxuICB9XG5cbn1cblxuZXhwb3J0cy5Qb3N0U2NyaXB0UGFyc2VyID0gUG9zdFNjcmlwdFBhcnNlcjtcbmNvbnN0IFBvc3RTY3JpcHRUb2tlblR5cGVzID0ge1xuICBMQlJBQ0U6IDAsXG4gIFJCUkFDRTogMSxcbiAgTlVNQkVSOiAyLFxuICBPUEVSQVRPUjogMyxcbiAgSUY6IDQsXG4gIElGRUxTRTogNVxufTtcblxuY2xhc3MgUG9zdFNjcmlwdFRva2VuIHtcbiAgc3RhdGljIGdldCBvcENhY2hlKCkge1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIm9wQ2FjaGVcIiwgT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcih0eXBlLCB2YWx1ZSkge1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgc3RhdGljIGdldE9wZXJhdG9yKG9wKSB7XG4gICAgY29uc3Qgb3BWYWx1ZSA9IFBvc3RTY3JpcHRUb2tlbi5vcENhY2hlW29wXTtcblxuICAgIGlmIChvcFZhbHVlKSB7XG4gICAgICByZXR1cm4gb3BWYWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gUG9zdFNjcmlwdFRva2VuLm9wQ2FjaGVbb3BdID0gbmV3IFBvc3RTY3JpcHRUb2tlbihQb3N0U2NyaXB0VG9rZW5UeXBlcy5PUEVSQVRPUiwgb3ApO1xuICB9XG5cbiAgc3RhdGljIGdldCBMQlJBQ0UoKSB7XG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiTEJSQUNFXCIsIG5ldyBQb3N0U2NyaXB0VG9rZW4oUG9zdFNjcmlwdFRva2VuVHlwZXMuTEJSQUNFLCBcIntcIikpO1xuICB9XG5cbiAgc3RhdGljIGdldCBSQlJBQ0UoKSB7XG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiUkJSQUNFXCIsIG5ldyBQb3N0U2NyaXB0VG9rZW4oUG9zdFNjcmlwdFRva2VuVHlwZXMuUkJSQUNFLCBcIn1cIikpO1xuICB9XG5cbiAgc3RhdGljIGdldCBJRigpIHtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJJRlwiLCBuZXcgUG9zdFNjcmlwdFRva2VuKFBvc3RTY3JpcHRUb2tlblR5cGVzLklGLCBcIklGXCIpKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgSUZFTFNFKCkge1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIklGRUxTRVwiLCBuZXcgUG9zdFNjcmlwdFRva2VuKFBvc3RTY3JpcHRUb2tlblR5cGVzLklGRUxTRSwgXCJJRkVMU0VcIikpO1xuICB9XG5cbn1cblxuY2xhc3MgUG9zdFNjcmlwdExleGVyIHtcbiAgY29uc3RydWN0b3Ioc3RyZWFtKSB7XG4gICAgdGhpcy5zdHJlYW0gPSBzdHJlYW07XG4gICAgdGhpcy5uZXh0Q2hhcigpO1xuICAgIHRoaXMuc3RyQnVmID0gW107XG4gIH1cblxuICBuZXh0Q2hhcigpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50Q2hhciA9IHRoaXMuc3RyZWFtLmdldEJ5dGUoKTtcbiAgfVxuXG4gIGdldFRva2VuKCkge1xuICAgIGxldCBjb21tZW50ID0gZmFsc2U7XG4gICAgbGV0IGNoID0gdGhpcy5jdXJyZW50Q2hhcjtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAoY2ggPCAwKSB7XG4gICAgICAgIHJldHVybiBfcHJpbWl0aXZlcy5FT0Y7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb21tZW50KSB7XG4gICAgICAgIGlmIChjaCA9PT0gMHgwYSB8fCBjaCA9PT0gMHgwZCkge1xuICAgICAgICAgIGNvbW1lbnQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgyNSkge1xuICAgICAgICBjb21tZW50ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoISgwLCBfY29yZV91dGlscy5pc1doaXRlU3BhY2UpKGNoKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChjaCB8IDApIHtcbiAgICAgIGNhc2UgMHgzMDpcbiAgICAgIGNhc2UgMHgzMTpcbiAgICAgIGNhc2UgMHgzMjpcbiAgICAgIGNhc2UgMHgzMzpcbiAgICAgIGNhc2UgMHgzNDpcbiAgICAgIGNhc2UgMHgzNTpcbiAgICAgIGNhc2UgMHgzNjpcbiAgICAgIGNhc2UgMHgzNzpcbiAgICAgIGNhc2UgMHgzODpcbiAgICAgIGNhc2UgMHgzOTpcbiAgICAgIGNhc2UgMHgyYjpcbiAgICAgIGNhc2UgMHgyZDpcbiAgICAgIGNhc2UgMHgyZTpcbiAgICAgICAgcmV0dXJuIG5ldyBQb3N0U2NyaXB0VG9rZW4oUG9zdFNjcmlwdFRva2VuVHlwZXMuTlVNQkVSLCB0aGlzLmdldE51bWJlcigpKTtcblxuICAgICAgY2FzZSAweDdiOlxuICAgICAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgIHJldHVybiBQb3N0U2NyaXB0VG9rZW4uTEJSQUNFO1xuXG4gICAgICBjYXNlIDB4N2Q6XG4gICAgICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgcmV0dXJuIFBvc3RTY3JpcHRUb2tlbi5SQlJBQ0U7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RyQnVmID0gdGhpcy5zdHJCdWY7XG4gICAgc3RyQnVmLmxlbmd0aCA9IDA7XG4gICAgc3RyQnVmWzBdID0gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XG5cbiAgICB3aGlsZSAoKGNoID0gdGhpcy5uZXh0Q2hhcigpKSA+PSAwICYmIChjaCA+PSAweDQxICYmIGNoIDw9IDB4NWEgfHwgY2ggPj0gMHg2MSAmJiBjaCA8PSAweDdhKSkge1xuICAgICAgc3RyQnVmLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpO1xuICAgIH1cblxuICAgIGNvbnN0IHN0ciA9IHN0ckJ1Zi5qb2luKFwiXCIpO1xuXG4gICAgc3dpdGNoIChzdHIudG9Mb3dlckNhc2UoKSkge1xuICAgICAgY2FzZSBcImlmXCI6XG4gICAgICAgIHJldHVybiBQb3N0U2NyaXB0VG9rZW4uSUY7XG5cbiAgICAgIGNhc2UgXCJpZmVsc2VcIjpcbiAgICAgICAgcmV0dXJuIFBvc3RTY3JpcHRUb2tlbi5JRkVMU0U7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBQb3N0U2NyaXB0VG9rZW4uZ2V0T3BlcmF0b3Ioc3RyKTtcbiAgICB9XG4gIH1cblxuICBnZXROdW1iZXIoKSB7XG4gICAgbGV0IGNoID0gdGhpcy5jdXJyZW50Q2hhcjtcbiAgICBjb25zdCBzdHJCdWYgPSB0aGlzLnN0ckJ1ZjtcbiAgICBzdHJCdWYubGVuZ3RoID0gMDtcbiAgICBzdHJCdWZbMF0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTtcblxuICAgIHdoaWxlICgoY2ggPSB0aGlzLm5leHRDaGFyKCkpID49IDApIHtcbiAgICAgIGlmIChjaCA+PSAweDMwICYmIGNoIDw9IDB4MzkgfHwgY2ggPT09IDB4MmQgfHwgY2ggPT09IDB4MmUpIHtcbiAgICAgICAgc3RyQnVmLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBwYXJzZUZsb2F0KHN0ckJ1Zi5qb2luKFwiXCIpKTtcblxuICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgSW52YWxpZCBmbG9hdGluZyBwb2ludCBudW1iZXI6ICR7dmFsdWV9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbn1cblxuZXhwb3J0cy5Qb3N0U2NyaXB0TGV4ZXIgPSBQb3N0U2NyaXB0TGV4ZXI7XG5cbi8qKiovIH0pLFxuLyogNTggKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuTG9jYWxUaWxpbmdQYXR0ZXJuQ2FjaGUgPSBleHBvcnRzLkxvY2FsSW1hZ2VDYWNoZSA9IGV4cG9ydHMuTG9jYWxHU3RhdGVDYWNoZSA9IGV4cG9ydHMuTG9jYWxGdW5jdGlvbkNhY2hlID0gZXhwb3J0cy5Mb2NhbENvbG9yU3BhY2VDYWNoZSA9IGV4cG9ydHMuR2xvYmFsSW1hZ2VDYWNoZSA9IHZvaWQgMDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9wcmltaXRpdmVzID0gX193X3BkZmpzX3JlcXVpcmVfXyg1KTtcblxuY2xhc3MgQmFzZUxvY2FsQ2FjaGUge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgaWYgKHRoaXMuY29uc3RydWN0b3IgPT09IEJhc2VMb2NhbENhY2hlKSB7XG4gICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQ2Fubm90IGluaXRpYWxpemUgQmFzZUxvY2FsQ2FjaGUuXCIpO1xuICAgIH1cblxuICAgIHRoaXMuX29ubHlSZWZzID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5vbmx5UmVmcykgPT09IHRydWU7XG5cbiAgICBpZiAoIXRoaXMuX29ubHlSZWZzKSB7XG4gICAgICB0aGlzLl9uYW1lUmVmTWFwID0gbmV3IE1hcCgpO1xuICAgICAgdGhpcy5faW1hZ2VNYXAgPSBuZXcgTWFwKCk7XG4gICAgfVxuXG4gICAgdGhpcy5faW1hZ2VDYWNoZSA9IG5ldyBfcHJpbWl0aXZlcy5SZWZTZXRDYWNoZSgpO1xuICB9XG5cbiAgZ2V0QnlOYW1lKG5hbWUpIHtcbiAgICBpZiAodGhpcy5fb25seVJlZnMpIHtcbiAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJTaG91bGQgbm90IGNhbGwgYGdldEJ5TmFtZWAgbWV0aG9kLlwiKTtcbiAgICB9XG5cbiAgICBjb25zdCByZWYgPSB0aGlzLl9uYW1lUmVmTWFwLmdldChuYW1lKTtcblxuICAgIGlmIChyZWYpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ5UmVmKHJlZik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2ltYWdlTWFwLmdldChuYW1lKSB8fCBudWxsO1xuICB9XG5cbiAgZ2V0QnlSZWYocmVmKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ltYWdlQ2FjaGUuZ2V0KHJlZikgfHwgbnVsbDtcbiAgfVxuXG4gIHNldChuYW1lLCByZWYsIGRhdGEpIHtcbiAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQWJzdHJhY3QgbWV0aG9kIGBzZXRgIGNhbGxlZC5cIik7XG4gIH1cblxufVxuXG5jbGFzcyBMb2NhbEltYWdlQ2FjaGUgZXh0ZW5kcyBCYXNlTG9jYWxDYWNoZSB7XG4gIHNldChuYW1lLCByZWYgPSBudWxsLCBkYXRhKSB7XG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvY2FsSW1hZ2VDYWNoZS5zZXQgLSBleHBlY3RlZCBcIm5hbWVcIiBhcmd1bWVudC4nKTtcbiAgICB9XG5cbiAgICBpZiAocmVmKSB7XG4gICAgICBpZiAodGhpcy5faW1hZ2VDYWNoZS5oYXMocmVmKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX25hbWVSZWZNYXAuc2V0KG5hbWUsIHJlZik7XG5cbiAgICAgIHRoaXMuX2ltYWdlQ2FjaGUucHV0KHJlZiwgZGF0YSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faW1hZ2VNYXAuaGFzKG5hbWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW1hZ2VNYXAuc2V0KG5hbWUsIGRhdGEpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5Mb2NhbEltYWdlQ2FjaGUgPSBMb2NhbEltYWdlQ2FjaGU7XG5cbmNsYXNzIExvY2FsQ29sb3JTcGFjZUNhY2hlIGV4dGVuZHMgQmFzZUxvY2FsQ2FjaGUge1xuICBzZXQobmFtZSA9IG51bGwsIHJlZiA9IG51bGwsIGRhdGEpIHtcbiAgICBpZiAodHlwZW9mIG5hbWUgIT09IFwic3RyaW5nXCIgJiYgIXJlZikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdMb2NhbENvbG9yU3BhY2VDYWNoZS5zZXQgLSBleHBlY3RlZCBcIm5hbWVcIiBhbmQvb3IgXCJyZWZcIiBhcmd1bWVudC4nKTtcbiAgICB9XG5cbiAgICBpZiAocmVmKSB7XG4gICAgICBpZiAodGhpcy5faW1hZ2VDYWNoZS5oYXMocmVmKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChuYW1lICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuX25hbWVSZWZNYXAuc2V0KG5hbWUsIHJlZik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2ltYWdlQ2FjaGUucHV0KHJlZiwgZGF0YSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faW1hZ2VNYXAuaGFzKG5hbWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW1hZ2VNYXAuc2V0KG5hbWUsIGRhdGEpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5Mb2NhbENvbG9yU3BhY2VDYWNoZSA9IExvY2FsQ29sb3JTcGFjZUNhY2hlO1xuXG5jbGFzcyBMb2NhbEZ1bmN0aW9uQ2FjaGUgZXh0ZW5kcyBCYXNlTG9jYWxDYWNoZSB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICBzdXBlcih7XG4gICAgICBvbmx5UmVmczogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgc2V0KG5hbWUgPSBudWxsLCByZWYsIGRhdGEpIHtcbiAgICBpZiAoIXJlZikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdMb2NhbEZ1bmN0aW9uQ2FjaGUuc2V0IC0gZXhwZWN0ZWQgXCJyZWZcIiBhcmd1bWVudC4nKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faW1hZ2VDYWNoZS5oYXMocmVmKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2ltYWdlQ2FjaGUucHV0KHJlZiwgZGF0YSk7XG4gIH1cblxufVxuXG5leHBvcnRzLkxvY2FsRnVuY3Rpb25DYWNoZSA9IExvY2FsRnVuY3Rpb25DYWNoZTtcblxuY2xhc3MgTG9jYWxHU3RhdGVDYWNoZSBleHRlbmRzIEJhc2VMb2NhbENhY2hlIHtcbiAgc2V0KG5hbWUsIHJlZiA9IG51bGwsIGRhdGEpIHtcbiAgICBpZiAodHlwZW9mIG5hbWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTG9jYWxHU3RhdGVDYWNoZS5zZXQgLSBleHBlY3RlZCBcIm5hbWVcIiBhcmd1bWVudC4nKTtcbiAgICB9XG5cbiAgICBpZiAocmVmKSB7XG4gICAgICBpZiAodGhpcy5faW1hZ2VDYWNoZS5oYXMocmVmKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX25hbWVSZWZNYXAuc2V0KG5hbWUsIHJlZik7XG5cbiAgICAgIHRoaXMuX2ltYWdlQ2FjaGUucHV0KHJlZiwgZGF0YSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faW1hZ2VNYXAuaGFzKG5hbWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW1hZ2VNYXAuc2V0KG5hbWUsIGRhdGEpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5Mb2NhbEdTdGF0ZUNhY2hlID0gTG9jYWxHU3RhdGVDYWNoZTtcblxuY2xhc3MgTG9jYWxUaWxpbmdQYXR0ZXJuQ2FjaGUgZXh0ZW5kcyBCYXNlTG9jYWxDYWNoZSB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICBzdXBlcih7XG4gICAgICBvbmx5UmVmczogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgc2V0KG5hbWUgPSBudWxsLCByZWYsIGRhdGEpIHtcbiAgICBpZiAoIXJlZikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdMb2NhbFRpbGluZ1BhdHRlcm5DYWNoZS5zZXQgLSBleHBlY3RlZCBcInJlZlwiIGFyZ3VtZW50LicpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9pbWFnZUNhY2hlLmhhcyhyZWYpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW1hZ2VDYWNoZS5wdXQocmVmLCBkYXRhKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuTG9jYWxUaWxpbmdQYXR0ZXJuQ2FjaGUgPSBMb2NhbFRpbGluZ1BhdHRlcm5DYWNoZTtcblxuY2xhc3MgR2xvYmFsSW1hZ2VDYWNoZSB7XG4gIHN0YXRpYyBnZXQgTlVNX1BBR0VTX1RIUkVTSE9MRCgpIHtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJOVU1fUEFHRVNfVEhSRVNIT0xEXCIsIDIpO1xuICB9XG5cbiAgc3RhdGljIGdldCBNSU5fSU1BR0VTX1RPX0NBQ0hFKCkge1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIk1JTl9JTUFHRVNfVE9fQ0FDSEVcIiwgMTApO1xuICB9XG5cbiAgc3RhdGljIGdldCBNQVhfQllURV9TSVpFKCkge1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIk1BWF9CWVRFX1NJWkVcIiwgNDBlNik7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9yZWZDYWNoZSA9IG5ldyBfcHJpbWl0aXZlcy5SZWZTZXRDYWNoZSgpO1xuICAgIHRoaXMuX2ltYWdlQ2FjaGUgPSBuZXcgX3ByaW1pdGl2ZXMuUmVmU2V0Q2FjaGUoKTtcbiAgfVxuXG4gIGdldCBfYnl0ZVNpemUoKSB7XG4gICAgbGV0IGJ5dGVTaXplID0gMDtcblxuICAgIHRoaXMuX2ltYWdlQ2FjaGUuZm9yRWFjaChpbWFnZURhdGEgPT4ge1xuICAgICAgYnl0ZVNpemUgKz0gaW1hZ2VEYXRhLmJ5dGVTaXplO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGJ5dGVTaXplO1xuICB9XG5cbiAgZ2V0IF9jYWNoZUxpbWl0UmVhY2hlZCgpIHtcbiAgICBpZiAodGhpcy5faW1hZ2VDYWNoZS5zaXplIDwgR2xvYmFsSW1hZ2VDYWNoZS5NSU5fSU1BR0VTX1RPX0NBQ0hFKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2J5dGVTaXplIDwgR2xvYmFsSW1hZ2VDYWNoZS5NQVhfQllURV9TSVpFKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzaG91bGRDYWNoZShyZWYsIHBhZ2VJbmRleCkge1xuICAgIGNvbnN0IHBhZ2VJbmRleFNldCA9IHRoaXMuX3JlZkNhY2hlLmdldChyZWYpO1xuXG4gICAgY29uc3QgbnVtUGFnZXMgPSBwYWdlSW5kZXhTZXQgPyBwYWdlSW5kZXhTZXQuc2l6ZSArIChwYWdlSW5kZXhTZXQuaGFzKHBhZ2VJbmRleCkgPyAwIDogMSkgOiAxO1xuXG4gICAgaWYgKG51bVBhZ2VzIDwgR2xvYmFsSW1hZ2VDYWNoZS5OVU1fUEFHRVNfVEhSRVNIT0xEKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9pbWFnZUNhY2hlLmhhcyhyZWYpICYmIHRoaXMuX2NhY2hlTGltaXRSZWFjaGVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhZGRQYWdlSW5kZXgocmVmLCBwYWdlSW5kZXgpIHtcbiAgICBsZXQgcGFnZUluZGV4U2V0ID0gdGhpcy5fcmVmQ2FjaGUuZ2V0KHJlZik7XG5cbiAgICBpZiAoIXBhZ2VJbmRleFNldCkge1xuICAgICAgcGFnZUluZGV4U2V0ID0gbmV3IFNldCgpO1xuXG4gICAgICB0aGlzLl9yZWZDYWNoZS5wdXQocmVmLCBwYWdlSW5kZXhTZXQpO1xuICAgIH1cblxuICAgIHBhZ2VJbmRleFNldC5hZGQocGFnZUluZGV4KTtcbiAgfVxuXG4gIGFkZEJ5dGVTaXplKHJlZiwgYnl0ZVNpemUpIHtcbiAgICBjb25zdCBpbWFnZURhdGEgPSB0aGlzLl9pbWFnZUNhY2hlLmdldChyZWYpO1xuXG4gICAgaWYgKCFpbWFnZURhdGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaW1hZ2VEYXRhLmJ5dGVTaXplKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaW1hZ2VEYXRhLmJ5dGVTaXplID0gYnl0ZVNpemU7XG4gIH1cblxuICBnZXREYXRhKHJlZiwgcGFnZUluZGV4KSB7XG4gICAgY29uc3QgcGFnZUluZGV4U2V0ID0gdGhpcy5fcmVmQ2FjaGUuZ2V0KHJlZik7XG5cbiAgICBpZiAoIXBhZ2VJbmRleFNldCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHBhZ2VJbmRleFNldC5zaXplIDwgR2xvYmFsSW1hZ2VDYWNoZS5OVU1fUEFHRVNfVEhSRVNIT0xEKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBpbWFnZURhdGEgPSB0aGlzLl9pbWFnZUNhY2hlLmdldChyZWYpO1xuXG4gICAgaWYgKCFpbWFnZURhdGEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHBhZ2VJbmRleFNldC5hZGQocGFnZUluZGV4KTtcbiAgICByZXR1cm4gaW1hZ2VEYXRhO1xuICB9XG5cbiAgc2V0RGF0YShyZWYsIGRhdGEpIHtcbiAgICBpZiAoIXRoaXMuX3JlZkNhY2hlLmhhcyhyZWYpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dsb2JhbEltYWdlQ2FjaGUuc2V0RGF0YSAtIGV4cGVjdGVkIFwiYWRkUGFnZUluZGV4XCIgdG8gaGF2ZSBiZWVuIGNhbGxlZC4nKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faW1hZ2VDYWNoZS5oYXMocmVmKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9jYWNoZUxpbWl0UmVhY2hlZCkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKFwiR2xvYmFsSW1hZ2VDYWNoZS5zZXREYXRhIC0gY2FjaGUgbGltaXQgcmVhY2hlZC5cIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5faW1hZ2VDYWNoZS5wdXQocmVmLCBkYXRhKTtcbiAgfVxuXG4gIGNsZWFyKG9ubHlEYXRhID0gZmFsc2UpIHtcbiAgICBpZiAoIW9ubHlEYXRhKSB7XG4gICAgICB0aGlzLl9yZWZDYWNoZS5jbGVhcigpO1xuICAgIH1cblxuICAgIHRoaXMuX2ltYWdlQ2FjaGUuY2xlYXIoKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuR2xvYmFsSW1hZ2VDYWNoZSA9IEdsb2JhbEltYWdlQ2FjaGU7XG5cbi8qKiovIH0pLFxuLyogNTkgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuYmlkaSA9IGJpZGk7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbmNvbnN0IGJhc2VUeXBlcyA9IFtcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIlNcIiwgXCJCXCIsIFwiU1wiLCBcIldTXCIsIFwiQlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCXCIsIFwiQlwiLCBcIkJcIiwgXCJTXCIsIFwiV1NcIiwgXCJPTlwiLCBcIk9OXCIsIFwiRVRcIiwgXCJFVFwiLCBcIkVUXCIsIFwiT05cIiwgXCJPTlwiLCBcIk9OXCIsIFwiT05cIiwgXCJPTlwiLCBcIkVTXCIsIFwiQ1NcIiwgXCJFU1wiLCBcIkNTXCIsIFwiQ1NcIiwgXCJFTlwiLCBcIkVOXCIsIFwiRU5cIiwgXCJFTlwiLCBcIkVOXCIsIFwiRU5cIiwgXCJFTlwiLCBcIkVOXCIsIFwiRU5cIiwgXCJFTlwiLCBcIkNTXCIsIFwiT05cIiwgXCJPTlwiLCBcIk9OXCIsIFwiT05cIiwgXCJPTlwiLCBcIk9OXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJPTlwiLCBcIk9OXCIsIFwiT05cIiwgXCJPTlwiLCBcIk9OXCIsIFwiT05cIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIk9OXCIsIFwiT05cIiwgXCJPTlwiLCBcIk9OXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJCTlwiLCBcIkJOXCIsIFwiQk5cIiwgXCJDU1wiLCBcIk9OXCIsIFwiRVRcIiwgXCJFVFwiLCBcIkVUXCIsIFwiRVRcIiwgXCJPTlwiLCBcIk9OXCIsIFwiT05cIiwgXCJPTlwiLCBcIkxcIiwgXCJPTlwiLCBcIk9OXCIsIFwiQk5cIiwgXCJPTlwiLCBcIk9OXCIsIFwiRVRcIiwgXCJFVFwiLCBcIkVOXCIsIFwiRU5cIiwgXCJPTlwiLCBcIkxcIiwgXCJPTlwiLCBcIk9OXCIsIFwiT05cIiwgXCJFTlwiLCBcIkxcIiwgXCJPTlwiLCBcIk9OXCIsIFwiT05cIiwgXCJPTlwiLCBcIk9OXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJPTlwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJPTlwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCIsIFwiTFwiLCBcIkxcIiwgXCJMXCJdO1xuY29uc3QgYXJhYmljVHlwZXMgPSBbXCJBTlwiLCBcIkFOXCIsIFwiQU5cIiwgXCJBTlwiLCBcIkFOXCIsIFwiQU5cIiwgXCJPTlwiLCBcIk9OXCIsIFwiQUxcIiwgXCJFVFwiLCBcIkVUXCIsIFwiQUxcIiwgXCJDU1wiLCBcIkFMXCIsIFwiT05cIiwgXCJPTlwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIkFMXCIsIFwiQUxcIiwgXCJcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJBTlwiLCBcIkFOXCIsIFwiQU5cIiwgXCJBTlwiLCBcIkFOXCIsIFwiQU5cIiwgXCJBTlwiLCBcIkFOXCIsIFwiQU5cIiwgXCJBTlwiLCBcIkVUXCIsIFwiQU5cIiwgXCJBTlwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIk5TTVwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJOU01cIiwgXCJBTlwiLCBcIk9OXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiQUxcIiwgXCJBTFwiLCBcIk5TTVwiLCBcIk5TTVwiLCBcIk9OXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiTlNNXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkVOXCIsIFwiRU5cIiwgXCJFTlwiLCBcIkVOXCIsIFwiRU5cIiwgXCJFTlwiLCBcIkVOXCIsIFwiRU5cIiwgXCJFTlwiLCBcIkVOXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCIsIFwiQUxcIiwgXCJBTFwiLCBcIkFMXCJdO1xuXG5mdW5jdGlvbiBpc09kZChpKSB7XG4gIHJldHVybiAoaSAmIDEpICE9PSAwO1xufVxuXG5mdW5jdGlvbiBpc0V2ZW4oaSkge1xuICByZXR1cm4gKGkgJiAxKSA9PT0gMDtcbn1cblxuZnVuY3Rpb24gZmluZFVuZXF1YWwoYXJyLCBzdGFydCwgdmFsdWUpIHtcbiAgbGV0IGosIGpqO1xuXG4gIGZvciAoaiA9IHN0YXJ0LCBqaiA9IGFyci5sZW5ndGg7IGogPCBqajsgKytqKSB7XG4gICAgaWYgKGFycltqXSAhPT0gdmFsdWUpIHtcbiAgICAgIHJldHVybiBqO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBqO1xufVxuXG5mdW5jdGlvbiBzZXRWYWx1ZXMoYXJyLCBzdGFydCwgZW5kLCB2YWx1ZSkge1xuICBmb3IgKGxldCBqID0gc3RhcnQ7IGogPCBlbmQ7ICsraikge1xuICAgIGFycltqXSA9IHZhbHVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJldmVyc2VWYWx1ZXMoYXJyLCBzdGFydCwgZW5kKSB7XG4gIGZvciAobGV0IGkgPSBzdGFydCwgaiA9IGVuZCAtIDE7IGkgPCBqOyArK2ksIC0taikge1xuICAgIGNvbnN0IHRlbXAgPSBhcnJbaV07XG4gICAgYXJyW2ldID0gYXJyW2pdO1xuICAgIGFycltqXSA9IHRlbXA7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQmlkaVRleHQoc3RyLCBpc0xUUiwgdmVydGljYWwgPSBmYWxzZSkge1xuICBsZXQgZGlyID0gXCJsdHJcIjtcblxuICBpZiAodmVydGljYWwpIHtcbiAgICBkaXIgPSBcInR0YlwiO1xuICB9IGVsc2UgaWYgKCFpc0xUUikge1xuICAgIGRpciA9IFwicnRsXCI7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN0cixcbiAgICBkaXJcbiAgfTtcbn1cblxuY29uc3QgY2hhcnMgPSBbXTtcbmNvbnN0IHR5cGVzID0gW107XG5cbmZ1bmN0aW9uIGJpZGkoc3RyLCBzdGFydExldmVsID0gLTEsIHZlcnRpY2FsID0gZmFsc2UpIHtcbiAgbGV0IGlzTFRSID0gdHJ1ZTtcbiAgY29uc3Qgc3RyTGVuZ3RoID0gc3RyLmxlbmd0aDtcblxuICBpZiAoc3RyTGVuZ3RoID09PSAwIHx8IHZlcnRpY2FsKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUJpZGlUZXh0KHN0ciwgaXNMVFIsIHZlcnRpY2FsKTtcbiAgfVxuXG4gIGNoYXJzLmxlbmd0aCA9IHN0ckxlbmd0aDtcbiAgdHlwZXMubGVuZ3RoID0gc3RyTGVuZ3RoO1xuICBsZXQgbnVtQmlkaSA9IDA7XG4gIGxldCBpLCBpaTtcblxuICBmb3IgKGkgPSAwOyBpIDwgc3RyTGVuZ3RoOyArK2kpIHtcbiAgICBjaGFyc1tpXSA9IHN0ci5jaGFyQXQoaSk7XG4gICAgY29uc3QgY2hhckNvZGUgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICBsZXQgY2hhclR5cGUgPSBcIkxcIjtcblxuICAgIGlmIChjaGFyQ29kZSA8PSAweDAwZmYpIHtcbiAgICAgIGNoYXJUeXBlID0gYmFzZVR5cGVzW2NoYXJDb2RlXTtcbiAgICB9IGVsc2UgaWYgKDB4MDU5MCA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSAweDA1ZjQpIHtcbiAgICAgIGNoYXJUeXBlID0gXCJSXCI7XG4gICAgfSBlbHNlIGlmICgweDA2MDAgPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gMHgwNmZmKSB7XG4gICAgICBjaGFyVHlwZSA9IGFyYWJpY1R5cGVzW2NoYXJDb2RlICYgMHhmZl07XG5cbiAgICAgIGlmICghY2hhclR5cGUpIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiQmlkaTogaW52YWxpZCBVbmljb2RlIGNoYXJhY3RlciBcIiArIGNoYXJDb2RlLnRvU3RyaW5nKDE2KSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgweDA3MDAgPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gMHgwOGFjKSB7XG4gICAgICBjaGFyVHlwZSA9IFwiQUxcIjtcbiAgICB9XG5cbiAgICBpZiAoY2hhclR5cGUgPT09IFwiUlwiIHx8IGNoYXJUeXBlID09PSBcIkFMXCIgfHwgY2hhclR5cGUgPT09IFwiQU5cIikge1xuICAgICAgbnVtQmlkaSsrO1xuICAgIH1cblxuICAgIHR5cGVzW2ldID0gY2hhclR5cGU7XG4gIH1cblxuICBpZiAobnVtQmlkaSA9PT0gMCkge1xuICAgIGlzTFRSID0gdHJ1ZTtcbiAgICByZXR1cm4gY3JlYXRlQmlkaVRleHQoc3RyLCBpc0xUUik7XG4gIH1cblxuICBpZiAoc3RhcnRMZXZlbCA9PT0gLTEpIHtcbiAgICBpZiAobnVtQmlkaSAvIHN0ckxlbmd0aCA8IDAuMyAmJiBzdHJMZW5ndGggPiA0KSB7XG4gICAgICBpc0xUUiA9IHRydWU7XG4gICAgICBzdGFydExldmVsID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgaXNMVFIgPSBmYWxzZTtcbiAgICAgIHN0YXJ0TGV2ZWwgPSAxO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGxldmVscyA9IFtdO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBzdHJMZW5ndGg7ICsraSkge1xuICAgIGxldmVsc1tpXSA9IHN0YXJ0TGV2ZWw7XG4gIH1cblxuICBjb25zdCBlID0gaXNPZGQoc3RhcnRMZXZlbCkgPyBcIlJcIiA6IFwiTFwiO1xuICBjb25zdCBzb3IgPSBlO1xuICBjb25zdCBlb3IgPSBzb3I7XG4gIGxldCBsYXN0VHlwZSA9IHNvcjtcblxuICBmb3IgKGkgPSAwOyBpIDwgc3RyTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAodHlwZXNbaV0gPT09IFwiTlNNXCIpIHtcbiAgICAgIHR5cGVzW2ldID0gbGFzdFR5cGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxhc3RUeXBlID0gdHlwZXNbaV07XG4gICAgfVxuICB9XG5cbiAgbGFzdFR5cGUgPSBzb3I7XG4gIGxldCB0O1xuXG4gIGZvciAoaSA9IDA7IGkgPCBzdHJMZW5ndGg7ICsraSkge1xuICAgIHQgPSB0eXBlc1tpXTtcblxuICAgIGlmICh0ID09PSBcIkVOXCIpIHtcbiAgICAgIHR5cGVzW2ldID0gbGFzdFR5cGUgPT09IFwiQUxcIiA/IFwiQU5cIiA6IFwiRU5cIjtcbiAgICB9IGVsc2UgaWYgKHQgPT09IFwiUlwiIHx8IHQgPT09IFwiTFwiIHx8IHQgPT09IFwiQUxcIikge1xuICAgICAgbGFzdFR5cGUgPSB0O1xuICAgIH1cbiAgfVxuXG4gIGZvciAoaSA9IDA7IGkgPCBzdHJMZW5ndGg7ICsraSkge1xuICAgIHQgPSB0eXBlc1tpXTtcblxuICAgIGlmICh0ID09PSBcIkFMXCIpIHtcbiAgICAgIHR5cGVzW2ldID0gXCJSXCI7XG4gICAgfVxuICB9XG5cbiAgZm9yIChpID0gMTsgaSA8IHN0ckxlbmd0aCAtIDE7ICsraSkge1xuICAgIGlmICh0eXBlc1tpXSA9PT0gXCJFU1wiICYmIHR5cGVzW2kgLSAxXSA9PT0gXCJFTlwiICYmIHR5cGVzW2kgKyAxXSA9PT0gXCJFTlwiKSB7XG4gICAgICB0eXBlc1tpXSA9IFwiRU5cIjtcbiAgICB9XG5cbiAgICBpZiAodHlwZXNbaV0gPT09IFwiQ1NcIiAmJiAodHlwZXNbaSAtIDFdID09PSBcIkVOXCIgfHwgdHlwZXNbaSAtIDFdID09PSBcIkFOXCIpICYmIHR5cGVzW2kgKyAxXSA9PT0gdHlwZXNbaSAtIDFdKSB7XG4gICAgICB0eXBlc1tpXSA9IHR5cGVzW2kgLSAxXTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGkgPSAwOyBpIDwgc3RyTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAodHlwZXNbaV0gPT09IFwiRU5cIikge1xuICAgICAgZm9yIChsZXQgaiA9IGkgLSAxOyBqID49IDA7IC0taikge1xuICAgICAgICBpZiAodHlwZXNbal0gIT09IFwiRVRcIikge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdHlwZXNbal0gPSBcIkVOXCI7XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHN0ckxlbmd0aDsgKytqKSB7XG4gICAgICAgIGlmICh0eXBlc1tqXSAhPT0gXCJFVFwiKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0eXBlc1tqXSA9IFwiRU5cIjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmb3IgKGkgPSAwOyBpIDwgc3RyTGVuZ3RoOyArK2kpIHtcbiAgICB0ID0gdHlwZXNbaV07XG5cbiAgICBpZiAodCA9PT0gXCJXU1wiIHx8IHQgPT09IFwiRVNcIiB8fCB0ID09PSBcIkVUXCIgfHwgdCA9PT0gXCJDU1wiKSB7XG4gICAgICB0eXBlc1tpXSA9IFwiT05cIjtcbiAgICB9XG4gIH1cblxuICBsYXN0VHlwZSA9IHNvcjtcblxuICBmb3IgKGkgPSAwOyBpIDwgc3RyTGVuZ3RoOyArK2kpIHtcbiAgICB0ID0gdHlwZXNbaV07XG5cbiAgICBpZiAodCA9PT0gXCJFTlwiKSB7XG4gICAgICB0eXBlc1tpXSA9IGxhc3RUeXBlID09PSBcIkxcIiA/IFwiTFwiIDogXCJFTlwiO1xuICAgIH0gZWxzZSBpZiAodCA9PT0gXCJSXCIgfHwgdCA9PT0gXCJMXCIpIHtcbiAgICAgIGxhc3RUeXBlID0gdDtcbiAgICB9XG4gIH1cblxuICBmb3IgKGkgPSAwOyBpIDwgc3RyTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAodHlwZXNbaV0gPT09IFwiT05cIikge1xuICAgICAgY29uc3QgZW5kID0gZmluZFVuZXF1YWwodHlwZXMsIGkgKyAxLCBcIk9OXCIpO1xuICAgICAgbGV0IGJlZm9yZSA9IHNvcjtcblxuICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgIGJlZm9yZSA9IHR5cGVzW2kgLSAxXTtcbiAgICAgIH1cblxuICAgICAgbGV0IGFmdGVyID0gZW9yO1xuXG4gICAgICBpZiAoZW5kICsgMSA8IHN0ckxlbmd0aCkge1xuICAgICAgICBhZnRlciA9IHR5cGVzW2VuZCArIDFdO1xuICAgICAgfVxuXG4gICAgICBpZiAoYmVmb3JlICE9PSBcIkxcIikge1xuICAgICAgICBiZWZvcmUgPSBcIlJcIjtcbiAgICAgIH1cblxuICAgICAgaWYgKGFmdGVyICE9PSBcIkxcIikge1xuICAgICAgICBhZnRlciA9IFwiUlwiO1xuICAgICAgfVxuXG4gICAgICBpZiAoYmVmb3JlID09PSBhZnRlcikge1xuICAgICAgICBzZXRWYWx1ZXModHlwZXMsIGksIGVuZCwgYmVmb3JlKTtcbiAgICAgIH1cblxuICAgICAgaSA9IGVuZCAtIDE7XG4gICAgfVxuICB9XG5cbiAgZm9yIChpID0gMDsgaSA8IHN0ckxlbmd0aDsgKytpKSB7XG4gICAgaWYgKHR5cGVzW2ldID09PSBcIk9OXCIpIHtcbiAgICAgIHR5cGVzW2ldID0gZTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGkgPSAwOyBpIDwgc3RyTGVuZ3RoOyArK2kpIHtcbiAgICB0ID0gdHlwZXNbaV07XG5cbiAgICBpZiAoaXNFdmVuKGxldmVsc1tpXSkpIHtcbiAgICAgIGlmICh0ID09PSBcIlJcIikge1xuICAgICAgICBsZXZlbHNbaV0gKz0gMTtcbiAgICAgIH0gZWxzZSBpZiAodCA9PT0gXCJBTlwiIHx8IHQgPT09IFwiRU5cIikge1xuICAgICAgICBsZXZlbHNbaV0gKz0gMjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHQgPT09IFwiTFwiIHx8IHQgPT09IFwiQU5cIiB8fCB0ID09PSBcIkVOXCIpIHtcbiAgICAgICAgbGV2ZWxzW2ldICs9IDE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IGhpZ2hlc3RMZXZlbCA9IC0xO1xuICBsZXQgbG93ZXN0T2RkTGV2ZWwgPSA5OTtcbiAgbGV0IGxldmVsO1xuXG4gIGZvciAoaSA9IDAsIGlpID0gbGV2ZWxzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICBsZXZlbCA9IGxldmVsc1tpXTtcblxuICAgIGlmIChoaWdoZXN0TGV2ZWwgPCBsZXZlbCkge1xuICAgICAgaGlnaGVzdExldmVsID0gbGV2ZWw7XG4gICAgfVxuXG4gICAgaWYgKGxvd2VzdE9kZExldmVsID4gbGV2ZWwgJiYgaXNPZGQobGV2ZWwpKSB7XG4gICAgICBsb3dlc3RPZGRMZXZlbCA9IGxldmVsO1xuICAgIH1cbiAgfVxuXG4gIGZvciAobGV2ZWwgPSBoaWdoZXN0TGV2ZWw7IGxldmVsID49IGxvd2VzdE9kZExldmVsOyAtLWxldmVsKSB7XG4gICAgbGV0IHN0YXJ0ID0gLTE7XG5cbiAgICBmb3IgKGkgPSAwLCBpaSA9IGxldmVscy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICBpZiAobGV2ZWxzW2ldIDwgbGV2ZWwpIHtcbiAgICAgICAgaWYgKHN0YXJ0ID49IDApIHtcbiAgICAgICAgICByZXZlcnNlVmFsdWVzKGNoYXJzLCBzdGFydCwgaSk7XG4gICAgICAgICAgc3RhcnQgPSAtMTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzdGFydCA8IDApIHtcbiAgICAgICAgc3RhcnQgPSBpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGFydCA+PSAwKSB7XG4gICAgICByZXZlcnNlVmFsdWVzKGNoYXJzLCBzdGFydCwgbGV2ZWxzLmxlbmd0aCk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChpID0gMCwgaWkgPSBjaGFycy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgY29uc3QgY2ggPSBjaGFyc1tpXTtcblxuICAgIGlmIChjaCA9PT0gXCI8XCIgfHwgY2ggPT09IFwiPlwiKSB7XG4gICAgICBjaGFyc1tpXSA9IFwiXCI7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUJpZGlUZXh0KGNoYXJzLmpvaW4oXCJcIiksIGlzTFRSKTtcbn1cblxuLyoqKi8gfSksXG4vKiA2MCAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5nZXRNZXRyaWNzID0gdm9pZCAwO1xuXG52YXIgX2NvcmVfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDkpO1xuXG5jb25zdCBnZXRNZXRyaWNzID0gKDAsIF9jb3JlX3V0aWxzLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoZnVuY3Rpb24gKHQpIHtcbiAgdC5Db3VyaWVyID0gNjAwO1xuICB0W1wiQ291cmllci1Cb2xkXCJdID0gNjAwO1xuICB0W1wiQ291cmllci1Cb2xkT2JsaXF1ZVwiXSA9IDYwMDtcbiAgdFtcIkNvdXJpZXItT2JsaXF1ZVwiXSA9IDYwMDtcbiAgdC5IZWx2ZXRpY2EgPSAoMCwgX2NvcmVfdXRpbHMuZ2V0TG9va3VwVGFibGVGYWN0b3J5KShmdW5jdGlvbiAodCkge1xuICAgIHQuc3BhY2UgPSAyNzg7XG4gICAgdC5leGNsYW0gPSAyNzg7XG4gICAgdC5xdW90ZWRibCA9IDM1NTtcbiAgICB0Lm51bWJlcnNpZ24gPSA1NTY7XG4gICAgdC5kb2xsYXIgPSA1NTY7XG4gICAgdC5wZXJjZW50ID0gODg5O1xuICAgIHQuYW1wZXJzYW5kID0gNjY3O1xuICAgIHQucXVvdGVyaWdodCA9IDIyMjtcbiAgICB0LnBhcmVubGVmdCA9IDMzMztcbiAgICB0LnBhcmVucmlnaHQgPSAzMzM7XG4gICAgdC5hc3RlcmlzayA9IDM4OTtcbiAgICB0LnBsdXMgPSA1ODQ7XG4gICAgdC5jb21tYSA9IDI3ODtcbiAgICB0Lmh5cGhlbiA9IDMzMztcbiAgICB0LnBlcmlvZCA9IDI3ODtcbiAgICB0LnNsYXNoID0gMjc4O1xuICAgIHQuemVybyA9IDU1NjtcbiAgICB0Lm9uZSA9IDU1NjtcbiAgICB0LnR3byA9IDU1NjtcbiAgICB0LnRocmVlID0gNTU2O1xuICAgIHQuZm91ciA9IDU1NjtcbiAgICB0LmZpdmUgPSA1NTY7XG4gICAgdC5zaXggPSA1NTY7XG4gICAgdC5zZXZlbiA9IDU1NjtcbiAgICB0LmVpZ2h0ID0gNTU2O1xuICAgIHQubmluZSA9IDU1NjtcbiAgICB0LmNvbG9uID0gMjc4O1xuICAgIHQuc2VtaWNvbG9uID0gMjc4O1xuICAgIHQubGVzcyA9IDU4NDtcbiAgICB0LmVxdWFsID0gNTg0O1xuICAgIHQuZ3JlYXRlciA9IDU4NDtcbiAgICB0LnF1ZXN0aW9uID0gNTU2O1xuICAgIHQuYXQgPSAxMDE1O1xuICAgIHQuQSA9IDY2NztcbiAgICB0LkIgPSA2Njc7XG4gICAgdC5DID0gNzIyO1xuICAgIHQuRCA9IDcyMjtcbiAgICB0LkUgPSA2Njc7XG4gICAgdC5GID0gNjExO1xuICAgIHQuRyA9IDc3ODtcbiAgICB0LkggPSA3MjI7XG4gICAgdC5JID0gMjc4O1xuICAgIHQuSiA9IDUwMDtcbiAgICB0LksgPSA2Njc7XG4gICAgdC5MID0gNTU2O1xuICAgIHQuTSA9IDgzMztcbiAgICB0Lk4gPSA3MjI7XG4gICAgdC5PID0gNzc4O1xuICAgIHQuUCA9IDY2NztcbiAgICB0LlEgPSA3Nzg7XG4gICAgdC5SID0gNzIyO1xuICAgIHQuUyA9IDY2NztcbiAgICB0LlQgPSA2MTE7XG4gICAgdC5VID0gNzIyO1xuICAgIHQuViA9IDY2NztcbiAgICB0LlcgPSA5NDQ7XG4gICAgdC5YID0gNjY3O1xuICAgIHQuWSA9IDY2NztcbiAgICB0LlogPSA2MTE7XG4gICAgdC5icmFja2V0bGVmdCA9IDI3ODtcbiAgICB0LmJhY2tzbGFzaCA9IDI3ODtcbiAgICB0LmJyYWNrZXRyaWdodCA9IDI3ODtcbiAgICB0LmFzY2lpY2lyY3VtID0gNDY5O1xuICAgIHQudW5kZXJzY29yZSA9IDU1NjtcbiAgICB0LnF1b3RlbGVmdCA9IDIyMjtcbiAgICB0LmEgPSA1NTY7XG4gICAgdC5iID0gNTU2O1xuICAgIHQuYyA9IDUwMDtcbiAgICB0LmQgPSA1NTY7XG4gICAgdC5lID0gNTU2O1xuICAgIHQuZiA9IDI3ODtcbiAgICB0LmcgPSA1NTY7XG4gICAgdC5oID0gNTU2O1xuICAgIHQuaSA9IDIyMjtcbiAgICB0LmogPSAyMjI7XG4gICAgdC5rID0gNTAwO1xuICAgIHQubCA9IDIyMjtcbiAgICB0Lm0gPSA4MzM7XG4gICAgdC5uID0gNTU2O1xuICAgIHQubyA9IDU1NjtcbiAgICB0LnAgPSA1NTY7XG4gICAgdC5xID0gNTU2O1xuICAgIHQuciA9IDMzMztcbiAgICB0LnMgPSA1MDA7XG4gICAgdC50ID0gMjc4O1xuICAgIHQudSA9IDU1NjtcbiAgICB0LnYgPSA1MDA7XG4gICAgdC53ID0gNzIyO1xuICAgIHQueCA9IDUwMDtcbiAgICB0LnkgPSA1MDA7XG4gICAgdC56ID0gNTAwO1xuICAgIHQuYnJhY2VsZWZ0ID0gMzM0O1xuICAgIHQuYmFyID0gMjYwO1xuICAgIHQuYnJhY2VyaWdodCA9IDMzNDtcbiAgICB0LmFzY2lpdGlsZGUgPSA1ODQ7XG4gICAgdC5leGNsYW1kb3duID0gMzMzO1xuICAgIHQuY2VudCA9IDU1NjtcbiAgICB0LnN0ZXJsaW5nID0gNTU2O1xuICAgIHQuZnJhY3Rpb24gPSAxNjc7XG4gICAgdC55ZW4gPSA1NTY7XG4gICAgdC5mbG9yaW4gPSA1NTY7XG4gICAgdC5zZWN0aW9uID0gNTU2O1xuICAgIHQuY3VycmVuY3kgPSA1NTY7XG4gICAgdC5xdW90ZXNpbmdsZSA9IDE5MTtcbiAgICB0LnF1b3RlZGJsbGVmdCA9IDMzMztcbiAgICB0Lmd1aWxsZW1vdGxlZnQgPSA1NTY7XG4gICAgdC5ndWlsc2luZ2xsZWZ0ID0gMzMzO1xuICAgIHQuZ3VpbHNpbmdscmlnaHQgPSAzMzM7XG4gICAgdC5maSA9IDUwMDtcbiAgICB0LmZsID0gNTAwO1xuICAgIHQuZW5kYXNoID0gNTU2O1xuICAgIHQuZGFnZ2VyID0gNTU2O1xuICAgIHQuZGFnZ2VyZGJsID0gNTU2O1xuICAgIHQucGVyaW9kY2VudGVyZWQgPSAyNzg7XG4gICAgdC5wYXJhZ3JhcGggPSA1Mzc7XG4gICAgdC5idWxsZXQgPSAzNTA7XG4gICAgdC5xdW90ZXNpbmdsYmFzZSA9IDIyMjtcbiAgICB0LnF1b3RlZGJsYmFzZSA9IDMzMztcbiAgICB0LnF1b3RlZGJscmlnaHQgPSAzMzM7XG4gICAgdC5ndWlsbGVtb3RyaWdodCA9IDU1NjtcbiAgICB0LmVsbGlwc2lzID0gMTAwMDtcbiAgICB0LnBlcnRob3VzYW5kID0gMTAwMDtcbiAgICB0LnF1ZXN0aW9uZG93biA9IDYxMTtcbiAgICB0LmdyYXZlID0gMzMzO1xuICAgIHQuYWN1dGUgPSAzMzM7XG4gICAgdC5jaXJjdW1mbGV4ID0gMzMzO1xuICAgIHQudGlsZGUgPSAzMzM7XG4gICAgdC5tYWNyb24gPSAzMzM7XG4gICAgdC5icmV2ZSA9IDMzMztcbiAgICB0LmRvdGFjY2VudCA9IDMzMztcbiAgICB0LmRpZXJlc2lzID0gMzMzO1xuICAgIHQucmluZyA9IDMzMztcbiAgICB0LmNlZGlsbGEgPSAzMzM7XG4gICAgdC5odW5nYXJ1bWxhdXQgPSAzMzM7XG4gICAgdC5vZ29uZWsgPSAzMzM7XG4gICAgdC5jYXJvbiA9IDMzMztcbiAgICB0LmVtZGFzaCA9IDEwMDA7XG4gICAgdC5BRSA9IDEwMDA7XG4gICAgdC5vcmRmZW1pbmluZSA9IDM3MDtcbiAgICB0LkxzbGFzaCA9IDU1NjtcbiAgICB0Lk9zbGFzaCA9IDc3ODtcbiAgICB0Lk9FID0gMTAwMDtcbiAgICB0Lm9yZG1hc2N1bGluZSA9IDM2NTtcbiAgICB0LmFlID0gODg5O1xuICAgIHQuZG90bGVzc2kgPSAyNzg7XG4gICAgdC5sc2xhc2ggPSAyMjI7XG4gICAgdC5vc2xhc2ggPSA2MTE7XG4gICAgdC5vZSA9IDk0NDtcbiAgICB0Lmdlcm1hbmRibHMgPSA2MTE7XG4gICAgdC5JZGllcmVzaXMgPSAyNzg7XG4gICAgdC5lYWN1dGUgPSA1NTY7XG4gICAgdC5hYnJldmUgPSA1NTY7XG4gICAgdC51aHVuZ2FydW1sYXV0ID0gNTU2O1xuICAgIHQuZWNhcm9uID0gNTU2O1xuICAgIHQuWWRpZXJlc2lzID0gNjY3O1xuICAgIHQuZGl2aWRlID0gNTg0O1xuICAgIHQuWWFjdXRlID0gNjY3O1xuICAgIHQuQWNpcmN1bWZsZXggPSA2Njc7XG4gICAgdC5hYWN1dGUgPSA1NTY7XG4gICAgdC5VY2lyY3VtZmxleCA9IDcyMjtcbiAgICB0LnlhY3V0ZSA9IDUwMDtcbiAgICB0LnNjb21tYWFjY2VudCA9IDUwMDtcbiAgICB0LmVjaXJjdW1mbGV4ID0gNTU2O1xuICAgIHQuVXJpbmcgPSA3MjI7XG4gICAgdC5VZGllcmVzaXMgPSA3MjI7XG4gICAgdC5hb2dvbmVrID0gNTU2O1xuICAgIHQuVWFjdXRlID0gNzIyO1xuICAgIHQudW9nb25layA9IDU1NjtcbiAgICB0LkVkaWVyZXNpcyA9IDY2NztcbiAgICB0LkRjcm9hdCA9IDcyMjtcbiAgICB0LmNvbW1hYWNjZW50ID0gMjUwO1xuICAgIHQuY29weXJpZ2h0ID0gNzM3O1xuICAgIHQuRW1hY3JvbiA9IDY2NztcbiAgICB0LmNjYXJvbiA9IDUwMDtcbiAgICB0LmFyaW5nID0gNTU2O1xuICAgIHQuTmNvbW1hYWNjZW50ID0gNzIyO1xuICAgIHQubGFjdXRlID0gMjIyO1xuICAgIHQuYWdyYXZlID0gNTU2O1xuICAgIHQuVGNvbW1hYWNjZW50ID0gNjExO1xuICAgIHQuQ2FjdXRlID0gNzIyO1xuICAgIHQuYXRpbGRlID0gNTU2O1xuICAgIHQuRWRvdGFjY2VudCA9IDY2NztcbiAgICB0LnNjYXJvbiA9IDUwMDtcbiAgICB0LnNjZWRpbGxhID0gNTAwO1xuICAgIHQuaWFjdXRlID0gMjc4O1xuICAgIHQubG96ZW5nZSA9IDQ3MTtcbiAgICB0LlJjYXJvbiA9IDcyMjtcbiAgICB0Lkdjb21tYWFjY2VudCA9IDc3ODtcbiAgICB0LnVjaXJjdW1mbGV4ID0gNTU2O1xuICAgIHQuYWNpcmN1bWZsZXggPSA1NTY7XG4gICAgdC5BbWFjcm9uID0gNjY3O1xuICAgIHQucmNhcm9uID0gMzMzO1xuICAgIHQuY2NlZGlsbGEgPSA1MDA7XG4gICAgdC5aZG90YWNjZW50ID0gNjExO1xuICAgIHQuVGhvcm4gPSA2Njc7XG4gICAgdC5PbWFjcm9uID0gNzc4O1xuICAgIHQuUmFjdXRlID0gNzIyO1xuICAgIHQuU2FjdXRlID0gNjY3O1xuICAgIHQuZGNhcm9uID0gNjQzO1xuICAgIHQuVW1hY3JvbiA9IDcyMjtcbiAgICB0LnVyaW5nID0gNTU2O1xuICAgIHQudGhyZWVzdXBlcmlvciA9IDMzMztcbiAgICB0Lk9ncmF2ZSA9IDc3ODtcbiAgICB0LkFncmF2ZSA9IDY2NztcbiAgICB0LkFicmV2ZSA9IDY2NztcbiAgICB0Lm11bHRpcGx5ID0gNTg0O1xuICAgIHQudWFjdXRlID0gNTU2O1xuICAgIHQuVGNhcm9uID0gNjExO1xuICAgIHQucGFydGlhbGRpZmYgPSA0NzY7XG4gICAgdC55ZGllcmVzaXMgPSA1MDA7XG4gICAgdC5OYWN1dGUgPSA3MjI7XG4gICAgdC5pY2lyY3VtZmxleCA9IDI3ODtcbiAgICB0LkVjaXJjdW1mbGV4ID0gNjY3O1xuICAgIHQuYWRpZXJlc2lzID0gNTU2O1xuICAgIHQuZWRpZXJlc2lzID0gNTU2O1xuICAgIHQuY2FjdXRlID0gNTAwO1xuICAgIHQubmFjdXRlID0gNTU2O1xuICAgIHQudW1hY3JvbiA9IDU1NjtcbiAgICB0Lk5jYXJvbiA9IDcyMjtcbiAgICB0LklhY3V0ZSA9IDI3ODtcbiAgICB0LnBsdXNtaW51cyA9IDU4NDtcbiAgICB0LmJyb2tlbmJhciA9IDI2MDtcbiAgICB0LnJlZ2lzdGVyZWQgPSA3Mzc7XG4gICAgdC5HYnJldmUgPSA3Nzg7XG4gICAgdC5JZG90YWNjZW50ID0gMjc4O1xuICAgIHQuc3VtbWF0aW9uID0gNjAwO1xuICAgIHQuRWdyYXZlID0gNjY3O1xuICAgIHQucmFjdXRlID0gMzMzO1xuICAgIHQub21hY3JvbiA9IDU1NjtcbiAgICB0LlphY3V0ZSA9IDYxMTtcbiAgICB0LlpjYXJvbiA9IDYxMTtcbiAgICB0LmdyZWF0ZXJlcXVhbCA9IDU0OTtcbiAgICB0LkV0aCA9IDcyMjtcbiAgICB0LkNjZWRpbGxhID0gNzIyO1xuICAgIHQubGNvbW1hYWNjZW50ID0gMjIyO1xuICAgIHQudGNhcm9uID0gMzE3O1xuICAgIHQuZW9nb25layA9IDU1NjtcbiAgICB0LlVvZ29uZWsgPSA3MjI7XG4gICAgdC5BYWN1dGUgPSA2Njc7XG4gICAgdC5BZGllcmVzaXMgPSA2Njc7XG4gICAgdC5lZ3JhdmUgPSA1NTY7XG4gICAgdC56YWN1dGUgPSA1MDA7XG4gICAgdC5pb2dvbmVrID0gMjIyO1xuICAgIHQuT2FjdXRlID0gNzc4O1xuICAgIHQub2FjdXRlID0gNTU2O1xuICAgIHQuYW1hY3JvbiA9IDU1NjtcbiAgICB0LnNhY3V0ZSA9IDUwMDtcbiAgICB0LmlkaWVyZXNpcyA9IDI3ODtcbiAgICB0Lk9jaXJjdW1mbGV4ID0gNzc4O1xuICAgIHQuVWdyYXZlID0gNzIyO1xuICAgIHQuRGVsdGEgPSA2MTI7XG4gICAgdC50aG9ybiA9IDU1NjtcbiAgICB0LnR3b3N1cGVyaW9yID0gMzMzO1xuICAgIHQuT2RpZXJlc2lzID0gNzc4O1xuICAgIHQubXUgPSA1NTY7XG4gICAgdC5pZ3JhdmUgPSAyNzg7XG4gICAgdC5vaHVuZ2FydW1sYXV0ID0gNTU2O1xuICAgIHQuRW9nb25layA9IDY2NztcbiAgICB0LmRjcm9hdCA9IDU1NjtcbiAgICB0LnRocmVlcXVhcnRlcnMgPSA4MzQ7XG4gICAgdC5TY2VkaWxsYSA9IDY2NztcbiAgICB0LmxjYXJvbiA9IDI5OTtcbiAgICB0Lktjb21tYWFjY2VudCA9IDY2NztcbiAgICB0LkxhY3V0ZSA9IDU1NjtcbiAgICB0LnRyYWRlbWFyayA9IDEwMDA7XG4gICAgdC5lZG90YWNjZW50ID0gNTU2O1xuICAgIHQuSWdyYXZlID0gMjc4O1xuICAgIHQuSW1hY3JvbiA9IDI3ODtcbiAgICB0LkxjYXJvbiA9IDU1NjtcbiAgICB0Lm9uZWhhbGYgPSA4MzQ7XG4gICAgdC5sZXNzZXF1YWwgPSA1NDk7XG4gICAgdC5vY2lyY3VtZmxleCA9IDU1NjtcbiAgICB0Lm50aWxkZSA9IDU1NjtcbiAgICB0LlVodW5nYXJ1bWxhdXQgPSA3MjI7XG4gICAgdC5FYWN1dGUgPSA2Njc7XG4gICAgdC5lbWFjcm9uID0gNTU2O1xuICAgIHQuZ2JyZXZlID0gNTU2O1xuICAgIHQub25lcXVhcnRlciA9IDgzNDtcbiAgICB0LlNjYXJvbiA9IDY2NztcbiAgICB0LlNjb21tYWFjY2VudCA9IDY2NztcbiAgICB0Lk9odW5nYXJ1bWxhdXQgPSA3Nzg7XG4gICAgdC5kZWdyZWUgPSA0MDA7XG4gICAgdC5vZ3JhdmUgPSA1NTY7XG4gICAgdC5DY2Fyb24gPSA3MjI7XG4gICAgdC51Z3JhdmUgPSA1NTY7XG4gICAgdC5yYWRpY2FsID0gNDUzO1xuICAgIHQuRGNhcm9uID0gNzIyO1xuICAgIHQucmNvbW1hYWNjZW50ID0gMzMzO1xuICAgIHQuTnRpbGRlID0gNzIyO1xuICAgIHQub3RpbGRlID0gNTU2O1xuICAgIHQuUmNvbW1hYWNjZW50ID0gNzIyO1xuICAgIHQuTGNvbW1hYWNjZW50ID0gNTU2O1xuICAgIHQuQXRpbGRlID0gNjY3O1xuICAgIHQuQW9nb25layA9IDY2NztcbiAgICB0LkFyaW5nID0gNjY3O1xuICAgIHQuT3RpbGRlID0gNzc4O1xuICAgIHQuemRvdGFjY2VudCA9IDUwMDtcbiAgICB0LkVjYXJvbiA9IDY2NztcbiAgICB0LklvZ29uZWsgPSAyNzg7XG4gICAgdC5rY29tbWFhY2NlbnQgPSA1MDA7XG4gICAgdC5taW51cyA9IDU4NDtcbiAgICB0LkljaXJjdW1mbGV4ID0gMjc4O1xuICAgIHQubmNhcm9uID0gNTU2O1xuICAgIHQudGNvbW1hYWNjZW50ID0gMjc4O1xuICAgIHQubG9naWNhbG5vdCA9IDU4NDtcbiAgICB0Lm9kaWVyZXNpcyA9IDU1NjtcbiAgICB0LnVkaWVyZXNpcyA9IDU1NjtcbiAgICB0Lm5vdGVxdWFsID0gNTQ5O1xuICAgIHQuZ2NvbW1hYWNjZW50ID0gNTU2O1xuICAgIHQuZXRoID0gNTU2O1xuICAgIHQuemNhcm9uID0gNTAwO1xuICAgIHQubmNvbW1hYWNjZW50ID0gNTU2O1xuICAgIHQub25lc3VwZXJpb3IgPSAzMzM7XG4gICAgdC5pbWFjcm9uID0gMjc4O1xuICAgIHQuRXVybyA9IDU1NjtcbiAgfSk7XG4gIHRbXCJIZWx2ZXRpY2EtQm9sZFwiXSA9ICgwLCBfY29yZV91dGlscy5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gICAgdC5zcGFjZSA9IDI3ODtcbiAgICB0LmV4Y2xhbSA9IDMzMztcbiAgICB0LnF1b3RlZGJsID0gNDc0O1xuICAgIHQubnVtYmVyc2lnbiA9IDU1NjtcbiAgICB0LmRvbGxhciA9IDU1NjtcbiAgICB0LnBlcmNlbnQgPSA4ODk7XG4gICAgdC5hbXBlcnNhbmQgPSA3MjI7XG4gICAgdC5xdW90ZXJpZ2h0ID0gMjc4O1xuICAgIHQucGFyZW5sZWZ0ID0gMzMzO1xuICAgIHQucGFyZW5yaWdodCA9IDMzMztcbiAgICB0LmFzdGVyaXNrID0gMzg5O1xuICAgIHQucGx1cyA9IDU4NDtcbiAgICB0LmNvbW1hID0gMjc4O1xuICAgIHQuaHlwaGVuID0gMzMzO1xuICAgIHQucGVyaW9kID0gMjc4O1xuICAgIHQuc2xhc2ggPSAyNzg7XG4gICAgdC56ZXJvID0gNTU2O1xuICAgIHQub25lID0gNTU2O1xuICAgIHQudHdvID0gNTU2O1xuICAgIHQudGhyZWUgPSA1NTY7XG4gICAgdC5mb3VyID0gNTU2O1xuICAgIHQuZml2ZSA9IDU1NjtcbiAgICB0LnNpeCA9IDU1NjtcbiAgICB0LnNldmVuID0gNTU2O1xuICAgIHQuZWlnaHQgPSA1NTY7XG4gICAgdC5uaW5lID0gNTU2O1xuICAgIHQuY29sb24gPSAzMzM7XG4gICAgdC5zZW1pY29sb24gPSAzMzM7XG4gICAgdC5sZXNzID0gNTg0O1xuICAgIHQuZXF1YWwgPSA1ODQ7XG4gICAgdC5ncmVhdGVyID0gNTg0O1xuICAgIHQucXVlc3Rpb24gPSA2MTE7XG4gICAgdC5hdCA9IDk3NTtcbiAgICB0LkEgPSA3MjI7XG4gICAgdC5CID0gNzIyO1xuICAgIHQuQyA9IDcyMjtcbiAgICB0LkQgPSA3MjI7XG4gICAgdC5FID0gNjY3O1xuICAgIHQuRiA9IDYxMTtcbiAgICB0LkcgPSA3Nzg7XG4gICAgdC5IID0gNzIyO1xuICAgIHQuSSA9IDI3ODtcbiAgICB0LkogPSA1NTY7XG4gICAgdC5LID0gNzIyO1xuICAgIHQuTCA9IDYxMTtcbiAgICB0Lk0gPSA4MzM7XG4gICAgdC5OID0gNzIyO1xuICAgIHQuTyA9IDc3ODtcbiAgICB0LlAgPSA2Njc7XG4gICAgdC5RID0gNzc4O1xuICAgIHQuUiA9IDcyMjtcbiAgICB0LlMgPSA2Njc7XG4gICAgdC5UID0gNjExO1xuICAgIHQuVSA9IDcyMjtcbiAgICB0LlYgPSA2Njc7XG4gICAgdC5XID0gOTQ0O1xuICAgIHQuWCA9IDY2NztcbiAgICB0LlkgPSA2Njc7XG4gICAgdC5aID0gNjExO1xuICAgIHQuYnJhY2tldGxlZnQgPSAzMzM7XG4gICAgdC5iYWNrc2xhc2ggPSAyNzg7XG4gICAgdC5icmFja2V0cmlnaHQgPSAzMzM7XG4gICAgdC5hc2NpaWNpcmN1bSA9IDU4NDtcbiAgICB0LnVuZGVyc2NvcmUgPSA1NTY7XG4gICAgdC5xdW90ZWxlZnQgPSAyNzg7XG4gICAgdC5hID0gNTU2O1xuICAgIHQuYiA9IDYxMTtcbiAgICB0LmMgPSA1NTY7XG4gICAgdC5kID0gNjExO1xuICAgIHQuZSA9IDU1NjtcbiAgICB0LmYgPSAzMzM7XG4gICAgdC5nID0gNjExO1xuICAgIHQuaCA9IDYxMTtcbiAgICB0LmkgPSAyNzg7XG4gICAgdC5qID0gMjc4O1xuICAgIHQuayA9IDU1NjtcbiAgICB0LmwgPSAyNzg7XG4gICAgdC5tID0gODg5O1xuICAgIHQubiA9IDYxMTtcbiAgICB0Lm8gPSA2MTE7XG4gICAgdC5wID0gNjExO1xuICAgIHQucSA9IDYxMTtcbiAgICB0LnIgPSAzODk7XG4gICAgdC5zID0gNTU2O1xuICAgIHQudCA9IDMzMztcbiAgICB0LnUgPSA2MTE7XG4gICAgdC52ID0gNTU2O1xuICAgIHQudyA9IDc3ODtcbiAgICB0LnggPSA1NTY7XG4gICAgdC55ID0gNTU2O1xuICAgIHQueiA9IDUwMDtcbiAgICB0LmJyYWNlbGVmdCA9IDM4OTtcbiAgICB0LmJhciA9IDI4MDtcbiAgICB0LmJyYWNlcmlnaHQgPSAzODk7XG4gICAgdC5hc2NpaXRpbGRlID0gNTg0O1xuICAgIHQuZXhjbGFtZG93biA9IDMzMztcbiAgICB0LmNlbnQgPSA1NTY7XG4gICAgdC5zdGVybGluZyA9IDU1NjtcbiAgICB0LmZyYWN0aW9uID0gMTY3O1xuICAgIHQueWVuID0gNTU2O1xuICAgIHQuZmxvcmluID0gNTU2O1xuICAgIHQuc2VjdGlvbiA9IDU1NjtcbiAgICB0LmN1cnJlbmN5ID0gNTU2O1xuICAgIHQucXVvdGVzaW5nbGUgPSAyMzg7XG4gICAgdC5xdW90ZWRibGxlZnQgPSA1MDA7XG4gICAgdC5ndWlsbGVtb3RsZWZ0ID0gNTU2O1xuICAgIHQuZ3VpbHNpbmdsbGVmdCA9IDMzMztcbiAgICB0Lmd1aWxzaW5nbHJpZ2h0ID0gMzMzO1xuICAgIHQuZmkgPSA2MTE7XG4gICAgdC5mbCA9IDYxMTtcbiAgICB0LmVuZGFzaCA9IDU1NjtcbiAgICB0LmRhZ2dlciA9IDU1NjtcbiAgICB0LmRhZ2dlcmRibCA9IDU1NjtcbiAgICB0LnBlcmlvZGNlbnRlcmVkID0gMjc4O1xuICAgIHQucGFyYWdyYXBoID0gNTU2O1xuICAgIHQuYnVsbGV0ID0gMzUwO1xuICAgIHQucXVvdGVzaW5nbGJhc2UgPSAyNzg7XG4gICAgdC5xdW90ZWRibGJhc2UgPSA1MDA7XG4gICAgdC5xdW90ZWRibHJpZ2h0ID0gNTAwO1xuICAgIHQuZ3VpbGxlbW90cmlnaHQgPSA1NTY7XG4gICAgdC5lbGxpcHNpcyA9IDEwMDA7XG4gICAgdC5wZXJ0aG91c2FuZCA9IDEwMDA7XG4gICAgdC5xdWVzdGlvbmRvd24gPSA2MTE7XG4gICAgdC5ncmF2ZSA9IDMzMztcbiAgICB0LmFjdXRlID0gMzMzO1xuICAgIHQuY2lyY3VtZmxleCA9IDMzMztcbiAgICB0LnRpbGRlID0gMzMzO1xuICAgIHQubWFjcm9uID0gMzMzO1xuICAgIHQuYnJldmUgPSAzMzM7XG4gICAgdC5kb3RhY2NlbnQgPSAzMzM7XG4gICAgdC5kaWVyZXNpcyA9IDMzMztcbiAgICB0LnJpbmcgPSAzMzM7XG4gICAgdC5jZWRpbGxhID0gMzMzO1xuICAgIHQuaHVuZ2FydW1sYXV0ID0gMzMzO1xuICAgIHQub2dvbmVrID0gMzMzO1xuICAgIHQuY2Fyb24gPSAzMzM7XG4gICAgdC5lbWRhc2ggPSAxMDAwO1xuICAgIHQuQUUgPSAxMDAwO1xuICAgIHQub3JkZmVtaW5pbmUgPSAzNzA7XG4gICAgdC5Mc2xhc2ggPSA2MTE7XG4gICAgdC5Pc2xhc2ggPSA3Nzg7XG4gICAgdC5PRSA9IDEwMDA7XG4gICAgdC5vcmRtYXNjdWxpbmUgPSAzNjU7XG4gICAgdC5hZSA9IDg4OTtcbiAgICB0LmRvdGxlc3NpID0gMjc4O1xuICAgIHQubHNsYXNoID0gMjc4O1xuICAgIHQub3NsYXNoID0gNjExO1xuICAgIHQub2UgPSA5NDQ7XG4gICAgdC5nZXJtYW5kYmxzID0gNjExO1xuICAgIHQuSWRpZXJlc2lzID0gMjc4O1xuICAgIHQuZWFjdXRlID0gNTU2O1xuICAgIHQuYWJyZXZlID0gNTU2O1xuICAgIHQudWh1bmdhcnVtbGF1dCA9IDYxMTtcbiAgICB0LmVjYXJvbiA9IDU1NjtcbiAgICB0LllkaWVyZXNpcyA9IDY2NztcbiAgICB0LmRpdmlkZSA9IDU4NDtcbiAgICB0LllhY3V0ZSA9IDY2NztcbiAgICB0LkFjaXJjdW1mbGV4ID0gNzIyO1xuICAgIHQuYWFjdXRlID0gNTU2O1xuICAgIHQuVWNpcmN1bWZsZXggPSA3MjI7XG4gICAgdC55YWN1dGUgPSA1NTY7XG4gICAgdC5zY29tbWFhY2NlbnQgPSA1NTY7XG4gICAgdC5lY2lyY3VtZmxleCA9IDU1NjtcbiAgICB0LlVyaW5nID0gNzIyO1xuICAgIHQuVWRpZXJlc2lzID0gNzIyO1xuICAgIHQuYW9nb25layA9IDU1NjtcbiAgICB0LlVhY3V0ZSA9IDcyMjtcbiAgICB0LnVvZ29uZWsgPSA2MTE7XG4gICAgdC5FZGllcmVzaXMgPSA2Njc7XG4gICAgdC5EY3JvYXQgPSA3MjI7XG4gICAgdC5jb21tYWFjY2VudCA9IDI1MDtcbiAgICB0LmNvcHlyaWdodCA9IDczNztcbiAgICB0LkVtYWNyb24gPSA2Njc7XG4gICAgdC5jY2Fyb24gPSA1NTY7XG4gICAgdC5hcmluZyA9IDU1NjtcbiAgICB0Lk5jb21tYWFjY2VudCA9IDcyMjtcbiAgICB0LmxhY3V0ZSA9IDI3ODtcbiAgICB0LmFncmF2ZSA9IDU1NjtcbiAgICB0LlRjb21tYWFjY2VudCA9IDYxMTtcbiAgICB0LkNhY3V0ZSA9IDcyMjtcbiAgICB0LmF0aWxkZSA9IDU1NjtcbiAgICB0LkVkb3RhY2NlbnQgPSA2Njc7XG4gICAgdC5zY2Fyb24gPSA1NTY7XG4gICAgdC5zY2VkaWxsYSA9IDU1NjtcbiAgICB0LmlhY3V0ZSA9IDI3ODtcbiAgICB0LmxvemVuZ2UgPSA0OTQ7XG4gICAgdC5SY2Fyb24gPSA3MjI7XG4gICAgdC5HY29tbWFhY2NlbnQgPSA3Nzg7XG4gICAgdC51Y2lyY3VtZmxleCA9IDYxMTtcbiAgICB0LmFjaXJjdW1mbGV4ID0gNTU2O1xuICAgIHQuQW1hY3JvbiA9IDcyMjtcbiAgICB0LnJjYXJvbiA9IDM4OTtcbiAgICB0LmNjZWRpbGxhID0gNTU2O1xuICAgIHQuWmRvdGFjY2VudCA9IDYxMTtcbiAgICB0LlRob3JuID0gNjY3O1xuICAgIHQuT21hY3JvbiA9IDc3ODtcbiAgICB0LlJhY3V0ZSA9IDcyMjtcbiAgICB0LlNhY3V0ZSA9IDY2NztcbiAgICB0LmRjYXJvbiA9IDc0MztcbiAgICB0LlVtYWNyb24gPSA3MjI7XG4gICAgdC51cmluZyA9IDYxMTtcbiAgICB0LnRocmVlc3VwZXJpb3IgPSAzMzM7XG4gICAgdC5PZ3JhdmUgPSA3Nzg7XG4gICAgdC5BZ3JhdmUgPSA3MjI7XG4gICAgdC5BYnJldmUgPSA3MjI7XG4gICAgdC5tdWx0aXBseSA9IDU4NDtcbiAgICB0LnVhY3V0ZSA9IDYxMTtcbiAgICB0LlRjYXJvbiA9IDYxMTtcbiAgICB0LnBhcnRpYWxkaWZmID0gNDk0O1xuICAgIHQueWRpZXJlc2lzID0gNTU2O1xuICAgIHQuTmFjdXRlID0gNzIyO1xuICAgIHQuaWNpcmN1bWZsZXggPSAyNzg7XG4gICAgdC5FY2lyY3VtZmxleCA9IDY2NztcbiAgICB0LmFkaWVyZXNpcyA9IDU1NjtcbiAgICB0LmVkaWVyZXNpcyA9IDU1NjtcbiAgICB0LmNhY3V0ZSA9IDU1NjtcbiAgICB0Lm5hY3V0ZSA9IDYxMTtcbiAgICB0LnVtYWNyb24gPSA2MTE7XG4gICAgdC5OY2Fyb24gPSA3MjI7XG4gICAgdC5JYWN1dGUgPSAyNzg7XG4gICAgdC5wbHVzbWludXMgPSA1ODQ7XG4gICAgdC5icm9rZW5iYXIgPSAyODA7XG4gICAgdC5yZWdpc3RlcmVkID0gNzM3O1xuICAgIHQuR2JyZXZlID0gNzc4O1xuICAgIHQuSWRvdGFjY2VudCA9IDI3ODtcbiAgICB0LnN1bW1hdGlvbiA9IDYwMDtcbiAgICB0LkVncmF2ZSA9IDY2NztcbiAgICB0LnJhY3V0ZSA9IDM4OTtcbiAgICB0Lm9tYWNyb24gPSA2MTE7XG4gICAgdC5aYWN1dGUgPSA2MTE7XG4gICAgdC5aY2Fyb24gPSA2MTE7XG4gICAgdC5ncmVhdGVyZXF1YWwgPSA1NDk7XG4gICAgdC5FdGggPSA3MjI7XG4gICAgdC5DY2VkaWxsYSA9IDcyMjtcbiAgICB0Lmxjb21tYWFjY2VudCA9IDI3ODtcbiAgICB0LnRjYXJvbiA9IDM4OTtcbiAgICB0LmVvZ29uZWsgPSA1NTY7XG4gICAgdC5Vb2dvbmVrID0gNzIyO1xuICAgIHQuQWFjdXRlID0gNzIyO1xuICAgIHQuQWRpZXJlc2lzID0gNzIyO1xuICAgIHQuZWdyYXZlID0gNTU2O1xuICAgIHQuemFjdXRlID0gNTAwO1xuICAgIHQuaW9nb25layA9IDI3ODtcbiAgICB0Lk9hY3V0ZSA9IDc3ODtcbiAgICB0Lm9hY3V0ZSA9IDYxMTtcbiAgICB0LmFtYWNyb24gPSA1NTY7XG4gICAgdC5zYWN1dGUgPSA1NTY7XG4gICAgdC5pZGllcmVzaXMgPSAyNzg7XG4gICAgdC5PY2lyY3VtZmxleCA9IDc3ODtcbiAgICB0LlVncmF2ZSA9IDcyMjtcbiAgICB0LkRlbHRhID0gNjEyO1xuICAgIHQudGhvcm4gPSA2MTE7XG4gICAgdC50d29zdXBlcmlvciA9IDMzMztcbiAgICB0Lk9kaWVyZXNpcyA9IDc3ODtcbiAgICB0Lm11ID0gNjExO1xuICAgIHQuaWdyYXZlID0gMjc4O1xuICAgIHQub2h1bmdhcnVtbGF1dCA9IDYxMTtcbiAgICB0LkVvZ29uZWsgPSA2Njc7XG4gICAgdC5kY3JvYXQgPSA2MTE7XG4gICAgdC50aHJlZXF1YXJ0ZXJzID0gODM0O1xuICAgIHQuU2NlZGlsbGEgPSA2Njc7XG4gICAgdC5sY2Fyb24gPSA0MDA7XG4gICAgdC5LY29tbWFhY2NlbnQgPSA3MjI7XG4gICAgdC5MYWN1dGUgPSA2MTE7XG4gICAgdC50cmFkZW1hcmsgPSAxMDAwO1xuICAgIHQuZWRvdGFjY2VudCA9IDU1NjtcbiAgICB0LklncmF2ZSA9IDI3ODtcbiAgICB0LkltYWNyb24gPSAyNzg7XG4gICAgdC5MY2Fyb24gPSA2MTE7XG4gICAgdC5vbmVoYWxmID0gODM0O1xuICAgIHQubGVzc2VxdWFsID0gNTQ5O1xuICAgIHQub2NpcmN1bWZsZXggPSA2MTE7XG4gICAgdC5udGlsZGUgPSA2MTE7XG4gICAgdC5VaHVuZ2FydW1sYXV0ID0gNzIyO1xuICAgIHQuRWFjdXRlID0gNjY3O1xuICAgIHQuZW1hY3JvbiA9IDU1NjtcbiAgICB0LmdicmV2ZSA9IDYxMTtcbiAgICB0Lm9uZXF1YXJ0ZXIgPSA4MzQ7XG4gICAgdC5TY2Fyb24gPSA2Njc7XG4gICAgdC5TY29tbWFhY2NlbnQgPSA2Njc7XG4gICAgdC5PaHVuZ2FydW1sYXV0ID0gNzc4O1xuICAgIHQuZGVncmVlID0gNDAwO1xuICAgIHQub2dyYXZlID0gNjExO1xuICAgIHQuQ2Nhcm9uID0gNzIyO1xuICAgIHQudWdyYXZlID0gNjExO1xuICAgIHQucmFkaWNhbCA9IDU0OTtcbiAgICB0LkRjYXJvbiA9IDcyMjtcbiAgICB0LnJjb21tYWFjY2VudCA9IDM4OTtcbiAgICB0Lk50aWxkZSA9IDcyMjtcbiAgICB0Lm90aWxkZSA9IDYxMTtcbiAgICB0LlJjb21tYWFjY2VudCA9IDcyMjtcbiAgICB0Lkxjb21tYWFjY2VudCA9IDYxMTtcbiAgICB0LkF0aWxkZSA9IDcyMjtcbiAgICB0LkFvZ29uZWsgPSA3MjI7XG4gICAgdC5BcmluZyA9IDcyMjtcbiAgICB0Lk90aWxkZSA9IDc3ODtcbiAgICB0Lnpkb3RhY2NlbnQgPSA1MDA7XG4gICAgdC5FY2Fyb24gPSA2Njc7XG4gICAgdC5Jb2dvbmVrID0gMjc4O1xuICAgIHQua2NvbW1hYWNjZW50ID0gNTU2O1xuICAgIHQubWludXMgPSA1ODQ7XG4gICAgdC5JY2lyY3VtZmxleCA9IDI3ODtcbiAgICB0Lm5jYXJvbiA9IDYxMTtcbiAgICB0LnRjb21tYWFjY2VudCA9IDMzMztcbiAgICB0LmxvZ2ljYWxub3QgPSA1ODQ7XG4gICAgdC5vZGllcmVzaXMgPSA2MTE7XG4gICAgdC51ZGllcmVzaXMgPSA2MTE7XG4gICAgdC5ub3RlcXVhbCA9IDU0OTtcbiAgICB0Lmdjb21tYWFjY2VudCA9IDYxMTtcbiAgICB0LmV0aCA9IDYxMTtcbiAgICB0LnpjYXJvbiA9IDUwMDtcbiAgICB0Lm5jb21tYWFjY2VudCA9IDYxMTtcbiAgICB0Lm9uZXN1cGVyaW9yID0gMzMzO1xuICAgIHQuaW1hY3JvbiA9IDI3ODtcbiAgICB0LkV1cm8gPSA1NTY7XG4gIH0pO1xuICB0W1wiSGVsdmV0aWNhLUJvbGRPYmxpcXVlXCJdID0gKDAsIF9jb3JlX3V0aWxzLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoZnVuY3Rpb24gKHQpIHtcbiAgICB0LnNwYWNlID0gMjc4O1xuICAgIHQuZXhjbGFtID0gMzMzO1xuICAgIHQucXVvdGVkYmwgPSA0NzQ7XG4gICAgdC5udW1iZXJzaWduID0gNTU2O1xuICAgIHQuZG9sbGFyID0gNTU2O1xuICAgIHQucGVyY2VudCA9IDg4OTtcbiAgICB0LmFtcGVyc2FuZCA9IDcyMjtcbiAgICB0LnF1b3RlcmlnaHQgPSAyNzg7XG4gICAgdC5wYXJlbmxlZnQgPSAzMzM7XG4gICAgdC5wYXJlbnJpZ2h0ID0gMzMzO1xuICAgIHQuYXN0ZXJpc2sgPSAzODk7XG4gICAgdC5wbHVzID0gNTg0O1xuICAgIHQuY29tbWEgPSAyNzg7XG4gICAgdC5oeXBoZW4gPSAzMzM7XG4gICAgdC5wZXJpb2QgPSAyNzg7XG4gICAgdC5zbGFzaCA9IDI3ODtcbiAgICB0Lnplcm8gPSA1NTY7XG4gICAgdC5vbmUgPSA1NTY7XG4gICAgdC50d28gPSA1NTY7XG4gICAgdC50aHJlZSA9IDU1NjtcbiAgICB0LmZvdXIgPSA1NTY7XG4gICAgdC5maXZlID0gNTU2O1xuICAgIHQuc2l4ID0gNTU2O1xuICAgIHQuc2V2ZW4gPSA1NTY7XG4gICAgdC5laWdodCA9IDU1NjtcbiAgICB0Lm5pbmUgPSA1NTY7XG4gICAgdC5jb2xvbiA9IDMzMztcbiAgICB0LnNlbWljb2xvbiA9IDMzMztcbiAgICB0Lmxlc3MgPSA1ODQ7XG4gICAgdC5lcXVhbCA9IDU4NDtcbiAgICB0LmdyZWF0ZXIgPSA1ODQ7XG4gICAgdC5xdWVzdGlvbiA9IDYxMTtcbiAgICB0LmF0ID0gOTc1O1xuICAgIHQuQSA9IDcyMjtcbiAgICB0LkIgPSA3MjI7XG4gICAgdC5DID0gNzIyO1xuICAgIHQuRCA9IDcyMjtcbiAgICB0LkUgPSA2Njc7XG4gICAgdC5GID0gNjExO1xuICAgIHQuRyA9IDc3ODtcbiAgICB0LkggPSA3MjI7XG4gICAgdC5JID0gMjc4O1xuICAgIHQuSiA9IDU1NjtcbiAgICB0LksgPSA3MjI7XG4gICAgdC5MID0gNjExO1xuICAgIHQuTSA9IDgzMztcbiAgICB0Lk4gPSA3MjI7XG4gICAgdC5PID0gNzc4O1xuICAgIHQuUCA9IDY2NztcbiAgICB0LlEgPSA3Nzg7XG4gICAgdC5SID0gNzIyO1xuICAgIHQuUyA9IDY2NztcbiAgICB0LlQgPSA2MTE7XG4gICAgdC5VID0gNzIyO1xuICAgIHQuViA9IDY2NztcbiAgICB0LlcgPSA5NDQ7XG4gICAgdC5YID0gNjY3O1xuICAgIHQuWSA9IDY2NztcbiAgICB0LlogPSA2MTE7XG4gICAgdC5icmFja2V0bGVmdCA9IDMzMztcbiAgICB0LmJhY2tzbGFzaCA9IDI3ODtcbiAgICB0LmJyYWNrZXRyaWdodCA9IDMzMztcbiAgICB0LmFzY2lpY2lyY3VtID0gNTg0O1xuICAgIHQudW5kZXJzY29yZSA9IDU1NjtcbiAgICB0LnF1b3RlbGVmdCA9IDI3ODtcbiAgICB0LmEgPSA1NTY7XG4gICAgdC5iID0gNjExO1xuICAgIHQuYyA9IDU1NjtcbiAgICB0LmQgPSA2MTE7XG4gICAgdC5lID0gNTU2O1xuICAgIHQuZiA9IDMzMztcbiAgICB0LmcgPSA2MTE7XG4gICAgdC5oID0gNjExO1xuICAgIHQuaSA9IDI3ODtcbiAgICB0LmogPSAyNzg7XG4gICAgdC5rID0gNTU2O1xuICAgIHQubCA9IDI3ODtcbiAgICB0Lm0gPSA4ODk7XG4gICAgdC5uID0gNjExO1xuICAgIHQubyA9IDYxMTtcbiAgICB0LnAgPSA2MTE7XG4gICAgdC5xID0gNjExO1xuICAgIHQuciA9IDM4OTtcbiAgICB0LnMgPSA1NTY7XG4gICAgdC50ID0gMzMzO1xuICAgIHQudSA9IDYxMTtcbiAgICB0LnYgPSA1NTY7XG4gICAgdC53ID0gNzc4O1xuICAgIHQueCA9IDU1NjtcbiAgICB0LnkgPSA1NTY7XG4gICAgdC56ID0gNTAwO1xuICAgIHQuYnJhY2VsZWZ0ID0gMzg5O1xuICAgIHQuYmFyID0gMjgwO1xuICAgIHQuYnJhY2VyaWdodCA9IDM4OTtcbiAgICB0LmFzY2lpdGlsZGUgPSA1ODQ7XG4gICAgdC5leGNsYW1kb3duID0gMzMzO1xuICAgIHQuY2VudCA9IDU1NjtcbiAgICB0LnN0ZXJsaW5nID0gNTU2O1xuICAgIHQuZnJhY3Rpb24gPSAxNjc7XG4gICAgdC55ZW4gPSA1NTY7XG4gICAgdC5mbG9yaW4gPSA1NTY7XG4gICAgdC5zZWN0aW9uID0gNTU2O1xuICAgIHQuY3VycmVuY3kgPSA1NTY7XG4gICAgdC5xdW90ZXNpbmdsZSA9IDIzODtcbiAgICB0LnF1b3RlZGJsbGVmdCA9IDUwMDtcbiAgICB0Lmd1aWxsZW1vdGxlZnQgPSA1NTY7XG4gICAgdC5ndWlsc2luZ2xsZWZ0ID0gMzMzO1xuICAgIHQuZ3VpbHNpbmdscmlnaHQgPSAzMzM7XG4gICAgdC5maSA9IDYxMTtcbiAgICB0LmZsID0gNjExO1xuICAgIHQuZW5kYXNoID0gNTU2O1xuICAgIHQuZGFnZ2VyID0gNTU2O1xuICAgIHQuZGFnZ2VyZGJsID0gNTU2O1xuICAgIHQucGVyaW9kY2VudGVyZWQgPSAyNzg7XG4gICAgdC5wYXJhZ3JhcGggPSA1NTY7XG4gICAgdC5idWxsZXQgPSAzNTA7XG4gICAgdC5xdW90ZXNpbmdsYmFzZSA9IDI3ODtcbiAgICB0LnF1b3RlZGJsYmFzZSA9IDUwMDtcbiAgICB0LnF1b3RlZGJscmlnaHQgPSA1MDA7XG4gICAgdC5ndWlsbGVtb3RyaWdodCA9IDU1NjtcbiAgICB0LmVsbGlwc2lzID0gMTAwMDtcbiAgICB0LnBlcnRob3VzYW5kID0gMTAwMDtcbiAgICB0LnF1ZXN0aW9uZG93biA9IDYxMTtcbiAgICB0LmdyYXZlID0gMzMzO1xuICAgIHQuYWN1dGUgPSAzMzM7XG4gICAgdC5jaXJjdW1mbGV4ID0gMzMzO1xuICAgIHQudGlsZGUgPSAzMzM7XG4gICAgdC5tYWNyb24gPSAzMzM7XG4gICAgdC5icmV2ZSA9IDMzMztcbiAgICB0LmRvdGFjY2VudCA9IDMzMztcbiAgICB0LmRpZXJlc2lzID0gMzMzO1xuICAgIHQucmluZyA9IDMzMztcbiAgICB0LmNlZGlsbGEgPSAzMzM7XG4gICAgdC5odW5nYXJ1bWxhdXQgPSAzMzM7XG4gICAgdC5vZ29uZWsgPSAzMzM7XG4gICAgdC5jYXJvbiA9IDMzMztcbiAgICB0LmVtZGFzaCA9IDEwMDA7XG4gICAgdC5BRSA9IDEwMDA7XG4gICAgdC5vcmRmZW1pbmluZSA9IDM3MDtcbiAgICB0LkxzbGFzaCA9IDYxMTtcbiAgICB0Lk9zbGFzaCA9IDc3ODtcbiAgICB0Lk9FID0gMTAwMDtcbiAgICB0Lm9yZG1hc2N1bGluZSA9IDM2NTtcbiAgICB0LmFlID0gODg5O1xuICAgIHQuZG90bGVzc2kgPSAyNzg7XG4gICAgdC5sc2xhc2ggPSAyNzg7XG4gICAgdC5vc2xhc2ggPSA2MTE7XG4gICAgdC5vZSA9IDk0NDtcbiAgICB0Lmdlcm1hbmRibHMgPSA2MTE7XG4gICAgdC5JZGllcmVzaXMgPSAyNzg7XG4gICAgdC5lYWN1dGUgPSA1NTY7XG4gICAgdC5hYnJldmUgPSA1NTY7XG4gICAgdC51aHVuZ2FydW1sYXV0ID0gNjExO1xuICAgIHQuZWNhcm9uID0gNTU2O1xuICAgIHQuWWRpZXJlc2lzID0gNjY3O1xuICAgIHQuZGl2aWRlID0gNTg0O1xuICAgIHQuWWFjdXRlID0gNjY3O1xuICAgIHQuQWNpcmN1bWZsZXggPSA3MjI7XG4gICAgdC5hYWN1dGUgPSA1NTY7XG4gICAgdC5VY2lyY3VtZmxleCA9IDcyMjtcbiAgICB0LnlhY3V0ZSA9IDU1NjtcbiAgICB0LnNjb21tYWFjY2VudCA9IDU1NjtcbiAgICB0LmVjaXJjdW1mbGV4ID0gNTU2O1xuICAgIHQuVXJpbmcgPSA3MjI7XG4gICAgdC5VZGllcmVzaXMgPSA3MjI7XG4gICAgdC5hb2dvbmVrID0gNTU2O1xuICAgIHQuVWFjdXRlID0gNzIyO1xuICAgIHQudW9nb25layA9IDYxMTtcbiAgICB0LkVkaWVyZXNpcyA9IDY2NztcbiAgICB0LkRjcm9hdCA9IDcyMjtcbiAgICB0LmNvbW1hYWNjZW50ID0gMjUwO1xuICAgIHQuY29weXJpZ2h0ID0gNzM3O1xuICAgIHQuRW1hY3JvbiA9IDY2NztcbiAgICB0LmNjYXJvbiA9IDU1NjtcbiAgICB0LmFyaW5nID0gNTU2O1xuICAgIHQuTmNvbW1hYWNjZW50ID0gNzIyO1xuICAgIHQubGFjdXRlID0gMjc4O1xuICAgIHQuYWdyYXZlID0gNTU2O1xuICAgIHQuVGNvbW1hYWNjZW50ID0gNjExO1xuICAgIHQuQ2FjdXRlID0gNzIyO1xuICAgIHQuYXRpbGRlID0gNTU2O1xuICAgIHQuRWRvdGFjY2VudCA9IDY2NztcbiAgICB0LnNjYXJvbiA9IDU1NjtcbiAgICB0LnNjZWRpbGxhID0gNTU2O1xuICAgIHQuaWFjdXRlID0gMjc4O1xuICAgIHQubG96ZW5nZSA9IDQ5NDtcbiAgICB0LlJjYXJvbiA9IDcyMjtcbiAgICB0Lkdjb21tYWFjY2VudCA9IDc3ODtcbiAgICB0LnVjaXJjdW1mbGV4ID0gNjExO1xuICAgIHQuYWNpcmN1bWZsZXggPSA1NTY7XG4gICAgdC5BbWFjcm9uID0gNzIyO1xuICAgIHQucmNhcm9uID0gMzg5O1xuICAgIHQuY2NlZGlsbGEgPSA1NTY7XG4gICAgdC5aZG90YWNjZW50ID0gNjExO1xuICAgIHQuVGhvcm4gPSA2Njc7XG4gICAgdC5PbWFjcm9uID0gNzc4O1xuICAgIHQuUmFjdXRlID0gNzIyO1xuICAgIHQuU2FjdXRlID0gNjY3O1xuICAgIHQuZGNhcm9uID0gNzQzO1xuICAgIHQuVW1hY3JvbiA9IDcyMjtcbiAgICB0LnVyaW5nID0gNjExO1xuICAgIHQudGhyZWVzdXBlcmlvciA9IDMzMztcbiAgICB0Lk9ncmF2ZSA9IDc3ODtcbiAgICB0LkFncmF2ZSA9IDcyMjtcbiAgICB0LkFicmV2ZSA9IDcyMjtcbiAgICB0Lm11bHRpcGx5ID0gNTg0O1xuICAgIHQudWFjdXRlID0gNjExO1xuICAgIHQuVGNhcm9uID0gNjExO1xuICAgIHQucGFydGlhbGRpZmYgPSA0OTQ7XG4gICAgdC55ZGllcmVzaXMgPSA1NTY7XG4gICAgdC5OYWN1dGUgPSA3MjI7XG4gICAgdC5pY2lyY3VtZmxleCA9IDI3ODtcbiAgICB0LkVjaXJjdW1mbGV4ID0gNjY3O1xuICAgIHQuYWRpZXJlc2lzID0gNTU2O1xuICAgIHQuZWRpZXJlc2lzID0gNTU2O1xuICAgIHQuY2FjdXRlID0gNTU2O1xuICAgIHQubmFjdXRlID0gNjExO1xuICAgIHQudW1hY3JvbiA9IDYxMTtcbiAgICB0Lk5jYXJvbiA9IDcyMjtcbiAgICB0LklhY3V0ZSA9IDI3ODtcbiAgICB0LnBsdXNtaW51cyA9IDU4NDtcbiAgICB0LmJyb2tlbmJhciA9IDI4MDtcbiAgICB0LnJlZ2lzdGVyZWQgPSA3Mzc7XG4gICAgdC5HYnJldmUgPSA3Nzg7XG4gICAgdC5JZG90YWNjZW50ID0gMjc4O1xuICAgIHQuc3VtbWF0aW9uID0gNjAwO1xuICAgIHQuRWdyYXZlID0gNjY3O1xuICAgIHQucmFjdXRlID0gMzg5O1xuICAgIHQub21hY3JvbiA9IDYxMTtcbiAgICB0LlphY3V0ZSA9IDYxMTtcbiAgICB0LlpjYXJvbiA9IDYxMTtcbiAgICB0LmdyZWF0ZXJlcXVhbCA9IDU0OTtcbiAgICB0LkV0aCA9IDcyMjtcbiAgICB0LkNjZWRpbGxhID0gNzIyO1xuICAgIHQubGNvbW1hYWNjZW50ID0gMjc4O1xuICAgIHQudGNhcm9uID0gMzg5O1xuICAgIHQuZW9nb25layA9IDU1NjtcbiAgICB0LlVvZ29uZWsgPSA3MjI7XG4gICAgdC5BYWN1dGUgPSA3MjI7XG4gICAgdC5BZGllcmVzaXMgPSA3MjI7XG4gICAgdC5lZ3JhdmUgPSA1NTY7XG4gICAgdC56YWN1dGUgPSA1MDA7XG4gICAgdC5pb2dvbmVrID0gMjc4O1xuICAgIHQuT2FjdXRlID0gNzc4O1xuICAgIHQub2FjdXRlID0gNjExO1xuICAgIHQuYW1hY3JvbiA9IDU1NjtcbiAgICB0LnNhY3V0ZSA9IDU1NjtcbiAgICB0LmlkaWVyZXNpcyA9IDI3ODtcbiAgICB0Lk9jaXJjdW1mbGV4ID0gNzc4O1xuICAgIHQuVWdyYXZlID0gNzIyO1xuICAgIHQuRGVsdGEgPSA2MTI7XG4gICAgdC50aG9ybiA9IDYxMTtcbiAgICB0LnR3b3N1cGVyaW9yID0gMzMzO1xuICAgIHQuT2RpZXJlc2lzID0gNzc4O1xuICAgIHQubXUgPSA2MTE7XG4gICAgdC5pZ3JhdmUgPSAyNzg7XG4gICAgdC5vaHVuZ2FydW1sYXV0ID0gNjExO1xuICAgIHQuRW9nb25layA9IDY2NztcbiAgICB0LmRjcm9hdCA9IDYxMTtcbiAgICB0LnRocmVlcXVhcnRlcnMgPSA4MzQ7XG4gICAgdC5TY2VkaWxsYSA9IDY2NztcbiAgICB0LmxjYXJvbiA9IDQwMDtcbiAgICB0Lktjb21tYWFjY2VudCA9IDcyMjtcbiAgICB0LkxhY3V0ZSA9IDYxMTtcbiAgICB0LnRyYWRlbWFyayA9IDEwMDA7XG4gICAgdC5lZG90YWNjZW50ID0gNTU2O1xuICAgIHQuSWdyYXZlID0gMjc4O1xuICAgIHQuSW1hY3JvbiA9IDI3ODtcbiAgICB0LkxjYXJvbiA9IDYxMTtcbiAgICB0Lm9uZWhhbGYgPSA4MzQ7XG4gICAgdC5sZXNzZXF1YWwgPSA1NDk7XG4gICAgdC5vY2lyY3VtZmxleCA9IDYxMTtcbiAgICB0Lm50aWxkZSA9IDYxMTtcbiAgICB0LlVodW5nYXJ1bWxhdXQgPSA3MjI7XG4gICAgdC5FYWN1dGUgPSA2Njc7XG4gICAgdC5lbWFjcm9uID0gNTU2O1xuICAgIHQuZ2JyZXZlID0gNjExO1xuICAgIHQub25lcXVhcnRlciA9IDgzNDtcbiAgICB0LlNjYXJvbiA9IDY2NztcbiAgICB0LlNjb21tYWFjY2VudCA9IDY2NztcbiAgICB0Lk9odW5nYXJ1bWxhdXQgPSA3Nzg7XG4gICAgdC5kZWdyZWUgPSA0MDA7XG4gICAgdC5vZ3JhdmUgPSA2MTE7XG4gICAgdC5DY2Fyb24gPSA3MjI7XG4gICAgdC51Z3JhdmUgPSA2MTE7XG4gICAgdC5yYWRpY2FsID0gNTQ5O1xuICAgIHQuRGNhcm9uID0gNzIyO1xuICAgIHQucmNvbW1hYWNjZW50ID0gMzg5O1xuICAgIHQuTnRpbGRlID0gNzIyO1xuICAgIHQub3RpbGRlID0gNjExO1xuICAgIHQuUmNvbW1hYWNjZW50ID0gNzIyO1xuICAgIHQuTGNvbW1hYWNjZW50ID0gNjExO1xuICAgIHQuQXRpbGRlID0gNzIyO1xuICAgIHQuQW9nb25layA9IDcyMjtcbiAgICB0LkFyaW5nID0gNzIyO1xuICAgIHQuT3RpbGRlID0gNzc4O1xuICAgIHQuemRvdGFjY2VudCA9IDUwMDtcbiAgICB0LkVjYXJvbiA9IDY2NztcbiAgICB0LklvZ29uZWsgPSAyNzg7XG4gICAgdC5rY29tbWFhY2NlbnQgPSA1NTY7XG4gICAgdC5taW51cyA9IDU4NDtcbiAgICB0LkljaXJjdW1mbGV4ID0gMjc4O1xuICAgIHQubmNhcm9uID0gNjExO1xuICAgIHQudGNvbW1hYWNjZW50ID0gMzMzO1xuICAgIHQubG9naWNhbG5vdCA9IDU4NDtcbiAgICB0Lm9kaWVyZXNpcyA9IDYxMTtcbiAgICB0LnVkaWVyZXNpcyA9IDYxMTtcbiAgICB0Lm5vdGVxdWFsID0gNTQ5O1xuICAgIHQuZ2NvbW1hYWNjZW50ID0gNjExO1xuICAgIHQuZXRoID0gNjExO1xuICAgIHQuemNhcm9uID0gNTAwO1xuICAgIHQubmNvbW1hYWNjZW50ID0gNjExO1xuICAgIHQub25lc3VwZXJpb3IgPSAzMzM7XG4gICAgdC5pbWFjcm9uID0gMjc4O1xuICAgIHQuRXVybyA9IDU1NjtcbiAgfSk7XG4gIHRbXCJIZWx2ZXRpY2EtT2JsaXF1ZVwiXSA9ICgwLCBfY29yZV91dGlscy5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gICAgdC5zcGFjZSA9IDI3ODtcbiAgICB0LmV4Y2xhbSA9IDI3ODtcbiAgICB0LnF1b3RlZGJsID0gMzU1O1xuICAgIHQubnVtYmVyc2lnbiA9IDU1NjtcbiAgICB0LmRvbGxhciA9IDU1NjtcbiAgICB0LnBlcmNlbnQgPSA4ODk7XG4gICAgdC5hbXBlcnNhbmQgPSA2Njc7XG4gICAgdC5xdW90ZXJpZ2h0ID0gMjIyO1xuICAgIHQucGFyZW5sZWZ0ID0gMzMzO1xuICAgIHQucGFyZW5yaWdodCA9IDMzMztcbiAgICB0LmFzdGVyaXNrID0gMzg5O1xuICAgIHQucGx1cyA9IDU4NDtcbiAgICB0LmNvbW1hID0gMjc4O1xuICAgIHQuaHlwaGVuID0gMzMzO1xuICAgIHQucGVyaW9kID0gMjc4O1xuICAgIHQuc2xhc2ggPSAyNzg7XG4gICAgdC56ZXJvID0gNTU2O1xuICAgIHQub25lID0gNTU2O1xuICAgIHQudHdvID0gNTU2O1xuICAgIHQudGhyZWUgPSA1NTY7XG4gICAgdC5mb3VyID0gNTU2O1xuICAgIHQuZml2ZSA9IDU1NjtcbiAgICB0LnNpeCA9IDU1NjtcbiAgICB0LnNldmVuID0gNTU2O1xuICAgIHQuZWlnaHQgPSA1NTY7XG4gICAgdC5uaW5lID0gNTU2O1xuICAgIHQuY29sb24gPSAyNzg7XG4gICAgdC5zZW1pY29sb24gPSAyNzg7XG4gICAgdC5sZXNzID0gNTg0O1xuICAgIHQuZXF1YWwgPSA1ODQ7XG4gICAgdC5ncmVhdGVyID0gNTg0O1xuICAgIHQucXVlc3Rpb24gPSA1NTY7XG4gICAgdC5hdCA9IDEwMTU7XG4gICAgdC5BID0gNjY3O1xuICAgIHQuQiA9IDY2NztcbiAgICB0LkMgPSA3MjI7XG4gICAgdC5EID0gNzIyO1xuICAgIHQuRSA9IDY2NztcbiAgICB0LkYgPSA2MTE7XG4gICAgdC5HID0gNzc4O1xuICAgIHQuSCA9IDcyMjtcbiAgICB0LkkgPSAyNzg7XG4gICAgdC5KID0gNTAwO1xuICAgIHQuSyA9IDY2NztcbiAgICB0LkwgPSA1NTY7XG4gICAgdC5NID0gODMzO1xuICAgIHQuTiA9IDcyMjtcbiAgICB0Lk8gPSA3Nzg7XG4gICAgdC5QID0gNjY3O1xuICAgIHQuUSA9IDc3ODtcbiAgICB0LlIgPSA3MjI7XG4gICAgdC5TID0gNjY3O1xuICAgIHQuVCA9IDYxMTtcbiAgICB0LlUgPSA3MjI7XG4gICAgdC5WID0gNjY3O1xuICAgIHQuVyA9IDk0NDtcbiAgICB0LlggPSA2Njc7XG4gICAgdC5ZID0gNjY3O1xuICAgIHQuWiA9IDYxMTtcbiAgICB0LmJyYWNrZXRsZWZ0ID0gMjc4O1xuICAgIHQuYmFja3NsYXNoID0gMjc4O1xuICAgIHQuYnJhY2tldHJpZ2h0ID0gMjc4O1xuICAgIHQuYXNjaWljaXJjdW0gPSA0Njk7XG4gICAgdC51bmRlcnNjb3JlID0gNTU2O1xuICAgIHQucXVvdGVsZWZ0ID0gMjIyO1xuICAgIHQuYSA9IDU1NjtcbiAgICB0LmIgPSA1NTY7XG4gICAgdC5jID0gNTAwO1xuICAgIHQuZCA9IDU1NjtcbiAgICB0LmUgPSA1NTY7XG4gICAgdC5mID0gMjc4O1xuICAgIHQuZyA9IDU1NjtcbiAgICB0LmggPSA1NTY7XG4gICAgdC5pID0gMjIyO1xuICAgIHQuaiA9IDIyMjtcbiAgICB0LmsgPSA1MDA7XG4gICAgdC5sID0gMjIyO1xuICAgIHQubSA9IDgzMztcbiAgICB0Lm4gPSA1NTY7XG4gICAgdC5vID0gNTU2O1xuICAgIHQucCA9IDU1NjtcbiAgICB0LnEgPSA1NTY7XG4gICAgdC5yID0gMzMzO1xuICAgIHQucyA9IDUwMDtcbiAgICB0LnQgPSAyNzg7XG4gICAgdC51ID0gNTU2O1xuICAgIHQudiA9IDUwMDtcbiAgICB0LncgPSA3MjI7XG4gICAgdC54ID0gNTAwO1xuICAgIHQueSA9IDUwMDtcbiAgICB0LnogPSA1MDA7XG4gICAgdC5icmFjZWxlZnQgPSAzMzQ7XG4gICAgdC5iYXIgPSAyNjA7XG4gICAgdC5icmFjZXJpZ2h0ID0gMzM0O1xuICAgIHQuYXNjaWl0aWxkZSA9IDU4NDtcbiAgICB0LmV4Y2xhbWRvd24gPSAzMzM7XG4gICAgdC5jZW50ID0gNTU2O1xuICAgIHQuc3RlcmxpbmcgPSA1NTY7XG4gICAgdC5mcmFjdGlvbiA9IDE2NztcbiAgICB0LnllbiA9IDU1NjtcbiAgICB0LmZsb3JpbiA9IDU1NjtcbiAgICB0LnNlY3Rpb24gPSA1NTY7XG4gICAgdC5jdXJyZW5jeSA9IDU1NjtcbiAgICB0LnF1b3Rlc2luZ2xlID0gMTkxO1xuICAgIHQucXVvdGVkYmxsZWZ0ID0gMzMzO1xuICAgIHQuZ3VpbGxlbW90bGVmdCA9IDU1NjtcbiAgICB0Lmd1aWxzaW5nbGxlZnQgPSAzMzM7XG4gICAgdC5ndWlsc2luZ2xyaWdodCA9IDMzMztcbiAgICB0LmZpID0gNTAwO1xuICAgIHQuZmwgPSA1MDA7XG4gICAgdC5lbmRhc2ggPSA1NTY7XG4gICAgdC5kYWdnZXIgPSA1NTY7XG4gICAgdC5kYWdnZXJkYmwgPSA1NTY7XG4gICAgdC5wZXJpb2RjZW50ZXJlZCA9IDI3ODtcbiAgICB0LnBhcmFncmFwaCA9IDUzNztcbiAgICB0LmJ1bGxldCA9IDM1MDtcbiAgICB0LnF1b3Rlc2luZ2xiYXNlID0gMjIyO1xuICAgIHQucXVvdGVkYmxiYXNlID0gMzMzO1xuICAgIHQucXVvdGVkYmxyaWdodCA9IDMzMztcbiAgICB0Lmd1aWxsZW1vdHJpZ2h0ID0gNTU2O1xuICAgIHQuZWxsaXBzaXMgPSAxMDAwO1xuICAgIHQucGVydGhvdXNhbmQgPSAxMDAwO1xuICAgIHQucXVlc3Rpb25kb3duID0gNjExO1xuICAgIHQuZ3JhdmUgPSAzMzM7XG4gICAgdC5hY3V0ZSA9IDMzMztcbiAgICB0LmNpcmN1bWZsZXggPSAzMzM7XG4gICAgdC50aWxkZSA9IDMzMztcbiAgICB0Lm1hY3JvbiA9IDMzMztcbiAgICB0LmJyZXZlID0gMzMzO1xuICAgIHQuZG90YWNjZW50ID0gMzMzO1xuICAgIHQuZGllcmVzaXMgPSAzMzM7XG4gICAgdC5yaW5nID0gMzMzO1xuICAgIHQuY2VkaWxsYSA9IDMzMztcbiAgICB0Lmh1bmdhcnVtbGF1dCA9IDMzMztcbiAgICB0Lm9nb25layA9IDMzMztcbiAgICB0LmNhcm9uID0gMzMzO1xuICAgIHQuZW1kYXNoID0gMTAwMDtcbiAgICB0LkFFID0gMTAwMDtcbiAgICB0Lm9yZGZlbWluaW5lID0gMzcwO1xuICAgIHQuTHNsYXNoID0gNTU2O1xuICAgIHQuT3NsYXNoID0gNzc4O1xuICAgIHQuT0UgPSAxMDAwO1xuICAgIHQub3JkbWFzY3VsaW5lID0gMzY1O1xuICAgIHQuYWUgPSA4ODk7XG4gICAgdC5kb3RsZXNzaSA9IDI3ODtcbiAgICB0LmxzbGFzaCA9IDIyMjtcbiAgICB0Lm9zbGFzaCA9IDYxMTtcbiAgICB0Lm9lID0gOTQ0O1xuICAgIHQuZ2VybWFuZGJscyA9IDYxMTtcbiAgICB0LklkaWVyZXNpcyA9IDI3ODtcbiAgICB0LmVhY3V0ZSA9IDU1NjtcbiAgICB0LmFicmV2ZSA9IDU1NjtcbiAgICB0LnVodW5nYXJ1bWxhdXQgPSA1NTY7XG4gICAgdC5lY2Fyb24gPSA1NTY7XG4gICAgdC5ZZGllcmVzaXMgPSA2Njc7XG4gICAgdC5kaXZpZGUgPSA1ODQ7XG4gICAgdC5ZYWN1dGUgPSA2Njc7XG4gICAgdC5BY2lyY3VtZmxleCA9IDY2NztcbiAgICB0LmFhY3V0ZSA9IDU1NjtcbiAgICB0LlVjaXJjdW1mbGV4ID0gNzIyO1xuICAgIHQueWFjdXRlID0gNTAwO1xuICAgIHQuc2NvbW1hYWNjZW50ID0gNTAwO1xuICAgIHQuZWNpcmN1bWZsZXggPSA1NTY7XG4gICAgdC5VcmluZyA9IDcyMjtcbiAgICB0LlVkaWVyZXNpcyA9IDcyMjtcbiAgICB0LmFvZ29uZWsgPSA1NTY7XG4gICAgdC5VYWN1dGUgPSA3MjI7XG4gICAgdC51b2dvbmVrID0gNTU2O1xuICAgIHQuRWRpZXJlc2lzID0gNjY3O1xuICAgIHQuRGNyb2F0ID0gNzIyO1xuICAgIHQuY29tbWFhY2NlbnQgPSAyNTA7XG4gICAgdC5jb3B5cmlnaHQgPSA3Mzc7XG4gICAgdC5FbWFjcm9uID0gNjY3O1xuICAgIHQuY2Nhcm9uID0gNTAwO1xuICAgIHQuYXJpbmcgPSA1NTY7XG4gICAgdC5OY29tbWFhY2NlbnQgPSA3MjI7XG4gICAgdC5sYWN1dGUgPSAyMjI7XG4gICAgdC5hZ3JhdmUgPSA1NTY7XG4gICAgdC5UY29tbWFhY2NlbnQgPSA2MTE7XG4gICAgdC5DYWN1dGUgPSA3MjI7XG4gICAgdC5hdGlsZGUgPSA1NTY7XG4gICAgdC5FZG90YWNjZW50ID0gNjY3O1xuICAgIHQuc2Nhcm9uID0gNTAwO1xuICAgIHQuc2NlZGlsbGEgPSA1MDA7XG4gICAgdC5pYWN1dGUgPSAyNzg7XG4gICAgdC5sb3plbmdlID0gNDcxO1xuICAgIHQuUmNhcm9uID0gNzIyO1xuICAgIHQuR2NvbW1hYWNjZW50ID0gNzc4O1xuICAgIHQudWNpcmN1bWZsZXggPSA1NTY7XG4gICAgdC5hY2lyY3VtZmxleCA9IDU1NjtcbiAgICB0LkFtYWNyb24gPSA2Njc7XG4gICAgdC5yY2Fyb24gPSAzMzM7XG4gICAgdC5jY2VkaWxsYSA9IDUwMDtcbiAgICB0Llpkb3RhY2NlbnQgPSA2MTE7XG4gICAgdC5UaG9ybiA9IDY2NztcbiAgICB0Lk9tYWNyb24gPSA3Nzg7XG4gICAgdC5SYWN1dGUgPSA3MjI7XG4gICAgdC5TYWN1dGUgPSA2Njc7XG4gICAgdC5kY2Fyb24gPSA2NDM7XG4gICAgdC5VbWFjcm9uID0gNzIyO1xuICAgIHQudXJpbmcgPSA1NTY7XG4gICAgdC50aHJlZXN1cGVyaW9yID0gMzMzO1xuICAgIHQuT2dyYXZlID0gNzc4O1xuICAgIHQuQWdyYXZlID0gNjY3O1xuICAgIHQuQWJyZXZlID0gNjY3O1xuICAgIHQubXVsdGlwbHkgPSA1ODQ7XG4gICAgdC51YWN1dGUgPSA1NTY7XG4gICAgdC5UY2Fyb24gPSA2MTE7XG4gICAgdC5wYXJ0aWFsZGlmZiA9IDQ3NjtcbiAgICB0LnlkaWVyZXNpcyA9IDUwMDtcbiAgICB0Lk5hY3V0ZSA9IDcyMjtcbiAgICB0LmljaXJjdW1mbGV4ID0gMjc4O1xuICAgIHQuRWNpcmN1bWZsZXggPSA2Njc7XG4gICAgdC5hZGllcmVzaXMgPSA1NTY7XG4gICAgdC5lZGllcmVzaXMgPSA1NTY7XG4gICAgdC5jYWN1dGUgPSA1MDA7XG4gICAgdC5uYWN1dGUgPSA1NTY7XG4gICAgdC51bWFjcm9uID0gNTU2O1xuICAgIHQuTmNhcm9uID0gNzIyO1xuICAgIHQuSWFjdXRlID0gMjc4O1xuICAgIHQucGx1c21pbnVzID0gNTg0O1xuICAgIHQuYnJva2VuYmFyID0gMjYwO1xuICAgIHQucmVnaXN0ZXJlZCA9IDczNztcbiAgICB0LkdicmV2ZSA9IDc3ODtcbiAgICB0Lklkb3RhY2NlbnQgPSAyNzg7XG4gICAgdC5zdW1tYXRpb24gPSA2MDA7XG4gICAgdC5FZ3JhdmUgPSA2Njc7XG4gICAgdC5yYWN1dGUgPSAzMzM7XG4gICAgdC5vbWFjcm9uID0gNTU2O1xuICAgIHQuWmFjdXRlID0gNjExO1xuICAgIHQuWmNhcm9uID0gNjExO1xuICAgIHQuZ3JlYXRlcmVxdWFsID0gNTQ5O1xuICAgIHQuRXRoID0gNzIyO1xuICAgIHQuQ2NlZGlsbGEgPSA3MjI7XG4gICAgdC5sY29tbWFhY2NlbnQgPSAyMjI7XG4gICAgdC50Y2Fyb24gPSAzMTc7XG4gICAgdC5lb2dvbmVrID0gNTU2O1xuICAgIHQuVW9nb25layA9IDcyMjtcbiAgICB0LkFhY3V0ZSA9IDY2NztcbiAgICB0LkFkaWVyZXNpcyA9IDY2NztcbiAgICB0LmVncmF2ZSA9IDU1NjtcbiAgICB0LnphY3V0ZSA9IDUwMDtcbiAgICB0LmlvZ29uZWsgPSAyMjI7XG4gICAgdC5PYWN1dGUgPSA3Nzg7XG4gICAgdC5vYWN1dGUgPSA1NTY7XG4gICAgdC5hbWFjcm9uID0gNTU2O1xuICAgIHQuc2FjdXRlID0gNTAwO1xuICAgIHQuaWRpZXJlc2lzID0gMjc4O1xuICAgIHQuT2NpcmN1bWZsZXggPSA3Nzg7XG4gICAgdC5VZ3JhdmUgPSA3MjI7XG4gICAgdC5EZWx0YSA9IDYxMjtcbiAgICB0LnRob3JuID0gNTU2O1xuICAgIHQudHdvc3VwZXJpb3IgPSAzMzM7XG4gICAgdC5PZGllcmVzaXMgPSA3Nzg7XG4gICAgdC5tdSA9IDU1NjtcbiAgICB0LmlncmF2ZSA9IDI3ODtcbiAgICB0Lm9odW5nYXJ1bWxhdXQgPSA1NTY7XG4gICAgdC5Fb2dvbmVrID0gNjY3O1xuICAgIHQuZGNyb2F0ID0gNTU2O1xuICAgIHQudGhyZWVxdWFydGVycyA9IDgzNDtcbiAgICB0LlNjZWRpbGxhID0gNjY3O1xuICAgIHQubGNhcm9uID0gMjk5O1xuICAgIHQuS2NvbW1hYWNjZW50ID0gNjY3O1xuICAgIHQuTGFjdXRlID0gNTU2O1xuICAgIHQudHJhZGVtYXJrID0gMTAwMDtcbiAgICB0LmVkb3RhY2NlbnQgPSA1NTY7XG4gICAgdC5JZ3JhdmUgPSAyNzg7XG4gICAgdC5JbWFjcm9uID0gMjc4O1xuICAgIHQuTGNhcm9uID0gNTU2O1xuICAgIHQub25laGFsZiA9IDgzNDtcbiAgICB0Lmxlc3NlcXVhbCA9IDU0OTtcbiAgICB0Lm9jaXJjdW1mbGV4ID0gNTU2O1xuICAgIHQubnRpbGRlID0gNTU2O1xuICAgIHQuVWh1bmdhcnVtbGF1dCA9IDcyMjtcbiAgICB0LkVhY3V0ZSA9IDY2NztcbiAgICB0LmVtYWNyb24gPSA1NTY7XG4gICAgdC5nYnJldmUgPSA1NTY7XG4gICAgdC5vbmVxdWFydGVyID0gODM0O1xuICAgIHQuU2Nhcm9uID0gNjY3O1xuICAgIHQuU2NvbW1hYWNjZW50ID0gNjY3O1xuICAgIHQuT2h1bmdhcnVtbGF1dCA9IDc3ODtcbiAgICB0LmRlZ3JlZSA9IDQwMDtcbiAgICB0Lm9ncmF2ZSA9IDU1NjtcbiAgICB0LkNjYXJvbiA9IDcyMjtcbiAgICB0LnVncmF2ZSA9IDU1NjtcbiAgICB0LnJhZGljYWwgPSA0NTM7XG4gICAgdC5EY2Fyb24gPSA3MjI7XG4gICAgdC5yY29tbWFhY2NlbnQgPSAzMzM7XG4gICAgdC5OdGlsZGUgPSA3MjI7XG4gICAgdC5vdGlsZGUgPSA1NTY7XG4gICAgdC5SY29tbWFhY2NlbnQgPSA3MjI7XG4gICAgdC5MY29tbWFhY2NlbnQgPSA1NTY7XG4gICAgdC5BdGlsZGUgPSA2Njc7XG4gICAgdC5Bb2dvbmVrID0gNjY3O1xuICAgIHQuQXJpbmcgPSA2Njc7XG4gICAgdC5PdGlsZGUgPSA3Nzg7XG4gICAgdC56ZG90YWNjZW50ID0gNTAwO1xuICAgIHQuRWNhcm9uID0gNjY3O1xuICAgIHQuSW9nb25layA9IDI3ODtcbiAgICB0Lmtjb21tYWFjY2VudCA9IDUwMDtcbiAgICB0Lm1pbnVzID0gNTg0O1xuICAgIHQuSWNpcmN1bWZsZXggPSAyNzg7XG4gICAgdC5uY2Fyb24gPSA1NTY7XG4gICAgdC50Y29tbWFhY2NlbnQgPSAyNzg7XG4gICAgdC5sb2dpY2Fsbm90ID0gNTg0O1xuICAgIHQub2RpZXJlc2lzID0gNTU2O1xuICAgIHQudWRpZXJlc2lzID0gNTU2O1xuICAgIHQubm90ZXF1YWwgPSA1NDk7XG4gICAgdC5nY29tbWFhY2NlbnQgPSA1NTY7XG4gICAgdC5ldGggPSA1NTY7XG4gICAgdC56Y2Fyb24gPSA1MDA7XG4gICAgdC5uY29tbWFhY2NlbnQgPSA1NTY7XG4gICAgdC5vbmVzdXBlcmlvciA9IDMzMztcbiAgICB0LmltYWNyb24gPSAyNzg7XG4gICAgdC5FdXJvID0gNTU2O1xuICB9KTtcbiAgdC5TeW1ib2wgPSAoMCwgX2NvcmVfdXRpbHMuZ2V0TG9va3VwVGFibGVGYWN0b3J5KShmdW5jdGlvbiAodCkge1xuICAgIHQuc3BhY2UgPSAyNTA7XG4gICAgdC5leGNsYW0gPSAzMzM7XG4gICAgdC51bml2ZXJzYWwgPSA3MTM7XG4gICAgdC5udW1iZXJzaWduID0gNTAwO1xuICAgIHQuZXhpc3RlbnRpYWwgPSA1NDk7XG4gICAgdC5wZXJjZW50ID0gODMzO1xuICAgIHQuYW1wZXJzYW5kID0gNzc4O1xuICAgIHQuc3VjaHRoYXQgPSA0Mzk7XG4gICAgdC5wYXJlbmxlZnQgPSAzMzM7XG4gICAgdC5wYXJlbnJpZ2h0ID0gMzMzO1xuICAgIHQuYXN0ZXJpc2ttYXRoID0gNTAwO1xuICAgIHQucGx1cyA9IDU0OTtcbiAgICB0LmNvbW1hID0gMjUwO1xuICAgIHQubWludXMgPSA1NDk7XG4gICAgdC5wZXJpb2QgPSAyNTA7XG4gICAgdC5zbGFzaCA9IDI3ODtcbiAgICB0Lnplcm8gPSA1MDA7XG4gICAgdC5vbmUgPSA1MDA7XG4gICAgdC50d28gPSA1MDA7XG4gICAgdC50aHJlZSA9IDUwMDtcbiAgICB0LmZvdXIgPSA1MDA7XG4gICAgdC5maXZlID0gNTAwO1xuICAgIHQuc2l4ID0gNTAwO1xuICAgIHQuc2V2ZW4gPSA1MDA7XG4gICAgdC5laWdodCA9IDUwMDtcbiAgICB0Lm5pbmUgPSA1MDA7XG4gICAgdC5jb2xvbiA9IDI3ODtcbiAgICB0LnNlbWljb2xvbiA9IDI3ODtcbiAgICB0Lmxlc3MgPSA1NDk7XG4gICAgdC5lcXVhbCA9IDU0OTtcbiAgICB0LmdyZWF0ZXIgPSA1NDk7XG4gICAgdC5xdWVzdGlvbiA9IDQ0NDtcbiAgICB0LmNvbmdydWVudCA9IDU0OTtcbiAgICB0LkFscGhhID0gNzIyO1xuICAgIHQuQmV0YSA9IDY2NztcbiAgICB0LkNoaSA9IDcyMjtcbiAgICB0LkRlbHRhID0gNjEyO1xuICAgIHQuRXBzaWxvbiA9IDYxMTtcbiAgICB0LlBoaSA9IDc2MztcbiAgICB0LkdhbW1hID0gNjAzO1xuICAgIHQuRXRhID0gNzIyO1xuICAgIHQuSW90YSA9IDMzMztcbiAgICB0LnRoZXRhMSA9IDYzMTtcbiAgICB0LkthcHBhID0gNzIyO1xuICAgIHQuTGFtYmRhID0gNjg2O1xuICAgIHQuTXUgPSA4ODk7XG4gICAgdC5OdSA9IDcyMjtcbiAgICB0Lk9taWNyb24gPSA3MjI7XG4gICAgdC5QaSA9IDc2ODtcbiAgICB0LlRoZXRhID0gNzQxO1xuICAgIHQuUmhvID0gNTU2O1xuICAgIHQuU2lnbWEgPSA1OTI7XG4gICAgdC5UYXUgPSA2MTE7XG4gICAgdC5VcHNpbG9uID0gNjkwO1xuICAgIHQuc2lnbWExID0gNDM5O1xuICAgIHQuT21lZ2EgPSA3Njg7XG4gICAgdC5YaSA9IDY0NTtcbiAgICB0LlBzaSA9IDc5NTtcbiAgICB0LlpldGEgPSA2MTE7XG4gICAgdC5icmFja2V0bGVmdCA9IDMzMztcbiAgICB0LnRoZXJlZm9yZSA9IDg2MztcbiAgICB0LmJyYWNrZXRyaWdodCA9IDMzMztcbiAgICB0LnBlcnBlbmRpY3VsYXIgPSA2NTg7XG4gICAgdC51bmRlcnNjb3JlID0gNTAwO1xuICAgIHQucmFkaWNhbGV4ID0gNTAwO1xuICAgIHQuYWxwaGEgPSA2MzE7XG4gICAgdC5iZXRhID0gNTQ5O1xuICAgIHQuY2hpID0gNTQ5O1xuICAgIHQuZGVsdGEgPSA0OTQ7XG4gICAgdC5lcHNpbG9uID0gNDM5O1xuICAgIHQucGhpID0gNTIxO1xuICAgIHQuZ2FtbWEgPSA0MTE7XG4gICAgdC5ldGEgPSA2MDM7XG4gICAgdC5pb3RhID0gMzI5O1xuICAgIHQucGhpMSA9IDYwMztcbiAgICB0LmthcHBhID0gNTQ5O1xuICAgIHQubGFtYmRhID0gNTQ5O1xuICAgIHQubXUgPSA1NzY7XG4gICAgdC5udSA9IDUyMTtcbiAgICB0Lm9taWNyb24gPSA1NDk7XG4gICAgdC5waSA9IDU0OTtcbiAgICB0LnRoZXRhID0gNTIxO1xuICAgIHQucmhvID0gNTQ5O1xuICAgIHQuc2lnbWEgPSA2MDM7XG4gICAgdC50YXUgPSA0Mzk7XG4gICAgdC51cHNpbG9uID0gNTc2O1xuICAgIHQub21lZ2ExID0gNzEzO1xuICAgIHQub21lZ2EgPSA2ODY7XG4gICAgdC54aSA9IDQ5MztcbiAgICB0LnBzaSA9IDY4NjtcbiAgICB0LnpldGEgPSA0OTQ7XG4gICAgdC5icmFjZWxlZnQgPSA0ODA7XG4gICAgdC5iYXIgPSAyMDA7XG4gICAgdC5icmFjZXJpZ2h0ID0gNDgwO1xuICAgIHQuc2ltaWxhciA9IDU0OTtcbiAgICB0LkV1cm8gPSA3NTA7XG4gICAgdC5VcHNpbG9uMSA9IDYyMDtcbiAgICB0Lm1pbnV0ZSA9IDI0NztcbiAgICB0Lmxlc3NlcXVhbCA9IDU0OTtcbiAgICB0LmZyYWN0aW9uID0gMTY3O1xuICAgIHQuaW5maW5pdHkgPSA3MTM7XG4gICAgdC5mbG9yaW4gPSA1MDA7XG4gICAgdC5jbHViID0gNzUzO1xuICAgIHQuZGlhbW9uZCA9IDc1MztcbiAgICB0LmhlYXJ0ID0gNzUzO1xuICAgIHQuc3BhZGUgPSA3NTM7XG4gICAgdC5hcnJvd2JvdGggPSAxMDQyO1xuICAgIHQuYXJyb3dsZWZ0ID0gOTg3O1xuICAgIHQuYXJyb3d1cCA9IDYwMztcbiAgICB0LmFycm93cmlnaHQgPSA5ODc7XG4gICAgdC5hcnJvd2Rvd24gPSA2MDM7XG4gICAgdC5kZWdyZWUgPSA0MDA7XG4gICAgdC5wbHVzbWludXMgPSA1NDk7XG4gICAgdC5zZWNvbmQgPSA0MTE7XG4gICAgdC5ncmVhdGVyZXF1YWwgPSA1NDk7XG4gICAgdC5tdWx0aXBseSA9IDU0OTtcbiAgICB0LnByb3BvcnRpb25hbCA9IDcxMztcbiAgICB0LnBhcnRpYWxkaWZmID0gNDk0O1xuICAgIHQuYnVsbGV0ID0gNDYwO1xuICAgIHQuZGl2aWRlID0gNTQ5O1xuICAgIHQubm90ZXF1YWwgPSA1NDk7XG4gICAgdC5lcXVpdmFsZW5jZSA9IDU0OTtcbiAgICB0LmFwcHJveGVxdWFsID0gNTQ5O1xuICAgIHQuZWxsaXBzaXMgPSAxMDAwO1xuICAgIHQuYXJyb3d2ZXJ0ZXggPSA2MDM7XG4gICAgdC5hcnJvd2hvcml6ZXggPSAxMDAwO1xuICAgIHQuY2FycmlhZ2VyZXR1cm4gPSA2NTg7XG4gICAgdC5hbGVwaCA9IDgyMztcbiAgICB0LklmcmFrdHVyID0gNjg2O1xuICAgIHQuUmZyYWt0dXIgPSA3OTU7XG4gICAgdC53ZWllcnN0cmFzcyA9IDk4NztcbiAgICB0LmNpcmNsZW11bHRpcGx5ID0gNzY4O1xuICAgIHQuY2lyY2xlcGx1cyA9IDc2ODtcbiAgICB0LmVtcHR5c2V0ID0gODIzO1xuICAgIHQuaW50ZXJzZWN0aW9uID0gNzY4O1xuICAgIHQudW5pb24gPSA3Njg7XG4gICAgdC5wcm9wZXJzdXBlcnNldCA9IDcxMztcbiAgICB0LnJlZmxleHN1cGVyc2V0ID0gNzEzO1xuICAgIHQubm90c3Vic2V0ID0gNzEzO1xuICAgIHQucHJvcGVyc3Vic2V0ID0gNzEzO1xuICAgIHQucmVmbGV4c3Vic2V0ID0gNzEzO1xuICAgIHQuZWxlbWVudCA9IDcxMztcbiAgICB0Lm5vdGVsZW1lbnQgPSA3MTM7XG4gICAgdC5hbmdsZSA9IDc2ODtcbiAgICB0LmdyYWRpZW50ID0gNzEzO1xuICAgIHQucmVnaXN0ZXJzZXJpZiA9IDc5MDtcbiAgICB0LmNvcHlyaWdodHNlcmlmID0gNzkwO1xuICAgIHQudHJhZGVtYXJrc2VyaWYgPSA4OTA7XG4gICAgdC5wcm9kdWN0ID0gODIzO1xuICAgIHQucmFkaWNhbCA9IDU0OTtcbiAgICB0LmRvdG1hdGggPSAyNTA7XG4gICAgdC5sb2dpY2Fsbm90ID0gNzEzO1xuICAgIHQubG9naWNhbGFuZCA9IDYwMztcbiAgICB0LmxvZ2ljYWxvciA9IDYwMztcbiAgICB0LmFycm93ZGJsYm90aCA9IDEwNDI7XG4gICAgdC5hcnJvd2RibGxlZnQgPSA5ODc7XG4gICAgdC5hcnJvd2RibHVwID0gNjAzO1xuICAgIHQuYXJyb3dkYmxyaWdodCA9IDk4NztcbiAgICB0LmFycm93ZGJsZG93biA9IDYwMztcbiAgICB0LmxvemVuZ2UgPSA0OTQ7XG4gICAgdC5hbmdsZWxlZnQgPSAzMjk7XG4gICAgdC5yZWdpc3RlcnNhbnMgPSA3OTA7XG4gICAgdC5jb3B5cmlnaHRzYW5zID0gNzkwO1xuICAgIHQudHJhZGVtYXJrc2FucyA9IDc4NjtcbiAgICB0LnN1bW1hdGlvbiA9IDcxMztcbiAgICB0LnBhcmVubGVmdHRwID0gMzg0O1xuICAgIHQucGFyZW5sZWZ0ZXggPSAzODQ7XG4gICAgdC5wYXJlbmxlZnRidCA9IDM4NDtcbiAgICB0LmJyYWNrZXRsZWZ0dHAgPSAzODQ7XG4gICAgdC5icmFja2V0bGVmdGV4ID0gMzg0O1xuICAgIHQuYnJhY2tldGxlZnRidCA9IDM4NDtcbiAgICB0LmJyYWNlbGVmdHRwID0gNDk0O1xuICAgIHQuYnJhY2VsZWZ0bWlkID0gNDk0O1xuICAgIHQuYnJhY2VsZWZ0YnQgPSA0OTQ7XG4gICAgdC5icmFjZWV4ID0gNDk0O1xuICAgIHQuYW5nbGVyaWdodCA9IDMyOTtcbiAgICB0LmludGVncmFsID0gMjc0O1xuICAgIHQuaW50ZWdyYWx0cCA9IDY4NjtcbiAgICB0LmludGVncmFsZXggPSA2ODY7XG4gICAgdC5pbnRlZ3JhbGJ0ID0gNjg2O1xuICAgIHQucGFyZW5yaWdodHRwID0gMzg0O1xuICAgIHQucGFyZW5yaWdodGV4ID0gMzg0O1xuICAgIHQucGFyZW5yaWdodGJ0ID0gMzg0O1xuICAgIHQuYnJhY2tldHJpZ2h0dHAgPSAzODQ7XG4gICAgdC5icmFja2V0cmlnaHRleCA9IDM4NDtcbiAgICB0LmJyYWNrZXRyaWdodGJ0ID0gMzg0O1xuICAgIHQuYnJhY2VyaWdodHRwID0gNDk0O1xuICAgIHQuYnJhY2VyaWdodG1pZCA9IDQ5NDtcbiAgICB0LmJyYWNlcmlnaHRidCA9IDQ5NDtcbiAgICB0LmFwcGxlID0gNzkwO1xuICB9KTtcbiAgdFtcIlRpbWVzLVJvbWFuXCJdID0gKDAsIF9jb3JlX3V0aWxzLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoZnVuY3Rpb24gKHQpIHtcbiAgICB0LnNwYWNlID0gMjUwO1xuICAgIHQuZXhjbGFtID0gMzMzO1xuICAgIHQucXVvdGVkYmwgPSA0MDg7XG4gICAgdC5udW1iZXJzaWduID0gNTAwO1xuICAgIHQuZG9sbGFyID0gNTAwO1xuICAgIHQucGVyY2VudCA9IDgzMztcbiAgICB0LmFtcGVyc2FuZCA9IDc3ODtcbiAgICB0LnF1b3RlcmlnaHQgPSAzMzM7XG4gICAgdC5wYXJlbmxlZnQgPSAzMzM7XG4gICAgdC5wYXJlbnJpZ2h0ID0gMzMzO1xuICAgIHQuYXN0ZXJpc2sgPSA1MDA7XG4gICAgdC5wbHVzID0gNTY0O1xuICAgIHQuY29tbWEgPSAyNTA7XG4gICAgdC5oeXBoZW4gPSAzMzM7XG4gICAgdC5wZXJpb2QgPSAyNTA7XG4gICAgdC5zbGFzaCA9IDI3ODtcbiAgICB0Lnplcm8gPSA1MDA7XG4gICAgdC5vbmUgPSA1MDA7XG4gICAgdC50d28gPSA1MDA7XG4gICAgdC50aHJlZSA9IDUwMDtcbiAgICB0LmZvdXIgPSA1MDA7XG4gICAgdC5maXZlID0gNTAwO1xuICAgIHQuc2l4ID0gNTAwO1xuICAgIHQuc2V2ZW4gPSA1MDA7XG4gICAgdC5laWdodCA9IDUwMDtcbiAgICB0Lm5pbmUgPSA1MDA7XG4gICAgdC5jb2xvbiA9IDI3ODtcbiAgICB0LnNlbWljb2xvbiA9IDI3ODtcbiAgICB0Lmxlc3MgPSA1NjQ7XG4gICAgdC5lcXVhbCA9IDU2NDtcbiAgICB0LmdyZWF0ZXIgPSA1NjQ7XG4gICAgdC5xdWVzdGlvbiA9IDQ0NDtcbiAgICB0LmF0ID0gOTIxO1xuICAgIHQuQSA9IDcyMjtcbiAgICB0LkIgPSA2Njc7XG4gICAgdC5DID0gNjY3O1xuICAgIHQuRCA9IDcyMjtcbiAgICB0LkUgPSA2MTE7XG4gICAgdC5GID0gNTU2O1xuICAgIHQuRyA9IDcyMjtcbiAgICB0LkggPSA3MjI7XG4gICAgdC5JID0gMzMzO1xuICAgIHQuSiA9IDM4OTtcbiAgICB0LksgPSA3MjI7XG4gICAgdC5MID0gNjExO1xuICAgIHQuTSA9IDg4OTtcbiAgICB0Lk4gPSA3MjI7XG4gICAgdC5PID0gNzIyO1xuICAgIHQuUCA9IDU1NjtcbiAgICB0LlEgPSA3MjI7XG4gICAgdC5SID0gNjY3O1xuICAgIHQuUyA9IDU1NjtcbiAgICB0LlQgPSA2MTE7XG4gICAgdC5VID0gNzIyO1xuICAgIHQuViA9IDcyMjtcbiAgICB0LlcgPSA5NDQ7XG4gICAgdC5YID0gNzIyO1xuICAgIHQuWSA9IDcyMjtcbiAgICB0LlogPSA2MTE7XG4gICAgdC5icmFja2V0bGVmdCA9IDMzMztcbiAgICB0LmJhY2tzbGFzaCA9IDI3ODtcbiAgICB0LmJyYWNrZXRyaWdodCA9IDMzMztcbiAgICB0LmFzY2lpY2lyY3VtID0gNDY5O1xuICAgIHQudW5kZXJzY29yZSA9IDUwMDtcbiAgICB0LnF1b3RlbGVmdCA9IDMzMztcbiAgICB0LmEgPSA0NDQ7XG4gICAgdC5iID0gNTAwO1xuICAgIHQuYyA9IDQ0NDtcbiAgICB0LmQgPSA1MDA7XG4gICAgdC5lID0gNDQ0O1xuICAgIHQuZiA9IDMzMztcbiAgICB0LmcgPSA1MDA7XG4gICAgdC5oID0gNTAwO1xuICAgIHQuaSA9IDI3ODtcbiAgICB0LmogPSAyNzg7XG4gICAgdC5rID0gNTAwO1xuICAgIHQubCA9IDI3ODtcbiAgICB0Lm0gPSA3Nzg7XG4gICAgdC5uID0gNTAwO1xuICAgIHQubyA9IDUwMDtcbiAgICB0LnAgPSA1MDA7XG4gICAgdC5xID0gNTAwO1xuICAgIHQuciA9IDMzMztcbiAgICB0LnMgPSAzODk7XG4gICAgdC50ID0gMjc4O1xuICAgIHQudSA9IDUwMDtcbiAgICB0LnYgPSA1MDA7XG4gICAgdC53ID0gNzIyO1xuICAgIHQueCA9IDUwMDtcbiAgICB0LnkgPSA1MDA7XG4gICAgdC56ID0gNDQ0O1xuICAgIHQuYnJhY2VsZWZ0ID0gNDgwO1xuICAgIHQuYmFyID0gMjAwO1xuICAgIHQuYnJhY2VyaWdodCA9IDQ4MDtcbiAgICB0LmFzY2lpdGlsZGUgPSA1NDE7XG4gICAgdC5leGNsYW1kb3duID0gMzMzO1xuICAgIHQuY2VudCA9IDUwMDtcbiAgICB0LnN0ZXJsaW5nID0gNTAwO1xuICAgIHQuZnJhY3Rpb24gPSAxNjc7XG4gICAgdC55ZW4gPSA1MDA7XG4gICAgdC5mbG9yaW4gPSA1MDA7XG4gICAgdC5zZWN0aW9uID0gNTAwO1xuICAgIHQuY3VycmVuY3kgPSA1MDA7XG4gICAgdC5xdW90ZXNpbmdsZSA9IDE4MDtcbiAgICB0LnF1b3RlZGJsbGVmdCA9IDQ0NDtcbiAgICB0Lmd1aWxsZW1vdGxlZnQgPSA1MDA7XG4gICAgdC5ndWlsc2luZ2xsZWZ0ID0gMzMzO1xuICAgIHQuZ3VpbHNpbmdscmlnaHQgPSAzMzM7XG4gICAgdC5maSA9IDU1NjtcbiAgICB0LmZsID0gNTU2O1xuICAgIHQuZW5kYXNoID0gNTAwO1xuICAgIHQuZGFnZ2VyID0gNTAwO1xuICAgIHQuZGFnZ2VyZGJsID0gNTAwO1xuICAgIHQucGVyaW9kY2VudGVyZWQgPSAyNTA7XG4gICAgdC5wYXJhZ3JhcGggPSA0NTM7XG4gICAgdC5idWxsZXQgPSAzNTA7XG4gICAgdC5xdW90ZXNpbmdsYmFzZSA9IDMzMztcbiAgICB0LnF1b3RlZGJsYmFzZSA9IDQ0NDtcbiAgICB0LnF1b3RlZGJscmlnaHQgPSA0NDQ7XG4gICAgdC5ndWlsbGVtb3RyaWdodCA9IDUwMDtcbiAgICB0LmVsbGlwc2lzID0gMTAwMDtcbiAgICB0LnBlcnRob3VzYW5kID0gMTAwMDtcbiAgICB0LnF1ZXN0aW9uZG93biA9IDQ0NDtcbiAgICB0LmdyYXZlID0gMzMzO1xuICAgIHQuYWN1dGUgPSAzMzM7XG4gICAgdC5jaXJjdW1mbGV4ID0gMzMzO1xuICAgIHQudGlsZGUgPSAzMzM7XG4gICAgdC5tYWNyb24gPSAzMzM7XG4gICAgdC5icmV2ZSA9IDMzMztcbiAgICB0LmRvdGFjY2VudCA9IDMzMztcbiAgICB0LmRpZXJlc2lzID0gMzMzO1xuICAgIHQucmluZyA9IDMzMztcbiAgICB0LmNlZGlsbGEgPSAzMzM7XG4gICAgdC5odW5nYXJ1bWxhdXQgPSAzMzM7XG4gICAgdC5vZ29uZWsgPSAzMzM7XG4gICAgdC5jYXJvbiA9IDMzMztcbiAgICB0LmVtZGFzaCA9IDEwMDA7XG4gICAgdC5BRSA9IDg4OTtcbiAgICB0Lm9yZGZlbWluaW5lID0gMjc2O1xuICAgIHQuTHNsYXNoID0gNjExO1xuICAgIHQuT3NsYXNoID0gNzIyO1xuICAgIHQuT0UgPSA4ODk7XG4gICAgdC5vcmRtYXNjdWxpbmUgPSAzMTA7XG4gICAgdC5hZSA9IDY2NztcbiAgICB0LmRvdGxlc3NpID0gMjc4O1xuICAgIHQubHNsYXNoID0gMjc4O1xuICAgIHQub3NsYXNoID0gNTAwO1xuICAgIHQub2UgPSA3MjI7XG4gICAgdC5nZXJtYW5kYmxzID0gNTAwO1xuICAgIHQuSWRpZXJlc2lzID0gMzMzO1xuICAgIHQuZWFjdXRlID0gNDQ0O1xuICAgIHQuYWJyZXZlID0gNDQ0O1xuICAgIHQudWh1bmdhcnVtbGF1dCA9IDUwMDtcbiAgICB0LmVjYXJvbiA9IDQ0NDtcbiAgICB0LllkaWVyZXNpcyA9IDcyMjtcbiAgICB0LmRpdmlkZSA9IDU2NDtcbiAgICB0LllhY3V0ZSA9IDcyMjtcbiAgICB0LkFjaXJjdW1mbGV4ID0gNzIyO1xuICAgIHQuYWFjdXRlID0gNDQ0O1xuICAgIHQuVWNpcmN1bWZsZXggPSA3MjI7XG4gICAgdC55YWN1dGUgPSA1MDA7XG4gICAgdC5zY29tbWFhY2NlbnQgPSAzODk7XG4gICAgdC5lY2lyY3VtZmxleCA9IDQ0NDtcbiAgICB0LlVyaW5nID0gNzIyO1xuICAgIHQuVWRpZXJlc2lzID0gNzIyO1xuICAgIHQuYW9nb25layA9IDQ0NDtcbiAgICB0LlVhY3V0ZSA9IDcyMjtcbiAgICB0LnVvZ29uZWsgPSA1MDA7XG4gICAgdC5FZGllcmVzaXMgPSA2MTE7XG4gICAgdC5EY3JvYXQgPSA3MjI7XG4gICAgdC5jb21tYWFjY2VudCA9IDI1MDtcbiAgICB0LmNvcHlyaWdodCA9IDc2MDtcbiAgICB0LkVtYWNyb24gPSA2MTE7XG4gICAgdC5jY2Fyb24gPSA0NDQ7XG4gICAgdC5hcmluZyA9IDQ0NDtcbiAgICB0Lk5jb21tYWFjY2VudCA9IDcyMjtcbiAgICB0LmxhY3V0ZSA9IDI3ODtcbiAgICB0LmFncmF2ZSA9IDQ0NDtcbiAgICB0LlRjb21tYWFjY2VudCA9IDYxMTtcbiAgICB0LkNhY3V0ZSA9IDY2NztcbiAgICB0LmF0aWxkZSA9IDQ0NDtcbiAgICB0LkVkb3RhY2NlbnQgPSA2MTE7XG4gICAgdC5zY2Fyb24gPSAzODk7XG4gICAgdC5zY2VkaWxsYSA9IDM4OTtcbiAgICB0LmlhY3V0ZSA9IDI3ODtcbiAgICB0LmxvemVuZ2UgPSA0NzE7XG4gICAgdC5SY2Fyb24gPSA2Njc7XG4gICAgdC5HY29tbWFhY2NlbnQgPSA3MjI7XG4gICAgdC51Y2lyY3VtZmxleCA9IDUwMDtcbiAgICB0LmFjaXJjdW1mbGV4ID0gNDQ0O1xuICAgIHQuQW1hY3JvbiA9IDcyMjtcbiAgICB0LnJjYXJvbiA9IDMzMztcbiAgICB0LmNjZWRpbGxhID0gNDQ0O1xuICAgIHQuWmRvdGFjY2VudCA9IDYxMTtcbiAgICB0LlRob3JuID0gNTU2O1xuICAgIHQuT21hY3JvbiA9IDcyMjtcbiAgICB0LlJhY3V0ZSA9IDY2NztcbiAgICB0LlNhY3V0ZSA9IDU1NjtcbiAgICB0LmRjYXJvbiA9IDU4ODtcbiAgICB0LlVtYWNyb24gPSA3MjI7XG4gICAgdC51cmluZyA9IDUwMDtcbiAgICB0LnRocmVlc3VwZXJpb3IgPSAzMDA7XG4gICAgdC5PZ3JhdmUgPSA3MjI7XG4gICAgdC5BZ3JhdmUgPSA3MjI7XG4gICAgdC5BYnJldmUgPSA3MjI7XG4gICAgdC5tdWx0aXBseSA9IDU2NDtcbiAgICB0LnVhY3V0ZSA9IDUwMDtcbiAgICB0LlRjYXJvbiA9IDYxMTtcbiAgICB0LnBhcnRpYWxkaWZmID0gNDc2O1xuICAgIHQueWRpZXJlc2lzID0gNTAwO1xuICAgIHQuTmFjdXRlID0gNzIyO1xuICAgIHQuaWNpcmN1bWZsZXggPSAyNzg7XG4gICAgdC5FY2lyY3VtZmxleCA9IDYxMTtcbiAgICB0LmFkaWVyZXNpcyA9IDQ0NDtcbiAgICB0LmVkaWVyZXNpcyA9IDQ0NDtcbiAgICB0LmNhY3V0ZSA9IDQ0NDtcbiAgICB0Lm5hY3V0ZSA9IDUwMDtcbiAgICB0LnVtYWNyb24gPSA1MDA7XG4gICAgdC5OY2Fyb24gPSA3MjI7XG4gICAgdC5JYWN1dGUgPSAzMzM7XG4gICAgdC5wbHVzbWludXMgPSA1NjQ7XG4gICAgdC5icm9rZW5iYXIgPSAyMDA7XG4gICAgdC5yZWdpc3RlcmVkID0gNzYwO1xuICAgIHQuR2JyZXZlID0gNzIyO1xuICAgIHQuSWRvdGFjY2VudCA9IDMzMztcbiAgICB0LnN1bW1hdGlvbiA9IDYwMDtcbiAgICB0LkVncmF2ZSA9IDYxMTtcbiAgICB0LnJhY3V0ZSA9IDMzMztcbiAgICB0Lm9tYWNyb24gPSA1MDA7XG4gICAgdC5aYWN1dGUgPSA2MTE7XG4gICAgdC5aY2Fyb24gPSA2MTE7XG4gICAgdC5ncmVhdGVyZXF1YWwgPSA1NDk7XG4gICAgdC5FdGggPSA3MjI7XG4gICAgdC5DY2VkaWxsYSA9IDY2NztcbiAgICB0Lmxjb21tYWFjY2VudCA9IDI3ODtcbiAgICB0LnRjYXJvbiA9IDMyNjtcbiAgICB0LmVvZ29uZWsgPSA0NDQ7XG4gICAgdC5Vb2dvbmVrID0gNzIyO1xuICAgIHQuQWFjdXRlID0gNzIyO1xuICAgIHQuQWRpZXJlc2lzID0gNzIyO1xuICAgIHQuZWdyYXZlID0gNDQ0O1xuICAgIHQuemFjdXRlID0gNDQ0O1xuICAgIHQuaW9nb25layA9IDI3ODtcbiAgICB0Lk9hY3V0ZSA9IDcyMjtcbiAgICB0Lm9hY3V0ZSA9IDUwMDtcbiAgICB0LmFtYWNyb24gPSA0NDQ7XG4gICAgdC5zYWN1dGUgPSAzODk7XG4gICAgdC5pZGllcmVzaXMgPSAyNzg7XG4gICAgdC5PY2lyY3VtZmxleCA9IDcyMjtcbiAgICB0LlVncmF2ZSA9IDcyMjtcbiAgICB0LkRlbHRhID0gNjEyO1xuICAgIHQudGhvcm4gPSA1MDA7XG4gICAgdC50d29zdXBlcmlvciA9IDMwMDtcbiAgICB0Lk9kaWVyZXNpcyA9IDcyMjtcbiAgICB0Lm11ID0gNTAwO1xuICAgIHQuaWdyYXZlID0gMjc4O1xuICAgIHQub2h1bmdhcnVtbGF1dCA9IDUwMDtcbiAgICB0LkVvZ29uZWsgPSA2MTE7XG4gICAgdC5kY3JvYXQgPSA1MDA7XG4gICAgdC50aHJlZXF1YXJ0ZXJzID0gNzUwO1xuICAgIHQuU2NlZGlsbGEgPSA1NTY7XG4gICAgdC5sY2Fyb24gPSAzNDQ7XG4gICAgdC5LY29tbWFhY2NlbnQgPSA3MjI7XG4gICAgdC5MYWN1dGUgPSA2MTE7XG4gICAgdC50cmFkZW1hcmsgPSA5ODA7XG4gICAgdC5lZG90YWNjZW50ID0gNDQ0O1xuICAgIHQuSWdyYXZlID0gMzMzO1xuICAgIHQuSW1hY3JvbiA9IDMzMztcbiAgICB0LkxjYXJvbiA9IDYxMTtcbiAgICB0Lm9uZWhhbGYgPSA3NTA7XG4gICAgdC5sZXNzZXF1YWwgPSA1NDk7XG4gICAgdC5vY2lyY3VtZmxleCA9IDUwMDtcbiAgICB0Lm50aWxkZSA9IDUwMDtcbiAgICB0LlVodW5nYXJ1bWxhdXQgPSA3MjI7XG4gICAgdC5FYWN1dGUgPSA2MTE7XG4gICAgdC5lbWFjcm9uID0gNDQ0O1xuICAgIHQuZ2JyZXZlID0gNTAwO1xuICAgIHQub25lcXVhcnRlciA9IDc1MDtcbiAgICB0LlNjYXJvbiA9IDU1NjtcbiAgICB0LlNjb21tYWFjY2VudCA9IDU1NjtcbiAgICB0Lk9odW5nYXJ1bWxhdXQgPSA3MjI7XG4gICAgdC5kZWdyZWUgPSA0MDA7XG4gICAgdC5vZ3JhdmUgPSA1MDA7XG4gICAgdC5DY2Fyb24gPSA2Njc7XG4gICAgdC51Z3JhdmUgPSA1MDA7XG4gICAgdC5yYWRpY2FsID0gNDUzO1xuICAgIHQuRGNhcm9uID0gNzIyO1xuICAgIHQucmNvbW1hYWNjZW50ID0gMzMzO1xuICAgIHQuTnRpbGRlID0gNzIyO1xuICAgIHQub3RpbGRlID0gNTAwO1xuICAgIHQuUmNvbW1hYWNjZW50ID0gNjY3O1xuICAgIHQuTGNvbW1hYWNjZW50ID0gNjExO1xuICAgIHQuQXRpbGRlID0gNzIyO1xuICAgIHQuQW9nb25layA9IDcyMjtcbiAgICB0LkFyaW5nID0gNzIyO1xuICAgIHQuT3RpbGRlID0gNzIyO1xuICAgIHQuemRvdGFjY2VudCA9IDQ0NDtcbiAgICB0LkVjYXJvbiA9IDYxMTtcbiAgICB0LklvZ29uZWsgPSAzMzM7XG4gICAgdC5rY29tbWFhY2NlbnQgPSA1MDA7XG4gICAgdC5taW51cyA9IDU2NDtcbiAgICB0LkljaXJjdW1mbGV4ID0gMzMzO1xuICAgIHQubmNhcm9uID0gNTAwO1xuICAgIHQudGNvbW1hYWNjZW50ID0gMjc4O1xuICAgIHQubG9naWNhbG5vdCA9IDU2NDtcbiAgICB0Lm9kaWVyZXNpcyA9IDUwMDtcbiAgICB0LnVkaWVyZXNpcyA9IDUwMDtcbiAgICB0Lm5vdGVxdWFsID0gNTQ5O1xuICAgIHQuZ2NvbW1hYWNjZW50ID0gNTAwO1xuICAgIHQuZXRoID0gNTAwO1xuICAgIHQuemNhcm9uID0gNDQ0O1xuICAgIHQubmNvbW1hYWNjZW50ID0gNTAwO1xuICAgIHQub25lc3VwZXJpb3IgPSAzMDA7XG4gICAgdC5pbWFjcm9uID0gMjc4O1xuICAgIHQuRXVybyA9IDUwMDtcbiAgfSk7XG4gIHRbXCJUaW1lcy1Cb2xkXCJdID0gKDAsIF9jb3JlX3V0aWxzLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoZnVuY3Rpb24gKHQpIHtcbiAgICB0LnNwYWNlID0gMjUwO1xuICAgIHQuZXhjbGFtID0gMzMzO1xuICAgIHQucXVvdGVkYmwgPSA1NTU7XG4gICAgdC5udW1iZXJzaWduID0gNTAwO1xuICAgIHQuZG9sbGFyID0gNTAwO1xuICAgIHQucGVyY2VudCA9IDEwMDA7XG4gICAgdC5hbXBlcnNhbmQgPSA4MzM7XG4gICAgdC5xdW90ZXJpZ2h0ID0gMzMzO1xuICAgIHQucGFyZW5sZWZ0ID0gMzMzO1xuICAgIHQucGFyZW5yaWdodCA9IDMzMztcbiAgICB0LmFzdGVyaXNrID0gNTAwO1xuICAgIHQucGx1cyA9IDU3MDtcbiAgICB0LmNvbW1hID0gMjUwO1xuICAgIHQuaHlwaGVuID0gMzMzO1xuICAgIHQucGVyaW9kID0gMjUwO1xuICAgIHQuc2xhc2ggPSAyNzg7XG4gICAgdC56ZXJvID0gNTAwO1xuICAgIHQub25lID0gNTAwO1xuICAgIHQudHdvID0gNTAwO1xuICAgIHQudGhyZWUgPSA1MDA7XG4gICAgdC5mb3VyID0gNTAwO1xuICAgIHQuZml2ZSA9IDUwMDtcbiAgICB0LnNpeCA9IDUwMDtcbiAgICB0LnNldmVuID0gNTAwO1xuICAgIHQuZWlnaHQgPSA1MDA7XG4gICAgdC5uaW5lID0gNTAwO1xuICAgIHQuY29sb24gPSAzMzM7XG4gICAgdC5zZW1pY29sb24gPSAzMzM7XG4gICAgdC5sZXNzID0gNTcwO1xuICAgIHQuZXF1YWwgPSA1NzA7XG4gICAgdC5ncmVhdGVyID0gNTcwO1xuICAgIHQucXVlc3Rpb24gPSA1MDA7XG4gICAgdC5hdCA9IDkzMDtcbiAgICB0LkEgPSA3MjI7XG4gICAgdC5CID0gNjY3O1xuICAgIHQuQyA9IDcyMjtcbiAgICB0LkQgPSA3MjI7XG4gICAgdC5FID0gNjY3O1xuICAgIHQuRiA9IDYxMTtcbiAgICB0LkcgPSA3Nzg7XG4gICAgdC5IID0gNzc4O1xuICAgIHQuSSA9IDM4OTtcbiAgICB0LkogPSA1MDA7XG4gICAgdC5LID0gNzc4O1xuICAgIHQuTCA9IDY2NztcbiAgICB0Lk0gPSA5NDQ7XG4gICAgdC5OID0gNzIyO1xuICAgIHQuTyA9IDc3ODtcbiAgICB0LlAgPSA2MTE7XG4gICAgdC5RID0gNzc4O1xuICAgIHQuUiA9IDcyMjtcbiAgICB0LlMgPSA1NTY7XG4gICAgdC5UID0gNjY3O1xuICAgIHQuVSA9IDcyMjtcbiAgICB0LlYgPSA3MjI7XG4gICAgdC5XID0gMTAwMDtcbiAgICB0LlggPSA3MjI7XG4gICAgdC5ZID0gNzIyO1xuICAgIHQuWiA9IDY2NztcbiAgICB0LmJyYWNrZXRsZWZ0ID0gMzMzO1xuICAgIHQuYmFja3NsYXNoID0gMjc4O1xuICAgIHQuYnJhY2tldHJpZ2h0ID0gMzMzO1xuICAgIHQuYXNjaWljaXJjdW0gPSA1ODE7XG4gICAgdC51bmRlcnNjb3JlID0gNTAwO1xuICAgIHQucXVvdGVsZWZ0ID0gMzMzO1xuICAgIHQuYSA9IDUwMDtcbiAgICB0LmIgPSA1NTY7XG4gICAgdC5jID0gNDQ0O1xuICAgIHQuZCA9IDU1NjtcbiAgICB0LmUgPSA0NDQ7XG4gICAgdC5mID0gMzMzO1xuICAgIHQuZyA9IDUwMDtcbiAgICB0LmggPSA1NTY7XG4gICAgdC5pID0gMjc4O1xuICAgIHQuaiA9IDMzMztcbiAgICB0LmsgPSA1NTY7XG4gICAgdC5sID0gMjc4O1xuICAgIHQubSA9IDgzMztcbiAgICB0Lm4gPSA1NTY7XG4gICAgdC5vID0gNTAwO1xuICAgIHQucCA9IDU1NjtcbiAgICB0LnEgPSA1NTY7XG4gICAgdC5yID0gNDQ0O1xuICAgIHQucyA9IDM4OTtcbiAgICB0LnQgPSAzMzM7XG4gICAgdC51ID0gNTU2O1xuICAgIHQudiA9IDUwMDtcbiAgICB0LncgPSA3MjI7XG4gICAgdC54ID0gNTAwO1xuICAgIHQueSA9IDUwMDtcbiAgICB0LnogPSA0NDQ7XG4gICAgdC5icmFjZWxlZnQgPSAzOTQ7XG4gICAgdC5iYXIgPSAyMjA7XG4gICAgdC5icmFjZXJpZ2h0ID0gMzk0O1xuICAgIHQuYXNjaWl0aWxkZSA9IDUyMDtcbiAgICB0LmV4Y2xhbWRvd24gPSAzMzM7XG4gICAgdC5jZW50ID0gNTAwO1xuICAgIHQuc3RlcmxpbmcgPSA1MDA7XG4gICAgdC5mcmFjdGlvbiA9IDE2NztcbiAgICB0LnllbiA9IDUwMDtcbiAgICB0LmZsb3JpbiA9IDUwMDtcbiAgICB0LnNlY3Rpb24gPSA1MDA7XG4gICAgdC5jdXJyZW5jeSA9IDUwMDtcbiAgICB0LnF1b3Rlc2luZ2xlID0gMjc4O1xuICAgIHQucXVvdGVkYmxsZWZ0ID0gNTAwO1xuICAgIHQuZ3VpbGxlbW90bGVmdCA9IDUwMDtcbiAgICB0Lmd1aWxzaW5nbGxlZnQgPSAzMzM7XG4gICAgdC5ndWlsc2luZ2xyaWdodCA9IDMzMztcbiAgICB0LmZpID0gNTU2O1xuICAgIHQuZmwgPSA1NTY7XG4gICAgdC5lbmRhc2ggPSA1MDA7XG4gICAgdC5kYWdnZXIgPSA1MDA7XG4gICAgdC5kYWdnZXJkYmwgPSA1MDA7XG4gICAgdC5wZXJpb2RjZW50ZXJlZCA9IDI1MDtcbiAgICB0LnBhcmFncmFwaCA9IDU0MDtcbiAgICB0LmJ1bGxldCA9IDM1MDtcbiAgICB0LnF1b3Rlc2luZ2xiYXNlID0gMzMzO1xuICAgIHQucXVvdGVkYmxiYXNlID0gNTAwO1xuICAgIHQucXVvdGVkYmxyaWdodCA9IDUwMDtcbiAgICB0Lmd1aWxsZW1vdHJpZ2h0ID0gNTAwO1xuICAgIHQuZWxsaXBzaXMgPSAxMDAwO1xuICAgIHQucGVydGhvdXNhbmQgPSAxMDAwO1xuICAgIHQucXVlc3Rpb25kb3duID0gNTAwO1xuICAgIHQuZ3JhdmUgPSAzMzM7XG4gICAgdC5hY3V0ZSA9IDMzMztcbiAgICB0LmNpcmN1bWZsZXggPSAzMzM7XG4gICAgdC50aWxkZSA9IDMzMztcbiAgICB0Lm1hY3JvbiA9IDMzMztcbiAgICB0LmJyZXZlID0gMzMzO1xuICAgIHQuZG90YWNjZW50ID0gMzMzO1xuICAgIHQuZGllcmVzaXMgPSAzMzM7XG4gICAgdC5yaW5nID0gMzMzO1xuICAgIHQuY2VkaWxsYSA9IDMzMztcbiAgICB0Lmh1bmdhcnVtbGF1dCA9IDMzMztcbiAgICB0Lm9nb25layA9IDMzMztcbiAgICB0LmNhcm9uID0gMzMzO1xuICAgIHQuZW1kYXNoID0gMTAwMDtcbiAgICB0LkFFID0gMTAwMDtcbiAgICB0Lm9yZGZlbWluaW5lID0gMzAwO1xuICAgIHQuTHNsYXNoID0gNjY3O1xuICAgIHQuT3NsYXNoID0gNzc4O1xuICAgIHQuT0UgPSAxMDAwO1xuICAgIHQub3JkbWFzY3VsaW5lID0gMzMwO1xuICAgIHQuYWUgPSA3MjI7XG4gICAgdC5kb3RsZXNzaSA9IDI3ODtcbiAgICB0LmxzbGFzaCA9IDI3ODtcbiAgICB0Lm9zbGFzaCA9IDUwMDtcbiAgICB0Lm9lID0gNzIyO1xuICAgIHQuZ2VybWFuZGJscyA9IDU1NjtcbiAgICB0LklkaWVyZXNpcyA9IDM4OTtcbiAgICB0LmVhY3V0ZSA9IDQ0NDtcbiAgICB0LmFicmV2ZSA9IDUwMDtcbiAgICB0LnVodW5nYXJ1bWxhdXQgPSA1NTY7XG4gICAgdC5lY2Fyb24gPSA0NDQ7XG4gICAgdC5ZZGllcmVzaXMgPSA3MjI7XG4gICAgdC5kaXZpZGUgPSA1NzA7XG4gICAgdC5ZYWN1dGUgPSA3MjI7XG4gICAgdC5BY2lyY3VtZmxleCA9IDcyMjtcbiAgICB0LmFhY3V0ZSA9IDUwMDtcbiAgICB0LlVjaXJjdW1mbGV4ID0gNzIyO1xuICAgIHQueWFjdXRlID0gNTAwO1xuICAgIHQuc2NvbW1hYWNjZW50ID0gMzg5O1xuICAgIHQuZWNpcmN1bWZsZXggPSA0NDQ7XG4gICAgdC5VcmluZyA9IDcyMjtcbiAgICB0LlVkaWVyZXNpcyA9IDcyMjtcbiAgICB0LmFvZ29uZWsgPSA1MDA7XG4gICAgdC5VYWN1dGUgPSA3MjI7XG4gICAgdC51b2dvbmVrID0gNTU2O1xuICAgIHQuRWRpZXJlc2lzID0gNjY3O1xuICAgIHQuRGNyb2F0ID0gNzIyO1xuICAgIHQuY29tbWFhY2NlbnQgPSAyNTA7XG4gICAgdC5jb3B5cmlnaHQgPSA3NDc7XG4gICAgdC5FbWFjcm9uID0gNjY3O1xuICAgIHQuY2Nhcm9uID0gNDQ0O1xuICAgIHQuYXJpbmcgPSA1MDA7XG4gICAgdC5OY29tbWFhY2NlbnQgPSA3MjI7XG4gICAgdC5sYWN1dGUgPSAyNzg7XG4gICAgdC5hZ3JhdmUgPSA1MDA7XG4gICAgdC5UY29tbWFhY2NlbnQgPSA2Njc7XG4gICAgdC5DYWN1dGUgPSA3MjI7XG4gICAgdC5hdGlsZGUgPSA1MDA7XG4gICAgdC5FZG90YWNjZW50ID0gNjY3O1xuICAgIHQuc2Nhcm9uID0gMzg5O1xuICAgIHQuc2NlZGlsbGEgPSAzODk7XG4gICAgdC5pYWN1dGUgPSAyNzg7XG4gICAgdC5sb3plbmdlID0gNDk0O1xuICAgIHQuUmNhcm9uID0gNzIyO1xuICAgIHQuR2NvbW1hYWNjZW50ID0gNzc4O1xuICAgIHQudWNpcmN1bWZsZXggPSA1NTY7XG4gICAgdC5hY2lyY3VtZmxleCA9IDUwMDtcbiAgICB0LkFtYWNyb24gPSA3MjI7XG4gICAgdC5yY2Fyb24gPSA0NDQ7XG4gICAgdC5jY2VkaWxsYSA9IDQ0NDtcbiAgICB0Llpkb3RhY2NlbnQgPSA2Njc7XG4gICAgdC5UaG9ybiA9IDYxMTtcbiAgICB0Lk9tYWNyb24gPSA3Nzg7XG4gICAgdC5SYWN1dGUgPSA3MjI7XG4gICAgdC5TYWN1dGUgPSA1NTY7XG4gICAgdC5kY2Fyb24gPSA2NzI7XG4gICAgdC5VbWFjcm9uID0gNzIyO1xuICAgIHQudXJpbmcgPSA1NTY7XG4gICAgdC50aHJlZXN1cGVyaW9yID0gMzAwO1xuICAgIHQuT2dyYXZlID0gNzc4O1xuICAgIHQuQWdyYXZlID0gNzIyO1xuICAgIHQuQWJyZXZlID0gNzIyO1xuICAgIHQubXVsdGlwbHkgPSA1NzA7XG4gICAgdC51YWN1dGUgPSA1NTY7XG4gICAgdC5UY2Fyb24gPSA2Njc7XG4gICAgdC5wYXJ0aWFsZGlmZiA9IDQ5NDtcbiAgICB0LnlkaWVyZXNpcyA9IDUwMDtcbiAgICB0Lk5hY3V0ZSA9IDcyMjtcbiAgICB0LmljaXJjdW1mbGV4ID0gMjc4O1xuICAgIHQuRWNpcmN1bWZsZXggPSA2Njc7XG4gICAgdC5hZGllcmVzaXMgPSA1MDA7XG4gICAgdC5lZGllcmVzaXMgPSA0NDQ7XG4gICAgdC5jYWN1dGUgPSA0NDQ7XG4gICAgdC5uYWN1dGUgPSA1NTY7XG4gICAgdC51bWFjcm9uID0gNTU2O1xuICAgIHQuTmNhcm9uID0gNzIyO1xuICAgIHQuSWFjdXRlID0gMzg5O1xuICAgIHQucGx1c21pbnVzID0gNTcwO1xuICAgIHQuYnJva2VuYmFyID0gMjIwO1xuICAgIHQucmVnaXN0ZXJlZCA9IDc0NztcbiAgICB0LkdicmV2ZSA9IDc3ODtcbiAgICB0Lklkb3RhY2NlbnQgPSAzODk7XG4gICAgdC5zdW1tYXRpb24gPSA2MDA7XG4gICAgdC5FZ3JhdmUgPSA2Njc7XG4gICAgdC5yYWN1dGUgPSA0NDQ7XG4gICAgdC5vbWFjcm9uID0gNTAwO1xuICAgIHQuWmFjdXRlID0gNjY3O1xuICAgIHQuWmNhcm9uID0gNjY3O1xuICAgIHQuZ3JlYXRlcmVxdWFsID0gNTQ5O1xuICAgIHQuRXRoID0gNzIyO1xuICAgIHQuQ2NlZGlsbGEgPSA3MjI7XG4gICAgdC5sY29tbWFhY2NlbnQgPSAyNzg7XG4gICAgdC50Y2Fyb24gPSA0MTY7XG4gICAgdC5lb2dvbmVrID0gNDQ0O1xuICAgIHQuVW9nb25layA9IDcyMjtcbiAgICB0LkFhY3V0ZSA9IDcyMjtcbiAgICB0LkFkaWVyZXNpcyA9IDcyMjtcbiAgICB0LmVncmF2ZSA9IDQ0NDtcbiAgICB0LnphY3V0ZSA9IDQ0NDtcbiAgICB0LmlvZ29uZWsgPSAyNzg7XG4gICAgdC5PYWN1dGUgPSA3Nzg7XG4gICAgdC5vYWN1dGUgPSA1MDA7XG4gICAgdC5hbWFjcm9uID0gNTAwO1xuICAgIHQuc2FjdXRlID0gMzg5O1xuICAgIHQuaWRpZXJlc2lzID0gMjc4O1xuICAgIHQuT2NpcmN1bWZsZXggPSA3Nzg7XG4gICAgdC5VZ3JhdmUgPSA3MjI7XG4gICAgdC5EZWx0YSA9IDYxMjtcbiAgICB0LnRob3JuID0gNTU2O1xuICAgIHQudHdvc3VwZXJpb3IgPSAzMDA7XG4gICAgdC5PZGllcmVzaXMgPSA3Nzg7XG4gICAgdC5tdSA9IDU1NjtcbiAgICB0LmlncmF2ZSA9IDI3ODtcbiAgICB0Lm9odW5nYXJ1bWxhdXQgPSA1MDA7XG4gICAgdC5Fb2dvbmVrID0gNjY3O1xuICAgIHQuZGNyb2F0ID0gNTU2O1xuICAgIHQudGhyZWVxdWFydGVycyA9IDc1MDtcbiAgICB0LlNjZWRpbGxhID0gNTU2O1xuICAgIHQubGNhcm9uID0gMzk0O1xuICAgIHQuS2NvbW1hYWNjZW50ID0gNzc4O1xuICAgIHQuTGFjdXRlID0gNjY3O1xuICAgIHQudHJhZGVtYXJrID0gMTAwMDtcbiAgICB0LmVkb3RhY2NlbnQgPSA0NDQ7XG4gICAgdC5JZ3JhdmUgPSAzODk7XG4gICAgdC5JbWFjcm9uID0gMzg5O1xuICAgIHQuTGNhcm9uID0gNjY3O1xuICAgIHQub25laGFsZiA9IDc1MDtcbiAgICB0Lmxlc3NlcXVhbCA9IDU0OTtcbiAgICB0Lm9jaXJjdW1mbGV4ID0gNTAwO1xuICAgIHQubnRpbGRlID0gNTU2O1xuICAgIHQuVWh1bmdhcnVtbGF1dCA9IDcyMjtcbiAgICB0LkVhY3V0ZSA9IDY2NztcbiAgICB0LmVtYWNyb24gPSA0NDQ7XG4gICAgdC5nYnJldmUgPSA1MDA7XG4gICAgdC5vbmVxdWFydGVyID0gNzUwO1xuICAgIHQuU2Nhcm9uID0gNTU2O1xuICAgIHQuU2NvbW1hYWNjZW50ID0gNTU2O1xuICAgIHQuT2h1bmdhcnVtbGF1dCA9IDc3ODtcbiAgICB0LmRlZ3JlZSA9IDQwMDtcbiAgICB0Lm9ncmF2ZSA9IDUwMDtcbiAgICB0LkNjYXJvbiA9IDcyMjtcbiAgICB0LnVncmF2ZSA9IDU1NjtcbiAgICB0LnJhZGljYWwgPSA1NDk7XG4gICAgdC5EY2Fyb24gPSA3MjI7XG4gICAgdC5yY29tbWFhY2NlbnQgPSA0NDQ7XG4gICAgdC5OdGlsZGUgPSA3MjI7XG4gICAgdC5vdGlsZGUgPSA1MDA7XG4gICAgdC5SY29tbWFhY2NlbnQgPSA3MjI7XG4gICAgdC5MY29tbWFhY2NlbnQgPSA2Njc7XG4gICAgdC5BdGlsZGUgPSA3MjI7XG4gICAgdC5Bb2dvbmVrID0gNzIyO1xuICAgIHQuQXJpbmcgPSA3MjI7XG4gICAgdC5PdGlsZGUgPSA3Nzg7XG4gICAgdC56ZG90YWNjZW50ID0gNDQ0O1xuICAgIHQuRWNhcm9uID0gNjY3O1xuICAgIHQuSW9nb25layA9IDM4OTtcbiAgICB0Lmtjb21tYWFjY2VudCA9IDU1NjtcbiAgICB0Lm1pbnVzID0gNTcwO1xuICAgIHQuSWNpcmN1bWZsZXggPSAzODk7XG4gICAgdC5uY2Fyb24gPSA1NTY7XG4gICAgdC50Y29tbWFhY2NlbnQgPSAzMzM7XG4gICAgdC5sb2dpY2Fsbm90ID0gNTcwO1xuICAgIHQub2RpZXJlc2lzID0gNTAwO1xuICAgIHQudWRpZXJlc2lzID0gNTU2O1xuICAgIHQubm90ZXF1YWwgPSA1NDk7XG4gICAgdC5nY29tbWFhY2NlbnQgPSA1MDA7XG4gICAgdC5ldGggPSA1MDA7XG4gICAgdC56Y2Fyb24gPSA0NDQ7XG4gICAgdC5uY29tbWFhY2NlbnQgPSA1NTY7XG4gICAgdC5vbmVzdXBlcmlvciA9IDMwMDtcbiAgICB0LmltYWNyb24gPSAyNzg7XG4gICAgdC5FdXJvID0gNTAwO1xuICB9KTtcbiAgdFtcIlRpbWVzLUJvbGRJdGFsaWNcIl0gPSAoMCwgX2NvcmVfdXRpbHMuZ2V0TG9va3VwVGFibGVGYWN0b3J5KShmdW5jdGlvbiAodCkge1xuICAgIHQuc3BhY2UgPSAyNTA7XG4gICAgdC5leGNsYW0gPSAzODk7XG4gICAgdC5xdW90ZWRibCA9IDU1NTtcbiAgICB0Lm51bWJlcnNpZ24gPSA1MDA7XG4gICAgdC5kb2xsYXIgPSA1MDA7XG4gICAgdC5wZXJjZW50ID0gODMzO1xuICAgIHQuYW1wZXJzYW5kID0gNzc4O1xuICAgIHQucXVvdGVyaWdodCA9IDMzMztcbiAgICB0LnBhcmVubGVmdCA9IDMzMztcbiAgICB0LnBhcmVucmlnaHQgPSAzMzM7XG4gICAgdC5hc3RlcmlzayA9IDUwMDtcbiAgICB0LnBsdXMgPSA1NzA7XG4gICAgdC5jb21tYSA9IDI1MDtcbiAgICB0Lmh5cGhlbiA9IDMzMztcbiAgICB0LnBlcmlvZCA9IDI1MDtcbiAgICB0LnNsYXNoID0gMjc4O1xuICAgIHQuemVybyA9IDUwMDtcbiAgICB0Lm9uZSA9IDUwMDtcbiAgICB0LnR3byA9IDUwMDtcbiAgICB0LnRocmVlID0gNTAwO1xuICAgIHQuZm91ciA9IDUwMDtcbiAgICB0LmZpdmUgPSA1MDA7XG4gICAgdC5zaXggPSA1MDA7XG4gICAgdC5zZXZlbiA9IDUwMDtcbiAgICB0LmVpZ2h0ID0gNTAwO1xuICAgIHQubmluZSA9IDUwMDtcbiAgICB0LmNvbG9uID0gMzMzO1xuICAgIHQuc2VtaWNvbG9uID0gMzMzO1xuICAgIHQubGVzcyA9IDU3MDtcbiAgICB0LmVxdWFsID0gNTcwO1xuICAgIHQuZ3JlYXRlciA9IDU3MDtcbiAgICB0LnF1ZXN0aW9uID0gNTAwO1xuICAgIHQuYXQgPSA4MzI7XG4gICAgdC5BID0gNjY3O1xuICAgIHQuQiA9IDY2NztcbiAgICB0LkMgPSA2Njc7XG4gICAgdC5EID0gNzIyO1xuICAgIHQuRSA9IDY2NztcbiAgICB0LkYgPSA2Njc7XG4gICAgdC5HID0gNzIyO1xuICAgIHQuSCA9IDc3ODtcbiAgICB0LkkgPSAzODk7XG4gICAgdC5KID0gNTAwO1xuICAgIHQuSyA9IDY2NztcbiAgICB0LkwgPSA2MTE7XG4gICAgdC5NID0gODg5O1xuICAgIHQuTiA9IDcyMjtcbiAgICB0Lk8gPSA3MjI7XG4gICAgdC5QID0gNjExO1xuICAgIHQuUSA9IDcyMjtcbiAgICB0LlIgPSA2Njc7XG4gICAgdC5TID0gNTU2O1xuICAgIHQuVCA9IDYxMTtcbiAgICB0LlUgPSA3MjI7XG4gICAgdC5WID0gNjY3O1xuICAgIHQuVyA9IDg4OTtcbiAgICB0LlggPSA2Njc7XG4gICAgdC5ZID0gNjExO1xuICAgIHQuWiA9IDYxMTtcbiAgICB0LmJyYWNrZXRsZWZ0ID0gMzMzO1xuICAgIHQuYmFja3NsYXNoID0gMjc4O1xuICAgIHQuYnJhY2tldHJpZ2h0ID0gMzMzO1xuICAgIHQuYXNjaWljaXJjdW0gPSA1NzA7XG4gICAgdC51bmRlcnNjb3JlID0gNTAwO1xuICAgIHQucXVvdGVsZWZ0ID0gMzMzO1xuICAgIHQuYSA9IDUwMDtcbiAgICB0LmIgPSA1MDA7XG4gICAgdC5jID0gNDQ0O1xuICAgIHQuZCA9IDUwMDtcbiAgICB0LmUgPSA0NDQ7XG4gICAgdC5mID0gMzMzO1xuICAgIHQuZyA9IDUwMDtcbiAgICB0LmggPSA1NTY7XG4gICAgdC5pID0gMjc4O1xuICAgIHQuaiA9IDI3ODtcbiAgICB0LmsgPSA1MDA7XG4gICAgdC5sID0gMjc4O1xuICAgIHQubSA9IDc3ODtcbiAgICB0Lm4gPSA1NTY7XG4gICAgdC5vID0gNTAwO1xuICAgIHQucCA9IDUwMDtcbiAgICB0LnEgPSA1MDA7XG4gICAgdC5yID0gMzg5O1xuICAgIHQucyA9IDM4OTtcbiAgICB0LnQgPSAyNzg7XG4gICAgdC51ID0gNTU2O1xuICAgIHQudiA9IDQ0NDtcbiAgICB0LncgPSA2Njc7XG4gICAgdC54ID0gNTAwO1xuICAgIHQueSA9IDQ0NDtcbiAgICB0LnogPSAzODk7XG4gICAgdC5icmFjZWxlZnQgPSAzNDg7XG4gICAgdC5iYXIgPSAyMjA7XG4gICAgdC5icmFjZXJpZ2h0ID0gMzQ4O1xuICAgIHQuYXNjaWl0aWxkZSA9IDU3MDtcbiAgICB0LmV4Y2xhbWRvd24gPSAzODk7XG4gICAgdC5jZW50ID0gNTAwO1xuICAgIHQuc3RlcmxpbmcgPSA1MDA7XG4gICAgdC5mcmFjdGlvbiA9IDE2NztcbiAgICB0LnllbiA9IDUwMDtcbiAgICB0LmZsb3JpbiA9IDUwMDtcbiAgICB0LnNlY3Rpb24gPSA1MDA7XG4gICAgdC5jdXJyZW5jeSA9IDUwMDtcbiAgICB0LnF1b3Rlc2luZ2xlID0gMjc4O1xuICAgIHQucXVvdGVkYmxsZWZ0ID0gNTAwO1xuICAgIHQuZ3VpbGxlbW90bGVmdCA9IDUwMDtcbiAgICB0Lmd1aWxzaW5nbGxlZnQgPSAzMzM7XG4gICAgdC5ndWlsc2luZ2xyaWdodCA9IDMzMztcbiAgICB0LmZpID0gNTU2O1xuICAgIHQuZmwgPSA1NTY7XG4gICAgdC5lbmRhc2ggPSA1MDA7XG4gICAgdC5kYWdnZXIgPSA1MDA7XG4gICAgdC5kYWdnZXJkYmwgPSA1MDA7XG4gICAgdC5wZXJpb2RjZW50ZXJlZCA9IDI1MDtcbiAgICB0LnBhcmFncmFwaCA9IDUwMDtcbiAgICB0LmJ1bGxldCA9IDM1MDtcbiAgICB0LnF1b3Rlc2luZ2xiYXNlID0gMzMzO1xuICAgIHQucXVvdGVkYmxiYXNlID0gNTAwO1xuICAgIHQucXVvdGVkYmxyaWdodCA9IDUwMDtcbiAgICB0Lmd1aWxsZW1vdHJpZ2h0ID0gNTAwO1xuICAgIHQuZWxsaXBzaXMgPSAxMDAwO1xuICAgIHQucGVydGhvdXNhbmQgPSAxMDAwO1xuICAgIHQucXVlc3Rpb25kb3duID0gNTAwO1xuICAgIHQuZ3JhdmUgPSAzMzM7XG4gICAgdC5hY3V0ZSA9IDMzMztcbiAgICB0LmNpcmN1bWZsZXggPSAzMzM7XG4gICAgdC50aWxkZSA9IDMzMztcbiAgICB0Lm1hY3JvbiA9IDMzMztcbiAgICB0LmJyZXZlID0gMzMzO1xuICAgIHQuZG90YWNjZW50ID0gMzMzO1xuICAgIHQuZGllcmVzaXMgPSAzMzM7XG4gICAgdC5yaW5nID0gMzMzO1xuICAgIHQuY2VkaWxsYSA9IDMzMztcbiAgICB0Lmh1bmdhcnVtbGF1dCA9IDMzMztcbiAgICB0Lm9nb25layA9IDMzMztcbiAgICB0LmNhcm9uID0gMzMzO1xuICAgIHQuZW1kYXNoID0gMTAwMDtcbiAgICB0LkFFID0gOTQ0O1xuICAgIHQub3JkZmVtaW5pbmUgPSAyNjY7XG4gICAgdC5Mc2xhc2ggPSA2MTE7XG4gICAgdC5Pc2xhc2ggPSA3MjI7XG4gICAgdC5PRSA9IDk0NDtcbiAgICB0Lm9yZG1hc2N1bGluZSA9IDMwMDtcbiAgICB0LmFlID0gNzIyO1xuICAgIHQuZG90bGVzc2kgPSAyNzg7XG4gICAgdC5sc2xhc2ggPSAyNzg7XG4gICAgdC5vc2xhc2ggPSA1MDA7XG4gICAgdC5vZSA9IDcyMjtcbiAgICB0Lmdlcm1hbmRibHMgPSA1MDA7XG4gICAgdC5JZGllcmVzaXMgPSAzODk7XG4gICAgdC5lYWN1dGUgPSA0NDQ7XG4gICAgdC5hYnJldmUgPSA1MDA7XG4gICAgdC51aHVuZ2FydW1sYXV0ID0gNTU2O1xuICAgIHQuZWNhcm9uID0gNDQ0O1xuICAgIHQuWWRpZXJlc2lzID0gNjExO1xuICAgIHQuZGl2aWRlID0gNTcwO1xuICAgIHQuWWFjdXRlID0gNjExO1xuICAgIHQuQWNpcmN1bWZsZXggPSA2Njc7XG4gICAgdC5hYWN1dGUgPSA1MDA7XG4gICAgdC5VY2lyY3VtZmxleCA9IDcyMjtcbiAgICB0LnlhY3V0ZSA9IDQ0NDtcbiAgICB0LnNjb21tYWFjY2VudCA9IDM4OTtcbiAgICB0LmVjaXJjdW1mbGV4ID0gNDQ0O1xuICAgIHQuVXJpbmcgPSA3MjI7XG4gICAgdC5VZGllcmVzaXMgPSA3MjI7XG4gICAgdC5hb2dvbmVrID0gNTAwO1xuICAgIHQuVWFjdXRlID0gNzIyO1xuICAgIHQudW9nb25layA9IDU1NjtcbiAgICB0LkVkaWVyZXNpcyA9IDY2NztcbiAgICB0LkRjcm9hdCA9IDcyMjtcbiAgICB0LmNvbW1hYWNjZW50ID0gMjUwO1xuICAgIHQuY29weXJpZ2h0ID0gNzQ3O1xuICAgIHQuRW1hY3JvbiA9IDY2NztcbiAgICB0LmNjYXJvbiA9IDQ0NDtcbiAgICB0LmFyaW5nID0gNTAwO1xuICAgIHQuTmNvbW1hYWNjZW50ID0gNzIyO1xuICAgIHQubGFjdXRlID0gMjc4O1xuICAgIHQuYWdyYXZlID0gNTAwO1xuICAgIHQuVGNvbW1hYWNjZW50ID0gNjExO1xuICAgIHQuQ2FjdXRlID0gNjY3O1xuICAgIHQuYXRpbGRlID0gNTAwO1xuICAgIHQuRWRvdGFjY2VudCA9IDY2NztcbiAgICB0LnNjYXJvbiA9IDM4OTtcbiAgICB0LnNjZWRpbGxhID0gMzg5O1xuICAgIHQuaWFjdXRlID0gMjc4O1xuICAgIHQubG96ZW5nZSA9IDQ5NDtcbiAgICB0LlJjYXJvbiA9IDY2NztcbiAgICB0Lkdjb21tYWFjY2VudCA9IDcyMjtcbiAgICB0LnVjaXJjdW1mbGV4ID0gNTU2O1xuICAgIHQuYWNpcmN1bWZsZXggPSA1MDA7XG4gICAgdC5BbWFjcm9uID0gNjY3O1xuICAgIHQucmNhcm9uID0gMzg5O1xuICAgIHQuY2NlZGlsbGEgPSA0NDQ7XG4gICAgdC5aZG90YWNjZW50ID0gNjExO1xuICAgIHQuVGhvcm4gPSA2MTE7XG4gICAgdC5PbWFjcm9uID0gNzIyO1xuICAgIHQuUmFjdXRlID0gNjY3O1xuICAgIHQuU2FjdXRlID0gNTU2O1xuICAgIHQuZGNhcm9uID0gNjA4O1xuICAgIHQuVW1hY3JvbiA9IDcyMjtcbiAgICB0LnVyaW5nID0gNTU2O1xuICAgIHQudGhyZWVzdXBlcmlvciA9IDMwMDtcbiAgICB0Lk9ncmF2ZSA9IDcyMjtcbiAgICB0LkFncmF2ZSA9IDY2NztcbiAgICB0LkFicmV2ZSA9IDY2NztcbiAgICB0Lm11bHRpcGx5ID0gNTcwO1xuICAgIHQudWFjdXRlID0gNTU2O1xuICAgIHQuVGNhcm9uID0gNjExO1xuICAgIHQucGFydGlhbGRpZmYgPSA0OTQ7XG4gICAgdC55ZGllcmVzaXMgPSA0NDQ7XG4gICAgdC5OYWN1dGUgPSA3MjI7XG4gICAgdC5pY2lyY3VtZmxleCA9IDI3ODtcbiAgICB0LkVjaXJjdW1mbGV4ID0gNjY3O1xuICAgIHQuYWRpZXJlc2lzID0gNTAwO1xuICAgIHQuZWRpZXJlc2lzID0gNDQ0O1xuICAgIHQuY2FjdXRlID0gNDQ0O1xuICAgIHQubmFjdXRlID0gNTU2O1xuICAgIHQudW1hY3JvbiA9IDU1NjtcbiAgICB0Lk5jYXJvbiA9IDcyMjtcbiAgICB0LklhY3V0ZSA9IDM4OTtcbiAgICB0LnBsdXNtaW51cyA9IDU3MDtcbiAgICB0LmJyb2tlbmJhciA9IDIyMDtcbiAgICB0LnJlZ2lzdGVyZWQgPSA3NDc7XG4gICAgdC5HYnJldmUgPSA3MjI7XG4gICAgdC5JZG90YWNjZW50ID0gMzg5O1xuICAgIHQuc3VtbWF0aW9uID0gNjAwO1xuICAgIHQuRWdyYXZlID0gNjY3O1xuICAgIHQucmFjdXRlID0gMzg5O1xuICAgIHQub21hY3JvbiA9IDUwMDtcbiAgICB0LlphY3V0ZSA9IDYxMTtcbiAgICB0LlpjYXJvbiA9IDYxMTtcbiAgICB0LmdyZWF0ZXJlcXVhbCA9IDU0OTtcbiAgICB0LkV0aCA9IDcyMjtcbiAgICB0LkNjZWRpbGxhID0gNjY3O1xuICAgIHQubGNvbW1hYWNjZW50ID0gMjc4O1xuICAgIHQudGNhcm9uID0gMzY2O1xuICAgIHQuZW9nb25layA9IDQ0NDtcbiAgICB0LlVvZ29uZWsgPSA3MjI7XG4gICAgdC5BYWN1dGUgPSA2Njc7XG4gICAgdC5BZGllcmVzaXMgPSA2Njc7XG4gICAgdC5lZ3JhdmUgPSA0NDQ7XG4gICAgdC56YWN1dGUgPSAzODk7XG4gICAgdC5pb2dvbmVrID0gMjc4O1xuICAgIHQuT2FjdXRlID0gNzIyO1xuICAgIHQub2FjdXRlID0gNTAwO1xuICAgIHQuYW1hY3JvbiA9IDUwMDtcbiAgICB0LnNhY3V0ZSA9IDM4OTtcbiAgICB0LmlkaWVyZXNpcyA9IDI3ODtcbiAgICB0Lk9jaXJjdW1mbGV4ID0gNzIyO1xuICAgIHQuVWdyYXZlID0gNzIyO1xuICAgIHQuRGVsdGEgPSA2MTI7XG4gICAgdC50aG9ybiA9IDUwMDtcbiAgICB0LnR3b3N1cGVyaW9yID0gMzAwO1xuICAgIHQuT2RpZXJlc2lzID0gNzIyO1xuICAgIHQubXUgPSA1NzY7XG4gICAgdC5pZ3JhdmUgPSAyNzg7XG4gICAgdC5vaHVuZ2FydW1sYXV0ID0gNTAwO1xuICAgIHQuRW9nb25layA9IDY2NztcbiAgICB0LmRjcm9hdCA9IDUwMDtcbiAgICB0LnRocmVlcXVhcnRlcnMgPSA3NTA7XG4gICAgdC5TY2VkaWxsYSA9IDU1NjtcbiAgICB0LmxjYXJvbiA9IDM4MjtcbiAgICB0Lktjb21tYWFjY2VudCA9IDY2NztcbiAgICB0LkxhY3V0ZSA9IDYxMTtcbiAgICB0LnRyYWRlbWFyayA9IDEwMDA7XG4gICAgdC5lZG90YWNjZW50ID0gNDQ0O1xuICAgIHQuSWdyYXZlID0gMzg5O1xuICAgIHQuSW1hY3JvbiA9IDM4OTtcbiAgICB0LkxjYXJvbiA9IDYxMTtcbiAgICB0Lm9uZWhhbGYgPSA3NTA7XG4gICAgdC5sZXNzZXF1YWwgPSA1NDk7XG4gICAgdC5vY2lyY3VtZmxleCA9IDUwMDtcbiAgICB0Lm50aWxkZSA9IDU1NjtcbiAgICB0LlVodW5nYXJ1bWxhdXQgPSA3MjI7XG4gICAgdC5FYWN1dGUgPSA2Njc7XG4gICAgdC5lbWFjcm9uID0gNDQ0O1xuICAgIHQuZ2JyZXZlID0gNTAwO1xuICAgIHQub25lcXVhcnRlciA9IDc1MDtcbiAgICB0LlNjYXJvbiA9IDU1NjtcbiAgICB0LlNjb21tYWFjY2VudCA9IDU1NjtcbiAgICB0Lk9odW5nYXJ1bWxhdXQgPSA3MjI7XG4gICAgdC5kZWdyZWUgPSA0MDA7XG4gICAgdC5vZ3JhdmUgPSA1MDA7XG4gICAgdC5DY2Fyb24gPSA2Njc7XG4gICAgdC51Z3JhdmUgPSA1NTY7XG4gICAgdC5yYWRpY2FsID0gNTQ5O1xuICAgIHQuRGNhcm9uID0gNzIyO1xuICAgIHQucmNvbW1hYWNjZW50ID0gMzg5O1xuICAgIHQuTnRpbGRlID0gNzIyO1xuICAgIHQub3RpbGRlID0gNTAwO1xuICAgIHQuUmNvbW1hYWNjZW50ID0gNjY3O1xuICAgIHQuTGNvbW1hYWNjZW50ID0gNjExO1xuICAgIHQuQXRpbGRlID0gNjY3O1xuICAgIHQuQW9nb25layA9IDY2NztcbiAgICB0LkFyaW5nID0gNjY3O1xuICAgIHQuT3RpbGRlID0gNzIyO1xuICAgIHQuemRvdGFjY2VudCA9IDM4OTtcbiAgICB0LkVjYXJvbiA9IDY2NztcbiAgICB0LklvZ29uZWsgPSAzODk7XG4gICAgdC5rY29tbWFhY2NlbnQgPSA1MDA7XG4gICAgdC5taW51cyA9IDYwNjtcbiAgICB0LkljaXJjdW1mbGV4ID0gMzg5O1xuICAgIHQubmNhcm9uID0gNTU2O1xuICAgIHQudGNvbW1hYWNjZW50ID0gMjc4O1xuICAgIHQubG9naWNhbG5vdCA9IDYwNjtcbiAgICB0Lm9kaWVyZXNpcyA9IDUwMDtcbiAgICB0LnVkaWVyZXNpcyA9IDU1NjtcbiAgICB0Lm5vdGVxdWFsID0gNTQ5O1xuICAgIHQuZ2NvbW1hYWNjZW50ID0gNTAwO1xuICAgIHQuZXRoID0gNTAwO1xuICAgIHQuemNhcm9uID0gMzg5O1xuICAgIHQubmNvbW1hYWNjZW50ID0gNTU2O1xuICAgIHQub25lc3VwZXJpb3IgPSAzMDA7XG4gICAgdC5pbWFjcm9uID0gMjc4O1xuICAgIHQuRXVybyA9IDUwMDtcbiAgfSk7XG4gIHRbXCJUaW1lcy1JdGFsaWNcIl0gPSAoMCwgX2NvcmVfdXRpbHMuZ2V0TG9va3VwVGFibGVGYWN0b3J5KShmdW5jdGlvbiAodCkge1xuICAgIHQuc3BhY2UgPSAyNTA7XG4gICAgdC5leGNsYW0gPSAzMzM7XG4gICAgdC5xdW90ZWRibCA9IDQyMDtcbiAgICB0Lm51bWJlcnNpZ24gPSA1MDA7XG4gICAgdC5kb2xsYXIgPSA1MDA7XG4gICAgdC5wZXJjZW50ID0gODMzO1xuICAgIHQuYW1wZXJzYW5kID0gNzc4O1xuICAgIHQucXVvdGVyaWdodCA9IDMzMztcbiAgICB0LnBhcmVubGVmdCA9IDMzMztcbiAgICB0LnBhcmVucmlnaHQgPSAzMzM7XG4gICAgdC5hc3RlcmlzayA9IDUwMDtcbiAgICB0LnBsdXMgPSA2NzU7XG4gICAgdC5jb21tYSA9IDI1MDtcbiAgICB0Lmh5cGhlbiA9IDMzMztcbiAgICB0LnBlcmlvZCA9IDI1MDtcbiAgICB0LnNsYXNoID0gMjc4O1xuICAgIHQuemVybyA9IDUwMDtcbiAgICB0Lm9uZSA9IDUwMDtcbiAgICB0LnR3byA9IDUwMDtcbiAgICB0LnRocmVlID0gNTAwO1xuICAgIHQuZm91ciA9IDUwMDtcbiAgICB0LmZpdmUgPSA1MDA7XG4gICAgdC5zaXggPSA1MDA7XG4gICAgdC5zZXZlbiA9IDUwMDtcbiAgICB0LmVpZ2h0ID0gNTAwO1xuICAgIHQubmluZSA9IDUwMDtcbiAgICB0LmNvbG9uID0gMzMzO1xuICAgIHQuc2VtaWNvbG9uID0gMzMzO1xuICAgIHQubGVzcyA9IDY3NTtcbiAgICB0LmVxdWFsID0gNjc1O1xuICAgIHQuZ3JlYXRlciA9IDY3NTtcbiAgICB0LnF1ZXN0aW9uID0gNTAwO1xuICAgIHQuYXQgPSA5MjA7XG4gICAgdC5BID0gNjExO1xuICAgIHQuQiA9IDYxMTtcbiAgICB0LkMgPSA2Njc7XG4gICAgdC5EID0gNzIyO1xuICAgIHQuRSA9IDYxMTtcbiAgICB0LkYgPSA2MTE7XG4gICAgdC5HID0gNzIyO1xuICAgIHQuSCA9IDcyMjtcbiAgICB0LkkgPSAzMzM7XG4gICAgdC5KID0gNDQ0O1xuICAgIHQuSyA9IDY2NztcbiAgICB0LkwgPSA1NTY7XG4gICAgdC5NID0gODMzO1xuICAgIHQuTiA9IDY2NztcbiAgICB0Lk8gPSA3MjI7XG4gICAgdC5QID0gNjExO1xuICAgIHQuUSA9IDcyMjtcbiAgICB0LlIgPSA2MTE7XG4gICAgdC5TID0gNTAwO1xuICAgIHQuVCA9IDU1NjtcbiAgICB0LlUgPSA3MjI7XG4gICAgdC5WID0gNjExO1xuICAgIHQuVyA9IDgzMztcbiAgICB0LlggPSA2MTE7XG4gICAgdC5ZID0gNTU2O1xuICAgIHQuWiA9IDU1NjtcbiAgICB0LmJyYWNrZXRsZWZ0ID0gMzg5O1xuICAgIHQuYmFja3NsYXNoID0gMjc4O1xuICAgIHQuYnJhY2tldHJpZ2h0ID0gMzg5O1xuICAgIHQuYXNjaWljaXJjdW0gPSA0MjI7XG4gICAgdC51bmRlcnNjb3JlID0gNTAwO1xuICAgIHQucXVvdGVsZWZ0ID0gMzMzO1xuICAgIHQuYSA9IDUwMDtcbiAgICB0LmIgPSA1MDA7XG4gICAgdC5jID0gNDQ0O1xuICAgIHQuZCA9IDUwMDtcbiAgICB0LmUgPSA0NDQ7XG4gICAgdC5mID0gMjc4O1xuICAgIHQuZyA9IDUwMDtcbiAgICB0LmggPSA1MDA7XG4gICAgdC5pID0gMjc4O1xuICAgIHQuaiA9IDI3ODtcbiAgICB0LmsgPSA0NDQ7XG4gICAgdC5sID0gMjc4O1xuICAgIHQubSA9IDcyMjtcbiAgICB0Lm4gPSA1MDA7XG4gICAgdC5vID0gNTAwO1xuICAgIHQucCA9IDUwMDtcbiAgICB0LnEgPSA1MDA7XG4gICAgdC5yID0gMzg5O1xuICAgIHQucyA9IDM4OTtcbiAgICB0LnQgPSAyNzg7XG4gICAgdC51ID0gNTAwO1xuICAgIHQudiA9IDQ0NDtcbiAgICB0LncgPSA2Njc7XG4gICAgdC54ID0gNDQ0O1xuICAgIHQueSA9IDQ0NDtcbiAgICB0LnogPSAzODk7XG4gICAgdC5icmFjZWxlZnQgPSA0MDA7XG4gICAgdC5iYXIgPSAyNzU7XG4gICAgdC5icmFjZXJpZ2h0ID0gNDAwO1xuICAgIHQuYXNjaWl0aWxkZSA9IDU0MTtcbiAgICB0LmV4Y2xhbWRvd24gPSAzODk7XG4gICAgdC5jZW50ID0gNTAwO1xuICAgIHQuc3RlcmxpbmcgPSA1MDA7XG4gICAgdC5mcmFjdGlvbiA9IDE2NztcbiAgICB0LnllbiA9IDUwMDtcbiAgICB0LmZsb3JpbiA9IDUwMDtcbiAgICB0LnNlY3Rpb24gPSA1MDA7XG4gICAgdC5jdXJyZW5jeSA9IDUwMDtcbiAgICB0LnF1b3Rlc2luZ2xlID0gMjE0O1xuICAgIHQucXVvdGVkYmxsZWZ0ID0gNTU2O1xuICAgIHQuZ3VpbGxlbW90bGVmdCA9IDUwMDtcbiAgICB0Lmd1aWxzaW5nbGxlZnQgPSAzMzM7XG4gICAgdC5ndWlsc2luZ2xyaWdodCA9IDMzMztcbiAgICB0LmZpID0gNTAwO1xuICAgIHQuZmwgPSA1MDA7XG4gICAgdC5lbmRhc2ggPSA1MDA7XG4gICAgdC5kYWdnZXIgPSA1MDA7XG4gICAgdC5kYWdnZXJkYmwgPSA1MDA7XG4gICAgdC5wZXJpb2RjZW50ZXJlZCA9IDI1MDtcbiAgICB0LnBhcmFncmFwaCA9IDUyMztcbiAgICB0LmJ1bGxldCA9IDM1MDtcbiAgICB0LnF1b3Rlc2luZ2xiYXNlID0gMzMzO1xuICAgIHQucXVvdGVkYmxiYXNlID0gNTU2O1xuICAgIHQucXVvdGVkYmxyaWdodCA9IDU1NjtcbiAgICB0Lmd1aWxsZW1vdHJpZ2h0ID0gNTAwO1xuICAgIHQuZWxsaXBzaXMgPSA4ODk7XG4gICAgdC5wZXJ0aG91c2FuZCA9IDEwMDA7XG4gICAgdC5xdWVzdGlvbmRvd24gPSA1MDA7XG4gICAgdC5ncmF2ZSA9IDMzMztcbiAgICB0LmFjdXRlID0gMzMzO1xuICAgIHQuY2lyY3VtZmxleCA9IDMzMztcbiAgICB0LnRpbGRlID0gMzMzO1xuICAgIHQubWFjcm9uID0gMzMzO1xuICAgIHQuYnJldmUgPSAzMzM7XG4gICAgdC5kb3RhY2NlbnQgPSAzMzM7XG4gICAgdC5kaWVyZXNpcyA9IDMzMztcbiAgICB0LnJpbmcgPSAzMzM7XG4gICAgdC5jZWRpbGxhID0gMzMzO1xuICAgIHQuaHVuZ2FydW1sYXV0ID0gMzMzO1xuICAgIHQub2dvbmVrID0gMzMzO1xuICAgIHQuY2Fyb24gPSAzMzM7XG4gICAgdC5lbWRhc2ggPSA4ODk7XG4gICAgdC5BRSA9IDg4OTtcbiAgICB0Lm9yZGZlbWluaW5lID0gMjc2O1xuICAgIHQuTHNsYXNoID0gNTU2O1xuICAgIHQuT3NsYXNoID0gNzIyO1xuICAgIHQuT0UgPSA5NDQ7XG4gICAgdC5vcmRtYXNjdWxpbmUgPSAzMTA7XG4gICAgdC5hZSA9IDY2NztcbiAgICB0LmRvdGxlc3NpID0gMjc4O1xuICAgIHQubHNsYXNoID0gMjc4O1xuICAgIHQub3NsYXNoID0gNTAwO1xuICAgIHQub2UgPSA2Njc7XG4gICAgdC5nZXJtYW5kYmxzID0gNTAwO1xuICAgIHQuSWRpZXJlc2lzID0gMzMzO1xuICAgIHQuZWFjdXRlID0gNDQ0O1xuICAgIHQuYWJyZXZlID0gNTAwO1xuICAgIHQudWh1bmdhcnVtbGF1dCA9IDUwMDtcbiAgICB0LmVjYXJvbiA9IDQ0NDtcbiAgICB0LllkaWVyZXNpcyA9IDU1NjtcbiAgICB0LmRpdmlkZSA9IDY3NTtcbiAgICB0LllhY3V0ZSA9IDU1NjtcbiAgICB0LkFjaXJjdW1mbGV4ID0gNjExO1xuICAgIHQuYWFjdXRlID0gNTAwO1xuICAgIHQuVWNpcmN1bWZsZXggPSA3MjI7XG4gICAgdC55YWN1dGUgPSA0NDQ7XG4gICAgdC5zY29tbWFhY2NlbnQgPSAzODk7XG4gICAgdC5lY2lyY3VtZmxleCA9IDQ0NDtcbiAgICB0LlVyaW5nID0gNzIyO1xuICAgIHQuVWRpZXJlc2lzID0gNzIyO1xuICAgIHQuYW9nb25layA9IDUwMDtcbiAgICB0LlVhY3V0ZSA9IDcyMjtcbiAgICB0LnVvZ29uZWsgPSA1MDA7XG4gICAgdC5FZGllcmVzaXMgPSA2MTE7XG4gICAgdC5EY3JvYXQgPSA3MjI7XG4gICAgdC5jb21tYWFjY2VudCA9IDI1MDtcbiAgICB0LmNvcHlyaWdodCA9IDc2MDtcbiAgICB0LkVtYWNyb24gPSA2MTE7XG4gICAgdC5jY2Fyb24gPSA0NDQ7XG4gICAgdC5hcmluZyA9IDUwMDtcbiAgICB0Lk5jb21tYWFjY2VudCA9IDY2NztcbiAgICB0LmxhY3V0ZSA9IDI3ODtcbiAgICB0LmFncmF2ZSA9IDUwMDtcbiAgICB0LlRjb21tYWFjY2VudCA9IDU1NjtcbiAgICB0LkNhY3V0ZSA9IDY2NztcbiAgICB0LmF0aWxkZSA9IDUwMDtcbiAgICB0LkVkb3RhY2NlbnQgPSA2MTE7XG4gICAgdC5zY2Fyb24gPSAzODk7XG4gICAgdC5zY2VkaWxsYSA9IDM4OTtcbiAgICB0LmlhY3V0ZSA9IDI3ODtcbiAgICB0LmxvemVuZ2UgPSA0NzE7XG4gICAgdC5SY2Fyb24gPSA2MTE7XG4gICAgdC5HY29tbWFhY2NlbnQgPSA3MjI7XG4gICAgdC51Y2lyY3VtZmxleCA9IDUwMDtcbiAgICB0LmFjaXJjdW1mbGV4ID0gNTAwO1xuICAgIHQuQW1hY3JvbiA9IDYxMTtcbiAgICB0LnJjYXJvbiA9IDM4OTtcbiAgICB0LmNjZWRpbGxhID0gNDQ0O1xuICAgIHQuWmRvdGFjY2VudCA9IDU1NjtcbiAgICB0LlRob3JuID0gNjExO1xuICAgIHQuT21hY3JvbiA9IDcyMjtcbiAgICB0LlJhY3V0ZSA9IDYxMTtcbiAgICB0LlNhY3V0ZSA9IDUwMDtcbiAgICB0LmRjYXJvbiA9IDU0NDtcbiAgICB0LlVtYWNyb24gPSA3MjI7XG4gICAgdC51cmluZyA9IDUwMDtcbiAgICB0LnRocmVlc3VwZXJpb3IgPSAzMDA7XG4gICAgdC5PZ3JhdmUgPSA3MjI7XG4gICAgdC5BZ3JhdmUgPSA2MTE7XG4gICAgdC5BYnJldmUgPSA2MTE7XG4gICAgdC5tdWx0aXBseSA9IDY3NTtcbiAgICB0LnVhY3V0ZSA9IDUwMDtcbiAgICB0LlRjYXJvbiA9IDU1NjtcbiAgICB0LnBhcnRpYWxkaWZmID0gNDc2O1xuICAgIHQueWRpZXJlc2lzID0gNDQ0O1xuICAgIHQuTmFjdXRlID0gNjY3O1xuICAgIHQuaWNpcmN1bWZsZXggPSAyNzg7XG4gICAgdC5FY2lyY3VtZmxleCA9IDYxMTtcbiAgICB0LmFkaWVyZXNpcyA9IDUwMDtcbiAgICB0LmVkaWVyZXNpcyA9IDQ0NDtcbiAgICB0LmNhY3V0ZSA9IDQ0NDtcbiAgICB0Lm5hY3V0ZSA9IDUwMDtcbiAgICB0LnVtYWNyb24gPSA1MDA7XG4gICAgdC5OY2Fyb24gPSA2Njc7XG4gICAgdC5JYWN1dGUgPSAzMzM7XG4gICAgdC5wbHVzbWludXMgPSA2NzU7XG4gICAgdC5icm9rZW5iYXIgPSAyNzU7XG4gICAgdC5yZWdpc3RlcmVkID0gNzYwO1xuICAgIHQuR2JyZXZlID0gNzIyO1xuICAgIHQuSWRvdGFjY2VudCA9IDMzMztcbiAgICB0LnN1bW1hdGlvbiA9IDYwMDtcbiAgICB0LkVncmF2ZSA9IDYxMTtcbiAgICB0LnJhY3V0ZSA9IDM4OTtcbiAgICB0Lm9tYWNyb24gPSA1MDA7XG4gICAgdC5aYWN1dGUgPSA1NTY7XG4gICAgdC5aY2Fyb24gPSA1NTY7XG4gICAgdC5ncmVhdGVyZXF1YWwgPSA1NDk7XG4gICAgdC5FdGggPSA3MjI7XG4gICAgdC5DY2VkaWxsYSA9IDY2NztcbiAgICB0Lmxjb21tYWFjY2VudCA9IDI3ODtcbiAgICB0LnRjYXJvbiA9IDMwMDtcbiAgICB0LmVvZ29uZWsgPSA0NDQ7XG4gICAgdC5Vb2dvbmVrID0gNzIyO1xuICAgIHQuQWFjdXRlID0gNjExO1xuICAgIHQuQWRpZXJlc2lzID0gNjExO1xuICAgIHQuZWdyYXZlID0gNDQ0O1xuICAgIHQuemFjdXRlID0gMzg5O1xuICAgIHQuaW9nb25layA9IDI3ODtcbiAgICB0Lk9hY3V0ZSA9IDcyMjtcbiAgICB0Lm9hY3V0ZSA9IDUwMDtcbiAgICB0LmFtYWNyb24gPSA1MDA7XG4gICAgdC5zYWN1dGUgPSAzODk7XG4gICAgdC5pZGllcmVzaXMgPSAyNzg7XG4gICAgdC5PY2lyY3VtZmxleCA9IDcyMjtcbiAgICB0LlVncmF2ZSA9IDcyMjtcbiAgICB0LkRlbHRhID0gNjEyO1xuICAgIHQudGhvcm4gPSA1MDA7XG4gICAgdC50d29zdXBlcmlvciA9IDMwMDtcbiAgICB0Lk9kaWVyZXNpcyA9IDcyMjtcbiAgICB0Lm11ID0gNTAwO1xuICAgIHQuaWdyYXZlID0gMjc4O1xuICAgIHQub2h1bmdhcnVtbGF1dCA9IDUwMDtcbiAgICB0LkVvZ29uZWsgPSA2MTE7XG4gICAgdC5kY3JvYXQgPSA1MDA7XG4gICAgdC50aHJlZXF1YXJ0ZXJzID0gNzUwO1xuICAgIHQuU2NlZGlsbGEgPSA1MDA7XG4gICAgdC5sY2Fyb24gPSAzMDA7XG4gICAgdC5LY29tbWFhY2NlbnQgPSA2Njc7XG4gICAgdC5MYWN1dGUgPSA1NTY7XG4gICAgdC50cmFkZW1hcmsgPSA5ODA7XG4gICAgdC5lZG90YWNjZW50ID0gNDQ0O1xuICAgIHQuSWdyYXZlID0gMzMzO1xuICAgIHQuSW1hY3JvbiA9IDMzMztcbiAgICB0LkxjYXJvbiA9IDYxMTtcbiAgICB0Lm9uZWhhbGYgPSA3NTA7XG4gICAgdC5sZXNzZXF1YWwgPSA1NDk7XG4gICAgdC5vY2lyY3VtZmxleCA9IDUwMDtcbiAgICB0Lm50aWxkZSA9IDUwMDtcbiAgICB0LlVodW5nYXJ1bWxhdXQgPSA3MjI7XG4gICAgdC5FYWN1dGUgPSA2MTE7XG4gICAgdC5lbWFjcm9uID0gNDQ0O1xuICAgIHQuZ2JyZXZlID0gNTAwO1xuICAgIHQub25lcXVhcnRlciA9IDc1MDtcbiAgICB0LlNjYXJvbiA9IDUwMDtcbiAgICB0LlNjb21tYWFjY2VudCA9IDUwMDtcbiAgICB0Lk9odW5nYXJ1bWxhdXQgPSA3MjI7XG4gICAgdC5kZWdyZWUgPSA0MDA7XG4gICAgdC5vZ3JhdmUgPSA1MDA7XG4gICAgdC5DY2Fyb24gPSA2Njc7XG4gICAgdC51Z3JhdmUgPSA1MDA7XG4gICAgdC5yYWRpY2FsID0gNDUzO1xuICAgIHQuRGNhcm9uID0gNzIyO1xuICAgIHQucmNvbW1hYWNjZW50ID0gMzg5O1xuICAgIHQuTnRpbGRlID0gNjY3O1xuICAgIHQub3RpbGRlID0gNTAwO1xuICAgIHQuUmNvbW1hYWNjZW50ID0gNjExO1xuICAgIHQuTGNvbW1hYWNjZW50ID0gNTU2O1xuICAgIHQuQXRpbGRlID0gNjExO1xuICAgIHQuQW9nb25layA9IDYxMTtcbiAgICB0LkFyaW5nID0gNjExO1xuICAgIHQuT3RpbGRlID0gNzIyO1xuICAgIHQuemRvdGFjY2VudCA9IDM4OTtcbiAgICB0LkVjYXJvbiA9IDYxMTtcbiAgICB0LklvZ29uZWsgPSAzMzM7XG4gICAgdC5rY29tbWFhY2NlbnQgPSA0NDQ7XG4gICAgdC5taW51cyA9IDY3NTtcbiAgICB0LkljaXJjdW1mbGV4ID0gMzMzO1xuICAgIHQubmNhcm9uID0gNTAwO1xuICAgIHQudGNvbW1hYWNjZW50ID0gMjc4O1xuICAgIHQubG9naWNhbG5vdCA9IDY3NTtcbiAgICB0Lm9kaWVyZXNpcyA9IDUwMDtcbiAgICB0LnVkaWVyZXNpcyA9IDUwMDtcbiAgICB0Lm5vdGVxdWFsID0gNTQ5O1xuICAgIHQuZ2NvbW1hYWNjZW50ID0gNTAwO1xuICAgIHQuZXRoID0gNTAwO1xuICAgIHQuemNhcm9uID0gMzg5O1xuICAgIHQubmNvbW1hYWNjZW50ID0gNTAwO1xuICAgIHQub25lc3VwZXJpb3IgPSAzMDA7XG4gICAgdC5pbWFjcm9uID0gMjc4O1xuICAgIHQuRXVybyA9IDUwMDtcbiAgfSk7XG4gIHQuWmFwZkRpbmdiYXRzID0gKDAsIF9jb3JlX3V0aWxzLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoZnVuY3Rpb24gKHQpIHtcbiAgICB0LnNwYWNlID0gMjc4O1xuICAgIHQuYTEgPSA5NzQ7XG4gICAgdC5hMiA9IDk2MTtcbiAgICB0LmEyMDIgPSA5NzQ7XG4gICAgdC5hMyA9IDk4MDtcbiAgICB0LmE0ID0gNzE5O1xuICAgIHQuYTUgPSA3ODk7XG4gICAgdC5hMTE5ID0gNzkwO1xuICAgIHQuYTExOCA9IDc5MTtcbiAgICB0LmExMTcgPSA2OTA7XG4gICAgdC5hMTEgPSA5NjA7XG4gICAgdC5hMTIgPSA5Mzk7XG4gICAgdC5hMTMgPSA1NDk7XG4gICAgdC5hMTQgPSA4NTU7XG4gICAgdC5hMTUgPSA5MTE7XG4gICAgdC5hMTYgPSA5MzM7XG4gICAgdC5hMTA1ID0gOTExO1xuICAgIHQuYTE3ID0gOTQ1O1xuICAgIHQuYTE4ID0gOTc0O1xuICAgIHQuYTE5ID0gNzU1O1xuICAgIHQuYTIwID0gODQ2O1xuICAgIHQuYTIxID0gNzYyO1xuICAgIHQuYTIyID0gNzYxO1xuICAgIHQuYTIzID0gNTcxO1xuICAgIHQuYTI0ID0gNjc3O1xuICAgIHQuYTI1ID0gNzYzO1xuICAgIHQuYTI2ID0gNzYwO1xuICAgIHQuYTI3ID0gNzU5O1xuICAgIHQuYTI4ID0gNzU0O1xuICAgIHQuYTYgPSA0OTQ7XG4gICAgdC5hNyA9IDU1MjtcbiAgICB0LmE4ID0gNTM3O1xuICAgIHQuYTkgPSA1Nzc7XG4gICAgdC5hMTAgPSA2OTI7XG4gICAgdC5hMjkgPSA3ODY7XG4gICAgdC5hMzAgPSA3ODg7XG4gICAgdC5hMzEgPSA3ODg7XG4gICAgdC5hMzIgPSA3OTA7XG4gICAgdC5hMzMgPSA3OTM7XG4gICAgdC5hMzQgPSA3OTQ7XG4gICAgdC5hMzUgPSA4MTY7XG4gICAgdC5hMzYgPSA4MjM7XG4gICAgdC5hMzcgPSA3ODk7XG4gICAgdC5hMzggPSA4NDE7XG4gICAgdC5hMzkgPSA4MjM7XG4gICAgdC5hNDAgPSA4MzM7XG4gICAgdC5hNDEgPSA4MTY7XG4gICAgdC5hNDIgPSA4MzE7XG4gICAgdC5hNDMgPSA5MjM7XG4gICAgdC5hNDQgPSA3NDQ7XG4gICAgdC5hNDUgPSA3MjM7XG4gICAgdC5hNDYgPSA3NDk7XG4gICAgdC5hNDcgPSA3OTA7XG4gICAgdC5hNDggPSA3OTI7XG4gICAgdC5hNDkgPSA2OTU7XG4gICAgdC5hNTAgPSA3NzY7XG4gICAgdC5hNTEgPSA3Njg7XG4gICAgdC5hNTIgPSA3OTI7XG4gICAgdC5hNTMgPSA3NTk7XG4gICAgdC5hNTQgPSA3MDc7XG4gICAgdC5hNTUgPSA3MDg7XG4gICAgdC5hNTYgPSA2ODI7XG4gICAgdC5hNTcgPSA3MDE7XG4gICAgdC5hNTggPSA4MjY7XG4gICAgdC5hNTkgPSA4MTU7XG4gICAgdC5hNjAgPSA3ODk7XG4gICAgdC5hNjEgPSA3ODk7XG4gICAgdC5hNjIgPSA3MDc7XG4gICAgdC5hNjMgPSA2ODc7XG4gICAgdC5hNjQgPSA2OTY7XG4gICAgdC5hNjUgPSA2ODk7XG4gICAgdC5hNjYgPSA3ODY7XG4gICAgdC5hNjcgPSA3ODc7XG4gICAgdC5hNjggPSA3MTM7XG4gICAgdC5hNjkgPSA3OTE7XG4gICAgdC5hNzAgPSA3ODU7XG4gICAgdC5hNzEgPSA3OTE7XG4gICAgdC5hNzIgPSA4NzM7XG4gICAgdC5hNzMgPSA3NjE7XG4gICAgdC5hNzQgPSA3NjI7XG4gICAgdC5hMjAzID0gNzYyO1xuICAgIHQuYTc1ID0gNzU5O1xuICAgIHQuYTIwNCA9IDc1OTtcbiAgICB0LmE3NiA9IDg5MjtcbiAgICB0LmE3NyA9IDg5MjtcbiAgICB0LmE3OCA9IDc4ODtcbiAgICB0LmE3OSA9IDc4NDtcbiAgICB0LmE4MSA9IDQzODtcbiAgICB0LmE4MiA9IDEzODtcbiAgICB0LmE4MyA9IDI3NztcbiAgICB0LmE4NCA9IDQxNTtcbiAgICB0LmE5NyA9IDM5MjtcbiAgICB0LmE5OCA9IDM5MjtcbiAgICB0LmE5OSA9IDY2ODtcbiAgICB0LmExMDAgPSA2Njg7XG4gICAgdC5hODkgPSAzOTA7XG4gICAgdC5hOTAgPSAzOTA7XG4gICAgdC5hOTMgPSAzMTc7XG4gICAgdC5hOTQgPSAzMTc7XG4gICAgdC5hOTEgPSAyNzY7XG4gICAgdC5hOTIgPSAyNzY7XG4gICAgdC5hMjA1ID0gNTA5O1xuICAgIHQuYTg1ID0gNTA5O1xuICAgIHQuYTIwNiA9IDQxMDtcbiAgICB0LmE4NiA9IDQxMDtcbiAgICB0LmE4NyA9IDIzNDtcbiAgICB0LmE4OCA9IDIzNDtcbiAgICB0LmE5NSA9IDMzNDtcbiAgICB0LmE5NiA9IDMzNDtcbiAgICB0LmExMDEgPSA3MzI7XG4gICAgdC5hMTAyID0gNTQ0O1xuICAgIHQuYTEwMyA9IDU0NDtcbiAgICB0LmExMDQgPSA5MTA7XG4gICAgdC5hMTA2ID0gNjY3O1xuICAgIHQuYTEwNyA9IDc2MDtcbiAgICB0LmExMDggPSA3NjA7XG4gICAgdC5hMTEyID0gNzc2O1xuICAgIHQuYTExMSA9IDU5NTtcbiAgICB0LmExMTAgPSA2OTQ7XG4gICAgdC5hMTA5ID0gNjI2O1xuICAgIHQuYTEyMCA9IDc4ODtcbiAgICB0LmExMjEgPSA3ODg7XG4gICAgdC5hMTIyID0gNzg4O1xuICAgIHQuYTEyMyA9IDc4ODtcbiAgICB0LmExMjQgPSA3ODg7XG4gICAgdC5hMTI1ID0gNzg4O1xuICAgIHQuYTEyNiA9IDc4ODtcbiAgICB0LmExMjcgPSA3ODg7XG4gICAgdC5hMTI4ID0gNzg4O1xuICAgIHQuYTEyOSA9IDc4ODtcbiAgICB0LmExMzAgPSA3ODg7XG4gICAgdC5hMTMxID0gNzg4O1xuICAgIHQuYTEzMiA9IDc4ODtcbiAgICB0LmExMzMgPSA3ODg7XG4gICAgdC5hMTM0ID0gNzg4O1xuICAgIHQuYTEzNSA9IDc4ODtcbiAgICB0LmExMzYgPSA3ODg7XG4gICAgdC5hMTM3ID0gNzg4O1xuICAgIHQuYTEzOCA9IDc4ODtcbiAgICB0LmExMzkgPSA3ODg7XG4gICAgdC5hMTQwID0gNzg4O1xuICAgIHQuYTE0MSA9IDc4ODtcbiAgICB0LmExNDIgPSA3ODg7XG4gICAgdC5hMTQzID0gNzg4O1xuICAgIHQuYTE0NCA9IDc4ODtcbiAgICB0LmExNDUgPSA3ODg7XG4gICAgdC5hMTQ2ID0gNzg4O1xuICAgIHQuYTE0NyA9IDc4ODtcbiAgICB0LmExNDggPSA3ODg7XG4gICAgdC5hMTQ5ID0gNzg4O1xuICAgIHQuYTE1MCA9IDc4ODtcbiAgICB0LmExNTEgPSA3ODg7XG4gICAgdC5hMTUyID0gNzg4O1xuICAgIHQuYTE1MyA9IDc4ODtcbiAgICB0LmExNTQgPSA3ODg7XG4gICAgdC5hMTU1ID0gNzg4O1xuICAgIHQuYTE1NiA9IDc4ODtcbiAgICB0LmExNTcgPSA3ODg7XG4gICAgdC5hMTU4ID0gNzg4O1xuICAgIHQuYTE1OSA9IDc4ODtcbiAgICB0LmExNjAgPSA4OTQ7XG4gICAgdC5hMTYxID0gODM4O1xuICAgIHQuYTE2MyA9IDEwMTY7XG4gICAgdC5hMTY0ID0gNDU4O1xuICAgIHQuYTE5NiA9IDc0ODtcbiAgICB0LmExNjUgPSA5MjQ7XG4gICAgdC5hMTkyID0gNzQ4O1xuICAgIHQuYTE2NiA9IDkxODtcbiAgICB0LmExNjcgPSA5Mjc7XG4gICAgdC5hMTY4ID0gOTI4O1xuICAgIHQuYTE2OSA9IDkyODtcbiAgICB0LmExNzAgPSA4MzQ7XG4gICAgdC5hMTcxID0gODczO1xuICAgIHQuYTE3MiA9IDgyODtcbiAgICB0LmExNzMgPSA5MjQ7XG4gICAgdC5hMTYyID0gOTI0O1xuICAgIHQuYTE3NCA9IDkxNztcbiAgICB0LmExNzUgPSA5MzA7XG4gICAgdC5hMTc2ID0gOTMxO1xuICAgIHQuYTE3NyA9IDQ2MztcbiAgICB0LmExNzggPSA4ODM7XG4gICAgdC5hMTc5ID0gODM2O1xuICAgIHQuYTE5MyA9IDgzNjtcbiAgICB0LmExODAgPSA4Njc7XG4gICAgdC5hMTk5ID0gODY3O1xuICAgIHQuYTE4MSA9IDY5NjtcbiAgICB0LmEyMDAgPSA2OTY7XG4gICAgdC5hMTgyID0gODc0O1xuICAgIHQuYTIwMSA9IDg3NDtcbiAgICB0LmExODMgPSA3NjA7XG4gICAgdC5hMTg0ID0gOTQ2O1xuICAgIHQuYTE5NyA9IDc3MTtcbiAgICB0LmExODUgPSA4NjU7XG4gICAgdC5hMTk0ID0gNzcxO1xuICAgIHQuYTE5OCA9IDg4ODtcbiAgICB0LmExODYgPSA5Njc7XG4gICAgdC5hMTk1ID0gODg4O1xuICAgIHQuYTE4NyA9IDgzMTtcbiAgICB0LmExODggPSA4NzM7XG4gICAgdC5hMTg5ID0gOTI3O1xuICAgIHQuYTE5MCA9IDk3MDtcbiAgICB0LmExOTEgPSA5MTg7XG4gIH0pO1xufSk7XG5leHBvcnRzLmdldE1ldHJpY3MgPSBnZXRNZXRyaWNzO1xuXG4vKioqLyB9KSxcbi8qIDYxICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLk11cm11ckhhc2gzXzY0ID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5jb25zdCBTRUVEID0gMHhjM2QyZTFmMDtcbmNvbnN0IE1BU0tfSElHSCA9IDB4ZmZmZjAwMDA7XG5jb25zdCBNQVNLX0xPVyA9IDB4ZmZmZjtcblxuY2xhc3MgTXVybXVySGFzaDNfNjQge1xuICBjb25zdHJ1Y3RvcihzZWVkKSB7XG4gICAgdGhpcy5oMSA9IHNlZWQgPyBzZWVkICYgMHhmZmZmZmZmZiA6IFNFRUQ7XG4gICAgdGhpcy5oMiA9IHNlZWQgPyBzZWVkICYgMHhmZmZmZmZmZiA6IFNFRUQ7XG4gIH1cblxuICB1cGRhdGUoaW5wdXQpIHtcbiAgICBsZXQgZGF0YSwgbGVuZ3RoO1xuXG4gICAgaWYgKCgwLCBfdXRpbC5pc1N0cmluZykoaW5wdXQpKSB7XG4gICAgICBkYXRhID0gbmV3IFVpbnQ4QXJyYXkoaW5wdXQubGVuZ3RoICogMik7XG4gICAgICBsZW5ndGggPSAwO1xuXG4gICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBpbnB1dC5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNvZGUgPSBpbnB1dC5jaGFyQ29kZUF0KGkpO1xuXG4gICAgICAgIGlmIChjb2RlIDw9IDB4ZmYpIHtcbiAgICAgICAgICBkYXRhW2xlbmd0aCsrXSA9IGNvZGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGF0YVtsZW5ndGgrK10gPSBjb2RlID4+PiA4O1xuICAgICAgICAgIGRhdGFbbGVuZ3RoKytdID0gY29kZSAmIDB4ZmY7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCgwLCBfdXRpbC5pc0FycmF5QnVmZmVyKShpbnB1dCkpIHtcbiAgICAgIGRhdGEgPSBpbnB1dC5zbGljZSgpO1xuICAgICAgbGVuZ3RoID0gZGF0YS5ieXRlTGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJXcm9uZyBkYXRhIGZvcm1hdCBpbiBNdXJtdXJIYXNoM182NF91cGRhdGUuIFwiICsgXCJJbnB1dCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFycmF5LlwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBibG9ja0NvdW50cyA9IGxlbmd0aCA+PiAyO1xuICAgIGNvbnN0IHRhaWxMZW5ndGggPSBsZW5ndGggLSBibG9ja0NvdW50cyAqIDQ7XG4gICAgY29uc3QgZGF0YVVpbnQzMiA9IG5ldyBVaW50MzJBcnJheShkYXRhLmJ1ZmZlciwgMCwgYmxvY2tDb3VudHMpO1xuICAgIGxldCBrMSA9IDAsXG4gICAgICAgIGsyID0gMDtcbiAgICBsZXQgaDEgPSB0aGlzLmgxLFxuICAgICAgICBoMiA9IHRoaXMuaDI7XG4gICAgY29uc3QgQzEgPSAweGNjOWUyZDUxLFxuICAgICAgICAgIEMyID0gMHgxYjg3MzU5MztcbiAgICBjb25zdCBDMV9MT1cgPSBDMSAmIE1BU0tfTE9XLFxuICAgICAgICAgIEMyX0xPVyA9IEMyICYgTUFTS19MT1c7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJsb2NrQ291bnRzOyBpKyspIHtcbiAgICAgIGlmIChpICYgMSkge1xuICAgICAgICBrMSA9IGRhdGFVaW50MzJbaV07XG4gICAgICAgIGsxID0gazEgKiBDMSAmIE1BU0tfSElHSCB8IGsxICogQzFfTE9XICYgTUFTS19MT1c7XG4gICAgICAgIGsxID0gazEgPDwgMTUgfCBrMSA+Pj4gMTc7XG4gICAgICAgIGsxID0gazEgKiBDMiAmIE1BU0tfSElHSCB8IGsxICogQzJfTE9XICYgTUFTS19MT1c7XG4gICAgICAgIGgxIF49IGsxO1xuICAgICAgICBoMSA9IGgxIDw8IDEzIHwgaDEgPj4+IDE5O1xuICAgICAgICBoMSA9IGgxICogNSArIDB4ZTY1NDZiNjQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBrMiA9IGRhdGFVaW50MzJbaV07XG4gICAgICAgIGsyID0gazIgKiBDMSAmIE1BU0tfSElHSCB8IGsyICogQzFfTE9XICYgTUFTS19MT1c7XG4gICAgICAgIGsyID0gazIgPDwgMTUgfCBrMiA+Pj4gMTc7XG4gICAgICAgIGsyID0gazIgKiBDMiAmIE1BU0tfSElHSCB8IGsyICogQzJfTE9XICYgTUFTS19MT1c7XG4gICAgICAgIGgyIF49IGsyO1xuICAgICAgICBoMiA9IGgyIDw8IDEzIHwgaDIgPj4+IDE5O1xuICAgICAgICBoMiA9IGgyICogNSArIDB4ZTY1NDZiNjQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgazEgPSAwO1xuXG4gICAgc3dpdGNoICh0YWlsTGVuZ3RoKSB7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIGsxIF49IGRhdGFbYmxvY2tDb3VudHMgKiA0ICsgMl0gPDwgMTY7XG5cbiAgICAgIGNhc2UgMjpcbiAgICAgICAgazEgXj0gZGF0YVtibG9ja0NvdW50cyAqIDQgKyAxXSA8PCA4O1xuXG4gICAgICBjYXNlIDE6XG4gICAgICAgIGsxIF49IGRhdGFbYmxvY2tDb3VudHMgKiA0XTtcbiAgICAgICAgazEgPSBrMSAqIEMxICYgTUFTS19ISUdIIHwgazEgKiBDMV9MT1cgJiBNQVNLX0xPVztcbiAgICAgICAgazEgPSBrMSA8PCAxNSB8IGsxID4+PiAxNztcbiAgICAgICAgazEgPSBrMSAqIEMyICYgTUFTS19ISUdIIHwgazEgKiBDMl9MT1cgJiBNQVNLX0xPVztcblxuICAgICAgICBpZiAoYmxvY2tDb3VudHMgJiAxKSB7XG4gICAgICAgICAgaDEgXj0gazE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaDIgXj0gazE7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIHRoaXMuaDEgPSBoMTtcbiAgICB0aGlzLmgyID0gaDI7XG4gIH1cblxuICBoZXhkaWdlc3QoKSB7XG4gICAgbGV0IGgxID0gdGhpcy5oMSxcbiAgICAgICAgaDIgPSB0aGlzLmgyO1xuICAgIGgxIF49IGgyID4+PiAxO1xuICAgIGgxID0gaDEgKiAweGVkNTU4Y2NkICYgTUFTS19ISUdIIHwgaDEgKiAweDhjY2QgJiBNQVNLX0xPVztcbiAgICBoMiA9IGgyICogMHhmZjUxYWZkNyAmIE1BU0tfSElHSCB8ICgoaDIgPDwgMTYgfCBoMSA+Pj4gMTYpICogMHhhZmQ3ZWQ1NSAmIE1BU0tfSElHSCkgPj4+IDE2O1xuICAgIGgxIF49IGgyID4+PiAxO1xuICAgIGgxID0gaDEgKiAweDFhODVlYzUzICYgTUFTS19ISUdIIHwgaDEgKiAweGVjNTMgJiBNQVNLX0xPVztcbiAgICBoMiA9IGgyICogMHhjNGNlYjlmZSAmIE1BU0tfSElHSCB8ICgoaDIgPDwgMTYgfCBoMSA+Pj4gMTYpICogMHhiOWZlMWE4NSAmIE1BU0tfSElHSCkgPj4+IDE2O1xuICAgIGgxIF49IGgyID4+PiAxO1xuICAgIGNvbnN0IGhleDEgPSAoaDEgPj4+IDApLnRvU3RyaW5nKDE2KSxcbiAgICAgICAgICBoZXgyID0gKGgyID4+PiAwKS50b1N0cmluZygxNik7XG4gICAgcmV0dXJuIGhleDEucGFkU3RhcnQoOCwgXCIwXCIpICsgaGV4Mi5wYWRTdGFydCg4LCBcIjBcIik7XG4gIH1cblxufVxuXG5leHBvcnRzLk11cm11ckhhc2gzXzY0ID0gTXVybXVySGFzaDNfNjQ7XG5cbi8qKiovIH0pLFxuLyogNjIgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuT3BlcmF0b3JMaXN0ID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5mdW5jdGlvbiBhZGRTdGF0ZShwYXJlbnRTdGF0ZSwgcGF0dGVybiwgY2hlY2tGbiwgaXRlcmF0ZUZuLCBwcm9jZXNzRm4pIHtcbiAgbGV0IHN0YXRlID0gcGFyZW50U3RhdGU7XG5cbiAgZm9yIChsZXQgaSA9IDAsIGlpID0gcGF0dGVybi5sZW5ndGggLSAxOyBpIDwgaWk7IGkrKykge1xuICAgIGNvbnN0IGl0ZW0gPSBwYXR0ZXJuW2ldO1xuICAgIHN0YXRlID0gc3RhdGVbaXRlbV0gfHwgKHN0YXRlW2l0ZW1dID0gW10pO1xuICB9XG5cbiAgc3RhdGVbcGF0dGVybltwYXR0ZXJuLmxlbmd0aCAtIDFdXSA9IHtcbiAgICBjaGVja0ZuLFxuICAgIGl0ZXJhdGVGbixcbiAgICBwcm9jZXNzRm5cbiAgfTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlUGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrKGlGaXJzdFNhdmUsIGNvdW50LCBmbkFycmF5LCBhcmdzQXJyYXkpIHtcbiAgY29uc3QgaUZpcnN0UElNWE8gPSBpRmlyc3RTYXZlICsgMjtcbiAgbGV0IGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICBjb25zdCBhcmcgPSBhcmdzQXJyYXlbaUZpcnN0UElNWE8gKyA0ICogaV07XG4gICAgY29uc3QgaW1hZ2VNYXNrID0gYXJnLmxlbmd0aCA9PT0gMSAmJiBhcmdbMF07XG5cbiAgICBpZiAoaW1hZ2VNYXNrICYmIGltYWdlTWFzay53aWR0aCA9PT0gMSAmJiBpbWFnZU1hc2suaGVpZ2h0ID09PSAxICYmICghaW1hZ2VNYXNrLmRhdGEubGVuZ3RoIHx8IGltYWdlTWFzay5kYXRhLmxlbmd0aCA9PT0gMSAmJiBpbWFnZU1hc2suZGF0YVswXSA9PT0gMCkpIHtcbiAgICAgIGZuQXJyYXlbaUZpcnN0UElNWE8gKyA0ICogaV0gPSBfdXRpbC5PUFMucGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gY291bnQgLSBpO1xufVxuXG5jb25zdCBJbml0aWFsU3RhdGUgPSBbXTtcbmFkZFN0YXRlKEluaXRpYWxTdGF0ZSwgW191dGlsLk9QUy5zYXZlLCBfdXRpbC5PUFMudHJhbnNmb3JtLCBfdXRpbC5PUFMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3QsIF91dGlsLk9QUy5yZXN0b3JlXSwgbnVsbCwgZnVuY3Rpb24gaXRlcmF0ZUlubGluZUltYWdlR3JvdXAoY29udGV4dCwgaSkge1xuICBjb25zdCBmbkFycmF5ID0gY29udGV4dC5mbkFycmF5O1xuICBjb25zdCBpRmlyc3RTYXZlID0gY29udGV4dC5pQ3VyciAtIDM7XG4gIGNvbnN0IHBvcyA9IChpIC0gaUZpcnN0U2F2ZSkgJSA0O1xuXG4gIHN3aXRjaCAocG9zKSB7XG4gICAgY2FzZSAwOlxuICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IF91dGlsLk9QUy5zYXZlO1xuXG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IF91dGlsLk9QUy50cmFuc2Zvcm07XG5cbiAgICBjYXNlIDI6XG4gICAgICByZXR1cm4gZm5BcnJheVtpXSA9PT0gX3V0aWwuT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0O1xuXG4gICAgY2FzZSAzOlxuICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IF91dGlsLk9QUy5yZXN0b3JlO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBpdGVyYXRlSW5saW5lSW1hZ2VHcm91cCAtIGludmFsaWQgcG9zOiAke3Bvc31gKTtcbn0sIGZ1bmN0aW9uIGZvdW5kSW5saW5lSW1hZ2VHcm91cChjb250ZXh0LCBpKSB7XG4gIGNvbnN0IE1JTl9JTUFHRVNfSU5fSU5MSU5FX0lNQUdFU19CTE9DSyA9IDEwO1xuICBjb25zdCBNQVhfSU1BR0VTX0lOX0lOTElORV9JTUFHRVNfQkxPQ0sgPSAyMDA7XG4gIGNvbnN0IE1BWF9XSURUSCA9IDEwMDA7XG4gIGNvbnN0IElNQUdFX1BBRERJTkcgPSAxO1xuICBjb25zdCBmbkFycmF5ID0gY29udGV4dC5mbkFycmF5LFxuICAgICAgICBhcmdzQXJyYXkgPSBjb250ZXh0LmFyZ3NBcnJheTtcbiAgY29uc3QgY3VyciA9IGNvbnRleHQuaUN1cnI7XG4gIGNvbnN0IGlGaXJzdFNhdmUgPSBjdXJyIC0gMztcbiAgY29uc3QgaUZpcnN0VHJhbnNmb3JtID0gY3VyciAtIDI7XG4gIGNvbnN0IGlGaXJzdFBJSVhPID0gY3VyciAtIDE7XG4gIGNvbnN0IGNvdW50ID0gTWF0aC5taW4oTWF0aC5mbG9vcigoaSAtIGlGaXJzdFNhdmUpIC8gNCksIE1BWF9JTUFHRVNfSU5fSU5MSU5FX0lNQUdFU19CTE9DSyk7XG5cbiAgaWYgKGNvdW50IDwgTUlOX0lNQUdFU19JTl9JTkxJTkVfSU1BR0VTX0JMT0NLKSB7XG4gICAgcmV0dXJuIGkgLSAoaSAtIGlGaXJzdFNhdmUpICUgNDtcbiAgfVxuXG4gIGxldCBtYXhYID0gMDtcbiAgY29uc3QgbWFwID0gW107XG4gIGxldCBtYXhMaW5lSGVpZ2h0ID0gMDtcbiAgbGV0IGN1cnJlbnRYID0gSU1BR0VfUEFERElORyxcbiAgICAgIGN1cnJlbnRZID0gSU1BR0VfUEFERElORztcblxuICBmb3IgKGxldCBxID0gMDsgcSA8IGNvdW50OyBxKyspIHtcbiAgICBjb25zdCB0cmFuc2Zvcm0gPSBhcmdzQXJyYXlbaUZpcnN0VHJhbnNmb3JtICsgKHEgPDwgMildO1xuICAgIGNvbnN0IGltZyA9IGFyZ3NBcnJheVtpRmlyc3RQSUlYTyArIChxIDw8IDIpXVswXTtcblxuICAgIGlmIChjdXJyZW50WCArIGltZy53aWR0aCA+IE1BWF9XSURUSCkge1xuICAgICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIGN1cnJlbnRYKTtcbiAgICAgIGN1cnJlbnRZICs9IG1heExpbmVIZWlnaHQgKyAyICogSU1BR0VfUEFERElORztcbiAgICAgIGN1cnJlbnRYID0gMDtcbiAgICAgIG1heExpbmVIZWlnaHQgPSAwO1xuICAgIH1cblxuICAgIG1hcC5wdXNoKHtcbiAgICAgIHRyYW5zZm9ybSxcbiAgICAgIHg6IGN1cnJlbnRYLFxuICAgICAgeTogY3VycmVudFksXG4gICAgICB3OiBpbWcud2lkdGgsXG4gICAgICBoOiBpbWcuaGVpZ2h0XG4gICAgfSk7XG4gICAgY3VycmVudFggKz0gaW1nLndpZHRoICsgMiAqIElNQUdFX1BBRERJTkc7XG4gICAgbWF4TGluZUhlaWdodCA9IE1hdGgubWF4KG1heExpbmVIZWlnaHQsIGltZy5oZWlnaHQpO1xuICB9XG5cbiAgY29uc3QgaW1nV2lkdGggPSBNYXRoLm1heChtYXhYLCBjdXJyZW50WCkgKyBJTUFHRV9QQURESU5HO1xuICBjb25zdCBpbWdIZWlnaHQgPSBjdXJyZW50WSArIG1heExpbmVIZWlnaHQgKyBJTUFHRV9QQURESU5HO1xuICBjb25zdCBpbWdEYXRhID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGltZ1dpZHRoICogaW1nSGVpZ2h0ICogNCk7XG4gIGNvbnN0IGltZ1Jvd1NpemUgPSBpbWdXaWR0aCA8PCAyO1xuXG4gIGZvciAobGV0IHEgPSAwOyBxIDwgY291bnQ7IHErKykge1xuICAgIGNvbnN0IGRhdGEgPSBhcmdzQXJyYXlbaUZpcnN0UElJWE8gKyAocSA8PCAyKV1bMF0uZGF0YTtcbiAgICBjb25zdCByb3dTaXplID0gbWFwW3FdLncgPDwgMjtcbiAgICBsZXQgZGF0YU9mZnNldCA9IDA7XG4gICAgbGV0IG9mZnNldCA9IG1hcFtxXS54ICsgbWFwW3FdLnkgKiBpbWdXaWR0aCA8PCAyO1xuICAgIGltZ0RhdGEuc2V0KGRhdGEuc3ViYXJyYXkoMCwgcm93U2l6ZSksIG9mZnNldCAtIGltZ1Jvd1NpemUpO1xuXG4gICAgZm9yIChsZXQgayA9IDAsIGtrID0gbWFwW3FdLmg7IGsgPCBrazsgaysrKSB7XG4gICAgICBpbWdEYXRhLnNldChkYXRhLnN1YmFycmF5KGRhdGFPZmZzZXQsIGRhdGFPZmZzZXQgKyByb3dTaXplKSwgb2Zmc2V0KTtcbiAgICAgIGRhdGFPZmZzZXQgKz0gcm93U2l6ZTtcbiAgICAgIG9mZnNldCArPSBpbWdSb3dTaXplO1xuICAgIH1cblxuICAgIGltZ0RhdGEuc2V0KGRhdGEuc3ViYXJyYXkoZGF0YU9mZnNldCAtIHJvd1NpemUsIGRhdGFPZmZzZXQpLCBvZmZzZXQpO1xuXG4gICAgd2hpbGUgKG9mZnNldCA+PSAwKSB7XG4gICAgICBkYXRhW29mZnNldCAtIDRdID0gZGF0YVtvZmZzZXRdO1xuICAgICAgZGF0YVtvZmZzZXQgLSAzXSA9IGRhdGFbb2Zmc2V0ICsgMV07XG4gICAgICBkYXRhW29mZnNldCAtIDJdID0gZGF0YVtvZmZzZXQgKyAyXTtcbiAgICAgIGRhdGFbb2Zmc2V0IC0gMV0gPSBkYXRhW29mZnNldCArIDNdO1xuICAgICAgZGF0YVtvZmZzZXQgKyByb3dTaXplXSA9IGRhdGFbb2Zmc2V0ICsgcm93U2l6ZSAtIDRdO1xuICAgICAgZGF0YVtvZmZzZXQgKyByb3dTaXplICsgMV0gPSBkYXRhW29mZnNldCArIHJvd1NpemUgLSAzXTtcbiAgICAgIGRhdGFbb2Zmc2V0ICsgcm93U2l6ZSArIDJdID0gZGF0YVtvZmZzZXQgKyByb3dTaXplIC0gMl07XG4gICAgICBkYXRhW29mZnNldCArIHJvd1NpemUgKyAzXSA9IGRhdGFbb2Zmc2V0ICsgcm93U2l6ZSAtIDFdO1xuICAgICAgb2Zmc2V0IC09IGltZ1Jvd1NpemU7XG4gICAgfVxuICB9XG5cbiAgZm5BcnJheS5zcGxpY2UoaUZpcnN0U2F2ZSwgY291bnQgKiA0LCBfdXRpbC5PUFMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3RHcm91cCk7XG4gIGFyZ3NBcnJheS5zcGxpY2UoaUZpcnN0U2F2ZSwgY291bnQgKiA0LCBbe1xuICAgIHdpZHRoOiBpbWdXaWR0aCxcbiAgICBoZWlnaHQ6IGltZ0hlaWdodCxcbiAgICBraW5kOiBfdXRpbC5JbWFnZUtpbmQuUkdCQV8zMkJQUCxcbiAgICBkYXRhOiBpbWdEYXRhXG4gIH0sIG1hcF0pO1xuICByZXR1cm4gaUZpcnN0U2F2ZSArIDE7XG59KTtcbmFkZFN0YXRlKEluaXRpYWxTdGF0ZSwgW191dGlsLk9QUy5zYXZlLCBfdXRpbC5PUFMudHJhbnNmb3JtLCBfdXRpbC5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0LCBfdXRpbC5PUFMucmVzdG9yZV0sIG51bGwsIGZ1bmN0aW9uIGl0ZXJhdGVJbWFnZU1hc2tHcm91cChjb250ZXh0LCBpKSB7XG4gIGNvbnN0IGZuQXJyYXkgPSBjb250ZXh0LmZuQXJyYXk7XG4gIGNvbnN0IGlGaXJzdFNhdmUgPSBjb250ZXh0LmlDdXJyIC0gMztcbiAgY29uc3QgcG9zID0gKGkgLSBpRmlyc3RTYXZlKSAlIDQ7XG5cbiAgc3dpdGNoIChwb3MpIHtcbiAgICBjYXNlIDA6XG4gICAgICByZXR1cm4gZm5BcnJheVtpXSA9PT0gX3V0aWwuT1BTLnNhdmU7XG5cbiAgICBjYXNlIDE6XG4gICAgICByZXR1cm4gZm5BcnJheVtpXSA9PT0gX3V0aWwuT1BTLnRyYW5zZm9ybTtcblxuICAgIGNhc2UgMjpcbiAgICAgIHJldHVybiBmbkFycmF5W2ldID09PSBfdXRpbC5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0O1xuXG4gICAgY2FzZSAzOlxuICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IF91dGlsLk9QUy5yZXN0b3JlO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBpdGVyYXRlSW1hZ2VNYXNrR3JvdXAgLSBpbnZhbGlkIHBvczogJHtwb3N9YCk7XG59LCBmdW5jdGlvbiBmb3VuZEltYWdlTWFza0dyb3VwKGNvbnRleHQsIGkpIHtcbiAgY29uc3QgTUlOX0lNQUdFU19JTl9NQVNLU19CTE9DSyA9IDEwO1xuICBjb25zdCBNQVhfSU1BR0VTX0lOX01BU0tTX0JMT0NLID0gMTAwO1xuICBjb25zdCBNQVhfU0FNRV9JTUFHRVNfSU5fTUFTS1NfQkxPQ0sgPSAxMDAwO1xuICBjb25zdCBmbkFycmF5ID0gY29udGV4dC5mbkFycmF5LFxuICAgICAgICBhcmdzQXJyYXkgPSBjb250ZXh0LmFyZ3NBcnJheTtcbiAgY29uc3QgY3VyciA9IGNvbnRleHQuaUN1cnI7XG4gIGNvbnN0IGlGaXJzdFNhdmUgPSBjdXJyIC0gMztcbiAgY29uc3QgaUZpcnN0VHJhbnNmb3JtID0gY3VyciAtIDI7XG4gIGNvbnN0IGlGaXJzdFBJTVhPID0gY3VyciAtIDE7XG4gIGxldCBjb3VudCA9IE1hdGguZmxvb3IoKGkgLSBpRmlyc3RTYXZlKSAvIDQpO1xuICBjb3VudCA9IGhhbmRsZVBhaW50U29saWRDb2xvckltYWdlTWFzayhpRmlyc3RTYXZlLCBjb3VudCwgZm5BcnJheSwgYXJnc0FycmF5KTtcblxuICBpZiAoY291bnQgPCBNSU5fSU1BR0VTX0lOX01BU0tTX0JMT0NLKSB7XG4gICAgcmV0dXJuIGkgLSAoaSAtIGlGaXJzdFNhdmUpICUgNDtcbiAgfVxuXG4gIGxldCBpc1NhbWVJbWFnZSA9IGZhbHNlO1xuICBsZXQgaVRyYW5zZm9ybSwgdHJhbnNmb3JtQXJncztcbiAgY29uc3QgZmlyc3RQSU1YT0FyZzAgPSBhcmdzQXJyYXlbaUZpcnN0UElNWE9dWzBdO1xuICBjb25zdCBmaXJzdFRyYW5zZm9ybUFyZzAgPSBhcmdzQXJyYXlbaUZpcnN0VHJhbnNmb3JtXVswXSxcbiAgICAgICAgZmlyc3RUcmFuc2Zvcm1BcmcxID0gYXJnc0FycmF5W2lGaXJzdFRyYW5zZm9ybV1bMV0sXG4gICAgICAgIGZpcnN0VHJhbnNmb3JtQXJnMiA9IGFyZ3NBcnJheVtpRmlyc3RUcmFuc2Zvcm1dWzJdLFxuICAgICAgICBmaXJzdFRyYW5zZm9ybUFyZzMgPSBhcmdzQXJyYXlbaUZpcnN0VHJhbnNmb3JtXVszXTtcblxuICBpZiAoZmlyc3RUcmFuc2Zvcm1BcmcxID09PSBmaXJzdFRyYW5zZm9ybUFyZzIpIHtcbiAgICBpc1NhbWVJbWFnZSA9IHRydWU7XG4gICAgaVRyYW5zZm9ybSA9IGlGaXJzdFRyYW5zZm9ybSArIDQ7XG4gICAgbGV0IGlQSU1YTyA9IGlGaXJzdFBJTVhPICsgNDtcblxuICAgIGZvciAobGV0IHEgPSAxOyBxIDwgY291bnQ7IHErKywgaVRyYW5zZm9ybSArPSA0LCBpUElNWE8gKz0gNCkge1xuICAgICAgdHJhbnNmb3JtQXJncyA9IGFyZ3NBcnJheVtpVHJhbnNmb3JtXTtcblxuICAgICAgaWYgKGFyZ3NBcnJheVtpUElNWE9dWzBdICE9PSBmaXJzdFBJTVhPQXJnMCB8fCB0cmFuc2Zvcm1BcmdzWzBdICE9PSBmaXJzdFRyYW5zZm9ybUFyZzAgfHwgdHJhbnNmb3JtQXJnc1sxXSAhPT0gZmlyc3RUcmFuc2Zvcm1BcmcxIHx8IHRyYW5zZm9ybUFyZ3NbMl0gIT09IGZpcnN0VHJhbnNmb3JtQXJnMiB8fCB0cmFuc2Zvcm1BcmdzWzNdICE9PSBmaXJzdFRyYW5zZm9ybUFyZzMpIHtcbiAgICAgICAgaWYgKHEgPCBNSU5fSU1BR0VTX0lOX01BU0tTX0JMT0NLKSB7XG4gICAgICAgICAgaXNTYW1lSW1hZ2UgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb3VudCA9IHE7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoaXNTYW1lSW1hZ2UpIHtcbiAgICBjb3VudCA9IE1hdGgubWluKGNvdW50LCBNQVhfU0FNRV9JTUFHRVNfSU5fTUFTS1NfQkxPQ0spO1xuICAgIGNvbnN0IHBvc2l0aW9ucyA9IG5ldyBGbG9hdDMyQXJyYXkoY291bnQgKiAyKTtcbiAgICBpVHJhbnNmb3JtID0gaUZpcnN0VHJhbnNmb3JtO1xuXG4gICAgZm9yIChsZXQgcSA9IDA7IHEgPCBjb3VudDsgcSsrLCBpVHJhbnNmb3JtICs9IDQpIHtcbiAgICAgIHRyYW5zZm9ybUFyZ3MgPSBhcmdzQXJyYXlbaVRyYW5zZm9ybV07XG4gICAgICBwb3NpdGlvbnNbcSA8PCAxXSA9IHRyYW5zZm9ybUFyZ3NbNF07XG4gICAgICBwb3NpdGlvbnNbKHEgPDwgMSkgKyAxXSA9IHRyYW5zZm9ybUFyZ3NbNV07XG4gICAgfVxuXG4gICAgZm5BcnJheS5zcGxpY2UoaUZpcnN0U2F2ZSwgY291bnQgKiA0LCBfdXRpbC5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0UmVwZWF0KTtcbiAgICBhcmdzQXJyYXkuc3BsaWNlKGlGaXJzdFNhdmUsIGNvdW50ICogNCwgW2ZpcnN0UElNWE9BcmcwLCBmaXJzdFRyYW5zZm9ybUFyZzAsIGZpcnN0VHJhbnNmb3JtQXJnMSwgZmlyc3RUcmFuc2Zvcm1BcmcyLCBmaXJzdFRyYW5zZm9ybUFyZzMsIHBvc2l0aW9uc10pO1xuICB9IGVsc2Uge1xuICAgIGNvdW50ID0gTWF0aC5taW4oY291bnQsIE1BWF9JTUFHRVNfSU5fTUFTS1NfQkxPQ0spO1xuICAgIGNvbnN0IGltYWdlcyA9IFtdO1xuXG4gICAgZm9yIChsZXQgcSA9IDA7IHEgPCBjb3VudDsgcSsrKSB7XG4gICAgICB0cmFuc2Zvcm1BcmdzID0gYXJnc0FycmF5W2lGaXJzdFRyYW5zZm9ybSArIChxIDw8IDIpXTtcbiAgICAgIGNvbnN0IG1hc2tQYXJhbXMgPSBhcmdzQXJyYXlbaUZpcnN0UElNWE8gKyAocSA8PCAyKV1bMF07XG4gICAgICBpbWFnZXMucHVzaCh7XG4gICAgICAgIGRhdGE6IG1hc2tQYXJhbXMuZGF0YSxcbiAgICAgICAgd2lkdGg6IG1hc2tQYXJhbXMud2lkdGgsXG4gICAgICAgIGhlaWdodDogbWFza1BhcmFtcy5oZWlnaHQsXG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtQXJnc1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm5BcnJheS5zcGxpY2UoaUZpcnN0U2F2ZSwgY291bnQgKiA0LCBfdXRpbC5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0R3JvdXApO1xuICAgIGFyZ3NBcnJheS5zcGxpY2UoaUZpcnN0U2F2ZSwgY291bnQgKiA0LCBbaW1hZ2VzXSk7XG4gIH1cblxuICByZXR1cm4gaUZpcnN0U2F2ZSArIDE7XG59KTtcbmFkZFN0YXRlKEluaXRpYWxTdGF0ZSwgW191dGlsLk9QUy5zYXZlLCBfdXRpbC5PUFMudHJhbnNmb3JtLCBfdXRpbC5PUFMucGFpbnRJbWFnZVhPYmplY3QsIF91dGlsLk9QUy5yZXN0b3JlXSwgZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgY29uc3QgYXJnc0FycmF5ID0gY29udGV4dC5hcmdzQXJyYXk7XG4gIGNvbnN0IGlGaXJzdFRyYW5zZm9ybSA9IGNvbnRleHQuaUN1cnIgLSAyO1xuICByZXR1cm4gYXJnc0FycmF5W2lGaXJzdFRyYW5zZm9ybV1bMV0gPT09IDAgJiYgYXJnc0FycmF5W2lGaXJzdFRyYW5zZm9ybV1bMl0gPT09IDA7XG59LCBmdW5jdGlvbiBpdGVyYXRlSW1hZ2VHcm91cChjb250ZXh0LCBpKSB7XG4gIGNvbnN0IGZuQXJyYXkgPSBjb250ZXh0LmZuQXJyYXksXG4gICAgICAgIGFyZ3NBcnJheSA9IGNvbnRleHQuYXJnc0FycmF5O1xuICBjb25zdCBpRmlyc3RTYXZlID0gY29udGV4dC5pQ3VyciAtIDM7XG4gIGNvbnN0IHBvcyA9IChpIC0gaUZpcnN0U2F2ZSkgJSA0O1xuXG4gIHN3aXRjaCAocG9zKSB7XG4gICAgY2FzZSAwOlxuICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IF91dGlsLk9QUy5zYXZlO1xuXG4gICAgY2FzZSAxOlxuICAgICAgaWYgKGZuQXJyYXlbaV0gIT09IF91dGlsLk9QUy50cmFuc2Zvcm0pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpRmlyc3RUcmFuc2Zvcm0gPSBjb250ZXh0LmlDdXJyIC0gMjtcbiAgICAgIGNvbnN0IGZpcnN0VHJhbnNmb3JtQXJnMCA9IGFyZ3NBcnJheVtpRmlyc3RUcmFuc2Zvcm1dWzBdO1xuICAgICAgY29uc3QgZmlyc3RUcmFuc2Zvcm1BcmczID0gYXJnc0FycmF5W2lGaXJzdFRyYW5zZm9ybV1bM107XG5cbiAgICAgIGlmIChhcmdzQXJyYXlbaV1bMF0gIT09IGZpcnN0VHJhbnNmb3JtQXJnMCB8fCBhcmdzQXJyYXlbaV1bMV0gIT09IDAgfHwgYXJnc0FycmF5W2ldWzJdICE9PSAwIHx8IGFyZ3NBcnJheVtpXVszXSAhPT0gZmlyc3RUcmFuc2Zvcm1BcmczKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBjYXNlIDI6XG4gICAgICBpZiAoZm5BcnJheVtpXSAhPT0gX3V0aWwuT1BTLnBhaW50SW1hZ2VYT2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaUZpcnN0UElYTyA9IGNvbnRleHQuaUN1cnIgLSAxO1xuICAgICAgY29uc3QgZmlyc3RQSVhPQXJnMCA9IGFyZ3NBcnJheVtpRmlyc3RQSVhPXVswXTtcblxuICAgICAgaWYgKGFyZ3NBcnJheVtpXVswXSAhPT0gZmlyc3RQSVhPQXJnMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgY2FzZSAzOlxuICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IF91dGlsLk9QUy5yZXN0b3JlO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBpdGVyYXRlSW1hZ2VHcm91cCAtIGludmFsaWQgcG9zOiAke3Bvc31gKTtcbn0sIGZ1bmN0aW9uIChjb250ZXh0LCBpKSB7XG4gIGNvbnN0IE1JTl9JTUFHRVNfSU5fQkxPQ0sgPSAzO1xuICBjb25zdCBNQVhfSU1BR0VTX0lOX0JMT0NLID0gMTAwMDtcbiAgY29uc3QgZm5BcnJheSA9IGNvbnRleHQuZm5BcnJheSxcbiAgICAgICAgYXJnc0FycmF5ID0gY29udGV4dC5hcmdzQXJyYXk7XG4gIGNvbnN0IGN1cnIgPSBjb250ZXh0LmlDdXJyO1xuICBjb25zdCBpRmlyc3RTYXZlID0gY3VyciAtIDM7XG4gIGNvbnN0IGlGaXJzdFRyYW5zZm9ybSA9IGN1cnIgLSAyO1xuICBjb25zdCBpRmlyc3RQSVhPID0gY3VyciAtIDE7XG4gIGNvbnN0IGZpcnN0UElYT0FyZzAgPSBhcmdzQXJyYXlbaUZpcnN0UElYT11bMF07XG4gIGNvbnN0IGZpcnN0VHJhbnNmb3JtQXJnMCA9IGFyZ3NBcnJheVtpRmlyc3RUcmFuc2Zvcm1dWzBdO1xuICBjb25zdCBmaXJzdFRyYW5zZm9ybUFyZzMgPSBhcmdzQXJyYXlbaUZpcnN0VHJhbnNmb3JtXVszXTtcbiAgY29uc3QgY291bnQgPSBNYXRoLm1pbihNYXRoLmZsb29yKChpIC0gaUZpcnN0U2F2ZSkgLyA0KSwgTUFYX0lNQUdFU19JTl9CTE9DSyk7XG5cbiAgaWYgKGNvdW50IDwgTUlOX0lNQUdFU19JTl9CTE9DSykge1xuICAgIHJldHVybiBpIC0gKGkgLSBpRmlyc3RTYXZlKSAlIDQ7XG4gIH1cblxuICBjb25zdCBwb3NpdGlvbnMgPSBuZXcgRmxvYXQzMkFycmF5KGNvdW50ICogMik7XG4gIGxldCBpVHJhbnNmb3JtID0gaUZpcnN0VHJhbnNmb3JtO1xuXG4gIGZvciAobGV0IHEgPSAwOyBxIDwgY291bnQ7IHErKywgaVRyYW5zZm9ybSArPSA0KSB7XG4gICAgY29uc3QgdHJhbnNmb3JtQXJncyA9IGFyZ3NBcnJheVtpVHJhbnNmb3JtXTtcbiAgICBwb3NpdGlvbnNbcSA8PCAxXSA9IHRyYW5zZm9ybUFyZ3NbNF07XG4gICAgcG9zaXRpb25zWyhxIDw8IDEpICsgMV0gPSB0cmFuc2Zvcm1BcmdzWzVdO1xuICB9XG5cbiAgY29uc3QgYXJncyA9IFtmaXJzdFBJWE9BcmcwLCBmaXJzdFRyYW5zZm9ybUFyZzAsIGZpcnN0VHJhbnNmb3JtQXJnMywgcG9zaXRpb25zXTtcbiAgZm5BcnJheS5zcGxpY2UoaUZpcnN0U2F2ZSwgY291bnQgKiA0LCBfdXRpbC5PUFMucGFpbnRJbWFnZVhPYmplY3RSZXBlYXQpO1xuICBhcmdzQXJyYXkuc3BsaWNlKGlGaXJzdFNhdmUsIGNvdW50ICogNCwgYXJncyk7XG4gIHJldHVybiBpRmlyc3RTYXZlICsgMTtcbn0pO1xuYWRkU3RhdGUoSW5pdGlhbFN0YXRlLCBbX3V0aWwuT1BTLmJlZ2luVGV4dCwgX3V0aWwuT1BTLnNldEZvbnQsIF91dGlsLk9QUy5zZXRUZXh0TWF0cml4LCBfdXRpbC5PUFMuc2hvd1RleHQsIF91dGlsLk9QUy5lbmRUZXh0XSwgbnVsbCwgZnVuY3Rpb24gaXRlcmF0ZVNob3dUZXh0R3JvdXAoY29udGV4dCwgaSkge1xuICBjb25zdCBmbkFycmF5ID0gY29udGV4dC5mbkFycmF5LFxuICAgICAgICBhcmdzQXJyYXkgPSBjb250ZXh0LmFyZ3NBcnJheTtcbiAgY29uc3QgaUZpcnN0U2F2ZSA9IGNvbnRleHQuaUN1cnIgLSA0O1xuICBjb25zdCBwb3MgPSAoaSAtIGlGaXJzdFNhdmUpICUgNTtcblxuICBzd2l0Y2ggKHBvcykge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiBmbkFycmF5W2ldID09PSBfdXRpbC5PUFMuYmVnaW5UZXh0O1xuXG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IF91dGlsLk9QUy5zZXRGb250O1xuXG4gICAgY2FzZSAyOlxuICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IF91dGlsLk9QUy5zZXRUZXh0TWF0cml4O1xuXG4gICAgY2FzZSAzOlxuICAgICAgaWYgKGZuQXJyYXlbaV0gIT09IF91dGlsLk9QUy5zaG93VGV4dCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlGaXJzdFNldEZvbnQgPSBjb250ZXh0LmlDdXJyIC0gMztcbiAgICAgIGNvbnN0IGZpcnN0U2V0Rm9udEFyZzAgPSBhcmdzQXJyYXlbaUZpcnN0U2V0Rm9udF1bMF07XG4gICAgICBjb25zdCBmaXJzdFNldEZvbnRBcmcxID0gYXJnc0FycmF5W2lGaXJzdFNldEZvbnRdWzFdO1xuXG4gICAgICBpZiAoYXJnc0FycmF5W2ldWzBdICE9PSBmaXJzdFNldEZvbnRBcmcwIHx8IGFyZ3NBcnJheVtpXVsxXSAhPT0gZmlyc3RTZXRGb250QXJnMSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgY2FzZSA0OlxuICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IF91dGlsLk9QUy5lbmRUZXh0O1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBpdGVyYXRlU2hvd1RleHRHcm91cCAtIGludmFsaWQgcG9zOiAke3Bvc31gKTtcbn0sIGZ1bmN0aW9uIChjb250ZXh0LCBpKSB7XG4gIGNvbnN0IE1JTl9DSEFSU19JTl9CTE9DSyA9IDM7XG4gIGNvbnN0IE1BWF9DSEFSU19JTl9CTE9DSyA9IDEwMDA7XG4gIGNvbnN0IGZuQXJyYXkgPSBjb250ZXh0LmZuQXJyYXksXG4gICAgICAgIGFyZ3NBcnJheSA9IGNvbnRleHQuYXJnc0FycmF5O1xuICBjb25zdCBjdXJyID0gY29udGV4dC5pQ3VycjtcbiAgY29uc3QgaUZpcnN0QmVnaW5UZXh0ID0gY3VyciAtIDQ7XG4gIGNvbnN0IGlGaXJzdFNldEZvbnQgPSBjdXJyIC0gMztcbiAgY29uc3QgaUZpcnN0U2V0VGV4dE1hdHJpeCA9IGN1cnIgLSAyO1xuICBjb25zdCBpRmlyc3RTaG93VGV4dCA9IGN1cnIgLSAxO1xuICBjb25zdCBpRmlyc3RFbmRUZXh0ID0gY3VycjtcbiAgY29uc3QgZmlyc3RTZXRGb250QXJnMCA9IGFyZ3NBcnJheVtpRmlyc3RTZXRGb250XVswXTtcbiAgY29uc3QgZmlyc3RTZXRGb250QXJnMSA9IGFyZ3NBcnJheVtpRmlyc3RTZXRGb250XVsxXTtcbiAgbGV0IGNvdW50ID0gTWF0aC5taW4oTWF0aC5mbG9vcigoaSAtIGlGaXJzdEJlZ2luVGV4dCkgLyA1KSwgTUFYX0NIQVJTX0lOX0JMT0NLKTtcblxuICBpZiAoY291bnQgPCBNSU5fQ0hBUlNfSU5fQkxPQ0spIHtcbiAgICByZXR1cm4gaSAtIChpIC0gaUZpcnN0QmVnaW5UZXh0KSAlIDU7XG4gIH1cblxuICBsZXQgaUZpcnN0ID0gaUZpcnN0QmVnaW5UZXh0O1xuXG4gIGlmIChpRmlyc3RCZWdpblRleHQgPj0gNCAmJiBmbkFycmF5W2lGaXJzdEJlZ2luVGV4dCAtIDRdID09PSBmbkFycmF5W2lGaXJzdFNldEZvbnRdICYmIGZuQXJyYXlbaUZpcnN0QmVnaW5UZXh0IC0gM10gPT09IGZuQXJyYXlbaUZpcnN0U2V0VGV4dE1hdHJpeF0gJiYgZm5BcnJheVtpRmlyc3RCZWdpblRleHQgLSAyXSA9PT0gZm5BcnJheVtpRmlyc3RTaG93VGV4dF0gJiYgZm5BcnJheVtpRmlyc3RCZWdpblRleHQgLSAxXSA9PT0gZm5BcnJheVtpRmlyc3RFbmRUZXh0XSAmJiBhcmdzQXJyYXlbaUZpcnN0QmVnaW5UZXh0IC0gNF1bMF0gPT09IGZpcnN0U2V0Rm9udEFyZzAgJiYgYXJnc0FycmF5W2lGaXJzdEJlZ2luVGV4dCAtIDRdWzFdID09PSBmaXJzdFNldEZvbnRBcmcxKSB7XG4gICAgY291bnQrKztcbiAgICBpRmlyc3QgLT0gNTtcbiAgfVxuXG4gIGxldCBpRW5kVGV4dCA9IGlGaXJzdCArIDQ7XG5cbiAgZm9yIChsZXQgcSA9IDE7IHEgPCBjb3VudDsgcSsrKSB7XG4gICAgZm5BcnJheS5zcGxpY2UoaUVuZFRleHQsIDMpO1xuICAgIGFyZ3NBcnJheS5zcGxpY2UoaUVuZFRleHQsIDMpO1xuICAgIGlFbmRUZXh0ICs9IDI7XG4gIH1cblxuICByZXR1cm4gaUVuZFRleHQgKyAxO1xufSk7XG5cbmNsYXNzIE51bGxPcHRpbWl6ZXIge1xuICBjb25zdHJ1Y3RvcihxdWV1ZSkge1xuICAgIHRoaXMucXVldWUgPSBxdWV1ZTtcbiAgfVxuXG4gIF9vcHRpbWl6ZSgpIHt9XG5cbiAgcHVzaChmbiwgYXJncykge1xuICAgIHRoaXMucXVldWUuZm5BcnJheS5wdXNoKGZuKTtcbiAgICB0aGlzLnF1ZXVlLmFyZ3NBcnJheS5wdXNoKGFyZ3MpO1xuXG4gICAgdGhpcy5fb3B0aW1pemUoKTtcbiAgfVxuXG4gIGZsdXNoKCkge31cblxuICByZXNldCgpIHt9XG5cbn1cblxuY2xhc3MgUXVldWVPcHRpbWl6ZXIgZXh0ZW5kcyBOdWxsT3B0aW1pemVyIHtcbiAgY29uc3RydWN0b3IocXVldWUpIHtcbiAgICBzdXBlcihxdWV1ZSk7XG4gICAgdGhpcy5zdGF0ZSA9IG51bGw7XG4gICAgdGhpcy5jb250ZXh0ID0ge1xuICAgICAgaUN1cnI6IDAsXG4gICAgICBmbkFycmF5OiBxdWV1ZS5mbkFycmF5LFxuICAgICAgYXJnc0FycmF5OiBxdWV1ZS5hcmdzQXJyYXlcbiAgICB9O1xuICAgIHRoaXMubWF0Y2ggPSBudWxsO1xuICAgIHRoaXMubGFzdFByb2Nlc3NlZCA9IDA7XG4gIH1cblxuICBfb3B0aW1pemUoKSB7XG4gICAgY29uc3QgZm5BcnJheSA9IHRoaXMucXVldWUuZm5BcnJheTtcbiAgICBsZXQgaSA9IHRoaXMubGFzdFByb2Nlc3NlZCxcbiAgICAgICAgaWkgPSBmbkFycmF5Lmxlbmd0aDtcbiAgICBsZXQgc3RhdGUgPSB0aGlzLnN0YXRlO1xuICAgIGxldCBtYXRjaCA9IHRoaXMubWF0Y2g7XG5cbiAgICBpZiAoIXN0YXRlICYmICFtYXRjaCAmJiBpICsgMSA9PT0gaWkgJiYgIUluaXRpYWxTdGF0ZVtmbkFycmF5W2ldXSkge1xuICAgICAgdGhpcy5sYXN0UHJvY2Vzc2VkID0gaWk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dDtcblxuICAgIHdoaWxlIChpIDwgaWkpIHtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBjb25zdCBpdGVyYXRlID0gKDAsIG1hdGNoLml0ZXJhdGVGbikoY29udGV4dCwgaSk7XG5cbiAgICAgICAgaWYgKGl0ZXJhdGUpIHtcbiAgICAgICAgICBpKys7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBpID0gKDAsIG1hdGNoLnByb2Nlc3NGbikoY29udGV4dCwgaSArIDEpO1xuICAgICAgICBpaSA9IGZuQXJyYXkubGVuZ3RoO1xuICAgICAgICBtYXRjaCA9IG51bGw7XG4gICAgICAgIHN0YXRlID0gbnVsbDtcblxuICAgICAgICBpZiAoaSA+PSBpaSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN0YXRlID0gKHN0YXRlIHx8IEluaXRpYWxTdGF0ZSlbZm5BcnJheVtpXV07XG5cbiAgICAgIGlmICghc3RhdGUgfHwgQXJyYXkuaXNBcnJheShzdGF0ZSkpIHtcbiAgICAgICAgaSsrO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29udGV4dC5pQ3VyciA9IGk7XG4gICAgICBpKys7XG5cbiAgICAgIGlmIChzdGF0ZS5jaGVja0ZuICYmICEoMCwgc3RhdGUuY2hlY2tGbikoY29udGV4dCkpIHtcbiAgICAgICAgc3RhdGUgPSBudWxsO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbWF0Y2ggPSBzdGF0ZTtcbiAgICAgIHN0YXRlID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgdGhpcy5tYXRjaCA9IG1hdGNoO1xuICAgIHRoaXMubGFzdFByb2Nlc3NlZCA9IGk7XG4gIH1cblxuICBmbHVzaCgpIHtcbiAgICB3aGlsZSAodGhpcy5tYXRjaCkge1xuICAgICAgY29uc3QgbGVuZ3RoID0gdGhpcy5xdWV1ZS5mbkFycmF5Lmxlbmd0aDtcbiAgICAgIHRoaXMubGFzdFByb2Nlc3NlZCA9ICgwLCB0aGlzLm1hdGNoLnByb2Nlc3NGbikodGhpcy5jb250ZXh0LCBsZW5ndGgpO1xuICAgICAgdGhpcy5tYXRjaCA9IG51bGw7XG4gICAgICB0aGlzLnN0YXRlID0gbnVsbDtcblxuICAgICAgdGhpcy5fb3B0aW1pemUoKTtcbiAgICB9XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLnN0YXRlID0gbnVsbDtcbiAgICB0aGlzLm1hdGNoID0gbnVsbDtcbiAgICB0aGlzLmxhc3RQcm9jZXNzZWQgPSAwO1xuICB9XG5cbn1cblxuY2xhc3MgT3BlcmF0b3JMaXN0IHtcbiAgc3RhdGljIGdldCBDSFVOS19TSVpFKCkge1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIkNIVU5LX1NJWkVcIiwgMTAwMCk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IENIVU5LX1NJWkVfQUJPVVQoKSB7XG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiQ0hVTktfU0laRV9BQk9VVFwiLCB0aGlzLkNIVU5LX1NJWkUgLSA1KTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGludGVudCA9IDAsIHN0cmVhbVNpbmspIHtcbiAgICB0aGlzLl9zdHJlYW1TaW5rID0gc3RyZWFtU2luaztcbiAgICB0aGlzLmZuQXJyYXkgPSBbXTtcbiAgICB0aGlzLmFyZ3NBcnJheSA9IFtdO1xuXG4gICAgaWYgKHN0cmVhbVNpbmsgJiYgIShpbnRlbnQgJiBfdXRpbC5SZW5kZXJpbmdJbnRlbnRGbGFnLk9QTElTVCkpIHtcbiAgICAgIHRoaXMub3B0aW1pemVyID0gbmV3IFF1ZXVlT3B0aW1pemVyKHRoaXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wdGltaXplciA9IG5ldyBOdWxsT3B0aW1pemVyKHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMuZGVwZW5kZW5jaWVzID0gbmV3IFNldCgpO1xuICAgIHRoaXMuX3RvdGFsTGVuZ3RoID0gMDtcbiAgICB0aGlzLndlaWdodCA9IDA7XG4gICAgdGhpcy5fcmVzb2x2ZWQgPSBzdHJlYW1TaW5rID8gbnVsbCA6IFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgZ2V0IGxlbmd0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5hcmdzQXJyYXkubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IHJlYWR5KCkge1xuICAgIHJldHVybiB0aGlzLl9yZXNvbHZlZCB8fCB0aGlzLl9zdHJlYW1TaW5rLnJlYWR5O1xuICB9XG5cbiAgZ2V0IHRvdGFsTGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLl90b3RhbExlbmd0aCArIHRoaXMubGVuZ3RoO1xuICB9XG5cbiAgYWRkT3AoZm4sIGFyZ3MpIHtcbiAgICB0aGlzLm9wdGltaXplci5wdXNoKGZuLCBhcmdzKTtcbiAgICB0aGlzLndlaWdodCsrO1xuXG4gICAgaWYgKHRoaXMuX3N0cmVhbVNpbmspIHtcbiAgICAgIGlmICh0aGlzLndlaWdodCA+PSBPcGVyYXRvckxpc3QuQ0hVTktfU0laRSkge1xuICAgICAgICB0aGlzLmZsdXNoKCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMud2VpZ2h0ID49IE9wZXJhdG9yTGlzdC5DSFVOS19TSVpFX0FCT1VUICYmIChmbiA9PT0gX3V0aWwuT1BTLnJlc3RvcmUgfHwgZm4gPT09IF91dGlsLk9QUy5lbmRUZXh0KSkge1xuICAgICAgICB0aGlzLmZsdXNoKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYWRkRGVwZW5kZW5jeShkZXBlbmRlbmN5KSB7XG4gICAgaWYgKHRoaXMuZGVwZW5kZW5jaWVzLmhhcyhkZXBlbmRlbmN5KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZGVwZW5kZW5jaWVzLmFkZChkZXBlbmRlbmN5KTtcbiAgICB0aGlzLmFkZE9wKF91dGlsLk9QUy5kZXBlbmRlbmN5LCBbZGVwZW5kZW5jeV0pO1xuICB9XG5cbiAgYWRkRGVwZW5kZW5jaWVzKGRlcGVuZGVuY2llcykge1xuICAgIGZvciAoY29uc3QgZGVwZW5kZW5jeSBvZiBkZXBlbmRlbmNpZXMpIHtcbiAgICAgIHRoaXMuYWRkRGVwZW5kZW5jeShkZXBlbmRlbmN5KTtcbiAgICB9XG4gIH1cblxuICBhZGRPcExpc3Qob3BMaXN0KSB7XG4gICAgaWYgKCEob3BMaXN0IGluc3RhbmNlb2YgT3BlcmF0b3JMaXN0KSkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKCdhZGRPcExpc3QgLSBpZ25vcmluZyBpbnZhbGlkIFwib3BMaXN0XCIgcGFyYW1ldGVyLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgZGVwZW5kZW5jeSBvZiBvcExpc3QuZGVwZW5kZW5jaWVzKSB7XG4gICAgICB0aGlzLmRlcGVuZGVuY2llcy5hZGQoZGVwZW5kZW5jeSk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gb3BMaXN0Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIHRoaXMuYWRkT3Aob3BMaXN0LmZuQXJyYXlbaV0sIG9wTGlzdC5hcmdzQXJyYXlbaV0pO1xuICAgIH1cbiAgfVxuXG4gIGdldElSKCkge1xuICAgIHJldHVybiB7XG4gICAgICBmbkFycmF5OiB0aGlzLmZuQXJyYXksXG4gICAgICBhcmdzQXJyYXk6IHRoaXMuYXJnc0FycmF5LFxuICAgICAgbGVuZ3RoOiB0aGlzLmxlbmd0aFxuICAgIH07XG4gIH1cblxuICBnZXQgX3RyYW5zZmVycygpIHtcbiAgICBjb25zdCB0cmFuc2ZlcnMgPSBbXTtcbiAgICBjb25zdCB7XG4gICAgICBmbkFycmF5LFxuICAgICAgYXJnc0FycmF5LFxuICAgICAgbGVuZ3RoXG4gICAgfSA9IHRoaXM7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBzd2l0Y2ggKGZuQXJyYXlbaV0pIHtcbiAgICAgICAgY2FzZSBfdXRpbC5PUFMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3Q6XG4gICAgICAgIGNhc2UgX3V0aWwuT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXA6XG4gICAgICAgIGNhc2UgX3V0aWwuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdDpcbiAgICAgICAgICBjb25zdCBhcmcgPSBhcmdzQXJyYXlbaV1bMF07XG4gICAgICAgICAgO1xuXG4gICAgICAgICAgaWYgKCFhcmcuY2FjaGVkKSB7XG4gICAgICAgICAgICB0cmFuc2ZlcnMucHVzaChhcmcuZGF0YS5idWZmZXIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cmFuc2ZlcnM7XG4gIH1cblxuICBmbHVzaChsYXN0Q2h1bmsgPSBmYWxzZSkge1xuICAgIHRoaXMub3B0aW1pemVyLmZsdXNoKCk7XG4gICAgY29uc3QgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG4gICAgdGhpcy5fdG90YWxMZW5ndGggKz0gbGVuZ3RoO1xuXG4gICAgdGhpcy5fc3RyZWFtU2luay5lbnF1ZXVlKHtcbiAgICAgIGZuQXJyYXk6IHRoaXMuZm5BcnJheSxcbiAgICAgIGFyZ3NBcnJheTogdGhpcy5hcmdzQXJyYXksXG4gICAgICBsYXN0Q2h1bmssXG4gICAgICBsZW5ndGhcbiAgICB9LCAxLCB0aGlzLl90cmFuc2ZlcnMpO1xuXG4gICAgdGhpcy5kZXBlbmRlbmNpZXMuY2xlYXIoKTtcbiAgICB0aGlzLmZuQXJyYXkubGVuZ3RoID0gMDtcbiAgICB0aGlzLmFyZ3NBcnJheS5sZW5ndGggPSAwO1xuICAgIHRoaXMud2VpZ2h0ID0gMDtcbiAgICB0aGlzLm9wdGltaXplci5yZXNldCgpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5PcGVyYXRvckxpc3QgPSBPcGVyYXRvckxpc3Q7XG5cbi8qKiovIH0pLFxuLyogNjMgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuUERGSW1hZ2UgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfcHJpbWl0aXZlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNSk7XG5cbnZhciBfY29sb3JzcGFjZSA9IF9fd19wZGZqc19yZXF1aXJlX18oMjQpO1xuXG52YXIgX2RlY29kZV9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDI5KTtcblxudmFyIF9qcGVnX3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oMzcpO1xuXG52YXIgX2pweCA9IF9fd19wZGZqc19yZXF1aXJlX18oNDApO1xuXG5mdW5jdGlvbiBkZWNvZGVBbmRDbGFtcCh2YWx1ZSwgYWRkZW5kLCBjb2VmZmljaWVudCwgbWF4KSB7XG4gIHZhbHVlID0gYWRkZW5kICsgdmFsdWUgKiBjb2VmZmljaWVudDtcblxuICBpZiAodmFsdWUgPCAwKSB7XG4gICAgdmFsdWUgPSAwO1xuICB9IGVsc2UgaWYgKHZhbHVlID4gbWF4KSB7XG4gICAgdmFsdWUgPSBtYXg7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIHJlc2l6ZUltYWdlTWFzayhzcmMsIGJwYywgdzEsIGgxLCB3MiwgaDIpIHtcbiAgY29uc3QgbGVuZ3RoID0gdzIgKiBoMjtcbiAgbGV0IGRlc3Q7XG5cbiAgaWYgKGJwYyA8PSA4KSB7XG4gICAgZGVzdCA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7XG4gIH0gZWxzZSBpZiAoYnBjIDw9IDE2KSB7XG4gICAgZGVzdCA9IG5ldyBVaW50MTZBcnJheShsZW5ndGgpO1xuICB9IGVsc2Uge1xuICAgIGRlc3QgPSBuZXcgVWludDMyQXJyYXkobGVuZ3RoKTtcbiAgfVxuXG4gIGNvbnN0IHhSYXRpbyA9IHcxIC8gdzI7XG4gIGNvbnN0IHlSYXRpbyA9IGgxIC8gaDI7XG4gIGxldCBpLFxuICAgICAgaixcbiAgICAgIHB5LFxuICAgICAgbmV3SW5kZXggPSAwLFxuICAgICAgb2xkSW5kZXg7XG4gIGNvbnN0IHhTY2FsZWQgPSBuZXcgVWludDE2QXJyYXkodzIpO1xuICBjb25zdCB3MVNjYW5saW5lID0gdzE7XG5cbiAgZm9yIChpID0gMDsgaSA8IHcyOyBpKyspIHtcbiAgICB4U2NhbGVkW2ldID0gTWF0aC5mbG9vcihpICogeFJhdGlvKTtcbiAgfVxuXG4gIGZvciAoaSA9IDA7IGkgPCBoMjsgaSsrKSB7XG4gICAgcHkgPSBNYXRoLmZsb29yKGkgKiB5UmF0aW8pICogdzFTY2FubGluZTtcblxuICAgIGZvciAoaiA9IDA7IGogPCB3MjsgaisrKSB7XG4gICAgICBvbGRJbmRleCA9IHB5ICsgeFNjYWxlZFtqXTtcbiAgICAgIGRlc3RbbmV3SW5kZXgrK10gPSBzcmNbb2xkSW5kZXhdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkZXN0O1xufVxuXG5jbGFzcyBQREZJbWFnZSB7XG4gIGNvbnN0cnVjdG9yKHtcbiAgICB4cmVmLFxuICAgIHJlcyxcbiAgICBpbWFnZSxcbiAgICBpc0lubGluZSA9IGZhbHNlLFxuICAgIHNtYXNrID0gbnVsbCxcbiAgICBtYXNrID0gbnVsbCxcbiAgICBpc01hc2sgPSBmYWxzZSxcbiAgICBwZGZGdW5jdGlvbkZhY3RvcnksXG4gICAgbG9jYWxDb2xvclNwYWNlQ2FjaGVcbiAgfSkge1xuICAgIHRoaXMuaW1hZ2UgPSBpbWFnZTtcbiAgICBjb25zdCBkaWN0ID0gaW1hZ2UuZGljdDtcbiAgICBjb25zdCBmaWx0ZXIgPSBkaWN0LmdldChcIkZcIiwgXCJGaWx0ZXJcIik7XG5cbiAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoZmlsdGVyKSkge1xuICAgICAgc3dpdGNoIChmaWx0ZXIubmFtZSkge1xuICAgICAgICBjYXNlIFwiSlBYRGVjb2RlXCI6XG4gICAgICAgICAgY29uc3QganB4SW1hZ2UgPSBuZXcgX2pweC5KcHhJbWFnZSgpO1xuICAgICAgICAgIGpweEltYWdlLnBhcnNlSW1hZ2VQcm9wZXJ0aWVzKGltYWdlLnN0cmVhbSk7XG4gICAgICAgICAgaW1hZ2Uuc3RyZWFtLnJlc2V0KCk7XG4gICAgICAgICAgaW1hZ2Uud2lkdGggPSBqcHhJbWFnZS53aWR0aDtcbiAgICAgICAgICBpbWFnZS5oZWlnaHQgPSBqcHhJbWFnZS5oZWlnaHQ7XG4gICAgICAgICAgaW1hZ2UuYml0c1BlckNvbXBvbmVudCA9IGpweEltYWdlLmJpdHNQZXJDb21wb25lbnQ7XG4gICAgICAgICAgaW1hZ2UubnVtQ29tcHMgPSBqcHhJbWFnZS5jb21wb25lbnRzQ291bnQ7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIkpCSUcyRGVjb2RlXCI6XG4gICAgICAgICAgaW1hZ2UuYml0c1BlckNvbXBvbmVudCA9IDE7XG4gICAgICAgICAgaW1hZ2UubnVtQ29tcHMgPSAxO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCB3aWR0aCA9IGRpY3QuZ2V0KFwiV1wiLCBcIldpZHRoXCIpO1xuICAgIGxldCBoZWlnaHQgPSBkaWN0LmdldChcIkhcIiwgXCJIZWlnaHRcIik7XG5cbiAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihpbWFnZS53aWR0aCkgJiYgaW1hZ2Uud2lkdGggPiAwICYmIE51bWJlci5pc0ludGVnZXIoaW1hZ2UuaGVpZ2h0KSAmJiBpbWFnZS5oZWlnaHQgPiAwICYmIChpbWFnZS53aWR0aCAhPT0gd2lkdGggfHwgaW1hZ2UuaGVpZ2h0ICE9PSBoZWlnaHQpKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJQREZJbWFnZSAtIHVzaW5nIHRoZSBXaWR0aC9IZWlnaHQgb2YgdGhlIGltYWdlIGRhdGEsIFwiICsgXCJyYXRoZXIgdGhhbiB0aGUgaW1hZ2UgZGljdGlvbmFyeS5cIik7XG4gICAgICB3aWR0aCA9IGltYWdlLndpZHRoO1xuICAgICAgaGVpZ2h0ID0gaW1hZ2UuaGVpZ2h0O1xuICAgIH1cblxuICAgIGlmICh3aWR0aCA8IDEgfHwgaGVpZ2h0IDwgMSkge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBJbnZhbGlkIGltYWdlIHdpZHRoOiAke3dpZHRofSBvciBoZWlnaHQ6ICR7aGVpZ2h0fWApO1xuICAgIH1cblxuICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgICB0aGlzLmludGVycG9sYXRlID0gZGljdC5nZXQoXCJJXCIsIFwiSW50ZXJwb2xhdGVcIik7XG4gICAgdGhpcy5pbWFnZU1hc2sgPSBkaWN0LmdldChcIklNXCIsIFwiSW1hZ2VNYXNrXCIpIHx8IGZhbHNlO1xuICAgIHRoaXMubWF0dGUgPSBkaWN0LmdldChcIk1hdHRlXCIpIHx8IGZhbHNlO1xuICAgIGxldCBiaXRzUGVyQ29tcG9uZW50ID0gaW1hZ2UuYml0c1BlckNvbXBvbmVudDtcblxuICAgIGlmICghYml0c1BlckNvbXBvbmVudCkge1xuICAgICAgYml0c1BlckNvbXBvbmVudCA9IGRpY3QuZ2V0KFwiQlBDXCIsIFwiQml0c1BlckNvbXBvbmVudFwiKTtcblxuICAgICAgaWYgKCFiaXRzUGVyQ29tcG9uZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmltYWdlTWFzaykge1xuICAgICAgICAgIGJpdHNQZXJDb21wb25lbnQgPSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgQml0cyBwZXIgY29tcG9uZW50IG1pc3NpbmcgaW4gaW1hZ2U6ICR7dGhpcy5pbWFnZU1hc2t9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmJwYyA9IGJpdHNQZXJDb21wb25lbnQ7XG5cbiAgICBpZiAoIXRoaXMuaW1hZ2VNYXNrKSB7XG4gICAgICBsZXQgY29sb3JTcGFjZSA9IGRpY3QuZ2V0UmF3KFwiQ1NcIikgfHwgZGljdC5nZXRSYXcoXCJDb2xvclNwYWNlXCIpO1xuXG4gICAgICBpZiAoIWNvbG9yU3BhY2UpIHtcbiAgICAgICAgKDAsIF91dGlsLmluZm8pKFwiSlBYIGltYWdlcyAod2hpY2ggZG8gbm90IHJlcXVpcmUgY29sb3Igc3BhY2VzKVwiKTtcblxuICAgICAgICBzd2l0Y2ggKGltYWdlLm51bUNvbXBzKSB7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgY29sb3JTcGFjZSA9IF9wcmltaXRpdmVzLk5hbWUuZ2V0KFwiRGV2aWNlR3JheVwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgY29sb3JTcGFjZSA9IF9wcmltaXRpdmVzLk5hbWUuZ2V0KFwiRGV2aWNlUkdCXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICBjb2xvclNwYWNlID0gX3ByaW1pdGl2ZXMuTmFtZS5nZXQoXCJEZXZpY2VDTVlLXCIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBKUFggaW1hZ2VzIHdpdGggJHtpbWFnZS5udW1Db21wc30gY29sb3IgY29tcG9uZW50cyBub3Qgc3VwcG9ydGVkLmApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29sb3JTcGFjZSA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2UucGFyc2Uoe1xuICAgICAgICBjczogY29sb3JTcGFjZSxcbiAgICAgICAgeHJlZixcbiAgICAgICAgcmVzb3VyY2VzOiBpc0lubGluZSA/IHJlcyA6IG51bGwsXG4gICAgICAgIHBkZkZ1bmN0aW9uRmFjdG9yeSxcbiAgICAgICAgbG9jYWxDb2xvclNwYWNlQ2FjaGVcbiAgICAgIH0pO1xuICAgICAgdGhpcy5udW1Db21wcyA9IHRoaXMuY29sb3JTcGFjZS5udW1Db21wcztcbiAgICB9XG5cbiAgICB0aGlzLmRlY29kZSA9IGRpY3QuZ2V0QXJyYXkoXCJEXCIsIFwiRGVjb2RlXCIpO1xuICAgIHRoaXMubmVlZHNEZWNvZGUgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLmRlY29kZSAmJiAodGhpcy5jb2xvclNwYWNlICYmICF0aGlzLmNvbG9yU3BhY2UuaXNEZWZhdWx0RGVjb2RlKHRoaXMuZGVjb2RlLCBiaXRzUGVyQ29tcG9uZW50KSB8fCBpc01hc2sgJiYgIV9jb2xvcnNwYWNlLkNvbG9yU3BhY2UuaXNEZWZhdWx0RGVjb2RlKHRoaXMuZGVjb2RlLCAxKSkpIHtcbiAgICAgIHRoaXMubmVlZHNEZWNvZGUgPSB0cnVlO1xuICAgICAgY29uc3QgbWF4ID0gKDEgPDwgYml0c1BlckNvbXBvbmVudCkgLSAxO1xuICAgICAgdGhpcy5kZWNvZGVDb2VmZmljaWVudHMgPSBbXTtcbiAgICAgIHRoaXMuZGVjb2RlQWRkZW5kcyA9IFtdO1xuICAgICAgY29uc3QgaXNJbmRleGVkID0gdGhpcy5jb2xvclNwYWNlICYmIHRoaXMuY29sb3JTcGFjZS5uYW1lID09PSBcIkluZGV4ZWRcIjtcblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGogPSAwOyBpIDwgdGhpcy5kZWNvZGUubGVuZ3RoOyBpICs9IDIsICsraikge1xuICAgICAgICBjb25zdCBkbWluID0gdGhpcy5kZWNvZGVbaV07XG4gICAgICAgIGNvbnN0IGRtYXggPSB0aGlzLmRlY29kZVtpICsgMV07XG4gICAgICAgIHRoaXMuZGVjb2RlQ29lZmZpY2llbnRzW2pdID0gaXNJbmRleGVkID8gKGRtYXggLSBkbWluKSAvIG1heCA6IGRtYXggLSBkbWluO1xuICAgICAgICB0aGlzLmRlY29kZUFkZGVuZHNbal0gPSBpc0luZGV4ZWQgPyBkbWluIDogbWF4ICogZG1pbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc21hc2spIHtcbiAgICAgIHRoaXMuc21hc2sgPSBuZXcgUERGSW1hZ2Uoe1xuICAgICAgICB4cmVmLFxuICAgICAgICByZXMsXG4gICAgICAgIGltYWdlOiBzbWFzayxcbiAgICAgICAgaXNJbmxpbmUsXG4gICAgICAgIHBkZkZ1bmN0aW9uRmFjdG9yeSxcbiAgICAgICAgbG9jYWxDb2xvclNwYWNlQ2FjaGVcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAobWFzaykge1xuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkobWFzaykpIHtcbiAgICAgICAgY29uc3QgbWFza0RpY3QgPSBtYXNrLmRpY3QsXG4gICAgICAgICAgICAgIGltYWdlTWFzayA9IG1hc2tEaWN0LmdldChcIklNXCIsIFwiSW1hZ2VNYXNrXCIpO1xuXG4gICAgICAgIGlmICghaW1hZ2VNYXNrKSB7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiSWdub3JpbmcgL01hc2sgaW4gaW1hZ2Ugd2l0aG91dCAvSW1hZ2VNYXNrLlwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm1hc2sgPSBuZXcgUERGSW1hZ2Uoe1xuICAgICAgICAgICAgeHJlZixcbiAgICAgICAgICAgIHJlcyxcbiAgICAgICAgICAgIGltYWdlOiBtYXNrLFxuICAgICAgICAgICAgaXNJbmxpbmUsXG4gICAgICAgICAgICBpc01hc2s6IHRydWUsXG4gICAgICAgICAgICBwZGZGdW5jdGlvbkZhY3RvcnksXG4gICAgICAgICAgICBsb2NhbENvbG9yU3BhY2VDYWNoZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm1hc2sgPSBtYXNrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBidWlsZEltYWdlKHtcbiAgICB4cmVmLFxuICAgIHJlcyxcbiAgICBpbWFnZSxcbiAgICBpc0lubGluZSA9IGZhbHNlLFxuICAgIHBkZkZ1bmN0aW9uRmFjdG9yeSxcbiAgICBsb2NhbENvbG9yU3BhY2VDYWNoZVxuICB9KSB7XG4gICAgY29uc3QgaW1hZ2VEYXRhID0gaW1hZ2U7XG4gICAgbGV0IHNtYXNrRGF0YSA9IG51bGw7XG4gICAgbGV0IG1hc2tEYXRhID0gbnVsbDtcbiAgICBjb25zdCBzbWFzayA9IGltYWdlLmRpY3QuZ2V0KFwiU01hc2tcIik7XG4gICAgY29uc3QgbWFzayA9IGltYWdlLmRpY3QuZ2V0KFwiTWFza1wiKTtcblxuICAgIGlmIChzbWFzaykge1xuICAgICAgc21hc2tEYXRhID0gc21hc2s7XG4gICAgfSBlbHNlIGlmIChtYXNrKSB7XG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShtYXNrKSB8fCBBcnJheS5pc0FycmF5KG1hc2spKSB7XG4gICAgICAgIG1hc2tEYXRhID0gbWFzaztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShcIlVuc3VwcG9ydGVkIG1hc2sgZm9ybWF0LlwiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFBERkltYWdlKHtcbiAgICAgIHhyZWYsXG4gICAgICByZXMsXG4gICAgICBpbWFnZTogaW1hZ2VEYXRhLFxuICAgICAgaXNJbmxpbmUsXG4gICAgICBzbWFzazogc21hc2tEYXRhLFxuICAgICAgbWFzazogbWFza0RhdGEsXG4gICAgICBwZGZGdW5jdGlvbkZhY3RvcnksXG4gICAgICBsb2NhbENvbG9yU3BhY2VDYWNoZVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZU1hc2soe1xuICAgIGltZ0FycmF5LFxuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICBpbWFnZUlzRnJvbURlY29kZVN0cmVhbSxcbiAgICBpbnZlcnNlRGVjb2RlLFxuICAgIGludGVycG9sYXRlXG4gIH0pIHtcbiAgICBjb25zdCBjb21wdXRlZExlbmd0aCA9ICh3aWR0aCArIDcgPj4gMykgKiBoZWlnaHQ7XG4gICAgY29uc3QgYWN0dWFsTGVuZ3RoID0gaW1nQXJyYXkuYnl0ZUxlbmd0aDtcbiAgICBjb25zdCBoYXZlRnVsbERhdGEgPSBjb21wdXRlZExlbmd0aCA9PT0gYWN0dWFsTGVuZ3RoO1xuICAgIGxldCBkYXRhLCBpO1xuXG4gICAgaWYgKGltYWdlSXNGcm9tRGVjb2RlU3RyZWFtICYmICghaW52ZXJzZURlY29kZSB8fCBoYXZlRnVsbERhdGEpKSB7XG4gICAgICBkYXRhID0gaW1nQXJyYXk7XG4gICAgfSBlbHNlIGlmICghaW52ZXJzZURlY29kZSkge1xuICAgICAgZGF0YSA9IG5ldyBVaW50OENsYW1wZWRBcnJheShhY3R1YWxMZW5ndGgpO1xuICAgICAgZGF0YS5zZXQoaW1nQXJyYXkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRhID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGNvbXB1dGVkTGVuZ3RoKTtcbiAgICAgIGRhdGEuc2V0KGltZ0FycmF5KTtcblxuICAgICAgZm9yIChpID0gYWN0dWFsTGVuZ3RoOyBpIDwgY29tcHV0ZWRMZW5ndGg7IGkrKykge1xuICAgICAgICBkYXRhW2ldID0gMHhmZjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW52ZXJzZURlY29kZSkge1xuICAgICAgZm9yIChpID0gMDsgaSA8IGFjdHVhbExlbmd0aDsgaSsrKSB7XG4gICAgICAgIGRhdGFbaV0gXj0gMHhmZjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YSxcbiAgICAgIHdpZHRoLFxuICAgICAgaGVpZ2h0LFxuICAgICAgaW50ZXJwb2xhdGVcbiAgICB9O1xuICB9XG5cbiAgZ2V0IGRyYXdXaWR0aCgpIHtcbiAgICByZXR1cm4gTWF0aC5tYXgodGhpcy53aWR0aCwgdGhpcy5zbWFzayAmJiB0aGlzLnNtYXNrLndpZHRoIHx8IDAsIHRoaXMubWFzayAmJiB0aGlzLm1hc2sud2lkdGggfHwgMCk7XG4gIH1cblxuICBnZXQgZHJhd0hlaWdodCgpIHtcbiAgICByZXR1cm4gTWF0aC5tYXgodGhpcy5oZWlnaHQsIHRoaXMuc21hc2sgJiYgdGhpcy5zbWFzay5oZWlnaHQgfHwgMCwgdGhpcy5tYXNrICYmIHRoaXMubWFzay5oZWlnaHQgfHwgMCk7XG4gIH1cblxuICBkZWNvZGVCdWZmZXIoYnVmZmVyKSB7XG4gICAgY29uc3QgYnBjID0gdGhpcy5icGM7XG4gICAgY29uc3QgbnVtQ29tcHMgPSB0aGlzLm51bUNvbXBzO1xuICAgIGNvbnN0IGRlY29kZUFkZGVuZHMgPSB0aGlzLmRlY29kZUFkZGVuZHM7XG4gICAgY29uc3QgZGVjb2RlQ29lZmZpY2llbnRzID0gdGhpcy5kZWNvZGVDb2VmZmljaWVudHM7XG4gICAgY29uc3QgbWF4ID0gKDEgPDwgYnBjKSAtIDE7XG4gICAgbGV0IGksIGlpO1xuXG4gICAgaWYgKGJwYyA9PT0gMSkge1xuICAgICAgZm9yIChpID0gMCwgaWkgPSBidWZmZXIubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICBidWZmZXJbaV0gPSArIWJ1ZmZlcltpXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBpbmRleCA9IDA7XG5cbiAgICBmb3IgKGkgPSAwLCBpaSA9IHRoaXMud2lkdGggKiB0aGlzLmhlaWdodDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtQ29tcHM7IGorKykge1xuICAgICAgICBidWZmZXJbaW5kZXhdID0gZGVjb2RlQW5kQ2xhbXAoYnVmZmVyW2luZGV4XSwgZGVjb2RlQWRkZW5kc1tqXSwgZGVjb2RlQ29lZmZpY2llbnRzW2pdLCBtYXgpO1xuICAgICAgICBpbmRleCsrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldENvbXBvbmVudHMoYnVmZmVyKSB7XG4gICAgY29uc3QgYnBjID0gdGhpcy5icGM7XG5cbiAgICBpZiAoYnBjID09PSA4KSB7XG4gICAgICByZXR1cm4gYnVmZmVyO1xuICAgIH1cblxuICAgIGNvbnN0IHdpZHRoID0gdGhpcy53aWR0aDtcbiAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmhlaWdodDtcbiAgICBjb25zdCBudW1Db21wcyA9IHRoaXMubnVtQ29tcHM7XG4gICAgY29uc3QgbGVuZ3RoID0gd2lkdGggKiBoZWlnaHQgKiBudW1Db21wcztcbiAgICBsZXQgYnVmZmVyUG9zID0gMDtcbiAgICBsZXQgb3V0cHV0O1xuXG4gICAgaWYgKGJwYyA8PSA4KSB7XG4gICAgICBvdXRwdXQgPSBuZXcgVWludDhBcnJheShsZW5ndGgpO1xuICAgIH0gZWxzZSBpZiAoYnBjIDw9IDE2KSB7XG4gICAgICBvdXRwdXQgPSBuZXcgVWludDE2QXJyYXkobGVuZ3RoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0cHV0ID0gbmV3IFVpbnQzMkFycmF5KGxlbmd0aCk7XG4gICAgfVxuXG4gICAgY29uc3Qgcm93Q29tcHMgPSB3aWR0aCAqIG51bUNvbXBzO1xuICAgIGNvbnN0IG1heCA9ICgxIDw8IGJwYykgLSAxO1xuICAgIGxldCBpID0gMCxcbiAgICAgICAgaWksXG4gICAgICAgIGJ1ZjtcblxuICAgIGlmIChicGMgPT09IDEpIHtcbiAgICAgIGxldCBtYXNrLCBsb29wMUVuZCwgbG9vcDJFbmQ7XG5cbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgaGVpZ2h0OyBqKyspIHtcbiAgICAgICAgbG9vcDFFbmQgPSBpICsgKHJvd0NvbXBzICYgfjcpO1xuICAgICAgICBsb29wMkVuZCA9IGkgKyByb3dDb21wcztcblxuICAgICAgICB3aGlsZSAoaSA8IGxvb3AxRW5kKSB7XG4gICAgICAgICAgYnVmID0gYnVmZmVyW2J1ZmZlclBvcysrXTtcbiAgICAgICAgICBvdXRwdXRbaV0gPSBidWYgPj4gNyAmIDE7XG4gICAgICAgICAgb3V0cHV0W2kgKyAxXSA9IGJ1ZiA+PiA2ICYgMTtcbiAgICAgICAgICBvdXRwdXRbaSArIDJdID0gYnVmID4+IDUgJiAxO1xuICAgICAgICAgIG91dHB1dFtpICsgM10gPSBidWYgPj4gNCAmIDE7XG4gICAgICAgICAgb3V0cHV0W2kgKyA0XSA9IGJ1ZiA+PiAzICYgMTtcbiAgICAgICAgICBvdXRwdXRbaSArIDVdID0gYnVmID4+IDIgJiAxO1xuICAgICAgICAgIG91dHB1dFtpICsgNl0gPSBidWYgPj4gMSAmIDE7XG4gICAgICAgICAgb3V0cHV0W2kgKyA3XSA9IGJ1ZiAmIDE7XG4gICAgICAgICAgaSArPSA4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGkgPCBsb29wMkVuZCkge1xuICAgICAgICAgIGJ1ZiA9IGJ1ZmZlcltidWZmZXJQb3MrK107XG4gICAgICAgICAgbWFzayA9IDEyODtcblxuICAgICAgICAgIHdoaWxlIChpIDwgbG9vcDJFbmQpIHtcbiAgICAgICAgICAgIG91dHB1dFtpKytdID0gKyEhKGJ1ZiAmIG1hc2spO1xuICAgICAgICAgICAgbWFzayA+Pj0gMTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGJpdHMgPSAwO1xuICAgICAgYnVmID0gMDtcblxuICAgICAgZm9yIChpID0gMCwgaWkgPSBsZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgIGlmIChpICUgcm93Q29tcHMgPT09IDApIHtcbiAgICAgICAgICBidWYgPSAwO1xuICAgICAgICAgIGJpdHMgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKGJpdHMgPCBicGMpIHtcbiAgICAgICAgICBidWYgPSBidWYgPDwgOCB8IGJ1ZmZlcltidWZmZXJQb3MrK107XG4gICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVtYWluaW5nQml0cyA9IGJpdHMgLSBicGM7XG4gICAgICAgIGxldCB2YWx1ZSA9IGJ1ZiA+PiByZW1haW5pbmdCaXRzO1xuXG4gICAgICAgIGlmICh2YWx1ZSA8IDApIHtcbiAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPiBtYXgpIHtcbiAgICAgICAgICB2YWx1ZSA9IG1heDtcbiAgICAgICAgfVxuXG4gICAgICAgIG91dHB1dFtpXSA9IHZhbHVlO1xuICAgICAgICBidWYgJj0gKDEgPDwgcmVtYWluaW5nQml0cykgLSAxO1xuICAgICAgICBiaXRzID0gcmVtYWluaW5nQml0cztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9XG5cbiAgZmlsbE9wYWNpdHkocmdiYUJ1Ziwgd2lkdGgsIGhlaWdodCwgYWN0dWFsSGVpZ2h0LCBpbWFnZSkge1xuICAgIGNvbnN0IHNtYXNrID0gdGhpcy5zbWFzaztcbiAgICBjb25zdCBtYXNrID0gdGhpcy5tYXNrO1xuICAgIGxldCBhbHBoYUJ1Ziwgc3csIHNoLCBpLCBpaSwgajtcblxuICAgIGlmIChzbWFzaykge1xuICAgICAgc3cgPSBzbWFzay53aWR0aDtcbiAgICAgIHNoID0gc21hc2suaGVpZ2h0O1xuICAgICAgYWxwaGFCdWYgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkoc3cgKiBzaCk7XG4gICAgICBzbWFzay5maWxsR3JheUJ1ZmZlcihhbHBoYUJ1Zik7XG5cbiAgICAgIGlmIChzdyAhPT0gd2lkdGggfHwgc2ggIT09IGhlaWdodCkge1xuICAgICAgICBhbHBoYUJ1ZiA9IHJlc2l6ZUltYWdlTWFzayhhbHBoYUJ1Ziwgc21hc2suYnBjLCBzdywgc2gsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobWFzaykge1xuICAgICAgaWYgKG1hc2sgaW5zdGFuY2VvZiBQREZJbWFnZSkge1xuICAgICAgICBzdyA9IG1hc2sud2lkdGg7XG4gICAgICAgIHNoID0gbWFzay5oZWlnaHQ7XG4gICAgICAgIGFscGhhQnVmID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHN3ICogc2gpO1xuICAgICAgICBtYXNrLm51bUNvbXBzID0gMTtcbiAgICAgICAgbWFzay5maWxsR3JheUJ1ZmZlcihhbHBoYUJ1Zik7XG5cbiAgICAgICAgZm9yIChpID0gMCwgaWkgPSBzdyAqIHNoOyBpIDwgaWk7ICsraSkge1xuICAgICAgICAgIGFscGhhQnVmW2ldID0gMjU1IC0gYWxwaGFCdWZbaV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3cgIT09IHdpZHRoIHx8IHNoICE9PSBoZWlnaHQpIHtcbiAgICAgICAgICBhbHBoYUJ1ZiA9IHJlc2l6ZUltYWdlTWFzayhhbHBoYUJ1ZiwgbWFzay5icGMsIHN3LCBzaCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShtYXNrKSkge1xuICAgICAgICBhbHBoYUJ1ZiA9IG5ldyBVaW50OENsYW1wZWRBcnJheSh3aWR0aCAqIGhlaWdodCk7XG4gICAgICAgIGNvbnN0IG51bUNvbXBzID0gdGhpcy5udW1Db21wcztcblxuICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IHdpZHRoICogaGVpZ2h0OyBpIDwgaWk7ICsraSkge1xuICAgICAgICAgIGxldCBvcGFjaXR5ID0gMDtcbiAgICAgICAgICBjb25zdCBpbWFnZU9mZnNldCA9IGkgKiBudW1Db21wcztcblxuICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBudW1Db21wczsgKytqKSB7XG4gICAgICAgICAgICBjb25zdCBjb2xvciA9IGltYWdlW2ltYWdlT2Zmc2V0ICsgal07XG4gICAgICAgICAgICBjb25zdCBtYXNrT2Zmc2V0ID0gaiAqIDI7XG5cbiAgICAgICAgICAgIGlmIChjb2xvciA8IG1hc2tbbWFza09mZnNldF0gfHwgY29sb3IgPiBtYXNrW21hc2tPZmZzZXQgKyAxXSkge1xuICAgICAgICAgICAgICBvcGFjaXR5ID0gMjU1O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhbHBoYUJ1ZltpXSA9IG9wYWNpdHk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIlVua25vd24gbWFzayBmb3JtYXQuXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhbHBoYUJ1Zikge1xuICAgICAgZm9yIChpID0gMCwgaiA9IDMsIGlpID0gd2lkdGggKiBhY3R1YWxIZWlnaHQ7IGkgPCBpaTsgKytpLCBqICs9IDQpIHtcbiAgICAgICAgcmdiYUJ1ZltqXSA9IGFscGhhQnVmW2ldO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGkgPSAwLCBqID0gMywgaWkgPSB3aWR0aCAqIGFjdHVhbEhlaWdodDsgaSA8IGlpOyArK2ksIGogKz0gNCkge1xuICAgICAgICByZ2JhQnVmW2pdID0gMjU1O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVuZG9QcmVibGVuZChidWZmZXIsIHdpZHRoLCBoZWlnaHQpIHtcbiAgICBjb25zdCBtYXR0ZSA9IHRoaXMuc21hc2sgJiYgdGhpcy5zbWFzay5tYXR0ZTtcblxuICAgIGlmICghbWF0dGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtYXR0ZVJnYiA9IHRoaXMuY29sb3JTcGFjZS5nZXRSZ2IobWF0dGUsIDApO1xuICAgIGNvbnN0IG1hdHRlUiA9IG1hdHRlUmdiWzBdO1xuICAgIGNvbnN0IG1hdHRlRyA9IG1hdHRlUmdiWzFdO1xuICAgIGNvbnN0IG1hdHRlQiA9IG1hdHRlUmdiWzJdO1xuICAgIGNvbnN0IGxlbmd0aCA9IHdpZHRoICogaGVpZ2h0ICogNDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDQpIHtcbiAgICAgIGNvbnN0IGFscGhhID0gYnVmZmVyW2kgKyAzXTtcblxuICAgICAgaWYgKGFscGhhID09PSAwKSB7XG4gICAgICAgIGJ1ZmZlcltpXSA9IDI1NTtcbiAgICAgICAgYnVmZmVyW2kgKyAxXSA9IDI1NTtcbiAgICAgICAgYnVmZmVyW2kgKyAyXSA9IDI1NTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGsgPSAyNTUgLyBhbHBoYTtcbiAgICAgIGJ1ZmZlcltpXSA9IChidWZmZXJbaV0gLSBtYXR0ZVIpICogayArIG1hdHRlUjtcbiAgICAgIGJ1ZmZlcltpICsgMV0gPSAoYnVmZmVyW2kgKyAxXSAtIG1hdHRlRykgKiBrICsgbWF0dGVHO1xuICAgICAgYnVmZmVyW2kgKyAyXSA9IChidWZmZXJbaSArIDJdIC0gbWF0dGVCKSAqIGsgKyBtYXR0ZUI7XG4gICAgfVxuICB9XG5cbiAgY3JlYXRlSW1hZ2VEYXRhKGZvcmNlUkdCQSA9IGZhbHNlKSB7XG4gICAgY29uc3QgZHJhd1dpZHRoID0gdGhpcy5kcmF3V2lkdGg7XG4gICAgY29uc3QgZHJhd0hlaWdodCA9IHRoaXMuZHJhd0hlaWdodDtcbiAgICBjb25zdCBpbWdEYXRhID0ge1xuICAgICAgd2lkdGg6IGRyYXdXaWR0aCxcbiAgICAgIGhlaWdodDogZHJhd0hlaWdodCxcbiAgICAgIGludGVycG9sYXRlOiB0aGlzLmludGVycG9sYXRlLFxuICAgICAga2luZDogMCxcbiAgICAgIGRhdGE6IG51bGxcbiAgICB9O1xuICAgIGNvbnN0IG51bUNvbXBzID0gdGhpcy5udW1Db21wcztcbiAgICBjb25zdCBvcmlnaW5hbFdpZHRoID0gdGhpcy53aWR0aDtcbiAgICBjb25zdCBvcmlnaW5hbEhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgIGNvbnN0IGJwYyA9IHRoaXMuYnBjO1xuICAgIGNvbnN0IHJvd0J5dGVzID0gb3JpZ2luYWxXaWR0aCAqIG51bUNvbXBzICogYnBjICsgNyA+PiAzO1xuICAgIGxldCBpbWdBcnJheTtcblxuICAgIGlmICghZm9yY2VSR0JBKSB7XG4gICAgICBsZXQga2luZDtcblxuICAgICAgaWYgKHRoaXMuY29sb3JTcGFjZS5uYW1lID09PSBcIkRldmljZUdyYXlcIiAmJiBicGMgPT09IDEpIHtcbiAgICAgICAga2luZCA9IF91dGlsLkltYWdlS2luZC5HUkFZU0NBTEVfMUJQUDtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jb2xvclNwYWNlLm5hbWUgPT09IFwiRGV2aWNlUkdCXCIgJiYgYnBjID09PSA4ICYmICF0aGlzLm5lZWRzRGVjb2RlKSB7XG4gICAgICAgIGtpbmQgPSBfdXRpbC5JbWFnZUtpbmQuUkdCXzI0QlBQO1xuICAgICAgfVxuXG4gICAgICBpZiAoa2luZCAmJiAhdGhpcy5zbWFzayAmJiAhdGhpcy5tYXNrICYmIGRyYXdXaWR0aCA9PT0gb3JpZ2luYWxXaWR0aCAmJiBkcmF3SGVpZ2h0ID09PSBvcmlnaW5hbEhlaWdodCkge1xuICAgICAgICBpbWdEYXRhLmtpbmQgPSBraW5kO1xuICAgICAgICBpbWdBcnJheSA9IHRoaXMuZ2V0SW1hZ2VCeXRlcyhvcmlnaW5hbEhlaWdodCAqIHJvd0J5dGVzKTtcblxuICAgICAgICBpZiAodGhpcy5pbWFnZSBpbnN0YW5jZW9mIF9kZWNvZGVfc3RyZWFtLkRlY29kZVN0cmVhbSkge1xuICAgICAgICAgIGltZ0RhdGEuZGF0YSA9IGltZ0FycmF5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IG5ld0FycmF5ID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGltZ0FycmF5Lmxlbmd0aCk7XG4gICAgICAgICAgbmV3QXJyYXkuc2V0KGltZ0FycmF5KTtcbiAgICAgICAgICBpbWdEYXRhLmRhdGEgPSBuZXdBcnJheTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm5lZWRzRGVjb2RlKSB7XG4gICAgICAgICAgKDAsIF91dGlsLmFzc2VydCkoa2luZCA9PT0gX3V0aWwuSW1hZ2VLaW5kLkdSQVlTQ0FMRV8xQlBQLCBcIlBERkltYWdlLmNyZWF0ZUltYWdlRGF0YTogVGhlIGltYWdlIG11c3QgYmUgZ3JheXNjYWxlLlwiKTtcbiAgICAgICAgICBjb25zdCBidWZmZXIgPSBpbWdEYXRhLmRhdGE7XG5cbiAgICAgICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBidWZmZXIubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgYnVmZmVyW2ldIF49IDB4ZmY7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGltZ0RhdGE7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmltYWdlIGluc3RhbmNlb2YgX2pwZWdfc3RyZWFtLkpwZWdTdHJlYW0gJiYgIXRoaXMuc21hc2sgJiYgIXRoaXMubWFzaykge1xuICAgICAgICBsZXQgaW1hZ2VMZW5ndGggPSBvcmlnaW5hbEhlaWdodCAqIHJvd0J5dGVzO1xuXG4gICAgICAgIHN3aXRjaCAodGhpcy5jb2xvclNwYWNlLm5hbWUpIHtcbiAgICAgICAgICBjYXNlIFwiRGV2aWNlR3JheVwiOlxuICAgICAgICAgICAgaW1hZ2VMZW5ndGggKj0gMztcblxuICAgICAgICAgIGNhc2UgXCJEZXZpY2VSR0JcIjpcbiAgICAgICAgICBjYXNlIFwiRGV2aWNlQ01ZS1wiOlxuICAgICAgICAgICAgaW1nRGF0YS5raW5kID0gX3V0aWwuSW1hZ2VLaW5kLlJHQl8yNEJQUDtcbiAgICAgICAgICAgIGltZ0RhdGEuZGF0YSA9IHRoaXMuZ2V0SW1hZ2VCeXRlcyhpbWFnZUxlbmd0aCwgZHJhd1dpZHRoLCBkcmF3SGVpZ2h0LCB0cnVlKTtcbiAgICAgICAgICAgIHJldHVybiBpbWdEYXRhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaW1nQXJyYXkgPSB0aGlzLmdldEltYWdlQnl0ZXMob3JpZ2luYWxIZWlnaHQgKiByb3dCeXRlcyk7XG4gICAgY29uc3QgYWN0dWFsSGVpZ2h0ID0gMCB8IGltZ0FycmF5Lmxlbmd0aCAvIHJvd0J5dGVzICogZHJhd0hlaWdodCAvIG9yaWdpbmFsSGVpZ2h0O1xuICAgIGNvbnN0IGNvbXBzID0gdGhpcy5nZXRDb21wb25lbnRzKGltZ0FycmF5KTtcbiAgICBsZXQgYWxwaGEwMSwgbWF5YmVVbmRvUHJlYmxlbmQ7XG5cbiAgICBpZiAoIWZvcmNlUkdCQSAmJiAhdGhpcy5zbWFzayAmJiAhdGhpcy5tYXNrKSB7XG4gICAgICBpbWdEYXRhLmtpbmQgPSBfdXRpbC5JbWFnZUtpbmQuUkdCXzI0QlBQO1xuICAgICAgaW1nRGF0YS5kYXRhID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGRyYXdXaWR0aCAqIGRyYXdIZWlnaHQgKiAzKTtcbiAgICAgIGFscGhhMDEgPSAwO1xuICAgICAgbWF5YmVVbmRvUHJlYmxlbmQgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW1nRGF0YS5raW5kID0gX3V0aWwuSW1hZ2VLaW5kLlJHQkFfMzJCUFA7XG4gICAgICBpbWdEYXRhLmRhdGEgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkoZHJhd1dpZHRoICogZHJhd0hlaWdodCAqIDQpO1xuICAgICAgYWxwaGEwMSA9IDE7XG4gICAgICBtYXliZVVuZG9QcmVibGVuZCA9IHRydWU7XG4gICAgICB0aGlzLmZpbGxPcGFjaXR5KGltZ0RhdGEuZGF0YSwgZHJhd1dpZHRoLCBkcmF3SGVpZ2h0LCBhY3R1YWxIZWlnaHQsIGNvbXBzKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5uZWVkc0RlY29kZSkge1xuICAgICAgdGhpcy5kZWNvZGVCdWZmZXIoY29tcHMpO1xuICAgIH1cblxuICAgIHRoaXMuY29sb3JTcGFjZS5maWxsUmdiKGltZ0RhdGEuZGF0YSwgb3JpZ2luYWxXaWR0aCwgb3JpZ2luYWxIZWlnaHQsIGRyYXdXaWR0aCwgZHJhd0hlaWdodCwgYWN0dWFsSGVpZ2h0LCBicGMsIGNvbXBzLCBhbHBoYTAxKTtcblxuICAgIGlmIChtYXliZVVuZG9QcmVibGVuZCkge1xuICAgICAgdGhpcy51bmRvUHJlYmxlbmQoaW1nRGF0YS5kYXRhLCBkcmF3V2lkdGgsIGFjdHVhbEhlaWdodCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGltZ0RhdGE7XG4gIH1cblxuICBmaWxsR3JheUJ1ZmZlcihidWZmZXIpIHtcbiAgICBjb25zdCBudW1Db21wcyA9IHRoaXMubnVtQ29tcHM7XG5cbiAgICBpZiAobnVtQ29tcHMgIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgUmVhZGluZyBncmF5IHNjYWxlIGZyb20gYSBjb2xvciBpbWFnZTogJHtudW1Db21wc31gKTtcbiAgICB9XG5cbiAgICBjb25zdCB3aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG4gICAgY29uc3QgYnBjID0gdGhpcy5icGM7XG4gICAgY29uc3Qgcm93Qnl0ZXMgPSB3aWR0aCAqIG51bUNvbXBzICogYnBjICsgNyA+PiAzO1xuICAgIGNvbnN0IGltZ0FycmF5ID0gdGhpcy5nZXRJbWFnZUJ5dGVzKGhlaWdodCAqIHJvd0J5dGVzKTtcbiAgICBjb25zdCBjb21wcyA9IHRoaXMuZ2V0Q29tcG9uZW50cyhpbWdBcnJheSk7XG4gICAgbGV0IGksIGxlbmd0aDtcblxuICAgIGlmIChicGMgPT09IDEpIHtcbiAgICAgIGxlbmd0aCA9IHdpZHRoICogaGVpZ2h0O1xuXG4gICAgICBpZiAodGhpcy5uZWVkc0RlY29kZSkge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICBidWZmZXJbaV0gPSBjb21wc1tpXSAtIDEgJiAyNTU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgICAgIGJ1ZmZlcltpXSA9IC1jb21wc1tpXSAmIDI1NTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubmVlZHNEZWNvZGUpIHtcbiAgICAgIHRoaXMuZGVjb2RlQnVmZmVyKGNvbXBzKTtcbiAgICB9XG5cbiAgICBsZW5ndGggPSB3aWR0aCAqIGhlaWdodDtcbiAgICBjb25zdCBzY2FsZSA9IDI1NSAvICgoMSA8PCBicGMpIC0gMSk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgIGJ1ZmZlcltpXSA9IHNjYWxlICogY29tcHNbaV07XG4gICAgfVxuICB9XG5cbiAgZ2V0SW1hZ2VCeXRlcyhsZW5ndGgsIGRyYXdXaWR0aCwgZHJhd0hlaWdodCwgZm9yY2VSR0IgPSBmYWxzZSkge1xuICAgIHRoaXMuaW1hZ2UucmVzZXQoKTtcbiAgICB0aGlzLmltYWdlLmRyYXdXaWR0aCA9IGRyYXdXaWR0aCB8fCB0aGlzLndpZHRoO1xuICAgIHRoaXMuaW1hZ2UuZHJhd0hlaWdodCA9IGRyYXdIZWlnaHQgfHwgdGhpcy5oZWlnaHQ7XG4gICAgdGhpcy5pbWFnZS5mb3JjZVJHQiA9ICEhZm9yY2VSR0I7XG4gICAgcmV0dXJuIHRoaXMuaW1hZ2UuZ2V0Qnl0ZXMobGVuZ3RoLCB0cnVlKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuUERGSW1hZ2UgPSBQREZJbWFnZTtcblxuLyoqKi8gfSksXG4vKiA2NCAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5DYXRhbG9nID0gdm9pZCAwO1xuXG52YXIgX3ByaW1pdGl2ZXMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDUpO1xuXG52YXIgX2NvcmVfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDkpO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX25hbWVfbnVtYmVyX3RyZWUgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDY1KTtcblxudmFyIF9iYXNlX3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oNik7XG5cbnZhciBfY29sb3JzcGFjZSA9IF9fd19wZGZqc19yZXF1aXJlX18oMjQpO1xuXG52YXIgX2ZpbGVfc3BlYyA9IF9fd19wZGZqc19yZXF1aXJlX18oNjYpO1xuXG52YXIgX2ltYWdlX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXyg1OCk7XG5cbnZhciBfbWV0YWRhdGFfcGFyc2VyID0gX193X3BkZmpzX3JlcXVpcmVfXyg2Nyk7XG5cbnZhciBfc3RydWN0X3RyZWUgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDY5KTtcblxuZnVuY3Rpb24gZmV0Y2hEZXN0aW5hdGlvbihkZXN0KSB7XG4gIGlmIChkZXN0IGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCkge1xuICAgIGRlc3QgPSBkZXN0LmdldChcIkRcIik7XG4gIH1cblxuICByZXR1cm4gQXJyYXkuaXNBcnJheShkZXN0KSA/IGRlc3QgOiBudWxsO1xufVxuXG5jbGFzcyBDYXRhbG9nIHtcbiAgY29uc3RydWN0b3IocGRmTWFuYWdlciwgeHJlZikge1xuICAgIHRoaXMucGRmTWFuYWdlciA9IHBkZk1hbmFnZXI7XG4gICAgdGhpcy54cmVmID0geHJlZjtcbiAgICB0aGlzLl9jYXREaWN0ID0geHJlZi5nZXRDYXRhbG9nT2JqKCk7XG5cbiAgICBpZiAoISh0aGlzLl9jYXREaWN0IGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCkpIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkNhdGFsb2cgb2JqZWN0IGlzIG5vdCBhIGRpY3Rpb25hcnkuXCIpO1xuICAgIH1cblxuICAgIHRoaXMudG9wbGV2ZWxQYWdlc0RpY3Q7XG4gICAgdGhpcy5fYWN0dWFsTnVtUGFnZXMgPSBudWxsO1xuICAgIHRoaXMuZm9udENhY2hlID0gbmV3IF9wcmltaXRpdmVzLlJlZlNldENhY2hlKCk7XG4gICAgdGhpcy5idWlsdEluQ01hcENhY2hlID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuZ2xvYmFsSW1hZ2VDYWNoZSA9IG5ldyBfaW1hZ2VfdXRpbHMuR2xvYmFsSW1hZ2VDYWNoZSgpO1xuICAgIHRoaXMucGFnZUtpZHNDb3VudENhY2hlID0gbmV3IF9wcmltaXRpdmVzLlJlZlNldENhY2hlKCk7XG4gICAgdGhpcy5wYWdlSW5kZXhDYWNoZSA9IG5ldyBfcHJpbWl0aXZlcy5SZWZTZXRDYWNoZSgpO1xuICAgIHRoaXMubm9uQmxlbmRNb2Rlc1NldCA9IG5ldyBfcHJpbWl0aXZlcy5SZWZTZXQoKTtcbiAgfVxuXG4gIGdldCB2ZXJzaW9uKCkge1xuICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLl9jYXREaWN0LmdldChcIlZlcnNpb25cIik7XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJ2ZXJzaW9uXCIsIHZlcnNpb24gaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5OYW1lID8gdmVyc2lvbi5uYW1lIDogbnVsbCk7XG4gIH1cblxuICBnZXQgbGFuZygpIHtcbiAgICBjb25zdCBsYW5nID0gdGhpcy5fY2F0RGljdC5nZXQoXCJMYW5nXCIpO1xuXG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwibGFuZ1wiLCB0eXBlb2YgbGFuZyA9PT0gXCJzdHJpbmdcIiA/ICgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykobGFuZykgOiBudWxsKTtcbiAgfVxuXG4gIGdldCBuZWVkc1JlbmRlcmluZygpIHtcbiAgICBjb25zdCBuZWVkc1JlbmRlcmluZyA9IHRoaXMuX2NhdERpY3QuZ2V0KFwiTmVlZHNSZW5kZXJpbmdcIik7XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJuZWVkc1JlbmRlcmluZ1wiLCB0eXBlb2YgbmVlZHNSZW5kZXJpbmcgPT09IFwiYm9vbGVhblwiID8gbmVlZHNSZW5kZXJpbmcgOiBmYWxzZSk7XG4gIH1cblxuICBnZXQgY29sbGVjdGlvbigpIHtcbiAgICBsZXQgY29sbGVjdGlvbiA9IG51bGw7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qgb2JqID0gdGhpcy5fY2F0RGljdC5nZXQoXCJDb2xsZWN0aW9uXCIpO1xuXG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkob2JqKSAmJiBvYmouc2l6ZSA+IDApIHtcbiAgICAgICAgY29sbGVjdGlvbiA9IG9iajtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgaWYgKGV4IGluc3RhbmNlb2YgX2NvcmVfdXRpbHMuTWlzc2luZ0RhdGFFeGNlcHRpb24pIHtcbiAgICAgICAgdGhyb3cgZXg7XG4gICAgICB9XG5cbiAgICAgICgwLCBfdXRpbC5pbmZvKShcIkNhbm5vdCBmZXRjaCBDb2xsZWN0aW9uIGVudHJ5OyBhc3N1bWluZyBubyBjb2xsZWN0aW9uIGlzIHByZXNlbnQuXCIpO1xuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImNvbGxlY3Rpb25cIiwgY29sbGVjdGlvbik7XG4gIH1cblxuICBnZXQgYWNyb0Zvcm0oKSB7XG4gICAgbGV0IGFjcm9Gb3JtID0gbnVsbDtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBvYmogPSB0aGlzLl9jYXREaWN0LmdldChcIkFjcm9Gb3JtXCIpO1xuXG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkob2JqKSAmJiBvYmouc2l6ZSA+IDApIHtcbiAgICAgICAgYWNyb0Zvcm0gPSBvYmo7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmIChleCBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgIHRocm93IGV4O1xuICAgICAgfVxuXG4gICAgICAoMCwgX3V0aWwuaW5mbykoXCJDYW5ub3QgZmV0Y2ggQWNyb0Zvcm0gZW50cnk7IGFzc3VtaW5nIG5vIGZvcm1zIGFyZSBwcmVzZW50LlwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJhY3JvRm9ybVwiLCBhY3JvRm9ybSk7XG4gIH1cblxuICBnZXQgYWNyb0Zvcm1SZWYoKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9jYXREaWN0LmdldFJhdyhcIkFjcm9Gb3JtXCIpO1xuXG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiYWNyb0Zvcm1SZWZcIiwgKDAsIF9wcmltaXRpdmVzLmlzUmVmKSh2YWx1ZSkgPyB2YWx1ZSA6IG51bGwpO1xuICB9XG5cbiAgZ2V0IG1ldGFkYXRhKCkge1xuICAgIGNvbnN0IHN0cmVhbVJlZiA9IHRoaXMuX2NhdERpY3QuZ2V0UmF3KFwiTWV0YWRhdGFcIik7XG5cbiAgICBpZiAoIShzdHJlYW1SZWYgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5SZWYpKSB7XG4gICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJtZXRhZGF0YVwiLCBudWxsKTtcbiAgICB9XG5cbiAgICBsZXQgbWV0YWRhdGEgPSBudWxsO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN1cHByZXNzRW5jcnlwdGlvbiA9ICEodGhpcy54cmVmLmVuY3J5cHQgJiYgdGhpcy54cmVmLmVuY3J5cHQuZW5jcnlwdE1ldGFkYXRhKTtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMueHJlZi5mZXRjaChzdHJlYW1SZWYsIHN1cHByZXNzRW5jcnlwdGlvbik7XG5cbiAgICAgIGlmIChzdHJlYW0gaW5zdGFuY2VvZiBfYmFzZV9zdHJlYW0uQmFzZVN0cmVhbSAmJiBzdHJlYW0uZGljdCBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IHN0cmVhbS5kaWN0LmdldChcIlR5cGVcIik7XG4gICAgICAgIGNvbnN0IHN1YnR5cGUgPSBzdHJlYW0uZGljdC5nZXQoXCJTdWJ0eXBlXCIpO1xuXG4gICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKSh0eXBlLCBcIk1ldGFkYXRhXCIpICYmICgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHN1YnR5cGUsIFwiWE1MXCIpKSB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9ICgwLCBfdXRpbC5zdHJpbmdUb1VURjhTdHJpbmcpKHN0cmVhbS5nZXRTdHJpbmcoKSk7XG5cbiAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgbWV0YWRhdGEgPSBuZXcgX21ldGFkYXRhX3BhcnNlci5NZXRhZGF0YVBhcnNlcihkYXRhKS5zZXJpYWxpemFibGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmIChleCBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgIHRocm93IGV4O1xuICAgICAgfVxuXG4gICAgICAoMCwgX3V0aWwuaW5mbykoYFNraXBwaW5nIGludmFsaWQgTWV0YWRhdGE6IFwiJHtleH1cIi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJtZXRhZGF0YVwiLCBtZXRhZGF0YSk7XG4gIH1cblxuICBnZXQgbWFya0luZm8oKSB7XG4gICAgbGV0IG1hcmtJbmZvID0gbnVsbDtcblxuICAgIHRyeSB7XG4gICAgICBtYXJrSW5mbyA9IHRoaXMuX3JlYWRNYXJrSW5mbygpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXggaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICB0aHJvdyBleDtcbiAgICAgIH1cblxuICAgICAgKDAsIF91dGlsLndhcm4pKFwiVW5hYmxlIHRvIHJlYWQgbWFyayBpbmZvLlwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJtYXJrSW5mb1wiLCBtYXJrSW5mbyk7XG4gIH1cblxuICBfcmVhZE1hcmtJbmZvKCkge1xuICAgIGNvbnN0IG9iaiA9IHRoaXMuX2NhdERpY3QuZ2V0KFwiTWFya0luZm9cIik7XG5cbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKG9iaikpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG1hcmtJbmZvID0gT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG51bGwpLCB7XG4gICAgICBNYXJrZWQ6IGZhbHNlLFxuICAgICAgVXNlclByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgU3VzcGVjdHM6IGZhbHNlXG4gICAgfSk7XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBtYXJrSW5mbykge1xuICAgICAgaWYgKCFvYmouaGFzKGtleSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZhbHVlID0gb2JqLmdldChrZXkpO1xuXG4gICAgICBpZiAoISgwLCBfdXRpbC5pc0Jvb2wpKHZhbHVlKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbWFya0luZm9ba2V5XSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBtYXJrSW5mbztcbiAgfVxuXG4gIGdldCBzdHJ1Y3RUcmVlUm9vdCgpIHtcbiAgICBsZXQgc3RydWN0VHJlZSA9IG51bGw7XG5cbiAgICB0cnkge1xuICAgICAgc3RydWN0VHJlZSA9IHRoaXMuX3JlYWRTdHJ1Y3RUcmVlUm9vdCgpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXggaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICB0aHJvdyBleDtcbiAgICAgIH1cblxuICAgICAgKDAsIF91dGlsLndhcm4pKFwiVW5hYmxlIHJlYWQgdG8gc3RydWN0VHJlZVJvb3QgaW5mby5cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwic3RydWN0VHJlZVJvb3RcIiwgc3RydWN0VHJlZSk7XG4gIH1cblxuICBfcmVhZFN0cnVjdFRyZWVSb290KCkge1xuICAgIGNvbnN0IG9iaiA9IHRoaXMuX2NhdERpY3QuZ2V0KFwiU3RydWN0VHJlZVJvb3RcIik7XG5cbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKG9iaikpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHJvb3QgPSBuZXcgX3N0cnVjdF90cmVlLlN0cnVjdFRyZWVSb290KG9iaik7XG4gICAgcm9vdC5pbml0KCk7XG4gICAgcmV0dXJuIHJvb3Q7XG4gIH1cblxuICBnZXQgdG9wbGV2ZWxQYWdlc0RpY3QoKSB7XG4gICAgY29uc3QgcGFnZXNPYmogPSB0aGlzLl9jYXREaWN0LmdldChcIlBhZ2VzXCIpO1xuXG4gICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShwYWdlc09iaikpIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgdG9wLWxldmVsIHBhZ2VzIGRpY3Rpb25hcnkuXCIpO1xuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcInRvcGxldmVsUGFnZXNEaWN0XCIsIHBhZ2VzT2JqKTtcbiAgfVxuXG4gIGdldCBkb2N1bWVudE91dGxpbmUoKSB7XG4gICAgbGV0IG9iaiA9IG51bGw7XG5cbiAgICB0cnkge1xuICAgICAgb2JqID0gdGhpcy5fcmVhZERvY3VtZW50T3V0bGluZSgpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXggaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICB0aHJvdyBleDtcbiAgICAgIH1cblxuICAgICAgKDAsIF91dGlsLndhcm4pKFwiVW5hYmxlIHRvIHJlYWQgZG9jdW1lbnQgb3V0bGluZS5cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiZG9jdW1lbnRPdXRsaW5lXCIsIG9iaik7XG4gIH1cblxuICBfcmVhZERvY3VtZW50T3V0bGluZSgpIHtcbiAgICBsZXQgb2JqID0gdGhpcy5fY2F0RGljdC5nZXQoXCJPdXRsaW5lc1wiKTtcblxuICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkob2JqKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgb2JqID0gb2JqLmdldFJhdyhcIkZpcnN0XCIpO1xuXG4gICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKG9iaikpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHJvb3QgPSB7XG4gICAgICBpdGVtczogW11cbiAgICB9O1xuICAgIGNvbnN0IHF1ZXVlID0gW3tcbiAgICAgIG9iaixcbiAgICAgIHBhcmVudDogcm9vdFxuICAgIH1dO1xuICAgIGNvbnN0IHByb2Nlc3NlZCA9IG5ldyBfcHJpbWl0aXZlcy5SZWZTZXQoKTtcbiAgICBwcm9jZXNzZWQucHV0KG9iaik7XG4gICAgY29uc3QgeHJlZiA9IHRoaXMueHJlZixcbiAgICAgICAgICBibGFja0NvbG9yID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpO1xuXG4gICAgd2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGkgPSBxdWV1ZS5zaGlmdCgpO1xuICAgICAgY29uc3Qgb3V0bGluZURpY3QgPSB4cmVmLmZldGNoSWZSZWYoaS5vYmopO1xuXG4gICAgICBpZiAob3V0bGluZURpY3QgPT09IG51bGwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghb3V0bGluZURpY3QuaGFzKFwiVGl0bGVcIikpIHtcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiSW52YWxpZCBvdXRsaW5lIGl0ZW0gZW5jb3VudGVyZWQuXCIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICB1cmw6IG51bGwsXG4gICAgICAgIGRlc3Q6IG51bGxcbiAgICAgIH07XG4gICAgICBDYXRhbG9nLnBhcnNlRGVzdERpY3Rpb25hcnkoe1xuICAgICAgICBkZXN0RGljdDogb3V0bGluZURpY3QsXG4gICAgICAgIHJlc3VsdE9iajogZGF0YSxcbiAgICAgICAgZG9jQmFzZVVybDogdGhpcy5wZGZNYW5hZ2VyLmRvY0Jhc2VVcmxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdGl0bGUgPSBvdXRsaW5lRGljdC5nZXQoXCJUaXRsZVwiKTtcbiAgICAgIGNvbnN0IGZsYWdzID0gb3V0bGluZURpY3QuZ2V0KFwiRlwiKSB8fCAwO1xuICAgICAgY29uc3QgY29sb3IgPSBvdXRsaW5lRGljdC5nZXRBcnJheShcIkNcIik7XG4gICAgICBjb25zdCBjb3VudCA9IG91dGxpbmVEaWN0LmdldChcIkNvdW50XCIpO1xuICAgICAgbGV0IHJnYkNvbG9yID0gYmxhY2tDb2xvcjtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29sb3IpICYmIGNvbG9yLmxlbmd0aCA9PT0gMyAmJiAoY29sb3JbMF0gIT09IDAgfHwgY29sb3JbMV0gIT09IDAgfHwgY29sb3JbMl0gIT09IDApKSB7XG4gICAgICAgIHJnYkNvbG9yID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYi5nZXRSZ2IoY29sb3IsIDApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvdXRsaW5lSXRlbSA9IHtcbiAgICAgICAgZGVzdDogZGF0YS5kZXN0LFxuICAgICAgICB1cmw6IGRhdGEudXJsLFxuICAgICAgICB1bnNhZmVVcmw6IGRhdGEudW5zYWZlVXJsLFxuICAgICAgICBuZXdXaW5kb3c6IGRhdGEubmV3V2luZG93LFxuICAgICAgICB0aXRsZTogKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKSh0aXRsZSksXG4gICAgICAgIGNvbG9yOiByZ2JDb2xvcixcbiAgICAgICAgY291bnQ6IE51bWJlci5pc0ludGVnZXIoY291bnQpID8gY291bnQgOiB1bmRlZmluZWQsXG4gICAgICAgIGJvbGQ6ICEhKGZsYWdzICYgMiksXG4gICAgICAgIGl0YWxpYzogISEoZmxhZ3MgJiAxKSxcbiAgICAgICAgaXRlbXM6IFtdXG4gICAgICB9O1xuICAgICAgaS5wYXJlbnQuaXRlbXMucHVzaChvdXRsaW5lSXRlbSk7XG4gICAgICBvYmogPSBvdXRsaW5lRGljdC5nZXRSYXcoXCJGaXJzdFwiKTtcblxuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1JlZikob2JqKSAmJiAhcHJvY2Vzc2VkLmhhcyhvYmopKSB7XG4gICAgICAgIHF1ZXVlLnB1c2goe1xuICAgICAgICAgIG9iaixcbiAgICAgICAgICBwYXJlbnQ6IG91dGxpbmVJdGVtXG4gICAgICAgIH0pO1xuICAgICAgICBwcm9jZXNzZWQucHV0KG9iaik7XG4gICAgICB9XG5cbiAgICAgIG9iaiA9IG91dGxpbmVEaWN0LmdldFJhdyhcIk5leHRcIik7XG5cbiAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKG9iaikgJiYgIXByb2Nlc3NlZC5oYXMob2JqKSkge1xuICAgICAgICBxdWV1ZS5wdXNoKHtcbiAgICAgICAgICBvYmosXG4gICAgICAgICAgcGFyZW50OiBpLnBhcmVudFxuICAgICAgICB9KTtcbiAgICAgICAgcHJvY2Vzc2VkLnB1dChvYmopO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByb290Lml0ZW1zLmxlbmd0aCA+IDAgPyByb290Lml0ZW1zIDogbnVsbDtcbiAgfVxuXG4gIGdldCBwZXJtaXNzaW9ucygpIHtcbiAgICBsZXQgcGVybWlzc2lvbnMgPSBudWxsO1xuXG4gICAgdHJ5IHtcbiAgICAgIHBlcm1pc3Npb25zID0gdGhpcy5fcmVhZFBlcm1pc3Npb25zKCk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmIChleCBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgIHRocm93IGV4O1xuICAgICAgfVxuXG4gICAgICAoMCwgX3V0aWwud2FybikoXCJVbmFibGUgdG8gcmVhZCBwZXJtaXNzaW9ucy5cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwicGVybWlzc2lvbnNcIiwgcGVybWlzc2lvbnMpO1xuICB9XG5cbiAgX3JlYWRQZXJtaXNzaW9ucygpIHtcbiAgICBjb25zdCBlbmNyeXB0ID0gdGhpcy54cmVmLnRyYWlsZXIuZ2V0KFwiRW5jcnlwdFwiKTtcblxuICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoZW5jcnlwdCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGxldCBmbGFncyA9IGVuY3J5cHQuZ2V0KFwiUFwiKTtcblxuICAgIGlmICghKDAsIF91dGlsLmlzTnVtKShmbGFncykpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGZsYWdzICs9IDIgKiogMzI7XG4gICAgY29uc3QgcGVybWlzc2lvbnMgPSBbXTtcblxuICAgIGZvciAoY29uc3Qga2V5IGluIF91dGlsLlBlcm1pc3Npb25GbGFnKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IF91dGlsLlBlcm1pc3Npb25GbGFnW2tleV07XG5cbiAgICAgIGlmIChmbGFncyAmIHZhbHVlKSB7XG4gICAgICAgIHBlcm1pc3Npb25zLnB1c2godmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwZXJtaXNzaW9ucztcbiAgfVxuXG4gIGdldCBvcHRpb25hbENvbnRlbnRDb25maWcoKSB7XG4gICAgbGV0IGNvbmZpZyA9IG51bGw7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXMuX2NhdERpY3QuZ2V0KFwiT0NQcm9wZXJ0aWVzXCIpO1xuXG4gICAgICBpZiAoIXByb3BlcnRpZXMpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwib3B0aW9uYWxDb250ZW50Q29uZmlnXCIsIG51bGwpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkZWZhdWx0Q29uZmlnID0gcHJvcGVydGllcy5nZXQoXCJEXCIpO1xuXG4gICAgICBpZiAoIWRlZmF1bHRDb25maWcpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwib3B0aW9uYWxDb250ZW50Q29uZmlnXCIsIG51bGwpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBncm91cHNEYXRhID0gcHJvcGVydGllcy5nZXQoXCJPQ0dzXCIpO1xuXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZ3JvdXBzRGF0YSkpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwib3B0aW9uYWxDb250ZW50Q29uZmlnXCIsIG51bGwpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBncm91cHMgPSBbXTtcbiAgICAgIGNvbnN0IGdyb3VwUmVmcyA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IGdyb3VwUmVmIG9mIGdyb3Vwc0RhdGEpIHtcbiAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKGdyb3VwUmVmKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgZ3JvdXBSZWZzLnB1c2goZ3JvdXBSZWYpO1xuICAgICAgICBjb25zdCBncm91cCA9IHRoaXMueHJlZi5mZXRjaElmUmVmKGdyb3VwUmVmKTtcbiAgICAgICAgZ3JvdXBzLnB1c2goe1xuICAgICAgICAgIGlkOiBncm91cFJlZi50b1N0cmluZygpLFxuICAgICAgICAgIG5hbWU6ICgwLCBfdXRpbC5pc1N0cmluZykoZ3JvdXAuZ2V0KFwiTmFtZVwiKSkgPyAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKGdyb3VwLmdldChcIk5hbWVcIikpIDogbnVsbCxcbiAgICAgICAgICBpbnRlbnQ6ICgwLCBfdXRpbC5pc1N0cmluZykoZ3JvdXAuZ2V0KFwiSW50ZW50XCIpKSA/ICgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykoZ3JvdXAuZ2V0KFwiSW50ZW50XCIpKSA6IG51bGxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGNvbmZpZyA9IHRoaXMuX3JlYWRPcHRpb25hbENvbnRlbnRDb25maWcoZGVmYXVsdENvbmZpZywgZ3JvdXBSZWZzKTtcbiAgICAgIGNvbmZpZy5ncm91cHMgPSBncm91cHM7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmIChleCBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgIHRocm93IGV4O1xuICAgICAgfVxuXG4gICAgICAoMCwgX3V0aWwud2FybikoYFVuYWJsZSB0byByZWFkIG9wdGlvbmFsIGNvbnRlbnQgY29uZmlnOiAke2V4fWApO1xuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIm9wdGlvbmFsQ29udGVudENvbmZpZ1wiLCBjb25maWcpO1xuICB9XG5cbiAgX3JlYWRPcHRpb25hbENvbnRlbnRDb25maWcoY29uZmlnLCBjb250ZW50R3JvdXBSZWZzKSB7XG4gICAgZnVuY3Rpb24gcGFyc2VPbk9mZihyZWZzKSB7XG4gICAgICBjb25zdCBvblBhcnNlZCA9IFtdO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShyZWZzKSkge1xuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHJlZnMpIHtcbiAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc1JlZikodmFsdWUpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY29udGVudEdyb3VwUmVmcy5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIG9uUGFyc2VkLnB1c2godmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvblBhcnNlZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZU9yZGVyKHJlZnMsIG5lc3RlZExldmVscyA9IDApIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShyZWZzKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb3JkZXIgPSBbXTtcblxuICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiByZWZzKSB7XG4gICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKHZhbHVlKSAmJiBjb250ZW50R3JvdXBSZWZzLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgIHBhcnNlZE9yZGVyUmVmcy5wdXQodmFsdWUpO1xuICAgICAgICAgIG9yZGVyLnB1c2godmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXN0ZWRPcmRlciA9IHBhcnNlTmVzdGVkT3JkZXIodmFsdWUsIG5lc3RlZExldmVscyk7XG5cbiAgICAgICAgaWYgKG5lc3RlZE9yZGVyKSB7XG4gICAgICAgICAgb3JkZXIucHVzaChuZXN0ZWRPcmRlcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG5lc3RlZExldmVscyA+IDApIHtcbiAgICAgICAgcmV0dXJuIG9yZGVyO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBoaWRkZW5Hcm91cHMgPSBbXTtcblxuICAgICAgZm9yIChjb25zdCBncm91cFJlZiBvZiBjb250ZW50R3JvdXBSZWZzKSB7XG4gICAgICAgIGlmIChwYXJzZWRPcmRlclJlZnMuaGFzKGdyb3VwUmVmKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaGlkZGVuR3JvdXBzLnB1c2goZ3JvdXBSZWYudG9TdHJpbmcoKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChoaWRkZW5Hcm91cHMubGVuZ3RoKSB7XG4gICAgICAgIG9yZGVyLnB1c2goe1xuICAgICAgICAgIG5hbWU6IG51bGwsXG4gICAgICAgICAgb3JkZXI6IGhpZGRlbkdyb3Vwc1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9yZGVyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlTmVzdGVkT3JkZXIocmVmLCBuZXN0ZWRMZXZlbHMpIHtcbiAgICAgIGlmICgrK25lc3RlZExldmVscyA+IE1BWF9ORVNURURfTEVWRUxTKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShcInBhcnNlTmVzdGVkT3JkZXIgLSByZWFjaGVkIE1BWF9ORVNURURfTEVWRUxTLlwiKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZhbHVlID0geHJlZi5mZXRjaElmUmVmKHJlZik7XG5cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5lc3RlZE5hbWUgPSB4cmVmLmZldGNoSWZSZWYodmFsdWVbMF0pO1xuXG4gICAgICBpZiAodHlwZW9mIG5lc3RlZE5hbWUgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5lc3RlZE9yZGVyID0gcGFyc2VPcmRlcih2YWx1ZS5zbGljZSgxKSwgbmVzdGVkTGV2ZWxzKTtcblxuICAgICAgaWYgKCFuZXN0ZWRPcmRlciB8fCAhbmVzdGVkT3JkZXIubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKG5lc3RlZE5hbWUpLFxuICAgICAgICBvcmRlcjogbmVzdGVkT3JkZXJcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgeHJlZiA9IHRoaXMueHJlZixcbiAgICAgICAgICBwYXJzZWRPcmRlclJlZnMgPSBuZXcgX3ByaW1pdGl2ZXMuUmVmU2V0KCksXG4gICAgICAgICAgTUFYX05FU1RFRF9MRVZFTFMgPSAxMDtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogKDAsIF91dGlsLmlzU3RyaW5nKShjb25maWcuZ2V0KFwiTmFtZVwiKSkgPyAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKGNvbmZpZy5nZXQoXCJOYW1lXCIpKSA6IG51bGwsXG4gICAgICBjcmVhdG9yOiAoMCwgX3V0aWwuaXNTdHJpbmcpKGNvbmZpZy5nZXQoXCJDcmVhdG9yXCIpKSA/ICgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykoY29uZmlnLmdldChcIkNyZWF0b3JcIikpIDogbnVsbCxcbiAgICAgIGJhc2VTdGF0ZTogKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoY29uZmlnLmdldChcIkJhc2VTdGF0ZVwiKSkgPyBjb25maWcuZ2V0KFwiQmFzZVN0YXRlXCIpLm5hbWUgOiBudWxsLFxuICAgICAgb246IHBhcnNlT25PZmYoY29uZmlnLmdldChcIk9OXCIpKSxcbiAgICAgIG9mZjogcGFyc2VPbk9mZihjb25maWcuZ2V0KFwiT0ZGXCIpKSxcbiAgICAgIG9yZGVyOiBwYXJzZU9yZGVyKGNvbmZpZy5nZXQoXCJPcmRlclwiKSksXG4gICAgICBncm91cHM6IG51bGxcbiAgICB9O1xuICB9XG5cbiAgc2V0QWN0dWFsTnVtUGFnZXMobnVtID0gbnVsbCkge1xuICAgIHRoaXMuX2FjdHVhbE51bVBhZ2VzID0gbnVtO1xuICB9XG5cbiAgZ2V0IGhhc0FjdHVhbE51bVBhZ2VzKCkge1xuICAgIHJldHVybiB0aGlzLl9hY3R1YWxOdW1QYWdlcyAhPT0gbnVsbDtcbiAgfVxuXG4gIGdldCBfcGFnZXNDb3VudCgpIHtcbiAgICBjb25zdCBvYmogPSB0aGlzLnRvcGxldmVsUGFnZXNEaWN0LmdldChcIkNvdW50XCIpO1xuXG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG9iaikpIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIlBhZ2UgY291bnQgaW4gdG9wLWxldmVsIHBhZ2VzIGRpY3Rpb25hcnkgaXMgbm90IGFuIGludGVnZXIuXCIpO1xuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIl9wYWdlc0NvdW50XCIsIG9iaik7XG4gIH1cblxuICBnZXQgbnVtUGFnZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQWN0dWFsTnVtUGFnZXMgPyB0aGlzLl9hY3R1YWxOdW1QYWdlcyA6IHRoaXMuX3BhZ2VzQ291bnQ7XG4gIH1cblxuICBnZXQgZGVzdGluYXRpb25zKCkge1xuICAgIGNvbnN0IG9iaiA9IHRoaXMuX3JlYWREZXN0cygpLFxuICAgICAgICAgIGRlc3RzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIGlmIChvYmogaW5zdGFuY2VvZiBfbmFtZV9udW1iZXJfdHJlZS5OYW1lVHJlZSkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2Ygb2JqLmdldEFsbCgpKSB7XG4gICAgICAgIGNvbnN0IGRlc3QgPSBmZXRjaERlc3RpbmF0aW9uKHZhbHVlKTtcblxuICAgICAgICBpZiAoZGVzdCkge1xuICAgICAgICAgIGRlc3RzW2tleV0gPSBkZXN0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5EaWN0KSB7XG4gICAgICBvYmouZm9yRWFjaChmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICBjb25zdCBkZXN0ID0gZmV0Y2hEZXN0aW5hdGlvbih2YWx1ZSk7XG5cbiAgICAgICAgaWYgKGRlc3QpIHtcbiAgICAgICAgICBkZXN0c1trZXldID0gZGVzdDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiZGVzdGluYXRpb25zXCIsIGRlc3RzKTtcbiAgfVxuXG4gIGdldERlc3RpbmF0aW9uKGlkKSB7XG4gICAgY29uc3Qgb2JqID0gdGhpcy5fcmVhZERlc3RzKCk7XG5cbiAgICBpZiAob2JqIGluc3RhbmNlb2YgX25hbWVfbnVtYmVyX3RyZWUuTmFtZVRyZWUpIHtcbiAgICAgIGNvbnN0IGRlc3QgPSBmZXRjaERlc3RpbmF0aW9uKG9iai5nZXQoaWQpKTtcblxuICAgICAgaWYgKGRlc3QpIHtcbiAgICAgICAgcmV0dXJuIGRlc3Q7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFsbERlc3QgPSB0aGlzLmRlc3RpbmF0aW9uc1tpZF07XG5cbiAgICAgIGlmIChhbGxEZXN0KSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShgRm91bmQgXCIke2lkfVwiIGF0IGFuIGluY29ycmVjdCBwb3NpdGlvbiBpbiB0aGUgTmFtZVRyZWUuYCk7XG4gICAgICAgIHJldHVybiBhbGxEZXN0O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCkge1xuICAgICAgY29uc3QgZGVzdCA9IGZldGNoRGVzdGluYXRpb24ob2JqLmdldChpZCkpO1xuXG4gICAgICBpZiAoZGVzdCkge1xuICAgICAgICByZXR1cm4gZGVzdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIF9yZWFkRGVzdHMoKSB7XG4gICAgY29uc3Qgb2JqID0gdGhpcy5fY2F0RGljdC5nZXQoXCJOYW1lc1wiKTtcblxuICAgIGlmIChvYmogJiYgb2JqLmhhcyhcIkRlc3RzXCIpKSB7XG4gICAgICByZXR1cm4gbmV3IF9uYW1lX251bWJlcl90cmVlLk5hbWVUcmVlKG9iai5nZXRSYXcoXCJEZXN0c1wiKSwgdGhpcy54cmVmKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2NhdERpY3QuaGFzKFwiRGVzdHNcIikpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jYXREaWN0LmdldChcIkRlc3RzXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXQgcGFnZUxhYmVscygpIHtcbiAgICBsZXQgb2JqID0gbnVsbDtcblxuICAgIHRyeSB7XG4gICAgICBvYmogPSB0aGlzLl9yZWFkUGFnZUxhYmVscygpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXggaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICB0aHJvdyBleDtcbiAgICAgIH1cblxuICAgICAgKDAsIF91dGlsLndhcm4pKFwiVW5hYmxlIHRvIHJlYWQgcGFnZSBsYWJlbHMuXCIpO1xuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcInBhZ2VMYWJlbHNcIiwgb2JqKTtcbiAgfVxuXG4gIF9yZWFkUGFnZUxhYmVscygpIHtcbiAgICBjb25zdCBvYmogPSB0aGlzLl9jYXREaWN0LmdldFJhdyhcIlBhZ2VMYWJlbHNcIik7XG5cbiAgICBpZiAoIW9iaikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcGFnZUxhYmVscyA9IG5ldyBBcnJheSh0aGlzLm51bVBhZ2VzKTtcbiAgICBsZXQgc3R5bGUgPSBudWxsLFxuICAgICAgICBwcmVmaXggPSBcIlwiO1xuICAgIGNvbnN0IG51bWJlclRyZWUgPSBuZXcgX25hbWVfbnVtYmVyX3RyZWUuTnVtYmVyVHJlZShvYmosIHRoaXMueHJlZik7XG4gICAgY29uc3QgbnVtcyA9IG51bWJlclRyZWUuZ2V0QWxsKCk7XG4gICAgbGV0IGN1cnJlbnRMYWJlbCA9IFwiXCIsXG4gICAgICAgIGN1cnJlbnRJbmRleCA9IDE7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSB0aGlzLm51bVBhZ2VzOyBpIDwgaWk7IGkrKykge1xuICAgICAgY29uc3QgbGFiZWxEaWN0ID0gbnVtcy5nZXQoaSk7XG5cbiAgICAgIGlmIChsYWJlbERpY3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGxhYmVsRGljdCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJQYWdlTGFiZWwgaXMgbm90IGEgZGljdGlvbmFyeS5cIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGFiZWxEaWN0LmhhcyhcIlR5cGVcIikgJiYgISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGxhYmVsRGljdC5nZXQoXCJUeXBlXCIpLCBcIlBhZ2VMYWJlbFwiKSkge1xuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgdHlwZSBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS5cIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGFiZWxEaWN0LmhhcyhcIlNcIikpIHtcbiAgICAgICAgICBjb25zdCBzID0gbGFiZWxEaWN0LmdldChcIlNcIik7XG5cbiAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJJbnZhbGlkIHN0eWxlIGluIFBhZ2VMYWJlbCBkaWN0aW9uYXJ5LlwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzdHlsZSA9IHMubmFtZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdHlsZSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGFiZWxEaWN0LmhhcyhcIlBcIikpIHtcbiAgICAgICAgICBjb25zdCBwID0gbGFiZWxEaWN0LmdldChcIlBcIik7XG5cbiAgICAgICAgICBpZiAoISgwLCBfdXRpbC5pc1N0cmluZykocCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgcHJlZml4IGluIFBhZ2VMYWJlbCBkaWN0aW9uYXJ5LlwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwcmVmaXggPSAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKHApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZWZpeCA9IFwiXCI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGFiZWxEaWN0LmhhcyhcIlN0XCIpKSB7XG4gICAgICAgICAgY29uc3Qgc3QgPSBsYWJlbERpY3QuZ2V0KFwiU3RcIik7XG5cbiAgICAgICAgICBpZiAoIShOdW1iZXIuaXNJbnRlZ2VyKHN0KSAmJiBzdCA+PSAxKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiSW52YWxpZCBzdGFydCBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS5cIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY3VycmVudEluZGV4ID0gc3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3VycmVudEluZGV4ID0gMTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKHN0eWxlKSB7XG4gICAgICAgIGNhc2UgXCJEXCI6XG4gICAgICAgICAgY3VycmVudExhYmVsID0gY3VycmVudEluZGV4O1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJSXCI6XG4gICAgICAgIGNhc2UgXCJyXCI6XG4gICAgICAgICAgY3VycmVudExhYmVsID0gKDAsIF9jb3JlX3V0aWxzLnRvUm9tYW5OdW1lcmFscykoY3VycmVudEluZGV4LCBzdHlsZSA9PT0gXCJyXCIpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJBXCI6XG4gICAgICAgIGNhc2UgXCJhXCI6XG4gICAgICAgICAgY29uc3QgTElNSVQgPSAyNjtcbiAgICAgICAgICBjb25zdCBBX1VQUEVSX0NBU0UgPSAweDQxLFxuICAgICAgICAgICAgICAgIEFfTE9XRVJfQ0FTRSA9IDB4NjE7XG4gICAgICAgICAgY29uc3QgYmFzZUNoYXJDb2RlID0gc3R5bGUgPT09IFwiYVwiID8gQV9MT1dFUl9DQVNFIDogQV9VUFBFUl9DQVNFO1xuICAgICAgICAgIGNvbnN0IGxldHRlckluZGV4ID0gY3VycmVudEluZGV4IC0gMTtcbiAgICAgICAgICBjb25zdCBjaGFyYWN0ZXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJhc2VDaGFyQ29kZSArIGxldHRlckluZGV4ICUgTElNSVQpO1xuICAgICAgICAgIGNvbnN0IGNoYXJCdWYgPSBbXTtcblxuICAgICAgICAgIGZvciAobGV0IGogPSAwLCBqaiA9IGxldHRlckluZGV4IC8gTElNSVQgfCAwOyBqIDw9IGpqOyBqKyspIHtcbiAgICAgICAgICAgIGNoYXJCdWYucHVzaChjaGFyYWN0ZXIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGN1cnJlbnRMYWJlbCA9IGNoYXJCdWYuam9pbihcIlwiKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChzdHlsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBJbnZhbGlkIHN0eWxlIFwiJHtzdHlsZX1cIiBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS5gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjdXJyZW50TGFiZWwgPSBcIlwiO1xuICAgICAgfVxuXG4gICAgICBwYWdlTGFiZWxzW2ldID0gcHJlZml4ICsgY3VycmVudExhYmVsO1xuICAgICAgY3VycmVudEluZGV4Kys7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhZ2VMYWJlbHM7XG4gIH1cblxuICBnZXQgcGFnZUxheW91dCgpIHtcbiAgICBjb25zdCBvYmogPSB0aGlzLl9jYXREaWN0LmdldChcIlBhZ2VMYXlvdXRcIik7XG5cbiAgICBsZXQgcGFnZUxheW91dCA9IFwiXCI7XG5cbiAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkob2JqKSkge1xuICAgICAgc3dpdGNoIChvYmoubmFtZSkge1xuICAgICAgICBjYXNlIFwiU2luZ2xlUGFnZVwiOlxuICAgICAgICBjYXNlIFwiT25lQ29sdW1uXCI6XG4gICAgICAgIGNhc2UgXCJUd29Db2x1bW5MZWZ0XCI6XG4gICAgICAgIGNhc2UgXCJUd29Db2x1bW5SaWdodFwiOlxuICAgICAgICBjYXNlIFwiVHdvUGFnZUxlZnRcIjpcbiAgICAgICAgY2FzZSBcIlR3b1BhZ2VSaWdodFwiOlxuICAgICAgICAgIHBhZ2VMYXlvdXQgPSBvYmoubmFtZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJwYWdlTGF5b3V0XCIsIHBhZ2VMYXlvdXQpO1xuICB9XG5cbiAgZ2V0IHBhZ2VNb2RlKCkge1xuICAgIGNvbnN0IG9iaiA9IHRoaXMuX2NhdERpY3QuZ2V0KFwiUGFnZU1vZGVcIik7XG5cbiAgICBsZXQgcGFnZU1vZGUgPSBcIlVzZU5vbmVcIjtcblxuICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShvYmopKSB7XG4gICAgICBzd2l0Y2ggKG9iai5uYW1lKSB7XG4gICAgICAgIGNhc2UgXCJVc2VOb25lXCI6XG4gICAgICAgIGNhc2UgXCJVc2VPdXRsaW5lc1wiOlxuICAgICAgICBjYXNlIFwiVXNlVGh1bWJzXCI6XG4gICAgICAgIGNhc2UgXCJGdWxsU2NyZWVuXCI6XG4gICAgICAgIGNhc2UgXCJVc2VPQ1wiOlxuICAgICAgICBjYXNlIFwiVXNlQXR0YWNobWVudHNcIjpcbiAgICAgICAgICBwYWdlTW9kZSA9IG9iai5uYW1lO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcInBhZ2VNb2RlXCIsIHBhZ2VNb2RlKTtcbiAgfVxuXG4gIGdldCB2aWV3ZXJQcmVmZXJlbmNlcygpIHtcbiAgICBjb25zdCBWaWV3ZXJQcmVmZXJlbmNlc1ZhbGlkYXRvcnMgPSB7XG4gICAgICBIaWRlVG9vbGJhcjogX3V0aWwuaXNCb29sLFxuICAgICAgSGlkZU1lbnViYXI6IF91dGlsLmlzQm9vbCxcbiAgICAgIEhpZGVXaW5kb3dVSTogX3V0aWwuaXNCb29sLFxuICAgICAgRml0V2luZG93OiBfdXRpbC5pc0Jvb2wsXG4gICAgICBDZW50ZXJXaW5kb3c6IF91dGlsLmlzQm9vbCxcbiAgICAgIERpc3BsYXlEb2NUaXRsZTogX3V0aWwuaXNCb29sLFxuICAgICAgTm9uRnVsbFNjcmVlblBhZ2VNb2RlOiBfcHJpbWl0aXZlcy5pc05hbWUsXG4gICAgICBEaXJlY3Rpb246IF9wcmltaXRpdmVzLmlzTmFtZSxcbiAgICAgIFZpZXdBcmVhOiBfcHJpbWl0aXZlcy5pc05hbWUsXG4gICAgICBWaWV3Q2xpcDogX3ByaW1pdGl2ZXMuaXNOYW1lLFxuICAgICAgUHJpbnRBcmVhOiBfcHJpbWl0aXZlcy5pc05hbWUsXG4gICAgICBQcmludENsaXA6IF9wcmltaXRpdmVzLmlzTmFtZSxcbiAgICAgIFByaW50U2NhbGluZzogX3ByaW1pdGl2ZXMuaXNOYW1lLFxuICAgICAgRHVwbGV4OiBfcHJpbWl0aXZlcy5pc05hbWUsXG4gICAgICBQaWNrVHJheUJ5UERGU2l6ZTogX3V0aWwuaXNCb29sLFxuICAgICAgUHJpbnRQYWdlUmFuZ2U6IEFycmF5LmlzQXJyYXksXG4gICAgICBOdW1Db3BpZXM6IE51bWJlci5pc0ludGVnZXJcbiAgICB9O1xuXG4gICAgY29uc3Qgb2JqID0gdGhpcy5fY2F0RGljdC5nZXQoXCJWaWV3ZXJQcmVmZXJlbmNlc1wiKTtcblxuICAgIGxldCBwcmVmcyA9IG51bGw7XG5cbiAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkob2JqKSkge1xuICAgICAgZm9yIChjb25zdCBrZXkgaW4gVmlld2VyUHJlZmVyZW5jZXNWYWxpZGF0b3JzKSB7XG4gICAgICAgIGlmICghb2JqLmhhcyhrZXkpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWx1ZSA9IG9iai5nZXQoa2V5KTtcblxuICAgICAgICBpZiAoIVZpZXdlclByZWZlcmVuY2VzVmFsaWRhdG9yc1trZXldKHZhbHVlKSkge1xuICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShgQmFkIHZhbHVlIGluIFZpZXdlclByZWZlcmVuY2VzIGZvciBcIiR7a2V5fVwiLmApO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHByZWZWYWx1ZTtcblxuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgIGNhc2UgXCJOb25GdWxsU2NyZWVuUGFnZU1vZGVcIjpcbiAgICAgICAgICAgIHN3aXRjaCAodmFsdWUubmFtZSkge1xuICAgICAgICAgICAgICBjYXNlIFwiVXNlTm9uZVwiOlxuICAgICAgICAgICAgICBjYXNlIFwiVXNlT3V0bGluZXNcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIlVzZVRodW1ic1wiOlxuICAgICAgICAgICAgICBjYXNlIFwiVXNlT0NcIjpcbiAgICAgICAgICAgICAgICBwcmVmVmFsdWUgPSB2YWx1ZS5uYW1lO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcHJlZlZhbHVlID0gXCJVc2VOb25lXCI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIkRpcmVjdGlvblwiOlxuICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS5uYW1lKSB7XG4gICAgICAgICAgICAgIGNhc2UgXCJMMlJcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIlIyTFwiOlxuICAgICAgICAgICAgICAgIHByZWZWYWx1ZSA9IHZhbHVlLm5hbWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBwcmVmVmFsdWUgPSBcIkwyUlwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJWaWV3QXJlYVwiOlxuICAgICAgICAgIGNhc2UgXCJWaWV3Q2xpcFwiOlxuICAgICAgICAgIGNhc2UgXCJQcmludEFyZWFcIjpcbiAgICAgICAgICBjYXNlIFwiUHJpbnRDbGlwXCI6XG4gICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLm5hbWUpIHtcbiAgICAgICAgICAgICAgY2FzZSBcIk1lZGlhQm94XCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJDcm9wQm94XCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJCbGVlZEJveFwiOlxuICAgICAgICAgICAgICBjYXNlIFwiVHJpbUJveFwiOlxuICAgICAgICAgICAgICBjYXNlIFwiQXJ0Qm94XCI6XG4gICAgICAgICAgICAgICAgcHJlZlZhbHVlID0gdmFsdWUubmFtZTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHByZWZWYWx1ZSA9IFwiQ3JvcEJveFwiO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJQcmludFNjYWxpbmdcIjpcbiAgICAgICAgICAgIHN3aXRjaCAodmFsdWUubmFtZSkge1xuICAgICAgICAgICAgICBjYXNlIFwiTm9uZVwiOlxuICAgICAgICAgICAgICBjYXNlIFwiQXBwRGVmYXVsdFwiOlxuICAgICAgICAgICAgICAgIHByZWZWYWx1ZSA9IHZhbHVlLm5hbWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBwcmVmVmFsdWUgPSBcIkFwcERlZmF1bHRcIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiRHVwbGV4XCI6XG4gICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLm5hbWUpIHtcbiAgICAgICAgICAgICAgY2FzZSBcIlNpbXBsZXhcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIkR1cGxleEZsaXBTaG9ydEVkZ2VcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIkR1cGxleEZsaXBMb25nRWRnZVwiOlxuICAgICAgICAgICAgICAgIHByZWZWYWx1ZSA9IHZhbHVlLm5hbWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBwcmVmVmFsdWUgPSBcIk5vbmVcIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwiUHJpbnRQYWdlUmFuZ2VcIjpcbiAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IHZhbHVlLmxlbmd0aDtcblxuICAgICAgICAgICAgaWYgKGxlbmd0aCAlIDIgIT09IDApIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGlzVmFsaWQgPSB2YWx1ZS5ldmVyeSgocGFnZSwgaSwgYXJyKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKHBhZ2UpICYmIHBhZ2UgPiAwICYmIChpID09PSAwIHx8IHBhZ2UgPj0gYXJyW2kgLSAxXSkgJiYgcGFnZSA8PSB0aGlzLm51bVBhZ2VzO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChpc1ZhbGlkKSB7XG4gICAgICAgICAgICAgIHByZWZWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJOdW1Db3BpZXNcIjpcbiAgICAgICAgICAgIGlmICh2YWx1ZSA+IDApIHtcbiAgICAgICAgICAgICAgcHJlZlZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgdmlld2VyUHJlZmVyZW5jZXMgLSBleHBlY3RlZCBhIGJvb2xlYW4gdmFsdWUgZm9yOiAke2tleX1gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJlZlZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJlZlZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAoIXByZWZzKSB7XG4gICAgICAgICAgICBwcmVmcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcHJlZnNba2V5XSA9IHByZWZWYWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoYEJhZCB2YWx1ZSBpbiBWaWV3ZXJQcmVmZXJlbmNlcyBmb3IgXCIke2tleX1cIi5gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcInZpZXdlclByZWZlcmVuY2VzXCIsIHByZWZzKTtcbiAgfVxuXG4gIGdldCBvcGVuQWN0aW9uKCkge1xuICAgIGNvbnN0IG9iaiA9IHRoaXMuX2NhdERpY3QuZ2V0KFwiT3BlbkFjdGlvblwiKTtcblxuICAgIGNvbnN0IG9wZW5BY3Rpb24gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKG9iaikpIHtcbiAgICAgIGNvbnN0IGRlc3REaWN0ID0gbmV3IF9wcmltaXRpdmVzLkRpY3QodGhpcy54cmVmKTtcbiAgICAgIGRlc3REaWN0LnNldChcIkFcIiwgb2JqKTtcbiAgICAgIGNvbnN0IHJlc3VsdE9iaiA9IHtcbiAgICAgICAgdXJsOiBudWxsLFxuICAgICAgICBkZXN0OiBudWxsLFxuICAgICAgICBhY3Rpb246IG51bGxcbiAgICAgIH07XG4gICAgICBDYXRhbG9nLnBhcnNlRGVzdERpY3Rpb25hcnkoe1xuICAgICAgICBkZXN0RGljdCxcbiAgICAgICAgcmVzdWx0T2JqXG4gICAgICB9KTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0T2JqLmRlc3QpKSB7XG4gICAgICAgIG9wZW5BY3Rpb24uZGVzdCA9IHJlc3VsdE9iai5kZXN0O1xuICAgICAgfSBlbHNlIGlmIChyZXN1bHRPYmouYWN0aW9uKSB7XG4gICAgICAgIG9wZW5BY3Rpb24uYWN0aW9uID0gcmVzdWx0T2JqLmFjdGlvbjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgb3BlbkFjdGlvbi5kZXN0ID0gb2JqO1xuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIm9wZW5BY3Rpb25cIiwgKDAsIF91dGlsLm9iamVjdFNpemUpKG9wZW5BY3Rpb24pID4gMCA/IG9wZW5BY3Rpb24gOiBudWxsKTtcbiAgfVxuXG4gIGdldCBhdHRhY2htZW50cygpIHtcbiAgICBjb25zdCBvYmogPSB0aGlzLl9jYXREaWN0LmdldChcIk5hbWVzXCIpO1xuXG4gICAgbGV0IGF0dGFjaG1lbnRzID0gbnVsbDtcblxuICAgIGlmIChvYmogaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5EaWN0ICYmIG9iai5oYXMoXCJFbWJlZGRlZEZpbGVzXCIpKSB7XG4gICAgICBjb25zdCBuYW1lVHJlZSA9IG5ldyBfbmFtZV9udW1iZXJfdHJlZS5OYW1lVHJlZShvYmouZ2V0UmF3KFwiRW1iZWRkZWRGaWxlc1wiKSwgdGhpcy54cmVmKTtcblxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgbmFtZVRyZWUuZ2V0QWxsKCkpIHtcbiAgICAgICAgY29uc3QgZnMgPSBuZXcgX2ZpbGVfc3BlYy5GaWxlU3BlYyh2YWx1ZSwgdGhpcy54cmVmKTtcblxuICAgICAgICBpZiAoIWF0dGFjaG1lbnRzKSB7XG4gICAgICAgICAgYXR0YWNobWVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXR0YWNobWVudHNbKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShrZXkpXSA9IGZzLnNlcmlhbGl6YWJsZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJhdHRhY2htZW50c1wiLCBhdHRhY2htZW50cyk7XG4gIH1cblxuICBnZXQgeGZhSW1hZ2VzKCkge1xuICAgIGNvbnN0IG9iaiA9IHRoaXMuX2NhdERpY3QuZ2V0KFwiTmFtZXNcIik7XG5cbiAgICBsZXQgeGZhSW1hZ2VzID0gbnVsbDtcblxuICAgIGlmIChvYmogaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5EaWN0ICYmIG9iai5oYXMoXCJYRkFJbWFnZXNcIikpIHtcbiAgICAgIGNvbnN0IG5hbWVUcmVlID0gbmV3IF9uYW1lX251bWJlcl90cmVlLk5hbWVUcmVlKG9iai5nZXRSYXcoXCJYRkFJbWFnZXNcIiksIHRoaXMueHJlZik7XG5cbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIG5hbWVUcmVlLmdldEFsbCgpKSB7XG4gICAgICAgIGlmICgheGZhSW1hZ2VzKSB7XG4gICAgICAgICAgeGZhSW1hZ2VzID0gbmV3IF9wcmltaXRpdmVzLkRpY3QodGhpcy54cmVmKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHhmYUltYWdlcy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwieGZhSW1hZ2VzXCIsIHhmYUltYWdlcyk7XG4gIH1cblxuICBfY29sbGVjdEphdmFTY3JpcHQoKSB7XG4gICAgY29uc3Qgb2JqID0gdGhpcy5fY2F0RGljdC5nZXQoXCJOYW1lc1wiKTtcblxuICAgIGxldCBqYXZhU2NyaXB0ID0gbnVsbDtcblxuICAgIGZ1bmN0aW9uIGFwcGVuZElmSmF2YVNjcmlwdERpY3QobmFtZSwganNEaWN0KSB7XG4gICAgICBpZiAoIShqc0RpY3QgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5EaWN0KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoanNEaWN0LmdldChcIlNcIiksIFwiSmF2YVNjcmlwdFwiKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCBqcyA9IGpzRGljdC5nZXQoXCJKU1wiKTtcblxuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkoanMpKSB7XG4gICAgICAgIGpzID0ganMuZ2V0U3RyaW5nKCk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBqcyAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChqYXZhU2NyaXB0ID09PSBudWxsKSB7XG4gICAgICAgIGphdmFTY3JpcHQgPSBuZXcgTWFwKCk7XG4gICAgICB9XG5cbiAgICAgIGphdmFTY3JpcHQuc2V0KG5hbWUsICgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykoanMpKTtcbiAgICB9XG5cbiAgICBpZiAob2JqIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCAmJiBvYmouaGFzKFwiSmF2YVNjcmlwdFwiKSkge1xuICAgICAgY29uc3QgbmFtZVRyZWUgPSBuZXcgX25hbWVfbnVtYmVyX3RyZWUuTmFtZVRyZWUob2JqLmdldFJhdyhcIkphdmFTY3JpcHRcIiksIHRoaXMueHJlZik7XG5cbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIG5hbWVUcmVlLmdldEFsbCgpKSB7XG4gICAgICAgIGFwcGVuZElmSmF2YVNjcmlwdERpY3Qoa2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb3BlbkFjdGlvbiA9IHRoaXMuX2NhdERpY3QuZ2V0KFwiT3BlbkFjdGlvblwiKTtcblxuICAgIGlmIChvcGVuQWN0aW9uKSB7XG4gICAgICBhcHBlbmRJZkphdmFTY3JpcHREaWN0KFwiT3BlbkFjdGlvblwiLCBvcGVuQWN0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gamF2YVNjcmlwdDtcbiAgfVxuXG4gIGdldCBqYXZhU2NyaXB0KCkge1xuICAgIGNvbnN0IGphdmFTY3JpcHQgPSB0aGlzLl9jb2xsZWN0SmF2YVNjcmlwdCgpO1xuXG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiamF2YVNjcmlwdFwiLCBqYXZhU2NyaXB0ID8gWy4uLmphdmFTY3JpcHQudmFsdWVzKCldIDogbnVsbCk7XG4gIH1cblxuICBnZXQganNBY3Rpb25zKCkge1xuICAgIGNvbnN0IGphdmFTY3JpcHQgPSB0aGlzLl9jb2xsZWN0SmF2YVNjcmlwdCgpO1xuXG4gICAgbGV0IGFjdGlvbnMgPSAoMCwgX2NvcmVfdXRpbHMuY29sbGVjdEFjdGlvbnMpKHRoaXMueHJlZiwgdGhpcy5fY2F0RGljdCwgX3V0aWwuRG9jdW1lbnRBY3Rpb25FdmVudFR5cGUpO1xuXG4gICAgaWYgKGphdmFTY3JpcHQpIHtcbiAgICAgIGlmICghYWN0aW9ucykge1xuICAgICAgICBhY3Rpb25zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIGphdmFTY3JpcHQpIHtcbiAgICAgICAgaWYgKGtleSBpbiBhY3Rpb25zKSB7XG4gICAgICAgICAgYWN0aW9uc1trZXldLnB1c2godmFsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhY3Rpb25zW2tleV0gPSBbdmFsXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcImpzQWN0aW9uc1wiLCBhY3Rpb25zKTtcbiAgfVxuXG4gIGZvbnRGYWxsYmFjayhpZCwgaGFuZGxlcikge1xuICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgdGhpcy5mb250Q2FjaGUuZm9yRWFjaChmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgcHJvbWlzZXMucHVzaChwcm9taXNlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4odHJhbnNsYXRlZEZvbnRzID0+IHtcbiAgICAgIGZvciAoY29uc3QgdHJhbnNsYXRlZEZvbnQgb2YgdHJhbnNsYXRlZEZvbnRzKSB7XG4gICAgICAgIGlmICh0cmFuc2xhdGVkRm9udC5sb2FkZWROYW1lID09PSBpZCkge1xuICAgICAgICAgIHRyYW5zbGF0ZWRGb250LmZhbGxiYWNrKGhhbmRsZXIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY2xlYW51cChtYW51YWxseVRyaWdnZXJlZCA9IGZhbHNlKSB7XG4gICAgKDAsIF9wcmltaXRpdmVzLmNsZWFyUHJpbWl0aXZlQ2FjaGVzKSgpO1xuICAgIHRoaXMuZ2xvYmFsSW1hZ2VDYWNoZS5jbGVhcihtYW51YWxseVRyaWdnZXJlZCk7XG4gICAgdGhpcy5wYWdlS2lkc0NvdW50Q2FjaGUuY2xlYXIoKTtcbiAgICB0aGlzLnBhZ2VJbmRleENhY2hlLmNsZWFyKCk7XG4gICAgdGhpcy5ub25CbGVuZE1vZGVzU2V0LmNsZWFyKCk7XG4gICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICB0aGlzLmZvbnRDYWNoZS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICBwcm9taXNlcy5wdXNoKHByb21pc2UpO1xuICAgIH0pO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbih0cmFuc2xhdGVkRm9udHMgPT4ge1xuICAgICAgZm9yIChjb25zdCB7XG4gICAgICAgIGRpY3RcbiAgICAgIH0gb2YgdHJhbnNsYXRlZEZvbnRzKSB7XG4gICAgICAgIGRlbGV0ZSBkaWN0LmNhY2hlS2V5O1xuICAgICAgfVxuXG4gICAgICB0aGlzLmZvbnRDYWNoZS5jbGVhcigpO1xuICAgICAgdGhpcy5idWlsdEluQ01hcENhY2hlLmNsZWFyKCk7XG4gICAgICB0aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZS5jbGVhcigpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0UGFnZURpY3QocGFnZUluZGV4KSB7XG4gICAgY29uc3QgY2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICBjb25zdCBub2Rlc1RvVmlzaXQgPSBbdGhpcy50b3BsZXZlbFBhZ2VzRGljdF07XG4gICAgY29uc3QgdmlzaXRlZE5vZGVzID0gbmV3IF9wcmltaXRpdmVzLlJlZlNldCgpO1xuXG4gICAgY29uc3QgcGFnZXNSZWYgPSB0aGlzLl9jYXREaWN0LmdldFJhdyhcIlBhZ2VzXCIpO1xuXG4gICAgaWYgKHBhZ2VzUmVmIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuUmVmKSB7XG4gICAgICB2aXNpdGVkTm9kZXMucHV0KHBhZ2VzUmVmKTtcbiAgICB9XG5cbiAgICBjb25zdCB4cmVmID0gdGhpcy54cmVmLFxuICAgICAgICAgIHBhZ2VLaWRzQ291bnRDYWNoZSA9IHRoaXMucGFnZUtpZHNDb3VudENhY2hlO1xuICAgIGxldCBjdXJyZW50UGFnZUluZGV4ID0gMDtcblxuICAgIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICB3aGlsZSAobm9kZXNUb1Zpc2l0Lmxlbmd0aCkge1xuICAgICAgICBjb25zdCBjdXJyZW50Tm9kZSA9IG5vZGVzVG9WaXNpdC5wb3AoKTtcblxuICAgICAgICBpZiAoY3VycmVudE5vZGUgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5SZWYpIHtcbiAgICAgICAgICBjb25zdCBjb3VudCA9IHBhZ2VLaWRzQ291bnRDYWNoZS5nZXQoY3VycmVudE5vZGUpO1xuXG4gICAgICAgICAgaWYgKGNvdW50ID49IDAgJiYgY3VycmVudFBhZ2VJbmRleCArIGNvdW50IDw9IHBhZ2VJbmRleCkge1xuICAgICAgICAgICAgY3VycmVudFBhZ2VJbmRleCArPSBjb3VudDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh2aXNpdGVkTm9kZXMuaGFzKGN1cnJlbnROb2RlKSkge1xuICAgICAgICAgICAgY2FwYWJpbGl0eS5yZWplY3QobmV3IF91dGlsLkZvcm1hdEVycm9yKFwiUGFnZXMgdHJlZSBjb250YWlucyBjaXJjdWxhciByZWZlcmVuY2UuXCIpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2aXNpdGVkTm9kZXMucHV0KGN1cnJlbnROb2RlKTtcbiAgICAgICAgICB4cmVmLmZldGNoQXN5bmMoY3VycmVudE5vZGUpLnRoZW4oZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKG9iaiwgXCJQYWdlXCIpIHx8ICgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKG9iaikgJiYgIW9iai5oYXMoXCJLaWRzXCIpKSB7XG4gICAgICAgICAgICAgIGlmIChjdXJyZW50Tm9kZSAmJiAhcGFnZUtpZHNDb3VudENhY2hlLmhhcyhjdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgICAgICAgICBwYWdlS2lkc0NvdW50Q2FjaGUucHV0KGN1cnJlbnROb2RlLCAxKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChwYWdlSW5kZXggPT09IGN1cnJlbnRQYWdlSW5kZXgpIHtcbiAgICAgICAgICAgICAgICBjYXBhYmlsaXR5LnJlc29sdmUoW29iaiwgY3VycmVudE5vZGVdKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UGFnZUluZGV4Kys7XG4gICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBub2Rlc1RvVmlzaXQucHVzaChvYmopO1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgIH0sIGNhcGFiaWxpdHkucmVqZWN0KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIShjdXJyZW50Tm9kZSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpKSB7XG4gICAgICAgICAgY2FwYWJpbGl0eS5yZWplY3QobmV3IF91dGlsLkZvcm1hdEVycm9yKFwiUGFnZSBkaWN0aW9uYXJ5IGtpZCByZWZlcmVuY2UgcG9pbnRzIHRvIHdyb25nIHR5cGUgb2Ygb2JqZWN0LlwiKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGNvdW50O1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY291bnQgPSBjdXJyZW50Tm9kZS5nZXQoXCJDb3VudFwiKTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICBpZiAoZXggaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICAgICAgdGhyb3cgZXg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIoY291bnQpICYmIGNvdW50ID49IDApIHtcbiAgICAgICAgICBjb25zdCBvYmpJZCA9IGN1cnJlbnROb2RlLm9iaklkO1xuXG4gICAgICAgICAgaWYgKG9iaklkICYmICFwYWdlS2lkc0NvdW50Q2FjaGUuaGFzKG9iaklkKSkge1xuICAgICAgICAgICAgcGFnZUtpZHNDb3VudENhY2hlLnB1dChvYmpJZCwgY291bnQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjdXJyZW50UGFnZUluZGV4ICsgY291bnQgPD0gcGFnZUluZGV4KSB7XG4gICAgICAgICAgICBjdXJyZW50UGFnZUluZGV4ICs9IGNvdW50O1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGtpZHM7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBraWRzID0gY3VycmVudE5vZGUuZ2V0KFwiS2lkc1wiKTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICBpZiAoZXggaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICAgICAgdGhyb3cgZXg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGtpZHMpKSB7XG4gICAgICAgICAgbGV0IHR5cGU7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdHlwZSA9IGN1cnJlbnROb2RlLmdldChcIlR5cGVcIik7XG4gICAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgIGlmIChleCBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgIHRocm93IGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKSh0eXBlLCBcIlBhZ2VcIikgfHwgIWN1cnJlbnROb2RlLmhhcyhcIlR5cGVcIikgJiYgY3VycmVudE5vZGUuaGFzKFwiQ29udGVudHNcIikpIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UGFnZUluZGV4ID09PSBwYWdlSW5kZXgpIHtcbiAgICAgICAgICAgICAgY2FwYWJpbGl0eS5yZXNvbHZlKFtjdXJyZW50Tm9kZSwgbnVsbF0pO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnRQYWdlSW5kZXgrKztcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNhcGFiaWxpdHkucmVqZWN0KG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIlBhZ2UgZGljdGlvbmFyeSBraWRzIG9iamVjdCBpcyBub3QgYW4gYXJyYXkuXCIpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBsYXN0ID0ga2lkcy5sZW5ndGggLSAxOyBsYXN0ID49IDA7IGxhc3QtLSkge1xuICAgICAgICAgIG5vZGVzVG9WaXNpdC5wdXNoKGtpZHNbbGFzdF0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNhcGFiaWxpdHkucmVqZWN0KG5ldyBFcnJvcihgUGFnZSBpbmRleCAke3BhZ2VJbmRleH0gbm90IGZvdW5kLmApKTtcbiAgICB9XG5cbiAgICBuZXh0KCk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxuXG4gIGdldEFsbFBhZ2VEaWN0cyhyZWNvdmVyeU1vZGUgPSBmYWxzZSkge1xuICAgIGNvbnN0IHF1ZXVlID0gW3tcbiAgICAgIGN1cnJlbnROb2RlOiB0aGlzLnRvcGxldmVsUGFnZXNEaWN0LFxuICAgICAgcG9zSW5LaWRzOiAwXG4gICAgfV07XG4gICAgY29uc3QgdmlzaXRlZE5vZGVzID0gbmV3IF9wcmltaXRpdmVzLlJlZlNldCgpO1xuXG4gICAgY29uc3QgcGFnZXNSZWYgPSB0aGlzLl9jYXREaWN0LmdldFJhdyhcIlBhZ2VzXCIpO1xuXG4gICAgaWYgKHBhZ2VzUmVmIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuUmVmKSB7XG4gICAgICB2aXNpdGVkTm9kZXMucHV0KHBhZ2VzUmVmKTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXAgPSBuZXcgTWFwKCk7XG4gICAgbGV0IHBhZ2VJbmRleCA9IDA7XG5cbiAgICBmdW5jdGlvbiBhZGRQYWdlRGljdChwYWdlRGljdCwgcGFnZVJlZikge1xuICAgICAgbWFwLnNldChwYWdlSW5kZXgrKywgW3BhZ2VEaWN0LCBwYWdlUmVmXSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkUGFnZUVycm9yKGVycm9yKSB7XG4gICAgICBtYXAuc2V0KHBhZ2VJbmRleCsrLCBbZXJyb3IsIG51bGxdKTtcbiAgICB9XG5cbiAgICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgcXVldWVJdGVtID0gcXVldWVbcXVldWUubGVuZ3RoIC0gMV07XG4gICAgICBjb25zdCB7XG4gICAgICAgIGN1cnJlbnROb2RlLFxuICAgICAgICBwb3NJbktpZHNcbiAgICAgIH0gPSBxdWV1ZUl0ZW07XG4gICAgICBsZXQga2lkcztcblxuICAgICAgdHJ5IHtcbiAgICAgICAga2lkcyA9IGN1cnJlbnROb2RlLmdldChcIktpZHNcIik7XG4gICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICBpZiAoZXggaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICAgIHRocm93IGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV4IGluc3RhbmNlb2YgX2NvcmVfdXRpbHMuWFJlZkVudHJ5RXhjZXB0aW9uICYmICFyZWNvdmVyeU1vZGUpIHtcbiAgICAgICAgICB0aHJvdyBleDtcbiAgICAgICAgfVxuXG4gICAgICAgIGFkZFBhZ2VFcnJvcihleCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoa2lkcykpIHtcbiAgICAgICAgYWRkUGFnZUVycm9yKG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIlBhZ2UgZGljdGlvbmFyeSBraWRzIG9iamVjdCBpcyBub3QgYW4gYXJyYXkuXCIpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChwb3NJbktpZHMgPj0ga2lkcy5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUucG9wKCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBraWRPYmogPSBraWRzW3Bvc0luS2lkc107XG4gICAgICBsZXQgb2JqO1xuXG4gICAgICBpZiAoa2lkT2JqIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuUmVmKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgb2JqID0gdGhpcy54cmVmLmZldGNoKGtpZE9iaik7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgaWYgKGV4IGluc3RhbmNlb2YgX2NvcmVfdXRpbHMuTWlzc2luZ0RhdGFFeGNlcHRpb24pIHtcbiAgICAgICAgICAgIHRocm93IGV4O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChleCBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLlhSZWZFbnRyeUV4Y2VwdGlvbiAmJiAhcmVjb3ZlcnlNb2RlKSB7XG4gICAgICAgICAgICB0aHJvdyBleDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBhZGRQYWdlRXJyb3IoZXgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZpc2l0ZWROb2Rlcy5oYXMoa2lkT2JqKSkge1xuICAgICAgICAgIGFkZFBhZ2VFcnJvcihuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJQYWdlcyB0cmVlIGNvbnRhaW5zIGNpcmN1bGFyIHJlZmVyZW5jZS5cIikpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdmlzaXRlZE5vZGVzLnB1dChraWRPYmopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JqID0ga2lkT2JqO1xuICAgICAgfVxuXG4gICAgICBpZiAoIShvYmogaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5EaWN0KSkge1xuICAgICAgICBhZGRQYWdlRXJyb3IobmV3IF91dGlsLkZvcm1hdEVycm9yKFwiUGFnZSBkaWN0aW9uYXJ5IGtpZCByZWZlcmVuY2UgcG9pbnRzIHRvIHdyb25nIHR5cGUgb2Ygb2JqZWN0LlwiKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkob2JqLCBcIlBhZ2VcIikgfHwgIW9iai5oYXMoXCJLaWRzXCIpKSB7XG4gICAgICAgIGFkZFBhZ2VEaWN0KG9iaiwga2lkT2JqIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuUmVmID8ga2lkT2JqIDogbnVsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZS5wdXNoKHtcbiAgICAgICAgICBjdXJyZW50Tm9kZTogb2JqLFxuICAgICAgICAgIHBvc0luS2lkczogMFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcXVldWVJdGVtLnBvc0luS2lkcysrO1xuICAgIH1cblxuICAgIHJldHVybiBtYXA7XG4gIH1cblxuICBnZXRQYWdlSW5kZXgocGFnZVJlZikge1xuICAgIGNvbnN0IGNhY2hlZFBhZ2VJbmRleCA9IHRoaXMucGFnZUluZGV4Q2FjaGUuZ2V0KHBhZ2VSZWYpO1xuXG4gICAgaWYgKGNhY2hlZFBhZ2VJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNhY2hlZFBhZ2VJbmRleCk7XG4gICAgfVxuXG4gICAgY29uc3QgeHJlZiA9IHRoaXMueHJlZjtcblxuICAgIGZ1bmN0aW9uIHBhZ2VzQmVmb3JlUmVmKGtpZFJlZikge1xuICAgICAgbGV0IHRvdGFsID0gMCxcbiAgICAgICAgICBwYXJlbnRSZWY7XG4gICAgICByZXR1cm4geHJlZi5mZXRjaEFzeW5jKGtpZFJlZikudGhlbihmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzUmVmc0VxdWFsKShraWRSZWYsIHBhZ2VSZWYpICYmICEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShub2RlLCBcIlBhZ2VcIikgJiYgISgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShub2RlKSAmJiAhbm9kZS5oYXMoXCJUeXBlXCIpICYmIG5vZGUuaGFzKFwiQ29udGVudHNcIikpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiVGhlIHJlZmVyZW5jZSBkb2VzIG5vdCBwb2ludCB0byBhIC9QYWdlIGRpY3Rpb25hcnkuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKG5vZGUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiTm9kZSBtdXN0IGJlIGEgZGljdGlvbmFyeS5cIik7XG4gICAgICAgIH1cblxuICAgICAgICBwYXJlbnRSZWYgPSBub2RlLmdldFJhdyhcIlBhcmVudFwiKTtcbiAgICAgICAgcmV0dXJuIG5vZGUuZ2V0QXN5bmMoXCJQYXJlbnRcIik7XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgaWYgKCFwYXJlbnQpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkocGFyZW50KSkge1xuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIlBhcmVudCBtdXN0IGJlIGEgZGljdGlvbmFyeS5cIik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGFyZW50LmdldEFzeW5jKFwiS2lkc1wiKTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKGtpZHMpIHtcbiAgICAgICAgaWYgKCFraWRzKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBraWRQcm9taXNlcyA9IFtdO1xuICAgICAgICBsZXQgZm91bmQgPSBmYWxzZTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBraWRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBraWQgPSBraWRzW2ldO1xuXG4gICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKGtpZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIktpZCBtdXN0IGJlIGEgcmVmZXJlbmNlLlwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzUmVmc0VxdWFsKShraWQsIGtpZFJlZikpIHtcbiAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGtpZFByb21pc2VzLnB1c2goeHJlZi5mZXRjaEFzeW5jKGtpZCkudGhlbihmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKG9iaikpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiS2lkIG5vZGUgbXVzdCBiZSBhIGRpY3Rpb25hcnkuXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAob2JqLmhhcyhcIkNvdW50XCIpKSB7XG4gICAgICAgICAgICAgIHRvdGFsICs9IG9iai5nZXQoXCJDb3VudFwiKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRvdGFsKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIktpZCByZWZlcmVuY2Ugbm90IGZvdW5kIGluIHBhcmVudCdzIGtpZHMuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGtpZFByb21pc2VzKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gW3RvdGFsLCBwYXJlbnRSZWZdO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGxldCB0b3RhbCA9IDA7XG5cbiAgICBjb25zdCBuZXh0ID0gcmVmID0+IHBhZ2VzQmVmb3JlUmVmKHJlZikudGhlbihhcmdzID0+IHtcbiAgICAgIGlmICghYXJncykge1xuICAgICAgICB0aGlzLnBhZ2VJbmRleENhY2hlLnB1dChwYWdlUmVmLCB0b3RhbCk7XG4gICAgICAgIHJldHVybiB0b3RhbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgW2NvdW50LCBwYXJlbnRSZWZdID0gYXJncztcbiAgICAgIHRvdGFsICs9IGNvdW50O1xuICAgICAgcmV0dXJuIG5leHQocGFyZW50UmVmKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBuZXh0KHBhZ2VSZWYpO1xuICB9XG5cbiAgc3RhdGljIHBhcnNlRGVzdERpY3Rpb25hcnkocGFyYW1zKSB7XG4gICAgY29uc3QgZGVzdERpY3QgPSBwYXJhbXMuZGVzdERpY3Q7XG5cbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGRlc3REaWN0KSkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKFwicGFyc2VEZXN0RGljdGlvbmFyeTogYGRlc3REaWN0YCBtdXN0IGJlIGEgZGljdGlvbmFyeS5cIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0T2JqID0gcGFyYW1zLnJlc3VsdE9iajtcblxuICAgIGlmICh0eXBlb2YgcmVzdWx0T2JqICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJwYXJzZURlc3REaWN0aW9uYXJ5OiBgcmVzdWx0T2JqYCBtdXN0IGJlIGFuIG9iamVjdC5cIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZG9jQmFzZVVybCA9IHBhcmFtcy5kb2NCYXNlVXJsIHx8IG51bGw7XG4gICAgbGV0IGFjdGlvbiA9IGRlc3REaWN0LmdldChcIkFcIiksXG4gICAgICAgIHVybCxcbiAgICAgICAgZGVzdDtcblxuICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoYWN0aW9uKSkge1xuICAgICAgaWYgKGRlc3REaWN0LmhhcyhcIkRlc3RcIikpIHtcbiAgICAgICAgYWN0aW9uID0gZGVzdERpY3QuZ2V0KFwiRGVzdFwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjdGlvbiA9IGRlc3REaWN0LmdldChcIkFBXCIpO1xuXG4gICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShhY3Rpb24pKSB7XG4gICAgICAgICAgaWYgKGFjdGlvbi5oYXMoXCJEXCIpKSB7XG4gICAgICAgICAgICBhY3Rpb24gPSBhY3Rpb24uZ2V0KFwiRFwiKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbi5oYXMoXCJVXCIpKSB7XG4gICAgICAgICAgICBhY3Rpb24gPSBhY3Rpb24uZ2V0KFwiVVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoYWN0aW9uKSkge1xuICAgICAgY29uc3QgYWN0aW9uVHlwZSA9IGFjdGlvbi5nZXQoXCJTXCIpO1xuXG4gICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGFjdGlvblR5cGUpKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShcInBhcnNlRGVzdERpY3Rpb25hcnk6IEludmFsaWQgdHlwZSBpbiBBY3Rpb24gZGljdGlvbmFyeS5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYWN0aW9uTmFtZSA9IGFjdGlvblR5cGUubmFtZTtcblxuICAgICAgc3dpdGNoIChhY3Rpb25OYW1lKSB7XG4gICAgICAgIGNhc2UgXCJSZXNldEZvcm1cIjpcbiAgICAgICAgICBjb25zdCBmbGFncyA9IGFjdGlvbi5nZXQoXCJGbGFnc1wiKTtcbiAgICAgICAgICBjb25zdCBpbmNsdWRlID0gKCgoMCwgX3V0aWwuaXNOdW0pKGZsYWdzKSA/IGZsYWdzIDogMCkgJiAxKSA9PT0gMDtcbiAgICAgICAgICBjb25zdCBmaWVsZHMgPSBbXTtcbiAgICAgICAgICBjb25zdCByZWZzID0gW107XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IG9iaiBvZiBhY3Rpb24uZ2V0KFwiRmllbGRzXCIpIHx8IFtdKSB7XG4gICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzUmVmKShvYmopKSB7XG4gICAgICAgICAgICAgIHJlZnMucHVzaChvYmoudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCgwLCBfdXRpbC5pc1N0cmluZykob2JqKSkge1xuICAgICAgICAgICAgICBmaWVsZHMucHVzaCgoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKG9iaikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlc3VsdE9iai5yZXNldEZvcm0gPSB7XG4gICAgICAgICAgICBmaWVsZHMsXG4gICAgICAgICAgICByZWZzLFxuICAgICAgICAgICAgaW5jbHVkZVxuICAgICAgICAgIH07XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIlVSSVwiOlxuICAgICAgICAgIHVybCA9IGFjdGlvbi5nZXQoXCJVUklcIik7XG5cbiAgICAgICAgICBpZiAodXJsIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuTmFtZSkge1xuICAgICAgICAgICAgdXJsID0gXCIvXCIgKyB1cmwubmFtZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiR29Ub1wiOlxuICAgICAgICAgIGRlc3QgPSBhY3Rpb24uZ2V0KFwiRFwiKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiTGF1bmNoXCI6XG4gICAgICAgIGNhc2UgXCJHb1RvUlwiOlxuICAgICAgICAgIGNvbnN0IHVybERpY3QgPSBhY3Rpb24uZ2V0KFwiRlwiKTtcblxuICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KSh1cmxEaWN0KSkge1xuICAgICAgICAgICAgdXJsID0gdXJsRGljdC5nZXQoXCJGXCIpIHx8IG51bGw7XG4gICAgICAgICAgfSBlbHNlIGlmICgoMCwgX3V0aWwuaXNTdHJpbmcpKHVybERpY3QpKSB7XG4gICAgICAgICAgICB1cmwgPSB1cmxEaWN0O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCByZW1vdGVEZXN0ID0gYWN0aW9uLmdldChcIkRcIik7XG5cbiAgICAgICAgICBpZiAocmVtb3RlRGVzdCkge1xuICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHJlbW90ZURlc3QpKSB7XG4gICAgICAgICAgICAgIHJlbW90ZURlc3QgPSByZW1vdGVEZXN0Lm5hbWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICgoMCwgX3V0aWwuaXNTdHJpbmcpKHVybCkpIHtcbiAgICAgICAgICAgICAgY29uc3QgYmFzZVVybCA9IHVybC5zcGxpdChcIiNcIilbMF07XG5cbiAgICAgICAgICAgICAgaWYgKCgwLCBfdXRpbC5pc1N0cmluZykocmVtb3RlRGVzdCkpIHtcbiAgICAgICAgICAgICAgICB1cmwgPSBiYXNlVXJsICsgXCIjXCIgKyByZW1vdGVEZXN0O1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmVtb3RlRGVzdCkpIHtcbiAgICAgICAgICAgICAgICB1cmwgPSBiYXNlVXJsICsgXCIjXCIgKyBKU09OLnN0cmluZ2lmeShyZW1vdGVEZXN0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG5ld1dpbmRvdyA9IGFjdGlvbi5nZXQoXCJOZXdXaW5kb3dcIik7XG5cbiAgICAgICAgICBpZiAoKDAsIF91dGlsLmlzQm9vbCkobmV3V2luZG93KSkge1xuICAgICAgICAgICAgcmVzdWx0T2JqLm5ld1dpbmRvdyA9IG5ld1dpbmRvdztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiTmFtZWRcIjpcbiAgICAgICAgICBjb25zdCBuYW1lZEFjdGlvbiA9IGFjdGlvbi5nZXQoXCJOXCIpO1xuXG4gICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKG5hbWVkQWN0aW9uKSkge1xuICAgICAgICAgICAgcmVzdWx0T2JqLmFjdGlvbiA9IG5hbWVkQWN0aW9uLm5hbWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIkphdmFTY3JpcHRcIjpcbiAgICAgICAgICBjb25zdCBqc0FjdGlvbiA9IGFjdGlvbi5nZXQoXCJKU1wiKTtcbiAgICAgICAgICBsZXQganM7XG5cbiAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShqc0FjdGlvbikpIHtcbiAgICAgICAgICAgIGpzID0ganNBY3Rpb24uZ2V0U3RyaW5nKCk7XG4gICAgICAgICAgfSBlbHNlIGlmICgoMCwgX3V0aWwuaXNTdHJpbmcpKGpzQWN0aW9uKSkge1xuICAgICAgICAgICAganMgPSBqc0FjdGlvbjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBqc1VSTCA9IGpzICYmICgwLCBfY29yZV91dGlscy5yZWNvdmVySnNVUkwpKCgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykoanMpKTtcblxuICAgICAgICAgIGlmIChqc1VSTCkge1xuICAgICAgICAgICAgdXJsID0ganNVUkwudXJsO1xuICAgICAgICAgICAgcmVzdWx0T2JqLm5ld1dpbmRvdyA9IGpzVVJMLm5ld1dpbmRvdztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChhY3Rpb25OYW1lID09PSBcIkphdmFTY3JpcHRcIiB8fCBhY3Rpb25OYW1lID09PSBcIlN1Ym1pdEZvcm1cIikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKGBwYXJzZURlc3REaWN0aW9uYXJ5IC0gdW5zdXBwb3J0ZWQgYWN0aW9uOiBcIiR7YWN0aW9uTmFtZX1cIi5gKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRlc3REaWN0LmhhcyhcIkRlc3RcIikpIHtcbiAgICAgIGRlc3QgPSBkZXN0RGljdC5nZXQoXCJEZXN0XCIpO1xuICAgIH1cblxuICAgIGlmICgoMCwgX3V0aWwuaXNTdHJpbmcpKHVybCkpIHtcbiAgICAgIGNvbnN0IGFic29sdXRlVXJsID0gKDAsIF91dGlsLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwpKHVybCwgZG9jQmFzZVVybCwge1xuICAgICAgICBhZGREZWZhdWx0UHJvdG9jb2w6IHRydWUsXG4gICAgICAgIHRyeUNvbnZlcnRFbmNvZGluZzogdHJ1ZVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChhYnNvbHV0ZVVybCkge1xuICAgICAgICByZXN1bHRPYmoudXJsID0gYWJzb2x1dGVVcmwuaHJlZjtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0T2JqLnVuc2FmZVVybCA9IHVybDtcbiAgICB9XG5cbiAgICBpZiAoZGVzdCkge1xuICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGRlc3QpKSB7XG4gICAgICAgIGRlc3QgPSBkZXN0Lm5hbWU7XG4gICAgICB9XG5cbiAgICAgIGlmICgoMCwgX3V0aWwuaXNTdHJpbmcpKGRlc3QpIHx8IEFycmF5LmlzQXJyYXkoZGVzdCkpIHtcbiAgICAgICAgcmVzdWx0T2JqLmRlc3QgPSBkZXN0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG59XG5cbmV4cG9ydHMuQ2F0YWxvZyA9IENhdGFsb2c7XG5cbi8qKiovIH0pLFxuLyogNjUgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuTnVtYmVyVHJlZSA9IGV4cG9ydHMuTmFtZVRyZWUgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfcHJpbWl0aXZlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNSk7XG5cbmNsYXNzIE5hbWVPck51bWJlclRyZWUge1xuICBjb25zdHJ1Y3Rvcihyb290LCB4cmVmLCB0eXBlKSB7XG4gICAgaWYgKHRoaXMuY29uc3RydWN0b3IgPT09IE5hbWVPck51bWJlclRyZWUpIHtcbiAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJDYW5ub3QgaW5pdGlhbGl6ZSBOYW1lT3JOdW1iZXJUcmVlLlwiKTtcbiAgICB9XG5cbiAgICB0aGlzLnJvb3QgPSByb290O1xuICAgIHRoaXMueHJlZiA9IHhyZWY7XG4gICAgdGhpcy5fdHlwZSA9IHR5cGU7XG4gIH1cblxuICBnZXRBbGwoKSB7XG4gICAgY29uc3QgbWFwID0gbmV3IE1hcCgpO1xuXG4gICAgaWYgKCF0aGlzLnJvb3QpIHtcbiAgICAgIHJldHVybiBtYXA7XG4gICAgfVxuXG4gICAgY29uc3QgeHJlZiA9IHRoaXMueHJlZjtcbiAgICBjb25zdCBwcm9jZXNzZWQgPSBuZXcgX3ByaW1pdGl2ZXMuUmVmU2V0KCk7XG4gICAgcHJvY2Vzc2VkLnB1dCh0aGlzLnJvb3QpO1xuICAgIGNvbnN0IHF1ZXVlID0gW3RoaXMucm9vdF07XG5cbiAgICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgb2JqID0geHJlZi5mZXRjaElmUmVmKHF1ZXVlLnNoaWZ0KCkpO1xuXG4gICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKG9iaikpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChvYmouaGFzKFwiS2lkc1wiKSkge1xuICAgICAgICBjb25zdCBraWRzID0gb2JqLmdldChcIktpZHNcIik7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0ga2lkcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgY29uc3Qga2lkID0ga2lkc1tpXTtcblxuICAgICAgICAgIGlmIChwcm9jZXNzZWQuaGFzKGtpZCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgRHVwbGljYXRlIGVudHJ5IGluIFwiJHt0aGlzLl90eXBlfVwiIHRyZWUuYCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcXVldWUucHVzaChraWQpO1xuICAgICAgICAgIHByb2Nlc3NlZC5wdXQoa2lkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlbnRyaWVzID0gb2JqLmdldCh0aGlzLl90eXBlKTtcblxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGVudHJpZXMpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBlbnRyaWVzLmxlbmd0aDsgaSA8IGlpOyBpICs9IDIpIHtcbiAgICAgICAgbWFwLnNldCh4cmVmLmZldGNoSWZSZWYoZW50cmllc1tpXSksIHhyZWYuZmV0Y2hJZlJlZihlbnRyaWVzW2kgKyAxXSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXA7XG4gIH1cblxuICBnZXQoa2V5KSB7XG4gICAgaWYgKCF0aGlzLnJvb3QpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHhyZWYgPSB0aGlzLnhyZWY7XG4gICAgbGV0IGtpZHNPckVudHJpZXMgPSB4cmVmLmZldGNoSWZSZWYodGhpcy5yb290KTtcbiAgICBsZXQgbG9vcENvdW50ID0gMDtcbiAgICBjb25zdCBNQVhfTEVWRUxTID0gMTA7XG5cbiAgICB3aGlsZSAoa2lkc09yRW50cmllcy5oYXMoXCJLaWRzXCIpKSB7XG4gICAgICBpZiAoKytsb29wQ291bnQgPiBNQVhfTEVWRUxTKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShgU2VhcmNoIGRlcHRoIGxpbWl0IHJlYWNoZWQgZm9yIFwiJHt0aGlzLl90eXBlfVwiIHRyZWUuYCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBraWRzID0ga2lkc09yRW50cmllcy5nZXQoXCJLaWRzXCIpO1xuXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoa2lkcykpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGxldCBsID0gMCxcbiAgICAgICAgICByID0ga2lkcy5sZW5ndGggLSAxO1xuXG4gICAgICB3aGlsZSAobCA8PSByKSB7XG4gICAgICAgIGNvbnN0IG0gPSBsICsgciA+PiAxO1xuICAgICAgICBjb25zdCBraWQgPSB4cmVmLmZldGNoSWZSZWYoa2lkc1ttXSk7XG4gICAgICAgIGNvbnN0IGxpbWl0cyA9IGtpZC5nZXQoXCJMaW1pdHNcIik7XG5cbiAgICAgICAgaWYgKGtleSA8IHhyZWYuZmV0Y2hJZlJlZihsaW1pdHNbMF0pKSB7XG4gICAgICAgICAgciA9IG0gLSAxO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA+IHhyZWYuZmV0Y2hJZlJlZihsaW1pdHNbMV0pKSB7XG4gICAgICAgICAgbCA9IG0gKyAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGtpZHNPckVudHJpZXMgPSB4cmVmLmZldGNoSWZSZWYoa2lkc1ttXSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGwgPiByKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGVudHJpZXMgPSBraWRzT3JFbnRyaWVzLmdldCh0aGlzLl90eXBlKTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGVudHJpZXMpKSB7XG4gICAgICBsZXQgbCA9IDAsXG4gICAgICAgICAgciA9IGVudHJpZXMubGVuZ3RoIC0gMjtcblxuICAgICAgd2hpbGUgKGwgPD0gcikge1xuICAgICAgICBjb25zdCB0bXAgPSBsICsgciA+PiAxLFxuICAgICAgICAgICAgICBtID0gdG1wICsgKHRtcCAmIDEpO1xuICAgICAgICBjb25zdCBjdXJyZW50S2V5ID0geHJlZi5mZXRjaElmUmVmKGVudHJpZXNbbV0pO1xuXG4gICAgICAgIGlmIChrZXkgPCBjdXJyZW50S2V5KSB7XG4gICAgICAgICAgciA9IG0gLSAyO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA+IGN1cnJlbnRLZXkpIHtcbiAgICAgICAgICBsID0gbSArIDI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHhyZWYuZmV0Y2hJZlJlZihlbnRyaWVzW20gKyAxXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIE5hbWVUcmVlIGV4dGVuZHMgTmFtZU9yTnVtYmVyVHJlZSB7XG4gIGNvbnN0cnVjdG9yKHJvb3QsIHhyZWYpIHtcbiAgICBzdXBlcihyb290LCB4cmVmLCBcIk5hbWVzXCIpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5OYW1lVHJlZSA9IE5hbWVUcmVlO1xuXG5jbGFzcyBOdW1iZXJUcmVlIGV4dGVuZHMgTmFtZU9yTnVtYmVyVHJlZSB7XG4gIGNvbnN0cnVjdG9yKHJvb3QsIHhyZWYpIHtcbiAgICBzdXBlcihyb290LCB4cmVmLCBcIk51bXNcIik7XG4gIH1cblxufVxuXG5leHBvcnRzLk51bWJlclRyZWUgPSBOdW1iZXJUcmVlO1xuXG4vKioqLyB9KSxcbi8qIDY2ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLkZpbGVTcGVjID0gdm9pZCAwO1xuXG52YXIgX3ByaW1pdGl2ZXMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDUpO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5mdW5jdGlvbiBwaWNrUGxhdGZvcm1JdGVtKGRpY3QpIHtcbiAgaWYgKGRpY3QuaGFzKFwiVUZcIikpIHtcbiAgICByZXR1cm4gZGljdC5nZXQoXCJVRlwiKTtcbiAgfSBlbHNlIGlmIChkaWN0LmhhcyhcIkZcIikpIHtcbiAgICByZXR1cm4gZGljdC5nZXQoXCJGXCIpO1xuICB9IGVsc2UgaWYgKGRpY3QuaGFzKFwiVW5peFwiKSkge1xuICAgIHJldHVybiBkaWN0LmdldChcIlVuaXhcIik7XG4gIH0gZWxzZSBpZiAoZGljdC5oYXMoXCJNYWNcIikpIHtcbiAgICByZXR1cm4gZGljdC5nZXQoXCJNYWNcIik7XG4gIH0gZWxzZSBpZiAoZGljdC5oYXMoXCJET1NcIikpIHtcbiAgICByZXR1cm4gZGljdC5nZXQoXCJET1NcIik7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuY2xhc3MgRmlsZVNwZWMge1xuICBjb25zdHJ1Y3Rvcihyb290LCB4cmVmKSB7XG4gICAgaWYgKCFyb290IHx8ICEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShyb290KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMueHJlZiA9IHhyZWY7XG4gICAgdGhpcy5yb290ID0gcm9vdDtcblxuICAgIGlmIChyb290LmhhcyhcIkZTXCIpKSB7XG4gICAgICB0aGlzLmZzID0gcm9vdC5nZXQoXCJGU1wiKTtcbiAgICB9XG5cbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gcm9vdC5oYXMoXCJEZXNjXCIpID8gKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShyb290LmdldChcIkRlc2NcIikpIDogXCJcIjtcblxuICAgIGlmIChyb290LmhhcyhcIlJGXCIpKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJSZWxhdGVkIGZpbGUgc3BlY2lmaWNhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgfVxuXG4gICAgdGhpcy5jb250ZW50QXZhaWxhYmxlID0gdHJ1ZTtcblxuICAgIGlmICghcm9vdC5oYXMoXCJFRlwiKSkge1xuICAgICAgdGhpcy5jb250ZW50QXZhaWxhYmxlID0gZmFsc2U7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJOb24tZW1iZWRkZWQgZmlsZSBzcGVjaWZpY2F0aW9ucyBhcmUgbm90IHN1cHBvcnRlZFwiKTtcbiAgICB9XG4gIH1cblxuICBnZXQgZmlsZW5hbWUoKSB7XG4gICAgaWYgKCF0aGlzLl9maWxlbmFtZSAmJiB0aGlzLnJvb3QpIHtcbiAgICAgIGNvbnN0IGZpbGVuYW1lID0gcGlja1BsYXRmb3JtSXRlbSh0aGlzLnJvb3QpIHx8IFwidW5uYW1lZFwiO1xuICAgICAgdGhpcy5fZmlsZW5hbWUgPSAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKGZpbGVuYW1lKS5yZXBsYWNlKC9cXFxcXFxcXC9nLCBcIlxcXFxcIikucmVwbGFjZSgvXFxcXFxcLy9nLCBcIi9cIikucmVwbGFjZSgvXFxcXC9nLCBcIi9cIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2ZpbGVuYW1lO1xuICB9XG5cbiAgZ2V0IGNvbnRlbnQoKSB7XG4gICAgaWYgKCF0aGlzLmNvbnRlbnRBdmFpbGFibGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jb250ZW50UmVmICYmIHRoaXMucm9vdCkge1xuICAgICAgdGhpcy5jb250ZW50UmVmID0gcGlja1BsYXRmb3JtSXRlbSh0aGlzLnJvb3QuZ2V0KFwiRUZcIikpO1xuICAgIH1cblxuICAgIGxldCBjb250ZW50ID0gbnVsbDtcblxuICAgIGlmICh0aGlzLmNvbnRlbnRSZWYpIHtcbiAgICAgIGNvbnN0IGZpbGVPYmogPSB0aGlzLnhyZWYuZmV0Y2hJZlJlZih0aGlzLmNvbnRlbnRSZWYpO1xuXG4gICAgICBpZiAoZmlsZU9iaiAmJiAoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKGZpbGVPYmopKSB7XG4gICAgICAgIGNvbnRlbnQgPSBmaWxlT2JqLmdldEJ5dGVzKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoXCJFbWJlZGRlZCBmaWxlIHNwZWNpZmljYXRpb24gcG9pbnRzIHRvIG5vbi1leGlzdGluZy9pbnZhbGlkIGNvbnRlbnRcIik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShcIkVtYmVkZGVkIGZpbGUgc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBoYXZlIGEgY29udGVudFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIGdldCBzZXJpYWxpemFibGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZpbGVuYW1lOiB0aGlzLmZpbGVuYW1lLFxuICAgICAgY29udGVudDogdGhpcy5jb250ZW50XG4gICAgfTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuRmlsZVNwZWMgPSBGaWxlU3BlYztcblxuLyoqKi8gfSksXG4vKiA2NyAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5NZXRhZGF0YVBhcnNlciA9IHZvaWQgMDtcblxudmFyIF94bWxfcGFyc2VyID0gX193X3BkZmpzX3JlcXVpcmVfXyg2OCk7XG5cbmNsYXNzIE1ldGFkYXRhUGFyc2VyIHtcbiAgY29uc3RydWN0b3IoZGF0YSkge1xuICAgIGRhdGEgPSB0aGlzLl9yZXBhaXIoZGF0YSk7XG4gICAgY29uc3QgcGFyc2VyID0gbmV3IF94bWxfcGFyc2VyLlNpbXBsZVhNTFBhcnNlcih7XG4gICAgICBsb3dlckNhc2VOYW1lOiB0cnVlXG4gICAgfSk7XG4gICAgY29uc3QgeG1sRG9jdW1lbnQgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKGRhdGEpO1xuICAgIHRoaXMuX21ldGFkYXRhTWFwID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuX2RhdGEgPSBkYXRhO1xuXG4gICAgaWYgKHhtbERvY3VtZW50KSB7XG4gICAgICB0aGlzLl9wYXJzZSh4bWxEb2N1bWVudCk7XG4gICAgfVxuICB9XG5cbiAgX3JlcGFpcihkYXRhKSB7XG4gICAgcmV0dXJuIGRhdGEucmVwbGFjZSgvXltePF0rLywgXCJcIikucmVwbGFjZSgvPlxcXFwzNzZcXFxcMzc3KFtePF0rKS9nLCBmdW5jdGlvbiAoYWxsLCBjb2Rlcykge1xuICAgICAgY29uc3QgYnl0ZXMgPSBjb2Rlcy5yZXBsYWNlKC9cXFxcKFswLTNdKShbMC03XSkoWzAtN10pL2csIGZ1bmN0aW9uIChjb2RlLCBkMSwgZDIsIGQzKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGQxICogNjQgKyBkMiAqIDggKyBkMyAqIDEpO1xuICAgICAgfSkucmVwbGFjZSgvJihhbXB8YXBvc3xndHxsdHxxdW90KTsvZywgZnVuY3Rpb24gKHN0ciwgbmFtZSkge1xuICAgICAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgICAgICBjYXNlIFwiYW1wXCI6XG4gICAgICAgICAgICByZXR1cm4gXCImXCI7XG5cbiAgICAgICAgICBjYXNlIFwiYXBvc1wiOlxuICAgICAgICAgICAgcmV0dXJuIFwiJ1wiO1xuXG4gICAgICAgICAgY2FzZSBcImd0XCI6XG4gICAgICAgICAgICByZXR1cm4gXCI+XCI7XG5cbiAgICAgICAgICBjYXNlIFwibHRcIjpcbiAgICAgICAgICAgIHJldHVybiBcIjxcIjtcblxuICAgICAgICAgIGNhc2UgXCJxdW90XCI6XG4gICAgICAgICAgICByZXR1cm4gJ1wiJztcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgX3JlcGFpcjogJHtuYW1lfSBpc24ndCBkZWZpbmVkLmApO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBjaGFyQnVmID0gW107XG5cbiAgICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IGJ5dGVzLmxlbmd0aDsgaSA8IGlpOyBpICs9IDIpIHtcbiAgICAgICAgY29uc3QgY29kZSA9IGJ5dGVzLmNoYXJDb2RlQXQoaSkgKiAyNTYgKyBieXRlcy5jaGFyQ29kZUF0KGkgKyAxKTtcblxuICAgICAgICBpZiAoY29kZSA+PSAzMiAmJiBjb2RlIDwgMTI3ICYmIGNvZGUgIT09IDYwICYmIGNvZGUgIT09IDYyICYmIGNvZGUgIT09IDM4KSB7XG4gICAgICAgICAgY2hhckJ1Zi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNoYXJCdWYucHVzaChcIiYjeFwiICsgKDB4MTAwMDAgKyBjb2RlKS50b1N0cmluZygxNikuc3Vic3RyaW5nKDEpICsgXCI7XCIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBcIj5cIiArIGNoYXJCdWYuam9pbihcIlwiKTtcbiAgICB9KTtcbiAgfVxuXG4gIF9nZXRTZXF1ZW5jZShlbnRyeSkge1xuICAgIGNvbnN0IG5hbWUgPSBlbnRyeS5ub2RlTmFtZTtcblxuICAgIGlmIChuYW1lICE9PSBcInJkZjpiYWdcIiAmJiBuYW1lICE9PSBcInJkZjpzZXFcIiAmJiBuYW1lICE9PSBcInJkZjphbHRcIikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVudHJ5LmNoaWxkTm9kZXMuZmlsdGVyKG5vZGUgPT4gbm9kZS5ub2RlTmFtZSA9PT0gXCJyZGY6bGlcIik7XG4gIH1cblxuICBfcGFyc2VBcnJheShlbnRyeSkge1xuICAgIGlmICghZW50cnkuaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgW3NlcU5vZGVdID0gZW50cnkuY2hpbGROb2RlcztcbiAgICBjb25zdCBzZXF1ZW5jZSA9IHRoaXMuX2dldFNlcXVlbmNlKHNlcU5vZGUpIHx8IFtdO1xuXG4gICAgdGhpcy5fbWV0YWRhdGFNYXAuc2V0KGVudHJ5Lm5vZGVOYW1lLCBzZXF1ZW5jZS5tYXAobm9kZSA9PiBub2RlLnRleHRDb250ZW50LnRyaW0oKSkpO1xuICB9XG5cbiAgX3BhcnNlKHhtbERvY3VtZW50KSB7XG4gICAgbGV0IHJkZiA9IHhtbERvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICAgIGlmIChyZGYubm9kZU5hbWUgIT09IFwicmRmOnJkZlwiKSB7XG4gICAgICByZGYgPSByZGYuZmlyc3RDaGlsZDtcblxuICAgICAgd2hpbGUgKHJkZiAmJiByZGYubm9kZU5hbWUgIT09IFwicmRmOnJkZlwiKSB7XG4gICAgICAgIHJkZiA9IHJkZi5uZXh0U2libGluZztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXJkZiB8fCByZGYubm9kZU5hbWUgIT09IFwicmRmOnJkZlwiIHx8ICFyZGYuaGFzQ2hpbGROb2RlcygpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBkZXNjIG9mIHJkZi5jaGlsZE5vZGVzKSB7XG4gICAgICBpZiAoZGVzYy5ub2RlTmFtZSAhPT0gXCJyZGY6ZGVzY3JpcHRpb25cIikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBkZXNjLmNoaWxkTm9kZXMpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IGVudHJ5Lm5vZGVOYW1lO1xuXG4gICAgICAgIHN3aXRjaCAobmFtZSkge1xuICAgICAgICAgIGNhc2UgXCIjdGV4dFwiOlxuICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgICBjYXNlIFwiZGM6Y3JlYXRvclwiOlxuICAgICAgICAgIGNhc2UgXCJkYzpzdWJqZWN0XCI6XG4gICAgICAgICAgICB0aGlzLl9wYXJzZUFycmF5KGVudHJ5KTtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9tZXRhZGF0YU1hcC5zZXQobmFtZSwgZW50cnkudGV4dENvbnRlbnQudHJpbSgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgc2VyaWFsaXphYmxlKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJzZWREYXRhOiB0aGlzLl9tZXRhZGF0YU1hcCxcbiAgICAgIHJhd0RhdGE6IHRoaXMuX2RhdGFcbiAgICB9O1xuICB9XG5cbn1cblxuZXhwb3J0cy5NZXRhZGF0YVBhcnNlciA9IE1ldGFkYXRhUGFyc2VyO1xuXG4vKioqLyB9KSxcbi8qIDY4ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLlhNTFBhcnNlckVycm9yQ29kZSA9IGV4cG9ydHMuWE1MUGFyc2VyQmFzZSA9IGV4cG9ydHMuU2ltcGxlWE1MUGFyc2VyID0gZXhwb3J0cy5TaW1wbGVET01Ob2RlID0gdm9pZCAwO1xuXG52YXIgX2NvcmVfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDkpO1xuXG5jb25zdCBYTUxQYXJzZXJFcnJvckNvZGUgPSB7XG4gIE5vRXJyb3I6IDAsXG4gIEVuZE9mRG9jdW1lbnQ6IC0xLFxuICBVbnRlcm1pbmF0ZWRDZGF0OiAtMixcbiAgVW50ZXJtaW5hdGVkWG1sRGVjbGFyYXRpb246IC0zLFxuICBVbnRlcm1pbmF0ZWREb2N0eXBlRGVjbGFyYXRpb246IC00LFxuICBVbnRlcm1pbmF0ZWRDb21tZW50OiAtNSxcbiAgTWFsZm9ybWVkRWxlbWVudDogLTYsXG4gIE91dE9mTWVtb3J5OiAtNyxcbiAgVW50ZXJtaW5hdGVkQXR0cmlidXRlVmFsdWU6IC04LFxuICBVbnRlcm1pbmF0ZWRFbGVtZW50OiAtOSxcbiAgRWxlbWVudE5ldmVyQmVndW46IC0xMFxufTtcbmV4cG9ydHMuWE1MUGFyc2VyRXJyb3JDb2RlID0gWE1MUGFyc2VyRXJyb3JDb2RlO1xuXG5mdW5jdGlvbiBpc1doaXRlc3BhY2UocywgaW5kZXgpIHtcbiAgY29uc3QgY2ggPSBzW2luZGV4XTtcbiAgcmV0dXJuIGNoID09PSBcIiBcIiB8fCBjaCA9PT0gXCJcXG5cIiB8fCBjaCA9PT0gXCJcXHJcIiB8fCBjaCA9PT0gXCJcXHRcIjtcbn1cblxuZnVuY3Rpb24gaXNXaGl0ZXNwYWNlU3RyaW5nKHMpIHtcbiAgZm9yIChsZXQgaSA9IDAsIGlpID0gcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgaWYgKCFpc1doaXRlc3BhY2UocywgaSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuY2xhc3MgWE1MUGFyc2VyQmFzZSB7XG4gIF9yZXNvbHZlRW50aXRpZXMocykge1xuICAgIHJldHVybiBzLnJlcGxhY2UoLyYoW147XSspOy9nLCAoYWxsLCBlbnRpdHkpID0+IHtcbiAgICAgIGlmIChlbnRpdHkuc3Vic3RyaW5nKDAsIDIpID09PSBcIiN4XCIpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KHBhcnNlSW50KGVudGl0eS5zdWJzdHJpbmcoMiksIDE2KSk7XG4gICAgICB9IGVsc2UgaWYgKGVudGl0eS5zdWJzdHJpbmcoMCwgMSkgPT09IFwiI1wiKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNvZGVQb2ludChwYXJzZUludChlbnRpdHkuc3Vic3RyaW5nKDEpLCAxMCkpO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGVudGl0eSkge1xuICAgICAgICBjYXNlIFwibHRcIjpcbiAgICAgICAgICByZXR1cm4gXCI8XCI7XG5cbiAgICAgICAgY2FzZSBcImd0XCI6XG4gICAgICAgICAgcmV0dXJuIFwiPlwiO1xuXG4gICAgICAgIGNhc2UgXCJhbXBcIjpcbiAgICAgICAgICByZXR1cm4gXCImXCI7XG5cbiAgICAgICAgY2FzZSBcInF1b3RcIjpcbiAgICAgICAgICByZXR1cm4gJ1wiJztcblxuICAgICAgICBjYXNlIFwiYXBvc1wiOlxuICAgICAgICAgIHJldHVybiBcIidcIjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMub25SZXNvbHZlRW50aXR5KGVudGl0eSk7XG4gICAgfSk7XG4gIH1cblxuICBfcGFyc2VDb250ZW50KHMsIHN0YXJ0KSB7XG4gICAgY29uc3QgYXR0cmlidXRlcyA9IFtdO1xuICAgIGxldCBwb3MgPSBzdGFydDtcblxuICAgIGZ1bmN0aW9uIHNraXBXcygpIHtcbiAgICAgIHdoaWxlIChwb3MgPCBzLmxlbmd0aCAmJiBpc1doaXRlc3BhY2UocywgcG9zKSkge1xuICAgICAgICArK3BvcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB3aGlsZSAocG9zIDwgcy5sZW5ndGggJiYgIWlzV2hpdGVzcGFjZShzLCBwb3MpICYmIHNbcG9zXSAhPT0gXCI+XCIgJiYgc1twb3NdICE9PSBcIi9cIikge1xuICAgICAgKytwb3M7XG4gICAgfVxuXG4gICAgY29uc3QgbmFtZSA9IHMuc3Vic3RyaW5nKHN0YXJ0LCBwb3MpO1xuICAgIHNraXBXcygpO1xuXG4gICAgd2hpbGUgKHBvcyA8IHMubGVuZ3RoICYmIHNbcG9zXSAhPT0gXCI+XCIgJiYgc1twb3NdICE9PSBcIi9cIiAmJiBzW3Bvc10gIT09IFwiP1wiKSB7XG4gICAgICBza2lwV3MoKTtcbiAgICAgIGxldCBhdHRyTmFtZSA9IFwiXCIsXG4gICAgICAgICAgYXR0clZhbHVlID0gXCJcIjtcblxuICAgICAgd2hpbGUgKHBvcyA8IHMubGVuZ3RoICYmICFpc1doaXRlc3BhY2UocywgcG9zKSAmJiBzW3Bvc10gIT09IFwiPVwiKSB7XG4gICAgICAgIGF0dHJOYW1lICs9IHNbcG9zXTtcbiAgICAgICAgKytwb3M7XG4gICAgICB9XG5cbiAgICAgIHNraXBXcygpO1xuXG4gICAgICBpZiAoc1twb3NdICE9PSBcIj1cIikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgKytwb3M7XG4gICAgICBza2lwV3MoKTtcbiAgICAgIGNvbnN0IGF0dHJFbmRDaGFyID0gc1twb3NdO1xuXG4gICAgICBpZiAoYXR0ckVuZENoYXIgIT09ICdcIicgJiYgYXR0ckVuZENoYXIgIT09IFwiJ1wiKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhdHRyRW5kSW5kZXggPSBzLmluZGV4T2YoYXR0ckVuZENoYXIsICsrcG9zKTtcblxuICAgICAgaWYgKGF0dHJFbmRJbmRleCA8IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGF0dHJWYWx1ZSA9IHMuc3Vic3RyaW5nKHBvcywgYXR0ckVuZEluZGV4KTtcbiAgICAgIGF0dHJpYnV0ZXMucHVzaCh7XG4gICAgICAgIG5hbWU6IGF0dHJOYW1lLFxuICAgICAgICB2YWx1ZTogdGhpcy5fcmVzb2x2ZUVudGl0aWVzKGF0dHJWYWx1ZSlcbiAgICAgIH0pO1xuICAgICAgcG9zID0gYXR0ckVuZEluZGV4ICsgMTtcbiAgICAgIHNraXBXcygpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBuYW1lLFxuICAgICAgYXR0cmlidXRlcyxcbiAgICAgIHBhcnNlZDogcG9zIC0gc3RhcnRcbiAgICB9O1xuICB9XG5cbiAgX3BhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uKHMsIHN0YXJ0KSB7XG4gICAgbGV0IHBvcyA9IHN0YXJ0O1xuXG4gICAgZnVuY3Rpb24gc2tpcFdzKCkge1xuICAgICAgd2hpbGUgKHBvcyA8IHMubGVuZ3RoICYmIGlzV2hpdGVzcGFjZShzLCBwb3MpKSB7XG4gICAgICAgICsrcG9zO1xuICAgICAgfVxuICAgIH1cblxuICAgIHdoaWxlIChwb3MgPCBzLmxlbmd0aCAmJiAhaXNXaGl0ZXNwYWNlKHMsIHBvcykgJiYgc1twb3NdICE9PSBcIj5cIiAmJiBzW3Bvc10gIT09IFwiP1wiICYmIHNbcG9zXSAhPT0gXCIvXCIpIHtcbiAgICAgICsrcG9zO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbWUgPSBzLnN1YnN0cmluZyhzdGFydCwgcG9zKTtcbiAgICBza2lwV3MoKTtcbiAgICBjb25zdCBhdHRyU3RhcnQgPSBwb3M7XG5cbiAgICB3aGlsZSAocG9zIDwgcy5sZW5ndGggJiYgKHNbcG9zXSAhPT0gXCI/XCIgfHwgc1twb3MgKyAxXSAhPT0gXCI+XCIpKSB7XG4gICAgICArK3BvcztcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IHMuc3Vic3RyaW5nKGF0dHJTdGFydCwgcG9zKTtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZSxcbiAgICAgIHZhbHVlLFxuICAgICAgcGFyc2VkOiBwb3MgLSBzdGFydFxuICAgIH07XG4gIH1cblxuICBwYXJzZVhtbChzKSB7XG4gICAgbGV0IGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBzLmxlbmd0aCkge1xuICAgICAgY29uc3QgY2ggPSBzW2ldO1xuICAgICAgbGV0IGogPSBpO1xuXG4gICAgICBpZiAoY2ggPT09IFwiPFwiKSB7XG4gICAgICAgICsrajtcbiAgICAgICAgY29uc3QgY2gyID0gc1tqXTtcbiAgICAgICAgbGV0IHE7XG5cbiAgICAgICAgc3dpdGNoIChjaDIpIHtcbiAgICAgICAgICBjYXNlIFwiL1wiOlxuICAgICAgICAgICAgKytqO1xuICAgICAgICAgICAgcSA9IHMuaW5kZXhPZihcIj5cIiwgaik7XG5cbiAgICAgICAgICAgIGlmIChxIDwgMCkge1xuICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IoWE1MUGFyc2VyRXJyb3JDb2RlLlVudGVybWluYXRlZEVsZW1lbnQpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMub25FbmRFbGVtZW50KHMuc3Vic3RyaW5nKGosIHEpKTtcbiAgICAgICAgICAgIGogPSBxICsgMTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIj9cIjpcbiAgICAgICAgICAgICsrajtcblxuICAgICAgICAgICAgY29uc3QgcGkgPSB0aGlzLl9wYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvbihzLCBqKTtcblxuICAgICAgICAgICAgaWYgKHMuc3Vic3RyaW5nKGogKyBwaS5wYXJzZWQsIGogKyBwaS5wYXJzZWQgKyAyKSAhPT0gXCI/PlwiKSB7XG4gICAgICAgICAgICAgIHRoaXMub25FcnJvcihYTUxQYXJzZXJFcnJvckNvZGUuVW50ZXJtaW5hdGVkWG1sRGVjbGFyYXRpb24pO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMub25QaShwaS5uYW1lLCBwaS52YWx1ZSk7XG4gICAgICAgICAgICBqICs9IHBpLnBhcnNlZCArIDI7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCIhXCI6XG4gICAgICAgICAgICBpZiAocy5zdWJzdHJpbmcoaiArIDEsIGogKyAzKSA9PT0gXCItLVwiKSB7XG4gICAgICAgICAgICAgIHEgPSBzLmluZGV4T2YoXCItLT5cIiwgaiArIDMpO1xuXG4gICAgICAgICAgICAgIGlmIChxIDwgMCkge1xuICAgICAgICAgICAgICAgIHRoaXMub25FcnJvcihYTUxQYXJzZXJFcnJvckNvZGUuVW50ZXJtaW5hdGVkQ29tbWVudCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5vbkNvbW1lbnQocy5zdWJzdHJpbmcoaiArIDMsIHEpKTtcbiAgICAgICAgICAgICAgaiA9IHEgKyAzO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzLnN1YnN0cmluZyhqICsgMSwgaiArIDgpID09PSBcIltDREFUQVtcIikge1xuICAgICAgICAgICAgICBxID0gcy5pbmRleE9mKFwiXV0+XCIsIGogKyA4KTtcblxuICAgICAgICAgICAgICBpZiAocSA8IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IoWE1MUGFyc2VyRXJyb3JDb2RlLlVudGVybWluYXRlZENkYXQpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMub25DZGF0YShzLnN1YnN0cmluZyhqICsgOCwgcSkpO1xuICAgICAgICAgICAgICBqID0gcSArIDM7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHMuc3Vic3RyaW5nKGogKyAxLCBqICsgOCkgPT09IFwiRE9DVFlQRVwiKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHEyID0gcy5pbmRleE9mKFwiW1wiLCBqICsgOCk7XG4gICAgICAgICAgICAgIGxldCBjb21wbGV4RG9jdHlwZSA9IGZhbHNlO1xuICAgICAgICAgICAgICBxID0gcy5pbmRleE9mKFwiPlwiLCBqICsgOCk7XG5cbiAgICAgICAgICAgICAgaWYgKHEgPCAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yKFhNTFBhcnNlckVycm9yQ29kZS5VbnRlcm1pbmF0ZWREb2N0eXBlRGVjbGFyYXRpb24pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChxMiA+IDAgJiYgcSA+IHEyKSB7XG4gICAgICAgICAgICAgICAgcSA9IHMuaW5kZXhPZihcIl0+XCIsIGogKyA4KTtcblxuICAgICAgICAgICAgICAgIGlmIChxIDwgMCkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yKFhNTFBhcnNlckVycm9yQ29kZS5VbnRlcm1pbmF0ZWREb2N0eXBlRGVjbGFyYXRpb24pO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbXBsZXhEb2N0eXBlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IGRvY3R5cGVDb250ZW50ID0gcy5zdWJzdHJpbmcoaiArIDgsIHEgKyAoY29tcGxleERvY3R5cGUgPyAxIDogMCkpO1xuICAgICAgICAgICAgICB0aGlzLm9uRG9jdHlwZShkb2N0eXBlQ29udGVudCk7XG4gICAgICAgICAgICAgIGogPSBxICsgKGNvbXBsZXhEb2N0eXBlID8gMiA6IDEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5vbkVycm9yKFhNTFBhcnNlckVycm9yQ29kZS5NYWxmb3JtZWRFbGVtZW50KTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5fcGFyc2VDb250ZW50KHMsIGopO1xuXG4gICAgICAgICAgICBpZiAoY29udGVudCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IoWE1MUGFyc2VyRXJyb3JDb2RlLk1hbGZvcm1lZEVsZW1lbnQpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBpc0Nsb3NlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAocy5zdWJzdHJpbmcoaiArIGNvbnRlbnQucGFyc2VkLCBqICsgY29udGVudC5wYXJzZWQgKyAyKSA9PT0gXCIvPlwiKSB7XG4gICAgICAgICAgICAgIGlzQ2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocy5zdWJzdHJpbmcoaiArIGNvbnRlbnQucGFyc2VkLCBqICsgY29udGVudC5wYXJzZWQgKyAxKSAhPT0gXCI+XCIpIHtcbiAgICAgICAgICAgICAgdGhpcy5vbkVycm9yKFhNTFBhcnNlckVycm9yQ29kZS5VbnRlcm1pbmF0ZWRFbGVtZW50KTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm9uQmVnaW5FbGVtZW50KGNvbnRlbnQubmFtZSwgY29udGVudC5hdHRyaWJ1dGVzLCBpc0Nsb3NlZCk7XG4gICAgICAgICAgICBqICs9IGNvbnRlbnQucGFyc2VkICsgKGlzQ2xvc2VkID8gMiA6IDEpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdoaWxlIChqIDwgcy5sZW5ndGggJiYgc1tqXSAhPT0gXCI8XCIpIHtcbiAgICAgICAgICBqKys7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0ZXh0ID0gcy5zdWJzdHJpbmcoaSwgaik7XG4gICAgICAgIHRoaXMub25UZXh0KHRoaXMuX3Jlc29sdmVFbnRpdGllcyh0ZXh0KSk7XG4gICAgICB9XG5cbiAgICAgIGkgPSBqO1xuICAgIH1cbiAgfVxuXG4gIG9uUmVzb2x2ZUVudGl0eShuYW1lKSB7XG4gICAgcmV0dXJuIGAmJHtuYW1lfTtgO1xuICB9XG5cbiAgb25QaShuYW1lLCB2YWx1ZSkge31cblxuICBvbkNvbW1lbnQodGV4dCkge31cblxuICBvbkNkYXRhKHRleHQpIHt9XG5cbiAgb25Eb2N0eXBlKGRvY3R5cGVDb250ZW50KSB7fVxuXG4gIG9uVGV4dCh0ZXh0KSB7fVxuXG4gIG9uQmVnaW5FbGVtZW50KG5hbWUsIGF0dHJpYnV0ZXMsIGlzRW1wdHkpIHt9XG5cbiAgb25FbmRFbGVtZW50KG5hbWUpIHt9XG5cbiAgb25FcnJvcihjb2RlKSB7fVxuXG59XG5cbmV4cG9ydHMuWE1MUGFyc2VyQmFzZSA9IFhNTFBhcnNlckJhc2U7XG5cbmNsYXNzIFNpbXBsZURPTU5vZGUge1xuICBjb25zdHJ1Y3Rvcihub2RlTmFtZSwgbm9kZVZhbHVlKSB7XG4gICAgdGhpcy5ub2RlTmFtZSA9IG5vZGVOYW1lO1xuICAgIHRoaXMubm9kZVZhbHVlID0gbm9kZVZhbHVlO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInBhcmVudE5vZGVcIiwge1xuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICB3cml0YWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGZpcnN0Q2hpbGQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hpbGROb2RlcyAmJiB0aGlzLmNoaWxkTm9kZXNbMF07XG4gIH1cblxuICBnZXQgbmV4dFNpYmxpbmcoKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IHRoaXMucGFyZW50Tm9kZS5jaGlsZE5vZGVzO1xuXG4gICAgaWYgKCFjaGlsZE5vZGVzKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGluZGV4ID0gY2hpbGROb2Rlcy5pbmRleE9mKHRoaXMpO1xuXG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGROb2Rlc1tpbmRleCArIDFdO1xuICB9XG5cbiAgZ2V0IHRleHRDb250ZW50KCkge1xuICAgIGlmICghdGhpcy5jaGlsZE5vZGVzKSB7XG4gICAgICByZXR1cm4gdGhpcy5ub2RlVmFsdWUgfHwgXCJcIjtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jaGlsZE5vZGVzLm1hcChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgIHJldHVybiBjaGlsZC50ZXh0Q29udGVudDtcbiAgICB9KS5qb2luKFwiXCIpO1xuICB9XG5cbiAgaGFzQ2hpbGROb2RlcygpIHtcbiAgICByZXR1cm4gdGhpcy5jaGlsZE5vZGVzICYmIHRoaXMuY2hpbGROb2Rlcy5sZW5ndGggPiAwO1xuICB9XG5cbiAgc2VhcmNoTm9kZShwYXRocywgcG9zKSB7XG4gICAgaWYgKHBvcyA+PSBwYXRocy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBvbmVudCA9IHBhdGhzW3Bvc107XG4gICAgY29uc3Qgc3RhY2sgPSBbXTtcbiAgICBsZXQgbm9kZSA9IHRoaXM7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKGNvbXBvbmVudC5uYW1lID09PSBub2RlLm5vZGVOYW1lKSB7XG4gICAgICAgIGlmIChjb21wb25lbnQucG9zID09PSAwKSB7XG4gICAgICAgICAgY29uc3QgcmVzID0gbm9kZS5zZWFyY2hOb2RlKHBhdGhzLCBwb3MgKyAxKTtcblxuICAgICAgICAgIGlmIChyZXMgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IFtwYXJlbnRdID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgbGV0IHNpYmxpbmdQb3MgPSAwO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBwYXJlbnQuY2hpbGROb2Rlcykge1xuICAgICAgICAgICAgaWYgKGNvbXBvbmVudC5uYW1lID09PSBjaGlsZC5ub2RlTmFtZSkge1xuICAgICAgICAgICAgICBpZiAoc2libGluZ1BvcyA9PT0gY29tcG9uZW50LnBvcykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZC5zZWFyY2hOb2RlKHBhdGhzLCBwb3MgKyAxKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHNpYmxpbmdQb3MrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbm9kZS5zZWFyY2hOb2RlKHBhdGhzLCBwb3MgKyAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS5jaGlsZE5vZGVzICYmIG5vZGUuY2hpbGROb2Rlcy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgc3RhY2sucHVzaChbbm9kZSwgMF0pO1xuICAgICAgICBub2RlID0gbm9kZS5jaGlsZE5vZGVzWzBdO1xuICAgICAgfSBlbHNlIGlmIChzdGFjay5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgY29uc3QgW3BhcmVudCwgY3VycmVudFBvc10gPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICBjb25zdCBuZXdQb3MgPSBjdXJyZW50UG9zICsgMTtcblxuICAgICAgICAgIGlmIChuZXdQb3MgPCBwYXJlbnQuY2hpbGROb2Rlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goW3BhcmVudCwgbmV3UG9zXSk7XG4gICAgICAgICAgICBub2RlID0gcGFyZW50LmNoaWxkTm9kZXNbbmV3UG9zXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGFjay5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGR1bXAoYnVmZmVyKSB7XG4gICAgaWYgKHRoaXMubm9kZU5hbWUgPT09IFwiI3RleHRcIikge1xuICAgICAgYnVmZmVyLnB1c2goKDAsIF9jb3JlX3V0aWxzLmVuY29kZVRvWG1sU3RyaW5nKSh0aGlzLm5vZGVWYWx1ZSkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGJ1ZmZlci5wdXNoKGA8JHt0aGlzLm5vZGVOYW1lfWApO1xuXG4gICAgaWYgKHRoaXMuYXR0cmlidXRlcykge1xuICAgICAgZm9yIChjb25zdCBhdHRyaWJ1dGUgb2YgdGhpcy5hdHRyaWJ1dGVzKSB7XG4gICAgICAgIGJ1ZmZlci5wdXNoKGAgJHthdHRyaWJ1dGUubmFtZX09XCIkeygwLCBfY29yZV91dGlscy5lbmNvZGVUb1htbFN0cmluZykoYXR0cmlidXRlLnZhbHVlKX1cImApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgYnVmZmVyLnB1c2goXCI+XCIpO1xuXG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMuY2hpbGROb2Rlcykge1xuICAgICAgICBjaGlsZC5kdW1wKGJ1ZmZlcik7XG4gICAgICB9XG5cbiAgICAgIGJ1ZmZlci5wdXNoKGA8LyR7dGhpcy5ub2RlTmFtZX0+YCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm5vZGVWYWx1ZSkge1xuICAgICAgYnVmZmVyLnB1c2goYD4keygwLCBfY29yZV91dGlscy5lbmNvZGVUb1htbFN0cmluZykodGhpcy5ub2RlVmFsdWUpfTwvJHt0aGlzLm5vZGVOYW1lfT5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYnVmZmVyLnB1c2goXCIvPlwiKTtcbiAgICB9XG4gIH1cblxufVxuXG5leHBvcnRzLlNpbXBsZURPTU5vZGUgPSBTaW1wbGVET01Ob2RlO1xuXG5jbGFzcyBTaW1wbGVYTUxQYXJzZXIgZXh0ZW5kcyBYTUxQYXJzZXJCYXNlIHtcbiAgY29uc3RydWN0b3Ioe1xuICAgIGhhc0F0dHJpYnV0ZXMgPSBmYWxzZSxcbiAgICBsb3dlckNhc2VOYW1lID0gZmFsc2VcbiAgfSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fY3VycmVudEZyYWdtZW50ID0gbnVsbDtcbiAgICB0aGlzLl9zdGFjayA9IG51bGw7XG4gICAgdGhpcy5fZXJyb3JDb2RlID0gWE1MUGFyc2VyRXJyb3JDb2RlLk5vRXJyb3I7XG4gICAgdGhpcy5faGFzQXR0cmlidXRlcyA9IGhhc0F0dHJpYnV0ZXM7XG4gICAgdGhpcy5fbG93ZXJDYXNlTmFtZSA9IGxvd2VyQ2FzZU5hbWU7XG4gIH1cblxuICBwYXJzZUZyb21TdHJpbmcoZGF0YSkge1xuICAgIHRoaXMuX2N1cnJlbnRGcmFnbWVudCA9IFtdO1xuICAgIHRoaXMuX3N0YWNrID0gW107XG4gICAgdGhpcy5fZXJyb3JDb2RlID0gWE1MUGFyc2VyRXJyb3JDb2RlLk5vRXJyb3I7XG4gICAgdGhpcy5wYXJzZVhtbChkYXRhKTtcblxuICAgIGlmICh0aGlzLl9lcnJvckNvZGUgIT09IFhNTFBhcnNlckVycm9yQ29kZS5Ob0Vycm9yKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IFtkb2N1bWVudEVsZW1lbnRdID0gdGhpcy5fY3VycmVudEZyYWdtZW50O1xuXG4gICAgaWYgKCFkb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRvY3VtZW50RWxlbWVudFxuICAgIH07XG4gIH1cblxuICBvblRleHQodGV4dCkge1xuICAgIGlmIChpc1doaXRlc3BhY2VTdHJpbmcodGV4dCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBub2RlID0gbmV3IFNpbXBsZURPTU5vZGUoXCIjdGV4dFwiLCB0ZXh0KTtcblxuICAgIHRoaXMuX2N1cnJlbnRGcmFnbWVudC5wdXNoKG5vZGUpO1xuICB9XG5cbiAgb25DZGF0YSh0ZXh0KSB7XG4gICAgY29uc3Qgbm9kZSA9IG5ldyBTaW1wbGVET01Ob2RlKFwiI3RleHRcIiwgdGV4dCk7XG5cbiAgICB0aGlzLl9jdXJyZW50RnJhZ21lbnQucHVzaChub2RlKTtcbiAgfVxuXG4gIG9uQmVnaW5FbGVtZW50KG5hbWUsIGF0dHJpYnV0ZXMsIGlzRW1wdHkpIHtcbiAgICBpZiAodGhpcy5fbG93ZXJDYXNlTmFtZSkge1xuICAgICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBjb25zdCBub2RlID0gbmV3IFNpbXBsZURPTU5vZGUobmFtZSk7XG4gICAgbm9kZS5jaGlsZE5vZGVzID0gW107XG5cbiAgICBpZiAodGhpcy5faGFzQXR0cmlidXRlcykge1xuICAgICAgbm9kZS5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcztcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50RnJhZ21lbnQucHVzaChub2RlKTtcblxuICAgIGlmIChpc0VtcHR5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhY2sucHVzaCh0aGlzLl9jdXJyZW50RnJhZ21lbnQpO1xuXG4gICAgdGhpcy5fY3VycmVudEZyYWdtZW50ID0gbm9kZS5jaGlsZE5vZGVzO1xuICB9XG5cbiAgb25FbmRFbGVtZW50KG5hbWUpIHtcbiAgICB0aGlzLl9jdXJyZW50RnJhZ21lbnQgPSB0aGlzLl9zdGFjay5wb3AoKSB8fCBbXTtcbiAgICBjb25zdCBsYXN0RWxlbWVudCA9IHRoaXMuX2N1cnJlbnRGcmFnbWVudFt0aGlzLl9jdXJyZW50RnJhZ21lbnQubGVuZ3RoIC0gMV07XG5cbiAgICBpZiAoIWxhc3RFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gbGFzdEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBsYXN0RWxlbWVudC5jaGlsZE5vZGVzW2ldLnBhcmVudE5vZGUgPSBsYXN0RWxlbWVudDtcbiAgICB9XG4gIH1cblxuICBvbkVycm9yKGNvZGUpIHtcbiAgICB0aGlzLl9lcnJvckNvZGUgPSBjb2RlO1xuICB9XG5cbn1cblxuZXhwb3J0cy5TaW1wbGVYTUxQYXJzZXIgPSBTaW1wbGVYTUxQYXJzZXI7XG5cbi8qKiovIH0pLFxuLyogNjkgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuU3RydWN0VHJlZVJvb3QgPSBleHBvcnRzLlN0cnVjdFRyZWVQYWdlID0gdm9pZCAwO1xuXG52YXIgX3ByaW1pdGl2ZXMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDUpO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX25hbWVfbnVtYmVyX3RyZWUgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDY1KTtcblxuY29uc3QgTUFYX0RFUFRIID0gNDA7XG5jb25zdCBTdHJ1Y3RFbGVtZW50VHlwZSA9IHtcbiAgUEFHRV9DT05URU5UOiBcIlBBR0VfQ09OVEVOVFwiLFxuICBTVFJFQU1fQ09OVEVOVDogXCJTVFJFQU1fQ09OVEVOVFwiLFxuICBPQkpFQ1Q6IFwiT0JKRUNUXCIsXG4gIEVMRU1FTlQ6IFwiRUxFTUVOVFwiXG59O1xuXG5jbGFzcyBTdHJ1Y3RUcmVlUm9vdCB7XG4gIGNvbnN0cnVjdG9yKHJvb3REaWN0KSB7XG4gICAgdGhpcy5kaWN0ID0gcm9vdERpY3Q7XG4gICAgdGhpcy5yb2xlTWFwID0gbmV3IE1hcCgpO1xuICB9XG5cbiAgaW5pdCgpIHtcbiAgICB0aGlzLnJlYWRSb2xlTWFwKCk7XG4gIH1cblxuICByZWFkUm9sZU1hcCgpIHtcbiAgICBjb25zdCByb2xlTWFwRGljdCA9IHRoaXMuZGljdC5nZXQoXCJSb2xlTWFwXCIpO1xuXG4gICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShyb2xlTWFwRGljdCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByb2xlTWFwRGljdC5mb3JFYWNoKChrZXksIHZhbHVlKSA9PiB7XG4gICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHZhbHVlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMucm9sZU1hcC5zZXQoa2V5LCB2YWx1ZS5uYW1lKTtcbiAgICB9KTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuU3RydWN0VHJlZVJvb3QgPSBTdHJ1Y3RUcmVlUm9vdDtcblxuY2xhc3MgU3RydWN0RWxlbWVudE5vZGUge1xuICBjb25zdHJ1Y3Rvcih0cmVlLCBkaWN0KSB7XG4gICAgdGhpcy50cmVlID0gdHJlZTtcbiAgICB0aGlzLmRpY3QgPSBkaWN0O1xuICAgIHRoaXMua2lkcyA9IFtdO1xuICAgIHRoaXMucGFyc2VLaWRzKCk7XG4gIH1cblxuICBnZXQgcm9sZSgpIHtcbiAgICBjb25zdCBuYW1lT2JqID0gdGhpcy5kaWN0LmdldChcIlNcIik7XG4gICAgY29uc3QgbmFtZSA9ICgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKG5hbWVPYmopID8gbmFtZU9iai5uYW1lIDogXCJcIjtcbiAgICBjb25zdCB7XG4gICAgICByb290XG4gICAgfSA9IHRoaXMudHJlZTtcblxuICAgIGlmIChyb290LnJvbGVNYXAuaGFzKG5hbWUpKSB7XG4gICAgICByZXR1cm4gcm9vdC5yb2xlTWFwLmdldChuYW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmFtZTtcbiAgfVxuXG4gIHBhcnNlS2lkcygpIHtcbiAgICBsZXQgcGFnZU9iaklkID0gbnVsbDtcbiAgICBjb25zdCBvYmpSZWYgPSB0aGlzLmRpY3QuZ2V0UmF3KFwiUGdcIik7XG5cbiAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzUmVmKShvYmpSZWYpKSB7XG4gICAgICBwYWdlT2JqSWQgPSBvYmpSZWYudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBjb25zdCBraWRzID0gdGhpcy5kaWN0LmdldChcIktcIik7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShraWRzKSkge1xuICAgICAgZm9yIChjb25zdCBraWQgb2Yga2lkcykge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5wYXJzZUtpZChwYWdlT2JqSWQsIGtpZCk7XG5cbiAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLmtpZHMucHVzaChlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5wYXJzZUtpZChwYWdlT2JqSWQsIGtpZHMpO1xuXG4gICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICB0aGlzLmtpZHMucHVzaChlbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwYXJzZUtpZChwYWdlT2JqSWQsIGtpZCkge1xuICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGtpZCkpIHtcbiAgICAgIGlmICh0aGlzLnRyZWUucGFnZURpY3Qub2JqSWQgIT09IHBhZ2VPYmpJZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBTdHJ1Y3RFbGVtZW50KHtcbiAgICAgICAgdHlwZTogU3RydWN0RWxlbWVudFR5cGUuUEFHRV9DT05URU5ULFxuICAgICAgICBtY2lkOiBraWQsXG4gICAgICAgIHBhZ2VPYmpJZFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGV0IGtpZERpY3QgPSBudWxsO1xuXG4gICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1JlZikoa2lkKSkge1xuICAgICAga2lkRGljdCA9IHRoaXMuZGljdC54cmVmLmZldGNoKGtpZCk7XG4gICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShraWQpKSB7XG4gICAgICBraWREaWN0ID0ga2lkO1xuICAgIH1cblxuICAgIGlmICgha2lkRGljdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcGFnZVJlZiA9IGtpZERpY3QuZ2V0UmF3KFwiUGdcIik7XG5cbiAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzUmVmKShwYWdlUmVmKSkge1xuICAgICAgcGFnZU9iaklkID0gcGFnZVJlZi50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGNvbnN0IHR5cGUgPSAoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShraWREaWN0LmdldChcIlR5cGVcIikpID8ga2lkRGljdC5nZXQoXCJUeXBlXCIpLm5hbWUgOiBudWxsO1xuXG4gICAgaWYgKHR5cGUgPT09IFwiTUNSXCIpIHtcbiAgICAgIGlmICh0aGlzLnRyZWUucGFnZURpY3Qub2JqSWQgIT09IHBhZ2VPYmpJZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBTdHJ1Y3RFbGVtZW50KHtcbiAgICAgICAgdHlwZTogU3RydWN0RWxlbWVudFR5cGUuU1RSRUFNX0NPTlRFTlQsXG4gICAgICAgIHJlZk9iaklkOiAoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKGtpZERpY3QuZ2V0UmF3KFwiU3RtXCIpKSA/IGtpZERpY3QuZ2V0UmF3KFwiU3RtXCIpLnRvU3RyaW5nKCkgOiBudWxsLFxuICAgICAgICBwYWdlT2JqSWQsXG4gICAgICAgIG1jaWQ6IGtpZERpY3QuZ2V0KFwiTUNJRFwiKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09IFwiT0JKUlwiKSB7XG4gICAgICBpZiAodGhpcy50cmVlLnBhZ2VEaWN0Lm9iaklkICE9PSBwYWdlT2JqSWQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgU3RydWN0RWxlbWVudCh7XG4gICAgICAgIHR5cGU6IFN0cnVjdEVsZW1lbnRUeXBlLk9CSkVDVCxcbiAgICAgICAgcmVmT2JqSWQ6ICgwLCBfcHJpbWl0aXZlcy5pc1JlZikoa2lkRGljdC5nZXRSYXcoXCJPYmpcIikpID8ga2lkRGljdC5nZXRSYXcoXCJPYmpcIikudG9TdHJpbmcoKSA6IG51bGwsXG4gICAgICAgIHBhZ2VPYmpJZFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBTdHJ1Y3RFbGVtZW50KHtcbiAgICAgIHR5cGU6IFN0cnVjdEVsZW1lbnRUeXBlLkVMRU1FTlQsXG4gICAgICBkaWN0OiBraWREaWN0XG4gICAgfSk7XG4gIH1cblxufVxuXG5jbGFzcyBTdHJ1Y3RFbGVtZW50IHtcbiAgY29uc3RydWN0b3Ioe1xuICAgIHR5cGUsXG4gICAgZGljdCA9IG51bGwsXG4gICAgbWNpZCA9IG51bGwsXG4gICAgcGFnZU9iaklkID0gbnVsbCxcbiAgICByZWZPYmpJZCA9IG51bGxcbiAgfSkge1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5kaWN0ID0gZGljdDtcbiAgICB0aGlzLm1jaWQgPSBtY2lkO1xuICAgIHRoaXMucGFnZU9iaklkID0gcGFnZU9iaklkO1xuICAgIHRoaXMucmVmT2JqSWQgPSByZWZPYmpJZDtcbiAgICB0aGlzLnBhcmVudE5vZGUgPSBudWxsO1xuICB9XG5cbn1cblxuY2xhc3MgU3RydWN0VHJlZVBhZ2Uge1xuICBjb25zdHJ1Y3RvcihzdHJ1Y3RUcmVlUm9vdCwgcGFnZURpY3QpIHtcbiAgICB0aGlzLnJvb3QgPSBzdHJ1Y3RUcmVlUm9vdDtcbiAgICB0aGlzLnJvb3REaWN0ID0gc3RydWN0VHJlZVJvb3QgPyBzdHJ1Y3RUcmVlUm9vdC5kaWN0IDogbnVsbDtcbiAgICB0aGlzLnBhZ2VEaWN0ID0gcGFnZURpY3Q7XG4gICAgdGhpcy5ub2RlcyA9IFtdO1xuICB9XG5cbiAgcGFyc2UoKSB7XG4gICAgaWYgKCF0aGlzLnJvb3QgfHwgIXRoaXMucm9vdERpY3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnRUcmVlID0gdGhpcy5yb290RGljdC5nZXQoXCJQYXJlbnRUcmVlXCIpO1xuXG4gICAgaWYgKCFwYXJlbnRUcmVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaWQgPSB0aGlzLnBhZ2VEaWN0LmdldChcIlN0cnVjdFBhcmVudHNcIik7XG5cbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoaWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbnVtYmVyVHJlZSA9IG5ldyBfbmFtZV9udW1iZXJfdHJlZS5OdW1iZXJUcmVlKHBhcmVudFRyZWUsIHRoaXMucm9vdERpY3QueHJlZik7XG4gICAgY29uc3QgcGFyZW50QXJyYXkgPSBudW1iZXJUcmVlLmdldChpZCk7XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocGFyZW50QXJyYXkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbWFwID0gbmV3IE1hcCgpO1xuXG4gICAgZm9yIChjb25zdCByZWYgb2YgcGFyZW50QXJyYXkpIHtcbiAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKHJlZikpIHtcbiAgICAgICAgdGhpcy5hZGROb2RlKHRoaXMucm9vdERpY3QueHJlZi5mZXRjaChyZWYpLCBtYXApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFkZE5vZGUoZGljdCwgbWFwLCBsZXZlbCA9IDApIHtcbiAgICBpZiAobGV2ZWwgPiBNQVhfREVQVEgpIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShcIlN0cnVjdFRyZWUgTUFYX0RFUFRIIHJlYWNoZWQuXCIpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKG1hcC5oYXMoZGljdCkpIHtcbiAgICAgIHJldHVybiBtYXAuZ2V0KGRpY3QpO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBuZXcgU3RydWN0RWxlbWVudE5vZGUodGhpcywgZGljdCk7XG4gICAgbWFwLnNldChkaWN0LCBlbGVtZW50KTtcbiAgICBjb25zdCBwYXJlbnQgPSBkaWN0LmdldChcIlBcIik7XG5cbiAgICBpZiAoIXBhcmVudCB8fCAoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShwYXJlbnQuZ2V0KFwiVHlwZVwiKSwgXCJTdHJ1Y3RUcmVlUm9vdFwiKSkge1xuICAgICAgaWYgKCF0aGlzLmFkZFRvcExldmVsTm9kZShkaWN0LCBlbGVtZW50KSkge1xuICAgICAgICBtYXAuZGVsZXRlKGRpY3QpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5hZGROb2RlKHBhcmVudCwgbWFwLCBsZXZlbCArIDEpO1xuXG4gICAgaWYgKCFwYXJlbnROb2RlKSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbiAgICBsZXQgc2F2ZSA9IGZhbHNlO1xuXG4gICAgZm9yIChjb25zdCBraWQgb2YgcGFyZW50Tm9kZS5raWRzKSB7XG4gICAgICBpZiAoa2lkLnR5cGUgPT09IFN0cnVjdEVsZW1lbnRUeXBlLkVMRU1FTlQgJiYga2lkLmRpY3QgPT09IGRpY3QpIHtcbiAgICAgICAga2lkLnBhcmVudE5vZGUgPSBlbGVtZW50O1xuICAgICAgICBzYXZlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXNhdmUpIHtcbiAgICAgIG1hcC5kZWxldGUoZGljdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICBhZGRUb3BMZXZlbE5vZGUoZGljdCwgZWxlbWVudCkge1xuICAgIGNvbnN0IG9iaiA9IHRoaXMucm9vdERpY3QuZ2V0KFwiS1wiKTtcblxuICAgIGlmICghb2JqKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKG9iaikpIHtcbiAgICAgIGlmIChvYmoub2JqSWQgIT09IGRpY3Qub2JqSWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm5vZGVzWzBdID0gZWxlbWVudDtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBsZXQgc2F2ZSA9IGZhbHNlO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvYmoubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGtpZFJlZiA9IG9ialtpXTtcblxuICAgICAgaWYgKGtpZFJlZiAmJiBraWRSZWYudG9TdHJpbmcoKSA9PT0gZGljdC5vYmpJZCkge1xuICAgICAgICB0aGlzLm5vZGVzW2ldID0gZWxlbWVudDtcbiAgICAgICAgc2F2ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNhdmU7XG4gIH1cblxuICBnZXQgc2VyaWFsaXphYmxlKCkge1xuICAgIGZ1bmN0aW9uIG5vZGVUb1NlcmlhbGl6YWJsZShub2RlLCBwYXJlbnQsIGxldmVsID0gMCkge1xuICAgICAgaWYgKGxldmVsID4gTUFYX0RFUFRIKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShcIlN0cnVjdFRyZWUgdG9vIGRlZXAgdG8gYmUgZnVsbHkgc2VyaWFsaXplZC5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2JqID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIG9iai5yb2xlID0gbm9kZS5yb2xlO1xuICAgICAgb2JqLmNoaWxkcmVuID0gW107XG4gICAgICBwYXJlbnQuY2hpbGRyZW4ucHVzaChvYmopO1xuICAgICAgY29uc3QgYWx0ID0gbm9kZS5kaWN0LmdldChcIkFsdFwiKTtcblxuICAgICAgaWYgKCgwLCBfdXRpbC5pc1N0cmluZykoYWx0KSkge1xuICAgICAgICBvYmouYWx0ID0gKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShhbHQpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsYW5nID0gbm9kZS5kaWN0LmdldChcIkxhbmdcIik7XG5cbiAgICAgIGlmICgoMCwgX3V0aWwuaXNTdHJpbmcpKGxhbmcpKSB7XG4gICAgICAgIG9iai5sYW5nID0gKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShsYW5nKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBraWQgb2Ygbm9kZS5raWRzKSB7XG4gICAgICAgIGNvbnN0IGtpZEVsZW1lbnQgPSBraWQudHlwZSA9PT0gU3RydWN0RWxlbWVudFR5cGUuRUxFTUVOVCA/IGtpZC5wYXJlbnROb2RlIDogbnVsbDtcblxuICAgICAgICBpZiAoa2lkRWxlbWVudCkge1xuICAgICAgICAgIG5vZGVUb1NlcmlhbGl6YWJsZShraWRFbGVtZW50LCBvYmosIGxldmVsICsgMSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gZWxzZSBpZiAoa2lkLnR5cGUgPT09IFN0cnVjdEVsZW1lbnRUeXBlLlBBR0VfQ09OVEVOVCB8fCBraWQudHlwZSA9PT0gU3RydWN0RWxlbWVudFR5cGUuU1RSRUFNX0NPTlRFTlQpIHtcbiAgICAgICAgICBvYmouY2hpbGRyZW4ucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiBcImNvbnRlbnRcIixcbiAgICAgICAgICAgIGlkOiBgcGFnZSR7a2lkLnBhZ2VPYmpJZH1fbWNpZCR7a2lkLm1jaWR9YFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGtpZC50eXBlID09PSBTdHJ1Y3RFbGVtZW50VHlwZS5PQkpFQ1QpIHtcbiAgICAgICAgICBvYmouY2hpbGRyZW4ucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgaWQ6IGtpZC5yZWZPYmpJZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgcm9vdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgcm9vdC5jaGlsZHJlbiA9IFtdO1xuICAgIHJvb3Qucm9sZSA9IFwiUm9vdFwiO1xuXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLm5vZGVzKSB7XG4gICAgICBpZiAoIWNoaWxkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBub2RlVG9TZXJpYWxpemFibGUoY2hpbGQsIHJvb3QpO1xuICAgIH1cblxuICAgIHJldHVybiByb290O1xuICB9XG5cbn1cblxuZXhwb3J0cy5TdHJ1Y3RUcmVlUGFnZSA9IFN0cnVjdFRyZWVQYWdlO1xuXG4vKioqLyB9KSxcbi8qIDcwICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLk9iamVjdExvYWRlciA9IHZvaWQgMDtcblxudmFyIF9wcmltaXRpdmVzID0gX193X3BkZmpzX3JlcXVpcmVfXyg1KTtcblxudmFyIF9jb3JlX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXyg5KTtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxuZnVuY3Rpb24gbWF5SGF2ZUNoaWxkcmVuKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLlJlZiB8fCB2YWx1ZSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKSh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGFkZENoaWxkcmVuKG5vZGUsIG5vZGVzVG9WaXNpdCkge1xuICBpZiAobm9kZSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpIHtcbiAgICBub2RlID0gbm9kZS5nZXRSYXdWYWx1ZXMoKTtcbiAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKG5vZGUpKSB7XG4gICAgbm9kZSA9IG5vZGUuZGljdC5nZXRSYXdWYWx1ZXMoKTtcbiAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShub2RlKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZvciAoY29uc3QgcmF3VmFsdWUgb2Ygbm9kZSkge1xuICAgIGlmIChtYXlIYXZlQ2hpbGRyZW4ocmF3VmFsdWUpKSB7XG4gICAgICBub2Rlc1RvVmlzaXQucHVzaChyYXdWYWx1ZSk7XG4gICAgfVxuICB9XG59XG5cbmNsYXNzIE9iamVjdExvYWRlciB7XG4gIGNvbnN0cnVjdG9yKGRpY3QsIGtleXMsIHhyZWYpIHtcbiAgICB0aGlzLmRpY3QgPSBkaWN0O1xuICAgIHRoaXMua2V5cyA9IGtleXM7XG4gICAgdGhpcy54cmVmID0geHJlZjtcbiAgICB0aGlzLnJlZlNldCA9IG51bGw7XG4gIH1cblxuICBhc3luYyBsb2FkKCkge1xuICAgIGlmICh0aGlzLnhyZWYuc3RyZWFtLmlzRGF0YUxvYWRlZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBrZXlzLFxuICAgICAgZGljdFxuICAgIH0gPSB0aGlzO1xuICAgIHRoaXMucmVmU2V0ID0gbmV3IF9wcmltaXRpdmVzLlJlZlNldCgpO1xuICAgIGNvbnN0IG5vZGVzVG9WaXNpdCA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0ga2V5cy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBjb25zdCByYXdWYWx1ZSA9IGRpY3QuZ2V0UmF3KGtleXNbaV0pO1xuXG4gICAgICBpZiAocmF3VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBub2Rlc1RvVmlzaXQucHVzaChyYXdWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3dhbGsobm9kZXNUb1Zpc2l0KTtcbiAgfVxuXG4gIGFzeW5jIF93YWxrKG5vZGVzVG9WaXNpdCkge1xuICAgIGNvbnN0IG5vZGVzVG9SZXZpc2l0ID0gW107XG4gICAgY29uc3QgcGVuZGluZ1JlcXVlc3RzID0gW107XG5cbiAgICB3aGlsZSAobm9kZXNUb1Zpc2l0Lmxlbmd0aCkge1xuICAgICAgbGV0IGN1cnJlbnROb2RlID0gbm9kZXNUb1Zpc2l0LnBvcCgpO1xuXG4gICAgICBpZiAoY3VycmVudE5vZGUgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5SZWYpIHtcbiAgICAgICAgaWYgKHRoaXMucmVmU2V0LmhhcyhjdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5yZWZTZXQucHV0KGN1cnJlbnROb2RlKTtcbiAgICAgICAgICBjdXJyZW50Tm9kZSA9IHRoaXMueHJlZi5mZXRjaChjdXJyZW50Tm9kZSk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgaWYgKCEoZXggaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikpIHtcbiAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgT2JqZWN0TG9hZGVyLl93YWxrIC0gcmVxdWVzdGluZyBhbGwgZGF0YTogXCIke2V4fVwiLmApO1xuICAgICAgICAgICAgdGhpcy5yZWZTZXQgPSBudWxsO1xuICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICBtYW5hZ2VyXG4gICAgICAgICAgICB9ID0gdGhpcy54cmVmLnN0cmVhbTtcbiAgICAgICAgICAgIHJldHVybiBtYW5hZ2VyLnJlcXVlc3RBbGxDaHVua3MoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBub2Rlc1RvUmV2aXNpdC5wdXNoKGN1cnJlbnROb2RlKTtcbiAgICAgICAgICBwZW5kaW5nUmVxdWVzdHMucHVzaCh7XG4gICAgICAgICAgICBiZWdpbjogZXguYmVnaW4sXG4gICAgICAgICAgICBlbmQ6IGV4LmVuZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKGN1cnJlbnROb2RlKSkge1xuICAgICAgICBjb25zdCBiYXNlU3RyZWFtcyA9IGN1cnJlbnROb2RlLmdldEJhc2VTdHJlYW1zKCk7XG5cbiAgICAgICAgaWYgKGJhc2VTdHJlYW1zKSB7XG4gICAgICAgICAgbGV0IGZvdW5kTWlzc2luZ0RhdGEgPSBmYWxzZTtcblxuICAgICAgICAgIGZvciAoY29uc3Qgc3RyZWFtIG9mIGJhc2VTdHJlYW1zKSB7XG4gICAgICAgICAgICBpZiAoc3RyZWFtLmlzRGF0YUxvYWRlZCkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm91bmRNaXNzaW5nRGF0YSA9IHRydWU7XG4gICAgICAgICAgICBwZW5kaW5nUmVxdWVzdHMucHVzaCh7XG4gICAgICAgICAgICAgIGJlZ2luOiBzdHJlYW0uc3RhcnQsXG4gICAgICAgICAgICAgIGVuZDogc3RyZWFtLmVuZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGZvdW5kTWlzc2luZ0RhdGEpIHtcbiAgICAgICAgICAgIG5vZGVzVG9SZXZpc2l0LnB1c2goY3VycmVudE5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhZGRDaGlsZHJlbihjdXJyZW50Tm9kZSwgbm9kZXNUb1Zpc2l0KTtcbiAgICB9XG5cbiAgICBpZiAocGVuZGluZ1JlcXVlc3RzLmxlbmd0aCkge1xuICAgICAgYXdhaXQgdGhpcy54cmVmLnN0cmVhbS5tYW5hZ2VyLnJlcXVlc3RSYW5nZXMocGVuZGluZ1JlcXVlc3RzKTtcblxuICAgICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzVG9SZXZpc2l0KSB7XG4gICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuUmVmKSB7XG4gICAgICAgICAgdGhpcy5yZWZTZXQucmVtb3ZlKG5vZGUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLl93YWxrKG5vZGVzVG9SZXZpc2l0KTtcbiAgICB9XG5cbiAgICB0aGlzLnJlZlNldCA9IG51bGw7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG59XG5cbmV4cG9ydHMuT2JqZWN0TG9hZGVyID0gT2JqZWN0TG9hZGVyO1xuXG4vKioqLyB9KSxcbi8qIDcxICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLmluY3JlbWVudGFsVXBkYXRlID0gaW5jcmVtZW50YWxVcGRhdGU7XG5leHBvcnRzLndyaXRlRGljdCA9IHdyaXRlRGljdDtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9wcmltaXRpdmVzID0gX193X3BkZmpzX3JlcXVpcmVfXyg1KTtcblxudmFyIF9jb3JlX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXyg5KTtcblxudmFyIF94bWxfcGFyc2VyID0gX193X3BkZmpzX3JlcXVpcmVfXyg2OCk7XG5cbnZhciBfY3J5cHRvID0gX193X3BkZmpzX3JlcXVpcmVfXyg3Mik7XG5cbmZ1bmN0aW9uIHdyaXRlRGljdChkaWN0LCBidWZmZXIsIHRyYW5zZm9ybSkge1xuICBidWZmZXIucHVzaChcIjw8XCIpO1xuXG4gIGZvciAoY29uc3Qga2V5IG9mIGRpY3QuZ2V0S2V5cygpKSB7XG4gICAgYnVmZmVyLnB1c2goYCAvJHsoMCwgX2NvcmVfdXRpbHMuZXNjYXBlUERGTmFtZSkoa2V5KX0gYCk7XG4gICAgd3JpdGVWYWx1ZShkaWN0LmdldFJhdyhrZXkpLCBidWZmZXIsIHRyYW5zZm9ybSk7XG4gIH1cblxuICBidWZmZXIucHVzaChcIj4+XCIpO1xufVxuXG5mdW5jdGlvbiB3cml0ZVN0cmVhbShzdHJlYW0sIGJ1ZmZlciwgdHJhbnNmb3JtKSB7XG4gIHdyaXRlRGljdChzdHJlYW0uZGljdCwgYnVmZmVyLCB0cmFuc2Zvcm0pO1xuICBidWZmZXIucHVzaChcIiBzdHJlYW1cXG5cIik7XG4gIGxldCBzdHJpbmcgPSBzdHJlYW0uZ2V0U3RyaW5nKCk7XG5cbiAgaWYgKHRyYW5zZm9ybSAhPT0gbnVsbCkge1xuICAgIHN0cmluZyA9IHRyYW5zZm9ybS5lbmNyeXB0U3RyaW5nKHN0cmluZyk7XG4gIH1cblxuICBidWZmZXIucHVzaChzdHJpbmcsIFwiXFxuZW5kc3RyZWFtXFxuXCIpO1xufVxuXG5mdW5jdGlvbiB3cml0ZUFycmF5KGFycmF5LCBidWZmZXIsIHRyYW5zZm9ybSkge1xuICBidWZmZXIucHVzaChcIltcIik7XG4gIGxldCBmaXJzdCA9IHRydWU7XG5cbiAgZm9yIChjb25zdCB2YWwgb2YgYXJyYXkpIHtcbiAgICBpZiAoIWZpcnN0KSB7XG4gICAgICBidWZmZXIucHVzaChcIiBcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpcnN0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgd3JpdGVWYWx1ZSh2YWwsIGJ1ZmZlciwgdHJhbnNmb3JtKTtcbiAgfVxuXG4gIGJ1ZmZlci5wdXNoKFwiXVwiKTtcbn1cblxuZnVuY3Rpb24gbnVtYmVyVG9TdHJpbmcodmFsdWUpIHtcbiAgaWYgKE51bWJlci5pc0ludGVnZXIodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG4gIH1cblxuICBjb25zdCByb3VuZGVkVmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlICogMTAwKTtcblxuICBpZiAocm91bmRlZFZhbHVlICUgMTAwID09PSAwKSB7XG4gICAgcmV0dXJuIChyb3VuZGVkVmFsdWUgLyAxMDApLnRvU3RyaW5nKCk7XG4gIH1cblxuICBpZiAocm91bmRlZFZhbHVlICUgMTAgPT09IDApIHtcbiAgICByZXR1cm4gdmFsdWUudG9GaXhlZCgxKTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZS50b0ZpeGVkKDIpO1xufVxuXG5mdW5jdGlvbiB3cml0ZVZhbHVlKHZhbHVlLCBidWZmZXIsIHRyYW5zZm9ybSkge1xuICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkodmFsdWUpKSB7XG4gICAgYnVmZmVyLnB1c2goYC8keygwLCBfY29yZV91dGlscy5lc2NhcGVQREZOYW1lKSh2YWx1ZS5uYW1lKX1gKTtcbiAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKHZhbHVlKSkge1xuICAgIGJ1ZmZlci5wdXNoKGAke3ZhbHVlLm51bX0gJHt2YWx1ZS5nZW59IFJgKTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHdyaXRlQXJyYXkodmFsdWUsIGJ1ZmZlciwgdHJhbnNmb3JtKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICBpZiAodHJhbnNmb3JtICE9PSBudWxsKSB7XG4gICAgICB2YWx1ZSA9IHRyYW5zZm9ybS5lbmNyeXB0U3RyaW5nKHZhbHVlKTtcbiAgICB9XG5cbiAgICBidWZmZXIucHVzaChgKCR7KDAsIF91dGlsLmVzY2FwZVN0cmluZykodmFsdWUpfSlgKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICBidWZmZXIucHVzaChudW1iZXJUb1N0cmluZyh2YWx1ZSkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICBidWZmZXIucHVzaCh2YWx1ZS50b1N0cmluZygpKTtcbiAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KSh2YWx1ZSkpIHtcbiAgICB3cml0ZURpY3QodmFsdWUsIGJ1ZmZlciwgdHJhbnNmb3JtKTtcbiAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKHZhbHVlKSkge1xuICAgIHdyaXRlU3RyZWFtKHZhbHVlLCBidWZmZXIsIHRyYW5zZm9ybSk7XG4gIH0gZWxzZSBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICBidWZmZXIucHVzaChcIm51bGxcIik7XG4gIH0gZWxzZSB7XG4gICAgKDAsIF91dGlsLndhcm4pKGBVbmhhbmRsZWQgdmFsdWUgaW4gd3JpdGVyOiAke3R5cGVvZiB2YWx1ZX0sIHBsZWFzZSBmaWxlIGEgYnVnLmApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHdyaXRlSW50KG51bWJlciwgc2l6ZSwgb2Zmc2V0LCBidWZmZXIpIHtcbiAgZm9yIChsZXQgaSA9IHNpemUgKyBvZmZzZXQgLSAxOyBpID4gb2Zmc2V0IC0gMTsgaS0tKSB7XG4gICAgYnVmZmVyW2ldID0gbnVtYmVyICYgMHhmZjtcbiAgICBudW1iZXIgPj49IDg7XG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgc2l6ZTtcbn1cblxuZnVuY3Rpb24gd3JpdGVTdHJpbmcoc3RyaW5nLCBvZmZzZXQsIGJ1ZmZlcikge1xuICBmb3IgKGxldCBpID0gMCwgbGVuID0gc3RyaW5nLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgYnVmZmVyW29mZnNldCArIGldID0gc3RyaW5nLmNoYXJDb2RlQXQoaSkgJiAweGZmO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVNRDUoZmlsZXNpemUsIHhyZWZJbmZvKSB7XG4gIGNvbnN0IHRpbWUgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKTtcbiAgY29uc3QgZmlsZW5hbWUgPSB4cmVmSW5mby5maWxlbmFtZSB8fCBcIlwiO1xuICBjb25zdCBtZDVCdWZmZXIgPSBbdGltZS50b1N0cmluZygpLCBmaWxlbmFtZSwgZmlsZXNpemUudG9TdHJpbmcoKV07XG4gIGxldCBtZDVCdWZmZXJMZW4gPSBtZDVCdWZmZXIucmVkdWNlKChhLCBzdHIpID0+IGEgKyBzdHIubGVuZ3RoLCAwKTtcblxuICBmb3IgKGNvbnN0IHZhbHVlIG9mIE9iamVjdC52YWx1ZXMoeHJlZkluZm8uaW5mbykpIHtcbiAgICBtZDVCdWZmZXIucHVzaCh2YWx1ZSk7XG4gICAgbWQ1QnVmZmVyTGVuICs9IHZhbHVlLmxlbmd0aDtcbiAgfVxuXG4gIGNvbnN0IGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkobWQ1QnVmZmVyTGVuKTtcbiAgbGV0IG9mZnNldCA9IDA7XG5cbiAgZm9yIChjb25zdCBzdHIgb2YgbWQ1QnVmZmVyKSB7XG4gICAgd3JpdGVTdHJpbmcoc3RyLCBvZmZzZXQsIGFycmF5KTtcbiAgICBvZmZzZXQgKz0gc3RyLmxlbmd0aDtcbiAgfVxuXG4gIHJldHVybiAoMCwgX3V0aWwuYnl0ZXNUb1N0cmluZykoKDAsIF9jcnlwdG8uY2FsY3VsYXRlTUQ1KShhcnJheSkpO1xufVxuXG5mdW5jdGlvbiB3cml0ZVhGQURhdGFGb3JBY3JvZm9ybShzdHIsIG5ld1JlZnMpIHtcbiAgY29uc3QgeG1sID0gbmV3IF94bWxfcGFyc2VyLlNpbXBsZVhNTFBhcnNlcih7XG4gICAgaGFzQXR0cmlidXRlczogdHJ1ZVxuICB9KS5wYXJzZUZyb21TdHJpbmcoc3RyKTtcblxuICBmb3IgKGNvbnN0IHtcbiAgICB4ZmFcbiAgfSBvZiBuZXdSZWZzKSB7XG4gICAgaWYgKCF4ZmEpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHtcbiAgICAgIHBhdGgsXG4gICAgICB2YWx1ZVxuICAgIH0gPSB4ZmE7XG5cbiAgICBpZiAoIXBhdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IG5vZGUgPSB4bWwuZG9jdW1lbnRFbGVtZW50LnNlYXJjaE5vZGUoKDAsIF9jb3JlX3V0aWxzLnBhcnNlWEZBUGF0aCkocGF0aCksIDApO1xuXG4gICAgaWYgKG5vZGUpIHtcbiAgICAgIG5vZGUuY2hpbGROb2RlcyA9IFtuZXcgX3htbF9wYXJzZXIuU2ltcGxlRE9NTm9kZShcIiN0ZXh0XCIsIHZhbHVlKV07XG4gICAgfSBlbHNlIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShgTm9kZSBub3QgZm91bmQgZm9yIHBhdGg6ICR7cGF0aH1gKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBidWZmZXIgPSBbXTtcbiAgeG1sLmRvY3VtZW50RWxlbWVudC5kdW1wKGJ1ZmZlcik7XG4gIHJldHVybiBidWZmZXIuam9pbihcIlwiKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlWEZBKHtcbiAgeGZhRGF0YSxcbiAgeGZhRGF0YXNldHNSZWYsXG4gIGhhc1hmYURhdGFzZXRzRW50cnksXG4gIGFjcm9Gb3JtUmVmLFxuICBhY3JvRm9ybSxcbiAgbmV3UmVmcyxcbiAgeHJlZixcbiAgeHJlZkluZm9cbn0pIHtcbiAgaWYgKHhyZWYgPT09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIWhhc1hmYURhdGFzZXRzRW50cnkpIHtcbiAgICBpZiAoIWFjcm9Gb3JtUmVmKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJYRkEgLSBDYW5ub3Qgc2F2ZSBpdFwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBvbGRYZmEgPSBhY3JvRm9ybS5nZXQoXCJYRkFcIik7XG4gICAgY29uc3QgbmV3WGZhID0gb2xkWGZhLnNsaWNlKCk7XG4gICAgbmV3WGZhLnNwbGljZSgyLCAwLCBcImRhdGFzZXRzXCIpO1xuICAgIG5ld1hmYS5zcGxpY2UoMywgMCwgeGZhRGF0YXNldHNSZWYpO1xuICAgIGFjcm9Gb3JtLnNldChcIlhGQVwiLCBuZXdYZmEpO1xuICAgIGNvbnN0IGVuY3J5cHQgPSB4cmVmLmVuY3J5cHQ7XG4gICAgbGV0IHRyYW5zZm9ybSA9IG51bGw7XG5cbiAgICBpZiAoZW5jcnlwdCkge1xuICAgICAgdHJhbnNmb3JtID0gZW5jcnlwdC5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0oYWNyb0Zvcm1SZWYubnVtLCBhY3JvRm9ybVJlZi5nZW4pO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlciA9IFtgJHthY3JvRm9ybVJlZi5udW19ICR7YWNyb0Zvcm1SZWYuZ2VufSBvYmpcXG5gXTtcbiAgICB3cml0ZURpY3QoYWNyb0Zvcm0sIGJ1ZmZlciwgdHJhbnNmb3JtKTtcbiAgICBidWZmZXIucHVzaChcIlxcblwiKTtcbiAgICBhY3JvRm9ybS5zZXQoXCJYRkFcIiwgb2xkWGZhKTtcbiAgICBuZXdSZWZzLnB1c2goe1xuICAgICAgcmVmOiBhY3JvRm9ybVJlZixcbiAgICAgIGRhdGE6IGJ1ZmZlci5qb2luKFwiXCIpXG4gICAgfSk7XG4gIH1cblxuICBpZiAoeGZhRGF0YSA9PT0gbnVsbCkge1xuICAgIGNvbnN0IGRhdGFzZXRzID0geHJlZi5mZXRjaElmUmVmKHhmYURhdGFzZXRzUmVmKTtcbiAgICB4ZmFEYXRhID0gd3JpdGVYRkFEYXRhRm9yQWNyb2Zvcm0oZGF0YXNldHMuZ2V0U3RyaW5nKCksIG5ld1JlZnMpO1xuICB9XG5cbiAgY29uc3QgZW5jcnlwdCA9IHhyZWYuZW5jcnlwdDtcblxuICBpZiAoZW5jcnlwdCkge1xuICAgIGNvbnN0IHRyYW5zZm9ybSA9IGVuY3J5cHQuY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKHhmYURhdGFzZXRzUmVmLm51bSwgeGZhRGF0YXNldHNSZWYuZ2VuKTtcbiAgICB4ZmFEYXRhID0gdHJhbnNmb3JtLmVuY3J5cHRTdHJpbmcoeGZhRGF0YSk7XG4gIH1cblxuICBjb25zdCBkYXRhID0gYCR7eGZhRGF0YXNldHNSZWYubnVtfSAke3hmYURhdGFzZXRzUmVmLmdlbn0gb2JqXFxuYCArIGA8PCAvVHlwZSAvRW1iZWRkZWRGaWxlIC9MZW5ndGggJHt4ZmFEYXRhLmxlbmd0aH0+PlxcbnN0cmVhbVxcbmAgKyB4ZmFEYXRhICsgXCJcXG5lbmRzdHJlYW1cXG5lbmRvYmpcXG5cIjtcbiAgbmV3UmVmcy5wdXNoKHtcbiAgICByZWY6IHhmYURhdGFzZXRzUmVmLFxuICAgIGRhdGFcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGluY3JlbWVudGFsVXBkYXRlKHtcbiAgb3JpZ2luYWxEYXRhLFxuICB4cmVmSW5mbyxcbiAgbmV3UmVmcyxcbiAgeHJlZiA9IG51bGwsXG4gIGhhc1hmYSA9IGZhbHNlLFxuICB4ZmFEYXRhc2V0c1JlZiA9IG51bGwsXG4gIGhhc1hmYURhdGFzZXRzRW50cnkgPSBmYWxzZSxcbiAgYWNyb0Zvcm1SZWYgPSBudWxsLFxuICBhY3JvRm9ybSA9IG51bGwsXG4gIHhmYURhdGEgPSBudWxsXG59KSB7XG4gIGlmIChoYXNYZmEpIHtcbiAgICB1cGRhdGVYRkEoe1xuICAgICAgeGZhRGF0YSxcbiAgICAgIHhmYURhdGFzZXRzUmVmLFxuICAgICAgaGFzWGZhRGF0YXNldHNFbnRyeSxcbiAgICAgIGFjcm9Gb3JtUmVmLFxuICAgICAgYWNyb0Zvcm0sXG4gICAgICBuZXdSZWZzLFxuICAgICAgeHJlZixcbiAgICAgIHhyZWZJbmZvXG4gICAgfSk7XG4gIH1cblxuICBjb25zdCBuZXdYcmVmID0gbmV3IF9wcmltaXRpdmVzLkRpY3QobnVsbCk7XG4gIGNvbnN0IHJlZkZvclhyZWZUYWJsZSA9IHhyZWZJbmZvLm5ld1JlZjtcbiAgbGV0IGJ1ZmZlciwgYmFzZU9mZnNldDtcbiAgY29uc3QgbGFzdEJ5dGUgPSBvcmlnaW5hbERhdGFbb3JpZ2luYWxEYXRhLmxlbmd0aCAtIDFdO1xuXG4gIGlmIChsYXN0Qnl0ZSA9PT0gMHgwYSB8fCBsYXN0Qnl0ZSA9PT0gMHgwZCkge1xuICAgIGJ1ZmZlciA9IFtdO1xuICAgIGJhc2VPZmZzZXQgPSBvcmlnaW5hbERhdGEubGVuZ3RoO1xuICB9IGVsc2Uge1xuICAgIGJ1ZmZlciA9IFtcIlxcblwiXTtcbiAgICBiYXNlT2Zmc2V0ID0gb3JpZ2luYWxEYXRhLmxlbmd0aCArIDE7XG4gIH1cblxuICBuZXdYcmVmLnNldChcIlNpemVcIiwgcmVmRm9yWHJlZlRhYmxlLm51bSArIDEpO1xuICBuZXdYcmVmLnNldChcIlByZXZcIiwgeHJlZkluZm8uc3RhcnRYUmVmKTtcbiAgbmV3WHJlZi5zZXQoXCJUeXBlXCIsIF9wcmltaXRpdmVzLk5hbWUuZ2V0KFwiWFJlZlwiKSk7XG5cbiAgaWYgKHhyZWZJbmZvLnJvb3RSZWYgIT09IG51bGwpIHtcbiAgICBuZXdYcmVmLnNldChcIlJvb3RcIiwgeHJlZkluZm8ucm9vdFJlZik7XG4gIH1cblxuICBpZiAoeHJlZkluZm8uaW5mb1JlZiAhPT0gbnVsbCkge1xuICAgIG5ld1hyZWYuc2V0KFwiSW5mb1wiLCB4cmVmSW5mby5pbmZvUmVmKTtcbiAgfVxuXG4gIGlmICh4cmVmSW5mby5lbmNyeXB0UmVmICE9PSBudWxsKSB7XG4gICAgbmV3WHJlZi5zZXQoXCJFbmNyeXB0XCIsIHhyZWZJbmZvLmVuY3J5cHRSZWYpO1xuICB9XG5cbiAgbmV3UmVmcy5wdXNoKHtcbiAgICByZWY6IHJlZkZvclhyZWZUYWJsZSxcbiAgICBkYXRhOiBcIlwiXG4gIH0pO1xuICBuZXdSZWZzID0gbmV3UmVmcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgcmV0dXJuIGEucmVmLm51bSAtIGIucmVmLm51bTtcbiAgfSk7XG4gIGNvbnN0IHhyZWZUYWJsZURhdGEgPSBbWzAsIDEsIDB4ZmZmZl1dO1xuICBjb25zdCBpbmRleGVzID0gWzAsIDFdO1xuICBsZXQgbWF4T2Zmc2V0ID0gMDtcblxuICBmb3IgKGNvbnN0IHtcbiAgICByZWYsXG4gICAgZGF0YVxuICB9IG9mIG5ld1JlZnMpIHtcbiAgICBtYXhPZmZzZXQgPSBNYXRoLm1heChtYXhPZmZzZXQsIGJhc2VPZmZzZXQpO1xuICAgIHhyZWZUYWJsZURhdGEucHVzaChbMSwgYmFzZU9mZnNldCwgTWF0aC5taW4ocmVmLmdlbiwgMHhmZmZmKV0pO1xuICAgIGJhc2VPZmZzZXQgKz0gZGF0YS5sZW5ndGg7XG4gICAgaW5kZXhlcy5wdXNoKHJlZi5udW0sIDEpO1xuICAgIGJ1ZmZlci5wdXNoKGRhdGEpO1xuICB9XG5cbiAgbmV3WHJlZi5zZXQoXCJJbmRleFwiLCBpbmRleGVzKTtcblxuICBpZiAoQXJyYXkuaXNBcnJheSh4cmVmSW5mby5maWxlSWRzKSAmJiB4cmVmSW5mby5maWxlSWRzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBtZDUgPSBjb21wdXRlTUQ1KGJhc2VPZmZzZXQsIHhyZWZJbmZvKTtcbiAgICBuZXdYcmVmLnNldChcIklEXCIsIFt4cmVmSW5mby5maWxlSWRzWzBdLCBtZDVdKTtcbiAgfVxuXG4gIGNvbnN0IG9mZnNldFNpemUgPSBNYXRoLmNlaWwoTWF0aC5sb2cyKG1heE9mZnNldCkgLyA4KTtcbiAgY29uc3Qgc2l6ZXMgPSBbMSwgb2Zmc2V0U2l6ZSwgMl07XG4gIGNvbnN0IHN0cnVjdFNpemUgPSBzaXplc1swXSArIHNpemVzWzFdICsgc2l6ZXNbMl07XG4gIGNvbnN0IHRhYmxlTGVuZ3RoID0gc3RydWN0U2l6ZSAqIHhyZWZUYWJsZURhdGEubGVuZ3RoO1xuICBuZXdYcmVmLnNldChcIldcIiwgc2l6ZXMpO1xuICBuZXdYcmVmLnNldChcIkxlbmd0aFwiLCB0YWJsZUxlbmd0aCk7XG4gIGJ1ZmZlci5wdXNoKGAke3JlZkZvclhyZWZUYWJsZS5udW19ICR7cmVmRm9yWHJlZlRhYmxlLmdlbn0gb2JqXFxuYCk7XG4gIHdyaXRlRGljdChuZXdYcmVmLCBidWZmZXIsIG51bGwpO1xuICBidWZmZXIucHVzaChcIiBzdHJlYW1cXG5cIik7XG4gIGNvbnN0IGJ1ZmZlckxlbiA9IGJ1ZmZlci5yZWR1Y2UoKGEsIHN0cikgPT4gYSArIHN0ci5sZW5ndGgsIDApO1xuICBjb25zdCBmb290ZXIgPSBgXFxuZW5kc3RyZWFtXFxuZW5kb2JqXFxuc3RhcnR4cmVmXFxuJHtiYXNlT2Zmc2V0fVxcbiUlRU9GXFxuYDtcbiAgY29uc3QgYXJyYXkgPSBuZXcgVWludDhBcnJheShvcmlnaW5hbERhdGEubGVuZ3RoICsgYnVmZmVyTGVuICsgdGFibGVMZW5ndGggKyBmb290ZXIubGVuZ3RoKTtcbiAgYXJyYXkuc2V0KG9yaWdpbmFsRGF0YSk7XG4gIGxldCBvZmZzZXQgPSBvcmlnaW5hbERhdGEubGVuZ3RoO1xuXG4gIGZvciAoY29uc3Qgc3RyIG9mIGJ1ZmZlcikge1xuICAgIHdyaXRlU3RyaW5nKHN0ciwgb2Zmc2V0LCBhcnJheSk7XG4gICAgb2Zmc2V0ICs9IHN0ci5sZW5ndGg7XG4gIH1cblxuICBmb3IgKGNvbnN0IFt0eXBlLCBvYmpPZmZzZXQsIGdlbl0gb2YgeHJlZlRhYmxlRGF0YSkge1xuICAgIG9mZnNldCA9IHdyaXRlSW50KHR5cGUsIHNpemVzWzBdLCBvZmZzZXQsIGFycmF5KTtcbiAgICBvZmZzZXQgPSB3cml0ZUludChvYmpPZmZzZXQsIHNpemVzWzFdLCBvZmZzZXQsIGFycmF5KTtcbiAgICBvZmZzZXQgPSB3cml0ZUludChnZW4sIHNpemVzWzJdLCBvZmZzZXQsIGFycmF5KTtcbiAgfVxuXG4gIHdyaXRlU3RyaW5nKGZvb3Rlciwgb2Zmc2V0LCBhcnJheSk7XG4gIHJldHVybiBhcnJheTtcbn1cblxuLyoqKi8gfSksXG4vKiA3MiAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5jYWxjdWxhdGVTSEEyNTYgPSBleHBvcnRzLmNhbGN1bGF0ZU1ENSA9IGV4cG9ydHMuUERGMjAgPSBleHBvcnRzLlBERjE3ID0gZXhwb3J0cy5DaXBoZXJUcmFuc2Zvcm1GYWN0b3J5ID0gZXhwb3J0cy5BUkNGb3VyQ2lwaGVyID0gZXhwb3J0cy5BRVMyNTZDaXBoZXIgPSBleHBvcnRzLkFFUzEyOENpcGhlciA9IHZvaWQgMDtcbmV4cG9ydHMuY2FsY3VsYXRlU0hBMzg0ID0gY2FsY3VsYXRlU0hBMzg0O1xuZXhwb3J0cy5jYWxjdWxhdGVTSEE1MTIgPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfcHJpbWl0aXZlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNSk7XG5cbnZhciBfZGVjcnlwdF9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDczKTtcblxuY2xhc3MgQVJDRm91ckNpcGhlciB7XG4gIGNvbnN0cnVjdG9yKGtleSkge1xuICAgIHRoaXMuYSA9IDA7XG4gICAgdGhpcy5iID0gMDtcbiAgICBjb25zdCBzID0gbmV3IFVpbnQ4QXJyYXkoMjU2KTtcbiAgICBjb25zdCBrZXlMZW5ndGggPSBrZXkubGVuZ3RoO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICAgICAgc1tpXSA9IGk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDAsIGogPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgICAgIGNvbnN0IHRtcCA9IHNbaV07XG4gICAgICBqID0gaiArIHRtcCArIGtleVtpICUga2V5TGVuZ3RoXSAmIDB4ZmY7XG4gICAgICBzW2ldID0gc1tqXTtcbiAgICAgIHNbal0gPSB0bXA7XG4gICAgfVxuXG4gICAgdGhpcy5zID0gcztcbiAgfVxuXG4gIGVuY3J5cHRCbG9jayhkYXRhKSB7XG4gICAgbGV0IGEgPSB0aGlzLmEsXG4gICAgICAgIGIgPSB0aGlzLmI7XG4gICAgY29uc3QgcyA9IHRoaXMucztcbiAgICBjb25zdCBuID0gZGF0YS5sZW5ndGg7XG4gICAgY29uc3Qgb3V0cHV0ID0gbmV3IFVpbnQ4QXJyYXkobik7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgYSA9IGEgKyAxICYgMHhmZjtcbiAgICAgIGNvbnN0IHRtcCA9IHNbYV07XG4gICAgICBiID0gYiArIHRtcCAmIDB4ZmY7XG4gICAgICBjb25zdCB0bXAyID0gc1tiXTtcbiAgICAgIHNbYV0gPSB0bXAyO1xuICAgICAgc1tiXSA9IHRtcDtcbiAgICAgIG91dHB1dFtpXSA9IGRhdGFbaV0gXiBzW3RtcCArIHRtcDIgJiAweGZmXTtcbiAgICB9XG5cbiAgICB0aGlzLmEgPSBhO1xuICAgIHRoaXMuYiA9IGI7XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfVxuXG4gIGRlY3J5cHRCbG9jayhkYXRhKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5jcnlwdEJsb2NrKGRhdGEpO1xuICB9XG5cbiAgZW5jcnlwdChkYXRhKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5jcnlwdEJsb2NrKGRhdGEpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5BUkNGb3VyQ2lwaGVyID0gQVJDRm91ckNpcGhlcjtcblxuY29uc3QgY2FsY3VsYXRlTUQ1ID0gZnVuY3Rpb24gY2FsY3VsYXRlTUQ1Q2xvc3VyZSgpIHtcbiAgY29uc3QgciA9IG5ldyBVaW50OEFycmF5KFs3LCAxMiwgMTcsIDIyLCA3LCAxMiwgMTcsIDIyLCA3LCAxMiwgMTcsIDIyLCA3LCAxMiwgMTcsIDIyLCA1LCA5LCAxNCwgMjAsIDUsIDksIDE0LCAyMCwgNSwgOSwgMTQsIDIwLCA1LCA5LCAxNCwgMjAsIDQsIDExLCAxNiwgMjMsIDQsIDExLCAxNiwgMjMsIDQsIDExLCAxNiwgMjMsIDQsIDExLCAxNiwgMjMsIDYsIDEwLCAxNSwgMjEsIDYsIDEwLCAxNSwgMjEsIDYsIDEwLCAxNSwgMjEsIDYsIDEwLCAxNSwgMjFdKTtcbiAgY29uc3QgayA9IG5ldyBJbnQzMkFycmF5KFstNjgwODc2OTM2LCAtMzg5NTY0NTg2LCA2MDYxMDU4MTksIC0xMDQ0NTI1MzMwLCAtMTc2NDE4ODk3LCAxMjAwMDgwNDI2LCAtMTQ3MzIzMTM0MSwgLTQ1NzA1OTgzLCAxNzcwMDM1NDE2LCAtMTk1ODQxNDQxNywgLTQyMDYzLCAtMTk5MDQwNDE2MiwgMTgwNDYwMzY4MiwgLTQwMzQxMTAxLCAtMTUwMjAwMjI5MCwgMTIzNjUzNTMyOSwgLTE2NTc5NjUxMCwgLTEwNjk1MDE2MzIsIDY0MzcxNzcxMywgLTM3Mzg5NzMwMiwgLTcwMTU1ODY5MSwgMzgwMTYwODMsIC02NjA0NzgzMzUsIC00MDU1Mzc4NDgsIDU2ODQ0NjQzOCwgLTEwMTk4MDM2OTAsIC0xODczNjM5NjEsIDExNjM1MzE1MDEsIC0xNDQ0NjgxNDY3LCAtNTE0MDM3ODQsIDE3MzUzMjg0NzMsIC0xOTI2NjA3NzM0LCAtMzc4NTU4LCAtMjAyMjU3NDQ2MywgMTgzOTAzMDU2MiwgLTM1MzA5NTU2LCAtMTUzMDk5MjA2MCwgMTI3Mjg5MzM1MywgLTE1NTQ5NzYzMiwgLTEwOTQ3MzA2NDAsIDY4MTI3OTE3NCwgLTM1ODUzNzIyMiwgLTcyMjUyMTk3OSwgNzYwMjkxODksIC02NDAzNjQ0ODcsIC00MjE4MTU4MzUsIDUzMDc0MjUyMCwgLTk5NTMzODY1MSwgLTE5ODYzMDg0NCwgMTEyNjg5MTQxNSwgLTE0MTYzNTQ5MDUsIC01NzQzNDA1NSwgMTcwMDQ4NTU3MSwgLTE4OTQ5ODY2MDYsIC0xMDUxNTIzLCAtMjA1NDkyMjc5OSwgMTg3MzMxMzM1OSwgLTMwNjExNzQ0LCAtMTU2MDE5ODM4MCwgMTMwOTE1MTY0OSwgLTE0NTUyMzA3MCwgLTExMjAyMTAzNzksIDcxODc4NzI1OSwgLTM0MzQ4NTU1MV0pO1xuXG4gIGZ1bmN0aW9uIGhhc2goZGF0YSwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgICBsZXQgaDAgPSAxNzMyNTg0MTkzLFxuICAgICAgICBoMSA9IC0yNzE3MzM4NzksXG4gICAgICAgIGgyID0gLTE3MzI1ODQxOTQsXG4gICAgICAgIGgzID0gMjcxNzMzODc4O1xuICAgIGNvbnN0IHBhZGRlZExlbmd0aCA9IGxlbmd0aCArIDcyICYgfjYzO1xuICAgIGNvbnN0IHBhZGRlZCA9IG5ldyBVaW50OEFycmF5KHBhZGRlZExlbmd0aCk7XG4gICAgbGV0IGksIGo7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgIHBhZGRlZFtpXSA9IGRhdGFbb2Zmc2V0KytdO1xuICAgIH1cblxuICAgIHBhZGRlZFtpKytdID0gMHg4MDtcbiAgICBjb25zdCBuID0gcGFkZGVkTGVuZ3RoIC0gODtcblxuICAgIHdoaWxlIChpIDwgbikge1xuICAgICAgcGFkZGVkW2krK10gPSAwO1xuICAgIH1cblxuICAgIHBhZGRlZFtpKytdID0gbGVuZ3RoIDw8IDMgJiAweGZmO1xuICAgIHBhZGRlZFtpKytdID0gbGVuZ3RoID4+IDUgJiAweGZmO1xuICAgIHBhZGRlZFtpKytdID0gbGVuZ3RoID4+IDEzICYgMHhmZjtcbiAgICBwYWRkZWRbaSsrXSA9IGxlbmd0aCA+PiAyMSAmIDB4ZmY7XG4gICAgcGFkZGVkW2krK10gPSBsZW5ndGggPj4+IDI5ICYgMHhmZjtcbiAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgcGFkZGVkW2krK10gPSAwO1xuICAgIHBhZGRlZFtpKytdID0gMDtcbiAgICBjb25zdCB3ID0gbmV3IEludDMyQXJyYXkoMTYpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHBhZGRlZExlbmd0aDspIHtcbiAgICAgIGZvciAoaiA9IDA7IGogPCAxNjsgKytqLCBpICs9IDQpIHtcbiAgICAgICAgd1tqXSA9IHBhZGRlZFtpXSB8IHBhZGRlZFtpICsgMV0gPDwgOCB8IHBhZGRlZFtpICsgMl0gPDwgMTYgfCBwYWRkZWRbaSArIDNdIDw8IDI0O1xuICAgICAgfVxuXG4gICAgICBsZXQgYSA9IGgwLFxuICAgICAgICAgIGIgPSBoMSxcbiAgICAgICAgICBjID0gaDIsXG4gICAgICAgICAgZCA9IGgzLFxuICAgICAgICAgIGYsXG4gICAgICAgICAgZztcblxuICAgICAgZm9yIChqID0gMDsgaiA8IDY0OyArK2opIHtcbiAgICAgICAgaWYgKGogPCAxNikge1xuICAgICAgICAgIGYgPSBiICYgYyB8IH5iICYgZDtcbiAgICAgICAgICBnID0gajtcbiAgICAgICAgfSBlbHNlIGlmIChqIDwgMzIpIHtcbiAgICAgICAgICBmID0gZCAmIGIgfCB+ZCAmIGM7XG4gICAgICAgICAgZyA9IDUgKiBqICsgMSAmIDE1O1xuICAgICAgICB9IGVsc2UgaWYgKGogPCA0OCkge1xuICAgICAgICAgIGYgPSBiIF4gYyBeIGQ7XG4gICAgICAgICAgZyA9IDMgKiBqICsgNSAmIDE1O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGYgPSBjIF4gKGIgfCB+ZCk7XG4gICAgICAgICAgZyA9IDcgKiBqICYgMTU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0bXAgPSBkLFxuICAgICAgICAgICAgICByb3RhdGVBcmcgPSBhICsgZiArIGtbal0gKyB3W2ddIHwgMCxcbiAgICAgICAgICAgICAgcm90YXRlID0gcltqXTtcbiAgICAgICAgZCA9IGM7XG4gICAgICAgIGMgPSBiO1xuICAgICAgICBiID0gYiArIChyb3RhdGVBcmcgPDwgcm90YXRlIHwgcm90YXRlQXJnID4+PiAzMiAtIHJvdGF0ZSkgfCAwO1xuICAgICAgICBhID0gdG1wO1xuICAgICAgfVxuXG4gICAgICBoMCA9IGgwICsgYSB8IDA7XG4gICAgICBoMSA9IGgxICsgYiB8IDA7XG4gICAgICBoMiA9IGgyICsgYyB8IDA7XG4gICAgICBoMyA9IGgzICsgZCB8IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KFtoMCAmIDB4RkYsIGgwID4+IDggJiAweEZGLCBoMCA+PiAxNiAmIDB4RkYsIGgwID4+PiAyNCAmIDB4RkYsIGgxICYgMHhGRiwgaDEgPj4gOCAmIDB4RkYsIGgxID4+IDE2ICYgMHhGRiwgaDEgPj4+IDI0ICYgMHhGRiwgaDIgJiAweEZGLCBoMiA+PiA4ICYgMHhGRiwgaDIgPj4gMTYgJiAweEZGLCBoMiA+Pj4gMjQgJiAweEZGLCBoMyAmIDB4RkYsIGgzID4+IDggJiAweEZGLCBoMyA+PiAxNiAmIDB4RkYsIGgzID4+PiAyNCAmIDB4RkZdKTtcbiAgfVxuXG4gIHJldHVybiBoYXNoO1xufSgpO1xuXG5leHBvcnRzLmNhbGN1bGF0ZU1ENSA9IGNhbGN1bGF0ZU1ENTtcblxuY2xhc3MgV29yZDY0IHtcbiAgY29uc3RydWN0b3IoaGlnaEludGVnZXIsIGxvd0ludGVnZXIpIHtcbiAgICB0aGlzLmhpZ2ggPSBoaWdoSW50ZWdlciB8IDA7XG4gICAgdGhpcy5sb3cgPSBsb3dJbnRlZ2VyIHwgMDtcbiAgfVxuXG4gIGFuZCh3b3JkKSB7XG4gICAgdGhpcy5oaWdoICY9IHdvcmQuaGlnaDtcbiAgICB0aGlzLmxvdyAmPSB3b3JkLmxvdztcbiAgfVxuXG4gIHhvcih3b3JkKSB7XG4gICAgdGhpcy5oaWdoIF49IHdvcmQuaGlnaDtcbiAgICB0aGlzLmxvdyBePSB3b3JkLmxvdztcbiAgfVxuXG4gIG9yKHdvcmQpIHtcbiAgICB0aGlzLmhpZ2ggfD0gd29yZC5oaWdoO1xuICAgIHRoaXMubG93IHw9IHdvcmQubG93O1xuICB9XG5cbiAgc2hpZnRSaWdodChwbGFjZXMpIHtcbiAgICBpZiAocGxhY2VzID49IDMyKSB7XG4gICAgICB0aGlzLmxvdyA9IHRoaXMuaGlnaCA+Pj4gcGxhY2VzIC0gMzIgfCAwO1xuICAgICAgdGhpcy5oaWdoID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb3cgPSB0aGlzLmxvdyA+Pj4gcGxhY2VzIHwgdGhpcy5oaWdoIDw8IDMyIC0gcGxhY2VzO1xuICAgICAgdGhpcy5oaWdoID0gdGhpcy5oaWdoID4+PiBwbGFjZXMgfCAwO1xuICAgIH1cbiAgfVxuXG4gIHNoaWZ0TGVmdChwbGFjZXMpIHtcbiAgICBpZiAocGxhY2VzID49IDMyKSB7XG4gICAgICB0aGlzLmhpZ2ggPSB0aGlzLmxvdyA8PCBwbGFjZXMgLSAzMjtcbiAgICAgIHRoaXMubG93ID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oaWdoID0gdGhpcy5oaWdoIDw8IHBsYWNlcyB8IHRoaXMubG93ID4+PiAzMiAtIHBsYWNlcztcbiAgICAgIHRoaXMubG93IDw8PSBwbGFjZXM7XG4gICAgfVxuICB9XG5cbiAgcm90YXRlUmlnaHQocGxhY2VzKSB7XG4gICAgbGV0IGxvdywgaGlnaDtcblxuICAgIGlmIChwbGFjZXMgJiAzMikge1xuICAgICAgaGlnaCA9IHRoaXMubG93O1xuICAgICAgbG93ID0gdGhpcy5oaWdoO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb3cgPSB0aGlzLmxvdztcbiAgICAgIGhpZ2ggPSB0aGlzLmhpZ2g7XG4gICAgfVxuXG4gICAgcGxhY2VzICY9IDMxO1xuICAgIHRoaXMubG93ID0gbG93ID4+PiBwbGFjZXMgfCBoaWdoIDw8IDMyIC0gcGxhY2VzO1xuICAgIHRoaXMuaGlnaCA9IGhpZ2ggPj4+IHBsYWNlcyB8IGxvdyA8PCAzMiAtIHBsYWNlcztcbiAgfVxuXG4gIG5vdCgpIHtcbiAgICB0aGlzLmhpZ2ggPSB+dGhpcy5oaWdoO1xuICAgIHRoaXMubG93ID0gfnRoaXMubG93O1xuICB9XG5cbiAgYWRkKHdvcmQpIHtcbiAgICBjb25zdCBsb3dBZGQgPSAodGhpcy5sb3cgPj4+IDApICsgKHdvcmQubG93ID4+PiAwKTtcbiAgICBsZXQgaGlnaEFkZCA9ICh0aGlzLmhpZ2ggPj4+IDApICsgKHdvcmQuaGlnaCA+Pj4gMCk7XG5cbiAgICBpZiAobG93QWRkID4gMHhmZmZmZmZmZikge1xuICAgICAgaGlnaEFkZCArPSAxO1xuICAgIH1cblxuICAgIHRoaXMubG93ID0gbG93QWRkIHwgMDtcbiAgICB0aGlzLmhpZ2ggPSBoaWdoQWRkIHwgMDtcbiAgfVxuXG4gIGNvcHlUbyhieXRlcywgb2Zmc2V0KSB7XG4gICAgYnl0ZXNbb2Zmc2V0XSA9IHRoaXMuaGlnaCA+Pj4gMjQgJiAweGZmO1xuICAgIGJ5dGVzW29mZnNldCArIDFdID0gdGhpcy5oaWdoID4+IDE2ICYgMHhmZjtcbiAgICBieXRlc1tvZmZzZXQgKyAyXSA9IHRoaXMuaGlnaCA+PiA4ICYgMHhmZjtcbiAgICBieXRlc1tvZmZzZXQgKyAzXSA9IHRoaXMuaGlnaCAmIDB4ZmY7XG4gICAgYnl0ZXNbb2Zmc2V0ICsgNF0gPSB0aGlzLmxvdyA+Pj4gMjQgJiAweGZmO1xuICAgIGJ5dGVzW29mZnNldCArIDVdID0gdGhpcy5sb3cgPj4gMTYgJiAweGZmO1xuICAgIGJ5dGVzW29mZnNldCArIDZdID0gdGhpcy5sb3cgPj4gOCAmIDB4ZmY7XG4gICAgYnl0ZXNbb2Zmc2V0ICsgN10gPSB0aGlzLmxvdyAmIDB4ZmY7XG4gIH1cblxuICBhc3NpZ24od29yZCkge1xuICAgIHRoaXMuaGlnaCA9IHdvcmQuaGlnaDtcbiAgICB0aGlzLmxvdyA9IHdvcmQubG93O1xuICB9XG5cbn1cblxuY29uc3QgY2FsY3VsYXRlU0hBMjU2ID0gZnVuY3Rpb24gY2FsY3VsYXRlU0hBMjU2Q2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gcm90cih4LCBuKSB7XG4gICAgcmV0dXJuIHggPj4+IG4gfCB4IDw8IDMyIC0gbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNoKHgsIHksIHopIHtcbiAgICByZXR1cm4geCAmIHkgXiB+eCAmIHo7XG4gIH1cblxuICBmdW5jdGlvbiBtYWooeCwgeSwgeikge1xuICAgIHJldHVybiB4ICYgeSBeIHggJiB6IF4geSAmIHo7XG4gIH1cblxuICBmdW5jdGlvbiBzaWdtYSh4KSB7XG4gICAgcmV0dXJuIHJvdHIoeCwgMikgXiByb3RyKHgsIDEzKSBeIHJvdHIoeCwgMjIpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2lnbWFQcmltZSh4KSB7XG4gICAgcmV0dXJuIHJvdHIoeCwgNikgXiByb3RyKHgsIDExKSBeIHJvdHIoeCwgMjUpO1xuICB9XG5cbiAgZnVuY3Rpb24gbGl0dGxlU2lnbWEoeCkge1xuICAgIHJldHVybiByb3RyKHgsIDcpIF4gcm90cih4LCAxOCkgXiB4ID4+PiAzO1xuICB9XG5cbiAgZnVuY3Rpb24gbGl0dGxlU2lnbWFQcmltZSh4KSB7XG4gICAgcmV0dXJuIHJvdHIoeCwgMTcpIF4gcm90cih4LCAxOSkgXiB4ID4+PiAxMDtcbiAgfVxuXG4gIGNvbnN0IGsgPSBbMHg0MjhhMmY5OCwgMHg3MTM3NDQ5MSwgMHhiNWMwZmJjZiwgMHhlOWI1ZGJhNSwgMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNSwgMHhkODA3YWE5OCwgMHgxMjgzNWIwMSwgMHgyNDMxODViZSwgMHg1NTBjN2RjMywgMHg3MmJlNWQ3NCwgMHg4MGRlYjFmZSwgMHg5YmRjMDZhNywgMHhjMTliZjE3NCwgMHhlNDliNjljMSwgMHhlZmJlNDc4NiwgMHgwZmMxOWRjNiwgMHgyNDBjYTFjYywgMHgyZGU5MmM2ZiwgMHg0YTc0ODRhYSwgMHg1Y2IwYTlkYywgMHg3NmY5ODhkYSwgMHg5ODNlNTE1MiwgMHhhODMxYzY2ZCwgMHhiMDAzMjdjOCwgMHhiZjU5N2ZjNywgMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NywgMHgyN2I3MGE4NSwgMHgyZTFiMjEzOCwgMHg0ZDJjNmRmYywgMHg1MzM4MGQxMywgMHg2NTBhNzM1NCwgMHg3NjZhMGFiYiwgMHg4MWMyYzkyZSwgMHg5MjcyMmM4NSwgMHhhMmJmZThhMSwgMHhhODFhNjY0YiwgMHhjMjRiOGI3MCwgMHhjNzZjNTFhMywgMHhkMTkyZTgxOSwgMHhkNjk5MDYyNCwgMHhmNDBlMzU4NSwgMHgxMDZhYTA3MCwgMHgxOWE0YzExNiwgMHgxZTM3NmMwOCwgMHgyNzQ4Nzc0YywgMHgzNGIwYmNiNSwgMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMywgMHg3NDhmODJlZSwgMHg3OGE1NjM2ZiwgMHg4NGM4NzgxNCwgMHg4Y2M3MDIwOCwgMHg5MGJlZmZmYSwgMHhhNDUwNmNlYiwgMHhiZWY5YTNmNywgMHhjNjcxNzhmMl07XG5cbiAgZnVuY3Rpb24gaGFzaChkYXRhLCBvZmZzZXQsIGxlbmd0aCkge1xuICAgIGxldCBoMCA9IDB4NmEwOWU2NjcsXG4gICAgICAgIGgxID0gMHhiYjY3YWU4NSxcbiAgICAgICAgaDIgPSAweDNjNmVmMzcyLFxuICAgICAgICBoMyA9IDB4YTU0ZmY1M2EsXG4gICAgICAgIGg0ID0gMHg1MTBlNTI3ZixcbiAgICAgICAgaDUgPSAweDliMDU2ODhjLFxuICAgICAgICBoNiA9IDB4MWY4M2Q5YWIsXG4gICAgICAgIGg3ID0gMHg1YmUwY2QxOTtcbiAgICBjb25zdCBwYWRkZWRMZW5ndGggPSBNYXRoLmNlaWwoKGxlbmd0aCArIDkpIC8gNjQpICogNjQ7XG4gICAgY29uc3QgcGFkZGVkID0gbmV3IFVpbnQ4QXJyYXkocGFkZGVkTGVuZ3RoKTtcbiAgICBsZXQgaSwgajtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgcGFkZGVkW2ldID0gZGF0YVtvZmZzZXQrK107XG4gICAgfVxuXG4gICAgcGFkZGVkW2krK10gPSAweDgwO1xuICAgIGNvbnN0IG4gPSBwYWRkZWRMZW5ndGggLSA4O1xuXG4gICAgd2hpbGUgKGkgPCBuKSB7XG4gICAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgfVxuXG4gICAgcGFkZGVkW2krK10gPSAwO1xuICAgIHBhZGRlZFtpKytdID0gMDtcbiAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgcGFkZGVkW2krK10gPSBsZW5ndGggPj4+IDI5ICYgMHhmZjtcbiAgICBwYWRkZWRbaSsrXSA9IGxlbmd0aCA+PiAyMSAmIDB4ZmY7XG4gICAgcGFkZGVkW2krK10gPSBsZW5ndGggPj4gMTMgJiAweGZmO1xuICAgIHBhZGRlZFtpKytdID0gbGVuZ3RoID4+IDUgJiAweGZmO1xuICAgIHBhZGRlZFtpKytdID0gbGVuZ3RoIDw8IDMgJiAweGZmO1xuICAgIGNvbnN0IHcgPSBuZXcgVWludDMyQXJyYXkoNjQpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHBhZGRlZExlbmd0aDspIHtcbiAgICAgIGZvciAoaiA9IDA7IGogPCAxNjsgKytqKSB7XG4gICAgICAgIHdbal0gPSBwYWRkZWRbaV0gPDwgMjQgfCBwYWRkZWRbaSArIDFdIDw8IDE2IHwgcGFkZGVkW2kgKyAyXSA8PCA4IHwgcGFkZGVkW2kgKyAzXTtcbiAgICAgICAgaSArPSA0O1xuICAgICAgfVxuXG4gICAgICBmb3IgKGogPSAxNjsgaiA8IDY0OyArK2opIHtcbiAgICAgICAgd1tqXSA9IGxpdHRsZVNpZ21hUHJpbWUod1tqIC0gMl0pICsgd1tqIC0gN10gKyBsaXR0bGVTaWdtYSh3W2ogLSAxNV0pICsgd1tqIC0gMTZdIHwgMDtcbiAgICAgIH1cblxuICAgICAgbGV0IGEgPSBoMCxcbiAgICAgICAgICBiID0gaDEsXG4gICAgICAgICAgYyA9IGgyLFxuICAgICAgICAgIGQgPSBoMyxcbiAgICAgICAgICBlID0gaDQsXG4gICAgICAgICAgZiA9IGg1LFxuICAgICAgICAgIGcgPSBoNixcbiAgICAgICAgICBoID0gaDcsXG4gICAgICAgICAgdDEsXG4gICAgICAgICAgdDI7XG5cbiAgICAgIGZvciAoaiA9IDA7IGogPCA2NDsgKytqKSB7XG4gICAgICAgIHQxID0gaCArIHNpZ21hUHJpbWUoZSkgKyBjaChlLCBmLCBnKSArIGtbal0gKyB3W2pdO1xuICAgICAgICB0MiA9IHNpZ21hKGEpICsgbWFqKGEsIGIsIGMpO1xuICAgICAgICBoID0gZztcbiAgICAgICAgZyA9IGY7XG4gICAgICAgIGYgPSBlO1xuICAgICAgICBlID0gZCArIHQxIHwgMDtcbiAgICAgICAgZCA9IGM7XG4gICAgICAgIGMgPSBiO1xuICAgICAgICBiID0gYTtcbiAgICAgICAgYSA9IHQxICsgdDIgfCAwO1xuICAgICAgfVxuXG4gICAgICBoMCA9IGgwICsgYSB8IDA7XG4gICAgICBoMSA9IGgxICsgYiB8IDA7XG4gICAgICBoMiA9IGgyICsgYyB8IDA7XG4gICAgICBoMyA9IGgzICsgZCB8IDA7XG4gICAgICBoNCA9IGg0ICsgZSB8IDA7XG4gICAgICBoNSA9IGg1ICsgZiB8IDA7XG4gICAgICBoNiA9IGg2ICsgZyB8IDA7XG4gICAgICBoNyA9IGg3ICsgaCB8IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KFtoMCA+PiAyNCAmIDB4RkYsIGgwID4+IDE2ICYgMHhGRiwgaDAgPj4gOCAmIDB4RkYsIGgwICYgMHhGRiwgaDEgPj4gMjQgJiAweEZGLCBoMSA+PiAxNiAmIDB4RkYsIGgxID4+IDggJiAweEZGLCBoMSAmIDB4RkYsIGgyID4+IDI0ICYgMHhGRiwgaDIgPj4gMTYgJiAweEZGLCBoMiA+PiA4ICYgMHhGRiwgaDIgJiAweEZGLCBoMyA+PiAyNCAmIDB4RkYsIGgzID4+IDE2ICYgMHhGRiwgaDMgPj4gOCAmIDB4RkYsIGgzICYgMHhGRiwgaDQgPj4gMjQgJiAweEZGLCBoNCA+PiAxNiAmIDB4RkYsIGg0ID4+IDggJiAweEZGLCBoNCAmIDB4RkYsIGg1ID4+IDI0ICYgMHhGRiwgaDUgPj4gMTYgJiAweEZGLCBoNSA+PiA4ICYgMHhGRiwgaDUgJiAweEZGLCBoNiA+PiAyNCAmIDB4RkYsIGg2ID4+IDE2ICYgMHhGRiwgaDYgPj4gOCAmIDB4RkYsIGg2ICYgMHhGRiwgaDcgPj4gMjQgJiAweEZGLCBoNyA+PiAxNiAmIDB4RkYsIGg3ID4+IDggJiAweEZGLCBoNyAmIDB4RkZdKTtcbiAgfVxuXG4gIHJldHVybiBoYXNoO1xufSgpO1xuXG5leHBvcnRzLmNhbGN1bGF0ZVNIQTI1NiA9IGNhbGN1bGF0ZVNIQTI1NjtcblxuY29uc3QgY2FsY3VsYXRlU0hBNTEyID0gZnVuY3Rpb24gY2FsY3VsYXRlU0hBNTEyQ2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gY2gocmVzdWx0LCB4LCB5LCB6LCB0bXApIHtcbiAgICByZXN1bHQuYXNzaWduKHgpO1xuICAgIHJlc3VsdC5hbmQoeSk7XG4gICAgdG1wLmFzc2lnbih4KTtcbiAgICB0bXAubm90KCk7XG4gICAgdG1wLmFuZCh6KTtcbiAgICByZXN1bHQueG9yKHRtcCk7XG4gIH1cblxuICBmdW5jdGlvbiBtYWoocmVzdWx0LCB4LCB5LCB6LCB0bXApIHtcbiAgICByZXN1bHQuYXNzaWduKHgpO1xuICAgIHJlc3VsdC5hbmQoeSk7XG4gICAgdG1wLmFzc2lnbih4KTtcbiAgICB0bXAuYW5kKHopO1xuICAgIHJlc3VsdC54b3IodG1wKTtcbiAgICB0bXAuYXNzaWduKHkpO1xuICAgIHRtcC5hbmQoeik7XG4gICAgcmVzdWx0Lnhvcih0bXApO1xuICB9XG5cbiAgZnVuY3Rpb24gc2lnbWEocmVzdWx0LCB4LCB0bXApIHtcbiAgICByZXN1bHQuYXNzaWduKHgpO1xuICAgIHJlc3VsdC5yb3RhdGVSaWdodCgyOCk7XG4gICAgdG1wLmFzc2lnbih4KTtcbiAgICB0bXAucm90YXRlUmlnaHQoMzQpO1xuICAgIHJlc3VsdC54b3IodG1wKTtcbiAgICB0bXAuYXNzaWduKHgpO1xuICAgIHRtcC5yb3RhdGVSaWdodCgzOSk7XG4gICAgcmVzdWx0Lnhvcih0bXApO1xuICB9XG5cbiAgZnVuY3Rpb24gc2lnbWFQcmltZShyZXN1bHQsIHgsIHRtcCkge1xuICAgIHJlc3VsdC5hc3NpZ24oeCk7XG4gICAgcmVzdWx0LnJvdGF0ZVJpZ2h0KDE0KTtcbiAgICB0bXAuYXNzaWduKHgpO1xuICAgIHRtcC5yb3RhdGVSaWdodCgxOCk7XG4gICAgcmVzdWx0Lnhvcih0bXApO1xuICAgIHRtcC5hc3NpZ24oeCk7XG4gICAgdG1wLnJvdGF0ZVJpZ2h0KDQxKTtcbiAgICByZXN1bHQueG9yKHRtcCk7XG4gIH1cblxuICBmdW5jdGlvbiBsaXR0bGVTaWdtYShyZXN1bHQsIHgsIHRtcCkge1xuICAgIHJlc3VsdC5hc3NpZ24oeCk7XG4gICAgcmVzdWx0LnJvdGF0ZVJpZ2h0KDEpO1xuICAgIHRtcC5hc3NpZ24oeCk7XG4gICAgdG1wLnJvdGF0ZVJpZ2h0KDgpO1xuICAgIHJlc3VsdC54b3IodG1wKTtcbiAgICB0bXAuYXNzaWduKHgpO1xuICAgIHRtcC5zaGlmdFJpZ2h0KDcpO1xuICAgIHJlc3VsdC54b3IodG1wKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxpdHRsZVNpZ21hUHJpbWUocmVzdWx0LCB4LCB0bXApIHtcbiAgICByZXN1bHQuYXNzaWduKHgpO1xuICAgIHJlc3VsdC5yb3RhdGVSaWdodCgxOSk7XG4gICAgdG1wLmFzc2lnbih4KTtcbiAgICB0bXAucm90YXRlUmlnaHQoNjEpO1xuICAgIHJlc3VsdC54b3IodG1wKTtcbiAgICB0bXAuYXNzaWduKHgpO1xuICAgIHRtcC5zaGlmdFJpZ2h0KDYpO1xuICAgIHJlc3VsdC54b3IodG1wKTtcbiAgfVxuXG4gIGNvbnN0IGsgPSBbbmV3IFdvcmQ2NCgweDQyOGEyZjk4LCAweGQ3MjhhZTIyKSwgbmV3IFdvcmQ2NCgweDcxMzc0NDkxLCAweDIzZWY2NWNkKSwgbmV3IFdvcmQ2NCgweGI1YzBmYmNmLCAweGVjNGQzYjJmKSwgbmV3IFdvcmQ2NCgweGU5YjVkYmE1LCAweDgxODlkYmJjKSwgbmV3IFdvcmQ2NCgweDM5NTZjMjViLCAweGYzNDhiNTM4KSwgbmV3IFdvcmQ2NCgweDU5ZjExMWYxLCAweGI2MDVkMDE5KSwgbmV3IFdvcmQ2NCgweDkyM2Y4MmE0LCAweGFmMTk0ZjliKSwgbmV3IFdvcmQ2NCgweGFiMWM1ZWQ1LCAweGRhNmQ4MTE4KSwgbmV3IFdvcmQ2NCgweGQ4MDdhYTk4LCAweGEzMDMwMjQyKSwgbmV3IFdvcmQ2NCgweDEyODM1YjAxLCAweDQ1NzA2ZmJlKSwgbmV3IFdvcmQ2NCgweDI0MzE4NWJlLCAweDRlZTRiMjhjKSwgbmV3IFdvcmQ2NCgweDU1MGM3ZGMzLCAweGQ1ZmZiNGUyKSwgbmV3IFdvcmQ2NCgweDcyYmU1ZDc0LCAweGYyN2I4OTZmKSwgbmV3IFdvcmQ2NCgweDgwZGViMWZlLCAweDNiMTY5NmIxKSwgbmV3IFdvcmQ2NCgweDliZGMwNmE3LCAweDI1YzcxMjM1KSwgbmV3IFdvcmQ2NCgweGMxOWJmMTc0LCAweGNmNjkyNjk0KSwgbmV3IFdvcmQ2NCgweGU0OWI2OWMxLCAweDllZjE0YWQyKSwgbmV3IFdvcmQ2NCgweGVmYmU0Nzg2LCAweDM4NGYyNWUzKSwgbmV3IFdvcmQ2NCgweDBmYzE5ZGM2LCAweDhiOGNkNWI1KSwgbmV3IFdvcmQ2NCgweDI0MGNhMWNjLCAweDc3YWM5YzY1KSwgbmV3IFdvcmQ2NCgweDJkZTkyYzZmLCAweDU5MmIwMjc1KSwgbmV3IFdvcmQ2NCgweDRhNzQ4NGFhLCAweDZlYTZlNDgzKSwgbmV3IFdvcmQ2NCgweDVjYjBhOWRjLCAweGJkNDFmYmQ0KSwgbmV3IFdvcmQ2NCgweDc2Zjk4OGRhLCAweDgzMTE1M2I1KSwgbmV3IFdvcmQ2NCgweDk4M2U1MTUyLCAweGVlNjZkZmFiKSwgbmV3IFdvcmQ2NCgweGE4MzFjNjZkLCAweDJkYjQzMjEwKSwgbmV3IFdvcmQ2NCgweGIwMDMyN2M4LCAweDk4ZmIyMTNmKSwgbmV3IFdvcmQ2NCgweGJmNTk3ZmM3LCAweGJlZWYwZWU0KSwgbmV3IFdvcmQ2NCgweGM2ZTAwYmYzLCAweDNkYTg4ZmMyKSwgbmV3IFdvcmQ2NCgweGQ1YTc5MTQ3LCAweDkzMGFhNzI1KSwgbmV3IFdvcmQ2NCgweDA2Y2E2MzUxLCAweGUwMDM4MjZmKSwgbmV3IFdvcmQ2NCgweDE0MjkyOTY3LCAweDBhMGU2ZTcwKSwgbmV3IFdvcmQ2NCgweDI3YjcwYTg1LCAweDQ2ZDIyZmZjKSwgbmV3IFdvcmQ2NCgweDJlMWIyMTM4LCAweDVjMjZjOTI2KSwgbmV3IFdvcmQ2NCgweDRkMmM2ZGZjLCAweDVhYzQyYWVkKSwgbmV3IFdvcmQ2NCgweDUzMzgwZDEzLCAweDlkOTViM2RmKSwgbmV3IFdvcmQ2NCgweDY1MGE3MzU0LCAweDhiYWY2M2RlKSwgbmV3IFdvcmQ2NCgweDc2NmEwYWJiLCAweDNjNzdiMmE4KSwgbmV3IFdvcmQ2NCgweDgxYzJjOTJlLCAweDQ3ZWRhZWU2KSwgbmV3IFdvcmQ2NCgweDkyNzIyYzg1LCAweDE0ODIzNTNiKSwgbmV3IFdvcmQ2NCgweGEyYmZlOGExLCAweDRjZjEwMzY0KSwgbmV3IFdvcmQ2NCgweGE4MWE2NjRiLCAweGJjNDIzMDAxKSwgbmV3IFdvcmQ2NCgweGMyNGI4YjcwLCAweGQwZjg5NzkxKSwgbmV3IFdvcmQ2NCgweGM3NmM1MWEzLCAweDA2NTRiZTMwKSwgbmV3IFdvcmQ2NCgweGQxOTJlODE5LCAweGQ2ZWY1MjE4KSwgbmV3IFdvcmQ2NCgweGQ2OTkwNjI0LCAweDU1NjVhOTEwKSwgbmV3IFdvcmQ2NCgweGY0MGUzNTg1LCAweDU3NzEyMDJhKSwgbmV3IFdvcmQ2NCgweDEwNmFhMDcwLCAweDMyYmJkMWI4KSwgbmV3IFdvcmQ2NCgweDE5YTRjMTE2LCAweGI4ZDJkMGM4KSwgbmV3IFdvcmQ2NCgweDFlMzc2YzA4LCAweDUxNDFhYjUzKSwgbmV3IFdvcmQ2NCgweDI3NDg3NzRjLCAweGRmOGVlYjk5KSwgbmV3IFdvcmQ2NCgweDM0YjBiY2I1LCAweGUxOWI0OGE4KSwgbmV3IFdvcmQ2NCgweDM5MWMwY2IzLCAweGM1Yzk1YTYzKSwgbmV3IFdvcmQ2NCgweDRlZDhhYTRhLCAweGUzNDE4YWNiKSwgbmV3IFdvcmQ2NCgweDViOWNjYTRmLCAweDc3NjNlMzczKSwgbmV3IFdvcmQ2NCgweDY4MmU2ZmYzLCAweGQ2YjJiOGEzKSwgbmV3IFdvcmQ2NCgweDc0OGY4MmVlLCAweDVkZWZiMmZjKSwgbmV3IFdvcmQ2NCgweDc4YTU2MzZmLCAweDQzMTcyZjYwKSwgbmV3IFdvcmQ2NCgweDg0Yzg3ODE0LCAweGExZjBhYjcyKSwgbmV3IFdvcmQ2NCgweDhjYzcwMjA4LCAweDFhNjQzOWVjKSwgbmV3IFdvcmQ2NCgweDkwYmVmZmZhLCAweDIzNjMxZTI4KSwgbmV3IFdvcmQ2NCgweGE0NTA2Y2ViLCAweGRlODJiZGU5KSwgbmV3IFdvcmQ2NCgweGJlZjlhM2Y3LCAweGIyYzY3OTE1KSwgbmV3IFdvcmQ2NCgweGM2NzE3OGYyLCAweGUzNzI1MzJiKSwgbmV3IFdvcmQ2NCgweGNhMjczZWNlLCAweGVhMjY2MTljKSwgbmV3IFdvcmQ2NCgweGQxODZiOGM3LCAweDIxYzBjMjA3KSwgbmV3IFdvcmQ2NCgweGVhZGE3ZGQ2LCAweGNkZTBlYjFlKSwgbmV3IFdvcmQ2NCgweGY1N2Q0ZjdmLCAweGVlNmVkMTc4KSwgbmV3IFdvcmQ2NCgweDA2ZjA2N2FhLCAweDcyMTc2ZmJhKSwgbmV3IFdvcmQ2NCgweDBhNjM3ZGM1LCAweGEyYzg5OGE2KSwgbmV3IFdvcmQ2NCgweDExM2Y5ODA0LCAweGJlZjkwZGFlKSwgbmV3IFdvcmQ2NCgweDFiNzEwYjM1LCAweDEzMWM0NzFiKSwgbmV3IFdvcmQ2NCgweDI4ZGI3N2Y1LCAweDIzMDQ3ZDg0KSwgbmV3IFdvcmQ2NCgweDMyY2FhYjdiLCAweDQwYzcyNDkzKSwgbmV3IFdvcmQ2NCgweDNjOWViZTBhLCAweDE1YzliZWJjKSwgbmV3IFdvcmQ2NCgweDQzMWQ2N2M0LCAweDljMTAwZDRjKSwgbmV3IFdvcmQ2NCgweDRjYzVkNGJlLCAweGNiM2U0MmI2KSwgbmV3IFdvcmQ2NCgweDU5N2YyOTljLCAweGZjNjU3ZTJhKSwgbmV3IFdvcmQ2NCgweDVmY2I2ZmFiLCAweDNhZDZmYWVjKSwgbmV3IFdvcmQ2NCgweDZjNDQxOThjLCAweDRhNDc1ODE3KV07XG5cbiAgZnVuY3Rpb24gaGFzaChkYXRhLCBvZmZzZXQsIGxlbmd0aCwgbW9kZTM4NCA9IGZhbHNlKSB7XG4gICAgbGV0IGgwLCBoMSwgaDIsIGgzLCBoNCwgaDUsIGg2LCBoNztcblxuICAgIGlmICghbW9kZTM4NCkge1xuICAgICAgaDAgPSBuZXcgV29yZDY0KDB4NmEwOWU2NjcsIDB4ZjNiY2M5MDgpO1xuICAgICAgaDEgPSBuZXcgV29yZDY0KDB4YmI2N2FlODUsIDB4ODRjYWE3M2IpO1xuICAgICAgaDIgPSBuZXcgV29yZDY0KDB4M2M2ZWYzNzIsIDB4ZmU5NGY4MmIpO1xuICAgICAgaDMgPSBuZXcgV29yZDY0KDB4YTU0ZmY1M2EsIDB4NWYxZDM2ZjEpO1xuICAgICAgaDQgPSBuZXcgV29yZDY0KDB4NTEwZTUyN2YsIDB4YWRlNjgyZDEpO1xuICAgICAgaDUgPSBuZXcgV29yZDY0KDB4OWIwNTY4OGMsIDB4MmIzZTZjMWYpO1xuICAgICAgaDYgPSBuZXcgV29yZDY0KDB4MWY4M2Q5YWIsIDB4ZmI0MWJkNmIpO1xuICAgICAgaDcgPSBuZXcgV29yZDY0KDB4NWJlMGNkMTksIDB4MTM3ZTIxNzkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBoMCA9IG5ldyBXb3JkNjQoMHhjYmJiOWQ1ZCwgMHhjMTA1OWVkOCk7XG4gICAgICBoMSA9IG5ldyBXb3JkNjQoMHg2MjlhMjkyYSwgMHgzNjdjZDUwNyk7XG4gICAgICBoMiA9IG5ldyBXb3JkNjQoMHg5MTU5MDE1YSwgMHgzMDcwZGQxNyk7XG4gICAgICBoMyA9IG5ldyBXb3JkNjQoMHgxNTJmZWNkOCwgMHhmNzBlNTkzOSk7XG4gICAgICBoNCA9IG5ldyBXb3JkNjQoMHg2NzMzMjY2NywgMHhmZmMwMGIzMSk7XG4gICAgICBoNSA9IG5ldyBXb3JkNjQoMHg4ZWI0NGE4NywgMHg2ODU4MTUxMSk7XG4gICAgICBoNiA9IG5ldyBXb3JkNjQoMHhkYjBjMmUwZCwgMHg2NGY5OGZhNyk7XG4gICAgICBoNyA9IG5ldyBXb3JkNjQoMHg0N2I1NDgxZCwgMHhiZWZhNGZhNCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFkZGVkTGVuZ3RoID0gTWF0aC5jZWlsKChsZW5ndGggKyAxNykgLyAxMjgpICogMTI4O1xuICAgIGNvbnN0IHBhZGRlZCA9IG5ldyBVaW50OEFycmF5KHBhZGRlZExlbmd0aCk7XG4gICAgbGV0IGksIGo7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgIHBhZGRlZFtpXSA9IGRhdGFbb2Zmc2V0KytdO1xuICAgIH1cblxuICAgIHBhZGRlZFtpKytdID0gMHg4MDtcbiAgICBjb25zdCBuID0gcGFkZGVkTGVuZ3RoIC0gMTY7XG5cbiAgICB3aGlsZSAoaSA8IG4pIHtcbiAgICAgIHBhZGRlZFtpKytdID0gMDtcbiAgICB9XG5cbiAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgcGFkZGVkW2krK10gPSAwO1xuICAgIHBhZGRlZFtpKytdID0gMDtcbiAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgcGFkZGVkW2krK10gPSAwO1xuICAgIHBhZGRlZFtpKytdID0gMDtcbiAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgcGFkZGVkW2krK10gPSAwO1xuICAgIHBhZGRlZFtpKytdID0gMDtcbiAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgcGFkZGVkW2krK10gPSAwO1xuICAgIHBhZGRlZFtpKytdID0gbGVuZ3RoID4+PiAyOSAmIDB4ZmY7XG4gICAgcGFkZGVkW2krK10gPSBsZW5ndGggPj4gMjEgJiAweGZmO1xuICAgIHBhZGRlZFtpKytdID0gbGVuZ3RoID4+IDEzICYgMHhmZjtcbiAgICBwYWRkZWRbaSsrXSA9IGxlbmd0aCA+PiA1ICYgMHhmZjtcbiAgICBwYWRkZWRbaSsrXSA9IGxlbmd0aCA8PCAzICYgMHhmZjtcbiAgICBjb25zdCB3ID0gbmV3IEFycmF5KDgwKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCA4MDsgaSsrKSB7XG4gICAgICB3W2ldID0gbmV3IFdvcmQ2NCgwLCAwKTtcbiAgICB9XG5cbiAgICBsZXQgYSA9IG5ldyBXb3JkNjQoMCwgMCksXG4gICAgICAgIGIgPSBuZXcgV29yZDY0KDAsIDApLFxuICAgICAgICBjID0gbmV3IFdvcmQ2NCgwLCAwKTtcbiAgICBsZXQgZCA9IG5ldyBXb3JkNjQoMCwgMCksXG4gICAgICAgIGUgPSBuZXcgV29yZDY0KDAsIDApLFxuICAgICAgICBmID0gbmV3IFdvcmQ2NCgwLCAwKTtcbiAgICBsZXQgZyA9IG5ldyBXb3JkNjQoMCwgMCksXG4gICAgICAgIGggPSBuZXcgV29yZDY0KDAsIDApO1xuICAgIGNvbnN0IHQxID0gbmV3IFdvcmQ2NCgwLCAwKSxcbiAgICAgICAgICB0MiA9IG5ldyBXb3JkNjQoMCwgMCk7XG4gICAgY29uc3QgdG1wMSA9IG5ldyBXb3JkNjQoMCwgMCksXG4gICAgICAgICAgdG1wMiA9IG5ldyBXb3JkNjQoMCwgMCk7XG4gICAgbGV0IHRtcDM7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgcGFkZGVkTGVuZ3RoOykge1xuICAgICAgZm9yIChqID0gMDsgaiA8IDE2OyArK2opIHtcbiAgICAgICAgd1tqXS5oaWdoID0gcGFkZGVkW2ldIDw8IDI0IHwgcGFkZGVkW2kgKyAxXSA8PCAxNiB8IHBhZGRlZFtpICsgMl0gPDwgOCB8IHBhZGRlZFtpICsgM107XG4gICAgICAgIHdbal0ubG93ID0gcGFkZGVkW2kgKyA0XSA8PCAyNCB8IHBhZGRlZFtpICsgNV0gPDwgMTYgfCBwYWRkZWRbaSArIDZdIDw8IDggfCBwYWRkZWRbaSArIDddO1xuICAgICAgICBpICs9IDg7XG4gICAgICB9XG5cbiAgICAgIGZvciAoaiA9IDE2OyBqIDwgODA7ICsraikge1xuICAgICAgICB0bXAzID0gd1tqXTtcbiAgICAgICAgbGl0dGxlU2lnbWFQcmltZSh0bXAzLCB3W2ogLSAyXSwgdG1wMik7XG4gICAgICAgIHRtcDMuYWRkKHdbaiAtIDddKTtcbiAgICAgICAgbGl0dGxlU2lnbWEodG1wMSwgd1tqIC0gMTVdLCB0bXAyKTtcbiAgICAgICAgdG1wMy5hZGQodG1wMSk7XG4gICAgICAgIHRtcDMuYWRkKHdbaiAtIDE2XSk7XG4gICAgICB9XG5cbiAgICAgIGEuYXNzaWduKGgwKTtcbiAgICAgIGIuYXNzaWduKGgxKTtcbiAgICAgIGMuYXNzaWduKGgyKTtcbiAgICAgIGQuYXNzaWduKGgzKTtcbiAgICAgIGUuYXNzaWduKGg0KTtcbiAgICAgIGYuYXNzaWduKGg1KTtcbiAgICAgIGcuYXNzaWduKGg2KTtcbiAgICAgIGguYXNzaWduKGg3KTtcblxuICAgICAgZm9yIChqID0gMDsgaiA8IDgwOyArK2opIHtcbiAgICAgICAgdDEuYXNzaWduKGgpO1xuICAgICAgICBzaWdtYVByaW1lKHRtcDEsIGUsIHRtcDIpO1xuICAgICAgICB0MS5hZGQodG1wMSk7XG4gICAgICAgIGNoKHRtcDEsIGUsIGYsIGcsIHRtcDIpO1xuICAgICAgICB0MS5hZGQodG1wMSk7XG4gICAgICAgIHQxLmFkZChrW2pdKTtcbiAgICAgICAgdDEuYWRkKHdbal0pO1xuICAgICAgICBzaWdtYSh0MiwgYSwgdG1wMik7XG4gICAgICAgIG1haih0bXAxLCBhLCBiLCBjLCB0bXAyKTtcbiAgICAgICAgdDIuYWRkKHRtcDEpO1xuICAgICAgICB0bXAzID0gaDtcbiAgICAgICAgaCA9IGc7XG4gICAgICAgIGcgPSBmO1xuICAgICAgICBmID0gZTtcbiAgICAgICAgZC5hZGQodDEpO1xuICAgICAgICBlID0gZDtcbiAgICAgICAgZCA9IGM7XG4gICAgICAgIGMgPSBiO1xuICAgICAgICBiID0gYTtcbiAgICAgICAgdG1wMy5hc3NpZ24odDEpO1xuICAgICAgICB0bXAzLmFkZCh0Mik7XG4gICAgICAgIGEgPSB0bXAzO1xuICAgICAgfVxuXG4gICAgICBoMC5hZGQoYSk7XG4gICAgICBoMS5hZGQoYik7XG4gICAgICBoMi5hZGQoYyk7XG4gICAgICBoMy5hZGQoZCk7XG4gICAgICBoNC5hZGQoZSk7XG4gICAgICBoNS5hZGQoZik7XG4gICAgICBoNi5hZGQoZyk7XG4gICAgICBoNy5hZGQoaCk7XG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdDtcblxuICAgIGlmICghbW9kZTM4NCkge1xuICAgICAgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkoNjQpO1xuICAgICAgaDAuY29weVRvKHJlc3VsdCwgMCk7XG4gICAgICBoMS5jb3B5VG8ocmVzdWx0LCA4KTtcbiAgICAgIGgyLmNvcHlUbyhyZXN1bHQsIDE2KTtcbiAgICAgIGgzLmNvcHlUbyhyZXN1bHQsIDI0KTtcbiAgICAgIGg0LmNvcHlUbyhyZXN1bHQsIDMyKTtcbiAgICAgIGg1LmNvcHlUbyhyZXN1bHQsIDQwKTtcbiAgICAgIGg2LmNvcHlUbyhyZXN1bHQsIDQ4KTtcbiAgICAgIGg3LmNvcHlUbyhyZXN1bHQsIDU2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkoNDgpO1xuICAgICAgaDAuY29weVRvKHJlc3VsdCwgMCk7XG4gICAgICBoMS5jb3B5VG8ocmVzdWx0LCA4KTtcbiAgICAgIGgyLmNvcHlUbyhyZXN1bHQsIDE2KTtcbiAgICAgIGgzLmNvcHlUbyhyZXN1bHQsIDI0KTtcbiAgICAgIGg0LmNvcHlUbyhyZXN1bHQsIDMyKTtcbiAgICAgIGg1LmNvcHlUbyhyZXN1bHQsIDQwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcmV0dXJuIGhhc2g7XG59KCk7XG5cbmV4cG9ydHMuY2FsY3VsYXRlU0hBNTEyID0gY2FsY3VsYXRlU0hBNTEyO1xuXG5mdW5jdGlvbiBjYWxjdWxhdGVTSEEzODQoZGF0YSwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGNhbGN1bGF0ZVNIQTUxMihkYXRhLCBvZmZzZXQsIGxlbmd0aCwgdHJ1ZSk7XG59XG5cbmNsYXNzIE51bGxDaXBoZXIge1xuICBkZWNyeXB0QmxvY2soZGF0YSkge1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgZW5jcnlwdChkYXRhKSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxufVxuXG5jbGFzcyBBRVNCYXNlQ2lwaGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKHRoaXMuY29uc3RydWN0b3IgPT09IEFFU0Jhc2VDaXBoZXIpIHtcbiAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJDYW5ub3QgaW5pdGlhbGl6ZSBBRVNCYXNlQ2lwaGVyLlwiKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zID0gbmV3IFVpbnQ4QXJyYXkoWzB4NjMsIDB4N2MsIDB4NzcsIDB4N2IsIDB4ZjIsIDB4NmIsIDB4NmYsIDB4YzUsIDB4MzAsIDB4MDEsIDB4NjcsIDB4MmIsIDB4ZmUsIDB4ZDcsIDB4YWIsIDB4NzYsIDB4Y2EsIDB4ODIsIDB4YzksIDB4N2QsIDB4ZmEsIDB4NTksIDB4NDcsIDB4ZjAsIDB4YWQsIDB4ZDQsIDB4YTIsIDB4YWYsIDB4OWMsIDB4YTQsIDB4NzIsIDB4YzAsIDB4YjcsIDB4ZmQsIDB4OTMsIDB4MjYsIDB4MzYsIDB4M2YsIDB4ZjcsIDB4Y2MsIDB4MzQsIDB4YTUsIDB4ZTUsIDB4ZjEsIDB4NzEsIDB4ZDgsIDB4MzEsIDB4MTUsIDB4MDQsIDB4YzcsIDB4MjMsIDB4YzMsIDB4MTgsIDB4OTYsIDB4MDUsIDB4OWEsIDB4MDcsIDB4MTIsIDB4ODAsIDB4ZTIsIDB4ZWIsIDB4MjcsIDB4YjIsIDB4NzUsIDB4MDksIDB4ODMsIDB4MmMsIDB4MWEsIDB4MWIsIDB4NmUsIDB4NWEsIDB4YTAsIDB4NTIsIDB4M2IsIDB4ZDYsIDB4YjMsIDB4MjksIDB4ZTMsIDB4MmYsIDB4ODQsIDB4NTMsIDB4ZDEsIDB4MDAsIDB4ZWQsIDB4MjAsIDB4ZmMsIDB4YjEsIDB4NWIsIDB4NmEsIDB4Y2IsIDB4YmUsIDB4MzksIDB4NGEsIDB4NGMsIDB4NTgsIDB4Y2YsIDB4ZDAsIDB4ZWYsIDB4YWEsIDB4ZmIsIDB4NDMsIDB4NGQsIDB4MzMsIDB4ODUsIDB4NDUsIDB4ZjksIDB4MDIsIDB4N2YsIDB4NTAsIDB4M2MsIDB4OWYsIDB4YTgsIDB4NTEsIDB4YTMsIDB4NDAsIDB4OGYsIDB4OTIsIDB4OWQsIDB4MzgsIDB4ZjUsIDB4YmMsIDB4YjYsIDB4ZGEsIDB4MjEsIDB4MTAsIDB4ZmYsIDB4ZjMsIDB4ZDIsIDB4Y2QsIDB4MGMsIDB4MTMsIDB4ZWMsIDB4NWYsIDB4OTcsIDB4NDQsIDB4MTcsIDB4YzQsIDB4YTcsIDB4N2UsIDB4M2QsIDB4NjQsIDB4NWQsIDB4MTksIDB4NzMsIDB4NjAsIDB4ODEsIDB4NGYsIDB4ZGMsIDB4MjIsIDB4MmEsIDB4OTAsIDB4ODgsIDB4NDYsIDB4ZWUsIDB4YjgsIDB4MTQsIDB4ZGUsIDB4NWUsIDB4MGIsIDB4ZGIsIDB4ZTAsIDB4MzIsIDB4M2EsIDB4MGEsIDB4NDksIDB4MDYsIDB4MjQsIDB4NWMsIDB4YzIsIDB4ZDMsIDB4YWMsIDB4NjIsIDB4OTEsIDB4OTUsIDB4ZTQsIDB4NzksIDB4ZTcsIDB4YzgsIDB4MzcsIDB4NmQsIDB4OGQsIDB4ZDUsIDB4NGUsIDB4YTksIDB4NmMsIDB4NTYsIDB4ZjQsIDB4ZWEsIDB4NjUsIDB4N2EsIDB4YWUsIDB4MDgsIDB4YmEsIDB4NzgsIDB4MjUsIDB4MmUsIDB4MWMsIDB4YTYsIDB4YjQsIDB4YzYsIDB4ZTgsIDB4ZGQsIDB4NzQsIDB4MWYsIDB4NGIsIDB4YmQsIDB4OGIsIDB4OGEsIDB4NzAsIDB4M2UsIDB4YjUsIDB4NjYsIDB4NDgsIDB4MDMsIDB4ZjYsIDB4MGUsIDB4NjEsIDB4MzUsIDB4NTcsIDB4YjksIDB4ODYsIDB4YzEsIDB4MWQsIDB4OWUsIDB4ZTEsIDB4ZjgsIDB4OTgsIDB4MTEsIDB4NjksIDB4ZDksIDB4OGUsIDB4OTQsIDB4OWIsIDB4MWUsIDB4ODcsIDB4ZTksIDB4Y2UsIDB4NTUsIDB4MjgsIDB4ZGYsIDB4OGMsIDB4YTEsIDB4ODksIDB4MGQsIDB4YmYsIDB4ZTYsIDB4NDIsIDB4NjgsIDB4NDEsIDB4OTksIDB4MmQsIDB4MGYsIDB4YjAsIDB4NTQsIDB4YmIsIDB4MTZdKTtcbiAgICB0aGlzLl9pbnZfcyA9IG5ldyBVaW50OEFycmF5KFsweDUyLCAweDA5LCAweDZhLCAweGQ1LCAweDMwLCAweDM2LCAweGE1LCAweDM4LCAweGJmLCAweDQwLCAweGEzLCAweDllLCAweDgxLCAweGYzLCAweGQ3LCAweGZiLCAweDdjLCAweGUzLCAweDM5LCAweDgyLCAweDliLCAweDJmLCAweGZmLCAweDg3LCAweDM0LCAweDhlLCAweDQzLCAweDQ0LCAweGM0LCAweGRlLCAweGU5LCAweGNiLCAweDU0LCAweDdiLCAweDk0LCAweDMyLCAweGE2LCAweGMyLCAweDIzLCAweDNkLCAweGVlLCAweDRjLCAweDk1LCAweDBiLCAweDQyLCAweGZhLCAweGMzLCAweDRlLCAweDA4LCAweDJlLCAweGExLCAweDY2LCAweDI4LCAweGQ5LCAweDI0LCAweGIyLCAweDc2LCAweDViLCAweGEyLCAweDQ5LCAweDZkLCAweDhiLCAweGQxLCAweDI1LCAweDcyLCAweGY4LCAweGY2LCAweDY0LCAweDg2LCAweDY4LCAweDk4LCAweDE2LCAweGQ0LCAweGE0LCAweDVjLCAweGNjLCAweDVkLCAweDY1LCAweGI2LCAweDkyLCAweDZjLCAweDcwLCAweDQ4LCAweDUwLCAweGZkLCAweGVkLCAweGI5LCAweGRhLCAweDVlLCAweDE1LCAweDQ2LCAweDU3LCAweGE3LCAweDhkLCAweDlkLCAweDg0LCAweDkwLCAweGQ4LCAweGFiLCAweDAwLCAweDhjLCAweGJjLCAweGQzLCAweDBhLCAweGY3LCAweGU0LCAweDU4LCAweDA1LCAweGI4LCAweGIzLCAweDQ1LCAweDA2LCAweGQwLCAweDJjLCAweDFlLCAweDhmLCAweGNhLCAweDNmLCAweDBmLCAweDAyLCAweGMxLCAweGFmLCAweGJkLCAweDAzLCAweDAxLCAweDEzLCAweDhhLCAweDZiLCAweDNhLCAweDkxLCAweDExLCAweDQxLCAweDRmLCAweDY3LCAweGRjLCAweGVhLCAweDk3LCAweGYyLCAweGNmLCAweGNlLCAweGYwLCAweGI0LCAweGU2LCAweDczLCAweDk2LCAweGFjLCAweDc0LCAweDIyLCAweGU3LCAweGFkLCAweDM1LCAweDg1LCAweGUyLCAweGY5LCAweDM3LCAweGU4LCAweDFjLCAweDc1LCAweGRmLCAweDZlLCAweDQ3LCAweGYxLCAweDFhLCAweDcxLCAweDFkLCAweDI5LCAweGM1LCAweDg5LCAweDZmLCAweGI3LCAweDYyLCAweDBlLCAweGFhLCAweDE4LCAweGJlLCAweDFiLCAweGZjLCAweDU2LCAweDNlLCAweDRiLCAweGM2LCAweGQyLCAweDc5LCAweDIwLCAweDlhLCAweGRiLCAweGMwLCAweGZlLCAweDc4LCAweGNkLCAweDVhLCAweGY0LCAweDFmLCAweGRkLCAweGE4LCAweDMzLCAweDg4LCAweDA3LCAweGM3LCAweDMxLCAweGIxLCAweDEyLCAweDEwLCAweDU5LCAweDI3LCAweDgwLCAweGVjLCAweDVmLCAweDYwLCAweDUxLCAweDdmLCAweGE5LCAweDE5LCAweGI1LCAweDRhLCAweDBkLCAweDJkLCAweGU1LCAweDdhLCAweDlmLCAweDkzLCAweGM5LCAweDljLCAweGVmLCAweGEwLCAweGUwLCAweDNiLCAweDRkLCAweGFlLCAweDJhLCAweGY1LCAweGIwLCAweGM4LCAweGViLCAweGJiLCAweDNjLCAweDgzLCAweDUzLCAweDk5LCAweDYxLCAweDE3LCAweDJiLCAweDA0LCAweDdlLCAweGJhLCAweDc3LCAweGQ2LCAweDI2LCAweGUxLCAweDY5LCAweDE0LCAweDYzLCAweDU1LCAweDIxLCAweDBjLCAweDdkXSk7XG4gICAgdGhpcy5fbWl4ID0gbmV3IFVpbnQzMkFycmF5KFsweDAwMDAwMDAwLCAweDBlMDkwZDBiLCAweDFjMTIxYTE2LCAweDEyMWIxNzFkLCAweDM4MjQzNDJjLCAweDM2MmQzOTI3LCAweDI0MzYyZTNhLCAweDJhM2YyMzMxLCAweDcwNDg2ODU4LCAweDdlNDE2NTUzLCAweDZjNWE3MjRlLCAweDYyNTM3ZjQ1LCAweDQ4NmM1Yzc0LCAweDQ2NjU1MTdmLCAweDU0N2U0NjYyLCAweDVhNzc0YjY5LCAweGUwOTBkMGIwLCAweGVlOTlkZGJiLCAweGZjODJjYWE2LCAweGYyOGJjN2FkLCAweGQ4YjRlNDljLCAweGQ2YmRlOTk3LCAweGM0YTZmZThhLCAweGNhYWZmMzgxLCAweDkwZDhiOGU4LCAweDllZDFiNWUzLCAweDhjY2FhMmZlLCAweDgyYzNhZmY1LCAweGE4ZmM4Y2M0LCAweGE2ZjU4MWNmLCAweGI0ZWU5NmQyLCAweGJhZTc5YmQ5LCAweGRiM2JiYjdiLCAweGQ1MzJiNjcwLCAweGM3MjlhMTZkLCAweGM5MjBhYzY2LCAweGUzMWY4ZjU3LCAweGVkMTY4MjVjLCAweGZmMGQ5NTQxLCAweGYxMDQ5ODRhLCAweGFiNzNkMzIzLCAweGE1N2FkZTI4LCAweGI3NjFjOTM1LCAweGI5NjhjNDNlLCAweDkzNTdlNzBmLCAweDlkNWVlYTA0LCAweDhmNDVmZDE5LCAweDgxNGNmMDEyLCAweDNiYWI2YmNiLCAweDM1YTI2NmMwLCAweDI3Yjk3MWRkLCAweDI5YjA3Y2Q2LCAweDAzOGY1ZmU3LCAweDBkODY1MmVjLCAweDFmOWQ0NWYxLCAweDExOTQ0OGZhLCAweDRiZTMwMzkzLCAweDQ1ZWEwZTk4LCAweDU3ZjExOTg1LCAweDU5ZjgxNDhlLCAweDczYzczN2JmLCAweDdkY2UzYWI0LCAweDZmZDUyZGE5LCAweDYxZGMyMGEyLCAweGFkNzY2ZGY2LCAweGEzN2Y2MGZkLCAweGIxNjQ3N2UwLCAweGJmNmQ3YWViLCAweDk1NTI1OWRhLCAweDliNWI1NGQxLCAweDg5NDA0M2NjLCAweDg3NDk0ZWM3LCAweGRkM2UwNWFlLCAweGQzMzcwOGE1LCAweGMxMmMxZmI4LCAweGNmMjUxMmIzLCAweGU1MWEzMTgyLCAweGViMTMzYzg5LCAweGY5MDgyYjk0LCAweGY3MDEyNjlmLCAweDRkZTZiZDQ2LCAweDQzZWZiMDRkLCAweDUxZjRhNzUwLCAweDVmZmRhYTViLCAweDc1YzI4OTZhLCAweDdiY2I4NDYxLCAweDY5ZDA5MzdjLCAweDY3ZDk5ZTc3LCAweDNkYWVkNTFlLCAweDMzYTdkODE1LCAweDIxYmNjZjA4LCAweDJmYjVjMjAzLCAweDA1OGFlMTMyLCAweDBiODNlYzM5LCAweDE5OThmYjI0LCAweDE3OTFmNjJmLCAweDc2NGRkNjhkLCAweDc4NDRkYjg2LCAweDZhNWZjYzliLCAweDY0NTZjMTkwLCAweDRlNjllMmExLCAweDQwNjBlZmFhLCAweDUyN2JmOGI3LCAweDVjNzJmNWJjLCAweDA2MDViZWQ1LCAweDA4MGNiM2RlLCAweDFhMTdhNGMzLCAweDE0MWVhOWM4LCAweDNlMjE4YWY5LCAweDMwMjg4N2YyLCAweDIyMzM5MGVmLCAweDJjM2E5ZGU0LCAweDk2ZGQwNjNkLCAweDk4ZDQwYjM2LCAweDhhY2YxYzJiLCAweDg0YzYxMTIwLCAweGFlZjkzMjExLCAweGEwZjAzZjFhLCAweGIyZWIyODA3LCAweGJjZTIyNTBjLCAweGU2OTU2ZTY1LCAweGU4OWM2MzZlLCAweGZhODc3NDczLCAweGY0OGU3OTc4LCAweGRlYjE1YTQ5LCAweGQwYjg1NzQyLCAweGMyYTM0MDVmLCAweGNjYWE0ZDU0LCAweDQxZWNkYWY3LCAweDRmZTVkN2ZjLCAweDVkZmVjMGUxLCAweDUzZjdjZGVhLCAweDc5YzhlZWRiLCAweDc3YzFlM2QwLCAweDY1ZGFmNGNkLCAweDZiZDNmOWM2LCAweDMxYTRiMmFmLCAweDNmYWRiZmE0LCAweDJkYjZhOGI5LCAweDIzYmZhNWIyLCAweDA5ODA4NjgzLCAweDA3ODk4Yjg4LCAweDE1OTI5Yzk1LCAweDFiOWI5MTllLCAweGExN2MwYTQ3LCAweGFmNzUwNzRjLCAweGJkNmUxMDUxLCAweGIzNjcxZDVhLCAweDk5NTgzZTZiLCAweDk3NTEzMzYwLCAweDg1NGEyNDdkLCAweDhiNDMyOTc2LCAweGQxMzQ2MjFmLCAweGRmM2Q2ZjE0LCAweGNkMjY3ODA5LCAweGMzMmY3NTAyLCAweGU5MTA1NjMzLCAweGU3MTk1YjM4LCAweGY1MDI0YzI1LCAweGZiMGI0MTJlLCAweDlhZDc2MThjLCAweDk0ZGU2Yzg3LCAweDg2YzU3YjlhLCAweDg4Y2M3NjkxLCAweGEyZjM1NWEwLCAweGFjZmE1OGFiLCAweGJlZTE0ZmI2LCAweGIwZTg0MmJkLCAweGVhOWYwOWQ0LCAweGU0OTYwNGRmLCAweGY2OGQxM2MyLCAweGY4ODQxZWM5LCAweGQyYmIzZGY4LCAweGRjYjIzMGYzLCAweGNlYTkyN2VlLCAweGMwYTAyYWU1LCAweDdhNDdiMTNjLCAweDc0NGViYzM3LCAweDY2NTVhYjJhLCAweDY4NWNhNjIxLCAweDQyNjM4NTEwLCAweDRjNmE4ODFiLCAweDVlNzE5ZjA2LCAweDUwNzg5MjBkLCAweDBhMGZkOTY0LCAweDA0MDZkNDZmLCAweDE2MWRjMzcyLCAweDE4MTRjZTc5LCAweDMyMmJlZDQ4LCAweDNjMjJlMDQzLCAweDJlMzlmNzVlLCAweDIwMzBmYTU1LCAweGVjOWFiNzAxLCAweGUyOTNiYTBhLCAweGYwODhhZDE3LCAweGZlODFhMDFjLCAweGQ0YmU4MzJkLCAweGRhYjc4ZTI2LCAweGM4YWM5OTNiLCAweGM2YTU5NDMwLCAweDljZDJkZjU5LCAweDkyZGJkMjUyLCAweDgwYzBjNTRmLCAweDhlYzljODQ0LCAweGE0ZjZlYjc1LCAweGFhZmZlNjdlLCAweGI4ZTRmMTYzLCAweGI2ZWRmYzY4LCAweDBjMGE2N2IxLCAweDAyMDM2YWJhLCAweDEwMTg3ZGE3LCAweDFlMTE3MGFjLCAweDM0MmU1MzlkLCAweDNhMjc1ZTk2LCAweDI4M2M0OThiLCAweDI2MzU0NDgwLCAweDdjNDIwZmU5LCAweDcyNGIwMmUyLCAweDYwNTAxNWZmLCAweDZlNTkxOGY0LCAweDQ0NjYzYmM1LCAweDRhNmYzNmNlLCAweDU4NzQyMWQzLCAweDU2N2QyY2Q4LCAweDM3YTEwYzdhLCAweDM5YTgwMTcxLCAweDJiYjMxNjZjLCAweDI1YmExYjY3LCAweDBmODUzODU2LCAweDAxOGMzNTVkLCAweDEzOTcyMjQwLCAweDFkOWUyZjRiLCAweDQ3ZTk2NDIyLCAweDQ5ZTA2OTI5LCAweDViZmI3ZTM0LCAweDU1ZjI3MzNmLCAweDdmY2Q1MDBlLCAweDcxYzQ1ZDA1LCAweDYzZGY0YTE4LCAweDZkZDY0NzEzLCAweGQ3MzFkY2NhLCAweGQ5MzhkMWMxLCAweGNiMjNjNmRjLCAweGM1MmFjYmQ3LCAweGVmMTVlOGU2LCAweGUxMWNlNWVkLCAweGYzMDdmMmYwLCAweGZkMGVmZmZiLCAweGE3NzliNDkyLCAweGE5NzBiOTk5LCAweGJiNmJhZTg0LCAweGI1NjJhMzhmLCAweDlmNWQ4MGJlLCAweDkxNTQ4ZGI1LCAweDgzNGY5YWE4LCAweDhkNDY5N2EzXSk7XG4gICAgdGhpcy5fbWl4Q29sID0gbmV3IFVpbnQ4QXJyYXkoMjU2KTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcbiAgICAgIGlmIChpIDwgMTI4KSB7XG4gICAgICAgIHRoaXMuX21peENvbFtpXSA9IGkgPDwgMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX21peENvbFtpXSA9IGkgPDwgMSBeIDB4MWI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5idWZmZXIgPSBuZXcgVWludDhBcnJheSgxNik7XG4gICAgdGhpcy5idWZmZXJQb3NpdGlvbiA9IDA7XG4gIH1cblxuICBfZXhwYW5kS2V5KGNpcGhlcktleSkge1xuICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJDYW5ub3QgY2FsbCBgX2V4cGFuZEtleWAgb24gdGhlIGJhc2UgY2xhc3NcIik7XG4gIH1cblxuICBfZGVjcnlwdChpbnB1dCwga2V5KSB7XG4gICAgbGV0IHQsIHUsIHY7XG4gICAgY29uc3Qgc3RhdGUgPSBuZXcgVWludDhBcnJheSgxNik7XG4gICAgc3RhdGUuc2V0KGlucHV0KTtcblxuICAgIGZvciAobGV0IGogPSAwLCBrID0gdGhpcy5fa2V5U2l6ZTsgaiA8IDE2OyArK2osICsraykge1xuICAgICAgc3RhdGVbal0gXj0ga2V5W2tdO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSB0aGlzLl9jeWNsZXNPZlJlcGV0aXRpb24gLSAxOyBpID49IDE7IC0taSkge1xuICAgICAgdCA9IHN0YXRlWzEzXTtcbiAgICAgIHN0YXRlWzEzXSA9IHN0YXRlWzldO1xuICAgICAgc3RhdGVbOV0gPSBzdGF0ZVs1XTtcbiAgICAgIHN0YXRlWzVdID0gc3RhdGVbMV07XG4gICAgICBzdGF0ZVsxXSA9IHQ7XG4gICAgICB0ID0gc3RhdGVbMTRdO1xuICAgICAgdSA9IHN0YXRlWzEwXTtcbiAgICAgIHN0YXRlWzE0XSA9IHN0YXRlWzZdO1xuICAgICAgc3RhdGVbMTBdID0gc3RhdGVbMl07XG4gICAgICBzdGF0ZVs2XSA9IHQ7XG4gICAgICBzdGF0ZVsyXSA9IHU7XG4gICAgICB0ID0gc3RhdGVbMTVdO1xuICAgICAgdSA9IHN0YXRlWzExXTtcbiAgICAgIHYgPSBzdGF0ZVs3XTtcbiAgICAgIHN0YXRlWzE1XSA9IHN0YXRlWzNdO1xuICAgICAgc3RhdGVbMTFdID0gdDtcbiAgICAgIHN0YXRlWzddID0gdTtcbiAgICAgIHN0YXRlWzNdID0gdjtcblxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCAxNjsgKytqKSB7XG4gICAgICAgIHN0YXRlW2pdID0gdGhpcy5faW52X3Nbc3RhdGVbal1dO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBqID0gMCwgayA9IGkgKiAxNjsgaiA8IDE2OyArK2osICsraykge1xuICAgICAgICBzdGF0ZVtqXSBePSBrZXlba107XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgMTY7IGogKz0gNCkge1xuICAgICAgICBjb25zdCBzMCA9IHRoaXMuX21peFtzdGF0ZVtqXV07XG4gICAgICAgIGNvbnN0IHMxID0gdGhpcy5fbWl4W3N0YXRlW2ogKyAxXV07XG4gICAgICAgIGNvbnN0IHMyID0gdGhpcy5fbWl4W3N0YXRlW2ogKyAyXV07XG4gICAgICAgIGNvbnN0IHMzID0gdGhpcy5fbWl4W3N0YXRlW2ogKyAzXV07XG4gICAgICAgIHQgPSBzMCBeIHMxID4+PiA4IF4gczEgPDwgMjQgXiBzMiA+Pj4gMTYgXiBzMiA8PCAxNiBeIHMzID4+PiAyNCBeIHMzIDw8IDg7XG4gICAgICAgIHN0YXRlW2pdID0gdCA+Pj4gMjQgJiAweGZmO1xuICAgICAgICBzdGF0ZVtqICsgMV0gPSB0ID4+IDE2ICYgMHhmZjtcbiAgICAgICAgc3RhdGVbaiArIDJdID0gdCA+PiA4ICYgMHhmZjtcbiAgICAgICAgc3RhdGVbaiArIDNdID0gdCAmIDB4ZmY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdCA9IHN0YXRlWzEzXTtcbiAgICBzdGF0ZVsxM10gPSBzdGF0ZVs5XTtcbiAgICBzdGF0ZVs5XSA9IHN0YXRlWzVdO1xuICAgIHN0YXRlWzVdID0gc3RhdGVbMV07XG4gICAgc3RhdGVbMV0gPSB0O1xuICAgIHQgPSBzdGF0ZVsxNF07XG4gICAgdSA9IHN0YXRlWzEwXTtcbiAgICBzdGF0ZVsxNF0gPSBzdGF0ZVs2XTtcbiAgICBzdGF0ZVsxMF0gPSBzdGF0ZVsyXTtcbiAgICBzdGF0ZVs2XSA9IHQ7XG4gICAgc3RhdGVbMl0gPSB1O1xuICAgIHQgPSBzdGF0ZVsxNV07XG4gICAgdSA9IHN0YXRlWzExXTtcbiAgICB2ID0gc3RhdGVbN107XG4gICAgc3RhdGVbMTVdID0gc3RhdGVbM107XG4gICAgc3RhdGVbMTFdID0gdDtcbiAgICBzdGF0ZVs3XSA9IHU7XG4gICAgc3RhdGVbM10gPSB2O1xuXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCAxNjsgKytqKSB7XG4gICAgICBzdGF0ZVtqXSA9IHRoaXMuX2ludl9zW3N0YXRlW2pdXTtcbiAgICAgIHN0YXRlW2pdIF49IGtleVtqXTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBfZW5jcnlwdChpbnB1dCwga2V5KSB7XG4gICAgY29uc3QgcyA9IHRoaXMuX3M7XG4gICAgbGV0IHQsIHUsIHY7XG4gICAgY29uc3Qgc3RhdGUgPSBuZXcgVWludDhBcnJheSgxNik7XG4gICAgc3RhdGUuc2V0KGlucHV0KTtcblxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgMTY7ICsraikge1xuICAgICAgc3RhdGVbal0gXj0ga2V5W2pdO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgdGhpcy5fY3ljbGVzT2ZSZXBldGl0aW9uOyBpKyspIHtcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgMTY7ICsraikge1xuICAgICAgICBzdGF0ZVtqXSA9IHNbc3RhdGVbal1dO1xuICAgICAgfVxuXG4gICAgICB2ID0gc3RhdGVbMV07XG4gICAgICBzdGF0ZVsxXSA9IHN0YXRlWzVdO1xuICAgICAgc3RhdGVbNV0gPSBzdGF0ZVs5XTtcbiAgICAgIHN0YXRlWzldID0gc3RhdGVbMTNdO1xuICAgICAgc3RhdGVbMTNdID0gdjtcbiAgICAgIHYgPSBzdGF0ZVsyXTtcbiAgICAgIHUgPSBzdGF0ZVs2XTtcbiAgICAgIHN0YXRlWzJdID0gc3RhdGVbMTBdO1xuICAgICAgc3RhdGVbNl0gPSBzdGF0ZVsxNF07XG4gICAgICBzdGF0ZVsxMF0gPSB2O1xuICAgICAgc3RhdGVbMTRdID0gdTtcbiAgICAgIHYgPSBzdGF0ZVszXTtcbiAgICAgIHUgPSBzdGF0ZVs3XTtcbiAgICAgIHQgPSBzdGF0ZVsxMV07XG4gICAgICBzdGF0ZVszXSA9IHN0YXRlWzE1XTtcbiAgICAgIHN0YXRlWzddID0gdjtcbiAgICAgIHN0YXRlWzExXSA9IHU7XG4gICAgICBzdGF0ZVsxNV0gPSB0O1xuXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IDE2OyBqICs9IDQpIHtcbiAgICAgICAgY29uc3QgczAgPSBzdGF0ZVtqICsgMF07XG4gICAgICAgIGNvbnN0IHMxID0gc3RhdGVbaiArIDFdO1xuICAgICAgICBjb25zdCBzMiA9IHN0YXRlW2ogKyAyXTtcbiAgICAgICAgY29uc3QgczMgPSBzdGF0ZVtqICsgM107XG4gICAgICAgIHQgPSBzMCBeIHMxIF4gczIgXiBzMztcbiAgICAgICAgc3RhdGVbaiArIDBdIF49IHQgXiB0aGlzLl9taXhDb2xbczAgXiBzMV07XG4gICAgICAgIHN0YXRlW2ogKyAxXSBePSB0IF4gdGhpcy5fbWl4Q29sW3MxIF4gczJdO1xuICAgICAgICBzdGF0ZVtqICsgMl0gXj0gdCBeIHRoaXMuX21peENvbFtzMiBeIHMzXTtcbiAgICAgICAgc3RhdGVbaiArIDNdIF49IHQgXiB0aGlzLl9taXhDb2xbczMgXiBzMF07XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGogPSAwLCBrID0gaSAqIDE2OyBqIDwgMTY7ICsraiwgKytrKSB7XG4gICAgICAgIHN0YXRlW2pdIF49IGtleVtrXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IDE2OyArK2opIHtcbiAgICAgIHN0YXRlW2pdID0gc1tzdGF0ZVtqXV07XG4gICAgfVxuXG4gICAgdiA9IHN0YXRlWzFdO1xuICAgIHN0YXRlWzFdID0gc3RhdGVbNV07XG4gICAgc3RhdGVbNV0gPSBzdGF0ZVs5XTtcbiAgICBzdGF0ZVs5XSA9IHN0YXRlWzEzXTtcbiAgICBzdGF0ZVsxM10gPSB2O1xuICAgIHYgPSBzdGF0ZVsyXTtcbiAgICB1ID0gc3RhdGVbNl07XG4gICAgc3RhdGVbMl0gPSBzdGF0ZVsxMF07XG4gICAgc3RhdGVbNl0gPSBzdGF0ZVsxNF07XG4gICAgc3RhdGVbMTBdID0gdjtcbiAgICBzdGF0ZVsxNF0gPSB1O1xuICAgIHYgPSBzdGF0ZVszXTtcbiAgICB1ID0gc3RhdGVbN107XG4gICAgdCA9IHN0YXRlWzExXTtcbiAgICBzdGF0ZVszXSA9IHN0YXRlWzE1XTtcbiAgICBzdGF0ZVs3XSA9IHY7XG4gICAgc3RhdGVbMTFdID0gdTtcbiAgICBzdGF0ZVsxNV0gPSB0O1xuXG4gICAgZm9yIChsZXQgaiA9IDAsIGsgPSB0aGlzLl9rZXlTaXplOyBqIDwgMTY7ICsraiwgKytrKSB7XG4gICAgICBzdGF0ZVtqXSBePSBrZXlba107XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgX2RlY3J5cHRCbG9jazIoZGF0YSwgZmluYWxpemUpIHtcbiAgICBjb25zdCBzb3VyY2VMZW5ndGggPSBkYXRhLmxlbmd0aDtcbiAgICBsZXQgYnVmZmVyID0gdGhpcy5idWZmZXIsXG4gICAgICAgIGJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyUG9zaXRpb247XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgbGV0IGl2ID0gdGhpcy5pdjtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc291cmNlTGVuZ3RoOyArK2kpIHtcbiAgICAgIGJ1ZmZlcltidWZmZXJMZW5ndGhdID0gZGF0YVtpXTtcbiAgICAgICsrYnVmZmVyTGVuZ3RoO1xuXG4gICAgICBpZiAoYnVmZmVyTGVuZ3RoIDwgMTYpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBsYWluID0gdGhpcy5fZGVjcnlwdChidWZmZXIsIHRoaXMuX2tleSk7XG5cbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgMTY7ICsraikge1xuICAgICAgICBwbGFpbltqXSBePSBpdltqXTtcbiAgICAgIH1cblxuICAgICAgaXYgPSBidWZmZXI7XG4gICAgICByZXN1bHQucHVzaChwbGFpbik7XG4gICAgICBidWZmZXIgPSBuZXcgVWludDhBcnJheSgxNik7XG4gICAgICBidWZmZXJMZW5ndGggPSAwO1xuICAgIH1cblxuICAgIHRoaXMuYnVmZmVyID0gYnVmZmVyO1xuICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gYnVmZmVyTGVuZ3RoO1xuICAgIHRoaXMuaXYgPSBpdjtcblxuICAgIGlmIChyZXN1bHQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7XG4gICAgfVxuXG4gICAgbGV0IG91dHB1dExlbmd0aCA9IDE2ICogcmVzdWx0Lmxlbmd0aDtcblxuICAgIGlmIChmaW5hbGl6ZSkge1xuICAgICAgY29uc3QgbGFzdEJsb2NrID0gcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXTtcbiAgICAgIGxldCBwc0xlbiA9IGxhc3RCbG9ja1sxNV07XG5cbiAgICAgIGlmIChwc0xlbiA8PSAxNikge1xuICAgICAgICBmb3IgKGxldCBpID0gMTUsIGlpID0gMTYgLSBwc0xlbjsgaSA+PSBpaTsgLS1pKSB7XG4gICAgICAgICAgaWYgKGxhc3RCbG9ja1tpXSAhPT0gcHNMZW4pIHtcbiAgICAgICAgICAgIHBzTGVuID0gMDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG91dHB1dExlbmd0aCAtPSBwc0xlbjtcbiAgICAgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXSA9IGxhc3RCbG9jay5zdWJhcnJheSgwLCAxNiAtIHBzTGVuKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXQgPSBuZXcgVWludDhBcnJheShvdXRwdXRMZW5ndGgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGogPSAwLCBpaSA9IHJlc3VsdC5sZW5ndGg7IGkgPCBpaTsgKytpLCBqICs9IDE2KSB7XG4gICAgICBvdXRwdXQuc2V0KHJlc3VsdFtpXSwgaik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfVxuXG4gIGRlY3J5cHRCbG9jayhkYXRhLCBmaW5hbGl6ZSwgaXYgPSBudWxsKSB7XG4gICAgY29uc3Qgc291cmNlTGVuZ3RoID0gZGF0YS5sZW5ndGg7XG4gICAgY29uc3QgYnVmZmVyID0gdGhpcy5idWZmZXI7XG4gICAgbGV0IGJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyUG9zaXRpb247XG5cbiAgICBpZiAoaXYpIHtcbiAgICAgIHRoaXMuaXYgPSBpdjtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGJ1ZmZlckxlbmd0aCA8IDE2ICYmIGkgPCBzb3VyY2VMZW5ndGg7ICsraSwgKytidWZmZXJMZW5ndGgpIHtcbiAgICAgICAgYnVmZmVyW2J1ZmZlckxlbmd0aF0gPSBkYXRhW2ldO1xuICAgICAgfVxuXG4gICAgICBpZiAoYnVmZmVyTGVuZ3RoIDwgMTYpIHtcbiAgICAgICAgdGhpcy5idWZmZXJMZW5ndGggPSBidWZmZXJMZW5ndGg7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSgwKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pdiA9IGJ1ZmZlcjtcbiAgICAgIGRhdGEgPSBkYXRhLnN1YmFycmF5KDE2KTtcbiAgICB9XG5cbiAgICB0aGlzLmJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDE2KTtcbiAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IDA7XG4gICAgdGhpcy5kZWNyeXB0QmxvY2sgPSB0aGlzLl9kZWNyeXB0QmxvY2syO1xuICAgIHJldHVybiB0aGlzLmRlY3J5cHRCbG9jayhkYXRhLCBmaW5hbGl6ZSk7XG4gIH1cblxuICBlbmNyeXB0KGRhdGEsIGl2KSB7XG4gICAgY29uc3Qgc291cmNlTGVuZ3RoID0gZGF0YS5sZW5ndGg7XG4gICAgbGV0IGJ1ZmZlciA9IHRoaXMuYnVmZmVyLFxuICAgICAgICBidWZmZXJMZW5ndGggPSB0aGlzLmJ1ZmZlclBvc2l0aW9uO1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gICAgaWYgKCFpdikge1xuICAgICAgaXYgPSBuZXcgVWludDhBcnJheSgxNik7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3VyY2VMZW5ndGg7ICsraSkge1xuICAgICAgYnVmZmVyW2J1ZmZlckxlbmd0aF0gPSBkYXRhW2ldO1xuICAgICAgKytidWZmZXJMZW5ndGg7XG5cbiAgICAgIGlmIChidWZmZXJMZW5ndGggPCAxNikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCAxNjsgKytqKSB7XG4gICAgICAgIGJ1ZmZlcltqXSBePSBpdltqXTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2lwaGVyID0gdGhpcy5fZW5jcnlwdChidWZmZXIsIHRoaXMuX2tleSk7XG5cbiAgICAgIGl2ID0gY2lwaGVyO1xuICAgICAgcmVzdWx0LnB1c2goY2lwaGVyKTtcbiAgICAgIGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDE2KTtcbiAgICAgIGJ1ZmZlckxlbmd0aCA9IDA7XG4gICAgfVxuXG4gICAgdGhpcy5idWZmZXIgPSBidWZmZXI7XG4gICAgdGhpcy5idWZmZXJMZW5ndGggPSBidWZmZXJMZW5ndGg7XG4gICAgdGhpcy5pdiA9IGl2O1xuXG4gICAgaWYgKHJlc3VsdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSgwKTtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXRMZW5ndGggPSAxNiAqIHJlc3VsdC5sZW5ndGg7XG4gICAgY29uc3Qgb3V0cHV0ID0gbmV3IFVpbnQ4QXJyYXkob3V0cHV0TGVuZ3RoKTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBqID0gMCwgaWkgPSByZXN1bHQubGVuZ3RoOyBpIDwgaWk7ICsraSwgaiArPSAxNikge1xuICAgICAgb3V0cHV0LnNldChyZXN1bHRbaV0sIGopO1xuICAgIH1cblxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH1cblxufVxuXG5jbGFzcyBBRVMxMjhDaXBoZXIgZXh0ZW5kcyBBRVNCYXNlQ2lwaGVyIHtcbiAgY29uc3RydWN0b3Ioa2V5KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9jeWNsZXNPZlJlcGV0aXRpb24gPSAxMDtcbiAgICB0aGlzLl9rZXlTaXplID0gMTYwO1xuICAgIHRoaXMuX3Jjb24gPSBuZXcgVWludDhBcnJheShbMHg4ZCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgxYiwgMHgzNiwgMHg2YywgMHhkOCwgMHhhYiwgMHg0ZCwgMHg5YSwgMHgyZiwgMHg1ZSwgMHhiYywgMHg2MywgMHhjNiwgMHg5NywgMHgzNSwgMHg2YSwgMHhkNCwgMHhiMywgMHg3ZCwgMHhmYSwgMHhlZiwgMHhjNSwgMHg5MSwgMHgzOSwgMHg3MiwgMHhlNCwgMHhkMywgMHhiZCwgMHg2MSwgMHhjMiwgMHg5ZiwgMHgyNSwgMHg0YSwgMHg5NCwgMHgzMywgMHg2NiwgMHhjYywgMHg4MywgMHgxZCwgMHgzYSwgMHg3NCwgMHhlOCwgMHhjYiwgMHg4ZCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgxYiwgMHgzNiwgMHg2YywgMHhkOCwgMHhhYiwgMHg0ZCwgMHg5YSwgMHgyZiwgMHg1ZSwgMHhiYywgMHg2MywgMHhjNiwgMHg5NywgMHgzNSwgMHg2YSwgMHhkNCwgMHhiMywgMHg3ZCwgMHhmYSwgMHhlZiwgMHhjNSwgMHg5MSwgMHgzOSwgMHg3MiwgMHhlNCwgMHhkMywgMHhiZCwgMHg2MSwgMHhjMiwgMHg5ZiwgMHgyNSwgMHg0YSwgMHg5NCwgMHgzMywgMHg2NiwgMHhjYywgMHg4MywgMHgxZCwgMHgzYSwgMHg3NCwgMHhlOCwgMHhjYiwgMHg4ZCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgxYiwgMHgzNiwgMHg2YywgMHhkOCwgMHhhYiwgMHg0ZCwgMHg5YSwgMHgyZiwgMHg1ZSwgMHhiYywgMHg2MywgMHhjNiwgMHg5NywgMHgzNSwgMHg2YSwgMHhkNCwgMHhiMywgMHg3ZCwgMHhmYSwgMHhlZiwgMHhjNSwgMHg5MSwgMHgzOSwgMHg3MiwgMHhlNCwgMHhkMywgMHhiZCwgMHg2MSwgMHhjMiwgMHg5ZiwgMHgyNSwgMHg0YSwgMHg5NCwgMHgzMywgMHg2NiwgMHhjYywgMHg4MywgMHgxZCwgMHgzYSwgMHg3NCwgMHhlOCwgMHhjYiwgMHg4ZCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgxYiwgMHgzNiwgMHg2YywgMHhkOCwgMHhhYiwgMHg0ZCwgMHg5YSwgMHgyZiwgMHg1ZSwgMHhiYywgMHg2MywgMHhjNiwgMHg5NywgMHgzNSwgMHg2YSwgMHhkNCwgMHhiMywgMHg3ZCwgMHhmYSwgMHhlZiwgMHhjNSwgMHg5MSwgMHgzOSwgMHg3MiwgMHhlNCwgMHhkMywgMHhiZCwgMHg2MSwgMHhjMiwgMHg5ZiwgMHgyNSwgMHg0YSwgMHg5NCwgMHgzMywgMHg2NiwgMHhjYywgMHg4MywgMHgxZCwgMHgzYSwgMHg3NCwgMHhlOCwgMHhjYiwgMHg4ZCwgMHgwMSwgMHgwMiwgMHgwNCwgMHgwOCwgMHgxMCwgMHgyMCwgMHg0MCwgMHg4MCwgMHgxYiwgMHgzNiwgMHg2YywgMHhkOCwgMHhhYiwgMHg0ZCwgMHg5YSwgMHgyZiwgMHg1ZSwgMHhiYywgMHg2MywgMHhjNiwgMHg5NywgMHgzNSwgMHg2YSwgMHhkNCwgMHhiMywgMHg3ZCwgMHhmYSwgMHhlZiwgMHhjNSwgMHg5MSwgMHgzOSwgMHg3MiwgMHhlNCwgMHhkMywgMHhiZCwgMHg2MSwgMHhjMiwgMHg5ZiwgMHgyNSwgMHg0YSwgMHg5NCwgMHgzMywgMHg2NiwgMHhjYywgMHg4MywgMHgxZCwgMHgzYSwgMHg3NCwgMHhlOCwgMHhjYiwgMHg4ZF0pO1xuICAgIHRoaXMuX2tleSA9IHRoaXMuX2V4cGFuZEtleShrZXkpO1xuICB9XG5cbiAgX2V4cGFuZEtleShjaXBoZXJLZXkpIHtcbiAgICBjb25zdCBiID0gMTc2O1xuICAgIGNvbnN0IHMgPSB0aGlzLl9zO1xuICAgIGNvbnN0IHJjb24gPSB0aGlzLl9yY29uO1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KGIpO1xuICAgIHJlc3VsdC5zZXQoY2lwaGVyS2V5KTtcblxuICAgIGZvciAobGV0IGogPSAxNiwgaSA9IDE7IGogPCBiOyArK2kpIHtcbiAgICAgIGxldCB0MSA9IHJlc3VsdFtqIC0gM107XG4gICAgICBsZXQgdDIgPSByZXN1bHRbaiAtIDJdO1xuICAgICAgbGV0IHQzID0gcmVzdWx0W2ogLSAxXTtcbiAgICAgIGxldCB0NCA9IHJlc3VsdFtqIC0gNF07XG4gICAgICB0MSA9IHNbdDFdO1xuICAgICAgdDIgPSBzW3QyXTtcbiAgICAgIHQzID0gc1t0M107XG4gICAgICB0NCA9IHNbdDRdO1xuICAgICAgdDEgXj0gcmNvbltpXTtcblxuICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCA0OyArK24pIHtcbiAgICAgICAgcmVzdWx0W2pdID0gdDEgXj0gcmVzdWx0W2ogLSAxNl07XG4gICAgICAgIGorKztcbiAgICAgICAgcmVzdWx0W2pdID0gdDIgXj0gcmVzdWx0W2ogLSAxNl07XG4gICAgICAgIGorKztcbiAgICAgICAgcmVzdWx0W2pdID0gdDMgXj0gcmVzdWx0W2ogLSAxNl07XG4gICAgICAgIGorKztcbiAgICAgICAgcmVzdWx0W2pdID0gdDQgXj0gcmVzdWx0W2ogLSAxNl07XG4gICAgICAgIGorKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbn1cblxuZXhwb3J0cy5BRVMxMjhDaXBoZXIgPSBBRVMxMjhDaXBoZXI7XG5cbmNsYXNzIEFFUzI1NkNpcGhlciBleHRlbmRzIEFFU0Jhc2VDaXBoZXIge1xuICBjb25zdHJ1Y3RvcihrZXkpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2N5Y2xlc09mUmVwZXRpdGlvbiA9IDE0O1xuICAgIHRoaXMuX2tleVNpemUgPSAyMjQ7XG4gICAgdGhpcy5fa2V5ID0gdGhpcy5fZXhwYW5kS2V5KGtleSk7XG4gIH1cblxuICBfZXhwYW5kS2V5KGNpcGhlcktleSkge1xuICAgIGNvbnN0IGIgPSAyNDA7XG4gICAgY29uc3QgcyA9IHRoaXMuX3M7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkoYik7XG4gICAgcmVzdWx0LnNldChjaXBoZXJLZXkpO1xuICAgIGxldCByID0gMTtcbiAgICBsZXQgdDEsIHQyLCB0MywgdDQ7XG5cbiAgICBmb3IgKGxldCBqID0gMzIsIGkgPSAxOyBqIDwgYjsgKytpKSB7XG4gICAgICBpZiAoaiAlIDMyID09PSAxNikge1xuICAgICAgICB0MSA9IHNbdDFdO1xuICAgICAgICB0MiA9IHNbdDJdO1xuICAgICAgICB0MyA9IHNbdDNdO1xuICAgICAgICB0NCA9IHNbdDRdO1xuICAgICAgfSBlbHNlIGlmIChqICUgMzIgPT09IDApIHtcbiAgICAgICAgdDEgPSByZXN1bHRbaiAtIDNdO1xuICAgICAgICB0MiA9IHJlc3VsdFtqIC0gMl07XG4gICAgICAgIHQzID0gcmVzdWx0W2ogLSAxXTtcbiAgICAgICAgdDQgPSByZXN1bHRbaiAtIDRdO1xuICAgICAgICB0MSA9IHNbdDFdO1xuICAgICAgICB0MiA9IHNbdDJdO1xuICAgICAgICB0MyA9IHNbdDNdO1xuICAgICAgICB0NCA9IHNbdDRdO1xuICAgICAgICB0MSBePSByO1xuXG4gICAgICAgIGlmICgociA8PD0gMSkgPj0gMjU2KSB7XG4gICAgICAgICAgciA9IChyIF4gMHgxYikgJiAweGZmO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgNDsgKytuKSB7XG4gICAgICAgIHJlc3VsdFtqXSA9IHQxIF49IHJlc3VsdFtqIC0gMzJdO1xuICAgICAgICBqKys7XG4gICAgICAgIHJlc3VsdFtqXSA9IHQyIF49IHJlc3VsdFtqIC0gMzJdO1xuICAgICAgICBqKys7XG4gICAgICAgIHJlc3VsdFtqXSA9IHQzIF49IHJlc3VsdFtqIC0gMzJdO1xuICAgICAgICBqKys7XG4gICAgICAgIHJlc3VsdFtqXSA9IHQ0IF49IHJlc3VsdFtqIC0gMzJdO1xuICAgICAgICBqKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG59XG5cbmV4cG9ydHMuQUVTMjU2Q2lwaGVyID0gQUVTMjU2Q2lwaGVyO1xuXG5jbGFzcyBQREYxNyB7XG4gIGNoZWNrT3duZXJQYXNzd29yZChwYXNzd29yZCwgb3duZXJWYWxpZGF0aW9uU2FsdCwgdXNlckJ5dGVzLCBvd25lclBhc3N3b3JkKSB7XG4gICAgY29uc3QgaGFzaERhdGEgPSBuZXcgVWludDhBcnJheShwYXNzd29yZC5sZW5ndGggKyA1Nik7XG4gICAgaGFzaERhdGEuc2V0KHBhc3N3b3JkLCAwKTtcbiAgICBoYXNoRGF0YS5zZXQob3duZXJWYWxpZGF0aW9uU2FsdCwgcGFzc3dvcmQubGVuZ3RoKTtcbiAgICBoYXNoRGF0YS5zZXQodXNlckJ5dGVzLCBwYXNzd29yZC5sZW5ndGggKyBvd25lclZhbGlkYXRpb25TYWx0Lmxlbmd0aCk7XG4gICAgY29uc3QgcmVzdWx0ID0gY2FsY3VsYXRlU0hBMjU2KGhhc2hEYXRhLCAwLCBoYXNoRGF0YS5sZW5ndGgpO1xuICAgIHJldHVybiAoMCwgX3V0aWwuaXNBcnJheUVxdWFsKShyZXN1bHQsIG93bmVyUGFzc3dvcmQpO1xuICB9XG5cbiAgY2hlY2tVc2VyUGFzc3dvcmQocGFzc3dvcmQsIHVzZXJWYWxpZGF0aW9uU2FsdCwgdXNlclBhc3N3b3JkKSB7XG4gICAgY29uc3QgaGFzaERhdGEgPSBuZXcgVWludDhBcnJheShwYXNzd29yZC5sZW5ndGggKyA4KTtcbiAgICBoYXNoRGF0YS5zZXQocGFzc3dvcmQsIDApO1xuICAgIGhhc2hEYXRhLnNldCh1c2VyVmFsaWRhdGlvblNhbHQsIHBhc3N3b3JkLmxlbmd0aCk7XG4gICAgY29uc3QgcmVzdWx0ID0gY2FsY3VsYXRlU0hBMjU2KGhhc2hEYXRhLCAwLCBoYXNoRGF0YS5sZW5ndGgpO1xuICAgIHJldHVybiAoMCwgX3V0aWwuaXNBcnJheUVxdWFsKShyZXN1bHQsIHVzZXJQYXNzd29yZCk7XG4gIH1cblxuICBnZXRPd25lcktleShwYXNzd29yZCwgb3duZXJLZXlTYWx0LCB1c2VyQnl0ZXMsIG93bmVyRW5jcnlwdGlvbikge1xuICAgIGNvbnN0IGhhc2hEYXRhID0gbmV3IFVpbnQ4QXJyYXkocGFzc3dvcmQubGVuZ3RoICsgNTYpO1xuICAgIGhhc2hEYXRhLnNldChwYXNzd29yZCwgMCk7XG4gICAgaGFzaERhdGEuc2V0KG93bmVyS2V5U2FsdCwgcGFzc3dvcmQubGVuZ3RoKTtcbiAgICBoYXNoRGF0YS5zZXQodXNlckJ5dGVzLCBwYXNzd29yZC5sZW5ndGggKyBvd25lcktleVNhbHQubGVuZ3RoKTtcbiAgICBjb25zdCBrZXkgPSBjYWxjdWxhdGVTSEEyNTYoaGFzaERhdGEsIDAsIGhhc2hEYXRhLmxlbmd0aCk7XG4gICAgY29uc3QgY2lwaGVyID0gbmV3IEFFUzI1NkNpcGhlcihrZXkpO1xuICAgIHJldHVybiBjaXBoZXIuZGVjcnlwdEJsb2NrKG93bmVyRW5jcnlwdGlvbiwgZmFsc2UsIG5ldyBVaW50OEFycmF5KDE2KSk7XG4gIH1cblxuICBnZXRVc2VyS2V5KHBhc3N3b3JkLCB1c2VyS2V5U2FsdCwgdXNlckVuY3J5cHRpb24pIHtcbiAgICBjb25zdCBoYXNoRGF0YSA9IG5ldyBVaW50OEFycmF5KHBhc3N3b3JkLmxlbmd0aCArIDgpO1xuICAgIGhhc2hEYXRhLnNldChwYXNzd29yZCwgMCk7XG4gICAgaGFzaERhdGEuc2V0KHVzZXJLZXlTYWx0LCBwYXNzd29yZC5sZW5ndGgpO1xuICAgIGNvbnN0IGtleSA9IGNhbGN1bGF0ZVNIQTI1NihoYXNoRGF0YSwgMCwgaGFzaERhdGEubGVuZ3RoKTtcbiAgICBjb25zdCBjaXBoZXIgPSBuZXcgQUVTMjU2Q2lwaGVyKGtleSk7XG4gICAgcmV0dXJuIGNpcGhlci5kZWNyeXB0QmxvY2sodXNlckVuY3J5cHRpb24sIGZhbHNlLCBuZXcgVWludDhBcnJheSgxNikpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5QREYxNyA9IFBERjE3O1xuXG5jb25zdCBQREYyMCA9IGZ1bmN0aW9uIFBERjIwQ2xvc3VyZSgpIHtcbiAgZnVuY3Rpb24gY2FsY3VsYXRlUERGMjBIYXNoKHBhc3N3b3JkLCBpbnB1dCwgdXNlckJ5dGVzKSB7XG4gICAgbGV0IGsgPSBjYWxjdWxhdGVTSEEyNTYoaW5wdXQsIDAsIGlucHV0Lmxlbmd0aCkuc3ViYXJyYXkoMCwgMzIpO1xuICAgIGxldCBlID0gWzBdO1xuICAgIGxldCBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgNjQgfHwgZVtlLmxlbmd0aCAtIDFdID4gaSAtIDMyKSB7XG4gICAgICBjb25zdCBjb21iaW5lZExlbmd0aCA9IHBhc3N3b3JkLmxlbmd0aCArIGsubGVuZ3RoICsgdXNlckJ5dGVzLmxlbmd0aCxcbiAgICAgICAgICAgIGNvbWJpbmVkQXJyYXkgPSBuZXcgVWludDhBcnJheShjb21iaW5lZExlbmd0aCk7XG4gICAgICBsZXQgd3JpdGVPZmZzZXQgPSAwO1xuICAgICAgY29tYmluZWRBcnJheS5zZXQocGFzc3dvcmQsIHdyaXRlT2Zmc2V0KTtcbiAgICAgIHdyaXRlT2Zmc2V0ICs9IHBhc3N3b3JkLmxlbmd0aDtcbiAgICAgIGNvbWJpbmVkQXJyYXkuc2V0KGssIHdyaXRlT2Zmc2V0KTtcbiAgICAgIHdyaXRlT2Zmc2V0ICs9IGsubGVuZ3RoO1xuICAgICAgY29tYmluZWRBcnJheS5zZXQodXNlckJ5dGVzLCB3cml0ZU9mZnNldCk7XG4gICAgICBjb25zdCBrMSA9IG5ldyBVaW50OEFycmF5KGNvbWJpbmVkTGVuZ3RoICogNjQpO1xuXG4gICAgICBmb3IgKGxldCBqID0gMCwgcG9zID0gMDsgaiA8IDY0OyBqKyssIHBvcyArPSBjb21iaW5lZExlbmd0aCkge1xuICAgICAgICBrMS5zZXQoY29tYmluZWRBcnJheSwgcG9zKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2lwaGVyID0gbmV3IEFFUzEyOENpcGhlcihrLnN1YmFycmF5KDAsIDE2KSk7XG4gICAgICBlID0gY2lwaGVyLmVuY3J5cHQoazEsIGsuc3ViYXJyYXkoMTYsIDMyKSk7XG4gICAgICBsZXQgcmVtYWluZGVyID0gMDtcblxuICAgICAgZm9yIChsZXQgeiA9IDA7IHogPCAxNjsgeisrKSB7XG4gICAgICAgIHJlbWFpbmRlciAqPSAyNTYgJSAzO1xuICAgICAgICByZW1haW5kZXIgJT0gMztcbiAgICAgICAgcmVtYWluZGVyICs9IChlW3pdID4+PiAwKSAlIDM7XG4gICAgICAgIHJlbWFpbmRlciAlPSAzO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVtYWluZGVyID09PSAwKSB7XG4gICAgICAgIGsgPSBjYWxjdWxhdGVTSEEyNTYoZSwgMCwgZS5sZW5ndGgpO1xuICAgICAgfSBlbHNlIGlmIChyZW1haW5kZXIgPT09IDEpIHtcbiAgICAgICAgayA9IGNhbGN1bGF0ZVNIQTM4NChlLCAwLCBlLmxlbmd0aCk7XG4gICAgICB9IGVsc2UgaWYgKHJlbWFpbmRlciA9PT0gMikge1xuICAgICAgICBrID0gY2FsY3VsYXRlU0hBNTEyKGUsIDAsIGUubGVuZ3RoKTtcbiAgICAgIH1cblxuICAgICAgaSsrO1xuICAgIH1cblxuICAgIHJldHVybiBrLnN1YmFycmF5KDAsIDMyKTtcbiAgfVxuXG4gIGNsYXNzIFBERjIwIHtcbiAgICBoYXNoKHBhc3N3b3JkLCBjb25jYXRCeXRlcywgdXNlckJ5dGVzKSB7XG4gICAgICByZXR1cm4gY2FsY3VsYXRlUERGMjBIYXNoKHBhc3N3b3JkLCBjb25jYXRCeXRlcywgdXNlckJ5dGVzKTtcbiAgICB9XG5cbiAgICBjaGVja093bmVyUGFzc3dvcmQocGFzc3dvcmQsIG93bmVyVmFsaWRhdGlvblNhbHQsIHVzZXJCeXRlcywgb3duZXJQYXNzd29yZCkge1xuICAgICAgY29uc3QgaGFzaERhdGEgPSBuZXcgVWludDhBcnJheShwYXNzd29yZC5sZW5ndGggKyA1Nik7XG4gICAgICBoYXNoRGF0YS5zZXQocGFzc3dvcmQsIDApO1xuICAgICAgaGFzaERhdGEuc2V0KG93bmVyVmFsaWRhdGlvblNhbHQsIHBhc3N3b3JkLmxlbmd0aCk7XG4gICAgICBoYXNoRGF0YS5zZXQodXNlckJ5dGVzLCBwYXNzd29yZC5sZW5ndGggKyBvd25lclZhbGlkYXRpb25TYWx0Lmxlbmd0aCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBjYWxjdWxhdGVQREYyMEhhc2gocGFzc3dvcmQsIGhhc2hEYXRhLCB1c2VyQnl0ZXMpO1xuICAgICAgcmV0dXJuICgwLCBfdXRpbC5pc0FycmF5RXF1YWwpKHJlc3VsdCwgb3duZXJQYXNzd29yZCk7XG4gICAgfVxuXG4gICAgY2hlY2tVc2VyUGFzc3dvcmQocGFzc3dvcmQsIHVzZXJWYWxpZGF0aW9uU2FsdCwgdXNlclBhc3N3b3JkKSB7XG4gICAgICBjb25zdCBoYXNoRGF0YSA9IG5ldyBVaW50OEFycmF5KHBhc3N3b3JkLmxlbmd0aCArIDgpO1xuICAgICAgaGFzaERhdGEuc2V0KHBhc3N3b3JkLCAwKTtcbiAgICAgIGhhc2hEYXRhLnNldCh1c2VyVmFsaWRhdGlvblNhbHQsIHBhc3N3b3JkLmxlbmd0aCk7XG4gICAgICBjb25zdCByZXN1bHQgPSBjYWxjdWxhdGVQREYyMEhhc2gocGFzc3dvcmQsIGhhc2hEYXRhLCBbXSk7XG4gICAgICByZXR1cm4gKDAsIF91dGlsLmlzQXJyYXlFcXVhbCkocmVzdWx0LCB1c2VyUGFzc3dvcmQpO1xuICAgIH1cblxuICAgIGdldE93bmVyS2V5KHBhc3N3b3JkLCBvd25lcktleVNhbHQsIHVzZXJCeXRlcywgb3duZXJFbmNyeXB0aW9uKSB7XG4gICAgICBjb25zdCBoYXNoRGF0YSA9IG5ldyBVaW50OEFycmF5KHBhc3N3b3JkLmxlbmd0aCArIDU2KTtcbiAgICAgIGhhc2hEYXRhLnNldChwYXNzd29yZCwgMCk7XG4gICAgICBoYXNoRGF0YS5zZXQob3duZXJLZXlTYWx0LCBwYXNzd29yZC5sZW5ndGgpO1xuICAgICAgaGFzaERhdGEuc2V0KHVzZXJCeXRlcywgcGFzc3dvcmQubGVuZ3RoICsgb3duZXJLZXlTYWx0Lmxlbmd0aCk7XG4gICAgICBjb25zdCBrZXkgPSBjYWxjdWxhdGVQREYyMEhhc2gocGFzc3dvcmQsIGhhc2hEYXRhLCB1c2VyQnl0ZXMpO1xuICAgICAgY29uc3QgY2lwaGVyID0gbmV3IEFFUzI1NkNpcGhlcihrZXkpO1xuICAgICAgcmV0dXJuIGNpcGhlci5kZWNyeXB0QmxvY2sob3duZXJFbmNyeXB0aW9uLCBmYWxzZSwgbmV3IFVpbnQ4QXJyYXkoMTYpKTtcbiAgICB9XG5cbiAgICBnZXRVc2VyS2V5KHBhc3N3b3JkLCB1c2VyS2V5U2FsdCwgdXNlckVuY3J5cHRpb24pIHtcbiAgICAgIGNvbnN0IGhhc2hEYXRhID0gbmV3IFVpbnQ4QXJyYXkocGFzc3dvcmQubGVuZ3RoICsgOCk7XG4gICAgICBoYXNoRGF0YS5zZXQocGFzc3dvcmQsIDApO1xuICAgICAgaGFzaERhdGEuc2V0KHVzZXJLZXlTYWx0LCBwYXNzd29yZC5sZW5ndGgpO1xuICAgICAgY29uc3Qga2V5ID0gY2FsY3VsYXRlUERGMjBIYXNoKHBhc3N3b3JkLCBoYXNoRGF0YSwgW10pO1xuICAgICAgY29uc3QgY2lwaGVyID0gbmV3IEFFUzI1NkNpcGhlcihrZXkpO1xuICAgICAgcmV0dXJuIGNpcGhlci5kZWNyeXB0QmxvY2sodXNlckVuY3J5cHRpb24sIGZhbHNlLCBuZXcgVWludDhBcnJheSgxNikpO1xuICAgIH1cblxuICB9XG5cbiAgcmV0dXJuIFBERjIwO1xufSgpO1xuXG5leHBvcnRzLlBERjIwID0gUERGMjA7XG5cbmNsYXNzIENpcGhlclRyYW5zZm9ybSB7XG4gIGNvbnN0cnVjdG9yKHN0cmluZ0NpcGhlckNvbnN0cnVjdG9yLCBzdHJlYW1DaXBoZXJDb25zdHJ1Y3Rvcikge1xuICAgIHRoaXMuU3RyaW5nQ2lwaGVyQ29uc3RydWN0b3IgPSBzdHJpbmdDaXBoZXJDb25zdHJ1Y3RvcjtcbiAgICB0aGlzLlN0cmVhbUNpcGhlckNvbnN0cnVjdG9yID0gc3RyZWFtQ2lwaGVyQ29uc3RydWN0b3I7XG4gIH1cblxuICBjcmVhdGVTdHJlYW0oc3RyZWFtLCBsZW5ndGgpIHtcbiAgICBjb25zdCBjaXBoZXIgPSBuZXcgdGhpcy5TdHJlYW1DaXBoZXJDb25zdHJ1Y3RvcigpO1xuICAgIHJldHVybiBuZXcgX2RlY3J5cHRfc3RyZWFtLkRlY3J5cHRTdHJlYW0oc3RyZWFtLCBsZW5ndGgsIGZ1bmN0aW9uIGNpcGhlclRyYW5zZm9ybURlY3J5cHRTdHJlYW0oZGF0YSwgZmluYWxpemUpIHtcbiAgICAgIHJldHVybiBjaXBoZXIuZGVjcnlwdEJsb2NrKGRhdGEsIGZpbmFsaXplKTtcbiAgICB9KTtcbiAgfVxuXG4gIGRlY3J5cHRTdHJpbmcocykge1xuICAgIGNvbnN0IGNpcGhlciA9IG5ldyB0aGlzLlN0cmluZ0NpcGhlckNvbnN0cnVjdG9yKCk7XG4gICAgbGV0IGRhdGEgPSAoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykocyk7XG4gICAgZGF0YSA9IGNpcGhlci5kZWNyeXB0QmxvY2soZGF0YSwgdHJ1ZSk7XG4gICAgcmV0dXJuICgwLCBfdXRpbC5ieXRlc1RvU3RyaW5nKShkYXRhKTtcbiAgfVxuXG4gIGVuY3J5cHRTdHJpbmcocykge1xuICAgIGNvbnN0IGNpcGhlciA9IG5ldyB0aGlzLlN0cmluZ0NpcGhlckNvbnN0cnVjdG9yKCk7XG5cbiAgICBpZiAoY2lwaGVyIGluc3RhbmNlb2YgQUVTQmFzZUNpcGhlcikge1xuICAgICAgY29uc3Qgc3RyTGVuID0gcy5sZW5ndGg7XG4gICAgICBjb25zdCBwYWQgPSAxNiAtIHN0ckxlbiAlIDE2O1xuICAgICAgcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhZCkucmVwZWF0KHBhZCk7XG4gICAgICBjb25zdCBpdiA9IG5ldyBVaW50OEFycmF5KDE2KTtcblxuICAgICAgaWYgKHR5cGVvZiBjcnlwdG8gIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhpdik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICAgICAgICBpdltpXSA9IE1hdGguZmxvb3IoMjU2ICogTWF0aC5yYW5kb20oKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGV0IGRhdGEgPSAoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykocyk7XG4gICAgICBkYXRhID0gY2lwaGVyLmVuY3J5cHQoZGF0YSwgaXYpO1xuICAgICAgY29uc3QgYnVmID0gbmV3IFVpbnQ4QXJyYXkoMTYgKyBkYXRhLmxlbmd0aCk7XG4gICAgICBidWYuc2V0KGl2KTtcbiAgICAgIGJ1Zi5zZXQoZGF0YSwgMTYpO1xuICAgICAgcmV0dXJuICgwLCBfdXRpbC5ieXRlc1RvU3RyaW5nKShidWYpO1xuICAgIH1cblxuICAgIGxldCBkYXRhID0gKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKHMpO1xuICAgIGRhdGEgPSBjaXBoZXIuZW5jcnlwdChkYXRhKTtcbiAgICByZXR1cm4gKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKGRhdGEpO1xuICB9XG5cbn1cblxuY29uc3QgQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeSA9IGZ1bmN0aW9uIENpcGhlclRyYW5zZm9ybUZhY3RvcnlDbG9zdXJlKCkge1xuICBjb25zdCBkZWZhdWx0UGFzc3dvcmRCeXRlcyA9IG5ldyBVaW50OEFycmF5KFsweDI4LCAweGJmLCAweDRlLCAweDVlLCAweDRlLCAweDc1LCAweDhhLCAweDQxLCAweDY0LCAweDAwLCAweDRlLCAweDU2LCAweGZmLCAweGZhLCAweDAxLCAweDA4LCAweDJlLCAweDJlLCAweDAwLCAweGI2LCAweGQwLCAweDY4LCAweDNlLCAweDgwLCAweDJmLCAweDBjLCAweGE5LCAweGZlLCAweDY0LCAweDUzLCAweDY5LCAweDdhXSk7XG5cbiAgZnVuY3Rpb24gY3JlYXRlRW5jcnlwdGlvbktleTIwKHJldmlzaW9uLCBwYXNzd29yZCwgb3duZXJQYXNzd29yZCwgb3duZXJWYWxpZGF0aW9uU2FsdCwgb3duZXJLZXlTYWx0LCB1Qnl0ZXMsIHVzZXJQYXNzd29yZCwgdXNlclZhbGlkYXRpb25TYWx0LCB1c2VyS2V5U2FsdCwgb3duZXJFbmNyeXB0aW9uLCB1c2VyRW5jcnlwdGlvbiwgcGVybXMpIHtcbiAgICBpZiAocGFzc3dvcmQpIHtcbiAgICAgIGNvbnN0IHBhc3N3b3JkTGVuZ3RoID0gTWF0aC5taW4oMTI3LCBwYXNzd29yZC5sZW5ndGgpO1xuICAgICAgcGFzc3dvcmQgPSBwYXNzd29yZC5zdWJhcnJheSgwLCBwYXNzd29yZExlbmd0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhc3N3b3JkID0gW107XG4gICAgfVxuXG4gICAgbGV0IHBkZkFsZ29yaXRobTtcblxuICAgIGlmIChyZXZpc2lvbiA9PT0gNikge1xuICAgICAgcGRmQWxnb3JpdGhtID0gbmV3IFBERjIwKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBkZkFsZ29yaXRobSA9IG5ldyBQREYxNygpO1xuICAgIH1cblxuICAgIGlmIChwZGZBbGdvcml0aG0uY2hlY2tVc2VyUGFzc3dvcmQocGFzc3dvcmQsIHVzZXJWYWxpZGF0aW9uU2FsdCwgdXNlclBhc3N3b3JkKSkge1xuICAgICAgcmV0dXJuIHBkZkFsZ29yaXRobS5nZXRVc2VyS2V5KHBhc3N3b3JkLCB1c2VyS2V5U2FsdCwgdXNlckVuY3J5cHRpb24pO1xuICAgIH0gZWxzZSBpZiAocGFzc3dvcmQubGVuZ3RoICYmIHBkZkFsZ29yaXRobS5jaGVja093bmVyUGFzc3dvcmQocGFzc3dvcmQsIG93bmVyVmFsaWRhdGlvblNhbHQsIHVCeXRlcywgb3duZXJQYXNzd29yZCkpIHtcbiAgICAgIHJldHVybiBwZGZBbGdvcml0aG0uZ2V0T3duZXJLZXkocGFzc3dvcmQsIG93bmVyS2V5U2FsdCwgdUJ5dGVzLCBvd25lckVuY3J5cHRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gcHJlcGFyZUtleURhdGEoZmlsZUlkLCBwYXNzd29yZCwgb3duZXJQYXNzd29yZCwgdXNlclBhc3N3b3JkLCBmbGFncywgcmV2aXNpb24sIGtleUxlbmd0aCwgZW5jcnlwdE1ldGFkYXRhKSB7XG4gICAgY29uc3QgaGFzaERhdGFTaXplID0gNDAgKyBvd25lclBhc3N3b3JkLmxlbmd0aCArIGZpbGVJZC5sZW5ndGg7XG4gICAgY29uc3QgaGFzaERhdGEgPSBuZXcgVWludDhBcnJheShoYXNoRGF0YVNpemUpO1xuICAgIGxldCBpID0gMCxcbiAgICAgICAgaixcbiAgICAgICAgbjtcblxuICAgIGlmIChwYXNzd29yZCkge1xuICAgICAgbiA9IE1hdGgubWluKDMyLCBwYXNzd29yZC5sZW5ndGgpO1xuXG4gICAgICBmb3IgKDsgaSA8IG47ICsraSkge1xuICAgICAgICBoYXNoRGF0YVtpXSA9IHBhc3N3b3JkW2ldO1xuICAgICAgfVxuICAgIH1cblxuICAgIGogPSAwO1xuXG4gICAgd2hpbGUgKGkgPCAzMikge1xuICAgICAgaGFzaERhdGFbaSsrXSA9IGRlZmF1bHRQYXNzd29yZEJ5dGVzW2orK107XG4gICAgfVxuXG4gICAgZm9yIChqID0gMCwgbiA9IG93bmVyUGFzc3dvcmQubGVuZ3RoOyBqIDwgbjsgKytqKSB7XG4gICAgICBoYXNoRGF0YVtpKytdID0gb3duZXJQYXNzd29yZFtqXTtcbiAgICB9XG5cbiAgICBoYXNoRGF0YVtpKytdID0gZmxhZ3MgJiAweGZmO1xuICAgIGhhc2hEYXRhW2krK10gPSBmbGFncyA+PiA4ICYgMHhmZjtcbiAgICBoYXNoRGF0YVtpKytdID0gZmxhZ3MgPj4gMTYgJiAweGZmO1xuICAgIGhhc2hEYXRhW2krK10gPSBmbGFncyA+Pj4gMjQgJiAweGZmO1xuXG4gICAgZm9yIChqID0gMCwgbiA9IGZpbGVJZC5sZW5ndGg7IGogPCBuOyArK2opIHtcbiAgICAgIGhhc2hEYXRhW2krK10gPSBmaWxlSWRbal07XG4gICAgfVxuXG4gICAgaWYgKHJldmlzaW9uID49IDQgJiYgIWVuY3J5cHRNZXRhZGF0YSkge1xuICAgICAgaGFzaERhdGFbaSsrXSA9IDB4ZmY7XG4gICAgICBoYXNoRGF0YVtpKytdID0gMHhmZjtcbiAgICAgIGhhc2hEYXRhW2krK10gPSAweGZmO1xuICAgICAgaGFzaERhdGFbaSsrXSA9IDB4ZmY7XG4gICAgfVxuXG4gICAgbGV0IGhhc2ggPSBjYWxjdWxhdGVNRDUoaGFzaERhdGEsIDAsIGkpO1xuICAgIGNvbnN0IGtleUxlbmd0aEluQnl0ZXMgPSBrZXlMZW5ndGggPj4gMztcblxuICAgIGlmIChyZXZpc2lvbiA+PSAzKSB7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgNTA7ICsraikge1xuICAgICAgICBoYXNoID0gY2FsY3VsYXRlTUQ1KGhhc2gsIDAsIGtleUxlbmd0aEluQnl0ZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGVuY3J5cHRpb25LZXkgPSBoYXNoLnN1YmFycmF5KDAsIGtleUxlbmd0aEluQnl0ZXMpO1xuICAgIGxldCBjaXBoZXIsIGNoZWNrRGF0YTtcblxuICAgIGlmIChyZXZpc2lvbiA+PSAzKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgMzI7ICsraSkge1xuICAgICAgICBoYXNoRGF0YVtpXSA9IGRlZmF1bHRQYXNzd29yZEJ5dGVzW2ldO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGogPSAwLCBuID0gZmlsZUlkLmxlbmd0aDsgaiA8IG47ICsraikge1xuICAgICAgICBoYXNoRGF0YVtpKytdID0gZmlsZUlkW2pdO1xuICAgICAgfVxuXG4gICAgICBjaXBoZXIgPSBuZXcgQVJDRm91ckNpcGhlcihlbmNyeXB0aW9uS2V5KTtcbiAgICAgIGNoZWNrRGF0YSA9IGNpcGhlci5lbmNyeXB0QmxvY2soY2FsY3VsYXRlTUQ1KGhhc2hEYXRhLCAwLCBpKSk7XG4gICAgICBuID0gZW5jcnlwdGlvbktleS5sZW5ndGg7XG4gICAgICBjb25zdCBkZXJpdmVkS2V5ID0gbmV3IFVpbnQ4QXJyYXkobik7XG5cbiAgICAgIGZvciAoaiA9IDE7IGogPD0gMTk7ICsraikge1xuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IG47ICsraykge1xuICAgICAgICAgIGRlcml2ZWRLZXlba10gPSBlbmNyeXB0aW9uS2V5W2tdIF4gajtcbiAgICAgICAgfVxuXG4gICAgICAgIGNpcGhlciA9IG5ldyBBUkNGb3VyQ2lwaGVyKGRlcml2ZWRLZXkpO1xuICAgICAgICBjaGVja0RhdGEgPSBjaXBoZXIuZW5jcnlwdEJsb2NrKGNoZWNrRGF0YSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoaiA9IDAsIG4gPSBjaGVja0RhdGEubGVuZ3RoOyBqIDwgbjsgKytqKSB7XG4gICAgICAgIGlmICh1c2VyUGFzc3dvcmRbal0gIT09IGNoZWNrRGF0YVtqXSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNpcGhlciA9IG5ldyBBUkNGb3VyQ2lwaGVyKGVuY3J5cHRpb25LZXkpO1xuICAgICAgY2hlY2tEYXRhID0gY2lwaGVyLmVuY3J5cHRCbG9jayhkZWZhdWx0UGFzc3dvcmRCeXRlcyk7XG5cbiAgICAgIGZvciAoaiA9IDAsIG4gPSBjaGVja0RhdGEubGVuZ3RoOyBqIDwgbjsgKytqKSB7XG4gICAgICAgIGlmICh1c2VyUGFzc3dvcmRbal0gIT09IGNoZWNrRGF0YVtqXSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGVuY3J5cHRpb25LZXk7XG4gIH1cblxuICBmdW5jdGlvbiBkZWNvZGVVc2VyUGFzc3dvcmQocGFzc3dvcmQsIG93bmVyUGFzc3dvcmQsIHJldmlzaW9uLCBrZXlMZW5ndGgpIHtcbiAgICBjb25zdCBoYXNoRGF0YSA9IG5ldyBVaW50OEFycmF5KDMyKTtcbiAgICBsZXQgaSA9IDA7XG4gICAgY29uc3QgbiA9IE1hdGgubWluKDMyLCBwYXNzd29yZC5sZW5ndGgpO1xuXG4gICAgZm9yICg7IGkgPCBuOyArK2kpIHtcbiAgICAgIGhhc2hEYXRhW2ldID0gcGFzc3dvcmRbaV07XG4gICAgfVxuXG4gICAgbGV0IGogPSAwO1xuXG4gICAgd2hpbGUgKGkgPCAzMikge1xuICAgICAgaGFzaERhdGFbaSsrXSA9IGRlZmF1bHRQYXNzd29yZEJ5dGVzW2orK107XG4gICAgfVxuXG4gICAgbGV0IGhhc2ggPSBjYWxjdWxhdGVNRDUoaGFzaERhdGEsIDAsIGkpO1xuICAgIGNvbnN0IGtleUxlbmd0aEluQnl0ZXMgPSBrZXlMZW5ndGggPj4gMztcblxuICAgIGlmIChyZXZpc2lvbiA+PSAzKSB7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgNTA7ICsraikge1xuICAgICAgICBoYXNoID0gY2FsY3VsYXRlTUQ1KGhhc2gsIDAsIGhhc2gubGVuZ3RoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgY2lwaGVyLCB1c2VyUGFzc3dvcmQ7XG5cbiAgICBpZiAocmV2aXNpb24gPj0gMykge1xuICAgICAgdXNlclBhc3N3b3JkID0gb3duZXJQYXNzd29yZDtcbiAgICAgIGNvbnN0IGRlcml2ZWRLZXkgPSBuZXcgVWludDhBcnJheShrZXlMZW5ndGhJbkJ5dGVzKTtcblxuICAgICAgZm9yIChqID0gMTk7IGogPj0gMDsgai0tKSB7XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwga2V5TGVuZ3RoSW5CeXRlczsgKytrKSB7XG4gICAgICAgICAgZGVyaXZlZEtleVtrXSA9IGhhc2hba10gXiBqO1xuICAgICAgICB9XG5cbiAgICAgICAgY2lwaGVyID0gbmV3IEFSQ0ZvdXJDaXBoZXIoZGVyaXZlZEtleSk7XG4gICAgICAgIHVzZXJQYXNzd29yZCA9IGNpcGhlci5lbmNyeXB0QmxvY2sodXNlclBhc3N3b3JkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY2lwaGVyID0gbmV3IEFSQ0ZvdXJDaXBoZXIoaGFzaC5zdWJhcnJheSgwLCBrZXlMZW5ndGhJbkJ5dGVzKSk7XG4gICAgICB1c2VyUGFzc3dvcmQgPSBjaXBoZXIuZW5jcnlwdEJsb2NrKG93bmVyUGFzc3dvcmQpO1xuICAgIH1cblxuICAgIHJldHVybiB1c2VyUGFzc3dvcmQ7XG4gIH1cblxuICBjb25zdCBpZGVudGl0eU5hbWUgPSBfcHJpbWl0aXZlcy5OYW1lLmdldChcIklkZW50aXR5XCIpO1xuXG4gIGZ1bmN0aW9uIGJ1aWxkT2JqZWN0S2V5KG51bSwgZ2VuLCBlbmNyeXB0aW9uS2V5LCBpc0FlcyA9IGZhbHNlKSB7XG4gICAgY29uc3Qga2V5ID0gbmV3IFVpbnQ4QXJyYXkoZW5jcnlwdGlvbktleS5sZW5ndGggKyA5KTtcbiAgICBjb25zdCBuID0gZW5jcnlwdGlvbktleS5sZW5ndGg7XG4gICAgbGV0IGk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBrZXlbaV0gPSBlbmNyeXB0aW9uS2V5W2ldO1xuICAgIH1cblxuICAgIGtleVtpKytdID0gbnVtICYgMHhmZjtcbiAgICBrZXlbaSsrXSA9IG51bSA+PiA4ICYgMHhmZjtcbiAgICBrZXlbaSsrXSA9IG51bSA+PiAxNiAmIDB4ZmY7XG4gICAga2V5W2krK10gPSBnZW4gJiAweGZmO1xuICAgIGtleVtpKytdID0gZ2VuID4+IDggJiAweGZmO1xuXG4gICAgaWYgKGlzQWVzKSB7XG4gICAgICBrZXlbaSsrXSA9IDB4NzM7XG4gICAgICBrZXlbaSsrXSA9IDB4NDE7XG4gICAgICBrZXlbaSsrXSA9IDB4NmM7XG4gICAgICBrZXlbaSsrXSA9IDB4NTQ7XG4gICAgfVxuXG4gICAgY29uc3QgaGFzaCA9IGNhbGN1bGF0ZU1ENShrZXksIDAsIGkpO1xuICAgIHJldHVybiBoYXNoLnN1YmFycmF5KDAsIE1hdGgubWluKGVuY3J5cHRpb25LZXkubGVuZ3RoICsgNSwgMTYpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJ1aWxkQ2lwaGVyQ29uc3RydWN0b3IoY2YsIG5hbWUsIG51bSwgZ2VuLCBrZXkpIHtcbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKG5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJJbnZhbGlkIGNyeXB0IGZpbHRlciBuYW1lLlwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBjcnlwdEZpbHRlciA9IGNmLmdldChuYW1lLm5hbWUpO1xuICAgIGxldCBjZm07XG5cbiAgICBpZiAoY3J5cHRGaWx0ZXIgIT09IG51bGwgJiYgY3J5cHRGaWx0ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY2ZtID0gY3J5cHRGaWx0ZXIuZ2V0KFwiQ0ZNXCIpO1xuICAgIH1cblxuICAgIGlmICghY2ZtIHx8IGNmbS5uYW1lID09PSBcIk5vbmVcIikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNpcGhlclRyYW5zZm9ybUZhY3RvcnlCdWlsZENpcGhlckNvbnN0cnVjdG9yTm9uZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBOdWxsQ2lwaGVyKCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChjZm0ubmFtZSA9PT0gXCJWMlwiKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gY2lwaGVyVHJhbnNmb3JtRmFjdG9yeUJ1aWxkQ2lwaGVyQ29uc3RydWN0b3JWMigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBUkNGb3VyQ2lwaGVyKGJ1aWxkT2JqZWN0S2V5KG51bSwgZ2VuLCBrZXksIGZhbHNlKSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChjZm0ubmFtZSA9PT0gXCJBRVNWMlwiKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gY2lwaGVyVHJhbnNmb3JtRmFjdG9yeUJ1aWxkQ2lwaGVyQ29uc3RydWN0b3JBRVNWMigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBRVMxMjhDaXBoZXIoYnVpbGRPYmplY3RLZXkobnVtLCBnZW4sIGtleSwgdHJ1ZSkpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoY2ZtLm5hbWUgPT09IFwiQUVTVjNcIikge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNpcGhlclRyYW5zZm9ybUZhY3RvcnlCdWlsZENpcGhlckNvbnN0cnVjdG9yQUVTVjMoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQUVTMjU2Q2lwaGVyKGtleSk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIlVua25vd24gY3J5cHRvIG1ldGhvZFwiKTtcbiAgfVxuXG4gIGNsYXNzIENpcGhlclRyYW5zZm9ybUZhY3Rvcnkge1xuICAgIGNvbnN0cnVjdG9yKGRpY3QsIGZpbGVJZCwgcGFzc3dvcmQpIHtcbiAgICAgIGNvbnN0IGZpbHRlciA9IGRpY3QuZ2V0KFwiRmlsdGVyXCIpO1xuXG4gICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGZpbHRlciwgXCJTdGFuZGFyZFwiKSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJ1bmtub3duIGVuY3J5cHRpb24gbWV0aG9kXCIpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmZpbHRlck5hbWUgPSBmaWx0ZXIubmFtZTtcbiAgICAgIHRoaXMuZGljdCA9IGRpY3Q7XG4gICAgICBjb25zdCBhbGdvcml0aG0gPSBkaWN0LmdldChcIlZcIik7XG5cbiAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihhbGdvcml0aG0pIHx8IGFsZ29yaXRobSAhPT0gMSAmJiBhbGdvcml0aG0gIT09IDIgJiYgYWxnb3JpdGhtICE9PSA0ICYmIGFsZ29yaXRobSAhPT0gNSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJ1bnN1cHBvcnRlZCBlbmNyeXB0aW9uIGFsZ29yaXRobVwiKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hbGdvcml0aG0gPSBhbGdvcml0aG07XG4gICAgICBsZXQga2V5TGVuZ3RoID0gZGljdC5nZXQoXCJMZW5ndGhcIik7XG5cbiAgICAgIGlmICgha2V5TGVuZ3RoKSB7XG4gICAgICAgIGlmIChhbGdvcml0aG0gPD0gMykge1xuICAgICAgICAgIGtleUxlbmd0aCA9IDQwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNmRGljdCA9IGRpY3QuZ2V0KFwiQ0ZcIik7XG4gICAgICAgICAgY29uc3Qgc3RyZWFtQ3J5cHRvTmFtZSA9IGRpY3QuZ2V0KFwiU3RtRlwiKTtcblxuICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShjZkRpY3QpICYmICgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHN0cmVhbUNyeXB0b05hbWUpKSB7XG4gICAgICAgICAgICBjZkRpY3Quc3VwcHJlc3NFbmNyeXB0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXJEaWN0ID0gY2ZEaWN0LmdldChzdHJlYW1DcnlwdG9OYW1lLm5hbWUpO1xuICAgICAgICAgICAga2V5TGVuZ3RoID0gaGFuZGxlckRpY3QgJiYgaGFuZGxlckRpY3QuZ2V0KFwiTGVuZ3RoXCIpIHx8IDEyODtcblxuICAgICAgICAgICAgaWYgKGtleUxlbmd0aCA8IDQwKSB7XG4gICAgICAgICAgICAgIGtleUxlbmd0aCA8PD0gMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGtleUxlbmd0aCkgfHwga2V5TGVuZ3RoIDwgNDAgfHwga2V5TGVuZ3RoICUgOCAhPT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJpbnZhbGlkIGtleSBsZW5ndGhcIik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG93bmVyUGFzc3dvcmQgPSAoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykoZGljdC5nZXQoXCJPXCIpKS5zdWJhcnJheSgwLCAzMik7XG4gICAgICBjb25zdCB1c2VyUGFzc3dvcmQgPSAoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykoZGljdC5nZXQoXCJVXCIpKS5zdWJhcnJheSgwLCAzMik7XG4gICAgICBjb25zdCBmbGFncyA9IGRpY3QuZ2V0KFwiUFwiKTtcbiAgICAgIGNvbnN0IHJldmlzaW9uID0gZGljdC5nZXQoXCJSXCIpO1xuICAgICAgY29uc3QgZW5jcnlwdE1ldGFkYXRhID0gKGFsZ29yaXRobSA9PT0gNCB8fCBhbGdvcml0aG0gPT09IDUpICYmIGRpY3QuZ2V0KFwiRW5jcnlwdE1ldGFkYXRhXCIpICE9PSBmYWxzZTtcbiAgICAgIHRoaXMuZW5jcnlwdE1ldGFkYXRhID0gZW5jcnlwdE1ldGFkYXRhO1xuICAgICAgY29uc3QgZmlsZUlkQnl0ZXMgPSAoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykoZmlsZUlkKTtcbiAgICAgIGxldCBwYXNzd29yZEJ5dGVzO1xuXG4gICAgICBpZiAocGFzc3dvcmQpIHtcbiAgICAgICAgaWYgKHJldmlzaW9uID09PSA2KSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHBhc3N3b3JkID0gKDAsIF91dGlsLnV0ZjhTdHJpbmdUb1N0cmluZykocGFzc3dvcmQpO1xuICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJDaXBoZXJUcmFuc2Zvcm1GYWN0b3J5OiBcIiArIFwiVW5hYmxlIHRvIGNvbnZlcnQgVVRGOCBlbmNvZGVkIHBhc3N3b3JkLlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBwYXNzd29yZEJ5dGVzID0gKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKHBhc3N3b3JkKTtcbiAgICAgIH1cblxuICAgICAgbGV0IGVuY3J5cHRpb25LZXk7XG5cbiAgICAgIGlmIChhbGdvcml0aG0gIT09IDUpIHtcbiAgICAgICAgZW5jcnlwdGlvbktleSA9IHByZXBhcmVLZXlEYXRhKGZpbGVJZEJ5dGVzLCBwYXNzd29yZEJ5dGVzLCBvd25lclBhc3N3b3JkLCB1c2VyUGFzc3dvcmQsIGZsYWdzLCByZXZpc2lvbiwga2V5TGVuZ3RoLCBlbmNyeXB0TWV0YWRhdGEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgb3duZXJWYWxpZGF0aW9uU2FsdCA9ICgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShkaWN0LmdldChcIk9cIikpLnN1YmFycmF5KDMyLCA0MCk7XG4gICAgICAgIGNvbnN0IG93bmVyS2V5U2FsdCA9ICgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShkaWN0LmdldChcIk9cIikpLnN1YmFycmF5KDQwLCA0OCk7XG4gICAgICAgIGNvbnN0IHVCeXRlcyA9ICgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShkaWN0LmdldChcIlVcIikpLnN1YmFycmF5KDAsIDQ4KTtcbiAgICAgICAgY29uc3QgdXNlclZhbGlkYXRpb25TYWx0ID0gKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKGRpY3QuZ2V0KFwiVVwiKSkuc3ViYXJyYXkoMzIsIDQwKTtcbiAgICAgICAgY29uc3QgdXNlcktleVNhbHQgPSAoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykoZGljdC5nZXQoXCJVXCIpKS5zdWJhcnJheSg0MCwgNDgpO1xuICAgICAgICBjb25zdCBvd25lckVuY3J5cHRpb24gPSAoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykoZGljdC5nZXQoXCJPRVwiKSk7XG4gICAgICAgIGNvbnN0IHVzZXJFbmNyeXB0aW9uID0gKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKGRpY3QuZ2V0KFwiVUVcIikpO1xuICAgICAgICBjb25zdCBwZXJtcyA9ICgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShkaWN0LmdldChcIlBlcm1zXCIpKTtcbiAgICAgICAgZW5jcnlwdGlvbktleSA9IGNyZWF0ZUVuY3J5cHRpb25LZXkyMChyZXZpc2lvbiwgcGFzc3dvcmRCeXRlcywgb3duZXJQYXNzd29yZCwgb3duZXJWYWxpZGF0aW9uU2FsdCwgb3duZXJLZXlTYWx0LCB1Qnl0ZXMsIHVzZXJQYXNzd29yZCwgdXNlclZhbGlkYXRpb25TYWx0LCB1c2VyS2V5U2FsdCwgb3duZXJFbmNyeXB0aW9uLCB1c2VyRW5jcnlwdGlvbiwgcGVybXMpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWVuY3J5cHRpb25LZXkgJiYgIXBhc3N3b3JkKSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5QYXNzd29yZEV4Y2VwdGlvbihcIk5vIHBhc3N3b3JkIGdpdmVuXCIsIF91dGlsLlBhc3N3b3JkUmVzcG9uc2VzLk5FRURfUEFTU1dPUkQpO1xuICAgICAgfSBlbHNlIGlmICghZW5jcnlwdGlvbktleSAmJiBwYXNzd29yZCkge1xuICAgICAgICBjb25zdCBkZWNvZGVkUGFzc3dvcmQgPSBkZWNvZGVVc2VyUGFzc3dvcmQocGFzc3dvcmRCeXRlcywgb3duZXJQYXNzd29yZCwgcmV2aXNpb24sIGtleUxlbmd0aCk7XG4gICAgICAgIGVuY3J5cHRpb25LZXkgPSBwcmVwYXJlS2V5RGF0YShmaWxlSWRCeXRlcywgZGVjb2RlZFBhc3N3b3JkLCBvd25lclBhc3N3b3JkLCB1c2VyUGFzc3dvcmQsIGZsYWdzLCByZXZpc2lvbiwga2V5TGVuZ3RoLCBlbmNyeXB0TWV0YWRhdGEpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWVuY3J5cHRpb25LZXkpIHtcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLlBhc3N3b3JkRXhjZXB0aW9uKFwiSW5jb3JyZWN0IFBhc3N3b3JkXCIsIF91dGlsLlBhc3N3b3JkUmVzcG9uc2VzLklOQ09SUkVDVF9QQVNTV09SRCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZW5jcnlwdGlvbktleSA9IGVuY3J5cHRpb25LZXk7XG5cbiAgICAgIGlmIChhbGdvcml0aG0gPj0gNCkge1xuICAgICAgICBjb25zdCBjZiA9IGRpY3QuZ2V0KFwiQ0ZcIik7XG5cbiAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGNmKSkge1xuICAgICAgICAgIGNmLnN1cHByZXNzRW5jcnlwdGlvbiA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNmID0gY2Y7XG4gICAgICAgIHRoaXMuc3RtZiA9IGRpY3QuZ2V0KFwiU3RtRlwiKSB8fCBpZGVudGl0eU5hbWU7XG4gICAgICAgIHRoaXMuc3RyZiA9IGRpY3QuZ2V0KFwiU3RyRlwiKSB8fCBpZGVudGl0eU5hbWU7XG4gICAgICAgIHRoaXMuZWZmID0gZGljdC5nZXQoXCJFRkZcIikgfHwgdGhpcy5zdG1mO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNyZWF0ZUNpcGhlclRyYW5zZm9ybShudW0sIGdlbikge1xuICAgICAgaWYgKHRoaXMuYWxnb3JpdGhtID09PSA0IHx8IHRoaXMuYWxnb3JpdGhtID09PSA1KSB7XG4gICAgICAgIHJldHVybiBuZXcgQ2lwaGVyVHJhbnNmb3JtKGJ1aWxkQ2lwaGVyQ29uc3RydWN0b3IodGhpcy5jZiwgdGhpcy5zdG1mLCBudW0sIGdlbiwgdGhpcy5lbmNyeXB0aW9uS2V5KSwgYnVpbGRDaXBoZXJDb25zdHJ1Y3Rvcih0aGlzLmNmLCB0aGlzLnN0cmYsIG51bSwgZ2VuLCB0aGlzLmVuY3J5cHRpb25LZXkpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qga2V5ID0gYnVpbGRPYmplY3RLZXkobnVtLCBnZW4sIHRoaXMuZW5jcnlwdGlvbktleSwgZmFsc2UpO1xuXG4gICAgICBjb25zdCBjaXBoZXJDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIGJ1aWxkQ2lwaGVyQ2lwaGVyQ29uc3RydWN0b3IoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQVJDRm91ckNpcGhlcihrZXkpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIG5ldyBDaXBoZXJUcmFuc2Zvcm0oY2lwaGVyQ29uc3RydWN0b3IsIGNpcGhlckNvbnN0cnVjdG9yKTtcbiAgICB9XG5cbiAgfVxuXG4gIHJldHVybiBDaXBoZXJUcmFuc2Zvcm1GYWN0b3J5O1xufSgpO1xuXG5leHBvcnRzLkNpcGhlclRyYW5zZm9ybUZhY3RvcnkgPSBDaXBoZXJUcmFuc2Zvcm1GYWN0b3J5O1xuXG4vKioqLyB9KSxcbi8qIDczICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLkRlY3J5cHRTdHJlYW0gPSB2b2lkIDA7XG5cbnZhciBfZGVjb2RlX3N0cmVhbSA9IF9fd19wZGZqc19yZXF1aXJlX18oMjkpO1xuXG5jb25zdCBjaHVua1NpemUgPSA1MTI7XG5cbmNsYXNzIERlY3J5cHRTdHJlYW0gZXh0ZW5kcyBfZGVjb2RlX3N0cmVhbS5EZWNvZGVTdHJlYW0ge1xuICBjb25zdHJ1Y3RvcihzdHIsIG1heWJlTGVuZ3RoLCBkZWNyeXB0KSB7XG4gICAgc3VwZXIobWF5YmVMZW5ndGgpO1xuICAgIHRoaXMuc3RyID0gc3RyO1xuICAgIHRoaXMuZGljdCA9IHN0ci5kaWN0O1xuICAgIHRoaXMuZGVjcnlwdCA9IGRlY3J5cHQ7XG4gICAgdGhpcy5uZXh0Q2h1bmsgPSBudWxsO1xuICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHJlYWRCbG9jaygpIHtcbiAgICBsZXQgY2h1bms7XG5cbiAgICBpZiAodGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgY2h1bmsgPSB0aGlzLm5leHRDaHVuaztcbiAgICB9IGVsc2Uge1xuICAgICAgY2h1bmsgPSB0aGlzLnN0ci5nZXRCeXRlcyhjaHVua1NpemUpO1xuICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFjaHVuayB8fCBjaHVuay5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuZW9mID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm5leHRDaHVuayA9IHRoaXMuc3RyLmdldEJ5dGVzKGNodW5rU2l6ZSk7XG4gICAgY29uc3QgaGFzTW9yZURhdGEgPSB0aGlzLm5leHRDaHVuayAmJiB0aGlzLm5leHRDaHVuay5sZW5ndGggPiAwO1xuICAgIGNvbnN0IGRlY3J5cHQgPSB0aGlzLmRlY3J5cHQ7XG4gICAgY2h1bmsgPSBkZWNyeXB0KGNodW5rLCAhaGFzTW9yZURhdGEpO1xuICAgIGxldCBidWZmZXJMZW5ndGggPSB0aGlzLmJ1ZmZlckxlbmd0aDtcbiAgICBjb25zdCBuID0gY2h1bmsubGVuZ3RoLFxuICAgICAgICAgIGJ1ZmZlciA9IHRoaXMuZW5zdXJlQnVmZmVyKGJ1ZmZlckxlbmd0aCArIG4pO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgIGJ1ZmZlcltidWZmZXJMZW5ndGgrK10gPSBjaHVua1tpXTtcbiAgICB9XG5cbiAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IGJ1ZmZlckxlbmd0aDtcbiAgfVxuXG59XG5cbmV4cG9ydHMuRGVjcnlwdFN0cmVhbSA9IERlY3J5cHRTdHJlYW07XG5cbi8qKiovIH0pLFxuLyogNzQgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuWEZBRmFjdG9yeSA9IHZvaWQgMDtcblxudmFyIF94ZmFfb2JqZWN0ID0gX193X3BkZmpzX3JlcXVpcmVfXyg3NSk7XG5cbnZhciBfYmluZCA9IF9fd19wZGZqc19yZXF1aXJlX18oNzkpO1xuXG52YXIgX2RhdGEgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDg1KTtcblxudmFyIF9mb250cyA9IF9fd19wZGZqc19yZXF1aXJlX18oODMpO1xuXG52YXIgX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXyg3Nik7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfcGFyc2VyID0gX193X3BkZmpzX3JlcXVpcmVfXyg4Nik7XG5cbnZhciBfeGh0bWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDk2KTtcblxuY2xhc3MgWEZBRmFjdG9yeSB7XG4gIGNvbnN0cnVjdG9yKGRhdGEpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5yb290ID0gbmV3IF9wYXJzZXIuWEZBUGFyc2VyKCkucGFyc2UoWEZBRmFjdG9yeS5fY3JlYXRlRG9jdW1lbnQoZGF0YSkpO1xuICAgICAgY29uc3QgYmluZGVyID0gbmV3IF9iaW5kLkJpbmRlcih0aGlzLnJvb3QpO1xuICAgICAgdGhpcy5mb3JtID0gYmluZGVyLmJpbmQoKTtcbiAgICAgIHRoaXMuZGF0YUhhbmRsZXIgPSBuZXcgX2RhdGEuRGF0YUhhbmRsZXIodGhpcy5yb290LCBiaW5kZXIuZ2V0RGF0YSgpKTtcbiAgICAgIHRoaXMuZm9ybVtfeGZhX29iamVjdC4kZ2xvYmFsRGF0YV0udGVtcGxhdGUgPSB0aGlzLmZvcm07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKGBYRkEgLSBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgcGFyc2luZyBhbmQgYmluZGluZzogJHtlfWApO1xuICAgIH1cbiAgfVxuXG4gIGlzVmFsaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMucm9vdCAmJiB0aGlzLmZvcm07XG4gIH1cblxuICBfY3JlYXRlUGFnZXNIZWxwZXIoKSB7XG4gICAgY29uc3QgaXRlcmF0b3IgPSB0aGlzLmZvcm1bX3hmYV9vYmplY3QuJHRvUGFnZXNdKCk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgbmV4dEl0ZXJhdGlvbiA9ICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGl0ZXJhdG9yLm5leHQoKTtcblxuICAgICAgICAgIGlmICh2YWx1ZS5kb25lKSB7XG4gICAgICAgICAgICByZXNvbHZlKHZhbHVlLnZhbHVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2V0VGltZW91dChuZXh0SXRlcmF0aW9uLCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHNldFRpbWVvdXQobmV4dEl0ZXJhdGlvbiwgMCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBfY3JlYXRlUGFnZXMoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMucGFnZXMgPSBhd2FpdCB0aGlzLl9jcmVhdGVQYWdlc0hlbHBlcigpO1xuICAgICAgdGhpcy5kaW1zID0gdGhpcy5wYWdlcy5jaGlsZHJlbi5tYXAoYyA9PiB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICBoZWlnaHRcbiAgICAgICAgfSA9IGMuYXR0cmlidXRlcy5zdHlsZTtcbiAgICAgICAgcmV0dXJuIFswLCAwLCBwYXJzZUludCh3aWR0aCksIHBhcnNlSW50KGhlaWdodCldO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKGBYRkEgLSBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgbGF5b3V0OiAke2V9YCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Qm91bmRpbmdCb3gocGFnZUluZGV4KSB7XG4gICAgcmV0dXJuIHRoaXMuZGltc1twYWdlSW5kZXhdO1xuICB9XG5cbiAgYXN5bmMgZ2V0TnVtUGFnZXMoKSB7XG4gICAgaWYgKCF0aGlzLnBhZ2VzKSB7XG4gICAgICBhd2FpdCB0aGlzLl9jcmVhdGVQYWdlcygpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmRpbXMubGVuZ3RoO1xuICB9XG5cbiAgc2V0SW1hZ2VzKGltYWdlcykge1xuICAgIHRoaXMuZm9ybVtfeGZhX29iamVjdC4kZ2xvYmFsRGF0YV0uaW1hZ2VzID0gaW1hZ2VzO1xuICB9XG5cbiAgc2V0Rm9udHMoZm9udHMpIHtcbiAgICB0aGlzLmZvcm1bX3hmYV9vYmplY3QuJGdsb2JhbERhdGFdLmZvbnRGaW5kZXIgPSBuZXcgX2ZvbnRzLkZvbnRGaW5kZXIoZm9udHMpO1xuICAgIGNvbnN0IG1pc3NpbmdGb250cyA9IFtdO1xuXG4gICAgZm9yIChsZXQgdHlwZWZhY2Ugb2YgdGhpcy5mb3JtW194ZmFfb2JqZWN0LiRnbG9iYWxEYXRhXS51c2VkVHlwZWZhY2VzKSB7XG4gICAgICB0eXBlZmFjZSA9ICgwLCBfdXRpbHMuc3RyaXBRdW90ZXMpKHR5cGVmYWNlKTtcblxuICAgICAgY29uc3QgZm9udCA9IHRoaXMuZm9ybVtfeGZhX29iamVjdC4kZ2xvYmFsRGF0YV0uZm9udEZpbmRlci5maW5kKHR5cGVmYWNlKTtcblxuICAgICAgaWYgKCFmb250KSB7XG4gICAgICAgIG1pc3NpbmdGb250cy5wdXNoKHR5cGVmYWNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWlzc2luZ0ZvbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBtaXNzaW5nRm9udHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBhcHBlbmRGb250cyhmb250cywgcmVhbGx5TWlzc2luZ0ZvbnRzKSB7XG4gICAgdGhpcy5mb3JtW194ZmFfb2JqZWN0LiRnbG9iYWxEYXRhXS5mb250RmluZGVyLmFkZChmb250cywgcmVhbGx5TWlzc2luZ0ZvbnRzKTtcbiAgfVxuXG4gIGFzeW5jIGdldFBhZ2VzKCkge1xuICAgIGlmICghdGhpcy5wYWdlcykge1xuICAgICAgYXdhaXQgdGhpcy5fY3JlYXRlUGFnZXMoKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYWdlcyA9IHRoaXMucGFnZXM7XG4gICAgdGhpcy5wYWdlcyA9IG51bGw7XG4gICAgcmV0dXJuIHBhZ2VzO1xuICB9XG5cbiAgc2VyaWFsaXplRGF0YShzdG9yYWdlKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YUhhbmRsZXIuc2VyaWFsaXplKHN0b3JhZ2UpO1xuICB9XG5cbiAgc3RhdGljIF9jcmVhdGVEb2N1bWVudChkYXRhKSB7XG4gICAgaWYgKCFkYXRhW1wiL3hkcDp4ZHBcIl0pIHtcbiAgICAgIHJldHVybiBkYXRhW1wieGRwOnhkcFwiXTtcbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhkYXRhKS5qb2luKFwiXCIpO1xuICB9XG5cbiAgc3RhdGljIGdldFJpY2hUZXh0QXNIdG1sKHJjKSB7XG4gICAgaWYgKCFyYyB8fCB0eXBlb2YgcmMgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBsZXQgcm9vdCA9IG5ldyBfcGFyc2VyLlhGQVBhcnNlcihfeGh0bWwuWGh0bWxOYW1lc3BhY2UsIHRydWUpLnBhcnNlKHJjKTtcblxuICAgICAgaWYgKCFbXCJib2R5XCIsIFwieGh0bWxcIl0uaW5jbHVkZXMocm9vdFtfeGZhX29iamVjdC4kbm9kZU5hbWVdKSkge1xuICAgICAgICBjb25zdCBuZXdSb290ID0gX3hodG1sLlhodG1sTmFtZXNwYWNlLmJvZHkoe30pO1xuXG4gICAgICAgIG5ld1Jvb3RbX3hmYV9vYmplY3QuJGFwcGVuZENoaWxkXShyb290KTtcblxuICAgICAgICByb290ID0gbmV3Um9vdDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdWx0ID0gcm9vdFtfeGZhX29iamVjdC4kdG9IVE1MXSgpO1xuXG4gICAgICBpZiAoIXJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7XG4gICAgICAgIGh0bWxcbiAgICAgIH0gPSByZXN1bHQ7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGF0dHJpYnV0ZXNcbiAgICAgIH0gPSBodG1sO1xuXG4gICAgICBpZiAoYXR0cmlidXRlcykge1xuICAgICAgICBpZiAoYXR0cmlidXRlcy5jbGFzcykge1xuICAgICAgICAgIGF0dHJpYnV0ZXMuY2xhc3MgPSBhdHRyaWJ1dGVzLmNsYXNzLmZpbHRlcihhdHRyID0+ICFhdHRyLnN0YXJ0c1dpdGgoXCJ4ZmFcIikpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXR0cmlidXRlcy5kaXIgPSBcImF1dG9cIjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaHRtbCxcbiAgICAgICAgc3RyOiByb290W194ZmFfb2JqZWN0LiR0ZXh0XSgpXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShgWEZBIC0gYW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHBhcnNpbmcgb2YgcmljaCB0ZXh0OiAke2V9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxufVxuXG5leHBvcnRzLlhGQUZhY3RvcnkgPSBYRkFGYWN0b3J5O1xuXG4vKioqLyB9KSxcbi8qIDc1ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLlhtbE9iamVjdCA9IGV4cG9ydHMuWEZBT2JqZWN0QXJyYXkgPSBleHBvcnRzLlhGQU9iamVjdCA9IGV4cG9ydHMuWEZBQXR0cmlidXRlID0gZXhwb3J0cy5TdHJpbmdPYmplY3QgPSBleHBvcnRzLk9wdGlvbk9iamVjdCA9IGV4cG9ydHMuT3B0aW9uMTAgPSBleHBvcnRzLk9wdGlvbjAxID0gZXhwb3J0cy5JbnRlZ2VyT2JqZWN0ID0gZXhwb3J0cy5Db250ZW50T2JqZWN0ID0gZXhwb3J0cy4kdWlkID0gZXhwb3J0cy4kdG9TdHlsZSA9IGV4cG9ydHMuJHRvU3RyaW5nID0gZXhwb3J0cy4kdG9QYWdlcyA9IGV4cG9ydHMuJHRvSFRNTCA9IGV4cG9ydHMuJHRleHQgPSBleHBvcnRzLiR0YWJJbmRleCA9IGV4cG9ydHMuJHNldFZhbHVlID0gZXhwb3J0cy4kc2V0U2V0QXR0cmlidXRlcyA9IGV4cG9ydHMuJHNldElkID0gZXhwb3J0cy4kc2VhcmNoTm9kZSA9IGV4cG9ydHMuJHJvb3QgPSBleHBvcnRzLiRyZXNvbHZlUHJvdG90eXBlcyA9IGV4cG9ydHMuJHJlbW92ZUNoaWxkID0gZXhwb3J0cy4kcHVzaFBhcmEgPSBleHBvcnRzLiRwdXNoR2x5cGhzID0gZXhwb3J0cy4kcG9wUGFyYSA9IGV4cG9ydHMuJG9uVGV4dCA9IGV4cG9ydHMuJG9uQ2hpbGRDaGVjayA9IGV4cG9ydHMuJG9uQ2hpbGQgPSBleHBvcnRzLiRuc0F0dHJpYnV0ZXMgPSBleHBvcnRzLiRub2RlTmFtZSA9IGV4cG9ydHMuJG5hbWVzcGFjZUlkID0gZXhwb3J0cy4kaXNVc2FibGUgPSBleHBvcnRzLiRpc1RyYW5zcGFyZW50ID0gZXhwb3J0cy4kaXNUaGVyZU1vcmVXaWR0aCA9IGV4cG9ydHMuJGlzU3BsaXR0YWJsZSA9IGV4cG9ydHMuJGlzTnNBZ25vc3RpYyA9IGV4cG9ydHMuJGlzRGVzY2VuZGVudCA9IGV4cG9ydHMuJGlzRGF0YVZhbHVlID0gZXhwb3J0cy4kaXNDREFUQVhtbCA9IGV4cG9ydHMuJGlzQmluZGFibGUgPSBleHBvcnRzLiRpbnNlcnRBdCA9IGV4cG9ydHMuJGluZGV4T2YgPSBleHBvcnRzLiRpZHMgPSBleHBvcnRzLiRoYXNTZXR0YWJsZVZhbHVlID0gZXhwb3J0cy4kZ2xvYmFsRGF0YSA9IGV4cG9ydHMuJGdldFRlbXBsYXRlUm9vdCA9IGV4cG9ydHMuJGdldFN1YmZvcm1QYXJlbnQgPSBleHBvcnRzLiRnZXRSZWFsQ2hpbGRyZW5CeU5hbWVJdCA9IGV4cG9ydHMuJGdldFBhcmVudCA9IGV4cG9ydHMuJGdldE5leHRQYWdlID0gZXhwb3J0cy4kZ2V0RXh0cmEgPSBleHBvcnRzLiRnZXREYXRhVmFsdWUgPSBleHBvcnRzLiRnZXRDb250YWluZWRDaGlsZHJlbiA9IGV4cG9ydHMuJGdldENoaWxkcmVuQnlOYW1lSXQgPSBleHBvcnRzLiRnZXRDaGlsZHJlbkJ5TmFtZSA9IGV4cG9ydHMuJGdldENoaWxkcmVuQnlDbGFzcyA9IGV4cG9ydHMuJGdldENoaWxkcmVuID0gZXhwb3J0cy4kZ2V0QXZhaWxhYmxlU3BhY2UgPSBleHBvcnRzLiRnZXRBdHRyaWJ1dGVzID0gZXhwb3J0cy4kZ2V0QXR0cmlidXRlSXQgPSBleHBvcnRzLiRmbHVzaEhUTUwgPSBleHBvcnRzLiRmaW5hbGl6ZSA9IGV4cG9ydHMuJGV4dHJhID0gZXhwb3J0cy4kZHVtcCA9IGV4cG9ydHMuJGRhdGEgPSBleHBvcnRzLiRjb250ZW50ID0gZXhwb3J0cy4kY29uc3VtZWQgPSBleHBvcnRzLiRjbG9uZSA9IGV4cG9ydHMuJGNsZWFudXAgPSBleHBvcnRzLiRjbGVhblBhZ2UgPSBleHBvcnRzLiRjbGVhbiA9IGV4cG9ydHMuJGNoaWxkcmVuVG9IVE1MID0gZXhwb3J0cy4kYXBwZW5kQ2hpbGQgPSBleHBvcnRzLiRhZGRIVE1MID0gZXhwb3J0cy4kYWNjZXB0V2hpdGVzcGFjZSA9IHZvaWQgMDtcblxudmFyIF91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oNzYpO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX2NvcmVfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDkpO1xuXG52YXIgX25hbWVzcGFjZXMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDc3KTtcblxudmFyIF9zb20gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDc4KTtcblxuY29uc3QgJGFjY2VwdFdoaXRlc3BhY2UgPSBTeW1ib2woKTtcbmV4cG9ydHMuJGFjY2VwdFdoaXRlc3BhY2UgPSAkYWNjZXB0V2hpdGVzcGFjZTtcbmNvbnN0ICRhZGRIVE1MID0gU3ltYm9sKCk7XG5leHBvcnRzLiRhZGRIVE1MID0gJGFkZEhUTUw7XG5jb25zdCAkYXBwZW5kQ2hpbGQgPSBTeW1ib2woKTtcbmV4cG9ydHMuJGFwcGVuZENoaWxkID0gJGFwcGVuZENoaWxkO1xuY29uc3QgJGNoaWxkcmVuVG9IVE1MID0gU3ltYm9sKCk7XG5leHBvcnRzLiRjaGlsZHJlblRvSFRNTCA9ICRjaGlsZHJlblRvSFRNTDtcbmNvbnN0ICRjbGVhbiA9IFN5bWJvbCgpO1xuZXhwb3J0cy4kY2xlYW4gPSAkY2xlYW47XG5jb25zdCAkY2xlYW5QYWdlID0gU3ltYm9sKCk7XG5leHBvcnRzLiRjbGVhblBhZ2UgPSAkY2xlYW5QYWdlO1xuY29uc3QgJGNsZWFudXAgPSBTeW1ib2woKTtcbmV4cG9ydHMuJGNsZWFudXAgPSAkY2xlYW51cDtcbmNvbnN0ICRjbG9uZSA9IFN5bWJvbCgpO1xuZXhwb3J0cy4kY2xvbmUgPSAkY2xvbmU7XG5jb25zdCAkY29uc3VtZWQgPSBTeW1ib2woKTtcbmV4cG9ydHMuJGNvbnN1bWVkID0gJGNvbnN1bWVkO1xuY29uc3QgJGNvbnRlbnQgPSBTeW1ib2woXCJjb250ZW50XCIpO1xuZXhwb3J0cy4kY29udGVudCA9ICRjb250ZW50O1xuY29uc3QgJGRhdGEgPSBTeW1ib2woXCJkYXRhXCIpO1xuZXhwb3J0cy4kZGF0YSA9ICRkYXRhO1xuY29uc3QgJGR1bXAgPSBTeW1ib2woKTtcbmV4cG9ydHMuJGR1bXAgPSAkZHVtcDtcbmNvbnN0ICRleHRyYSA9IFN5bWJvbChcImV4dHJhXCIpO1xuZXhwb3J0cy4kZXh0cmEgPSAkZXh0cmE7XG5jb25zdCAkZmluYWxpemUgPSBTeW1ib2woKTtcbmV4cG9ydHMuJGZpbmFsaXplID0gJGZpbmFsaXplO1xuY29uc3QgJGZsdXNoSFRNTCA9IFN5bWJvbCgpO1xuZXhwb3J0cy4kZmx1c2hIVE1MID0gJGZsdXNoSFRNTDtcbmNvbnN0ICRnZXRBdHRyaWJ1dGVJdCA9IFN5bWJvbCgpO1xuZXhwb3J0cy4kZ2V0QXR0cmlidXRlSXQgPSAkZ2V0QXR0cmlidXRlSXQ7XG5jb25zdCAkZ2V0QXR0cmlidXRlcyA9IFN5bWJvbCgpO1xuZXhwb3J0cy4kZ2V0QXR0cmlidXRlcyA9ICRnZXRBdHRyaWJ1dGVzO1xuY29uc3QgJGdldEF2YWlsYWJsZVNwYWNlID0gU3ltYm9sKCk7XG5leHBvcnRzLiRnZXRBdmFpbGFibGVTcGFjZSA9ICRnZXRBdmFpbGFibGVTcGFjZTtcbmNvbnN0ICRnZXRDaGlsZHJlbkJ5Q2xhc3MgPSBTeW1ib2woKTtcbmV4cG9ydHMuJGdldENoaWxkcmVuQnlDbGFzcyA9ICRnZXRDaGlsZHJlbkJ5Q2xhc3M7XG5jb25zdCAkZ2V0Q2hpbGRyZW5CeU5hbWUgPSBTeW1ib2woKTtcbmV4cG9ydHMuJGdldENoaWxkcmVuQnlOYW1lID0gJGdldENoaWxkcmVuQnlOYW1lO1xuY29uc3QgJGdldENoaWxkcmVuQnlOYW1lSXQgPSBTeW1ib2woKTtcbmV4cG9ydHMuJGdldENoaWxkcmVuQnlOYW1lSXQgPSAkZ2V0Q2hpbGRyZW5CeU5hbWVJdDtcbmNvbnN0ICRnZXREYXRhVmFsdWUgPSBTeW1ib2woKTtcbmV4cG9ydHMuJGdldERhdGFWYWx1ZSA9ICRnZXREYXRhVmFsdWU7XG5jb25zdCAkZ2V0RXh0cmEgPSBTeW1ib2woKTtcbmV4cG9ydHMuJGdldEV4dHJhID0gJGdldEV4dHJhO1xuY29uc3QgJGdldFJlYWxDaGlsZHJlbkJ5TmFtZUl0ID0gU3ltYm9sKCk7XG5leHBvcnRzLiRnZXRSZWFsQ2hpbGRyZW5CeU5hbWVJdCA9ICRnZXRSZWFsQ2hpbGRyZW5CeU5hbWVJdDtcbmNvbnN0ICRnZXRDaGlsZHJlbiA9IFN5bWJvbCgpO1xuZXhwb3J0cy4kZ2V0Q2hpbGRyZW4gPSAkZ2V0Q2hpbGRyZW47XG5jb25zdCAkZ2V0Q29udGFpbmVkQ2hpbGRyZW4gPSBTeW1ib2woKTtcbmV4cG9ydHMuJGdldENvbnRhaW5lZENoaWxkcmVuID0gJGdldENvbnRhaW5lZENoaWxkcmVuO1xuY29uc3QgJGdldE5leHRQYWdlID0gU3ltYm9sKCk7XG5leHBvcnRzLiRnZXROZXh0UGFnZSA9ICRnZXROZXh0UGFnZTtcbmNvbnN0ICRnZXRTdWJmb3JtUGFyZW50ID0gU3ltYm9sKCk7XG5leHBvcnRzLiRnZXRTdWJmb3JtUGFyZW50ID0gJGdldFN1YmZvcm1QYXJlbnQ7XG5jb25zdCAkZ2V0UGFyZW50ID0gU3ltYm9sKCk7XG5leHBvcnRzLiRnZXRQYXJlbnQgPSAkZ2V0UGFyZW50O1xuY29uc3QgJGdldFRlbXBsYXRlUm9vdCA9IFN5bWJvbCgpO1xuZXhwb3J0cy4kZ2V0VGVtcGxhdGVSb290ID0gJGdldFRlbXBsYXRlUm9vdDtcbmNvbnN0ICRnbG9iYWxEYXRhID0gU3ltYm9sKCk7XG5leHBvcnRzLiRnbG9iYWxEYXRhID0gJGdsb2JhbERhdGE7XG5jb25zdCAkaGFzU2V0dGFibGVWYWx1ZSA9IFN5bWJvbCgpO1xuZXhwb3J0cy4kaGFzU2V0dGFibGVWYWx1ZSA9ICRoYXNTZXR0YWJsZVZhbHVlO1xuY29uc3QgJGlkcyA9IFN5bWJvbCgpO1xuZXhwb3J0cy4kaWRzID0gJGlkcztcbmNvbnN0ICRpbmRleE9mID0gU3ltYm9sKCk7XG5leHBvcnRzLiRpbmRleE9mID0gJGluZGV4T2Y7XG5jb25zdCAkaW5zZXJ0QXQgPSBTeW1ib2woKTtcbmV4cG9ydHMuJGluc2VydEF0ID0gJGluc2VydEF0O1xuY29uc3QgJGlzQ0RBVEFYbWwgPSBTeW1ib2woKTtcbmV4cG9ydHMuJGlzQ0RBVEFYbWwgPSAkaXNDREFUQVhtbDtcbmNvbnN0ICRpc0JpbmRhYmxlID0gU3ltYm9sKCk7XG5leHBvcnRzLiRpc0JpbmRhYmxlID0gJGlzQmluZGFibGU7XG5jb25zdCAkaXNEYXRhVmFsdWUgPSBTeW1ib2woKTtcbmV4cG9ydHMuJGlzRGF0YVZhbHVlID0gJGlzRGF0YVZhbHVlO1xuY29uc3QgJGlzRGVzY2VuZGVudCA9IFN5bWJvbCgpO1xuZXhwb3J0cy4kaXNEZXNjZW5kZW50ID0gJGlzRGVzY2VuZGVudDtcbmNvbnN0ICRpc05zQWdub3N0aWMgPSBTeW1ib2woKTtcbmV4cG9ydHMuJGlzTnNBZ25vc3RpYyA9ICRpc05zQWdub3N0aWM7XG5jb25zdCAkaXNTcGxpdHRhYmxlID0gU3ltYm9sKCk7XG5leHBvcnRzLiRpc1NwbGl0dGFibGUgPSAkaXNTcGxpdHRhYmxlO1xuY29uc3QgJGlzVGhlcmVNb3JlV2lkdGggPSBTeW1ib2woKTtcbmV4cG9ydHMuJGlzVGhlcmVNb3JlV2lkdGggPSAkaXNUaGVyZU1vcmVXaWR0aDtcbmNvbnN0ICRpc1RyYW5zcGFyZW50ID0gU3ltYm9sKCk7XG5leHBvcnRzLiRpc1RyYW5zcGFyZW50ID0gJGlzVHJhbnNwYXJlbnQ7XG5jb25zdCAkaXNVc2FibGUgPSBTeW1ib2woKTtcbmV4cG9ydHMuJGlzVXNhYmxlID0gJGlzVXNhYmxlO1xuY29uc3QgJGxhc3RBdHRyaWJ1dGUgPSBTeW1ib2woKTtcbmNvbnN0ICRuYW1lc3BhY2VJZCA9IFN5bWJvbChcIm5hbWVzcGFjZUlkXCIpO1xuZXhwb3J0cy4kbmFtZXNwYWNlSWQgPSAkbmFtZXNwYWNlSWQ7XG5jb25zdCAkbm9kZU5hbWUgPSBTeW1ib2woXCJub2RlTmFtZVwiKTtcbmV4cG9ydHMuJG5vZGVOYW1lID0gJG5vZGVOYW1lO1xuY29uc3QgJG5zQXR0cmlidXRlcyA9IFN5bWJvbCgpO1xuZXhwb3J0cy4kbnNBdHRyaWJ1dGVzID0gJG5zQXR0cmlidXRlcztcbmNvbnN0ICRvbkNoaWxkID0gU3ltYm9sKCk7XG5leHBvcnRzLiRvbkNoaWxkID0gJG9uQ2hpbGQ7XG5jb25zdCAkb25DaGlsZENoZWNrID0gU3ltYm9sKCk7XG5leHBvcnRzLiRvbkNoaWxkQ2hlY2sgPSAkb25DaGlsZENoZWNrO1xuY29uc3QgJG9uVGV4dCA9IFN5bWJvbCgpO1xuZXhwb3J0cy4kb25UZXh0ID0gJG9uVGV4dDtcbmNvbnN0ICRwdXNoR2x5cGhzID0gU3ltYm9sKCk7XG5leHBvcnRzLiRwdXNoR2x5cGhzID0gJHB1c2hHbHlwaHM7XG5jb25zdCAkcG9wUGFyYSA9IFN5bWJvbCgpO1xuZXhwb3J0cy4kcG9wUGFyYSA9ICRwb3BQYXJhO1xuY29uc3QgJHB1c2hQYXJhID0gU3ltYm9sKCk7XG5leHBvcnRzLiRwdXNoUGFyYSA9ICRwdXNoUGFyYTtcbmNvbnN0ICRyZW1vdmVDaGlsZCA9IFN5bWJvbCgpO1xuZXhwb3J0cy4kcmVtb3ZlQ2hpbGQgPSAkcmVtb3ZlQ2hpbGQ7XG5jb25zdCAkcm9vdCA9IFN5bWJvbChcInJvb3RcIik7XG5leHBvcnRzLiRyb290ID0gJHJvb3Q7XG5jb25zdCAkcmVzb2x2ZVByb3RvdHlwZXMgPSBTeW1ib2woKTtcbmV4cG9ydHMuJHJlc29sdmVQcm90b3R5cGVzID0gJHJlc29sdmVQcm90b3R5cGVzO1xuY29uc3QgJHNlYXJjaE5vZGUgPSBTeW1ib2woKTtcbmV4cG9ydHMuJHNlYXJjaE5vZGUgPSAkc2VhcmNoTm9kZTtcbmNvbnN0ICRzZXRJZCA9IFN5bWJvbCgpO1xuZXhwb3J0cy4kc2V0SWQgPSAkc2V0SWQ7XG5jb25zdCAkc2V0U2V0QXR0cmlidXRlcyA9IFN5bWJvbCgpO1xuZXhwb3J0cy4kc2V0U2V0QXR0cmlidXRlcyA9ICRzZXRTZXRBdHRyaWJ1dGVzO1xuY29uc3QgJHNldFZhbHVlID0gU3ltYm9sKCk7XG5leHBvcnRzLiRzZXRWYWx1ZSA9ICRzZXRWYWx1ZTtcbmNvbnN0ICR0YWJJbmRleCA9IFN5bWJvbCgpO1xuZXhwb3J0cy4kdGFiSW5kZXggPSAkdGFiSW5kZXg7XG5jb25zdCAkdGV4dCA9IFN5bWJvbCgpO1xuZXhwb3J0cy4kdGV4dCA9ICR0ZXh0O1xuY29uc3QgJHRvUGFnZXMgPSBTeW1ib2woKTtcbmV4cG9ydHMuJHRvUGFnZXMgPSAkdG9QYWdlcztcbmNvbnN0ICR0b0hUTUwgPSBTeW1ib2woKTtcbmV4cG9ydHMuJHRvSFRNTCA9ICR0b0hUTUw7XG5jb25zdCAkdG9TdHJpbmcgPSBTeW1ib2woKTtcbmV4cG9ydHMuJHRvU3RyaW5nID0gJHRvU3RyaW5nO1xuY29uc3QgJHRvU3R5bGUgPSBTeW1ib2woKTtcbmV4cG9ydHMuJHRvU3R5bGUgPSAkdG9TdHlsZTtcbmNvbnN0ICR1aWQgPSBTeW1ib2woXCJ1aWRcIik7XG5leHBvcnRzLiR1aWQgPSAkdWlkO1xuXG5jb25zdCBfYXBwbHlQcm90b3R5cGUgPSBTeW1ib2woKTtcblxuY29uc3QgX2F0dHJpYnV0ZXMgPSBTeW1ib2woKTtcblxuY29uc3QgX2F0dHJpYnV0ZU5hbWVzID0gU3ltYm9sKCk7XG5cbmNvbnN0IF9jaGlsZHJlbiA9IFN5bWJvbChcIl9jaGlsZHJlblwiKTtcblxuY29uc3QgX2Nsb25lQXR0cmlidXRlID0gU3ltYm9sKCk7XG5cbmNvbnN0IF9kYXRhVmFsdWUgPSBTeW1ib2woKTtcblxuY29uc3QgX2RlZmF1bHRWYWx1ZSA9IFN5bWJvbCgpO1xuXG5jb25zdCBfZmlsdGVyZWRDaGlsZHJlbkdlbmVyYXRvciA9IFN5bWJvbCgpO1xuXG5jb25zdCBfZ2V0UHJvdG90eXBlID0gU3ltYm9sKCk7XG5cbmNvbnN0IF9nZXRVbnNldEF0dHJpYnV0ZXMgPSBTeW1ib2woKTtcblxuY29uc3QgX2hhc0NoaWxkcmVuID0gU3ltYm9sKCk7XG5cbmNvbnN0IF9tYXggPSBTeW1ib2woKTtcblxuY29uc3QgX29wdGlvbnMgPSBTeW1ib2woKTtcblxuY29uc3QgX3BhcmVudCA9IFN5bWJvbChcInBhcmVudFwiKTtcblxuY29uc3QgX3Jlc29sdmVQcm90b3R5cGVzSGVscGVyID0gU3ltYm9sKCk7XG5cbmNvbnN0IF9zZXRBdHRyaWJ1dGVzID0gU3ltYm9sKCk7XG5cbmNvbnN0IF92YWxpZGF0b3IgPSBTeW1ib2woKTtcblxubGV0IHVpZCA9IDA7XG5jb25zdCBOU19EQVRBU0VUUyA9IF9uYW1lc3BhY2VzLk5hbWVzcGFjZUlkcy5kYXRhc2V0cy5pZDtcblxuY2xhc3MgWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IobnNJZCwgbmFtZSwgaGFzQ2hpbGRyZW4gPSBmYWxzZSkge1xuICAgIHRoaXNbJG5hbWVzcGFjZUlkXSA9IG5zSWQ7XG4gICAgdGhpc1skbm9kZU5hbWVdID0gbmFtZTtcbiAgICB0aGlzW19oYXNDaGlsZHJlbl0gPSBoYXNDaGlsZHJlbjtcbiAgICB0aGlzW19wYXJlbnRdID0gbnVsbDtcbiAgICB0aGlzW19jaGlsZHJlbl0gPSBbXTtcbiAgICB0aGlzWyR1aWRdID0gYCR7bmFtZX0ke3VpZCsrfWA7XG4gICAgdGhpc1skZ2xvYmFsRGF0YV0gPSBudWxsO1xuICB9XG5cbiAgWyRvbkNoaWxkXShjaGlsZCkge1xuICAgIGlmICghdGhpc1tfaGFzQ2hpbGRyZW5dIHx8ICF0aGlzWyRvbkNoaWxkQ2hlY2tdKGNoaWxkKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbWUgPSBjaGlsZFskbm9kZU5hbWVdO1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzW25hbWVdO1xuXG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBYRkFPYmplY3RBcnJheSkge1xuICAgICAgaWYgKG5vZGUucHVzaChjaGlsZCkpIHtcbiAgICAgICAgdGhpc1skYXBwZW5kQ2hpbGRdKGNoaWxkKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChub2RlICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXNbJHJlbW92ZUNoaWxkXShub2RlKTtcbiAgICAgIH1cblxuICAgICAgdGhpc1tuYW1lXSA9IGNoaWxkO1xuICAgICAgdGhpc1skYXBwZW5kQ2hpbGRdKGNoaWxkKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGxldCBpZCA9IFwiXCI7XG5cbiAgICBpZiAodGhpcy5pZCkge1xuICAgICAgaWQgPSBgIChpZDogJHt0aGlzLmlkfSlgO1xuICAgIH0gZWxzZSBpZiAodGhpcy5uYW1lKSB7XG4gICAgICBpZCA9IGAgKG5hbWU6ICR7dGhpcy5uYW1lfSAke3RoaXMuaC52YWx1ZX0pYDtcbiAgICB9XG5cbiAgICAoMCwgX3V0aWwud2FybikoYFhGQSAtIG5vZGUgXCIke3RoaXNbJG5vZGVOYW1lXX1cIiR7aWR9IGhhcyBhbHJlYWR5IGVub3VnaCBcIiR7bmFtZX1cIiFgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBbJG9uQ2hpbGRDaGVja10oY2hpbGQpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNPd25Qcm9wZXJ0eShjaGlsZFskbm9kZU5hbWVdKSAmJiBjaGlsZFskbmFtZXNwYWNlSWRdID09PSB0aGlzWyRuYW1lc3BhY2VJZF07XG4gIH1cblxuICBbJGlzTnNBZ25vc3RpY10oKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgWyRhY2NlcHRXaGl0ZXNwYWNlXSgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBbJGlzQ0RBVEFYbWxdKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIFskaXNCaW5kYWJsZV0oKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgWyRwb3BQYXJhXSgpIHtcbiAgICBpZiAodGhpcy5wYXJhKSB7XG4gICAgICB0aGlzWyRnZXRUZW1wbGF0ZVJvb3RdKClbJGV4dHJhXS5wYXJhU3RhY2sucG9wKCk7XG4gICAgfVxuICB9XG5cbiAgWyRwdXNoUGFyYV0oKSB7XG4gICAgdGhpc1skZ2V0VGVtcGxhdGVSb290XSgpWyRleHRyYV0ucGFyYVN0YWNrLnB1c2godGhpcy5wYXJhKTtcbiAgfVxuXG4gIFskc2V0SWRdKGlkcykge1xuICAgIGlmICh0aGlzLmlkICYmIHRoaXNbJG5hbWVzcGFjZUlkXSA9PT0gX25hbWVzcGFjZXMuTmFtZXNwYWNlSWRzLnRlbXBsYXRlLmlkKSB7XG4gICAgICBpZHMuc2V0KHRoaXMuaWQsIHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIFskZ2V0VGVtcGxhdGVSb290XSgpIHtcbiAgICByZXR1cm4gdGhpc1skZ2xvYmFsRGF0YV0udGVtcGxhdGU7XG4gIH1cblxuICBbJGlzU3BsaXR0YWJsZV0oKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgWyRpc1RoZXJlTW9yZVdpZHRoXSgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBbJGFwcGVuZENoaWxkXShjaGlsZCkge1xuICAgIGNoaWxkW19wYXJlbnRdID0gdGhpcztcblxuICAgIHRoaXNbX2NoaWxkcmVuXS5wdXNoKGNoaWxkKTtcblxuICAgIGlmICghY2hpbGRbJGdsb2JhbERhdGFdICYmIHRoaXNbJGdsb2JhbERhdGFdKSB7XG4gICAgICBjaGlsZFskZ2xvYmFsRGF0YV0gPSB0aGlzWyRnbG9iYWxEYXRhXTtcbiAgICB9XG4gIH1cblxuICBbJHJlbW92ZUNoaWxkXShjaGlsZCkge1xuICAgIGNvbnN0IGkgPSB0aGlzW19jaGlsZHJlbl0uaW5kZXhPZihjaGlsZCk7XG5cbiAgICB0aGlzW19jaGlsZHJlbl0uc3BsaWNlKGksIDEpO1xuICB9XG5cbiAgWyRoYXNTZXR0YWJsZVZhbHVlXSgpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNPd25Qcm9wZXJ0eShcInZhbHVlXCIpO1xuICB9XG5cbiAgWyRzZXRWYWx1ZV0oXykge31cblxuICBbJG9uVGV4dF0oXykge31cblxuICBbJGZpbmFsaXplXSgpIHt9XG5cbiAgWyRjbGVhbl0oYnVpbGRlcikge1xuICAgIGRlbGV0ZSB0aGlzW19oYXNDaGlsZHJlbl07XG5cbiAgICBpZiAodGhpc1skY2xlYW51cF0pIHtcbiAgICAgIGJ1aWxkZXIuY2xlYW4odGhpc1skY2xlYW51cF0pO1xuICAgICAgZGVsZXRlIHRoaXNbJGNsZWFudXBdO1xuICAgIH1cbiAgfVxuXG4gIFskaW5kZXhPZl0oY2hpbGQpIHtcbiAgICByZXR1cm4gdGhpc1tfY2hpbGRyZW5dLmluZGV4T2YoY2hpbGQpO1xuICB9XG5cbiAgWyRpbnNlcnRBdF0oaSwgY2hpbGQpIHtcbiAgICBjaGlsZFtfcGFyZW50XSA9IHRoaXM7XG5cbiAgICB0aGlzW19jaGlsZHJlbl0uc3BsaWNlKGksIDAsIGNoaWxkKTtcblxuICAgIGlmICghY2hpbGRbJGdsb2JhbERhdGFdICYmIHRoaXNbJGdsb2JhbERhdGFdKSB7XG4gICAgICBjaGlsZFskZ2xvYmFsRGF0YV0gPSB0aGlzWyRnbG9iYWxEYXRhXTtcbiAgICB9XG4gIH1cblxuICBbJGlzVHJhbnNwYXJlbnRdKCkge1xuICAgIHJldHVybiAhdGhpcy5uYW1lO1xuICB9XG5cbiAgWyRsYXN0QXR0cmlidXRlXSgpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIFskdGV4dF0oKSB7XG4gICAgaWYgKHRoaXNbX2NoaWxkcmVuXS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzWyRjb250ZW50XTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1tfY2hpbGRyZW5dLm1hcChjID0+IGNbJHRleHRdKCkpLmpvaW4oXCJcIik7XG4gIH1cblxuICBnZXQgW19hdHRyaWJ1dGVOYW1lc10oKSB7XG4gICAgY29uc3QgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyk7XG5cbiAgICBpZiAoIXByb3RvLl9hdHRyaWJ1dGVzKSB7XG4gICAgICBjb25zdCBhdHRyaWJ1dGVzID0gcHJvdG8uX2F0dHJpYnV0ZXMgPSBuZXcgU2V0KCk7XG5cbiAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSkge1xuICAgICAgICBpZiAodGhpc1tuYW1lXSA9PT0gbnVsbCB8fCB0aGlzW25hbWVdIGluc3RhbmNlb2YgWEZBT2JqZWN0IHx8IHRoaXNbbmFtZV0gaW5zdGFuY2VvZiBYRkFPYmplY3RBcnJheSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgYXR0cmlidXRlcy5hZGQobmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIF9hdHRyaWJ1dGVOYW1lcywgcHJvdG8uX2F0dHJpYnV0ZXMpO1xuICB9XG5cbiAgWyRpc0Rlc2NlbmRlbnRdKHBhcmVudCkge1xuICAgIGxldCBub2RlID0gdGhpcztcblxuICAgIHdoaWxlIChub2RlKSB7XG4gICAgICBpZiAobm9kZSA9PT0gcGFyZW50KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZVskZ2V0UGFyZW50XSgpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIFskZ2V0UGFyZW50XSgpIHtcbiAgICByZXR1cm4gdGhpc1tfcGFyZW50XTtcbiAgfVxuXG4gIFskZ2V0U3ViZm9ybVBhcmVudF0oKSB7XG4gICAgcmV0dXJuIHRoaXNbJGdldFBhcmVudF0oKTtcbiAgfVxuXG4gIFskZ2V0Q2hpbGRyZW5dKG5hbWUgPSBudWxsKSB7XG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICByZXR1cm4gdGhpc1tfY2hpbGRyZW5dO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzW25hbWVdO1xuICB9XG5cbiAgWyRkdW1wXSgpIHtcbiAgICBjb25zdCBkdW1wZWQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgaWYgKHRoaXNbJGNvbnRlbnRdKSB7XG4gICAgICBkdW1wZWQuJGNvbnRlbnQgPSB0aGlzWyRjb250ZW50XTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1tuYW1lXTtcblxuICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBYRkFPYmplY3QpIHtcbiAgICAgICAgZHVtcGVkW25hbWVdID0gdmFsdWVbJGR1bXBdKCk7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgWEZBT2JqZWN0QXJyYXkpIHtcbiAgICAgICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkpIHtcbiAgICAgICAgICBkdW1wZWRbbmFtZV0gPSB2YWx1ZS5kdW1wKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGR1bXBlZFtuYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkdW1wZWQ7XG4gIH1cblxuICBbJHRvU3R5bGVdKCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgWyR0b0hUTUxdKCkge1xuICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5FTVBUWTtcbiAgfVxuXG4gICpbJGdldENvbnRhaW5lZENoaWxkcmVuXSgpIHtcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgdGhpc1skZ2V0Q2hpbGRyZW5dKCkpIHtcbiAgICAgIHlpZWxkIG5vZGU7XG4gICAgfVxuICB9XG5cbiAgKltfZmlsdGVyZWRDaGlsZHJlbkdlbmVyYXRvcl0oZmlsdGVyLCBpbmNsdWRlKSB7XG4gICAgZm9yIChjb25zdCBub2RlIG9mIHRoaXNbJGdldENvbnRhaW5lZENoaWxkcmVuXSgpKSB7XG4gICAgICBpZiAoIWZpbHRlciB8fCBpbmNsdWRlID09PSBmaWx0ZXIuaGFzKG5vZGVbJG5vZGVOYW1lXSkpIHtcbiAgICAgICAgY29uc3QgYXZhaWxhYmxlU3BhY2UgPSB0aGlzWyRnZXRBdmFpbGFibGVTcGFjZV0oKTtcbiAgICAgICAgY29uc3QgcmVzID0gbm9kZVskdG9IVE1MXShhdmFpbGFibGVTcGFjZSk7XG5cbiAgICAgICAgaWYgKCFyZXMuc3VjY2Vzcykge1xuICAgICAgICAgIHRoaXNbJGV4dHJhXS5mYWlsaW5nTm9kZSA9IG5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICB5aWVsZCByZXM7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgWyRmbHVzaEhUTUxdKCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgWyRhZGRIVE1MXShodG1sLCBiYm94KSB7XG4gICAgdGhpc1skZXh0cmFdLmNoaWxkcmVuLnB1c2goaHRtbCk7XG4gIH1cblxuICBbJGdldEF2YWlsYWJsZVNwYWNlXSgpIHt9XG5cbiAgWyRjaGlsZHJlblRvSFRNTF0oe1xuICAgIGZpbHRlciA9IG51bGwsXG4gICAgaW5jbHVkZSA9IHRydWVcbiAgfSkge1xuICAgIGlmICghdGhpc1skZXh0cmFdLmdlbmVyYXRvcikge1xuICAgICAgdGhpc1skZXh0cmFdLmdlbmVyYXRvciA9IHRoaXNbX2ZpbHRlcmVkQ2hpbGRyZW5HZW5lcmF0b3JdKGZpbHRlciwgaW5jbHVkZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGF2YWlsYWJsZVNwYWNlID0gdGhpc1skZ2V0QXZhaWxhYmxlU3BhY2VdKCk7XG4gICAgICBjb25zdCByZXMgPSB0aGlzWyRleHRyYV0uZmFpbGluZ05vZGVbJHRvSFRNTF0oYXZhaWxhYmxlU3BhY2UpO1xuXG4gICAgICBpZiAoIXJlcy5zdWNjZXNzKSB7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXMuaHRtbCkge1xuICAgICAgICB0aGlzWyRhZGRIVE1MXShyZXMuaHRtbCwgcmVzLmJib3gpO1xuICAgICAgfVxuXG4gICAgICBkZWxldGUgdGhpc1skZXh0cmFdLmZhaWxpbmdOb2RlO1xuICAgIH1cblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCBnZW4gPSB0aGlzWyRleHRyYV0uZ2VuZXJhdG9yLm5leHQoKTtcblxuICAgICAgaWYgKGdlbi5kb25lKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXMgPSBnZW4udmFsdWU7XG5cbiAgICAgIGlmICghcmVzLnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH1cblxuICAgICAgaWYgKHJlcy5odG1sKSB7XG4gICAgICAgIHRoaXNbJGFkZEhUTUxdKHJlcy5odG1sLCByZXMuYmJveCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpc1skZXh0cmFdLmdlbmVyYXRvciA9IG51bGw7XG4gICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LkVNUFRZO1xuICB9XG5cbiAgWyRzZXRTZXRBdHRyaWJ1dGVzXShhdHRyaWJ1dGVzKSB7XG4gICAgdGhpc1tfc2V0QXR0cmlidXRlc10gPSBuZXcgU2V0KE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpKTtcbiAgfVxuXG4gIFtfZ2V0VW5zZXRBdHRyaWJ1dGVzXShwcm90b0F0dHJpYnV0ZXMpIHtcbiAgICBjb25zdCBhbGxBdHRyID0gdGhpc1tfYXR0cmlidXRlTmFtZXNdO1xuICAgIGNvbnN0IHNldEF0dHIgPSB0aGlzW19zZXRBdHRyaWJ1dGVzXTtcbiAgICByZXR1cm4gWy4uLnByb3RvQXR0cmlidXRlc10uZmlsdGVyKHggPT4gYWxsQXR0ci5oYXMoeCkgJiYgIXNldEF0dHIuaGFzKHgpKTtcbiAgfVxuXG4gIFskcmVzb2x2ZVByb3RvdHlwZXNdKGlkcywgYW5jZXN0b3JzID0gbmV3IFNldCgpKSB7XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzW19jaGlsZHJlbl0pIHtcbiAgICAgIGNoaWxkW19yZXNvbHZlUHJvdG90eXBlc0hlbHBlcl0oaWRzLCBhbmNlc3RvcnMpO1xuICAgIH1cbiAgfVxuXG4gIFtfcmVzb2x2ZVByb3RvdHlwZXNIZWxwZXJdKGlkcywgYW5jZXN0b3JzKSB7XG4gICAgY29uc3QgcHJvdG8gPSB0aGlzW19nZXRQcm90b3R5cGVdKGlkcywgYW5jZXN0b3JzKTtcblxuICAgIGlmIChwcm90bykge1xuICAgICAgdGhpc1tfYXBwbHlQcm90b3R5cGVdKHByb3RvLCBpZHMsIGFuY2VzdG9ycyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNbJHJlc29sdmVQcm90b3R5cGVzXShpZHMsIGFuY2VzdG9ycyk7XG4gICAgfVxuICB9XG5cbiAgW19nZXRQcm90b3R5cGVdKGlkcywgYW5jZXN0b3JzKSB7XG4gICAgY29uc3Qge1xuICAgICAgdXNlLFxuICAgICAgdXNlaHJlZlxuICAgIH0gPSB0aGlzO1xuXG4gICAgaWYgKCF1c2UgJiYgIXVzZWhyZWYpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGxldCBwcm90byA9IG51bGw7XG4gICAgbGV0IHNvbUV4cHJlc3Npb24gPSBudWxsO1xuICAgIGxldCBpZCA9IG51bGw7XG4gICAgbGV0IHJlZiA9IHVzZTtcblxuICAgIGlmICh1c2VocmVmKSB7XG4gICAgICByZWYgPSB1c2VocmVmO1xuXG4gICAgICBpZiAodXNlaHJlZi5zdGFydHNXaXRoKFwiI3NvbShcIikgJiYgdXNlaHJlZi5lbmRzV2l0aChcIilcIikpIHtcbiAgICAgICAgc29tRXhwcmVzc2lvbiA9IHVzZWhyZWYuc2xpY2UoXCIjc29tKFwiLmxlbmd0aCwgdXNlaHJlZi5sZW5ndGggLSAxKTtcbiAgICAgIH0gZWxzZSBpZiAodXNlaHJlZi5zdGFydHNXaXRoKFwiLiNzb20oXCIpICYmIHVzZWhyZWYuZW5kc1dpdGgoXCIpXCIpKSB7XG4gICAgICAgIHNvbUV4cHJlc3Npb24gPSB1c2VocmVmLnNsaWNlKFwiLiNzb20oXCIubGVuZ3RoLCB1c2VocmVmLmxlbmd0aCAtIDEpO1xuICAgICAgfSBlbHNlIGlmICh1c2VocmVmLnN0YXJ0c1dpdGgoXCIjXCIpKSB7XG4gICAgICAgIGlkID0gdXNlaHJlZi5zbGljZSgxKTtcbiAgICAgIH0gZWxzZSBpZiAodXNlaHJlZi5zdGFydHNXaXRoKFwiLiNcIikpIHtcbiAgICAgICAgaWQgPSB1c2VocmVmLnNsaWNlKDIpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodXNlLnN0YXJ0c1dpdGgoXCIjXCIpKSB7XG4gICAgICBpZCA9IHVzZS5zbGljZSgxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc29tRXhwcmVzc2lvbiA9IHVzZTtcbiAgICB9XG5cbiAgICB0aGlzLnVzZSA9IHRoaXMudXNlaHJlZiA9IFwiXCI7XG5cbiAgICBpZiAoaWQpIHtcbiAgICAgIHByb3RvID0gaWRzLmdldChpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb3RvID0gKDAsIF9zb20uc2VhcmNoTm9kZSkoaWRzLmdldCgkcm9vdCksIHRoaXMsIHNvbUV4cHJlc3Npb24sIHRydWUsIGZhbHNlKTtcblxuICAgICAgaWYgKHByb3RvKSB7XG4gICAgICAgIHByb3RvID0gcHJvdG9bMF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwcm90bykge1xuICAgICAgKDAsIF91dGlsLndhcm4pKGBYRkEgLSBJbnZhbGlkIHByb3RvdHlwZSByZWZlcmVuY2U6ICR7cmVmfS5gKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChwcm90b1skbm9kZU5hbWVdICE9PSB0aGlzWyRub2RlTmFtZV0pIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShgWEZBIC0gSW5jb21wYXRpYmxlIHByb3RvdHlwZTogJHtwcm90b1skbm9kZU5hbWVdfSAhPT0gJHt0aGlzWyRub2RlTmFtZV19LmApO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGFuY2VzdG9ycy5oYXMocHJvdG8pKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoYFhGQSAtIEN5Y2xlIGRldGVjdGVkIGluIHByb3RvdHlwZXMgdXNlLmApO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgYW5jZXN0b3JzLmFkZChwcm90byk7XG5cbiAgICBjb25zdCBwcm90b1Byb3RvID0gcHJvdG9bX2dldFByb3RvdHlwZV0oaWRzLCBhbmNlc3RvcnMpO1xuXG4gICAgaWYgKHByb3RvUHJvdG8pIHtcbiAgICAgIHByb3RvW19hcHBseVByb3RvdHlwZV0ocHJvdG9Qcm90bywgaWRzLCBhbmNlc3RvcnMpO1xuICAgIH1cblxuICAgIHByb3RvWyRyZXNvbHZlUHJvdG90eXBlc10oaWRzLCBhbmNlc3RvcnMpO1xuICAgIGFuY2VzdG9ycy5kZWxldGUocHJvdG8pO1xuICAgIHJldHVybiBwcm90bztcbiAgfVxuXG4gIFtfYXBwbHlQcm90b3R5cGVdKHByb3RvLCBpZHMsIGFuY2VzdG9ycykge1xuICAgIGlmIChhbmNlc3RvcnMuaGFzKHByb3RvKSkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKGBYRkEgLSBDeWNsZSBkZXRlY3RlZCBpbiBwcm90b3R5cGVzIHVzZS5gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXNbJGNvbnRlbnRdICYmIHByb3RvWyRjb250ZW50XSkge1xuICAgICAgdGhpc1skY29udGVudF0gPSBwcm90b1skY29udGVudF07XG4gICAgfVxuXG4gICAgY29uc3QgbmV3QW5jZXN0b3JzID0gbmV3IFNldChhbmNlc3RvcnMpO1xuICAgIG5ld0FuY2VzdG9ycy5hZGQocHJvdG8pO1xuXG4gICAgZm9yIChjb25zdCB1bnNldEF0dHJOYW1lIG9mIHRoaXNbX2dldFVuc2V0QXR0cmlidXRlc10ocHJvdG9bX3NldEF0dHJpYnV0ZXNdKSkge1xuICAgICAgdGhpc1t1bnNldEF0dHJOYW1lXSA9IHByb3RvW3Vuc2V0QXR0ck5hbWVdO1xuXG4gICAgICBpZiAodGhpc1tfc2V0QXR0cmlidXRlc10pIHtcbiAgICAgICAgdGhpc1tfc2V0QXR0cmlidXRlc10uYWRkKHVuc2V0QXR0ck5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSkge1xuICAgICAgaWYgKHRoaXNbX2F0dHJpYnV0ZU5hbWVzXS5oYXMobmFtZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1tuYW1lXTtcbiAgICAgIGNvbnN0IHByb3RvVmFsdWUgPSBwcm90b1tuYW1lXTtcblxuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgWEZBT2JqZWN0QXJyYXkpIHtcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiB2YWx1ZVtfY2hpbGRyZW5dKSB7XG4gICAgICAgICAgY2hpbGRbX3Jlc29sdmVQcm90b3R5cGVzSGVscGVyXShpZHMsIGFuY2VzdG9ycyk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gdmFsdWVbX2NoaWxkcmVuXS5sZW5ndGgsIGlpID0gcHJvdG9WYWx1ZVtfY2hpbGRyZW5dLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBjaGlsZCA9IHByb3RvW19jaGlsZHJlbl1baV1bJGNsb25lXSgpO1xuXG4gICAgICAgICAgaWYgKHZhbHVlLnB1c2goY2hpbGQpKSB7XG4gICAgICAgICAgICBjaGlsZFtfcGFyZW50XSA9IHRoaXM7XG5cbiAgICAgICAgICAgIHRoaXNbX2NoaWxkcmVuXS5wdXNoKGNoaWxkKTtcblxuICAgICAgICAgICAgY2hpbGRbX3Jlc29sdmVQcm90b3R5cGVzSGVscGVyXShpZHMsIGFuY2VzdG9ycyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgdmFsdWVbJHJlc29sdmVQcm90b3R5cGVzXShpZHMsIGFuY2VzdG9ycyk7XG5cbiAgICAgICAgaWYgKHByb3RvVmFsdWUpIHtcbiAgICAgICAgICB2YWx1ZVtfYXBwbHlQcm90b3R5cGVdKHByb3RvVmFsdWUsIGlkcywgYW5jZXN0b3JzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJvdG9WYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBjaGlsZCA9IHByb3RvVmFsdWVbJGNsb25lXSgpO1xuICAgICAgICBjaGlsZFtfcGFyZW50XSA9IHRoaXM7XG4gICAgICAgIHRoaXNbbmFtZV0gPSBjaGlsZDtcblxuICAgICAgICB0aGlzW19jaGlsZHJlbl0ucHVzaChjaGlsZCk7XG5cbiAgICAgICAgY2hpbGRbX3Jlc29sdmVQcm90b3R5cGVzSGVscGVyXShpZHMsIGFuY2VzdG9ycyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIFtfY2xvbmVBdHRyaWJ1dGVdKG9iaikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgIHJldHVybiBvYmoubWFwKHggPT4gWEZBT2JqZWN0W19jbG9uZUF0dHJpYnV0ZV0oeCkpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiICYmIG9iaiAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIG9iaik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIFskY2xvbmVdKCkge1xuICAgIGNvbnN0IGNsb25lID0gT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykpO1xuXG4gICAgZm9yIChjb25zdCAkc3ltYm9sIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGhpcykpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNsb25lWyRzeW1ib2xdID0gdGhpc1skc3ltYm9sXTtcbiAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgKDAsIF91dGlsLnNoYWRvdykoY2xvbmUsICRzeW1ib2wsIHRoaXNbJHN5bWJvbF0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNsb25lWyR1aWRdID0gYCR7Y2xvbmVbJG5vZGVOYW1lXX0ke3VpZCsrfWA7XG4gICAgY2xvbmVbX2NoaWxkcmVuXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKSB7XG4gICAgICBpZiAodGhpc1tfYXR0cmlidXRlTmFtZXNdLmhhcyhuYW1lKSkge1xuICAgICAgICBjbG9uZVtuYW1lXSA9IFhGQU9iamVjdFtfY2xvbmVBdHRyaWJ1dGVdKHRoaXNbbmFtZV0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW25hbWVdO1xuXG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBYRkFPYmplY3RBcnJheSkge1xuICAgICAgICBjbG9uZVtuYW1lXSA9IG5ldyBYRkFPYmplY3RBcnJheSh2YWx1ZVtfbWF4XSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbG9uZVtuYW1lXSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzW19jaGlsZHJlbl0pIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBjaGlsZFskbm9kZU5hbWVdO1xuICAgICAgY29uc3QgY2xvbmVkQ2hpbGQgPSBjaGlsZFskY2xvbmVdKCk7XG5cbiAgICAgIGNsb25lW19jaGlsZHJlbl0ucHVzaChjbG9uZWRDaGlsZCk7XG5cbiAgICAgIGNsb25lZENoaWxkW19wYXJlbnRdID0gY2xvbmU7XG5cbiAgICAgIGlmIChjbG9uZVtuYW1lXSA9PT0gbnVsbCkge1xuICAgICAgICBjbG9uZVtuYW1lXSA9IGNsb25lZENoaWxkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2xvbmVbbmFtZV1bX2NoaWxkcmVuXS5wdXNoKGNsb25lZENoaWxkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2xvbmU7XG4gIH1cblxuICBbJGdldENoaWxkcmVuXShuYW1lID0gbnVsbCkge1xuICAgIGlmICghbmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXNbX2NoaWxkcmVuXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1tfY2hpbGRyZW5dLmZpbHRlcihjID0+IGNbJG5vZGVOYW1lXSA9PT0gbmFtZSk7XG4gIH1cblxuICBbJGdldENoaWxkcmVuQnlDbGFzc10obmFtZSkge1xuICAgIHJldHVybiB0aGlzW25hbWVdO1xuICB9XG5cbiAgWyRnZXRDaGlsZHJlbkJ5TmFtZV0obmFtZSwgYWxsVHJhbnNwYXJlbnQsIGZpcnN0ID0gdHJ1ZSkge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXNbJGdldENoaWxkcmVuQnlOYW1lSXRdKG5hbWUsIGFsbFRyYW5zcGFyZW50LCBmaXJzdCkpO1xuICB9XG5cbiAgKlskZ2V0Q2hpbGRyZW5CeU5hbWVJdF0obmFtZSwgYWxsVHJhbnNwYXJlbnQsIGZpcnN0ID0gdHJ1ZSkge1xuICAgIGlmIChuYW1lID09PSBcInBhcmVudFwiKSB7XG4gICAgICB5aWVsZCB0aGlzW19wYXJlbnRdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpc1tfY2hpbGRyZW5dKSB7XG4gICAgICBpZiAoY2hpbGRbJG5vZGVOYW1lXSA9PT0gbmFtZSkge1xuICAgICAgICB5aWVsZCBjaGlsZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoaWxkLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgeWllbGQgY2hpbGQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChhbGxUcmFuc3BhcmVudCB8fCBjaGlsZFskaXNUcmFuc3BhcmVudF0oKSkge1xuICAgICAgICB5aWVsZCogY2hpbGRbJGdldENoaWxkcmVuQnlOYW1lSXRdKG5hbWUsIGFsbFRyYW5zcGFyZW50LCBmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZpcnN0ICYmIHRoaXNbX2F0dHJpYnV0ZU5hbWVzXS5oYXMobmFtZSkpIHtcbiAgICAgIHlpZWxkIG5ldyBYRkFBdHRyaWJ1dGUodGhpcywgbmFtZSwgdGhpc1tuYW1lXSk7XG4gICAgfVxuICB9XG5cbn1cblxuZXhwb3J0cy5YRkFPYmplY3QgPSBYRkFPYmplY3Q7XG5cbmNsYXNzIFhGQU9iamVjdEFycmF5IHtcbiAgY29uc3RydWN0b3IobWF4ID0gSW5maW5pdHkpIHtcbiAgICB0aGlzW19tYXhdID0gbWF4O1xuICAgIHRoaXNbX2NoaWxkcmVuXSA9IFtdO1xuICB9XG5cbiAgcHVzaChjaGlsZCkge1xuICAgIGNvbnN0IGxlbiA9IHRoaXNbX2NoaWxkcmVuXS5sZW5ndGg7XG5cbiAgICBpZiAobGVuIDw9IHRoaXNbX21heF0pIHtcbiAgICAgIHRoaXNbX2NoaWxkcmVuXS5wdXNoKGNoaWxkKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgKDAsIF91dGlsLndhcm4pKGBYRkEgLSBub2RlIFwiJHtjaGlsZFskbm9kZU5hbWVdfVwiIGFjY2VwdHMgbm8gbW9yZSB0aGFuICR7dGhpc1tfbWF4XX0gY2hpbGRyZW5gKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpc0VtcHR5KCkge1xuICAgIHJldHVybiB0aGlzW19jaGlsZHJlbl0ubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgZHVtcCgpIHtcbiAgICByZXR1cm4gdGhpc1tfY2hpbGRyZW5dLmxlbmd0aCA9PT0gMSA/IHRoaXNbX2NoaWxkcmVuXVswXVskZHVtcF0oKSA6IHRoaXNbX2NoaWxkcmVuXS5tYXAoeCA9PiB4WyRkdW1wXSgpKTtcbiAgfVxuXG4gIFskY2xvbmVdKCkge1xuICAgIGNvbnN0IGNsb25lID0gbmV3IFhGQU9iamVjdEFycmF5KHRoaXNbX21heF0pO1xuICAgIGNsb25lW19jaGlsZHJlbl0gPSB0aGlzW19jaGlsZHJlbl0ubWFwKGMgPT4gY1skY2xvbmVdKCkpO1xuICAgIHJldHVybiBjbG9uZTtcbiAgfVxuXG4gIGdldCBjaGlsZHJlbigpIHtcbiAgICByZXR1cm4gdGhpc1tfY2hpbGRyZW5dO1xuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgdGhpc1tfY2hpbGRyZW5dLmxlbmd0aCA9IDA7XG4gIH1cblxufVxuXG5leHBvcnRzLlhGQU9iamVjdEFycmF5ID0gWEZBT2JqZWN0QXJyYXk7XG5cbmNsYXNzIFhGQUF0dHJpYnV0ZSB7XG4gIGNvbnN0cnVjdG9yKG5vZGUsIG5hbWUsIHZhbHVlKSB7XG4gICAgdGhpc1tfcGFyZW50XSA9IG5vZGU7XG4gICAgdGhpc1skbm9kZU5hbWVdID0gbmFtZTtcbiAgICB0aGlzWyRjb250ZW50XSA9IHZhbHVlO1xuICAgIHRoaXNbJGNvbnN1bWVkXSA9IGZhbHNlO1xuICAgIHRoaXNbJHVpZF0gPSBgYXR0cmlidXRlJHt1aWQrK31gO1xuICB9XG5cbiAgWyRnZXRQYXJlbnRdKCkge1xuICAgIHJldHVybiB0aGlzW19wYXJlbnRdO1xuICB9XG5cbiAgWyRpc0RhdGFWYWx1ZV0oKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBbJGdldERhdGFWYWx1ZV0oKSB7XG4gICAgcmV0dXJuIHRoaXNbJGNvbnRlbnRdLnRyaW0oKTtcbiAgfVxuXG4gIFskc2V0VmFsdWVdKHZhbHVlKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS52YWx1ZSB8fCBcIlwiO1xuICAgIHRoaXNbJGNvbnRlbnRdID0gdmFsdWUudG9TdHJpbmcoKTtcbiAgfVxuXG4gIFskdGV4dF0oKSB7XG4gICAgcmV0dXJuIHRoaXNbJGNvbnRlbnRdO1xuICB9XG5cbiAgWyRpc0Rlc2NlbmRlbnRdKHBhcmVudCkge1xuICAgIHJldHVybiB0aGlzW19wYXJlbnRdID09PSBwYXJlbnQgfHwgdGhpc1tfcGFyZW50XVskaXNEZXNjZW5kZW50XShwYXJlbnQpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5YRkFBdHRyaWJ1dGUgPSBYRkFBdHRyaWJ1dGU7XG5cbmNsYXNzIFhtbE9iamVjdCBleHRlbmRzIFhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKG5zSWQsIG5hbWUsIGF0dHJpYnV0ZXMgPSB7fSkge1xuICAgIHN1cGVyKG5zSWQsIG5hbWUpO1xuICAgIHRoaXNbJGNvbnRlbnRdID0gXCJcIjtcbiAgICB0aGlzW19kYXRhVmFsdWVdID0gbnVsbDtcblxuICAgIGlmIChuYW1lICE9PSBcIiN0ZXh0XCIpIHtcbiAgICAgIGNvbnN0IG1hcCA9IG5ldyBNYXAoKTtcbiAgICAgIHRoaXNbX2F0dHJpYnV0ZXNdID0gbWFwO1xuXG4gICAgICBmb3IgKGNvbnN0IFthdHRyTmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZXMpKSB7XG4gICAgICAgIG1hcC5zZXQoYXR0ck5hbWUsIG5ldyBYRkFBdHRyaWJ1dGUodGhpcywgYXR0ck5hbWUsIHZhbHVlKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChhdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KCRuc0F0dHJpYnV0ZXMpKSB7XG4gICAgICAgIGNvbnN0IGRhdGFOb2RlID0gYXR0cmlidXRlc1skbnNBdHRyaWJ1dGVzXS54ZmEuZGF0YU5vZGU7XG5cbiAgICAgICAgaWYgKGRhdGFOb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAoZGF0YU5vZGUgPT09IFwiZGF0YUdyb3VwXCIpIHtcbiAgICAgICAgICAgIHRoaXNbX2RhdGFWYWx1ZV0gPSBmYWxzZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGRhdGFOb2RlID09PSBcImRhdGFWYWx1ZVwiKSB7XG4gICAgICAgICAgICB0aGlzW19kYXRhVmFsdWVdID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzWyRjb25zdW1lZF0gPSBmYWxzZTtcbiAgfVxuXG4gIFskdG9TdHJpbmddKGJ1Zikge1xuICAgIGNvbnN0IHRhZ05hbWUgPSB0aGlzWyRub2RlTmFtZV07XG5cbiAgICBpZiAodGFnTmFtZSA9PT0gXCIjdGV4dFwiKSB7XG4gICAgICBidWYucHVzaCgoMCwgX2NvcmVfdXRpbHMuZW5jb2RlVG9YbWxTdHJpbmcpKHRoaXNbJGNvbnRlbnRdKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdXRmOFRhZ05hbWUgPSAoMCwgX3V0aWwudXRmOFN0cmluZ1RvU3RyaW5nKSh0YWdOYW1lKTtcbiAgICBjb25zdCBwcmVmaXggPSB0aGlzWyRuYW1lc3BhY2VJZF0gPT09IE5TX0RBVEFTRVRTID8gXCJ4ZmE6XCIgOiBcIlwiO1xuICAgIGJ1Zi5wdXNoKGA8JHtwcmVmaXh9JHt1dGY4VGFnTmFtZX1gKTtcblxuICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiB0aGlzW19hdHRyaWJ1dGVzXS5lbnRyaWVzKCkpIHtcbiAgICAgIGNvbnN0IHV0ZjhOYW1lID0gKDAsIF91dGlsLnV0ZjhTdHJpbmdUb1N0cmluZykobmFtZSk7XG4gICAgICBidWYucHVzaChgICR7dXRmOE5hbWV9PVwiJHsoMCwgX2NvcmVfdXRpbHMuZW5jb2RlVG9YbWxTdHJpbmcpKHZhbHVlWyRjb250ZW50XSl9XCJgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpc1tfZGF0YVZhbHVlXSAhPT0gbnVsbCkge1xuICAgICAgaWYgKHRoaXNbX2RhdGFWYWx1ZV0pIHtcbiAgICAgICAgYnVmLnB1c2goYCB4ZmE6ZGF0YU5vZGU9XCJkYXRhVmFsdWVcImApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnVmLnB1c2goYCB4ZmE6ZGF0YU5vZGU9XCJkYXRhR3JvdXBcImApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdGhpc1skY29udGVudF0gJiYgdGhpc1tfY2hpbGRyZW5dLmxlbmd0aCA9PT0gMCkge1xuICAgICAgYnVmLnB1c2goXCIvPlwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBidWYucHVzaChcIj5cIik7XG5cbiAgICBpZiAodGhpc1skY29udGVudF0pIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpc1skY29udGVudF0gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgYnVmLnB1c2goKDAsIF9jb3JlX3V0aWxzLmVuY29kZVRvWG1sU3RyaW5nKSh0aGlzWyRjb250ZW50XSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpc1skY29udGVudF1bJHRvU3RyaW5nXShidWYpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXNbX2NoaWxkcmVuXSkge1xuICAgICAgICBjaGlsZFskdG9TdHJpbmddKGJ1Zik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYnVmLnB1c2goYDwvJHtwcmVmaXh9JHt1dGY4VGFnTmFtZX0+YCk7XG4gIH1cblxuICBbJG9uQ2hpbGRdKGNoaWxkKSB7XG4gICAgaWYgKHRoaXNbJGNvbnRlbnRdKSB7XG4gICAgICBjb25zdCBub2RlID0gbmV3IFhtbE9iamVjdCh0aGlzWyRuYW1lc3BhY2VJZF0sIFwiI3RleHRcIik7XG4gICAgICB0aGlzWyRhcHBlbmRDaGlsZF0obm9kZSk7XG4gICAgICBub2RlWyRjb250ZW50XSA9IHRoaXNbJGNvbnRlbnRdO1xuICAgICAgdGhpc1skY29udGVudF0gPSBcIlwiO1xuICAgIH1cblxuICAgIHRoaXNbJGFwcGVuZENoaWxkXShjaGlsZCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBbJG9uVGV4dF0oc3RyKSB7XG4gICAgdGhpc1skY29udGVudF0gKz0gc3RyO1xuICB9XG5cbiAgWyRmaW5hbGl6ZV0oKSB7XG4gICAgaWYgKHRoaXNbJGNvbnRlbnRdICYmIHRoaXNbX2NoaWxkcmVuXS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBub2RlID0gbmV3IFhtbE9iamVjdCh0aGlzWyRuYW1lc3BhY2VJZF0sIFwiI3RleHRcIik7XG4gICAgICB0aGlzWyRhcHBlbmRDaGlsZF0obm9kZSk7XG4gICAgICBub2RlWyRjb250ZW50XSA9IHRoaXNbJGNvbnRlbnRdO1xuICAgICAgZGVsZXRlIHRoaXNbJGNvbnRlbnRdO1xuICAgIH1cbiAgfVxuXG4gIFskdG9IVE1MXSgpIHtcbiAgICBpZiAodGhpc1skbm9kZU5hbWVdID09PSBcIiN0ZXh0XCIpIHtcbiAgICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5zdWNjZXNzKHtcbiAgICAgICAgbmFtZTogXCIjdGV4dFwiLFxuICAgICAgICB2YWx1ZTogdGhpc1skY29udGVudF1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5FTVBUWTtcbiAgfVxuXG4gIFskZ2V0Q2hpbGRyZW5dKG5hbWUgPSBudWxsKSB7XG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICByZXR1cm4gdGhpc1tfY2hpbGRyZW5dO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzW19jaGlsZHJlbl0uZmlsdGVyKGMgPT4gY1skbm9kZU5hbWVdID09PSBuYW1lKTtcbiAgfVxuXG4gIFskZ2V0QXR0cmlidXRlc10oKSB7XG4gICAgcmV0dXJuIHRoaXNbX2F0dHJpYnV0ZXNdO1xuICB9XG5cbiAgWyRnZXRDaGlsZHJlbkJ5Q2xhc3NdKG5hbWUpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXNbX2F0dHJpYnV0ZXNdLmdldChuYW1lKTtcblxuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNbJGdldENoaWxkcmVuXShuYW1lKTtcbiAgfVxuXG4gICpbJGdldENoaWxkcmVuQnlOYW1lSXRdKG5hbWUsIGFsbFRyYW5zcGFyZW50KSB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzW19hdHRyaWJ1dGVzXS5nZXQobmFtZSk7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHlpZWxkIHZhbHVlO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpc1tfY2hpbGRyZW5dKSB7XG4gICAgICBpZiAoY2hpbGRbJG5vZGVOYW1lXSA9PT0gbmFtZSkge1xuICAgICAgICB5aWVsZCBjaGlsZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGFsbFRyYW5zcGFyZW50KSB7XG4gICAgICAgIHlpZWxkKiBjaGlsZFskZ2V0Q2hpbGRyZW5CeU5hbWVJdF0obmFtZSwgYWxsVHJhbnNwYXJlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICpbJGdldEF0dHJpYnV0ZUl0XShuYW1lLCBza2lwQ29uc3VtZWQpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXNbX2F0dHJpYnV0ZXNdLmdldChuYW1lKTtcblxuICAgIGlmICh2YWx1ZSAmJiAoIXNraXBDb25zdW1lZCB8fCAhdmFsdWVbJGNvbnN1bWVkXSkpIHtcbiAgICAgIHlpZWxkIHZhbHVlO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpc1tfY2hpbGRyZW5dKSB7XG4gICAgICB5aWVsZCogY2hpbGRbJGdldEF0dHJpYnV0ZUl0XShuYW1lLCBza2lwQ29uc3VtZWQpO1xuICAgIH1cbiAgfVxuXG4gICpbJGdldFJlYWxDaGlsZHJlbkJ5TmFtZUl0XShuYW1lLCBhbGxUcmFuc3BhcmVudCwgc2tpcENvbnN1bWVkKSB7XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzW19jaGlsZHJlbl0pIHtcbiAgICAgIGlmIChjaGlsZFskbm9kZU5hbWVdID09PSBuYW1lICYmICghc2tpcENvbnN1bWVkIHx8ICFjaGlsZFskY29uc3VtZWRdKSkge1xuICAgICAgICB5aWVsZCBjaGlsZDtcbiAgICAgIH1cblxuICAgICAgaWYgKGFsbFRyYW5zcGFyZW50KSB7XG4gICAgICAgIHlpZWxkKiBjaGlsZFskZ2V0UmVhbENoaWxkcmVuQnlOYW1lSXRdKG5hbWUsIGFsbFRyYW5zcGFyZW50LCBza2lwQ29uc3VtZWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIFskaXNEYXRhVmFsdWVdKCkge1xuICAgIGlmICh0aGlzW19kYXRhVmFsdWVdID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpc1tfY2hpbGRyZW5dLmxlbmd0aCA9PT0gMCB8fCB0aGlzW19jaGlsZHJlbl1bMF1bJG5hbWVzcGFjZUlkXSA9PT0gX25hbWVzcGFjZXMuTmFtZXNwYWNlSWRzLnhodG1sLmlkO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzW19kYXRhVmFsdWVdO1xuICB9XG5cbiAgWyRnZXREYXRhVmFsdWVdKCkge1xuICAgIGlmICh0aGlzW19kYXRhVmFsdWVdID09PSBudWxsKSB7XG4gICAgICBpZiAodGhpc1tfY2hpbGRyZW5dLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gdGhpc1skY29udGVudF0udHJpbSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpc1tfY2hpbGRyZW5dWzBdWyRuYW1lc3BhY2VJZF0gPT09IF9uYW1lc3BhY2VzLk5hbWVzcGFjZUlkcy54aHRtbC5pZCkge1xuICAgICAgICByZXR1cm4gdGhpc1tfY2hpbGRyZW5dWzBdWyR0ZXh0XSgpLnRyaW0oKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNbJGNvbnRlbnRdLnRyaW0oKTtcbiAgfVxuXG4gIFskc2V0VmFsdWVdKHZhbHVlKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS52YWx1ZSB8fCBcIlwiO1xuICAgIHRoaXNbJGNvbnRlbnRdID0gdmFsdWUudG9TdHJpbmcoKTtcbiAgfVxuXG4gIFskZHVtcF0oaGFzTlMgPSBmYWxzZSkge1xuICAgIGNvbnN0IGR1bXBlZCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICBpZiAoaGFzTlMpIHtcbiAgICAgIGR1bXBlZC4kbnMgPSB0aGlzWyRuYW1lc3BhY2VJZF07XG4gICAgfVxuXG4gICAgaWYgKHRoaXNbJGNvbnRlbnRdKSB7XG4gICAgICBkdW1wZWQuJGNvbnRlbnQgPSB0aGlzWyRjb250ZW50XTtcbiAgICB9XG5cbiAgICBkdW1wZWQuJG5hbWUgPSB0aGlzWyRub2RlTmFtZV07XG4gICAgZHVtcGVkLmNoaWxkcmVuID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXNbX2NoaWxkcmVuXSkge1xuICAgICAgZHVtcGVkLmNoaWxkcmVuLnB1c2goY2hpbGRbJGR1bXBdKGhhc05TKSk7XG4gICAgfVxuXG4gICAgZHVtcGVkLmF0dHJpYnV0ZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIHRoaXNbX2F0dHJpYnV0ZXNdKSB7XG4gICAgICBkdW1wZWQuYXR0cmlidXRlc1tuYW1lXSA9IHZhbHVlWyRjb250ZW50XTtcbiAgICB9XG5cbiAgICByZXR1cm4gZHVtcGVkO1xuICB9XG5cbn1cblxuZXhwb3J0cy5YbWxPYmplY3QgPSBYbWxPYmplY3Q7XG5cbmNsYXNzIENvbnRlbnRPYmplY3QgZXh0ZW5kcyBYRkFPYmplY3Qge1xuICBjb25zdHJ1Y3Rvcihuc0lkLCBuYW1lKSB7XG4gICAgc3VwZXIobnNJZCwgbmFtZSk7XG4gICAgdGhpc1skY29udGVudF0gPSBcIlwiO1xuICB9XG5cbiAgWyRvblRleHRdKHRleHQpIHtcbiAgICB0aGlzWyRjb250ZW50XSArPSB0ZXh0O1xuICB9XG5cbiAgWyRmaW5hbGl6ZV0oKSB7fVxuXG59XG5cbmV4cG9ydHMuQ29udGVudE9iamVjdCA9IENvbnRlbnRPYmplY3Q7XG5cbmNsYXNzIE9wdGlvbk9iamVjdCBleHRlbmRzIENvbnRlbnRPYmplY3Qge1xuICBjb25zdHJ1Y3Rvcihuc0lkLCBuYW1lLCBvcHRpb25zKSB7XG4gICAgc3VwZXIobnNJZCwgbmFtZSk7XG4gICAgdGhpc1tfb3B0aW9uc10gPSBvcHRpb25zO1xuICB9XG5cbiAgWyRmaW5hbGl6ZV0oKSB7XG4gICAgdGhpc1skY29udGVudF0gPSAoMCwgX3V0aWxzLmdldEtleXdvcmQpKHtcbiAgICAgIGRhdGE6IHRoaXNbJGNvbnRlbnRdLFxuICAgICAgZGVmYXVsdFZhbHVlOiB0aGlzW19vcHRpb25zXVswXSxcbiAgICAgIHZhbGlkYXRlOiBrID0+IHRoaXNbX29wdGlvbnNdLmluY2x1ZGVzKGspXG4gICAgfSk7XG4gIH1cblxuICBbJGNsZWFuXShidWlsZGVyKSB7XG4gICAgc3VwZXJbJGNsZWFuXShidWlsZGVyKTtcbiAgICBkZWxldGUgdGhpc1tfb3B0aW9uc107XG4gIH1cblxufVxuXG5leHBvcnRzLk9wdGlvbk9iamVjdCA9IE9wdGlvbk9iamVjdDtcblxuY2xhc3MgU3RyaW5nT2JqZWN0IGV4dGVuZHMgQ29udGVudE9iamVjdCB7XG4gIFskZmluYWxpemVdKCkge1xuICAgIHRoaXNbJGNvbnRlbnRdID0gdGhpc1skY29udGVudF0udHJpbSgpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5TdHJpbmdPYmplY3QgPSBTdHJpbmdPYmplY3Q7XG5cbmNsYXNzIEludGVnZXJPYmplY3QgZXh0ZW5kcyBDb250ZW50T2JqZWN0IHtcbiAgY29uc3RydWN0b3IobnNJZCwgbmFtZSwgZGVmYXVsdFZhbHVlLCB2YWxpZGF0b3IpIHtcbiAgICBzdXBlcihuc0lkLCBuYW1lKTtcbiAgICB0aGlzW19kZWZhdWx0VmFsdWVdID0gZGVmYXVsdFZhbHVlO1xuICAgIHRoaXNbX3ZhbGlkYXRvcl0gPSB2YWxpZGF0b3I7XG4gIH1cblxuICBbJGZpbmFsaXplXSgpIHtcbiAgICB0aGlzWyRjb250ZW50XSA9ICgwLCBfdXRpbHMuZ2V0SW50ZWdlcikoe1xuICAgICAgZGF0YTogdGhpc1skY29udGVudF0sXG4gICAgICBkZWZhdWx0VmFsdWU6IHRoaXNbX2RlZmF1bHRWYWx1ZV0sXG4gICAgICB2YWxpZGF0ZTogdGhpc1tfdmFsaWRhdG9yXVxuICAgIH0pO1xuICB9XG5cbiAgWyRjbGVhbl0oYnVpbGRlcikge1xuICAgIHN1cGVyWyRjbGVhbl0oYnVpbGRlcik7XG4gICAgZGVsZXRlIHRoaXNbX2RlZmF1bHRWYWx1ZV07XG4gICAgZGVsZXRlIHRoaXNbX3ZhbGlkYXRvcl07XG4gIH1cblxufVxuXG5leHBvcnRzLkludGVnZXJPYmplY3QgPSBJbnRlZ2VyT2JqZWN0O1xuXG5jbGFzcyBPcHRpb24wMSBleHRlbmRzIEludGVnZXJPYmplY3Qge1xuICBjb25zdHJ1Y3Rvcihuc0lkLCBuYW1lKSB7XG4gICAgc3VwZXIobnNJZCwgbmFtZSwgMCwgbiA9PiBuID09PSAxKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuT3B0aW9uMDEgPSBPcHRpb24wMTtcblxuY2xhc3MgT3B0aW9uMTAgZXh0ZW5kcyBJbnRlZ2VyT2JqZWN0IHtcbiAgY29uc3RydWN0b3IobnNJZCwgbmFtZSkge1xuICAgIHN1cGVyKG5zSWQsIG5hbWUsIDEsIG4gPT4gbiA9PT0gMCk7XG4gIH1cblxufVxuXG5leHBvcnRzLk9wdGlvbjEwID0gT3B0aW9uMTA7XG5cbi8qKiovIH0pLFxuLyogNzYgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuSFRNTFJlc3VsdCA9IHZvaWQgMDtcbmV4cG9ydHMuZ2V0QkJveCA9IGdldEJCb3g7XG5leHBvcnRzLmdldENvbG9yID0gZ2V0Q29sb3I7XG5leHBvcnRzLmdldEZsb2F0ID0gZ2V0RmxvYXQ7XG5leHBvcnRzLmdldEludGVnZXIgPSBnZXRJbnRlZ2VyO1xuZXhwb3J0cy5nZXRLZXl3b3JkID0gZ2V0S2V5d29yZDtcbmV4cG9ydHMuZ2V0TWVhc3VyZW1lbnQgPSBnZXRNZWFzdXJlbWVudDtcbmV4cG9ydHMuZ2V0UmF0aW8gPSBnZXRSYXRpbztcbmV4cG9ydHMuZ2V0UmVsZXZhbnQgPSBnZXRSZWxldmFudDtcbmV4cG9ydHMuZ2V0U3RyaW5nT3B0aW9uID0gZ2V0U3RyaW5nT3B0aW9uO1xuZXhwb3J0cy5zdHJpcFF1b3RlcyA9IHN0cmlwUXVvdGVzO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5jb25zdCBkaW1Db252ZXJ0ZXJzID0ge1xuICBwdDogeCA9PiB4LFxuICBjbTogeCA9PiB4IC8gMi41NCAqIDcyLFxuICBtbTogeCA9PiB4IC8gKDEwICogMi41NCkgKiA3MixcbiAgaW46IHggPT4geCAqIDcyLFxuICBweDogeCA9PiB4XG59O1xuY29uc3QgbWVhc3VyZW1lbnRQYXR0ZXJuID0gLyhbKy1dP1xcZCtcXC4/XFxkKikoLiopLztcblxuZnVuY3Rpb24gc3RyaXBRdW90ZXMoc3RyKSB7XG4gIGlmIChzdHIuc3RhcnRzV2l0aChcIidcIikgfHwgc3RyLnN0YXJ0c1dpdGgoJ1wiJykpIHtcbiAgICByZXR1cm4gc3RyLnNsaWNlKDEsIHN0ci5sZW5ndGggLSAxKTtcbiAgfVxuXG4gIHJldHVybiBzdHI7XG59XG5cbmZ1bmN0aW9uIGdldEludGVnZXIoe1xuICBkYXRhLFxuICBkZWZhdWx0VmFsdWUsXG4gIHZhbGlkYXRlXG59KSB7XG4gIGlmICghZGF0YSkge1xuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cblxuICBkYXRhID0gZGF0YS50cmltKCk7XG4gIGNvbnN0IG4gPSBwYXJzZUludChkYXRhLCAxMCk7XG5cbiAgaWYgKCFpc05hTihuKSAmJiB2YWxpZGF0ZShuKSkge1xuICAgIHJldHVybiBuO1xuICB9XG5cbiAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbn1cblxuZnVuY3Rpb24gZ2V0RmxvYXQoe1xuICBkYXRhLFxuICBkZWZhdWx0VmFsdWUsXG4gIHZhbGlkYXRlXG59KSB7XG4gIGlmICghZGF0YSkge1xuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cblxuICBkYXRhID0gZGF0YS50cmltKCk7XG4gIGNvbnN0IG4gPSBwYXJzZUZsb2F0KGRhdGEpO1xuXG4gIGlmICghaXNOYU4obikgJiYgdmFsaWRhdGUobikpIHtcbiAgICByZXR1cm4gbjtcbiAgfVxuXG4gIHJldHVybiBkZWZhdWx0VmFsdWU7XG59XG5cbmZ1bmN0aW9uIGdldEtleXdvcmQoe1xuICBkYXRhLFxuICBkZWZhdWx0VmFsdWUsXG4gIHZhbGlkYXRlXG59KSB7XG4gIGlmICghZGF0YSkge1xuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cblxuICBkYXRhID0gZGF0YS50cmltKCk7XG5cbiAgaWYgKHZhbGlkYXRlKGRhdGEpKSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICByZXR1cm4gZGVmYXVsdFZhbHVlO1xufVxuXG5mdW5jdGlvbiBnZXRTdHJpbmdPcHRpb24oZGF0YSwgb3B0aW9ucykge1xuICByZXR1cm4gZ2V0S2V5d29yZCh7XG4gICAgZGF0YSxcbiAgICBkZWZhdWx0VmFsdWU6IG9wdGlvbnNbMF0sXG4gICAgdmFsaWRhdGU6IGsgPT4gb3B0aW9ucy5pbmNsdWRlcyhrKVxuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0TWVhc3VyZW1lbnQoc3RyLCBkZWYgPSBcIjBcIikge1xuICBkZWYgPSBkZWYgfHwgXCIwXCI7XG5cbiAgaWYgKCFzdHIpIHtcbiAgICByZXR1cm4gZ2V0TWVhc3VyZW1lbnQoZGVmKTtcbiAgfVxuXG4gIGNvbnN0IG1hdGNoID0gc3RyLnRyaW0oKS5tYXRjaChtZWFzdXJlbWVudFBhdHRlcm4pO1xuXG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4gZ2V0TWVhc3VyZW1lbnQoZGVmKTtcbiAgfVxuXG4gIGNvbnN0IFssIHZhbHVlU3RyLCB1bml0XSA9IG1hdGNoO1xuICBjb25zdCB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWVTdHIpO1xuXG4gIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICByZXR1cm4gZ2V0TWVhc3VyZW1lbnQoZGVmKTtcbiAgfVxuXG4gIGlmICh2YWx1ZSA9PT0gMCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgY29uc3QgY29udiA9IGRpbUNvbnZlcnRlcnNbdW5pdF07XG5cbiAgaWYgKGNvbnYpIHtcbiAgICByZXR1cm4gY29udih2YWx1ZSk7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGdldFJhdGlvKGRhdGEpIHtcbiAgaWYgKCFkYXRhKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG51bTogMSxcbiAgICAgIGRlbjogMVxuICAgIH07XG4gIH1cblxuICBjb25zdCByYXRpbyA9IGRhdGEudHJpbSgpLnNwbGl0KC9cXHMqOlxccyovKS5tYXAoeCA9PiBwYXJzZUZsb2F0KHgpKS5maWx0ZXIoeCA9PiAhaXNOYU4oeCkpO1xuXG4gIGlmIChyYXRpby5sZW5ndGggPT09IDEpIHtcbiAgICByYXRpby5wdXNoKDEpO1xuICB9XG5cbiAgaWYgKHJhdGlvLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB7XG4gICAgICBudW06IDEsXG4gICAgICBkZW46IDFcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgW251bSwgZGVuXSA9IHJhdGlvO1xuICByZXR1cm4ge1xuICAgIG51bSxcbiAgICBkZW5cbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVsZXZhbnQoZGF0YSkge1xuICBpZiAoIWRhdGEpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gZGF0YS50cmltKCkuc3BsaXQoL1xccysvKS5tYXAoZSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV4Y2x1ZGVkOiBlWzBdID09PSBcIi1cIixcbiAgICAgIHZpZXduYW1lOiBlLnN1YnN0cmluZygxKVxuICAgIH07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRDb2xvcihkYXRhLCBkZWYgPSBbMCwgMCwgMF0pIHtcbiAgbGV0IFtyLCBnLCBiXSA9IGRlZjtcblxuICBpZiAoIWRhdGEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcixcbiAgICAgIGcsXG4gICAgICBiXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGNvbG9yID0gZGF0YS50cmltKCkuc3BsaXQoL1xccyosXFxzKi8pLm1hcChjID0+IE1hdGgubWluKE1hdGgubWF4KDAsIHBhcnNlSW50KGMudHJpbSgpLCAxMCkpLCAyNTUpKS5tYXAoYyA9PiBpc05hTihjKSA/IDAgOiBjKTtcblxuICBpZiAoY29sb3IubGVuZ3RoIDwgMykge1xuICAgIHJldHVybiB7XG4gICAgICByLFxuICAgICAgZyxcbiAgICAgIGJcbiAgICB9O1xuICB9XG5cbiAgW3IsIGcsIGJdID0gY29sb3I7XG4gIHJldHVybiB7XG4gICAgcixcbiAgICBnLFxuICAgIGJcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0QkJveChkYXRhKSB7XG4gIGNvbnN0IGRlZiA9IC0xO1xuXG4gIGlmICghZGF0YSkge1xuICAgIHJldHVybiB7XG4gICAgICB4OiBkZWYsXG4gICAgICB5OiBkZWYsXG4gICAgICB3aWR0aDogZGVmLFxuICAgICAgaGVpZ2h0OiBkZWZcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgYmJveCA9IGRhdGEudHJpbSgpLnNwbGl0KC9cXHMqLFxccyovKS5tYXAobSA9PiBnZXRNZWFzdXJlbWVudChtLCBcIi0xXCIpKTtcblxuICBpZiAoYmJveC5sZW5ndGggPCA0IHx8IGJib3hbMl0gPCAwIHx8IGJib3hbM10gPCAwKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IGRlZixcbiAgICAgIHk6IGRlZixcbiAgICAgIHdpZHRoOiBkZWYsXG4gICAgICBoZWlnaHQ6IGRlZlxuICAgIH07XG4gIH1cblxuICBjb25zdCBbeCwgeSwgd2lkdGgsIGhlaWdodF0gPSBiYm94O1xuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeSxcbiAgICB3aWR0aCxcbiAgICBoZWlnaHRcbiAgfTtcbn1cblxuY2xhc3MgSFRNTFJlc3VsdCB7XG4gIHN0YXRpYyBnZXQgRkFJTFVSRSgpIHtcbiAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJGQUlMVVJFXCIsIG5ldyBIVE1MUmVzdWx0KGZhbHNlLCBudWxsLCBudWxsLCBudWxsKSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IEVNUFRZKCkge1xuICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIkVNUFRZXCIsIG5ldyBIVE1MUmVzdWx0KHRydWUsIG51bGwsIG51bGwsIG51bGwpKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHN1Y2Nlc3MsIGh0bWwsIGJib3gsIGJyZWFrTm9kZSkge1xuICAgIHRoaXMuc3VjY2VzcyA9IHN1Y2Nlc3M7XG4gICAgdGhpcy5odG1sID0gaHRtbDtcbiAgICB0aGlzLmJib3ggPSBiYm94O1xuICAgIHRoaXMuYnJlYWtOb2RlID0gYnJlYWtOb2RlO1xuICB9XG5cbiAgaXNCcmVhaygpIHtcbiAgICByZXR1cm4gISF0aGlzLmJyZWFrTm9kZTtcbiAgfVxuXG4gIHN0YXRpYyBicmVha05vZGUobm9kZSkge1xuICAgIHJldHVybiBuZXcgSFRNTFJlc3VsdChmYWxzZSwgbnVsbCwgbnVsbCwgbm9kZSk7XG4gIH1cblxuICBzdGF0aWMgc3VjY2VzcyhodG1sLCBiYm94ID0gbnVsbCkge1xuICAgIHJldHVybiBuZXcgSFRNTFJlc3VsdCh0cnVlLCBodG1sLCBiYm94LCBudWxsKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuSFRNTFJlc3VsdCA9IEhUTUxSZXN1bHQ7XG5cbi8qKiovIH0pLFxuLyogNzcgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMpID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuTmFtZXNwYWNlSWRzID0gZXhwb3J0cy4kYnVpbGRYRkFPYmplY3QgPSB2b2lkIDA7XG5jb25zdCAkYnVpbGRYRkFPYmplY3QgPSBTeW1ib2woKTtcbmV4cG9ydHMuJGJ1aWxkWEZBT2JqZWN0ID0gJGJ1aWxkWEZBT2JqZWN0O1xuY29uc3QgTmFtZXNwYWNlSWRzID0ge1xuICBjb25maWc6IHtcbiAgICBpZDogMCxcbiAgICBjaGVjazogbnMgPT4gbnMuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGNpL1wiKVxuICB9LFxuICBjb25uZWN0aW9uU2V0OiB7XG4gICAgaWQ6IDEsXG4gICAgY2hlY2s6IG5zID0+IG5zLnN0YXJ0c1dpdGgoXCJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hmYS1jb25uZWN0aW9uLXNldC9cIilcbiAgfSxcbiAgZGF0YXNldHM6IHtcbiAgICBpZDogMixcbiAgICBjaGVjazogbnMgPT4gbnMuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLWRhdGEvXCIpXG4gIH0sXG4gIGZvcm06IHtcbiAgICBpZDogMyxcbiAgICBjaGVjazogbnMgPT4gbnMuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLWZvcm0vXCIpXG4gIH0sXG4gIGxvY2FsZVNldDoge1xuICAgIGlkOiA0LFxuICAgIGNoZWNrOiBucyA9PiBucy5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtbG9jYWxlLXNldC9cIilcbiAgfSxcbiAgcGRmOiB7XG4gICAgaWQ6IDUsXG4gICAgY2hlY2s6IG5zID0+IG5zID09PSBcImh0dHA6Ly9ucy5hZG9iZS5jb20veGRwL3BkZi9cIlxuICB9LFxuICBzaWduYXR1cmU6IHtcbiAgICBpZDogNixcbiAgICBjaGVjazogbnMgPT4gbnMgPT09IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI1wiXG4gIH0sXG4gIHNvdXJjZVNldDoge1xuICAgIGlkOiA3LFxuICAgIGNoZWNrOiBucyA9PiBucy5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtc291cmNlLXNldC9cIilcbiAgfSxcbiAgc3R5bGVzaGVldDoge1xuICAgIGlkOiA4LFxuICAgIGNoZWNrOiBucyA9PiBucyA9PT0gXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm1cIlxuICB9LFxuICB0ZW1wbGF0ZToge1xuICAgIGlkOiA5LFxuICAgIGNoZWNrOiBucyA9PiBucy5zdGFydHNXaXRoKFwiaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtdGVtcGxhdGUvXCIpXG4gIH0sXG4gIHhkYzoge1xuICAgIGlkOiAxMCxcbiAgICBjaGVjazogbnMgPT4gbnMuc3RhcnRzV2l0aChcImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGRjL1wiKVxuICB9LFxuICB4ZHA6IHtcbiAgICBpZDogMTEsXG4gICAgY2hlY2s6IG5zID0+IG5zID09PSBcImh0dHA6Ly9ucy5hZG9iZS5jb20veGRwL1wiXG4gIH0sXG4gIHhmZGY6IHtcbiAgICBpZDogMTIsXG4gICAgY2hlY2s6IG5zID0+IG5zID09PSBcImh0dHA6Ly9ucy5hZG9iZS5jb20veGZkZi9cIlxuICB9LFxuICB4aHRtbDoge1xuICAgIGlkOiAxMyxcbiAgICBjaGVjazogbnMgPT4gbnMgPT09IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiXG4gIH0sXG4gIHhtcG1ldGE6IHtcbiAgICBpZDogMTQsXG4gICAgY2hlY2s6IG5zID0+IG5zID09PSBcImh0dHA6Ly9ucy5hZG9iZS5jb20veG1wbWV0YS9cIlxuICB9XG59O1xuZXhwb3J0cy5OYW1lc3BhY2VJZHMgPSBOYW1lc3BhY2VJZHM7XG5cbi8qKiovIH0pLFxuLyogNzggKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuY3JlYXRlRGF0YU5vZGUgPSBjcmVhdGVEYXRhTm9kZTtcbmV4cG9ydHMuc2VhcmNoTm9kZSA9IHNlYXJjaE5vZGU7XG5cbnZhciBfeGZhX29iamVjdCA9IF9fd19wZGZqc19yZXF1aXJlX18oNzUpO1xuXG52YXIgX25hbWVzcGFjZXMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDc3KTtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxuY29uc3QgbmFtZVBhdHRlcm4gPSAvXlteLltdKy87XG5jb25zdCBpbmRleFBhdHRlcm4gPSAvXlteXFxdXSsvO1xuY29uc3Qgb3BlcmF0b3JzID0ge1xuICBkb3Q6IDAsXG4gIGRvdERvdDogMSxcbiAgZG90SGFzaDogMixcbiAgZG90QnJhY2tldDogMyxcbiAgZG90UGFyZW46IDRcbn07XG5jb25zdCBzaG9ydGN1dHMgPSBuZXcgTWFwKFtbXCIkZGF0YVwiLCAocm9vdCwgY3VycmVudCkgPT4gcm9vdC5kYXRhc2V0cyA/IHJvb3QuZGF0YXNldHMuZGF0YSA6IHJvb3RdLCBbXCIkcmVjb3JkXCIsIChyb290LCBjdXJyZW50KSA9PiAocm9vdC5kYXRhc2V0cyA/IHJvb3QuZGF0YXNldHMuZGF0YSA6IHJvb3QpW194ZmFfb2JqZWN0LiRnZXRDaGlsZHJlbl0oKVswXV0sIFtcIiR0ZW1wbGF0ZVwiLCAocm9vdCwgY3VycmVudCkgPT4gcm9vdC50ZW1wbGF0ZV0sIFtcIiRjb25uZWN0aW9uU2V0XCIsIChyb290LCBjdXJyZW50KSA9PiByb290LmNvbm5lY3Rpb25TZXRdLCBbXCIkZm9ybVwiLCAocm9vdCwgY3VycmVudCkgPT4gcm9vdC5mb3JtXSwgW1wiJGxheW91dFwiLCAocm9vdCwgY3VycmVudCkgPT4gcm9vdC5sYXlvdXRdLCBbXCIkaG9zdFwiLCAocm9vdCwgY3VycmVudCkgPT4gcm9vdC5ob3N0XSwgW1wiJGRhdGFXaW5kb3dcIiwgKHJvb3QsIGN1cnJlbnQpID0+IHJvb3QuZGF0YVdpbmRvd10sIFtcIiRldmVudFwiLCAocm9vdCwgY3VycmVudCkgPT4gcm9vdC5ldmVudF0sIFtcIiFcIiwgKHJvb3QsIGN1cnJlbnQpID0+IHJvb3QuZGF0YXNldHNdLCBbXCIkeGZhXCIsIChyb290LCBjdXJyZW50KSA9PiByb290XSwgW1wieGZhXCIsIChyb290LCBjdXJyZW50KSA9PiByb290XSwgW1wiJFwiLCAocm9vdCwgY3VycmVudCkgPT4gY3VycmVudF1dKTtcbmNvbnN0IHNvbUNhY2hlID0gbmV3IFdlYWtNYXAoKTtcbmNvbnN0IE5TX0RBVEFTRVRTID0gX25hbWVzcGFjZXMuTmFtZXNwYWNlSWRzLmRhdGFzZXRzLmlkO1xuXG5mdW5jdGlvbiBwYXJzZUluZGV4KGluZGV4KSB7XG4gIGluZGV4ID0gaW5kZXgudHJpbSgpO1xuXG4gIGlmIChpbmRleCA9PT0gXCIqXCIpIHtcbiAgICByZXR1cm4gSW5maW5pdHk7XG4gIH1cblxuICByZXR1cm4gcGFyc2VJbnQoaW5kZXgsIDEwKSB8fCAwO1xufVxuXG5mdW5jdGlvbiBwYXJzZUV4cHJlc3Npb24oZXhwciwgZG90RG90QWxsb3dlZCwgbm9FeHByID0gdHJ1ZSkge1xuICBsZXQgbWF0Y2ggPSBleHByLm1hdGNoKG5hbWVQYXR0ZXJuKTtcblxuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBsZXQgW25hbWVdID0gbWF0Y2g7XG4gIGNvbnN0IHBhcnNlZCA9IFt7XG4gICAgbmFtZSxcbiAgICBjYWNoZU5hbWU6IFwiLlwiICsgbmFtZSxcbiAgICBpbmRleDogMCxcbiAgICBqczogbnVsbCxcbiAgICBmb3JtQ2FsYzogbnVsbCxcbiAgICBvcGVyYXRvcjogb3BlcmF0b3JzLmRvdFxuICB9XTtcbiAgbGV0IHBvcyA9IG5hbWUubGVuZ3RoO1xuXG4gIHdoaWxlIChwb3MgPCBleHByLmxlbmd0aCkge1xuICAgIGNvbnN0IHNwb3MgPSBwb3M7XG4gICAgY29uc3QgY2hhciA9IGV4cHIuY2hhckF0KHBvcysrKTtcblxuICAgIGlmIChjaGFyID09PSBcIltcIikge1xuICAgICAgbWF0Y2ggPSBleHByLnNsaWNlKHBvcykubWF0Y2goaW5kZXhQYXR0ZXJuKTtcblxuICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoXCJYRkEgLSBJbnZhbGlkIGluZGV4IGluIFNPTSBleHByZXNzaW9uXCIpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcGFyc2VkW3BhcnNlZC5sZW5ndGggLSAxXS5pbmRleCA9IHBhcnNlSW5kZXgobWF0Y2hbMF0pO1xuICAgICAgcG9zICs9IG1hdGNoWzBdLmxlbmd0aCArIDE7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBsZXQgb3BlcmF0b3I7XG5cbiAgICBzd2l0Y2ggKGV4cHIuY2hhckF0KHBvcykpIHtcbiAgICAgIGNhc2UgXCIuXCI6XG4gICAgICAgIGlmICghZG90RG90QWxsb3dlZCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcG9zKys7XG4gICAgICAgIG9wZXJhdG9yID0gb3BlcmF0b3JzLmRvdERvdDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCIjXCI6XG4gICAgICAgIHBvcysrO1xuICAgICAgICBvcGVyYXRvciA9IG9wZXJhdG9ycy5kb3RIYXNoO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIltcIjpcbiAgICAgICAgaWYgKG5vRXhwcikge1xuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIlhGQSAtIFNPTSBleHByZXNzaW9uIGNvbnRhaW5zIGEgRm9ybUNhbGMgc3ViZXhwcmVzc2lvbiB3aGljaCBpcyBub3Qgc3VwcG9ydGVkIGZvciBub3cuXCIpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgb3BlcmF0b3IgPSBvcGVyYXRvcnMuZG90QnJhY2tldDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCIoXCI6XG4gICAgICAgIGlmIChub0V4cHIpIHtcbiAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJYRkEgLSBTT00gZXhwcmVzc2lvbiBjb250YWlucyBhIEphdmFTY3JpcHQgc3ViZXhwcmVzc2lvbiB3aGljaCBpcyBub3Qgc3VwcG9ydGVkIGZvciBub3cuXCIpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgb3BlcmF0b3IgPSBvcGVyYXRvcnMuZG90UGFyZW47XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBvcGVyYXRvciA9IG9wZXJhdG9ycy5kb3Q7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIG1hdGNoID0gZXhwci5zbGljZShwb3MpLm1hdGNoKG5hbWVQYXR0ZXJuKTtcblxuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIFtuYW1lXSA9IG1hdGNoO1xuICAgIHBvcyArPSBuYW1lLmxlbmd0aDtcbiAgICBwYXJzZWQucHVzaCh7XG4gICAgICBuYW1lLFxuICAgICAgY2FjaGVOYW1lOiBleHByLnNsaWNlKHNwb3MsIHBvcyksXG4gICAgICBvcGVyYXRvcixcbiAgICAgIGluZGV4OiAwLFxuICAgICAganM6IG51bGwsXG4gICAgICBmb3JtQ2FsYzogbnVsbFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn1cblxuZnVuY3Rpb24gc2VhcmNoTm9kZShyb290LCBjb250YWluZXIsIGV4cHIsIGRvdERvdEFsbG93ZWQgPSB0cnVlLCB1c2VDYWNoZSA9IHRydWUpIHtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VFeHByZXNzaW9uKGV4cHIsIGRvdERvdEFsbG93ZWQpO1xuXG4gIGlmICghcGFyc2VkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBmbiA9IHNob3J0Y3V0cy5nZXQocGFyc2VkWzBdLm5hbWUpO1xuICBsZXQgaSA9IDA7XG4gIGxldCBpc1F1YWxpZmllZDtcblxuICBpZiAoZm4pIHtcbiAgICBpc1F1YWxpZmllZCA9IHRydWU7XG4gICAgcm9vdCA9IFtmbihyb290LCBjb250YWluZXIpXTtcbiAgICBpID0gMTtcbiAgfSBlbHNlIHtcbiAgICBpc1F1YWxpZmllZCA9IGNvbnRhaW5lciA9PT0gbnVsbDtcbiAgICByb290ID0gW2NvbnRhaW5lciB8fCByb290XTtcbiAgfVxuXG4gIGZvciAobGV0IGlpID0gcGFyc2VkLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICBjb25zdCB7XG4gICAgICBuYW1lLFxuICAgICAgY2FjaGVOYW1lLFxuICAgICAgb3BlcmF0b3IsXG4gICAgICBpbmRleFxuICAgIH0gPSBwYXJzZWRbaV07XG4gICAgY29uc3Qgbm9kZXMgPSBbXTtcblxuICAgIGZvciAoY29uc3Qgbm9kZSBvZiByb290KSB7XG4gICAgICBpZiAoIShub2RlIGluc3RhbmNlb2YgX3hmYV9vYmplY3QuWEZBT2JqZWN0KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbGV0IGNoaWxkcmVuLCBjYWNoZWQ7XG5cbiAgICAgIGlmICh1c2VDYWNoZSkge1xuICAgICAgICBjYWNoZWQgPSBzb21DYWNoZS5nZXQobm9kZSk7XG5cbiAgICAgICAgaWYgKCFjYWNoZWQpIHtcbiAgICAgICAgICBjYWNoZWQgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgc29tQ2FjaGUuc2V0KG5vZGUsIGNhY2hlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZHJlbiA9IGNhY2hlZC5nZXQoY2FjaGVOYW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFjaGlsZHJlbikge1xuICAgICAgICBzd2l0Y2ggKG9wZXJhdG9yKSB7XG4gICAgICAgICAgY2FzZSBvcGVyYXRvcnMuZG90OlxuICAgICAgICAgICAgY2hpbGRyZW4gPSBub2RlW194ZmFfb2JqZWN0LiRnZXRDaGlsZHJlbkJ5TmFtZV0obmFtZSwgZmFsc2UpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIG9wZXJhdG9ycy5kb3REb3Q6XG4gICAgICAgICAgICBjaGlsZHJlbiA9IG5vZGVbX3hmYV9vYmplY3QuJGdldENoaWxkcmVuQnlOYW1lXShuYW1lLCB0cnVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBvcGVyYXRvcnMuZG90SGFzaDpcbiAgICAgICAgICAgIGNoaWxkcmVuID0gbm9kZVtfeGZhX29iamVjdC4kZ2V0Q2hpbGRyZW5CeUNsYXNzXShuYW1lKTtcblxuICAgICAgICAgICAgaWYgKGNoaWxkcmVuIGluc3RhbmNlb2YgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkpIHtcbiAgICAgICAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5jaGlsZHJlbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNoaWxkcmVuID0gW2NoaWxkcmVuXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXNlQ2FjaGUpIHtcbiAgICAgICAgICBjYWNoZWQuc2V0KGNhY2hlTmFtZSwgY2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgIG5vZGVzLnB1c2goY2hpbGRyZW4pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChub2Rlcy5sZW5ndGggPT09IDAgJiYgIWlzUXVhbGlmaWVkICYmIGkgPT09IDApIHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGNvbnRhaW5lcltfeGZhX29iamVjdC4kZ2V0UGFyZW50XSgpO1xuXG4gICAgICBjb250YWluZXIgPSBwYXJlbnQ7XG5cbiAgICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBpID0gLTE7XG4gICAgICByb290ID0gW2NvbnRhaW5lcl07XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoaXNGaW5pdGUoaW5kZXgpKSB7XG4gICAgICByb290ID0gbm9kZXMuZmlsdGVyKG5vZGUgPT4gaW5kZXggPCBub2RlLmxlbmd0aCkubWFwKG5vZGUgPT4gbm9kZVtpbmRleF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByb290ID0gbm9kZXMucmVkdWNlKChhY2MsIG5vZGUpID0+IGFjYy5jb25jYXQobm9kZSksIFtdKTtcbiAgICB9XG4gIH1cblxuICBpZiAocm9vdC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiByb290O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVOb2Rlcyhyb290LCBwYXRoKSB7XG4gIGxldCBub2RlID0gbnVsbDtcblxuICBmb3IgKGNvbnN0IHtcbiAgICBuYW1lLFxuICAgIGluZGV4XG4gIH0gb2YgcGF0aCkge1xuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9ICFpc0Zpbml0ZShpbmRleCkgPyAwIDogaW5kZXg7IGkgPD0gaWk7IGkrKykge1xuICAgICAgY29uc3QgbnNJZCA9IHJvb3RbX3hmYV9vYmplY3QuJG5hbWVzcGFjZUlkXSA9PT0gTlNfREFUQVNFVFMgPyAtMSA6IHJvb3RbX3hmYV9vYmplY3QuJG5hbWVzcGFjZUlkXTtcbiAgICAgIG5vZGUgPSBuZXcgX3hmYV9vYmplY3QuWG1sT2JqZWN0KG5zSWQsIG5hbWUpO1xuXG4gICAgICByb290W194ZmFfb2JqZWN0LiRhcHBlbmRDaGlsZF0obm9kZSk7XG4gICAgfVxuXG4gICAgcm9vdCA9IG5vZGU7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGF0YU5vZGUocm9vdCwgY29udGFpbmVyLCBleHByKSB7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlRXhwcmVzc2lvbihleHByKTtcblxuICBpZiAoIXBhcnNlZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHBhcnNlZC5zb21lKHggPT4geC5vcGVyYXRvciA9PT0gb3BlcmF0b3JzLmRvdERvdCkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGZuID0gc2hvcnRjdXRzLmdldChwYXJzZWRbMF0ubmFtZSk7XG4gIGxldCBpID0gMDtcblxuICBpZiAoZm4pIHtcbiAgICByb290ID0gZm4ocm9vdCwgY29udGFpbmVyKTtcbiAgICBpID0gMTtcbiAgfSBlbHNlIHtcbiAgICByb290ID0gY29udGFpbmVyIHx8IHJvb3Q7XG4gIH1cblxuICBmb3IgKGxldCBpaSA9IHBhcnNlZC5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgY29uc3Qge1xuICAgICAgbmFtZSxcbiAgICAgIG9wZXJhdG9yLFxuICAgICAgaW5kZXhcbiAgICB9ID0gcGFyc2VkW2ldO1xuXG4gICAgaWYgKCFpc0Zpbml0ZShpbmRleCkpIHtcbiAgICAgIHBhcnNlZFtpXS5pbmRleCA9IDA7XG4gICAgICByZXR1cm4gY3JlYXRlTm9kZXMocm9vdCwgcGFyc2VkLnNsaWNlKGkpKTtcbiAgICB9XG5cbiAgICBsZXQgY2hpbGRyZW47XG5cbiAgICBzd2l0Y2ggKG9wZXJhdG9yKSB7XG4gICAgICBjYXNlIG9wZXJhdG9ycy5kb3Q6XG4gICAgICAgIGNoaWxkcmVuID0gcm9vdFtfeGZhX29iamVjdC4kZ2V0Q2hpbGRyZW5CeU5hbWVdKG5hbWUsIGZhbHNlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2Ugb3BlcmF0b3JzLmRvdERvdDpcbiAgICAgICAgY2hpbGRyZW4gPSByb290W194ZmFfb2JqZWN0LiRnZXRDaGlsZHJlbkJ5TmFtZV0obmFtZSwgdHJ1ZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIG9wZXJhdG9ycy5kb3RIYXNoOlxuICAgICAgICBjaGlsZHJlbiA9IHJvb3RbX3hmYV9vYmplY3QuJGdldENoaWxkcmVuQnlDbGFzc10obmFtZSk7XG5cbiAgICAgICAgaWYgKGNoaWxkcmVuIGluc3RhbmNlb2YgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkpIHtcbiAgICAgICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuLmNoaWxkcmVuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNoaWxkcmVuID0gW2NoaWxkcmVuXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gY3JlYXRlTm9kZXMocm9vdCwgcGFyc2VkLnNsaWNlKGkpKTtcbiAgICB9XG5cbiAgICBpZiAoaW5kZXggPCBjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGNoaWxkID0gY2hpbGRyZW5baW5kZXhdO1xuXG4gICAgICBpZiAoIShjaGlsZCBpbnN0YW5jZW9mIF94ZmFfb2JqZWN0LlhGQU9iamVjdCkpIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKGBYRkEgLSBDYW5ub3QgY3JlYXRlIGEgbm9kZS5gKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJvb3QgPSBjaGlsZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VkW2ldLmluZGV4ID0gaW5kZXggLSBjaGlsZHJlbi5sZW5ndGg7XG4gICAgICByZXR1cm4gY3JlYXRlTm9kZXMocm9vdCwgcGFyc2VkLnNsaWNlKGkpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqKi8gfSksXG4vKiA3OSAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5CaW5kZXIgPSB2b2lkIDA7XG5cbnZhciBfeGZhX29iamVjdCA9IF9fd19wZGZqc19yZXF1aXJlX18oNzUpO1xuXG52YXIgX3RlbXBsYXRlID0gX193X3BkZmpzX3JlcXVpcmVfXyg4MCk7XG5cbnZhciBfc29tID0gX193X3BkZmpzX3JlcXVpcmVfXyg3OCk7XG5cbnZhciBfbmFtZXNwYWNlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNzcpO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5jb25zdCBOU19EQVRBU0VUUyA9IF9uYW1lc3BhY2VzLk5hbWVzcGFjZUlkcy5kYXRhc2V0cy5pZDtcblxuZnVuY3Rpb24gY3JlYXRlVGV4dChjb250ZW50KSB7XG4gIGNvbnN0IG5vZGUgPSBuZXcgX3RlbXBsYXRlLlRleHQoe30pO1xuICBub2RlW194ZmFfb2JqZWN0LiRjb250ZW50XSA9IGNvbnRlbnQ7XG4gIHJldHVybiBub2RlO1xufVxuXG5jbGFzcyBCaW5kZXIge1xuICBjb25zdHJ1Y3Rvcihyb290KSB7XG4gICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICB0aGlzLmRhdGFzZXRzID0gcm9vdC5kYXRhc2V0cztcblxuICAgIGlmIChyb290LmRhdGFzZXRzICYmIHJvb3QuZGF0YXNldHMuZGF0YSkge1xuICAgICAgdGhpcy5kYXRhID0gcm9vdC5kYXRhc2V0cy5kYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRhdGEgPSBuZXcgX3hmYV9vYmplY3QuWG1sT2JqZWN0KF9uYW1lc3BhY2VzLk5hbWVzcGFjZUlkcy5kYXRhc2V0cy5pZCwgXCJkYXRhXCIpO1xuICAgIH1cblxuICAgIHRoaXMuZW1wdHlNZXJnZSA9IHRoaXMuZGF0YVtfeGZhX29iamVjdC4kZ2V0Q2hpbGRyZW5dKCkubGVuZ3RoID09PSAwO1xuICAgIHRoaXMucm9vdC5mb3JtID0gdGhpcy5mb3JtID0gcm9vdC50ZW1wbGF0ZVtfeGZhX29iamVjdC4kY2xvbmVdKCk7XG4gIH1cblxuICBfaXNDb25zdW1lRGF0YSgpIHtcbiAgICByZXR1cm4gIXRoaXMuZW1wdHlNZXJnZSAmJiB0aGlzLl9tZXJnZU1vZGU7XG4gIH1cblxuICBfaXNNYXRjaFRlbXBsYXRlKCkge1xuICAgIHJldHVybiAhdGhpcy5faXNDb25zdW1lRGF0YSgpO1xuICB9XG5cbiAgYmluZCgpIHtcbiAgICB0aGlzLl9iaW5kRWxlbWVudCh0aGlzLmZvcm0sIHRoaXMuZGF0YSk7XG5cbiAgICByZXR1cm4gdGhpcy5mb3JtO1xuICB9XG5cbiAgZ2V0RGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhO1xuICB9XG5cbiAgX2JpbmRWYWx1ZShmb3JtTm9kZSwgZGF0YSwgcGljdHVyZSkge1xuICAgIGZvcm1Ob2RlW194ZmFfb2JqZWN0LiRkYXRhXSA9IGRhdGE7XG5cbiAgICBpZiAoZm9ybU5vZGVbX3hmYV9vYmplY3QuJGhhc1NldHRhYmxlVmFsdWVdKCkpIHtcbiAgICAgIGlmIChkYXRhW194ZmFfb2JqZWN0LiRpc0RhdGFWYWx1ZV0oKSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGRhdGFbX3hmYV9vYmplY3QuJGdldERhdGFWYWx1ZV0oKTtcblxuICAgICAgICBmb3JtTm9kZVtfeGZhX29iamVjdC4kc2V0VmFsdWVdKGNyZWF0ZVRleHQodmFsdWUpKTtcbiAgICAgIH0gZWxzZSBpZiAoZm9ybU5vZGUgaW5zdGFuY2VvZiBfdGVtcGxhdGUuRmllbGQgJiYgZm9ybU5vZGUudWkgJiYgZm9ybU5vZGUudWkuY2hvaWNlTGlzdCAmJiBmb3JtTm9kZS51aS5jaG9pY2VMaXN0Lm9wZW4gPT09IFwibXVsdGlTZWxlY3RcIikge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGRhdGFbX3hmYV9vYmplY3QuJGdldENoaWxkcmVuXSgpLm1hcChjaGlsZCA9PiBjaGlsZFtfeGZhX29iamVjdC4kY29udGVudF0udHJpbSgpKS5qb2luKFwiXFxuXCIpO1xuXG4gICAgICAgIGZvcm1Ob2RlW194ZmFfb2JqZWN0LiRzZXRWYWx1ZV0oY3JlYXRlVGV4dCh2YWx1ZSkpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLl9pc0NvbnN1bWVEYXRhKCkpIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKGBYRkEgLSBOb2RlcyBoYXZlbid0IHRoZSBzYW1lIHR5cGUuYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghZGF0YVtfeGZhX29iamVjdC4kaXNEYXRhVmFsdWVdKCkgfHwgdGhpcy5faXNNYXRjaFRlbXBsYXRlKCkpIHtcbiAgICAgIHRoaXMuX2JpbmRFbGVtZW50KGZvcm1Ob2RlLCBkYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgKDAsIF91dGlsLndhcm4pKGBYRkEgLSBOb2RlcyBoYXZlbid0IHRoZSBzYW1lIHR5cGUuYCk7XG4gICAgfVxuICB9XG5cbiAgX2ZpbmREYXRhQnlOYW1lVG9Db25zdW1lKG5hbWUsIGlzVmFsdWUsIGRhdGFOb2RlLCBnbG9iYWwpIHtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGxldCBnZW5lcmF0b3IsIG1hdGNoO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICAgIGdlbmVyYXRvciA9IGRhdGFOb2RlW194ZmFfb2JqZWN0LiRnZXRSZWFsQ2hpbGRyZW5CeU5hbWVJdF0obmFtZSwgZmFsc2UsIHRydWUpO1xuXG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBtYXRjaCA9IGdlbmVyYXRvci5uZXh0KCkudmFsdWU7XG5cbiAgICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzVmFsdWUgPT09IG1hdGNoW194ZmFfb2JqZWN0LiRpc0RhdGFWYWx1ZV0oKSkge1xuICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YU5vZGVbX3hmYV9vYmplY3QuJG5hbWVzcGFjZUlkXSA9PT0gX25hbWVzcGFjZXMuTmFtZXNwYWNlSWRzLmRhdGFzZXRzLmlkICYmIGRhdGFOb2RlW194ZmFfb2JqZWN0LiRub2RlTmFtZV0gPT09IFwiZGF0YVwiKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBkYXRhTm9kZSA9IGRhdGFOb2RlW194ZmFfb2JqZWN0LiRnZXRQYXJlbnRdKCk7XG4gICAgfVxuXG4gICAgaWYgKCFnbG9iYWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGdlbmVyYXRvciA9IHRoaXMuZGF0YVtfeGZhX29iamVjdC4kZ2V0UmVhbENoaWxkcmVuQnlOYW1lSXRdKG5hbWUsIHRydWUsIGZhbHNlKTtcbiAgICBtYXRjaCA9IGdlbmVyYXRvci5uZXh0KCkudmFsdWU7XG5cbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIHJldHVybiBtYXRjaDtcbiAgICB9XG5cbiAgICBnZW5lcmF0b3IgPSB0aGlzLmRhdGFbX3hmYV9vYmplY3QuJGdldEF0dHJpYnV0ZUl0XShuYW1lLCB0cnVlKTtcbiAgICBtYXRjaCA9IGdlbmVyYXRvci5uZXh0KCkudmFsdWU7XG5cbiAgICBpZiAobWF0Y2ggJiYgbWF0Y2hbX3hmYV9vYmplY3QuJGlzRGF0YVZhbHVlXSgpKSB7XG4gICAgICByZXR1cm4gbWF0Y2g7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBfc2V0UHJvcGVydGllcyhmb3JtTm9kZSwgZGF0YU5vZGUpIHtcbiAgICBpZiAoIWZvcm1Ob2RlLmhhc093blByb3BlcnR5KFwic2V0UHJvcGVydHlcIikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHtcbiAgICAgIHJlZixcbiAgICAgIHRhcmdldCxcbiAgICAgIGNvbm5lY3Rpb25cbiAgICB9IG9mIGZvcm1Ob2RlLnNldFByb3BlcnR5LmNoaWxkcmVuKSB7XG4gICAgICBpZiAoY29ubmVjdGlvbikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFyZWYpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vZGVzID0gKDAsIF9zb20uc2VhcmNoTm9kZSkodGhpcy5yb290LCBkYXRhTm9kZSwgcmVmLCBmYWxzZSwgZmFsc2UpO1xuXG4gICAgICBpZiAoIW5vZGVzKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShgWEZBIC0gSW52YWxpZCByZWZlcmVuY2U6ICR7cmVmfS5gKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IFtub2RlXSA9IG5vZGVzO1xuXG4gICAgICBpZiAoIW5vZGVbX3hmYV9vYmplY3QuJGlzRGVzY2VuZGVudF0odGhpcy5kYXRhKSkge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoYFhGQSAtIEludmFsaWQgbm9kZTogbXVzdCBiZSBhIGRhdGEgbm9kZS5gKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhcmdldE5vZGVzID0gKDAsIF9zb20uc2VhcmNoTm9kZSkodGhpcy5yb290LCBmb3JtTm9kZSwgdGFyZ2V0LCBmYWxzZSwgZmFsc2UpO1xuXG4gICAgICBpZiAoIXRhcmdldE5vZGVzKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShgWEZBIC0gSW52YWxpZCB0YXJnZXQ6ICR7dGFyZ2V0fS5gKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IFt0YXJnZXROb2RlXSA9IHRhcmdldE5vZGVzO1xuXG4gICAgICBpZiAoIXRhcmdldE5vZGVbX3hmYV9vYmplY3QuJGlzRGVzY2VuZGVudF0oZm9ybU5vZGUpKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShgWEZBIC0gSW52YWxpZCB0YXJnZXQ6IG11c3QgYmUgYSBwcm9wZXJ0eSBvciBzdWJwcm9wZXJ0eS5gKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhcmdldFBhcmVudCA9IHRhcmdldE5vZGVbX3hmYV9vYmplY3QuJGdldFBhcmVudF0oKTtcblxuICAgICAgaWYgKHRhcmdldE5vZGUgaW5zdGFuY2VvZiBfdGVtcGxhdGUuU2V0UHJvcGVydHkgfHwgdGFyZ2V0UGFyZW50IGluc3RhbmNlb2YgX3RlbXBsYXRlLlNldFByb3BlcnR5KSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShgWEZBIC0gSW52YWxpZCB0YXJnZXQ6IGNhbm5vdCBiZSBhIHNldFByb3BlcnR5IG9yIG9uZSBvZiBpdHMgcHJvcGVydGllcy5gKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0YXJnZXROb2RlIGluc3RhbmNlb2YgX3RlbXBsYXRlLkJpbmRJdGVtcyB8fCB0YXJnZXRQYXJlbnQgaW5zdGFuY2VvZiBfdGVtcGxhdGUuQmluZEl0ZW1zKSB7XG4gICAgICAgICgwLCBfdXRpbC53YXJuKShgWEZBIC0gSW52YWxpZCB0YXJnZXQ6IGNhbm5vdCBiZSBhIGJpbmRJdGVtcyBvciBvbmUgb2YgaXRzIHByb3BlcnRpZXMuYCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb250ZW50ID0gbm9kZVtfeGZhX29iamVjdC4kdGV4dF0oKTtcblxuICAgICAgY29uc3QgbmFtZSA9IHRhcmdldE5vZGVbX3hmYV9vYmplY3QuJG5vZGVOYW1lXTtcblxuICAgICAgaWYgKHRhcmdldE5vZGUgaW5zdGFuY2VvZiBfeGZhX29iamVjdC5YRkFBdHRyaWJ1dGUpIHtcbiAgICAgICAgY29uc3QgYXR0cnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBhdHRyc1tuYW1lXSA9IGNvbnRlbnQ7XG4gICAgICAgIGNvbnN0IG9iaiA9IFJlZmxlY3QuY29uc3RydWN0KE9iamVjdC5nZXRQcm90b3R5cGVPZih0YXJnZXRQYXJlbnQpLmNvbnN0cnVjdG9yLCBbYXR0cnNdKTtcbiAgICAgICAgdGFyZ2V0UGFyZW50W25hbWVdID0gb2JqW25hbWVdO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0YXJnZXROb2RlLmhhc093blByb3BlcnR5KF94ZmFfb2JqZWN0LiRjb250ZW50KSkge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoYFhGQSAtIEludmFsaWQgbm9kZSB0byB1c2UgaW4gc2V0UHJvcGVydHlgKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHRhcmdldE5vZGVbX3hmYV9vYmplY3QuJGRhdGFdID0gbm9kZTtcbiAgICAgIHRhcmdldE5vZGVbX3hmYV9vYmplY3QuJGNvbnRlbnRdID0gY29udGVudDtcblxuICAgICAgdGFyZ2V0Tm9kZVtfeGZhX29iamVjdC4kZmluYWxpemVdKCk7XG4gICAgfVxuICB9XG5cbiAgX2JpbmRJdGVtcyhmb3JtTm9kZSwgZGF0YU5vZGUpIHtcbiAgICBpZiAoIWZvcm1Ob2RlLmhhc093blByb3BlcnR5KFwiaXRlbXNcIikgfHwgIWZvcm1Ob2RlLmhhc093blByb3BlcnR5KFwiYmluZEl0ZW1zXCIpIHx8IGZvcm1Ob2RlLmJpbmRJdGVtcy5pc0VtcHR5KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZm9ybU5vZGUuaXRlbXMuY2hpbGRyZW4pIHtcbiAgICAgIGZvcm1Ob2RlW194ZmFfb2JqZWN0LiRyZW1vdmVDaGlsZF0oaXRlbSk7XG4gICAgfVxuXG4gICAgZm9ybU5vZGUuaXRlbXMuY2xlYXIoKTtcbiAgICBjb25zdCBsYWJlbHMgPSBuZXcgX3RlbXBsYXRlLkl0ZW1zKHt9KTtcbiAgICBjb25zdCB2YWx1ZXMgPSBuZXcgX3RlbXBsYXRlLkl0ZW1zKHt9KTtcblxuICAgIGZvcm1Ob2RlW194ZmFfb2JqZWN0LiRhcHBlbmRDaGlsZF0obGFiZWxzKTtcblxuICAgIGZvcm1Ob2RlLml0ZW1zLnB1c2gobGFiZWxzKTtcblxuICAgIGZvcm1Ob2RlW194ZmFfb2JqZWN0LiRhcHBlbmRDaGlsZF0odmFsdWVzKTtcblxuICAgIGZvcm1Ob2RlLml0ZW1zLnB1c2godmFsdWVzKTtcblxuICAgIGZvciAoY29uc3Qge1xuICAgICAgcmVmLFxuICAgICAgbGFiZWxSZWYsXG4gICAgICB2YWx1ZVJlZixcbiAgICAgIGNvbm5lY3Rpb25cbiAgICB9IG9mIGZvcm1Ob2RlLmJpbmRJdGVtcy5jaGlsZHJlbikge1xuICAgICAgaWYgKGNvbm5lY3Rpb24pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICghcmVmKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBub2RlcyA9ICgwLCBfc29tLnNlYXJjaE5vZGUpKHRoaXMucm9vdCwgZGF0YU5vZGUsIHJlZiwgZmFsc2UsIGZhbHNlKTtcblxuICAgICAgaWYgKCFub2Rlcykge1xuICAgICAgICAoMCwgX3V0aWwud2FybikoYFhGQSAtIEludmFsaWQgcmVmZXJlbmNlOiAke3JlZn0uYCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICAgICAgaWYgKCFub2RlW194ZmFfb2JqZWN0LiRpc0Rlc2NlbmRlbnRdKHRoaXMuZGF0YXNldHMpKSB7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKGBYRkEgLSBJbnZhbGlkIHJlZiAoJHtyZWZ9KTogbXVzdCBiZSBhIGRhdGFzZXRzIGNoaWxkLmApO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGFiZWxOb2RlcyA9ICgwLCBfc29tLnNlYXJjaE5vZGUpKHRoaXMucm9vdCwgbm9kZSwgbGFiZWxSZWYsIHRydWUsIGZhbHNlKTtcblxuICAgICAgICBpZiAoIWxhYmVsTm9kZXMpIHtcbiAgICAgICAgICAoMCwgX3V0aWwud2FybikoYFhGQSAtIEludmFsaWQgbGFiZWw6ICR7bGFiZWxSZWZ9LmApO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgW2xhYmVsTm9kZV0gPSBsYWJlbE5vZGVzO1xuXG4gICAgICAgIGlmICghbGFiZWxOb2RlW194ZmFfb2JqZWN0LiRpc0Rlc2NlbmRlbnRdKHRoaXMuZGF0YXNldHMpKSB7XG4gICAgICAgICAgKDAsIF91dGlsLndhcm4pKGBYRkEgLSBJbnZhbGlkIGxhYmVsOiBtdXN0IGJlIGEgZGF0YXNldHMgY2hpbGQuYCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWx1ZU5vZGVzID0gKDAsIF9zb20uc2VhcmNoTm9kZSkodGhpcy5yb290LCBub2RlLCB2YWx1ZVJlZiwgdHJ1ZSwgZmFsc2UpO1xuXG4gICAgICAgIGlmICghdmFsdWVOb2Rlcykge1xuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShgWEZBIC0gSW52YWxpZCB2YWx1ZTogJHt2YWx1ZVJlZn0uYCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBbdmFsdWVOb2RlXSA9IHZhbHVlTm9kZXM7XG5cbiAgICAgICAgaWYgKCF2YWx1ZU5vZGVbX3hmYV9vYmplY3QuJGlzRGVzY2VuZGVudF0odGhpcy5kYXRhc2V0cykpIHtcbiAgICAgICAgICAoMCwgX3V0aWwud2FybikoYFhGQSAtIEludmFsaWQgdmFsdWU6IG11c3QgYmUgYSBkYXRhc2V0cyBjaGlsZC5gKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxhYmVsID0gY3JlYXRlVGV4dChsYWJlbE5vZGVbX3hmYV9vYmplY3QuJHRleHRdKCkpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGNyZWF0ZVRleHQodmFsdWVOb2RlW194ZmFfb2JqZWN0LiR0ZXh0XSgpKTtcblxuICAgICAgICBsYWJlbHNbX3hmYV9vYmplY3QuJGFwcGVuZENoaWxkXShsYWJlbCk7XG5cbiAgICAgICAgbGFiZWxzLnRleHQucHVzaChsYWJlbCk7XG5cbiAgICAgICAgdmFsdWVzW194ZmFfb2JqZWN0LiRhcHBlbmRDaGlsZF0odmFsdWUpO1xuXG4gICAgICAgIHZhbHVlcy50ZXh0LnB1c2godmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9iaW5kT2NjdXJyZW5jZXMoZm9ybU5vZGUsIG1hdGNoZXMsIHBpY3R1cmUpIHtcbiAgICBsZXQgYmFzZUNsb25lO1xuXG4gICAgaWYgKG1hdGNoZXMubGVuZ3RoID4gMSkge1xuICAgICAgYmFzZUNsb25lID0gZm9ybU5vZGVbX3hmYV9vYmplY3QuJGNsb25lXSgpO1xuXG4gICAgICBiYXNlQ2xvbmVbX3hmYV9vYmplY3QuJHJlbW92ZUNoaWxkXShiYXNlQ2xvbmUub2NjdXIpO1xuXG4gICAgICBiYXNlQ2xvbmUub2NjdXIgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2JpbmRWYWx1ZShmb3JtTm9kZSwgbWF0Y2hlc1swXSwgcGljdHVyZSk7XG5cbiAgICB0aGlzLl9zZXRQcm9wZXJ0aWVzKGZvcm1Ob2RlLCBtYXRjaGVzWzBdKTtcblxuICAgIHRoaXMuX2JpbmRJdGVtcyhmb3JtTm9kZSwgbWF0Y2hlc1swXSk7XG5cbiAgICBpZiAobWF0Y2hlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnQgPSBmb3JtTm9kZVtfeGZhX29iamVjdC4kZ2V0UGFyZW50XSgpO1xuXG4gICAgY29uc3QgbmFtZSA9IGZvcm1Ob2RlW194ZmFfb2JqZWN0LiRub2RlTmFtZV07XG5cbiAgICBjb25zdCBwb3MgPSBwYXJlbnRbX3hmYV9vYmplY3QuJGluZGV4T2ZdKGZvcm1Ob2RlKTtcblxuICAgIGZvciAobGV0IGkgPSAxLCBpaSA9IG1hdGNoZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgY29uc3QgbWF0Y2ggPSBtYXRjaGVzW2ldO1xuXG4gICAgICBjb25zdCBjbG9uZSA9IGJhc2VDbG9uZVtfeGZhX29iamVjdC4kY2xvbmVdKCk7XG5cbiAgICAgIHBhcmVudFtuYW1lXS5wdXNoKGNsb25lKTtcblxuICAgICAgcGFyZW50W194ZmFfb2JqZWN0LiRpbnNlcnRBdF0ocG9zICsgaSwgY2xvbmUpO1xuXG4gICAgICB0aGlzLl9iaW5kVmFsdWUoY2xvbmUsIG1hdGNoLCBwaWN0dXJlKTtcblxuICAgICAgdGhpcy5fc2V0UHJvcGVydGllcyhjbG9uZSwgbWF0Y2gpO1xuXG4gICAgICB0aGlzLl9iaW5kSXRlbXMoY2xvbmUsIG1hdGNoKTtcbiAgICB9XG4gIH1cblxuICBfY3JlYXRlT2NjdXJyZW5jZXMoZm9ybU5vZGUpIHtcbiAgICBpZiAoIXRoaXMuZW1wdHlNZXJnZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHtcbiAgICAgIG9jY3VyXG4gICAgfSA9IGZvcm1Ob2RlO1xuXG4gICAgaWYgKCFvY2N1ciB8fCBvY2N1ci5pbml0aWFsIDw9IDEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnQgPSBmb3JtTm9kZVtfeGZhX29iamVjdC4kZ2V0UGFyZW50XSgpO1xuXG4gICAgY29uc3QgbmFtZSA9IGZvcm1Ob2RlW194ZmFfb2JqZWN0LiRub2RlTmFtZV07XG5cbiAgICBpZiAoIShwYXJlbnRbbmFtZV0gaW5zdGFuY2VvZiBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgY3VycmVudE51bWJlcjtcblxuICAgIGlmIChmb3JtTm9kZS5uYW1lKSB7XG4gICAgICBjdXJyZW50TnVtYmVyID0gcGFyZW50W25hbWVdLmNoaWxkcmVuLmZpbHRlcihlID0+IGUubmFtZSA9PT0gZm9ybU5vZGUubmFtZSkubGVuZ3RoO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50TnVtYmVyID0gcGFyZW50W25hbWVdLmNoaWxkcmVuLmxlbmd0aDtcbiAgICB9XG5cbiAgICBjb25zdCBwb3MgPSBwYXJlbnRbX3hmYV9vYmplY3QuJGluZGV4T2ZdKGZvcm1Ob2RlKSArIDE7XG4gICAgY29uc3QgaWkgPSBvY2N1ci5pbml0aWFsIC0gY3VycmVudE51bWJlcjtcblxuICAgIGlmIChpaSkge1xuICAgICAgY29uc3Qgbm9kZUNsb25lID0gZm9ybU5vZGVbX3hmYV9vYmplY3QuJGNsb25lXSgpO1xuXG4gICAgICBub2RlQ2xvbmVbX3hmYV9vYmplY3QuJHJlbW92ZUNoaWxkXShub2RlQ2xvbmUub2NjdXIpO1xuXG4gICAgICBub2RlQ2xvbmUub2NjdXIgPSBudWxsO1xuICAgICAgcGFyZW50W25hbWVdLnB1c2gobm9kZUNsb25lKTtcblxuICAgICAgcGFyZW50W194ZmFfb2JqZWN0LiRpbnNlcnRBdF0ocG9zLCBub2RlQ2xvbmUpO1xuXG4gICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBub2RlQ2xvbmVbX3hmYV9vYmplY3QuJGNsb25lXSgpO1xuXG4gICAgICAgIHBhcmVudFtuYW1lXS5wdXNoKGNsb25lKTtcblxuICAgICAgICBwYXJlbnRbX3hmYV9vYmplY3QuJGluc2VydEF0XShwb3MgKyBpLCBjbG9uZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgX2dldE9jY3VySW5mbyhmb3JtTm9kZSkge1xuICAgIGNvbnN0IHtcbiAgICAgIG5hbWUsXG4gICAgICBvY2N1clxuICAgIH0gPSBmb3JtTm9kZTtcblxuICAgIGlmICghb2NjdXIgfHwgIW5hbWUpIHtcbiAgICAgIHJldHVybiBbMSwgMV07XG4gICAgfVxuXG4gICAgY29uc3QgbWF4ID0gb2NjdXIubWF4ID09PSAtMSA/IEluZmluaXR5IDogb2NjdXIubWF4O1xuICAgIHJldHVybiBbb2NjdXIubWluLCBtYXhdO1xuICB9XG5cbiAgX3NldEFuZEJpbmQoZm9ybU5vZGUsIGRhdGFOb2RlKSB7XG4gICAgdGhpcy5fc2V0UHJvcGVydGllcyhmb3JtTm9kZSwgZGF0YU5vZGUpO1xuXG4gICAgdGhpcy5fYmluZEl0ZW1zKGZvcm1Ob2RlLCBkYXRhTm9kZSk7XG5cbiAgICB0aGlzLl9iaW5kRWxlbWVudChmb3JtTm9kZSwgZGF0YU5vZGUpO1xuICB9XG5cbiAgX2JpbmRFbGVtZW50KGZvcm1Ob2RlLCBkYXRhTm9kZSkge1xuICAgIGNvbnN0IHVzZWxlc3NOb2RlcyA9IFtdO1xuXG4gICAgdGhpcy5fY3JlYXRlT2NjdXJyZW5jZXMoZm9ybU5vZGUpO1xuXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBmb3JtTm9kZVtfeGZhX29iamVjdC4kZ2V0Q2hpbGRyZW5dKCkpIHtcbiAgICAgIGlmIChjaGlsZFtfeGZhX29iamVjdC4kZGF0YV0pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9tZXJnZU1vZGUgPT09IHVuZGVmaW5lZCAmJiBjaGlsZFtfeGZhX29iamVjdC4kbm9kZU5hbWVdID09PSBcInN1YmZvcm1cIikge1xuICAgICAgICB0aGlzLl9tZXJnZU1vZGUgPSBjaGlsZC5tZXJnZU1vZGUgPT09IFwiY29uc3VtZURhdGFcIjtcblxuICAgICAgICBjb25zdCBkYXRhQ2hpbGRyZW4gPSBkYXRhTm9kZVtfeGZhX29iamVjdC4kZ2V0Q2hpbGRyZW5dKCk7XG5cbiAgICAgICAgaWYgKGRhdGFDaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5fYmluZE9jY3VycmVuY2VzKGNoaWxkLCBbZGF0YUNoaWxkcmVuWzBdXSwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5lbXB0eU1lcmdlKSB7XG4gICAgICAgICAgY29uc3QgbnNJZCA9IGRhdGFOb2RlW194ZmFfb2JqZWN0LiRuYW1lc3BhY2VJZF0gPT09IE5TX0RBVEFTRVRTID8gLTEgOiBkYXRhTm9kZVtfeGZhX29iamVjdC4kbmFtZXNwYWNlSWRdO1xuICAgICAgICAgIGNvbnN0IGRhdGFDaGlsZCA9IGNoaWxkW194ZmFfb2JqZWN0LiRkYXRhXSA9IG5ldyBfeGZhX29iamVjdC5YbWxPYmplY3QobnNJZCwgY2hpbGQubmFtZSB8fCBcInJvb3RcIik7XG5cbiAgICAgICAgICBkYXRhTm9kZVtfeGZhX29iamVjdC4kYXBwZW5kQ2hpbGRdKGRhdGFDaGlsZCk7XG5cbiAgICAgICAgICB0aGlzLl9iaW5kRWxlbWVudChjaGlsZCwgZGF0YUNoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWNoaWxkW194ZmFfb2JqZWN0LiRpc0JpbmRhYmxlXSgpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBsZXQgZ2xvYmFsID0gZmFsc2U7XG4gICAgICBsZXQgcGljdHVyZSA9IG51bGw7XG4gICAgICBsZXQgcmVmID0gbnVsbDtcbiAgICAgIGxldCBtYXRjaCA9IG51bGw7XG5cbiAgICAgIGlmIChjaGlsZC5iaW5kKSB7XG4gICAgICAgIHN3aXRjaCAoY2hpbGQuYmluZC5tYXRjaCkge1xuICAgICAgICAgIGNhc2UgXCJub25lXCI6XG4gICAgICAgICAgICB0aGlzLl9zZXRBbmRCaW5kKGNoaWxkLCBkYXRhTm9kZSk7XG5cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgICAgY2FzZSBcImdsb2JhbFwiOlxuICAgICAgICAgICAgZ2xvYmFsID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcImRhdGFSZWZcIjpcbiAgICAgICAgICAgIGlmICghY2hpbGQuYmluZC5yZWYpIHtcbiAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKGBYRkEgLSByZWYgaXMgZW1wdHkgaW4gbm9kZSAke2NoaWxkW194ZmFfb2JqZWN0LiRub2RlTmFtZV19LmApO1xuXG4gICAgICAgICAgICAgIHRoaXMuX3NldEFuZEJpbmQoY2hpbGQsIGRhdGFOb2RlKTtcblxuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVmID0gY2hpbGQuYmluZC5yZWY7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGlsZC5iaW5kLnBpY3R1cmUpIHtcbiAgICAgICAgICBwaWN0dXJlID0gY2hpbGQuYmluZC5waWN0dXJlW194ZmFfb2JqZWN0LiRjb250ZW50XTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBbbWluLCBtYXhdID0gdGhpcy5fZ2V0T2NjdXJJbmZvKGNoaWxkKTtcblxuICAgICAgaWYgKHJlZikge1xuICAgICAgICBtYXRjaCA9ICgwLCBfc29tLnNlYXJjaE5vZGUpKHRoaXMucm9vdCwgZGF0YU5vZGUsIHJlZiwgdHJ1ZSwgZmFsc2UpO1xuXG4gICAgICAgIGlmIChtYXRjaCA9PT0gbnVsbCkge1xuICAgICAgICAgIG1hdGNoID0gKDAsIF9zb20uY3JlYXRlRGF0YU5vZGUpKHRoaXMuZGF0YSwgZGF0YU5vZGUsIHJlZik7XG5cbiAgICAgICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy5faXNDb25zdW1lRGF0YSgpKSB7XG4gICAgICAgICAgICBtYXRjaFtfeGZhX29iamVjdC4kY29uc3VtZWRdID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLl9zZXRBbmRCaW5kKGNoaWxkLCBtYXRjaCk7XG5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5faXNDb25zdW1lRGF0YSgpKSB7XG4gICAgICAgICAgICBtYXRjaCA9IG1hdGNoLmZpbHRlcihub2RlID0+ICFub2RlW194ZmFfb2JqZWN0LiRjb25zdW1lZF0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChtYXRjaC5sZW5ndGggPiBtYXgpIHtcbiAgICAgICAgICAgIG1hdGNoID0gbWF0Y2guc2xpY2UoMCwgbWF4KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG1hdGNoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgbWF0Y2ggPSBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChtYXRjaCAmJiB0aGlzLl9pc0NvbnN1bWVEYXRhKCkpIHtcbiAgICAgICAgICAgIG1hdGNoLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgICAgIG5vZGVbX3hmYV9vYmplY3QuJGNvbnN1bWVkXSA9IHRydWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghY2hpbGQubmFtZSkge1xuICAgICAgICAgIHRoaXMuX3NldEFuZEJpbmQoY2hpbGQsIGRhdGFOb2RlKTtcblxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2lzQ29uc3VtZURhdGEoKSkge1xuICAgICAgICAgIGNvbnN0IG1hdGNoZXMgPSBbXTtcblxuICAgICAgICAgIHdoaWxlIChtYXRjaGVzLmxlbmd0aCA8IG1heCkge1xuICAgICAgICAgICAgY29uc3QgZm91bmQgPSB0aGlzLl9maW5kRGF0YUJ5TmFtZVRvQ29uc3VtZShjaGlsZC5uYW1lLCBjaGlsZFtfeGZhX29iamVjdC4kaGFzU2V0dGFibGVWYWx1ZV0oKSwgZGF0YU5vZGUsIGdsb2JhbCk7XG5cbiAgICAgICAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvdW5kW194ZmFfb2JqZWN0LiRjb25zdW1lZF0gPSB0cnVlO1xuICAgICAgICAgICAgbWF0Y2hlcy5wdXNoKGZvdW5kKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBtYXRjaCA9IG1hdGNoZXMubGVuZ3RoID4gMCA/IG1hdGNoZXMgOiBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1hdGNoID0gZGF0YU5vZGVbX3hmYV9vYmplY3QuJGdldFJlYWxDaGlsZHJlbkJ5TmFtZUl0XShjaGlsZC5uYW1lLCBmYWxzZSwgdGhpcy5lbXB0eU1lcmdlKS5uZXh0KCkudmFsdWU7XG5cbiAgICAgICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgICAgICBpZiAobWluID09PSAwKSB7XG4gICAgICAgICAgICAgIHVzZWxlc3NOb2Rlcy5wdXNoKGNoaWxkKTtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG5zSWQgPSBkYXRhTm9kZVtfeGZhX29iamVjdC4kbmFtZXNwYWNlSWRdID09PSBOU19EQVRBU0VUUyA/IC0xIDogZGF0YU5vZGVbX3hmYV9vYmplY3QuJG5hbWVzcGFjZUlkXTtcbiAgICAgICAgICAgIG1hdGNoID0gY2hpbGRbX3hmYV9vYmplY3QuJGRhdGFdID0gbmV3IF94ZmFfb2JqZWN0LlhtbE9iamVjdChuc0lkLCBjaGlsZC5uYW1lKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZW1wdHlNZXJnZSkge1xuICAgICAgICAgICAgICBtYXRjaFtfeGZhX29iamVjdC4kY29uc3VtZWRdID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGF0YU5vZGVbX3hmYV9vYmplY3QuJGFwcGVuZENoaWxkXShtYXRjaCk7XG5cbiAgICAgICAgICAgIHRoaXMuX3NldEFuZEJpbmQoY2hpbGQsIG1hdGNoKTtcblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMuZW1wdHlNZXJnZSkge1xuICAgICAgICAgICAgbWF0Y2hbX3hmYV9vYmplY3QuJGNvbnN1bWVkXSA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbWF0Y2ggPSBbbWF0Y2hdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICB0aGlzLl9iaW5kT2NjdXJyZW5jZXMoY2hpbGQsIG1hdGNoLCBwaWN0dXJlKTtcbiAgICAgIH0gZWxzZSBpZiAobWluID4gMCkge1xuICAgICAgICB0aGlzLl9zZXRBbmRCaW5kKGNoaWxkLCBkYXRhTm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1c2VsZXNzTm9kZXMucHVzaChjaGlsZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdXNlbGVzc05vZGVzLmZvckVhY2gobm9kZSA9PiBub2RlW194ZmFfb2JqZWN0LiRnZXRQYXJlbnRdKClbX3hmYV9vYmplY3QuJHJlbW92ZUNoaWxkXShub2RlKSk7XG4gIH1cblxufVxuXG5leHBvcnRzLkJpbmRlciA9IEJpbmRlcjtcblxuLyoqKi8gfSksXG4vKiA4MCAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5WYWx1ZSA9IGV4cG9ydHMuVGV4dCA9IGV4cG9ydHMuVGVtcGxhdGVOYW1lc3BhY2UgPSBleHBvcnRzLlRlbXBsYXRlID0gZXhwb3J0cy5TZXRQcm9wZXJ0eSA9IGV4cG9ydHMuSXRlbXMgPSBleHBvcnRzLkZpZWxkID0gZXhwb3J0cy5CaW5kSXRlbXMgPSB2b2lkIDA7XG5cbnZhciBfeGZhX29iamVjdCA9IF9fd19wZGZqc19yZXF1aXJlX18oNzUpO1xuXG52YXIgX25hbWVzcGFjZXMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDc3KTtcblxudmFyIF9sYXlvdXQgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDgxKTtcblxudmFyIF9odG1sX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXyg4Mik7XG5cbnZhciBfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDc2KTtcblxudmFyIF91dGlsID0gX193X3BkZmpzX3JlcXVpcmVfXygyKTtcblxudmFyIF9mb250cyA9IF9fd19wZGZqc19yZXF1aXJlX18oODMpO1xuXG52YXIgX2NvcmVfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDkpO1xuXG52YXIgX3NvbSA9IF9fd19wZGZqc19yZXF1aXJlX18oNzgpO1xuXG5jb25zdCBURU1QTEFURV9OU19JRCA9IF9uYW1lc3BhY2VzLk5hbWVzcGFjZUlkcy50ZW1wbGF0ZS5pZDtcbmNvbnN0IFNWR19OUyA9IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIjtcbmNvbnN0IE1BWF9BVFRFTVBUU19GT1JfTFJUQl9MQVlPVVQgPSAyO1xuY29uc3QgTUFYX0VNUFRZX1BBR0VTID0gMztcbmNvbnN0IERFRkFVTFRfVEFCX0lOREVYID0gNTAwMDtcbmNvbnN0IEhFQURJTkdfUEFUVEVSTiA9IC9eSChcXGQrKSQvO1xuY29uc3QgTUlNRVMgPSBuZXcgU2V0KFtcImltYWdlL2dpZlwiLCBcImltYWdlL2pwZWdcIiwgXCJpbWFnZS9qcGdcIiwgXCJpbWFnZS9wanBlZ1wiLCBcImltYWdlL3BuZ1wiLCBcImltYWdlL2FwbmdcIiwgXCJpbWFnZS94LXBuZ1wiLCBcImltYWdlL2JtcFwiLCBcImltYWdlL3gtbXMtYm1wXCIsIFwiaW1hZ2UvdGlmZlwiLCBcImltYWdlL3RpZlwiLCBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiXSk7XG5jb25zdCBJTUFHRVNfSEVBREVSUyA9IFtbWzB4NDIsIDB4NGRdLCBcImltYWdlL2JtcFwiXSwgW1sweGZmLCAweGQ4LCAweGZmXSwgXCJpbWFnZS9qcGVnXCJdLCBbWzB4NDksIDB4NDksIDB4MmEsIDB4MDBdLCBcImltYWdlL3RpZmZcIl0sIFtbMHg0ZCwgMHg0ZCwgMHgwMCwgMHgyYV0sIFwiaW1hZ2UvdGlmZlwiXSwgW1sweDQ3LCAweDQ5LCAweDQ2LCAweDM4LCAweDM5LCAweDYxXSwgXCJpbWFnZS9naWZcIl0sIFtbMHg4OSwgMHg1MCwgMHg0ZSwgMHg0NywgMHgwZCwgMHgwYSwgMHgxYSwgMHgwYV0sIFwiaW1hZ2UvcG5nXCJdXTtcblxuZnVuY3Rpb24gZ2V0Qm9yZGVyRGltcyhub2RlKSB7XG4gIGlmICghbm9kZSB8fCAhbm9kZS5ib3JkZXIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdzogMCxcbiAgICAgIGg6IDBcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgYm9yZGVyRXh0cmEgPSBub2RlLmJvcmRlcltfeGZhX29iamVjdC4kZ2V0RXh0cmFdKCk7XG5cbiAgaWYgKCFib3JkZXJFeHRyYSkge1xuICAgIHJldHVybiB7XG4gICAgICB3OiAwLFxuICAgICAgaDogMFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHc6IGJvcmRlckV4dHJhLndpZHRoc1swXSArIGJvcmRlckV4dHJhLndpZHRoc1syXSArIGJvcmRlckV4dHJhLmluc2V0c1swXSArIGJvcmRlckV4dHJhLmluc2V0c1syXSxcbiAgICBoOiBib3JkZXJFeHRyYS53aWR0aHNbMV0gKyBib3JkZXJFeHRyYS53aWR0aHNbM10gKyBib3JkZXJFeHRyYS5pbnNldHNbMV0gKyBib3JkZXJFeHRyYS5pbnNldHNbM11cbiAgfTtcbn1cblxuZnVuY3Rpb24gaGFzTWFyZ2luKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUubWFyZ2luICYmIChub2RlLm1hcmdpbi50b3BJbnNldCB8fCBub2RlLm1hcmdpbi5yaWdodEluc2V0IHx8IG5vZGUubWFyZ2luLmJvdHRvbUluc2V0IHx8IG5vZGUubWFyZ2luLmxlZnRJbnNldCk7XG59XG5cbmZ1bmN0aW9uIF9zZXRWYWx1ZSh0ZW1wbGF0ZU5vZGUsIHZhbHVlKSB7XG4gIGlmICghdGVtcGxhdGVOb2RlLnZhbHVlKSB7XG4gICAgY29uc3Qgbm9kZVZhbHVlID0gbmV3IFZhbHVlKHt9KTtcblxuICAgIHRlbXBsYXRlTm9kZVtfeGZhX29iamVjdC4kYXBwZW5kQ2hpbGRdKG5vZGVWYWx1ZSk7XG5cbiAgICB0ZW1wbGF0ZU5vZGUudmFsdWUgPSBub2RlVmFsdWU7XG4gIH1cblxuICB0ZW1wbGF0ZU5vZGUudmFsdWVbX3hmYV9vYmplY3QuJHNldFZhbHVlXSh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uKiBnZXRDb250YWluZWRDaGlsZHJlbihub2RlKSB7XG4gIGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZVtfeGZhX29iamVjdC4kZ2V0Q2hpbGRyZW5dKCkpIHtcbiAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBTdWJmb3JtU2V0KSB7XG4gICAgICB5aWVsZCogY2hpbGRbX3hmYV9vYmplY3QuJGdldENvbnRhaW5lZENoaWxkcmVuXSgpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgeWllbGQgY2hpbGQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0VGFiSW5kZXgobm9kZSkge1xuICB3aGlsZSAobm9kZSkge1xuICAgIGlmICghbm9kZS50cmF2ZXJzYWwpIHtcbiAgICAgIG5vZGVbX3hmYV9vYmplY3QuJHRhYkluZGV4XSA9IG5vZGVbX3hmYV9vYmplY3QuJGdldFBhcmVudF0oKVtfeGZhX29iamVjdC4kdGFiSW5kZXhdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChub2RlW194ZmFfb2JqZWN0LiR0YWJJbmRleF0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgbmV4dCA9IG51bGw7XG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUudHJhdmVyc2FsW194ZmFfb2JqZWN0LiRnZXRDaGlsZHJlbl0oKSkge1xuICAgICAgaWYgKGNoaWxkLm9wZXJhdGlvbiA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgbmV4dCA9IGNoaWxkO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIW5leHQgfHwgIW5leHQucmVmKSB7XG4gICAgICBub2RlW194ZmFfb2JqZWN0LiR0YWJJbmRleF0gPSBub2RlW194ZmFfb2JqZWN0LiRnZXRQYXJlbnRdKClbX3hmYV9vYmplY3QuJHRhYkluZGV4XTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByb290ID0gbm9kZVtfeGZhX29iamVjdC4kZ2V0VGVtcGxhdGVSb290XSgpO1xuXG4gICAgbm9kZVtfeGZhX29iamVjdC4kdGFiSW5kZXhdID0gKytyb290W194ZmFfb2JqZWN0LiR0YWJJbmRleF07XG5cbiAgICBjb25zdCByZWYgPSByb290W194ZmFfb2JqZWN0LiRzZWFyY2hOb2RlXShuZXh0LnJlZiwgbm9kZSk7XG5cbiAgICBpZiAoIXJlZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG5vZGUgPSByZWZbMF07XG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwbHlBc3Npc3Qob2JqLCBhdHRyaWJ1dGVzKSB7XG4gIGNvbnN0IGFzc2lzdCA9IG9iai5hc3Npc3Q7XG5cbiAgaWYgKGFzc2lzdCkge1xuICAgIGNvbnN0IGFzc2lzdFRpdGxlID0gYXNzaXN0W194ZmFfb2JqZWN0LiR0b0hUTUxdKCk7XG5cbiAgICBpZiAoYXNzaXN0VGl0bGUpIHtcbiAgICAgIGF0dHJpYnV0ZXMudGl0bGUgPSBhc3Npc3RUaXRsZTtcbiAgICB9XG5cbiAgICBjb25zdCByb2xlID0gYXNzaXN0LnJvbGU7XG4gICAgY29uc3QgbWF0Y2ggPSByb2xlLm1hdGNoKEhFQURJTkdfUEFUVEVSTik7XG5cbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIGNvbnN0IGFyaWFSb2xlID0gXCJoZWFkaW5nXCI7XG4gICAgICBjb25zdCBhcmlhTGV2ZWwgPSBtYXRjaFsxXTtcbiAgICAgIGF0dHJpYnV0ZXMucm9sZSA9IGFyaWFSb2xlO1xuICAgICAgYXR0cmlidXRlc1tcImFyaWEtbGV2ZWxcIl0gPSBhcmlhTGV2ZWw7XG4gICAgfVxuICB9XG5cbiAgaWYgKG9iai5sYXlvdXQgPT09IFwidGFibGVcIikge1xuICAgIGF0dHJpYnV0ZXMucm9sZSA9IFwidGFibGVcIjtcbiAgfSBlbHNlIGlmIChvYmoubGF5b3V0ID09PSBcInJvd1wiKSB7XG4gICAgYXR0cmlidXRlcy5yb2xlID0gXCJyb3dcIjtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBwYXJlbnQgPSBvYmpbX3hmYV9vYmplY3QuJGdldFBhcmVudF0oKTtcblxuICAgIGlmIChwYXJlbnQubGF5b3V0ID09PSBcInJvd1wiKSB7XG4gICAgICBpZiAocGFyZW50LmFzc2lzdCAmJiBwYXJlbnQuYXNzaXN0LnJvbGUgPT09IFwiVEhcIikge1xuICAgICAgICBhdHRyaWJ1dGVzLnJvbGUgPSBcImNvbHVtbmhlYWRlclwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXR0cmlidXRlcy5yb2xlID0gXCJjZWxsXCI7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFyaWFMYWJlbChvYmopIHtcbiAgaWYgKCFvYmouYXNzaXN0KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBhc3Npc3QgPSBvYmouYXNzaXN0O1xuXG4gIGlmIChhc3Npc3Quc3BlYWsgJiYgYXNzaXN0LnNwZWFrW194ZmFfb2JqZWN0LiRjb250ZW50XSAhPT0gXCJcIikge1xuICAgIHJldHVybiBhc3Npc3Quc3BlYWtbX3hmYV9vYmplY3QuJGNvbnRlbnRdO1xuICB9XG5cbiAgaWYgKGFzc2lzdC50b29sVGlwKSB7XG4gICAgcmV0dXJuIGFzc2lzdC50b29sVGlwW194ZmFfb2JqZWN0LiRjb250ZW50XTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiB2YWx1ZVRvSHRtbCh2YWx1ZSkge1xuICByZXR1cm4gX3V0aWxzLkhUTUxSZXN1bHQuc3VjY2Vzcyh7XG4gICAgbmFtZTogXCJkaXZcIixcbiAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICBjbGFzczogW1wieGZhUmljaFwiXSxcbiAgICAgIHN0eWxlOiBPYmplY3QuY3JlYXRlKG51bGwpXG4gICAgfSxcbiAgICBjaGlsZHJlbjogW3tcbiAgICAgIG5hbWU6IFwic3BhblwiLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBzdHlsZTogT2JqZWN0LmNyZWF0ZShudWxsKVxuICAgICAgfSxcbiAgICAgIHZhbHVlXG4gICAgfV1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHNldEZpcnN0VW5zcGxpdHRhYmxlKG5vZGUpIHtcbiAgY29uc3Qgcm9vdCA9IG5vZGVbX3hmYV9vYmplY3QuJGdldFRlbXBsYXRlUm9vdF0oKTtcblxuICBpZiAocm9vdFtfeGZhX29iamVjdC4kZXh0cmFdLmZpcnN0VW5zcGxpdHRhYmxlID09PSBudWxsKSB7XG4gICAgcm9vdFtfeGZhX29iamVjdC4kZXh0cmFdLmZpcnN0VW5zcGxpdHRhYmxlID0gbm9kZTtcbiAgICByb290W194ZmFfb2JqZWN0LiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlID0gdHJ1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bnNldEZpcnN0VW5zcGxpdHRhYmxlKG5vZGUpIHtcbiAgY29uc3Qgcm9vdCA9IG5vZGVbX3hmYV9vYmplY3QuJGdldFRlbXBsYXRlUm9vdF0oKTtcblxuICBpZiAocm9vdFtfeGZhX29iamVjdC4kZXh0cmFdLmZpcnN0VW5zcGxpdHRhYmxlID09PSBub2RlKSB7XG4gICAgcm9vdFtfeGZhX29iamVjdC4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZSA9IGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUJyZWFrKG5vZGUpIHtcbiAgaWYgKG5vZGVbX3hmYV9vYmplY3QuJGV4dHJhXSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIG5vZGVbX3hmYV9vYmplY3QuJGV4dHJhXSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgaWYgKG5vZGUudGFyZ2V0VHlwZSA9PT0gXCJhdXRvXCIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCByb290ID0gbm9kZVtfeGZhX29iamVjdC4kZ2V0VGVtcGxhdGVSb290XSgpO1xuXG4gIGxldCB0YXJnZXQgPSBudWxsO1xuXG4gIGlmIChub2RlLnRhcmdldCkge1xuICAgIHRhcmdldCA9IHJvb3RbX3hmYV9vYmplY3QuJHNlYXJjaE5vZGVdKG5vZGUudGFyZ2V0LCBub2RlW194ZmFfb2JqZWN0LiRnZXRQYXJlbnRdKCkpO1xuXG4gICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0YXJnZXQgPSB0YXJnZXRbMF07XG4gIH1cblxuICBjb25zdCB7XG4gICAgY3VycmVudFBhZ2VBcmVhLFxuICAgIGN1cnJlbnRDb250ZW50QXJlYVxuICB9ID0gcm9vdFtfeGZhX29iamVjdC4kZXh0cmFdO1xuXG4gIGlmIChub2RlLnRhcmdldFR5cGUgPT09IFwicGFnZUFyZWFcIikge1xuICAgIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIFBhZ2VBcmVhKSkge1xuICAgICAgdGFyZ2V0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAobm9kZS5zdGFydE5ldykge1xuICAgICAgbm9kZVtfeGZhX29iamVjdC4kZXh0cmFdLnRhcmdldCA9IHRhcmdldCB8fCBjdXJyZW50UGFnZUFyZWE7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHRhcmdldCAmJiB0YXJnZXQgIT09IGN1cnJlbnRQYWdlQXJlYSkge1xuICAgICAgbm9kZVtfeGZhX29iamVjdC4kZXh0cmFdLnRhcmdldCA9IHRhcmdldDtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIENvbnRlbnRBcmVhKSkge1xuICAgIHRhcmdldCA9IG51bGw7XG4gIH1cblxuICBjb25zdCBwYWdlQXJlYSA9IHRhcmdldCAmJiB0YXJnZXRbX3hmYV9vYmplY3QuJGdldFBhcmVudF0oKTtcblxuICBsZXQgaW5kZXg7XG4gIGxldCBuZXh0UGFnZUFyZWEgPSBwYWdlQXJlYTtcblxuICBpZiAobm9kZS5zdGFydE5ldykge1xuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnRBcmVhcyA9IHBhZ2VBcmVhLmNvbnRlbnRBcmVhLmNoaWxkcmVuO1xuICAgICAgY29uc3QgaW5kZXhGb3JDdXJyZW50ID0gY29udGVudEFyZWFzLmluZGV4T2YoY3VycmVudENvbnRlbnRBcmVhKTtcbiAgICAgIGNvbnN0IGluZGV4Rm9yVGFyZ2V0ID0gY29udGVudEFyZWFzLmluZGV4T2YodGFyZ2V0KTtcblxuICAgICAgaWYgKGluZGV4Rm9yQ3VycmVudCAhPT0gLTEgJiYgaW5kZXhGb3JDdXJyZW50IDwgaW5kZXhGb3JUYXJnZXQpIHtcbiAgICAgICAgbmV4dFBhZ2VBcmVhID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaW5kZXggPSBpbmRleEZvclRhcmdldCAtIDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZGV4ID0gY3VycmVudFBhZ2VBcmVhLmNvbnRlbnRBcmVhLmNoaWxkcmVuLmluZGV4T2YoY3VycmVudENvbnRlbnRBcmVhKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodGFyZ2V0ICYmIHRhcmdldCAhPT0gY3VycmVudENvbnRlbnRBcmVhKSB7XG4gICAgY29uc3QgY29udGVudEFyZWFzID0gcGFnZUFyZWEuY29udGVudEFyZWEuY2hpbGRyZW47XG4gICAgaW5kZXggPSBjb250ZW50QXJlYXMuaW5kZXhPZih0YXJnZXQpIC0gMTtcbiAgICBuZXh0UGFnZUFyZWEgPSBwYWdlQXJlYSA9PT0gY3VycmVudFBhZ2VBcmVhID8gbnVsbCA6IHBhZ2VBcmVhO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIG5vZGVbX3hmYV9vYmplY3QuJGV4dHJhXS50YXJnZXQgPSBuZXh0UGFnZUFyZWE7XG4gIG5vZGVbX3hmYV9vYmplY3QuJGV4dHJhXS5pbmRleCA9IGluZGV4O1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlT3ZlcmZsb3cobm9kZSwgZXh0cmFOb2RlLCBzcGFjZSkge1xuICBjb25zdCByb290ID0gbm9kZVtfeGZhX29iamVjdC4kZ2V0VGVtcGxhdGVSb290XSgpO1xuXG4gIGNvbnN0IHNhdmVkID0gcm9vdFtfeGZhX29iamVjdC4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZTtcbiAgY29uc3Qgc2F2ZWRNZXRob2QgPSBleHRyYU5vZGVbX3hmYV9vYmplY3QuJGdldFN1YmZvcm1QYXJlbnRdO1xuXG4gIGV4dHJhTm9kZVtfeGZhX29iamVjdC4kZ2V0U3ViZm9ybVBhcmVudF0gPSAoKSA9PiBub2RlO1xuXG4gIHJvb3RbX3hmYV9vYmplY3QuJGV4dHJhXS5ub0xheW91dEZhaWx1cmUgPSB0cnVlO1xuXG4gIGNvbnN0IHJlcyA9IGV4dHJhTm9kZVtfeGZhX29iamVjdC4kdG9IVE1MXShzcGFjZSk7XG5cbiAgbm9kZVtfeGZhX29iamVjdC4kYWRkSFRNTF0ocmVzLmh0bWwsIHJlcy5iYm94KTtcblxuICByb290W194ZmFfb2JqZWN0LiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlID0gc2F2ZWQ7XG4gIGV4dHJhTm9kZVtfeGZhX29iamVjdC4kZ2V0U3ViZm9ybVBhcmVudF0gPSBzYXZlZE1ldGhvZDtcbn1cblxuY2xhc3MgQXBwZWFyYW5jZUZpbHRlciBleHRlbmRzIF94ZmFfb2JqZWN0LlN0cmluZ09iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJhcHBlYXJhbmNlRmlsdGVyXCIpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy50eXBlID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMudHlwZSwgW1wib3B0aW9uYWxcIiwgXCJyZXF1aXJlZFwiXSk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICB9XG5cbn1cblxuY2xhc3MgQXJjIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImFyY1wiLCB0cnVlKTtcbiAgICB0aGlzLmNpcmN1bGFyID0gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLmNpcmN1bGFyLFxuICAgICAgZGVmYXVsdFZhbHVlOiAwLFxuICAgICAgdmFsaWRhdGU6IHggPT4geCA9PT0gMVxuICAgIH0pO1xuICAgIHRoaXMuaGFuZCA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLmhhbmQsIFtcImV2ZW5cIiwgXCJsZWZ0XCIsIFwicmlnaHRcIl0pO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5zdGFydEFuZ2xlID0gKDAsIF91dGlscy5nZXRGbG9hdCkoe1xuICAgICAgZGF0YTogYXR0cmlidXRlcy5zdGFydEFuZ2xlLFxuICAgICAgZGVmYXVsdFZhbHVlOiAwLFxuICAgICAgdmFsaWRhdGU6IHggPT4gdHJ1ZVxuICAgIH0pO1xuICAgIHRoaXMuc3dlZXBBbmdsZSA9ICgwLCBfdXRpbHMuZ2V0RmxvYXQpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMuc3dlZXBBbmdsZSxcbiAgICAgIGRlZmF1bHRWYWx1ZTogMzYwLFxuICAgICAgdmFsaWRhdGU6IHggPT4gdHJ1ZVxuICAgIH0pO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmVkZ2UgPSBudWxsO1xuICAgIHRoaXMuZmlsbCA9IG51bGw7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJHRvSFRNTF0oKSB7XG4gICAgY29uc3QgZWRnZSA9IHRoaXMuZWRnZSA/IHRoaXMuZWRnZSA6IG5ldyBFZGdlKHt9KTtcblxuICAgIGNvbnN0IGVkZ2VTdHlsZSA9IGVkZ2VbX3hmYV9vYmplY3QuJHRvU3R5bGVdKCk7XG5cbiAgICBjb25zdCBzdHlsZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICBpZiAodGhpcy5maWxsICYmIHRoaXMuZmlsbC5wcmVzZW5jZSA9PT0gXCJ2aXNpYmxlXCIpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oc3R5bGUsIHRoaXMuZmlsbFtfeGZhX29iamVjdC4kdG9TdHlsZV0oKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlLmZpbGwgPSBcInRyYW5zcGFyZW50XCI7XG4gICAgfVxuXG4gICAgc3R5bGUuc3Ryb2tlV2lkdGggPSAoMCwgX2h0bWxfdXRpbHMubWVhc3VyZVRvU3RyaW5nKShlZGdlLnByZXNlbmNlID09PSBcInZpc2libGVcIiA/IGVkZ2UudGhpY2tuZXNzIDogMCk7XG4gICAgc3R5bGUuc3Ryb2tlID0gZWRnZVN0eWxlLmNvbG9yO1xuICAgIGxldCBhcmM7XG4gICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgIHhtbG5zOiBTVkdfTlMsXG4gICAgICBzdHlsZToge1xuICAgICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgICAgIG92ZXJmbG93OiBcInZpc2libGVcIlxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAodGhpcy5zd2VlcEFuZ2xlID09PSAzNjApIHtcbiAgICAgIGFyYyA9IHtcbiAgICAgICAgbmFtZTogXCJlbGxpcHNlXCIsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICB4bWxuczogU1ZHX05TLFxuICAgICAgICAgIGN4OiBcIjUwJVwiLFxuICAgICAgICAgIGN5OiBcIjUwJVwiLFxuICAgICAgICAgIHJ4OiBcIjUwJVwiLFxuICAgICAgICAgIHJ5OiBcIjUwJVwiLFxuICAgICAgICAgIHN0eWxlXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHN0YXJ0QW5nbGUgPSB0aGlzLnN0YXJ0QW5nbGUgKiBNYXRoLlBJIC8gMTgwO1xuICAgICAgY29uc3Qgc3dlZXBBbmdsZSA9IHRoaXMuc3dlZXBBbmdsZSAqIE1hdGguUEkgLyAxODA7XG4gICAgICBjb25zdCBsYXJnZUFyYyA9IHRoaXMuc3dlZXBBbmdsZSA+IDE4MCA/IDEgOiAwO1xuICAgICAgY29uc3QgW3gxLCB5MSwgeDIsIHkyXSA9IFs1MCAqICgxICsgTWF0aC5jb3Moc3RhcnRBbmdsZSkpLCA1MCAqICgxIC0gTWF0aC5zaW4oc3RhcnRBbmdsZSkpLCA1MCAqICgxICsgTWF0aC5jb3Moc3RhcnRBbmdsZSArIHN3ZWVwQW5nbGUpKSwgNTAgKiAoMSAtIE1hdGguc2luKHN0YXJ0QW5nbGUgKyBzd2VlcEFuZ2xlKSldO1xuICAgICAgYXJjID0ge1xuICAgICAgICBuYW1lOiBcInBhdGhcIixcbiAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgIHhtbG5zOiBTVkdfTlMsXG4gICAgICAgICAgZDogYE0gJHt4MX0gJHt5MX0gQSA1MCA1MCAwICR7bGFyZ2VBcmN9IDAgJHt4Mn0gJHt5Mn1gLFxuICAgICAgICAgIHZlY3RvckVmZmVjdDogXCJub24tc2NhbGluZy1zdHJva2VcIixcbiAgICAgICAgICBzdHlsZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgT2JqZWN0LmFzc2lnbihhdHRyaWJ1dGVzLCB7XG4gICAgICAgIHZpZXdCb3g6IFwiMCAwIDEwMCAxMDBcIixcbiAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbzogXCJub25lXCJcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHN2ZyA9IHtcbiAgICAgIG5hbWU6IFwic3ZnXCIsXG4gICAgICBjaGlsZHJlbjogW2FyY10sXG4gICAgICBhdHRyaWJ1dGVzXG4gICAgfTtcblxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXNbX3hmYV9vYmplY3QuJGdldFBhcmVudF0oKVtfeGZhX29iamVjdC4kZ2V0UGFyZW50XSgpO1xuXG4gICAgaWYgKGhhc01hcmdpbihwYXJlbnQpKSB7XG4gICAgICByZXR1cm4gX3V0aWxzLkhUTUxSZXN1bHQuc3VjY2Vzcyh7XG4gICAgICAgIG5hbWU6IFwiZGl2XCIsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgZGlzcGxheTogXCJpbmxpbmVcIixcbiAgICAgICAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgICAgICAgIGhlaWdodDogXCIxMDAlXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNoaWxkcmVuOiBbc3ZnXVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3ZnLmF0dHJpYnV0ZXMuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG4gICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LnN1Y2Nlc3Moc3ZnKTtcbiAgfVxuXG59XG5cbmNsYXNzIEFyZWEgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwiYXJlYVwiLCB0cnVlKTtcbiAgICB0aGlzLmNvbFNwYW4gPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMuY29sU3BhbixcbiAgICAgIGRlZmF1bHRWYWx1ZTogMSxcbiAgICAgIHZhbGlkYXRlOiBuID0+IG4gPj0gMSB8fCBuID09PSAtMVxuICAgIH0pO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8IFwiXCI7XG4gICAgdGhpcy5yZWxldmFudCA9ICgwLCBfdXRpbHMuZ2V0UmVsZXZhbnQpKGF0dHJpYnV0ZXMucmVsZXZhbnQpO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLnggPSAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KShhdHRyaWJ1dGVzLngsIFwiMHB0XCIpO1xuICAgIHRoaXMueSA9ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMueSwgXCIwcHRcIik7XG4gICAgdGhpcy5kZXNjID0gbnVsbDtcbiAgICB0aGlzLmV4dHJhcyA9IG51bGw7XG4gICAgdGhpcy5hcmVhID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5kcmF3ID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5leE9iamVjdCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZXhjbEdyb3VwID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5maWVsZCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuc3ViZm9ybSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuc3ViZm9ybVNldCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICB9XG5cbiAgKltfeGZhX29iamVjdC4kZ2V0Q29udGFpbmVkQ2hpbGRyZW5dKCkge1xuICAgIHlpZWxkKiBnZXRDb250YWluZWRDaGlsZHJlbih0aGlzKTtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kaXNUcmFuc3BhcmVudF0oKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGlzQmluZGFibGVdKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRhZGRIVE1MXShodG1sLCBiYm94KSB7XG4gICAgY29uc3QgW3gsIHksIHcsIGhdID0gYmJveDtcbiAgICB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0ud2lkdGggPSBNYXRoLm1heCh0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0ud2lkdGgsIHggKyB3KTtcbiAgICB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0uaGVpZ2h0ID0gTWF0aC5tYXgodGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLmhlaWdodCwgeSArIGgpO1xuXG4gICAgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLmNoaWxkcmVuLnB1c2goaHRtbCk7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGdldEF2YWlsYWJsZVNwYWNlXSgpIHtcbiAgICByZXR1cm4gdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLmF2YWlsYWJsZVNwYWNlO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiR0b0hUTUxdKGF2YWlsYWJsZVNwYWNlKSB7XG4gICAgY29uc3Qgc3R5bGUgPSAoMCwgX2h0bWxfdXRpbHMudG9TdHlsZSkodGhpcywgXCJwb3NpdGlvblwiKTtcbiAgICBjb25zdCBhdHRyaWJ1dGVzID0ge1xuICAgICAgc3R5bGUsXG4gICAgICBpZDogdGhpc1tfeGZhX29iamVjdC4kdWlkXSxcbiAgICAgIGNsYXNzOiBbXCJ4ZmFBcmVhXCJdXG4gICAgfTtcblxuICAgIGlmICgoMCwgX2h0bWxfdXRpbHMuaXNQcmludE9ubHkpKHRoaXMpKSB7XG4gICAgICBhdHRyaWJ1dGVzLmNsYXNzLnB1c2goXCJ4ZmFQcmludE9ubHlcIik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubmFtZSkge1xuICAgICAgYXR0cmlidXRlcy54ZmFOYW1lID0gdGhpcy5uYW1lO1xuICAgIH1cblxuICAgIGNvbnN0IGNoaWxkcmVuID0gW107XG4gICAgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdID0ge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICB3aWR0aDogMCxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIGF2YWlsYWJsZVNwYWNlXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXNbX3hmYV9vYmplY3QuJGNoaWxkcmVuVG9IVE1MXSh7XG4gICAgICBmaWx0ZXI6IG5ldyBTZXQoW1wiYXJlYVwiLCBcImRyYXdcIiwgXCJmaWVsZFwiLCBcImV4Y2xHcm91cFwiLCBcInN1YmZvcm1cIiwgXCJzdWJmb3JtU2V0XCJdKSxcbiAgICAgIGluY2x1ZGU6IHRydWVcbiAgICB9KTtcblxuICAgIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgIGlmIChyZXN1bHQuaXNCcmVhaygpKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIGRlbGV0ZSB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV07XG4gICAgICByZXR1cm4gX3V0aWxzLkhUTUxSZXN1bHQuRkFJTFVSRTtcbiAgICB9XG5cbiAgICBzdHlsZS53aWR0aCA9ICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXS53aWR0aCk7XG4gICAgc3R5bGUuaGVpZ2h0ID0gKDAsIF9odG1sX3V0aWxzLm1lYXN1cmVUb1N0cmluZykodGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLmhlaWdodCk7XG4gICAgY29uc3QgaHRtbCA9IHtcbiAgICAgIG5hbWU6IFwiZGl2XCIsXG4gICAgICBhdHRyaWJ1dGVzLFxuICAgICAgY2hpbGRyZW5cbiAgICB9O1xuICAgIGNvbnN0IGJib3ggPSBbdGhpcy54LCB0aGlzLnksIHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXS53aWR0aCwgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLmhlaWdodF07XG4gICAgZGVsZXRlIHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXTtcbiAgICByZXR1cm4gX3V0aWxzLkhUTUxSZXN1bHQuc3VjY2VzcyhodG1sLCBiYm94KTtcbiAgfVxuXG59XG5cbmNsYXNzIEFzc2lzdCBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJhc3Npc3RcIiwgdHJ1ZSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLnJvbGUgPSBhdHRyaWJ1dGVzLnJvbGUgfHwgXCJcIjtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gICAgdGhpcy5zcGVhayA9IG51bGw7XG4gICAgdGhpcy50b29sVGlwID0gbnVsbDtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kdG9IVE1MXSgpIHtcbiAgICByZXR1cm4gdGhpcy50b29sVGlwICYmIHRoaXMudG9vbFRpcFtfeGZhX29iamVjdC4kY29udGVudF0gPyB0aGlzLnRvb2xUaXBbX3hmYV9vYmplY3QuJGNvbnRlbnRdIDogbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIEJhcmNvZGUgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwiYmFyY29kZVwiLCB0cnVlKTtcbiAgICB0aGlzLmNoYXJFbmNvZGluZyA9ICgwLCBfdXRpbHMuZ2V0S2V5d29yZCkoe1xuICAgICAgZGF0YTogYXR0cmlidXRlcy5jaGFyRW5jb2RpbmcgPyBhdHRyaWJ1dGVzLmNoYXJFbmNvZGluZy50b0xvd2VyQ2FzZSgpIDogXCJcIixcbiAgICAgIGRlZmF1bHRWYWx1ZTogXCJcIixcbiAgICAgIHZhbGlkYXRlOiBrID0+IFtcInV0Zi04XCIsIFwiYmlnLWZpdmVcIiwgXCJmb250c3BlY2lmaWNcIiwgXCJnYmtcIiwgXCJnYi0xODAzMFwiLCBcImdiLTIzMTJcIiwgXCJrc2MtNTYwMVwiLCBcIm5vbmVcIiwgXCJzaGlmdC1qaXNcIiwgXCJ1Y3MtMlwiLCBcInV0Zi0xNlwiXS5pbmNsdWRlcyhrKSB8fCBrLm1hdGNoKC9pc28tODg1OS1cXGR7Mn0vKVxuICAgIH0pO1xuICAgIHRoaXMuY2hlY2tzdW0gPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5jaGVja3N1bSwgW1wibm9uZVwiLCBcIjFtb2QxMFwiLCBcIjFtb2QxMF8xbW9kMTFcIiwgXCIybW9kMTBcIiwgXCJhdXRvXCJdKTtcbiAgICB0aGlzLmRhdGFDb2x1bW5Db3VudCA9ICgwLCBfdXRpbHMuZ2V0SW50ZWdlcikoe1xuICAgICAgZGF0YTogYXR0cmlidXRlcy5kYXRhQ29sdW1uQ291bnQsXG4gICAgICBkZWZhdWx0VmFsdWU6IC0xLFxuICAgICAgdmFsaWRhdGU6IHggPT4geCA+PSAwXG4gICAgfSk7XG4gICAgdGhpcy5kYXRhTGVuZ3RoID0gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLmRhdGFMZW5ndGgsXG4gICAgICBkZWZhdWx0VmFsdWU6IC0xLFxuICAgICAgdmFsaWRhdGU6IHggPT4geCA+PSAwXG4gICAgfSk7XG4gICAgdGhpcy5kYXRhUHJlcCA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLmRhdGFQcmVwLCBbXCJub25lXCIsIFwiZmxhdGVDb21wcmVzc1wiXSk7XG4gICAgdGhpcy5kYXRhUm93Q291bnQgPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMuZGF0YVJvd0NvdW50LFxuICAgICAgZGVmYXVsdFZhbHVlOiAtMSxcbiAgICAgIHZhbGlkYXRlOiB4ID0+IHggPj0gMFxuICAgIH0pO1xuICAgIHRoaXMuZW5kQ2hhciA9IGF0dHJpYnV0ZXMuZW5kQ2hhciB8fCBcIlwiO1xuICAgIHRoaXMuZXJyb3JDb3JyZWN0aW9uTGV2ZWwgPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMuZXJyb3JDb3JyZWN0aW9uTGV2ZWwsXG4gICAgICBkZWZhdWx0VmFsdWU6IC0xLFxuICAgICAgdmFsaWRhdGU6IHggPT4geCA+PSAwICYmIHggPD0gOFxuICAgIH0pO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5tb2R1bGVIZWlnaHQgPSAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KShhdHRyaWJ1dGVzLm1vZHVsZUhlaWdodCwgXCI1bW1cIik7XG4gICAgdGhpcy5tb2R1bGVXaWR0aCA9ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMubW9kdWxlV2lkdGgsIFwiMC4yNW1tXCIpO1xuICAgIHRoaXMucHJpbnRDaGVja0RpZ2l0ID0gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLnByaW50Q2hlY2tEaWdpdCxcbiAgICAgIGRlZmF1bHRWYWx1ZTogMCxcbiAgICAgIHZhbGlkYXRlOiB4ID0+IHggPT09IDFcbiAgICB9KTtcbiAgICB0aGlzLnJvd0NvbHVtblJhdGlvID0gKDAsIF91dGlscy5nZXRSYXRpbykoYXR0cmlidXRlcy5yb3dDb2x1bW5SYXRpbyk7XG4gICAgdGhpcy5zdGFydENoYXIgPSBhdHRyaWJ1dGVzLnN0YXJ0Q2hhciB8fCBcIlwiO1xuICAgIHRoaXMudGV4dExvY2F0aW9uID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMudGV4dExvY2F0aW9uLCBbXCJiZWxvd1wiLCBcImFib3ZlXCIsIFwiYWJvdmVFbWJlZGRlZFwiLCBcImJlbG93RW1iZWRkZWRcIiwgXCJub25lXCJdKTtcbiAgICB0aGlzLnRydW5jYXRlID0gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLnRydW5jYXRlLFxuICAgICAgZGVmYXVsdFZhbHVlOiAwLFxuICAgICAgdmFsaWRhdGU6IHggPT4geCA9PT0gMVxuICAgIH0pO1xuICAgIHRoaXMudHlwZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnR5cGUgPyBhdHRyaWJ1dGVzLnR5cGUudG9Mb3dlckNhc2UoKSA6IFwiXCIsIFtcImF6dGVjXCIsIFwiY29kYWJhclwiLCBcImNvZGUyb2Y1aW5kdXN0cmlhbFwiLCBcImNvZGUyb2Y1aW50ZXJsZWF2ZWRcIiwgXCJjb2RlMm9mNW1hdHJpeFwiLCBcImNvZGUyb2Y1c3RhbmRhcmRcIiwgXCJjb2RlM29mOVwiLCBcImNvZGUzb2Y5ZXh0ZW5kZWRcIiwgXCJjb2RlMTFcIiwgXCJjb2RlNDlcIiwgXCJjb2RlOTNcIiwgXCJjb2RlMTI4XCIsIFwiY29kZTEyOGFcIiwgXCJjb2RlMTI4YlwiLCBcImNvZGUxMjhjXCIsIFwiY29kZTEyOHNzY2NcIiwgXCJkYXRhbWF0cml4XCIsIFwiZWFuOFwiLCBcImVhbjhhZGQyXCIsIFwiZWFuOGFkZDVcIiwgXCJlYW4xM1wiLCBcImVhbjEzYWRkMlwiLCBcImVhbjEzYWRkNVwiLCBcImVhbjEzcHdjZFwiLCBcImZpbVwiLCBcImxvZ21hcnNcIiwgXCJtYXhpY29kZVwiLCBcIm1zaVwiLCBcInBkZjQxN1wiLCBcInBkZjQxN21hY3JvXCIsIFwicGxlc3NleVwiLCBcInBvc3RhdXNjdXN0MlwiLCBcInBvc3RhdXNjdXN0M1wiLCBcInBvc3RhdXNyZXBseXBhaWRcIiwgXCJwb3N0YXVzc3RhbmRhcmRcIiwgXCJwb3N0dWtybTRzY2NcIiwgXCJwb3N0dXNkcGJjXCIsIFwicG9zdHVzaW1iXCIsIFwicG9zdHVzc3RhbmRhcmRcIiwgXCJwb3N0dXM1emlwXCIsIFwicXJjb2RlXCIsIFwicmZpZFwiLCBcInJzczE0XCIsIFwicnNzMTRleHBhbmRlZFwiLCBcInJzczE0bGltaXRlZFwiLCBcInJzczE0c3RhY2tlZFwiLCBcInJzczE0c3RhY2tlZG9tbmlcIiwgXCJyc3MxNHRydW5jYXRlZFwiLCBcInRlbGVwZW5cIiwgXCJ1Y2MxMjhcIiwgXCJ1Y2MxMjhyYW5kb21cIiwgXCJ1Y2MxMjhzc2NjXCIsIFwidXBjYVwiLCBcInVwY2FhZGQyXCIsIFwidXBjYWFkZDVcIiwgXCJ1cGNhcHdjZFwiLCBcInVwY2VcIiwgXCJ1cGNlYWRkMlwiLCBcInVwY2VhZGQ1XCIsIFwidXBjZWFuMlwiLCBcInVwY2VhbjVcIiwgXCJ1cHNtYXhpY29kZVwiXSk7XG4gICAgdGhpcy51cHNNb2RlID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMudXBzTW9kZSwgW1widXNDYXJyaWVyXCIsIFwiaW50ZXJuYXRpb25hbENhcnJpZXJcIiwgXCJzZWN1cmVTeW1ib2xcIiwgXCJzdGFuZGFyZFN5bWJvbFwiXSk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMud2lkZU5hcnJvd1JhdGlvID0gKDAsIF91dGlscy5nZXRSYXRpbykoYXR0cmlidXRlcy53aWRlTmFycm93UmF0aW8pO1xuICAgIHRoaXMuZW5jcnlwdCA9IG51bGw7XG4gICAgdGhpcy5leHRyYXMgPSBudWxsO1xuICB9XG5cbn1cblxuY2xhc3MgQmluZCBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJiaW5kXCIsIHRydWUpO1xuICAgIHRoaXMubWF0Y2ggPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5tYXRjaCwgW1wib25jZVwiLCBcImRhdGFSZWZcIiwgXCJnbG9iYWxcIiwgXCJub25lXCJdKTtcbiAgICB0aGlzLnJlZiA9IGF0dHJpYnV0ZXMucmVmIHx8IFwiXCI7XG4gICAgdGhpcy5waWN0dXJlID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIEJpbmRJdGVtcyBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJiaW5kSXRlbXNcIik7XG4gICAgdGhpcy5jb25uZWN0aW9uID0gYXR0cmlidXRlcy5jb25uZWN0aW9uIHx8IFwiXCI7XG4gICAgdGhpcy5sYWJlbFJlZiA9IGF0dHJpYnV0ZXMubGFiZWxSZWYgfHwgXCJcIjtcbiAgICB0aGlzLnJlZiA9IGF0dHJpYnV0ZXMucmVmIHx8IFwiXCI7XG4gICAgdGhpcy52YWx1ZVJlZiA9IGF0dHJpYnV0ZXMudmFsdWVSZWYgfHwgXCJcIjtcbiAgfVxuXG59XG5cbmV4cG9ydHMuQmluZEl0ZW1zID0gQmluZEl0ZW1zO1xuXG5jbGFzcyBCb29rZW5kIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImJvb2tlbmRcIik7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLmxlYWRlciA9IGF0dHJpYnV0ZXMubGVhZGVyIHx8IFwiXCI7XG4gICAgdGhpcy50cmFpbGVyID0gYXR0cmlidXRlcy50cmFpbGVyIHx8IFwiXCI7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICB9XG5cbn1cblxuY2xhc3MgQm9vbGVhbkVsZW1lbnQgZXh0ZW5kcyBfeGZhX29iamVjdC5PcHRpb24wMSB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJib29sZWFuXCIpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8IFwiXCI7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiR0b0hUTUxdKGF2YWlsYWJsZVNwYWNlKSB7XG4gICAgcmV0dXJuIHZhbHVlVG9IdG1sKHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdID09PSAxID8gXCIxXCIgOiBcIjBcIik7XG4gIH1cblxufVxuXG5jbGFzcyBCb3JkZXIgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwiYm9yZGVyXCIsIHRydWUpO1xuICAgIHRoaXMuYnJlYWsgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5icmVhaywgW1wiY2xvc2VcIiwgXCJvcGVuXCJdKTtcbiAgICB0aGlzLmhhbmQgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5oYW5kLCBbXCJldmVuXCIsIFwibGVmdFwiLCBcInJpZ2h0XCJdKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMucHJlc2VuY2UgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5wcmVzZW5jZSwgW1widmlzaWJsZVwiLCBcImhpZGRlblwiLCBcImluYWN0aXZlXCIsIFwiaW52aXNpYmxlXCJdKTtcbiAgICB0aGlzLnJlbGV2YW50ID0gKDAsIF91dGlscy5nZXRSZWxldmFudCkoYXR0cmlidXRlcy5yZWxldmFudCk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMuY29ybmVyID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KDQpO1xuICAgIHRoaXMuZWRnZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSg0KTtcbiAgICB0aGlzLmV4dHJhcyA9IG51bGw7XG4gICAgdGhpcy5maWxsID0gbnVsbDtcbiAgICB0aGlzLm1hcmdpbiA9IG51bGw7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGdldEV4dHJhXSgpIHtcbiAgICBpZiAoIXRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXSkge1xuICAgICAgY29uc3QgZWRnZXMgPSB0aGlzLmVkZ2UuY2hpbGRyZW4uc2xpY2UoKTtcblxuICAgICAgaWYgKGVkZ2VzLmxlbmd0aCA8IDQpIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdEVkZ2UgPSBlZGdlc1tlZGdlcy5sZW5ndGggLSAxXSB8fCBuZXcgRWRnZSh7fSk7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IGVkZ2VzLmxlbmd0aDsgaSA8IDQ7IGkrKykge1xuICAgICAgICAgIGVkZ2VzLnB1c2goZGVmYXVsdEVkZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdpZHRocyA9IGVkZ2VzLm1hcChlZGdlID0+IGVkZ2UudGhpY2tuZXNzKTtcbiAgICAgIGNvbnN0IGluc2V0cyA9IFswLCAwLCAwLCAwXTtcblxuICAgICAgaWYgKHRoaXMubWFyZ2luKSB7XG4gICAgICAgIGluc2V0c1swXSA9IHRoaXMubWFyZ2luLnRvcEluc2V0O1xuICAgICAgICBpbnNldHNbMV0gPSB0aGlzLm1hcmdpbi5yaWdodEluc2V0O1xuICAgICAgICBpbnNldHNbMl0gPSB0aGlzLm1hcmdpbi5ib3R0b21JbnNldDtcbiAgICAgICAgaW5zZXRzWzNdID0gdGhpcy5tYXJnaW4ubGVmdEluc2V0O1xuICAgICAgfVxuXG4gICAgICB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0gPSB7XG4gICAgICAgIHdpZHRocyxcbiAgICAgICAgaW5zZXRzLFxuICAgICAgICBlZGdlc1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiR0b1N0eWxlXSgpIHtcbiAgICBjb25zdCB7XG4gICAgICBlZGdlc1xuICAgIH0gPSB0aGlzW194ZmFfb2JqZWN0LiRnZXRFeHRyYV0oKTtcblxuICAgIGNvbnN0IGVkZ2VTdHlsZXMgPSBlZGdlcy5tYXAobm9kZSA9PiB7XG4gICAgICBjb25zdCBzdHlsZSA9IG5vZGVbX3hmYV9vYmplY3QuJHRvU3R5bGVdKCk7XG5cbiAgICAgIHN0eWxlLmNvbG9yID0gc3R5bGUuY29sb3IgfHwgXCIjMDAwMDAwXCI7XG4gICAgICByZXR1cm4gc3R5bGU7XG4gICAgfSk7XG4gICAgY29uc3Qgc3R5bGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgaWYgKHRoaXMubWFyZ2luKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHN0eWxlLCB0aGlzLm1hcmdpbltfeGZhX29iamVjdC4kdG9TdHlsZV0oKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZmlsbCAmJiB0aGlzLmZpbGwucHJlc2VuY2UgPT09IFwidmlzaWJsZVwiKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHN0eWxlLCB0aGlzLmZpbGxbX3hmYV9vYmplY3QuJHRvU3R5bGVdKCkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvcm5lci5jaGlsZHJlbi5zb21lKG5vZGUgPT4gbm9kZS5yYWRpdXMgIT09IDApKSB7XG4gICAgICBjb25zdCBjb3JuZXJTdHlsZXMgPSB0aGlzLmNvcm5lci5jaGlsZHJlbi5tYXAobm9kZSA9PiBub2RlW194ZmFfb2JqZWN0LiR0b1N0eWxlXSgpKTtcblxuICAgICAgaWYgKGNvcm5lclN0eWxlcy5sZW5ndGggPT09IDIgfHwgY29ybmVyU3R5bGVzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICBjb25zdCBsYXN0ID0gY29ybmVyU3R5bGVzW2Nvcm5lclN0eWxlcy5sZW5ndGggLSAxXTtcblxuICAgICAgICBmb3IgKGxldCBpID0gY29ybmVyU3R5bGVzLmxlbmd0aDsgaSA8IDQ7IGkrKykge1xuICAgICAgICAgIGNvcm5lclN0eWxlcy5wdXNoKGxhc3QpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN0eWxlLmJvcmRlclJhZGl1cyA9IGNvcm5lclN0eWxlcy5tYXAocyA9PiBzLnJhZGl1cykuam9pbihcIiBcIik7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0aGlzLnByZXNlbmNlKSB7XG4gICAgICBjYXNlIFwiaW52aXNpYmxlXCI6XG4gICAgICBjYXNlIFwiaGlkZGVuXCI6XG4gICAgICAgIHN0eWxlLmJvcmRlclN0eWxlID0gXCJcIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJpbmFjdGl2ZVwiOlxuICAgICAgICBzdHlsZS5ib3JkZXJTdHlsZSA9IFwibm9uZVwiO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgc3R5bGUuYm9yZGVyU3R5bGUgPSBlZGdlU3R5bGVzLm1hcChzID0+IHMuc3R5bGUpLmpvaW4oXCIgXCIpO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBzdHlsZS5ib3JkZXJXaWR0aCA9IGVkZ2VTdHlsZXMubWFwKHMgPT4gcy53aWR0aCkuam9pbihcIiBcIik7XG4gICAgc3R5bGUuYm9yZGVyQ29sb3IgPSBlZGdlU3R5bGVzLm1hcChzID0+IHMuY29sb3IpLmpvaW4oXCIgXCIpO1xuICAgIHJldHVybiBzdHlsZTtcbiAgfVxuXG59XG5cbmNsYXNzIEJyZWFrIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImJyZWFrXCIsIHRydWUpO1xuICAgIHRoaXMuYWZ0ZXIgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5hZnRlciwgW1wiYXV0b1wiLCBcImNvbnRlbnRBcmVhXCIsIFwicGFnZUFyZWFcIiwgXCJwYWdlRXZlblwiLCBcInBhZ2VPZGRcIl0pO1xuICAgIHRoaXMuYWZ0ZXJUYXJnZXQgPSBhdHRyaWJ1dGVzLmFmdGVyVGFyZ2V0IHx8IFwiXCI7XG4gICAgdGhpcy5iZWZvcmUgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5iZWZvcmUsIFtcImF1dG9cIiwgXCJjb250ZW50QXJlYVwiLCBcInBhZ2VBcmVhXCIsIFwicGFnZUV2ZW5cIiwgXCJwYWdlT2RkXCJdKTtcbiAgICB0aGlzLmJlZm9yZVRhcmdldCA9IGF0dHJpYnV0ZXMuYmVmb3JlVGFyZ2V0IHx8IFwiXCI7XG4gICAgdGhpcy5ib29rZW5kTGVhZGVyID0gYXR0cmlidXRlcy5ib29rZW5kTGVhZGVyIHx8IFwiXCI7XG4gICAgdGhpcy5ib29rZW5kVHJhaWxlciA9IGF0dHJpYnV0ZXMuYm9va2VuZFRyYWlsZXIgfHwgXCJcIjtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMub3ZlcmZsb3dMZWFkZXIgPSBhdHRyaWJ1dGVzLm92ZXJmbG93TGVhZGVyIHx8IFwiXCI7XG4gICAgdGhpcy5vdmVyZmxvd1RhcmdldCA9IGF0dHJpYnV0ZXMub3ZlcmZsb3dUYXJnZXQgfHwgXCJcIjtcbiAgICB0aGlzLm92ZXJmbG93VHJhaWxlciA9IGF0dHJpYnV0ZXMub3ZlcmZsb3dUcmFpbGVyIHx8IFwiXCI7XG4gICAgdGhpcy5zdGFydE5ldyA9ICgwLCBfdXRpbHMuZ2V0SW50ZWdlcikoe1xuICAgICAgZGF0YTogYXR0cmlidXRlcy5zdGFydE5ldyxcbiAgICAgIGRlZmF1bHRWYWx1ZTogMCxcbiAgICAgIHZhbGlkYXRlOiB4ID0+IHggPT09IDFcbiAgICB9KTtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gICAgdGhpcy5leHRyYXMgPSBudWxsO1xuICB9XG5cbn1cblxuY2xhc3MgQnJlYWtBZnRlciBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJicmVha0FmdGVyXCIsIHRydWUpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5sZWFkZXIgPSBhdHRyaWJ1dGVzLmxlYWRlciB8fCBcIlwiO1xuICAgIHRoaXMuc3RhcnROZXcgPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMuc3RhcnROZXcsXG4gICAgICBkZWZhdWx0VmFsdWU6IDAsXG4gICAgICB2YWxpZGF0ZTogeCA9PiB4ID09PSAxXG4gICAgfSk7XG4gICAgdGhpcy50YXJnZXQgPSBhdHRyaWJ1dGVzLnRhcmdldCB8fCBcIlwiO1xuICAgIHRoaXMudGFyZ2V0VHlwZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnRhcmdldFR5cGUsIFtcImF1dG9cIiwgXCJjb250ZW50QXJlYVwiLCBcInBhZ2VBcmVhXCJdKTtcbiAgICB0aGlzLnRyYWlsZXIgPSBhdHRyaWJ1dGVzLnRyYWlsZXIgfHwgXCJcIjtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gICAgdGhpcy5zY3JpcHQgPSBudWxsO1xuICB9XG5cbn1cblxuY2xhc3MgQnJlYWtCZWZvcmUgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwiYnJlYWtCZWZvcmVcIiwgdHJ1ZSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLmxlYWRlciA9IGF0dHJpYnV0ZXMubGVhZGVyIHx8IFwiXCI7XG4gICAgdGhpcy5zdGFydE5ldyA9ICgwLCBfdXRpbHMuZ2V0SW50ZWdlcikoe1xuICAgICAgZGF0YTogYXR0cmlidXRlcy5zdGFydE5ldyxcbiAgICAgIGRlZmF1bHRWYWx1ZTogMCxcbiAgICAgIHZhbGlkYXRlOiB4ID0+IHggPT09IDFcbiAgICB9KTtcbiAgICB0aGlzLnRhcmdldCA9IGF0dHJpYnV0ZXMudGFyZ2V0IHx8IFwiXCI7XG4gICAgdGhpcy50YXJnZXRUeXBlID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMudGFyZ2V0VHlwZSwgW1wiYXV0b1wiLCBcImNvbnRlbnRBcmVhXCIsIFwicGFnZUFyZWFcIl0pO1xuICAgIHRoaXMudHJhaWxlciA9IGF0dHJpYnV0ZXMudHJhaWxlciB8fCBcIlwiO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLnNjcmlwdCA9IG51bGw7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJHRvSFRNTF0oYXZhaWxhYmxlU3BhY2UpIHtcbiAgICB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0gPSB7fTtcbiAgICByZXR1cm4gX3V0aWxzLkhUTUxSZXN1bHQuRkFJTFVSRTtcbiAgfVxuXG59XG5cbmNsYXNzIEJ1dHRvbiBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJidXR0b25cIiwgdHJ1ZSk7XG4gICAgdGhpcy5oaWdobGlnaHQgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5oaWdobGlnaHQsIFtcImludmVydGVkXCIsIFwibm9uZVwiLCBcIm91dGxpbmVcIiwgXCJwdXNoXCJdKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmV4dHJhcyA9IG51bGw7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJHRvSFRNTF0oYXZhaWxhYmxlU3BhY2UpIHtcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzW194ZmFfb2JqZWN0LiRnZXRQYXJlbnRdKCk7XG5cbiAgICBjb25zdCBncmFuZHBhID0gcGFyZW50W194ZmFfb2JqZWN0LiRnZXRQYXJlbnRdKCk7XG5cbiAgICBjb25zdCBodG1sQnV0dG9uID0ge1xuICAgICAgbmFtZTogXCJidXR0b25cIixcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgaWQ6IHRoaXNbX3hmYV9vYmplY3QuJHVpZF0sXG4gICAgICAgIGNsYXNzOiBbXCJ4ZmFCdXR0b25cIl0sXG4gICAgICAgIHN0eWxlOiB7fVxuICAgICAgfSxcbiAgICAgIGNoaWxkcmVuOiBbXVxuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIGdyYW5kcGEuZXZlbnQuY2hpbGRyZW4pIHtcbiAgICAgIGlmIChldmVudC5hY3Rpdml0eSAhPT0gXCJjbGlja1wiIHx8ICFldmVudC5zY3JpcHQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGpzVVJMID0gKDAsIF9jb3JlX3V0aWxzLnJlY292ZXJKc1VSTCkoZXZlbnQuc2NyaXB0W194ZmFfb2JqZWN0LiRjb250ZW50XSk7XG5cbiAgICAgIGlmICghanNVUkwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhyZWYgPSAoMCwgX2h0bWxfdXRpbHMuZml4VVJMKShqc1VSTC51cmwpO1xuXG4gICAgICBpZiAoIWhyZWYpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGh0bWxCdXR0b24uY2hpbGRyZW4ucHVzaCh7XG4gICAgICAgIG5hbWU6IFwiYVwiLFxuICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgaWQ6IFwibGlua1wiICsgdGhpc1tfeGZhX29iamVjdC4kdWlkXSxcbiAgICAgICAgICBocmVmLFxuICAgICAgICAgIG5ld1dpbmRvdzoganNVUkwubmV3V2luZG93LFxuICAgICAgICAgIGNsYXNzOiBbXCJ4ZmFMaW5rXCJdLFxuICAgICAgICAgIHN0eWxlOiB7fVxuICAgICAgICB9LFxuICAgICAgICBjaGlsZHJlbjogW11cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5zdWNjZXNzKGh0bWxCdXR0b24pO1xuICB9XG5cbn1cblxuY2xhc3MgQ2FsY3VsYXRlIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImNhbGN1bGF0ZVwiLCB0cnVlKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMub3ZlcnJpZGUgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5vdmVycmlkZSwgW1wiZGlzYWJsZWRcIiwgXCJlcnJvclwiLCBcImlnbm9yZVwiLCBcIndhcm5pbmdcIl0pO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmV4dHJhcyA9IG51bGw7XG4gICAgdGhpcy5tZXNzYWdlID0gbnVsbDtcbiAgICB0aGlzLnNjcmlwdCA9IG51bGw7XG4gIH1cblxufVxuXG5jbGFzcyBDYXB0aW9uIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImNhcHRpb25cIiwgdHJ1ZSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLnBsYWNlbWVudCA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnBsYWNlbWVudCwgW1wibGVmdFwiLCBcImJvdHRvbVwiLCBcImlubGluZVwiLCBcInJpZ2h0XCIsIFwidG9wXCJdKTtcbiAgICB0aGlzLnByZXNlbmNlID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMucHJlc2VuY2UsIFtcInZpc2libGVcIiwgXCJoaWRkZW5cIiwgXCJpbmFjdGl2ZVwiLCBcImludmlzaWJsZVwiXSk7XG4gICAgdGhpcy5yZXNlcnZlID0gTWF0aC5jZWlsKCgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMucmVzZXJ2ZSkpO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmV4dHJhcyA9IG51bGw7XG4gICAgdGhpcy5mb250ID0gbnVsbDtcbiAgICB0aGlzLm1hcmdpbiA9IG51bGw7XG4gICAgdGhpcy5wYXJhID0gbnVsbDtcbiAgICB0aGlzLnZhbHVlID0gbnVsbDtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kc2V0VmFsdWVdKHZhbHVlKSB7XG4gICAgX3NldFZhbHVlKHRoaXMsIHZhbHVlKTtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kZ2V0RXh0cmFdKGF2YWlsYWJsZVNwYWNlKSB7XG4gICAgaWYgKCF0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0pIHtcbiAgICAgIGxldCB7XG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHRcbiAgICAgIH0gPSBhdmFpbGFibGVTcGFjZTtcblxuICAgICAgc3dpdGNoICh0aGlzLnBsYWNlbWVudCkge1xuICAgICAgICBjYXNlIFwibGVmdFwiOlxuICAgICAgICBjYXNlIFwicmlnaHRcIjpcbiAgICAgICAgY2FzZSBcImlubGluZVwiOlxuICAgICAgICAgIHdpZHRoID0gdGhpcy5yZXNlcnZlIDw9IDAgPyB3aWR0aCA6IHRoaXMucmVzZXJ2ZTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwidG9wXCI6XG4gICAgICAgIGNhc2UgXCJib3R0b21cIjpcbiAgICAgICAgICBoZWlnaHQgPSB0aGlzLnJlc2VydmUgPD0gMCA/IGhlaWdodCA6IHRoaXMucmVzZXJ2ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdID0gKDAsIF9odG1sX3V0aWxzLmxheW91dE5vZGUpKHRoaXMsIHtcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXTtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kdG9IVE1MXShhdmFpbGFibGVTcGFjZSkge1xuICAgIGlmICghdGhpcy52YWx1ZSkge1xuICAgICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LkVNUFRZO1xuICAgIH1cblxuICAgIHRoaXNbX3hmYV9vYmplY3QuJHB1c2hQYXJhXSgpO1xuXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnZhbHVlW194ZmFfb2JqZWN0LiR0b0hUTUxdKGF2YWlsYWJsZVNwYWNlKS5odG1sO1xuXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgdGhpc1tfeGZhX29iamVjdC4kcG9wUGFyYV0oKTtcblxuICAgICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LkVNUFRZO1xuICAgIH1cblxuICAgIGNvbnN0IHNhdmVkUmVzZXJ2ZSA9IHRoaXMucmVzZXJ2ZTtcblxuICAgIGlmICh0aGlzLnJlc2VydmUgPD0gMCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICB3LFxuICAgICAgICBoXG4gICAgICB9ID0gdGhpc1tfeGZhX29iamVjdC4kZ2V0RXh0cmFdKGF2YWlsYWJsZVNwYWNlKTtcblxuICAgICAgc3dpdGNoICh0aGlzLnBsYWNlbWVudCkge1xuICAgICAgICBjYXNlIFwibGVmdFwiOlxuICAgICAgICBjYXNlIFwicmlnaHRcIjpcbiAgICAgICAgY2FzZSBcImlubGluZVwiOlxuICAgICAgICAgIHRoaXMucmVzZXJ2ZSA9IHc7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcInRvcFwiOlxuICAgICAgICBjYXNlIFwiYm90dG9tXCI6XG4gICAgICAgICAgdGhpcy5yZXNlcnZlID0gaDtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZHJlbiA9IFtdO1xuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgY2hpbGRyZW4ucHVzaCh7XG4gICAgICAgIG5hbWU6IFwiI3RleHRcIixcbiAgICAgICAgdmFsdWVcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGlsZHJlbi5wdXNoKHZhbHVlKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdHlsZSA9ICgwLCBfaHRtbF91dGlscy50b1N0eWxlKSh0aGlzLCBcImZvbnRcIiwgXCJtYXJnaW5cIiwgXCJ2aXNpYmlsaXR5XCIpO1xuXG4gICAgc3dpdGNoICh0aGlzLnBsYWNlbWVudCkge1xuICAgICAgY2FzZSBcImxlZnRcIjpcbiAgICAgIGNhc2UgXCJyaWdodFwiOlxuICAgICAgICBpZiAodGhpcy5yZXNlcnZlID4gMCkge1xuICAgICAgICAgIHN0eWxlLndpZHRoID0gKDAsIF9odG1sX3V0aWxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5yZXNlcnZlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwidG9wXCI6XG4gICAgICBjYXNlIFwiYm90dG9tXCI6XG4gICAgICAgIGlmICh0aGlzLnJlc2VydmUgPiAwKSB7XG4gICAgICAgICAgc3R5bGUuaGVpZ2h0ID0gKDAsIF9odG1sX3V0aWxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5yZXNlcnZlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgICgwLCBfaHRtbF91dGlscy5zZXRQYXJhKSh0aGlzLCBudWxsLCB2YWx1ZSk7XG5cbiAgICB0aGlzW194ZmFfb2JqZWN0LiRwb3BQYXJhXSgpO1xuXG4gICAgdGhpcy5yZXNlcnZlID0gc2F2ZWRSZXNlcnZlO1xuICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5zdWNjZXNzKHtcbiAgICAgIG5hbWU6IFwiZGl2XCIsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIHN0eWxlLFxuICAgICAgICBjbGFzczogW1wieGZhQ2FwdGlvblwiXVxuICAgICAgfSxcbiAgICAgIGNoaWxkcmVuXG4gICAgfSk7XG4gIH1cblxufVxuXG5jbGFzcyBDZXJ0aWZpY2F0ZSBleHRlbmRzIF94ZmFfb2JqZWN0LlN0cmluZ09iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJjZXJ0aWZpY2F0ZVwiKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgfVxuXG59XG5cbmNsYXNzIENlcnRpZmljYXRlcyBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJjZXJ0aWZpY2F0ZXNcIiwgdHJ1ZSk7XG4gICAgdGhpcy5jcmVkZW50aWFsU2VydmVyUG9saWN5ID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMuY3JlZGVudGlhbFNlcnZlclBvbGljeSwgW1wib3B0aW9uYWxcIiwgXCJyZXF1aXJlZFwiXSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLnVybCA9IGF0dHJpYnV0ZXMudXJsIHx8IFwiXCI7XG4gICAgdGhpcy51cmxQb2xpY3kgPSBhdHRyaWJ1dGVzLnVybFBvbGljeSB8fCBcIlwiO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmVuY3J5cHRpb24gPSBudWxsO1xuICAgIHRoaXMuaXNzdWVycyA9IG51bGw7XG4gICAgdGhpcy5rZXlVc2FnZSA9IG51bGw7XG4gICAgdGhpcy5vaWRzID0gbnVsbDtcbiAgICB0aGlzLnNpZ25pbmcgPSBudWxsO1xuICAgIHRoaXMuc3ViamVjdEROcyA9IG51bGw7XG4gIH1cblxufVxuXG5jbGFzcyBDaGVja0J1dHRvbiBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJjaGVja0J1dHRvblwiLCB0cnVlKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMubWFyayA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLm1hcmssIFtcImRlZmF1bHRcIiwgXCJjaGVja1wiLCBcImNpcmNsZVwiLCBcImNyb3NzXCIsIFwiZGlhbW9uZFwiLCBcInNxdWFyZVwiLCBcInN0YXJcIl0pO1xuICAgIHRoaXMuc2hhcGUgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5zaGFwZSwgW1wic3F1YXJlXCIsIFwicm91bmRcIl0pO1xuICAgIHRoaXMuc2l6ZSA9ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMuc2l6ZSwgXCIxMHB0XCIpO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmJvcmRlciA9IG51bGw7XG4gICAgdGhpcy5leHRyYXMgPSBudWxsO1xuICAgIHRoaXMubWFyZ2luID0gbnVsbDtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kdG9IVE1MXShhdmFpbGFibGVTcGFjZSkge1xuICAgIGNvbnN0IHN0eWxlID0gKDAsIF9odG1sX3V0aWxzLnRvU3R5bGUpKFwibWFyZ2luXCIpO1xuICAgIGNvbnN0IHNpemUgPSAoMCwgX2h0bWxfdXRpbHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnNpemUpO1xuICAgIHN0eWxlLndpZHRoID0gc3R5bGUuaGVpZ2h0ID0gc2l6ZTtcbiAgICBsZXQgdHlwZTtcbiAgICBsZXQgY2xhc3NOYW1lO1xuICAgIGxldCBncm91cElkO1xuXG4gICAgY29uc3QgZmllbGQgPSB0aGlzW194ZmFfb2JqZWN0LiRnZXRQYXJlbnRdKClbX3hmYV9vYmplY3QuJGdldFBhcmVudF0oKTtcblxuICAgIGNvbnN0IGl0ZW1zID0gZmllbGQuaXRlbXMuY2hpbGRyZW4ubGVuZ3RoICYmIGZpZWxkLml0ZW1zLmNoaWxkcmVuWzBdW194ZmFfb2JqZWN0LiR0b0hUTUxdKCkuaHRtbCB8fCBbXTtcbiAgICBjb25zdCBleHBvcnRlZFZhbHVlID0ge1xuICAgICAgb246IChpdGVtc1swXSAhPT0gdW5kZWZpbmVkID8gaXRlbXNbMF0gOiBcIm9uXCIpLnRvU3RyaW5nKCksXG4gICAgICBvZmY6IChpdGVtc1sxXSAhPT0gdW5kZWZpbmVkID8gaXRlbXNbMV0gOiBcIm9mZlwiKS50b1N0cmluZygpXG4gICAgfTtcbiAgICBjb25zdCB2YWx1ZSA9IGZpZWxkLnZhbHVlICYmIGZpZWxkLnZhbHVlW194ZmFfb2JqZWN0LiR0ZXh0XSgpIHx8IFwib2ZmXCI7XG4gICAgY29uc3QgY2hlY2tlZCA9IHZhbHVlID09PSBleHBvcnRlZFZhbHVlLm9uIHx8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGNvbnRhaW5lciA9IGZpZWxkW194ZmFfb2JqZWN0LiRnZXRTdWJmb3JtUGFyZW50XSgpO1xuXG4gICAgY29uc3QgZmllbGRJZCA9IGZpZWxkW194ZmFfb2JqZWN0LiR1aWRdO1xuICAgIGxldCBkYXRhSWQ7XG5cbiAgICBpZiAoY29udGFpbmVyIGluc3RhbmNlb2YgRXhjbEdyb3VwKSB7XG4gICAgICBncm91cElkID0gY29udGFpbmVyW194ZmFfb2JqZWN0LiR1aWRdO1xuICAgICAgdHlwZSA9IFwicmFkaW9cIjtcbiAgICAgIGNsYXNzTmFtZSA9IFwieGZhUmFkaW9cIjtcbiAgICAgIGRhdGFJZCA9IGNvbnRhaW5lcltfeGZhX29iamVjdC4kZGF0YV0gJiYgY29udGFpbmVyW194ZmFfb2JqZWN0LiRkYXRhXVtfeGZhX29iamVjdC4kdWlkXSB8fCBjb250YWluZXJbX3hmYV9vYmplY3QuJHVpZF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHR5cGUgPSBcImNoZWNrYm94XCI7XG4gICAgICBjbGFzc05hbWUgPSBcInhmYUNoZWNrYm94XCI7XG4gICAgICBkYXRhSWQgPSBmaWVsZFtfeGZhX29iamVjdC4kZGF0YV0gJiYgZmllbGRbX3hmYV9vYmplY3QuJGRhdGFdW194ZmFfb2JqZWN0LiR1aWRdIHx8IGZpZWxkW194ZmFfb2JqZWN0LiR1aWRdO1xuICAgIH1cblxuICAgIGNvbnN0IGlucHV0ID0ge1xuICAgICAgbmFtZTogXCJpbnB1dFwiLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBjbGFzczogW2NsYXNzTmFtZV0sXG4gICAgICAgIHN0eWxlLFxuICAgICAgICBmaWVsZElkLFxuICAgICAgICBkYXRhSWQsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIGNoZWNrZWQsXG4gICAgICAgIHhmYU9uOiBleHBvcnRlZFZhbHVlLm9uLFxuICAgICAgICB4ZmFPZmY6IGV4cG9ydGVkVmFsdWUub2ZmLFxuICAgICAgICBcImFyaWEtbGFiZWxcIjogYXJpYUxhYmVsKGZpZWxkKVxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoZ3JvdXBJZCkge1xuICAgICAgaW5wdXQuYXR0cmlidXRlcy5uYW1lID0gZ3JvdXBJZDtcbiAgICB9XG5cbiAgICByZXR1cm4gX3V0aWxzLkhUTUxSZXN1bHQuc3VjY2Vzcyh7XG4gICAgICBuYW1lOiBcImxhYmVsXCIsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGNsYXNzOiBbXCJ4ZmFMYWJlbFwiXVxuICAgICAgfSxcbiAgICAgIGNoaWxkcmVuOiBbaW5wdXRdXG4gICAgfSk7XG4gIH1cblxufVxuXG5jbGFzcyBDaG9pY2VMaXN0IGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImNob2ljZUxpc3RcIiwgdHJ1ZSk7XG4gICAgdGhpcy5jb21taXRPbiA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLmNvbW1pdE9uLCBbXCJzZWxlY3RcIiwgXCJleGl0XCJdKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMub3BlbiA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLm9wZW4sIFtcInVzZXJDb250cm9sXCIsIFwiYWx3YXlzXCIsIFwibXVsdGlTZWxlY3RcIiwgXCJvbkVudHJ5XCJdKTtcbiAgICB0aGlzLnRleHRFbnRyeSA9ICgwLCBfdXRpbHMuZ2V0SW50ZWdlcikoe1xuICAgICAgZGF0YTogYXR0cmlidXRlcy50ZXh0RW50cnksXG4gICAgICBkZWZhdWx0VmFsdWU6IDAsXG4gICAgICB2YWxpZGF0ZTogeCA9PiB4ID09PSAxXG4gICAgfSk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMuYm9yZGVyID0gbnVsbDtcbiAgICB0aGlzLmV4dHJhcyA9IG51bGw7XG4gICAgdGhpcy5tYXJnaW4gPSBudWxsO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiR0b0hUTUxdKGF2YWlsYWJsZVNwYWNlKSB7XG4gICAgY29uc3Qgc3R5bGUgPSAoMCwgX2h0bWxfdXRpbHMudG9TdHlsZSkodGhpcywgXCJib3JkZXJcIiwgXCJtYXJnaW5cIik7XG5cbiAgICBjb25zdCB1aSA9IHRoaXNbX3hmYV9vYmplY3QuJGdldFBhcmVudF0oKTtcblxuICAgIGNvbnN0IGZpZWxkID0gdWlbX3hmYV9vYmplY3QuJGdldFBhcmVudF0oKTtcblxuICAgIGNvbnN0IGZvbnRTaXplID0gZmllbGQuZm9udCAmJiBmaWVsZC5mb250LnNpemUgfHwgMTA7XG4gICAgY29uc3Qgb3B0aW9uU3R5bGUgPSB7XG4gICAgICBmb250U2l6ZTogYGNhbGMoJHtmb250U2l6ZX1weCAqIHZhcigtLXpvb20tZmFjdG9yKSlgXG4gICAgfTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IFtdO1xuXG4gICAgaWYgKGZpZWxkLml0ZW1zLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGl0ZW1zID0gZmllbGQuaXRlbXM7XG4gICAgICBsZXQgZGlzcGxheWVkSW5kZXggPSAwO1xuICAgICAgbGV0IHNhdmVJbmRleCA9IDA7XG5cbiAgICAgIGlmIChpdGVtcy5jaGlsZHJlbi5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgZGlzcGxheWVkSW5kZXggPSBpdGVtcy5jaGlsZHJlblswXS5zYXZlO1xuICAgICAgICBzYXZlSW5kZXggPSAxIC0gZGlzcGxheWVkSW5kZXg7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRpc3BsYXllZCA9IGl0ZW1zLmNoaWxkcmVuW2Rpc3BsYXllZEluZGV4XVtfeGZhX29iamVjdC4kdG9IVE1MXSgpLmh0bWw7XG5cbiAgICAgIGNvbnN0IHZhbHVlcyA9IGl0ZW1zLmNoaWxkcmVuW3NhdmVJbmRleF1bX3hmYV9vYmplY3QuJHRvSFRNTF0oKS5odG1sO1xuXG4gICAgICBsZXQgc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgIGNvbnN0IHZhbHVlID0gZmllbGQudmFsdWUgJiYgZmllbGQudmFsdWVbX3hmYV9vYmplY3QuJHRleHRdKCkgfHwgXCJcIjtcblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGlpID0gZGlzcGxheWVkLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0ge1xuICAgICAgICAgIG5hbWU6IFwib3B0aW9uXCIsXG4gICAgICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICAgICAgdmFsdWU6IHZhbHVlc1tpXSB8fCBkaXNwbGF5ZWRbaV0sXG4gICAgICAgICAgICBzdHlsZTogb3B0aW9uU3R5bGVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHZhbHVlOiBkaXNwbGF5ZWRbaV1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodmFsdWVzW2ldID09PSB2YWx1ZSkge1xuICAgICAgICAgIG9wdGlvbi5hdHRyaWJ1dGVzLnNlbGVjdGVkID0gc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGRyZW4ucHVzaChvcHRpb24pO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXNlbGVjdGVkKSB7XG4gICAgICAgIGNoaWxkcmVuLnNwbGljZSgwLCAwLCB7XG4gICAgICAgICAgbmFtZTogXCJvcHRpb25cIixcbiAgICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgICBoaWRkZW46IHRydWUsXG4gICAgICAgICAgICBzZWxlY3RlZDogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdmFsdWU6IFwiIFwiXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNlbGVjdEF0dHJpYnV0ZXMgPSB7XG4gICAgICBjbGFzczogW1wieGZhU2VsZWN0XCJdLFxuICAgICAgZmllbGRJZDogZmllbGRbX3hmYV9vYmplY3QuJHVpZF0sXG4gICAgICBkYXRhSWQ6IGZpZWxkW194ZmFfb2JqZWN0LiRkYXRhXSAmJiBmaWVsZFtfeGZhX29iamVjdC4kZGF0YV1bX3hmYV9vYmplY3QuJHVpZF0gfHwgZmllbGRbX3hmYV9vYmplY3QuJHVpZF0sXG4gICAgICBzdHlsZSxcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBhcmlhTGFiZWwoZmllbGQpXG4gICAgfTtcblxuICAgIGlmICh0aGlzLm9wZW4gPT09IFwibXVsdGlTZWxlY3RcIikge1xuICAgICAgc2VsZWN0QXR0cmlidXRlcy5tdWx0aXBsZSA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe1xuICAgICAgbmFtZTogXCJsYWJlbFwiLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBjbGFzczogW1wieGZhTGFiZWxcIl1cbiAgICAgIH0sXG4gICAgICBjaGlsZHJlbjogW3tcbiAgICAgICAgbmFtZTogXCJzZWxlY3RcIixcbiAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgIGF0dHJpYnV0ZXM6IHNlbGVjdEF0dHJpYnV0ZXNcbiAgICAgIH1dXG4gICAgfSk7XG4gIH1cblxufVxuXG5jbGFzcyBDb2xvciBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJjb2xvclwiLCB0cnVlKTtcbiAgICB0aGlzLmNTcGFjZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLmNTcGFjZSwgW1wiU1JHQlwiXSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gICAgdGhpcy52YWx1ZSA9IGF0dHJpYnV0ZXMudmFsdWUgPyAoMCwgX3V0aWxzLmdldENvbG9yKShhdHRyaWJ1dGVzLnZhbHVlKSA6IFwiXCI7XG4gICAgdGhpcy5leHRyYXMgPSBudWxsO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRoYXNTZXR0YWJsZVZhbHVlXSgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJHRvU3R5bGVdKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlID8gX3V0aWwuVXRpbC5tYWtlSGV4Q29sb3IodGhpcy52YWx1ZS5yLCB0aGlzLnZhbHVlLmcsIHRoaXMudmFsdWUuYikgOiBudWxsO1xuICB9XG5cbn1cblxuY2xhc3MgQ29tYiBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJjb21iXCIpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5udW1iZXJPZkNlbGxzID0gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLm51bWJlck9mQ2VsbHMsXG4gICAgICBkZWZhdWx0VmFsdWU6IDAsXG4gICAgICB2YWxpZGF0ZTogeCA9PiB4ID49IDBcbiAgICB9KTtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gIH1cblxufVxuXG5jbGFzcyBDb25uZWN0IGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImNvbm5lY3RcIiwgdHJ1ZSk7XG4gICAgdGhpcy5jb25uZWN0aW9uID0gYXR0cmlidXRlcy5jb25uZWN0aW9uIHx8IFwiXCI7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLnJlZiA9IGF0dHJpYnV0ZXMucmVmIHx8IFwiXCI7XG4gICAgdGhpcy51c2FnZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnVzYWdlLCBbXCJleHBvcnRBbmRJbXBvcnRcIiwgXCJleHBvcnRPbmx5XCIsIFwiaW1wb3J0T25seVwiXSk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMucGljdHVyZSA9IG51bGw7XG4gIH1cblxufVxuXG5jbGFzcyBDb250ZW50QXJlYSBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJjb250ZW50QXJlYVwiLCB0cnVlKTtcbiAgICB0aGlzLmggPSAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KShhdHRyaWJ1dGVzLmgpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8IFwiXCI7XG4gICAgdGhpcy5yZWxldmFudCA9ICgwLCBfdXRpbHMuZ2V0UmVsZXZhbnQpKGF0dHJpYnV0ZXMucmVsZXZhbnQpO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLncgPSAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KShhdHRyaWJ1dGVzLncpO1xuICAgIHRoaXMueCA9ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMueCwgXCIwcHRcIik7XG4gICAgdGhpcy55ID0gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkoYXR0cmlidXRlcy55LCBcIjBwdFwiKTtcbiAgICB0aGlzLmRlc2MgPSBudWxsO1xuICAgIHRoaXMuZXh0cmFzID0gbnVsbDtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kdG9IVE1MXShhdmFpbGFibGVTcGFjZSkge1xuICAgIGNvbnN0IGxlZnQgPSAoMCwgX2h0bWxfdXRpbHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLngpO1xuICAgIGNvbnN0IHRvcCA9ICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMueSk7XG4gICAgY29uc3Qgc3R5bGUgPSB7XG4gICAgICBsZWZ0LFxuICAgICAgdG9wLFxuICAgICAgd2lkdGg6ICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMudyksXG4gICAgICBoZWlnaHQ6ICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMuaClcbiAgICB9O1xuICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBbXCJ4ZmFDb250ZW50YXJlYVwiXTtcblxuICAgIGlmICgoMCwgX2h0bWxfdXRpbHMuaXNQcmludE9ubHkpKHRoaXMpKSB7XG4gICAgICBjbGFzc05hbWVzLnB1c2goXCJ4ZmFQcmludE9ubHlcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe1xuICAgICAgbmFtZTogXCJkaXZcIixcbiAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgc3R5bGUsXG4gICAgICAgIGNsYXNzOiBjbGFzc05hbWVzLFxuICAgICAgICBpZDogdGhpc1tfeGZhX29iamVjdC4kdWlkXVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbn1cblxuY2xhc3MgQ29ybmVyIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImNvcm5lclwiLCB0cnVlKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMuaW52ZXJ0ZWQgPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMuaW52ZXJ0ZWQsXG4gICAgICBkZWZhdWx0VmFsdWU6IDAsXG4gICAgICB2YWxpZGF0ZTogeCA9PiB4ID09PSAxXG4gICAgfSk7XG4gICAgdGhpcy5qb2luID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMuam9pbiwgW1wic3F1YXJlXCIsIFwicm91bmRcIl0pO1xuICAgIHRoaXMucHJlc2VuY2UgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5wcmVzZW5jZSwgW1widmlzaWJsZVwiLCBcImhpZGRlblwiLCBcImluYWN0aXZlXCIsIFwiaW52aXNpYmxlXCJdKTtcbiAgICB0aGlzLnJhZGl1cyA9ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMucmFkaXVzKTtcbiAgICB0aGlzLnN0cm9rZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnN0cm9rZSwgW1wic29saWRcIiwgXCJkYXNoRG90XCIsIFwiZGFzaERvdERvdFwiLCBcImRhc2hlZFwiLCBcImRvdHRlZFwiLCBcImVtYm9zc2VkXCIsIFwiZXRjaGVkXCIsIFwibG93ZXJlZFwiLCBcInJhaXNlZFwiXSk7XG4gICAgdGhpcy50aGlja25lc3MgPSAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KShhdHRyaWJ1dGVzLnRoaWNrbmVzcywgXCIwLjVwdFwiKTtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gICAgdGhpcy5jb2xvciA9IG51bGw7XG4gICAgdGhpcy5leHRyYXMgPSBudWxsO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiR0b1N0eWxlXSgpIHtcbiAgICBjb25zdCBzdHlsZSA9ICgwLCBfaHRtbF91dGlscy50b1N0eWxlKSh0aGlzLCBcInZpc2liaWxpdHlcIik7XG4gICAgc3R5bGUucmFkaXVzID0gKDAsIF9odG1sX3V0aWxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5qb2luID09PSBcInNxdWFyZVwiID8gMCA6IHRoaXMucmFkaXVzKTtcbiAgICByZXR1cm4gc3R5bGU7XG4gIH1cblxufVxuXG5jbGFzcyBEYXRlRWxlbWVudCBleHRlbmRzIF94ZmFfb2JqZWN0LkNvbnRlbnRPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwiZGF0ZVwiKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kZmluYWxpemVdKCkge1xuICAgIGNvbnN0IGRhdGUgPSB0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XS50cmltKCk7XG5cbiAgICB0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XSA9IGRhdGUgPyBuZXcgRGF0ZShkYXRlKSA6IG51bGw7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJHRvSFRNTF0oYXZhaWxhYmxlU3BhY2UpIHtcbiAgICByZXR1cm4gdmFsdWVUb0h0bWwodGhpc1tfeGZhX29iamVjdC4kY29udGVudF0gPyB0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XS50b1N0cmluZygpIDogXCJcIik7XG4gIH1cblxufVxuXG5jbGFzcyBEYXRlVGltZSBleHRlbmRzIF94ZmFfb2JqZWN0LkNvbnRlbnRPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwiZGF0ZVRpbWVcIik7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgXCJcIjtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGZpbmFsaXplXSgpIHtcbiAgICBjb25zdCBkYXRlID0gdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0udHJpbSgpO1xuXG4gICAgdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0gPSBkYXRlID8gbmV3IERhdGUoZGF0ZSkgOiBudWxsO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiR0b0hUTUxdKGF2YWlsYWJsZVNwYWNlKSB7XG4gICAgcmV0dXJuIHZhbHVlVG9IdG1sKHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdID8gdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0udG9TdHJpbmcoKSA6IFwiXCIpO1xuICB9XG5cbn1cblxuY2xhc3MgRGF0ZVRpbWVFZGl0IGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImRhdGVUaW1lRWRpdFwiLCB0cnVlKTtcbiAgICB0aGlzLmhTY3JvbGxQb2xpY3kgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5oU2Nyb2xsUG9saWN5LCBbXCJhdXRvXCIsIFwib2ZmXCIsIFwib25cIl0pO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5waWNrZXIgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5waWNrZXIsIFtcImhvc3RcIiwgXCJub25lXCJdKTtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gICAgdGhpcy5ib3JkZXIgPSBudWxsO1xuICAgIHRoaXMuY29tYiA9IG51bGw7XG4gICAgdGhpcy5leHRyYXMgPSBudWxsO1xuICAgIHRoaXMubWFyZ2luID0gbnVsbDtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kdG9IVE1MXShhdmFpbGFibGVTcGFjZSkge1xuICAgIGNvbnN0IHN0eWxlID0gKDAsIF9odG1sX3V0aWxzLnRvU3R5bGUpKHRoaXMsIFwiYm9yZGVyXCIsIFwiZm9udFwiLCBcIm1hcmdpblwiKTtcblxuICAgIGNvbnN0IGZpZWxkID0gdGhpc1tfeGZhX29iamVjdC4kZ2V0UGFyZW50XSgpW194ZmFfb2JqZWN0LiRnZXRQYXJlbnRdKCk7XG5cbiAgICBjb25zdCBodG1sID0ge1xuICAgICAgbmFtZTogXCJpbnB1dFwiLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgZmllbGRJZDogZmllbGRbX3hmYV9vYmplY3QuJHVpZF0sXG4gICAgICAgIGRhdGFJZDogZmllbGRbX3hmYV9vYmplY3QuJGRhdGFdICYmIGZpZWxkW194ZmFfb2JqZWN0LiRkYXRhXVtfeGZhX29iamVjdC4kdWlkXSB8fCBmaWVsZFtfeGZhX29iamVjdC4kdWlkXSxcbiAgICAgICAgY2xhc3M6IFtcInhmYVRleHRmaWVsZFwiXSxcbiAgICAgICAgc3R5bGUsXG4gICAgICAgIFwiYXJpYS1sYWJlbFwiOiBhcmlhTGFiZWwoZmllbGQpXG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gX3V0aWxzLkhUTUxSZXN1bHQuc3VjY2Vzcyh7XG4gICAgICBuYW1lOiBcImxhYmVsXCIsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGNsYXNzOiBbXCJ4ZmFMYWJlbFwiXVxuICAgICAgfSxcbiAgICAgIGNoaWxkcmVuOiBbaHRtbF1cbiAgICB9KTtcbiAgfVxuXG59XG5cbmNsYXNzIERlY2ltYWwgZXh0ZW5kcyBfeGZhX29iamVjdC5Db250ZW50T2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImRlY2ltYWxcIik7XG4gICAgdGhpcy5mcmFjRGlnaXRzID0gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLmZyYWNEaWdpdHMsXG4gICAgICBkZWZhdWx0VmFsdWU6IDIsXG4gICAgICB2YWxpZGF0ZTogeCA9PiB0cnVlXG4gICAgfSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLmxlYWREaWdpdHMgPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMubGVhZERpZ2l0cyxcbiAgICAgIGRlZmF1bHRWYWx1ZTogLTEsXG4gICAgICB2YWxpZGF0ZTogeCA9PiB0cnVlXG4gICAgfSk7XG4gICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8IFwiXCI7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRmaW5hbGl6ZV0oKSB7XG4gICAgY29uc3QgbnVtYmVyID0gcGFyc2VGbG9hdCh0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XS50cmltKCkpO1xuICAgIHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdID0gaXNOYU4obnVtYmVyKSA/IG51bGwgOiBudW1iZXI7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJHRvSFRNTF0oYXZhaWxhYmxlU3BhY2UpIHtcbiAgICByZXR1cm4gdmFsdWVUb0h0bWwodGhpc1tfeGZhX29iamVjdC4kY29udGVudF0gIT09IG51bGwgPyB0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XS50b1N0cmluZygpIDogXCJcIik7XG4gIH1cblxufVxuXG5jbGFzcyBEZWZhdWx0VWkgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwiZGVmYXVsdFVpXCIsIHRydWUpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMuZXh0cmFzID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIERlc2MgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwiZGVzY1wiLCB0cnVlKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmJvb2xlYW4gPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmRhdGUgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmRhdGVUaW1lID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5kZWNpbWFsID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5leERhdGEgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmZsb2F0ID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5pbWFnZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuaW50ZWdlciA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMudGV4dCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMudGltZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICB9XG5cbn1cblxuY2xhc3MgRGlnZXN0TWV0aG9kIGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImRpZ2VzdE1ldGhvZFwiLCBbXCJcIiwgXCJTSEExXCIsIFwiU0hBMjU2XCIsIFwiU0hBNTEyXCIsIFwiUklQRU1EMTYwXCJdKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgfVxuXG59XG5cbmNsYXNzIERpZ2VzdE1ldGhvZHMgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwiZGlnZXN0TWV0aG9kc1wiLCB0cnVlKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMudHlwZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnR5cGUsIFtcIm9wdGlvbmFsXCIsIFwicmVxdWlyZWRcIl0pO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmRpZ2VzdE1ldGhvZCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICB9XG5cbn1cblxuY2xhc3MgRHJhdyBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJkcmF3XCIsIHRydWUpO1xuICAgIHRoaXMuYW5jaG9yVHlwZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLmFuY2hvclR5cGUsIFtcInRvcExlZnRcIiwgXCJib3R0b21DZW50ZXJcIiwgXCJib3R0b21MZWZ0XCIsIFwiYm90dG9tUmlnaHRcIiwgXCJtaWRkbGVDZW50ZXJcIiwgXCJtaWRkbGVMZWZ0XCIsIFwibWlkZGxlUmlnaHRcIiwgXCJ0b3BDZW50ZXJcIiwgXCJ0b3BSaWdodFwiXSk7XG4gICAgdGhpcy5jb2xTcGFuID0gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLmNvbFNwYW4sXG4gICAgICBkZWZhdWx0VmFsdWU6IDEsXG4gICAgICB2YWxpZGF0ZTogbiA9PiBuID49IDEgfHwgbiA9PT0gLTFcbiAgICB9KTtcbiAgICB0aGlzLmggPSBhdHRyaWJ1dGVzLmggPyAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KShhdHRyaWJ1dGVzLmgpIDogXCJcIjtcbiAgICB0aGlzLmhBbGlnbiA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLmhBbGlnbiwgW1wibGVmdFwiLCBcImNlbnRlclwiLCBcImp1c3RpZnlcIiwgXCJqdXN0aWZ5QWxsXCIsIFwicmFkaXhcIiwgXCJyaWdodFwiXSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLmxvY2FsZSA9IGF0dHJpYnV0ZXMubG9jYWxlIHx8IFwiXCI7XG4gICAgdGhpcy5tYXhIID0gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkoYXR0cmlidXRlcy5tYXhILCBcIjBwdFwiKTtcbiAgICB0aGlzLm1heFcgPSAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KShhdHRyaWJ1dGVzLm1heFcsIFwiMHB0XCIpO1xuICAgIHRoaXMubWluSCA9ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMubWluSCwgXCIwcHRcIik7XG4gICAgdGhpcy5taW5XID0gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkoYXR0cmlidXRlcy5taW5XLCBcIjBwdFwiKTtcbiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgXCJcIjtcbiAgICB0aGlzLnByZXNlbmNlID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMucHJlc2VuY2UsIFtcInZpc2libGVcIiwgXCJoaWRkZW5cIiwgXCJpbmFjdGl2ZVwiLCBcImludmlzaWJsZVwiXSk7XG4gICAgdGhpcy5yZWxldmFudCA9ICgwLCBfdXRpbHMuZ2V0UmVsZXZhbnQpKGF0dHJpYnV0ZXMucmVsZXZhbnQpO1xuICAgIHRoaXMucm90YXRlID0gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLnJvdGF0ZSxcbiAgICAgIGRlZmF1bHRWYWx1ZTogMCxcbiAgICAgIHZhbGlkYXRlOiB4ID0+IHggJSA5MCA9PT0gMFxuICAgIH0pO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLncgPSBhdHRyaWJ1dGVzLncgPyAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KShhdHRyaWJ1dGVzLncpIDogXCJcIjtcbiAgICB0aGlzLnggPSAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KShhdHRyaWJ1dGVzLngsIFwiMHB0XCIpO1xuICAgIHRoaXMueSA9ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMueSwgXCIwcHRcIik7XG4gICAgdGhpcy5hc3Npc3QgPSBudWxsO1xuICAgIHRoaXMuYm9yZGVyID0gbnVsbDtcbiAgICB0aGlzLmNhcHRpb24gPSBudWxsO1xuICAgIHRoaXMuZGVzYyA9IG51bGw7XG4gICAgdGhpcy5leHRyYXMgPSBudWxsO1xuICAgIHRoaXMuZm9udCA9IG51bGw7XG4gICAgdGhpcy5rZWVwID0gbnVsbDtcbiAgICB0aGlzLm1hcmdpbiA9IG51bGw7XG4gICAgdGhpcy5wYXJhID0gbnVsbDtcbiAgICB0aGlzLnRyYXZlcnNhbCA9IG51bGw7XG4gICAgdGhpcy51aSA9IG51bGw7XG4gICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRzZXRWYWx1ZV0odmFsdWUpIHtcbiAgICBfc2V0VmFsdWUodGhpcywgdmFsdWUpO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiR0b0hUTUxdKGF2YWlsYWJsZVNwYWNlKSB7XG4gICAgc2V0VGFiSW5kZXgodGhpcyk7XG5cbiAgICBpZiAodGhpcy5wcmVzZW5jZSA9PT0gXCJoaWRkZW5cIiB8fCB0aGlzLnByZXNlbmNlID09PSBcImluYWN0aXZlXCIpIHtcbiAgICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5FTVBUWTtcbiAgICB9XG5cbiAgICAoMCwgX2h0bWxfdXRpbHMuZml4RGltZW5zaW9ucykodGhpcyk7XG5cbiAgICB0aGlzW194ZmFfb2JqZWN0LiRwdXNoUGFyYV0oKTtcblxuICAgIGNvbnN0IHNhdmVkVyA9IHRoaXMudztcbiAgICBjb25zdCBzYXZlZEggPSB0aGlzLmg7XG4gICAgY29uc3Qge1xuICAgICAgdyxcbiAgICAgIGgsXG4gICAgICBpc0Jyb2tlblxuICAgIH0gPSAoMCwgX2h0bWxfdXRpbHMubGF5b3V0Tm9kZSkodGhpcywgYXZhaWxhYmxlU3BhY2UpO1xuXG4gICAgaWYgKHcgJiYgdGhpcy53ID09PSBcIlwiKSB7XG4gICAgICBpZiAoaXNCcm9rZW4gJiYgdGhpc1tfeGZhX29iamVjdC4kZ2V0U3ViZm9ybVBhcmVudF0oKVtfeGZhX29iamVjdC4kaXNUaGVyZU1vcmVXaWR0aF0oKSkge1xuICAgICAgICB0aGlzW194ZmFfb2JqZWN0LiRwb3BQYXJhXSgpO1xuXG4gICAgICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5GQUlMVVJFO1xuICAgICAgfVxuXG4gICAgICB0aGlzLncgPSB3O1xuICAgIH1cblxuICAgIGlmIChoICYmIHRoaXMuaCA9PT0gXCJcIikge1xuICAgICAgdGhpcy5oID0gaDtcbiAgICB9XG5cbiAgICBzZXRGaXJzdFVuc3BsaXR0YWJsZSh0aGlzKTtcblxuICAgIGlmICghKDAsIF9sYXlvdXQuY2hlY2tEaW1lbnNpb25zKSh0aGlzLCBhdmFpbGFibGVTcGFjZSkpIHtcbiAgICAgIHRoaXMudyA9IHNhdmVkVztcbiAgICAgIHRoaXMuaCA9IHNhdmVkSDtcblxuICAgICAgdGhpc1tfeGZhX29iamVjdC4kcG9wUGFyYV0oKTtcblxuICAgICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LkZBSUxVUkU7XG4gICAgfVxuXG4gICAgdW5zZXRGaXJzdFVuc3BsaXR0YWJsZSh0aGlzKTtcbiAgICBjb25zdCBzdHlsZSA9ICgwLCBfaHRtbF91dGlscy50b1N0eWxlKSh0aGlzLCBcImZvbnRcIiwgXCJoQWxpZ25cIiwgXCJkaW1lbnNpb25zXCIsIFwicG9zaXRpb25cIiwgXCJwcmVzZW5jZVwiLCBcInJvdGF0ZVwiLCBcImFuY2hvclR5cGVcIiwgXCJib3JkZXJcIiwgXCJtYXJnaW5cIik7XG4gICAgKDAsIF9odG1sX3V0aWxzLnNldE1pbk1heERpbWVuc2lvbnMpKHRoaXMsIHN0eWxlKTtcblxuICAgIGlmIChzdHlsZS5tYXJnaW4pIHtcbiAgICAgIHN0eWxlLnBhZGRpbmcgPSBzdHlsZS5tYXJnaW47XG4gICAgICBkZWxldGUgc3R5bGUubWFyZ2luO1xuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBbXCJ4ZmFEcmF3XCJdO1xuXG4gICAgaWYgKHRoaXMuZm9udCkge1xuICAgICAgY2xhc3NOYW1lcy5wdXNoKFwieGZhRm9udFwiKTtcbiAgICB9XG5cbiAgICBpZiAoKDAsIF9odG1sX3V0aWxzLmlzUHJpbnRPbmx5KSh0aGlzKSkge1xuICAgICAgY2xhc3NOYW1lcy5wdXNoKFwieGZhUHJpbnRPbmx5XCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7XG4gICAgICBzdHlsZSxcbiAgICAgIGlkOiB0aGlzW194ZmFfb2JqZWN0LiR1aWRdLFxuICAgICAgY2xhc3M6IGNsYXNzTmFtZXNcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMubmFtZSkge1xuICAgICAgYXR0cmlidXRlcy54ZmFOYW1lID0gdGhpcy5uYW1lO1xuICAgIH1cblxuICAgIGNvbnN0IGh0bWwgPSB7XG4gICAgICBuYW1lOiBcImRpdlwiLFxuICAgICAgYXR0cmlidXRlcyxcbiAgICAgIGNoaWxkcmVuOiBbXVxuICAgIH07XG4gICAgYXBwbHlBc3Npc3QodGhpcywgYXR0cmlidXRlcyk7XG4gICAgY29uc3QgYmJveCA9ICgwLCBfaHRtbF91dGlscy5jb21wdXRlQmJveCkodGhpcywgaHRtbCwgYXZhaWxhYmxlU3BhY2UpO1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy52YWx1ZSA/IHRoaXMudmFsdWVbX3hmYV9vYmplY3QuJHRvSFRNTF0oYXZhaWxhYmxlU3BhY2UpLmh0bWwgOiBudWxsO1xuXG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICB0aGlzLncgPSBzYXZlZFc7XG4gICAgICB0aGlzLmggPSBzYXZlZEg7XG5cbiAgICAgIHRoaXNbX3hmYV9vYmplY3QuJHBvcFBhcmFdKCk7XG5cbiAgICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5zdWNjZXNzKCgwLCBfaHRtbF91dGlscy5jcmVhdGVXcmFwcGVyKSh0aGlzLCBodG1sKSwgYmJveCk7XG4gICAgfVxuXG4gICAgaHRtbC5jaGlsZHJlbi5wdXNoKHZhbHVlKTtcbiAgICAoMCwgX2h0bWxfdXRpbHMuc2V0UGFyYSkodGhpcywgc3R5bGUsIHZhbHVlKTtcbiAgICB0aGlzLncgPSBzYXZlZFc7XG4gICAgdGhpcy5oID0gc2F2ZWRIO1xuXG4gICAgdGhpc1tfeGZhX29iamVjdC4kcG9wUGFyYV0oKTtcblxuICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5zdWNjZXNzKCgwLCBfaHRtbF91dGlscy5jcmVhdGVXcmFwcGVyKSh0aGlzLCBodG1sKSwgYmJveCk7XG4gIH1cblxufVxuXG5jbGFzcyBFZGdlIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImVkZ2VcIiwgdHJ1ZSk7XG4gICAgdGhpcy5jYXAgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5jYXAsIFtcInNxdWFyZVwiLCBcImJ1dHRcIiwgXCJyb3VuZFwiXSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLnByZXNlbmNlID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMucHJlc2VuY2UsIFtcInZpc2libGVcIiwgXCJoaWRkZW5cIiwgXCJpbmFjdGl2ZVwiLCBcImludmlzaWJsZVwiXSk7XG4gICAgdGhpcy5zdHJva2UgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5zdHJva2UsIFtcInNvbGlkXCIsIFwiZGFzaERvdFwiLCBcImRhc2hEb3REb3RcIiwgXCJkYXNoZWRcIiwgXCJkb3R0ZWRcIiwgXCJlbWJvc3NlZFwiLCBcImV0Y2hlZFwiLCBcImxvd2VyZWRcIiwgXCJyYWlzZWRcIl0pO1xuICAgIHRoaXMudGhpY2tuZXNzID0gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkoYXR0cmlidXRlcy50aGlja25lc3MsIFwiMC41cHRcIik7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMuY29sb3IgPSBudWxsO1xuICAgIHRoaXMuZXh0cmFzID0gbnVsbDtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kdG9TdHlsZV0oKSB7XG4gICAgY29uc3Qgc3R5bGUgPSAoMCwgX2h0bWxfdXRpbHMudG9TdHlsZSkodGhpcywgXCJ2aXNpYmlsaXR5XCIpO1xuICAgIE9iamVjdC5hc3NpZ24oc3R5bGUsIHtcbiAgICAgIGxpbmVjYXA6IHRoaXMuY2FwLFxuICAgICAgd2lkdGg6ICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMudGhpY2tuZXNzKSxcbiAgICAgIGNvbG9yOiB0aGlzLmNvbG9yID8gdGhpcy5jb2xvcltfeGZhX29iamVjdC4kdG9TdHlsZV0oKSA6IFwiIzAwMDAwMFwiLFxuICAgICAgc3R5bGU6IFwiXCJcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnByZXNlbmNlICE9PSBcInZpc2libGVcIikge1xuICAgICAgc3R5bGUuc3R5bGUgPSBcIm5vbmVcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgc3dpdGNoICh0aGlzLnN0cm9rZSkge1xuICAgICAgICBjYXNlIFwic29saWRcIjpcbiAgICAgICAgICBzdHlsZS5zdHlsZSA9IFwic29saWRcIjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiZGFzaERvdFwiOlxuICAgICAgICAgIHN0eWxlLnN0eWxlID0gXCJkYXNoZWRcIjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiZGFzaERvdERvdFwiOlxuICAgICAgICAgIHN0eWxlLnN0eWxlID0gXCJkYXNoZWRcIjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiZGFzaGVkXCI6XG4gICAgICAgICAgc3R5bGUuc3R5bGUgPSBcImRhc2hlZFwiO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJkb3R0ZWRcIjpcbiAgICAgICAgICBzdHlsZS5zdHlsZSA9IFwiZG90dGVkXCI7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcImVtYm9zc2VkXCI6XG4gICAgICAgICAgc3R5bGUuc3R5bGUgPSBcInJpZGdlXCI7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcImV0Y2hlZFwiOlxuICAgICAgICAgIHN0eWxlLnN0eWxlID0gXCJncm9vdmVcIjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwibG93ZXJlZFwiOlxuICAgICAgICAgIHN0eWxlLnN0eWxlID0gXCJpbnNldFwiO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJyYWlzZWRcIjpcbiAgICAgICAgICBzdHlsZS5zdHlsZSA9IFwib3V0c2V0XCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0eWxlO1xuICB9XG5cbn1cblxuY2xhc3MgRW5jb2RpbmcgZXh0ZW5kcyBfeGZhX29iamVjdC5PcHRpb25PYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwiZW5jb2RpbmdcIiwgW1wiYWRiZS54NTA5LnJzYV9zaGExXCIsIFwiYWRiZS5wa2NzNy5kZXRhY2hlZFwiLCBcImFkYmUucGtjczcuc2hhMVwiXSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gIH1cblxufVxuXG5jbGFzcyBFbmNvZGluZ3MgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwiZW5jb2RpbmdzXCIsIHRydWUpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy50eXBlID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMudHlwZSwgW1wib3B0aW9uYWxcIiwgXCJyZXF1aXJlZFwiXSk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMuZW5jb2RpbmcgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgfVxuXG59XG5cbmNsYXNzIEVuY3J5cHQgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwiZW5jcnlwdFwiLCB0cnVlKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmNlcnRpZmljYXRlID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIEVuY3J5cHREYXRhIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImVuY3J5cHREYXRhXCIsIHRydWUpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5vcGVyYXRpb24gPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5vcGVyYXRpb24sIFtcImVuY3J5cHRcIiwgXCJkZWNyeXB0XCJdKTtcbiAgICB0aGlzLnRhcmdldCA9IGF0dHJpYnV0ZXMudGFyZ2V0IHx8IFwiXCI7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMuZmlsdGVyID0gbnVsbDtcbiAgICB0aGlzLm1hbmlmZXN0ID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIEVuY3J5cHRpb24gZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwiZW5jcnlwdGlvblwiLCB0cnVlKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMudHlwZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnR5cGUsIFtcIm9wdGlvbmFsXCIsIFwicmVxdWlyZWRcIl0pO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmNlcnRpZmljYXRlID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gIH1cblxufVxuXG5jbGFzcyBFbmNyeXB0aW9uTWV0aG9kIGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImVuY3J5cHRpb25NZXRob2RcIiwgW1wiXCIsIFwiQUVTMjU2LUNCQ1wiLCBcIlRSSVBMRURFUy1DQkNcIiwgXCJBRVMxMjgtQ0JDXCIsIFwiQUVTMTkyLUNCQ1wiXSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gIH1cblxufVxuXG5jbGFzcyBFbmNyeXB0aW9uTWV0aG9kcyBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJlbmNyeXB0aW9uTWV0aG9kc1wiLCB0cnVlKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMudHlwZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnR5cGUsIFtcIm9wdGlvbmFsXCIsIFwicmVxdWlyZWRcIl0pO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmVuY3J5cHRpb25NZXRob2QgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgfVxuXG59XG5cbmNsYXNzIEV2ZW50IGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImV2ZW50XCIsIHRydWUpO1xuICAgIHRoaXMuYWN0aXZpdHkgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5hY3Rpdml0eSwgW1wiY2xpY2tcIiwgXCJjaGFuZ2VcIiwgXCJkb2NDbG9zZVwiLCBcImRvY1JlYWR5XCIsIFwiZW50ZXJcIiwgXCJleGl0XCIsIFwiZnVsbFwiLCBcImluZGV4Q2hhbmdlXCIsIFwiaW5pdGlhbGl6ZVwiLCBcIm1vdXNlRG93blwiLCBcIm1vdXNlRW50ZXJcIiwgXCJtb3VzZUV4aXRcIiwgXCJtb3VzZVVwXCIsIFwicG9zdEV4ZWN1dGVcIiwgXCJwb3N0T3BlblwiLCBcInBvc3RQcmludFwiLCBcInBvc3RTYXZlXCIsIFwicG9zdFNpZ25cIiwgXCJwb3N0U3VibWl0XCIsIFwicHJlRXhlY3V0ZVwiLCBcInByZU9wZW5cIiwgXCJwcmVQcmludFwiLCBcInByZVNhdmVcIiwgXCJwcmVTaWduXCIsIFwicHJlU3VibWl0XCIsIFwicmVhZHlcIiwgXCJ2YWxpZGF0aW9uU3RhdGVcIl0pO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5saXN0ZW4gPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5saXN0ZW4sIFtcInJlZk9ubHlcIiwgXCJyZWZBbmREZXNjZW5kZW50c1wiXSk7XG4gICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8IFwiXCI7XG4gICAgdGhpcy5yZWYgPSBhdHRyaWJ1dGVzLnJlZiB8fCBcIlwiO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmV4dHJhcyA9IG51bGw7XG4gICAgdGhpcy5lbmNyeXB0RGF0YSA9IG51bGw7XG4gICAgdGhpcy5leGVjdXRlID0gbnVsbDtcbiAgICB0aGlzLnNjcmlwdCA9IG51bGw7XG4gICAgdGhpcy5zaWduRGF0YSA9IG51bGw7XG4gICAgdGhpcy5zdWJtaXQgPSBudWxsO1xuICB9XG5cbn1cblxuY2xhc3MgRXhEYXRhIGV4dGVuZHMgX3hmYV9vYmplY3QuQ29udGVudE9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJleERhdGFcIik7XG4gICAgdGhpcy5jb250ZW50VHlwZSA9IGF0dHJpYnV0ZXMuY29udGVudFR5cGUgfHwgXCJcIjtcbiAgICB0aGlzLmhyZWYgPSBhdHRyaWJ1dGVzLmhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMubWF4TGVuZ3RoID0gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLm1heExlbmd0aCxcbiAgICAgIGRlZmF1bHRWYWx1ZTogLTEsXG4gICAgICB2YWxpZGF0ZTogeCA9PiB4ID49IC0xXG4gICAgfSk7XG4gICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8IFwiXCI7XG4gICAgdGhpcy5yaWQgPSBhdHRyaWJ1dGVzLnJpZCB8fCBcIlwiO1xuICAgIHRoaXMudHJhbnNmZXJFbmNvZGluZyA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnRyYW5zZmVyRW5jb2RpbmcsIFtcIm5vbmVcIiwgXCJiYXNlNjRcIiwgXCJwYWNrYWdlXCJdKTtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGlzQ0RBVEFYbWxdKCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRlbnRUeXBlID09PSBcInRleHQvaHRtbFwiO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRvbkNoaWxkXShjaGlsZCkge1xuICAgIGlmICh0aGlzLmNvbnRlbnRUeXBlID09PSBcInRleHQvaHRtbFwiICYmIGNoaWxkW194ZmFfb2JqZWN0LiRuYW1lc3BhY2VJZF0gPT09IF9uYW1lc3BhY2VzLk5hbWVzcGFjZUlkcy54aHRtbC5pZCkge1xuICAgICAgdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0gPSBjaGlsZDtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbnRlbnRUeXBlID09PSBcInRleHQveG1sXCIpIHtcbiAgICAgIHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdID0gY2hpbGQ7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJHRvSFRNTF0oYXZhaWxhYmxlU3BhY2UpIHtcbiAgICBpZiAodGhpcy5jb250ZW50VHlwZSAhPT0gXCJ0ZXh0L2h0bWxcIiB8fCAhdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0pIHtcbiAgICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5FTVBUWTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1tfeGZhX29iamVjdC4kY29udGVudF1bX3hmYV9vYmplY3QuJHRvSFRNTF0oYXZhaWxhYmxlU3BhY2UpO1xuICB9XG5cbn1cblxuY2xhc3MgRXhPYmplY3QgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwiZXhPYmplY3RcIiwgdHJ1ZSk7XG4gICAgdGhpcy5hcmNoaXZlID0gYXR0cmlidXRlcy5hcmNoaXZlIHx8IFwiXCI7XG4gICAgdGhpcy5jbGFzc0lkID0gYXR0cmlidXRlcy5jbGFzc0lkIHx8IFwiXCI7XG4gICAgdGhpcy5jb2RlQmFzZSA9IGF0dHJpYnV0ZXMuY29kZUJhc2UgfHwgXCJcIjtcbiAgICB0aGlzLmNvZGVUeXBlID0gYXR0cmlidXRlcy5jb2RlVHlwZSB8fCBcIlwiO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8IFwiXCI7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMuZXh0cmFzID0gbnVsbDtcbiAgICB0aGlzLmJvb2xlYW4gPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmRhdGUgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmRhdGVUaW1lID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5kZWNpbWFsID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5leERhdGEgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmV4T2JqZWN0ID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5mbG9hdCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuaW1hZ2UgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmludGVnZXIgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnRleHQgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnRpbWUgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgfVxuXG59XG5cbmNsYXNzIEV4Y2xHcm91cCBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJleGNsR3JvdXBcIiwgdHJ1ZSk7XG4gICAgdGhpcy5hY2Nlc3MgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5hY2Nlc3MsIFtcIm9wZW5cIiwgXCJub25JbnRlcmFjdGl2ZVwiLCBcInByb3RlY3RlZFwiLCBcInJlYWRPbmx5XCJdKTtcbiAgICB0aGlzLmFjY2Vzc0tleSA9IGF0dHJpYnV0ZXMuYWNjZXNzS2V5IHx8IFwiXCI7XG4gICAgdGhpcy5hbmNob3JUeXBlID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMuYW5jaG9yVHlwZSwgW1widG9wTGVmdFwiLCBcImJvdHRvbUNlbnRlclwiLCBcImJvdHRvbUxlZnRcIiwgXCJib3R0b21SaWdodFwiLCBcIm1pZGRsZUNlbnRlclwiLCBcIm1pZGRsZUxlZnRcIiwgXCJtaWRkbGVSaWdodFwiLCBcInRvcENlbnRlclwiLCBcInRvcFJpZ2h0XCJdKTtcbiAgICB0aGlzLmNvbFNwYW4gPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMuY29sU3BhbixcbiAgICAgIGRlZmF1bHRWYWx1ZTogMSxcbiAgICAgIHZhbGlkYXRlOiBuID0+IG4gPj0gMSB8fCBuID09PSAtMVxuICAgIH0pO1xuICAgIHRoaXMuaCA9IGF0dHJpYnV0ZXMuaCA/ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMuaCkgOiBcIlwiO1xuICAgIHRoaXMuaEFsaWduID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMuaEFsaWduLCBbXCJsZWZ0XCIsIFwiY2VudGVyXCIsIFwianVzdGlmeVwiLCBcImp1c3RpZnlBbGxcIiwgXCJyYWRpeFwiLCBcInJpZ2h0XCJdKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMubGF5b3V0ID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMubGF5b3V0LCBbXCJwb3NpdGlvblwiLCBcImxyLXRiXCIsIFwicmwtcm93XCIsIFwicmwtdGJcIiwgXCJyb3dcIiwgXCJ0YWJsZVwiLCBcInRiXCJdKTtcbiAgICB0aGlzLm1heEggPSAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KShhdHRyaWJ1dGVzLm1heEgsIFwiMHB0XCIpO1xuICAgIHRoaXMubWF4VyA9ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMubWF4VywgXCIwcHRcIik7XG4gICAgdGhpcy5taW5IID0gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkoYXR0cmlidXRlcy5taW5ILCBcIjBwdFwiKTtcbiAgICB0aGlzLm1pblcgPSAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KShhdHRyaWJ1dGVzLm1pblcsIFwiMHB0XCIpO1xuICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSB8fCBcIlwiO1xuICAgIHRoaXMucHJlc2VuY2UgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5wcmVzZW5jZSwgW1widmlzaWJsZVwiLCBcImhpZGRlblwiLCBcImluYWN0aXZlXCIsIFwiaW52aXNpYmxlXCJdKTtcbiAgICB0aGlzLnJlbGV2YW50ID0gKDAsIF91dGlscy5nZXRSZWxldmFudCkoYXR0cmlidXRlcy5yZWxldmFudCk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMudyA9IGF0dHJpYnV0ZXMudyA/ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMudykgOiBcIlwiO1xuICAgIHRoaXMueCA9ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMueCwgXCIwcHRcIik7XG4gICAgdGhpcy55ID0gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkoYXR0cmlidXRlcy55LCBcIjBwdFwiKTtcbiAgICB0aGlzLmFzc2lzdCA9IG51bGw7XG4gICAgdGhpcy5iaW5kID0gbnVsbDtcbiAgICB0aGlzLmJvcmRlciA9IG51bGw7XG4gICAgdGhpcy5jYWxjdWxhdGUgPSBudWxsO1xuICAgIHRoaXMuY2FwdGlvbiA9IG51bGw7XG4gICAgdGhpcy5kZXNjID0gbnVsbDtcbiAgICB0aGlzLmV4dHJhcyA9IG51bGw7XG4gICAgdGhpcy5tYXJnaW4gPSBudWxsO1xuICAgIHRoaXMucGFyYSA9IG51bGw7XG4gICAgdGhpcy50cmF2ZXJzYWwgPSBudWxsO1xuICAgIHRoaXMudmFsaWRhdGUgPSBudWxsO1xuICAgIHRoaXMuY29ubmVjdCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZXZlbnQgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmZpZWxkID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5zZXRQcm9wZXJ0eSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRpc0JpbmRhYmxlXSgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kaGFzU2V0dGFibGVWYWx1ZV0oKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJHNldFZhbHVlXSh2YWx1ZSkge1xuICAgIGZvciAoY29uc3QgZmllbGQgb2YgdGhpcy5maWVsZC5jaGlsZHJlbikge1xuICAgICAgaWYgKCFmaWVsZC52YWx1ZSkge1xuICAgICAgICBjb25zdCBub2RlVmFsdWUgPSBuZXcgVmFsdWUoe30pO1xuXG4gICAgICAgIGZpZWxkW194ZmFfb2JqZWN0LiRhcHBlbmRDaGlsZF0obm9kZVZhbHVlKTtcblxuICAgICAgICBmaWVsZC52YWx1ZSA9IG5vZGVWYWx1ZTtcbiAgICAgIH1cblxuICAgICAgZmllbGQudmFsdWVbX3hmYV9vYmplY3QuJHNldFZhbHVlXSh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRpc1RoZXJlTW9yZVdpZHRoXSgpIHtcbiAgICByZXR1cm4gdGhpcy5sYXlvdXQuZW5kc1dpdGgoXCItdGJcIikgJiYgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLmF0dGVtcHQgPT09IDAgJiYgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLm51bWJlckluTGluZSA+IDAgfHwgdGhpc1tfeGZhX29iamVjdC4kZ2V0UGFyZW50XSgpW194ZmFfb2JqZWN0LiRpc1RoZXJlTW9yZVdpZHRoXSgpO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRpc1NwbGl0dGFibGVdKCkge1xuICAgIGNvbnN0IHBhcmVudCA9IHRoaXNbX3hmYV9vYmplY3QuJGdldFN1YmZvcm1QYXJlbnRdKCk7XG5cbiAgICBpZiAoIXBhcmVudFtfeGZhX29iamVjdC4kaXNTcGxpdHRhYmxlXSgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXS5faXNTcGxpdHRhYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0uX2lzU3BsaXR0YWJsZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sYXlvdXQgPT09IFwicG9zaXRpb25cIiB8fCB0aGlzLmxheW91dC5pbmNsdWRlcyhcInJvd1wiKSkge1xuICAgICAgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLl9pc1NwbGl0dGFibGUgPSBmYWxzZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAocGFyZW50LmxheW91dCAmJiBwYXJlbnQubGF5b3V0LmVuZHNXaXRoKFwiLXRiXCIpICYmIHBhcmVudFtfeGZhX29iamVjdC4kZXh0cmFdLm51bWJlckluTGluZSAhPT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXS5faXNTcGxpdHRhYmxlID0gdHJ1ZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kZmx1c2hIVE1MXSgpIHtcbiAgICByZXR1cm4gKDAsIF9sYXlvdXQuZmx1c2hIVE1MKSh0aGlzKTtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kYWRkSFRNTF0oaHRtbCwgYmJveCkge1xuICAgICgwLCBfbGF5b3V0LmFkZEhUTUwpKHRoaXMsIGh0bWwsIGJib3gpO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRnZXRBdmFpbGFibGVTcGFjZV0oKSB7XG4gICAgcmV0dXJuICgwLCBfbGF5b3V0LmdldEF2YWlsYWJsZVNwYWNlKSh0aGlzKTtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kdG9IVE1MXShhdmFpbGFibGVTcGFjZSkge1xuICAgIHNldFRhYkluZGV4KHRoaXMpO1xuXG4gICAgaWYgKHRoaXMucHJlc2VuY2UgPT09IFwiaGlkZGVuXCIgfHwgdGhpcy5wcmVzZW5jZSA9PT0gXCJpbmFjdGl2ZVwiIHx8IHRoaXMuaCA9PT0gMCB8fCB0aGlzLncgPT09IDApIHtcbiAgICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5FTVBUWTtcbiAgICB9XG5cbiAgICAoMCwgX2h0bWxfdXRpbHMuZml4RGltZW5zaW9ucykodGhpcyk7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBbXTtcbiAgICBjb25zdCBhdHRyaWJ1dGVzID0ge1xuICAgICAgaWQ6IHRoaXNbX3hmYV9vYmplY3QuJHVpZF0sXG4gICAgICBjbGFzczogW11cbiAgICB9O1xuICAgICgwLCBfaHRtbF91dGlscy5zZXRBY2Nlc3MpKHRoaXMsIGF0dHJpYnV0ZXMuY2xhc3MpO1xuXG4gICAgaWYgKCF0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0pIHtcbiAgICAgIHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgfVxuXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0sIHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgYXR0cmlidXRlcyxcbiAgICAgIGF0dGVtcHQ6IDAsXG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgbnVtYmVySW5MaW5lOiAwLFxuICAgICAgYXZhaWxhYmxlU3BhY2U6IHtcbiAgICAgICAgd2lkdGg6IE1hdGgubWluKHRoaXMudyB8fCBJbmZpbml0eSwgYXZhaWxhYmxlU3BhY2Uud2lkdGgpLFxuICAgICAgICBoZWlnaHQ6IE1hdGgubWluKHRoaXMuaCB8fCBJbmZpbml0eSwgYXZhaWxhYmxlU3BhY2UuaGVpZ2h0KVxuICAgICAgfSxcbiAgICAgIHdpZHRoOiAwLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgcHJldkhlaWdodDogMCxcbiAgICAgIGN1cnJlbnRXaWR0aDogMFxuICAgIH0pO1xuXG4gICAgY29uc3QgaXNTcGxpdHRhYmxlID0gdGhpc1tfeGZhX29iamVjdC4kaXNTcGxpdHRhYmxlXSgpO1xuXG4gICAgaWYgKCFpc1NwbGl0dGFibGUpIHtcbiAgICAgIHNldEZpcnN0VW5zcGxpdHRhYmxlKHRoaXMpO1xuICAgIH1cblxuICAgIGlmICghKDAsIF9sYXlvdXQuY2hlY2tEaW1lbnNpb25zKSh0aGlzLCBhdmFpbGFibGVTcGFjZSkpIHtcbiAgICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5GQUlMVVJFO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbHRlciA9IG5ldyBTZXQoW1wiZmllbGRcIl0pO1xuXG4gICAgaWYgKHRoaXMubGF5b3V0LmluY2x1ZGVzKFwicm93XCIpKSB7XG4gICAgICBjb25zdCBjb2x1bW5XaWR0aHMgPSB0aGlzW194ZmFfb2JqZWN0LiRnZXRTdWJmb3JtUGFyZW50XSgpLmNvbHVtbldpZHRocztcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29sdW1uV2lkdGhzKSAmJiBjb2x1bW5XaWR0aHMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0uY29sdW1uV2lkdGhzID0gY29sdW1uV2lkdGhzO1xuICAgICAgICB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0uY3VycmVudENvbHVtbiA9IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc3R5bGUgPSAoMCwgX2h0bWxfdXRpbHMudG9TdHlsZSkodGhpcywgXCJhbmNob3JUeXBlXCIsIFwiZGltZW5zaW9uc1wiLCBcInBvc2l0aW9uXCIsIFwicHJlc2VuY2VcIiwgXCJib3JkZXJcIiwgXCJtYXJnaW5cIiwgXCJoQWxpZ25cIik7XG4gICAgY29uc3QgY2xhc3NOYW1lcyA9IFtcInhmYUV4Y2xncm91cFwiXTtcbiAgICBjb25zdCBjbCA9ICgwLCBfaHRtbF91dGlscy5sYXlvdXRDbGFzcykodGhpcyk7XG5cbiAgICBpZiAoY2wpIHtcbiAgICAgIGNsYXNzTmFtZXMucHVzaChjbCk7XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfaHRtbF91dGlscy5pc1ByaW50T25seSkodGhpcykpIHtcbiAgICAgIGNsYXNzTmFtZXMucHVzaChcInhmYVByaW50T25seVwiKTtcbiAgICB9XG5cbiAgICBhdHRyaWJ1dGVzLnN0eWxlID0gc3R5bGU7XG4gICAgYXR0cmlidXRlcy5jbGFzcyA9IGNsYXNzTmFtZXM7XG5cbiAgICBpZiAodGhpcy5uYW1lKSB7XG4gICAgICBhdHRyaWJ1dGVzLnhmYU5hbWUgPSB0aGlzLm5hbWU7XG4gICAgfVxuXG4gICAgdGhpc1tfeGZhX29iamVjdC4kcHVzaFBhcmFdKCk7XG5cbiAgICBjb25zdCBpc0xyVGIgPSB0aGlzLmxheW91dCA9PT0gXCJsci10YlwiIHx8IHRoaXMubGF5b3V0ID09PSBcInJsLXRiXCI7XG4gICAgY29uc3QgbWF4UnVuID0gaXNMclRiID8gTUFYX0FUVEVNUFRTX0ZPUl9MUlRCX0xBWU9VVCA6IDE7XG5cbiAgICBmb3IgKDsgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLmF0dGVtcHQgPCBtYXhSdW47IHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXS5hdHRlbXB0KyspIHtcbiAgICAgIGlmIChpc0xyVGIgJiYgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLmF0dGVtcHQgPT09IE1BWF9BVFRFTVBUU19GT1JfTFJUQl9MQVlPVVQgLSAxKSB7XG4gICAgICAgIHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXS5udW1iZXJJbkxpbmUgPSAwO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzW194ZmFfb2JqZWN0LiRjaGlsZHJlblRvSFRNTF0oe1xuICAgICAgICBmaWx0ZXIsXG4gICAgICAgIGluY2x1ZGU6IHRydWVcbiAgICAgIH0pO1xuXG4gICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXN1bHQuaXNCcmVhaygpKSB7XG4gICAgICAgIHRoaXNbX3hmYV9vYmplY3QuJHBvcFBhcmFdKCk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzTHJUYiAmJiB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0uYXR0ZW1wdCA9PT0gMCAmJiB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0ubnVtYmVySW5MaW5lID09PSAwICYmICF0aGlzW194ZmFfb2JqZWN0LiRnZXRUZW1wbGF0ZVJvb3RdKClbX3hmYV9vYmplY3QuJGV4dHJhXS5ub0xheW91dEZhaWx1cmUpIHtcbiAgICAgICAgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLmF0dGVtcHQgPSBtYXhSdW47XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXNbX3hmYV9vYmplY3QuJHBvcFBhcmFdKCk7XG5cbiAgICBpZiAoIWlzU3BsaXR0YWJsZSkge1xuICAgICAgdW5zZXRGaXJzdFVuc3BsaXR0YWJsZSh0aGlzKTtcbiAgICB9XG5cbiAgICBpZiAodGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLmF0dGVtcHQgPT09IG1heFJ1bikge1xuICAgICAgaWYgKCFpc1NwbGl0dGFibGUpIHtcbiAgICAgICAgZGVsZXRlIHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LkZBSUxVUkU7XG4gICAgfVxuXG4gICAgbGV0IG1hcmdpbkggPSAwO1xuICAgIGxldCBtYXJnaW5WID0gMDtcblxuICAgIGlmICh0aGlzLm1hcmdpbikge1xuICAgICAgbWFyZ2luSCA9IHRoaXMubWFyZ2luLmxlZnRJbnNldCArIHRoaXMubWFyZ2luLnJpZ2h0SW5zZXQ7XG4gICAgICBtYXJnaW5WID0gdGhpcy5tYXJnaW4udG9wSW5zZXQgKyB0aGlzLm1hcmdpbi5ib3R0b21JbnNldDtcbiAgICB9XG5cbiAgICBjb25zdCB3aWR0aCA9IE1hdGgubWF4KHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXS53aWR0aCArIG1hcmdpbkgsIHRoaXMudyB8fCAwKTtcbiAgICBjb25zdCBoZWlnaHQgPSBNYXRoLm1heCh0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0uaGVpZ2h0ICsgbWFyZ2luViwgdGhpcy5oIHx8IDApO1xuICAgIGNvbnN0IGJib3ggPSBbdGhpcy54LCB0aGlzLnksIHdpZHRoLCBoZWlnaHRdO1xuXG4gICAgaWYgKHRoaXMudyA9PT0gXCJcIikge1xuICAgICAgc3R5bGUud2lkdGggPSAoMCwgX2h0bWxfdXRpbHMubWVhc3VyZVRvU3RyaW5nKSh3aWR0aCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaCA9PT0gXCJcIikge1xuICAgICAgc3R5bGUuaGVpZ2h0ID0gKDAsIF9odG1sX3V0aWxzLm1lYXN1cmVUb1N0cmluZykoaGVpZ2h0KTtcbiAgICB9XG5cbiAgICBjb25zdCBodG1sID0ge1xuICAgICAgbmFtZTogXCJkaXZcIixcbiAgICAgIGF0dHJpYnV0ZXMsXG4gICAgICBjaGlsZHJlblxuICAgIH07XG4gICAgYXBwbHlBc3Npc3QodGhpcywgYXR0cmlidXRlcyk7XG4gICAgZGVsZXRlIHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXTtcbiAgICByZXR1cm4gX3V0aWxzLkhUTUxSZXN1bHQuc3VjY2VzcygoMCwgX2h0bWxfdXRpbHMuY3JlYXRlV3JhcHBlcikodGhpcywgaHRtbCksIGJib3gpO1xuICB9XG5cbn1cblxuY2xhc3MgRXhlY3V0ZSBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJleGVjdXRlXCIpO1xuICAgIHRoaXMuY29ubmVjdGlvbiA9IGF0dHJpYnV0ZXMuY29ubmVjdGlvbiB8fCBcIlwiO1xuICAgIHRoaXMuZXhlY3V0ZVR5cGUgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5leGVjdXRlVHlwZSwgW1wiaW1wb3J0XCIsIFwicmVtZXJnZVwiXSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLnJ1bkF0ID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMucnVuQXQsIFtcImNsaWVudFwiLCBcImJvdGhcIiwgXCJzZXJ2ZXJcIl0pO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgfVxuXG59XG5cbmNsYXNzIEV4dHJhcyBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJleHRyYXNcIiwgdHJ1ZSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgXCJcIjtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gICAgdGhpcy5ib29sZWFuID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5kYXRlID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5kYXRlVGltZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZGVjaW1hbCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZXhEYXRhID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5leHRyYXMgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmZsb2F0ID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5pbWFnZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuaW50ZWdlciA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMudGV4dCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMudGltZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICB9XG5cbn1cblxuY2xhc3MgRmllbGQgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwiZmllbGRcIiwgdHJ1ZSk7XG4gICAgdGhpcy5hY2Nlc3MgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5hY2Nlc3MsIFtcIm9wZW5cIiwgXCJub25JbnRlcmFjdGl2ZVwiLCBcInByb3RlY3RlZFwiLCBcInJlYWRPbmx5XCJdKTtcbiAgICB0aGlzLmFjY2Vzc0tleSA9IGF0dHJpYnV0ZXMuYWNjZXNzS2V5IHx8IFwiXCI7XG4gICAgdGhpcy5hbmNob3JUeXBlID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMuYW5jaG9yVHlwZSwgW1widG9wTGVmdFwiLCBcImJvdHRvbUNlbnRlclwiLCBcImJvdHRvbUxlZnRcIiwgXCJib3R0b21SaWdodFwiLCBcIm1pZGRsZUNlbnRlclwiLCBcIm1pZGRsZUxlZnRcIiwgXCJtaWRkbGVSaWdodFwiLCBcInRvcENlbnRlclwiLCBcInRvcFJpZ2h0XCJdKTtcbiAgICB0aGlzLmNvbFNwYW4gPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMuY29sU3BhbixcbiAgICAgIGRlZmF1bHRWYWx1ZTogMSxcbiAgICAgIHZhbGlkYXRlOiBuID0+IG4gPj0gMSB8fCBuID09PSAtMVxuICAgIH0pO1xuICAgIHRoaXMuaCA9IGF0dHJpYnV0ZXMuaCA/ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMuaCkgOiBcIlwiO1xuICAgIHRoaXMuaEFsaWduID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMuaEFsaWduLCBbXCJsZWZ0XCIsIFwiY2VudGVyXCIsIFwianVzdGlmeVwiLCBcImp1c3RpZnlBbGxcIiwgXCJyYWRpeFwiLCBcInJpZ2h0XCJdKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMubG9jYWxlID0gYXR0cmlidXRlcy5sb2NhbGUgfHwgXCJcIjtcbiAgICB0aGlzLm1heEggPSAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KShhdHRyaWJ1dGVzLm1heEgsIFwiMHB0XCIpO1xuICAgIHRoaXMubWF4VyA9ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMubWF4VywgXCIwcHRcIik7XG4gICAgdGhpcy5taW5IID0gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkoYXR0cmlidXRlcy5taW5ILCBcIjBwdFwiKTtcbiAgICB0aGlzLm1pblcgPSAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KShhdHRyaWJ1dGVzLm1pblcsIFwiMHB0XCIpO1xuICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSB8fCBcIlwiO1xuICAgIHRoaXMucHJlc2VuY2UgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5wcmVzZW5jZSwgW1widmlzaWJsZVwiLCBcImhpZGRlblwiLCBcImluYWN0aXZlXCIsIFwiaW52aXNpYmxlXCJdKTtcbiAgICB0aGlzLnJlbGV2YW50ID0gKDAsIF91dGlscy5nZXRSZWxldmFudCkoYXR0cmlidXRlcy5yZWxldmFudCk7XG4gICAgdGhpcy5yb3RhdGUgPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMucm90YXRlLFxuICAgICAgZGVmYXVsdFZhbHVlOiAwLFxuICAgICAgdmFsaWRhdGU6IHggPT4geCAlIDkwID09PSAwXG4gICAgfSk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMudyA9IGF0dHJpYnV0ZXMudyA/ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMudykgOiBcIlwiO1xuICAgIHRoaXMueCA9ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMueCwgXCIwcHRcIik7XG4gICAgdGhpcy55ID0gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkoYXR0cmlidXRlcy55LCBcIjBwdFwiKTtcbiAgICB0aGlzLmFzc2lzdCA9IG51bGw7XG4gICAgdGhpcy5iaW5kID0gbnVsbDtcbiAgICB0aGlzLmJvcmRlciA9IG51bGw7XG4gICAgdGhpcy5jYWxjdWxhdGUgPSBudWxsO1xuICAgIHRoaXMuY2FwdGlvbiA9IG51bGw7XG4gICAgdGhpcy5kZXNjID0gbnVsbDtcbiAgICB0aGlzLmV4dHJhcyA9IG51bGw7XG4gICAgdGhpcy5mb250ID0gbnVsbDtcbiAgICB0aGlzLmZvcm1hdCA9IG51bGw7XG4gICAgdGhpcy5pdGVtcyA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgyKTtcbiAgICB0aGlzLmtlZXAgPSBudWxsO1xuICAgIHRoaXMubWFyZ2luID0gbnVsbDtcbiAgICB0aGlzLnBhcmEgPSBudWxsO1xuICAgIHRoaXMudHJhdmVyc2FsID0gbnVsbDtcbiAgICB0aGlzLnVpID0gbnVsbDtcbiAgICB0aGlzLnZhbGlkYXRlID0gbnVsbDtcbiAgICB0aGlzLnZhbHVlID0gbnVsbDtcbiAgICB0aGlzLmJpbmRJdGVtcyA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuY29ubmVjdCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZXZlbnQgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnNldFByb3BlcnR5ID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGlzQmluZGFibGVdKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRzZXRWYWx1ZV0odmFsdWUpIHtcbiAgICBfc2V0VmFsdWUodGhpcywgdmFsdWUpO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiR0b0hUTUxdKGF2YWlsYWJsZVNwYWNlKSB7XG4gICAgc2V0VGFiSW5kZXgodGhpcyk7XG5cbiAgICBpZiAoIXRoaXMudWkpIHtcbiAgICAgIHRoaXMudWkgPSBuZXcgVWkoe30pO1xuICAgICAgdGhpcy51aVtfeGZhX29iamVjdC4kZ2xvYmFsRGF0YV0gPSB0aGlzW194ZmFfb2JqZWN0LiRnbG9iYWxEYXRhXTtcblxuICAgICAgdGhpc1tfeGZhX29iamVjdC4kYXBwZW5kQ2hpbGRdKHRoaXMudWkpO1xuXG4gICAgICBsZXQgbm9kZTtcblxuICAgICAgc3dpdGNoICh0aGlzLml0ZW1zLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgbm9kZSA9IG5ldyBUZXh0RWRpdCh7fSk7XG4gICAgICAgICAgdGhpcy51aS50ZXh0RWRpdCA9IG5vZGU7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIG5vZGUgPSBuZXcgQ2hlY2tCdXR0b24oe30pO1xuICAgICAgICAgIHRoaXMudWkuY2hlY2tCdXR0b24gPSBub2RlO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBub2RlID0gbmV3IENob2ljZUxpc3Qoe30pO1xuICAgICAgICAgIHRoaXMudWkuY2hvaWNlTGlzdCA9IG5vZGU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudWlbX3hmYV9vYmplY3QuJGFwcGVuZENoaWxkXShub2RlKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudWkgfHwgdGhpcy5wcmVzZW5jZSA9PT0gXCJoaWRkZW5cIiB8fCB0aGlzLnByZXNlbmNlID09PSBcImluYWN0aXZlXCIgfHwgdGhpcy5oID09PSAwIHx8IHRoaXMudyA9PT0gMCkge1xuICAgICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LkVNUFRZO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNhcHRpb24pIHtcbiAgICAgIGRlbGV0ZSB0aGlzLmNhcHRpb25bX3hmYV9vYmplY3QuJGV4dHJhXTtcbiAgICB9XG5cbiAgICB0aGlzW194ZmFfb2JqZWN0LiRwdXNoUGFyYV0oKTtcblxuICAgIGNvbnN0IGNhcHRpb24gPSB0aGlzLmNhcHRpb24gPyB0aGlzLmNhcHRpb25bX3hmYV9vYmplY3QuJHRvSFRNTF0oYXZhaWxhYmxlU3BhY2UpLmh0bWwgOiBudWxsO1xuICAgIGNvbnN0IHNhdmVkVyA9IHRoaXMudztcbiAgICBjb25zdCBzYXZlZEggPSB0aGlzLmg7XG4gICAgbGV0IG1hcmdpbkggPSAwO1xuICAgIGxldCBtYXJnaW5WID0gMDtcblxuICAgIGlmICh0aGlzLm1hcmdpbikge1xuICAgICAgbWFyZ2luSCA9IHRoaXMubWFyZ2luLmxlZnRJbnNldCArIHRoaXMubWFyZ2luLnJpZ2h0SW5zZXQ7XG4gICAgICBtYXJnaW5WID0gdGhpcy5tYXJnaW4udG9wSW5zZXQgKyB0aGlzLm1hcmdpbi5ib3R0b21JbnNldDtcbiAgICB9XG5cbiAgICBsZXQgYm9yZGVyRGltcyA9IG51bGw7XG5cbiAgICBpZiAodGhpcy53ID09PSBcIlwiIHx8IHRoaXMuaCA9PT0gXCJcIikge1xuICAgICAgbGV0IHdpZHRoID0gbnVsbDtcbiAgICAgIGxldCBoZWlnaHQgPSBudWxsO1xuICAgICAgbGV0IHVpVyA9IDA7XG4gICAgICBsZXQgdWlIID0gMDtcblxuICAgICAgaWYgKHRoaXMudWkuY2hlY2tCdXR0b24pIHtcbiAgICAgICAgdWlXID0gdWlIID0gdGhpcy51aS5jaGVja0J1dHRvbi5zaXplO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHcsXG4gICAgICAgICAgaFxuICAgICAgICB9ID0gKDAsIF9odG1sX3V0aWxzLmxheW91dE5vZGUpKHRoaXMsIGF2YWlsYWJsZVNwYWNlKTtcblxuICAgICAgICBpZiAodyAhPT0gbnVsbCkge1xuICAgICAgICAgIHVpVyA9IHc7XG4gICAgICAgICAgdWlIID0gaDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1aUggPSAoMCwgX2ZvbnRzLmdldE1ldHJpY3MpKHRoaXMuZm9udCwgdHJ1ZSkubGluZU5vR2FwO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGJvcmRlckRpbXMgPSBnZXRCb3JkZXJEaW1zKHRoaXMudWlbX3hmYV9vYmplY3QuJGdldEV4dHJhXSgpKTtcbiAgICAgIHVpVyArPSBib3JkZXJEaW1zLnc7XG4gICAgICB1aUggKz0gYm9yZGVyRGltcy5oO1xuXG4gICAgICBpZiAodGhpcy5jYXB0aW9uKSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICB3LFxuICAgICAgICAgIGgsXG4gICAgICAgICAgaXNCcm9rZW5cbiAgICAgICAgfSA9IHRoaXMuY2FwdGlvbltfeGZhX29iamVjdC4kZ2V0RXh0cmFdKGF2YWlsYWJsZVNwYWNlKTtcblxuICAgICAgICBpZiAoaXNCcm9rZW4gJiYgdGhpc1tfeGZhX29iamVjdC4kZ2V0U3ViZm9ybVBhcmVudF0oKVtfeGZhX29iamVjdC4kaXNUaGVyZU1vcmVXaWR0aF0oKSkge1xuICAgICAgICAgIHRoaXNbX3hmYV9vYmplY3QuJHBvcFBhcmFdKCk7XG5cbiAgICAgICAgICByZXR1cm4gX3V0aWxzLkhUTUxSZXN1bHQuRkFJTFVSRTtcbiAgICAgICAgfVxuXG4gICAgICAgIHdpZHRoID0gdztcbiAgICAgICAgaGVpZ2h0ID0gaDtcblxuICAgICAgICBzd2l0Y2ggKHRoaXMuY2FwdGlvbi5wbGFjZW1lbnQpIHtcbiAgICAgICAgICBjYXNlIFwibGVmdFwiOlxuICAgICAgICAgIGNhc2UgXCJyaWdodFwiOlxuICAgICAgICAgIGNhc2UgXCJpbmxpbmVcIjpcbiAgICAgICAgICAgIHdpZHRoICs9IHVpVztcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcInRvcFwiOlxuICAgICAgICAgIGNhc2UgXCJib3R0b21cIjpcbiAgICAgICAgICAgIGhlaWdodCArPSB1aUg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2lkdGggPSB1aVc7XG4gICAgICAgIGhlaWdodCA9IHVpSDtcbiAgICAgIH1cblxuICAgICAgaWYgKHdpZHRoICYmIHRoaXMudyA9PT0gXCJcIikge1xuICAgICAgICB3aWR0aCArPSBtYXJnaW5IO1xuICAgICAgICB0aGlzLncgPSBNYXRoLm1pbih0aGlzLm1heFcgPD0gMCA/IEluZmluaXR5IDogdGhpcy5tYXhXLCB0aGlzLm1pblcgKyAxIDwgd2lkdGggPyB3aWR0aCA6IHRoaXMubWluVyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChoZWlnaHQgJiYgdGhpcy5oID09PSBcIlwiKSB7XG4gICAgICAgIGhlaWdodCArPSBtYXJnaW5WO1xuICAgICAgICB0aGlzLmggPSBNYXRoLm1pbih0aGlzLm1heEggPD0gMCA/IEluZmluaXR5IDogdGhpcy5tYXhILCB0aGlzLm1pbkggKyAxIDwgaGVpZ2h0ID8gaGVpZ2h0IDogdGhpcy5taW5IKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW194ZmFfb2JqZWN0LiRwb3BQYXJhXSgpO1xuXG4gICAgKDAsIF9odG1sX3V0aWxzLmZpeERpbWVuc2lvbnMpKHRoaXMpO1xuICAgIHNldEZpcnN0VW5zcGxpdHRhYmxlKHRoaXMpO1xuXG4gICAgaWYgKCEoMCwgX2xheW91dC5jaGVja0RpbWVuc2lvbnMpKHRoaXMsIGF2YWlsYWJsZVNwYWNlKSkge1xuICAgICAgdGhpcy53ID0gc2F2ZWRXO1xuICAgICAgdGhpcy5oID0gc2F2ZWRIO1xuXG4gICAgICB0aGlzW194ZmFfb2JqZWN0LiRwb3BQYXJhXSgpO1xuXG4gICAgICByZXR1cm4gX3V0aWxzLkhUTUxSZXN1bHQuRkFJTFVSRTtcbiAgICB9XG5cbiAgICB1bnNldEZpcnN0VW5zcGxpdHRhYmxlKHRoaXMpO1xuICAgIGNvbnN0IHN0eWxlID0gKDAsIF9odG1sX3V0aWxzLnRvU3R5bGUpKHRoaXMsIFwiZm9udFwiLCBcImRpbWVuc2lvbnNcIiwgXCJwb3NpdGlvblwiLCBcInJvdGF0ZVwiLCBcImFuY2hvclR5cGVcIiwgXCJwcmVzZW5jZVwiLCBcIm1hcmdpblwiLCBcImhBbGlnblwiKTtcbiAgICAoMCwgX2h0bWxfdXRpbHMuc2V0TWluTWF4RGltZW5zaW9ucykodGhpcywgc3R5bGUpO1xuICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBbXCJ4ZmFGaWVsZFwiXTtcblxuICAgIGlmICh0aGlzLmZvbnQpIHtcbiAgICAgIGNsYXNzTmFtZXMucHVzaChcInhmYUZvbnRcIik7XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfaHRtbF91dGlscy5pc1ByaW50T25seSkodGhpcykpIHtcbiAgICAgIGNsYXNzTmFtZXMucHVzaChcInhmYVByaW50T25seVwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBhdHRyaWJ1dGVzID0ge1xuICAgICAgc3R5bGUsXG4gICAgICBpZDogdGhpc1tfeGZhX29iamVjdC4kdWlkXSxcbiAgICAgIGNsYXNzOiBjbGFzc05hbWVzXG4gICAgfTtcblxuICAgIGlmIChzdHlsZS5tYXJnaW4pIHtcbiAgICAgIHN0eWxlLnBhZGRpbmcgPSBzdHlsZS5tYXJnaW47XG4gICAgICBkZWxldGUgc3R5bGUubWFyZ2luO1xuICAgIH1cblxuICAgICgwLCBfaHRtbF91dGlscy5zZXRBY2Nlc3MpKHRoaXMsIGNsYXNzTmFtZXMpO1xuXG4gICAgaWYgKHRoaXMubmFtZSkge1xuICAgICAgYXR0cmlidXRlcy54ZmFOYW1lID0gdGhpcy5uYW1lO1xuICAgIH1cblxuICAgIGNvbnN0IGNoaWxkcmVuID0gW107XG4gICAgY29uc3QgaHRtbCA9IHtcbiAgICAgIG5hbWU6IFwiZGl2XCIsXG4gICAgICBhdHRyaWJ1dGVzLFxuICAgICAgY2hpbGRyZW5cbiAgICB9O1xuICAgIGFwcGx5QXNzaXN0KHRoaXMsIGF0dHJpYnV0ZXMpO1xuICAgIGNvbnN0IGJvcmRlclN0eWxlID0gdGhpcy5ib3JkZXIgPyB0aGlzLmJvcmRlcltfeGZhX29iamVjdC4kdG9TdHlsZV0oKSA6IG51bGw7XG4gICAgY29uc3QgYmJveCA9ICgwLCBfaHRtbF91dGlscy5jb21wdXRlQmJveCkodGhpcywgaHRtbCwgYXZhaWxhYmxlU3BhY2UpO1xuXG4gICAgY29uc3QgdWkgPSB0aGlzLnVpW194ZmFfb2JqZWN0LiR0b0hUTUxdKCkuaHRtbDtcblxuICAgIGlmICghdWkpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oc3R5bGUsIGJvcmRlclN0eWxlKTtcbiAgICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5zdWNjZXNzKCgwLCBfaHRtbF91dGlscy5jcmVhdGVXcmFwcGVyKSh0aGlzLCBodG1sKSwgYmJveCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXNbX3hmYV9vYmplY3QuJHRhYkluZGV4XSkge1xuICAgICAgaWYgKHVpLmNoaWxkcmVuICYmIHVpLmNoaWxkcmVuWzBdKSB7XG4gICAgICAgIHVpLmNoaWxkcmVuWzBdLmF0dHJpYnV0ZXMudGFiaW5kZXggPSB0aGlzW194ZmFfb2JqZWN0LiR0YWJJbmRleF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1aS5hdHRyaWJ1dGVzLnRhYmluZGV4ID0gdGhpc1tfeGZhX29iamVjdC4kdGFiSW5kZXhdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdWkuYXR0cmlidXRlcy5zdHlsZSkge1xuICAgICAgdWkuYXR0cmlidXRlcy5zdHlsZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgfVxuXG4gICAgbGV0IGFFbGVtZW50ID0gbnVsbDtcblxuICAgIGlmICh0aGlzLnVpLmJ1dHRvbikge1xuICAgICAgaWYgKHVpLmNoaWxkcmVuLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBbYUVsZW1lbnRdID0gdWkuY2hpbGRyZW4uc3BsaWNlKDAsIDEpO1xuICAgICAgfVxuXG4gICAgICBPYmplY3QuYXNzaWduKHVpLmF0dHJpYnV0ZXMuc3R5bGUsIGJvcmRlclN0eWxlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgT2JqZWN0LmFzc2lnbihzdHlsZSwgYm9yZGVyU3R5bGUpO1xuICAgIH1cblxuICAgIGNoaWxkcmVuLnB1c2godWkpO1xuXG4gICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgIGlmICh0aGlzLnVpLmltYWdlRWRpdCkge1xuICAgICAgICB1aS5jaGlsZHJlbi5wdXNoKHRoaXMudmFsdWVbX3hmYV9vYmplY3QuJHRvSFRNTF0oKS5odG1sKTtcbiAgICAgIH0gZWxzZSBpZiAoIXRoaXMudWkuYnV0dG9uKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IFwiXCI7XG5cbiAgICAgICAgaWYgKHRoaXMudmFsdWUuZXhEYXRhKSB7XG4gICAgICAgICAgdmFsdWUgPSB0aGlzLnZhbHVlLmV4RGF0YVtfeGZhX29iamVjdC4kdGV4dF0oKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbHVlLnRleHQpIHtcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMudmFsdWUudGV4dFtfeGZhX29iamVjdC4kZ2V0RXh0cmFdKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgaHRtbFZhbHVlID0gdGhpcy52YWx1ZVtfeGZhX29iamVjdC4kdG9IVE1MXSgpLmh0bWw7XG5cbiAgICAgICAgICBpZiAoaHRtbFZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGh0bWxWYWx1ZS5jaGlsZHJlblswXS52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy51aS50ZXh0RWRpdCAmJiB0aGlzLnZhbHVlLnRleHQgJiYgdGhpcy52YWx1ZS50ZXh0Lm1heENoYXJzKSB7XG4gICAgICAgICAgdWkuY2hpbGRyZW5bMF0uYXR0cmlidXRlcy5tYXhMZW5ndGggPSB0aGlzLnZhbHVlLnRleHQubWF4Q2hhcnM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAodGhpcy51aS5udW1lcmljRWRpdCkge1xuICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICAgICAgICAgIHZhbHVlID0gaXNOYU4odmFsdWUpID8gXCJcIiA6IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHVpLmNoaWxkcmVuWzBdLm5hbWUgPT09IFwidGV4dGFyZWFcIikge1xuICAgICAgICAgICAgdWkuY2hpbGRyZW5bMF0uYXR0cmlidXRlcy50ZXh0Q29udGVudCA9IHZhbHVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1aS5jaGlsZHJlblswXS5hdHRyaWJ1dGVzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnVpLmltYWdlRWRpdCAmJiB1aS5jaGlsZHJlbiAmJiB1aS5jaGlsZHJlblswXSAmJiB0aGlzLmgpIHtcbiAgICAgIGJvcmRlckRpbXMgPSBib3JkZXJEaW1zIHx8IGdldEJvcmRlckRpbXModGhpcy51aVtfeGZhX29iamVjdC4kZ2V0RXh0cmFdKCkpO1xuICAgICAgbGV0IGNhcHRpb25IZWlnaHQgPSAwO1xuXG4gICAgICBpZiAodGhpcy5jYXB0aW9uICYmIFtcInRvcFwiLCBcImJvdHRvbVwiXS5pbmNsdWRlcyh0aGlzLmNhcHRpb24ucGxhY2VtZW50KSkge1xuICAgICAgICBjYXB0aW9uSGVpZ2h0ID0gdGhpcy5jYXB0aW9uLnJlc2VydmU7XG5cbiAgICAgICAgaWYgKGNhcHRpb25IZWlnaHQgPD0gMCkge1xuICAgICAgICAgIGNhcHRpb25IZWlnaHQgPSB0aGlzLmNhcHRpb25bX3hmYV9vYmplY3QuJGdldEV4dHJhXShhdmFpbGFibGVTcGFjZSkuaDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlucHV0SGVpZ2h0ID0gdGhpcy5oIC0gY2FwdGlvbkhlaWdodCAtIG1hcmdpblYgLSBib3JkZXJEaW1zLmg7XG4gICAgICAgIHVpLmNoaWxkcmVuWzBdLmF0dHJpYnV0ZXMuc3R5bGUuaGVpZ2h0ID0gKDAsIF9odG1sX3V0aWxzLm1lYXN1cmVUb1N0cmluZykoaW5wdXRIZWlnaHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdWkuY2hpbGRyZW5bMF0uYXR0cmlidXRlcy5zdHlsZS5oZWlnaHQgPSBcIjEwMCVcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYUVsZW1lbnQpIHtcbiAgICAgIHVpLmNoaWxkcmVuLnB1c2goYUVsZW1lbnQpO1xuICAgIH1cblxuICAgIGlmICghY2FwdGlvbikge1xuICAgICAgaWYgKHVpLmF0dHJpYnV0ZXMuY2xhc3MpIHtcbiAgICAgICAgdWkuYXR0cmlidXRlcy5jbGFzcy5wdXNoKFwieGZhTGVmdFwiKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy53ID0gc2F2ZWRXO1xuICAgICAgdGhpcy5oID0gc2F2ZWRIO1xuICAgICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LnN1Y2Nlc3MoKDAsIF9odG1sX3V0aWxzLmNyZWF0ZVdyYXBwZXIpKHRoaXMsIGh0bWwpLCBiYm94KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy51aS5idXR0b24pIHtcbiAgICAgIGlmIChzdHlsZS5wYWRkaW5nKSB7XG4gICAgICAgIGRlbGV0ZSBzdHlsZS5wYWRkaW5nO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2FwdGlvbi5uYW1lID09PSBcImRpdlwiKSB7XG4gICAgICAgIGNhcHRpb24ubmFtZSA9IFwic3BhblwiO1xuICAgICAgfVxuXG4gICAgICB1aS5jaGlsZHJlbi5wdXNoKGNhcHRpb24pO1xuICAgICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LnN1Y2Nlc3MoaHRtbCwgYmJveCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnVpLmNoZWNrQnV0dG9uKSB7XG4gICAgICBjYXB0aW9uLmF0dHJpYnV0ZXMuY2xhc3NbMF0gPSBcInhmYUNhcHRpb25Gb3JDaGVja0J1dHRvblwiO1xuICAgIH1cblxuICAgIGlmICghdWkuYXR0cmlidXRlcy5jbGFzcykge1xuICAgICAgdWkuYXR0cmlidXRlcy5jbGFzcyA9IFtdO1xuICAgIH1cblxuICAgIHVpLmNoaWxkcmVuLnNwbGljZSgwLCAwLCBjYXB0aW9uKTtcblxuICAgIHN3aXRjaCAodGhpcy5jYXB0aW9uLnBsYWNlbWVudCkge1xuICAgICAgY2FzZSBcImxlZnRcIjpcbiAgICAgICAgdWkuYXR0cmlidXRlcy5jbGFzcy5wdXNoKFwieGZhTGVmdFwiKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJyaWdodFwiOlxuICAgICAgICB1aS5hdHRyaWJ1dGVzLmNsYXNzLnB1c2goXCJ4ZmFSaWdodFwiKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJ0b3BcIjpcbiAgICAgICAgdWkuYXR0cmlidXRlcy5jbGFzcy5wdXNoKFwieGZhVG9wXCIpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcImJvdHRvbVwiOlxuICAgICAgICB1aS5hdHRyaWJ1dGVzLmNsYXNzLnB1c2goXCJ4ZmFCb3R0b21cIik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiaW5saW5lXCI6XG4gICAgICAgIHVpLmF0dHJpYnV0ZXMuY2xhc3MucHVzaChcInhmYUxlZnRcIik7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMudyA9IHNhdmVkVztcbiAgICB0aGlzLmggPSBzYXZlZEg7XG4gICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LnN1Y2Nlc3MoKDAsIF9odG1sX3V0aWxzLmNyZWF0ZVdyYXBwZXIpKHRoaXMsIGh0bWwpLCBiYm94KTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuRmllbGQgPSBGaWVsZDtcblxuY2xhc3MgRmlsbCBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJmaWxsXCIsIHRydWUpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5wcmVzZW5jZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnByZXNlbmNlLCBbXCJ2aXNpYmxlXCIsIFwiaGlkZGVuXCIsIFwiaW5hY3RpdmVcIiwgXCJpbnZpc2libGVcIl0pO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmNvbG9yID0gbnVsbDtcbiAgICB0aGlzLmV4dHJhcyA9IG51bGw7XG4gICAgdGhpcy5saW5lYXIgPSBudWxsO1xuICAgIHRoaXMucGF0dGVybiA9IG51bGw7XG4gICAgdGhpcy5yYWRpYWwgPSBudWxsO1xuICAgIHRoaXMuc29saWQgPSBudWxsO1xuICAgIHRoaXMuc3RpcHBsZSA9IG51bGw7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJHRvU3R5bGVdKCkge1xuICAgIGNvbnN0IHBhcmVudCA9IHRoaXNbX3hmYV9vYmplY3QuJGdldFBhcmVudF0oKTtcblxuICAgIGNvbnN0IGdyYW5kcGEgPSBwYXJlbnRbX3hmYV9vYmplY3QuJGdldFBhcmVudF0oKTtcblxuICAgIGNvbnN0IGdncmFuZHBhID0gZ3JhbmRwYVtfeGZhX29iamVjdC4kZ2V0UGFyZW50XSgpO1xuXG4gICAgY29uc3Qgc3R5bGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIGxldCBwcm9wTmFtZSA9IFwiY29sb3JcIjtcbiAgICBsZXQgYWx0UHJvcE5hbWUgPSBwcm9wTmFtZTtcblxuICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBCb3JkZXIpIHtcbiAgICAgIHByb3BOYW1lID0gXCJiYWNrZ3JvdW5kLWNvbG9yXCI7XG4gICAgICBhbHRQcm9wTmFtZSA9IFwiYmFja2dyb3VuZFwiO1xuXG4gICAgICBpZiAoZ2dyYW5kcGEgaW5zdGFuY2VvZiBVaSkge1xuICAgICAgICBzdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBcIndoaXRlXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIFJlY3RhbmdsZSB8fCBwYXJlbnQgaW5zdGFuY2VvZiBBcmMpIHtcbiAgICAgIHByb3BOYW1lID0gYWx0UHJvcE5hbWUgPSBcImZpbGxcIjtcbiAgICAgIHN0eWxlLmZpbGwgPSBcIndoaXRlXCI7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKSB7XG4gICAgICBpZiAobmFtZSA9PT0gXCJleHRyYXNcIiB8fCBuYW1lID09PSBcImNvbG9yXCIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9iaiA9IHRoaXNbbmFtZV07XG5cbiAgICAgIGlmICghKG9iaiBpbnN0YW5jZW9mIF94ZmFfb2JqZWN0LlhGQU9iamVjdCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbG9yID0gb2JqW194ZmFfb2JqZWN0LiR0b1N0eWxlXSh0aGlzLmNvbG9yKTtcblxuICAgICAgaWYgKGNvbG9yKSB7XG4gICAgICAgIHN0eWxlW2NvbG9yLnN0YXJ0c1dpdGgoXCIjXCIpID8gcHJvcE5hbWUgOiBhbHRQcm9wTmFtZV0gPSBjb2xvcjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbG9yICYmIHRoaXMuY29sb3IudmFsdWUpIHtcbiAgICAgIGNvbnN0IGNvbG9yID0gdGhpcy5jb2xvcltfeGZhX29iamVjdC4kdG9TdHlsZV0oKTtcblxuICAgICAgc3R5bGVbY29sb3Iuc3RhcnRzV2l0aChcIiNcIikgPyBwcm9wTmFtZSA6IGFsdFByb3BOYW1lXSA9IGNvbG9yO1xuICAgIH1cblxuICAgIHJldHVybiBzdHlsZTtcbiAgfVxuXG59XG5cbmNsYXNzIEZpbHRlciBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJmaWx0ZXJcIiwgdHJ1ZSk7XG4gICAgdGhpcy5hZGRSZXZvY2F0aW9uSW5mbyA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLmFkZFJldm9jYXRpb25JbmZvLCBbXCJcIiwgXCJyZXF1aXJlZFwiLCBcIm9wdGlvbmFsXCIsIFwibm9uZVwiXSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgXCJcIjtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gICAgdGhpcy52ZXJzaW9uID0gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiB0aGlzLnZlcnNpb24sXG4gICAgICBkZWZhdWx0VmFsdWU6IDUsXG4gICAgICB2YWxpZGF0ZTogeCA9PiB4ID49IDEgJiYgeCA8PSA1XG4gICAgfSk7XG4gICAgdGhpcy5hcHBlYXJhbmNlRmlsdGVyID0gbnVsbDtcbiAgICB0aGlzLmNlcnRpZmljYXRlcyA9IG51bGw7XG4gICAgdGhpcy5kaWdlc3RNZXRob2RzID0gbnVsbDtcbiAgICB0aGlzLmVuY29kaW5ncyA9IG51bGw7XG4gICAgdGhpcy5lbmNyeXB0aW9uTWV0aG9kcyA9IG51bGw7XG4gICAgdGhpcy5oYW5kbGVyID0gbnVsbDtcbiAgICB0aGlzLmxvY2tEb2N1bWVudCA9IG51bGw7XG4gICAgdGhpcy5tZHAgPSBudWxsO1xuICAgIHRoaXMucmVhc29ucyA9IG51bGw7XG4gICAgdGhpcy50aW1lU3RhbXAgPSBudWxsO1xuICB9XG5cbn1cblxuY2xhc3MgRmxvYXQgZXh0ZW5kcyBfeGZhX29iamVjdC5Db250ZW50T2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImZsb2F0XCIpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8IFwiXCI7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRmaW5hbGl6ZV0oKSB7XG4gICAgY29uc3QgbnVtYmVyID0gcGFyc2VGbG9hdCh0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XS50cmltKCkpO1xuICAgIHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdID0gaXNOYU4obnVtYmVyKSA/IG51bGwgOiBudW1iZXI7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJHRvSFRNTF0oYXZhaWxhYmxlU3BhY2UpIHtcbiAgICByZXR1cm4gdmFsdWVUb0h0bWwodGhpc1tfeGZhX29iamVjdC4kY29udGVudF0gIT09IG51bGwgPyB0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XS50b1N0cmluZygpIDogXCJcIik7XG4gIH1cblxufVxuXG5jbGFzcyBGb250IGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImZvbnRcIiwgdHJ1ZSk7XG4gICAgdGhpcy5iYXNlbGluZVNoaWZ0ID0gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkoYXR0cmlidXRlcy5iYXNlbGluZVNoaWZ0KTtcbiAgICB0aGlzLmZvbnRIb3Jpem9udGFsU2NhbGUgPSAoMCwgX3V0aWxzLmdldEZsb2F0KSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLmZvbnRIb3Jpem9udGFsU2NhbGUsXG4gICAgICBkZWZhdWx0VmFsdWU6IDEwMCxcbiAgICAgIHZhbGlkYXRlOiB4ID0+IHggPj0gMFxuICAgIH0pO1xuICAgIHRoaXMuZm9udFZlcnRpY2FsU2NhbGUgPSAoMCwgX3V0aWxzLmdldEZsb2F0KSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLmZvbnRWZXJ0aWNhbFNjYWxlLFxuICAgICAgZGVmYXVsdFZhbHVlOiAxMDAsXG4gICAgICB2YWxpZGF0ZTogeCA9PiB4ID49IDBcbiAgICB9KTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMua2VybmluZ01vZGUgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5rZXJuaW5nTW9kZSwgW1wibm9uZVwiLCBcInBhaXJcIl0pO1xuICAgIHRoaXMubGV0dGVyU3BhY2luZyA9ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMubGV0dGVyU3BhY2luZywgXCIwXCIpO1xuICAgIHRoaXMubGluZVRocm91Z2ggPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMubGluZVRocm91Z2gsXG4gICAgICBkZWZhdWx0VmFsdWU6IDAsXG4gICAgICB2YWxpZGF0ZTogeCA9PiB4ID09PSAxIHx8IHggPT09IDJcbiAgICB9KTtcbiAgICB0aGlzLmxpbmVUaHJvdWdoUGVyaW9kID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMubGluZVRocm91Z2hQZXJpb2QsIFtcImFsbFwiLCBcIndvcmRcIl0pO1xuICAgIHRoaXMub3ZlcmxpbmUgPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMub3ZlcmxpbmUsXG4gICAgICBkZWZhdWx0VmFsdWU6IDAsXG4gICAgICB2YWxpZGF0ZTogeCA9PiB4ID09PSAxIHx8IHggPT09IDJcbiAgICB9KTtcbiAgICB0aGlzLm92ZXJsaW5lUGVyaW9kID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMub3ZlcmxpbmVQZXJpb2QsIFtcImFsbFwiLCBcIndvcmRcIl0pO1xuICAgIHRoaXMucG9zdHVyZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnBvc3R1cmUsIFtcIm5vcm1hbFwiLCBcIml0YWxpY1wiXSk7XG4gICAgdGhpcy5zaXplID0gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkoYXR0cmlidXRlcy5zaXplLCBcIjEwcHRcIik7XG4gICAgdGhpcy50eXBlZmFjZSA9IGF0dHJpYnV0ZXMudHlwZWZhY2UgfHwgXCJDb3VyaWVyXCI7XG4gICAgdGhpcy51bmRlcmxpbmUgPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMudW5kZXJsaW5lLFxuICAgICAgZGVmYXVsdFZhbHVlOiAwLFxuICAgICAgdmFsaWRhdGU6IHggPT4geCA9PT0gMSB8fCB4ID09PSAyXG4gICAgfSk7XG4gICAgdGhpcy51bmRlcmxpbmVQZXJpb2QgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy51bmRlcmxpbmVQZXJpb2QsIFtcImFsbFwiLCBcIndvcmRcIl0pO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLndlaWdodCA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLndlaWdodCwgW1wibm9ybWFsXCIsIFwiYm9sZFwiXSk7XG4gICAgdGhpcy5leHRyYXMgPSBudWxsO1xuICAgIHRoaXMuZmlsbCA9IG51bGw7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGNsZWFuXShidWlsZGVyKSB7XG4gICAgc3VwZXJbX3hmYV9vYmplY3QuJGNsZWFuXShidWlsZGVyKTtcblxuICAgIHRoaXNbX3hmYV9vYmplY3QuJGdsb2JhbERhdGFdLnVzZWRUeXBlZmFjZXMuYWRkKHRoaXMudHlwZWZhY2UpO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiR0b1N0eWxlXSgpIHtcbiAgICBjb25zdCBzdHlsZSA9ICgwLCBfaHRtbF91dGlscy50b1N0eWxlKSh0aGlzLCBcImZpbGxcIik7XG4gICAgY29uc3QgY29sb3IgPSBzdHlsZS5jb2xvcjtcblxuICAgIGlmIChjb2xvcikge1xuICAgICAgaWYgKGNvbG9yID09PSBcIiMwMDAwMDBcIikge1xuICAgICAgICBkZWxldGUgc3R5bGUuY29sb3I7XG4gICAgICB9IGVsc2UgaWYgKCFjb2xvci5zdGFydHNXaXRoKFwiI1wiKSkge1xuICAgICAgICBzdHlsZS5iYWNrZ3JvdW5kID0gY29sb3I7XG4gICAgICAgIHN0eWxlLmJhY2tncm91bmRDbGlwID0gXCJ0ZXh0XCI7XG4gICAgICAgIHN0eWxlLmNvbG9yID0gXCJ0cmFuc3BhcmVudFwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmJhc2VsaW5lU2hpZnQpIHtcbiAgICAgIHN0eWxlLnZlcnRpY2FsQWxpZ24gPSAoMCwgX2h0bWxfdXRpbHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLmJhc2VsaW5lU2hpZnQpO1xuICAgIH1cblxuICAgIHN0eWxlLmZvbnRLZXJuaW5nID0gdGhpcy5rZXJuaW5nTW9kZSA9PT0gXCJub25lXCIgPyBcIm5vbmVcIiA6IFwibm9ybWFsXCI7XG4gICAgc3R5bGUubGV0dGVyU3BhY2luZyA9ICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMubGV0dGVyU3BhY2luZyk7XG5cbiAgICBpZiAodGhpcy5saW5lVGhyb3VnaCAhPT0gMCkge1xuICAgICAgc3R5bGUudGV4dERlY29yYXRpb24gPSBcImxpbmUtdGhyb3VnaFwiO1xuXG4gICAgICBpZiAodGhpcy5saW5lVGhyb3VnaCA9PT0gMikge1xuICAgICAgICBzdHlsZS50ZXh0RGVjb3JhdGlvblN0eWxlID0gXCJkb3VibGVcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5vdmVybGluZSAhPT0gMCkge1xuICAgICAgc3R5bGUudGV4dERlY29yYXRpb24gPSBcIm92ZXJsaW5lXCI7XG5cbiAgICAgIGlmICh0aGlzLm92ZXJsaW5lID09PSAyKSB7XG4gICAgICAgIHN0eWxlLnRleHREZWNvcmF0aW9uU3R5bGUgPSBcImRvdWJsZVwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN0eWxlLmZvbnRTdHlsZSA9IHRoaXMucG9zdHVyZTtcbiAgICBzdHlsZS5mb250U2l6ZSA9ICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKDAuOTkgKiB0aGlzLnNpemUpO1xuICAgICgwLCBfaHRtbF91dGlscy5zZXRGb250RmFtaWx5KSh0aGlzLCB0aGlzLCB0aGlzW194ZmFfb2JqZWN0LiRnbG9iYWxEYXRhXS5mb250RmluZGVyLCBzdHlsZSk7XG5cbiAgICBpZiAodGhpcy51bmRlcmxpbmUgIT09IDApIHtcbiAgICAgIHN0eWxlLnRleHREZWNvcmF0aW9uID0gXCJ1bmRlcmxpbmVcIjtcblxuICAgICAgaWYgKHRoaXMudW5kZXJsaW5lID09PSAyKSB7XG4gICAgICAgIHN0eWxlLnRleHREZWNvcmF0aW9uU3R5bGUgPSBcImRvdWJsZVwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN0eWxlLmZvbnRXZWlnaHQgPSB0aGlzLndlaWdodDtcbiAgICByZXR1cm4gc3R5bGU7XG4gIH1cblxufVxuXG5jbGFzcyBGb3JtYXQgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwiZm9ybWF0XCIsIHRydWUpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMuZXh0cmFzID0gbnVsbDtcbiAgICB0aGlzLnBpY3R1cmUgPSBudWxsO1xuICB9XG5cbn1cblxuY2xhc3MgSGFuZGxlciBleHRlbmRzIF94ZmFfb2JqZWN0LlN0cmluZ09iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJoYW5kbGVyXCIpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy50eXBlID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMudHlwZSwgW1wib3B0aW9uYWxcIiwgXCJyZXF1aXJlZFwiXSk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICB9XG5cbn1cblxuY2xhc3MgSHlwaGVuYXRpb24gZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwiaHlwaGVuYXRpb25cIik7XG4gICAgdGhpcy5leGNsdWRlQWxsQ2FwcyA9ICgwLCBfdXRpbHMuZ2V0SW50ZWdlcikoe1xuICAgICAgZGF0YTogYXR0cmlidXRlcy5leGNsdWRlQWxsQ2FwcyxcbiAgICAgIGRlZmF1bHRWYWx1ZTogMCxcbiAgICAgIHZhbGlkYXRlOiB4ID0+IHggPT09IDFcbiAgICB9KTtcbiAgICB0aGlzLmV4Y2x1ZGVJbml0aWFsQ2FwID0gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLmV4Y2x1ZGVJbml0aWFsQ2FwLFxuICAgICAgZGVmYXVsdFZhbHVlOiAwLFxuICAgICAgdmFsaWRhdGU6IHggPT4geCA9PT0gMVxuICAgIH0pO1xuICAgIHRoaXMuaHlwaGVuYXRlID0gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLmh5cGhlbmF0ZSxcbiAgICAgIGRlZmF1bHRWYWx1ZTogMCxcbiAgICAgIHZhbGlkYXRlOiB4ID0+IHggPT09IDFcbiAgICB9KTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMucHVzaENoYXJhY3RlckNvdW50ID0gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLnB1c2hDaGFyYWN0ZXJDb3VudCxcbiAgICAgIGRlZmF1bHRWYWx1ZTogMyxcbiAgICAgIHZhbGlkYXRlOiB4ID0+IHggPj0gMFxuICAgIH0pO1xuICAgIHRoaXMucmVtYWluQ2hhcmFjdGVyQ291bnQgPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMucmVtYWluQ2hhcmFjdGVyQ291bnQsXG4gICAgICBkZWZhdWx0VmFsdWU6IDMsXG4gICAgICB2YWxpZGF0ZTogeCA9PiB4ID49IDBcbiAgICB9KTtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gICAgdGhpcy53b3JkQ2hhcmFjdGVyQ291bnQgPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMud29yZENoYXJhY3RlckNvdW50LFxuICAgICAgZGVmYXVsdFZhbHVlOiA3LFxuICAgICAgdmFsaWRhdGU6IHggPT4geCA+PSAwXG4gICAgfSk7XG4gIH1cblxufVxuXG5jbGFzcyBJbWFnZSBleHRlbmRzIF94ZmFfb2JqZWN0LlN0cmluZ09iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJpbWFnZVwiKTtcbiAgICB0aGlzLmFzcGVjdCA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLmFzcGVjdCwgW1wiZml0XCIsIFwiYWN0dWFsXCIsIFwiaGVpZ2h0XCIsIFwibm9uZVwiLCBcIndpZHRoXCJdKTtcbiAgICB0aGlzLmNvbnRlbnRUeXBlID0gYXR0cmlidXRlcy5jb250ZW50VHlwZSB8fCBcIlwiO1xuICAgIHRoaXMuaHJlZiA9IGF0dHJpYnV0ZXMuaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8IFwiXCI7XG4gICAgdGhpcy50cmFuc2ZlckVuY29kaW5nID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMudHJhbnNmZXJFbmNvZGluZywgW1wiYmFzZTY0XCIsIFwibm9uZVwiLCBcInBhY2thZ2VcIl0pO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kdG9IVE1MXSgpIHtcbiAgICBpZiAodGhpcy5jb250ZW50VHlwZSAmJiAhTUlNRVMuaGFzKHRoaXMuY29udGVudFR5cGUudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5FTVBUWTtcbiAgICB9XG5cbiAgICBsZXQgYnVmZmVyID0gdGhpc1tfeGZhX29iamVjdC4kZ2xvYmFsRGF0YV0uaW1hZ2VzICYmIHRoaXNbX3hmYV9vYmplY3QuJGdsb2JhbERhdGFdLmltYWdlcy5nZXQodGhpcy5ocmVmKTtcblxuICAgIGlmICghYnVmZmVyICYmICh0aGlzLmhyZWYgfHwgIXRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdKSkge1xuICAgICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LkVNUFRZO1xuICAgIH1cblxuICAgIGlmICghYnVmZmVyICYmIHRoaXMudHJhbnNmZXJFbmNvZGluZyA9PT0gXCJiYXNlNjRcIikge1xuICAgICAgYnVmZmVyID0gKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKGF0b2IodGhpc1tfeGZhX29iamVjdC4kY29udGVudF0pKTtcbiAgICB9XG5cbiAgICBpZiAoIWJ1ZmZlcikge1xuICAgICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LkVNUFRZO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jb250ZW50VHlwZSkge1xuICAgICAgZm9yIChjb25zdCBbaGVhZGVyLCB0eXBlXSBvZiBJTUFHRVNfSEVBREVSUykge1xuICAgICAgICBpZiAoYnVmZmVyLmxlbmd0aCA+IGhlYWRlci5sZW5ndGggJiYgaGVhZGVyLmV2ZXJ5KCh4LCBpKSA9PiB4ID09PSBidWZmZXJbaV0pKSB7XG4gICAgICAgICAgdGhpcy5jb250ZW50VHlwZSA9IHR5cGU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLmNvbnRlbnRUeXBlKSB7XG4gICAgICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5FTVBUWTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHtcbiAgICAgIHR5cGU6IHRoaXMuY29udGVudFR5cGVcbiAgICB9KTtcbiAgICBsZXQgc3R5bGU7XG5cbiAgICBzd2l0Y2ggKHRoaXMuYXNwZWN0KSB7XG4gICAgICBjYXNlIFwiZml0XCI6XG4gICAgICBjYXNlIFwiYWN0dWFsXCI6XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwiaGVpZ2h0XCI6XG4gICAgICAgIHN0eWxlID0ge1xuICAgICAgICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgICAgICAgb2JqZWN0Rml0OiBcImZpbGxcIlxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIm5vbmVcIjpcbiAgICAgICAgc3R5bGUgPSB7XG4gICAgICAgICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgICAgICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgICAgICAgb2JqZWN0Rml0OiBcImZpbGxcIlxuICAgICAgICB9O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcIndpZHRoXCI6XG4gICAgICAgIHN0eWxlID0ge1xuICAgICAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgICAgICBvYmplY3RGaXQ6IFwiZmlsbFwiXG4gICAgICAgIH07XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXNbX3hmYV9vYmplY3QuJGdldFBhcmVudF0oKTtcblxuICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5zdWNjZXNzKHtcbiAgICAgIG5hbWU6IFwiaW1nXCIsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGNsYXNzOiBbXCJ4ZmFJbWFnZVwiXSxcbiAgICAgICAgc3R5bGUsXG4gICAgICAgIHNyYzogVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKSxcbiAgICAgICAgYWx0OiBwYXJlbnQgPyBhcmlhTGFiZWwocGFyZW50W194ZmFfb2JqZWN0LiRnZXRQYXJlbnRdKCkpIDogbnVsbFxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbn1cblxuY2xhc3MgSW1hZ2VFZGl0IGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImltYWdlRWRpdFwiLCB0cnVlKTtcbiAgICB0aGlzLmRhdGEgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5kYXRhLCBbXCJsaW5rXCIsIFwiZW1iZWRcIl0pO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMuYm9yZGVyID0gbnVsbDtcbiAgICB0aGlzLmV4dHJhcyA9IG51bGw7XG4gICAgdGhpcy5tYXJnaW4gPSBudWxsO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiR0b0hUTUxdKGF2YWlsYWJsZVNwYWNlKSB7XG4gICAgaWYgKHRoaXMuZGF0YSA9PT0gXCJlbWJlZFwiKSB7XG4gICAgICByZXR1cm4gX3V0aWxzLkhUTUxSZXN1bHQuc3VjY2Vzcyh7XG4gICAgICAgIG5hbWU6IFwiZGl2XCIsXG4gICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgYXR0cmlidXRlczoge31cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5FTVBUWTtcbiAgfVxuXG59XG5cbmNsYXNzIEludGVnZXIgZXh0ZW5kcyBfeGZhX29iamVjdC5Db250ZW50T2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImludGVnZXJcIik7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgXCJcIjtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGZpbmFsaXplXSgpIHtcbiAgICBjb25zdCBudW1iZXIgPSBwYXJzZUludCh0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XS50cmltKCksIDEwKTtcbiAgICB0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XSA9IGlzTmFOKG51bWJlcikgPyBudWxsIDogbnVtYmVyO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiR0b0hUTUxdKGF2YWlsYWJsZVNwYWNlKSB7XG4gICAgcmV0dXJuIHZhbHVlVG9IdG1sKHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdICE9PSBudWxsID8gdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0udG9TdHJpbmcoKSA6IFwiXCIpO1xuICB9XG5cbn1cblxuY2xhc3MgSXNzdWVycyBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJpc3N1ZXJzXCIsIHRydWUpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy50eXBlID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMudHlwZSwgW1wib3B0aW9uYWxcIiwgXCJyZXF1aXJlZFwiXSk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMuY2VydGlmaWNhdGUgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgfVxuXG59XG5cbmNsYXNzIEl0ZW1zIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcIml0ZW1zXCIsIHRydWUpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8IFwiXCI7XG4gICAgdGhpcy5wcmVzZW5jZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnByZXNlbmNlLCBbXCJ2aXNpYmxlXCIsIFwiaGlkZGVuXCIsIFwiaW5hY3RpdmVcIiwgXCJpbnZpc2libGVcIl0pO1xuICAgIHRoaXMucmVmID0gYXR0cmlidXRlcy5yZWYgfHwgXCJcIjtcbiAgICB0aGlzLnNhdmUgPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMuc2F2ZSxcbiAgICAgIGRlZmF1bHRWYWx1ZTogMCxcbiAgICAgIHZhbGlkYXRlOiB4ID0+IHggPT09IDFcbiAgICB9KTtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gICAgdGhpcy5ib29sZWFuID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5kYXRlID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5kYXRlVGltZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZGVjaW1hbCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZXhEYXRhID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5mbG9hdCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuaW1hZ2UgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmludGVnZXIgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnRleHQgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnRpbWUgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kdG9IVE1MXSgpIHtcbiAgICBjb25zdCBvdXRwdXQgPSBbXTtcblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpc1tfeGZhX29iamVjdC4kZ2V0Q2hpbGRyZW5dKCkpIHtcbiAgICAgIG91dHB1dC5wdXNoKGNoaWxkW194ZmFfb2JqZWN0LiR0ZXh0XSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3V0aWxzLkhUTUxSZXN1bHQuc3VjY2VzcyhvdXRwdXQpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5JdGVtcyA9IEl0ZW1zO1xuXG5jbGFzcyBLZWVwIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImtlZXBcIiwgdHJ1ZSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICBjb25zdCBvcHRpb25zID0gW1wibm9uZVwiLCBcImNvbnRlbnRBcmVhXCIsIFwicGFnZUFyZWFcIl07XG4gICAgdGhpcy5pbnRhY3QgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5pbnRhY3QsIG9wdGlvbnMpO1xuICAgIHRoaXMubmV4dCA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLm5leHQsIG9wdGlvbnMpO1xuICAgIHRoaXMucHJldmlvdXMgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5wcmV2aW91cywgb3B0aW9ucyk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMuZXh0cmFzID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIEtleVVzYWdlIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImtleVVzYWdlXCIpO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBbXCJcIiwgXCJ5ZXNcIiwgXCJub1wiXTtcbiAgICB0aGlzLmNybFNpZ24gPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5jcmxTaWduLCBvcHRpb25zKTtcbiAgICB0aGlzLmRhdGFFbmNpcGhlcm1lbnQgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5kYXRhRW5jaXBoZXJtZW50LCBvcHRpb25zKTtcbiAgICB0aGlzLmRlY2lwaGVyT25seSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLmRlY2lwaGVyT25seSwgb3B0aW9ucyk7XG4gICAgdGhpcy5kaWdpdGFsU2lnbmF0dXJlID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMuZGlnaXRhbFNpZ25hdHVyZSwgb3B0aW9ucyk7XG4gICAgdGhpcy5lbmNpcGhlck9ubHkgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5lbmNpcGhlck9ubHksIG9wdGlvbnMpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5rZXlBZ3JlZW1lbnQgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5rZXlBZ3JlZW1lbnQsIG9wdGlvbnMpO1xuICAgIHRoaXMua2V5Q2VydFNpZ24gPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5rZXlDZXJ0U2lnbiwgb3B0aW9ucyk7XG4gICAgdGhpcy5rZXlFbmNpcGhlcm1lbnQgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5rZXlFbmNpcGhlcm1lbnQsIG9wdGlvbnMpO1xuICAgIHRoaXMubm9uUmVwdWRpYXRpb24gPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5ub25SZXB1ZGlhdGlvbiwgb3B0aW9ucyk7XG4gICAgdGhpcy50eXBlID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMudHlwZSwgW1wib3B0aW9uYWxcIiwgXCJyZXF1aXJlZFwiXSk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICB9XG5cbn1cblxuY2xhc3MgTGluZSBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJsaW5lXCIsIHRydWUpO1xuICAgIHRoaXMuaGFuZCA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLmhhbmQsIFtcImV2ZW5cIiwgXCJsZWZ0XCIsIFwicmlnaHRcIl0pO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5zbG9wZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnNsb3BlLCBbXCJcXFxcXCIsIFwiL1wiXSk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMuZWRnZSA9IG51bGw7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJHRvSFRNTF0oKSB7XG4gICAgY29uc3QgcGFyZW50ID0gdGhpc1tfeGZhX29iamVjdC4kZ2V0UGFyZW50XSgpW194ZmFfb2JqZWN0LiRnZXRQYXJlbnRdKCk7XG5cbiAgICBjb25zdCBlZGdlID0gdGhpcy5lZGdlID8gdGhpcy5lZGdlIDogbmV3IEVkZ2Uoe30pO1xuXG4gICAgY29uc3QgZWRnZVN0eWxlID0gZWRnZVtfeGZhX29iamVjdC4kdG9TdHlsZV0oKTtcblxuICAgIGNvbnN0IHN0eWxlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBjb25zdCB0aGlja25lc3MgPSBlZGdlLnByZXNlbmNlID09PSBcInZpc2libGVcIiA/IGVkZ2UudGhpY2tuZXNzIDogMDtcbiAgICBzdHlsZS5zdHJva2VXaWR0aCA9ICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKHRoaWNrbmVzcyk7XG4gICAgc3R5bGUuc3Ryb2tlID0gZWRnZVN0eWxlLmNvbG9yO1xuICAgIGxldCB4MSwgeTEsIHgyLCB5MjtcbiAgICBsZXQgd2lkdGggPSBcIjEwMCVcIjtcbiAgICBsZXQgaGVpZ2h0ID0gXCIxMDAlXCI7XG5cbiAgICBpZiAocGFyZW50LncgPD0gdGhpY2tuZXNzKSB7XG4gICAgICBbeDEsIHkxLCB4MiwgeTJdID0gW1wiNTAlXCIsIDAsIFwiNTAlXCIsIFwiMTAwJVwiXTtcbiAgICAgIHdpZHRoID0gc3R5bGUuc3Ryb2tlV2lkdGg7XG4gICAgfSBlbHNlIGlmIChwYXJlbnQuaCA8PSB0aGlja25lc3MpIHtcbiAgICAgIFt4MSwgeTEsIHgyLCB5Ml0gPSBbMCwgXCI1MCVcIiwgXCIxMDAlXCIsIFwiNTAlXCJdO1xuICAgICAgaGVpZ2h0ID0gc3R5bGUuc3Ryb2tlV2lkdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnNsb3BlID09PSBcIlxcXFxcIikge1xuICAgICAgICBbeDEsIHkxLCB4MiwgeTJdID0gWzAsIDAsIFwiMTAwJVwiLCBcIjEwMCVcIl07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBbeDEsIHkxLCB4MiwgeTJdID0gWzAsIFwiMTAwJVwiLCBcIjEwMCVcIiwgMF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbGluZSA9IHtcbiAgICAgIG5hbWU6IFwibGluZVwiLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICB4bWxuczogU1ZHX05TLFxuICAgICAgICB4MSxcbiAgICAgICAgeTEsXG4gICAgICAgIHgyLFxuICAgICAgICB5MixcbiAgICAgICAgc3R5bGVcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHN2ZyA9IHtcbiAgICAgIG5hbWU6IFwic3ZnXCIsXG4gICAgICBjaGlsZHJlbjogW2xpbmVdLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICB4bWxuczogU1ZHX05TLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICBzdHlsZToge1xuICAgICAgICAgIG92ZXJmbG93OiBcInZpc2libGVcIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChoYXNNYXJnaW4ocGFyZW50KSkge1xuICAgICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe1xuICAgICAgICBuYW1lOiBcImRpdlwiLFxuICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgIGRpc3BsYXk6IFwiaW5saW5lXCIsXG4gICAgICAgICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICAgICAgICBoZWlnaHQ6IFwiMTAwJVwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjaGlsZHJlbjogW3N2Z11cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHN2Zy5hdHRyaWJ1dGVzLnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5zdWNjZXNzKHN2Zyk7XG4gIH1cblxufVxuXG5jbGFzcyBMaW5lYXIgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwibGluZWFyXCIsIHRydWUpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy50eXBlID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMudHlwZSwgW1widG9SaWdodFwiLCBcInRvQm90dG9tXCIsIFwidG9MZWZ0XCIsIFwidG9Ub3BcIl0pO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmNvbG9yID0gbnVsbDtcbiAgICB0aGlzLmV4dHJhcyA9IG51bGw7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJHRvU3R5bGVdKHN0YXJ0Q29sb3IpIHtcbiAgICBzdGFydENvbG9yID0gc3RhcnRDb2xvciA/IHN0YXJ0Q29sb3JbX3hmYV9vYmplY3QuJHRvU3R5bGVdKCkgOiBcIiNGRkZGRkZcIjtcbiAgICBjb25zdCB0cmFuc2YgPSB0aGlzLnR5cGUucmVwbGFjZSgvKFtSQkxUXSkvLCBcIiAkMVwiKS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGVuZENvbG9yID0gdGhpcy5jb2xvciA/IHRoaXMuY29sb3JbX3hmYV9vYmplY3QuJHRvU3R5bGVdKCkgOiBcIiMwMDAwMDBcIjtcbiAgICByZXR1cm4gYGxpbmVhci1ncmFkaWVudCgke3RyYW5zZn0sICR7c3RhcnRDb2xvcn0sICR7ZW5kQ29sb3J9KWA7XG4gIH1cblxufVxuXG5jbGFzcyBMb2NrRG9jdW1lbnQgZXh0ZW5kcyBfeGZhX29iamVjdC5Db250ZW50T2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcImxvY2tEb2N1bWVudFwiKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMudHlwZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnR5cGUsIFtcIm9wdGlvbmFsXCIsIFwicmVxdWlyZWRcIl0pO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kZmluYWxpemVdKCkge1xuICAgIHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdLCBbXCJhdXRvXCIsIFwiMFwiLCBcIjFcIl0pO1xuICB9XG5cbn1cblxuY2xhc3MgTWFuaWZlc3QgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwibWFuaWZlc3RcIiwgdHJ1ZSk7XG4gICAgdGhpcy5hY3Rpb24gPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5hY3Rpb24sIFtcImluY2x1ZGVcIiwgXCJhbGxcIiwgXCJleGNsdWRlXCJdKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmV4dHJhcyA9IG51bGw7XG4gICAgdGhpcy5yZWYgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgfVxuXG59XG5cbmNsYXNzIE1hcmdpbiBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJtYXJnaW5cIiwgdHJ1ZSk7XG4gICAgdGhpcy5ib3R0b21JbnNldCA9ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMuYm90dG9tSW5zZXQsIFwiMFwiKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMubGVmdEluc2V0ID0gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkoYXR0cmlidXRlcy5sZWZ0SW5zZXQsIFwiMFwiKTtcbiAgICB0aGlzLnJpZ2h0SW5zZXQgPSAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KShhdHRyaWJ1dGVzLnJpZ2h0SW5zZXQsIFwiMFwiKTtcbiAgICB0aGlzLnRvcEluc2V0ID0gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkoYXR0cmlidXRlcy50b3BJbnNldCwgXCIwXCIpO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmV4dHJhcyA9IG51bGw7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJHRvU3R5bGVdKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXJnaW46ICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMudG9wSW5zZXQpICsgXCIgXCIgKyAoMCwgX2h0bWxfdXRpbHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnJpZ2h0SW5zZXQpICsgXCIgXCIgKyAoMCwgX2h0bWxfdXRpbHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLmJvdHRvbUluc2V0KSArIFwiIFwiICsgKDAsIF9odG1sX3V0aWxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5sZWZ0SW5zZXQpXG4gICAgfTtcbiAgfVxuXG59XG5cbmNsYXNzIE1kcCBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJtZHBcIik7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLnBlcm1pc3Npb25zID0gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLnBlcm1pc3Npb25zLFxuICAgICAgZGVmYXVsdFZhbHVlOiAyLFxuICAgICAgdmFsaWRhdGU6IHggPT4geCA9PT0gMSB8fCB4ID09PSAzXG4gICAgfSk7XG4gICAgdGhpcy5zaWduYXR1cmVUeXBlID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMuc2lnbmF0dXJlVHlwZSwgW1wiZmlsbGVyXCIsIFwiYXV0aG9yXCJdKTtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gIH1cblxufVxuXG5jbGFzcyBNZWRpdW0gZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwibWVkaXVtXCIpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5pbWFnaW5nQkJveCA9ICgwLCBfdXRpbHMuZ2V0QkJveCkoYXR0cmlidXRlcy5pbWFnaW5nQkJveCk7XG4gICAgdGhpcy5sb25nID0gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkoYXR0cmlidXRlcy5sb25nKTtcbiAgICB0aGlzLm9yaWVudGF0aW9uID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMub3JpZW50YXRpb24sIFtcInBvcnRyYWl0XCIsIFwibGFuZHNjYXBlXCJdKTtcbiAgICB0aGlzLnNob3J0ID0gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkoYXR0cmlidXRlcy5zaG9ydCk7XG4gICAgdGhpcy5zdG9jayA9IGF0dHJpYnV0ZXMuc3RvY2sgfHwgXCJcIjtcbiAgICB0aGlzLnRyYXlJbiA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnRyYXlJbiwgW1wiYXV0b1wiLCBcImRlbGVnYXRlXCIsIFwicGFnZUZyb250XCJdKTtcbiAgICB0aGlzLnRyYXlPdXQgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy50cmF5T3V0LCBbXCJhdXRvXCIsIFwiZGVsZWdhdGVcIl0pO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgfVxuXG59XG5cbmNsYXNzIE1lc3NhZ2UgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwibWVzc2FnZVwiLCB0cnVlKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLnRleHQgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgfVxuXG59XG5cbmNsYXNzIE51bWVyaWNFZGl0IGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcIm51bWVyaWNFZGl0XCIsIHRydWUpO1xuICAgIHRoaXMuaFNjcm9sbFBvbGljeSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLmhTY3JvbGxQb2xpY3ksIFtcImF1dG9cIiwgXCJvZmZcIiwgXCJvblwiXSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gICAgdGhpcy5ib3JkZXIgPSBudWxsO1xuICAgIHRoaXMuY29tYiA9IG51bGw7XG4gICAgdGhpcy5leHRyYXMgPSBudWxsO1xuICAgIHRoaXMubWFyZ2luID0gbnVsbDtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kdG9IVE1MXShhdmFpbGFibGVTcGFjZSkge1xuICAgIGNvbnN0IHN0eWxlID0gKDAsIF9odG1sX3V0aWxzLnRvU3R5bGUpKHRoaXMsIFwiYm9yZGVyXCIsIFwiZm9udFwiLCBcIm1hcmdpblwiKTtcblxuICAgIGNvbnN0IGZpZWxkID0gdGhpc1tfeGZhX29iamVjdC4kZ2V0UGFyZW50XSgpW194ZmFfb2JqZWN0LiRnZXRQYXJlbnRdKCk7XG5cbiAgICBjb25zdCBodG1sID0ge1xuICAgICAgbmFtZTogXCJpbnB1dFwiLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgZmllbGRJZDogZmllbGRbX3hmYV9vYmplY3QuJHVpZF0sXG4gICAgICAgIGRhdGFJZDogZmllbGRbX3hmYV9vYmplY3QuJGRhdGFdICYmIGZpZWxkW194ZmFfb2JqZWN0LiRkYXRhXVtfeGZhX29iamVjdC4kdWlkXSB8fCBmaWVsZFtfeGZhX29iamVjdC4kdWlkXSxcbiAgICAgICAgY2xhc3M6IFtcInhmYVRleHRmaWVsZFwiXSxcbiAgICAgICAgc3R5bGUsXG4gICAgICAgIFwiYXJpYS1sYWJlbFwiOiBhcmlhTGFiZWwoZmllbGQpXG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gX3V0aWxzLkhUTUxSZXN1bHQuc3VjY2Vzcyh7XG4gICAgICBuYW1lOiBcImxhYmVsXCIsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGNsYXNzOiBbXCJ4ZmFMYWJlbFwiXVxuICAgICAgfSxcbiAgICAgIGNoaWxkcmVuOiBbaHRtbF1cbiAgICB9KTtcbiAgfVxuXG59XG5cbmNsYXNzIE9jY3VyIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcIm9jY3VyXCIsIHRydWUpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5pbml0aWFsID0gYXR0cmlidXRlcy5pbml0aWFsICE9PSBcIlwiID8gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLmluaXRpYWwsXG4gICAgICBkZWZhdWx0VmFsdWU6IFwiXCIsXG4gICAgICB2YWxpZGF0ZTogeCA9PiB0cnVlXG4gICAgfSkgOiBcIlwiO1xuICAgIHRoaXMubWF4ID0gYXR0cmlidXRlcy5tYXggIT09IFwiXCIgPyAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMubWF4LFxuICAgICAgZGVmYXVsdFZhbHVlOiAxLFxuICAgICAgdmFsaWRhdGU6IHggPT4gdHJ1ZVxuICAgIH0pIDogXCJcIjtcbiAgICB0aGlzLm1pbiA9IGF0dHJpYnV0ZXMubWluICE9PSBcIlwiID8gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLm1pbixcbiAgICAgIGRlZmF1bHRWYWx1ZTogMSxcbiAgICAgIHZhbGlkYXRlOiB4ID0+IHRydWVcbiAgICB9KSA6IFwiXCI7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMuZXh0cmFzID0gbnVsbDtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kY2xlYW5dKCkge1xuICAgIGNvbnN0IHBhcmVudCA9IHRoaXNbX3hmYV9vYmplY3QuJGdldFBhcmVudF0oKTtcblxuICAgIGNvbnN0IG9yaWdpbmFsTWluID0gdGhpcy5taW47XG5cbiAgICBpZiAodGhpcy5taW4gPT09IFwiXCIpIHtcbiAgICAgIHRoaXMubWluID0gcGFyZW50IGluc3RhbmNlb2YgUGFnZUFyZWEgfHwgcGFyZW50IGluc3RhbmNlb2YgUGFnZVNldCA/IDAgOiAxO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1heCA9PT0gXCJcIikge1xuICAgICAgaWYgKG9yaWdpbmFsTWluID09PSBcIlwiKSB7XG4gICAgICAgIHRoaXMubWF4ID0gcGFyZW50IGluc3RhbmNlb2YgUGFnZUFyZWEgfHwgcGFyZW50IGluc3RhbmNlb2YgUGFnZVNldCA/IC0xIDogMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubWF4ID0gdGhpcy5taW47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWF4ICE9PSAtMSAmJiB0aGlzLm1heCA8IHRoaXMubWluKSB7XG4gICAgICB0aGlzLm1heCA9IHRoaXMubWluO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmluaXRpYWwgPT09IFwiXCIpIHtcbiAgICAgIHRoaXMuaW5pdGlhbCA9IHBhcmVudCBpbnN0YW5jZW9mIFRlbXBsYXRlID8gMSA6IHRoaXMubWluO1xuICAgIH1cbiAgfVxuXG59XG5cbmNsYXNzIE9pZCBleHRlbmRzIF94ZmFfb2JqZWN0LlN0cmluZ09iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJvaWRcIik7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgXCJcIjtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gIH1cblxufVxuXG5jbGFzcyBPaWRzIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcIm9pZHNcIiwgdHJ1ZSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLnR5cGUgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy50eXBlLCBbXCJvcHRpb25hbFwiLCBcInJlcXVpcmVkXCJdKTtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gICAgdGhpcy5vaWQgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgfVxuXG59XG5cbmNsYXNzIE92ZXJmbG93IGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcIm92ZXJmbG93XCIpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5sZWFkZXIgPSBhdHRyaWJ1dGVzLmxlYWRlciB8fCBcIlwiO1xuICAgIHRoaXMudGFyZ2V0ID0gYXR0cmlidXRlcy50YXJnZXQgfHwgXCJcIjtcbiAgICB0aGlzLnRyYWlsZXIgPSBhdHRyaWJ1dGVzLnRyYWlsZXIgfHwgXCJcIjtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGdldEV4dHJhXSgpIHtcbiAgICBpZiAoIXRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXSkge1xuICAgICAgY29uc3QgcGFyZW50ID0gdGhpc1tfeGZhX29iamVjdC4kZ2V0UGFyZW50XSgpO1xuXG4gICAgICBjb25zdCByb290ID0gdGhpc1tfeGZhX29iamVjdC4kZ2V0VGVtcGxhdGVSb290XSgpO1xuXG4gICAgICBjb25zdCB0YXJnZXQgPSByb290W194ZmFfb2JqZWN0LiRzZWFyY2hOb2RlXSh0aGlzLnRhcmdldCwgcGFyZW50KTtcblxuICAgICAgY29uc3QgbGVhZGVyID0gcm9vdFtfeGZhX29iamVjdC4kc2VhcmNoTm9kZV0odGhpcy5sZWFkZXIsIHBhcmVudCk7XG5cbiAgICAgIGNvbnN0IHRyYWlsZXIgPSByb290W194ZmFfb2JqZWN0LiRzZWFyY2hOb2RlXSh0aGlzLnRyYWlsZXIsIHBhcmVudCk7XG5cbiAgICAgIHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXSA9IHtcbiAgICAgICAgdGFyZ2V0OiB0YXJnZXQgJiYgdGFyZ2V0WzBdIHx8IG51bGwsXG4gICAgICAgIGxlYWRlcjogbGVhZGVyICYmIGxlYWRlclswXSB8fCBudWxsLFxuICAgICAgICB0cmFpbGVyOiB0cmFpbGVyICYmIHRyYWlsZXJbMF0gfHwgbnVsbCxcbiAgICAgICAgYWRkTGVhZGVyOiBmYWxzZSxcbiAgICAgICAgYWRkVHJhaWxlcjogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXTtcbiAgfVxuXG59XG5cbmNsYXNzIFBhZ2VBcmVhIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcInBhZ2VBcmVhXCIsIHRydWUpO1xuICAgIHRoaXMuYmxhbmtPck5vdEJsYW5rID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMuYmxhbmtPck5vdEJsYW5rLCBbXCJhbnlcIiwgXCJibGFua1wiLCBcIm5vdEJsYW5rXCJdKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMuaW5pdGlhbE51bWJlciA9ICgwLCBfdXRpbHMuZ2V0SW50ZWdlcikoe1xuICAgICAgZGF0YTogYXR0cmlidXRlcy5pbml0aWFsTnVtYmVyLFxuICAgICAgZGVmYXVsdFZhbHVlOiAxLFxuICAgICAgdmFsaWRhdGU6IHggPT4gdHJ1ZVxuICAgIH0pO1xuICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSB8fCBcIlwiO1xuICAgIHRoaXMubnVtYmVyZWQgPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMubnVtYmVyZWQsXG4gICAgICBkZWZhdWx0VmFsdWU6IDEsXG4gICAgICB2YWxpZGF0ZTogeCA9PiB0cnVlXG4gICAgfSk7XG4gICAgdGhpcy5vZGRPckV2ZW4gPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5vZGRPckV2ZW4sIFtcImFueVwiLCBcImV2ZW5cIiwgXCJvZGRcIl0pO1xuICAgIHRoaXMucGFnZVBvc2l0aW9uID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMucGFnZVBvc2l0aW9uLCBbXCJhbnlcIiwgXCJmaXJzdFwiLCBcImxhc3RcIiwgXCJvbmx5XCIsIFwicmVzdFwiXSk7XG4gICAgdGhpcy5yZWxldmFudCA9ICgwLCBfdXRpbHMuZ2V0UmVsZXZhbnQpKGF0dHJpYnV0ZXMucmVsZXZhbnQpO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmRlc2MgPSBudWxsO1xuICAgIHRoaXMuZXh0cmFzID0gbnVsbDtcbiAgICB0aGlzLm1lZGl1bSA9IG51bGw7XG4gICAgdGhpcy5vY2N1ciA9IG51bGw7XG4gICAgdGhpcy5hcmVhID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5jb250ZW50QXJlYSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZHJhdyA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZXhjbEdyb3VwID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5maWVsZCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuc3ViZm9ybSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRpc1VzYWJsZV0oKSB7XG4gICAgaWYgKCF0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0pIHtcbiAgICAgIHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXSA9IHtcbiAgICAgICAgbnVtYmVyT2ZVc2U6IDBcbiAgICAgIH07XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gIXRoaXMub2NjdXIgfHwgdGhpcy5vY2N1ci5tYXggPT09IC0xIHx8IHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXS5udW1iZXJPZlVzZSA8IHRoaXMub2NjdXIubWF4O1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRjbGVhblBhZ2VdKCkge1xuICAgIGRlbGV0ZSB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV07XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGdldE5leHRQYWdlXSgpIHtcbiAgICBpZiAoIXRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXSkge1xuICAgICAgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdID0ge1xuICAgICAgICBudW1iZXJPZlVzZTogMFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzW194ZmFfb2JqZWN0LiRnZXRQYXJlbnRdKCk7XG5cbiAgICBpZiAocGFyZW50LnJlbGF0aW9uID09PSBcIm9yZGVyZWRPY2N1cnJlbmNlXCIpIHtcbiAgICAgIGlmICh0aGlzW194ZmFfb2JqZWN0LiRpc1VzYWJsZV0oKSkge1xuICAgICAgICB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0ubnVtYmVyT2ZVc2UgKz0gMTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmVudFtfeGZhX29iamVjdC4kZ2V0TmV4dFBhZ2VdKCk7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGdldEF2YWlsYWJsZVNwYWNlXSgpIHtcbiAgICByZXR1cm4gdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLnNwYWNlIHx8IHtcbiAgICAgIHdpZHRoOiAwLFxuICAgICAgaGVpZ2h0OiAwXG4gICAgfTtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kdG9IVE1MXSgpIHtcbiAgICBpZiAoIXRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXSkge1xuICAgICAgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdID0ge1xuICAgICAgICBudW1iZXJPZlVzZTogMVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZHJlbiA9IFtdO1xuICAgIHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXS5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgIGNvbnN0IHN0eWxlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIGlmICh0aGlzLm1lZGl1bSAmJiB0aGlzLm1lZGl1bS5zaG9ydCAmJiB0aGlzLm1lZGl1bS5sb25nKSB7XG4gICAgICBzdHlsZS53aWR0aCA9ICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMubWVkaXVtLnNob3J0KTtcbiAgICAgIHN0eWxlLmhlaWdodCA9ICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMubWVkaXVtLmxvbmcpO1xuICAgICAgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLnNwYWNlID0ge1xuICAgICAgICB3aWR0aDogdGhpcy5tZWRpdW0uc2hvcnQsXG4gICAgICAgIGhlaWdodDogdGhpcy5tZWRpdW0ubG9uZ1xuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMubWVkaXVtLm9yaWVudGF0aW9uID09PSBcImxhbmRzY2FwZVwiKSB7XG4gICAgICAgIGNvbnN0IHggPSBzdHlsZS53aWR0aDtcbiAgICAgICAgc3R5bGUud2lkdGggPSBzdHlsZS5oZWlnaHQ7XG4gICAgICAgIHN0eWxlLmhlaWdodCA9IHg7XG4gICAgICAgIHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXS5zcGFjZSA9IHtcbiAgICAgICAgICB3aWR0aDogdGhpcy5tZWRpdW0ubG9uZyxcbiAgICAgICAgICBoZWlnaHQ6IHRoaXMubWVkaXVtLnNob3J0XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShcIlhGQSAtIE5vIG1lZGl1bSBzcGVjaWZpZWQgaW4gcGFnZUFyZWE6IHBsZWFzZSBmaWxlIGEgYnVnLlwiKTtcbiAgICB9XG5cbiAgICB0aGlzW194ZmFfb2JqZWN0LiRjaGlsZHJlblRvSFRNTF0oe1xuICAgICAgZmlsdGVyOiBuZXcgU2V0KFtcImFyZWFcIiwgXCJkcmF3XCIsIFwiZmllbGRcIiwgXCJzdWJmb3JtXCJdKSxcbiAgICAgIGluY2x1ZGU6IHRydWVcbiAgICB9KTtcblxuICAgIHRoaXNbX3hmYV9vYmplY3QuJGNoaWxkcmVuVG9IVE1MXSh7XG4gICAgICBmaWx0ZXI6IG5ldyBTZXQoW1wiY29udGVudEFyZWFcIl0pLFxuICAgICAgaW5jbHVkZTogdHJ1ZVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe1xuICAgICAgbmFtZTogXCJkaXZcIixcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBjbGFzczogW1wieGZhUGFnZVwiXSxcbiAgICAgICAgaWQ6IHRoaXNbX3hmYV9vYmplY3QuJHVpZF0sXG4gICAgICAgIHN0eWxlLFxuICAgICAgICB4ZmFOYW1lOiB0aGlzLm5hbWVcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG59XG5cbmNsYXNzIFBhZ2VTZXQgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwicGFnZVNldFwiLCB0cnVlKTtcbiAgICB0aGlzLmR1cGxleEltcG9zaXRpb24gPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5kdXBsZXhJbXBvc2l0aW9uLCBbXCJsb25nRWRnZVwiLCBcInNob3J0RWRnZVwiXSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgXCJcIjtcbiAgICB0aGlzLnJlbGF0aW9uID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMucmVsYXRpb24sIFtcIm9yZGVyZWRPY2N1cnJlbmNlXCIsIFwiZHVwbGV4UGFnaW5hdGVkXCIsIFwic2ltcGxleFBhZ2luYXRlZFwiXSk7XG4gICAgdGhpcy5yZWxldmFudCA9ICgwLCBfdXRpbHMuZ2V0UmVsZXZhbnQpKGF0dHJpYnV0ZXMucmVsZXZhbnQpO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmV4dHJhcyA9IG51bGw7XG4gICAgdGhpcy5vY2N1ciA9IG51bGw7XG4gICAgdGhpcy5wYWdlQXJlYSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMucGFnZVNldCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRjbGVhblBhZ2VdKCkge1xuICAgIGZvciAoY29uc3QgcGFnZSBvZiB0aGlzLnBhZ2VBcmVhLmNoaWxkcmVuKSB7XG4gICAgICBwYWdlW194ZmFfb2JqZWN0LiRjbGVhblBhZ2VdKCk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBwYWdlIG9mIHRoaXMucGFnZVNldC5jaGlsZHJlbikge1xuICAgICAgcGFnZVtfeGZhX29iamVjdC4kY2xlYW5QYWdlXSgpO1xuICAgIH1cbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kaXNVc2FibGVdKCkge1xuICAgIHJldHVybiAhdGhpcy5vY2N1ciB8fCB0aGlzLm9jY3VyLm1heCA9PT0gLTEgfHwgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLm51bWJlck9mVXNlIDwgdGhpcy5vY2N1ci5tYXg7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGdldE5leHRQYWdlXSgpIHtcbiAgICBpZiAoIXRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXSkge1xuICAgICAgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdID0ge1xuICAgICAgICBudW1iZXJPZlVzZTogMSxcbiAgICAgICAgcGFnZUluZGV4OiAtMSxcbiAgICAgICAgcGFnZVNldEluZGV4OiAtMVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZWxhdGlvbiA9PT0gXCJvcmRlcmVkT2NjdXJyZW5jZVwiKSB7XG4gICAgICBpZiAodGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLnBhZ2VJbmRleCArIDEgPCB0aGlzLnBhZ2VBcmVhLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0ucGFnZUluZGV4ICs9IDE7XG4gICAgICAgIGNvbnN0IHBhZ2VBcmVhID0gdGhpcy5wYWdlQXJlYS5jaGlsZHJlblt0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0ucGFnZUluZGV4XTtcbiAgICAgICAgcmV0dXJuIHBhZ2VBcmVhW194ZmFfb2JqZWN0LiRnZXROZXh0UGFnZV0oKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXS5wYWdlU2V0SW5kZXggKyAxIDwgdGhpcy5wYWdlU2V0LmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0ucGFnZVNldEluZGV4ICs9IDE7XG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2VTZXQuY2hpbGRyZW5bdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLnBhZ2VTZXRJbmRleF1bX3hmYV9vYmplY3QuJGdldE5leHRQYWdlXSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpc1tfeGZhX29iamVjdC4kaXNVc2FibGVdKCkpIHtcbiAgICAgICAgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLm51bWJlck9mVXNlICs9IDE7XG4gICAgICAgIHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXS5wYWdlSW5kZXggPSAtMTtcbiAgICAgICAgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLnBhZ2VTZXRJbmRleCA9IC0xO1xuICAgICAgICByZXR1cm4gdGhpc1tfeGZhX29iamVjdC4kZ2V0TmV4dFBhZ2VdKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXNbX3hmYV9vYmplY3QuJGdldFBhcmVudF0oKTtcblxuICAgICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIFBhZ2VTZXQpIHtcbiAgICAgICAgcmV0dXJuIHBhcmVudFtfeGZhX29iamVjdC4kZ2V0TmV4dFBhZ2VdKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXNbX3hmYV9vYmplY3QuJGNsZWFuUGFnZV0oKTtcblxuICAgICAgcmV0dXJuIHRoaXNbX3hmYV9vYmplY3QuJGdldE5leHRQYWdlXSgpO1xuICAgIH1cblxuICAgIGNvbnN0IHBhZ2VOdW1iZXIgPSB0aGlzW194ZmFfb2JqZWN0LiRnZXRUZW1wbGF0ZVJvb3RdKClbX3hmYV9vYmplY3QuJGV4dHJhXS5wYWdlTnVtYmVyO1xuXG4gICAgY29uc3QgcGFyaXR5ID0gcGFnZU51bWJlciAlIDIgPT09IDAgPyBcImV2ZW5cIiA6IFwib2RkXCI7XG4gICAgY29uc3QgcG9zaXRpb24gPSBwYWdlTnVtYmVyID09PSAwID8gXCJmaXJzdFwiIDogXCJyZXN0XCI7XG4gICAgbGV0IHBhZ2UgPSB0aGlzLnBhZ2VBcmVhLmNoaWxkcmVuLmZpbmQocCA9PiBwLm9kZE9yRXZlbiA9PT0gcGFyaXR5ICYmIHAucGFnZVBvc2l0aW9uID09PSBwb3NpdGlvbik7XG5cbiAgICBpZiAocGFnZSkge1xuICAgICAgcmV0dXJuIHBhZ2U7XG4gICAgfVxuXG4gICAgcGFnZSA9IHRoaXMucGFnZUFyZWEuY2hpbGRyZW4uZmluZChwID0+IHAub2RkT3JFdmVuID09PSBcImFueVwiICYmIHAucGFnZVBvc2l0aW9uID09PSBwb3NpdGlvbik7XG5cbiAgICBpZiAocGFnZSkge1xuICAgICAgcmV0dXJuIHBhZ2U7XG4gICAgfVxuXG4gICAgcGFnZSA9IHRoaXMucGFnZUFyZWEuY2hpbGRyZW4uZmluZChwID0+IHAub2RkT3JFdmVuID09PSBcImFueVwiICYmIHAucGFnZVBvc2l0aW9uID09PSBcImFueVwiKTtcblxuICAgIGlmIChwYWdlKSB7XG4gICAgICByZXR1cm4gcGFnZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5wYWdlQXJlYS5jaGlsZHJlblswXTtcbiAgfVxuXG59XG5cbmNsYXNzIFBhcmEgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwicGFyYVwiLCB0cnVlKTtcbiAgICB0aGlzLmhBbGlnbiA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLmhBbGlnbiwgW1wibGVmdFwiLCBcImNlbnRlclwiLCBcImp1c3RpZnlcIiwgXCJqdXN0aWZ5QWxsXCIsIFwicmFkaXhcIiwgXCJyaWdodFwiXSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLmxpbmVIZWlnaHQgPSBhdHRyaWJ1dGVzLmxpbmVIZWlnaHQgPyAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KShhdHRyaWJ1dGVzLmxpbmVIZWlnaHQsIFwiMHB0XCIpIDogXCJcIjtcbiAgICB0aGlzLm1hcmdpbkxlZnQgPSBhdHRyaWJ1dGVzLm1hcmdpbkxlZnQgPyAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KShhdHRyaWJ1dGVzLm1hcmdpbkxlZnQsIFwiMHB0XCIpIDogXCJcIjtcbiAgICB0aGlzLm1hcmdpblJpZ2h0ID0gYXR0cmlidXRlcy5tYXJnaW5SaWdodCA/ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMubWFyZ2luUmlnaHQsIFwiMHB0XCIpIDogXCJcIjtcbiAgICB0aGlzLm9ycGhhbnMgPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMub3JwaGFucyxcbiAgICAgIGRlZmF1bHRWYWx1ZTogMCxcbiAgICAgIHZhbGlkYXRlOiB4ID0+IHggPj0gMFxuICAgIH0pO1xuICAgIHRoaXMucHJlc2VydmUgPSBhdHRyaWJ1dGVzLnByZXNlcnZlIHx8IFwiXCI7XG4gICAgdGhpcy5yYWRpeE9mZnNldCA9IGF0dHJpYnV0ZXMucmFkaXhPZmZzZXQgPyAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KShhdHRyaWJ1dGVzLnJhZGl4T2Zmc2V0LCBcIjBwdFwiKSA6IFwiXCI7XG4gICAgdGhpcy5zcGFjZUFib3ZlID0gYXR0cmlidXRlcy5zcGFjZUFib3ZlID8gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkoYXR0cmlidXRlcy5zcGFjZUFib3ZlLCBcIjBwdFwiKSA6IFwiXCI7XG4gICAgdGhpcy5zcGFjZUJlbG93ID0gYXR0cmlidXRlcy5zcGFjZUJlbG93ID8gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkoYXR0cmlidXRlcy5zcGFjZUJlbG93LCBcIjBwdFwiKSA6IFwiXCI7XG4gICAgdGhpcy50YWJEZWZhdWx0ID0gYXR0cmlidXRlcy50YWJEZWZhdWx0ID8gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkodGhpcy50YWJEZWZhdWx0KSA6IFwiXCI7XG4gICAgdGhpcy50YWJTdG9wcyA9IChhdHRyaWJ1dGVzLnRhYlN0b3BzIHx8IFwiXCIpLnRyaW0oKS5zcGxpdCgvXFxzKy8pLm1hcCgoeCwgaSkgPT4gaSAlIDIgPT09IDEgPyAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KSh4KSA6IHgpO1xuICAgIHRoaXMudGV4dEluZGVudCA9IGF0dHJpYnV0ZXMudGV4dEluZGVudCA/ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMudGV4dEluZGVudCwgXCIwcHRcIikgOiBcIlwiO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLnZBbGlnbiA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnZBbGlnbiwgW1widG9wXCIsIFwiYm90dG9tXCIsIFwibWlkZGxlXCJdKTtcbiAgICB0aGlzLndpZG93cyA9ICgwLCBfdXRpbHMuZ2V0SW50ZWdlcikoe1xuICAgICAgZGF0YTogYXR0cmlidXRlcy53aWRvd3MsXG4gICAgICBkZWZhdWx0VmFsdWU6IDAsXG4gICAgICB2YWxpZGF0ZTogeCA9PiB4ID49IDBcbiAgICB9KTtcbiAgICB0aGlzLmh5cGhlbmF0aW9uID0gbnVsbDtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kdG9TdHlsZV0oKSB7XG4gICAgY29uc3Qgc3R5bGUgPSAoMCwgX2h0bWxfdXRpbHMudG9TdHlsZSkodGhpcywgXCJoQWxpZ25cIik7XG5cbiAgICBpZiAodGhpcy5tYXJnaW5MZWZ0ICE9PSBcIlwiKSB7XG4gICAgICBzdHlsZS5wYWRkaW5nTGVmdCA9ICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMubWFyZ2luTGVmdCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWFyZ2luUmlnaHQgIT09IFwiXCIpIHtcbiAgICAgIHN0eWxlLnBhZGRpbmdpZ2h0ID0gKDAsIF9odG1sX3V0aWxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5tYXJnaW5SaWdodCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3BhY2VBYm92ZSAhPT0gXCJcIikge1xuICAgICAgc3R5bGUucGFkZGluZ1RvcCA9ICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMuc3BhY2VBYm92ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3BhY2VCZWxvdyAhPT0gXCJcIikge1xuICAgICAgc3R5bGUucGFkZGluZ0JvdHRvbSA9ICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMuc3BhY2VCZWxvdyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGV4dEluZGVudCAhPT0gXCJcIikge1xuICAgICAgc3R5bGUudGV4dEluZGVudCA9ICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMudGV4dEluZGVudCk7XG4gICAgICAoMCwgX2h0bWxfdXRpbHMuZml4VGV4dEluZGVudCkoc3R5bGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmxpbmVIZWlnaHQgPiAwKSB7XG4gICAgICBzdHlsZS5saW5lSGVpZ2h0ID0gKDAsIF9odG1sX3V0aWxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5saW5lSGVpZ2h0KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50YWJEZWZhdWx0ICE9PSBcIlwiKSB7XG4gICAgICBzdHlsZS50YWJTaXplID0gKDAsIF9odG1sX3V0aWxzLm1lYXN1cmVUb1N0cmluZykodGhpcy50YWJEZWZhdWx0KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50YWJTdG9wcy5sZW5ndGggPiAwKSB7fVxuXG4gICAgaWYgKHRoaXMuaHlwaGVuYXRhdGlvbikge1xuICAgICAgT2JqZWN0LmFzc2lnbihzdHlsZSwgdGhpcy5oeXBoZW5hdGF0aW9uW194ZmFfb2JqZWN0LiR0b1N0eWxlXSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3R5bGU7XG4gIH1cblxufVxuXG5jbGFzcyBQYXNzd29yZEVkaXQgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwicGFzc3dvcmRFZGl0XCIsIHRydWUpO1xuICAgIHRoaXMuaFNjcm9sbFBvbGljeSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLmhTY3JvbGxQb2xpY3ksIFtcImF1dG9cIiwgXCJvZmZcIiwgXCJvblwiXSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLnBhc3N3b3JkQ2hhciA9IGF0dHJpYnV0ZXMucGFzc3dvcmRDaGFyIHx8IFwiKlwiO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmJvcmRlciA9IG51bGw7XG4gICAgdGhpcy5leHRyYXMgPSBudWxsO1xuICAgIHRoaXMubWFyZ2luID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIFBhdHRlcm4gZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwicGF0dGVyblwiLCB0cnVlKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMudHlwZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnR5cGUsIFtcImNyb3NzSGF0Y2hcIiwgXCJjcm9zc0RpYWdvbmFsXCIsIFwiZGlhZ29uYWxMZWZ0XCIsIFwiZGlhZ29uYWxSaWdodFwiLCBcImhvcml6b250YWxcIiwgXCJ2ZXJ0aWNhbFwiXSk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMuY29sb3IgPSBudWxsO1xuICAgIHRoaXMuZXh0cmFzID0gbnVsbDtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kdG9TdHlsZV0oc3RhcnRDb2xvcikge1xuICAgIHN0YXJ0Q29sb3IgPSBzdGFydENvbG9yID8gc3RhcnRDb2xvcltfeGZhX29iamVjdC4kdG9TdHlsZV0oKSA6IFwiI0ZGRkZGRlwiO1xuICAgIGNvbnN0IGVuZENvbG9yID0gdGhpcy5jb2xvciA/IHRoaXMuY29sb3JbX3hmYV9vYmplY3QuJHRvU3R5bGVdKCkgOiBcIiMwMDAwMDBcIjtcbiAgICBjb25zdCB3aWR0aCA9IDU7XG4gICAgY29uc3QgY21kID0gXCJyZXBlYXRpbmctbGluZWFyLWdyYWRpZW50XCI7XG4gICAgY29uc3QgY29sb3JzID0gYCR7c3RhcnRDb2xvcn0sJHtzdGFydENvbG9yfSAke3dpZHRofXB4LCR7ZW5kQ29sb3J9ICR7d2lkdGh9cHgsJHtlbmRDb2xvcn0gJHsyICogd2lkdGh9cHhgO1xuXG4gICAgc3dpdGNoICh0aGlzLnR5cGUpIHtcbiAgICAgIGNhc2UgXCJjcm9zc0hhdGNoXCI6XG4gICAgICAgIHJldHVybiBgJHtjbWR9KHRvIHRvcCwke2NvbG9yc30pICR7Y21kfSh0byByaWdodCwke2NvbG9yc30pYDtcblxuICAgICAgY2FzZSBcImNyb3NzRGlhZ29uYWxcIjpcbiAgICAgICAgcmV0dXJuIGAke2NtZH0oNDVkZWcsJHtjb2xvcnN9KSAke2NtZH0oLTQ1ZGVnLCR7Y29sb3JzfSlgO1xuXG4gICAgICBjYXNlIFwiZGlhZ29uYWxMZWZ0XCI6XG4gICAgICAgIHJldHVybiBgJHtjbWR9KDQ1ZGVnLCR7Y29sb3JzfSlgO1xuXG4gICAgICBjYXNlIFwiZGlhZ29uYWxSaWdodFwiOlxuICAgICAgICByZXR1cm4gYCR7Y21kfSgtNDVkZWcsJHtjb2xvcnN9KWA7XG5cbiAgICAgIGNhc2UgXCJob3Jpem9udGFsXCI6XG4gICAgICAgIHJldHVybiBgJHtjbWR9KHRvIHRvcCwke2NvbG9yc30pYDtcblxuICAgICAgY2FzZSBcInZlcnRpY2FsXCI6XG4gICAgICAgIHJldHVybiBgJHtjbWR9KHRvIHJpZ2h0LCR7Y29sb3JzfSlgO1xuICAgIH1cblxuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbn1cblxuY2xhc3MgUGljdHVyZSBleHRlbmRzIF94ZmFfb2JqZWN0LlN0cmluZ09iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJwaWN0dXJlXCIpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICB9XG5cbn1cblxuY2xhc3MgUHJvdG8gZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwicHJvdG9cIiwgdHJ1ZSk7XG4gICAgdGhpcy5hcHBlYXJhbmNlRmlsdGVyID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5hcmMgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmFyZWEgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmFzc2lzdCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuYmFyY29kZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuYmluZEl0ZW1zID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5ib29rZW5kID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5ib29sZWFuID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5ib3JkZXIgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmJyZWFrID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5icmVha0FmdGVyID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5icmVha0JlZm9yZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuYnV0dG9uID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5jYWxjdWxhdGUgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmNhcHRpb24gPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmNlcnRpZmljYXRlID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5jZXJ0aWZpY2F0ZXMgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmNoZWNrQnV0dG9uID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5jaG9pY2VMaXN0ID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5jb2xvciA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuY29tYiA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuY29ubmVjdCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuY29udGVudEFyZWEgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmNvcm5lciA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZGF0ZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZGF0ZVRpbWUgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmRhdGVUaW1lRWRpdCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZGVjaW1hbCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZGVmYXVsdFVpID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5kZXNjID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5kaWdlc3RNZXRob2QgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmRpZ2VzdE1ldGhvZHMgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmRyYXcgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmVkZ2UgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmVuY29kaW5nID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5lbmNvZGluZ3MgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmVuY3J5cHQgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmVuY3J5cHREYXRhID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5lbmNyeXB0aW9uID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5lbmNyeXB0aW9uTWV0aG9kID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5lbmNyeXB0aW9uTWV0aG9kcyA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZXZlbnQgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmV4RGF0YSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZXhPYmplY3QgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmV4Y2xHcm91cCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZXhlY3V0ZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZXh0cmFzID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5maWVsZCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZmlsbCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZmlsdGVyID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5mbG9hdCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZm9udCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZm9ybWF0ID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5oYW5kbGVyID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5oeXBoZW5hdGlvbiA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuaW1hZ2UgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmltYWdlRWRpdCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuaW50ZWdlciA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuaXNzdWVycyA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuaXRlbXMgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmtlZXAgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmtleVVzYWdlID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5saW5lID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5saW5lYXIgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmxvY2tEb2N1bWVudCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMubWFuaWZlc3QgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLm1hcmdpbiA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMubWRwID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5tZWRpdW0gPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLm1lc3NhZ2UgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLm51bWVyaWNFZGl0ID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5vY2N1ciA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMub2lkID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5vaWRzID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5vdmVyZmxvdyA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMucGFnZUFyZWEgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnBhZ2VTZXQgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnBhcmEgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnBhc3N3b3JkRWRpdCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMucGF0dGVybiA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMucGljdHVyZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMucmFkaWFsID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5yZWFzb24gPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnJlYXNvbnMgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnJlY3RhbmdsZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMucmVmID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5zY3JpcHQgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnNldFByb3BlcnR5ID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5zaWduRGF0YSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuc2lnbmF0dXJlID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5zaWduaW5nID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5zb2xpZCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuc3BlYWsgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnN0aXBwbGUgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnN1YmZvcm0gPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnN1YmZvcm1TZXQgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnN1YmplY3RETiA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuc3ViamVjdEROcyA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuc3VibWl0ID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy50ZXh0ID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy50ZXh0RWRpdCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMudGltZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMudGltZVN0YW1wID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy50b29sVGlwID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy50cmF2ZXJzYWwgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnRyYXZlcnNlID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy51aSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMudmFsaWRhdGUgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnZhbHVlID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy52YXJpYWJsZXMgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgfVxuXG59XG5cbmNsYXNzIFJhZGlhbCBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJyYWRpYWxcIiwgdHJ1ZSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLnR5cGUgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy50eXBlLCBbXCJ0b0VkZ2VcIiwgXCJ0b0NlbnRlclwiXSk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMuY29sb3IgPSBudWxsO1xuICAgIHRoaXMuZXh0cmFzID0gbnVsbDtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kdG9TdHlsZV0oc3RhcnRDb2xvcikge1xuICAgIHN0YXJ0Q29sb3IgPSBzdGFydENvbG9yID8gc3RhcnRDb2xvcltfeGZhX29iamVjdC4kdG9TdHlsZV0oKSA6IFwiI0ZGRkZGRlwiO1xuICAgIGNvbnN0IGVuZENvbG9yID0gdGhpcy5jb2xvciA/IHRoaXMuY29sb3JbX3hmYV9vYmplY3QuJHRvU3R5bGVdKCkgOiBcIiMwMDAwMDBcIjtcbiAgICBjb25zdCBjb2xvcnMgPSB0aGlzLnR5cGUgPT09IFwidG9FZGdlXCIgPyBgJHtzdGFydENvbG9yfSwke2VuZENvbG9yfWAgOiBgJHtlbmRDb2xvcn0sJHtzdGFydENvbG9yfWA7XG4gICAgcmV0dXJuIGByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IGNlbnRlciwgJHtjb2xvcnN9KWA7XG4gIH1cblxufVxuXG5jbGFzcyBSZWFzb24gZXh0ZW5kcyBfeGZhX29iamVjdC5TdHJpbmdPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwicmVhc29uXCIpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8IFwiXCI7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICB9XG5cbn1cblxuY2xhc3MgUmVhc29ucyBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJyZWFzb25zXCIsIHRydWUpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy50eXBlID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMudHlwZSwgW1wib3B0aW9uYWxcIiwgXCJyZXF1aXJlZFwiXSk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMucmVhc29uID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gIH1cblxufVxuXG5jbGFzcyBSZWN0YW5nbGUgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwicmVjdGFuZ2xlXCIsIHRydWUpO1xuICAgIHRoaXMuaGFuZCA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLmhhbmQsIFtcImV2ZW5cIiwgXCJsZWZ0XCIsIFwicmlnaHRcIl0pO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMuY29ybmVyID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KDQpO1xuICAgIHRoaXMuZWRnZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSg0KTtcbiAgICB0aGlzLmZpbGwgPSBudWxsO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiR0b0hUTUxdKCkge1xuICAgIGNvbnN0IGVkZ2UgPSB0aGlzLmVkZ2UuY2hpbGRyZW4ubGVuZ3RoID8gdGhpcy5lZGdlLmNoaWxkcmVuWzBdIDogbmV3IEVkZ2Uoe30pO1xuXG4gICAgY29uc3QgZWRnZVN0eWxlID0gZWRnZVtfeGZhX29iamVjdC4kdG9TdHlsZV0oKTtcblxuICAgIGNvbnN0IHN0eWxlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIGlmICh0aGlzLmZpbGwgJiYgdGhpcy5maWxsLnByZXNlbmNlID09PSBcInZpc2libGVcIikge1xuICAgICAgT2JqZWN0LmFzc2lnbihzdHlsZSwgdGhpcy5maWxsW194ZmFfb2JqZWN0LiR0b1N0eWxlXSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bGUuZmlsbCA9IFwidHJhbnNwYXJlbnRcIjtcbiAgICB9XG5cbiAgICBzdHlsZS5zdHJva2VXaWR0aCA9ICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKGVkZ2UucHJlc2VuY2UgPT09IFwidmlzaWJsZVwiID8gZWRnZS50aGlja25lc3MgOiAwKTtcbiAgICBzdHlsZS5zdHJva2UgPSBlZGdlU3R5bGUuY29sb3I7XG4gICAgY29uc3QgY29ybmVyID0gdGhpcy5jb3JuZXIuY2hpbGRyZW4ubGVuZ3RoID8gdGhpcy5jb3JuZXIuY2hpbGRyZW5bMF0gOiBuZXcgQ29ybmVyKHt9KTtcblxuICAgIGNvbnN0IGNvcm5lclN0eWxlID0gY29ybmVyW194ZmFfb2JqZWN0LiR0b1N0eWxlXSgpO1xuXG4gICAgY29uc3QgcmVjdCA9IHtcbiAgICAgIG5hbWU6IFwicmVjdFwiLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICB4bWxuczogU1ZHX05TLFxuICAgICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgICAgIHg6IDAsXG4gICAgICAgIHk6IDAsXG4gICAgICAgIHJ4OiBjb3JuZXJTdHlsZS5yYWRpdXMsXG4gICAgICAgIHJ5OiBjb3JuZXJTdHlsZS5yYWRpdXMsXG4gICAgICAgIHN0eWxlXG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBzdmcgPSB7XG4gICAgICBuYW1lOiBcInN2Z1wiLFxuICAgICAgY2hpbGRyZW46IFtyZWN0XSxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgeG1sbnM6IFNWR19OUyxcbiAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICBvdmVyZmxvdzogXCJ2aXNpYmxlXCJcbiAgICAgICAgfSxcbiAgICAgICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgICAgICBoZWlnaHQ6IFwiMTAwJVwiXG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXNbX3hmYV9vYmplY3QuJGdldFBhcmVudF0oKVtfeGZhX29iamVjdC4kZ2V0UGFyZW50XSgpO1xuXG4gICAgaWYgKGhhc01hcmdpbihwYXJlbnQpKSB7XG4gICAgICByZXR1cm4gX3V0aWxzLkhUTUxSZXN1bHQuc3VjY2Vzcyh7XG4gICAgICAgIG5hbWU6IFwiZGl2XCIsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgZGlzcGxheTogXCJpbmxpbmVcIixcbiAgICAgICAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgICAgICAgIGhlaWdodDogXCIxMDAlXCJcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNoaWxkcmVuOiBbc3ZnXVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3ZnLmF0dHJpYnV0ZXMuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG4gICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LnN1Y2Nlc3Moc3ZnKTtcbiAgfVxuXG59XG5cbmNsYXNzIFJlZkVsZW1lbnQgZXh0ZW5kcyBfeGZhX29iamVjdC5TdHJpbmdPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwicmVmXCIpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICB9XG5cbn1cblxuY2xhc3MgU2NyaXB0IGV4dGVuZHMgX3hmYV9vYmplY3QuU3RyaW5nT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcInNjcmlwdFwiKTtcbiAgICB0aGlzLmJpbmRpbmcgPSBhdHRyaWJ1dGVzLmJpbmRpbmcgfHwgXCJcIjtcbiAgICB0aGlzLmNvbnRlbnRUeXBlID0gYXR0cmlidXRlcy5jb250ZW50VHlwZSB8fCBcIlwiO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8IFwiXCI7XG4gICAgdGhpcy5ydW5BdCA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnJ1bkF0LCBbXCJjbGllbnRcIiwgXCJib3RoXCIsIFwic2VydmVyXCJdKTtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gIH1cblxufVxuXG5jbGFzcyBTZXRQcm9wZXJ0eSBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJzZXRQcm9wZXJ0eVwiKTtcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSBhdHRyaWJ1dGVzLmNvbm5lY3Rpb24gfHwgXCJcIjtcbiAgICB0aGlzLnJlZiA9IGF0dHJpYnV0ZXMucmVmIHx8IFwiXCI7XG4gICAgdGhpcy50YXJnZXQgPSBhdHRyaWJ1dGVzLnRhcmdldCB8fCBcIlwiO1xuICB9XG5cbn1cblxuZXhwb3J0cy5TZXRQcm9wZXJ0eSA9IFNldFByb3BlcnR5O1xuXG5jbGFzcyBTaWduRGF0YSBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJzaWduRGF0YVwiLCB0cnVlKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMub3BlcmF0aW9uID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMub3BlcmF0aW9uLCBbXCJzaWduXCIsIFwiY2xlYXJcIiwgXCJ2ZXJpZnlcIl0pO1xuICAgIHRoaXMucmVmID0gYXR0cmlidXRlcy5yZWYgfHwgXCJcIjtcbiAgICB0aGlzLnRhcmdldCA9IGF0dHJpYnV0ZXMudGFyZ2V0IHx8IFwiXCI7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMuZmlsdGVyID0gbnVsbDtcbiAgICB0aGlzLm1hbmlmZXN0ID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIFNpZ25hdHVyZSBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJzaWduYXR1cmVcIiwgdHJ1ZSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLnR5cGUgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy50eXBlLCBbXCJQREYxLjNcIiwgXCJQREYxLjZcIl0pO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmJvcmRlciA9IG51bGw7XG4gICAgdGhpcy5leHRyYXMgPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyID0gbnVsbDtcbiAgICB0aGlzLm1hbmlmZXN0ID0gbnVsbDtcbiAgICB0aGlzLm1hcmdpbiA9IG51bGw7XG4gIH1cblxufVxuXG5jbGFzcyBTaWduaW5nIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcInNpZ25pbmdcIiwgdHJ1ZSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLnR5cGUgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy50eXBlLCBbXCJvcHRpb25hbFwiLCBcInJlcXVpcmVkXCJdKTtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gICAgdGhpcy5jZXJ0aWZpY2F0ZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICB9XG5cbn1cblxuY2xhc3MgU29saWQgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwic29saWRcIiwgdHJ1ZSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gICAgdGhpcy5leHRyYXMgPSBudWxsO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiR0b1N0eWxlXShzdGFydENvbG9yKSB7XG4gICAgcmV0dXJuIHN0YXJ0Q29sb3IgPyBzdGFydENvbG9yW194ZmFfb2JqZWN0LiR0b1N0eWxlXSgpIDogXCIjRkZGRkZGXCI7XG4gIH1cblxufVxuXG5jbGFzcyBTcGVhayBleHRlbmRzIF94ZmFfb2JqZWN0LlN0cmluZ09iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJzcGVha1wiKTtcbiAgICB0aGlzLmRpc2FibGUgPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMuZGlzYWJsZSxcbiAgICAgIGRlZmF1bHRWYWx1ZTogMCxcbiAgICAgIHZhbGlkYXRlOiB4ID0+IHggPT09IDFcbiAgICB9KTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMucHJpb3JpdHkgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5wcmlvcml0eSwgW1wiY3VzdG9tXCIsIFwiY2FwdGlvblwiLCBcIm5hbWVcIiwgXCJ0b29sVGlwXCJdKTtcbiAgICB0aGlzLnJpZCA9IGF0dHJpYnV0ZXMucmlkIHx8IFwiXCI7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICB9XG5cbn1cblxuY2xhc3MgU3RpcHBsZSBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJzdGlwcGxlXCIsIHRydWUpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5yYXRlID0gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLnJhdGUsXG4gICAgICBkZWZhdWx0VmFsdWU6IDUwLFxuICAgICAgdmFsaWRhdGU6IHggPT4geCA+PSAwICYmIHggPD0gMTAwXG4gICAgfSk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMuY29sb3IgPSBudWxsO1xuICAgIHRoaXMuZXh0cmFzID0gbnVsbDtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kdG9TdHlsZV0oYmdDb2xvcikge1xuICAgIGNvbnN0IGFscGhhID0gdGhpcy5yYXRlIC8gMTAwO1xuICAgIHJldHVybiBfdXRpbC5VdGlsLm1ha2VIZXhDb2xvcihNYXRoLnJvdW5kKGJnQ29sb3IudmFsdWUuciAqICgxIC0gYWxwaGEpICsgdGhpcy52YWx1ZS5yICogYWxwaGEpLCBNYXRoLnJvdW5kKGJnQ29sb3IudmFsdWUuZyAqICgxIC0gYWxwaGEpICsgdGhpcy52YWx1ZS5nICogYWxwaGEpLCBNYXRoLnJvdW5kKGJnQ29sb3IudmFsdWUuYiAqICgxIC0gYWxwaGEpICsgdGhpcy52YWx1ZS5iICogYWxwaGEpKTtcbiAgfVxuXG59XG5cbmNsYXNzIFN1YmZvcm0gZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwic3ViZm9ybVwiLCB0cnVlKTtcbiAgICB0aGlzLmFjY2VzcyA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLmFjY2VzcywgW1wib3BlblwiLCBcIm5vbkludGVyYWN0aXZlXCIsIFwicHJvdGVjdGVkXCIsIFwicmVhZE9ubHlcIl0pO1xuICAgIHRoaXMuYWxsb3dNYWNybyA9ICgwLCBfdXRpbHMuZ2V0SW50ZWdlcikoe1xuICAgICAgZGF0YTogYXR0cmlidXRlcy5hbGxvd01hY3JvLFxuICAgICAgZGVmYXVsdFZhbHVlOiAwLFxuICAgICAgdmFsaWRhdGU6IHggPT4geCA9PT0gMVxuICAgIH0pO1xuICAgIHRoaXMuYW5jaG9yVHlwZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLmFuY2hvclR5cGUsIFtcInRvcExlZnRcIiwgXCJib3R0b21DZW50ZXJcIiwgXCJib3R0b21MZWZ0XCIsIFwiYm90dG9tUmlnaHRcIiwgXCJtaWRkbGVDZW50ZXJcIiwgXCJtaWRkbGVMZWZ0XCIsIFwibWlkZGxlUmlnaHRcIiwgXCJ0b3BDZW50ZXJcIiwgXCJ0b3BSaWdodFwiXSk7XG4gICAgdGhpcy5jb2xTcGFuID0gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLmNvbFNwYW4sXG4gICAgICBkZWZhdWx0VmFsdWU6IDEsXG4gICAgICB2YWxpZGF0ZTogbiA9PiBuID49IDEgfHwgbiA9PT0gLTFcbiAgICB9KTtcbiAgICB0aGlzLmNvbHVtbldpZHRocyA9IChhdHRyaWJ1dGVzLmNvbHVtbldpZHRocyB8fCBcIlwiKS50cmltKCkuc3BsaXQoL1xccysvKS5tYXAoeCA9PiB4ID09PSBcIi0xXCIgPyAtMSA6ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKHgpKTtcbiAgICB0aGlzLmggPSBhdHRyaWJ1dGVzLmggPyAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KShhdHRyaWJ1dGVzLmgpIDogXCJcIjtcbiAgICB0aGlzLmhBbGlnbiA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLmhBbGlnbiwgW1wibGVmdFwiLCBcImNlbnRlclwiLCBcImp1c3RpZnlcIiwgXCJqdXN0aWZ5QWxsXCIsIFwicmFkaXhcIiwgXCJyaWdodFwiXSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLmxheW91dCA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLmxheW91dCwgW1wicG9zaXRpb25cIiwgXCJsci10YlwiLCBcInJsLXJvd1wiLCBcInJsLXRiXCIsIFwicm93XCIsIFwidGFibGVcIiwgXCJ0YlwiXSk7XG4gICAgdGhpcy5sb2NhbGUgPSBhdHRyaWJ1dGVzLmxvY2FsZSB8fCBcIlwiO1xuICAgIHRoaXMubWF4SCA9ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMubWF4SCwgXCIwcHRcIik7XG4gICAgdGhpcy5tYXhXID0gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkoYXR0cmlidXRlcy5tYXhXLCBcIjBwdFwiKTtcbiAgICB0aGlzLm1lcmdlTW9kZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLm1lcmdlTW9kZSwgW1wiY29uc3VtZURhdGFcIiwgXCJtYXRjaFRlbXBsYXRlXCJdKTtcbiAgICB0aGlzLm1pbkggPSAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KShhdHRyaWJ1dGVzLm1pbkgsIFwiMHB0XCIpO1xuICAgIHRoaXMubWluVyA9ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMubWluVywgXCIwcHRcIik7XG4gICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8IFwiXCI7XG4gICAgdGhpcy5wcmVzZW5jZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnByZXNlbmNlLCBbXCJ2aXNpYmxlXCIsIFwiaGlkZGVuXCIsIFwiaW5hY3RpdmVcIiwgXCJpbnZpc2libGVcIl0pO1xuICAgIHRoaXMucmVsZXZhbnQgPSAoMCwgX3V0aWxzLmdldFJlbGV2YW50KShhdHRyaWJ1dGVzLnJlbGV2YW50KTtcbiAgICB0aGlzLnJlc3RvcmVTdGF0ZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnJlc3RvcmVTdGF0ZSwgW1wibWFudWFsXCIsIFwiYXV0b1wiXSk7XG4gICAgdGhpcy5zY29wZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnNjb3BlLCBbXCJuYW1lXCIsIFwibm9uZVwiXSk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMudyA9IGF0dHJpYnV0ZXMudyA/ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMudykgOiBcIlwiO1xuICAgIHRoaXMueCA9ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKGF0dHJpYnV0ZXMueCwgXCIwcHRcIik7XG4gICAgdGhpcy55ID0gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkoYXR0cmlidXRlcy55LCBcIjBwdFwiKTtcbiAgICB0aGlzLmFzc2lzdCA9IG51bGw7XG4gICAgdGhpcy5iaW5kID0gbnVsbDtcbiAgICB0aGlzLmJvb2tlbmQgPSBudWxsO1xuICAgIHRoaXMuYm9yZGVyID0gbnVsbDtcbiAgICB0aGlzLmJyZWFrID0gbnVsbDtcbiAgICB0aGlzLmNhbGN1bGF0ZSA9IG51bGw7XG4gICAgdGhpcy5kZXNjID0gbnVsbDtcbiAgICB0aGlzLmV4dHJhcyA9IG51bGw7XG4gICAgdGhpcy5rZWVwID0gbnVsbDtcbiAgICB0aGlzLm1hcmdpbiA9IG51bGw7XG4gICAgdGhpcy5vY2N1ciA9IG51bGw7XG4gICAgdGhpcy5vdmVyZmxvdyA9IG51bGw7XG4gICAgdGhpcy5wYWdlU2V0ID0gbnVsbDtcbiAgICB0aGlzLnBhcmEgPSBudWxsO1xuICAgIHRoaXMudHJhdmVyc2FsID0gbnVsbDtcbiAgICB0aGlzLnZhbGlkYXRlID0gbnVsbDtcbiAgICB0aGlzLnZhcmlhYmxlcyA9IG51bGw7XG4gICAgdGhpcy5hcmVhID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5icmVha0FmdGVyID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5icmVha0JlZm9yZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuY29ubmVjdCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZHJhdyA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZXZlbnQgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmV4T2JqZWN0ID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5leGNsR3JvdXAgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmZpZWxkID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5wcm90byA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuc2V0UHJvcGVydHkgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnN1YmZvcm0gPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnN1YmZvcm1TZXQgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kZ2V0U3ViZm9ybVBhcmVudF0oKSB7XG4gICAgY29uc3QgcGFyZW50ID0gdGhpc1tfeGZhX29iamVjdC4kZ2V0UGFyZW50XSgpO1xuXG4gICAgaWYgKHBhcmVudCBpbnN0YW5jZW9mIFN1YmZvcm1TZXQpIHtcbiAgICAgIHJldHVybiBwYXJlbnRbX3hmYV9vYmplY3QuJGdldFN1YmZvcm1QYXJlbnRdKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmVudDtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kaXNCaW5kYWJsZV0oKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGlzVGhlcmVNb3JlV2lkdGhdKCkge1xuICAgIHJldHVybiB0aGlzLmxheW91dC5lbmRzV2l0aChcIi10YlwiKSAmJiB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0uYXR0ZW1wdCA9PT0gMCAmJiB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0ubnVtYmVySW5MaW5lID4gMCB8fCB0aGlzW194ZmFfb2JqZWN0LiRnZXRQYXJlbnRdKClbX3hmYV9vYmplY3QuJGlzVGhlcmVNb3JlV2lkdGhdKCk7XG4gIH1cblxuICAqW194ZmFfb2JqZWN0LiRnZXRDb250YWluZWRDaGlsZHJlbl0oKSB7XG4gICAgeWllbGQqIGdldENvbnRhaW5lZENoaWxkcmVuKHRoaXMpO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRmbHVzaEhUTUxdKCkge1xuICAgIHJldHVybiAoMCwgX2xheW91dC5mbHVzaEhUTUwpKHRoaXMpO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRhZGRIVE1MXShodG1sLCBiYm94KSB7XG4gICAgKDAsIF9sYXlvdXQuYWRkSFRNTCkodGhpcywgaHRtbCwgYmJveCk7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGdldEF2YWlsYWJsZVNwYWNlXSgpIHtcbiAgICByZXR1cm4gKDAsIF9sYXlvdXQuZ2V0QXZhaWxhYmxlU3BhY2UpKHRoaXMpO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRpc1NwbGl0dGFibGVdKCkge1xuICAgIGNvbnN0IHBhcmVudCA9IHRoaXNbX3hmYV9vYmplY3QuJGdldFN1YmZvcm1QYXJlbnRdKCk7XG5cbiAgICBpZiAoIXBhcmVudFtfeGZhX29iamVjdC4kaXNTcGxpdHRhYmxlXSgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXS5faXNTcGxpdHRhYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0uX2lzU3BsaXR0YWJsZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5sYXlvdXQgPT09IFwicG9zaXRpb25cIiB8fCB0aGlzLmxheW91dC5pbmNsdWRlcyhcInJvd1wiKSkge1xuICAgICAgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLl9pc1NwbGl0dGFibGUgPSBmYWxzZTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5rZWVwICYmIHRoaXMua2VlcC5pbnRhY3QgIT09IFwibm9uZVwiKSB7XG4gICAgICB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0uX2lzU3BsaXR0YWJsZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChwYXJlbnQubGF5b3V0ICYmIHBhcmVudC5sYXlvdXQuZW5kc1dpdGgoXCItdGJcIikgJiYgcGFyZW50W194ZmFfb2JqZWN0LiRleHRyYV0ubnVtYmVySW5MaW5lICE9PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLl9pc1NwbGl0dGFibGUgPSB0cnVlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiR0b0hUTUxdKGF2YWlsYWJsZVNwYWNlKSB7XG4gICAgc2V0VGFiSW5kZXgodGhpcyk7XG5cbiAgICBpZiAodGhpcy5icmVhaykge1xuICAgICAgaWYgKHRoaXMuYnJlYWsuYWZ0ZXIgIT09IFwiYXV0b1wiIHx8IHRoaXMuYnJlYWsuYWZ0ZXJUYXJnZXQgIT09IFwiXCIpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IG5ldyBCcmVha0FmdGVyKHtcbiAgICAgICAgICB0YXJnZXRUeXBlOiB0aGlzLmJyZWFrLmFmdGVyLFxuICAgICAgICAgIHRhcmdldDogdGhpcy5icmVhay5hZnRlclRhcmdldCxcbiAgICAgICAgICBzdGFydE5ldzogdGhpcy5icmVhay5zdGFydE5ldy50b1N0cmluZygpXG4gICAgICAgIH0pO1xuICAgICAgICBub2RlW194ZmFfb2JqZWN0LiRnbG9iYWxEYXRhXSA9IHRoaXNbX3hmYV9vYmplY3QuJGdsb2JhbERhdGFdO1xuXG4gICAgICAgIHRoaXNbX3hmYV9vYmplY3QuJGFwcGVuZENoaWxkXShub2RlKTtcblxuICAgICAgICB0aGlzLmJyZWFrQWZ0ZXIucHVzaChub2RlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuYnJlYWsuYmVmb3JlICE9PSBcImF1dG9cIiB8fCB0aGlzLmJyZWFrLmJlZm9yZVRhcmdldCAhPT0gXCJcIikge1xuICAgICAgICBjb25zdCBub2RlID0gbmV3IEJyZWFrQmVmb3JlKHtcbiAgICAgICAgICB0YXJnZXRUeXBlOiB0aGlzLmJyZWFrLmJlZm9yZSxcbiAgICAgICAgICB0YXJnZXQ6IHRoaXMuYnJlYWsuYmVmb3JlVGFyZ2V0LFxuICAgICAgICAgIHN0YXJ0TmV3OiB0aGlzLmJyZWFrLnN0YXJ0TmV3LnRvU3RyaW5nKClcbiAgICAgICAgfSk7XG4gICAgICAgIG5vZGVbX3hmYV9vYmplY3QuJGdsb2JhbERhdGFdID0gdGhpc1tfeGZhX29iamVjdC4kZ2xvYmFsRGF0YV07XG5cbiAgICAgICAgdGhpc1tfeGZhX29iamVjdC4kYXBwZW5kQ2hpbGRdKG5vZGUpO1xuXG4gICAgICAgIHRoaXMuYnJlYWtCZWZvcmUucHVzaChub2RlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuYnJlYWsub3ZlcmZsb3dUYXJnZXQgIT09IFwiXCIpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IG5ldyBPdmVyZmxvdyh7XG4gICAgICAgICAgdGFyZ2V0OiB0aGlzLmJyZWFrLm92ZXJmbG93VGFyZ2V0LFxuICAgICAgICAgIGxlYWRlcjogdGhpcy5icmVhay5vdmVyZmxvd0xlYWRlcixcbiAgICAgICAgICB0cmFpbGVyOiB0aGlzLmJyZWFrLm92ZXJmbG93VHJhaWxlclxuICAgICAgICB9KTtcbiAgICAgICAgbm9kZVtfeGZhX29iamVjdC4kZ2xvYmFsRGF0YV0gPSB0aGlzW194ZmFfb2JqZWN0LiRnbG9iYWxEYXRhXTtcblxuICAgICAgICB0aGlzW194ZmFfb2JqZWN0LiRhcHBlbmRDaGlsZF0obm9kZSk7XG5cbiAgICAgICAgdGhpcy5vdmVyZmxvdy5wdXNoKG5vZGUpO1xuICAgICAgfVxuXG4gICAgICB0aGlzW194ZmFfb2JqZWN0LiRyZW1vdmVDaGlsZF0odGhpcy5icmVhayk7XG5cbiAgICAgIHRoaXMuYnJlYWsgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByZXNlbmNlID09PSBcImhpZGRlblwiIHx8IHRoaXMucHJlc2VuY2UgPT09IFwiaW5hY3RpdmVcIikge1xuICAgICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LkVNUFRZO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmJyZWFrQmVmb3JlLmNoaWxkcmVuLmxlbmd0aCA+IDEgfHwgdGhpcy5icmVha0FmdGVyLmNoaWxkcmVuLmxlbmd0aCA+IDEpIHtcbiAgICAgICgwLCBfdXRpbC53YXJuKShcIlhGQSAtIFNldmVyYWwgYnJlYWtCZWZvcmUgb3IgYnJlYWtBZnRlciBpbiBzdWJmb3JtczogcGxlYXNlIGZpbGUgYSBidWcuXCIpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmJyZWFrQmVmb3JlLmNoaWxkcmVuLmxlbmd0aCA+PSAxKSB7XG4gICAgICBjb25zdCBicmVha0JlZm9yZSA9IHRoaXMuYnJlYWtCZWZvcmUuY2hpbGRyZW5bMF07XG5cbiAgICAgIGlmIChoYW5kbGVCcmVhayhicmVha0JlZm9yZSkpIHtcbiAgICAgICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LmJyZWFrTm9kZShicmVha0JlZm9yZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXSAmJiB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0uYWZ0ZXJCcmVha0FmdGVyKSB7XG4gICAgICByZXR1cm4gX3V0aWxzLkhUTUxSZXN1bHQuRU1QVFk7XG4gICAgfVxuXG4gICAgKDAsIF9odG1sX3V0aWxzLmZpeERpbWVuc2lvbnMpKHRoaXMpO1xuICAgIGNvbnN0IGNoaWxkcmVuID0gW107XG4gICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgIGlkOiB0aGlzW194ZmFfb2JqZWN0LiR1aWRdLFxuICAgICAgY2xhc3M6IFtdXG4gICAgfTtcbiAgICAoMCwgX2h0bWxfdXRpbHMuc2V0QWNjZXNzKSh0aGlzLCBhdHRyaWJ1dGVzLmNsYXNzKTtcblxuICAgIGlmICghdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdKSB7XG4gICAgICB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIH1cblxuICAgIE9iamVjdC5hc3NpZ24odGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLCB7XG4gICAgICBjaGlsZHJlbixcbiAgICAgIGxpbmU6IG51bGwsXG4gICAgICBhdHRyaWJ1dGVzLFxuICAgICAgYXR0ZW1wdDogMCxcbiAgICAgIG51bWJlckluTGluZTogMCxcbiAgICAgIGF2YWlsYWJsZVNwYWNlOiB7XG4gICAgICAgIHdpZHRoOiBNYXRoLm1pbih0aGlzLncgfHwgSW5maW5pdHksIGF2YWlsYWJsZVNwYWNlLndpZHRoKSxcbiAgICAgICAgaGVpZ2h0OiBNYXRoLm1pbih0aGlzLmggfHwgSW5maW5pdHksIGF2YWlsYWJsZVNwYWNlLmhlaWdodClcbiAgICAgIH0sXG4gICAgICB3aWR0aDogMCxcbiAgICAgIGhlaWdodDogMCxcbiAgICAgIHByZXZIZWlnaHQ6IDAsXG4gICAgICBjdXJyZW50V2lkdGg6IDBcbiAgICB9KTtcblxuICAgIGNvbnN0IHJvb3QgPSB0aGlzW194ZmFfb2JqZWN0LiRnZXRUZW1wbGF0ZVJvb3RdKCk7XG5cbiAgICBjb25zdCBzYXZlZE5vTGF5b3V0RmFpbHVyZSA9IHJvb3RbX3hmYV9vYmplY3QuJGV4dHJhXS5ub0xheW91dEZhaWx1cmU7XG5cbiAgICBjb25zdCBpc1NwbGl0dGFibGUgPSB0aGlzW194ZmFfb2JqZWN0LiRpc1NwbGl0dGFibGVdKCk7XG5cbiAgICBpZiAoIWlzU3BsaXR0YWJsZSkge1xuICAgICAgc2V0Rmlyc3RVbnNwbGl0dGFibGUodGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKCEoMCwgX2xheW91dC5jaGVja0RpbWVuc2lvbnMpKHRoaXMsIGF2YWlsYWJsZVNwYWNlKSkge1xuICAgICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LkZBSUxVUkU7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyID0gbmV3IFNldChbXCJhcmVhXCIsIFwiZHJhd1wiLCBcImV4Y2xHcm91cFwiLCBcImZpZWxkXCIsIFwic3ViZm9ybVwiLCBcInN1YmZvcm1TZXRcIl0pO1xuXG4gICAgaWYgKHRoaXMubGF5b3V0LmluY2x1ZGVzKFwicm93XCIpKSB7XG4gICAgICBjb25zdCBjb2x1bW5XaWR0aHMgPSB0aGlzW194ZmFfb2JqZWN0LiRnZXRTdWJmb3JtUGFyZW50XSgpLmNvbHVtbldpZHRocztcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29sdW1uV2lkdGhzKSAmJiBjb2x1bW5XaWR0aHMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0uY29sdW1uV2lkdGhzID0gY29sdW1uV2lkdGhzO1xuICAgICAgICB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0uY3VycmVudENvbHVtbiA9IDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc3R5bGUgPSAoMCwgX2h0bWxfdXRpbHMudG9TdHlsZSkodGhpcywgXCJhbmNob3JUeXBlXCIsIFwiZGltZW5zaW9uc1wiLCBcInBvc2l0aW9uXCIsIFwicHJlc2VuY2VcIiwgXCJib3JkZXJcIiwgXCJtYXJnaW5cIiwgXCJoQWxpZ25cIik7XG4gICAgY29uc3QgY2xhc3NOYW1lcyA9IFtcInhmYVN1YmZvcm1cIl07XG4gICAgY29uc3QgY2wgPSAoMCwgX2h0bWxfdXRpbHMubGF5b3V0Q2xhc3MpKHRoaXMpO1xuXG4gICAgaWYgKGNsKSB7XG4gICAgICBjbGFzc05hbWVzLnB1c2goY2wpO1xuICAgIH1cblxuICAgIGF0dHJpYnV0ZXMuc3R5bGUgPSBzdHlsZTtcbiAgICBhdHRyaWJ1dGVzLmNsYXNzID0gY2xhc3NOYW1lcztcblxuICAgIGlmICh0aGlzLm5hbWUpIHtcbiAgICAgIGF0dHJpYnV0ZXMueGZhTmFtZSA9IHRoaXMubmFtZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vdmVyZmxvdykge1xuICAgICAgY29uc3Qgb3ZlcmZsb3dFeHRyYSA9IHRoaXMub3ZlcmZsb3dbX3hmYV9vYmplY3QuJGdldEV4dHJhXSgpO1xuXG4gICAgICBpZiAob3ZlcmZsb3dFeHRyYS5hZGRMZWFkZXIpIHtcbiAgICAgICAgb3ZlcmZsb3dFeHRyYS5hZGRMZWFkZXIgPSBmYWxzZTtcbiAgICAgICAgaGFuZGxlT3ZlcmZsb3codGhpcywgb3ZlcmZsb3dFeHRyYS5sZWFkZXIsIGF2YWlsYWJsZVNwYWNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW194ZmFfb2JqZWN0LiRwdXNoUGFyYV0oKTtcblxuICAgIGNvbnN0IGlzTHJUYiA9IHRoaXMubGF5b3V0ID09PSBcImxyLXRiXCIgfHwgdGhpcy5sYXlvdXQgPT09IFwicmwtdGJcIjtcbiAgICBjb25zdCBtYXhSdW4gPSBpc0xyVGIgPyBNQVhfQVRURU1QVFNfRk9SX0xSVEJfTEFZT1VUIDogMTtcblxuICAgIGZvciAoOyB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0uYXR0ZW1wdCA8IG1heFJ1bjsgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLmF0dGVtcHQrKykge1xuICAgICAgaWYgKGlzTHJUYiAmJiB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0uYXR0ZW1wdCA9PT0gTUFYX0FUVEVNUFRTX0ZPUl9MUlRCX0xBWU9VVCAtIDEpIHtcbiAgICAgICAgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLm51bWJlckluTGluZSA9IDA7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXNbX3hmYV9vYmplY3QuJGNoaWxkcmVuVG9IVE1MXSh7XG4gICAgICAgIGZpbHRlcixcbiAgICAgICAgaW5jbHVkZTogdHJ1ZVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3VsdC5pc0JyZWFrKCkpIHtcbiAgICAgICAgdGhpc1tfeGZhX29iamVjdC4kcG9wUGFyYV0oKTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNMclRiICYmIHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXS5hdHRlbXB0ID09PSAwICYmIHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXS5udW1iZXJJbkxpbmUgPT09IDAgJiYgIXJvb3RbX3hmYV9vYmplY3QuJGV4dHJhXS5ub0xheW91dEZhaWx1cmUpIHtcbiAgICAgICAgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLmF0dGVtcHQgPSBtYXhSdW47XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXNbX3hmYV9vYmplY3QuJHBvcFBhcmFdKCk7XG5cbiAgICBpZiAoIWlzU3BsaXR0YWJsZSkge1xuICAgICAgdW5zZXRGaXJzdFVuc3BsaXR0YWJsZSh0aGlzKTtcbiAgICB9XG5cbiAgICByb290W194ZmFfb2JqZWN0LiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlID0gc2F2ZWROb0xheW91dEZhaWx1cmU7XG5cbiAgICBpZiAodGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLmF0dGVtcHQgPT09IG1heFJ1bikge1xuICAgICAgaWYgKHRoaXMub3ZlcmZsb3cpIHtcbiAgICAgICAgdGhpc1tfeGZhX29iamVjdC4kZ2V0VGVtcGxhdGVSb290XSgpW194ZmFfb2JqZWN0LiRleHRyYV0ub3ZlcmZsb3dOb2RlID0gdGhpcy5vdmVyZmxvdztcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc1NwbGl0dGFibGUpIHtcbiAgICAgICAgZGVsZXRlIHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LkZBSUxVUkU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3ZlcmZsb3cpIHtcbiAgICAgIGNvbnN0IG92ZXJmbG93RXh0cmEgPSB0aGlzLm92ZXJmbG93W194ZmFfb2JqZWN0LiRnZXRFeHRyYV0oKTtcblxuICAgICAgaWYgKG92ZXJmbG93RXh0cmEuYWRkVHJhaWxlcikge1xuICAgICAgICBvdmVyZmxvd0V4dHJhLmFkZFRyYWlsZXIgPSBmYWxzZTtcbiAgICAgICAgaGFuZGxlT3ZlcmZsb3codGhpcywgb3ZlcmZsb3dFeHRyYS50cmFpbGVyLCBhdmFpbGFibGVTcGFjZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IG1hcmdpbkggPSAwO1xuICAgIGxldCBtYXJnaW5WID0gMDtcblxuICAgIGlmICh0aGlzLm1hcmdpbikge1xuICAgICAgbWFyZ2luSCA9IHRoaXMubWFyZ2luLmxlZnRJbnNldCArIHRoaXMubWFyZ2luLnJpZ2h0SW5zZXQ7XG4gICAgICBtYXJnaW5WID0gdGhpcy5tYXJnaW4udG9wSW5zZXQgKyB0aGlzLm1hcmdpbi5ib3R0b21JbnNldDtcbiAgICB9XG5cbiAgICBjb25zdCB3aWR0aCA9IE1hdGgubWF4KHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXS53aWR0aCArIG1hcmdpbkgsIHRoaXMudyB8fCAwKTtcbiAgICBjb25zdCBoZWlnaHQgPSBNYXRoLm1heCh0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0uaGVpZ2h0ICsgbWFyZ2luViwgdGhpcy5oIHx8IDApO1xuICAgIGNvbnN0IGJib3ggPSBbdGhpcy54LCB0aGlzLnksIHdpZHRoLCBoZWlnaHRdO1xuXG4gICAgaWYgKHRoaXMudyA9PT0gXCJcIikge1xuICAgICAgc3R5bGUud2lkdGggPSAoMCwgX2h0bWxfdXRpbHMubWVhc3VyZVRvU3RyaW5nKSh3aWR0aCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaCA9PT0gXCJcIikge1xuICAgICAgc3R5bGUuaGVpZ2h0ID0gKDAsIF9odG1sX3V0aWxzLm1lYXN1cmVUb1N0cmluZykoaGVpZ2h0KTtcbiAgICB9XG5cbiAgICBpZiAoKHN0eWxlLndpZHRoID09PSBcIjBweFwiIHx8IHN0eWxlLmhlaWdodCA9PT0gXCIwcHhcIikgJiYgY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gX3V0aWxzLkhUTUxSZXN1bHQuRU1QVFk7XG4gICAgfVxuXG4gICAgY29uc3QgaHRtbCA9IHtcbiAgICAgIG5hbWU6IFwiZGl2XCIsXG4gICAgICBhdHRyaWJ1dGVzLFxuICAgICAgY2hpbGRyZW5cbiAgICB9O1xuICAgIGFwcGx5QXNzaXN0KHRoaXMsIGF0dHJpYnV0ZXMpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gX3V0aWxzLkhUTUxSZXN1bHQuc3VjY2VzcygoMCwgX2h0bWxfdXRpbHMuY3JlYXRlV3JhcHBlcikodGhpcywgaHRtbCksIGJib3gpO1xuXG4gICAgaWYgKHRoaXMuYnJlYWtBZnRlci5jaGlsZHJlbi5sZW5ndGggPj0gMSkge1xuICAgICAgY29uc3QgYnJlYWtBZnRlciA9IHRoaXMuYnJlYWtBZnRlci5jaGlsZHJlblswXTtcblxuICAgICAgaWYgKGhhbmRsZUJyZWFrKGJyZWFrQWZ0ZXIpKSB7XG4gICAgICAgIHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXS5hZnRlckJyZWFrQWZ0ZXIgPSByZXN1bHQ7XG4gICAgICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5icmVha05vZGUoYnJlYWtBZnRlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZGVsZXRlIHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbn1cblxuY2xhc3MgU3ViZm9ybVNldCBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJzdWJmb3JtU2V0XCIsIHRydWUpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8IFwiXCI7XG4gICAgdGhpcy5yZWxhdGlvbiA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnJlbGF0aW9uLCBbXCJvcmRlcmVkXCIsIFwiY2hvaWNlXCIsIFwidW5vcmRlcmVkXCJdKTtcbiAgICB0aGlzLnJlbGV2YW50ID0gKDAsIF91dGlscy5nZXRSZWxldmFudCkoYXR0cmlidXRlcy5yZWxldmFudCk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMuYm9va2VuZCA9IG51bGw7XG4gICAgdGhpcy5icmVhayA9IG51bGw7XG4gICAgdGhpcy5kZXNjID0gbnVsbDtcbiAgICB0aGlzLmV4dHJhcyA9IG51bGw7XG4gICAgdGhpcy5vY2N1ciA9IG51bGw7XG4gICAgdGhpcy5vdmVyZmxvdyA9IG51bGw7XG4gICAgdGhpcy5icmVha0FmdGVyID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5icmVha0JlZm9yZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuc3ViZm9ybSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuc3ViZm9ybVNldCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICB9XG5cbiAgKltfeGZhX29iamVjdC4kZ2V0Q29udGFpbmVkQ2hpbGRyZW5dKCkge1xuICAgIHlpZWxkKiBnZXRDb250YWluZWRDaGlsZHJlbih0aGlzKTtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kZ2V0U3ViZm9ybVBhcmVudF0oKSB7XG4gICAgbGV0IHBhcmVudCA9IHRoaXNbX3hmYV9vYmplY3QuJGdldFBhcmVudF0oKTtcblxuICAgIHdoaWxlICghKHBhcmVudCBpbnN0YW5jZW9mIFN1YmZvcm0pKSB7XG4gICAgICBwYXJlbnQgPSBwYXJlbnRbX3hmYV9vYmplY3QuJGdldFBhcmVudF0oKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyZW50O1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRpc0JpbmRhYmxlXSgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG59XG5cbmNsYXNzIFN1YmplY3RETiBleHRlbmRzIF94ZmFfb2JqZWN0LkNvbnRlbnRPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwic3ViamVjdEROXCIpO1xuICAgIHRoaXMuZGVsaW1pdGVyID0gYXR0cmlidXRlcy5kZWxpbWl0ZXIgfHwgXCIsXCI7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgXCJcIjtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGZpbmFsaXplXSgpIHtcbiAgICB0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XSA9IG5ldyBNYXAodGhpc1tfeGZhX29iamVjdC4kY29udGVudF0uc3BsaXQodGhpcy5kZWxpbWl0ZXIpLm1hcChrdiA9PiB7XG4gICAgICBrdiA9IGt2LnNwbGl0KFwiPVwiLCAyKTtcbiAgICAgIGt2WzBdID0ga3ZbMF0udHJpbSgpO1xuICAgICAgcmV0dXJuIGt2O1xuICAgIH0pKTtcbiAgfVxuXG59XG5cbmNsYXNzIFN1YmplY3RETnMgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwic3ViamVjdEROc1wiLCB0cnVlKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMudHlwZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnR5cGUsIFtcIm9wdGlvbmFsXCIsIFwicmVxdWlyZWRcIl0pO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLnN1YmplY3RETiA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICB9XG5cbn1cblxuY2xhc3MgU3VibWl0IGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcInN1Ym1pdFwiLCB0cnVlKTtcbiAgICB0aGlzLmVtYmVkUERGID0gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLmVtYmVkUERGLFxuICAgICAgZGVmYXVsdFZhbHVlOiAwLFxuICAgICAgdmFsaWRhdGU6IHggPT4geCA9PT0gMVxuICAgIH0pO1xuICAgIHRoaXMuZm9ybWF0ID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMuZm9ybWF0LCBbXCJ4ZHBcIiwgXCJmb3JtZGF0YVwiLCBcInBkZlwiLCBcInVybGVuY29kZWRcIiwgXCJ4ZmRcIiwgXCJ4bWxcIl0pO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy50YXJnZXQgPSBhdHRyaWJ1dGVzLnRhcmdldCB8fCBcIlwiO1xuICAgIHRoaXMudGV4dEVuY29kaW5nID0gKDAsIF91dGlscy5nZXRLZXl3b3JkKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLnRleHRFbmNvZGluZyA/IGF0dHJpYnV0ZXMudGV4dEVuY29kaW5nLnRvTG93ZXJDYXNlKCkgOiBcIlwiLFxuICAgICAgZGVmYXVsdFZhbHVlOiBcIlwiLFxuICAgICAgdmFsaWRhdGU6IGsgPT4gW1widXRmLThcIiwgXCJiaWctZml2ZVwiLCBcImZvbnRzcGVjaWZpY1wiLCBcImdia1wiLCBcImdiLTE4MDMwXCIsIFwiZ2ItMjMxMlwiLCBcImtzYy01NjAxXCIsIFwibm9uZVwiLCBcInNoaWZ0LWppc1wiLCBcInVjcy0yXCIsIFwidXRmLTE2XCJdLmluY2x1ZGVzKGspIHx8IGsubWF0Y2goL2lzby04ODU5LVxcZHsyfS8pXG4gICAgfSk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMueGRwQ29udGVudCA9IGF0dHJpYnV0ZXMueGRwQ29udGVudCB8fCBcIlwiO1xuICAgIHRoaXMuZW5jcnlwdCA9IG51bGw7XG4gICAgdGhpcy5lbmNyeXB0RGF0YSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuc2lnbkRhdGEgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgfVxuXG59XG5cbmNsYXNzIFRlbXBsYXRlIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcInRlbXBsYXRlXCIsIHRydWUpO1xuICAgIHRoaXMuYmFzZVByb2ZpbGUgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5iYXNlUHJvZmlsZSwgW1wiZnVsbFwiLCBcImludGVyYWN0aXZlRm9ybXNcIl0pO1xuICAgIHRoaXMuZXh0cmFzID0gbnVsbDtcbiAgICB0aGlzLnN1YmZvcm0gPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kZmluYWxpemVdKCkge1xuICAgIGlmICh0aGlzLnN1YmZvcm0uY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJYRkEgLSBObyBzdWJmb3JtcyBpbiB0ZW1wbGF0ZSBub2RlLlwiKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdWJmb3JtLmNoaWxkcmVuLmxlbmd0aCA+PSAyKSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJYRkEgLSBTZXZlcmFsIHN1YmZvcm1zIGluIHRlbXBsYXRlIG5vZGU6IHBsZWFzZSBmaWxlIGEgYnVnLlwiKTtcbiAgICB9XG5cbiAgICB0aGlzW194ZmFfb2JqZWN0LiR0YWJJbmRleF0gPSBERUZBVUxUX1RBQl9JTkRFWDtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kaXNTcGxpdHRhYmxlXSgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kc2VhcmNoTm9kZV0oZXhwciwgY29udGFpbmVyKSB7XG4gICAgaWYgKGV4cHIuc3RhcnRzV2l0aChcIiNcIikpIHtcbiAgICAgIHJldHVybiBbdGhpc1tfeGZhX29iamVjdC4kaWRzXS5nZXQoZXhwci5zbGljZSgxKSldO1xuICAgIH1cblxuICAgIHJldHVybiAoMCwgX3NvbS5zZWFyY2hOb2RlKSh0aGlzLCBjb250YWluZXIsIGV4cHIsIHRydWUsIHRydWUpO1xuICB9XG5cbiAgKltfeGZhX29iamVjdC4kdG9QYWdlc10oKSB7XG4gICAgaWYgKCF0aGlzLnN1YmZvcm0uY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gX3V0aWxzLkhUTUxSZXN1bHQuc3VjY2Vzcyh7XG4gICAgICAgIG5hbWU6IFwiZGl2XCIsXG4gICAgICAgIGNoaWxkcmVuOiBbXVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdID0ge1xuICAgICAgb3ZlcmZsb3dOb2RlOiBudWxsLFxuICAgICAgZmlyc3RVbnNwbGl0dGFibGU6IG51bGwsXG4gICAgICBjdXJyZW50Q29udGVudEFyZWE6IG51bGwsXG4gICAgICBjdXJyZW50UGFnZUFyZWE6IG51bGwsXG4gICAgICBub0xheW91dEZhaWx1cmU6IGZhbHNlLFxuICAgICAgcGFnZU51bWJlcjogMSxcbiAgICAgIHBhZ2VQb3NpdGlvbjogXCJmaXJzdFwiLFxuICAgICAgb2RkT3JFdmVuOiBcIm9kZFwiLFxuICAgICAgYmxhbmtPck5vdEJsYW5rOiBcIm5vbkJsYW5rXCIsXG4gICAgICBwYXJhU3RhY2s6IFtdXG4gICAgfTtcbiAgICBjb25zdCByb290ID0gdGhpcy5zdWJmb3JtLmNoaWxkcmVuWzBdO1xuXG4gICAgcm9vdC5wYWdlU2V0W194ZmFfb2JqZWN0LiRjbGVhblBhZ2VdKCk7XG5cbiAgICBjb25zdCBwYWdlQXJlYXMgPSByb290LnBhZ2VTZXQucGFnZUFyZWEuY2hpbGRyZW47XG4gICAgY29uc3QgbWFpbkh0bWwgPSB7XG4gICAgICBuYW1lOiBcImRpdlwiLFxuICAgICAgY2hpbGRyZW46IFtdXG4gICAgfTtcbiAgICBsZXQgcGFnZUFyZWEgPSBudWxsO1xuICAgIGxldCBicmVha0JlZm9yZSA9IG51bGw7XG4gICAgbGV0IGJyZWFrQmVmb3JlVGFyZ2V0ID0gbnVsbDtcblxuICAgIGlmIChyb290LmJyZWFrQmVmb3JlLmNoaWxkcmVuLmxlbmd0aCA+PSAxKSB7XG4gICAgICBicmVha0JlZm9yZSA9IHJvb3QuYnJlYWtCZWZvcmUuY2hpbGRyZW5bMF07XG4gICAgICBicmVha0JlZm9yZVRhcmdldCA9IGJyZWFrQmVmb3JlLnRhcmdldDtcbiAgICB9IGVsc2UgaWYgKHJvb3Quc3ViZm9ybS5jaGlsZHJlbi5sZW5ndGggPj0gMSAmJiByb290LnN1YmZvcm0uY2hpbGRyZW5bMF0uYnJlYWtCZWZvcmUuY2hpbGRyZW4ubGVuZ3RoID49IDEpIHtcbiAgICAgIGJyZWFrQmVmb3JlID0gcm9vdC5zdWJmb3JtLmNoaWxkcmVuWzBdLmJyZWFrQmVmb3JlLmNoaWxkcmVuWzBdO1xuICAgICAgYnJlYWtCZWZvcmVUYXJnZXQgPSBicmVha0JlZm9yZS50YXJnZXQ7XG4gICAgfSBlbHNlIGlmIChyb290LmJyZWFrICYmIHJvb3QuYnJlYWsuYmVmb3JlVGFyZ2V0KSB7XG4gICAgICBicmVha0JlZm9yZSA9IHJvb3QuYnJlYWs7XG4gICAgICBicmVha0JlZm9yZVRhcmdldCA9IGJyZWFrQmVmb3JlLmJlZm9yZVRhcmdldDtcbiAgICB9IGVsc2UgaWYgKHJvb3Quc3ViZm9ybS5jaGlsZHJlbi5sZW5ndGggPj0gMSAmJiByb290LnN1YmZvcm0uY2hpbGRyZW5bMF0uYnJlYWsgJiYgcm9vdC5zdWJmb3JtLmNoaWxkcmVuWzBdLmJyZWFrLmJlZm9yZVRhcmdldCkge1xuICAgICAgYnJlYWtCZWZvcmUgPSByb290LnN1YmZvcm0uY2hpbGRyZW5bMF0uYnJlYWs7XG4gICAgICBicmVha0JlZm9yZVRhcmdldCA9IGJyZWFrQmVmb3JlLmJlZm9yZVRhcmdldDtcbiAgICB9XG5cbiAgICBpZiAoYnJlYWtCZWZvcmUpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXNbX3hmYV9vYmplY3QuJHNlYXJjaE5vZGVdKGJyZWFrQmVmb3JlVGFyZ2V0LCBicmVha0JlZm9yZVtfeGZhX29iamVjdC4kZ2V0UGFyZW50XSgpKTtcblxuICAgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIFBhZ2VBcmVhKSB7XG4gICAgICAgIHBhZ2VBcmVhID0gdGFyZ2V0O1xuICAgICAgICBicmVha0JlZm9yZVtfeGZhX29iamVjdC4kZXh0cmFdID0ge307XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFwYWdlQXJlYSkge1xuICAgICAgcGFnZUFyZWEgPSBwYWdlQXJlYXNbMF07XG4gICAgfVxuXG4gICAgcGFnZUFyZWFbX3hmYV9vYmplY3QuJGV4dHJhXSA9IHtcbiAgICAgIG51bWJlck9mVXNlOiAxXG4gICAgfTtcblxuICAgIGNvbnN0IHBhZ2VBcmVhUGFyZW50ID0gcGFnZUFyZWFbX3hmYV9vYmplY3QuJGdldFBhcmVudF0oKTtcblxuICAgIHBhZ2VBcmVhUGFyZW50W194ZmFfb2JqZWN0LiRleHRyYV0gPSB7XG4gICAgICBudW1iZXJPZlVzZTogMSxcbiAgICAgIHBhZ2VJbmRleDogcGFnZUFyZWFQYXJlbnQucGFnZUFyZWEuY2hpbGRyZW4uaW5kZXhPZihwYWdlQXJlYSksXG4gICAgICBwYWdlU2V0SW5kZXg6IDBcbiAgICB9O1xuICAgIGxldCB0YXJnZXRQYWdlQXJlYTtcbiAgICBsZXQgbGVhZGVyID0gbnVsbDtcbiAgICBsZXQgdHJhaWxlciA9IG51bGw7XG4gICAgbGV0IGhhc1NvbWV0aGluZyA9IHRydWU7XG4gICAgbGV0IGhhc1NvbWV0aGluZ0NvdW50ZXIgPSAwO1xuICAgIGxldCBzdGFydEluZGV4ID0gMDtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAoIWhhc1NvbWV0aGluZykge1xuICAgICAgICBtYWluSHRtbC5jaGlsZHJlbi5wb3AoKTtcblxuICAgICAgICBpZiAoKytoYXNTb21ldGhpbmdDb3VudGVyID09PSBNQVhfRU1QVFlfUEFHRVMpIHtcbiAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJYRkEgLSBTb21ldGhpbmcgZ29lcyB3cm9uZzogcGxlYXNlIGZpbGUgYSBidWcuXCIpO1xuICAgICAgICAgIHJldHVybiBtYWluSHRtbDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGFzU29tZXRoaW5nQ291bnRlciA9IDA7XG4gICAgICB9XG5cbiAgICAgIHRhcmdldFBhZ2VBcmVhID0gbnVsbDtcbiAgICAgIHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXS5jdXJyZW50UGFnZUFyZWEgPSBwYWdlQXJlYTtcblxuICAgICAgY29uc3QgcGFnZSA9IHBhZ2VBcmVhW194ZmFfb2JqZWN0LiR0b0hUTUxdKCkuaHRtbDtcblxuICAgICAgbWFpbkh0bWwuY2hpbGRyZW4ucHVzaChwYWdlKTtcblxuICAgICAgaWYgKGxlYWRlcikge1xuICAgICAgICB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlID0gdHJ1ZTtcbiAgICAgICAgcGFnZS5jaGlsZHJlbi5wdXNoKGxlYWRlcltfeGZhX29iamVjdC4kdG9IVE1MXShwYWdlQXJlYVtfeGZhX29iamVjdC4kZXh0cmFdLnNwYWNlKS5odG1sKTtcbiAgICAgICAgbGVhZGVyID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRyYWlsZXIpIHtcbiAgICAgICAgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZSA9IHRydWU7XG4gICAgICAgIHBhZ2UuY2hpbGRyZW4ucHVzaCh0cmFpbGVyW194ZmFfb2JqZWN0LiR0b0hUTUxdKHBhZ2VBcmVhW194ZmFfb2JqZWN0LiRleHRyYV0uc3BhY2UpLmh0bWwpO1xuICAgICAgICB0cmFpbGVyID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29udGVudEFyZWFzID0gcGFnZUFyZWEuY29udGVudEFyZWEuY2hpbGRyZW47XG4gICAgICBjb25zdCBodG1sQ29udGVudEFyZWFzID0gcGFnZS5jaGlsZHJlbi5maWx0ZXIobm9kZSA9PiBub2RlLmF0dHJpYnV0ZXMuY2xhc3MuaW5jbHVkZXMoXCJ4ZmFDb250ZW50YXJlYVwiKSk7XG4gICAgICBoYXNTb21ldGhpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXS5maXJzdFVuc3BsaXR0YWJsZSA9IG51bGw7XG4gICAgICB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGZsdXNoID0gaW5kZXggPT4ge1xuICAgICAgICBjb25zdCBodG1sID0gcm9vdFtfeGZhX29iamVjdC4kZmx1c2hIVE1MXSgpO1xuXG4gICAgICAgIGlmIChodG1sKSB7XG4gICAgICAgICAgaGFzU29tZXRoaW5nID0gaGFzU29tZXRoaW5nIHx8IGh0bWwuY2hpbGRyZW4gJiYgaHRtbC5jaGlsZHJlbi5sZW5ndGggIT09IDA7XG4gICAgICAgICAgaHRtbENvbnRlbnRBcmVhc1tpbmRleF0uY2hpbGRyZW4ucHVzaChodG1sKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0SW5kZXgsIGlpID0gY29udGVudEFyZWFzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgY29uc3QgY29udGVudEFyZWEgPSB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0uY3VycmVudENvbnRlbnRBcmVhID0gY29udGVudEFyZWFzW2ldO1xuICAgICAgICBjb25zdCBzcGFjZSA9IHtcbiAgICAgICAgICB3aWR0aDogY29udGVudEFyZWEudyxcbiAgICAgICAgICBoZWlnaHQ6IGNvbnRlbnRBcmVhLmhcbiAgICAgICAgfTtcbiAgICAgICAgc3RhcnRJbmRleCA9IDA7XG5cbiAgICAgICAgaWYgKGxlYWRlcikge1xuICAgICAgICAgIGh0bWxDb250ZW50QXJlYXNbaV0uY2hpbGRyZW4ucHVzaChsZWFkZXJbX3hmYV9vYmplY3QuJHRvSFRNTF0oc3BhY2UpLmh0bWwpO1xuICAgICAgICAgIGxlYWRlciA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHJhaWxlcikge1xuICAgICAgICAgIGh0bWxDb250ZW50QXJlYXNbaV0uY2hpbGRyZW4ucHVzaCh0cmFpbGVyW194ZmFfb2JqZWN0LiR0b0hUTUxdKHNwYWNlKS5odG1sKTtcbiAgICAgICAgICB0cmFpbGVyID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGh0bWwgPSByb290W194ZmFfb2JqZWN0LiR0b0hUTUxdKHNwYWNlKTtcblxuICAgICAgICBpZiAoaHRtbC5zdWNjZXNzKSB7XG4gICAgICAgICAgaWYgKGh0bWwuaHRtbCkge1xuICAgICAgICAgICAgaGFzU29tZXRoaW5nID0gaGFzU29tZXRoaW5nIHx8IGh0bWwuaHRtbC5jaGlsZHJlbiAmJiBodG1sLmh0bWwuY2hpbGRyZW4ubGVuZ3RoICE9PSAwO1xuICAgICAgICAgICAgaHRtbENvbnRlbnRBcmVhc1tpXS5jaGlsZHJlbi5wdXNoKGh0bWwuaHRtbCk7XG4gICAgICAgICAgfSBlbHNlIGlmICghaGFzU29tZXRoaW5nICYmIG1haW5IdG1sLmNoaWxkcmVuLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIG1haW5IdG1sLmNoaWxkcmVuLnBvcCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBtYWluSHRtbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChodG1sLmlzQnJlYWsoKSkge1xuICAgICAgICAgIGNvbnN0IG5vZGUgPSBodG1sLmJyZWFrTm9kZTtcbiAgICAgICAgICBmbHVzaChpKTtcblxuICAgICAgICAgIGlmIChub2RlLnRhcmdldFR5cGUgPT09IFwiYXV0b1wiKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobm9kZS5sZWFkZXIpIHtcbiAgICAgICAgICAgIGxlYWRlciA9IHRoaXNbX3hmYV9vYmplY3QuJHNlYXJjaE5vZGVdKG5vZGUubGVhZGVyLCBub2RlW194ZmFfb2JqZWN0LiRnZXRQYXJlbnRdKCkpO1xuICAgICAgICAgICAgbGVhZGVyID0gbGVhZGVyID8gbGVhZGVyWzBdIDogbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobm9kZS50cmFpbGVyKSB7XG4gICAgICAgICAgICB0cmFpbGVyID0gdGhpc1tfeGZhX29iamVjdC4kc2VhcmNoTm9kZV0obm9kZS50cmFpbGVyLCBub2RlW194ZmFfb2JqZWN0LiRnZXRQYXJlbnRdKCkpO1xuICAgICAgICAgICAgdHJhaWxlciA9IHRyYWlsZXIgPyB0cmFpbGVyWzBdIDogbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobm9kZS50YXJnZXRUeXBlID09PSBcInBhZ2VBcmVhXCIpIHtcbiAgICAgICAgICAgIHRhcmdldFBhZ2VBcmVhID0gbm9kZVtfeGZhX29iamVjdC4kZXh0cmFdLnRhcmdldDtcbiAgICAgICAgICAgIGkgPSBJbmZpbml0eTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCFub2RlW194ZmFfb2JqZWN0LiRleHRyYV0udGFyZ2V0KSB7XG4gICAgICAgICAgICBpID0gbm9kZVtfeGZhX29iamVjdC4kZXh0cmFdLmluZGV4O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0YXJnZXRQYWdlQXJlYSA9IG5vZGVbX3hmYV9vYmplY3QuJGV4dHJhXS50YXJnZXQ7XG4gICAgICAgICAgICBzdGFydEluZGV4ID0gbm9kZVtfeGZhX29iamVjdC4kZXh0cmFdLmluZGV4ICsgMTtcbiAgICAgICAgICAgIGkgPSBJbmZpbml0eTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0ub3ZlcmZsb3dOb2RlKSB7XG4gICAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXS5vdmVyZmxvd05vZGU7XG4gICAgICAgICAgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLm92ZXJmbG93Tm9kZSA9IG51bGw7XG5cbiAgICAgICAgICBjb25zdCBvdmVyZmxvd0V4dHJhID0gbm9kZVtfeGZhX29iamVjdC4kZ2V0RXh0cmFdKCk7XG5cbiAgICAgICAgICBjb25zdCB0YXJnZXQgPSBvdmVyZmxvd0V4dHJhLnRhcmdldDtcbiAgICAgICAgICBvdmVyZmxvd0V4dHJhLmFkZExlYWRlciA9IG92ZXJmbG93RXh0cmEubGVhZGVyICE9PSBudWxsO1xuICAgICAgICAgIG92ZXJmbG93RXh0cmEuYWRkVHJhaWxlciA9IG92ZXJmbG93RXh0cmEudHJhaWxlciAhPT0gbnVsbDtcbiAgICAgICAgICBmbHVzaChpKTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50SW5kZXggPSBpO1xuICAgICAgICAgIGkgPSBJbmZpbml0eTtcblxuICAgICAgICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBQYWdlQXJlYSkge1xuICAgICAgICAgICAgdGFyZ2V0UGFnZUFyZWEgPSB0YXJnZXQ7XG4gICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBDb250ZW50QXJlYSkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjb250ZW50QXJlYXMuZmluZEluZGV4KGUgPT4gZSA9PT0gdGFyZ2V0KTtcblxuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICBpZiAoaW5kZXggPiBjdXJyZW50SW5kZXgpIHtcbiAgICAgICAgICAgICAgICBpID0gaW5kZXggLSAxO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGFyZ2V0UGFnZUFyZWEgPSB0YXJnZXRbX3hmYV9vYmplY3QuJGdldFBhcmVudF0oKTtcbiAgICAgICAgICAgICAgc3RhcnRJbmRleCA9IHRhcmdldFBhZ2VBcmVhLmNvbnRlbnRBcmVhLmNoaWxkcmVuLmZpbmRJbmRleChlID0+IGUgPT09IHRhcmdldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBmbHVzaChpKTtcbiAgICAgIH1cblxuICAgICAgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdLnBhZ2VOdW1iZXIgKz0gMTtcblxuICAgICAgaWYgKHRhcmdldFBhZ2VBcmVhKSB7XG4gICAgICAgIGlmICh0YXJnZXRQYWdlQXJlYVtfeGZhX29iamVjdC4kaXNVc2FibGVdKCkpIHtcbiAgICAgICAgICB0YXJnZXRQYWdlQXJlYVtfeGZhX29iamVjdC4kZXh0cmFdLm51bWJlck9mVXNlICs9IDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFyZ2V0UGFnZUFyZWEgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHBhZ2VBcmVhID0gdGFyZ2V0UGFnZUFyZWEgfHwgcGFnZUFyZWFbX3hmYV9vYmplY3QuJGdldE5leHRQYWdlXSgpO1xuICAgICAgeWllbGQgbnVsbDtcbiAgICB9XG4gIH1cblxufVxuXG5leHBvcnRzLlRlbXBsYXRlID0gVGVtcGxhdGU7XG5cbmNsYXNzIFRleHQgZXh0ZW5kcyBfeGZhX29iamVjdC5Db250ZW50T2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcInRleHRcIik7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLm1heENoYXJzID0gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLm1heENoYXJzLFxuICAgICAgZGVmYXVsdFZhbHVlOiAwLFxuICAgICAgdmFsaWRhdGU6IHggPT4geCA+PSAwXG4gICAgfSk7XG4gICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8IFwiXCI7XG4gICAgdGhpcy5yaWQgPSBhdHRyaWJ1dGVzLnJpZCB8fCBcIlwiO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kYWNjZXB0V2hpdGVzcGFjZV0oKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJG9uQ2hpbGRdKGNoaWxkKSB7XG4gICAgaWYgKGNoaWxkW194ZmFfb2JqZWN0LiRuYW1lc3BhY2VJZF0gPT09IF9uYW1lc3BhY2VzLk5hbWVzcGFjZUlkcy54aHRtbC5pZCkge1xuICAgICAgdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0gPSBjaGlsZDtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgICgwLCBfdXRpbC53YXJuKShgWEZBIC0gSW52YWxpZCBjb250ZW50IGluIFRleHQ6ICR7Y2hpbGRbX3hmYV9vYmplY3QuJG5vZGVOYW1lXX0uYCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRvblRleHRdKHN0cikge1xuICAgIGlmICh0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XSBpbnN0YW5jZW9mIF94ZmFfb2JqZWN0LlhGQU9iamVjdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN1cGVyW194ZmFfb2JqZWN0LiRvblRleHRdKHN0cik7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGZpbmFsaXplXSgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdID09PSBcInN0cmluZ1wiKSB7XG4gICAgICB0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XSA9IHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdLnJlcGxhY2UoL1xcclxcbi9nLCBcIlxcblwiKTtcbiAgICB9XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGdldEV4dHJhXSgpIHtcbiAgICBpZiAodHlwZW9mIHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdID09PSBcInN0cmluZ1wiKSB7XG4gICAgICByZXR1cm4gdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0uc3BsaXQoL1tcXHUyMDI5XFx1MjAyOFxcbl0vKS5yZWR1Y2UoKGFjYywgbGluZSkgPT4ge1xuICAgICAgICBpZiAobGluZSkge1xuICAgICAgICAgIGFjYy5wdXNoKGxpbmUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIFtdKS5qb2luKFwiXFxuXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XVtfeGZhX29iamVjdC4kdGV4dF0oKTtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kdG9IVE1MXShhdmFpbGFibGVTcGFjZSkge1xuICAgIGlmICh0eXBlb2YgdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGNvbnN0IGh0bWwgPSB2YWx1ZVRvSHRtbCh0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XSkuaHRtbDtcblxuICAgICAgaWYgKHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdLmluY2x1ZGVzKFwiXFx1MjAyOVwiKSkge1xuICAgICAgICBodG1sLm5hbWUgPSBcImRpdlwiO1xuICAgICAgICBodG1sLmNoaWxkcmVuID0gW107XG5cbiAgICAgICAgdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0uc3BsaXQoXCJcXHUyMDI5XCIpLm1hcChwYXJhID0+IHBhcmEuc3BsaXQoL1tcXHUyMDI4XFxuXS8pLnJlZHVjZSgoYWNjLCBsaW5lKSA9PiB7XG4gICAgICAgICAgYWNjLnB1c2goe1xuICAgICAgICAgICAgbmFtZTogXCJzcGFuXCIsXG4gICAgICAgICAgICB2YWx1ZTogbGluZVxuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgIG5hbWU6IFwiYnJcIlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIFtdKSkuZm9yRWFjaChsaW5lcyA9PiB7XG4gICAgICAgICAgaHRtbC5jaGlsZHJlbi5wdXNoKHtcbiAgICAgICAgICAgIG5hbWU6IFwicFwiLFxuICAgICAgICAgICAgY2hpbGRyZW46IGxpbmVzXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICgvW1xcdTIwMjhcXG5dLy50ZXN0KHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdKSkge1xuICAgICAgICBodG1sLm5hbWUgPSBcImRpdlwiO1xuICAgICAgICBodG1sLmNoaWxkcmVuID0gW107XG5cbiAgICAgICAgdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0uc3BsaXQoL1tcXHUyMDI4XFxuXS8pLmZvckVhY2gobGluZSA9PiB7XG4gICAgICAgICAgaHRtbC5jaGlsZHJlbi5wdXNoKHtcbiAgICAgICAgICAgIG5hbWU6IFwic3BhblwiLFxuICAgICAgICAgICAgdmFsdWU6IGxpbmVcbiAgICAgICAgICB9LCB7XG4gICAgICAgICAgICBuYW1lOiBcImJyXCJcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5zdWNjZXNzKGh0bWwpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XVtfeGZhX29iamVjdC4kdG9IVE1MXShhdmFpbGFibGVTcGFjZSk7XG4gIH1cblxufVxuXG5leHBvcnRzLlRleHQgPSBUZXh0O1xuXG5jbGFzcyBUZXh0RWRpdCBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJ0ZXh0RWRpdFwiLCB0cnVlKTtcbiAgICB0aGlzLmFsbG93UmljaFRleHQgPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMuYWxsb3dSaWNoVGV4dCxcbiAgICAgIGRlZmF1bHRWYWx1ZTogMCxcbiAgICAgIHZhbGlkYXRlOiB4ID0+IHggPT09IDFcbiAgICB9KTtcbiAgICB0aGlzLmhTY3JvbGxQb2xpY3kgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5oU2Nyb2xsUG9saWN5LCBbXCJhdXRvXCIsIFwib2ZmXCIsIFwib25cIl0pO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5tdWx0aUxpbmUgPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMubXVsdGlMaW5lLFxuICAgICAgZGVmYXVsdFZhbHVlOiBcIlwiLFxuICAgICAgdmFsaWRhdGU6IHggPT4geCA9PT0gMCB8fCB4ID09PSAxXG4gICAgfSk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICAgIHRoaXMudlNjcm9sbFBvbGljeSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnZTY3JvbGxQb2xpY3ksIFtcImF1dG9cIiwgXCJvZmZcIiwgXCJvblwiXSk7XG4gICAgdGhpcy5ib3JkZXIgPSBudWxsO1xuICAgIHRoaXMuY29tYiA9IG51bGw7XG4gICAgdGhpcy5leHRyYXMgPSBudWxsO1xuICAgIHRoaXMubWFyZ2luID0gbnVsbDtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kdG9IVE1MXShhdmFpbGFibGVTcGFjZSkge1xuICAgIGNvbnN0IHN0eWxlID0gKDAsIF9odG1sX3V0aWxzLnRvU3R5bGUpKHRoaXMsIFwiYm9yZGVyXCIsIFwiZm9udFwiLCBcIm1hcmdpblwiKTtcbiAgICBsZXQgaHRtbDtcblxuICAgIGNvbnN0IGZpZWxkID0gdGhpc1tfeGZhX29iamVjdC4kZ2V0UGFyZW50XSgpW194ZmFfb2JqZWN0LiRnZXRQYXJlbnRdKCk7XG5cbiAgICBpZiAodGhpcy5tdWx0aUxpbmUgPT09IFwiXCIpIHtcbiAgICAgIHRoaXMubXVsdGlMaW5lID0gZmllbGQgaW5zdGFuY2VvZiBEcmF3ID8gMSA6IDA7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubXVsdGlMaW5lID09PSAxKSB7XG4gICAgICBodG1sID0ge1xuICAgICAgICBuYW1lOiBcInRleHRhcmVhXCIsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICBkYXRhSWQ6IGZpZWxkW194ZmFfb2JqZWN0LiRkYXRhXSAmJiBmaWVsZFtfeGZhX29iamVjdC4kZGF0YV1bX3hmYV9vYmplY3QuJHVpZF0gfHwgZmllbGRbX3hmYV9vYmplY3QuJHVpZF0sXG4gICAgICAgICAgZmllbGRJZDogZmllbGRbX3hmYV9vYmplY3QuJHVpZF0sXG4gICAgICAgICAgY2xhc3M6IFtcInhmYVRleHRmaWVsZFwiXSxcbiAgICAgICAgICBzdHlsZSxcbiAgICAgICAgICBcImFyaWEtbGFiZWxcIjogYXJpYUxhYmVsKGZpZWxkKVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBodG1sID0ge1xuICAgICAgICBuYW1lOiBcImlucHV0XCIsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICBkYXRhSWQ6IGZpZWxkW194ZmFfb2JqZWN0LiRkYXRhXSAmJiBmaWVsZFtfeGZhX29iamVjdC4kZGF0YV1bX3hmYV9vYmplY3QuJHVpZF0gfHwgZmllbGRbX3hmYV9vYmplY3QuJHVpZF0sXG4gICAgICAgICAgZmllbGRJZDogZmllbGRbX3hmYV9vYmplY3QuJHVpZF0sXG4gICAgICAgICAgY2xhc3M6IFtcInhmYVRleHRmaWVsZFwiXSxcbiAgICAgICAgICBzdHlsZSxcbiAgICAgICAgICBcImFyaWEtbGFiZWxcIjogYXJpYUxhYmVsKGZpZWxkKVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5zdWNjZXNzKHtcbiAgICAgIG5hbWU6IFwibGFiZWxcIixcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgY2xhc3M6IFtcInhmYUxhYmVsXCJdXG4gICAgICB9LFxuICAgICAgY2hpbGRyZW46IFtodG1sXVxuICAgIH0pO1xuICB9XG5cbn1cblxuY2xhc3MgVGltZSBleHRlbmRzIF94ZmFfb2JqZWN0LlN0cmluZ09iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJ0aW1lXCIpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8IFwiXCI7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRmaW5hbGl6ZV0oKSB7XG4gICAgY29uc3QgZGF0ZSA9IHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdLnRyaW0oKTtcblxuICAgIHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdID0gZGF0ZSA/IG5ldyBEYXRlKGRhdGUpIDogbnVsbDtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kdG9IVE1MXShhdmFpbGFibGVTcGFjZSkge1xuICAgIHJldHVybiB2YWx1ZVRvSHRtbCh0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XSA/IHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdLnRvU3RyaW5nKCkgOiBcIlwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIFRpbWVTdGFtcCBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJ0aW1lU3RhbXBcIik7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLnNlcnZlciA9IGF0dHJpYnV0ZXMuc2VydmVyIHx8IFwiXCI7XG4gICAgdGhpcy50eXBlID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMudHlwZSwgW1wib3B0aW9uYWxcIiwgXCJyZXF1aXJlZFwiXSk7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICB9XG5cbn1cblxuY2xhc3MgVG9vbFRpcCBleHRlbmRzIF94ZmFfb2JqZWN0LlN0cmluZ09iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJ0b29sVGlwXCIpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5yaWQgPSBhdHRyaWJ1dGVzLnJpZCB8fCBcIlwiO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgfVxuXG59XG5cbmNsYXNzIFRyYXZlcnNhbCBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJ0cmF2ZXJzYWxcIiwgdHJ1ZSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gICAgdGhpcy5leHRyYXMgPSBudWxsO1xuICAgIHRoaXMudHJhdmVyc2UgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgfVxuXG59XG5cbmNsYXNzIFRyYXZlcnNlIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcInRyYXZlcnNlXCIsIHRydWUpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5vcGVyYXRpb24gPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5vcGVyYXRpb24sIFtcIm5leHRcIiwgXCJiYWNrXCIsIFwiZG93blwiLCBcImZpcnN0XCIsIFwibGVmdFwiLCBcInJpZ2h0XCIsIFwidXBcIl0pO1xuICAgIHRoaXMucmVmID0gYXR0cmlidXRlcy5yZWYgfHwgXCJcIjtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gICAgdGhpcy5leHRyYXMgPSBudWxsO1xuICAgIHRoaXMuc2NyaXB0ID0gbnVsbDtcbiAgfVxuXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLm9wZXJhdGlvbjtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kaXNUcmFuc3BhcmVudF0oKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbn1cblxuY2xhc3MgVWkgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoVEVNUExBVEVfTlNfSUQsIFwidWlcIiwgdHJ1ZSk7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gICAgdGhpcy5leHRyYXMgPSBudWxsO1xuICAgIHRoaXMucGljdHVyZSA9IG51bGw7XG4gICAgdGhpcy5iYXJjb2RlID0gbnVsbDtcbiAgICB0aGlzLmJ1dHRvbiA9IG51bGw7XG4gICAgdGhpcy5jaGVja0J1dHRvbiA9IG51bGw7XG4gICAgdGhpcy5jaG9pY2VMaXN0ID0gbnVsbDtcbiAgICB0aGlzLmRhdGVUaW1lRWRpdCA9IG51bGw7XG4gICAgdGhpcy5kZWZhdWx0VWkgPSBudWxsO1xuICAgIHRoaXMuaW1hZ2VFZGl0ID0gbnVsbDtcbiAgICB0aGlzLm51bWVyaWNFZGl0ID0gbnVsbDtcbiAgICB0aGlzLnBhc3N3b3JkRWRpdCA9IG51bGw7XG4gICAgdGhpcy5zaWduYXR1cmUgPSBudWxsO1xuICAgIHRoaXMudGV4dEVkaXQgPSBudWxsO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRnZXRFeHRyYV0oKSB7XG4gICAgaWYgKHRoaXNbX3hmYV9vYmplY3QuJGV4dHJhXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpIHtcbiAgICAgICAgaWYgKG5hbWUgPT09IFwiZXh0cmFzXCIgfHwgbmFtZSA9PT0gXCJwaWN0dXJlXCIpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9iaiA9IHRoaXNbbmFtZV07XG5cbiAgICAgICAgaWYgKCEob2JqIGluc3RhbmNlb2YgX3hmYV9vYmplY3QuWEZBT2JqZWN0KSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdID0gb2JqO1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgfVxuXG4gICAgICB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0gPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV07XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJHRvSFRNTF0oYXZhaWxhYmxlU3BhY2UpIHtcbiAgICBjb25zdCBvYmogPSB0aGlzW194ZmFfb2JqZWN0LiRnZXRFeHRyYV0oKTtcblxuICAgIGlmIChvYmopIHtcbiAgICAgIHJldHVybiBvYmpbX3hmYV9vYmplY3QuJHRvSFRNTF0oYXZhaWxhYmxlU3BhY2UpO1xuICAgIH1cblxuICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5FTVBUWTtcbiAgfVxuXG59XG5cbmNsYXNzIFZhbGlkYXRlIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcInZhbGlkYXRlXCIsIHRydWUpO1xuICAgIHRoaXMuZm9ybWF0VGVzdCA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLmZvcm1hdFRlc3QsIFtcIndhcm5pbmdcIiwgXCJkaXNhYmxlZFwiLCBcImVycm9yXCJdKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMubnVsbFRlc3QgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5udWxsVGVzdCwgW1wiZGlzYWJsZWRcIiwgXCJlcnJvclwiLCBcIndhcm5pbmdcIl0pO1xuICAgIHRoaXMuc2NyaXB0VGVzdCA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnNjcmlwdFRlc3QsIFtcImVycm9yXCIsIFwiZGlzYWJsZWRcIiwgXCJ3YXJuaW5nXCJdKTtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gICAgdGhpcy5leHRyYXMgPSBudWxsO1xuICAgIHRoaXMubWVzc2FnZSA9IG51bGw7XG4gICAgdGhpcy5waWN0dXJlID0gbnVsbDtcbiAgICB0aGlzLnNjcmlwdCA9IG51bGw7XG4gIH1cblxufVxuXG5jbGFzcyBWYWx1ZSBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihURU1QTEFURV9OU19JRCwgXCJ2YWx1ZVwiLCB0cnVlKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMub3ZlcnJpZGUgPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMub3ZlcnJpZGUsXG4gICAgICBkZWZhdWx0VmFsdWU6IDAsXG4gICAgICB2YWxpZGF0ZTogeCA9PiB4ID09PSAxXG4gICAgfSk7XG4gICAgdGhpcy5yZWxldmFudCA9ICgwLCBfdXRpbHMuZ2V0UmVsZXZhbnQpKGF0dHJpYnV0ZXMucmVsZXZhbnQpO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmFyYyA9IG51bGw7XG4gICAgdGhpcy5ib29sZWFuID0gbnVsbDtcbiAgICB0aGlzLmRhdGUgPSBudWxsO1xuICAgIHRoaXMuZGF0ZVRpbWUgPSBudWxsO1xuICAgIHRoaXMuZGVjaW1hbCA9IG51bGw7XG4gICAgdGhpcy5leERhdGEgPSBudWxsO1xuICAgIHRoaXMuZmxvYXQgPSBudWxsO1xuICAgIHRoaXMuaW1hZ2UgPSBudWxsO1xuICAgIHRoaXMuaW50ZWdlciA9IG51bGw7XG4gICAgdGhpcy5saW5lID0gbnVsbDtcbiAgICB0aGlzLnJlY3RhbmdsZSA9IG51bGw7XG4gICAgdGhpcy50ZXh0ID0gbnVsbDtcbiAgICB0aGlzLnRpbWUgPSBudWxsO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRzZXRWYWx1ZV0odmFsdWUpIHtcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzW194ZmFfb2JqZWN0LiRnZXRQYXJlbnRdKCk7XG5cbiAgICBpZiAocGFyZW50IGluc3RhbmNlb2YgRmllbGQpIHtcbiAgICAgIGlmIChwYXJlbnQudWkgJiYgcGFyZW50LnVpLmltYWdlRWRpdCkge1xuICAgICAgICBpZiAoIXRoaXMuaW1hZ2UpIHtcbiAgICAgICAgICB0aGlzLmltYWdlID0gbmV3IEltYWdlKHt9KTtcblxuICAgICAgICAgIHRoaXNbX3hmYV9vYmplY3QuJGFwcGVuZENoaWxkXSh0aGlzLmltYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW1hZ2VbX3hmYV9vYmplY3QuJGNvbnRlbnRdID0gdmFsdWVbX3hmYV9vYmplY3QuJGNvbnRlbnRdO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWVOYW1lID0gdmFsdWVbX3hmYV9vYmplY3QuJG5vZGVOYW1lXTtcblxuICAgIGlmICh0aGlzW3ZhbHVlTmFtZV0gIT09IG51bGwpIHtcbiAgICAgIHRoaXNbdmFsdWVOYW1lXVtfeGZhX29iamVjdC4kY29udGVudF0gPSB2YWx1ZVtfeGZhX29iamVjdC4kY29udGVudF07XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKSB7XG4gICAgICBjb25zdCBvYmogPSB0aGlzW25hbWVdO1xuXG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgX3hmYV9vYmplY3QuWEZBT2JqZWN0KSB7XG4gICAgICAgIHRoaXNbbmFtZV0gPSBudWxsO1xuXG4gICAgICAgIHRoaXNbX3hmYV9vYmplY3QuJHJlbW92ZUNoaWxkXShvYmopO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXNbdmFsdWVbX3hmYV9vYmplY3QuJG5vZGVOYW1lXV0gPSB2YWx1ZTtcblxuICAgIHRoaXNbX3hmYV9vYmplY3QuJGFwcGVuZENoaWxkXSh2YWx1ZSk7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJHRleHRdKCkge1xuICAgIGlmICh0aGlzLmV4RGF0YSkge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLmV4RGF0YVtfeGZhX29iamVjdC4kY29udGVudF0gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhEYXRhW194ZmFfb2JqZWN0LiRjb250ZW50XS50cmltKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmV4RGF0YVtfeGZhX29iamVjdC4kY29udGVudF1bX3hmYV9vYmplY3QuJHRleHRdKCkudHJpbSgpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSkge1xuICAgICAgaWYgKG5hbWUgPT09IFwiaW1hZ2VcIikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2JqID0gdGhpc1tuYW1lXTtcblxuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIF94ZmFfb2JqZWN0LlhGQU9iamVjdCkge1xuICAgICAgICByZXR1cm4gKG9ialtfeGZhX29iamVjdC4kY29udGVudF0gfHwgXCJcIikudG9TdHJpbmcoKS50cmltKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJHRvSFRNTF0oYXZhaWxhYmxlU3BhY2UpIHtcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpIHtcbiAgICAgIGNvbnN0IG9iaiA9IHRoaXNbbmFtZV07XG5cbiAgICAgIGlmICghKG9iaiBpbnN0YW5jZW9mIF94ZmFfb2JqZWN0LlhGQU9iamVjdCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvYmpbX3hmYV9vYmplY3QuJHRvSFRNTF0oYXZhaWxhYmxlU3BhY2UpO1xuICAgIH1cblxuICAgIHJldHVybiBfdXRpbHMuSFRNTFJlc3VsdC5FTVBUWTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuVmFsdWUgPSBWYWx1ZTtcblxuY2xhc3MgVmFyaWFibGVzIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKFRFTVBMQVRFX05TX0lELCBcInZhcmlhYmxlc1wiLCB0cnVlKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgICB0aGlzLmJvb2xlYW4gPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmRhdGUgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmRhdGVUaW1lID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5kZWNpbWFsID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5leERhdGEgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmZsb2F0ID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5pbWFnZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuaW50ZWdlciA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMubWFuaWZlc3QgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnNjcmlwdCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMudGV4dCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMudGltZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRpc1RyYW5zcGFyZW50XSgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG59XG5cbmNsYXNzIFRlbXBsYXRlTmFtZXNwYWNlIHtcbiAgc3RhdGljIFtfbmFtZXNwYWNlcy4kYnVpbGRYRkFPYmplY3RdKG5hbWUsIGF0dHJpYnV0ZXMpIHtcbiAgICBpZiAoVGVtcGxhdGVOYW1lc3BhY2UuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBUZW1wbGF0ZU5hbWVzcGFjZVtuYW1lXShhdHRyaWJ1dGVzKTtcblxuICAgICAgbm9kZVtfeGZhX29iamVjdC4kc2V0U2V0QXR0cmlidXRlc10oYXR0cmlidXRlcyk7XG5cbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBzdGF0aWMgYXBwZWFyYW5jZUZpbHRlcihhdHRycykge1xuICAgIHJldHVybiBuZXcgQXBwZWFyYW5jZUZpbHRlcihhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgYXJjKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBBcmMoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGFyZWEoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEFyZWEoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGFzc2lzdChhdHRycykge1xuICAgIHJldHVybiBuZXcgQXNzaXN0KGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBiYXJjb2RlKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBCYXJjb2RlKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBiaW5kKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBCaW5kKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBiaW5kSXRlbXMoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEJpbmRJdGVtcyhhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgYm9va2VuZChhdHRycykge1xuICAgIHJldHVybiBuZXcgQm9va2VuZChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgYm9vbGVhbihhdHRycykge1xuICAgIHJldHVybiBuZXcgQm9vbGVhbkVsZW1lbnQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGJvcmRlcihhdHRycykge1xuICAgIHJldHVybiBuZXcgQm9yZGVyKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBicmVhayhhdHRycykge1xuICAgIHJldHVybiBuZXcgQnJlYWsoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGJyZWFrQWZ0ZXIoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEJyZWFrQWZ0ZXIoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGJyZWFrQmVmb3JlKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBCcmVha0JlZm9yZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgYnV0dG9uKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBCdXR0b24oYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGNhbGN1bGF0ZShhdHRycykge1xuICAgIHJldHVybiBuZXcgQ2FsY3VsYXRlKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBjYXB0aW9uKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBDYXB0aW9uKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBjZXJ0aWZpY2F0ZShhdHRycykge1xuICAgIHJldHVybiBuZXcgQ2VydGlmaWNhdGUoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGNlcnRpZmljYXRlcyhhdHRycykge1xuICAgIHJldHVybiBuZXcgQ2VydGlmaWNhdGVzKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBjaGVja0J1dHRvbihhdHRycykge1xuICAgIHJldHVybiBuZXcgQ2hlY2tCdXR0b24oYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGNob2ljZUxpc3QoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IENob2ljZUxpc3QoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGNvbG9yKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBDb2xvcihhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgY29tYihhdHRycykge1xuICAgIHJldHVybiBuZXcgQ29tYihhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgY29ubmVjdChhdHRycykge1xuICAgIHJldHVybiBuZXcgQ29ubmVjdChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgY29udGVudEFyZWEoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IENvbnRlbnRBcmVhKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBjb3JuZXIoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IENvcm5lcihhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZGF0ZShhdHRycykge1xuICAgIHJldHVybiBuZXcgRGF0ZUVsZW1lbnQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGRhdGVUaW1lKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlVGltZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZGF0ZVRpbWVFZGl0KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlVGltZUVkaXQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGRlY2ltYWwoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IERlY2ltYWwoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGRlZmF1bHRVaShhdHRycykge1xuICAgIHJldHVybiBuZXcgRGVmYXVsdFVpKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBkZXNjKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBEZXNjKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBkaWdlc3RNZXRob2QoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IERpZ2VzdE1ldGhvZChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZGlnZXN0TWV0aG9kcyhhdHRycykge1xuICAgIHJldHVybiBuZXcgRGlnZXN0TWV0aG9kcyhhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZHJhdyhhdHRycykge1xuICAgIHJldHVybiBuZXcgRHJhdyhhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZWRnZShhdHRycykge1xuICAgIHJldHVybiBuZXcgRWRnZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZW5jb2RpbmcoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEVuY29kaW5nKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBlbmNvZGluZ3MoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEVuY29kaW5ncyhhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZW5jcnlwdChhdHRycykge1xuICAgIHJldHVybiBuZXcgRW5jcnlwdChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZW5jcnlwdERhdGEoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEVuY3J5cHREYXRhKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBlbmNyeXB0aW9uKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBFbmNyeXB0aW9uKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBlbmNyeXB0aW9uTWV0aG9kKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBFbmNyeXB0aW9uTWV0aG9kKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBlbmNyeXB0aW9uTWV0aG9kcyhhdHRycykge1xuICAgIHJldHVybiBuZXcgRW5jcnlwdGlvbk1ldGhvZHMoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGV2ZW50KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBFdmVudChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZXhEYXRhKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBFeERhdGEoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGV4T2JqZWN0KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBFeE9iamVjdChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZXhjbEdyb3VwKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBFeGNsR3JvdXAoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGV4ZWN1dGUoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEV4ZWN1dGUoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGV4dHJhcyhhdHRycykge1xuICAgIHJldHVybiBuZXcgRXh0cmFzKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBmaWVsZChhdHRycykge1xuICAgIHJldHVybiBuZXcgRmllbGQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGZpbGwoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEZpbGwoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGZpbHRlcihhdHRycykge1xuICAgIHJldHVybiBuZXcgRmlsdGVyKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBmbG9hdChhdHRycykge1xuICAgIHJldHVybiBuZXcgRmxvYXQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGZvbnQoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEZvbnQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGZvcm1hdChhdHRycykge1xuICAgIHJldHVybiBuZXcgRm9ybWF0KGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBoYW5kbGVyKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBIYW5kbGVyKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBoeXBoZW5hdGlvbihhdHRycykge1xuICAgIHJldHVybiBuZXcgSHlwaGVuYXRpb24oYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGltYWdlKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBJbWFnZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgaW1hZ2VFZGl0KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBJbWFnZUVkaXQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGludGVnZXIoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEludGVnZXIoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGlzc3VlcnMoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IElzc3VlcnMoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGl0ZW1zKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBJdGVtcyhhdHRycyk7XG4gIH1cblxuICBzdGF0aWMga2VlcChhdHRycykge1xuICAgIHJldHVybiBuZXcgS2VlcChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMga2V5VXNhZ2UoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEtleVVzYWdlKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBsaW5lKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBMaW5lKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBsaW5lYXIoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IExpbmVhcihhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgbG9ja0RvY3VtZW50KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBMb2NrRG9jdW1lbnQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIG1hbmlmZXN0KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBNYW5pZmVzdChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgbWFyZ2luKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBNYXJnaW4oYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIG1kcChhdHRycykge1xuICAgIHJldHVybiBuZXcgTWRwKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBtZWRpdW0oYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IE1lZGl1bShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgbWVzc2FnZShhdHRycykge1xuICAgIHJldHVybiBuZXcgTWVzc2FnZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgbnVtZXJpY0VkaXQoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IE51bWVyaWNFZGl0KGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBvY2N1cihhdHRycykge1xuICAgIHJldHVybiBuZXcgT2NjdXIoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIG9pZChhdHRycykge1xuICAgIHJldHVybiBuZXcgT2lkKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBvaWRzKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBPaWRzKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBvdmVyZmxvdyhhdHRycykge1xuICAgIHJldHVybiBuZXcgT3ZlcmZsb3coYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHBhZ2VBcmVhKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBQYWdlQXJlYShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgcGFnZVNldChhdHRycykge1xuICAgIHJldHVybiBuZXcgUGFnZVNldChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgcGFyYShhdHRycykge1xuICAgIHJldHVybiBuZXcgUGFyYShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgcGFzc3dvcmRFZGl0KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBQYXNzd29yZEVkaXQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHBhdHRlcm4oYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFBhdHRlcm4oYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHBpY3R1cmUoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFBpY3R1cmUoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHByb3RvKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBQcm90byhhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgcmFkaWFsKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBSYWRpYWwoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHJlYXNvbihhdHRycykge1xuICAgIHJldHVybiBuZXcgUmVhc29uKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyByZWFzb25zKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBSZWFzb25zKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyByZWN0YW5nbGUoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFJlY3RhbmdsZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgcmVmKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBSZWZFbGVtZW50KGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBzY3JpcHQoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFNjcmlwdChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgc2V0UHJvcGVydHkoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFNldFByb3BlcnR5KGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBzaWduRGF0YShhdHRycykge1xuICAgIHJldHVybiBuZXcgU2lnbkRhdGEoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHNpZ25hdHVyZShhdHRycykge1xuICAgIHJldHVybiBuZXcgU2lnbmF0dXJlKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBzaWduaW5nKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBTaWduaW5nKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBzb2xpZChhdHRycykge1xuICAgIHJldHVybiBuZXcgU29saWQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHNwZWFrKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBTcGVhayhhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgc3RpcHBsZShhdHRycykge1xuICAgIHJldHVybiBuZXcgU3RpcHBsZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgc3ViZm9ybShhdHRycykge1xuICAgIHJldHVybiBuZXcgU3ViZm9ybShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgc3ViZm9ybVNldChhdHRycykge1xuICAgIHJldHVybiBuZXcgU3ViZm9ybVNldChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgc3ViamVjdEROKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBTdWJqZWN0RE4oYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHN1YmplY3RETnMoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFN1YmplY3RETnMoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHN1Ym1pdChhdHRycykge1xuICAgIHJldHVybiBuZXcgU3VibWl0KGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyB0ZW1wbGF0ZShhdHRycykge1xuICAgIHJldHVybiBuZXcgVGVtcGxhdGUoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHRleHQoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFRleHQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHRleHRFZGl0KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBUZXh0RWRpdChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgdGltZShhdHRycykge1xuICAgIHJldHVybiBuZXcgVGltZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgdGltZVN0YW1wKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBUaW1lU3RhbXAoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHRvb2xUaXAoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFRvb2xUaXAoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHRyYXZlcnNhbChhdHRycykge1xuICAgIHJldHVybiBuZXcgVHJhdmVyc2FsKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyB0cmF2ZXJzZShhdHRycykge1xuICAgIHJldHVybiBuZXcgVHJhdmVyc2UoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHVpKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBVaShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGUoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFZhbGlkYXRlKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyB2YWx1ZShhdHRycykge1xuICAgIHJldHVybiBuZXcgVmFsdWUoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHZhcmlhYmxlcyhhdHRycykge1xuICAgIHJldHVybiBuZXcgVmFyaWFibGVzKGF0dHJzKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuVGVtcGxhdGVOYW1lc3BhY2UgPSBUZW1wbGF0ZU5hbWVzcGFjZTtcblxuLyoqKi8gfSksXG4vKiA4MSAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5hZGRIVE1MID0gYWRkSFRNTDtcbmV4cG9ydHMuY2hlY2tEaW1lbnNpb25zID0gY2hlY2tEaW1lbnNpb25zO1xuZXhwb3J0cy5mbHVzaEhUTUwgPSBmbHVzaEhUTUw7XG5leHBvcnRzLmdldEF2YWlsYWJsZVNwYWNlID0gZ2V0QXZhaWxhYmxlU3BhY2U7XG5cbnZhciBfeGZhX29iamVjdCA9IF9fd19wZGZqc19yZXF1aXJlX18oNzUpO1xuXG52YXIgX2h0bWxfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDgyKTtcblxuZnVuY3Rpb24gY3JlYXRlTGluZShub2RlLCBjaGlsZHJlbikge1xuICByZXR1cm4ge1xuICAgIG5hbWU6IFwiZGl2XCIsXG4gICAgYXR0cmlidXRlczoge1xuICAgICAgY2xhc3M6IFtub2RlLmxheW91dCA9PT0gXCJsci10YlwiID8gXCJ4ZmFMclwiIDogXCJ4ZmFSbFwiXVxuICAgIH0sXG4gICAgY2hpbGRyZW5cbiAgfTtcbn1cblxuZnVuY3Rpb24gZmx1c2hIVE1MKG5vZGUpIHtcbiAgaWYgKCFub2RlW194ZmFfb2JqZWN0LiRleHRyYV0pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGF0dHJpYnV0ZXMgPSBub2RlW194ZmFfb2JqZWN0LiRleHRyYV0uYXR0cmlidXRlcztcbiAgY29uc3QgaHRtbCA9IHtcbiAgICBuYW1lOiBcImRpdlwiLFxuICAgIGF0dHJpYnV0ZXMsXG4gICAgY2hpbGRyZW46IG5vZGVbX3hmYV9vYmplY3QuJGV4dHJhXS5jaGlsZHJlblxuICB9O1xuXG4gIGlmIChub2RlW194ZmFfb2JqZWN0LiRleHRyYV0uZmFpbGluZ05vZGUpIHtcbiAgICBjb25zdCBodG1sRnJvbUZhaWxpbmcgPSBub2RlW194ZmFfb2JqZWN0LiRleHRyYV0uZmFpbGluZ05vZGVbX3hmYV9vYmplY3QuJGZsdXNoSFRNTF0oKTtcblxuICAgIGlmIChodG1sRnJvbUZhaWxpbmcpIHtcbiAgICAgIGlmIChub2RlLmxheW91dC5lbmRzV2l0aChcIi10YlwiKSkge1xuICAgICAgICBodG1sLmNoaWxkcmVuLnB1c2goY3JlYXRlTGluZShub2RlLCBbaHRtbEZyb21GYWlsaW5nXSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaHRtbC5jaGlsZHJlbi5wdXNoKGh0bWxGcm9tRmFpbGluZyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGh0bWwuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gaHRtbDtcbn1cblxuZnVuY3Rpb24gYWRkSFRNTChub2RlLCBodG1sLCBiYm94KSB7XG4gIGNvbnN0IGV4dHJhID0gbm9kZVtfeGZhX29iamVjdC4kZXh0cmFdO1xuICBjb25zdCBhdmFpbGFibGVTcGFjZSA9IGV4dHJhLmF2YWlsYWJsZVNwYWNlO1xuICBjb25zdCBbeCwgeSwgdywgaF0gPSBiYm94O1xuXG4gIHN3aXRjaCAobm9kZS5sYXlvdXQpIHtcbiAgICBjYXNlIFwicG9zaXRpb25cIjpcbiAgICAgIHtcbiAgICAgICAgZXh0cmEud2lkdGggPSBNYXRoLm1heChleHRyYS53aWR0aCwgeCArIHcpO1xuICAgICAgICBleHRyYS5oZWlnaHQgPSBNYXRoLm1heChleHRyYS5oZWlnaHQsIHkgKyBoKTtcbiAgICAgICAgZXh0cmEuY2hpbGRyZW4ucHVzaChodG1sKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFwibHItdGJcIjpcbiAgICBjYXNlIFwicmwtdGJcIjpcbiAgICAgIGlmICghZXh0cmEubGluZSB8fCBleHRyYS5hdHRlbXB0ID09PSAxKSB7XG4gICAgICAgIGV4dHJhLmxpbmUgPSBjcmVhdGVMaW5lKG5vZGUsIFtdKTtcbiAgICAgICAgZXh0cmEuY2hpbGRyZW4ucHVzaChleHRyYS5saW5lKTtcbiAgICAgICAgZXh0cmEubnVtYmVySW5MaW5lID0gMDtcbiAgICAgIH1cblxuICAgICAgZXh0cmEubnVtYmVySW5MaW5lICs9IDE7XG4gICAgICBleHRyYS5saW5lLmNoaWxkcmVuLnB1c2goaHRtbCk7XG5cbiAgICAgIGlmIChleHRyYS5hdHRlbXB0ID09PSAwKSB7XG4gICAgICAgIGV4dHJhLmN1cnJlbnRXaWR0aCArPSB3O1xuICAgICAgICBleHRyYS5oZWlnaHQgPSBNYXRoLm1heChleHRyYS5oZWlnaHQsIGV4dHJhLnByZXZIZWlnaHQgKyBoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4dHJhLmN1cnJlbnRXaWR0aCA9IHc7XG4gICAgICAgIGV4dHJhLnByZXZIZWlnaHQgPSBleHRyYS5oZWlnaHQ7XG4gICAgICAgIGV4dHJhLmhlaWdodCArPSBoO1xuICAgICAgICBleHRyYS5hdHRlbXB0ID0gMDtcbiAgICAgIH1cblxuICAgICAgZXh0cmEud2lkdGggPSBNYXRoLm1heChleHRyYS53aWR0aCwgZXh0cmEuY3VycmVudFdpZHRoKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcInJsLXJvd1wiOlxuICAgIGNhc2UgXCJyb3dcIjpcbiAgICAgIHtcbiAgICAgICAgZXh0cmEuY2hpbGRyZW4ucHVzaChodG1sKTtcbiAgICAgICAgZXh0cmEud2lkdGggKz0gdztcbiAgICAgICAgZXh0cmEuaGVpZ2h0ID0gTWF0aC5tYXgoZXh0cmEuaGVpZ2h0LCBoKTtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gKDAsIF9odG1sX3V0aWxzLm1lYXN1cmVUb1N0cmluZykoZXh0cmEuaGVpZ2h0KTtcblxuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGV4dHJhLmNoaWxkcmVuKSB7XG4gICAgICAgICAgY2hpbGQuYXR0cmlidXRlcy5zdHlsZS5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgXCJ0YWJsZVwiOlxuICAgICAge1xuICAgICAgICBleHRyYS53aWR0aCA9IE1hdGgubWluKGF2YWlsYWJsZVNwYWNlLndpZHRoLCBNYXRoLm1heChleHRyYS53aWR0aCwgdykpO1xuICAgICAgICBleHRyYS5oZWlnaHQgKz0gaDtcbiAgICAgICAgZXh0cmEuY2hpbGRyZW4ucHVzaChodG1sKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFwidGJcIjpcbiAgICAgIHtcbiAgICAgICAgZXh0cmEud2lkdGggPSBNYXRoLm1pbihhdmFpbGFibGVTcGFjZS53aWR0aCwgTWF0aC5tYXgoZXh0cmEud2lkdGgsIHcpKTtcbiAgICAgICAgZXh0cmEuaGVpZ2h0ICs9IGg7XG4gICAgICAgIGV4dHJhLmNoaWxkcmVuLnB1c2goaHRtbCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldEF2YWlsYWJsZVNwYWNlKG5vZGUpIHtcbiAgY29uc3QgYXZhaWxhYmxlU3BhY2UgPSBub2RlW194ZmFfb2JqZWN0LiRleHRyYV0uYXZhaWxhYmxlU3BhY2U7XG4gIGNvbnN0IG1hcmdpblYgPSBub2RlLm1hcmdpbiA/IG5vZGUubWFyZ2luLnRvcEluc2V0ICsgbm9kZS5tYXJnaW4uYm90dG9tSW5zZXQgOiAwO1xuICBjb25zdCBtYXJnaW5IID0gbm9kZS5tYXJnaW4gPyBub2RlLm1hcmdpbi5sZWZ0SW5zZXQgKyBub2RlLm1hcmdpbi5yaWdodEluc2V0IDogMDtcblxuICBzd2l0Y2ggKG5vZGUubGF5b3V0KSB7XG4gICAgY2FzZSBcImxyLXRiXCI6XG4gICAgY2FzZSBcInJsLXRiXCI6XG4gICAgICBpZiAobm9kZVtfeGZhX29iamVjdC4kZXh0cmFdLmF0dGVtcHQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB3aWR0aDogYXZhaWxhYmxlU3BhY2Uud2lkdGggLSBtYXJnaW5IIC0gbm9kZVtfeGZhX29iamVjdC4kZXh0cmFdLmN1cnJlbnRXaWR0aCxcbiAgICAgICAgICBoZWlnaHQ6IGF2YWlsYWJsZVNwYWNlLmhlaWdodCAtIG1hcmdpblYgLSBub2RlW194ZmFfb2JqZWN0LiRleHRyYV0ucHJldkhlaWdodFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aDogYXZhaWxhYmxlU3BhY2Uud2lkdGggLSBtYXJnaW5ILFxuICAgICAgICBoZWlnaHQ6IGF2YWlsYWJsZVNwYWNlLmhlaWdodCAtIG1hcmdpblYgLSBub2RlW194ZmFfb2JqZWN0LiRleHRyYV0uaGVpZ2h0XG4gICAgICB9O1xuXG4gICAgY2FzZSBcInJsLXJvd1wiOlxuICAgIGNhc2UgXCJyb3dcIjpcbiAgICAgIGNvbnN0IHdpZHRoID0gbm9kZVtfeGZhX29iamVjdC4kZXh0cmFdLmNvbHVtbldpZHRocy5zbGljZShub2RlW194ZmFfb2JqZWN0LiRleHRyYV0uY3VycmVudENvbHVtbikucmVkdWNlKChhLCB4KSA9PiBhICsgeCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoLFxuICAgICAgICBoZWlnaHQ6IGF2YWlsYWJsZVNwYWNlLmhlaWdodCAtIG1hcmdpbkhcbiAgICAgIH07XG5cbiAgICBjYXNlIFwidGFibGVcIjpcbiAgICBjYXNlIFwidGJcIjpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiBhdmFpbGFibGVTcGFjZS53aWR0aCAtIG1hcmdpbkgsXG4gICAgICAgIGhlaWdodDogYXZhaWxhYmxlU3BhY2UuaGVpZ2h0IC0gbWFyZ2luViAtIG5vZGVbX3hmYV9vYmplY3QuJGV4dHJhXS5oZWlnaHRcbiAgICAgIH07XG5cbiAgICBjYXNlIFwicG9zaXRpb25cIjpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGF2YWlsYWJsZVNwYWNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFRyYW5zZm9ybWVkQkJveChub2RlKSB7XG4gIGxldCB3ID0gbm9kZS53ID09PSBcIlwiID8gTmFOIDogbm9kZS53O1xuICBsZXQgaCA9IG5vZGUuaCA9PT0gXCJcIiA/IE5hTiA6IG5vZGUuaDtcbiAgbGV0IFtjZW50ZXJYLCBjZW50ZXJZXSA9IFswLCAwXTtcblxuICBzd2l0Y2ggKG5vZGUuYW5jaG9yVHlwZSB8fCBcIlwiKSB7XG4gICAgY2FzZSBcImJvdHRvbUNlbnRlclwiOlxuICAgICAgW2NlbnRlclgsIGNlbnRlclldID0gW3cgLyAyLCBoXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcImJvdHRvbUxlZnRcIjpcbiAgICAgIFtjZW50ZXJYLCBjZW50ZXJZXSA9IFswLCBoXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcImJvdHRvbVJpZ2h0XCI6XG4gICAgICBbY2VudGVyWCwgY2VudGVyWV0gPSBbdywgaF07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgXCJtaWRkbGVDZW50ZXJcIjpcbiAgICAgIFtjZW50ZXJYLCBjZW50ZXJZXSA9IFt3IC8gMiwgaCAvIDJdO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwibWlkZGxlTGVmdFwiOlxuICAgICAgW2NlbnRlclgsIGNlbnRlclldID0gWzAsIGggLyAyXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcIm1pZGRsZVJpZ2h0XCI6XG4gICAgICBbY2VudGVyWCwgY2VudGVyWV0gPSBbdywgaCAvIDJdO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwidG9wQ2VudGVyXCI6XG4gICAgICBbY2VudGVyWCwgY2VudGVyWV0gPSBbdyAvIDIsIDBdO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFwidG9wUmlnaHRcIjpcbiAgICAgIFtjZW50ZXJYLCBjZW50ZXJZXSA9IFt3LCAwXTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgbGV0IHgsIHk7XG5cbiAgc3dpdGNoIChub2RlLnJvdGF0ZSB8fCAwKSB7XG4gICAgY2FzZSAwOlxuICAgICAgW3gsIHldID0gWy1jZW50ZXJYLCAtY2VudGVyWV07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgOTA6XG4gICAgICBbeCwgeV0gPSBbLWNlbnRlclksIGNlbnRlclhdO1xuICAgICAgW3csIGhdID0gW2gsIC13XTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAxODA6XG4gICAgICBbeCwgeV0gPSBbY2VudGVyWCwgY2VudGVyWV07XG4gICAgICBbdywgaF0gPSBbLXcsIC1oXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAyNzA6XG4gICAgICBbeCwgeV0gPSBbY2VudGVyWSwgLWNlbnRlclhdO1xuICAgICAgW3csIGhdID0gWy1oLCB3XTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIFtub2RlLnggKyB4ICsgTWF0aC5taW4oMCwgdyksIG5vZGUueSArIHkgKyBNYXRoLm1pbigwLCBoKSwgTWF0aC5hYnModyksIE1hdGguYWJzKGgpXTtcbn1cblxuZnVuY3Rpb24gY2hlY2tEaW1lbnNpb25zKG5vZGUsIHNwYWNlKSB7XG4gIGlmIChub2RlW194ZmFfb2JqZWN0LiRnZXRUZW1wbGF0ZVJvb3RdKClbX3hmYV9vYmplY3QuJGV4dHJhXS5maXJzdFVuc3BsaXR0YWJsZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKG5vZGUudyA9PT0gMCB8fCBub2RlLmggPT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IEVSUk9SID0gMjtcblxuICBjb25zdCBwYXJlbnQgPSBub2RlW194ZmFfb2JqZWN0LiRnZXRTdWJmb3JtUGFyZW50XSgpO1xuXG4gIGNvbnN0IGF0dGVtcHQgPSBwYXJlbnRbX3hmYV9vYmplY3QuJGV4dHJhXSAmJiBwYXJlbnRbX3hmYV9vYmplY3QuJGV4dHJhXS5hdHRlbXB0IHx8IDA7XG4gIGNvbnN0IFssIHksIHcsIGhdID0gZ2V0VHJhbnNmb3JtZWRCQm94KG5vZGUpO1xuXG4gIHN3aXRjaCAocGFyZW50LmxheW91dCkge1xuICAgIGNhc2UgXCJsci10YlwiOlxuICAgIGNhc2UgXCJybC10YlwiOlxuICAgICAgaWYgKGF0dGVtcHQgPT09IDApIHtcbiAgICAgICAgaWYgKCFub2RlW194ZmFfb2JqZWN0LiRnZXRUZW1wbGF0ZVJvb3RdKClbX3hmYV9vYmplY3QuJGV4dHJhXS5ub0xheW91dEZhaWx1cmUpIHtcbiAgICAgICAgICBpZiAobm9kZS5oICE9PSBcIlwiICYmIE1hdGgucm91bmQoaCAtIHNwYWNlLmhlaWdodCkgPiBFUlJPUikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChub2RlLncgIT09IFwiXCIpIHtcbiAgICAgICAgICAgIGlmIChNYXRoLnJvdW5kKHcgLSBzcGFjZS53aWR0aCkgPD0gRVJST1IpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwYXJlbnRbX3hmYV9vYmplY3QuJGV4dHJhXS5udW1iZXJJbkxpbmUgPT09IDApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHNwYWNlLmhlaWdodCA+IEVSUk9SO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHNwYWNlLndpZHRoID4gRVJST1I7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZS53ICE9PSBcIlwiKSB7XG4gICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQodyAtIHNwYWNlLndpZHRoKSA8PSBFUlJPUjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzcGFjZS53aWR0aCA+IEVSUk9SO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZVtfeGZhX29iamVjdC4kZ2V0VGVtcGxhdGVSb290XSgpW194ZmFfb2JqZWN0LiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS5oICE9PSBcIlwiICYmIE1hdGgucm91bmQoaCAtIHNwYWNlLmhlaWdodCkgPiBFUlJPUikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlLncgPT09IFwiXCIgfHwgTWF0aC5yb3VuZCh3IC0gc3BhY2Uud2lkdGgpIDw9IEVSUk9SKSB7XG4gICAgICAgIHJldHVybiBzcGFjZS5oZWlnaHQgPiBFUlJPUjtcbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmVudFtfeGZhX29iamVjdC4kaXNUaGVyZU1vcmVXaWR0aF0oKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzcGFjZS5oZWlnaHQgPiBFUlJPUjtcblxuICAgIGNhc2UgXCJ0YWJsZVwiOlxuICAgIGNhc2UgXCJ0YlwiOlxuICAgICAgaWYgKG5vZGVbX3hmYV9vYmplY3QuJGdldFRlbXBsYXRlUm9vdF0oKVtfeGZhX29iamVjdC4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUuaCAhPT0gXCJcIiAmJiAhbm9kZVtfeGZhX29iamVjdC4kaXNTcGxpdHRhYmxlXSgpKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKGggLSBzcGFjZS5oZWlnaHQpIDw9IEVSUk9SO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS53ID09PSBcIlwiIHx8IE1hdGgucm91bmQodyAtIHNwYWNlLndpZHRoKSA8PSBFUlJPUikge1xuICAgICAgICByZXR1cm4gc3BhY2UuaGVpZ2h0ID4gRVJST1I7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJlbnRbX3hmYV9vYmplY3QuJGlzVGhlcmVNb3JlV2lkdGhdKCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3BhY2UuaGVpZ2h0ID4gRVJST1I7XG5cbiAgICBjYXNlIFwicG9zaXRpb25cIjpcbiAgICAgIGlmIChub2RlW194ZmFfb2JqZWN0LiRnZXRUZW1wbGF0ZVJvb3RdKClbX3hmYV9vYmplY3QuJGV4dHJhXS5ub0xheW91dEZhaWx1cmUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlLmggPT09IFwiXCIgfHwgTWF0aC5yb3VuZChoICsgeSAtIHNwYWNlLmhlaWdodCkgPD0gRVJST1IpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFyZWEgPSBub2RlW194ZmFfb2JqZWN0LiRnZXRUZW1wbGF0ZVJvb3RdKClbX3hmYV9vYmplY3QuJGV4dHJhXS5jdXJyZW50Q29udGVudEFyZWE7XG5cbiAgICAgIHJldHVybiBoICsgeSA+IGFyZWEuaDtcblxuICAgIGNhc2UgXCJybC1yb3dcIjpcbiAgICBjYXNlIFwicm93XCI6XG4gICAgICBpZiAobm9kZVtfeGZhX29iamVjdC4kZ2V0VGVtcGxhdGVSb290XSgpW194ZmFfb2JqZWN0LiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS5oICE9PSBcIlwiKSB7XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKGggLSBzcGFjZS5oZWlnaHQpIDw9IEVSUk9SO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKioqLyB9KSxcbi8qIDgyICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLmNvbXB1dGVCYm94ID0gY29tcHV0ZUJib3g7XG5leHBvcnRzLmNyZWF0ZVdyYXBwZXIgPSBjcmVhdGVXcmFwcGVyO1xuZXhwb3J0cy5maXhEaW1lbnNpb25zID0gZml4RGltZW5zaW9ucztcbmV4cG9ydHMuZml4VGV4dEluZGVudCA9IGZpeFRleHRJbmRlbnQ7XG5leHBvcnRzLmZpeFVSTCA9IGZpeFVSTDtcbmV4cG9ydHMuaXNQcmludE9ubHkgPSBpc1ByaW50T25seTtcbmV4cG9ydHMubGF5b3V0Q2xhc3MgPSBsYXlvdXRDbGFzcztcbmV4cG9ydHMubGF5b3V0Tm9kZSA9IGxheW91dE5vZGU7XG5leHBvcnRzLm1lYXN1cmVUb1N0cmluZyA9IG1lYXN1cmVUb1N0cmluZztcbmV4cG9ydHMuc2V0QWNjZXNzID0gc2V0QWNjZXNzO1xuZXhwb3J0cy5zZXRGb250RmFtaWx5ID0gc2V0Rm9udEZhbWlseTtcbmV4cG9ydHMuc2V0TWluTWF4RGltZW5zaW9ucyA9IHNldE1pbk1heERpbWVuc2lvbnM7XG5leHBvcnRzLnNldFBhcmEgPSBzZXRQYXJhO1xuZXhwb3J0cy50b1N0eWxlID0gdG9TdHlsZTtcblxudmFyIF94ZmFfb2JqZWN0ID0gX193X3BkZmpzX3JlcXVpcmVfXyg3NSk7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbnZhciBfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDc2KTtcblxudmFyIF9mb250cyA9IF9fd19wZGZqc19yZXF1aXJlX18oODMpO1xuXG52YXIgX3RleHQgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDg0KTtcblxuZnVuY3Rpb24gbWVhc3VyZVRvU3RyaW5nKG0pIHtcbiAgaWYgKHR5cGVvZiBtID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIFwiMHB4XCI7XG4gIH1cblxuICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihtKSA/IGAke219cHhgIDogYCR7bS50b0ZpeGVkKDIpfXB4YDtcbn1cblxuY29uc3QgY29udmVydGVycyA9IHtcbiAgYW5jaG9yVHlwZShub2RlLCBzdHlsZSkge1xuICAgIGNvbnN0IHBhcmVudCA9IG5vZGVbX3hmYV9vYmplY3QuJGdldFN1YmZvcm1QYXJlbnRdKCk7XG5cbiAgICBpZiAoIXBhcmVudCB8fCBwYXJlbnQubGF5b3V0ICYmIHBhcmVudC5sYXlvdXQgIT09IFwicG9zaXRpb25cIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghKFwidHJhbnNmb3JtXCIgaW4gc3R5bGUpKSB7XG4gICAgICBzdHlsZS50cmFuc2Zvcm0gPSBcIlwiO1xuICAgIH1cblxuICAgIHN3aXRjaCAobm9kZS5hbmNob3JUeXBlKSB7XG4gICAgICBjYXNlIFwiYm90dG9tQ2VudGVyXCI6XG4gICAgICAgIHN0eWxlLnRyYW5zZm9ybSArPSBcInRyYW5zbGF0ZSgtNTAlLCAtMTAwJSlcIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJib3R0b21MZWZ0XCI6XG4gICAgICAgIHN0eWxlLnRyYW5zZm9ybSArPSBcInRyYW5zbGF0ZSgwLC0xMDAlKVwiO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcImJvdHRvbVJpZ2h0XCI6XG4gICAgICAgIHN0eWxlLnRyYW5zZm9ybSArPSBcInRyYW5zbGF0ZSgtMTAwJSwtMTAwJSlcIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJtaWRkbGVDZW50ZXJcIjpcbiAgICAgICAgc3R5bGUudHJhbnNmb3JtICs9IFwidHJhbnNsYXRlKC01MCUsLTUwJSlcIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJtaWRkbGVMZWZ0XCI6XG4gICAgICAgIHN0eWxlLnRyYW5zZm9ybSArPSBcInRyYW5zbGF0ZSgwLC01MCUpXCI7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwibWlkZGxlUmlnaHRcIjpcbiAgICAgICAgc3R5bGUudHJhbnNmb3JtICs9IFwidHJhbnNsYXRlKC0xMDAlLC01MCUpXCI7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwidG9wQ2VudGVyXCI6XG4gICAgICAgIHN0eWxlLnRyYW5zZm9ybSArPSBcInRyYW5zbGF0ZSgtNTAlLDApXCI7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFwidG9wUmlnaHRcIjpcbiAgICAgICAgc3R5bGUudHJhbnNmb3JtICs9IFwidHJhbnNsYXRlKC0xMDAlLDApXCI7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfSxcblxuICBkaW1lbnNpb25zKG5vZGUsIHN0eWxlKSB7XG4gICAgY29uc3QgcGFyZW50ID0gbm9kZVtfeGZhX29iamVjdC4kZ2V0U3ViZm9ybVBhcmVudF0oKTtcblxuICAgIGxldCB3aWR0aCA9IG5vZGUudztcbiAgICBjb25zdCBoZWlnaHQgPSBub2RlLmg7XG5cbiAgICBpZiAocGFyZW50LmxheW91dCAmJiBwYXJlbnQubGF5b3V0LmluY2x1ZGVzKFwicm93XCIpKSB7XG4gICAgICBjb25zdCBleHRyYSA9IHBhcmVudFtfeGZhX29iamVjdC4kZXh0cmFdO1xuICAgICAgY29uc3QgY29sU3BhbiA9IG5vZGUuY29sU3BhbjtcbiAgICAgIGxldCB3O1xuXG4gICAgICBpZiAoY29sU3BhbiA9PT0gLTEpIHtcbiAgICAgICAgdyA9IGV4dHJhLmNvbHVtbldpZHRocy5zbGljZShleHRyYS5jdXJyZW50Q29sdW1uKS5yZWR1Y2UoKGEsIHgpID0+IGEgKyB4LCAwKTtcbiAgICAgICAgZXh0cmEuY3VycmVudENvbHVtbiA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3ID0gZXh0cmEuY29sdW1uV2lkdGhzLnNsaWNlKGV4dHJhLmN1cnJlbnRDb2x1bW4sIGV4dHJhLmN1cnJlbnRDb2x1bW4gKyBjb2xTcGFuKS5yZWR1Y2UoKGEsIHgpID0+IGEgKyB4LCAwKTtcbiAgICAgICAgZXh0cmEuY3VycmVudENvbHVtbiA9IChleHRyYS5jdXJyZW50Q29sdW1uICsgbm9kZS5jb2xTcGFuKSAlIGV4dHJhLmNvbHVtbldpZHRocy5sZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNOYU4odykpIHtcbiAgICAgICAgd2lkdGggPSBub2RlLncgPSB3O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh3aWR0aCAhPT0gXCJcIikge1xuICAgICAgc3R5bGUud2lkdGggPSBtZWFzdXJlVG9TdHJpbmcod2lkdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHlsZS53aWR0aCA9IFwiYXV0b1wiO1xuICAgIH1cblxuICAgIGlmIChoZWlnaHQgIT09IFwiXCIpIHtcbiAgICAgIHN0eWxlLmhlaWdodCA9IG1lYXN1cmVUb1N0cmluZyhoZWlnaHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHlsZS5oZWlnaHQgPSBcImF1dG9cIjtcbiAgICB9XG4gIH0sXG5cbiAgcG9zaXRpb24obm9kZSwgc3R5bGUpIHtcbiAgICBjb25zdCBwYXJlbnQgPSBub2RlW194ZmFfb2JqZWN0LiRnZXRTdWJmb3JtUGFyZW50XSgpO1xuXG4gICAgaWYgKHBhcmVudCAmJiBwYXJlbnQubGF5b3V0ICYmIHBhcmVudC5sYXlvdXQgIT09IFwicG9zaXRpb25cIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuICAgIHN0eWxlLmxlZnQgPSBtZWFzdXJlVG9TdHJpbmcobm9kZS54KTtcbiAgICBzdHlsZS50b3AgPSBtZWFzdXJlVG9TdHJpbmcobm9kZS55KTtcbiAgfSxcblxuICByb3RhdGUobm9kZSwgc3R5bGUpIHtcbiAgICBpZiAobm9kZS5yb3RhdGUpIHtcbiAgICAgIGlmICghKFwidHJhbnNmb3JtXCIgaW4gc3R5bGUpKSB7XG4gICAgICAgIHN0eWxlLnRyYW5zZm9ybSA9IFwiXCI7XG4gICAgICB9XG5cbiAgICAgIHN0eWxlLnRyYW5zZm9ybSArPSBgcm90YXRlKC0ke25vZGUucm90YXRlfWRlZylgO1xuICAgICAgc3R5bGUudHJhbnNmb3JtT3JpZ2luID0gXCJ0b3AgbGVmdFwiO1xuICAgIH1cbiAgfSxcblxuICBwcmVzZW5jZShub2RlLCBzdHlsZSkge1xuICAgIHN3aXRjaCAobm9kZS5wcmVzZW5jZSkge1xuICAgICAgY2FzZSBcImludmlzaWJsZVwiOlxuICAgICAgICBzdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJoaWRkZW5cIjpcbiAgICAgIGNhc2UgXCJpbmFjdGl2ZVwiOlxuICAgICAgICBzdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfSxcblxuICBoQWxpZ24obm9kZSwgc3R5bGUpIHtcbiAgICBpZiAobm9kZVtfeGZhX29iamVjdC4kbm9kZU5hbWVdID09PSBcInBhcmFcIikge1xuICAgICAgc3dpdGNoIChub2RlLmhBbGlnbikge1xuICAgICAgICBjYXNlIFwianVzdGlmeUFsbFwiOlxuICAgICAgICAgIHN0eWxlLnRleHRBbGlnbiA9IFwianVzdGlmeS1hbGxcIjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwicmFkaXhcIjpcbiAgICAgICAgICBzdHlsZS50ZXh0QWxpZ24gPSBcImxlZnRcIjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHN0eWxlLnRleHRBbGlnbiA9IG5vZGUuaEFsaWduO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzd2l0Y2ggKG5vZGUuaEFsaWduKSB7XG4gICAgICAgIGNhc2UgXCJsZWZ0XCI6XG4gICAgICAgICAgc3R5bGUuYWxpZ25TZWxmID0gXCJzdGFydFwiO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJjZW50ZXJcIjpcbiAgICAgICAgICBzdHlsZS5hbGlnblNlbGYgPSBcImNlbnRlclwiO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJyaWdodFwiOlxuICAgICAgICAgIHN0eWxlLmFsaWduU2VsZiA9IFwiZW5kXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1hcmdpbihub2RlLCBzdHlsZSkge1xuICAgIGlmIChub2RlLm1hcmdpbikge1xuICAgICAgc3R5bGUubWFyZ2luID0gbm9kZS5tYXJnaW5bX3hmYV9vYmplY3QuJHRvU3R5bGVdKCkubWFyZ2luO1xuICAgIH1cbiAgfVxuXG59O1xuXG5mdW5jdGlvbiBzZXRNaW5NYXhEaW1lbnNpb25zKG5vZGUsIHN0eWxlKSB7XG4gIGNvbnN0IHBhcmVudCA9IG5vZGVbX3hmYV9vYmplY3QuJGdldFN1YmZvcm1QYXJlbnRdKCk7XG5cbiAgaWYgKHBhcmVudC5sYXlvdXQgPT09IFwicG9zaXRpb25cIikge1xuICAgIGlmIChub2RlLm1pblcgPiAwKSB7XG4gICAgICBzdHlsZS5taW5XaWR0aCA9IG1lYXN1cmVUb1N0cmluZyhub2RlLm1pblcpO1xuICAgIH1cblxuICAgIGlmIChub2RlLm1heFcgPiAwKSB7XG4gICAgICBzdHlsZS5tYXhXaWR0aCA9IG1lYXN1cmVUb1N0cmluZyhub2RlLm1heFcpO1xuICAgIH1cblxuICAgIGlmIChub2RlLm1pbkggPiAwKSB7XG4gICAgICBzdHlsZS5taW5IZWlnaHQgPSBtZWFzdXJlVG9TdHJpbmcobm9kZS5taW5IKTtcbiAgICB9XG5cbiAgICBpZiAobm9kZS5tYXhIID4gMCkge1xuICAgICAgc3R5bGUubWF4SGVpZ2h0ID0gbWVhc3VyZVRvU3RyaW5nKG5vZGUubWF4SCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGxheW91dFRleHQodGV4dCwgeGZhRm9udCwgbWFyZ2luLCBsaW5lSGVpZ2h0LCBmb250RmluZGVyLCB3aWR0aCkge1xuICBjb25zdCBtZWFzdXJlID0gbmV3IF90ZXh0LlRleHRNZWFzdXJlKHhmYUZvbnQsIG1hcmdpbiwgbGluZUhlaWdodCwgZm9udEZpbmRlcik7XG5cbiAgaWYgKHR5cGVvZiB0ZXh0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgbWVhc3VyZS5hZGRTdHJpbmcodGV4dCk7XG4gIH0gZWxzZSB7XG4gICAgdGV4dFtfeGZhX29iamVjdC4kcHVzaEdseXBoc10obWVhc3VyZSk7XG4gIH1cblxuICByZXR1cm4gbWVhc3VyZS5jb21wdXRlKHdpZHRoKTtcbn1cblxuZnVuY3Rpb24gbGF5b3V0Tm9kZShub2RlLCBhdmFpbGFibGVTcGFjZSkge1xuICBsZXQgaGVpZ2h0ID0gbnVsbDtcbiAgbGV0IHdpZHRoID0gbnVsbDtcbiAgbGV0IGlzQnJva2VuID0gZmFsc2U7XG5cbiAgaWYgKCghbm9kZS53IHx8ICFub2RlLmgpICYmIG5vZGUudmFsdWUpIHtcbiAgICBsZXQgbWFyZ2luSCA9IDA7XG4gICAgbGV0IG1hcmdpblYgPSAwO1xuXG4gICAgaWYgKG5vZGUubWFyZ2luKSB7XG4gICAgICBtYXJnaW5IID0gbm9kZS5tYXJnaW4ubGVmdEluc2V0ICsgbm9kZS5tYXJnaW4ucmlnaHRJbnNldDtcbiAgICAgIG1hcmdpblYgPSBub2RlLm1hcmdpbi50b3BJbnNldCArIG5vZGUubWFyZ2luLmJvdHRvbUluc2V0O1xuICAgIH1cblxuICAgIGxldCBsaW5lSGVpZ2h0ID0gbnVsbDtcbiAgICBsZXQgbWFyZ2luID0gbnVsbDtcblxuICAgIGlmIChub2RlLnBhcmEpIHtcbiAgICAgIG1hcmdpbiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICBsaW5lSGVpZ2h0ID0gbm9kZS5wYXJhLmxpbmVIZWlnaHQgPT09IFwiXCIgPyBudWxsIDogbm9kZS5wYXJhLmxpbmVIZWlnaHQ7XG4gICAgICBtYXJnaW4udG9wID0gbm9kZS5wYXJhLnNwYWNlQWJvdmUgPT09IFwiXCIgPyAwIDogbm9kZS5wYXJhLnNwYWNlQWJvdmU7XG4gICAgICBtYXJnaW4uYm90dG9tID0gbm9kZS5wYXJhLnNwYWNlQmVsb3cgPT09IFwiXCIgPyAwIDogbm9kZS5wYXJhLnNwYWNlQmVsb3c7XG4gICAgICBtYXJnaW4ubGVmdCA9IG5vZGUucGFyYS5tYXJnaW5MZWZ0ID09PSBcIlwiID8gMCA6IG5vZGUucGFyYS5tYXJnaW5MZWZ0O1xuICAgICAgbWFyZ2luLnJpZ2h0ID0gbm9kZS5wYXJhLm1hcmdpblJpZ2h0ID09PSBcIlwiID8gMCA6IG5vZGUucGFyYS5tYXJnaW5SaWdodDtcbiAgICB9XG5cbiAgICBsZXQgZm9udCA9IG5vZGUuZm9udDtcblxuICAgIGlmICghZm9udCkge1xuICAgICAgY29uc3Qgcm9vdCA9IG5vZGVbX3hmYV9vYmplY3QuJGdldFRlbXBsYXRlUm9vdF0oKTtcblxuICAgICAgbGV0IHBhcmVudCA9IG5vZGVbX3hmYV9vYmplY3QuJGdldFBhcmVudF0oKTtcblxuICAgICAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQgIT09IHJvb3QpIHtcbiAgICAgICAgaWYgKHBhcmVudC5mb250KSB7XG4gICAgICAgICAgZm9udCA9IHBhcmVudC5mb250O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFyZW50ID0gcGFyZW50W194ZmFfb2JqZWN0LiRnZXRQYXJlbnRdKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbWF4V2lkdGggPSAoIW5vZGUudyA/IGF2YWlsYWJsZVNwYWNlLndpZHRoIDogbm9kZS53KSAtIG1hcmdpbkg7XG4gICAgY29uc3QgZm9udEZpbmRlciA9IG5vZGVbX3hmYV9vYmplY3QuJGdsb2JhbERhdGFdLmZvbnRGaW5kZXI7XG5cbiAgICBpZiAobm9kZS52YWx1ZS5leERhdGEgJiYgbm9kZS52YWx1ZS5leERhdGFbX3hmYV9vYmplY3QuJGNvbnRlbnRdICYmIG5vZGUudmFsdWUuZXhEYXRhLmNvbnRlbnRUeXBlID09PSBcInRleHQvaHRtbFwiKSB7XG4gICAgICBjb25zdCByZXMgPSBsYXlvdXRUZXh0KG5vZGUudmFsdWUuZXhEYXRhW194ZmFfb2JqZWN0LiRjb250ZW50XSwgZm9udCwgbWFyZ2luLCBsaW5lSGVpZ2h0LCBmb250RmluZGVyLCBtYXhXaWR0aCk7XG4gICAgICB3aWR0aCA9IHJlcy53aWR0aDtcbiAgICAgIGhlaWdodCA9IHJlcy5oZWlnaHQ7XG4gICAgICBpc0Jyb2tlbiA9IHJlcy5pc0Jyb2tlbjtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdGV4dCA9IG5vZGUudmFsdWVbX3hmYV9vYmplY3QuJHRleHRdKCk7XG5cbiAgICAgIGlmICh0ZXh0KSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGxheW91dFRleHQodGV4dCwgZm9udCwgbWFyZ2luLCBsaW5lSGVpZ2h0LCBmb250RmluZGVyLCBtYXhXaWR0aCk7XG4gICAgICAgIHdpZHRoID0gcmVzLndpZHRoO1xuICAgICAgICBoZWlnaHQgPSByZXMuaGVpZ2h0O1xuICAgICAgICBpc0Jyb2tlbiA9IHJlcy5pc0Jyb2tlbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAod2lkdGggIT09IG51bGwgJiYgIW5vZGUudykge1xuICAgICAgd2lkdGggKz0gbWFyZ2luSDtcbiAgICB9XG5cbiAgICBpZiAoaGVpZ2h0ICE9PSBudWxsICYmICFub2RlLmgpIHtcbiAgICAgIGhlaWdodCArPSBtYXJnaW5WO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdzogd2lkdGgsXG4gICAgaDogaGVpZ2h0LFxuICAgIGlzQnJva2VuXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVCYm94KG5vZGUsIGh0bWwsIGF2YWlsYWJsZVNwYWNlKSB7XG4gIGxldCBiYm94O1xuXG4gIGlmIChub2RlLncgIT09IFwiXCIgJiYgbm9kZS5oICE9PSBcIlwiKSB7XG4gICAgYmJveCA9IFtub2RlLngsIG5vZGUueSwgbm9kZS53LCBub2RlLmhdO1xuICB9IGVsc2Uge1xuICAgIGlmICghYXZhaWxhYmxlU3BhY2UpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGxldCB3aWR0aCA9IG5vZGUudztcblxuICAgIGlmICh3aWR0aCA9PT0gXCJcIikge1xuICAgICAgaWYgKG5vZGUubWF4VyA9PT0gMCkge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBub2RlW194ZmFfb2JqZWN0LiRnZXRTdWJmb3JtUGFyZW50XSgpO1xuXG4gICAgICAgIGlmIChwYXJlbnQubGF5b3V0ID09PSBcInBvc2l0aW9uXCIgJiYgcGFyZW50LncgIT09IFwiXCIpIHtcbiAgICAgICAgICB3aWR0aCA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2lkdGggPSBub2RlLm1pblc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpZHRoID0gTWF0aC5taW4obm9kZS5tYXhXLCBhdmFpbGFibGVTcGFjZS53aWR0aCk7XG4gICAgICB9XG5cbiAgICAgIGh0bWwuYXR0cmlidXRlcy5zdHlsZS53aWR0aCA9IG1lYXN1cmVUb1N0cmluZyh3aWR0aCk7XG4gICAgfVxuXG4gICAgbGV0IGhlaWdodCA9IG5vZGUuaDtcblxuICAgIGlmIChoZWlnaHQgPT09IFwiXCIpIHtcbiAgICAgIGlmIChub2RlLm1heEggPT09IDApIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gbm9kZVtfeGZhX29iamVjdC4kZ2V0U3ViZm9ybVBhcmVudF0oKTtcblxuICAgICAgICBpZiAocGFyZW50LmxheW91dCA9PT0gXCJwb3NpdGlvblwiICYmIHBhcmVudC5oICE9PSBcIlwiKSB7XG4gICAgICAgICAgaGVpZ2h0ID0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoZWlnaHQgPSBub2RlLm1pbkg7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhlaWdodCA9IE1hdGgubWluKG5vZGUubWF4SCwgYXZhaWxhYmxlU3BhY2UuaGVpZ2h0KTtcbiAgICAgIH1cblxuICAgICAgaHRtbC5hdHRyaWJ1dGVzLnN0eWxlLmhlaWdodCA9IG1lYXN1cmVUb1N0cmluZyhoZWlnaHQpO1xuICAgIH1cblxuICAgIGJib3ggPSBbbm9kZS54LCBub2RlLnksIHdpZHRoLCBoZWlnaHRdO1xuICB9XG5cbiAgcmV0dXJuIGJib3g7XG59XG5cbmZ1bmN0aW9uIGZpeERpbWVuc2lvbnMobm9kZSkge1xuICBjb25zdCBwYXJlbnQgPSBub2RlW194ZmFfb2JqZWN0LiRnZXRTdWJmb3JtUGFyZW50XSgpO1xuXG4gIGlmIChwYXJlbnQubGF5b3V0ICYmIHBhcmVudC5sYXlvdXQuaW5jbHVkZXMoXCJyb3dcIikpIHtcbiAgICBjb25zdCBleHRyYSA9IHBhcmVudFtfeGZhX29iamVjdC4kZXh0cmFdO1xuICAgIGNvbnN0IGNvbFNwYW4gPSBub2RlLmNvbFNwYW47XG4gICAgbGV0IHdpZHRoO1xuXG4gICAgaWYgKGNvbFNwYW4gPT09IC0xKSB7XG4gICAgICB3aWR0aCA9IGV4dHJhLmNvbHVtbldpZHRocy5zbGljZShleHRyYS5jdXJyZW50Q29sdW1uKS5yZWR1Y2UoKGEsIHcpID0+IGEgKyB3LCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2lkdGggPSBleHRyYS5jb2x1bW5XaWR0aHMuc2xpY2UoZXh0cmEuY3VycmVudENvbHVtbiwgZXh0cmEuY3VycmVudENvbHVtbiArIGNvbFNwYW4pLnJlZHVjZSgoYSwgdykgPT4gYSArIHcsIDApO1xuICAgIH1cblxuICAgIGlmICghaXNOYU4od2lkdGgpKSB7XG4gICAgICBub2RlLncgPSB3aWR0aDtcbiAgICB9XG4gIH1cblxuICBpZiAocGFyZW50LmxheW91dCAmJiBwYXJlbnQubGF5b3V0ICE9PSBcInBvc2l0aW9uXCIpIHtcbiAgICBub2RlLnggPSBub2RlLnkgPSAwO1xuICB9XG5cbiAgaWYgKG5vZGUubGF5b3V0ID09PSBcInRhYmxlXCIpIHtcbiAgICBpZiAobm9kZS53ID09PSBcIlwiICYmIEFycmF5LmlzQXJyYXkobm9kZS5jb2x1bW5XaWR0aHMpKSB7XG4gICAgICBub2RlLncgPSBub2RlLmNvbHVtbldpZHRocy5yZWR1Y2UoKGEsIHgpID0+IGEgKyB4LCAwKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbGF5b3V0Q2xhc3Mobm9kZSkge1xuICBzd2l0Y2ggKG5vZGUubGF5b3V0KSB7XG4gICAgY2FzZSBcInBvc2l0aW9uXCI6XG4gICAgICByZXR1cm4gXCJ4ZmFQb3NpdGlvblwiO1xuXG4gICAgY2FzZSBcImxyLXRiXCI6XG4gICAgICByZXR1cm4gXCJ4ZmFMclRiXCI7XG5cbiAgICBjYXNlIFwicmwtcm93XCI6XG4gICAgICByZXR1cm4gXCJ4ZmFSbFJvd1wiO1xuXG4gICAgY2FzZSBcInJsLXRiXCI6XG4gICAgICByZXR1cm4gXCJ4ZmFSbFRiXCI7XG5cbiAgICBjYXNlIFwicm93XCI6XG4gICAgICByZXR1cm4gXCJ4ZmFSb3dcIjtcblxuICAgIGNhc2UgXCJ0YWJsZVwiOlxuICAgICAgcmV0dXJuIFwieGZhVGFibGVcIjtcblxuICAgIGNhc2UgXCJ0YlwiOlxuICAgICAgcmV0dXJuIFwieGZhVGJcIjtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gXCJ4ZmFQb3NpdGlvblwiO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvU3R5bGUobm9kZSwgLi4ubmFtZXMpIHtcbiAgY29uc3Qgc3R5bGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIGZvciAoY29uc3QgbmFtZSBvZiBuYW1lcykge1xuICAgIGNvbnN0IHZhbHVlID0gbm9kZVtuYW1lXTtcblxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGNvbnZlcnRlcnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgIGNvbnZlcnRlcnNbbmFtZV0obm9kZSwgc3R5bGUpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgX3hmYV9vYmplY3QuWEZBT2JqZWN0KSB7XG4gICAgICBjb25zdCBuZXdTdHlsZSA9IHZhbHVlW194ZmFfb2JqZWN0LiR0b1N0eWxlXSgpO1xuXG4gICAgICBpZiAobmV3U3R5bGUpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzdHlsZSwgbmV3U3R5bGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKGAoREVCVUcpIC0gWEZBIC0gc3R5bGUgZm9yICR7bmFtZX0gbm90IGltcGxlbWVudGVkIHlldGApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdHlsZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlV3JhcHBlcihub2RlLCBodG1sKSB7XG4gIGNvbnN0IHtcbiAgICBhdHRyaWJ1dGVzXG4gIH0gPSBodG1sO1xuICBjb25zdCB7XG4gICAgc3R5bGVcbiAgfSA9IGF0dHJpYnV0ZXM7XG4gIGNvbnN0IHdyYXBwZXIgPSB7XG4gICAgbmFtZTogXCJkaXZcIixcbiAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICBjbGFzczogW1wieGZhV3JhcHBlclwiXSxcbiAgICAgIHN0eWxlOiBPYmplY3QuY3JlYXRlKG51bGwpXG4gICAgfSxcbiAgICBjaGlsZHJlbjogW11cbiAgfTtcbiAgYXR0cmlidXRlcy5jbGFzcy5wdXNoKFwieGZhV3JhcHBlZFwiKTtcblxuICBpZiAobm9kZS5ib3JkZXIpIHtcbiAgICBjb25zdCB7XG4gICAgICB3aWR0aHMsXG4gICAgICBpbnNldHNcbiAgICB9ID0gbm9kZS5ib3JkZXJbX3hmYV9vYmplY3QuJGV4dHJhXTtcbiAgICBsZXQgd2lkdGgsIGhlaWdodDtcbiAgICBsZXQgdG9wID0gaW5zZXRzWzBdO1xuICAgIGxldCBsZWZ0ID0gaW5zZXRzWzNdO1xuICAgIGNvbnN0IGluc2V0c0ggPSBpbnNldHNbMF0gKyBpbnNldHNbMl07XG4gICAgY29uc3QgaW5zZXRzVyA9IGluc2V0c1sxXSArIGluc2V0c1szXTtcblxuICAgIHN3aXRjaCAobm9kZS5ib3JkZXIuaGFuZCkge1xuICAgICAgY2FzZSBcImV2ZW5cIjpcbiAgICAgICAgdG9wIC09IHdpZHRoc1swXSAvIDI7XG4gICAgICAgIGxlZnQgLT0gd2lkdGhzWzNdIC8gMjtcbiAgICAgICAgd2lkdGggPSBgY2FsYygxMDAlICsgJHsod2lkdGhzWzFdICsgd2lkdGhzWzNdKSAvIDIgLSBpbnNldHNXfXB4KWA7XG4gICAgICAgIGhlaWdodCA9IGBjYWxjKDEwMCUgKyAkeyh3aWR0aHNbMF0gKyB3aWR0aHNbMl0pIC8gMiAtIGluc2V0c0h9cHgpYDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgXCJsZWZ0XCI6XG4gICAgICAgIHRvcCAtPSB3aWR0aHNbMF07XG4gICAgICAgIGxlZnQgLT0gd2lkdGhzWzNdO1xuICAgICAgICB3aWR0aCA9IGBjYWxjKDEwMCUgKyAke3dpZHRoc1sxXSArIHdpZHRoc1szXSAtIGluc2V0c1d9cHgpYDtcbiAgICAgICAgaGVpZ2h0ID0gYGNhbGMoMTAwJSArICR7d2lkdGhzWzBdICsgd2lkdGhzWzJdIC0gaW5zZXRzSH1weClgO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBcInJpZ2h0XCI6XG4gICAgICAgIHdpZHRoID0gaW5zZXRzVyA/IGBjYWxjKDEwMCUgLSAke2luc2V0c1d9cHgpYCA6IFwiMTAwJVwiO1xuICAgICAgICBoZWlnaHQgPSBpbnNldHNIID8gYGNhbGMoMTAwJSAtICR7aW5zZXRzSH1weClgIDogXCIxMDAlXCI7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBbXCJ4ZmFCb3JkZXJcIl07XG5cbiAgICBpZiAoaXNQcmludE9ubHkobm9kZS5ib3JkZXIpKSB7XG4gICAgICBjbGFzc05hbWVzLnB1c2goXCJ4ZmFQcmludE9ubHlcIik7XG4gICAgfVxuXG4gICAgY29uc3QgYm9yZGVyID0ge1xuICAgICAgbmFtZTogXCJkaXZcIixcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgY2xhc3M6IGNsYXNzTmFtZXMsXG4gICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgdG9wOiBgJHt0b3B9cHhgLFxuICAgICAgICAgIGxlZnQ6IGAke2xlZnR9cHhgLFxuICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgIGhlaWdodFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2hpbGRyZW46IFtdXG4gICAgfTtcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIFtcImJvcmRlclwiLCBcImJvcmRlcldpZHRoXCIsIFwiYm9yZGVyQ29sb3JcIiwgXCJib3JkZXJSYWRpdXNcIiwgXCJib3JkZXJTdHlsZVwiXSkge1xuICAgICAgaWYgKHN0eWxlW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBib3JkZXIuYXR0cmlidXRlcy5zdHlsZVtrZXldID0gc3R5bGVba2V5XTtcbiAgICAgICAgZGVsZXRlIHN0eWxlW2tleV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgd3JhcHBlci5jaGlsZHJlbi5wdXNoKGJvcmRlciwgaHRtbCk7XG4gIH0gZWxzZSB7XG4gICAgd3JhcHBlci5jaGlsZHJlbi5wdXNoKGh0bWwpO1xuICB9XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgW1wiYmFja2dyb3VuZFwiLCBcImJhY2tncm91bmRDbGlwXCIsIFwidG9wXCIsIFwibGVmdFwiLCBcIndpZHRoXCIsIFwiaGVpZ2h0XCIsIFwibWluV2lkdGhcIiwgXCJtaW5IZWlnaHRcIiwgXCJtYXhXaWR0aFwiLCBcIm1heEhlaWdodFwiLCBcInRyYW5zZm9ybVwiLCBcInRyYW5zZm9ybU9yaWdpblwiLCBcInZpc2liaWxpdHlcIl0pIHtcbiAgICBpZiAoc3R5bGVba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB3cmFwcGVyLmF0dHJpYnV0ZXMuc3R5bGVba2V5XSA9IHN0eWxlW2tleV07XG4gICAgICBkZWxldGUgc3R5bGVba2V5XTtcbiAgICB9XG4gIH1cblxuICBpZiAoc3R5bGUucG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIikge1xuICAgIHdyYXBwZXIuYXR0cmlidXRlcy5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcbiAgfSBlbHNlIHtcbiAgICB3cmFwcGVyLmF0dHJpYnV0ZXMuc3R5bGUucG9zaXRpb24gPSBcInJlbGF0aXZlXCI7XG4gIH1cblxuICBkZWxldGUgc3R5bGUucG9zaXRpb247XG5cbiAgaWYgKHN0eWxlLmFsaWduU2VsZikge1xuICAgIHdyYXBwZXIuYXR0cmlidXRlcy5zdHlsZS5hbGlnblNlbGYgPSBzdHlsZS5hbGlnblNlbGY7XG4gICAgZGVsZXRlIHN0eWxlLmFsaWduU2VsZjtcbiAgfVxuXG4gIHJldHVybiB3cmFwcGVyO1xufVxuXG5mdW5jdGlvbiBmaXhUZXh0SW5kZW50KHN0eWxlcykge1xuICBjb25zdCBpbmRlbnQgPSAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KShzdHlsZXMudGV4dEluZGVudCwgXCIwcHhcIik7XG5cbiAgaWYgKGluZGVudCA+PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgYWxpZ24gPSBzdHlsZXMudGV4dEFsaWduID09PSBcInJpZ2h0XCIgPyBcInJpZ2h0XCIgOiBcImxlZnRcIjtcbiAgY29uc3QgbmFtZSA9IFwicGFkZGluZ1wiICsgKGFsaWduID09PSBcImxlZnRcIiA/IFwiTGVmdFwiIDogXCJSaWdodFwiKTtcbiAgY29uc3QgcGFkZGluZyA9ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKHN0eWxlc1tuYW1lXSwgXCIwcHhcIik7XG4gIHN0eWxlc1tuYW1lXSA9IGAke3BhZGRpbmcgLSBpbmRlbnR9cHhgO1xufVxuXG5mdW5jdGlvbiBzZXRBY2Nlc3Mobm9kZSwgY2xhc3NOYW1lcykge1xuICBzd2l0Y2ggKG5vZGUuYWNjZXNzKSB7XG4gICAgY2FzZSBcIm5vbkludGVyYWN0aXZlXCI6XG4gICAgICBjbGFzc05hbWVzLnB1c2goXCJ4ZmFOb25JbnRlcmFjdGl2ZVwiKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcInJlYWRPbmx5XCI6XG4gICAgICBjbGFzc05hbWVzLnB1c2goXCJ4ZmFSZWFkT25seVwiKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBcInByb3RlY3RlZFwiOlxuICAgICAgY2xhc3NOYW1lcy5wdXNoKFwieGZhRGlzYWJsZWRcIik7XG4gICAgICBicmVhaztcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1ByaW50T25seShub2RlKSB7XG4gIHJldHVybiBub2RlLnJlbGV2YW50Lmxlbmd0aCA+IDAgJiYgIW5vZGUucmVsZXZhbnRbMF0uZXhjbHVkZWQgJiYgbm9kZS5yZWxldmFudFswXS52aWV3bmFtZSA9PT0gXCJwcmludFwiO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50UGFyYShub2RlKSB7XG4gIGNvbnN0IHN0YWNrID0gbm9kZVtfeGZhX29iamVjdC4kZ2V0VGVtcGxhdGVSb290XSgpW194ZmFfb2JqZWN0LiRleHRyYV0ucGFyYVN0YWNrO1xuXG4gIHJldHVybiBzdGFjay5sZW5ndGggPyBzdGFja1tzdGFjay5sZW5ndGggLSAxXSA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIHNldFBhcmEobm9kZSwgbm9kZVN0eWxlLCB2YWx1ZSkge1xuICBpZiAodmFsdWUuYXR0cmlidXRlcy5jbGFzcyAmJiB2YWx1ZS5hdHRyaWJ1dGVzLmNsYXNzLmluY2x1ZGVzKFwieGZhUmljaFwiKSkge1xuICAgIGlmIChub2RlU3R5bGUpIHtcbiAgICAgIGlmIChub2RlLmggPT09IFwiXCIpIHtcbiAgICAgICAgbm9kZVN0eWxlLmhlaWdodCA9IFwiYXV0b1wiO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS53ID09PSBcIlwiKSB7XG4gICAgICAgIG5vZGVTdHlsZS53aWR0aCA9IFwiYXV0b1wiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBhcmEgPSBnZXRDdXJyZW50UGFyYShub2RlKTtcblxuICAgIGlmIChwYXJhKSB7XG4gICAgICBjb25zdCB2YWx1ZVN0eWxlID0gdmFsdWUuYXR0cmlidXRlcy5zdHlsZTtcbiAgICAgIHZhbHVlU3R5bGUuZGlzcGxheSA9IFwiZmxleFwiO1xuICAgICAgdmFsdWVTdHlsZS5mbGV4RGlyZWN0aW9uID0gXCJjb2x1bW5cIjtcblxuICAgICAgc3dpdGNoIChwYXJhLnZBbGlnbikge1xuICAgICAgICBjYXNlIFwidG9wXCI6XG4gICAgICAgICAgdmFsdWVTdHlsZS5qdXN0aWZ5Q29udGVudCA9IFwic3RhcnRcIjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiYm90dG9tXCI6XG4gICAgICAgICAgdmFsdWVTdHlsZS5qdXN0aWZ5Q29udGVudCA9IFwiZW5kXCI7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIm1pZGRsZVwiOlxuICAgICAgICAgIHZhbHVlU3R5bGUuanVzdGlmeUNvbnRlbnQgPSBcImNlbnRlclwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXJhU3R5bGUgPSBwYXJhW194ZmFfb2JqZWN0LiR0b1N0eWxlXSgpO1xuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMocGFyYVN0eWxlKSkge1xuICAgICAgICBpZiAoIShrZXkgaW4gdmFsdWVTdHlsZSkpIHtcbiAgICAgICAgICB2YWx1ZVN0eWxlW2tleV0gPSB2YWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0Rm9udEZhbWlseSh4ZmFGb250LCBub2RlLCBmb250RmluZGVyLCBzdHlsZSkge1xuICBpZiAoIWZvbnRGaW5kZXIpIHtcbiAgICBkZWxldGUgc3R5bGUuZm9udEZhbWlseTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBuYW1lID0gKDAsIF91dGlscy5zdHJpcFF1b3RlcykoeGZhRm9udC50eXBlZmFjZSk7XG4gIHN0eWxlLmZvbnRGYW1pbHkgPSBgXCIke25hbWV9XCJgO1xuICBjb25zdCB0eXBlZmFjZSA9IGZvbnRGaW5kZXIuZmluZChuYW1lKTtcblxuICBpZiAodHlwZWZhY2UpIHtcbiAgICBjb25zdCB7XG4gICAgICBmb250RmFtaWx5XG4gICAgfSA9IHR5cGVmYWNlLnJlZ3VsYXIuY3NzRm9udEluZm87XG5cbiAgICBpZiAoZm9udEZhbWlseSAhPT0gbmFtZSkge1xuICAgICAgc3R5bGUuZm9udEZhbWlseSA9IGBcIiR7Zm9udEZhbWlseX1cImA7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYSA9IGdldEN1cnJlbnRQYXJhKG5vZGUpO1xuXG4gICAgaWYgKHBhcmEgJiYgcGFyYS5saW5lSGVpZ2h0ICE9PSBcIlwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHN0eWxlLmxpbmVIZWlnaHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwZGZGb250ID0gKDAsIF9mb250cy5zZWxlY3RGb250KSh4ZmFGb250LCB0eXBlZmFjZSk7XG5cbiAgICBpZiAocGRmRm9udCkge1xuICAgICAgc3R5bGUubGluZUhlaWdodCA9IE1hdGgubWF4KDEuMiwgcGRmRm9udC5saW5lSGVpZ2h0KTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZml4VVJMKHN0cikge1xuICBjb25zdCBhYnNvbHV0ZVVybCA9ICgwLCBfdXRpbC5jcmVhdGVWYWxpZEFic29sdXRlVXJsKShzdHIsIG51bGwsIHtcbiAgICBhZGREZWZhdWx0UHJvdG9jb2w6IHRydWUsXG4gICAgdHJ5Q29udmVydEVuY29kaW5nOiB0cnVlXG4gIH0pO1xuICByZXR1cm4gYWJzb2x1dGVVcmwgPyBhYnNvbHV0ZVVybC5ocmVmIDogbnVsbDtcbn1cblxuLyoqKi8gfSksXG4vKiA4MyAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5Gb250RmluZGVyID0gdm9pZCAwO1xuZXhwb3J0cy5nZXRNZXRyaWNzID0gZ2V0TWV0cmljcztcbmV4cG9ydHMuc2VsZWN0Rm9udCA9IHNlbGVjdEZvbnQ7XG5cbnZhciBfeGZhX29iamVjdCA9IF9fd19wZGZqc19yZXF1aXJlX18oNzUpO1xuXG52YXIgX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXyg3Nik7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbmNsYXNzIEZvbnRGaW5kZXIge1xuICBjb25zdHJ1Y3RvcihwZGZGb250cykge1xuICAgIHRoaXMuZm9udHMgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5jYWNoZSA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLndhcm5lZCA9IG5ldyBTZXQoKTtcbiAgICB0aGlzLmRlZmF1bHRGb250ID0gbnVsbDtcbiAgICB0aGlzLmFkZChwZGZGb250cyk7XG4gIH1cblxuICBhZGQocGRmRm9udHMsIHJlYWxseU1pc3NpbmdGb250cyA9IG51bGwpIHtcbiAgICBmb3IgKGNvbnN0IHBkZkZvbnQgb2YgcGRmRm9udHMpIHtcbiAgICAgIHRoaXMuYWRkUGRmRm9udChwZGZGb250KTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHBkZkZvbnQgb2YgdGhpcy5mb250cy52YWx1ZXMoKSkge1xuICAgICAgaWYgKCFwZGZGb250LnJlZ3VsYXIpIHtcbiAgICAgICAgcGRmRm9udC5yZWd1bGFyID0gcGRmRm9udC5pdGFsaWMgfHwgcGRmRm9udC5ib2xkIHx8IHBkZkZvbnQuYm9sZGl0YWxpYztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXJlYWxseU1pc3NpbmdGb250cyB8fCByZWFsbHlNaXNzaW5nRm9udHMuc2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG15cmlhZCA9IHRoaXMuZm9udHMuZ2V0KFwiUGRmSlMtRmFsbGJhY2stUGRmSlMtWEZBXCIpO1xuXG4gICAgZm9yIChjb25zdCBtaXNzaW5nIG9mIHJlYWxseU1pc3NpbmdGb250cykge1xuICAgICAgdGhpcy5mb250cy5zZXQobWlzc2luZywgbXlyaWFkKTtcbiAgICB9XG4gIH1cblxuICBhZGRQZGZGb250KHBkZkZvbnQpIHtcbiAgICBjb25zdCBjc3NGb250SW5mbyA9IHBkZkZvbnQuY3NzRm9udEluZm87XG4gICAgY29uc3QgbmFtZSA9IGNzc0ZvbnRJbmZvLmZvbnRGYW1pbHk7XG4gICAgbGV0IGZvbnQgPSB0aGlzLmZvbnRzLmdldChuYW1lKTtcblxuICAgIGlmICghZm9udCkge1xuICAgICAgZm9udCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICB0aGlzLmZvbnRzLnNldChuYW1lLCBmb250KTtcblxuICAgICAgaWYgKCF0aGlzLmRlZmF1bHRGb250KSB7XG4gICAgICAgIHRoaXMuZGVmYXVsdEZvbnQgPSBmb250O1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBwcm9wZXJ0eSA9IFwiXCI7XG4gICAgY29uc3QgZm9udFdlaWdodCA9IHBhcnNlRmxvYXQoY3NzRm9udEluZm8uZm9udFdlaWdodCk7XG5cbiAgICBpZiAocGFyc2VGbG9hdChjc3NGb250SW5mby5pdGFsaWNBbmdsZSkgIT09IDApIHtcbiAgICAgIHByb3BlcnR5ID0gZm9udFdlaWdodCA+PSA3MDAgPyBcImJvbGRpdGFsaWNcIiA6IFwiaXRhbGljXCI7XG4gICAgfSBlbHNlIGlmIChmb250V2VpZ2h0ID49IDcwMCkge1xuICAgICAgcHJvcGVydHkgPSBcImJvbGRcIjtcbiAgICB9XG5cbiAgICBpZiAoIXByb3BlcnR5KSB7XG4gICAgICBpZiAocGRmRm9udC5uYW1lLmluY2x1ZGVzKFwiQm9sZFwiKSB8fCBwZGZGb250LnBzTmFtZSAmJiBwZGZGb250LnBzTmFtZS5pbmNsdWRlcyhcIkJvbGRcIikpIHtcbiAgICAgICAgcHJvcGVydHkgPSBcImJvbGRcIjtcbiAgICAgIH1cblxuICAgICAgaWYgKHBkZkZvbnQubmFtZS5pbmNsdWRlcyhcIkl0YWxpY1wiKSB8fCBwZGZGb250Lm5hbWUuZW5kc1dpdGgoXCJJdFwiKSB8fCBwZGZGb250LnBzTmFtZSAmJiAocGRmRm9udC5wc05hbWUuaW5jbHVkZXMoXCJJdGFsaWNcIikgfHwgcGRmRm9udC5wc05hbWUuZW5kc1dpdGgoXCJJdFwiKSkpIHtcbiAgICAgICAgcHJvcGVydHkgKz0gXCJpdGFsaWNcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXByb3BlcnR5KSB7XG4gICAgICBwcm9wZXJ0eSA9IFwicmVndWxhclwiO1xuICAgIH1cblxuICAgIGZvbnRbcHJvcGVydHldID0gcGRmRm9udDtcbiAgfVxuXG4gIGdldERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdEZvbnQ7XG4gIH1cblxuICBmaW5kKGZvbnROYW1lLCBtdXN0V2FybiA9IHRydWUpIHtcbiAgICBsZXQgZm9udCA9IHRoaXMuZm9udHMuZ2V0KGZvbnROYW1lKSB8fCB0aGlzLmNhY2hlLmdldChmb250TmFtZSk7XG5cbiAgICBpZiAoZm9udCkge1xuICAgICAgcmV0dXJuIGZvbnQ7XG4gICAgfVxuXG4gICAgY29uc3QgcGF0dGVybiA9IC8sfC18X3wgfGJvbGRpdGFsaWN8Ym9sZHxpdGFsaWN8cmVndWxhcnxpdC9naTtcbiAgICBsZXQgbmFtZSA9IGZvbnROYW1lLnJlcGxhY2UocGF0dGVybiwgXCJcIik7XG4gICAgZm9udCA9IHRoaXMuZm9udHMuZ2V0KG5hbWUpO1xuXG4gICAgaWYgKGZvbnQpIHtcbiAgICAgIHRoaXMuY2FjaGUuc2V0KGZvbnROYW1lLCBmb250KTtcbiAgICAgIHJldHVybiBmb250O1xuICAgIH1cblxuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgY29uc3QgbWF5YmUgPSBbXTtcblxuICAgIGZvciAoY29uc3QgW2ZhbWlseSwgcGRmRm9udF0gb2YgdGhpcy5mb250cy5lbnRyaWVzKCkpIHtcbiAgICAgIGlmIChmYW1pbHkucmVwbGFjZShwYXR0ZXJuLCBcIlwiKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgobmFtZSkpIHtcbiAgICAgICAgbWF5YmUucHVzaChwZGZGb250KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWF5YmUubGVuZ3RoID09PSAwKSB7XG4gICAgICBmb3IgKGNvbnN0IFssIHBkZkZvbnRdIG9mIHRoaXMuZm9udHMuZW50cmllcygpKSB7XG4gICAgICAgIGlmIChwZGZGb250LnJlZ3VsYXIubmFtZSAmJiBwZGZGb250LnJlZ3VsYXIubmFtZS5yZXBsYWNlKHBhdHRlcm4sIFwiXCIpLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChuYW1lKSkge1xuICAgICAgICAgIG1heWJlLnB1c2gocGRmRm9udCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWF5YmUubGVuZ3RoID09PSAwKSB7XG4gICAgICBuYW1lID0gbmFtZS5yZXBsYWNlKC9wc210fG10L2dpLCBcIlwiKTtcblxuICAgICAgZm9yIChjb25zdCBbZmFtaWx5LCBwZGZGb250XSBvZiB0aGlzLmZvbnRzLmVudHJpZXMoKSkge1xuICAgICAgICBpZiAoZmFtaWx5LnJlcGxhY2UocGF0dGVybiwgXCJcIikudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKG5hbWUpKSB7XG4gICAgICAgICAgbWF5YmUucHVzaChwZGZGb250KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtYXliZS5sZW5ndGggPT09IDApIHtcbiAgICAgIGZvciAoY29uc3QgcGRmRm9udCBvZiB0aGlzLmZvbnRzLnZhbHVlcygpKSB7XG4gICAgICAgIGlmIChwZGZGb250LnJlZ3VsYXIubmFtZSAmJiBwZGZGb250LnJlZ3VsYXIubmFtZS5yZXBsYWNlKHBhdHRlcm4sIFwiXCIpLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChuYW1lKSkge1xuICAgICAgICAgIG1heWJlLnB1c2gocGRmRm9udCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWF5YmUubGVuZ3RoID49IDEpIHtcbiAgICAgIGlmIChtYXliZS5sZW5ndGggIT09IDEgJiYgbXVzdFdhcm4pIHtcbiAgICAgICAgKDAsIF91dGlsLndhcm4pKGBYRkEgLSBUb28gbWFueSBjaG9pY2VzIHRvIGd1ZXNzIHRoZSBjb3JyZWN0IGZvbnQ6ICR7Zm9udE5hbWV9YCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2FjaGUuc2V0KGZvbnROYW1lLCBtYXliZVswXSk7XG4gICAgICByZXR1cm4gbWF5YmVbMF07XG4gICAgfVxuXG4gICAgaWYgKG11c3RXYXJuICYmICF0aGlzLndhcm5lZC5oYXMoZm9udE5hbWUpKSB7XG4gICAgICB0aGlzLndhcm5lZC5hZGQoZm9udE5hbWUpO1xuICAgICAgKDAsIF91dGlsLndhcm4pKGBYRkEgLSBDYW5ub3QgZmluZCB0aGUgZm9udDogJHtmb250TmFtZX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG59XG5cbmV4cG9ydHMuRm9udEZpbmRlciA9IEZvbnRGaW5kZXI7XG5cbmZ1bmN0aW9uIHNlbGVjdEZvbnQoeGZhRm9udCwgdHlwZWZhY2UpIHtcbiAgaWYgKHhmYUZvbnQucG9zdHVyZSA9PT0gXCJpdGFsaWNcIikge1xuICAgIGlmICh4ZmFGb250LndlaWdodCA9PT0gXCJib2xkXCIpIHtcbiAgICAgIHJldHVybiB0eXBlZmFjZS5ib2xkaXRhbGljO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlZmFjZS5pdGFsaWM7XG4gIH0gZWxzZSBpZiAoeGZhRm9udC53ZWlnaHQgPT09IFwiYm9sZFwiKSB7XG4gICAgcmV0dXJuIHR5cGVmYWNlLmJvbGQ7XG4gIH1cblxuICByZXR1cm4gdHlwZWZhY2UucmVndWxhcjtcbn1cblxuZnVuY3Rpb24gZ2V0TWV0cmljcyh4ZmFGb250LCByZWFsID0gZmFsc2UpIHtcbiAgbGV0IHBkZkZvbnQgPSBudWxsO1xuXG4gIGlmICh4ZmFGb250KSB7XG4gICAgY29uc3QgbmFtZSA9ICgwLCBfdXRpbHMuc3RyaXBRdW90ZXMpKHhmYUZvbnQudHlwZWZhY2UpO1xuXG4gICAgY29uc3QgdHlwZWZhY2UgPSB4ZmFGb250W194ZmFfb2JqZWN0LiRnbG9iYWxEYXRhXS5mb250RmluZGVyLmZpbmQobmFtZSk7XG5cbiAgICBwZGZGb250ID0gc2VsZWN0Rm9udCh4ZmFGb250LCB0eXBlZmFjZSk7XG4gIH1cblxuICBpZiAoIXBkZkZvbnQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGluZUhlaWdodDogMTIsXG4gICAgICBsaW5lR2FwOiAyLFxuICAgICAgbGluZU5vR2FwOiAxMFxuICAgIH07XG4gIH1cblxuICBjb25zdCBzaXplID0geGZhRm9udC5zaXplIHx8IDEwO1xuICBjb25zdCBsaW5lSGVpZ2h0ID0gcGRmRm9udC5saW5lSGVpZ2h0ID8gTWF0aC5tYXgocmVhbCA/IDAgOiAxLjIsIHBkZkZvbnQubGluZUhlaWdodCkgOiAxLjI7XG4gIGNvbnN0IGxpbmVHYXAgPSBwZGZGb250LmxpbmVHYXAgPT09IHVuZGVmaW5lZCA/IDAuMiA6IHBkZkZvbnQubGluZUdhcDtcbiAgcmV0dXJuIHtcbiAgICBsaW5lSGVpZ2h0OiBsaW5lSGVpZ2h0ICogc2l6ZSxcbiAgICBsaW5lR2FwOiBsaW5lR2FwICogc2l6ZSxcbiAgICBsaW5lTm9HYXA6IE1hdGgubWF4KDEsIGxpbmVIZWlnaHQgLSBsaW5lR2FwKSAqIHNpemVcbiAgfTtcbn1cblxuLyoqKi8gfSksXG4vKiA4NCAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5UZXh0TWVhc3VyZSA9IHZvaWQgMDtcblxudmFyIF9mb250cyA9IF9fd19wZGZqc19yZXF1aXJlX18oODMpO1xuXG5jb25zdCBXSURUSF9GQUNUT1IgPSAxLjAyO1xuXG5jbGFzcyBGb250SW5mbyB7XG4gIGNvbnN0cnVjdG9yKHhmYUZvbnQsIG1hcmdpbiwgbGluZUhlaWdodCwgZm9udEZpbmRlcikge1xuICAgIHRoaXMubGluZUhlaWdodCA9IGxpbmVIZWlnaHQ7XG4gICAgdGhpcy5wYXJhTWFyZ2luID0gbWFyZ2luIHx8IHtcbiAgICAgIHRvcDogMCxcbiAgICAgIGJvdHRvbTogMCxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICByaWdodDogMFxuICAgIH07XG5cbiAgICBpZiAoIXhmYUZvbnQpIHtcbiAgICAgIFt0aGlzLnBkZkZvbnQsIHRoaXMueGZhRm9udF0gPSB0aGlzLmRlZmF1bHRGb250KGZvbnRGaW5kZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMueGZhRm9udCA9IHtcbiAgICAgIHR5cGVmYWNlOiB4ZmFGb250LnR5cGVmYWNlLFxuICAgICAgcG9zdHVyZTogeGZhRm9udC5wb3N0dXJlLFxuICAgICAgd2VpZ2h0OiB4ZmFGb250LndlaWdodCxcbiAgICAgIHNpemU6IHhmYUZvbnQuc2l6ZSxcbiAgICAgIGxldHRlclNwYWNpbmc6IHhmYUZvbnQubGV0dGVyU3BhY2luZ1xuICAgIH07XG4gICAgY29uc3QgdHlwZWZhY2UgPSBmb250RmluZGVyLmZpbmQoeGZhRm9udC50eXBlZmFjZSk7XG5cbiAgICBpZiAoIXR5cGVmYWNlKSB7XG4gICAgICBbdGhpcy5wZGZGb250LCB0aGlzLnhmYUZvbnRdID0gdGhpcy5kZWZhdWx0Rm9udChmb250RmluZGVyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnBkZkZvbnQgPSAoMCwgX2ZvbnRzLnNlbGVjdEZvbnQpKHhmYUZvbnQsIHR5cGVmYWNlKTtcblxuICAgIGlmICghdGhpcy5wZGZGb250KSB7XG4gICAgICBbdGhpcy5wZGZGb250LCB0aGlzLnhmYUZvbnRdID0gdGhpcy5kZWZhdWx0Rm9udChmb250RmluZGVyKTtcbiAgICB9XG4gIH1cblxuICBkZWZhdWx0Rm9udChmb250RmluZGVyKSB7XG4gICAgY29uc3QgZm9udCA9IGZvbnRGaW5kZXIuZmluZChcIkhlbHZldGljYVwiLCBmYWxzZSkgfHwgZm9udEZpbmRlci5maW5kKFwiTXlyaWFkIFByb1wiLCBmYWxzZSkgfHwgZm9udEZpbmRlci5maW5kKFwiQXJpYWxcIiwgZmFsc2UpIHx8IGZvbnRGaW5kZXIuZ2V0RGVmYXVsdCgpO1xuXG4gICAgaWYgKGZvbnQgJiYgZm9udC5yZWd1bGFyKSB7XG4gICAgICBjb25zdCBwZGZGb250ID0gZm9udC5yZWd1bGFyO1xuICAgICAgY29uc3QgaW5mbyA9IHBkZkZvbnQuY3NzRm9udEluZm87XG4gICAgICBjb25zdCB4ZmFGb250ID0ge1xuICAgICAgICB0eXBlZmFjZTogaW5mby5mb250RmFtaWx5LFxuICAgICAgICBwb3N0dXJlOiBcIm5vcm1hbFwiLFxuICAgICAgICB3ZWlnaHQ6IFwibm9ybWFsXCIsXG4gICAgICAgIHNpemU6IDEwLFxuICAgICAgICBsZXR0ZXJTcGFjaW5nOiAwXG4gICAgICB9O1xuICAgICAgcmV0dXJuIFtwZGZGb250LCB4ZmFGb250XTtcbiAgICB9XG5cbiAgICBjb25zdCB4ZmFGb250ID0ge1xuICAgICAgdHlwZWZhY2U6IFwiQ291cmllclwiLFxuICAgICAgcG9zdHVyZTogXCJub3JtYWxcIixcbiAgICAgIHdlaWdodDogXCJub3JtYWxcIixcbiAgICAgIHNpemU6IDEwLFxuICAgICAgbGV0dGVyU3BhY2luZzogMFxuICAgIH07XG4gICAgcmV0dXJuIFtudWxsLCB4ZmFGb250XTtcbiAgfVxuXG59XG5cbmNsYXNzIEZvbnRTZWxlY3RvciB7XG4gIGNvbnN0cnVjdG9yKGRlZmF1bHRYZmFGb250LCBkZWZhdWx0UGFyYU1hcmdpbiwgZGVmYXVsdExpbmVIZWlnaHQsIGZvbnRGaW5kZXIpIHtcbiAgICB0aGlzLmZvbnRGaW5kZXIgPSBmb250RmluZGVyO1xuICAgIHRoaXMuc3RhY2sgPSBbbmV3IEZvbnRJbmZvKGRlZmF1bHRYZmFGb250LCBkZWZhdWx0UGFyYU1hcmdpbiwgZGVmYXVsdExpbmVIZWlnaHQsIGZvbnRGaW5kZXIpXTtcbiAgfVxuXG4gIHB1c2hEYXRhKHhmYUZvbnQsIG1hcmdpbiwgbGluZUhlaWdodCkge1xuICAgIGNvbnN0IGxhc3RGb250ID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdO1xuXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIFtcInR5cGVmYWNlXCIsIFwicG9zdHVyZVwiLCBcIndlaWdodFwiLCBcInNpemVcIiwgXCJsZXR0ZXJTcGFjaW5nXCJdKSB7XG4gICAgICBpZiAoIXhmYUZvbnRbbmFtZV0pIHtcbiAgICAgICAgeGZhRm9udFtuYW1lXSA9IGxhc3RGb250LnhmYUZvbnRbbmFtZV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIFtcInRvcFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIiwgXCJyaWdodFwiXSkge1xuICAgICAgaWYgKGlzTmFOKG1hcmdpbltuYW1lXSkpIHtcbiAgICAgICAgbWFyZ2luW25hbWVdID0gbGFzdEZvbnQucGFyYU1hcmdpbltuYW1lXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBmb250SW5mbyA9IG5ldyBGb250SW5mbyh4ZmFGb250LCBtYXJnaW4sIGxpbmVIZWlnaHQgfHwgbGFzdEZvbnQubGluZUhlaWdodCwgdGhpcy5mb250RmluZGVyKTtcblxuICAgIGlmICghZm9udEluZm8ucGRmRm9udCkge1xuICAgICAgZm9udEluZm8ucGRmRm9udCA9IGxhc3RGb250LnBkZkZvbnQ7XG4gICAgfVxuXG4gICAgdGhpcy5zdGFjay5wdXNoKGZvbnRJbmZvKTtcbiAgfVxuXG4gIHBvcEZvbnQoKSB7XG4gICAgdGhpcy5zdGFjay5wb3AoKTtcbiAgfVxuXG4gIHRvcEZvbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTtcbiAgfVxuXG59XG5cbmNsYXNzIFRleHRNZWFzdXJlIHtcbiAgY29uc3RydWN0b3IoZGVmYXVsdFhmYUZvbnQsIGRlZmF1bHRQYXJhTWFyZ2luLCBkZWZhdWx0TGluZUhlaWdodCwgZm9udHMpIHtcbiAgICB0aGlzLmdseXBocyA9IFtdO1xuICAgIHRoaXMuZm9udFNlbGVjdG9yID0gbmV3IEZvbnRTZWxlY3RvcihkZWZhdWx0WGZhRm9udCwgZGVmYXVsdFBhcmFNYXJnaW4sIGRlZmF1bHRMaW5lSGVpZ2h0LCBmb250cyk7XG4gICAgdGhpcy5leHRyYUhlaWdodCA9IDA7XG4gIH1cblxuICBwdXNoRGF0YSh4ZmFGb250LCBtYXJnaW4sIGxpbmVIZWlnaHQpIHtcbiAgICB0aGlzLmZvbnRTZWxlY3Rvci5wdXNoRGF0YSh4ZmFGb250LCBtYXJnaW4sIGxpbmVIZWlnaHQpO1xuICB9XG5cbiAgcG9wRm9udCh4ZmFGb250KSB7XG4gICAgcmV0dXJuIHRoaXMuZm9udFNlbGVjdG9yLnBvcEZvbnQoKTtcbiAgfVxuXG4gIGFkZFBhcmEoKSB7XG4gICAgY29uc3QgbGFzdEZvbnQgPSB0aGlzLmZvbnRTZWxlY3Rvci50b3BGb250KCk7XG4gICAgdGhpcy5leHRyYUhlaWdodCArPSBsYXN0Rm9udC5wYXJhTWFyZ2luLnRvcCArIGxhc3RGb250LnBhcmFNYXJnaW4uYm90dG9tO1xuICB9XG5cbiAgYWRkU3RyaW5nKHN0cikge1xuICAgIGlmICghc3RyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbGFzdEZvbnQgPSB0aGlzLmZvbnRTZWxlY3Rvci50b3BGb250KCk7XG4gICAgY29uc3QgZm9udFNpemUgPSBsYXN0Rm9udC54ZmFGb250LnNpemU7XG5cbiAgICBpZiAobGFzdEZvbnQucGRmRm9udCkge1xuICAgICAgY29uc3QgbGV0dGVyU3BhY2luZyA9IGxhc3RGb250LnhmYUZvbnQubGV0dGVyU3BhY2luZztcbiAgICAgIGNvbnN0IHBkZkZvbnQgPSBsYXN0Rm9udC5wZGZGb250O1xuICAgICAgY29uc3QgZm9udExpbmVIZWlnaHQgPSBwZGZGb250LmxpbmVIZWlnaHQgfHwgMS4yO1xuICAgICAgY29uc3QgbGluZUhlaWdodCA9IGxhc3RGb250LmxpbmVIZWlnaHQgfHwgTWF0aC5tYXgoMS4yLCBmb250TGluZUhlaWdodCkgKiBmb250U2l6ZTtcbiAgICAgIGNvbnN0IGxpbmVHYXAgPSBwZGZGb250LmxpbmVHYXAgPT09IHVuZGVmaW5lZCA/IDAuMiA6IHBkZkZvbnQubGluZUdhcDtcbiAgICAgIGNvbnN0IG5vR2FwID0gZm9udExpbmVIZWlnaHQgLSBsaW5lR2FwO1xuICAgICAgY29uc3QgZmlyc3RMaW5lSGVpZ2h0ID0gTWF0aC5tYXgoMSwgbm9HYXApICogZm9udFNpemU7XG4gICAgICBjb25zdCBzY2FsZSA9IGZvbnRTaXplIC8gMTAwMDtcbiAgICAgIGNvbnN0IGZhbGxiYWNrV2lkdGggPSBwZGZGb250LmRlZmF1bHRXaWR0aCB8fCBwZGZGb250LmNoYXJzVG9HbHlwaHMoXCIgXCIpWzBdLndpZHRoO1xuXG4gICAgICBmb3IgKGNvbnN0IGxpbmUgb2Ygc3RyLnNwbGl0KC9bXFx1MjAyOVxcbl0vKSkge1xuICAgICAgICBjb25zdCBlbmNvZGVkTGluZSA9IHBkZkZvbnQuZW5jb2RlU3RyaW5nKGxpbmUpLmpvaW4oXCJcIik7XG4gICAgICAgIGNvbnN0IGdseXBocyA9IHBkZkZvbnQuY2hhcnNUb0dseXBocyhlbmNvZGVkTGluZSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBnbHlwaCBvZiBnbHlwaHMpIHtcbiAgICAgICAgICBjb25zdCB3aWR0aCA9IGdseXBoLndpZHRoIHx8IGZhbGxiYWNrV2lkdGg7XG4gICAgICAgICAgdGhpcy5nbHlwaHMucHVzaChbd2lkdGggKiBzY2FsZSArIGxldHRlclNwYWNpbmcsIGxpbmVIZWlnaHQsIGZpcnN0TGluZUhlaWdodCwgZ2x5cGgudW5pY29kZSwgZmFsc2VdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ2x5cGhzLnB1c2goWzAsIDAsIDAsIFwiXFxuXCIsIHRydWVdKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5nbHlwaHMucG9wKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBsaW5lIG9mIHN0ci5zcGxpdCgvW1xcdTIwMjlcXG5dLykpIHtcbiAgICAgIGZvciAoY29uc3QgY2hhciBvZiBsaW5lLnNwbGl0KFwiXCIpKSB7XG4gICAgICAgIHRoaXMuZ2x5cGhzLnB1c2goW2ZvbnRTaXplLCAxLjIgKiBmb250U2l6ZSwgZm9udFNpemUsIGNoYXIsIGZhbHNlXSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZ2x5cGhzLnB1c2goWzAsIDAsIDAsIFwiXFxuXCIsIHRydWVdKTtcbiAgICB9XG5cbiAgICB0aGlzLmdseXBocy5wb3AoKTtcbiAgfVxuXG4gIGNvbXB1dGUobWF4V2lkdGgpIHtcbiAgICBsZXQgbGFzdFNwYWNlUG9zID0gLTEsXG4gICAgICAgIGxhc3RTcGFjZVdpZHRoID0gMCxcbiAgICAgICAgd2lkdGggPSAwLFxuICAgICAgICBoZWlnaHQgPSAwLFxuICAgICAgICBjdXJyZW50TGluZVdpZHRoID0gMCxcbiAgICAgICAgY3VycmVudExpbmVIZWlnaHQgPSAwO1xuICAgIGxldCBpc0Jyb2tlbiA9IGZhbHNlO1xuICAgIGxldCBpc0ZpcnN0TGluZSA9IHRydWU7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgaWkgPSB0aGlzLmdseXBocy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBjb25zdCBbZ2x5cGhXaWR0aCwgbGluZUhlaWdodCwgZmlyc3RMaW5lSGVpZ2h0LCBjaGFyLCBpc0VPTF0gPSB0aGlzLmdseXBoc1tpXTtcbiAgICAgIGNvbnN0IGlzU3BhY2UgPSBjaGFyID09PSBcIiBcIjtcbiAgICAgIGNvbnN0IGdseXBoSGVpZ2h0ID0gaXNGaXJzdExpbmUgPyBmaXJzdExpbmVIZWlnaHQgOiBsaW5lSGVpZ2h0O1xuXG4gICAgICBpZiAoaXNFT0wpIHtcbiAgICAgICAgd2lkdGggPSBNYXRoLm1heCh3aWR0aCwgY3VycmVudExpbmVXaWR0aCk7XG4gICAgICAgIGN1cnJlbnRMaW5lV2lkdGggPSAwO1xuICAgICAgICBoZWlnaHQgKz0gY3VycmVudExpbmVIZWlnaHQ7XG4gICAgICAgIGN1cnJlbnRMaW5lSGVpZ2h0ID0gZ2x5cGhIZWlnaHQ7XG4gICAgICAgIGxhc3RTcGFjZVBvcyA9IC0xO1xuICAgICAgICBsYXN0U3BhY2VXaWR0aCA9IDA7XG4gICAgICAgIGlzRmlyc3RMaW5lID0gZmFsc2U7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNTcGFjZSkge1xuICAgICAgICBpZiAoY3VycmVudExpbmVXaWR0aCArIGdseXBoV2lkdGggPiBtYXhXaWR0aCkge1xuICAgICAgICAgIHdpZHRoID0gTWF0aC5tYXgod2lkdGgsIGN1cnJlbnRMaW5lV2lkdGgpO1xuICAgICAgICAgIGN1cnJlbnRMaW5lV2lkdGggPSAwO1xuICAgICAgICAgIGhlaWdodCArPSBjdXJyZW50TGluZUhlaWdodDtcbiAgICAgICAgICBjdXJyZW50TGluZUhlaWdodCA9IGdseXBoSGVpZ2h0O1xuICAgICAgICAgIGxhc3RTcGFjZVBvcyA9IC0xO1xuICAgICAgICAgIGxhc3RTcGFjZVdpZHRoID0gMDtcbiAgICAgICAgICBpc0Jyb2tlbiA9IHRydWU7XG4gICAgICAgICAgaXNGaXJzdExpbmUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdXJyZW50TGluZUhlaWdodCA9IE1hdGgubWF4KGdseXBoSGVpZ2h0LCBjdXJyZW50TGluZUhlaWdodCk7XG4gICAgICAgICAgbGFzdFNwYWNlV2lkdGggPSBjdXJyZW50TGluZVdpZHRoO1xuICAgICAgICAgIGN1cnJlbnRMaW5lV2lkdGggKz0gZ2x5cGhXaWR0aDtcbiAgICAgICAgICBsYXN0U3BhY2VQb3MgPSBpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjdXJyZW50TGluZVdpZHRoICsgZ2x5cGhXaWR0aCA+IG1heFdpZHRoKSB7XG4gICAgICAgIGhlaWdodCArPSBjdXJyZW50TGluZUhlaWdodDtcbiAgICAgICAgY3VycmVudExpbmVIZWlnaHQgPSBnbHlwaEhlaWdodDtcblxuICAgICAgICBpZiAobGFzdFNwYWNlUG9zICE9PSAtMSkge1xuICAgICAgICAgIGkgPSBsYXN0U3BhY2VQb3M7XG4gICAgICAgICAgd2lkdGggPSBNYXRoLm1heCh3aWR0aCwgbGFzdFNwYWNlV2lkdGgpO1xuICAgICAgICAgIGN1cnJlbnRMaW5lV2lkdGggPSAwO1xuICAgICAgICAgIGxhc3RTcGFjZVBvcyA9IC0xO1xuICAgICAgICAgIGxhc3RTcGFjZVdpZHRoID0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3aWR0aCA9IE1hdGgubWF4KHdpZHRoLCBjdXJyZW50TGluZVdpZHRoKTtcbiAgICAgICAgICBjdXJyZW50TGluZVdpZHRoID0gZ2x5cGhXaWR0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlzQnJva2VuID0gdHJ1ZTtcbiAgICAgICAgaXNGaXJzdExpbmUgPSBmYWxzZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGN1cnJlbnRMaW5lV2lkdGggKz0gZ2x5cGhXaWR0aDtcbiAgICAgIGN1cnJlbnRMaW5lSGVpZ2h0ID0gTWF0aC5tYXgoZ2x5cGhIZWlnaHQsIGN1cnJlbnRMaW5lSGVpZ2h0KTtcbiAgICB9XG5cbiAgICB3aWR0aCA9IE1hdGgubWF4KHdpZHRoLCBjdXJyZW50TGluZVdpZHRoKTtcbiAgICBoZWlnaHQgKz0gY3VycmVudExpbmVIZWlnaHQgKyB0aGlzLmV4dHJhSGVpZ2h0O1xuICAgIHJldHVybiB7XG4gICAgICB3aWR0aDogV0lEVEhfRkFDVE9SICogd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgICBpc0Jyb2tlblxuICAgIH07XG4gIH1cblxufVxuXG5leHBvcnRzLlRleHRNZWFzdXJlID0gVGV4dE1lYXN1cmU7XG5cbi8qKiovIH0pLFxuLyogODUgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuRGF0YUhhbmRsZXIgPSB2b2lkIDA7XG5cbnZhciBfeGZhX29iamVjdCA9IF9fd19wZGZqc19yZXF1aXJlX18oNzUpO1xuXG5jbGFzcyBEYXRhSGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yKHJvb3QsIGRhdGEpIHtcbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIHRoaXMuZGF0YXNldCA9IHJvb3QuZGF0YXNldHMgfHwgbnVsbDtcbiAgfVxuXG4gIHNlcmlhbGl6ZShzdG9yYWdlKSB7XG4gICAgY29uc3Qgc3RhY2sgPSBbWy0xLCB0aGlzLmRhdGFbX3hmYV9vYmplY3QuJGdldENoaWxkcmVuXSgpXV07XG5cbiAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgbGFzdCA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgY29uc3QgW2ksIGNoaWxkcmVuXSA9IGxhc3Q7XG5cbiAgICAgIGlmIChpICsgMSA9PT0gY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgIHN0YWNrLnBvcCgpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2hpbGQgPSBjaGlsZHJlblsrK2xhc3RbMF1dO1xuICAgICAgY29uc3Qgc3RvcmFnZUVudHJ5ID0gc3RvcmFnZS5nZXQoY2hpbGRbX3hmYV9vYmplY3QuJHVpZF0pO1xuXG4gICAgICBpZiAoc3RvcmFnZUVudHJ5KSB7XG4gICAgICAgIGNoaWxkW194ZmFfb2JqZWN0LiRzZXRWYWx1ZV0oc3RvcmFnZUVudHJ5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBjaGlsZFtfeGZhX29iamVjdC4kZ2V0QXR0cmlidXRlc10oKTtcblxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGF0dHJpYnV0ZXMudmFsdWVzKCkpIHtcbiAgICAgICAgICBjb25zdCBlbnRyeSA9IHN0b3JhZ2UuZ2V0KHZhbHVlW194ZmFfb2JqZWN0LiR1aWRdKTtcblxuICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgdmFsdWVbX3hmYV9vYmplY3QuJHNldFZhbHVlXShlbnRyeSk7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBub2RlcyA9IGNoaWxkW194ZmFfb2JqZWN0LiRnZXRDaGlsZHJlbl0oKTtcblxuICAgICAgaWYgKG5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgc3RhY2sucHVzaChbLTEsIG5vZGVzXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYnVmID0gW2A8eGZhOmRhdGFzZXRzIHhtbG5zOnhmYT1cImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLWRhdGEvMS4wL1wiPmBdO1xuXG4gICAgaWYgKHRoaXMuZGF0YXNldCkge1xuICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiB0aGlzLmRhdGFzZXRbX3hmYV9vYmplY3QuJGdldENoaWxkcmVuXSgpKSB7XG4gICAgICAgIGlmIChjaGlsZFtfeGZhX29iamVjdC4kbm9kZU5hbWVdICE9PSBcImRhdGFcIikge1xuICAgICAgICAgIGNoaWxkW194ZmFfb2JqZWN0LiR0b1N0cmluZ10oYnVmKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZGF0YVtfeGZhX29iamVjdC4kdG9TdHJpbmddKGJ1Zik7XG5cbiAgICBidWYucHVzaChcIjwveGZhOmRhdGFzZXRzPlwiKTtcbiAgICByZXR1cm4gYnVmLmpvaW4oXCJcIik7XG4gIH1cblxufVxuXG5leHBvcnRzLkRhdGFIYW5kbGVyID0gRGF0YUhhbmRsZXI7XG5cbi8qKiovIH0pLFxuLyogODYgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuWEZBUGFyc2VyID0gdm9pZCAwO1xuXG52YXIgX3hmYV9vYmplY3QgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDc1KTtcblxudmFyIF94bWxfcGFyc2VyID0gX193X3BkZmpzX3JlcXVpcmVfXyg2OCk7XG5cbnZhciBfYnVpbGRlciA9IF9fd19wZGZqc19yZXF1aXJlX18oODcpO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5jbGFzcyBYRkFQYXJzZXIgZXh0ZW5kcyBfeG1sX3BhcnNlci5YTUxQYXJzZXJCYXNlIHtcbiAgY29uc3RydWN0b3Iocm9vdE5hbWVTcGFjZSA9IG51bGwsIHJpY2hUZXh0ID0gZmFsc2UpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2J1aWxkZXIgPSBuZXcgX2J1aWxkZXIuQnVpbGRlcihyb290TmFtZVNwYWNlKTtcbiAgICB0aGlzLl9zdGFjayA9IFtdO1xuICAgIHRoaXMuX2dsb2JhbERhdGEgPSB7XG4gICAgICB1c2VkVHlwZWZhY2VzOiBuZXcgU2V0KClcbiAgICB9O1xuICAgIHRoaXMuX2lkcyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLl9jdXJyZW50ID0gdGhpcy5fYnVpbGRlci5idWlsZFJvb3QodGhpcy5faWRzKTtcbiAgICB0aGlzLl9lcnJvckNvZGUgPSBfeG1sX3BhcnNlci5YTUxQYXJzZXJFcnJvckNvZGUuTm9FcnJvcjtcbiAgICB0aGlzLl93aGl0ZVJlZ2V4ID0gL15cXHMrJC87XG4gICAgdGhpcy5fbmJzcHMgPSAvXFx4YTArL2c7XG4gICAgdGhpcy5fcmljaFRleHQgPSByaWNoVGV4dDtcbiAgfVxuXG4gIHBhcnNlKGRhdGEpIHtcbiAgICB0aGlzLnBhcnNlWG1sKGRhdGEpO1xuXG4gICAgaWYgKHRoaXMuX2Vycm9yQ29kZSAhPT0gX3htbF9wYXJzZXIuWE1MUGFyc2VyRXJyb3JDb2RlLk5vRXJyb3IpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhpcy5fY3VycmVudFtfeGZhX29iamVjdC4kZmluYWxpemVdKCk7XG5cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudC5lbGVtZW50O1xuICB9XG5cbiAgb25UZXh0KHRleHQpIHtcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKHRoaXMuX25ic3BzLCBtYXRjaCA9PiBtYXRjaC5zbGljZSgxKSArIFwiIFwiKTtcblxuICAgIGlmICh0aGlzLl9yaWNoVGV4dCB8fCB0aGlzLl9jdXJyZW50W194ZmFfb2JqZWN0LiRhY2NlcHRXaGl0ZXNwYWNlXSgpKSB7XG4gICAgICB0aGlzLl9jdXJyZW50W194ZmFfb2JqZWN0LiRvblRleHRdKHRleHQsIHRoaXMuX3JpY2hUZXh0KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl93aGl0ZVJlZ2V4LnRlc3QodGV4dCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50W194ZmFfb2JqZWN0LiRvblRleHRdKHRleHQudHJpbSgpKTtcbiAgfVxuXG4gIG9uQ2RhdGEodGV4dCkge1xuICAgIHRoaXMuX2N1cnJlbnRbX3hmYV9vYmplY3QuJG9uVGV4dF0odGV4dCk7XG4gIH1cblxuICBfbWtBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMsIHRhZ05hbWUpIHtcbiAgICBsZXQgbmFtZXNwYWNlID0gbnVsbDtcbiAgICBsZXQgcHJlZml4ZXMgPSBudWxsO1xuICAgIGNvbnN0IGF0dHJpYnV0ZU9iaiA9IE9iamVjdC5jcmVhdGUoe30pO1xuXG4gICAgZm9yIChjb25zdCB7XG4gICAgICBuYW1lLFxuICAgICAgdmFsdWVcbiAgICB9IG9mIGF0dHJpYnV0ZXMpIHtcbiAgICAgIGlmIChuYW1lID09PSBcInhtbG5zXCIpIHtcbiAgICAgICAgaWYgKCFuYW1lc3BhY2UpIHtcbiAgICAgICAgICBuYW1lc3BhY2UgPSB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAoMCwgX3V0aWwud2FybikoYFhGQSAtIG11bHRpcGxlIG5hbWVzcGFjZSBkZWZpbml0aW9uIGluIDwke3RhZ05hbWV9PmApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG5hbWUuc3RhcnRzV2l0aChcInhtbG5zOlwiKSkge1xuICAgICAgICBjb25zdCBwcmVmaXggPSBuYW1lLnN1YnN0cmluZyhcInhtbG5zOlwiLmxlbmd0aCk7XG5cbiAgICAgICAgaWYgKCFwcmVmaXhlcykge1xuICAgICAgICAgIHByZWZpeGVzID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBwcmVmaXhlcy5wdXNoKHtcbiAgICAgICAgICBwcmVmaXgsXG4gICAgICAgICAgdmFsdWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBpID0gbmFtZS5pbmRleE9mKFwiOlwiKTtcblxuICAgICAgICBpZiAoaSA9PT0gLTEpIHtcbiAgICAgICAgICBhdHRyaWJ1dGVPYmpbbmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQgbnNBdHRycyA9IGF0dHJpYnV0ZU9ialtfeGZhX29iamVjdC4kbnNBdHRyaWJ1dGVzXTtcblxuICAgICAgICAgIGlmICghbnNBdHRycykge1xuICAgICAgICAgICAgbnNBdHRycyA9IGF0dHJpYnV0ZU9ialtfeGZhX29iamVjdC4kbnNBdHRyaWJ1dGVzXSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgW25zLCBhdHRyTmFtZV0gPSBbbmFtZS5zbGljZSgwLCBpKSwgbmFtZS5zbGljZShpICsgMSldO1xuICAgICAgICAgIGxldCBhdHRycyA9IG5zQXR0cnNbbnNdO1xuXG4gICAgICAgICAgaWYgKCFhdHRycykge1xuICAgICAgICAgICAgYXR0cnMgPSBuc0F0dHJzW25zXSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYXR0cnNbYXR0ck5hbWVdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gW25hbWVzcGFjZSwgcHJlZml4ZXMsIGF0dHJpYnV0ZU9ial07XG4gIH1cblxuICBfZ2V0TmFtZUFuZFByZWZpeChuYW1lLCBuc0Fnbm9zdGljKSB7XG4gICAgY29uc3QgaSA9IG5hbWUuaW5kZXhPZihcIjpcIik7XG5cbiAgICBpZiAoaSA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBbbmFtZSwgbnVsbF07XG4gICAgfVxuXG4gICAgcmV0dXJuIFtuYW1lLnN1YnN0cmluZyhpICsgMSksIG5zQWdub3N0aWMgPyBcIlwiIDogbmFtZS5zdWJzdHJpbmcoMCwgaSldO1xuICB9XG5cbiAgb25CZWdpbkVsZW1lbnQodGFnTmFtZSwgYXR0cmlidXRlcywgaXNFbXB0eSkge1xuICAgIGNvbnN0IFtuYW1lc3BhY2UsIHByZWZpeGVzLCBhdHRyaWJ1dGVzT2JqXSA9IHRoaXMuX21rQXR0cmlidXRlcyhhdHRyaWJ1dGVzLCB0YWdOYW1lKTtcblxuICAgIGNvbnN0IFtuYW1lLCBuc1ByZWZpeF0gPSB0aGlzLl9nZXROYW1lQW5kUHJlZml4KHRhZ05hbWUsIHRoaXMuX2J1aWxkZXIuaXNOc0Fnbm9zdGljKCkpO1xuXG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuX2J1aWxkZXIuYnVpbGQoe1xuICAgICAgbnNQcmVmaXgsXG4gICAgICBuYW1lLFxuICAgICAgYXR0cmlidXRlczogYXR0cmlidXRlc09iaixcbiAgICAgIG5hbWVzcGFjZSxcbiAgICAgIHByZWZpeGVzXG4gICAgfSk7XG5cbiAgICBub2RlW194ZmFfb2JqZWN0LiRnbG9iYWxEYXRhXSA9IHRoaXMuX2dsb2JhbERhdGE7XG5cbiAgICBpZiAoaXNFbXB0eSkge1xuICAgICAgbm9kZVtfeGZhX29iamVjdC4kZmluYWxpemVdKCk7XG5cbiAgICAgIGlmICh0aGlzLl9jdXJyZW50W194ZmFfb2JqZWN0LiRvbkNoaWxkXShub2RlKSkge1xuICAgICAgICBub2RlW194ZmFfb2JqZWN0LiRzZXRJZF0odGhpcy5faWRzKTtcbiAgICAgIH1cblxuICAgICAgbm9kZVtfeGZhX29iamVjdC4kY2xlYW5dKHRoaXMuX2J1aWxkZXIpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhY2sucHVzaCh0aGlzLl9jdXJyZW50KTtcblxuICAgIHRoaXMuX2N1cnJlbnQgPSBub2RlO1xuICB9XG5cbiAgb25FbmRFbGVtZW50KG5hbWUpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5fY3VycmVudDtcblxuICAgIGlmIChub2RlW194ZmFfb2JqZWN0LiRpc0NEQVRBWG1sXSgpICYmIHR5cGVvZiBub2RlW194ZmFfb2JqZWN0LiRjb250ZW50XSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgY29uc3QgcGFyc2VyID0gbmV3IFhGQVBhcnNlcigpO1xuICAgICAgcGFyc2VyLl9nbG9iYWxEYXRhID0gdGhpcy5fZ2xvYmFsRGF0YTtcbiAgICAgIGNvbnN0IHJvb3QgPSBwYXJzZXIucGFyc2Uobm9kZVtfeGZhX29iamVjdC4kY29udGVudF0pO1xuICAgICAgbm9kZVtfeGZhX29iamVjdC4kY29udGVudF0gPSBudWxsO1xuXG4gICAgICBub2RlW194ZmFfb2JqZWN0LiRvbkNoaWxkXShyb290KTtcbiAgICB9XG5cbiAgICBub2RlW194ZmFfb2JqZWN0LiRmaW5hbGl6ZV0oKTtcblxuICAgIHRoaXMuX2N1cnJlbnQgPSB0aGlzLl9zdGFjay5wb3AoKTtcblxuICAgIGlmICh0aGlzLl9jdXJyZW50W194ZmFfb2JqZWN0LiRvbkNoaWxkXShub2RlKSkge1xuICAgICAgbm9kZVtfeGZhX29iamVjdC4kc2V0SWRdKHRoaXMuX2lkcyk7XG4gICAgfVxuXG4gICAgbm9kZVtfeGZhX29iamVjdC4kY2xlYW5dKHRoaXMuX2J1aWxkZXIpO1xuICB9XG5cbiAgb25FcnJvcihjb2RlKSB7XG4gICAgdGhpcy5fZXJyb3JDb2RlID0gY29kZTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuWEZBUGFyc2VyID0gWEZBUGFyc2VyO1xuXG4vKioqLyB9KSxcbi8qIDg3ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLkJ1aWxkZXIgPSB2b2lkIDA7XG5cbnZhciBfbmFtZXNwYWNlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNzcpO1xuXG52YXIgX3hmYV9vYmplY3QgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDc1KTtcblxudmFyIF9zZXR1cCA9IF9fd19wZGZqc19yZXF1aXJlX18oODgpO1xuXG52YXIgX3RlbXBsYXRlID0gX193X3BkZmpzX3JlcXVpcmVfXyg4MCk7XG5cbnZhciBfdW5rbm93biA9IF9fd19wZGZqc19yZXF1aXJlX18oOTcpO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5jbGFzcyBSb290IGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoaWRzKSB7XG4gICAgc3VwZXIoLTEsIFwicm9vdFwiLCBPYmplY3QuY3JlYXRlKG51bGwpKTtcbiAgICB0aGlzLmVsZW1lbnQgPSBudWxsO1xuICAgIHRoaXNbX3hmYV9vYmplY3QuJGlkc10gPSBpZHM7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJG9uQ2hpbGRdKGNoaWxkKSB7XG4gICAgdGhpcy5lbGVtZW50ID0gY2hpbGQ7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGZpbmFsaXplXSgpIHtcbiAgICBzdXBlcltfeGZhX29iamVjdC4kZmluYWxpemVdKCk7XG5cbiAgICBpZiAodGhpcy5lbGVtZW50LnRlbXBsYXRlIGluc3RhbmNlb2YgX3RlbXBsYXRlLlRlbXBsYXRlKSB7XG4gICAgICB0aGlzW194ZmFfb2JqZWN0LiRpZHNdLnNldChfeGZhX29iamVjdC4kcm9vdCwgdGhpcy5lbGVtZW50KTtcblxuICAgICAgdGhpcy5lbGVtZW50LnRlbXBsYXRlW194ZmFfb2JqZWN0LiRyZXNvbHZlUHJvdG90eXBlc10odGhpc1tfeGZhX29iamVjdC4kaWRzXSk7XG5cbiAgICAgIHRoaXMuZWxlbWVudC50ZW1wbGF0ZVtfeGZhX29iamVjdC4kaWRzXSA9IHRoaXNbX3hmYV9vYmplY3QuJGlkc107XG4gICAgfVxuICB9XG5cbn1cblxuY2xhc3MgRW1wdHkgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigtMSwgXCJcIiwgT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJG9uQ2hpbGRdKF8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxufVxuXG5jbGFzcyBCdWlsZGVyIHtcbiAgY29uc3RydWN0b3Iocm9vdE5hbWVTcGFjZSA9IG51bGwpIHtcbiAgICB0aGlzLl9uYW1lc3BhY2VTdGFjayA9IFtdO1xuICAgIHRoaXMuX25zQWdub3N0aWNMZXZlbCA9IDA7XG4gICAgdGhpcy5fbmFtZXNwYWNlUHJlZml4ZXMgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5fbmFtZXNwYWNlcyA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLl9uZXh0TnNJZCA9IE1hdGgubWF4KC4uLk9iamVjdC52YWx1ZXMoX25hbWVzcGFjZXMuTmFtZXNwYWNlSWRzKS5tYXAoKHtcbiAgICAgIGlkXG4gICAgfSkgPT4gaWQpKTtcbiAgICB0aGlzLl9jdXJyZW50TmFtZXNwYWNlID0gcm9vdE5hbWVTcGFjZSB8fCBuZXcgX3Vua25vd24uVW5rbm93bk5hbWVzcGFjZSgrK3RoaXMuX25leHROc0lkKTtcbiAgfVxuXG4gIGJ1aWxkUm9vdChpZHMpIHtcbiAgICByZXR1cm4gbmV3IFJvb3QoaWRzKTtcbiAgfVxuXG4gIGJ1aWxkKHtcbiAgICBuc1ByZWZpeCxcbiAgICBuYW1lLFxuICAgIGF0dHJpYnV0ZXMsXG4gICAgbmFtZXNwYWNlLFxuICAgIHByZWZpeGVzXG4gIH0pIHtcbiAgICBjb25zdCBoYXNOYW1lc3BhY2VEZWYgPSBuYW1lc3BhY2UgIT09IG51bGw7XG5cbiAgICBpZiAoaGFzTmFtZXNwYWNlRGVmKSB7XG4gICAgICB0aGlzLl9uYW1lc3BhY2VTdGFjay5wdXNoKHRoaXMuX2N1cnJlbnROYW1lc3BhY2UpO1xuXG4gICAgICB0aGlzLl9jdXJyZW50TmFtZXNwYWNlID0gdGhpcy5fc2VhcmNoTmFtZXNwYWNlKG5hbWVzcGFjZSk7XG4gICAgfVxuXG4gICAgaWYgKHByZWZpeGVzKSB7XG4gICAgICB0aGlzLl9hZGROYW1lc3BhY2VQcmVmaXgocHJlZml4ZXMpO1xuICAgIH1cblxuICAgIGlmIChhdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KF94ZmFfb2JqZWN0LiRuc0F0dHJpYnV0ZXMpKSB7XG4gICAgICBjb25zdCBkYXRhVGVtcGxhdGUgPSBfc2V0dXAuTmFtZXNwYWNlU2V0VXAuZGF0YXNldHM7XG4gICAgICBjb25zdCBuc0F0dHJzID0gYXR0cmlidXRlc1tfeGZhX29iamVjdC4kbnNBdHRyaWJ1dGVzXTtcbiAgICAgIGxldCB4ZmFBdHRycyA9IG51bGw7XG5cbiAgICAgIGZvciAoY29uc3QgW25zLCBhdHRyc10gb2YgT2JqZWN0LmVudHJpZXMobnNBdHRycykpIHtcbiAgICAgICAgY29uc3QgbnNUb1VzZSA9IHRoaXMuX2dldE5hbWVzcGFjZVRvVXNlKG5zKTtcblxuICAgICAgICBpZiAobnNUb1VzZSA9PT0gZGF0YVRlbXBsYXRlKSB7XG4gICAgICAgICAgeGZhQXR0cnMgPSB7XG4gICAgICAgICAgICB4ZmE6IGF0dHJzXG4gICAgICAgICAgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoeGZhQXR0cnMpIHtcbiAgICAgICAgYXR0cmlidXRlc1tfeGZhX29iamVjdC4kbnNBdHRyaWJ1dGVzXSA9IHhmYUF0dHJzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIGF0dHJpYnV0ZXNbX3hmYV9vYmplY3QuJG5zQXR0cmlidXRlc107XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbmFtZXNwYWNlVG9Vc2UgPSB0aGlzLl9nZXROYW1lc3BhY2VUb1VzZShuc1ByZWZpeCk7XG5cbiAgICBjb25zdCBub2RlID0gbmFtZXNwYWNlVG9Vc2UgJiYgbmFtZXNwYWNlVG9Vc2VbX25hbWVzcGFjZXMuJGJ1aWxkWEZBT2JqZWN0XShuYW1lLCBhdHRyaWJ1dGVzKSB8fCBuZXcgRW1wdHkoKTtcblxuICAgIGlmIChub2RlW194ZmFfb2JqZWN0LiRpc05zQWdub3N0aWNdKCkpIHtcbiAgICAgIHRoaXMuX25zQWdub3N0aWNMZXZlbCsrO1xuICAgIH1cblxuICAgIGlmIChoYXNOYW1lc3BhY2VEZWYgfHwgcHJlZml4ZXMgfHwgbm9kZVtfeGZhX29iamVjdC4kaXNOc0Fnbm9zdGljXSgpKSB7XG4gICAgICBub2RlW194ZmFfb2JqZWN0LiRjbGVhbnVwXSA9IHtcbiAgICAgICAgaGFzTmFtZXNwYWNlOiBoYXNOYW1lc3BhY2VEZWYsXG4gICAgICAgIHByZWZpeGVzLFxuICAgICAgICBuc0Fnbm9zdGljOiBub2RlW194ZmFfb2JqZWN0LiRpc05zQWdub3N0aWNdKClcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICBpc05zQWdub3N0aWMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25zQWdub3N0aWNMZXZlbCA+IDA7XG4gIH1cblxuICBfc2VhcmNoTmFtZXNwYWNlKG5zTmFtZSkge1xuICAgIGxldCBucyA9IHRoaXMuX25hbWVzcGFjZXMuZ2V0KG5zTmFtZSk7XG5cbiAgICBpZiAobnMpIHtcbiAgICAgIHJldHVybiBucztcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtuYW1lLCB7XG4gICAgICBjaGVja1xuICAgIH1dIG9mIE9iamVjdC5lbnRyaWVzKF9uYW1lc3BhY2VzLk5hbWVzcGFjZUlkcykpIHtcbiAgICAgIGlmIChjaGVjayhuc05hbWUpKSB7XG4gICAgICAgIG5zID0gX3NldHVwLk5hbWVzcGFjZVNldFVwW25hbWVdO1xuXG4gICAgICAgIGlmIChucykge1xuICAgICAgICAgIHRoaXMuX25hbWVzcGFjZXMuc2V0KG5zTmFtZSwgbnMpO1xuXG4gICAgICAgICAgcmV0dXJuIG5zO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbnMgPSBuZXcgX3Vua25vd24uVW5rbm93bk5hbWVzcGFjZSgrK3RoaXMuX25leHROc0lkKTtcblxuICAgIHRoaXMuX25hbWVzcGFjZXMuc2V0KG5zTmFtZSwgbnMpO1xuXG4gICAgcmV0dXJuIG5zO1xuICB9XG5cbiAgX2FkZE5hbWVzcGFjZVByZWZpeChwcmVmaXhlcykge1xuICAgIGZvciAoY29uc3Qge1xuICAgICAgcHJlZml4LFxuICAgICAgdmFsdWVcbiAgICB9IG9mIHByZWZpeGVzKSB7XG4gICAgICBjb25zdCBuYW1lc3BhY2UgPSB0aGlzLl9zZWFyY2hOYW1lc3BhY2UodmFsdWUpO1xuXG4gICAgICBsZXQgcHJlZml4U3RhY2sgPSB0aGlzLl9uYW1lc3BhY2VQcmVmaXhlcy5nZXQocHJlZml4KTtcblxuICAgICAgaWYgKCFwcmVmaXhTdGFjaykge1xuICAgICAgICBwcmVmaXhTdGFjayA9IFtdO1xuXG4gICAgICAgIHRoaXMuX25hbWVzcGFjZVByZWZpeGVzLnNldChwcmVmaXgsIHByZWZpeFN0YWNrKTtcbiAgICAgIH1cblxuICAgICAgcHJlZml4U3RhY2sucHVzaChuYW1lc3BhY2UpO1xuICAgIH1cbiAgfVxuXG4gIF9nZXROYW1lc3BhY2VUb1VzZShwcmVmaXgpIHtcbiAgICBpZiAoIXByZWZpeCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnROYW1lc3BhY2U7XG4gICAgfVxuXG4gICAgY29uc3QgcHJlZml4U3RhY2sgPSB0aGlzLl9uYW1lc3BhY2VQcmVmaXhlcy5nZXQocHJlZml4KTtcblxuICAgIGlmIChwcmVmaXhTdGFjayAmJiBwcmVmaXhTdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gcHJlZml4U3RhY2tbcHJlZml4U3RhY2subGVuZ3RoIC0gMV07XG4gICAgfVxuXG4gICAgKDAsIF91dGlsLndhcm4pKGBVbmtub3duIG5hbWVzcGFjZSBwcmVmaXg6ICR7cHJlZml4fS5gKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNsZWFuKGRhdGEpIHtcbiAgICBjb25zdCB7XG4gICAgICBoYXNOYW1lc3BhY2UsXG4gICAgICBwcmVmaXhlcyxcbiAgICAgIG5zQWdub3N0aWNcbiAgICB9ID0gZGF0YTtcblxuICAgIGlmIChoYXNOYW1lc3BhY2UpIHtcbiAgICAgIHRoaXMuX2N1cnJlbnROYW1lc3BhY2UgPSB0aGlzLl9uYW1lc3BhY2VTdGFjay5wb3AoKTtcbiAgICB9XG5cbiAgICBpZiAocHJlZml4ZXMpIHtcbiAgICAgIHByZWZpeGVzLmZvckVhY2goKHtcbiAgICAgICAgcHJlZml4XG4gICAgICB9KSA9PiB7XG4gICAgICAgIHRoaXMuX25hbWVzcGFjZVByZWZpeGVzLmdldChwcmVmaXgpLnBvcCgpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKG5zQWdub3N0aWMpIHtcbiAgICAgIHRoaXMuX25zQWdub3N0aWNMZXZlbC0tO1xuICAgIH1cbiAgfVxuXG59XG5cbmV4cG9ydHMuQnVpbGRlciA9IEJ1aWxkZXI7XG5cbi8qKiovIH0pLFxuLyogODggKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuTmFtZXNwYWNlU2V0VXAgPSB2b2lkIDA7XG5cbnZhciBfY29uZmlnID0gX193X3BkZmpzX3JlcXVpcmVfXyg4OSk7XG5cbnZhciBfY29ubmVjdGlvbl9zZXQgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDkwKTtcblxudmFyIF9kYXRhc2V0cyA9IF9fd19wZGZqc19yZXF1aXJlX18oOTEpO1xuXG52YXIgX2xvY2FsZV9zZXQgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDkyKTtcblxudmFyIF9zaWduYXR1cmUgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDkzKTtcblxudmFyIF9zdHlsZXNoZWV0ID0gX193X3BkZmpzX3JlcXVpcmVfXyg5NCk7XG5cbnZhciBfdGVtcGxhdGUgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDgwKTtcblxudmFyIF94ZHAgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDk1KTtcblxudmFyIF94aHRtbCA9IF9fd19wZGZqc19yZXF1aXJlX18oOTYpO1xuXG5jb25zdCBOYW1lc3BhY2VTZXRVcCA9IHtcbiAgY29uZmlnOiBfY29uZmlnLkNvbmZpZ05hbWVzcGFjZSxcbiAgY29ubmVjdGlvbjogX2Nvbm5lY3Rpb25fc2V0LkNvbm5lY3Rpb25TZXROYW1lc3BhY2UsXG4gIGRhdGFzZXRzOiBfZGF0YXNldHMuRGF0YXNldHNOYW1lc3BhY2UsXG4gIGxvY2FsZVNldDogX2xvY2FsZV9zZXQuTG9jYWxlU2V0TmFtZXNwYWNlLFxuICBzaWduYXR1cmU6IF9zaWduYXR1cmUuU2lnbmF0dXJlTmFtZXNwYWNlLFxuICBzdHlsZXNoZWV0OiBfc3R5bGVzaGVldC5TdHlsZXNoZWV0TmFtZXNwYWNlLFxuICB0ZW1wbGF0ZTogX3RlbXBsYXRlLlRlbXBsYXRlTmFtZXNwYWNlLFxuICB4ZHA6IF94ZHAuWGRwTmFtZXNwYWNlLFxuICB4aHRtbDogX3hodG1sLlhodG1sTmFtZXNwYWNlXG59O1xuZXhwb3J0cy5OYW1lc3BhY2VTZXRVcCA9IE5hbWVzcGFjZVNldFVwO1xuXG4vKioqLyB9KSxcbi8qIDg5ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLkNvbmZpZ05hbWVzcGFjZSA9IHZvaWQgMDtcblxudmFyIF9uYW1lc3BhY2VzID0gX193X3BkZmpzX3JlcXVpcmVfXyg3Nyk7XG5cbnZhciBfeGZhX29iamVjdCA9IF9fd19wZGZqc19yZXF1aXJlX18oNzUpO1xuXG52YXIgX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXyg3Nik7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbmNvbnN0IENPTkZJR19OU19JRCA9IF9uYW1lc3BhY2VzLk5hbWVzcGFjZUlkcy5jb25maWcuaWQ7XG5cbmNsYXNzIEFjcm9iYXQgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcImFjcm9iYXRcIiwgdHJ1ZSk7XG4gICAgdGhpcy5hY3JvYmF0NyA9IG51bGw7XG4gICAgdGhpcy5hdXRvU2F2ZSA9IG51bGw7XG4gICAgdGhpcy5jb21tb24gPSBudWxsO1xuICAgIHRoaXMudmFsaWRhdGUgPSBudWxsO1xuICAgIHRoaXMudmFsaWRhdGVBcHByb3ZhbFNpZ25hdHVyZXMgPSBudWxsO1xuICAgIHRoaXMuc3VibWl0VXJsID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gIH1cblxufVxuXG5jbGFzcyBBY3JvYmF0NyBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiYWNyb2JhdDdcIiwgdHJ1ZSk7XG4gICAgdGhpcy5keW5hbWljUmVuZGVyID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIEFEQkVfSlNDb25zb2xlIGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJBREJFX0pTQ29uc29sZVwiLCBbXCJkZWxlZ2F0ZVwiLCBcIkVuYWJsZVwiLCBcIkRpc2FibGVcIl0pO1xuICB9XG5cbn1cblxuY2xhc3MgQURCRV9KU0RlYnVnZ2VyIGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJBREJFX0pTRGVidWdnZXJcIiwgW1wiZGVsZWdhdGVcIiwgXCJFbmFibGVcIiwgXCJEaXNhYmxlXCJdKTtcbiAgfVxuXG59XG5cbmNsYXNzIEFkZFNpbGVudFByaW50IGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uMDEge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcImFkZFNpbGVudFByaW50XCIpO1xuICB9XG5cbn1cblxuY2xhc3MgQWRkVmlld2VyUHJlZmVyZW5jZXMgZXh0ZW5kcyBfeGZhX29iamVjdC5PcHRpb24wMSB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiYWRkVmlld2VyUHJlZmVyZW5jZXNcIik7XG4gIH1cblxufVxuXG5jbGFzcyBBZGp1c3REYXRhIGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uMTAge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcImFkanVzdERhdGFcIik7XG4gIH1cblxufVxuXG5jbGFzcyBBZG9iZUV4dGVuc2lvbkxldmVsIGV4dGVuZHMgX3hmYV9vYmplY3QuSW50ZWdlck9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiYWRvYmVFeHRlbnNpb25MZXZlbFwiLCAwLCBuID0+IG4gPj0gMSAmJiBuIDw9IDgpO1xuICB9XG5cbn1cblxuY2xhc3MgQWdlbnQgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcImFnZW50XCIsIHRydWUpO1xuICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSA/IGF0dHJpYnV0ZXMubmFtZS50cmltKCkgOiBcIlwiO1xuICAgIHRoaXMuY29tbW9uID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gIH1cblxufVxuXG5jbGFzcyBBbHdheXNFbWJlZCBleHRlbmRzIF94ZmFfb2JqZWN0LkNvbnRlbnRPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcImFsd2F5c0VtYmVkXCIpO1xuICB9XG5cbn1cblxuY2xhc3MgQW1kIGV4dGVuZHMgX3hmYV9vYmplY3QuU3RyaW5nT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJhbWRcIik7XG4gIH1cblxufVxuXG5jbGFzcyBBcmVhIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJhcmVhXCIpO1xuICAgIHRoaXMubGV2ZWwgPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMubGV2ZWwsXG4gICAgICBkZWZhdWx0VmFsdWU6IDAsXG4gICAgICB2YWxpZGF0ZTogbiA9PiBuID49IDEgJiYgbiA8PSAzXG4gICAgfSk7XG4gICAgdGhpcy5uYW1lID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMubmFtZSwgW1wiXCIsIFwiYmFyY29kZVwiLCBcImNvcmVpbml0XCIsIFwiZGV2aWNlRHJpdmVyXCIsIFwiZm9udFwiLCBcImdlbmVyYWxcIiwgXCJsYXlvdXRcIiwgXCJtZXJnZVwiLCBcInNjcmlwdFwiLCBcInNpZ25hdHVyZVwiLCBcInNvdXJjZVNldFwiLCBcInRlbXBsYXRlQ2FjaGVcIl0pO1xuICB9XG5cbn1cblxuY2xhc3MgQXR0cmlidXRlcyBleHRlbmRzIF94ZmFfb2JqZWN0Lk9wdGlvbk9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiYXR0cmlidXRlc1wiLCBbXCJwcmVzZXJ2ZVwiLCBcImRlbGVnYXRlXCIsIFwiaWdub3JlXCJdKTtcbiAgfVxuXG59XG5cbmNsYXNzIEF1dG9TYXZlIGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJhdXRvU2F2ZVwiLCBbXCJkaXNhYmxlZFwiLCBcImVuYWJsZWRcIl0pO1xuICB9XG5cbn1cblxuY2xhc3MgQmFzZSBleHRlbmRzIF94ZmFfb2JqZWN0LlN0cmluZ09iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiYmFzZVwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIEJhdGNoT3V0cHV0IGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJiYXRjaE91dHB1dFwiKTtcbiAgICB0aGlzLmZvcm1hdCA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLmZvcm1hdCwgW1wibm9uZVwiLCBcImNvbmNhdFwiLCBcInppcFwiLCBcInppcENvbXByZXNzXCJdKTtcbiAgfVxuXG59XG5cbmNsYXNzIEJlaGF2aW9yT3ZlcnJpZGUgZXh0ZW5kcyBfeGZhX29iamVjdC5Db250ZW50T2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJiZWhhdmlvck92ZXJyaWRlXCIpO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRmaW5hbGl6ZV0oKSB7XG4gICAgdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0gPSBuZXcgTWFwKHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXFxzKy8pLmZpbHRlcih4ID0+IHguaW5jbHVkZXMoXCI6XCIpKS5tYXAoeCA9PiB4LnNwbGl0KFwiOlwiLCAyKSkpO1xuICB9XG5cbn1cblxuY2xhc3MgQ2FjaGUgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcImNhY2hlXCIsIHRydWUpO1xuICAgIHRoaXMudGVtcGxhdGVDYWNoZSA9IG51bGw7XG4gIH1cblxufVxuXG5jbGFzcyBDaGFuZ2UgZXh0ZW5kcyBfeGZhX29iamVjdC5PcHRpb24wMSB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiY2hhbmdlXCIpO1xuICB9XG5cbn1cblxuY2xhc3MgQ29tbW9uIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJjb21tb25cIiwgdHJ1ZSk7XG4gICAgdGhpcy5kYXRhID0gbnVsbDtcbiAgICB0aGlzLmxvY2FsZSA9IG51bGw7XG4gICAgdGhpcy5sb2NhbGVTZXQgPSBudWxsO1xuICAgIHRoaXMubWVzc2FnaW5nID0gbnVsbDtcbiAgICB0aGlzLnN1cHByZXNzQmFubmVyID0gbnVsbDtcbiAgICB0aGlzLnRlbXBsYXRlID0gbnVsbDtcbiAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdpbmcgPSBudWxsO1xuICAgIHRoaXMudmVyc2lvbkNvbnRyb2wgPSBudWxsO1xuICAgIHRoaXMubG9nID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gIH1cblxufVxuXG5jbGFzcyBDb21wcmVzcyBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiY29tcHJlc3NcIik7XG4gICAgdGhpcy5zY29wZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLnNjb3BlLCBbXCJpbWFnZU9ubHlcIiwgXCJkb2N1bWVudFwiXSk7XG4gIH1cblxufVxuXG5jbGFzcyBDb21wcmVzc0xvZ2ljYWxTdHJ1Y3R1cmUgZXh0ZW5kcyBfeGZhX29iamVjdC5PcHRpb24wMSB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiY29tcHJlc3NMb2dpY2FsU3RydWN0dXJlXCIpO1xuICB9XG5cbn1cblxuY2xhc3MgQ29tcHJlc3NPYmplY3RTdHJlYW0gZXh0ZW5kcyBfeGZhX29iamVjdC5PcHRpb24xMCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiY29tcHJlc3NPYmplY3RTdHJlYW1cIik7XG4gIH1cblxufVxuXG5jbGFzcyBDb21wcmVzc2lvbiBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiY29tcHJlc3Npb25cIiwgdHJ1ZSk7XG4gICAgdGhpcy5jb21wcmVzc0xvZ2ljYWxTdHJ1Y3R1cmUgPSBudWxsO1xuICAgIHRoaXMuY29tcHJlc3NPYmplY3RTdHJlYW0gPSBudWxsO1xuICAgIHRoaXMubGV2ZWwgPSBudWxsO1xuICAgIHRoaXMudHlwZSA9IG51bGw7XG4gIH1cblxufVxuXG5jbGFzcyBDb25maWcgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcImNvbmZpZ1wiLCB0cnVlKTtcbiAgICB0aGlzLmFjcm9iYXQgPSBudWxsO1xuICAgIHRoaXMucHJlc2VudCA9IG51bGw7XG4gICAgdGhpcy50cmFjZSA9IG51bGw7XG4gICAgdGhpcy5hZ2VudCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICB9XG5cbn1cblxuY2xhc3MgQ29uZm9ybWFuY2UgZXh0ZW5kcyBfeGZhX29iamVjdC5PcHRpb25PYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcImNvbmZvcm1hbmNlXCIsIFtcIkFcIiwgXCJCXCJdKTtcbiAgfVxuXG59XG5cbmNsYXNzIENvbnRlbnRDb3B5IGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uMDEge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcImNvbnRlbnRDb3B5XCIpO1xuICB9XG5cbn1cblxuY2xhc3MgQ29waWVzIGV4dGVuZHMgX3hmYV9vYmplY3QuSW50ZWdlck9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiY29waWVzXCIsIDEsIG4gPT4gbiA+PSAxKTtcbiAgfVxuXG59XG5cbmNsYXNzIENyZWF0b3IgZXh0ZW5kcyBfeGZhX29iamVjdC5TdHJpbmdPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcImNyZWF0b3JcIik7XG4gIH1cblxufVxuXG5jbGFzcyBDdXJyZW50UGFnZSBleHRlbmRzIF94ZmFfb2JqZWN0LkludGVnZXJPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcImN1cnJlbnRQYWdlXCIsIDAsIG4gPT4gbiA+PSAwKTtcbiAgfVxuXG59XG5cbmNsYXNzIERhdGEgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcImRhdGFcIiwgdHJ1ZSk7XG4gICAgdGhpcy5hZGp1c3REYXRhID0gbnVsbDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBudWxsO1xuICAgIHRoaXMuaW5jcmVtZW50YWxMb2FkID0gbnVsbDtcbiAgICB0aGlzLm91dHB1dFhTTCA9IG51bGw7XG4gICAgdGhpcy5yYW5nZSA9IG51bGw7XG4gICAgdGhpcy5yZWNvcmQgPSBudWxsO1xuICAgIHRoaXMuc3RhcnROb2RlID0gbnVsbDtcbiAgICB0aGlzLnVyaSA9IG51bGw7XG4gICAgdGhpcy53aW5kb3cgPSBudWxsO1xuICAgIHRoaXMueHNsID0gbnVsbDtcbiAgICB0aGlzLmV4Y2x1ZGVOUyA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMudHJhbnNmb3JtID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gIH1cblxufVxuXG5jbGFzcyBEZWJ1ZyBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiZGVidWdcIiwgdHJ1ZSk7XG4gICAgdGhpcy51cmkgPSBudWxsO1xuICB9XG5cbn1cblxuY2xhc3MgRGVmYXVsdFR5cGVmYWNlIGV4dGVuZHMgX3hmYV9vYmplY3QuQ29udGVudE9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiZGVmYXVsdFR5cGVmYWNlXCIpO1xuICAgIHRoaXMud3JpdGluZ1NjcmlwdCA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLndyaXRpbmdTY3JpcHQsIFtcIipcIiwgXCJBcmFiaWNcIiwgXCJDeXJpbGxpY1wiLCBcIkVhc3RFdXJvcGVhblJvbWFuXCIsIFwiR3JlZWtcIiwgXCJIZWJyZXdcIiwgXCJKYXBhbmVzZVwiLCBcIktvcmVhblwiLCBcIlJvbWFuXCIsIFwiU2ltcGxpZmllZENoaW5lc2VcIiwgXCJUaGFpXCIsIFwiVHJhZGl0aW9uYWxDaGluZXNlXCIsIFwiVmlldG5hbWVzZVwiXSk7XG4gIH1cblxufVxuXG5jbGFzcyBEZXN0aW5hdGlvbiBleHRlbmRzIF94ZmFfb2JqZWN0Lk9wdGlvbk9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiZGVzdGluYXRpb25cIiwgW1wicGRmXCIsIFwicGNsXCIsIFwicHNcIiwgXCJ3ZWJDbGllbnRcIiwgXCJ6cGxcIl0pO1xuICB9XG5cbn1cblxuY2xhc3MgRG9jdW1lbnRBc3NlbWJseSBleHRlbmRzIF94ZmFfb2JqZWN0Lk9wdGlvbjAxIHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJkb2N1bWVudEFzc2VtYmx5XCIpO1xuICB9XG5cbn1cblxuY2xhc3MgRHJpdmVyIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJkcml2ZXJcIiwgdHJ1ZSk7XG4gICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lID8gYXR0cmlidXRlcy5uYW1lLnRyaW0oKSA6IFwiXCI7XG4gICAgdGhpcy5mb250SW5mbyA9IG51bGw7XG4gICAgdGhpcy54ZGMgPSBudWxsO1xuICB9XG5cbn1cblxuY2xhc3MgRHVwbGV4T3B0aW9uIGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJkdXBsZXhPcHRpb25cIiwgW1wic2ltcGxleFwiLCBcImR1cGxleEZsaXBMb25nRWRnZVwiLCBcImR1cGxleEZsaXBTaG9ydEVkZ2VcIl0pO1xuICB9XG5cbn1cblxuY2xhc3MgRHluYW1pY1JlbmRlciBleHRlbmRzIF94ZmFfb2JqZWN0Lk9wdGlvbk9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiZHluYW1pY1JlbmRlclwiLCBbXCJmb3JiaWRkZW5cIiwgXCJyZXF1aXJlZFwiXSk7XG4gIH1cblxufVxuXG5jbGFzcyBFbWJlZCBleHRlbmRzIF94ZmFfb2JqZWN0Lk9wdGlvbjAxIHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJlbWJlZFwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIEVuY3J5cHQgZXh0ZW5kcyBfeGZhX29iamVjdC5PcHRpb24wMSB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiZW5jcnlwdFwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIEVuY3J5cHRpb24gZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcImVuY3J5cHRpb25cIiwgdHJ1ZSk7XG4gICAgdGhpcy5lbmNyeXB0ID0gbnVsbDtcbiAgICB0aGlzLmVuY3J5cHRpb25MZXZlbCA9IG51bGw7XG4gICAgdGhpcy5wZXJtaXNzaW9ucyA9IG51bGw7XG4gIH1cblxufVxuXG5jbGFzcyBFbmNyeXB0aW9uTGV2ZWwgZXh0ZW5kcyBfeGZhX29iamVjdC5PcHRpb25PYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcImVuY3J5cHRpb25MZXZlbFwiLCBbXCI0MGJpdFwiLCBcIjEyOGJpdFwiXSk7XG4gIH1cblxufVxuXG5jbGFzcyBFbmZvcmNlIGV4dGVuZHMgX3hmYV9vYmplY3QuU3RyaW5nT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJlbmZvcmNlXCIpO1xuICB9XG5cbn1cblxuY2xhc3MgRXF1YXRlIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJlcXVhdGVcIik7XG4gICAgdGhpcy5mb3JjZSA9ICgwLCBfdXRpbHMuZ2V0SW50ZWdlcikoe1xuICAgICAgZGF0YTogYXR0cmlidXRlcy5mb3JjZSxcbiAgICAgIGRlZmF1bHRWYWx1ZTogMSxcbiAgICAgIHZhbGlkYXRlOiBuID0+IG4gPT09IDBcbiAgICB9KTtcbiAgICB0aGlzLmZyb20gPSBhdHRyaWJ1dGVzLmZyb20gfHwgXCJcIjtcbiAgICB0aGlzLnRvID0gYXR0cmlidXRlcy50byB8fCBcIlwiO1xuICB9XG5cbn1cblxuY2xhc3MgRXF1YXRlUmFuZ2UgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcImVxdWF0ZVJhbmdlXCIpO1xuICAgIHRoaXMuZnJvbSA9IGF0dHJpYnV0ZXMuZnJvbSB8fCBcIlwiO1xuICAgIHRoaXMudG8gPSBhdHRyaWJ1dGVzLnRvIHx8IFwiXCI7XG4gICAgdGhpcy5fdW5pY29kZVJhbmdlID0gYXR0cmlidXRlcy51bmljb2RlUmFuZ2UgfHwgXCJcIjtcbiAgfVxuXG4gIGdldCB1bmljb2RlUmFuZ2UoKSB7XG4gICAgY29uc3QgcmFuZ2VzID0gW107XG4gICAgY29uc3QgdW5pY29kZVJlZ2V4ID0gL1VcXCsoWzAtOWEtZkEtRl0rKS87XG4gICAgY29uc3QgdW5pY29kZVJhbmdlID0gdGhpcy5fdW5pY29kZVJhbmdlO1xuXG4gICAgZm9yIChsZXQgcmFuZ2Ugb2YgdW5pY29kZVJhbmdlLnNwbGl0KFwiLFwiKS5tYXAoeCA9PiB4LnRyaW0oKSkuZmlsdGVyKHggPT4gISF4KSkge1xuICAgICAgcmFuZ2UgPSByYW5nZS5zcGxpdChcIi1cIiwgMikubWFwKHggPT4ge1xuICAgICAgICBjb25zdCBmb3VuZCA9IHgubWF0Y2godW5pY29kZVJlZ2V4KTtcblxuICAgICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGFyc2VJbnQoZm91bmRbMV0sIDE2KTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAocmFuZ2UubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJhbmdlLnB1c2gocmFuZ2VbMF0pO1xuICAgICAgfVxuXG4gICAgICByYW5nZXMucHVzaChyYW5nZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwidW5pY29kZVJhbmdlXCIsIHJhbmdlcyk7XG4gIH1cblxufVxuXG5jbGFzcyBFeGNsdWRlIGV4dGVuZHMgX3hmYV9vYmplY3QuQ29udGVudE9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiZXhjbHVkZVwiKTtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kZmluYWxpemVdKCkge1xuICAgIHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdID0gdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0udHJpbSgpLnNwbGl0KC9cXHMrLykuZmlsdGVyKHggPT4geCAmJiBbXCJjYWxjdWxhdGVcIiwgXCJjbG9zZVwiLCBcImVudGVyXCIsIFwiZXhpdFwiLCBcImluaXRpYWxpemVcIiwgXCJyZWFkeVwiLCBcInZhbGlkYXRlXCJdLmluY2x1ZGVzKHgpKTtcbiAgfVxuXG59XG5cbmNsYXNzIEV4Y2x1ZGVOUyBleHRlbmRzIF94ZmFfb2JqZWN0LlN0cmluZ09iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiZXhjbHVkZU5TXCIpO1xuICB9XG5cbn1cblxuY2xhc3MgRmxpcExhYmVsIGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJmbGlwTGFiZWxcIiwgW1widXNlUHJpbnRlclNldHRpbmdcIiwgXCJvblwiLCBcIm9mZlwiXSk7XG4gIH1cblxufVxuXG5jbGFzcyBGb250SW5mbyBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiZm9udEluZm9cIiwgdHJ1ZSk7XG4gICAgdGhpcy5lbWJlZCA9IG51bGw7XG4gICAgdGhpcy5tYXAgPSBudWxsO1xuICAgIHRoaXMuc3Vic2V0QmVsb3cgPSBudWxsO1xuICAgIHRoaXMuYWx3YXlzRW1iZWQgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLmRlZmF1bHRUeXBlZmFjZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMubmV2ZXJFbWJlZCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICB9XG5cbn1cblxuY2xhc3MgRm9ybUZpZWxkRmlsbGluZyBleHRlbmRzIF94ZmFfb2JqZWN0Lk9wdGlvbjAxIHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJmb3JtRmllbGRGaWxsaW5nXCIpO1xuICB9XG5cbn1cblxuY2xhc3MgR3JvdXBQYXJlbnQgZXh0ZW5kcyBfeGZhX29iamVjdC5TdHJpbmdPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcImdyb3VwUGFyZW50XCIpO1xuICB9XG5cbn1cblxuY2xhc3MgSWZFbXB0eSBleHRlbmRzIF94ZmFfb2JqZWN0Lk9wdGlvbk9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiaWZFbXB0eVwiLCBbXCJkYXRhVmFsdWVcIiwgXCJkYXRhR3JvdXBcIiwgXCJpZ25vcmVcIiwgXCJyZW1vdmVcIl0pO1xuICB9XG5cbn1cblxuY2xhc3MgSW5jbHVkZVhEUENvbnRlbnQgZXh0ZW5kcyBfeGZhX29iamVjdC5TdHJpbmdPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcImluY2x1ZGVYRFBDb250ZW50XCIpO1xuICB9XG5cbn1cblxuY2xhc3MgSW5jcmVtZW50YWxMb2FkIGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJpbmNyZW1lbnRhbExvYWRcIiwgW1wibm9uZVwiLCBcImZvcndhcmRPbmx5XCJdKTtcbiAgfVxuXG59XG5cbmNsYXNzIEluY3JlbWVudGFsTWVyZ2UgZXh0ZW5kcyBfeGZhX29iamVjdC5PcHRpb24wMSB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiaW5jcmVtZW50YWxNZXJnZVwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIEludGVyYWN0aXZlIGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uMDEge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcImludGVyYWN0aXZlXCIpO1xuICB9XG5cbn1cblxuY2xhc3MgSm9nIGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJqb2dcIiwgW1widXNlUHJpbnRlclNldHRpbmdcIiwgXCJub25lXCIsIFwicGFnZVNldFwiXSk7XG4gIH1cblxufVxuXG5jbGFzcyBMYWJlbFByaW50ZXIgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcImxhYmVsUHJpbnRlclwiLCB0cnVlKTtcbiAgICB0aGlzLm5hbWUgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5uYW1lLCBbXCJ6cGxcIiwgXCJkcGxcIiwgXCJpcGxcIiwgXCJ0Y3BsXCJdKTtcbiAgICB0aGlzLmJhdGNoT3V0cHV0ID0gbnVsbDtcbiAgICB0aGlzLmZsaXBMYWJlbCA9IG51bGw7XG4gICAgdGhpcy5mb250SW5mbyA9IG51bGw7XG4gICAgdGhpcy54ZGMgPSBudWxsO1xuICB9XG5cbn1cblxuY2xhc3MgTGF5b3V0IGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJsYXlvdXRcIiwgW1wicGFnaW5hdGVcIiwgXCJwYW5lbFwiXSk7XG4gIH1cblxufVxuXG5jbGFzcyBMZXZlbCBleHRlbmRzIF94ZmFfb2JqZWN0LkludGVnZXJPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcImxldmVsXCIsIDAsIG4gPT4gbiA+IDApO1xuICB9XG5cbn1cblxuY2xhc3MgTGluZWFyaXplZCBleHRlbmRzIF94ZmFfb2JqZWN0Lk9wdGlvbjAxIHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJsaW5lYXJpemVkXCIpO1xuICB9XG5cbn1cblxuY2xhc3MgTG9jYWxlIGV4dGVuZHMgX3hmYV9vYmplY3QuU3RyaW5nT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJsb2NhbGVcIik7XG4gIH1cblxufVxuXG5jbGFzcyBMb2NhbGVTZXQgZXh0ZW5kcyBfeGZhX29iamVjdC5TdHJpbmdPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcImxvY2FsZVNldFwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIExvZyBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwibG9nXCIsIHRydWUpO1xuICAgIHRoaXMubW9kZSA9IG51bGw7XG4gICAgdGhpcy50aHJlc2hvbGQgPSBudWxsO1xuICAgIHRoaXMudG8gPSBudWxsO1xuICAgIHRoaXMudXJpID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIE1hcEVsZW1lbnQgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcIm1hcFwiLCB0cnVlKTtcbiAgICB0aGlzLmVxdWF0ZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuZXF1YXRlUmFuZ2UgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgfVxuXG59XG5cbmNsYXNzIE1lZGl1bUluZm8gZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcIm1lZGl1bUluZm9cIiwgdHJ1ZSk7XG4gICAgdGhpcy5tYXAgPSBudWxsO1xuICB9XG5cbn1cblxuY2xhc3MgTWVzc2FnZSBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwibWVzc2FnZVwiLCB0cnVlKTtcbiAgICB0aGlzLm1zZ0lkID0gbnVsbDtcbiAgICB0aGlzLnNldmVyaXR5ID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIE1lc3NhZ2luZyBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwibWVzc2FnaW5nXCIsIHRydWUpO1xuICAgIHRoaXMubWVzc2FnZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICB9XG5cbn1cblxuY2xhc3MgTW9kZSBleHRlbmRzIF94ZmFfb2JqZWN0Lk9wdGlvbk9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwibW9kZVwiLCBbXCJhcHBlbmRcIiwgXCJvdmVyd3JpdGVcIl0pO1xuICB9XG5cbn1cblxuY2xhc3MgTW9kaWZ5QW5ub3RzIGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uMDEge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcIm1vZGlmeUFubm90c1wiKTtcbiAgfVxuXG59XG5cbmNsYXNzIE1zZ0lkIGV4dGVuZHMgX3hmYV9vYmplY3QuSW50ZWdlck9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwibXNnSWRcIiwgMSwgbiA9PiBuID49IDEpO1xuICB9XG5cbn1cblxuY2xhc3MgTmFtZUF0dHIgZXh0ZW5kcyBfeGZhX29iamVjdC5TdHJpbmdPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcIm5hbWVBdHRyXCIpO1xuICB9XG5cbn1cblxuY2xhc3MgTmV2ZXJFbWJlZCBleHRlbmRzIF94ZmFfb2JqZWN0LkNvbnRlbnRPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcIm5ldmVyRW1iZWRcIik7XG4gIH1cblxufVxuXG5jbGFzcyBOdW1iZXJPZkNvcGllcyBleHRlbmRzIF94ZmFfb2JqZWN0LkludGVnZXJPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcIm51bWJlck9mQ29waWVzXCIsIG51bGwsIG4gPT4gbiA+PSAyICYmIG4gPD0gNSk7XG4gIH1cblxufVxuXG5jbGFzcyBPcGVuQWN0aW9uIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJvcGVuQWN0aW9uXCIsIHRydWUpO1xuICAgIHRoaXMuZGVzdGluYXRpb24gPSBudWxsO1xuICB9XG5cbn1cblxuY2xhc3MgT3V0cHV0IGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJvdXRwdXRcIiwgdHJ1ZSk7XG4gICAgdGhpcy50byA9IG51bGw7XG4gICAgdGhpcy50eXBlID0gbnVsbDtcbiAgICB0aGlzLnVyaSA9IG51bGw7XG4gIH1cblxufVxuXG5jbGFzcyBPdXRwdXRCaW4gZXh0ZW5kcyBfeGZhX29iamVjdC5TdHJpbmdPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcIm91dHB1dEJpblwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIE91dHB1dFhTTCBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwib3V0cHV0WFNMXCIsIHRydWUpO1xuICAgIHRoaXMudXJpID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIE92ZXJwcmludCBleHRlbmRzIF94ZmFfb2JqZWN0Lk9wdGlvbk9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwib3ZlcnByaW50XCIsIFtcIm5vbmVcIiwgXCJib3RoXCIsIFwiZHJhd1wiLCBcImZpZWxkXCJdKTtcbiAgfVxuXG59XG5cbmNsYXNzIFBhY2tldHMgZXh0ZW5kcyBfeGZhX29iamVjdC5TdHJpbmdPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcInBhY2tldHNcIik7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGZpbmFsaXplXSgpIHtcbiAgICBpZiAodGhpc1tfeGZhX29iamVjdC4kY29udGVudF0gPT09IFwiKlwiKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0gPSB0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XS50cmltKCkuc3BsaXQoL1xccysvKS5maWx0ZXIoeCA9PiBbXCJjb25maWdcIiwgXCJkYXRhc2V0c1wiLCBcInRlbXBsYXRlXCIsIFwieGZkZlwiLCBcInhzbHRcIl0uaW5jbHVkZXMoeCkpO1xuICB9XG5cbn1cblxuY2xhc3MgUGFnZU9mZnNldCBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwicGFnZU9mZnNldFwiKTtcbiAgICB0aGlzLnggPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMueCxcbiAgICAgIGRlZmF1bHRWYWx1ZTogXCJ1c2VYRENTZXR0aW5nXCIsXG4gICAgICB2YWxpZGF0ZTogbiA9PiB0cnVlXG4gICAgfSk7XG4gICAgdGhpcy55ID0gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLnksXG4gICAgICBkZWZhdWx0VmFsdWU6IFwidXNlWERDU2V0dGluZ1wiLFxuICAgICAgdmFsaWRhdGU6IG4gPT4gdHJ1ZVxuICAgIH0pO1xuICB9XG5cbn1cblxuY2xhc3MgUGFnZVJhbmdlIGV4dGVuZHMgX3hmYV9vYmplY3QuU3RyaW5nT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJwYWdlUmFuZ2VcIik7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGZpbmFsaXplXSgpIHtcbiAgICBjb25zdCBudW1iZXJzID0gdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0udHJpbSgpLnNwbGl0KC9cXHMrLykubWFwKHggPT4gcGFyc2VJbnQoeCwgMTApKTtcblxuICAgIGNvbnN0IHJhbmdlcyA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGlpID0gbnVtYmVycy5sZW5ndGg7IGkgPCBpaTsgaSArPSAyKSB7XG4gICAgICByYW5nZXMucHVzaChudW1iZXJzLnNsaWNlKGksIGkgKyAyKSk7XG4gICAgfVxuXG4gICAgdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0gPSByYW5nZXM7XG4gIH1cblxufVxuXG5jbGFzcyBQYWdpbmF0aW9uIGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJwYWdpbmF0aW9uXCIsIFtcInNpbXBsZXhcIiwgXCJkdXBsZXhTaG9ydEVkZ2VcIiwgXCJkdXBsZXhMb25nRWRnZVwiXSk7XG4gIH1cblxufVxuXG5jbGFzcyBQYWdpbmF0aW9uT3ZlcnJpZGUgZXh0ZW5kcyBfeGZhX29iamVjdC5PcHRpb25PYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcInBhZ2luYXRpb25PdmVycmlkZVwiLCBbXCJub25lXCIsIFwiZm9yY2VEdXBsZXhcIiwgXCJmb3JjZUR1cGxleExvbmdFZGdlXCIsIFwiZm9yY2VEdXBsZXhTaG9ydEVkZ2VcIiwgXCJmb3JjZVNpbXBsZXhcIl0pO1xuICB9XG5cbn1cblxuY2xhc3MgUGFydCBleHRlbmRzIF94ZmFfb2JqZWN0LkludGVnZXJPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcInBhcnRcIiwgMSwgbiA9PiBmYWxzZSk7XG4gIH1cblxufVxuXG5jbGFzcyBQY2wgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcInBjbFwiLCB0cnVlKTtcbiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgXCJcIjtcbiAgICB0aGlzLmJhdGNoT3V0cHV0ID0gbnVsbDtcbiAgICB0aGlzLmZvbnRJbmZvID0gbnVsbDtcbiAgICB0aGlzLmpvZyA9IG51bGw7XG4gICAgdGhpcy5tZWRpdW1JbmZvID0gbnVsbDtcbiAgICB0aGlzLm91dHB1dEJpbiA9IG51bGw7XG4gICAgdGhpcy5wYWdlT2Zmc2V0ID0gbnVsbDtcbiAgICB0aGlzLnN0YXBsZSA9IG51bGw7XG4gICAgdGhpcy54ZGMgPSBudWxsO1xuICB9XG5cbn1cblxuY2xhc3MgUGRmIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJwZGZcIiwgdHJ1ZSk7XG4gICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8IFwiXCI7XG4gICAgdGhpcy5hZG9iZUV4dGVuc2lvbkxldmVsID0gbnVsbDtcbiAgICB0aGlzLmJhdGNoT3V0cHV0ID0gbnVsbDtcbiAgICB0aGlzLmNvbXByZXNzaW9uID0gbnVsbDtcbiAgICB0aGlzLmNyZWF0b3IgPSBudWxsO1xuICAgIHRoaXMuZW5jcnlwdGlvbiA9IG51bGw7XG4gICAgdGhpcy5mb250SW5mbyA9IG51bGw7XG4gICAgdGhpcy5pbnRlcmFjdGl2ZSA9IG51bGw7XG4gICAgdGhpcy5saW5lYXJpemVkID0gbnVsbDtcbiAgICB0aGlzLm9wZW5BY3Rpb24gPSBudWxsO1xuICAgIHRoaXMucGRmYSA9IG51bGw7XG4gICAgdGhpcy5wcm9kdWNlciA9IG51bGw7XG4gICAgdGhpcy5yZW5kZXJQb2xpY3kgPSBudWxsO1xuICAgIHRoaXMuc2NyaXB0TW9kZWwgPSBudWxsO1xuICAgIHRoaXMuc2lsZW50UHJpbnQgPSBudWxsO1xuICAgIHRoaXMuc3VibWl0Rm9ybWF0ID0gbnVsbDtcbiAgICB0aGlzLnRhZ2dlZCA9IG51bGw7XG4gICAgdGhpcy52ZXJzaW9uID0gbnVsbDtcbiAgICB0aGlzLnZpZXdlclByZWZlcmVuY2VzID0gbnVsbDtcbiAgICB0aGlzLnhkYyA9IG51bGw7XG4gIH1cblxufVxuXG5jbGFzcyBQZGZhIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJwZGZhXCIsIHRydWUpO1xuICAgIHRoaXMuYW1kID0gbnVsbDtcbiAgICB0aGlzLmNvbmZvcm1hbmNlID0gbnVsbDtcbiAgICB0aGlzLmluY2x1ZGVYRFBDb250ZW50ID0gbnVsbDtcbiAgICB0aGlzLnBhcnQgPSBudWxsO1xuICB9XG5cbn1cblxuY2xhc3MgUGVybWlzc2lvbnMgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcInBlcm1pc3Npb25zXCIsIHRydWUpO1xuICAgIHRoaXMuYWNjZXNzaWJsZUNvbnRlbnQgPSBudWxsO1xuICAgIHRoaXMuY2hhbmdlID0gbnVsbDtcbiAgICB0aGlzLmNvbnRlbnRDb3B5ID0gbnVsbDtcbiAgICB0aGlzLmRvY3VtZW50QXNzZW1ibHkgPSBudWxsO1xuICAgIHRoaXMuZm9ybUZpZWxkRmlsbGluZyA9IG51bGw7XG4gICAgdGhpcy5tb2RpZnlBbm5vdHMgPSBudWxsO1xuICAgIHRoaXMucGxhaW50ZXh0TWV0YWRhdGEgPSBudWxsO1xuICAgIHRoaXMucHJpbnQgPSBudWxsO1xuICAgIHRoaXMucHJpbnRIaWdoUXVhbGl0eSA9IG51bGw7XG4gIH1cblxufVxuXG5jbGFzcyBQaWNrVHJheUJ5UERGU2l6ZSBleHRlbmRzIF94ZmFfb2JqZWN0Lk9wdGlvbjAxIHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJwaWNrVHJheUJ5UERGU2l6ZVwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIFBpY3R1cmUgZXh0ZW5kcyBfeGZhX29iamVjdC5TdHJpbmdPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcInBpY3R1cmVcIik7XG4gIH1cblxufVxuXG5jbGFzcyBQbGFpbnRleHRNZXRhZGF0YSBleHRlbmRzIF94ZmFfb2JqZWN0Lk9wdGlvbjAxIHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJwbGFpbnRleHRNZXRhZGF0YVwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIFByZXNlbmNlIGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJwcmVzZW5jZVwiLCBbXCJwcmVzZXJ2ZVwiLCBcImRpc3NvbHZlXCIsIFwiZGlzc29sdmVTdHJ1Y3R1cmVcIiwgXCJpZ25vcmVcIiwgXCJyZW1vdmVcIl0pO1xuICB9XG5cbn1cblxuY2xhc3MgUHJlc2VudCBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwicHJlc2VudFwiLCB0cnVlKTtcbiAgICB0aGlzLmJlaGF2aW9yT3ZlcnJpZGUgPSBudWxsO1xuICAgIHRoaXMuY2FjaGUgPSBudWxsO1xuICAgIHRoaXMuY29tbW9uID0gbnVsbDtcbiAgICB0aGlzLmNvcGllcyA9IG51bGw7XG4gICAgdGhpcy5kZXN0aW5hdGlvbiA9IG51bGw7XG4gICAgdGhpcy5pbmNyZW1lbnRhbE1lcmdlID0gbnVsbDtcbiAgICB0aGlzLmxheW91dCA9IG51bGw7XG4gICAgdGhpcy5vdXRwdXQgPSBudWxsO1xuICAgIHRoaXMub3ZlcnByaW50ID0gbnVsbDtcbiAgICB0aGlzLnBhZ2luYXRpb24gPSBudWxsO1xuICAgIHRoaXMucGFnaW5hdGlvbk92ZXJyaWRlID0gbnVsbDtcbiAgICB0aGlzLnNjcmlwdCA9IG51bGw7XG4gICAgdGhpcy52YWxpZGF0ZSA9IG51bGw7XG4gICAgdGhpcy54ZHAgPSBudWxsO1xuICAgIHRoaXMuZHJpdmVyID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5sYWJlbFByaW50ZXIgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnBjbCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMucGRmID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy5wcyA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMuc3VibWl0VXJsID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy53ZWJDbGllbnQgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnpwbCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICB9XG5cbn1cblxuY2xhc3MgUHJpbnQgZXh0ZW5kcyBfeGZhX29iamVjdC5PcHRpb24wMSB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwicHJpbnRcIik7XG4gIH1cblxufVxuXG5jbGFzcyBQcmludEhpZ2hRdWFsaXR5IGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uMDEge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcInByaW50SGlnaFF1YWxpdHlcIik7XG4gIH1cblxufVxuXG5jbGFzcyBQcmludFNjYWxpbmcgZXh0ZW5kcyBfeGZhX29iamVjdC5PcHRpb25PYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcInByaW50U2NhbGluZ1wiLCBbXCJhcHBkZWZhdWx0XCIsIFwibm9TY2FsaW5nXCJdKTtcbiAgfVxuXG59XG5cbmNsYXNzIFByaW50ZXJOYW1lIGV4dGVuZHMgX3hmYV9vYmplY3QuU3RyaW5nT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJwcmludGVyTmFtZVwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIFByb2R1Y2VyIGV4dGVuZHMgX3hmYV9vYmplY3QuU3RyaW5nT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJwcm9kdWNlclwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIFBzIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJwc1wiLCB0cnVlKTtcbiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgXCJcIjtcbiAgICB0aGlzLmJhdGNoT3V0cHV0ID0gbnVsbDtcbiAgICB0aGlzLmZvbnRJbmZvID0gbnVsbDtcbiAgICB0aGlzLmpvZyA9IG51bGw7XG4gICAgdGhpcy5tZWRpdW1JbmZvID0gbnVsbDtcbiAgICB0aGlzLm91dHB1dEJpbiA9IG51bGw7XG4gICAgdGhpcy5zdGFwbGUgPSBudWxsO1xuICAgIHRoaXMueGRjID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIFJhbmdlIGV4dGVuZHMgX3hmYV9vYmplY3QuQ29udGVudE9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwicmFuZ2VcIik7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGZpbmFsaXplXSgpIHtcbiAgICB0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XSA9IHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXFxzKixcXHMqLywgMikubWFwKHJhbmdlID0+IHJhbmdlLnNwbGl0KFwiLVwiKS5tYXAoeCA9PiBwYXJzZUludCh4LnRyaW0oKSwgMTApKSkuZmlsdGVyKHJhbmdlID0+IHJhbmdlLmV2ZXJ5KHggPT4gIWlzTmFOKHgpKSkubWFwKHJhbmdlID0+IHtcbiAgICAgIGlmIChyYW5nZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmFuZ2UucHVzaChyYW5nZVswXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByYW5nZTtcbiAgICB9KTtcbiAgfVxuXG59XG5cbmNsYXNzIFJlY29yZCBleHRlbmRzIF94ZmFfb2JqZWN0LkNvbnRlbnRPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcInJlY29yZFwiKTtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kZmluYWxpemVdKCkge1xuICAgIHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdID0gdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0udHJpbSgpO1xuICAgIGNvbnN0IG4gPSBwYXJzZUludCh0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XSwgMTApO1xuXG4gICAgaWYgKCFpc05hTihuKSAmJiBuID49IDApIHtcbiAgICAgIHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdID0gbjtcbiAgICB9XG4gIH1cblxufVxuXG5jbGFzcyBSZWxldmFudCBleHRlbmRzIF94ZmFfb2JqZWN0LkNvbnRlbnRPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcInJlbGV2YW50XCIpO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRmaW5hbGl6ZV0oKSB7XG4gICAgdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0gPSB0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XS50cmltKCkuc3BsaXQoL1xccysvKTtcbiAgfVxuXG59XG5cbmNsYXNzIFJlbmFtZSBleHRlbmRzIF94ZmFfb2JqZWN0LkNvbnRlbnRPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcInJlbmFtZVwiKTtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kZmluYWxpemVdKCkge1xuICAgIHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdID0gdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0udHJpbSgpO1xuXG4gICAgaWYgKHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChcInhtbFwiKSB8fCB0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XS5tYXRjaChuZXcgUmVnRXhwKFwiW1xcXFxwe0x9X11bXFxcXHB7TH1cXFxcZC5fXFxcXHB7TX0tXSpcIiwgXCJ1XCIpKSkge1xuICAgICAgKDAsIF91dGlsLndhcm4pKFwiWEZBIC0gUmVuYW1lOiBpbnZhbGlkIFhGQSBuYW1lXCIpO1xuICAgIH1cbiAgfVxuXG59XG5cbmNsYXNzIFJlbmRlclBvbGljeSBleHRlbmRzIF94ZmFfb2JqZWN0Lk9wdGlvbk9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwicmVuZGVyUG9saWN5XCIsIFtcInNlcnZlclwiLCBcImNsaWVudFwiXSk7XG4gIH1cblxufVxuXG5jbGFzcyBSdW5TY3JpcHRzIGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJydW5TY3JpcHRzXCIsIFtcImJvdGhcIiwgXCJjbGllbnRcIiwgXCJub25lXCIsIFwic2VydmVyXCJdKTtcbiAgfVxuXG59XG5cbmNsYXNzIFNjcmlwdCBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwic2NyaXB0XCIsIHRydWUpO1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSBudWxsO1xuICAgIHRoaXMuZXhjbHVkZSA9IG51bGw7XG4gICAgdGhpcy5ydW5TY3JpcHRzID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIFNjcmlwdE1vZGVsIGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJzY3JpcHRNb2RlbFwiLCBbXCJYRkFcIiwgXCJub25lXCJdKTtcbiAgfVxuXG59XG5cbmNsYXNzIFNldmVyaXR5IGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJzZXZlcml0eVwiLCBbXCJpZ25vcmVcIiwgXCJlcnJvclwiLCBcImluZm9ybWF0aW9uXCIsIFwidHJhY2VcIiwgXCJ3YXJuaW5nXCJdKTtcbiAgfVxuXG59XG5cbmNsYXNzIFNpbGVudFByaW50IGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJzaWxlbnRQcmludFwiLCB0cnVlKTtcbiAgICB0aGlzLmFkZFNpbGVudFByaW50ID0gbnVsbDtcbiAgICB0aGlzLnByaW50ZXJOYW1lID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIFN0YXBsZSBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwic3RhcGxlXCIpO1xuICAgIHRoaXMubW9kZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLm1vZGUsIFtcInVzZVByaW50ZXJTZXR0aW5nXCIsIFwib25cIiwgXCJvZmZcIl0pO1xuICB9XG5cbn1cblxuY2xhc3MgU3RhcnROb2RlIGV4dGVuZHMgX3hmYV9vYmplY3QuU3RyaW5nT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJzdGFydE5vZGVcIik7XG4gIH1cblxufVxuXG5jbGFzcyBTdGFydFBhZ2UgZXh0ZW5kcyBfeGZhX29iamVjdC5JbnRlZ2VyT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJzdGFydFBhZ2VcIiwgMCwgbiA9PiB0cnVlKTtcbiAgfVxuXG59XG5cbmNsYXNzIFN1Ym1pdEZvcm1hdCBleHRlbmRzIF94ZmFfb2JqZWN0Lk9wdGlvbk9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwic3VibWl0Rm9ybWF0XCIsIFtcImh0bWxcIiwgXCJkZWxlZ2F0ZVwiLCBcImZkZlwiLCBcInhtbFwiLCBcInBkZlwiXSk7XG4gIH1cblxufVxuXG5jbGFzcyBTdWJtaXRVcmwgZXh0ZW5kcyBfeGZhX29iamVjdC5TdHJpbmdPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcInN1Ym1pdFVybFwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIFN1YnNldEJlbG93IGV4dGVuZHMgX3hmYV9vYmplY3QuSW50ZWdlck9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwic3Vic2V0QmVsb3dcIiwgMTAwLCBuID0+IG4gPj0gMCAmJiBuIDw9IDEwMCk7XG4gIH1cblxufVxuXG5jbGFzcyBTdXBwcmVzc0Jhbm5lciBleHRlbmRzIF94ZmFfb2JqZWN0Lk9wdGlvbjAxIHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJzdXBwcmVzc0Jhbm5lclwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIFRhZ2dlZCBleHRlbmRzIF94ZmFfb2JqZWN0Lk9wdGlvbjAxIHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJ0YWdnZWRcIik7XG4gIH1cblxufVxuXG5jbGFzcyBUZW1wbGF0ZSBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwidGVtcGxhdGVcIiwgdHJ1ZSk7XG4gICAgdGhpcy5iYXNlID0gbnVsbDtcbiAgICB0aGlzLnJlbGV2YW50ID0gbnVsbDtcbiAgICB0aGlzLnN0YXJ0UGFnZSA9IG51bGw7XG4gICAgdGhpcy51cmkgPSBudWxsO1xuICAgIHRoaXMueHNsID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIFRocmVzaG9sZCBleHRlbmRzIF94ZmFfb2JqZWN0Lk9wdGlvbk9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwidGhyZXNob2xkXCIsIFtcInRyYWNlXCIsIFwiZXJyb3JcIiwgXCJpbmZvcm1hdGlvblwiLCBcIndhcm5pbmdcIl0pO1xuICB9XG5cbn1cblxuY2xhc3MgVG8gZXh0ZW5kcyBfeGZhX29iamVjdC5PcHRpb25PYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcInRvXCIsIFtcIm51bGxcIiwgXCJtZW1vcnlcIiwgXCJzdGRlcnJcIiwgXCJzdGRvdXRcIiwgXCJzeXN0ZW1cIiwgXCJ1cmlcIl0pO1xuICB9XG5cbn1cblxuY2xhc3MgVGVtcGxhdGVDYWNoZSBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwidGVtcGxhdGVDYWNoZVwiKTtcbiAgICB0aGlzLm1heEVudHJpZXMgPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMubWF4RW50cmllcyxcbiAgICAgIGRlZmF1bHRWYWx1ZTogNSxcbiAgICAgIHZhbGlkYXRlOiBuID0+IG4gPj0gMFxuICAgIH0pO1xuICB9XG5cbn1cblxuY2xhc3MgVHJhY2UgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcInRyYWNlXCIsIHRydWUpO1xuICAgIHRoaXMuYXJlYSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICB9XG5cbn1cblxuY2xhc3MgVHJhbnNmb3JtIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJ0cmFuc2Zvcm1cIiwgdHJ1ZSk7XG4gICAgdGhpcy5ncm91cFBhcmVudCA9IG51bGw7XG4gICAgdGhpcy5pZkVtcHR5ID0gbnVsbDtcbiAgICB0aGlzLm5hbWVBdHRyID0gbnVsbDtcbiAgICB0aGlzLnBpY3R1cmUgPSBudWxsO1xuICAgIHRoaXMucHJlc2VuY2UgPSBudWxsO1xuICAgIHRoaXMucmVuYW1lID0gbnVsbDtcbiAgICB0aGlzLndoaXRlc3BhY2UgPSBudWxsO1xuICB9XG5cbn1cblxuY2xhc3MgVHlwZSBleHRlbmRzIF94ZmFfb2JqZWN0Lk9wdGlvbk9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwidHlwZVwiLCBbXCJub25lXCIsIFwiYXNjaWk4NVwiLCBcImFzY2lpSGV4XCIsIFwiY2NpdHRmYXhcIiwgXCJmbGF0ZVwiLCBcImx6d1wiLCBcInJ1bkxlbmd0aFwiLCBcIm5hdGl2ZVwiLCBcInhkcFwiLCBcIm1lcmdlZFhEUFwiXSk7XG4gIH1cblxufVxuXG5jbGFzcyBVcmkgZXh0ZW5kcyBfeGZhX29iamVjdC5TdHJpbmdPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcInVyaVwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIFZhbGlkYXRlIGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJ2YWxpZGF0ZVwiLCBbXCJwcmVTdWJtaXRcIiwgXCJwcmVQcmludFwiLCBcInByZUV4ZWN1dGVcIiwgXCJwcmVTYXZlXCJdKTtcbiAgfVxuXG59XG5cbmNsYXNzIFZhbGlkYXRlQXBwcm92YWxTaWduYXR1cmVzIGV4dGVuZHMgX3hmYV9vYmplY3QuQ29udGVudE9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwidmFsaWRhdGVBcHByb3ZhbFNpZ25hdHVyZXNcIik7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGZpbmFsaXplXSgpIHtcbiAgICB0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XSA9IHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXFxzKy8pLmZpbHRlcih4ID0+IFtcImRvY1JlYWR5XCIsIFwicG9zdFNpZ25cIl0uaW5jbHVkZXMoeCkpO1xuICB9XG5cbn1cblxuY2xhc3MgVmFsaWRhdGlvbk1lc3NhZ2luZyBleHRlbmRzIF94ZmFfb2JqZWN0Lk9wdGlvbk9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwidmFsaWRhdGlvbk1lc3NhZ2luZ1wiLCBbXCJhbGxNZXNzYWdlc0luZGl2aWR1YWxseVwiLCBcImFsbE1lc3NhZ2VzVG9nZXRoZXJcIiwgXCJmaXJzdE1lc3NhZ2VPbmx5XCIsIFwibm9NZXNzYWdlc1wiXSk7XG4gIH1cblxufVxuXG5jbGFzcyBWZXJzaW9uIGV4dGVuZHMgX3hmYV9vYmplY3QuT3B0aW9uT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJ2ZXJzaW9uXCIsIFtcIjEuN1wiLCBcIjEuNlwiLCBcIjEuNVwiLCBcIjEuNFwiLCBcIjEuM1wiLCBcIjEuMlwiXSk7XG4gIH1cblxufVxuXG5jbGFzcyBWZXJzaW9uQ29udHJvbCBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwiVmVyc2lvbkNvbnRyb2xcIik7XG4gICAgdGhpcy5vdXRwdXRCZWxvdyA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLm91dHB1dEJlbG93LCBbXCJ3YXJuXCIsIFwiZXJyb3JcIiwgXCJ1cGRhdGVcIl0pO1xuICAgIHRoaXMuc291cmNlQWJvdmUgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5zb3VyY2VBYm92ZSwgW1wid2FyblwiLCBcImVycm9yXCJdKTtcbiAgICB0aGlzLnNvdXJjZUJlbG93ID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMuc291cmNlQmVsb3csIFtcInVwZGF0ZVwiLCBcIm1haW50YWluXCJdKTtcbiAgfVxuXG59XG5cbmNsYXNzIFZpZXdlclByZWZlcmVuY2VzIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJ2aWV3ZXJQcmVmZXJlbmNlc1wiLCB0cnVlKTtcbiAgICB0aGlzLkFEQkVfSlNDb25zb2xlID0gbnVsbDtcbiAgICB0aGlzLkFEQkVfSlNEZWJ1Z2dlciA9IG51bGw7XG4gICAgdGhpcy5hZGRWaWV3ZXJQcmVmZXJlbmNlcyA9IG51bGw7XG4gICAgdGhpcy5kdXBsZXhPcHRpb24gPSBudWxsO1xuICAgIHRoaXMuZW5mb3JjZSA9IG51bGw7XG4gICAgdGhpcy5udW1iZXJPZkNvcGllcyA9IG51bGw7XG4gICAgdGhpcy5wYWdlUmFuZ2UgPSBudWxsO1xuICAgIHRoaXMucGlja1RyYXlCeVBERlNpemUgPSBudWxsO1xuICAgIHRoaXMucHJpbnRTY2FsaW5nID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIFdlYkNsaWVudCBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwid2ViQ2xpZW50XCIsIHRydWUpO1xuICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSA/IGF0dHJpYnV0ZXMubmFtZS50cmltKCkgOiBcIlwiO1xuICAgIHRoaXMuZm9udEluZm8gPSBudWxsO1xuICAgIHRoaXMueGRjID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIFdoaXRlc3BhY2UgZXh0ZW5kcyBfeGZhX29iamVjdC5PcHRpb25PYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09ORklHX05TX0lELCBcIndoaXRlc3BhY2VcIiwgW1wicHJlc2VydmVcIiwgXCJsdHJpbVwiLCBcIm5vcm1hbGl6ZVwiLCBcInJ0cmltXCIsIFwidHJpbVwiXSk7XG4gIH1cblxufVxuXG5jbGFzcyBXaW5kb3cgZXh0ZW5kcyBfeGZhX29iamVjdC5Db250ZW50T2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJ3aW5kb3dcIik7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGZpbmFsaXplXSgpIHtcbiAgICBjb25zdCBwYWlyID0gdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0udHJpbSgpLnNwbGl0KC9cXHMqLFxccyovLCAyKS5tYXAoeCA9PiBwYXJzZUludCh4LCAxMCkpO1xuXG4gICAgaWYgKHBhaXIuc29tZSh4ID0+IGlzTmFOKHgpKSkge1xuICAgICAgdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0gPSBbMCwgMF07XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHBhaXIubGVuZ3RoID09PSAxKSB7XG4gICAgICBwYWlyLnB1c2gocGFpclswXSk7XG4gICAgfVxuXG4gICAgdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0gPSBwYWlyO1xuICB9XG5cbn1cblxuY2xhc3MgWGRjIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJ4ZGNcIiwgdHJ1ZSk7XG4gICAgdGhpcy51cmkgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoKTtcbiAgICB0aGlzLnhzbCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICB9XG5cbn1cblxuY2xhc3MgWGRwIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTkZJR19OU19JRCwgXCJ4ZHBcIiwgdHJ1ZSk7XG4gICAgdGhpcy5wYWNrZXRzID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIFhzbCBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwieHNsXCIsIHRydWUpO1xuICAgIHRoaXMuZGVidWcgPSBudWxsO1xuICAgIHRoaXMudXJpID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIFpwbCBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05GSUdfTlNfSUQsIFwienBsXCIsIHRydWUpO1xuICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSA/IGF0dHJpYnV0ZXMubmFtZS50cmltKCkgOiBcIlwiO1xuICAgIHRoaXMuYmF0Y2hPdXRwdXQgPSBudWxsO1xuICAgIHRoaXMuZmxpcExhYmVsID0gbnVsbDtcbiAgICB0aGlzLmZvbnRJbmZvID0gbnVsbDtcbiAgICB0aGlzLnhkYyA9IG51bGw7XG4gIH1cblxufVxuXG5jbGFzcyBDb25maWdOYW1lc3BhY2Uge1xuICBzdGF0aWMgW19uYW1lc3BhY2VzLiRidWlsZFhGQU9iamVjdF0obmFtZSwgYXR0cmlidXRlcykge1xuICAgIGlmIChDb25maWdOYW1lc3BhY2UuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgIHJldHVybiBDb25maWdOYW1lc3BhY2VbbmFtZV0oYXR0cmlidXRlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHN0YXRpYyBhY3JvYmF0KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBBY3JvYmF0KGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBhY3JvYmF0NyhhdHRycykge1xuICAgIHJldHVybiBuZXcgQWNyb2JhdDcoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIEFEQkVfSlNDb25zb2xlKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBBREJFX0pTQ29uc29sZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgQURCRV9KU0RlYnVnZ2VyKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBBREJFX0pTRGVidWdnZXIoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGFkZFNpbGVudFByaW50KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBBZGRTaWxlbnRQcmludChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgYWRkVmlld2VyUHJlZmVyZW5jZXMoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEFkZFZpZXdlclByZWZlcmVuY2VzKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBhZGp1c3REYXRhKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBBZGp1c3REYXRhKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBhZG9iZUV4dGVuc2lvbkxldmVsKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBBZG9iZUV4dGVuc2lvbkxldmVsKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBhZ2VudChhdHRycykge1xuICAgIHJldHVybiBuZXcgQWdlbnQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGFsd2F5c0VtYmVkKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBBbHdheXNFbWJlZChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgYW1kKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBBbWQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGFyZWEoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEFyZWEoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGF0dHJpYnV0ZXMoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEF0dHJpYnV0ZXMoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGF1dG9TYXZlKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBBdXRvU2F2ZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgYmFzZShhdHRycykge1xuICAgIHJldHVybiBuZXcgQmFzZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgYmF0Y2hPdXRwdXQoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEJhdGNoT3V0cHV0KGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBiZWhhdmlvck92ZXJyaWRlKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBCZWhhdmlvck92ZXJyaWRlKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBjYWNoZShhdHRycykge1xuICAgIHJldHVybiBuZXcgQ2FjaGUoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGNoYW5nZShhdHRycykge1xuICAgIHJldHVybiBuZXcgQ2hhbmdlKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBjb21tb24oYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IENvbW1vbihhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgY29tcHJlc3MoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IENvbXByZXNzKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBjb21wcmVzc0xvZ2ljYWxTdHJ1Y3R1cmUoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IENvbXByZXNzTG9naWNhbFN0cnVjdHVyZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgY29tcHJlc3NPYmplY3RTdHJlYW0oYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IENvbXByZXNzT2JqZWN0U3RyZWFtKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBjb21wcmVzc2lvbihhdHRycykge1xuICAgIHJldHVybiBuZXcgQ29tcHJlc3Npb24oYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGNvbmZpZyhhdHRycykge1xuICAgIHJldHVybiBuZXcgQ29uZmlnKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBjb25mb3JtYW5jZShhdHRycykge1xuICAgIHJldHVybiBuZXcgQ29uZm9ybWFuY2UoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGNvbnRlbnRDb3B5KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBDb250ZW50Q29weShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgY29waWVzKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBDb3BpZXMoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0b3IoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IENyZWF0b3IoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGN1cnJlbnRQYWdlKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBDdXJyZW50UGFnZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZGF0YShhdHRycykge1xuICAgIHJldHVybiBuZXcgRGF0YShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZGVidWcoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IERlYnVnKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBkZWZhdWx0VHlwZWZhY2UoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IERlZmF1bHRUeXBlZmFjZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZGVzdGluYXRpb24oYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IERlc3RpbmF0aW9uKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBkb2N1bWVudEFzc2VtYmx5KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBEb2N1bWVudEFzc2VtYmx5KGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBkcml2ZXIoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IERyaXZlcihhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZHVwbGV4T3B0aW9uKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBEdXBsZXhPcHRpb24oYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGR5bmFtaWNSZW5kZXIoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IER5bmFtaWNSZW5kZXIoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGVtYmVkKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBFbWJlZChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZW5jcnlwdChhdHRycykge1xuICAgIHJldHVybiBuZXcgRW5jcnlwdChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZW5jcnlwdGlvbihhdHRycykge1xuICAgIHJldHVybiBuZXcgRW5jcnlwdGlvbihhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZW5jcnlwdGlvbkxldmVsKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBFbmNyeXB0aW9uTGV2ZWwoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGVuZm9yY2UoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEVuZm9yY2UoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGVxdWF0ZShhdHRycykge1xuICAgIHJldHVybiBuZXcgRXF1YXRlKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBlcXVhdGVSYW5nZShhdHRycykge1xuICAgIHJldHVybiBuZXcgRXF1YXRlUmFuZ2UoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGV4Y2x1ZGUoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEV4Y2x1ZGUoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGV4Y2x1ZGVOUyhhdHRycykge1xuICAgIHJldHVybiBuZXcgRXhjbHVkZU5TKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBmbGlwTGFiZWwoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEZsaXBMYWJlbChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZm9udEluZm8oYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEZvbnRJbmZvKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBmb3JtRmllbGRGaWxsaW5nKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBGb3JtRmllbGRGaWxsaW5nKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBncm91cFBhcmVudChhdHRycykge1xuICAgIHJldHVybiBuZXcgR3JvdXBQYXJlbnQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGlmRW1wdHkoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IElmRW1wdHkoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGluY2x1ZGVYRFBDb250ZW50KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBJbmNsdWRlWERQQ29udGVudChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgaW5jcmVtZW50YWxMb2FkKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBJbmNyZW1lbnRhbExvYWQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGluY3JlbWVudGFsTWVyZ2UoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEluY3JlbWVudGFsTWVyZ2UoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGludGVyYWN0aXZlKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBJbnRlcmFjdGl2ZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgam9nKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBKb2coYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGxhYmVsUHJpbnRlcihhdHRycykge1xuICAgIHJldHVybiBuZXcgTGFiZWxQcmludGVyKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBsYXlvdXQoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IExheW91dChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgbGV2ZWwoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IExldmVsKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBsaW5lYXJpemVkKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBMaW5lYXJpemVkKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBsb2NhbGUoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IExvY2FsZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgbG9jYWxlU2V0KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBMb2NhbGVTZXQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGxvZyhhdHRycykge1xuICAgIHJldHVybiBuZXcgTG9nKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBtYXAoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IE1hcEVsZW1lbnQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIG1lZGl1bUluZm8oYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IE1lZGl1bUluZm8oYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIG1lc3NhZ2UoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IE1lc3NhZ2UoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIG1lc3NhZ2luZyhhdHRycykge1xuICAgIHJldHVybiBuZXcgTWVzc2FnaW5nKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBtb2RlKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBNb2RlKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBtb2RpZnlBbm5vdHMoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IE1vZGlmeUFubm90cyhhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgbXNnSWQoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IE1zZ0lkKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lQXR0cihhdHRycykge1xuICAgIHJldHVybiBuZXcgTmFtZUF0dHIoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIG5ldmVyRW1iZWQoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IE5ldmVyRW1iZWQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIG51bWJlck9mQ29waWVzKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBOdW1iZXJPZkNvcGllcyhhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgb3BlbkFjdGlvbihhdHRycykge1xuICAgIHJldHVybiBuZXcgT3BlbkFjdGlvbihhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgb3V0cHV0KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBPdXRwdXQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIG91dHB1dEJpbihhdHRycykge1xuICAgIHJldHVybiBuZXcgT3V0cHV0QmluKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBvdXRwdXRYU0woYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IE91dHB1dFhTTChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgb3ZlcnByaW50KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBPdmVycHJpbnQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHBhY2tldHMoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFBhY2tldHMoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHBhZ2VPZmZzZXQoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFBhZ2VPZmZzZXQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHBhZ2VSYW5nZShhdHRycykge1xuICAgIHJldHVybiBuZXcgUGFnZVJhbmdlKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBwYWdpbmF0aW9uKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBQYWdpbmF0aW9uKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBwYWdpbmF0aW9uT3ZlcnJpZGUoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFBhZ2luYXRpb25PdmVycmlkZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgcGFydChhdHRycykge1xuICAgIHJldHVybiBuZXcgUGFydChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgcGNsKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBQY2woYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHBkZihhdHRycykge1xuICAgIHJldHVybiBuZXcgUGRmKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBwZGZhKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBQZGZhKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBwZXJtaXNzaW9ucyhhdHRycykge1xuICAgIHJldHVybiBuZXcgUGVybWlzc2lvbnMoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHBpY2tUcmF5QnlQREZTaXplKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBQaWNrVHJheUJ5UERGU2l6ZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgcGljdHVyZShhdHRycykge1xuICAgIHJldHVybiBuZXcgUGljdHVyZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgcGxhaW50ZXh0TWV0YWRhdGEoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFBsYWludGV4dE1ldGFkYXRhKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBwcmVzZW5jZShhdHRycykge1xuICAgIHJldHVybiBuZXcgUHJlc2VuY2UoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHByZXNlbnQoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFByZXNlbnQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHByaW50KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBQcmludChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgcHJpbnRIaWdoUXVhbGl0eShhdHRycykge1xuICAgIHJldHVybiBuZXcgUHJpbnRIaWdoUXVhbGl0eShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgcHJpbnRTY2FsaW5nKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBQcmludFNjYWxpbmcoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHByaW50ZXJOYW1lKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBQcmludGVyTmFtZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgcHJvZHVjZXIoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFByb2R1Y2VyKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBwcyhhdHRycykge1xuICAgIHJldHVybiBuZXcgUHMoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHJhbmdlKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBSYW5nZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgcmVjb3JkKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBSZWNvcmQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHJlbGV2YW50KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBSZWxldmFudChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgcmVuYW1lKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBSZW5hbWUoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHJlbmRlclBvbGljeShhdHRycykge1xuICAgIHJldHVybiBuZXcgUmVuZGVyUG9saWN5KGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBydW5TY3JpcHRzKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBSdW5TY3JpcHRzKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBzY3JpcHQoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFNjcmlwdChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgc2NyaXB0TW9kZWwoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFNjcmlwdE1vZGVsKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBzZXZlcml0eShhdHRycykge1xuICAgIHJldHVybiBuZXcgU2V2ZXJpdHkoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHNpbGVudFByaW50KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBTaWxlbnRQcmludChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgc3RhcGxlKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBTdGFwbGUoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHN0YXJ0Tm9kZShhdHRycykge1xuICAgIHJldHVybiBuZXcgU3RhcnROb2RlKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBzdGFydFBhZ2UoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFN0YXJ0UGFnZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgc3VibWl0Rm9ybWF0KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBTdWJtaXRGb3JtYXQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHN1Ym1pdFVybChhdHRycykge1xuICAgIHJldHVybiBuZXcgU3VibWl0VXJsKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBzdWJzZXRCZWxvdyhhdHRycykge1xuICAgIHJldHVybiBuZXcgU3Vic2V0QmVsb3coYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHN1cHByZXNzQmFubmVyKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBTdXBwcmVzc0Jhbm5lcihhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgdGFnZ2VkKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBUYWdnZWQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHRlbXBsYXRlKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBUZW1wbGF0ZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgdGVtcGxhdGVDYWNoZShhdHRycykge1xuICAgIHJldHVybiBuZXcgVGVtcGxhdGVDYWNoZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgdGhyZXNob2xkKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBUaHJlc2hvbGQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHRvKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBUbyhhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgdHJhY2UoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFRyYWNlKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyB0cmFuc2Zvcm0oYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFRyYW5zZm9ybShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgdHlwZShhdHRycykge1xuICAgIHJldHVybiBuZXcgVHlwZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgdXJpKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBVcmkoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBWYWxpZGF0ZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgdmFsaWRhdGVBcHByb3ZhbFNpZ25hdHVyZXMoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFZhbGlkYXRlQXBwcm92YWxTaWduYXR1cmVzKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0aW9uTWVzc2FnaW5nKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBWYWxpZGF0aW9uTWVzc2FnaW5nKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyB2ZXJzaW9uKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBWZXJzaW9uKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyB2ZXJzaW9uQ29udHJvbChhdHRycykge1xuICAgIHJldHVybiBuZXcgVmVyc2lvbkNvbnRyb2woYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHZpZXdlclByZWZlcmVuY2VzKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBWaWV3ZXJQcmVmZXJlbmNlcyhhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgd2ViQ2xpZW50KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBXZWJDbGllbnQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHdoaXRlc3BhY2UoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFdoaXRlc3BhY2UoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHdpbmRvdyhhdHRycykge1xuICAgIHJldHVybiBuZXcgV2luZG93KGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyB4ZGMoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFhkYyhhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgeGRwKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBYZHAoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHhzbChhdHRycykge1xuICAgIHJldHVybiBuZXcgWHNsKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyB6cGwoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFpwbChhdHRycyk7XG4gIH1cblxufVxuXG5leHBvcnRzLkNvbmZpZ05hbWVzcGFjZSA9IENvbmZpZ05hbWVzcGFjZTtcblxuLyoqKi8gfSksXG4vKiA5MCAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5Db25uZWN0aW9uU2V0TmFtZXNwYWNlID0gdm9pZCAwO1xuXG52YXIgX25hbWVzcGFjZXMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDc3KTtcblxudmFyIF94ZmFfb2JqZWN0ID0gX193X3BkZmpzX3JlcXVpcmVfXyg3NSk7XG5cbmNvbnN0IENPTk5FQ1RJT05fU0VUX05TX0lEID0gX25hbWVzcGFjZXMuTmFtZXNwYWNlSWRzLmNvbm5lY3Rpb25TZXQuaWQ7XG5cbmNsYXNzIENvbm5lY3Rpb25TZXQgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09OTkVDVElPTl9TRVRfTlNfSUQsIFwiY29ubmVjdGlvblNldFwiLCB0cnVlKTtcbiAgICB0aGlzLndzZGxDb25uZWN0aW9uID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy54bWxDb25uZWN0aW9uID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gICAgdGhpcy54c2RDb25uZWN0aW9uID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KCk7XG4gIH1cblxufVxuXG5jbGFzcyBFZmZlY3RpdmVJbnB1dFBvbGljeSBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05ORUNUSU9OX1NFVF9OU19JRCwgXCJlZmZlY3RpdmVJbnB1dFBvbGljeVwiKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgfVxuXG59XG5cbmNsYXNzIEVmZmVjdGl2ZU91dHB1dFBvbGljeSBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05ORUNUSU9OX1NFVF9OU19JRCwgXCJlZmZlY3RpdmVPdXRwdXRQb2xpY3lcIik7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgXCJcIjtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gIH1cblxufVxuXG5jbGFzcyBPcGVyYXRpb24gZXh0ZW5kcyBfeGZhX29iamVjdC5TdHJpbmdPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09OTkVDVElPTl9TRVRfTlNfSUQsIFwib3BlcmF0aW9uXCIpO1xuICAgIHRoaXMuaWQgPSBhdHRyaWJ1dGVzLmlkIHx8IFwiXCI7XG4gICAgdGhpcy5pbnB1dCA9IGF0dHJpYnV0ZXMuaW5wdXQgfHwgXCJcIjtcbiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgXCJcIjtcbiAgICB0aGlzLm91dHB1dCA9IGF0dHJpYnV0ZXMub3V0cHV0IHx8IFwiXCI7XG4gICAgdGhpcy51c2UgPSBhdHRyaWJ1dGVzLnVzZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlaHJlZiA9IGF0dHJpYnV0ZXMudXNlaHJlZiB8fCBcIlwiO1xuICB9XG5cbn1cblxuY2xhc3MgUm9vdEVsZW1lbnQgZXh0ZW5kcyBfeGZhX29iamVjdC5TdHJpbmdPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09OTkVDVElPTl9TRVRfTlNfSUQsIFwicm9vdEVsZW1lbnRcIik7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgXCJcIjtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gIH1cblxufVxuXG5jbGFzcyBTb2FwQWN0aW9uIGV4dGVuZHMgX3hmYV9vYmplY3QuU3RyaW5nT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTk5FQ1RJT05fU0VUX05TX0lELCBcInNvYXBBY3Rpb25cIik7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgXCJcIjtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gIH1cblxufVxuXG5jbGFzcyBTb2FwQWRkcmVzcyBleHRlbmRzIF94ZmFfb2JqZWN0LlN0cmluZ09iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05ORUNUSU9OX1NFVF9OU19JRCwgXCJzb2FwQWRkcmVzc1wiKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgfVxuXG59XG5cbmNsYXNzIFVyaSBleHRlbmRzIF94ZmFfb2JqZWN0LlN0cmluZ09iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05ORUNUSU9OX1NFVF9OU19JRCwgXCJ1cmlcIik7XG4gICAgdGhpcy5pZCA9IGF0dHJpYnV0ZXMuaWQgfHwgXCJcIjtcbiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgXCJcIjtcbiAgICB0aGlzLnVzZSA9IGF0dHJpYnV0ZXMudXNlIHx8IFwiXCI7XG4gICAgdGhpcy51c2VocmVmID0gYXR0cmlidXRlcy51c2VocmVmIHx8IFwiXCI7XG4gIH1cblxufVxuXG5jbGFzcyBXc2RsQWRkcmVzcyBleHRlbmRzIF94ZmFfb2JqZWN0LlN0cmluZ09iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihDT05ORUNUSU9OX1NFVF9OU19JRCwgXCJ3c2RsQWRkcmVzc1wiKTtcbiAgICB0aGlzLmlkID0gYXR0cmlidXRlcy5pZCB8fCBcIlwiO1xuICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSB8fCBcIlwiO1xuICAgIHRoaXMudXNlID0gYXR0cmlidXRlcy51c2UgfHwgXCJcIjtcbiAgICB0aGlzLnVzZWhyZWYgPSBhdHRyaWJ1dGVzLnVzZWhyZWYgfHwgXCJcIjtcbiAgfVxuXG59XG5cbmNsYXNzIFdzZGxDb25uZWN0aW9uIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTk5FQ1RJT05fU0VUX05TX0lELCBcIndzZGxDb25uZWN0aW9uXCIsIHRydWUpO1xuICAgIHRoaXMuZGF0YURlc2NyaXB0aW9uID0gYXR0cmlidXRlcy5kYXRhRGVzY3JpcHRpb24gfHwgXCJcIjtcbiAgICB0aGlzLm5hbWUgPSBhdHRyaWJ1dGVzLm5hbWUgfHwgXCJcIjtcbiAgICB0aGlzLmVmZmVjdGl2ZUlucHV0UG9saWN5ID0gbnVsbDtcbiAgICB0aGlzLmVmZmVjdGl2ZU91dHB1dFBvbGljeSA9IG51bGw7XG4gICAgdGhpcy5vcGVyYXRpb24gPSBudWxsO1xuICAgIHRoaXMuc29hcEFjdGlvbiA9IG51bGw7XG4gICAgdGhpcy5zb2FwQWRkcmVzcyA9IG51bGw7XG4gICAgdGhpcy53c2RsQWRkcmVzcyA9IG51bGw7XG4gIH1cblxufVxuXG5jbGFzcyBYbWxDb25uZWN0aW9uIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKENPTk5FQ1RJT05fU0VUX05TX0lELCBcInhtbENvbm5lY3Rpb25cIiwgdHJ1ZSk7XG4gICAgdGhpcy5kYXRhRGVzY3JpcHRpb24gPSBhdHRyaWJ1dGVzLmRhdGFEZXNjcmlwdGlvbiB8fCBcIlwiO1xuICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSB8fCBcIlwiO1xuICAgIHRoaXMudXJpID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIFhzZENvbm5lY3Rpb24gZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoQ09OTkVDVElPTl9TRVRfTlNfSUQsIFwieHNkQ29ubmVjdGlvblwiLCB0cnVlKTtcbiAgICB0aGlzLmRhdGFEZXNjcmlwdGlvbiA9IGF0dHJpYnV0ZXMuZGF0YURlc2NyaXB0aW9uIHx8IFwiXCI7XG4gICAgdGhpcy5uYW1lID0gYXR0cmlidXRlcy5uYW1lIHx8IFwiXCI7XG4gICAgdGhpcy5yb290RWxlbWVudCA9IG51bGw7XG4gICAgdGhpcy51cmkgPSBudWxsO1xuICB9XG5cbn1cblxuY2xhc3MgQ29ubmVjdGlvblNldE5hbWVzcGFjZSB7XG4gIHN0YXRpYyBbX25hbWVzcGFjZXMuJGJ1aWxkWEZBT2JqZWN0XShuYW1lLCBhdHRyaWJ1dGVzKSB7XG4gICAgaWYgKENvbm5lY3Rpb25TZXROYW1lc3BhY2UuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgIHJldHVybiBDb25uZWN0aW9uU2V0TmFtZXNwYWNlW25hbWVdKGF0dHJpYnV0ZXMpO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBzdGF0aWMgY29ubmVjdGlvblNldChhdHRycykge1xuICAgIHJldHVybiBuZXcgQ29ubmVjdGlvblNldChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZWZmZWN0aXZlSW5wdXRQb2xpY3koYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEVmZmVjdGl2ZUlucHV0UG9saWN5KGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBlZmZlY3RpdmVPdXRwdXRQb2xpY3koYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEVmZmVjdGl2ZU91dHB1dFBvbGljeShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgb3BlcmF0aW9uKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRpb24oYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHJvb3RFbGVtZW50KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBSb290RWxlbWVudChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgc29hcEFjdGlvbihhdHRycykge1xuICAgIHJldHVybiBuZXcgU29hcEFjdGlvbihhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgc29hcEFkZHJlc3MoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFNvYXBBZGRyZXNzKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyB1cmkoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFVyaShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgd3NkbEFkZHJlc3MoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFdzZGxBZGRyZXNzKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyB3c2RsQ29ubmVjdGlvbihhdHRycykge1xuICAgIHJldHVybiBuZXcgV3NkbENvbm5lY3Rpb24oYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHhtbENvbm5lY3Rpb24oYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFhtbENvbm5lY3Rpb24oYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHhzZENvbm5lY3Rpb24oYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IFhzZENvbm5lY3Rpb24oYXR0cnMpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5Db25uZWN0aW9uU2V0TmFtZXNwYWNlID0gQ29ubmVjdGlvblNldE5hbWVzcGFjZTtcblxuLyoqKi8gfSksXG4vKiA5MSAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5EYXRhc2V0c05hbWVzcGFjZSA9IHZvaWQgMDtcblxudmFyIF94ZmFfb2JqZWN0ID0gX193X3BkZmpzX3JlcXVpcmVfXyg3NSk7XG5cbnZhciBfbmFtZXNwYWNlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNzcpO1xuXG5jb25zdCBEQVRBU0VUU19OU19JRCA9IF9uYW1lc3BhY2VzLk5hbWVzcGFjZUlkcy5kYXRhc2V0cy5pZDtcblxuY2xhc3MgRGF0YSBleHRlbmRzIF94ZmFfb2JqZWN0LlhtbE9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihEQVRBU0VUU19OU19JRCwgXCJkYXRhXCIsIGF0dHJpYnV0ZXMpO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRpc05zQWdub3N0aWNdKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbn1cblxuY2xhc3MgRGF0YXNldHMgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoREFUQVNFVFNfTlNfSUQsIFwiZGF0YXNldHNcIiwgdHJ1ZSk7XG4gICAgdGhpcy5kYXRhID0gbnVsbDtcbiAgICB0aGlzLlNpZ25hdHVyZSA9IG51bGw7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJG9uQ2hpbGRdKGNoaWxkKSB7XG4gICAgY29uc3QgbmFtZSA9IGNoaWxkW194ZmFfb2JqZWN0LiRub2RlTmFtZV07XG5cbiAgICBpZiAobmFtZSA9PT0gXCJkYXRhXCIgJiYgY2hpbGRbX3hmYV9vYmplY3QuJG5hbWVzcGFjZUlkXSA9PT0gREFUQVNFVFNfTlNfSUQgfHwgbmFtZSA9PT0gXCJTaWduYXR1cmVcIiAmJiBjaGlsZFtfeGZhX29iamVjdC4kbmFtZXNwYWNlSWRdID09PSBfbmFtZXNwYWNlcy5OYW1lc3BhY2VJZHMuc2lnbmF0dXJlLmlkKSB7XG4gICAgICB0aGlzW25hbWVdID0gY2hpbGQ7XG4gICAgfVxuXG4gICAgdGhpc1tfeGZhX29iamVjdC4kYXBwZW5kQ2hpbGRdKGNoaWxkKTtcbiAgfVxuXG59XG5cbmNsYXNzIERhdGFzZXRzTmFtZXNwYWNlIHtcbiAgc3RhdGljIFtfbmFtZXNwYWNlcy4kYnVpbGRYRkFPYmplY3RdKG5hbWUsIGF0dHJpYnV0ZXMpIHtcbiAgICBpZiAoRGF0YXNldHNOYW1lc3BhY2UuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgIHJldHVybiBEYXRhc2V0c05hbWVzcGFjZVtuYW1lXShhdHRyaWJ1dGVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgc3RhdGljIGRhdGFzZXRzKGF0dHJpYnV0ZXMpIHtcbiAgICByZXR1cm4gbmV3IERhdGFzZXRzKGF0dHJpYnV0ZXMpO1xuICB9XG5cbiAgc3RhdGljIGRhdGEoYXR0cmlidXRlcykge1xuICAgIHJldHVybiBuZXcgRGF0YShhdHRyaWJ1dGVzKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuRGF0YXNldHNOYW1lc3BhY2UgPSBEYXRhc2V0c05hbWVzcGFjZTtcblxuLyoqKi8gfSksXG4vKiA5MiAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5Mb2NhbGVTZXROYW1lc3BhY2UgPSB2b2lkIDA7XG5cbnZhciBfbmFtZXNwYWNlcyA9IF9fd19wZGZqc19yZXF1aXJlX18oNzcpO1xuXG52YXIgX3hmYV9vYmplY3QgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDc1KTtcblxudmFyIF91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oNzYpO1xuXG5jb25zdCBMT0NBTEVfU0VUX05TX0lEID0gX25hbWVzcGFjZXMuTmFtZXNwYWNlSWRzLmxvY2FsZVNldC5pZDtcblxuY2xhc3MgQ2FsZW5kYXJTeW1ib2xzIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKExPQ0FMRV9TRVRfTlNfSUQsIFwiY2FsZW5kYXJTeW1ib2xzXCIsIHRydWUpO1xuICAgIHRoaXMubmFtZSA9IFwiZ3JlZ29yaWFuXCI7XG4gICAgdGhpcy5kYXlOYW1lcyA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgyKTtcbiAgICB0aGlzLmVyYU5hbWVzID0gbnVsbDtcbiAgICB0aGlzLm1lcmlkaWVtTmFtZXMgPSBudWxsO1xuICAgIHRoaXMubW9udGhOYW1lcyA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgyKTtcbiAgfVxuXG59XG5cbmNsYXNzIEN1cnJlbmN5U3ltYm9sIGV4dGVuZHMgX3hmYV9vYmplY3QuU3RyaW5nT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKExPQ0FMRV9TRVRfTlNfSUQsIFwiY3VycmVuY3lTeW1ib2xcIik7XG4gICAgdGhpcy5uYW1lID0gKDAsIF91dGlscy5nZXRTdHJpbmdPcHRpb24pKGF0dHJpYnV0ZXMubmFtZSwgW1wic3ltYm9sXCIsIFwiaXNvbmFtZVwiLCBcImRlY2ltYWxcIl0pO1xuICB9XG5cbn1cblxuY2xhc3MgQ3VycmVuY3lTeW1ib2xzIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKExPQ0FMRV9TRVRfTlNfSUQsIFwiY3VycmVuY3lTeW1ib2xzXCIsIHRydWUpO1xuICAgIHRoaXMuY3VycmVuY3lTeW1ib2wgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoMyk7XG4gIH1cblxufVxuXG5jbGFzcyBEYXRlUGF0dGVybiBleHRlbmRzIF94ZmFfb2JqZWN0LlN0cmluZ09iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihMT0NBTEVfU0VUX05TX0lELCBcImRhdGVQYXR0ZXJuXCIpO1xuICAgIHRoaXMubmFtZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLm5hbWUsIFtcImZ1bGxcIiwgXCJsb25nXCIsIFwibWVkXCIsIFwic2hvcnRcIl0pO1xuICB9XG5cbn1cblxuY2xhc3MgRGF0ZVBhdHRlcm5zIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKExPQ0FMRV9TRVRfTlNfSUQsIFwiZGF0ZVBhdHRlcm5zXCIsIHRydWUpO1xuICAgIHRoaXMuZGF0ZVBhdHRlcm4gPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoNCk7XG4gIH1cblxufVxuXG5jbGFzcyBEYXRlVGltZVN5bWJvbHMgZXh0ZW5kcyBfeGZhX29iamVjdC5Db250ZW50T2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKExPQ0FMRV9TRVRfTlNfSUQsIFwiZGF0ZVRpbWVTeW1ib2xzXCIpO1xuICB9XG5cbn1cblxuY2xhc3MgRGF5IGV4dGVuZHMgX3hmYV9vYmplY3QuU3RyaW5nT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKExPQ0FMRV9TRVRfTlNfSUQsIFwiZGF5XCIpO1xuICB9XG5cbn1cblxuY2xhc3MgRGF5TmFtZXMgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoTE9DQUxFX1NFVF9OU19JRCwgXCJkYXlOYW1lc1wiLCB0cnVlKTtcbiAgICB0aGlzLmFiYnIgPSAoMCwgX3V0aWxzLmdldEludGVnZXIpKHtcbiAgICAgIGRhdGE6IGF0dHJpYnV0ZXMuYWJicixcbiAgICAgIGRlZmF1bHRWYWx1ZTogMCxcbiAgICAgIHZhbGlkYXRlOiB4ID0+IHggPT09IDFcbiAgICB9KTtcbiAgICB0aGlzLmRheSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSg3KTtcbiAgfVxuXG59XG5cbmNsYXNzIEVyYSBleHRlbmRzIF94ZmFfb2JqZWN0LlN0cmluZ09iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihMT0NBTEVfU0VUX05TX0lELCBcImVyYVwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIEVyYU5hbWVzIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKExPQ0FMRV9TRVRfTlNfSUQsIFwiZXJhTmFtZXNcIiwgdHJ1ZSk7XG4gICAgdGhpcy5lcmEgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoMik7XG4gIH1cblxufVxuXG5jbGFzcyBMb2NhbGUgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoTE9DQUxFX1NFVF9OU19JRCwgXCJsb2NhbGVcIiwgdHJ1ZSk7XG4gICAgdGhpcy5kZXNjID0gYXR0cmlidXRlcy5kZXNjIHx8IFwiXCI7XG4gICAgdGhpcy5uYW1lID0gXCJpc29uYW1lXCI7XG4gICAgdGhpcy5jYWxlbmRhclN5bWJvbHMgPSBudWxsO1xuICAgIHRoaXMuY3VycmVuY3lTeW1ib2xzID0gbnVsbDtcbiAgICB0aGlzLmRhdGVQYXR0ZXJucyA9IG51bGw7XG4gICAgdGhpcy5kYXRlVGltZVN5bWJvbHMgPSBudWxsO1xuICAgIHRoaXMubnVtYmVyUGF0dGVybnMgPSBudWxsO1xuICAgIHRoaXMubnVtYmVyU3ltYm9scyA9IG51bGw7XG4gICAgdGhpcy50aW1lUGF0dGVybnMgPSBudWxsO1xuICAgIHRoaXMudHlwZUZhY2VzID0gbnVsbDtcbiAgfVxuXG59XG5cbmNsYXNzIExvY2FsZVNldCBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihMT0NBTEVfU0VUX05TX0lELCBcImxvY2FsZVNldFwiLCB0cnVlKTtcbiAgICB0aGlzLmxvY2FsZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICB9XG5cbn1cblxuY2xhc3MgTWVyaWRpZW0gZXh0ZW5kcyBfeGZhX29iamVjdC5TdHJpbmdPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoTE9DQUxFX1NFVF9OU19JRCwgXCJtZXJpZGllbVwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIE1lcmlkaWVtTmFtZXMgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoTE9DQUxFX1NFVF9OU19JRCwgXCJtZXJpZGllbU5hbWVzXCIsIHRydWUpO1xuICAgIHRoaXMubWVyaWRpZW0gPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoMik7XG4gIH1cblxufVxuXG5jbGFzcyBNb250aCBleHRlbmRzIF94ZmFfb2JqZWN0LlN0cmluZ09iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihMT0NBTEVfU0VUX05TX0lELCBcIm1vbnRoXCIpO1xuICB9XG5cbn1cblxuY2xhc3MgTW9udGhOYW1lcyBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihMT0NBTEVfU0VUX05TX0lELCBcIm1vbnRoTmFtZXNcIiwgdHJ1ZSk7XG4gICAgdGhpcy5hYmJyID0gKDAsIF91dGlscy5nZXRJbnRlZ2VyKSh7XG4gICAgICBkYXRhOiBhdHRyaWJ1dGVzLmFiYnIsXG4gICAgICBkZWZhdWx0VmFsdWU6IDAsXG4gICAgICB2YWxpZGF0ZTogeCA9PiB4ID09PSAxXG4gICAgfSk7XG4gICAgdGhpcy5tb250aCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgxMik7XG4gIH1cblxufVxuXG5jbGFzcyBOdW1iZXJQYXR0ZXJuIGV4dGVuZHMgX3hmYV9vYmplY3QuU3RyaW5nT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKExPQ0FMRV9TRVRfTlNfSUQsIFwibnVtYmVyUGF0dGVyblwiKTtcbiAgICB0aGlzLm5hbWUgPSAoMCwgX3V0aWxzLmdldFN0cmluZ09wdGlvbikoYXR0cmlidXRlcy5uYW1lLCBbXCJmdWxsXCIsIFwibG9uZ1wiLCBcIm1lZFwiLCBcInNob3J0XCJdKTtcbiAgfVxuXG59XG5cbmNsYXNzIE51bWJlclBhdHRlcm5zIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKExPQ0FMRV9TRVRfTlNfSUQsIFwibnVtYmVyUGF0dGVybnNcIiwgdHJ1ZSk7XG4gICAgdGhpcy5udW1iZXJQYXR0ZXJuID0gbmV3IF94ZmFfb2JqZWN0LlhGQU9iamVjdEFycmF5KDQpO1xuICB9XG5cbn1cblxuY2xhc3MgTnVtYmVyU3ltYm9sIGV4dGVuZHMgX3hmYV9vYmplY3QuU3RyaW5nT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKExPQ0FMRV9TRVRfTlNfSUQsIFwibnVtYmVyU3ltYm9sXCIpO1xuICAgIHRoaXMubmFtZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLm5hbWUsIFtcImRlY2ltYWxcIiwgXCJncm91cGluZ1wiLCBcInBlcmNlbnRcIiwgXCJtaW51c1wiLCBcInplcm9cIl0pO1xuICB9XG5cbn1cblxuY2xhc3MgTnVtYmVyU3ltYm9scyBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihMT0NBTEVfU0VUX05TX0lELCBcIm51bWJlclN5bWJvbHNcIiwgdHJ1ZSk7XG4gICAgdGhpcy5udW1iZXJTeW1ib2wgPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoNSk7XG4gIH1cblxufVxuXG5jbGFzcyBUaW1lUGF0dGVybiBleHRlbmRzIF94ZmFfb2JqZWN0LlN0cmluZ09iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihMT0NBTEVfU0VUX05TX0lELCBcInRpbWVQYXR0ZXJuXCIpO1xuICAgIHRoaXMubmFtZSA9ICgwLCBfdXRpbHMuZ2V0U3RyaW5nT3B0aW9uKShhdHRyaWJ1dGVzLm5hbWUsIFtcImZ1bGxcIiwgXCJsb25nXCIsIFwibWVkXCIsIFwic2hvcnRcIl0pO1xuICB9XG5cbn1cblxuY2xhc3MgVGltZVBhdHRlcm5zIGV4dGVuZHMgX3hmYV9vYmplY3QuWEZBT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKExPQ0FMRV9TRVRfTlNfSUQsIFwidGltZVBhdHRlcm5zXCIsIHRydWUpO1xuICAgIHRoaXMudGltZVBhdHRlcm4gPSBuZXcgX3hmYV9vYmplY3QuWEZBT2JqZWN0QXJyYXkoNCk7XG4gIH1cblxufVxuXG5jbGFzcyBUeXBlRmFjZSBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihMT0NBTEVfU0VUX05TX0lELCBcInR5cGVGYWNlXCIsIHRydWUpO1xuICAgIHRoaXMubmFtZSA9IGF0dHJpYnV0ZXMubmFtZSB8IFwiXCI7XG4gIH1cblxufVxuXG5jbGFzcyBUeXBlRmFjZXMgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoTE9DQUxFX1NFVF9OU19JRCwgXCJ0eXBlRmFjZXNcIiwgdHJ1ZSk7XG4gICAgdGhpcy50eXBlRmFjZSA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICB9XG5cbn1cblxuY2xhc3MgTG9jYWxlU2V0TmFtZXNwYWNlIHtcbiAgc3RhdGljIFtfbmFtZXNwYWNlcy4kYnVpbGRYRkFPYmplY3RdKG5hbWUsIGF0dHJpYnV0ZXMpIHtcbiAgICBpZiAoTG9jYWxlU2V0TmFtZXNwYWNlLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICByZXR1cm4gTG9jYWxlU2V0TmFtZXNwYWNlW25hbWVdKGF0dHJpYnV0ZXMpO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBzdGF0aWMgY2FsZW5kYXJTeW1ib2xzKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBDYWxlbmRhclN5bWJvbHMoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGN1cnJlbmN5U3ltYm9sKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBDdXJyZW5jeVN5bWJvbChhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgY3VycmVuY3lTeW1ib2xzKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBDdXJyZW5jeVN5bWJvbHMoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGRhdGVQYXR0ZXJuKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlUGF0dGVybihhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZGF0ZVBhdHRlcm5zKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlUGF0dGVybnMoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIGRhdGVUaW1lU3ltYm9scyhhdHRycykge1xuICAgIHJldHVybiBuZXcgRGF0ZVRpbWVTeW1ib2xzKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBkYXkoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IERheShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZGF5TmFtZXMoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IERheU5hbWVzKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBlcmEoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEVyYShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgZXJhTmFtZXMoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IEVyYU5hbWVzKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBsb2NhbGUoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IExvY2FsZShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgbG9jYWxlU2V0KGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBMb2NhbGVTZXQoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIG1lcmlkaWVtKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBNZXJpZGllbShhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgbWVyaWRpZW1OYW1lcyhhdHRycykge1xuICAgIHJldHVybiBuZXcgTWVyaWRpZW1OYW1lcyhhdHRycyk7XG4gIH1cblxuICBzdGF0aWMgbW9udGgoYXR0cnMpIHtcbiAgICByZXR1cm4gbmV3IE1vbnRoKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBtb250aE5hbWVzKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBNb250aE5hbWVzKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBudW1iZXJQYXR0ZXJuKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBOdW1iZXJQYXR0ZXJuKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBudW1iZXJQYXR0ZXJucyhhdHRycykge1xuICAgIHJldHVybiBuZXcgTnVtYmVyUGF0dGVybnMoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIG51bWJlclN5bWJvbChhdHRycykge1xuICAgIHJldHVybiBuZXcgTnVtYmVyU3ltYm9sKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyBudW1iZXJTeW1ib2xzKGF0dHJzKSB7XG4gICAgcmV0dXJuIG5ldyBOdW1iZXJTeW1ib2xzKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyB0aW1lUGF0dGVybihhdHRycykge1xuICAgIHJldHVybiBuZXcgVGltZVBhdHRlcm4oYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHRpbWVQYXR0ZXJucyhhdHRycykge1xuICAgIHJldHVybiBuZXcgVGltZVBhdHRlcm5zKGF0dHJzKTtcbiAgfVxuXG4gIHN0YXRpYyB0eXBlRmFjZShhdHRycykge1xuICAgIHJldHVybiBuZXcgVHlwZUZhY2UoYXR0cnMpO1xuICB9XG5cbiAgc3RhdGljIHR5cGVGYWNlcyhhdHRycykge1xuICAgIHJldHVybiBuZXcgVHlwZUZhY2VzKGF0dHJzKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuTG9jYWxlU2V0TmFtZXNwYWNlID0gTG9jYWxlU2V0TmFtZXNwYWNlO1xuXG4vKioqLyB9KSxcbi8qIDkzICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLlNpZ25hdHVyZU5hbWVzcGFjZSA9IHZvaWQgMDtcblxudmFyIF9uYW1lc3BhY2VzID0gX193X3BkZmpzX3JlcXVpcmVfXyg3Nyk7XG5cbnZhciBfeGZhX29iamVjdCA9IF9fd19wZGZqc19yZXF1aXJlX18oNzUpO1xuXG5jb25zdCBTSUdOQVRVUkVfTlNfSUQgPSBfbmFtZXNwYWNlcy5OYW1lc3BhY2VJZHMuc2lnbmF0dXJlLmlkO1xuXG5jbGFzcyBTaWduYXR1cmUgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoU0lHTkFUVVJFX05TX0lELCBcInNpZ25hdHVyZVwiLCB0cnVlKTtcbiAgfVxuXG59XG5cbmNsYXNzIFNpZ25hdHVyZU5hbWVzcGFjZSB7XG4gIHN0YXRpYyBbX25hbWVzcGFjZXMuJGJ1aWxkWEZBT2JqZWN0XShuYW1lLCBhdHRyaWJ1dGVzKSB7XG4gICAgaWYgKFNpZ25hdHVyZU5hbWVzcGFjZS5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgcmV0dXJuIFNpZ25hdHVyZU5hbWVzcGFjZVtuYW1lXShhdHRyaWJ1dGVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgc3RhdGljIHNpZ25hdHVyZShhdHRyaWJ1dGVzKSB7XG4gICAgcmV0dXJuIG5ldyBTaWduYXR1cmUoYXR0cmlidXRlcyk7XG4gIH1cblxufVxuXG5leHBvcnRzLlNpZ25hdHVyZU5hbWVzcGFjZSA9IFNpZ25hdHVyZU5hbWVzcGFjZTtcblxuLyoqKi8gfSksXG4vKiA5NCAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5TdHlsZXNoZWV0TmFtZXNwYWNlID0gdm9pZCAwO1xuXG52YXIgX25hbWVzcGFjZXMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDc3KTtcblxudmFyIF94ZmFfb2JqZWN0ID0gX193X3BkZmpzX3JlcXVpcmVfXyg3NSk7XG5cbmNvbnN0IFNUWUxFU0hFRVRfTlNfSUQgPSBfbmFtZXNwYWNlcy5OYW1lc3BhY2VJZHMuc3R5bGVzaGVldC5pZDtcblxuY2xhc3MgU3R5bGVzaGVldCBleHRlbmRzIF94ZmFfb2JqZWN0LlhGQU9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihTVFlMRVNIRUVUX05TX0lELCBcInN0eWxlc2hlZXRcIiwgdHJ1ZSk7XG4gIH1cblxufVxuXG5jbGFzcyBTdHlsZXNoZWV0TmFtZXNwYWNlIHtcbiAgc3RhdGljIFtfbmFtZXNwYWNlcy4kYnVpbGRYRkFPYmplY3RdKG5hbWUsIGF0dHJpYnV0ZXMpIHtcbiAgICBpZiAoU3R5bGVzaGVldE5hbWVzcGFjZS5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgcmV0dXJuIFN0eWxlc2hlZXROYW1lc3BhY2VbbmFtZV0oYXR0cmlidXRlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHN0YXRpYyBzdHlsZXNoZWV0KGF0dHJpYnV0ZXMpIHtcbiAgICByZXR1cm4gbmV3IFN0eWxlc2hlZXQoYXR0cmlidXRlcyk7XG4gIH1cblxufVxuXG5leHBvcnRzLlN0eWxlc2hlZXROYW1lc3BhY2UgPSBTdHlsZXNoZWV0TmFtZXNwYWNlO1xuXG4vKioqLyB9KSxcbi8qIDk1ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLlhkcE5hbWVzcGFjZSA9IHZvaWQgMDtcblxudmFyIF9uYW1lc3BhY2VzID0gX193X3BkZmpzX3JlcXVpcmVfXyg3Nyk7XG5cbnZhciBfeGZhX29iamVjdCA9IF9fd19wZGZqc19yZXF1aXJlX18oNzUpO1xuXG5jb25zdCBYRFBfTlNfSUQgPSBfbmFtZXNwYWNlcy5OYW1lc3BhY2VJZHMueGRwLmlkO1xuXG5jbGFzcyBYZHAgZXh0ZW5kcyBfeGZhX29iamVjdC5YRkFPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoWERQX05TX0lELCBcInhkcFwiLCB0cnVlKTtcbiAgICB0aGlzLnV1aWQgPSBhdHRyaWJ1dGVzLnV1aWQgfHwgXCJcIjtcbiAgICB0aGlzLnRpbWVTdGFtcCA9IGF0dHJpYnV0ZXMudGltZVN0YW1wIHx8IFwiXCI7XG4gICAgdGhpcy5jb25maWcgPSBudWxsO1xuICAgIHRoaXMuY29ubmVjdGlvblNldCA9IG51bGw7XG4gICAgdGhpcy5kYXRhc2V0cyA9IG51bGw7XG4gICAgdGhpcy5sb2NhbGVTZXQgPSBudWxsO1xuICAgIHRoaXMuc3R5bGVzaGVldCA9IG5ldyBfeGZhX29iamVjdC5YRkFPYmplY3RBcnJheSgpO1xuICAgIHRoaXMudGVtcGxhdGUgPSBudWxsO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRvbkNoaWxkQ2hlY2tdKGNoaWxkKSB7XG4gICAgY29uc3QgbnMgPSBfbmFtZXNwYWNlcy5OYW1lc3BhY2VJZHNbY2hpbGRbX3hmYV9vYmplY3QuJG5vZGVOYW1lXV07XG4gICAgcmV0dXJuIG5zICYmIGNoaWxkW194ZmFfb2JqZWN0LiRuYW1lc3BhY2VJZF0gPT09IG5zLmlkO1xuICB9XG5cbn1cblxuY2xhc3MgWGRwTmFtZXNwYWNlIHtcbiAgc3RhdGljIFtfbmFtZXNwYWNlcy4kYnVpbGRYRkFPYmplY3RdKG5hbWUsIGF0dHJpYnV0ZXMpIHtcbiAgICBpZiAoWGRwTmFtZXNwYWNlLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICByZXR1cm4gWGRwTmFtZXNwYWNlW25hbWVdKGF0dHJpYnV0ZXMpO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBzdGF0aWMgeGRwKGF0dHJpYnV0ZXMpIHtcbiAgICByZXR1cm4gbmV3IFhkcChhdHRyaWJ1dGVzKTtcbiAgfVxuXG59XG5cbmV4cG9ydHMuWGRwTmFtZXNwYWNlID0gWGRwTmFtZXNwYWNlO1xuXG4vKioqLyB9KSxcbi8qIDk2ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLlhodG1sTmFtZXNwYWNlID0gdm9pZCAwO1xuXG52YXIgX3hmYV9vYmplY3QgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDc1KTtcblxudmFyIF9uYW1lc3BhY2VzID0gX193X3BkZmpzX3JlcXVpcmVfXyg3Nyk7XG5cbnZhciBfaHRtbF91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oODIpO1xuXG52YXIgX3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXyg3Nik7XG5cbmNvbnN0IFhIVE1MX05TX0lEID0gX25hbWVzcGFjZXMuTmFtZXNwYWNlSWRzLnhodG1sLmlkO1xuY29uc3QgJHJpY2hUZXh0ID0gU3ltYm9sKCk7XG5jb25zdCBWQUxJRF9TVFlMRVMgPSBuZXcgU2V0KFtcImNvbG9yXCIsIFwiZm9udFwiLCBcImZvbnQtZmFtaWx5XCIsIFwiZm9udC1zaXplXCIsIFwiZm9udC1zdHJldGNoXCIsIFwiZm9udC1zdHlsZVwiLCBcImZvbnQtd2VpZ2h0XCIsIFwibWFyZ2luXCIsIFwibWFyZ2luLWJvdHRvbVwiLCBcIm1hcmdpbi1sZWZ0XCIsIFwibWFyZ2luLXJpZ2h0XCIsIFwibWFyZ2luLXRvcFwiLCBcImxldHRlci1zcGFjaW5nXCIsIFwibGluZS1oZWlnaHRcIiwgXCJvcnBoYW5zXCIsIFwicGFnZS1icmVhay1hZnRlclwiLCBcInBhZ2UtYnJlYWstYmVmb3JlXCIsIFwicGFnZS1icmVhay1pbnNpZGVcIiwgXCJ0YWItaW50ZXJ2YWxcIiwgXCJ0YWItc3RvcFwiLCBcInRleHQtYWxpZ25cIiwgXCJ0ZXh0LWRlY29yYXRpb25cIiwgXCJ0ZXh0LWluZGVudFwiLCBcInZlcnRpY2FsLWFsaWduXCIsIFwid2lkb3dzXCIsIFwia2VybmluZy1tb2RlXCIsIFwieGZhLWZvbnQtaG9yaXpvbnRhbC1zY2FsZVwiLCBcInhmYS1mb250LXZlcnRpY2FsLXNjYWxlXCIsIFwieGZhLXNwYWNlcnVuXCIsIFwieGZhLXRhYi1zdG9wc1wiXSk7XG5jb25zdCBTdHlsZU1hcHBpbmcgPSBuZXcgTWFwKFtbXCJwYWdlLWJyZWFrLWFmdGVyXCIsIFwiYnJlYWtBZnRlclwiXSwgW1wicGFnZS1icmVhay1iZWZvcmVcIiwgXCJicmVha0JlZm9yZVwiXSwgW1wicGFnZS1icmVhay1pbnNpZGVcIiwgXCJicmVha0luc2lkZVwiXSwgW1wia2VybmluZy1tb2RlXCIsIHZhbHVlID0+IHZhbHVlID09PSBcIm5vbmVcIiA/IFwibm9uZVwiIDogXCJub3JtYWxcIl0sIFtcInhmYS1mb250LWhvcml6b250YWwtc2NhbGVcIiwgdmFsdWUgPT4gYHNjYWxlWCgke01hdGgubWF4KDAsIE1hdGgubWluKHBhcnNlSW50KHZhbHVlKSAvIDEwMCkpLnRvRml4ZWQoMil9KWBdLCBbXCJ4ZmEtZm9udC12ZXJ0aWNhbC1zY2FsZVwiLCB2YWx1ZSA9PiBgc2NhbGVZKCR7TWF0aC5tYXgoMCwgTWF0aC5taW4ocGFyc2VJbnQodmFsdWUpIC8gMTAwKSkudG9GaXhlZCgyKX0pYF0sIFtcInhmYS1zcGFjZXJ1blwiLCBcIlwiXSwgW1wieGZhLXRhYi1zdG9wc1wiLCBcIlwiXSwgW1wiZm9udC1zaXplXCIsICh2YWx1ZSwgb3JpZ2luYWwpID0+IHtcbiAgdmFsdWUgPSBvcmlnaW5hbC5mb250U2l6ZSA9ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKHZhbHVlKTtcbiAgcmV0dXJuICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKDAuOTkgKiB2YWx1ZSk7XG59XSwgW1wibGV0dGVyLXNwYWNpbmdcIiwgdmFsdWUgPT4gKDAsIF9odG1sX3V0aWxzLm1lYXN1cmVUb1N0cmluZykoKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkodmFsdWUpKV0sIFtcImxpbmUtaGVpZ2h0XCIsIHZhbHVlID0+ICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKCgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKHZhbHVlKSldLCBbXCJtYXJnaW5cIiwgdmFsdWUgPT4gKDAsIF9odG1sX3V0aWxzLm1lYXN1cmVUb1N0cmluZykoKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkodmFsdWUpKV0sIFtcIm1hcmdpbi1ib3R0b21cIiwgdmFsdWUgPT4gKDAsIF9odG1sX3V0aWxzLm1lYXN1cmVUb1N0cmluZykoKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkodmFsdWUpKV0sIFtcIm1hcmdpbi1sZWZ0XCIsIHZhbHVlID0+ICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKCgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKHZhbHVlKSldLCBbXCJtYXJnaW4tcmlnaHRcIiwgdmFsdWUgPT4gKDAsIF9odG1sX3V0aWxzLm1lYXN1cmVUb1N0cmluZykoKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkodmFsdWUpKV0sIFtcIm1hcmdpbi10b3BcIiwgdmFsdWUgPT4gKDAsIF9odG1sX3V0aWxzLm1lYXN1cmVUb1N0cmluZykoKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkodmFsdWUpKV0sIFtcInRleHQtaW5kZW50XCIsIHZhbHVlID0+ICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKCgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKHZhbHVlKSldLCBbXCJmb250LWZhbWlseVwiLCB2YWx1ZSA9PiB2YWx1ZV0sIFtcInZlcnRpY2FsLWFsaWduXCIsIHZhbHVlID0+ICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKCgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKHZhbHVlKSldXSk7XG5jb25zdCBzcGFjZXNSZWdFeHAgPSAvXFxzKy9nO1xuY29uc3QgY3JsZlJlZ0V4cCA9IC9bXFxyXFxuXSsvZztcbmNvbnN0IGNybGZGb3JSaWNoVGV4dFJlZ0V4cCA9IC9cXHJcXG4/L2c7XG5cbmZ1bmN0aW9uIG1hcFN0eWxlKHN0eWxlU3RyLCBub2RlLCByaWNoVGV4dCkge1xuICBjb25zdCBzdHlsZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgaWYgKCFzdHlsZVN0cikge1xuICAgIHJldHVybiBzdHlsZTtcbiAgfVxuXG4gIGNvbnN0IG9yaWdpbmFsID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBzdHlsZVN0ci5zcGxpdChcIjtcIikubWFwKHMgPT4gcy5zcGxpdChcIjpcIiwgMikpKSB7XG4gICAgY29uc3QgbWFwcGluZyA9IFN0eWxlTWFwcGluZy5nZXQoa2V5KTtcblxuICAgIGlmIChtYXBwaW5nID09PSBcIlwiKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBsZXQgbmV3VmFsdWUgPSB2YWx1ZTtcblxuICAgIGlmIChtYXBwaW5nKSB7XG4gICAgICBpZiAodHlwZW9mIG1hcHBpbmcgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgbmV3VmFsdWUgPSBtYXBwaW5nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3VmFsdWUgPSBtYXBwaW5nKHZhbHVlLCBvcmlnaW5hbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGtleS5lbmRzV2l0aChcInNjYWxlXCIpKSB7XG4gICAgICBpZiAoc3R5bGUudHJhbnNmb3JtKSB7XG4gICAgICAgIHN0eWxlLnRyYW5zZm9ybSA9IGAke3N0eWxlW2tleV19ICR7bmV3VmFsdWV9YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0eWxlLnRyYW5zZm9ybSA9IG5ld1ZhbHVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdHlsZVtrZXkucmVwbGFjZUFsbCgvLShbYS16QS1aXSkvZywgKF8sIHgpID0+IHgudG9VcHBlckNhc2UoKSldID0gbmV3VmFsdWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0eWxlLmZvbnRGYW1pbHkpIHtcbiAgICAoMCwgX2h0bWxfdXRpbHMuc2V0Rm9udEZhbWlseSkoe1xuICAgICAgdHlwZWZhY2U6IHN0eWxlLmZvbnRGYW1pbHksXG4gICAgICB3ZWlnaHQ6IHN0eWxlLmZvbnRXZWlnaHQgfHwgXCJub3JtYWxcIixcbiAgICAgIHBvc3R1cmU6IHN0eWxlLmZvbnRTdHlsZSB8fCBcIm5vcm1hbFwiLFxuICAgICAgc2l6ZTogb3JpZ2luYWwuZm9udFNpemUgfHwgMFxuICAgIH0sIG5vZGUsIG5vZGVbX3hmYV9vYmplY3QuJGdsb2JhbERhdGFdLmZvbnRGaW5kZXIsIHN0eWxlKTtcbiAgfVxuXG4gIGlmIChyaWNoVGV4dCAmJiBzdHlsZS52ZXJ0aWNhbEFsaWduICYmIHN0eWxlLnZlcnRpY2FsQWxpZ24gIT09IFwiMHB4XCIgJiYgc3R5bGUuZm9udFNpemUpIHtcbiAgICBjb25zdCBTVUJfU1VQRVJfU0NSSVBUX0ZBQ1RPUiA9IDAuNTgzO1xuICAgIGNvbnN0IFZFUlRJQ0FMX0ZBQ1RPUiA9IDAuMzMzO1xuICAgIGNvbnN0IGZvbnRTaXplID0gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkoc3R5bGUuZm9udFNpemUpO1xuICAgIHN0eWxlLmZvbnRTaXplID0gKDAsIF9odG1sX3V0aWxzLm1lYXN1cmVUb1N0cmluZykoZm9udFNpemUgKiBTVUJfU1VQRVJfU0NSSVBUX0ZBQ1RPUik7XG4gICAgc3R5bGUudmVydGljYWxBbGlnbiA9ICgwLCBfaHRtbF91dGlscy5tZWFzdXJlVG9TdHJpbmcpKE1hdGguc2lnbigoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KShzdHlsZS52ZXJ0aWNhbEFsaWduKSkgKiBmb250U2l6ZSAqIFZFUlRJQ0FMX0ZBQ1RPUik7XG4gIH1cblxuICAoMCwgX2h0bWxfdXRpbHMuZml4VGV4dEluZGVudCkoc3R5bGUpO1xuICByZXR1cm4gc3R5bGU7XG59XG5cbmZ1bmN0aW9uIGNoZWNrU3R5bGUobm9kZSkge1xuICBpZiAoIW5vZGUuc3R5bGUpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIHJldHVybiBub2RlLnN0eWxlLnRyaW0oKS5zcGxpdCgvXFxzKjtcXHMqLykuZmlsdGVyKHMgPT4gISFzKS5tYXAocyA9PiBzLnNwbGl0KC9cXHMqOlxccyovLCAyKSkuZmlsdGVyKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICBpZiAoa2V5ID09PSBcImZvbnQtZmFtaWx5XCIpIHtcbiAgICAgIG5vZGVbX3hmYV9vYmplY3QuJGdsb2JhbERhdGFdLnVzZWRUeXBlZmFjZXMuYWRkKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gVkFMSURfU1RZTEVTLmhhcyhrZXkpO1xuICB9KS5tYXAoa3YgPT4ga3Yuam9pbihcIjpcIikpLmpvaW4oXCI7XCIpO1xufVxuXG5jb25zdCBOb1doaXRlcyA9IG5ldyBTZXQoW1wiYm9keVwiLCBcImh0bWxcIl0pO1xuXG5jbGFzcyBYaHRtbE9iamVjdCBleHRlbmRzIF94ZmFfb2JqZWN0LlhtbE9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMsIG5hbWUpIHtcbiAgICBzdXBlcihYSFRNTF9OU19JRCwgbmFtZSk7XG4gICAgdGhpc1skcmljaFRleHRdID0gZmFsc2U7XG4gICAgdGhpcy5zdHlsZSA9IGF0dHJpYnV0ZXMuc3R5bGUgfHwgXCJcIjtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kY2xlYW5dKGJ1aWxkZXIpIHtcbiAgICBzdXBlcltfeGZhX29iamVjdC4kY2xlYW5dKGJ1aWxkZXIpO1xuXG4gICAgdGhpcy5zdHlsZSA9IGNoZWNrU3R5bGUodGhpcyk7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJGFjY2VwdFdoaXRlc3BhY2VdKCkge1xuICAgIHJldHVybiAhTm9XaGl0ZXMuaGFzKHRoaXNbX3hmYV9vYmplY3QuJG5vZGVOYW1lXSk7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJG9uVGV4dF0oc3RyLCByaWNoVGV4dCA9IGZhbHNlKSB7XG4gICAgaWYgKCFyaWNoVGV4dCkge1xuICAgICAgc3RyID0gc3RyLnJlcGxhY2UoY3JsZlJlZ0V4cCwgXCJcIik7XG5cbiAgICAgIGlmICghdGhpcy5zdHlsZS5pbmNsdWRlcyhcInhmYS1zcGFjZXJ1bjp5ZXNcIikpIHtcbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2Uoc3BhY2VzUmVnRXhwLCBcIiBcIik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNbJHJpY2hUZXh0XSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHN0cikge1xuICAgICAgdGhpc1tfeGZhX29iamVjdC4kY29udGVudF0gKz0gc3RyO1xuICAgIH1cbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kcHVzaEdseXBoc10obWVhc3VyZSwgbXVzdFBvcCA9IHRydWUpIHtcbiAgICBjb25zdCB4ZmFGb250ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBjb25zdCBtYXJnaW4gPSB7XG4gICAgICB0b3A6IE5hTixcbiAgICAgIGJvdHRvbTogTmFOLFxuICAgICAgbGVmdDogTmFOLFxuICAgICAgcmlnaHQ6IE5hTlxuICAgIH07XG4gICAgbGV0IGxpbmVIZWlnaHQgPSBudWxsO1xuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgdGhpcy5zdHlsZS5zcGxpdChcIjtcIikubWFwKHMgPT4gcy5zcGxpdChcIjpcIiwgMikpKSB7XG4gICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICBjYXNlIFwiZm9udC1mYW1pbHlcIjpcbiAgICAgICAgICB4ZmFGb250LnR5cGVmYWNlID0gKDAsIF91dGlscy5zdHJpcFF1b3RlcykodmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJmb250LXNpemVcIjpcbiAgICAgICAgICB4ZmFGb250LnNpemUgPSAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KSh2YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcImZvbnQtd2VpZ2h0XCI6XG4gICAgICAgICAgeGZhRm9udC53ZWlnaHQgPSB2YWx1ZTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwiZm9udC1zdHlsZVwiOlxuICAgICAgICAgIHhmYUZvbnQucG9zdHVyZSA9IHZhbHVlO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJsZXR0ZXItc3BhY2luZ1wiOlxuICAgICAgICAgIHhmYUZvbnQubGV0dGVyU3BhY2luZyA9ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKHZhbHVlKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwibWFyZ2luXCI6XG4gICAgICAgICAgY29uc3QgdmFsdWVzID0gdmFsdWUuc3BsaXQoLyBcXHQvKS5tYXAoeCA9PiAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KSh4KSk7XG5cbiAgICAgICAgICBzd2l0Y2ggKHZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgbWFyZ2luLnRvcCA9IG1hcmdpbi5ib3R0b20gPSBtYXJnaW4ubGVmdCA9IG1hcmdpbi5yaWdodCA9IHZhbHVlc1swXTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgbWFyZ2luLnRvcCA9IG1hcmdpbi5ib3R0b20gPSB2YWx1ZXNbMF07XG4gICAgICAgICAgICAgIG1hcmdpbi5sZWZ0ID0gbWFyZ2luLnJpZ2h0ID0gdmFsdWVzWzFdO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICBtYXJnaW4udG9wID0gdmFsdWVzWzBdO1xuICAgICAgICAgICAgICBtYXJnaW4uYm90dG9tID0gdmFsdWVzWzJdO1xuICAgICAgICAgICAgICBtYXJnaW4ubGVmdCA9IG1hcmdpbi5yaWdodCA9IHZhbHVlc1sxXTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgbWFyZ2luLnRvcCA9IHZhbHVlc1swXTtcbiAgICAgICAgICAgICAgbWFyZ2luLmxlZnQgPSB2YWx1ZXNbMV07XG4gICAgICAgICAgICAgIG1hcmdpbi5ib3R0b20gPSB2YWx1ZXNbMl07XG4gICAgICAgICAgICAgIG1hcmdpbi5yaWdodCA9IHZhbHVlc1szXTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBcIm1hcmdpbi10b3BcIjpcbiAgICAgICAgICBtYXJnaW4udG9wID0gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkodmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJtYXJnaW4tYm90dG9tXCI6XG4gICAgICAgICAgbWFyZ2luLmJvdHRvbSA9ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKHZhbHVlKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwibWFyZ2luLWxlZnRcIjpcbiAgICAgICAgICBtYXJnaW4ubGVmdCA9ICgwLCBfdXRpbHMuZ2V0TWVhc3VyZW1lbnQpKHZhbHVlKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFwibWFyZ2luLXJpZ2h0XCI6XG4gICAgICAgICAgbWFyZ2luLnJpZ2h0ID0gKDAsIF91dGlscy5nZXRNZWFzdXJlbWVudCkodmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgXCJsaW5lLWhlaWdodFwiOlxuICAgICAgICAgIGxpbmVIZWlnaHQgPSAoMCwgX3V0aWxzLmdldE1lYXN1cmVtZW50KSh2YWx1ZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbWVhc3VyZS5wdXNoRGF0YSh4ZmFGb250LCBtYXJnaW4sIGxpbmVIZWlnaHQpO1xuXG4gICAgaWYgKHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdKSB7XG4gICAgICBtZWFzdXJlLmFkZFN0cmluZyh0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpc1tfeGZhX29iamVjdC4kZ2V0Q2hpbGRyZW5dKCkpIHtcbiAgICAgICAgaWYgKGNoaWxkW194ZmFfb2JqZWN0LiRub2RlTmFtZV0gPT09IFwiI3RleHRcIikge1xuICAgICAgICAgIG1lYXN1cmUuYWRkU3RyaW5nKGNoaWxkW194ZmFfb2JqZWN0LiRjb250ZW50XSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZFtfeGZhX29iamVjdC4kcHVzaEdseXBoc10obWVhc3VyZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG11c3RQb3ApIHtcbiAgICAgIG1lYXN1cmUucG9wRm9udCgpO1xuICAgIH1cbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kdG9IVE1MXShhdmFpbGFibGVTcGFjZSkge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gW107XG4gICAgdGhpc1tfeGZhX29iamVjdC4kZXh0cmFdID0ge1xuICAgICAgY2hpbGRyZW5cbiAgICB9O1xuXG4gICAgdGhpc1tfeGZhX29iamVjdC4kY2hpbGRyZW5Ub0hUTUxdKHt9KTtcblxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDAgJiYgIXRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdKSB7XG4gICAgICByZXR1cm4gX3V0aWxzLkhUTUxSZXN1bHQuRU1QVFk7XG4gICAgfVxuXG4gICAgbGV0IHZhbHVlO1xuXG4gICAgaWYgKHRoaXNbJHJpY2hUZXh0XSkge1xuICAgICAgdmFsdWUgPSB0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XSA/IHRoaXNbX3hmYV9vYmplY3QuJGNvbnRlbnRdLnJlcGxhY2UoY3JsZkZvclJpY2hUZXh0UmVnRXhwLCBcIlxcblwiKSA6IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSB0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XSB8fCB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe1xuICAgICAgbmFtZTogdGhpc1tfeGZhX29iamVjdC4kbm9kZU5hbWVdLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBocmVmOiB0aGlzLmhyZWYsXG4gICAgICAgIHN0eWxlOiBtYXBTdHlsZSh0aGlzLnN0eWxlLCB0aGlzLCB0aGlzWyRyaWNoVGV4dF0pXG4gICAgICB9LFxuICAgICAgY2hpbGRyZW4sXG4gICAgICB2YWx1ZVxuICAgIH0pO1xuICB9XG5cbn1cblxuY2xhc3MgQSBleHRlbmRzIFhodG1sT2JqZWN0IHtcbiAgY29uc3RydWN0b3IoYXR0cmlidXRlcykge1xuICAgIHN1cGVyKGF0dHJpYnV0ZXMsIFwiYVwiKTtcbiAgICB0aGlzLmhyZWYgPSAoMCwgX2h0bWxfdXRpbHMuZml4VVJMKShhdHRyaWJ1dGVzLmhyZWYpIHx8IFwiXCI7XG4gIH1cblxufVxuXG5jbGFzcyBCIGV4dGVuZHMgWGh0bWxPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoYXR0cmlidXRlcywgXCJiXCIpO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRwdXNoR2x5cGhzXShtZWFzdXJlKSB7XG4gICAgbWVhc3VyZS5wdXNoRm9udCh7XG4gICAgICB3ZWlnaHQ6IFwiYm9sZFwiXG4gICAgfSk7XG5cbiAgICBzdXBlcltfeGZhX29iamVjdC4kcHVzaEdseXBoc10obWVhc3VyZSk7XG5cbiAgICBtZWFzdXJlLnBvcEZvbnQoKTtcbiAgfVxuXG59XG5cbmNsYXNzIEJvZHkgZXh0ZW5kcyBYaHRtbE9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihhdHRyaWJ1dGVzLCBcImJvZHlcIik7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJHRvSFRNTF0oYXZhaWxhYmxlU3BhY2UpIHtcbiAgICBjb25zdCByZXMgPSBzdXBlcltfeGZhX29iamVjdC4kdG9IVE1MXShhdmFpbGFibGVTcGFjZSk7XG5cbiAgICBjb25zdCB7XG4gICAgICBodG1sXG4gICAgfSA9IHJlcztcblxuICAgIGlmICghaHRtbCkge1xuICAgICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LkVNUFRZO1xuICAgIH1cblxuICAgIGh0bWwubmFtZSA9IFwiZGl2XCI7XG4gICAgaHRtbC5hdHRyaWJ1dGVzLmNsYXNzID0gW1wieGZhUmljaFwiXTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbn1cblxuY2xhc3MgQnIgZXh0ZW5kcyBYaHRtbE9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihhdHRyaWJ1dGVzLCBcImJyXCIpO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiR0ZXh0XSgpIHtcbiAgICByZXR1cm4gXCJcXG5cIjtcbiAgfVxuXG4gIFtfeGZhX29iamVjdC4kcHVzaEdseXBoc10obWVhc3VyZSkge1xuICAgIG1lYXN1cmUuYWRkU3RyaW5nKFwiXFxuXCIpO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiR0b0hUTUxdKGF2YWlsYWJsZVNwYWNlKSB7XG4gICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe1xuICAgICAgbmFtZTogXCJiclwiXG4gICAgfSk7XG4gIH1cblxufVxuXG5jbGFzcyBIdG1sIGV4dGVuZHMgWGh0bWxPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoYXR0cmlidXRlcywgXCJodG1sXCIpO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiR0b0hUTUxdKGF2YWlsYWJsZVNwYWNlKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBbXTtcbiAgICB0aGlzW194ZmFfb2JqZWN0LiRleHRyYV0gPSB7XG4gICAgICBjaGlsZHJlblxuICAgIH07XG5cbiAgICB0aGlzW194ZmFfb2JqZWN0LiRjaGlsZHJlblRvSFRNTF0oe30pO1xuXG4gICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe1xuICAgICAgICBuYW1lOiBcImRpdlwiLFxuICAgICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgICAgY2xhc3M6IFtcInhmYVJpY2hcIl0sXG4gICAgICAgICAgc3R5bGU6IHt9XG4gICAgICAgIH0sXG4gICAgICAgIHZhbHVlOiB0aGlzW194ZmFfb2JqZWN0LiRjb250ZW50XSB8fCBcIlwiXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCBjaGlsZCA9IGNoaWxkcmVuWzBdO1xuXG4gICAgICBpZiAoY2hpbGQuYXR0cmlidXRlcyAmJiBjaGlsZC5hdHRyaWJ1dGVzLmNsYXNzLmluY2x1ZGVzKFwieGZhUmljaFwiKSkge1xuICAgICAgICByZXR1cm4gX3V0aWxzLkhUTUxSZXN1bHQuc3VjY2VzcyhjaGlsZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIF91dGlscy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe1xuICAgICAgbmFtZTogXCJkaXZcIixcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgY2xhc3M6IFtcInhmYVJpY2hcIl0sXG4gICAgICAgIHN0eWxlOiB7fVxuICAgICAgfSxcbiAgICAgIGNoaWxkcmVuXG4gICAgfSk7XG4gIH1cblxufVxuXG5jbGFzcyBJIGV4dGVuZHMgWGh0bWxPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoYXR0cmlidXRlcywgXCJpXCIpO1xuICB9XG5cbiAgW194ZmFfb2JqZWN0LiRwdXNoR2x5cGhzXShtZWFzdXJlKSB7XG4gICAgbWVhc3VyZS5wdXNoRm9udCh7XG4gICAgICBwb3N0dXJlOiBcIml0YWxpY1wiXG4gICAgfSk7XG5cbiAgICBzdXBlcltfeGZhX29iamVjdC4kcHVzaEdseXBoc10obWVhc3VyZSk7XG5cbiAgICBtZWFzdXJlLnBvcEZvbnQoKTtcbiAgfVxuXG59XG5cbmNsYXNzIExpIGV4dGVuZHMgWGh0bWxPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoYXR0cmlidXRlcywgXCJsaVwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIE9sIGV4dGVuZHMgWGh0bWxPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoYXR0cmlidXRlcywgXCJvbFwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIFAgZXh0ZW5kcyBYaHRtbE9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihhdHRyaWJ1dGVzLCBcInBcIik7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJHB1c2hHbHlwaHNdKG1lYXN1cmUpIHtcbiAgICBzdXBlcltfeGZhX29iamVjdC4kcHVzaEdseXBoc10obWVhc3VyZSwgZmFsc2UpO1xuXG4gICAgbWVhc3VyZS5hZGRTdHJpbmcoXCJcXG5cIik7XG4gICAgbWVhc3VyZS5hZGRQYXJhKCk7XG4gICAgbWVhc3VyZS5wb3BGb250KCk7XG4gIH1cblxuICBbX3hmYV9vYmplY3QuJHRleHRdKCkge1xuICAgIGNvbnN0IHNpYmxpbmdzID0gdGhpc1tfeGZhX29iamVjdC4kZ2V0UGFyZW50XSgpW194ZmFfb2JqZWN0LiRnZXRDaGlsZHJlbl0oKTtcblxuICAgIGlmIChzaWJsaW5nc1tzaWJsaW5ncy5sZW5ndGggLSAxXSA9PT0gdGhpcykge1xuICAgICAgcmV0dXJuIHN1cGVyW194ZmFfb2JqZWN0LiR0ZXh0XSgpO1xuICAgIH1cblxuICAgIHJldHVybiBzdXBlcltfeGZhX29iamVjdC4kdGV4dF0oKSArIFwiXFxuXCI7XG4gIH1cblxufVxuXG5jbGFzcyBTcGFuIGV4dGVuZHMgWGh0bWxPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoYXR0cmlidXRlcywgXCJzcGFuXCIpO1xuICB9XG5cbn1cblxuY2xhc3MgU3ViIGV4dGVuZHMgWGh0bWxPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoYXR0cmlidXRlcywgXCJzdWJcIik7XG4gIH1cblxufVxuXG5jbGFzcyBTdXAgZXh0ZW5kcyBYaHRtbE9iamVjdCB7XG4gIGNvbnN0cnVjdG9yKGF0dHJpYnV0ZXMpIHtcbiAgICBzdXBlcihhdHRyaWJ1dGVzLCBcInN1cFwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIFVsIGV4dGVuZHMgWGh0bWxPYmplY3Qge1xuICBjb25zdHJ1Y3RvcihhdHRyaWJ1dGVzKSB7XG4gICAgc3VwZXIoYXR0cmlidXRlcywgXCJ1bFwiKTtcbiAgfVxuXG59XG5cbmNsYXNzIFhodG1sTmFtZXNwYWNlIHtcbiAgc3RhdGljIFtfbmFtZXNwYWNlcy4kYnVpbGRYRkFPYmplY3RdKG5hbWUsIGF0dHJpYnV0ZXMpIHtcbiAgICBpZiAoWGh0bWxOYW1lc3BhY2UuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgIHJldHVybiBYaHRtbE5hbWVzcGFjZVtuYW1lXShhdHRyaWJ1dGVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgc3RhdGljIGEoYXR0cmlidXRlcykge1xuICAgIHJldHVybiBuZXcgQShhdHRyaWJ1dGVzKTtcbiAgfVxuXG4gIHN0YXRpYyBiKGF0dHJpYnV0ZXMpIHtcbiAgICByZXR1cm4gbmV3IEIoYXR0cmlidXRlcyk7XG4gIH1cblxuICBzdGF0aWMgYm9keShhdHRyaWJ1dGVzKSB7XG4gICAgcmV0dXJuIG5ldyBCb2R5KGF0dHJpYnV0ZXMpO1xuICB9XG5cbiAgc3RhdGljIGJyKGF0dHJpYnV0ZXMpIHtcbiAgICByZXR1cm4gbmV3IEJyKGF0dHJpYnV0ZXMpO1xuICB9XG5cbiAgc3RhdGljIGh0bWwoYXR0cmlidXRlcykge1xuICAgIHJldHVybiBuZXcgSHRtbChhdHRyaWJ1dGVzKTtcbiAgfVxuXG4gIHN0YXRpYyBpKGF0dHJpYnV0ZXMpIHtcbiAgICByZXR1cm4gbmV3IEkoYXR0cmlidXRlcyk7XG4gIH1cblxuICBzdGF0aWMgbGkoYXR0cmlidXRlcykge1xuICAgIHJldHVybiBuZXcgTGkoYXR0cmlidXRlcyk7XG4gIH1cblxuICBzdGF0aWMgb2woYXR0cmlidXRlcykge1xuICAgIHJldHVybiBuZXcgT2woYXR0cmlidXRlcyk7XG4gIH1cblxuICBzdGF0aWMgcChhdHRyaWJ1dGVzKSB7XG4gICAgcmV0dXJuIG5ldyBQKGF0dHJpYnV0ZXMpO1xuICB9XG5cbiAgc3RhdGljIHNwYW4oYXR0cmlidXRlcykge1xuICAgIHJldHVybiBuZXcgU3BhbihhdHRyaWJ1dGVzKTtcbiAgfVxuXG4gIHN0YXRpYyBzdWIoYXR0cmlidXRlcykge1xuICAgIHJldHVybiBuZXcgU3ViKGF0dHJpYnV0ZXMpO1xuICB9XG5cbiAgc3RhdGljIHN1cChhdHRyaWJ1dGVzKSB7XG4gICAgcmV0dXJuIG5ldyBTdXAoYXR0cmlidXRlcyk7XG4gIH1cblxuICBzdGF0aWMgdWwoYXR0cmlidXRlcykge1xuICAgIHJldHVybiBuZXcgVWwoYXR0cmlidXRlcyk7XG4gIH1cblxufVxuXG5leHBvcnRzLlhodG1sTmFtZXNwYWNlID0gWGh0bWxOYW1lc3BhY2U7XG5cbi8qKiovIH0pLFxuLyogOTcgKi9cbi8qKiovICgoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcblxuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgKHtcbiAgdmFsdWU6IHRydWVcbn0pKTtcbmV4cG9ydHMuVW5rbm93bk5hbWVzcGFjZSA9IHZvaWQgMDtcblxudmFyIF9uYW1lc3BhY2VzID0gX193X3BkZmpzX3JlcXVpcmVfXyg3Nyk7XG5cbnZhciBfeGZhX29iamVjdCA9IF9fd19wZGZqc19yZXF1aXJlX18oNzUpO1xuXG5jbGFzcyBVbmtub3duTmFtZXNwYWNlIHtcbiAgY29uc3RydWN0b3IobnNJZCkge1xuICAgIHRoaXMubmFtZXNwYWNlSWQgPSBuc0lkO1xuICB9XG5cbiAgW19uYW1lc3BhY2VzLiRidWlsZFhGQU9iamVjdF0obmFtZSwgYXR0cmlidXRlcykge1xuICAgIHJldHVybiBuZXcgX3hmYV9vYmplY3QuWG1sT2JqZWN0KHRoaXMubmFtZXNwYWNlSWQsIG5hbWUsIGF0dHJpYnV0ZXMpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5Vbmtub3duTmFtZXNwYWNlID0gVW5rbm93bk5hbWVzcGFjZTtcblxuLyoqKi8gfSksXG4vKiA5OCAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5YUmVmID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG52YXIgX3ByaW1pdGl2ZXMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDUpO1xuXG52YXIgX2NvcmVfdXRpbHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDkpO1xuXG52YXIgX3BhcnNlciA9IF9fd19wZGZqc19yZXF1aXJlX18oMjcpO1xuXG52YXIgX2Jhc2Vfc3RyZWFtID0gX193X3BkZmpzX3JlcXVpcmVfXyg2KTtcblxudmFyIF9jcnlwdG8gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDcyKTtcblxuY2xhc3MgWFJlZiB7XG4gIGNvbnN0cnVjdG9yKHN0cmVhbSwgcGRmTWFuYWdlcikge1xuICAgIHRoaXMuc3RyZWFtID0gc3RyZWFtO1xuICAgIHRoaXMucGRmTWFuYWdlciA9IHBkZk1hbmFnZXI7XG4gICAgdGhpcy5lbnRyaWVzID0gW107XG4gICAgdGhpcy54cmVmc3RtcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGhpcy5fY2FjaGVNYXAgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5fcGVuZGluZ1JlZnMgPSBuZXcgX3ByaW1pdGl2ZXMuUmVmU2V0KCk7XG4gICAgdGhpcy5zdGF0cyA9IG5ldyBfY29yZV91dGlscy5Eb2NTdGF0cyhwZGZNYW5hZ2VyLm1zZ0hhbmRsZXIpO1xuICAgIHRoaXMuX25ld1JlZk51bSA9IG51bGw7XG4gIH1cblxuICBnZXROZXdSZWYoKSB7XG4gICAgaWYgKHRoaXMuX25ld1JlZk51bSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fbmV3UmVmTnVtID0gdGhpcy5lbnRyaWVzLmxlbmd0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gX3ByaW1pdGl2ZXMuUmVmLmdldCh0aGlzLl9uZXdSZWZOdW0rKywgMCk7XG4gIH1cblxuICByZXNldE5ld1JlZigpIHtcbiAgICB0aGlzLl9uZXdSZWZOdW0gPSBudWxsO1xuICB9XG5cbiAgc2V0U3RhcnRYUmVmKHN0YXJ0WFJlZikge1xuICAgIHRoaXMuc3RhcnRYUmVmUXVldWUgPSBbc3RhcnRYUmVmXTtcbiAgfVxuXG4gIHBhcnNlKHJlY292ZXJ5TW9kZSA9IGZhbHNlKSB7XG4gICAgbGV0IHRyYWlsZXJEaWN0O1xuXG4gICAgaWYgKCFyZWNvdmVyeU1vZGUpIHtcbiAgICAgIHRyYWlsZXJEaWN0ID0gdGhpcy5yZWFkWFJlZigpO1xuICAgIH0gZWxzZSB7XG4gICAgICAoMCwgX3V0aWwud2FybikoXCJJbmRleGluZyBhbGwgUERGIG9iamVjdHNcIik7XG4gICAgICB0cmFpbGVyRGljdCA9IHRoaXMuaW5kZXhPYmplY3RzKCk7XG4gICAgfVxuXG4gICAgdHJhaWxlckRpY3QuYXNzaWduWHJlZih0aGlzKTtcbiAgICB0aGlzLnRyYWlsZXIgPSB0cmFpbGVyRGljdDtcbiAgICBsZXQgZW5jcnlwdDtcblxuICAgIHRyeSB7XG4gICAgICBlbmNyeXB0ID0gdHJhaWxlckRpY3QuZ2V0KFwiRW5jcnlwdFwiKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgaWYgKGV4IGluc3RhbmNlb2YgX2NvcmVfdXRpbHMuTWlzc2luZ0RhdGFFeGNlcHRpb24pIHtcbiAgICAgICAgdGhyb3cgZXg7XG4gICAgICB9XG5cbiAgICAgICgwLCBfdXRpbC53YXJuKShgWFJlZi5wYXJzZSAtIEludmFsaWQgXCJFbmNyeXB0XCIgcmVmZXJlbmNlOiBcIiR7ZXh9XCIuYCk7XG4gICAgfVxuXG4gICAgaWYgKGVuY3J5cHQgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5EaWN0KSB7XG4gICAgICBjb25zdCBpZHMgPSB0cmFpbGVyRGljdC5nZXQoXCJJRFwiKTtcbiAgICAgIGNvbnN0IGZpbGVJZCA9IGlkcyAmJiBpZHMubGVuZ3RoID8gaWRzWzBdIDogXCJcIjtcbiAgICAgIGVuY3J5cHQuc3VwcHJlc3NFbmNyeXB0aW9uID0gdHJ1ZTtcbiAgICAgIHRoaXMuZW5jcnlwdCA9IG5ldyBfY3J5cHRvLkNpcGhlclRyYW5zZm9ybUZhY3RvcnkoZW5jcnlwdCwgZmlsZUlkLCB0aGlzLnBkZk1hbmFnZXIucGFzc3dvcmQpO1xuICAgIH1cblxuICAgIGxldCByb290O1xuXG4gICAgdHJ5IHtcbiAgICAgIHJvb3QgPSB0cmFpbGVyRGljdC5nZXQoXCJSb290XCIpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXggaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICB0aHJvdyBleDtcbiAgICAgIH1cblxuICAgICAgKDAsIF91dGlsLndhcm4pKGBYUmVmLnBhcnNlIC0gSW52YWxpZCBcIlJvb3RcIiByZWZlcmVuY2U6IFwiJHtleH1cIi5gKTtcbiAgICB9XG5cbiAgICBpZiAocm9vdCBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhZ2VzID0gcm9vdC5nZXQoXCJQYWdlc1wiKTtcblxuICAgICAgICBpZiAocGFnZXMgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5EaWN0KSB7XG4gICAgICAgICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgIGlmIChleCBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgICAgdGhyb3cgZXg7XG4gICAgICAgIH1cblxuICAgICAgICAoMCwgX3V0aWwud2FybikoYFhSZWYucGFyc2UgLSBJbnZhbGlkIFwiUGFnZXNcIiByZWZlcmVuY2U6IFwiJHtleH1cIi5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXJlY292ZXJ5TW9kZSkge1xuICAgICAgdGhyb3cgbmV3IF9jb3JlX3V0aWxzLlhSZWZQYXJzZUV4Y2VwdGlvbigpO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBfdXRpbC5JbnZhbGlkUERGRXhjZXB0aW9uKFwiSW52YWxpZCBSb290IHJlZmVyZW5jZS5cIik7XG4gIH1cblxuICBwcm9jZXNzWFJlZlRhYmxlKHBhcnNlcikge1xuICAgIGlmICghKFwidGFibGVTdGF0ZVwiIGluIHRoaXMpKSB7XG4gICAgICB0aGlzLnRhYmxlU3RhdGUgPSB7XG4gICAgICAgIGVudHJ5TnVtOiAwLFxuICAgICAgICBzdHJlYW1Qb3M6IHBhcnNlci5sZXhlci5zdHJlYW0ucG9zLFxuICAgICAgICBwYXJzZXJCdWYxOiBwYXJzZXIuYnVmMSxcbiAgICAgICAgcGFyc2VyQnVmMjogcGFyc2VyLmJ1ZjJcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3Qgb2JqID0gdGhpcy5yZWFkWFJlZlRhYmxlKHBhcnNlcik7XG5cbiAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0NtZCkob2JqLCBcInRyYWlsZXJcIikpIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgWFJlZiB0YWJsZTogY291bGQgbm90IGZpbmQgdHJhaWxlciBkaWN0aW9uYXJ5XCIpO1xuICAgIH1cblxuICAgIGxldCBkaWN0ID0gcGFyc2VyLmdldE9iaigpO1xuXG4gICAgaWYgKCEoZGljdCBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpICYmIGRpY3QuZGljdCkge1xuICAgICAgZGljdCA9IGRpY3QuZGljdDtcbiAgICB9XG5cbiAgICBpZiAoIShkaWN0IGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCkpIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgWFJlZiB0YWJsZTogY291bGQgbm90IHBhcnNlIHRyYWlsZXIgZGljdGlvbmFyeVwiKTtcbiAgICB9XG5cbiAgICBkZWxldGUgdGhpcy50YWJsZVN0YXRlO1xuICAgIHJldHVybiBkaWN0O1xuICB9XG5cbiAgcmVhZFhSZWZUYWJsZShwYXJzZXIpIHtcbiAgICBjb25zdCBzdHJlYW0gPSBwYXJzZXIubGV4ZXIuc3RyZWFtO1xuICAgIGNvbnN0IHRhYmxlU3RhdGUgPSB0aGlzLnRhYmxlU3RhdGU7XG4gICAgc3RyZWFtLnBvcyA9IHRhYmxlU3RhdGUuc3RyZWFtUG9zO1xuICAgIHBhcnNlci5idWYxID0gdGFibGVTdGF0ZS5wYXJzZXJCdWYxO1xuICAgIHBhcnNlci5idWYyID0gdGFibGVTdGF0ZS5wYXJzZXJCdWYyO1xuICAgIGxldCBvYmo7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKCEoXCJmaXJzdEVudHJ5TnVtXCIgaW4gdGFibGVTdGF0ZSkgfHwgIShcImVudHJ5Q291bnRcIiBpbiB0YWJsZVN0YXRlKSkge1xuICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzQ21kKShvYmogPSBwYXJzZXIuZ2V0T2JqKCksIFwidHJhaWxlclwiKSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGFibGVTdGF0ZS5maXJzdEVudHJ5TnVtID0gb2JqO1xuICAgICAgICB0YWJsZVN0YXRlLmVudHJ5Q291bnQgPSBwYXJzZXIuZ2V0T2JqKCk7XG4gICAgICB9XG5cbiAgICAgIGxldCBmaXJzdCA9IHRhYmxlU3RhdGUuZmlyc3RFbnRyeU51bTtcbiAgICAgIGNvbnN0IGNvdW50ID0gdGFibGVTdGF0ZS5lbnRyeUNvdW50O1xuXG4gICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoZmlyc3QpIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKGNvdW50KSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJJbnZhbGlkIFhSZWYgdGFibGU6IHdyb25nIHR5cGVzIGluIHN1YnNlY3Rpb24gaGVhZGVyXCIpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBpID0gdGFibGVTdGF0ZS5lbnRyeU51bTsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgdGFibGVTdGF0ZS5zdHJlYW1Qb3MgPSBzdHJlYW0ucG9zO1xuICAgICAgICB0YWJsZVN0YXRlLmVudHJ5TnVtID0gaTtcbiAgICAgICAgdGFibGVTdGF0ZS5wYXJzZXJCdWYxID0gcGFyc2VyLmJ1ZjE7XG4gICAgICAgIHRhYmxlU3RhdGUucGFyc2VyQnVmMiA9IHBhcnNlci5idWYyO1xuICAgICAgICBjb25zdCBlbnRyeSA9IHt9O1xuICAgICAgICBlbnRyeS5vZmZzZXQgPSBwYXJzZXIuZ2V0T2JqKCk7XG4gICAgICAgIGVudHJ5LmdlbiA9IHBhcnNlci5nZXRPYmooKTtcbiAgICAgICAgY29uc3QgdHlwZSA9IHBhcnNlci5nZXRPYmooKTtcblxuICAgICAgICBpZiAodHlwZSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkNtZCkge1xuICAgICAgICAgIHN3aXRjaCAodHlwZS5jbWQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJmXCI6XG4gICAgICAgICAgICAgIGVudHJ5LmZyZWUgPSB0cnVlO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBcIm5cIjpcbiAgICAgICAgICAgICAgZW50cnkudW5jb21wcmVzc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGVudHJ5Lm9mZnNldCkgfHwgIU51bWJlci5pc0ludGVnZXIoZW50cnkuZ2VuKSB8fCAhKGVudHJ5LmZyZWUgfHwgZW50cnkudW5jb21wcmVzc2VkKSkge1xuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgSW52YWxpZCBlbnRyeSBpbiBYUmVmIHN1YnNlY3Rpb246ICR7Zmlyc3R9LCAke2NvdW50fWApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGkgPT09IDAgJiYgZW50cnkuZnJlZSAmJiBmaXJzdCA9PT0gMSkge1xuICAgICAgICAgIGZpcnN0ID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5lbnRyaWVzW2kgKyBmaXJzdF0pIHtcbiAgICAgICAgICB0aGlzLmVudHJpZXNbaSArIGZpcnN0XSA9IGVudHJ5O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRhYmxlU3RhdGUuZW50cnlOdW0gPSAwO1xuICAgICAgdGFibGVTdGF0ZS5zdHJlYW1Qb3MgPSBzdHJlYW0ucG9zO1xuICAgICAgdGFibGVTdGF0ZS5wYXJzZXJCdWYxID0gcGFyc2VyLmJ1ZjE7XG4gICAgICB0YWJsZVN0YXRlLnBhcnNlckJ1ZjIgPSBwYXJzZXIuYnVmMjtcbiAgICAgIGRlbGV0ZSB0YWJsZVN0YXRlLmZpcnN0RW50cnlOdW07XG4gICAgICBkZWxldGUgdGFibGVTdGF0ZS5lbnRyeUNvdW50O1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVudHJpZXNbMF0gJiYgIXRoaXMuZW50cmllc1swXS5mcmVlKSB7XG4gICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJJbnZhbGlkIFhSZWYgdGFibGU6IHVuZXhwZWN0ZWQgZmlyc3Qgb2JqZWN0XCIpO1xuICAgIH1cblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBwcm9jZXNzWFJlZlN0cmVhbShzdHJlYW0pIHtcbiAgICBpZiAoIShcInN0cmVhbVN0YXRlXCIgaW4gdGhpcykpIHtcbiAgICAgIGNvbnN0IHN0cmVhbVBhcmFtZXRlcnMgPSBzdHJlYW0uZGljdDtcbiAgICAgIGNvbnN0IGJ5dGVXaWR0aHMgPSBzdHJlYW1QYXJhbWV0ZXJzLmdldChcIldcIik7XG4gICAgICBsZXQgcmFuZ2UgPSBzdHJlYW1QYXJhbWV0ZXJzLmdldChcIkluZGV4XCIpO1xuXG4gICAgICBpZiAoIXJhbmdlKSB7XG4gICAgICAgIHJhbmdlID0gWzAsIHN0cmVhbVBhcmFtZXRlcnMuZ2V0KFwiU2l6ZVwiKV07XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc3RyZWFtU3RhdGUgPSB7XG4gICAgICAgIGVudHJ5UmFuZ2VzOiByYW5nZSxcbiAgICAgICAgYnl0ZVdpZHRocyxcbiAgICAgICAgZW50cnlOdW06IDAsXG4gICAgICAgIHN0cmVhbVBvczogc3RyZWFtLnBvc1xuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLnJlYWRYUmVmU3RyZWFtKHN0cmVhbSk7XG4gICAgZGVsZXRlIHRoaXMuc3RyZWFtU3RhdGU7XG4gICAgcmV0dXJuIHN0cmVhbS5kaWN0O1xuICB9XG5cbiAgcmVhZFhSZWZTdHJlYW0oc3RyZWFtKSB7XG4gICAgY29uc3Qgc3RyZWFtU3RhdGUgPSB0aGlzLnN0cmVhbVN0YXRlO1xuICAgIHN0cmVhbS5wb3MgPSBzdHJlYW1TdGF0ZS5zdHJlYW1Qb3M7XG4gICAgY29uc3QgW3R5cGVGaWVsZFdpZHRoLCBvZmZzZXRGaWVsZFdpZHRoLCBnZW5lcmF0aW9uRmllbGRXaWR0aF0gPSBzdHJlYW1TdGF0ZS5ieXRlV2lkdGhzO1xuICAgIGNvbnN0IGVudHJ5UmFuZ2VzID0gc3RyZWFtU3RhdGUuZW50cnlSYW5nZXM7XG5cbiAgICB3aGlsZSAoZW50cnlSYW5nZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgW2ZpcnN0LCBuXSA9IGVudHJ5UmFuZ2VzO1xuXG4gICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoZmlyc3QpIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKG4pKSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgSW52YWxpZCBYUmVmIHJhbmdlIGZpZWxkczogJHtmaXJzdH0sICR7bn1gKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHR5cGVGaWVsZFdpZHRoKSB8fCAhTnVtYmVyLmlzSW50ZWdlcihvZmZzZXRGaWVsZFdpZHRoKSB8fCAhTnVtYmVyLmlzSW50ZWdlcihnZW5lcmF0aW9uRmllbGRXaWR0aCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKGBJbnZhbGlkIFhSZWYgZW50cnkgZmllbGRzIGxlbmd0aDogJHtmaXJzdH0sICR7bn1gKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChsZXQgaSA9IHN0cmVhbVN0YXRlLmVudHJ5TnVtOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIHN0cmVhbVN0YXRlLmVudHJ5TnVtID0gaTtcbiAgICAgICAgc3RyZWFtU3RhdGUuc3RyZWFtUG9zID0gc3RyZWFtLnBvcztcbiAgICAgICAgbGV0IHR5cGUgPSAwLFxuICAgICAgICAgICAgb2Zmc2V0ID0gMCxcbiAgICAgICAgICAgIGdlbmVyYXRpb24gPSAwO1xuXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdHlwZUZpZWxkV2lkdGg7ICsraikge1xuICAgICAgICAgIGNvbnN0IHR5cGVCeXRlID0gc3RyZWFtLmdldEJ5dGUoKTtcblxuICAgICAgICAgIGlmICh0eXBlQnl0ZSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgWFJlZiBieXRlV2lkdGhzICd0eXBlJy5cIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdHlwZSA9IHR5cGUgPDwgOCB8IHR5cGVCeXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVGaWVsZFdpZHRoID09PSAwKSB7XG4gICAgICAgICAgdHlwZSA9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG9mZnNldEZpZWxkV2lkdGg7ICsraikge1xuICAgICAgICAgIGNvbnN0IG9mZnNldEJ5dGUgPSBzdHJlYW0uZ2V0Qnl0ZSgpO1xuXG4gICAgICAgICAgaWYgKG9mZnNldEJ5dGUgPT09IC0xKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJJbnZhbGlkIFhSZWYgYnl0ZVdpZHRocyAnb2Zmc2V0Jy5cIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0IDw8IDggfCBvZmZzZXRCeXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBnZW5lcmF0aW9uRmllbGRXaWR0aDsgKytqKSB7XG4gICAgICAgICAgY29uc3QgZ2VuZXJhdGlvbkJ5dGUgPSBzdHJlYW0uZ2V0Qnl0ZSgpO1xuXG4gICAgICAgICAgaWYgKGdlbmVyYXRpb25CeXRlID09PSAtMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiSW52YWxpZCBYUmVmIGJ5dGVXaWR0aHMgJ2dlbmVyYXRpb24nLlwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBnZW5lcmF0aW9uID0gZ2VuZXJhdGlvbiA8PCA4IHwgZ2VuZXJhdGlvbkJ5dGU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbnRyeSA9IHt9O1xuICAgICAgICBlbnRyeS5vZmZzZXQgPSBvZmZzZXQ7XG4gICAgICAgIGVudHJ5LmdlbiA9IGdlbmVyYXRpb247XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgZW50cnkuZnJlZSA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIGVudHJ5LnVuY29tcHJlc3NlZCA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgSW52YWxpZCBYUmVmIGVudHJ5IHR5cGU6ICR7dHlwZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5lbnRyaWVzW2ZpcnN0ICsgaV0pIHtcbiAgICAgICAgICB0aGlzLmVudHJpZXNbZmlyc3QgKyBpXSA9IGVudHJ5O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN0cmVhbVN0YXRlLmVudHJ5TnVtID0gMDtcbiAgICAgIHN0cmVhbVN0YXRlLnN0cmVhbVBvcyA9IHN0cmVhbS5wb3M7XG4gICAgICBlbnRyeVJhbmdlcy5zcGxpY2UoMCwgMik7XG4gICAgfVxuICB9XG5cbiAgaW5kZXhPYmplY3RzKCkge1xuICAgIGNvbnN0IFRBQiA9IDB4OSxcbiAgICAgICAgICBMRiA9IDB4YSxcbiAgICAgICAgICBDUiA9IDB4ZCxcbiAgICAgICAgICBTUEFDRSA9IDB4MjA7XG4gICAgY29uc3QgUEVSQ0VOVCA9IDB4MjUsXG4gICAgICAgICAgTFQgPSAweDNjO1xuXG4gICAgZnVuY3Rpb24gcmVhZFRva2VuKGRhdGEsIG9mZnNldCkge1xuICAgICAgbGV0IHRva2VuID0gXCJcIixcbiAgICAgICAgICBjaCA9IGRhdGFbb2Zmc2V0XTtcblxuICAgICAgd2hpbGUgKGNoICE9PSBMRiAmJiBjaCAhPT0gQ1IgJiYgY2ggIT09IExUKSB7XG4gICAgICAgIGlmICgrK29mZnNldCA+PSBkYXRhLmxlbmd0aCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdG9rZW4gKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XG4gICAgICAgIGNoID0gZGF0YVtvZmZzZXRdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdG9rZW47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2tpcFVudGlsKGRhdGEsIG9mZnNldCwgd2hhdCkge1xuICAgICAgY29uc3QgbGVuZ3RoID0gd2hhdC5sZW5ndGgsXG4gICAgICAgICAgICBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGg7XG4gICAgICBsZXQgc2tpcHBlZCA9IDA7XG5cbiAgICAgIHdoaWxlIChvZmZzZXQgPCBkYXRhTGVuZ3RoKSB7XG4gICAgICAgIGxldCBpID0gMDtcblxuICAgICAgICB3aGlsZSAoaSA8IGxlbmd0aCAmJiBkYXRhW29mZnNldCArIGldID09PSB3aGF0W2ldKSB7XG4gICAgICAgICAgKytpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGkgPj0gbGVuZ3RoKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBvZmZzZXQrKztcbiAgICAgICAgc2tpcHBlZCsrO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2tpcHBlZDtcbiAgICB9XG5cbiAgICBjb25zdCBvYmpSZWdFeHAgPSAvXihcXGQrKVxccysoXFxkKylcXHMrb2JqXFxiLztcbiAgICBjb25zdCBlbmRvYmpSZWdFeHAgPSAvXFxiZW5kb2JqW1xcYlxcc10kLztcbiAgICBjb25zdCBuZXN0ZWRPYmpSZWdFeHAgPSAvXFxzKyhcXGQrXFxzK1xcZCtcXHMrb2JqW1xcYlxcczxdKSQvO1xuICAgIGNvbnN0IENIRUNLX0NPTlRFTlRfTEVOR1RIID0gMjU7XG4gICAgY29uc3QgdHJhaWxlckJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoWzExNiwgMTE0LCA5NywgMTA1LCAxMDgsIDEwMSwgMTE0XSk7XG4gICAgY29uc3Qgc3RhcnR4cmVmQnl0ZXMgPSBuZXcgVWludDhBcnJheShbMTE1LCAxMTYsIDk3LCAxMTQsIDExNiwgMTIwLCAxMTQsIDEwMSwgMTAyXSk7XG4gICAgY29uc3Qgb2JqQnl0ZXMgPSBuZXcgVWludDhBcnJheShbMTExLCA5OCwgMTA2XSk7XG4gICAgY29uc3QgeHJlZkJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoWzQ3LCA4OCwgODIsIDEwMSwgMTAyXSk7XG4gICAgdGhpcy5lbnRyaWVzLmxlbmd0aCA9IDA7XG5cbiAgICB0aGlzLl9jYWNoZU1hcC5jbGVhcigpO1xuXG4gICAgY29uc3Qgc3RyZWFtID0gdGhpcy5zdHJlYW07XG4gICAgc3RyZWFtLnBvcyA9IDA7XG4gICAgY29uc3QgYnVmZmVyID0gc3RyZWFtLmdldEJ5dGVzKCksXG4gICAgICAgICAgbGVuZ3RoID0gYnVmZmVyLmxlbmd0aDtcbiAgICBsZXQgcG9zaXRpb24gPSBzdHJlYW0uc3RhcnQ7XG4gICAgY29uc3QgdHJhaWxlcnMgPSBbXSxcbiAgICAgICAgICB4cmVmU3RtcyA9IFtdO1xuXG4gICAgd2hpbGUgKHBvc2l0aW9uIDwgbGVuZ3RoKSB7XG4gICAgICBsZXQgY2ggPSBidWZmZXJbcG9zaXRpb25dO1xuXG4gICAgICBpZiAoY2ggPT09IFRBQiB8fCBjaCA9PT0gTEYgfHwgY2ggPT09IENSIHx8IGNoID09PSBTUEFDRSkge1xuICAgICAgICArK3Bvc2l0aW9uO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNoID09PSBQRVJDRU5UKSB7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICArK3Bvc2l0aW9uO1xuXG4gICAgICAgICAgaWYgKHBvc2l0aW9uID49IGxlbmd0aCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2ggPSBidWZmZXJbcG9zaXRpb25dO1xuICAgICAgICB9IHdoaWxlIChjaCAhPT0gTEYgJiYgY2ggIT09IENSKTtcblxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdG9rZW4gPSByZWFkVG9rZW4oYnVmZmVyLCBwb3NpdGlvbik7XG4gICAgICBsZXQgbTtcblxuICAgICAgaWYgKHRva2VuLnN0YXJ0c1dpdGgoXCJ4cmVmXCIpICYmICh0b2tlbi5sZW5ndGggPT09IDQgfHwgL1xccy8udGVzdCh0b2tlbls0XSkpKSB7XG4gICAgICAgIHBvc2l0aW9uICs9IHNraXBVbnRpbChidWZmZXIsIHBvc2l0aW9uLCB0cmFpbGVyQnl0ZXMpO1xuICAgICAgICB0cmFpbGVycy5wdXNoKHBvc2l0aW9uKTtcbiAgICAgICAgcG9zaXRpb24gKz0gc2tpcFVudGlsKGJ1ZmZlciwgcG9zaXRpb24sIHN0YXJ0eHJlZkJ5dGVzKTtcbiAgICAgIH0gZWxzZSBpZiAobSA9IG9ialJlZ0V4cC5leGVjKHRva2VuKSkge1xuICAgICAgICBjb25zdCBudW0gPSBtWzFdIHwgMCxcbiAgICAgICAgICAgICAgZ2VuID0gbVsyXSB8IDA7XG4gICAgICAgIGxldCBjb250ZW50TGVuZ3RoLFxuICAgICAgICAgICAgc3RhcnRQb3MgPSBwb3NpdGlvbiArIHRva2VuLmxlbmd0aCxcbiAgICAgICAgICAgIHVwZGF0ZUVudHJpZXMgPSBmYWxzZTtcblxuICAgICAgICBpZiAoIXRoaXMuZW50cmllc1tudW1dKSB7XG4gICAgICAgICAgdXBkYXRlRW50cmllcyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5lbnRyaWVzW251bV0uZ2VuID09PSBnZW4pIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VyID0gbmV3IF9wYXJzZXIuUGFyc2VyKHtcbiAgICAgICAgICAgICAgbGV4ZXI6IG5ldyBfcGFyc2VyLkxleGVyKHN0cmVhbS5tYWtlU3ViU3RyZWFtKHN0YXJ0UG9zKSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcGFyc2VyLmdldE9iaigpO1xuICAgICAgICAgICAgdXBkYXRlRW50cmllcyA9IHRydWU7XG4gICAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgIGlmIChleCBpbnN0YW5jZW9mIF9jb3JlX3V0aWxzLlBhcnNlckVPRkV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoYGluZGV4T2JqZWN0cyAtLSBjaGVja2luZyBvYmplY3QgKCR7dG9rZW59KTogXCIke2V4fVwiLmApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdXBkYXRlRW50cmllcyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHVwZGF0ZUVudHJpZXMpIHtcbiAgICAgICAgICB0aGlzLmVudHJpZXNbbnVtXSA9IHtcbiAgICAgICAgICAgIG9mZnNldDogcG9zaXRpb24gLSBzdHJlYW0uc3RhcnQsXG4gICAgICAgICAgICBnZW4sXG4gICAgICAgICAgICB1bmNvbXByZXNzZWQ6IHRydWVcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKHN0YXJ0UG9zIDwgYnVmZmVyLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnN0IGVuZFBvcyA9IHN0YXJ0UG9zICsgc2tpcFVudGlsKGJ1ZmZlciwgc3RhcnRQb3MsIG9iakJ5dGVzKSArIDQ7XG4gICAgICAgICAgY29udGVudExlbmd0aCA9IGVuZFBvcyAtIHBvc2l0aW9uO1xuICAgICAgICAgIGNvbnN0IGNoZWNrUG9zID0gTWF0aC5tYXgoZW5kUG9zIC0gQ0hFQ0tfQ09OVEVOVF9MRU5HVEgsIHN0YXJ0UG9zKTtcbiAgICAgICAgICBjb25zdCB0b2tlblN0ciA9ICgwLCBfdXRpbC5ieXRlc1RvU3RyaW5nKShidWZmZXIuc3ViYXJyYXkoY2hlY2tQb3MsIGVuZFBvcykpO1xuXG4gICAgICAgICAgaWYgKGVuZG9ialJlZ0V4cC50ZXN0KHRva2VuU3RyKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG9ialRva2VuID0gbmVzdGVkT2JqUmVnRXhwLmV4ZWModG9rZW5TdHIpO1xuXG4gICAgICAgICAgICBpZiAob2JqVG9rZW4gJiYgb2JqVG9rZW5bMV0pIHtcbiAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdpbmRleE9iamVjdHM6IEZvdW5kIG5ldyBcIm9ialwiIGluc2lkZSBvZiBhbm90aGVyIFwib2JqXCIsICcgKyAnY2F1c2VkIGJ5IG1pc3NpbmcgXCJlbmRvYmpcIiAtLSB0cnlpbmcgdG8gcmVjb3Zlci4nKTtcbiAgICAgICAgICAgICAgY29udGVudExlbmd0aCAtPSBvYmpUb2tlblsxXS5sZW5ndGg7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHN0YXJ0UG9zID0gZW5kUG9zO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29udGVudCA9IGJ1ZmZlci5zdWJhcnJheShwb3NpdGlvbiwgcG9zaXRpb24gKyBjb250ZW50TGVuZ3RoKTtcbiAgICAgICAgY29uc3QgeHJlZlRhZ09mZnNldCA9IHNraXBVbnRpbChjb250ZW50LCAwLCB4cmVmQnl0ZXMpO1xuXG4gICAgICAgIGlmICh4cmVmVGFnT2Zmc2V0IDwgY29udGVudExlbmd0aCAmJiBjb250ZW50W3hyZWZUYWdPZmZzZXQgKyA1XSA8IDY0KSB7XG4gICAgICAgICAgeHJlZlN0bXMucHVzaChwb3NpdGlvbiAtIHN0cmVhbS5zdGFydCk7XG4gICAgICAgICAgdGhpcy54cmVmc3Rtc1twb3NpdGlvbiAtIHN0cmVhbS5zdGFydF0gPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgcG9zaXRpb24gKz0gY29udGVudExlbmd0aDtcbiAgICAgIH0gZWxzZSBpZiAodG9rZW4uc3RhcnRzV2l0aChcInRyYWlsZXJcIikgJiYgKHRva2VuLmxlbmd0aCA9PT0gNyB8fCAvXFxzLy50ZXN0KHRva2VuWzddKSkpIHtcbiAgICAgICAgdHJhaWxlcnMucHVzaChwb3NpdGlvbik7XG4gICAgICAgIHBvc2l0aW9uICs9IHNraXBVbnRpbChidWZmZXIsIHBvc2l0aW9uLCBzdGFydHhyZWZCeXRlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwb3NpdGlvbiArPSB0b2tlbi5sZW5ndGggKyAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHhyZWZTdG1zLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgIHRoaXMuc3RhcnRYUmVmUXVldWUucHVzaCh4cmVmU3Rtc1tpXSk7XG4gICAgICB0aGlzLnJlYWRYUmVmKHRydWUpO1xuICAgIH1cblxuICAgIGxldCB0cmFpbGVyRGljdDtcblxuICAgIGZvciAobGV0IGkgPSAwLCBpaSA9IHRyYWlsZXJzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgIHN0cmVhbS5wb3MgPSB0cmFpbGVyc1tpXTtcbiAgICAgIGNvbnN0IHBhcnNlciA9IG5ldyBfcGFyc2VyLlBhcnNlcih7XG4gICAgICAgIGxleGVyOiBuZXcgX3BhcnNlci5MZXhlcihzdHJlYW0pLFxuICAgICAgICB4cmVmOiB0aGlzLFxuICAgICAgICBhbGxvd1N0cmVhbXM6IHRydWUsXG4gICAgICAgIHJlY292ZXJ5TW9kZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgICBjb25zdCBvYmogPSBwYXJzZXIuZ2V0T2JqKCk7XG5cbiAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzQ21kKShvYmosIFwidHJhaWxlclwiKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGljdCA9IHBhcnNlci5nZXRPYmooKTtcblxuICAgICAgaWYgKCEoZGljdCBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByb290RGljdCA9IGRpY3QuZ2V0KFwiUm9vdFwiKTtcblxuICAgICAgICBpZiAoIShyb290RGljdCBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYWdlc0RpY3QgPSByb290RGljdC5nZXQoXCJQYWdlc1wiKTtcblxuICAgICAgICBpZiAoIShwYWdlc0RpY3QgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5EaWN0KSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFnZXNDb3VudCA9IHBhZ2VzRGljdC5nZXQoXCJDb3VudFwiKTtcblxuICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIocGFnZXNDb3VudCkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChkaWN0LmhhcyhcIklEXCIpKSB7XG4gICAgICAgIHJldHVybiBkaWN0O1xuICAgICAgfVxuXG4gICAgICB0cmFpbGVyRGljdCA9IGRpY3Q7XG4gICAgfVxuXG4gICAgaWYgKHRyYWlsZXJEaWN0KSB7XG4gICAgICByZXR1cm4gdHJhaWxlckRpY3Q7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudG9wRGljdCkge1xuICAgICAgcmV0dXJuIHRoaXMudG9wRGljdDtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgX3V0aWwuSW52YWxpZFBERkV4Y2VwdGlvbihcIkludmFsaWQgUERGIHN0cnVjdHVyZS5cIik7XG4gIH1cblxuICByZWFkWFJlZihyZWNvdmVyeU1vZGUgPSBmYWxzZSkge1xuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtO1xuICAgIGNvbnN0IHN0YXJ0WFJlZlBhcnNlZENhY2hlID0gbmV3IFNldCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHdoaWxlICh0aGlzLnN0YXJ0WFJlZlF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBzdGFydFhSZWYgPSB0aGlzLnN0YXJ0WFJlZlF1ZXVlWzBdO1xuXG4gICAgICAgIGlmIChzdGFydFhSZWZQYXJzZWRDYWNoZS5oYXMoc3RhcnRYUmVmKSkge1xuICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcInJlYWRYUmVmIC0gc2tpcHBpbmcgWFJlZiB0YWJsZSBzaW5jZSBpdCB3YXMgYWxyZWFkeSBwYXJzZWQuXCIpO1xuICAgICAgICAgIHRoaXMuc3RhcnRYUmVmUXVldWUuc2hpZnQoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXJ0WFJlZlBhcnNlZENhY2hlLmFkZChzdGFydFhSZWYpO1xuICAgICAgICBzdHJlYW0ucG9zID0gc3RhcnRYUmVmICsgc3RyZWFtLnN0YXJ0O1xuICAgICAgICBjb25zdCBwYXJzZXIgPSBuZXcgX3BhcnNlci5QYXJzZXIoe1xuICAgICAgICAgIGxleGVyOiBuZXcgX3BhcnNlci5MZXhlcihzdHJlYW0pLFxuICAgICAgICAgIHhyZWY6IHRoaXMsXG4gICAgICAgICAgYWxsb3dTdHJlYW1zOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgb2JqID0gcGFyc2VyLmdldE9iaigpO1xuICAgICAgICBsZXQgZGljdDtcblxuICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzQ21kKShvYmosIFwieHJlZlwiKSkge1xuICAgICAgICAgIGRpY3QgPSB0aGlzLnByb2Nlc3NYUmVmVGFibGUocGFyc2VyKTtcblxuICAgICAgICAgIGlmICghdGhpcy50b3BEaWN0KSB7XG4gICAgICAgICAgICB0aGlzLnRvcERpY3QgPSBkaWN0O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG9iaiA9IGRpY3QuZ2V0KFwiWFJlZlN0bVwiKTtcblxuICAgICAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKG9iaikpIHtcbiAgICAgICAgICAgIGNvbnN0IHBvcyA9IG9iajtcblxuICAgICAgICAgICAgaWYgKCEocG9zIGluIHRoaXMueHJlZnN0bXMpKSB7XG4gICAgICAgICAgICAgIHRoaXMueHJlZnN0bXNbcG9zXSA9IDE7XG4gICAgICAgICAgICAgIHRoaXMuc3RhcnRYUmVmUXVldWUucHVzaChwb3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChOdW1iZXIuaXNJbnRlZ2VyKG9iaikpIHtcbiAgICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIocGFyc2VyLmdldE9iaigpKSB8fCAhKDAsIF9wcmltaXRpdmVzLmlzQ21kKShwYXJzZXIuZ2V0T2JqKCksIFwib2JqXCIpIHx8ICEoKG9iaiA9IHBhcnNlci5nZXRPYmooKSkgaW5zdGFuY2VvZiBfYmFzZV9zdHJlYW0uQmFzZVN0cmVhbSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgWFJlZiBzdHJlYW1cIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGljdCA9IHRoaXMucHJvY2Vzc1hSZWZTdHJlYW0ob2JqKTtcblxuICAgICAgICAgIGlmICghdGhpcy50b3BEaWN0KSB7XG4gICAgICAgICAgICB0aGlzLnRvcERpY3QgPSBkaWN0O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghZGljdCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiRmFpbGVkIHRvIHJlYWQgWFJlZiBzdHJlYW1cIik7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgWFJlZiBzdHJlYW0gaGVhZGVyXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgb2JqID0gZGljdC5nZXQoXCJQcmV2XCIpO1xuXG4gICAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKG9iaikpIHtcbiAgICAgICAgICB0aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2gob2JqKTtcbiAgICAgICAgfSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5SZWYpIHtcbiAgICAgICAgICB0aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2gob2JqLm51bSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0YXJ0WFJlZlF1ZXVlLnNoaWZ0KCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnRvcERpY3Q7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUgaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuXG4gICAgICAoMCwgX3V0aWwuaW5mbykoXCIod2hpbGUgcmVhZGluZyBYUmVmKTogXCIgKyBlKTtcbiAgICAgIHRoaXMuc3RhcnRYUmVmUXVldWUuc2hpZnQoKTtcbiAgICB9XG5cbiAgICBpZiAocmVjb3ZlcnlNb2RlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBfY29yZV91dGlscy5YUmVmUGFyc2VFeGNlcHRpb24oKTtcbiAgfVxuXG4gIGdldEVudHJ5KGkpIHtcbiAgICBjb25zdCB4cmVmRW50cnkgPSB0aGlzLmVudHJpZXNbaV07XG5cbiAgICBpZiAoeHJlZkVudHJ5ICYmICF4cmVmRW50cnkuZnJlZSAmJiB4cmVmRW50cnkub2Zmc2V0KSB7XG4gICAgICByZXR1cm4geHJlZkVudHJ5O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZmV0Y2hJZlJlZihvYmosIHN1cHByZXNzRW5jcnlwdGlvbiA9IGZhbHNlKSB7XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLlJlZikge1xuICAgICAgcmV0dXJuIHRoaXMuZmV0Y2gob2JqLCBzdXBwcmVzc0VuY3J5cHRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBmZXRjaChyZWYsIHN1cHByZXNzRW5jcnlwdGlvbiA9IGZhbHNlKSB7XG4gICAgaWYgKCEocmVmIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuUmVmKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVmIG9iamVjdCBpcyBub3QgYSByZWZlcmVuY2VcIik7XG4gICAgfVxuXG4gICAgY29uc3QgbnVtID0gcmVmLm51bTtcblxuICAgIGNvbnN0IGNhY2hlRW50cnkgPSB0aGlzLl9jYWNoZU1hcC5nZXQobnVtKTtcblxuICAgIGlmIChjYWNoZUVudHJ5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChjYWNoZUVudHJ5IGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCAmJiAhY2FjaGVFbnRyeS5vYmpJZCkge1xuICAgICAgICBjYWNoZUVudHJ5Lm9iaklkID0gcmVmLnRvU3RyaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjYWNoZUVudHJ5O1xuICAgIH1cblxuICAgIGxldCB4cmVmRW50cnkgPSB0aGlzLmdldEVudHJ5KG51bSk7XG5cbiAgICBpZiAoeHJlZkVudHJ5ID09PSBudWxsKSB7XG4gICAgICB0aGlzLl9jYWNoZU1hcC5zZXQobnVtLCB4cmVmRW50cnkpO1xuXG4gICAgICByZXR1cm4geHJlZkVudHJ5O1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9wZW5kaW5nUmVmcy5oYXMocmVmKSkge1xuICAgICAgdGhpcy5fcGVuZGluZ1JlZnMucmVtb3ZlKHJlZik7XG5cbiAgICAgICgwLCBfdXRpbC53YXJuKShgSWdub3JpbmcgY2lyY3VsYXIgcmVmZXJlbmNlOiAke3JlZn0uYCk7XG4gICAgICByZXR1cm4gX3ByaW1pdGl2ZXMuQ0lSQ1VMQVJfUkVGO1xuICAgIH1cblxuICAgIHRoaXMuX3BlbmRpbmdSZWZzLnB1dChyZWYpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmICh4cmVmRW50cnkudW5jb21wcmVzc2VkKSB7XG4gICAgICAgIHhyZWZFbnRyeSA9IHRoaXMuZmV0Y2hVbmNvbXByZXNzZWQocmVmLCB4cmVmRW50cnksIHN1cHByZXNzRW5jcnlwdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB4cmVmRW50cnkgPSB0aGlzLmZldGNoQ29tcHJlc3NlZChyZWYsIHhyZWZFbnRyeSwgc3VwcHJlc3NFbmNyeXB0aW9uKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcGVuZGluZ1JlZnMucmVtb3ZlKHJlZik7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIHRoaXMuX3BlbmRpbmdSZWZzLnJlbW92ZShyZWYpO1xuXG4gICAgICB0aHJvdyBleDtcbiAgICB9XG5cbiAgICBpZiAoeHJlZkVudHJ5IGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCkge1xuICAgICAgeHJlZkVudHJ5Lm9iaklkID0gcmVmLnRvU3RyaW5nKCk7XG4gICAgfSBlbHNlIGlmICh4cmVmRW50cnkgaW5zdGFuY2VvZiBfYmFzZV9zdHJlYW0uQmFzZVN0cmVhbSkge1xuICAgICAgeHJlZkVudHJ5LmRpY3Qub2JqSWQgPSByZWYudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICByZXR1cm4geHJlZkVudHJ5O1xuICB9XG5cbiAgZmV0Y2hVbmNvbXByZXNzZWQocmVmLCB4cmVmRW50cnksIHN1cHByZXNzRW5jcnlwdGlvbiA9IGZhbHNlKSB7XG4gICAgY29uc3QgZ2VuID0gcmVmLmdlbjtcbiAgICBsZXQgbnVtID0gcmVmLm51bTtcblxuICAgIGlmICh4cmVmRW50cnkuZ2VuICE9PSBnZW4pIHtcbiAgICAgIHRocm93IG5ldyBfY29yZV91dGlscy5YUmVmRW50cnlFeGNlcHRpb24oYEluY29uc2lzdGVudCBnZW5lcmF0aW9uIGluIFhSZWY6ICR7cmVmfWApO1xuICAgIH1cblxuICAgIGNvbnN0IHN0cmVhbSA9IHRoaXMuc3RyZWFtLm1ha2VTdWJTdHJlYW0oeHJlZkVudHJ5Lm9mZnNldCArIHRoaXMuc3RyZWFtLnN0YXJ0KTtcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgX3BhcnNlci5QYXJzZXIoe1xuICAgICAgbGV4ZXI6IG5ldyBfcGFyc2VyLkxleGVyKHN0cmVhbSksXG4gICAgICB4cmVmOiB0aGlzLFxuICAgICAgYWxsb3dTdHJlYW1zOiB0cnVlXG4gICAgfSk7XG4gICAgY29uc3Qgb2JqMSA9IHBhcnNlci5nZXRPYmooKTtcbiAgICBjb25zdCBvYmoyID0gcGFyc2VyLmdldE9iaigpO1xuICAgIGNvbnN0IG9iajMgPSBwYXJzZXIuZ2V0T2JqKCk7XG5cbiAgICBpZiAob2JqMSAhPT0gbnVtIHx8IG9iajIgIT09IGdlbiB8fCAhKG9iajMgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5DbWQpKSB7XG4gICAgICB0aHJvdyBuZXcgX2NvcmVfdXRpbHMuWFJlZkVudHJ5RXhjZXB0aW9uKGBCYWQgKHVuY29tcHJlc3NlZCkgWFJlZiBlbnRyeTogJHtyZWZ9YCk7XG4gICAgfVxuXG4gICAgaWYgKG9iajMuY21kICE9PSBcIm9ialwiKSB7XG4gICAgICBpZiAob2JqMy5jbWQuc3RhcnRzV2l0aChcIm9ialwiKSkge1xuICAgICAgICBudW0gPSBwYXJzZUludChvYmozLmNtZC5zdWJzdHJpbmcoMyksIDEwKTtcblxuICAgICAgICBpZiAoIU51bWJlci5pc05hTihudW0pKSB7XG4gICAgICAgICAgcmV0dXJuIG51bTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgX2NvcmVfdXRpbHMuWFJlZkVudHJ5RXhjZXB0aW9uKGBCYWQgKHVuY29tcHJlc3NlZCkgWFJlZiBlbnRyeTogJHtyZWZ9YCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5jcnlwdCAmJiAhc3VwcHJlc3NFbmNyeXB0aW9uKSB7XG4gICAgICB4cmVmRW50cnkgPSBwYXJzZXIuZ2V0T2JqKHRoaXMuZW5jcnlwdC5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0obnVtLCBnZW4pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgeHJlZkVudHJ5ID0gcGFyc2VyLmdldE9iaigpO1xuICAgIH1cblxuICAgIGlmICghKHhyZWZFbnRyeSBpbnN0YW5jZW9mIF9iYXNlX3N0cmVhbS5CYXNlU3RyZWFtKSkge1xuICAgICAgdGhpcy5fY2FjaGVNYXAuc2V0KG51bSwgeHJlZkVudHJ5KTtcbiAgICB9XG5cbiAgICByZXR1cm4geHJlZkVudHJ5O1xuICB9XG5cbiAgZmV0Y2hDb21wcmVzc2VkKHJlZiwgeHJlZkVudHJ5LCBzdXBwcmVzc0VuY3J5cHRpb24gPSBmYWxzZSkge1xuICAgIGNvbnN0IHRhYmxlT2Zmc2V0ID0geHJlZkVudHJ5Lm9mZnNldDtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLmZldGNoKF9wcmltaXRpdmVzLlJlZi5nZXQodGFibGVPZmZzZXQsIDApKTtcblxuICAgIGlmICghKHN0cmVhbSBpbnN0YW5jZW9mIF9iYXNlX3N0cmVhbS5CYXNlU3RyZWFtKSkge1xuICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiYmFkIE9ialN0bSBzdHJlYW1cIik7XG4gICAgfVxuXG4gICAgY29uc3QgZmlyc3QgPSBzdHJlYW0uZGljdC5nZXQoXCJGaXJzdFwiKTtcbiAgICBjb25zdCBuID0gc3RyZWFtLmRpY3QuZ2V0KFwiTlwiKTtcblxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihmaXJzdCkgfHwgIU51bWJlci5pc0ludGVnZXIobikpIHtcbiAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcImludmFsaWQgZmlyc3QgYW5kIG4gcGFyYW1ldGVycyBmb3IgT2JqU3RtIHN0cmVhbVwiKTtcbiAgICB9XG5cbiAgICBsZXQgcGFyc2VyID0gbmV3IF9wYXJzZXIuUGFyc2VyKHtcbiAgICAgIGxleGVyOiBuZXcgX3BhcnNlci5MZXhlcihzdHJlYW0pLFxuICAgICAgeHJlZjogdGhpcyxcbiAgICAgIGFsbG93U3RyZWFtczogdHJ1ZVxuICAgIH0pO1xuICAgIGNvbnN0IG51bXMgPSBuZXcgQXJyYXkobik7XG4gICAgY29uc3Qgb2Zmc2V0cyA9IG5ldyBBcnJheShuKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBjb25zdCBudW0gPSBwYXJzZXIuZ2V0T2JqKCk7XG5cbiAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihudW0pKSB7XG4gICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihgaW52YWxpZCBvYmplY3QgbnVtYmVyIGluIHRoZSBPYmpTdG0gc3RyZWFtOiAke251bX1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2Zmc2V0ID0gcGFyc2VyLmdldE9iaigpO1xuXG4gICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIob2Zmc2V0KSkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoYGludmFsaWQgb2JqZWN0IG9mZnNldCBpbiB0aGUgT2JqU3RtIHN0cmVhbTogJHtvZmZzZXR9YCk7XG4gICAgICB9XG5cbiAgICAgIG51bXNbaV0gPSBudW07XG4gICAgICBvZmZzZXRzW2ldID0gb2Zmc2V0O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ID0gKHN0cmVhbS5zdGFydCB8fCAwKSArIGZpcnN0O1xuICAgIGNvbnN0IGVudHJpZXMgPSBuZXcgQXJyYXkobik7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgY29uc3QgbGVuZ3RoID0gaSA8IG4gLSAxID8gb2Zmc2V0c1tpICsgMV0gLSBvZmZzZXRzW2ldIDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAobGVuZ3RoIDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJJbnZhbGlkIG9mZnNldCBpbiB0aGUgT2JqU3RtIHN0cmVhbS5cIik7XG4gICAgICB9XG5cbiAgICAgIHBhcnNlciA9IG5ldyBfcGFyc2VyLlBhcnNlcih7XG4gICAgICAgIGxleGVyOiBuZXcgX3BhcnNlci5MZXhlcihzdHJlYW0ubWFrZVN1YlN0cmVhbShzdGFydCArIG9mZnNldHNbaV0sIGxlbmd0aCwgc3RyZWFtLmRpY3QpKSxcbiAgICAgICAgeHJlZjogdGhpcyxcbiAgICAgICAgYWxsb3dTdHJlYW1zOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG9iaiA9IHBhcnNlci5nZXRPYmooKTtcbiAgICAgIGVudHJpZXNbaV0gPSBvYmo7XG5cbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBfYmFzZV9zdHJlYW0uQmFzZVN0cmVhbSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbnVtID0gbnVtc1tpXSxcbiAgICAgICAgICAgIGVudHJ5ID0gdGhpcy5lbnRyaWVzW251bV07XG5cbiAgICAgIGlmIChlbnRyeSAmJiBlbnRyeS5vZmZzZXQgPT09IHRhYmxlT2Zmc2V0ICYmIGVudHJ5LmdlbiA9PT0gaSkge1xuICAgICAgICB0aGlzLl9jYWNoZU1hcC5zZXQobnVtLCBvYmopO1xuICAgICAgfVxuICAgIH1cblxuICAgIHhyZWZFbnRyeSA9IGVudHJpZXNbeHJlZkVudHJ5Lmdlbl07XG5cbiAgICBpZiAoeHJlZkVudHJ5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBfY29yZV91dGlscy5YUmVmRW50cnlFeGNlcHRpb24oYEJhZCAoY29tcHJlc3NlZCkgWFJlZiBlbnRyeTogJHtyZWZ9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHhyZWZFbnRyeTtcbiAgfVxuXG4gIGFzeW5jIGZldGNoSWZSZWZBc3luYyhvYmosIHN1cHByZXNzRW5jcnlwdGlvbikge1xuICAgIGlmIChvYmogaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5SZWYpIHtcbiAgICAgIHJldHVybiB0aGlzLmZldGNoQXN5bmMob2JqLCBzdXBwcmVzc0VuY3J5cHRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBhc3luYyBmZXRjaEFzeW5jKHJlZiwgc3VwcHJlc3NFbmNyeXB0aW9uKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLmZldGNoKHJlZiwgc3VwcHJlc3NFbmNyeXB0aW9uKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgaWYgKCEoZXggaW5zdGFuY2VvZiBfY29yZV91dGlscy5NaXNzaW5nRGF0YUV4Y2VwdGlvbikpIHtcbiAgICAgICAgdGhyb3cgZXg7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMucGRmTWFuYWdlci5yZXF1ZXN0UmFuZ2UoZXguYmVnaW4sIGV4LmVuZCk7XG4gICAgICByZXR1cm4gdGhpcy5mZXRjaEFzeW5jKHJlZiwgc3VwcHJlc3NFbmNyeXB0aW9uKTtcbiAgICB9XG4gIH1cblxuICBnZXRDYXRhbG9nT2JqKCkge1xuICAgIHJldHVybiB0aGlzLnJvb3Q7XG4gIH1cblxufVxuXG5leHBvcnRzLlhSZWYgPSBYUmVmO1xuXG4vKioqLyB9KSxcbi8qIDk5ICovXG4vKioqLyAoKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLCBleHBvcnRzLCBfX3dfcGRmanNfcmVxdWlyZV9fKSA9PiB7XG5cblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5leHBvcnRzLk1lc3NhZ2VIYW5kbGVyID0gdm9pZCAwO1xuXG52YXIgX3V0aWwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuXG5jb25zdCBDYWxsYmFja0tpbmQgPSB7XG4gIFVOS05PV046IDAsXG4gIERBVEE6IDEsXG4gIEVSUk9SOiAyXG59O1xuY29uc3QgU3RyZWFtS2luZCA9IHtcbiAgVU5LTk9XTjogMCxcbiAgQ0FOQ0VMOiAxLFxuICBDQU5DRUxfQ09NUExFVEU6IDIsXG4gIENMT1NFOiAzLFxuICBFTlFVRVVFOiA0LFxuICBFUlJPUjogNSxcbiAgUFVMTDogNixcbiAgUFVMTF9DT01QTEVURTogNyxcbiAgU1RBUlRfQ09NUExFVEU6IDhcbn07XG5cbmZ1bmN0aW9uIHdyYXBSZWFzb24ocmVhc29uKSB7XG4gIGlmICghKHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yIHx8IHR5cGVvZiByZWFzb24gPT09IFwib2JqZWN0XCIgJiYgcmVhc29uICE9PSBudWxsKSkge1xuICAgICgwLCBfdXRpbC53YXJuKSgnd3JhcFJlYXNvbjogRXhwZWN0ZWQgXCJyZWFzb25cIiB0byBiZSBhIChwb3NzaWJseSBjbG9uZWQpIEVycm9yLicpO1xuICAgIHJldHVybiByZWFzb247XG4gIH1cblxuICBzd2l0Y2ggKHJlYXNvbi5uYW1lKSB7XG4gICAgY2FzZSBcIkFib3J0RXhjZXB0aW9uXCI6XG4gICAgICByZXR1cm4gbmV3IF91dGlsLkFib3J0RXhjZXB0aW9uKHJlYXNvbi5tZXNzYWdlKTtcblxuICAgIGNhc2UgXCJNaXNzaW5nUERGRXhjZXB0aW9uXCI6XG4gICAgICByZXR1cm4gbmV3IF91dGlsLk1pc3NpbmdQREZFeGNlcHRpb24ocmVhc29uLm1lc3NhZ2UpO1xuXG4gICAgY2FzZSBcIlBhc3N3b3JkRXhjZXB0aW9uXCI6XG4gICAgICByZXR1cm4gbmV3IF91dGlsLlBhc3N3b3JkRXhjZXB0aW9uKHJlYXNvbi5tZXNzYWdlLCByZWFzb24uY29kZSk7XG5cbiAgICBjYXNlIFwiVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uXCI6XG4gICAgICByZXR1cm4gbmV3IF91dGlsLlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbihyZWFzb24ubWVzc2FnZSwgcmVhc29uLnN0YXR1cyk7XG5cbiAgICBjYXNlIFwiVW5rbm93bkVycm9yRXhjZXB0aW9uXCI6XG4gICAgICByZXR1cm4gbmV3IF91dGlsLlVua25vd25FcnJvckV4Y2VwdGlvbihyZWFzb24ubWVzc2FnZSwgcmVhc29uLmRldGFpbHMpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBuZXcgX3V0aWwuVW5rbm93bkVycm9yRXhjZXB0aW9uKHJlYXNvbi5tZXNzYWdlLCByZWFzb24udG9TdHJpbmcoKSk7XG4gIH1cbn1cblxuY2xhc3MgTWVzc2FnZUhhbmRsZXIge1xuICBjb25zdHJ1Y3Rvcihzb3VyY2VOYW1lLCB0YXJnZXROYW1lLCBjb21PYmopIHtcbiAgICB0aGlzLnNvdXJjZU5hbWUgPSBzb3VyY2VOYW1lO1xuICAgIHRoaXMudGFyZ2V0TmFtZSA9IHRhcmdldE5hbWU7XG4gICAgdGhpcy5jb21PYmogPSBjb21PYmo7XG4gICAgdGhpcy5jYWxsYmFja0lkID0gMTtcbiAgICB0aGlzLnN0cmVhbUlkID0gMTtcbiAgICB0aGlzLnN0cmVhbVNpbmtzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLmNhbGxiYWNrQ2FwYWJpbGl0aWVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB0aGlzLmFjdGlvbkhhbmRsZXIgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgdGhpcy5fb25Db21PYmpPbk1lc3NhZ2UgPSBldmVudCA9PiB7XG4gICAgICBjb25zdCBkYXRhID0gZXZlbnQuZGF0YTtcblxuICAgICAgaWYgKGRhdGEudGFyZ2V0TmFtZSAhPT0gdGhpcy5zb3VyY2VOYW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuc3RyZWFtKSB7XG4gICAgICAgIHRoaXMuX3Byb2Nlc3NTdHJlYW1NZXNzYWdlKGRhdGEpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgY2FsbGJhY2tJZCA9IGRhdGEuY2FsbGJhY2tJZDtcbiAgICAgICAgY29uc3QgY2FwYWJpbGl0eSA9IHRoaXMuY2FsbGJhY2tDYXBhYmlsaXRpZXNbY2FsbGJhY2tJZF07XG5cbiAgICAgICAgaWYgKCFjYXBhYmlsaXR5KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmVzb2x2ZSBjYWxsYmFjayAke2NhbGxiYWNrSWR9YCk7XG4gICAgICAgIH1cblxuICAgICAgICBkZWxldGUgdGhpcy5jYWxsYmFja0NhcGFiaWxpdGllc1tjYWxsYmFja0lkXTtcblxuICAgICAgICBpZiAoZGF0YS5jYWxsYmFjayA9PT0gQ2FsbGJhY2tLaW5kLkRBVEEpIHtcbiAgICAgICAgICBjYXBhYmlsaXR5LnJlc29sdmUoZGF0YS5kYXRhKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLmNhbGxiYWNrID09PSBDYWxsYmFja0tpbmQuRVJST1IpIHtcbiAgICAgICAgICBjYXBhYmlsaXR5LnJlamVjdCh3cmFwUmVhc29uKGRhdGEucmVhc29uKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBjYWxsYmFjayBjYXNlXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLmFjdGlvbkhhbmRsZXJbZGF0YS5hY3Rpb25dO1xuXG4gICAgICBpZiAoIWFjdGlvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gYWN0aW9uIGZyb20gd29ya2VyOiAke2RhdGEuYWN0aW9ufWApO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jYWxsYmFja0lkKSB7XG4gICAgICAgIGNvbnN0IGNiU291cmNlTmFtZSA9IHRoaXMuc291cmNlTmFtZTtcbiAgICAgICAgY29uc3QgY2JUYXJnZXROYW1lID0gZGF0YS5zb3VyY2VOYW1lO1xuICAgICAgICBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgIHJlc29sdmUoYWN0aW9uKGRhdGEuZGF0YSkpO1xuICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgc291cmNlTmFtZTogY2JTb3VyY2VOYW1lLFxuICAgICAgICAgICAgdGFyZ2V0TmFtZTogY2JUYXJnZXROYW1lLFxuICAgICAgICAgICAgY2FsbGJhY2s6IENhbGxiYWNrS2luZC5EQVRBLFxuICAgICAgICAgICAgY2FsbGJhY2tJZDogZGF0YS5jYWxsYmFja0lkLFxuICAgICAgICAgICAgZGF0YTogcmVzdWx0XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgc291cmNlTmFtZTogY2JTb3VyY2VOYW1lLFxuICAgICAgICAgICAgdGFyZ2V0TmFtZTogY2JUYXJnZXROYW1lLFxuICAgICAgICAgICAgY2FsbGJhY2s6IENhbGxiYWNrS2luZC5FUlJPUixcbiAgICAgICAgICAgIGNhbGxiYWNrSWQ6IGRhdGEuY2FsbGJhY2tJZCxcbiAgICAgICAgICAgIHJlYXNvbjogd3JhcFJlYXNvbihyZWFzb24pXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLnN0cmVhbUlkKSB7XG4gICAgICAgIHRoaXMuX2NyZWF0ZVN0cmVhbVNpbmsoZGF0YSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBhY3Rpb24oZGF0YS5kYXRhKTtcbiAgICB9O1xuXG4gICAgY29tT2JqLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuX29uQ29tT2JqT25NZXNzYWdlKTtcbiAgfVxuXG4gIG9uKGFjdGlvbk5hbWUsIGhhbmRsZXIpIHtcbiAgICBjb25zdCBhaCA9IHRoaXMuYWN0aW9uSGFuZGxlcjtcblxuICAgIGlmIChhaFthY3Rpb25OYW1lXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGVyZSBpcyBhbHJlYWR5IGFuIGFjdGlvbk5hbWUgY2FsbGVkIFwiJHthY3Rpb25OYW1lfVwiYCk7XG4gICAgfVxuXG4gICAgYWhbYWN0aW9uTmFtZV0gPSBoYW5kbGVyO1xuICB9XG5cbiAgc2VuZChhY3Rpb25OYW1lLCBkYXRhLCB0cmFuc2ZlcnMpIHtcbiAgICB0aGlzLmNvbU9iai5wb3N0TWVzc2FnZSh7XG4gICAgICBzb3VyY2VOYW1lOiB0aGlzLnNvdXJjZU5hbWUsXG4gICAgICB0YXJnZXROYW1lOiB0aGlzLnRhcmdldE5hbWUsXG4gICAgICBhY3Rpb246IGFjdGlvbk5hbWUsXG4gICAgICBkYXRhXG4gICAgfSwgdHJhbnNmZXJzKTtcbiAgfVxuXG4gIHNlbmRXaXRoUHJvbWlzZShhY3Rpb25OYW1lLCBkYXRhLCB0cmFuc2ZlcnMpIHtcbiAgICBjb25zdCBjYWxsYmFja0lkID0gdGhpcy5jYWxsYmFja0lkKys7XG4gICAgY29uc3QgY2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICB0aGlzLmNhbGxiYWNrQ2FwYWJpbGl0aWVzW2NhbGxiYWNrSWRdID0gY2FwYWJpbGl0eTtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmNvbU9iai5wb3N0TWVzc2FnZSh7XG4gICAgICAgIHNvdXJjZU5hbWU6IHRoaXMuc291cmNlTmFtZSxcbiAgICAgICAgdGFyZ2V0TmFtZTogdGhpcy50YXJnZXROYW1lLFxuICAgICAgICBhY3Rpb246IGFjdGlvbk5hbWUsXG4gICAgICAgIGNhbGxiYWNrSWQsXG4gICAgICAgIGRhdGFcbiAgICAgIH0sIHRyYW5zZmVycyk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGNhcGFiaWxpdHkucmVqZWN0KGV4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG5cbiAgc2VuZFdpdGhTdHJlYW0oYWN0aW9uTmFtZSwgZGF0YSwgcXVldWVpbmdTdHJhdGVneSwgdHJhbnNmZXJzKSB7XG4gICAgY29uc3Qgc3RyZWFtSWQgPSB0aGlzLnN0cmVhbUlkKyssXG4gICAgICAgICAgc291cmNlTmFtZSA9IHRoaXMuc291cmNlTmFtZSxcbiAgICAgICAgICB0YXJnZXROYW1lID0gdGhpcy50YXJnZXROYW1lLFxuICAgICAgICAgIGNvbU9iaiA9IHRoaXMuY29tT2JqO1xuICAgIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe1xuICAgICAgc3RhcnQ6IGNvbnRyb2xsZXIgPT4ge1xuICAgICAgICBjb25zdCBzdGFydENhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdID0ge1xuICAgICAgICAgIGNvbnRyb2xsZXIsXG4gICAgICAgICAgc3RhcnRDYWxsOiBzdGFydENhcGFiaWxpdHksXG4gICAgICAgICAgcHVsbENhbGw6IG51bGwsXG4gICAgICAgICAgY2FuY2VsQ2FsbDogbnVsbCxcbiAgICAgICAgICBpc0Nsb3NlZDogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICBzb3VyY2VOYW1lLFxuICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgYWN0aW9uOiBhY3Rpb25OYW1lLFxuICAgICAgICAgIHN0cmVhbUlkLFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgZGVzaXJlZFNpemU6IGNvbnRyb2xsZXIuZGVzaXJlZFNpemVcbiAgICAgICAgfSwgdHJhbnNmZXJzKTtcbiAgICAgICAgcmV0dXJuIHN0YXJ0Q2FwYWJpbGl0eS5wcm9taXNlO1xuICAgICAgfSxcbiAgICAgIHB1bGw6IGNvbnRyb2xsZXIgPT4ge1xuICAgICAgICBjb25zdCBwdWxsQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgICAgdGhpcy5zdHJlYW1Db250cm9sbGVyc1tzdHJlYW1JZF0ucHVsbENhbGwgPSBwdWxsQ2FwYWJpbGl0eTtcbiAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICBzb3VyY2VOYW1lLFxuICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLlBVTEwsXG4gICAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgICAgZGVzaXJlZFNpemU6IGNvbnRyb2xsZXIuZGVzaXJlZFNpemVcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwdWxsQ2FwYWJpbGl0eS5wcm9taXNlO1xuICAgICAgfSxcbiAgICAgIGNhbmNlbDogcmVhc29uID0+IHtcbiAgICAgICAgKDAsIF91dGlsLmFzc2VydCkocmVhc29uIGluc3RhbmNlb2YgRXJyb3IsIFwiY2FuY2VsIG11c3QgaGF2ZSBhIHZhbGlkIHJlYXNvblwiKTtcbiAgICAgICAgY29uc3QgY2FuY2VsQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgICAgdGhpcy5zdHJlYW1Db250cm9sbGVyc1tzdHJlYW1JZF0uY2FuY2VsQ2FsbCA9IGNhbmNlbENhcGFiaWxpdHk7XG4gICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLmlzQ2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICBzb3VyY2VOYW1lLFxuICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLkNBTkNFTCxcbiAgICAgICAgICBzdHJlYW1JZCxcbiAgICAgICAgICByZWFzb246IHdyYXBSZWFzb24ocmVhc29uKVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNhbmNlbENhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgIH1cbiAgICB9LCBxdWV1ZWluZ1N0cmF0ZWd5KTtcbiAgfVxuXG4gIF9jcmVhdGVTdHJlYW1TaW5rKGRhdGEpIHtcbiAgICBjb25zdCBzdHJlYW1JZCA9IGRhdGEuc3RyZWFtSWQsXG4gICAgICAgICAgc291cmNlTmFtZSA9IHRoaXMuc291cmNlTmFtZSxcbiAgICAgICAgICB0YXJnZXROYW1lID0gZGF0YS5zb3VyY2VOYW1lLFxuICAgICAgICAgIGNvbU9iaiA9IHRoaXMuY29tT2JqO1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzLFxuICAgICAgICAgIGFjdGlvbiA9IHRoaXMuYWN0aW9uSGFuZGxlcltkYXRhLmFjdGlvbl07XG4gICAgY29uc3Qgc3RyZWFtU2luayA9IHtcbiAgICAgIGVucXVldWUoY2h1bmssIHNpemUgPSAxLCB0cmFuc2ZlcnMpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNDYW5jZWxsZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYXN0RGVzaXJlZFNpemUgPSB0aGlzLmRlc2lyZWRTaXplO1xuICAgICAgICB0aGlzLmRlc2lyZWRTaXplIC09IHNpemU7XG5cbiAgICAgICAgaWYgKGxhc3REZXNpcmVkU2l6ZSA+IDAgJiYgdGhpcy5kZXNpcmVkU2l6ZSA8PSAwKSB7XG4gICAgICAgICAgdGhpcy5zaW5rQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgICAgICB0aGlzLnJlYWR5ID0gdGhpcy5zaW5rQ2FwYWJpbGl0eS5wcm9taXNlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICBzb3VyY2VOYW1lLFxuICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLkVOUVVFVUUsXG4gICAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgICAgY2h1bmtcbiAgICAgICAgfSwgdHJhbnNmZXJzKTtcbiAgICAgIH0sXG5cbiAgICAgIGNsb3NlKCkge1xuICAgICAgICBpZiAodGhpcy5pc0NhbmNlbGxlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNDYW5jZWxsZWQgPSB0cnVlO1xuICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgIHNvdXJjZU5hbWUsXG4gICAgICAgICAgdGFyZ2V0TmFtZSxcbiAgICAgICAgICBzdHJlYW06IFN0cmVhbUtpbmQuQ0xPU0UsXG4gICAgICAgICAgc3RyZWFtSWRcbiAgICAgICAgfSk7XG4gICAgICAgIGRlbGV0ZSBzZWxmLnN0cmVhbVNpbmtzW3N0cmVhbUlkXTtcbiAgICAgIH0sXG5cbiAgICAgIGVycm9yKHJlYXNvbikge1xuICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KShyZWFzb24gaW5zdGFuY2VvZiBFcnJvciwgXCJlcnJvciBtdXN0IGhhdmUgYSB2YWxpZCByZWFzb25cIik7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNDYW5jZWxsZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlzQ2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICBzb3VyY2VOYW1lLFxuICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLkVSUk9SLFxuICAgICAgICAgIHN0cmVhbUlkLFxuICAgICAgICAgIHJlYXNvbjogd3JhcFJlYXNvbihyZWFzb24pXG4gICAgICAgIH0pO1xuICAgICAgfSxcblxuICAgICAgc2lua0NhcGFiaWxpdHk6ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSxcbiAgICAgIG9uUHVsbDogbnVsbCxcbiAgICAgIG9uQ2FuY2VsOiBudWxsLFxuICAgICAgaXNDYW5jZWxsZWQ6IGZhbHNlLFxuICAgICAgZGVzaXJlZFNpemU6IGRhdGEuZGVzaXJlZFNpemUsXG4gICAgICByZWFkeTogbnVsbFxuICAgIH07XG4gICAgc3RyZWFtU2luay5zaW5rQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgc3RyZWFtU2luay5yZWFkeSA9IHN0cmVhbVNpbmsuc2lua0NhcGFiaWxpdHkucHJvbWlzZTtcbiAgICB0aGlzLnN0cmVhbVNpbmtzW3N0cmVhbUlkXSA9IHN0cmVhbVNpbms7XG4gICAgbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgIHJlc29sdmUoYWN0aW9uKGRhdGEuZGF0YSwgc3RyZWFtU2luaykpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgc291cmNlTmFtZSxcbiAgICAgICAgdGFyZ2V0TmFtZSxcbiAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLlNUQVJUX0NPTVBMRVRFLFxuICAgICAgICBzdHJlYW1JZCxcbiAgICAgICAgc3VjY2VzczogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgc291cmNlTmFtZSxcbiAgICAgICAgdGFyZ2V0TmFtZSxcbiAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLlNUQVJUX0NPTVBMRVRFLFxuICAgICAgICBzdHJlYW1JZCxcbiAgICAgICAgcmVhc29uOiB3cmFwUmVhc29uKHJlYXNvbilcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgX3Byb2Nlc3NTdHJlYW1NZXNzYWdlKGRhdGEpIHtcbiAgICBjb25zdCBzdHJlYW1JZCA9IGRhdGEuc3RyZWFtSWQsXG4gICAgICAgICAgc291cmNlTmFtZSA9IHRoaXMuc291cmNlTmFtZSxcbiAgICAgICAgICB0YXJnZXROYW1lID0gZGF0YS5zb3VyY2VOYW1lLFxuICAgICAgICAgIGNvbU9iaiA9IHRoaXMuY29tT2JqO1xuICAgIGNvbnN0IHN0cmVhbUNvbnRyb2xsZXIgPSB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXSxcbiAgICAgICAgICBzdHJlYW1TaW5rID0gdGhpcy5zdHJlYW1TaW5rc1tzdHJlYW1JZF07XG5cbiAgICBzd2l0Y2ggKGRhdGEuc3RyZWFtKSB7XG4gICAgICBjYXNlIFN0cmVhbUtpbmQuU1RBUlRfQ09NUExFVEU6XG4gICAgICAgIGlmIChkYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgICBzdHJlYW1Db250cm9sbGVyLnN0YXJ0Q2FsbC5yZXNvbHZlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RyZWFtQ29udHJvbGxlci5zdGFydENhbGwucmVqZWN0KHdyYXBSZWFzb24oZGF0YS5yZWFzb24pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFN0cmVhbUtpbmQuUFVMTF9DT01QTEVURTpcbiAgICAgICAgaWYgKGRhdGEuc3VjY2Vzcykge1xuICAgICAgICAgIHN0cmVhbUNvbnRyb2xsZXIucHVsbENhbGwucmVzb2x2ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0cmVhbUNvbnRyb2xsZXIucHVsbENhbGwucmVqZWN0KHdyYXBSZWFzb24oZGF0YS5yZWFzb24pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFN0cmVhbUtpbmQuUFVMTDpcbiAgICAgICAgaWYgKCFzdHJlYW1TaW5rKSB7XG4gICAgICAgICAgY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIHNvdXJjZU5hbWUsXG4gICAgICAgICAgICB0YXJnZXROYW1lLFxuICAgICAgICAgICAgc3RyZWFtOiBTdHJlYW1LaW5kLlBVTExfQ09NUExFVEUsXG4gICAgICAgICAgICBzdHJlYW1JZCxcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJlYW1TaW5rLmRlc2lyZWRTaXplIDw9IDAgJiYgZGF0YS5kZXNpcmVkU2l6ZSA+IDApIHtcbiAgICAgICAgICBzdHJlYW1TaW5rLnNpbmtDYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0cmVhbVNpbmsuZGVzaXJlZFNpemUgPSBkYXRhLmRlc2lyZWRTaXplO1xuICAgICAgICBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgIHJlc29sdmUoc3RyZWFtU2luay5vblB1bGwgJiYgc3RyZWFtU2luay5vblB1bGwoKSk7XG4gICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbU9iai5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICBzb3VyY2VOYW1lLFxuICAgICAgICAgICAgdGFyZ2V0TmFtZSxcbiAgICAgICAgICAgIHN0cmVhbTogU3RyZWFtS2luZC5QVUxMX0NPTVBMRVRFLFxuICAgICAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgc291cmNlTmFtZSxcbiAgICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgICBzdHJlYW06IFN0cmVhbUtpbmQuUFVMTF9DT01QTEVURSxcbiAgICAgICAgICAgIHN0cmVhbUlkLFxuICAgICAgICAgICAgcmVhc29uOiB3cmFwUmVhc29uKHJlYXNvbilcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFN0cmVhbUtpbmQuRU5RVUVVRTpcbiAgICAgICAgKDAsIF91dGlsLmFzc2VydCkoc3RyZWFtQ29udHJvbGxlciwgXCJlbnF1ZXVlIHNob3VsZCBoYXZlIHN0cmVhbSBjb250cm9sbGVyXCIpO1xuXG4gICAgICAgIGlmIChzdHJlYW1Db250cm9sbGVyLmlzQ2xvc2VkKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBzdHJlYW1Db250cm9sbGVyLmNvbnRyb2xsZXIuZW5xdWV1ZShkYXRhLmNodW5rKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgU3RyZWFtS2luZC5DTE9TRTpcbiAgICAgICAgKDAsIF91dGlsLmFzc2VydCkoc3RyZWFtQ29udHJvbGxlciwgXCJjbG9zZSBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlclwiKTtcblxuICAgICAgICBpZiAoc3RyZWFtQ29udHJvbGxlci5pc0Nsb3NlZCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RyZWFtQ29udHJvbGxlci5pc0Nsb3NlZCA9IHRydWU7XG4gICAgICAgIHN0cmVhbUNvbnRyb2xsZXIuY29udHJvbGxlci5jbG9zZSgpO1xuXG4gICAgICAgIHRoaXMuX2RlbGV0ZVN0cmVhbUNvbnRyb2xsZXIoc3RyZWFtQ29udHJvbGxlciwgc3RyZWFtSWQpO1xuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFN0cmVhbUtpbmQuRVJST1I6XG4gICAgICAgICgwLCBfdXRpbC5hc3NlcnQpKHN0cmVhbUNvbnRyb2xsZXIsIFwiZXJyb3Igc2hvdWxkIGhhdmUgc3RyZWFtIGNvbnRyb2xsZXJcIik7XG4gICAgICAgIHN0cmVhbUNvbnRyb2xsZXIuY29udHJvbGxlci5lcnJvcih3cmFwUmVhc29uKGRhdGEucmVhc29uKSk7XG5cbiAgICAgICAgdGhpcy5fZGVsZXRlU3RyZWFtQ29udHJvbGxlcihzdHJlYW1Db250cm9sbGVyLCBzdHJlYW1JZCk7XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgU3RyZWFtS2luZC5DQU5DRUxfQ09NUExFVEU6XG4gICAgICAgIGlmIChkYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgICBzdHJlYW1Db250cm9sbGVyLmNhbmNlbENhbGwucmVzb2x2ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0cmVhbUNvbnRyb2xsZXIuY2FuY2VsQ2FsbC5yZWplY3Qod3JhcFJlYXNvbihkYXRhLnJlYXNvbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZGVsZXRlU3RyZWFtQ29udHJvbGxlcihzdHJlYW1Db250cm9sbGVyLCBzdHJlYW1JZCk7XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgU3RyZWFtS2luZC5DQU5DRUw6XG4gICAgICAgIGlmICghc3RyZWFtU2luaykge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICByZXNvbHZlKHN0cmVhbVNpbmsub25DYW5jZWwgJiYgc3RyZWFtU2luay5vbkNhbmNlbCh3cmFwUmVhc29uKGRhdGEucmVhc29uKSkpO1xuICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgc291cmNlTmFtZSxcbiAgICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgICBzdHJlYW06IFN0cmVhbUtpbmQuQ0FOQ0VMX0NPTVBMRVRFLFxuICAgICAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgc291cmNlTmFtZSxcbiAgICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgICBzdHJlYW06IFN0cmVhbUtpbmQuQ0FOQ0VMX0NPTVBMRVRFLFxuICAgICAgICAgICAgc3RyZWFtSWQsXG4gICAgICAgICAgICByZWFzb246IHdyYXBSZWFzb24ocmVhc29uKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgc3RyZWFtU2luay5zaW5rQ2FwYWJpbGl0eS5yZWplY3Qod3JhcFJlYXNvbihkYXRhLnJlYXNvbikpO1xuICAgICAgICBzdHJlYW1TaW5rLmlzQ2FuY2VsbGVkID0gdHJ1ZTtcbiAgICAgICAgZGVsZXRlIHRoaXMuc3RyZWFtU2lua3Nbc3RyZWFtSWRdO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBzdHJlYW0gY2FzZVwiKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBfZGVsZXRlU3RyZWFtQ29udHJvbGxlcihzdHJlYW1Db250cm9sbGVyLCBzdHJlYW1JZCkge1xuICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChbc3RyZWFtQ29udHJvbGxlci5zdGFydENhbGwgJiYgc3RyZWFtQ29udHJvbGxlci5zdGFydENhbGwucHJvbWlzZSwgc3RyZWFtQ29udHJvbGxlci5wdWxsQ2FsbCAmJiBzdHJlYW1Db250cm9sbGVyLnB1bGxDYWxsLnByb21pc2UsIHN0cmVhbUNvbnRyb2xsZXIuY2FuY2VsQ2FsbCAmJiBzdHJlYW1Db250cm9sbGVyLmNhbmNlbENhbGwucHJvbWlzZV0pO1xuICAgIGRlbGV0ZSB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3N0cmVhbUlkXTtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5jb21PYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5fb25Db21PYmpPbk1lc3NhZ2UpO1xuICB9XG5cbn1cblxuZXhwb3J0cy5NZXNzYWdlSGFuZGxlciA9IE1lc3NhZ2VIYW5kbGVyO1xuXG4vKioqLyB9KSxcbi8qIDEwMCAqL1xuLyoqKi8gKChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSwgZXhwb3J0cywgX193X3BkZmpzX3JlcXVpcmVfXykgPT4ge1xuXG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCAoe1xuICB2YWx1ZTogdHJ1ZVxufSkpO1xuZXhwb3J0cy5QREZXb3JrZXJTdHJlYW0gPSB2b2lkIDA7XG5cbnZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMik7XG5cbmNsYXNzIFBERldvcmtlclN0cmVhbSB7XG4gIGNvbnN0cnVjdG9yKG1zZ0hhbmRsZXIpIHtcbiAgICB0aGlzLl9tc2dIYW5kbGVyID0gbXNnSGFuZGxlcjtcbiAgICB0aGlzLl9jb250ZW50TGVuZ3RoID0gbnVsbDtcbiAgICB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciA9IG51bGw7XG4gICAgdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycyA9IFtdO1xuICB9XG5cbiAgZ2V0RnVsbFJlYWRlcigpIHtcbiAgICAoMCwgX3V0aWwuYXNzZXJ0KSghdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIsIFwiUERGV29ya2VyU3RyZWFtLmdldEZ1bGxSZWFkZXIgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UuXCIpO1xuICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyID0gbmV3IFBERldvcmtlclN0cmVhbVJlYWRlcih0aGlzLl9tc2dIYW5kbGVyKTtcbiAgICByZXR1cm4gdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI7XG4gIH1cblxuICBnZXRSYW5nZVJlYWRlcihiZWdpbiwgZW5kKSB7XG4gICAgY29uc3QgcmVhZGVyID0gbmV3IFBERldvcmtlclN0cmVhbVJhbmdlUmVhZGVyKGJlZ2luLCBlbmQsIHRoaXMuX21zZ0hhbmRsZXIpO1xuXG4gICAgdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5wdXNoKHJlYWRlcik7XG5cbiAgICByZXR1cm4gcmVhZGVyO1xuICB9XG5cbiAgY2FuY2VsQWxsUmVxdWVzdHMocmVhc29uKSB7XG4gICAgaWYgKHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyKSB7XG4gICAgICB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlci5jYW5jZWwocmVhc29uKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHJlYWRlciBvZiB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnNsaWNlKDApKSB7XG4gICAgICByZWFkZXIuY2FuY2VsKHJlYXNvbik7XG4gICAgfVxuICB9XG5cbn1cblxuZXhwb3J0cy5QREZXb3JrZXJTdHJlYW0gPSBQREZXb3JrZXJTdHJlYW07XG5cbmNsYXNzIFBERldvcmtlclN0cmVhbVJlYWRlciB7XG4gIGNvbnN0cnVjdG9yKG1zZ0hhbmRsZXIpIHtcbiAgICB0aGlzLl9tc2dIYW5kbGVyID0gbXNnSGFuZGxlcjtcbiAgICB0aGlzLm9uUHJvZ3Jlc3MgPSBudWxsO1xuICAgIHRoaXMuX2NvbnRlbnRMZW5ndGggPSBudWxsO1xuICAgIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgcmVhZGFibGVTdHJlYW0gPSB0aGlzLl9tc2dIYW5kbGVyLnNlbmRXaXRoU3RyZWFtKFwiR2V0UmVhZGVyXCIpO1xuXG4gICAgdGhpcy5fcmVhZGVyID0gcmVhZGFibGVTdHJlYW0uZ2V0UmVhZGVyKCk7XG4gICAgdGhpcy5faGVhZGVyc1JlYWR5ID0gdGhpcy5fbXNnSGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJSZWFkZXJIZWFkZXJzUmVhZHlcIikudGhlbihkYXRhID0+IHtcbiAgICAgIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkID0gZGF0YS5pc1N0cmVhbWluZ1N1cHBvcnRlZDtcbiAgICAgIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQgPSBkYXRhLmlzUmFuZ2VTdXBwb3J0ZWQ7XG4gICAgICB0aGlzLl9jb250ZW50TGVuZ3RoID0gZGF0YS5jb250ZW50TGVuZ3RoO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGhlYWRlcnNSZWFkeSgpIHtcbiAgICByZXR1cm4gdGhpcy5faGVhZGVyc1JlYWR5O1xuICB9XG5cbiAgZ2V0IGNvbnRlbnRMZW5ndGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRlbnRMZW5ndGg7XG4gIH1cblxuICBnZXQgaXNTdHJlYW1pbmdTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkO1xuICB9XG5cbiAgZ2V0IGlzUmFuZ2VTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQ7XG4gIH1cblxuICBhc3luYyByZWFkKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHZhbHVlLFxuICAgICAgZG9uZVxuICAgIH0gPSBhd2FpdCB0aGlzLl9yZWFkZXIucmVhZCgpO1xuXG4gICAgaWYgKGRvbmUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgIGRvbmU6IHRydWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiB2YWx1ZS5idWZmZXIsXG4gICAgICBkb25lOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBjYW5jZWwocmVhc29uKSB7XG4gICAgdGhpcy5fcmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICB9XG5cbn1cblxuY2xhc3MgUERGV29ya2VyU3RyZWFtUmFuZ2VSZWFkZXIge1xuICBjb25zdHJ1Y3RvcihiZWdpbiwgZW5kLCBtc2dIYW5kbGVyKSB7XG4gICAgdGhpcy5fbXNnSGFuZGxlciA9IG1zZ0hhbmRsZXI7XG4gICAgdGhpcy5vblByb2dyZXNzID0gbnVsbDtcblxuICAgIGNvbnN0IHJlYWRhYmxlU3RyZWFtID0gdGhpcy5fbXNnSGFuZGxlci5zZW5kV2l0aFN0cmVhbShcIkdldFJhbmdlUmVhZGVyXCIsIHtcbiAgICAgIGJlZ2luLFxuICAgICAgZW5kXG4gICAgfSk7XG5cbiAgICB0aGlzLl9yZWFkZXIgPSByZWFkYWJsZVN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgfVxuXG4gIGdldCBpc1N0cmVhbWluZ1N1cHBvcnRlZCgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBhc3luYyByZWFkKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHZhbHVlLFxuICAgICAgZG9uZVxuICAgIH0gPSBhd2FpdCB0aGlzLl9yZWFkZXIucmVhZCgpO1xuXG4gICAgaWYgKGRvbmUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgIGRvbmU6IHRydWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiB2YWx1ZS5idWZmZXIsXG4gICAgICBkb25lOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBjYW5jZWwocmVhc29uKSB7XG4gICAgdGhpcy5fcmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICB9XG5cbn1cblxuLyoqKi8gfSlcbi8qKioqKiovIFx0XSk7XG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqKioqKi8gXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4vKioqKioqLyBcdHZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4vKioqKioqLyBcdGZ1bmN0aW9uIF9fd19wZGZqc19yZXF1aXJlX18obW9kdWxlSWQpIHtcbi8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbi8qKioqKiovIFx0XHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcbi8qKioqKiovIFx0XHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcbi8qKioqKiovIFx0XHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0XHR9XG4vKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbi8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcbi8qKioqKiovIFx0XHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcbi8qKioqKiovIFx0XHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG4vKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuLyoqKioqKi8gXHRcdH07XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuLyoqKioqKi8gXHRcdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pO1xuLyoqKioqKi8gXHRcbi8qKioqKiovIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuLyoqKioqKi8gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbi8qKioqKiovIFx0fVxuLyoqKioqKi8gXHRcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyAqL1xuLyoqKioqKi8gXHQoKCkgPT4ge1xuLyoqKioqKi8gXHRcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbi8qKioqKiovIFx0XHRfX3dfcGRmanNfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuLyoqKioqKi8gXHRcdFx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuLyoqKioqKi8gXHRcdFx0XHRpZihfX3dfcGRmanNfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193X3BkZmpzX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcbi8qKioqKiovIFx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuLyoqKioqKi8gXHRcdFx0XHR9XG4vKioqKioqLyBcdFx0XHR9XG4vKioqKioqLyBcdFx0fTtcbi8qKioqKiovIFx0fSkoKTtcbi8qKioqKiovIFx0XG4vKioqKioqLyBcdC8qIHdlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQgKi9cbi8qKioqKiovIFx0KCgpID0+IHtcbi8qKioqKiovIFx0XHRfX3dfcGRmanNfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpXG4vKioqKioqLyBcdH0pKCk7XG4vKioqKioqLyBcdFxuLyoqKioqKi8gXHQvKiB3ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0ICovXG4vKioqKioqLyBcdCgoKSA9PiB7XG4vKioqKioqLyBcdFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuLyoqKioqKi8gXHRcdF9fd19wZGZqc19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG4vKioqKioqLyBcdFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbi8qKioqKiovIFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4vKioqKioqLyBcdFx0XHR9XG4vKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyoqKioqKi8gXHRcdH07XG4vKioqKioqLyBcdH0pKCk7XG4vKioqKioqLyBcdFxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0ge307XG4vLyBUaGlzIGVudHJ5IG5lZWQgdG8gYmUgd3JhcHBlZCBpbiBhbiBJSUZFIGJlY2F1c2UgaXQgbmVlZCB0byBiZSBpc29sYXRlZCBhZ2FpbnN0IG90aGVyIG1vZHVsZXMgaW4gdGhlIGNodW5rLlxuKCgpID0+IHtcbnZhciBleHBvcnRzID0gX193ZWJwYWNrX2V4cG9ydHNfXztcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsICh7XG4gIHZhbHVlOiB0cnVlXG59KSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJXb3JrZXJNZXNzYWdlSGFuZGxlclwiLCAoe1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3dvcmtlci5Xb3JrZXJNZXNzYWdlSGFuZGxlcjtcbiAgfVxufSkpO1xuXG52YXIgX3dvcmtlciA9IF9fd19wZGZqc19yZXF1aXJlX18oMSk7XG5cbmNvbnN0IHBkZmpzVmVyc2lvbiA9ICcyLjEyLjMxMyc7XG5jb25zdCBwZGZqc0J1aWxkID0gJ2EyYWU1NmYzOSc7XG59KSgpO1xuXG4vKioqKioqLyBcdHJldHVybiBfX3dlYnBhY2tfZXhwb3J0c19fO1xuLyoqKioqKi8gfSkoKVxuO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wZGYud29ya2VyLmpzLm1hcCIsIi8qIENvcHlyaWdodCAyMDIxIE1vemlsbGEgRm91bmRhdGlvblxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4odHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIlxuICA/IHdpbmRvd1xuICA6IHt9XG4pLnBkZmpzV29ya2VyID0gcmVxdWlyZShcIi4vcGRmLndvcmtlci5qc1wiKTtcbiIsImltcG9ydCB7IFBsdWdpbiB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHsgQmV0dGVyUGRmU2V0dGluZ3MsIEJldHRlclBkZlNldHRpbmdzVGFiIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcbmltcG9ydCAqIGFzIHBkZmpzIGZyb20gXCJwZGZqcy1kaXN0XCI7XG5pbXBvcnQgKiBhcyB3b3JrZXIgZnJvbSBcInBkZmpzLWRpc3QvYnVpbGQvcGRmLndvcmtlci5lbnRyeS5qc1wiO1xuXG5pbnRlcmZhY2UgUGRmTm9kZVBhcmFtZXRlcnMge1xuXHRyYW5nZTogQXJyYXk8bnVtYmVyPjtcblx0dXJsOiBzdHJpbmc7XG5cdGxpbms6IGJvb2xlYW47XG5cdHBhZ2U6IG51bWJlciB8IEFycmF5PG51bWJlciB8IEFycmF5PG51bWJlcj4+O1xuXHRzY2FsZTogbnVtYmVyO1xuXHRmaXQ6IGJvb2xlYW4sXG5cdHJvdGF0aW9uOiBudW1iZXI7XG5cdHJlY3Q6IEFycmF5PG51bWJlcj47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJldHRlclBERlBsdWdpbiBleHRlbmRzIFBsdWdpbiB7XG5cdHNldHRpbmdzOiBCZXR0ZXJQZGZTZXR0aW5ncztcblxuXHRhc3luYyBvbmxvYWQoKSB7XG5cdFx0Y29uc29sZS5sb2coXCJCZXR0ZXIgUERGIGxvYWRpbmcuLi5cIik7XG5cblx0XHR0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbihuZXcgQmV0dGVyUGRmU2V0dGluZ3MoKSwgYXdhaXQgdGhpcy5sb2FkRGF0YSgpKTtcblx0XHR0aGlzLmFkZFNldHRpbmdUYWIobmV3IEJldHRlclBkZlNldHRpbmdzVGFiKHRoaXMuYXBwLCB0aGlzKSk7XG5cblx0XHRwZGZqcy5HbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclNyYyA9IHdvcmtlcjtcblxuXHRcdHRoaXMucmVnaXN0ZXJNYXJrZG93bkNvZGVCbG9ja1Byb2Nlc3NvcihcInBkZlwiLCBhc3luYyAoc3JjLCBlbCkgPT4ge1xuXG5cdFx0XHQvLyBHZXQgUGFyYW1ldGVyc1xuXHRcdFx0bGV0IHBhcmFtZXRlcnM6IFBkZk5vZGVQYXJhbWV0ZXJzID0gbnVsbDtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHBhcmFtZXRlcnMgPSB0aGlzLnJlYWRQYXJhbWV0ZXJzKHNyYyk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGVsLmNyZWF0ZUVsKFwiaDJcIiwgeyB0ZXh0OiBcIlBERiBQYXJhbWV0ZXJzIGludmFsaWQ6IFwiICsgZS5tZXNzYWdlIH0pO1xuXHRcdFx0fVxuXG5cdFx0XHQvL0NyZWF0ZSBQREYgTm9kZVxuXHRcdFx0aWYgKHBhcmFtZXRlcnMgIT09IG51bGwpIHtcblx0XHRcdFx0dHJ5IHtcblxuXHRcdFx0XHRcdC8vUmVhZCBEb2N1bWVudFxuXHRcdFx0XHRcdGNvbnN0IGFycmF5QnVmZmVyID0gYXdhaXQgdGhpcy5hcHAudmF1bHQuYWRhcHRlci5yZWFkQmluYXJ5KHBhcmFtZXRlcnMudXJsKTtcblx0XHRcdFx0XHRjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShhcnJheUJ1ZmZlcik7XG5cdFx0XHRcdFx0Y29uc3QgZG9jdW1lbnQgPSBhd2FpdCBwZGZqcy5nZXREb2N1bWVudChidWZmZXIpLnByb21pc2U7XG5cblx0XHRcdFx0XHQvL1JlYWQgcGFnZXNcblx0XHRcdFx0XHRmb3IgKGNvbnN0IHBhZ2VOdW1iZXIgb2YgPG51bWJlcltdPnBhcmFtZXRlcnMucGFnZSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgcGFnZSA9IGF3YWl0IGRvY3VtZW50LmdldFBhZ2UocGFnZU51bWJlcik7XG5cdFx0XHRcdFx0XHRsZXQgaG9zdCA9IGVsO1xuXG5cdFx0XHRcdFx0XHQvLyBDcmVhdGUgaHlwZXJsaW5rIGZvciBQYWdlXG5cdFx0XHRcdFx0XHRpZiAocGFyYW1ldGVycy5saW5rKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGhyZWYgPSBlbC5jcmVhdGVFbChcImFcIik7XG5cdFx0XHRcdFx0XHRcdGhyZWYuaHJlZiA9IHBhcmFtZXRlcnMudXJsICsgXCIjcGFnZT1cIiArIHBhZ2VOdW1iZXI7XG5cdFx0XHRcdFx0XHRcdGhyZWYuY2xhc3NOYW1lID0gXCJpbnRlcm5hbC1saW5rXCI7XG5cblx0XHRcdFx0XHRcdFx0aG9zdCA9IGhyZWY7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIEdldCBWaWV3cG9ydFxuXHRcdFx0XHRcdFx0Y29uc3Qgb2Zmc2V0WCA9IE1hdGguZmxvb3IoXG5cdFx0XHRcdFx0XHRcdHBhcmFtZXRlcnMucmVjdFswXSAqIC0xICogcGFyYW1ldGVycy5zY2FsZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdGNvbnN0IG9mZnNldFkgPSBNYXRoLmZsb29yKFxuXHRcdFx0XHRcdFx0XHRwYXJhbWV0ZXJzLnJlY3RbMV0gKiAtMSAqIHBhcmFtZXRlcnMuc2NhbGVcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdGNvbnN0IHZpZXdwb3J0ID0gcGFnZS5nZXRWaWV3cG9ydCh7XG5cdFx0XHRcdFx0XHRcdHNjYWxlOiBwYXJhbWV0ZXJzLnNjYWxlLFxuXHRcdFx0XHRcdFx0XHRyb3RhdGlvbjogcGFyYW1ldGVycy5yb3RhdGlvbixcblx0XHRcdFx0XHRcdFx0b2Zmc2V0WDogb2Zmc2V0WCxcblx0XHRcdFx0XHRcdFx0b2Zmc2V0WTogb2Zmc2V0WSxcblx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHQvLyBSZW5kZXIgQ2FudmFzXG5cdFx0XHRcdFx0XHRjb25zdCBjYW52YXMgPSBob3N0LmNyZWF0ZUVsKFwiY2FudmFzXCIpO1xuXHRcdFx0XHRcdFx0aWYgKHBhcmFtZXRlcnMuZml0KSB7XG5cdFx0XHRcdFx0XHRcdGNhbnZhcy5zdHlsZS53aWR0aCA9IFwiMTAwJVwiO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcblxuXHRcdFx0XHRcdFx0aWYgKHBhcmFtZXRlcnMucmVjdFsyXSA8IDEpIHtcblx0XHRcdFx0XHRcdFx0Y2FudmFzLmhlaWdodCA9IHZpZXdwb3J0LmhlaWdodDtcblx0XHRcdFx0XHRcdFx0Y2FudmFzLndpZHRoID0gdmlld3BvcnQud2lkdGg7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjYW52YXMuaGVpZ2h0ID0gTWF0aC5mbG9vcihwYXJhbWV0ZXJzLnJlY3RbMl0gKiBwYXJhbWV0ZXJzLnNjYWxlKTtcblx0XHRcdFx0XHRcdFx0Y2FudmFzLndpZHRoID0gTWF0aC5mbG9vcihwYXJhbWV0ZXJzLnJlY3RbM10gKiBwYXJhbWV0ZXJzLnNjYWxlKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Y29uc3QgcmVuZGVyQ29udGV4dCA9IHtcblx0XHRcdFx0XHRcdFx0Y2FudmFzQ29udGV4dDogY29udGV4dCxcblx0XHRcdFx0XHRcdFx0dmlld3BvcnQ6IHZpZXdwb3J0LFxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdGF3YWl0IHBhZ2UucmVuZGVyKHJlbmRlckNvbnRleHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0XHRlbC5jcmVhdGVFbChcImgyXCIsIHsgdGV4dDogZXJyb3IgfSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgcmVhZFBhcmFtZXRlcnMoanNvblN0cmluZzogc3RyaW5nKSB7XG5cdFx0Ly8gXCJ1cmxcIiA6IFtbZmlsZS5wZGZdXSBpcyBhbiBpbnZhbGlkIGpzb24gc2luY2UgaXQgbWlzc2VzIHF1b3RhdGlvbiBtYXJrcyBpbiB2YWx1ZVxuXHRcdGlmIChqc29uU3RyaW5nLmNvbnRhaW5zKFwiW1tcIikgJiYgIWpzb25TdHJpbmcuY29udGFpbnMoJ1wiW1snKSkge1xuXHRcdFx0anNvblN0cmluZyA9IGpzb25TdHJpbmcucmVwbGFjZShcIltbXCIsICdcIltbJyk7XG5cdFx0XHRqc29uU3RyaW5nID0ganNvblN0cmluZy5yZXBsYWNlKFwiXV1cIiwgJ11dXCInKTtcblx0XHR9XG5cblx0XHRjb25zdCBwYXJhbWV0ZXJzOiBQZGZOb2RlUGFyYW1ldGVycyA9IEpTT04ucGFyc2UoanNvblN0cmluZyk7XG5cblx0XHQvL1RyYW5zZm9ybSBpbnRlcm5hbCBMaW5rIHRvIGV4dGVybmFsXG5cdFx0aWYgKHBhcmFtZXRlcnMudXJsLnN0YXJ0c1dpdGgoXCJbW1wiKSkge1xuXHRcdFx0cGFyYW1ldGVycy51cmwgPSBwYXJhbWV0ZXJzLnVybC5zdWJzdHIoMiwgcGFyYW1ldGVycy51cmwubGVuZ3RoIC0gNCk7XG5cdFx0XHRwYXJhbWV0ZXJzLnVybCA9IHRoaXMuYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0Rmlyc3RMaW5rcGF0aERlc3QoXG5cdFx0XHRcdHBhcmFtZXRlcnMudXJsLFxuXHRcdFx0XHRcIlwiXG5cdFx0XHQpLnBhdGg7XG5cdFx0fVxuXG5cdFx0aWYgKHBhcmFtZXRlcnMubGluayA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRwYXJhbWV0ZXJzLmxpbmsgPSB0aGlzLnNldHRpbmdzLmxpbmtfYnlfZGVmYXVsdDtcblx0XHR9XG5cblx0XHQvL0NvbnZlcnQgUmFuZ2UgKGlmIHByZXNlbnQpIGFuZCBQYWdlIHRvIEFycmF5PFBhZ2U+XG5cdFx0aWYgKHBhcmFtZXRlcnMucmFuZ2UgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyYW1ldGVycy5wYWdlID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogcGFyYW1ldGVycy5yYW5nZVsxXSAtIHBhcmFtZXRlcnMucmFuZ2VbMF0gKyAxIH0sIChfLCBpKSA9PiBwYXJhbWV0ZXJzLnJhbmdlWzBdICsgaSk7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiBwYXJhbWV0ZXJzLnBhZ2UgPT09IFwibnVtYmVyXCIpIHtcblx0XHRcdHBhcmFtZXRlcnMucGFnZSA9IFtwYXJhbWV0ZXJzLnBhZ2VdO1xuXHRcdH1cblx0XHRpZiAocGFyYW1ldGVycy5wYWdlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcmFtZXRlcnMucGFnZSA9IFsxXTtcblx0XHR9XG5cblx0XHQvLyBGbGF0dGVuIHJhbmdlc1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgcGFyYW1ldGVycy5wYWdlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheShwYXJhbWV0ZXJzLnBhZ2VbaV0pKSB7XG5cdFx0XHRcdGNvbnN0IHJhbmdlID0gcGFyYW1ldGVycy5wYWdlLnNwbGljZShpLCAxKVswXSBhcyBBcnJheTxudW1iZXI+O1xuXHRcdFx0XHRmb3IgKGxldCBqID0gcmFuZ2VbMF07IGogPD0gcmFuZ2VbMV07IGorKykge1xuXHRcdFx0XHRcdHBhcmFtZXRlcnMucGFnZS5zcGxpY2UoaSwgMCwgaik7XG5cdFx0XHRcdFx0aSArPSAxO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0cGFyYW1ldGVycy5zY2FsZSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRwYXJhbWV0ZXJzLnNjYWxlIDwgMC4xIHx8XG5cdFx0XHRwYXJhbWV0ZXJzLnNjYWxlID4gMTAuMFxuXHRcdCkge1xuXHRcdFx0cGFyYW1ldGVycy5zY2FsZSA9IDEuMDtcblx0XHR9XG5cblx0XHRpZiAocGFyYW1ldGVycy5maXQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyYW1ldGVycy5maXQgPSB0aGlzLnNldHRpbmdzLmZpdF9ieV9kZWZhdWx0O1xuXHRcdH1cblxuXHRcdGlmIChwYXJhbWV0ZXJzLnJvdGF0aW9uID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHBhcmFtZXRlcnMucm90YXRpb24gPSAwO1xuXHRcdH1cblxuXHRcdGlmIChwYXJhbWV0ZXJzLnJlY3QgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cGFyYW1ldGVycy5yZWN0ID0gWzAsIDAsIDAsIDBdO1xuXHRcdH1cblx0XHRyZXR1cm4gcGFyYW1ldGVycztcblx0fVxuXG5cdG9udW5sb2FkKCkge1xuXHRcdGNvbnNvbGUubG9nKFwidW5sb2FkaW5nIEJldHRlciBQREYgcGx1Z2luLi4uXCIpO1xuXHR9XG59XG4iXSwibmFtZXMiOlsiU2V0dGluZyIsIlBsdWdpblNldHRpbmdUYWIiLCJ0aGlzIiwicmVxdWlyZSIsInJlcXVpcmUkJDAiLCJyZXF1aXJlJCQxIiwicmVxdWlyZSQkMiIsInJlcXVpcmUkJDMiLCJyZXF1aXJlJCQ0IiwicGRmanMuR2xvYmFsV29ya2VyT3B0aW9ucyIsInBkZmpzLmdldERvY3VtZW50IiwiUGx1Z2luIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGFBQWEsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDbkMsSUFBSSxhQUFhLEdBQUcsTUFBTSxDQUFDLGNBQWM7QUFDekMsU0FBUyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsWUFBWSxLQUFLLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3BGLFFBQVEsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzFHLElBQUksT0FBTyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9CLENBQUMsQ0FBQztBQUNGO0FBQ08sU0FBUyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNoQyxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssVUFBVSxJQUFJLENBQUMsS0FBSyxJQUFJO0FBQzdDLFFBQVEsTUFBTSxJQUFJLFNBQVMsQ0FBQyxzQkFBc0IsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsK0JBQStCLENBQUMsQ0FBQztBQUNsRyxJQUFJLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDeEIsSUFBSSxTQUFTLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDM0MsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsS0FBSyxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3pGLENBQUM7QUF1Q0Q7QUFDTyxTQUFTLFNBQVMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUU7QUFDN0QsSUFBSSxTQUFTLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxPQUFPLEtBQUssWUFBWSxDQUFDLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLFVBQVUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7QUFDaEgsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxVQUFVLE9BQU8sRUFBRSxNQUFNLEVBQUU7QUFDL0QsUUFBUSxTQUFTLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO0FBQ25HLFFBQVEsU0FBUyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO0FBQ3RHLFFBQVEsU0FBUyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFO0FBQ3RILFFBQVEsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLFVBQVUsSUFBSSxFQUFFLENBQUMsRUFBRSxJ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QUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxTQUFTO0FBQ2pFLGdCQUFnQjtBQUNoQixvQkFBb0IsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRTtBQUNoSSxvQkFBb0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUMxRyxvQkFBb0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQ3pGLG9CQUFvQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENB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QUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUMzQixJQUFJLE1BQU0sT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbEQsSUFBSSxNQUFNLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xELElBQUksSUFBSSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUM7QUFDM0MsSUFBSSxRQUFRLElBQUksR0FBRyxDQUFDO0FBQ3BCO0FBQ0EsSUFBSSxJQUFJLFFBQVEsR0FBRyxDQUFDLEVBQUU7QUFDdEIsTUFBTSxRQUFRLElBQUksR0FBRyxDQUFDO0FBQ3RCLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxRQUFRO0FBQ3BCLE1BQU0sS0FBSyxHQUFHO0FBQ2QsUUFBUSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDckIsUUFBUSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLFFBQVEsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNwQixRQUFRLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDcEIsUUFBUSxNQUFNO0FBQ2Q7QUFDQSxNQUFNLEtBQUssRUFBRTtBQUNiLFFBQVEsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNwQixRQUFRLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDcEIsUUFBUSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLFFBQVEsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNwQixRQUFRLE1BQU07QUFDZDtBQUNBLE1BQU0sS0FBSyxHQUFHO0FBQ2QsUUFBUSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLFFBQVEsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLFFBQVEsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLFFBQVEsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNwQixR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QztBQUN2QyxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUMxQyxJQUFJLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDeEMsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7QUFDOUMsSUFBSSxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzFDLElBQUksTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksTUFBTSxJQUFJLEVBQUUsR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3RELElBQUksSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMxQyxJQUFJLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLE1BQU0sSUFBSSxFQUFFLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN0RCxJQUFJLE1BQU0scUJBQXFCLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQztBQUNwRCxJQUFJLElBQUksVUFBVSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDOUMsSUFBSSxVQUFVLEdBQUcsVUFBVSxJQUFJLENBQUMsSUFBSSxVQUFVLElBQUksRUFBRSxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFDdEUsSUFBSSxJQUFJLFlBQVksR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyRCxJQUFJLFlBQVksR0FBRyxZQUFZLElBQUksQ0FBQyxJQUFJLFlBQVksSUFBSSxFQUFFLEdBQUcsWUFBWSxHQUFHLENBQUMsQ0FBQztBQUM5RTtBQUNBLElBQUksSUFBSSxxQkFBcUIsS0FBSyxHQUFHLEVBQUU7QUFDdkMsTUFBTSxJQUFJLElBQUksVUFBVSxDQUFDO0FBQ3pCLE1BQU0sTUFBTSxJQUFJLFlBQVksQ0FBQztBQUM3QixLQUFLLE1BQU0sSUFBSSxxQkFBcUIsS0FBSyxHQUFHLEVBQUU7QUFDOUMsTUFBTSxJQUFJLElBQUksVUFBVSxDQUFDO0FBQ3pCLE1BQU0sTUFBTSxJQUFJLFlBQVksQ0FBQztBQUM3QixLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDdEUsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsT0FBTyxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7QUFDdEM7QUFDQSxTQUFTLGtCQUFrQixDQUFDLE9BQU8sRUFBRTtBQUNyQyxFQUFFLEtBQUssR0FBRyxDQUFDO0FBQ1gsRUFBRSxRQUFRLEdBQUcsQ0FBQztBQUNkLENBQUMsRUFBRTtBQUNILEVBQUUsTUFBTTtBQUNSLElBQUksS0FBSztBQUNULElBQUksTUFBTTtBQUNWLEdBQUcsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztBQUMvQixFQUFFLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDNUQsRUFBRSxPQUFPLElBQUksWUFBWSxDQUFDO0FBQzFCLElBQUksT0FBTztBQUNYLElBQUksS0FBSztBQUNULElBQUksUUFBUTtBQUNaLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUNEO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTyxDQUFDLHVCQUF1QixFQUFFLE9BQU8sRUFBRSxtQkFBbUIsS0FBSztBQUNsRTtBQUNBO0FBQ0E7QUFDQSxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxZQUFZLEdBQUc7QUFDOUMsRUFBRSxLQUFLLEVBQUUsSUFBSTtBQUNiLENBQUMsRUFBRSxDQUFDO0FBQ0osT0FBTyxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsR0FBRyxPQUFPLENBQUMsMkJBQTJCLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsR0FBRyxPQUFPLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsR0FBRyxPQUFPLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsR0FBRyxPQUFPLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsR0FBRyxPQUFPLENBQUMscUJBQXFCLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsR0FBRyxPQUFPLENBQUMsbUJBQW1CLEdBQUcsT0FBTyxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsR0FBRyxPQUFPLENBQUMscUJBQXFCLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixHQUFHLE9BQU8sQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyx5QkFBeUIsR0FBRyxPQUFPLENBQUMseUJBQXlCLEdBQUcsT0FBTyxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUNwL0IsT0FBTyxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7QUFDMUMsT0FBTyxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7QUFDdEMsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDeEIsT0FBTyxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7QUFDdEMsT0FBTyxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7QUFDMUMsT0FBTyxDQUFDLHVCQUF1QixHQUFHLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sQ0FBQyxzQkFBc0IsR0FBRyxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztBQUNwQyxPQUFPLENBQUMsbUJBQW1CLEdBQUcsbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3BCLE9BQU8sQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0FBQ3RDLE9BQU8sQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0FBQ3BDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQzFCLE9BQU8sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3hCLE9BQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3RCLE9BQU8sQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0FBQ3BDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0FBQzVCLE9BQU8sQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0FBQ3RDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQ2hDLE9BQU8sQ0FBQyxvQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7QUFDOUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDeEIsT0FBTyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7QUFDNUIsT0FBTyxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7QUFDdEMsT0FBTyxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sQ0FBQyxxQkFBcUIsR0FBRyxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7QUFDbEMsT0FBTyxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3BCO0FBQ0EsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkI7QUFDQSxNQUFNLGVBQWUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0MsT0FBTyxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7QUFDMUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDeEQsT0FBTyxDQUFDLG9CQUFvQixHQUFHLG9CQUFvQixDQUFDO0FBQ3BELE1BQU0sbUJBQW1CLEdBQUc7QUFDNUIsRUFBRSxHQUFHLEVBQUUsSUFBSTtBQUNYLEVBQUUsT0FBTyxFQUFFLElBQUk7QUFDZixFQUFFLEtBQUssRUFBRSxJQUFJO0FBQ2IsRUFBRSxpQkFBaUIsRUFBRSxJQUFJO0FBQ3pCLEVBQUUsbUJBQW1CLEVBQUUsSUFBSTtBQUMzQixFQUFFLG1CQUFtQixFQUFFLElBQUk7QUFDM0IsRUFBRSxNQUFNLEVBQUUsS0FBSztBQUNmLENBQUMsQ0FBQztBQUNGLE9BQU8sQ0FBQyxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQztBQUNsRCxNQUFNLGNBQWMsR0FBRztBQUN2QixFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQ1osRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUNYLEVBQUUsWUFBWSxFQUFFLENBQUM7QUFDakIsRUFBRSxjQUFjLEVBQUUsQ0FBQztBQUNuQixDQUFDLENBQUM7QUFDRixPQUFPLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztBQUN4QyxNQUFNLGNBQWMsR0FBRztBQUN2QixFQUFFLEtBQUssRUFBRSxJQUFJO0FBQ2IsRUFBRSxlQUFlLEVBQUUsSUFBSTtBQUN2QixFQUFFLElBQUksRUFBRSxJQUFJO0FBQ1osRUFBRSxrQkFBa0IsRUFBRSxJQUFJO0FBQzFCLEVBQUUsc0JBQXNCLEVBQUUsS0FBSztBQUMvQixFQUFFLHNCQUFzQixFQUFFLEtBQUs7QUFDL0IsRUFBRSxRQUFRLEVBQUUsS0FBSztBQUNqQixFQUFFLGtCQUFrQixFQUFFLEtBQUs7QUFDM0IsQ0FBQyxDQUFDO0FBQ0YsT0FBTyxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7QUFDeEMsTUFBTSxpQkFBaUIsR0FBRztBQUMxQixFQUFFLElBQUksRUFBRSxDQUFDO0FBQ1QsRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUNYLEVBQUUsV0FBVyxFQUFFLENBQUM7QUFDaEIsRUFBRSxTQUFTLEVBQUUsQ0FBQztBQUNkLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztBQUNyQixFQUFFLGtCQUFrQixFQUFFLENBQUM7QUFDdkIsRUFBRSx1QkFBdUIsRUFBRSxDQUFDO0FBQzVCLEVBQUUsV0FBVyxFQUFFLENBQUM7QUFDaEIsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO0FBQ3JCLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztBQUNyQixDQUFDLENBQUM7QUFDRixPQUFPLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7QUFDOUMsTUFBTSxTQUFTLEdBQUc7QUFDbEIsRUFBRSxjQUFjLEVBQUUsQ0FBQztBQUNuQixFQUFFLFNBQVMsRUFBRSxDQUFDO0FBQ2QsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsQ0FBQztBQUNGLE9BQU8sQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0FBQzlCLE1BQU0sY0FBYyxHQUFHO0FBQ3ZCLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDVCxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ1QsRUFBRSxRQUFRLEVBQUUsQ0FBQztBQUNiLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDVCxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQ1gsRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUNYLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDWixFQUFFLFFBQVEsRUFBRSxDQUFDO0FBQ2IsRUFBRSxTQUFTLEVBQUUsQ0FBQztBQUNkLEVBQUUsU0FBUyxFQUFFLEVBQUU7QUFDZixFQUFFLFFBQVEsRUFBRSxFQUFFO0FBQ2QsRUFBRSxTQUFTLEVBQUUsRUFBRTtBQUNmLEVBQUUsS0FBSyxFQUFFLEVBQUU7QUFDWCxFQUFFLEtBQUssRUFBRSxFQUFFO0FBQ1gsRUFBRSxHQUFHLEVBQUUsRUFBRTtBQUNULEVBQUUsS0FBSyxFQUFFLEVBQUU7QUFDWCxFQUFFLGNBQWMsRUFBRSxFQUFFO0FBQ3BCLEVBQUUsS0FBSyxFQUFFLEVBQUU7QUFDWCxFQUFFLEtBQUssRUFBRSxFQUFFO0FBQ1gsRUFBRSxNQUFNLEVBQUUsRUFBRTtBQUNaLEVBQUUsTUFBTSxFQUFFLEVBQUU7QUFDWixFQUFFLFdBQVcsRUFBRSxFQUFFO0FBQ2pCLEVBQUUsT0FBTyxFQUFFLEVBQUU7QUFDYixFQUFFLFNBQVMsRUFBRSxFQUFFO0FBQ2YsRUFBRSxNQUFNLEVBQUUsRUFBRTtBQUNaLEVBQUUsTUFBTSxFQUFFLEVBQUU7QUFDWixDQUFDLENBQUM7QUFDRixPQUFPLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztBQUN4QyxNQUFNLHdCQUF3QixHQUFHO0FBQ2pDLEVBQUUsTUFBTSxFQUFFLFFBQVE7QUFDbEIsRUFBRSxNQUFNLEVBQUUsUUFBUTtBQUNsQixDQUFDLENBQUM7QUFDRixPQUFPLENBQUMsd0JBQXdCLEdBQUcsd0JBQXdCLENBQUM7QUFDNUQsTUFBTSxxQkFBcUIsR0FBRztBQUM5QixFQUFFLE1BQU0sRUFBRSxRQUFRO0FBQ2xCLEVBQUUsUUFBUSxFQUFFLFVBQVU7QUFDdEIsQ0FBQyxDQUFDO0FBQ0YsT0FBTyxDQUFDLHFCQUFxQixHQUFHLHFCQUFxQixDQUFDO0FBQ3RELE1BQU0scUJBQXFCLEdBQUc7QUFDOUIsRUFBRSxRQUFRLEVBQUUsVUFBVTtBQUN0QixFQUFFLFFBQVEsRUFBRSxVQUFVO0FBQ3RCLEVBQUUsU0FBUyxFQUFFLFdBQVc7QUFDeEIsRUFBRSxTQUFTLEVBQUUsV0FBVztBQUN4QixFQUFFLElBQUksRUFBRSxNQUFNO0FBQ2QsQ0FBQyxDQUFDO0FBQ0YsT0FBTyxDQUFDLHFCQUFxQixHQUFHLHFCQUFxQixDQUFDO0FBQ3RELE1BQU0sbUJBQW1CLEdBQUc7QUFDNUIsRUFBRSxLQUFLLEVBQUUsT0FBTztBQUNoQixFQUFFLEtBQUssRUFBRSxHQUFHO0FBQ1osQ0FBQyxDQUFDO0FBQ0YsT0FBTyxDQUFDLG1CQUFtQixHQUFHLG1CQUFtQixDQUFDO0FBQ2xELE1BQU0sY0FBYyxHQUFHO0FBQ3ZCLEVBQUUsU0FBUyxFQUFFLElBQUk7QUFDakIsRUFBRSxNQUFNLEVBQUUsSUFBSTtBQUNkLEVBQUUsS0FBSyxFQUFFLElBQUk7QUFDYixFQUFFLE1BQU0sRUFBRSxJQUFJO0FBQ2QsRUFBRSxRQUFRLEVBQUUsSUFBSTtBQUNoQixFQUFFLE1BQU0sRUFBRSxJQUFJO0FBQ2QsRUFBRSxRQUFRLEVBQUUsSUFBSTtBQUNoQixFQUFFLE1BQU0sRUFBRSxJQUFJO0FBQ2QsRUFBRSxZQUFZLEVBQUUsS0FBSztBQUNyQixFQUFFLGNBQWMsRUFBRSxLQUFLO0FBQ3ZCLENBQUMsQ0FBQztBQUNGLE9BQU8sQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO0FBQ3hDLE1BQU0sbUJBQW1CLEdBQUc7QUFDNUIsRUFBRSxRQUFRLEVBQUUsU0FBUztBQUNyQixFQUFFLFFBQVEsRUFBRSxTQUFTO0FBQ3JCLEVBQUUsUUFBUSxFQUFFLFNBQVM7QUFDckIsRUFBRSxTQUFTLEVBQUUsU0FBUztBQUN0QixFQUFFLFFBQVEsRUFBRSxTQUFTO0FBQ3JCLEVBQUUsYUFBYSxFQUFFLFNBQVM7QUFDMUIsRUFBRSxLQUFLLEVBQUUsU0FBUztBQUNsQixFQUFFLFVBQVUsRUFBRSxTQUFTO0FBQ3ZCLEVBQUUsS0FBSyxFQUFFLFNBQVM7QUFDbEIsRUFBRSxJQUFJLEVBQUUsU0FBUztBQUNqQixFQUFFLElBQUksRUFBRSxTQUFTO0FBQ2pCLEVBQUUsVUFBVSxFQUFFLFNBQVM7QUFDdkIsRUFBRSxXQUFXLEVBQUUsU0FBUztBQUN4QixFQUFFLGVBQWUsRUFBRSxTQUFTO0FBQzVCLEVBQUUsV0FBVyxFQUFFLFNBQVM7QUFDeEIsRUFBRSxJQUFJLEVBQUUsU0FBUztBQUNqQixFQUFFLFFBQVEsRUFBRSxTQUFTO0FBQ3JCLEVBQUUsY0FBYyxFQUFFLFNBQVM7QUFDM0IsRUFBRSxpQkFBaUIsRUFBRSxTQUFTO0FBQzlCLENBQUMsQ0FBQztBQUNGLE9BQU8sQ0FBQyxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQztBQUNsRCxNQUFNLHlCQUF5QixHQUFHO0FBQ2xDLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDVixFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQ1gsRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUNaLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDVixFQUFFLFNBQVMsRUFBRSxDQUFDO0FBQ2QsQ0FBQyxDQUFDO0FBQ0YsT0FBTyxDQUFDLHlCQUF5QixHQUFHLHlCQUF5QixDQUFDO0FBQzlELE1BQU0seUJBQXlCLEdBQUc7QUFDbEMsRUFBRSxDQUFDLEVBQUUsYUFBYTtBQUNsQixFQUFFLENBQUMsRUFBRSxZQUFZO0FBQ2pCLEVBQUUsQ0FBQyxFQUFFLFlBQVk7QUFDakIsRUFBRSxDQUFDLEVBQUUsVUFBVTtBQUNmLEVBQUUsRUFBRSxFQUFFLE9BQU87QUFDYixFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxFQUFFLEVBQUUsVUFBVTtBQUNoQixFQUFFLEVBQUUsRUFBRSxXQUFXO0FBQ2pCLEVBQUUsRUFBRSxFQUFFLGFBQWE7QUFDbkIsRUFBRSxFQUFFLEVBQUUsZUFBZTtBQUNyQixFQUFFLENBQUMsRUFBRSxXQUFXO0FBQ2hCLEVBQUUsQ0FBQyxFQUFFLFFBQVE7QUFDYixFQUFFLENBQUMsRUFBRSxVQUFVO0FBQ2YsRUFBRSxDQUFDLEVBQUUsV0FBVztBQUNoQixDQUFDLENBQUM7QUFDRixPQUFPLENBQUMseUJBQXlCLEdBQUcseUJBQXlCLENBQUM7QUFDOUQsTUFBTSx1QkFBdUIsR0FBRztBQUNoQyxFQUFFLEVBQUUsRUFBRSxXQUFXO0FBQ2pCLEVBQUUsRUFBRSxFQUFFLFVBQVU7QUFDaEIsRUFBRSxFQUFFLEVBQUUsU0FBUztBQUNmLEVBQUUsRUFBRSxFQUFFLFdBQVc7QUFDakIsRUFBRSxFQUFFLEVBQUUsVUFBVTtBQUNoQixDQUFDLENBQUM7QUFDRixPQUFPLENBQUMsdUJBQXVCLEdBQUcsdUJBQXVCLENBQUM7QUFDMUQsTUFBTSxtQkFBbUIsR0FBRztBQUM1QixFQUFFLENBQUMsRUFBRSxVQUFVO0FBQ2YsRUFBRSxDQUFDLEVBQUUsV0FBVztBQUNoQixDQUFDLENBQUM7QUFDRixPQUFPLENBQUMsbUJBQW1CLEdBQUcsbUJBQW1CLENBQUM7QUFDbEQsTUFBTSxVQUFVLEdBQUc7QUFDbkIsRUFBRSxPQUFPLEVBQUUsU0FBUztBQUNwQixFQUFFLEtBQUssRUFBRSxPQUFPO0FBQ2hCLEVBQUUsR0FBRyxFQUFFLEtBQUs7QUFDWixFQUFFLEdBQUcsRUFBRSxLQUFLO0FBQ1osRUFBRSxHQUFHLEVBQUUsS0FBSztBQUNaLEVBQUUsSUFBSSxFQUFFLE1BQU07QUFDZCxFQUFFLEdBQUcsRUFBRSxLQUFLO0FBQ1osRUFBRSxHQUFHLEVBQUUsS0FBSztBQUNaLEVBQUUsR0FBRyxFQUFFLEtBQUs7QUFDWixFQUFFLEdBQUcsRUFBRSxLQUFLO0FBQ1osQ0FBQyxDQUFDO0FBQ0YsT0FBTyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7QUFDaEMsTUFBTSxRQUFRLEdBQUc7QUFDakIsRUFBRSxPQUFPLEVBQUUsU0FBUztBQUNwQixFQUFFLEtBQUssRUFBRSxPQUFPO0FBQ2hCLEVBQUUsYUFBYSxFQUFFLGVBQWU7QUFDaEMsRUFBRSxNQUFNLEVBQUUsUUFBUTtBQUNsQixFQUFFLFlBQVksRUFBRSxjQUFjO0FBQzlCLEVBQUUsYUFBYSxFQUFFLGVBQWU7QUFDaEMsRUFBRSxRQUFRLEVBQUUsVUFBVTtBQUN0QixFQUFFLFlBQVksRUFBRSxjQUFjO0FBQzlCLEVBQUUsS0FBSyxFQUFFLE9BQU87QUFDaEIsRUFBRSxRQUFRLEVBQUUsVUFBVTtBQUN0QixFQUFFLEtBQUssRUFBRSxPQUFPO0FBQ2hCLEVBQUUsT0FBTyxFQUFFLFNBQVM7QUFDcEIsQ0FBQyxDQUFDO0FBQ0YsT0FBTyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7QUFDNUIsTUFBTSxjQUFjLEdBQUc7QUFDdkIsRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUNYLEVBQUUsUUFBUSxFQUFFLENBQUM7QUFDYixFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ1YsQ0FBQyxDQUFDO0FBQ0YsT0FBTyxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7QUFDeEMsTUFBTSxtQkFBbUIsR0FBRztBQUM1QixFQUFFLElBQUksRUFBRSxDQUFDO0FBQ1QsRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUNYLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDWCxDQUFDLENBQUM7QUFDRixPQUFPLENBQUMsbUJBQW1CLEdBQUcsbUJBQW1CLENBQUM7QUFDbEQsTUFBTSxHQUFHLEdBQUc7QUFDWixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsRUFBRSxZQUFZLEVBQUUsQ0FBQztBQUNqQixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsRUFBRSxXQUFXLEVBQUUsQ0FBQztBQUNoQixFQUFFLGFBQWEsRUFBRSxDQUFDO0FBQ2xCLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDWixFQUFFLGtCQUFrQixFQUFFLENBQUM7QUFDdkIsRUFBRSxXQUFXLEVBQUUsQ0FBQztBQUNoQixFQUFFLFNBQVMsRUFBRSxDQUFDO0FBQ2QsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsT0FBTyxFQUFFLEVBQUU7QUFDYixFQUFFLFNBQVMsRUFBRSxFQUFFO0FBQ2YsRUFBRSxNQUFNLEVBQUUsRUFBRTtBQUNaLEVBQUUsTUFBTSxFQUFFLEVBQUU7QUFDWixFQUFFLE9BQU8sRUFBRSxFQUFFO0FBQ2IsRUFBRSxRQUFRLEVBQUUsRUFBRTtBQUNkLEVBQUUsUUFBUSxFQUFFLEVBQUU7QUFDZCxFQUFFLFNBQVMsRUFBRSxFQUFFO0FBQ2YsRUFBRSxTQUFTLEVBQUUsRUFBRTtBQUNmLEVBQUUsTUFBTSxFQUFFLEVBQUU7QUFDWixFQUFFLFdBQVcsRUFBRSxFQUFFO0FBQ2pCLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLE1BQU0sRUFBRSxFQUFFO0FBQ1osRUFBRSxVQUFVLEVBQUUsRUFBRTtBQUNoQixFQUFFLFlBQVksRUFBRSxFQUFFO0FBQ2xCLEVBQUUsZUFBZSxFQUFFLEVBQUU7QUFDckIsRUFBRSxpQkFBaUIsRUFBRSxFQUFFO0FBQ3ZCLEVBQUUsT0FBTyxFQUFFLEVBQUU7QUFDYixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxNQUFNLEVBQUUsRUFBRTtBQUNaLEVBQUUsU0FBUyxFQUFFLEVBQUU7QUFDZixFQUFFLE9BQU8sRUFBRSxFQUFFO0FBQ2IsRUFBRSxjQUFjLEVBQUUsRUFBRTtBQUNwQixFQUFFLGNBQWMsRUFBRSxFQUFFO0FBQ3BCLEVBQUUsU0FBUyxFQUFFLEVBQUU7QUFDZixFQUFFLFVBQVUsRUFBRSxFQUFFO0FBQ2hCLEVBQUUsT0FBTyxFQUFFLEVBQUU7QUFDYixFQUFFLG9CQUFvQixFQUFFLEVBQUU7QUFDMUIsRUFBRSxXQUFXLEVBQUUsRUFBRTtBQUNqQixFQUFFLFFBQVEsRUFBRSxFQUFFO0FBQ2QsRUFBRSxrQkFBa0IsRUFBRSxFQUFFO0FBQ3hCLEVBQUUsYUFBYSxFQUFFLEVBQUU7QUFDbkIsRUFBRSxRQUFRLEVBQUUsRUFBRTtBQUNkLEVBQUUsUUFBUSxFQUFFLEVBQUU7QUFDZCxFQUFFLGNBQWMsRUFBRSxFQUFFO0FBQ3BCLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRTtBQUN0QixFQUFFLDBCQUEwQixFQUFFLEVBQUU7QUFDaEMsRUFBRSxZQUFZLEVBQUUsRUFBRTtBQUNsQixFQUFFLHFCQUFxQixFQUFFLEVBQUU7QUFDM0IsRUFBRSxtQkFBbUIsRUFBRSxFQUFFO0FBQ3pCLEVBQUUsaUJBQWlCLEVBQUUsRUFBRTtBQUN2QixFQUFFLGNBQWMsRUFBRSxFQUFFO0FBQ3BCLEVBQUUsZUFBZSxFQUFFLEVBQUU7QUFDckIsRUFBRSxZQUFZLEVBQUUsRUFBRTtBQUNsQixFQUFFLGFBQWEsRUFBRSxFQUFFO0FBQ25CLEVBQUUsYUFBYSxFQUFFLEVBQUU7QUFDbkIsRUFBRSxXQUFXLEVBQUUsRUFBRTtBQUNqQixFQUFFLGlCQUFpQixFQUFFLEVBQUU7QUFDdkIsRUFBRSxlQUFlLEVBQUUsRUFBRTtBQUNyQixFQUFFLGtCQUFrQixFQUFFLEVBQUU7QUFDeEIsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFO0FBQ3RCLEVBQUUsV0FBVyxFQUFFLEVBQUU7QUFDakIsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFO0FBQ3RCLEVBQUUsY0FBYyxFQUFFLEVBQUU7QUFDcEIsRUFBRSxjQUFjLEVBQUUsRUFBRTtBQUNwQixFQUFFLFlBQVksRUFBRSxFQUFFO0FBQ2xCLEVBQUUsU0FBUyxFQUFFLEVBQUU7QUFDZixFQUFFLGNBQWMsRUFBRSxFQUFFO0FBQ3BCLEVBQUUsa0JBQWtCLEVBQUUsRUFBRTtBQUN4QixFQUFFLHVCQUF1QixFQUFFLEVBQUU7QUFDN0IsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFO0FBQ3RCLEVBQUUsV0FBVyxFQUFFLEVBQUU7QUFDakIsRUFBRSxTQUFTLEVBQUUsRUFBRTtBQUNmLEVBQUUscUJBQXFCLEVBQUUsRUFBRTtBQUMzQixFQUFFLG1CQUFtQixFQUFFLEVBQUU7QUFDekIsRUFBRSxVQUFVLEVBQUUsRUFBRTtBQUNoQixFQUFFLFFBQVEsRUFBRSxFQUFFO0FBQ2QsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFO0FBQ3RCLEVBQUUsY0FBYyxFQUFFLEVBQUU7QUFDcEIsRUFBRSxlQUFlLEVBQUUsRUFBRTtBQUNyQixFQUFFLGFBQWEsRUFBRSxFQUFFO0FBQ25CLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRTtBQUN0QixFQUFFLHFCQUFxQixFQUFFLEVBQUU7QUFDM0IsRUFBRSwwQkFBMEIsRUFBRSxFQUFFO0FBQ2hDLEVBQUUsaUJBQWlCLEVBQUUsRUFBRTtBQUN2QixFQUFFLHVCQUF1QixFQUFFLEVBQUU7QUFDN0IsRUFBRSw0QkFBNEIsRUFBRSxFQUFFO0FBQ2xDLEVBQUUsdUJBQXVCLEVBQUUsRUFBRTtBQUM3QixFQUFFLDJCQUEyQixFQUFFLEVBQUU7QUFDakMsRUFBRSx3QkFBd0IsRUFBRSxFQUFFO0FBQzlCLEVBQUUsYUFBYSxFQUFFLEVBQUU7QUFDbkIsQ0FBQyxDQUFDO0FBQ0YsT0FBTyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbEIsTUFBTSxvQkFBb0IsR0FBRztBQUM3QixFQUFFLE9BQU8sRUFBRSxTQUFTO0FBQ3BCLEVBQUUsS0FBSyxFQUFFLE9BQU87QUFDaEIsRUFBRSxVQUFVLEVBQUUsWUFBWTtBQUMxQixFQUFFLFVBQVUsRUFBRSxZQUFZO0FBQzFCLEVBQUUsS0FBSyxFQUFFLE9BQU87QUFDaEIsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCO0FBQ2xDLEVBQUUsSUFBSSxFQUFFLE1BQU07QUFDZCxFQUFFLGtCQUFrQixFQUFFLG9CQUFvQjtBQUMxQyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0I7QUFDbEMsRUFBRSxZQUFZLEVBQUUsY0FBYztBQUM5QixFQUFFLGtCQUFrQixFQUFFLG9CQUFvQjtBQUMxQyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0I7QUFDbEMsRUFBRSxnQkFBZ0IsRUFBRSxrQkFBa0I7QUFDdEMsRUFBRSxrQkFBa0IsRUFBRSxvQkFBb0I7QUFDMUMsRUFBRSxlQUFlLEVBQUUsaUJBQWlCO0FBQ3BDLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CO0FBQ3hDLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CO0FBQzFDLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCO0FBQzVDLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CO0FBQzFDLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCO0FBQ3RDLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CO0FBQzFDLEVBQUUscUJBQXFCLEVBQUUsdUJBQXVCO0FBQ2hELENBQUMsQ0FBQztBQUNGLE9BQU8sQ0FBQyxvQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQztBQUNwRCxNQUFNLGlCQUFpQixHQUFHO0FBQzFCLEVBQUUsYUFBYSxFQUFFLENBQUM7QUFDbEIsRUFBRSxrQkFBa0IsRUFBRSxDQUFDO0FBQ3ZCLENBQUMsQ0FBQztBQUNGLE9BQU8sQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztBQUM5QyxJQUFJLFNBQVMsR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDO0FBQ3hDO0FBQ0EsU0FBUyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUU7QUFDbEMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDL0IsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQ3RCLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQSxTQUFTLGlCQUFpQixHQUFHO0FBQzdCLEVBQUUsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUNEO0FBQ0EsU0FBUyxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ25CLEVBQUUsSUFBSSxTQUFTLElBQUksY0FBYyxDQUFDLEtBQUssRUFBRTtBQUN6QyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQSxTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUU7QUFDbkIsRUFBRSxJQUFJLFNBQVMsSUFBSSxjQUFjLENBQUMsUUFBUSxFQUFFO0FBQzVDLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBLFNBQVMsV0FBVyxDQUFDLEdBQUcsRUFBRTtBQUMxQixFQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkIsQ0FBQztBQUNEO0FBQ0EsU0FBUyxNQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRTtBQUMzQixFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDYixJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNyQixHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0EsU0FBUyxZQUFZLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRTtBQUN6QyxFQUFFLElBQUksSUFBSSxDQUFDO0FBQ1g7QUFDQSxFQUFFLElBQUk7QUFDTixJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM1QjtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxNQUFNLEVBQUU7QUFDaEQsTUFBTSxPQUFPLEtBQUssQ0FBQztBQUNuQixLQUFLO0FBQ0wsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQ2QsSUFBSSxPQUFPLEtBQUssQ0FBQztBQUNqQixHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4QyxFQUFFLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ3RDLENBQUM7QUFDRDtBQUNBLFNBQVMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFO0FBQy9CLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNaLElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsR0FBRztBQUNIO0FBQ0EsRUFBRSxRQUFRLEdBQUcsQ0FBQyxRQUFRO0FBQ3RCLElBQUksS0FBSyxPQUFPLENBQUM7QUFDakIsSUFBSSxLQUFLLFFBQVEsQ0FBQztBQUNsQixJQUFJLEtBQUssTUFBTSxDQUFDO0FBQ2hCLElBQUksS0FBSyxTQUFTLENBQUM7QUFDbkIsSUFBSSxLQUFLLE1BQU07QUFDZixNQUFNLE9BQU8sSUFBSSxDQUFDO0FBQ2xCO0FBQ0EsSUFBSTtBQUNKLE1BQU0sT0FBTyxLQUFLLENBQUM7QUFDbkIsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBLFNBQVMsc0JBQXNCLENBQUMsR0FBRyxFQUFFLE9BQU8sR0FBRyxJQUFJLEVBQUUsT0FBTyxHQUFHLElBQUksRUFBRTtBQUNyRSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7QUFDWixJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSTtBQUNOLElBQUksSUFBSSxPQUFPLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO0FBQzVDLE1BQU0sSUFBSSxPQUFPLENBQUMsa0JBQWtCLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUNoRSxRQUFRLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEM7QUFDQSxRQUFRLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO0FBQ3RDLFVBQVUsR0FBRyxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEMsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxPQUFPLENBQUMsa0JBQWtCLEVBQUU7QUFDdEMsUUFBUSxJQUFJO0FBQ1osVUFBVSxHQUFHLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEMsU0FBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUU7QUFDdkIsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxXQUFXLEdBQUcsT0FBTyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2RTtBQUNBLElBQUksSUFBSSxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsRUFBRTtBQUN2QyxNQUFNLE9BQU8sV0FBVyxDQUFDO0FBQ3pCLEtBQUs7QUFDTCxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUUsRUFBRTtBQUNqQjtBQUNBLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBQ0Q7QUFDQSxTQUFTLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUNsQyxFQUFFLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRTtBQUNuQyxJQUFJLEtBQUs7QUFDVCxJQUFJLFVBQVUsRUFBRSxJQUFJO0FBQ3BCLElBQUksWUFBWSxFQUFFLElBQUk7QUFDdEIsSUFBSSxRQUFRLEVBQUUsS0FBSztBQUNuQixHQUFHLENBQUMsQ0FBQztBQUNMLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBQ0Q7QUFDQSxNQUFNLGFBQWEsR0FBRyxTQUFTLG9CQUFvQixHQUFHO0FBQ3RELEVBQUUsU0FBUyxhQUFhLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRTtBQUN4QyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxhQUFhLEVBQUU7QUFDNUMsTUFBTSxXQUFXLENBQUMsa0NBQWtDLENBQUMsQ0FBQztBQUN0RCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQzNCLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDckIsR0FBRztBQUNIO0FBQ0EsRUFBRSxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7QUFDeEMsRUFBRSxhQUFhLENBQUMsV0FBVyxHQUFHLGFBQWEsQ0FBQztBQUM1QyxFQUFFLE9BQU8sYUFBYSxDQUFDO0FBQ3ZCLENBQUMsRUFBRSxDQUFDO0FBQ0o7QUFDQSxPQUFPLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztBQUN0QztBQUNBLE1BQU0saUJBQWlCLFNBQVMsYUFBYSxDQUFDO0FBQzlDLEVBQUUsV0FBVyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUU7QUFDekIsSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFLG1CQUFtQixDQUFDLENBQUM7QUFDcEMsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNyQixHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxPQUFPLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7QUFDOUM7QUFDQSxNQUFNLHFCQUFxQixTQUFTLGFBQWEsQ0FBQztBQUNsRCxFQUFFLFdBQVcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFO0FBQzVCLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO0FBQ3hDLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDM0IsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsT0FBTyxDQUFDLHFCQUFxQixHQUFHLHFCQUFxQixDQUFDO0FBQ3REO0FBQ0EsTUFBTSxtQkFBbUIsU0FBUyxhQUFhLENBQUM7QUFDaEQsRUFBRSxXQUFXLENBQUMsR0FBRyxFQUFFO0FBQ25CLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0FBQ3RDLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE9BQU8sQ0FBQyxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQztBQUNsRDtBQUNBLE1BQU0sbUJBQW1CLFNBQVMsYUFBYSxDQUFDO0FBQ2hELEVBQUUsV0FBVyxDQUFDLEdBQUcsRUFBRTtBQUNuQixJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUUscUJBQXFCLENBQUMsQ0FBQztBQUN0QyxHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxPQUFPLENBQUMsbUJBQW1CLEdBQUcsbUJBQW1CLENBQUM7QUFDbEQ7QUFDQSxNQUFNLDJCQUEyQixTQUFTLGFBQWEsQ0FBQztBQUN4RCxFQUFFLFdBQVcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFO0FBQzNCLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSw2QkFBNkIsQ0FBQyxDQUFDO0FBQzlDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDekIsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsT0FBTyxDQUFDLDJCQUEyQixHQUFHLDJCQUEyQixDQUFDO0FBQ2xFO0FBQ0EsTUFBTSxXQUFXLFNBQVMsYUFBYSxDQUFDO0FBQ3hDLEVBQUUsV0FBVyxDQUFDLEdBQUcsRUFBRTtBQUNuQixJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDOUIsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsT0FBTyxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7QUFDbEM7QUFDQSxNQUFNLGNBQWMsU0FBUyxhQUFhLENBQUM7QUFDM0MsRUFBRSxXQUFXLENBQUMsR0FBRyxFQUFFO0FBQ25CLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ2pDLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE9BQU8sQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO0FBQ3hDLE1BQU0sb0JBQW9CLEdBQUcsUUFBUSxDQUFDO0FBQ3RDLE1BQU0seUJBQXlCLEdBQUcsY0FBYyxDQUFDO0FBQ2pEO0FBQ0EsU0FBUyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLEdBQUcsS0FBSyxFQUFFO0FBQzdELEVBQUUsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUU7QUFDL0IsSUFBSSxJQUFJLENBQUMseURBQXlELENBQUMsQ0FBQztBQUNwRSxJQUFJLE9BQU8sR0FBRyxDQUFDO0FBQ2YsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLGdCQUFnQixFQUFFO0FBQ3hCLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMseUJBQXlCLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdEQsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDL0MsQ0FBQztBQUNEO0FBQ0EsU0FBUyxhQUFhLENBQUMsS0FBSyxFQUFFO0FBQzlCLEVBQUUsTUFBTSxDQUFDLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLG9DQUFvQyxDQUFDLENBQUM7QUFDMUgsRUFBRSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQzlCLEVBQUUsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUM7QUFDbEM7QUFDQSxFQUFFLElBQUksTUFBTSxHQUFHLGtCQUFrQixFQUFFO0FBQ25DLElBQUksT0FBTyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbEQsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDcEI7QUFDQSxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLGtCQUFrQixFQUFFO0FBQ3ZELElBQUksTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDOUQsSUFBSSxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUM5QyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDeEQsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekIsQ0FBQztBQUNEO0FBQ0EsU0FBUyxhQUFhLENBQUMsR0FBRyxFQUFFO0FBQzVCLEVBQUUsTUFBTSxDQUFDLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRSxvQ0FBb0MsQ0FBQyxDQUFDO0FBQ3hFLEVBQUUsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztBQUM1QixFQUFFLE1BQU0sS0FBSyxHQUFHLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZDO0FBQ0EsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ25DLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3hDLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBQ0Q7QUFDQSxTQUFTLGVBQWUsQ0FBQyxHQUFHLEVBQUU7QUFDOUIsRUFBRSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO0FBQ2hDLElBQUksT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDO0FBQ3RCLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFLHFDQUFxQyxDQUFDLENBQUM7QUFDOUUsRUFBRSxPQUFPLEdBQUcsQ0FBQyxVQUFVLENBQUM7QUFDeEIsQ0FBQztBQUNEO0FBQ0EsU0FBUyxhQUFhLENBQUMsR0FBRyxFQUFFO0FBQzVCLEVBQUUsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztBQUM1QjtBQUNBLEVBQUUsSUFBSSxNQUFNLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsWUFBWSxVQUFVLEVBQUU7QUFDcEQsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztBQUN2QjtBQUNBLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNuQyxJQUFJLFlBQVksSUFBSSxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUMsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDZCxFQUFFLE1BQU0sSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzVDO0FBQ0EsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ25DLElBQUksSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCO0FBQ0EsSUFBSSxJQUFJLEVBQUUsSUFBSSxZQUFZLFVBQVUsQ0FBQyxFQUFFO0FBQ3ZDLE1BQU0sSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUU7QUFDcEMsUUFBUSxJQUFJLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25DLE9BQU8sTUFBTTtBQUNiLFFBQVEsSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BDLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDdkMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN4QixJQUFJLEdBQUcsSUFBSSxVQUFVLENBQUM7QUFDdEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFDRDtBQUNBLFNBQVMsUUFBUSxDQUFDLEtBQUssRUFBRTtBQUN6QixFQUFFLE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxLQUFLLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDdEcsQ0FBQztBQUNEO0FBQ0EsU0FBUyxVQUFVLENBQUMsR0FBRyxFQUFFO0FBQ3pCLEVBQUUsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUNqQyxDQUFDO0FBQ0Q7QUFDQSxTQUFTLGFBQWEsQ0FBQyxHQUFHLEVBQUU7QUFDNUIsRUFBRSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xDO0FBQ0EsRUFBRSxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksR0FBRyxFQUFFO0FBQ2xDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNyQixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUNEO0FBQ0EsU0FBUyxjQUFjLEdBQUc7QUFDMUIsRUFBRSxNQUFNLE9BQU8sR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakIsRUFBRSxNQUFNLE1BQU0sR0FBRyxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN2RCxFQUFFLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN6QixDQUFDO0FBQ0Q7QUFDQSxNQUFNLG9CQUFvQixHQUFHO0FBQzdCLEVBQUUsSUFBSSxLQUFLLEdBQUc7QUFDZCxJQUFJLE9BQU8sTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztBQUNuRCxHQUFHO0FBQ0g7QUFDQSxDQUFDLENBQUM7QUFDRixPQUFPLENBQUMsb0JBQW9CLEdBQUcsb0JBQW9CLENBQUM7QUFDcEQ7QUFDQSxTQUFTLGVBQWUsR0FBRztBQUMzQixFQUFFLElBQUk7QUFDTixJQUFJLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JCLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQ2QsSUFBSSxPQUFPLEtBQUssQ0FBQztBQUNqQixHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0EsTUFBTSxxQkFBcUIsR0FBRztBQUM5QixFQUFFLElBQUksS0FBSyxHQUFHO0FBQ2QsSUFBSSxPQUFPLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7QUFDcEQsR0FBRztBQUNIO0FBQ0EsQ0FBQyxDQUFDO0FBQ0YsT0FBTyxDQUFDLHFCQUFxQixHQUFHLHFCQUFxQixDQUFDO0FBQ3RELE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BGO0FBQ0EsTUFBTSxJQUFJLENBQUM7QUFDWCxFQUFFLE9BQU8sWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQy9CLElBQUksT0FBTyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9ELEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUMzQixJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdE4sR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzlCLElBQUksTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRCxJQUFJLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEQsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxxQkFBcUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3JDLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLElBQUksTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzRSxJQUFJLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1RSxJQUFJLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDcEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLDBCQUEwQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDMUMsSUFBSSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN6QyxJQUFJLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDckQsSUFBSSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3BELElBQUksTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEssR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLGdCQUFnQixDQUFDLENBQUMsRUFBRTtBQUM3QixJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDeEgsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLGdCQUFnQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDaEMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2SSxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sNkJBQTZCLENBQUMsQ0FBQyxFQUFFO0FBQzFDLElBQUksTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RCxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RCxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RCxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RCxJQUFJLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUIsSUFBSSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JFLElBQUksTUFBTSxFQUFFLEdBQUcsS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDbkMsSUFBSSxNQUFNLEVBQUUsR0FBRyxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNuQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sYUFBYSxDQUFDLElBQUksRUFBRTtBQUM3QixJQUFJLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUMzQixNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckIsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQzNCLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQixNQUFNLENBQUMsQ0FB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QUFDLENBQUM7QUFDckIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQixNQUFNLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNyRyxNQUFNLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNyRyxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDekIsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDN0IsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM3QixJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVHLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3BCLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFB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TSxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO0FBQ3BDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QztBQUNBLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsQyxHQUFHLENBQUM7QUFDSjtBQUNBLEVBQUUsR0FBRyxDQUFDLEtBQUssR0FBRyxTQUFTLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3RDLElBQUksTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO0FBQ3BDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNkO0FBQ0EsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QixHQUFHLENBQUM7QUFDSjtBQUNBLEVBQUUsR0FBRyxDQUFDLFNBQVMsR0FBRyxTQUFTLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUMxRCxJQUFJLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFB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QUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEMsTUFBTSxFQUFFLEtBQUssQ0FBQztBQUNkLEtBQUs7QUFDTDtBQUNBLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUN2QixJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEIsSUFBSSxFQUFFLEtBQUssQ0FBQztBQUNaLEdBQUc7QUFDSDtBQUNBLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDL0IsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN2QixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BCO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQzVDLE1BQU0sTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDLE1BQU0sRUFBRSxLQUFLLENBQUM7QUFDZCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbkU7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2hDLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLENB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Q0FBQyxDQUFDLENBQUM7QUFDOUM7QUFDQSxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDdEIsUUFBUSxFQUFFLEtBQUssQ0FBQztBQUNoQixPQUFPO0FBQ1AsS0FBSyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUU7QUFDdkI7QUFDQSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDMUIsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNSLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLEVBQUU7QUFDbkMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDYixJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztBQUNwQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUIsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDbEI7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdkQsTUFBTSxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQjtBQUNBLE1BQU0sS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3JELFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVB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QUMsRUFBRTtBQUNwQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzFELElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdkMsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN2QyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdkMsR0FBRztBQUNIO0FBQ0EsRUFBRSxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNuRSxJQUFJLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzdFO0FBQ0EsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyRCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUMs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TUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCO0FBQ0EsSUFBSSxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDckIsTUFBTSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN4QixNQUFNLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3hCLE1BQU0sS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDeEIsS0FBSyxNQUFNLElBQUksS0FBSyxHQUFHLEdBQUcsRUFBRTtBQUM1QixNQUFNLE1BQU0sTUFBTSxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFDakMsTUFBTSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQzdELE1BQU0sS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUM3RCxNQUFNLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDN0QsS0FBSztBQUNMLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQSxTQUFTLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFO0FBQzdELEVBQUUsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztBQUNqQyxFQUFFLE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDeEI7QUFDQSxFQUFFLEtBQUss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QU0sQ0FBQyxDQUFDO0FBQ3ZFLEtBQUssTUFBTTtBQUNYLE1BQU0sUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUMsTUFBTSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QyxNQUFNLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLE1BQU0sUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0MsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztBQUMzQyxJQUFJLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7QUFDM0MsSUFBSSxZQUFZLENBQUMsWUFBWSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzFELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM1RSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDdkIsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLEdBQUc7QUFDVCxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDcEIsSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQzdCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUIsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMvQixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sR0FBRztBQUNaLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUU7QUFDbEUsTUFBTSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDMUIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUN0QyxNQUFNLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMzQyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDekIsTUFBTSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7QUFDN0IsTUFBTSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztBQUM5QixNQUFNLElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUM7QUFDN0MsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzlCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN6QyxJQUFJLElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUM7QUFDM0MsR0FBRztBQUNIO0FBQ0EsRUFBRSxhQUFhLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRTtBQUMzQixJQUFJLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDekIsSUFBSSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ2pDLElBQUksSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7QUFDckIsUUFBUSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUN0QixJQUFJLElBQUksTUFBTSxFQUFFLE1BQU0sQ0FBQztBQUN2QjtBQUNBLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3pELE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUN4QixRQUFRLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTO0FBQ2hDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEMsVUFBVSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNuQyxVQUFVLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDL0IsVUFBVSxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2hDLFVBQVUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0I7QUFDQSxVQUFVLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQzNDLFlBQVksR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDL0IsV0FBVyxNQUFNO0FBQ2pCLFlBQVksR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUIsWUFBWSxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMvQixZQUFZLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFVBQVUsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbEUsVUFBVSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNwRSxVQUFVLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUMxQixVQUFVLE1BQU07QUFDaEI7QUFDQSxRQUFRLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNO0FBQzdCLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0IsVUFBVSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsRSxVQUFVLE1BQU07QUFDaEI7QUFDQSxRQUFRLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNO0FBQzdCLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0IsVUFBVSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsRSxVQUFVLE1BQU07QUFDaEI7QUFDQSxRQUFRLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPO0FBQzlCLFVBQVUsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNyQixVQUFVLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDckIsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxQixVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsR0FBRyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2xGLFVBQVUsT0FBTyxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdkksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pCLFVBQVUsTUFBTTtBQUNoQjtBQUNBLFFBQVEsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVE7QUFDL0IsVUFBVSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLFVBQVUsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNyQixVQUFVLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRixVQUFVLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZJLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUIsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxQixVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakIsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUTtBQUMvQixVQUFVLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDckIsVUFBVSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUIsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxQixVQUFVLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUQsVUFBVSxPQUFPLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbkgsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pCLFVBQVUsTUFBTTtBQUNoQjtBQUNBLFFBQVEsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVM7QUFDaEMsVUFBVSxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDMUIsVUFBVSxNQUFNO0FBQ2hCLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxHQUFHO0FBQ2QsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRTtBQUN0QixJQUFJLFdBQVcsR0FBRyxPQUFPLFdBQVcsS0FBSyxXQUFXLEdBQUcsV0FBVyxHQUFHLElBQUksQ0FBQztBQUMxRSxJQUFJLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDekIsSUFBSSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztBQUNqRCxJQUFJLEdBQUcsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7QUFDL0M7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtBQUM3QixNQUFNLElBQUksT0FBTyxXQUFXLEtBQUssUUFBUSxJQUFJLFdBQVcsRUFBRSxVQUFVLEVBQUU7QUFDdEUsUUFBUSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztBQUNyRCxRQUFRLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNuQixRQUFRLEdBQUcsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQywwQkFBMEIsRUFBRSxlQUFlLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzdILFFBQVEsR0FBRyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3BFLFFBQVEsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3JCLFFBQVEsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3RCLE9BQU8sTUFBTTtBQUNiLFFBQVEsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7QUFDckQ7QUFDQSxRQUFRLElBQUksU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRTtBQUNuRSxVQUFVLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNyQixVQUFVLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUMvQixVQUFVLEdBQUcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUNoRSxVQUFVLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN2QixVQUFVLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUN4QixTQUFTLE1BQU07QUFDZixVQUFVLEdBQUcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN0RSxVQUFVLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN2QixTQUFTO0FBQ1QsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxXQUFXLEVBQUU7QUFDckIsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDO0FBQ2pFLEtBQUs7QUFDTDtBQUNBLElBQUksR0FBRyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztBQUM3QyxHQUFHO0FBQ0g7QUFDQSxFQUFFLFdBQVcsR0FBRztBQUNoQixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNyQixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNsQixHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUU7QUFDcEIsSUFBSSxXQUFXLEdBQUcsT0FBTyxXQUFXLEtBQUssV0FBVyxHQUFHLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDMUUsSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3pCLElBQUksTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7QUFDN0MsSUFBSSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztBQUNuRCxJQUFJLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztBQUM1QjtBQUNBLElBQUksSUFBSSxhQUFhLEVBQUU7QUFDdkIsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDakIsTUFBTSxHQUFHLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsMEJBQTBCLEVBQUUsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNySCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDekIsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLHlCQUF5QixFQUFFLENBQUM7QUFDL0Q7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxTQUFTLEtBQUssSUFBSSxFQUFFO0FBQ25ELE1BQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO0FBQzlCLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM1QixRQUFRLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO0FBQ25DLE9BQU8sTUFBTTtBQUNiLFFBQVEsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ25CLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksV0FBVyxFQUFFO0FBQ3JCLE1BQU0sR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3BCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxXQUFXLEVBQUU7QUFDckIsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2xDLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sR0FBRztBQUNYLElBQUksSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7QUFDOUIsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDaEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxVQUFVLEdBQUc7QUFDZixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDckIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3ZCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3ZCLEdBQUc7QUFDSDtBQUNBLEVBQUUsWUFBWSxHQUFHO0FBQ2pCLElBQUksSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7QUFDOUIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDdEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxlQUFlLEdBQUc7QUFDcEIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDckIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDdEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxpQkFBaUIsR0FBRztBQUN0QixJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0FBQzlCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3JCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ3RCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxHQUFHO0FBQ1osSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDdkIsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLEdBQUc7QUFDVCxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0FBQ25DLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxHQUFHO0FBQ1gsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQztBQUMvQixHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsR0FBRztBQUNkLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQztBQUNwRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQztBQUNyQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUM1QyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUM1QyxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sR0FBRztBQUNaLElBQUksTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO0FBQ3hDLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUN6QjtBQUNBLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO0FBQzdCLE1BQU0sR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3RCLE1BQU0sT0FBTztBQUNiLEtBQUs7QUFDTDtBQUNBLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2YsSUFBSSxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDcEI7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzNDLE1BQU0sTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLE1BQU0sR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNsRCxNQUFNLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDekMsS0FBSztBQUNMO0FBQ0EsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDZixJQUFJLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNwQixJQUFJLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0FBQ2pDLEdBQUc7QUFDSDtBQUNBLEVBQUUsY0FBYyxDQUFDLE9BQU8sRUFBRTtBQUMxQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQztBQUN2QyxHQUFHO0FBQ0g7QUFDQSxFQUFFLGNBQWMsQ0FBQyxPQUFPLEVBQUU7QUFDMUIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUM7QUFDdkMsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLENBQUMsS0FBSyxFQUFFO0FBQ25CLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUMxQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLFVBQVUsQ0FBQyxPQUFPLEVBQUU7QUFDdEIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQztBQUNwQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFO0FBQzdCLElBQUksTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDckQsSUFBSSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ2pDO0FBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO0FBQ2xCLE1BQU0sTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLG9CQUFvQixFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsb0JBQW9CLENBQUM7QUFDMUU7QUFDQSxJQUFJLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDcEUsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsK0JBQStCLEdBQUcsV0FBVyxDQUFDLENBQUM7QUFDckUsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUU7QUFDbEIsTUFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFDbkIsTUFBTSxPQUFPLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLEtBQUssTUFBTTtBQUNYLE1BQU0sT0FBTyxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7QUFDaEMsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7QUFDaEMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDakM7QUFDQSxJQUFJLElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRTtBQUM3QixNQUFNLE9BQU87QUFDYixLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxVQUFVLElBQUksWUFBWSxDQUFDO0FBQ3BELElBQUksSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDO0FBQ3hCO0FBQ0EsSUFBSSxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUU7QUFDdkIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQ25CLEtBQUssTUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUU7QUFDN0IsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ3BCLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxRQUFRLEdBQUcsUUFBUSxDQUFDO0FBQ3hELElBQUksTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztBQUMxRCxJQUFJLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQztBQUMvQjtBQUNBLElBQUksSUFBSSxJQUFJLEdBQUcsYUFBYSxFQUFFO0FBQzlCLE1BQU0sZUFBZSxHQUFHLGFBQWEsQ0FBQztBQUN0QyxLQUFLLE1BQU0sSUFBSSxJQUFJLEdBQUcsYUFBYSxFQUFFO0FBQ3JDLE1BQU0sZUFBZSxHQUFHLGFBQWEsQ0FBQztBQUN0QyxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxHQUFHLElBQUksR0FBRyxlQUFlLENBQUM7QUFDeEQsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUN6RSxHQUFHO0FBQ0g7QUFDQSxFQUFFLG9CQUFvQixDQUFDLElBQUksRUFBRTtBQUM3QixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO0FBQzFDLEdBQUc7QUFDSDtBQUNBLEVBQUUsV0FBVyxDQUFDLElBQUksRUFBRTtBQUNwQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUNqQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2pCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQzdDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQzdDLEdBQUc7QUFDSDtBQUNBLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUMzQixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLEdBQUc7QUFDSDtBQUNBLEVBQUUsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2pELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDcEQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDNUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDNUMsR0FBRztBQUNIO0FBQ0EsRUFBRSxRQUFRLEdBQUc7QUFDYixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDM0MsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUU7QUFDcEUsSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3pCLElBQUksTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUNqQyxJQUFJLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFDOUIsSUFBSSxNQUFNLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztBQUN4RCxJQUFJLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztBQUM5RCxJQUFJLE1BQU0sY0FBYyxHQUFHLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQztBQUN4RixJQUFJLE1BQU0sY0FBYyxHQUFHLENBQUMsRUFBRSxpQkFBaUIsR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUM1RixJQUFJLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO0FBQ2pFLElBQUksSUFBSSxTQUFTLENBQUM7QUFDbEI7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxjQUFjLElBQUksV0FBVyxFQUFFO0FBQy9ELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3BFLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLFdBQVcsRUFBRTtBQUM3QyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNqQixNQUFNLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzFCLE1BQU0sR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3RCLE1BQU0sU0FBUyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUMvQjtBQUNBLE1BQU0sSUFBSSxnQkFBZ0IsRUFBRTtBQUM1QixRQUFRLEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3RELE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxjQUFjLEtBQUssS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksSUFBSSxjQUFjLEtBQUssS0FBSyxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRTtBQUNySCxRQUFRLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNuQixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksY0FBYyxLQUFLLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLElBQUksY0FBYyxLQUFLLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUU7QUFDdkgsUUFBUSxJQUFJLG1CQUFtQixFQUFFO0FBQ2pDLFVBQVUsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQy9CLFVBQVUsR0FBRyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBQ2hFLFNBQVM7QUFDVDtBQUNBLFFBQVEsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3JCLE9BQU87QUFDUDtBQUNBLE1BQU0sR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3BCLEtBQUssTUFBTTtBQUNYLE1BQU0sSUFBSSxjQUFjLEtBQUssS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksSUFBSSxjQUFjLEtBQUssS0FBSyxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRTtBQUNySCxRQUFRLEdBQUcsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN0QyxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksY0FBYyxLQUFLLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLElBQUksY0FBYyxLQUFLLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUU7QUFDdkgsUUFBUSxJQUFJLG1CQUFtQixFQUFFO0FBQ2pDLFVBQVUsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3JCLFVBQVUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0IsVUFBVSxHQUFHLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDL0IsVUFBVSxHQUFHLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFDaEUsVUFBVSxHQUFHLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUMsVUFBVSxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDeEIsU0FBUyxNQUFNO0FBQ2YsVUFBVSxHQUFHLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUMsU0FBUztBQUNULE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksY0FBYyxFQUFFO0FBQ3hCLE1BQU0sTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixLQUFLLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUMxRSxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDakIsUUFBUSxTQUFTLEVBQUUsR0FBRyxDQUFDLG1CQUFtQjtBQUMxQyxRQUFRLENBQUM7QUFDVCxRQUFRLENBQUM7QUFDVCxRQUFRLFFBQVE7QUFDaEIsUUFBUSxTQUFTO0FBQ2pCLE9BQU8sQ0FBQyxDQUFDO0FBQ1QsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSx1QkFBdUIsR0FBRztBQUNoQyxJQUFJLE1BQU07QUFDVixNQUFNLE9BQU8sRUFBRSxHQUFHO0FBQ2xCLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyx5QkFBeUIsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDekUsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN0QixJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM3QixJQUFJLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3JELElBQUksSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO0FBQ3hCO0FBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQzdDLE1BQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUU7QUFDeEMsUUFBUSxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFFBQVEsTUFBTTtBQUNkLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSx5QkFBeUIsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN2RSxHQUFHO0FBQ0g7QUFDQSxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUU7QUFDbkIsSUFBSSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ2pDLElBQUksTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztBQUM5QjtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO0FBQzFCLE1BQU0sT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztBQUN0QztBQUNBLElBQUksSUFBSSxRQUFRLEtBQUssQ0FBQyxFQUFFO0FBQ3hCLE1BQU0sT0FBTyxTQUFTLENBQUM7QUFDdkIsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3pCLElBQUksTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztBQUNoRCxJQUFJLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUM7QUFDNUMsSUFBSSxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO0FBQzVDLElBQUksTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztBQUNoRCxJQUFJLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLEdBQUcsYUFBYSxDQUFDO0FBQzFELElBQUksTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUN2QyxJQUFJLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDbkMsSUFBSSxNQUFNLFVBQVUsR0FBRyxRQUFRLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3pDLElBQUksTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztBQUNqRCxJQUFJLE1BQU0saUJBQWlCLEdBQUcsUUFBUSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0QsSUFBSSxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsaUJBQWlCLEtBQUssS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO0FBQ3ZJLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2YsSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ2pELElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzNEO0FBQ0EsSUFBSSxJQUFJLGFBQWEsR0FBRyxDQUFDLEVBQUU7QUFDM0IsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLEtBQUssTUFBTTtBQUNYLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0IsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLGdCQUFnQixDQUFDO0FBQ3pCO0FBQ0EsSUFBSSxJQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUU7QUFDN0IsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDakIsTUFBTSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQywwQkFBMEIsRUFBRSxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdILE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLG1CQUFtQixDQUFDO0FBQ2pELE1BQU0sR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3BCLE1BQU0sR0FBRyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUM7QUFDOUIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDO0FBQ3RDLElBQUksSUFBSSxtQkFBbUIsR0FBRyxLQUFLLENBQUM7QUFDcEMsSUFBSSxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDO0FBQzFDO0FBQ0EsSUFBSSxJQUFJLEtBQUssS0FBSyxDQUFDLElBQUksU0FBUyxLQUFLLENBQUMsRUFBRTtBQUN4QyxNQUFNLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUM7QUFDbEc7QUFDQSxNQUFNLElBQUksY0FBYyxLQUFLLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLElBQUksY0FBYyxLQUFLLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUU7QUFDdkgsUUFBUSxJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDO0FBQy9DLFFBQVEsU0FBUyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0FBQy9DLFFBQVEsbUJBQW1CLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQztBQUM1QyxPQUFPO0FBQ1AsS0FBSyxNQUFNO0FBQ1gsTUFBTSxTQUFTLElBQUksS0FBSyxDQUFDO0FBQ3pCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxhQUFhLEtBQUssR0FBRyxFQUFFO0FBQy9CLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDOUMsTUFBTSxTQUFTLElBQUksYUFBYSxDQUFDO0FBQ2pDLEtBQUs7QUFDTDtBQUNBLElBQUksR0FBRyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFDOUIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2IsUUFBUSxDQUFDLENBQUM7QUFDVjtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDdkMsTUFBTSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUI7QUFDQSxNQUFNLElBQUksSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFO0FBQ25DLFFBQVEsQ0FBQyxJQUFJLFVBQVUsR0FBRyxLQUFLLEdBQUcsUUFBUSxHQUFHLElBQUksQ0FBQztBQUNsRCxRQUFRLFNBQVM7QUFDakIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLGFBQWEsR0FBRyxLQUFLLENBQUM7QUFDaEMsTUFBTSxNQUFNLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsV0FBVyxHQUFHLENBQUMsSUFBSSxXQUFXLENBQUM7QUFDdEUsTUFBTSxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO0FBQ3ZDLE1BQU0sTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUNsQyxNQUFNLElBQUksT0FBTyxFQUFFLE9BQU8sQ0FBQztBQUMzQixNQUFNLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7QUFDOUI7QUFDQSxNQUFNLElBQUksUUFBUSxFQUFFO0FBQ3BCLFFBQVEsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sSUFBSSxlQUFlLENBQUM7QUFDekQsUUFBUSxNQUFNLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUMsR0FBRyxpQkFBaUIsQ0FBQztBQUNuRixRQUFRLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxpQkFBaUIsQ0FBQztBQUNsRCxRQUFRLEtBQUssR0FBRyxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQzlDLFFBQVEsT0FBTyxHQUFHLEVBQUUsR0FBRyxhQUFhLENBQUM7QUFDckMsUUFBUSxPQUFPLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLGFBQWEsQ0FBQztBQUMzQyxPQUFPLE1BQU07QUFDYixRQUFRLE9BQU8sR0FBRyxDQUFDLEdBQUcsYUFBYSxDQUFDO0FBQ3BDLFFBQVEsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNwQixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO0FBQ3ZDLFFBQVEsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLFFBQVEsR0FBRyxhQUFhLENBQUM7QUFDakc7QUFDQSxRQUFRLElBQUksS0FBSyxHQUFHLGFBQWEsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUU7QUFDbkUsVUFBVSxNQUFNLGVBQWUsR0FBRyxLQUFLLEdBQUcsYUFBYSxDQUFDO0FBQ3hELFVBQVUsYUFBYSxHQUFHLElBQUksQ0FBQztBQUMvQixVQUFVLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNyQixVQUFVLEdBQUcsQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLFVBQVUsT0FBTyxJQUFJLGVBQWUsQ0FBQztBQUNyQyxTQUFTLE1BQU0sSUFBSSxLQUFLLEtBQUssYUFBYSxFQUFFO0FBQzVDLFVBQVUsT0FBTyxJQUFJLENBQUMsS0FBSyxHQUFHLGFBQWEsSUFBSSxJQUFJLEdBQUcsUUFBUSxHQUFHLGFBQWEsQ0FBQztBQUMvRSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssS0FBSyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUU7QUFDdkUsUUFBUSxJQUFJLGNBQWMsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUN2QyxVQUFVLEdBQUcsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNwRCxTQUFTLE1BQU07QUFDZixVQUFVLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztBQUM3RjtBQUNBLFVBQVUsSUFBSSxNQUFNLEVBQUU7QUFDdEIsWUFBWSxNQUFNLGFBQWEsR0FBRyxPQUFPLEdBQUcsUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQztBQUN2RixZQUFZLE1BQU0sYUFBYSxHQUFHLE9BQU8sR0FBRyxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDO0FBQ3ZGLFlBQVksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztBQUNqSCxXQUFXO0FBQ1gsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxTQUFTLENBQUM7QUFDcEI7QUFDQSxNQUFNLElBQUksUUFBUSxFQUFFO0FBQ3BCLFFBQVEsU0FBUyxHQUFHLEtBQUssR0FBRyxpQkFBaUIsR0FBRyxPQUFPLEdBQUcsYUFBYSxDQUFDO0FBQ3hFLE9BQU8sTUFBTTtBQUNiLFFBQVEsU0FBUyxHQUFHLEtBQUssR0FBRyxpQkFBaUIsR0FBRyxPQUFPLEdBQUcsYUFBYSxDQUFDO0FBQ3hFLE9BQU87QUFDUDtBQUNBLE1BQU0sQ0FBQyxJQUFJLFNBQVMsQ0FBQztBQUNyQjtBQUNBLE1BQU0sSUFBSSxhQUFhLEVBQUU7QUFDekIsUUFBUSxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDdEIsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxRQUFRLEVBQUU7QUFDbEIsTUFBTSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQixLQUFLLE1BQU07QUFDWCxNQUFNLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQztBQUNsQyxLQUFLO0FBQ0w7QUFDQSxJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNsQixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNuQixJQUFJLE9BQU8sU0FBUyxDQUFDO0FBQ3JCLEdBQUc7QUFDSDtBQUNBLEVBQUUsYUFBYSxDQUFDLE1BQU0sRUFBRTtBQUN4QixJQUFJLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDekIsSUFBSSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ2pDLElBQUksTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztBQUM5QixJQUFJLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7QUFDdEMsSUFBSSxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDO0FBQ2hELElBQUksTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDOUMsSUFBSSxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO0FBQzVDLElBQUksTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztBQUM1QyxJQUFJLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLEdBQUcsYUFBYSxDQUFDO0FBQzFELElBQUksTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsb0JBQW9CLENBQUM7QUFDeEUsSUFBSSxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ3ZDLElBQUksTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixLQUFLLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUM7QUFDNUYsSUFBSSxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLGFBQWEsQ0FBQztBQUN2QztBQUNBLElBQUksSUFBSSxlQUFlLElBQUksUUFBUSxLQUFLLENBQUMsRUFBRTtBQUMzQyxNQUFNLE9BQU87QUFDYixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUM7QUFDM0MsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDZixJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDakQsSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDekM7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3ZDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QjtBQUNBLE1BQU0sSUFBSSxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUU7QUFDbkMsUUFBUSxhQUFhLEdBQUcsVUFBVSxHQUFHLEtBQUssR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzdELFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLFFBQVEsT0FBTyxDQUFDLENBQUMsSUFBSSxhQUFhLEdBQUcsVUFBVSxDQUFDO0FBQ2hELFFBQVEsU0FBUztBQUNqQixPQUFPO0FBQ1A7QUFDQSxNQUFNLE1BQU0sT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxXQUFXLEdBQUcsQ0FBQyxJQUFJLFdBQVcsQ0FBQztBQUN0RSxNQUFNLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDM0U7QUFDQSxNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUU7QUFDekIsUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsY0FBYyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztBQUN2RixRQUFRLFNBQVM7QUFDakIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7QUFDL0IsUUFBUSxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztBQUNyQyxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwQixRQUFRLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3RDLFFBQVEsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzdDLFFBQVEsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQy9DLFFBQVEsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3ZCLE9BQU87QUFDUDtBQUNBLE1BQU0sTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ2xGO0FBQ0EsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsR0FBRyxPQUFPLENBQUM7QUFDbEQsTUFBTSxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QixNQUFNLE9BQU8sQ0FBQyxDQUFDLElBQUksS0FBSyxHQUFHLFVBQVUsQ0FBQztBQUN0QyxLQUFLO0FBQ0w7QUFDQSxJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNsQixJQUFJLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO0FBQ2hDLEdBQUc7QUFDSDtBQUNBLEVBQUUsWUFBWSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRTtBQUNqQztBQUNBLEVBQUUscUJBQXFCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDNUQsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ2xELElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2hCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ25CLEdBQUc7QUFDSDtBQUNBLEVBQUUsaUJBQWlCLENBQUMsRUFBRSxFQUFFO0FBQ3hCLElBQUksSUFBSSxPQUFPLENBQUM7QUFDaEI7QUFDQSxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLGVBQWUsRUFBRTtBQUNuQyxNQUFNLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixNQUFNLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN2RixNQUFNLE1BQU0scUJBQXFCLEdBQUc7QUFDcEMsUUFBUSxvQkFBb0IsRUFBRSxHQUFHLElBQUk7QUFDckMsVUFBVSxPQUFPLElBQUksY0FBYyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3pGLFNBQVM7QUFDVCxPQUFPLENBQUM7QUFDUixNQUFNLE9BQU8sR0FBRyxJQUFJLGVBQWUsQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLHFCQUFxQixFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBQzdHLEtBQUssTUFBTTtBQUNYLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9DLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxPQUFPLENBQUM7QUFDbkIsR0FBRztBQUNIO0FBQ0EsRUFBRSxlQUFlLEdBQUc7QUFDcEIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDakUsR0FBRztBQUNIO0FBQ0EsRUFBRSxhQUFhLEdBQUc7QUFDbEIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDL0QsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDcEMsR0FBRztBQUNIO0FBQ0EsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUM3QixJQUFJLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbkQ7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztBQUNqQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztBQUNyQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUMzQixJQUFJLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbkQ7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztBQUMvQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztBQUNuQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztBQUNyQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxHQUFHLElBQUksRUFBRTtBQUNwQyxJQUFJLElBQUksT0FBTyxDQUFDO0FBQ2hCO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ3hDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9DLEtBQUssTUFBTTtBQUNYLE1BQU0sT0FBTyxHQUFHLElBQUksZUFBZSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDN0UsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDOUMsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLE1BQU0sRUFBRTtBQUNoQixNQUFNLE9BQU8sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQzlCLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxPQUFPLENBQUM7QUFDbkIsR0FBRztBQUNIO0FBQ0EsRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFO0FBQ3JCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7QUFDOUIsTUFBTSxPQUFPO0FBQ2IsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3pCLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2hCO0FBQ0EsSUFBSSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVDO0FBQ0EsSUFBSSxHQUFHLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsMEJBQTBCLEVBQUUsZUFBZSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNwSCxJQUFJLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQztBQUMvQztBQUNBLElBQUksSUFBSSxHQUFHLEVBQUU7QUFDYixNQUFNLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7QUFDaEMsTUFBTSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQ2pDLE1BQU0sTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUNuQztBQUNBLE1BQU0sTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDeEQ7QUFDQSxNQUFNLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzdEO0FBQ0EsTUFBTSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM1RDtBQUNBLE1BQU0sTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDakU7QUFDQSxNQUFNLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEQsTUFBTSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RELE1BQU0sTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RCxNQUFNLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEQsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2xELEtBQUssTUFBTTtBQUNYLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2xELEtBQUs7QUFDTDtBQUNBLElB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QUMsQ0FBQyxDQUFDO0FBQzlDLElBQUksTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9DLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3REO0FBQ0EsSUFBSSxLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDekMsTUFBTSxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDdEI7QUFDQSxNQUFNLEtBQUssTUFBTSxVQUFVLElBQUksT0FBTyxFQUFFO0FBQ3hDLFFBQVEsTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlDLFFBQVEsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQzlDLFFBQVEsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoQyxNQUFNLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUMxRSxNQUFNLFFBQVEsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzlDLE1BQU0sUUFBUSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekUsTUFBTSxRQUFRLENBQUMsWUFBWSxDQUFD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Q0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEs7QUFDQSxZQUFZLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDNUIsY0FBYyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0QsY0FBYyxNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDckQ7QUFDQSxjQUFjLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUMsZ0JBQWdCLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdELGVBQWU7QUFDZjtBQUNBLGNBQWMsU0FBUyxHQUFHLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUQsYUFBYTtBQUNiO0FBQ0EsWUFBWSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ3pDLFlBQVksTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUN4QyxZQUFZ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RSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyRSxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDckIsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNwQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDcEIsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3JCLElBQUksTUFBTSxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLElBQUksT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO0FBQzFCLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2hELEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO0FBQzdCLElBQUksTUFBTSxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FB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QUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNDLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1QyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlDLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3QyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNDLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM5QyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlDLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3QyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDNUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzlDLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMvQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVDLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM1QyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdDLE1BQU0sRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENB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Q0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixRQUFRLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1QixPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO0FBQ3JELE1BQU0sSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3JCLE1BQU0sTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM5QixNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztBQUNqQyxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDckMsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3BDLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQy9CLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNiLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzFDLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QyxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNiLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDeEIsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUN2QixNQUFNLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztBQUNqQyxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDckMsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3BDLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQy9CLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7QUFDdkMsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEIsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEI7QUFDQSxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDeEMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQztBQUMzQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFD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QUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN4QixNQUFNLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDOUIsTUFBTSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNuQyxNQUFNLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDeEMsTUFBTSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQy9DLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzNDLE1BQU0sRUFBRSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0FBQ2xDLE1BQU0sTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzFELE1BQU0sSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDdEMsTUFBTSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztBQUN0QyxNQUFNLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3JDLE1BQU0sSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNoQyxNQUFNLE9BQU8sSUFBSSxDQUFDO0FBQ2xCLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksRUFB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SyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVM7QUFDbEMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUIsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUIsWUFBWSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwQyxZQUFZLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JDLFlBQVksTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNqQyxZQUFZLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbEMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3hHLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU07QUFDL0IsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUIsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUIsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEMsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTTtBQUMvQixZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxQixZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxQixZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QyxZQUFZLE1BQU07QUFDbEI7QUFDQSxVQUFVLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPO0FBQ2hDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUIsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1QixZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25CLFlBQVksTUFBTTtBQUNsQjtBQUNBLFVBQVUsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVE7QUFDakMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RHLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUIsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1QixZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkIsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUTtBQUNqQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVCLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUIsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRixZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkIsWUFBWSxNQUFNO0FBQ2xCO0FBQ0EsVUFBVSxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUztBQUNsQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEIsWUFBWSxNQUFNO0FBQ2xCLFNBQVM7QUFD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Q0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ROLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxjQUFjLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUM5QixJQUFJLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEQsSUFBSSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hELElBQUksT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNwQixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8scUJBQXFCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNyQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QyxJQUFJLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0UsSUFBSSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUUsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTywwQkFBMEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzFDLElBQUksTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDekMsSUFBSSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3JELElBQUksTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwRCxJQUFJLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDcEQsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BLLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUU7QUFDN0IsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3hILEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2hDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkksR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLDZCQUE2QixDQUFDLENBQUMsRUFBRTtBQUMxQyxJQUFJLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0MsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEQsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEQsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEQsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFH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QUFDaEIsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakIsTUFBTSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDckcsTUFBTSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDckcsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN6QixJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzdCLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDN0IsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNuRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RyxHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNwQixNQUFNLHVCQUF1QixHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxN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QUcsRUFBRSxFQUFFLGVBQWUsR0FBRyxLQUFLLEVBQUU7QUFDMUUsRUFBRSxJQUFJLEdBQUcsQ0FBQyxlQUFlLElBQUksT0FBTyxJQUFJLEtBQUssV0FBVyxJQUFJLENBQUMsZUFBZSxFQUFFO0FBQzlFLElBQUksT0FBTyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDaEQsTUFBTSxJQUFJLEVBQUUsV0FBVztBQUN2QixLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ1IsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLE1BQU0sR0FBRyxtRUFBbUUsQ0FBQztBQUNyRixFQUFFLElBQUksTUFBTSxHQUFHLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM3QztBQUNBLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3BELElBQUksTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5QixJQUFJLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2xDLElBQUksTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsSUFBSSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQztBQUN0QixVQUFVLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdkMsSUFBSSxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFB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QUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoRCxJQUFJLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkM7QUFDQSxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtBQUMvTixNQUFNLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtBQUNyQixRQUFRLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxPQUFPO0FBQ1A7QUFDQSxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQyxNQUFNLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDM0IsSUFBSSxPQUFPLEdBQUcsQ0FBQztBQUNmLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRTtBQUMxQixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDbEQsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekIsQ0FBQztBQUNEO0FBQ0EsU0FBUyxVQUFVLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO0FBQ2hELEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNkLElBQUksT0FBTztBQUNYLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3BCO0FBQ0EsRUFBRSxJQUFJLElBQUksV0FBVyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRTtBQUNyQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUM1QixNQUFNLE9BQU87QUFDYixLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7QUFDbkIsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUIsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDNUIsSUFBSSxLQUFLLE1BQU0sT0FBTyxJQUFJLEtBQUssRUFBRTtBQUNqQyxNQUFNLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMvQyxLQUFLO0FBQ0wsR0FBRyxNQUFNLElBQUksS0FBSyxZQUFZLFdBQVcsQ0FBQyxJQUFJLEVBQUU7QUFDaEQsSUFBSSxJQUFJLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFlBQVksQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDbEYsTUFBTSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDLE1BQU0sSUFBSSxJQUFJLENBQUM7QUFDZjtBQUNBLE1BQU0sSUFBSSxJQUFJLFdBQVcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDekMsUUFBUSxJQUFJLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQzlCLE9BQU8sTUFBTTtBQUNiLFFBQVEsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNsQixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksR0FBRyxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNoRDtBQUNBLE1BQU0sSUFBSSxJQUFJLEVBQUU7QUFDaEIsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hCLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDMUQsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLE1BQU0sRUFBRTtBQUNkLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMzQixHQUFHO0FBQ0gsQ0FBQztBQUNEO0FBQ0EsU0FBUyxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7QUFDL0MsRUFBRSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RDLEVBQUUsTUFBTSxzQkFBc0IsR0FBRyxzQkFBc0IsQ0FBQztBQUN4RCxJQUFJLElBQUk7QUFDUixJQUFJLEdBQUcsRUFBRSxJQUFJO0FBQ2IsSUFBSSxhQUFhLEVBQUUsS0FBSztBQUN4QixHQUFHLENBQUMsQ0FBQztBQUNMO0FBQ0EsRUFBRSxJQUFJLHNCQUFzQixFQUFFO0FBQzlCLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxzQkFBc0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDakUsTUFBTSxNQUFNLGlCQUFpQixHQUFHLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0FBQ0EsTUFBTSxJQUFJLEVBQUUsaUJBQWlCLFlBQVksV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQzVELFFBQVEsU0FBUztBQUNqQixPQUFPO0FBQ1A7QUFDQSxNQUFNLEtBQUssTUFBTSxHQUFHLElBQUksaUJBQWlCLENBQUMsT0FBTyxFQUFFLEVBQUU7QUFDckQsUUFBUSxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEM7QUFDQSxRQUFRLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDckIsVUFBVSxTQUFTO0FBQ25CLFNBQVM7QUFDVDtBQUNBLFFBQVEsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pELFFBQVEsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDakQsUUFBUSxNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7QUFDeEI7QUFDQSxRQUFRLFVBQVUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNwRDtBQUNBLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUM3QixVQUFVLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakMsU0FBUztBQUNULE9BQU87QUFDUCxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDckIsSUFBSSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDLElBQUksTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDN0MsSUFBSSxNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7QUFDcEI7QUFDQSxJQUFJLFVBQVUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNoRDtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUN6QixNQUFNLE9BQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQzVCLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQzdELENBQUM7QUFDRDtBQUNBLE1BQU0sV0FBVyxHQUFHO0FBQ3BCLEVBQUUsSUFBSSxFQUFFLE1BQU07QUFDZCxFQUFFLElBQUksRUFBRSxNQUFNO0FBQ2QsRUFBRSxJQUFJLEVBQUUsT0FBTztBQUNmLEVBQUUsSUFBSSxFQUFFLFFBQVE7QUFDaEIsRUFBRSxJQUFJLEVBQUUsUUFBUTtBQUNoQixDQUFDLENBQUM7QUFDRjtBQUNBLFNBQVMsaUJBQWlCLENBQUMsR0FBRyxFQUFFO0FBQ2hDLEVBQUUsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLEVBQUUsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCO0FBQ0EsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2hELElBQUksTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQztBQUNBLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUU7QUFDdEMsTUFBTSxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkM7QUFDQSxNQUFNLElBQUksTUFBTSxFQUFFO0FBQ2xCLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO0FBQ3ZCLFVBQVUsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9DLFNBQVM7QUFDVDtBQUNBLFFBQVEsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM1QixRQUFRLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLE9BQU87QUFDUCxLQUFLLE1BQU07QUFDWCxNQUFNLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtBQUNyQixRQUFRLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxPQUFPO0FBQ1A7QUFDQSxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVEO0FBQ0EsTUFBTSxJQUFJLElBQUksR0FBRyxNQUFNLEtBQUssSUFBSSxHQUFHLE1BQU0sSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLEVBQUU7QUFDN0QsUUFBUSxDQUFDLEVBQUUsQ0FBQztBQUNaLE9BQU87QUFDUDtBQUNBLE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUMzQixJQUFJLE9BQU8sR0FBRyxDQUFDO0FBQ2YsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFO0FBQzFCLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNsRCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6QixDQUFDO0FBQ0Q7QUFDQSxTQUFTLGVBQWUsQ0FBQyxXQUFXLEVBQUU7QUFDdEMsRUFBRSxNQUFNLHdCQUF3QixHQUFHLElBQUksQ0FBQztBQUN4QyxFQUFFLE1BQU0sdUJBQXVCLEdBQUcsS0FBSyxDQUFDO0FBQ3hDLEVBQUUsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3pKLEVBQUUsTUFBTTtBQUNSLElBQUksVUFBVTtBQUNkLElBQUksVUFBVTtBQUNkLElBQUksV0FBVztBQUNmLEdBQUcsR0FBRyxXQUFXLENBQUM7QUFDbEI7QUFDQSxFQUFFLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtBQUNqQyxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDbkUsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRixNQUFNLE9BQU8sS0FBSyxDQUFDO0FBQ25CLEtBQUs7QUFDTCxHQUFHLE1BQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO0FBQ3hDLElBQUksSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUNuRSxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLDRDQUE0QyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BGLE1BQU0sT0FBTyxLQUFLLENBQUM7QUFDbkIsS0FBSztBQUNMLEdBQUcsTUFBTTtBQUNULElBQUksS0FBSyxNQUFNLEtBQUssSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFO0FBQ3BELE1BQU0sSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ3RFLFFBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsdURBQXVELEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakcsUUFBUSxPQUFPLEtBQUssQ0FBQztBQUNyQixPQUFPO0FBQ1AsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxNQUFNLEdBQUcsVUFBVSxHQUFHLFVBQVUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDekQsRUFBRSxXQUFXLENBQUMsVUFBVSxHQUFHLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLEdBQUcsdUJBQXVCLENBQUM7QUFDakcsRUFBRSxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDeEMsRUFBRSxXQUFXLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLElBQUksS0FBSyxHQUFHLEVBQUUsR0FBRyx3QkFBd0IsR0FBRyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDMUgsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFDRDtBQUNBLFNBQVMsWUFBWSxDQUFDLEdBQUcsRUFBRTtBQUMzQixFQUFFLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxlQUFlLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUFDaEYsRUFBRSxNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcscURBQXFELEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdEosRUFBRSxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hDO0FBQ0EsRUFBRSxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDekIsSUFBSSxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsSUFBSSxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFDMUI7QUFDQSxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssZUFBZSxFQUFFO0FBQzdELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQztBQUN2QixLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU87QUFDWCxNQUFNLEdBQUc7QUFDVCxNQUFNLFNBQVM7QUFDZixLQUFLLENBQUM7QUFDTixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUNEO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTyxDQUFDLHVCQUF1QixFQUFFLE9BQU8sRUFBRSxtQkFBbUIsS0FBSztBQUNsRTtBQUNBO0FBQ0E7QUFDQSxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxZQUFZLEdBQUc7QUFDOUMsRUFBRSxLQUFLLEVBQUUsSUFBSTtBQUNiLENBQUMsRUFBRSxDQUFDO0FBQ0osT0FBTyxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDcEU7QUFDQSxJQUFJLFlBQVksR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQztBQUNBLElBQUksS0FBSyxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DO0FBQ0EsTUFBTSxNQUFNLFNBQVMsWUFBWSxDQUFDLFVBQVUsQ0FBQztBQUM3QyxFQUFFLFdBQVcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7QUFDaEQsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxXQUFXLFlBQVksVUFBVSxHQUFHLFdBQVcsR0FBRyxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUMvRixJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxJQUFJLENBQUMsQ0FBQztBQUM1QixJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMxQixJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxHQUFHLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUNuRCxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3JCLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxNQUFNLEdBQUc7QUFDZixJQUFJLE9BQU8sSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ2pDLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxPQUFPLEdBQUc7QUFDaEIsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0FBQzdCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxHQUFHO0FBQ1osSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRTtBQUM5QixNQUFNLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDaEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDbEMsR0FBRztBQUNIO0FBQ0EsRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLFlBQVksR0FBRyxLQUFLLEVBQUU7QUFDekMsSUFBSSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzdCLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUN6QixJQUFJLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDNUI7QUFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakIsTUFBTSxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNuRCxNQUFNLE9BQU8sWUFBWSxHQUFHLElBQUksaUJBQWlCLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQ3ZFLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUMzQjtBQUNBLElBQUksSUFBSSxHQUFHLEdBQUcsTUFBTSxFQUFFO0FBQ3RCLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUNuQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ25CLElBQUksTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDOUMsSUFBSSxPQUFPLFlBQVksR0FBRyxJQUFJLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUNyRSxHQUFHO0FBQ0g7QUFDQSxFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFO0FBQzNCLElBQUksSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO0FBQ25CLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNoQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUU7QUFDeEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNyQixLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzNDLEdBQUc7QUFDSDtBQUNBLEVBQUUsS0FBSyxHQUFHO0FBQ1YsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDMUIsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLEdBQUc7QUFDZCxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUMxQixHQUFHO0FBQ0g7QUFDQSxFQUFFLGFBQWEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksR0FBRyxJQUFJLEVBQUU7QUFDNUMsSUFBSSxPQUFPLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDOUQsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDeEI7QUFDQSxNQUFNLFlBQVksU0FBUyxNQUFNLENBQUM7QUFDbEMsRUFBRSxXQUFXLENBQUMsR0FBRyxFQUFFO0FBQ25CLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3pDLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE9BQU8sQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0FBQ3BDO0FBQ0EsTUFBTSxVQUFVLFNBQVMsTUFBTSxDQUFDO0FBQ2hDLEVBQUUsV0FBVyxHQUFHO0FBQ2hCLElBQUksS0FBSyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsT0FBTyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7QUFDaEM7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPLENBQUMsdUJBQXVCLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixLQUFLO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFlBQVksR0FBRztBQUM5QyxFQUFFLEtBQUssRUFBRSxJQUFJO0FBQ2IsQ0FBQyxFQUFFLENBQUM7QUFDSixPQUFPLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDNUM7QUFDQSxJQUFJLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQztBQUNBLElBQUksV0FBVyxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pDO0FBQ0EsSUFBSSxXQUFXLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekM7QUFDQSxJQUFJLFVBQVUsR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6QztBQUNBLElBQUksT0FBTyxHQUFHLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RDO0FBQ0EsSUFBSSxXQUFXLEdBQUcsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUM7QUFDQSxJQUFJLFlBQVksR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQztBQUNBLElBQUksT0FBTyxHQUFHLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RDO0FBQ0EsSUFBSSxRQUFRLEdBQUcsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkM7QUFDQSxJQUFJLE9BQU8sR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QztBQUNBLElBQUksY0FBYyxHQUFHLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdDO0FBQ0EsSUFBSSxjQUFjLEdBQUcsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0M7QUFDQSxJQUFJLFVBQVUsR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6QztBQUNBLElBQUksY0FBYyxHQUFHLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdDO0FBQ0EsSUFBSSxZQUFZLEdBQUcsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDM0M7QUFDQSxJQUFJLFFBQVEsR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2QztBQUNBLElBQUksS0FBSyxHQUFHLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BDO0FBQ0EsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLENBQUM7QUFDOUIsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzlDO0FBQ0EsTUFBTSxJQUFJLENBQUM7QUFDWCxFQUFFLFdBQVcsQ0FBQztBQUNkLElBQUksVUFBVTtBQUNkLElBQUksSUFBSTtBQUNSLElBQUksU0FBUztBQUNiLElBQUksUUFBUTtBQUNaLElBQUksR0FBRztBQUNQLElBQUksZUFBZTtBQUNuQixJQUFJLFNBQVM7QUFDYixJQUFJLGdCQUFnQjtBQUNwQixJQUFJLHFCQUFxQjtBQUN6QixJQUFJLGdCQUFnQjtBQUNwQixJQUFJLGdCQUFnQjtBQUNwQixJQUFJLFVBQVU7QUFDZCxHQUFHLEVBQUU7QUFDTCxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQ2pDLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFDL0IsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUM3QixJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3JCLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbkIsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztBQUMvQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztBQUM3QyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxxQkFBcUIsQ0FBQztBQUN2RCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztBQUM3QyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztBQUM3QyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsZ0JBQWdCLENBQUM7QUFDeEQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO0FBQ2pDLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7QUFDakMsSUFBSSxNQUFNLFVBQVUsR0FBRztBQUN2QixNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ1osS0FBSyxDQUFDO0FBQ04sSUFBSSxJQUFJLENBQUMsZUFBZSxHQUFHLGNBQWMsZUFBZSxDQUFDO0FBQ3pELE1BQU0sT0FBTyxXQUFXLEdBQUc7QUFDM0IsUUFBUSxPQUFPLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNuRCxPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sWUFBWSxHQUFHO0FBQzVCLFFBQVEsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLE9BQU87QUFDUDtBQUNBLEtBQUssQ0FBQztBQUNOLEdBQUc7QUFDSDtBQUNBLEVBQUUsdUJBQXVCLENBQUMsR0FBRyxFQUFFLFFBQVEsR0FBRyxLQUFLLEVBQUU7QUFDakQsSUFBSSxNQUFNLEtBQUssR0FBRyxJQUFJLFdBQVcsQ0FBQyxzQkFBc0IsRUFBRTtBQUMxRCxNQUFNLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUTtBQUN6QixNQUFNLEdBQUc7QUFDVCxNQUFNLFFBQVE7QUFDZCxNQUFNLGFBQWEsRUFBRSxLQUFLO0FBQzFCLEtBQUssQ0FBQyxDQUFDO0FBQ1A7QUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQy9CLE1BQU0sT0FBTyxLQUFLLENBQUM7QUFDbkIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ2xFLE1BQU0sT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ2xDLE1BQU0sSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO0FBQ3JCLE1BQU0sU0FBUyxFQUFFLEtBQUs7QUFDdEIsS0FBSyxDQUFDLENBQUM7QUFDUCxHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksT0FBTyxHQUFHO0FBQ2hCLElBQUksT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUM5QyxHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksU0FBUyxHQUFHO0FBQ2xCLElBQUksT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsV0FBVyxDQUFDLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNySCxHQUFHO0FBQ0g7QUFDQSxFQUFFLGVBQWUsQ0FBQyxJQUFJLEVBQUU7QUFDeEIsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDdEIsTUFBTSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQy9CLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN6RDtBQUNBLElBQUksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ2hELE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUMxRCxRQUFRLE9BQU8sR0FBRyxDQUFDO0FBQ25CLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQy9DLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLFFBQVEsR0FBRztBQUNqQixJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsSUFBSSxvQkFBb0IsQ0FBQyxDQUFDO0FBQ3pHLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxPQUFPLEdBQUc7QUFDaEIsSUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2hHLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxRQUFRLEdBQUc7QUFDakIsSUFBSSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUM1QztBQUNBLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFO0FBQzVDLE1BQU0sR0FBRyxHQUFHLGlCQUFpQixDQUFDO0FBQzlCLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNwRCxHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksSUFBSSxHQUFHO0FBQ2IsSUFBSSxNQUFNO0FBQ1YsTUFBTSxPQUFPO0FBQ2IsTUFBTSxRQUFRO0FBQ2QsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNiLElBQUksSUFBSSxJQUFJLENBQUM7QUFDYjtBQUNBLElBQUksSUFBSSxPQUFPLEtBQUssUUFBUSxJQUFJLElBQUksS0FBSyxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLEVBQUU7QUFDNUUsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDO0FBQ3RCLEtBQUssTUFBTTtBQUNYLE1BQU0sTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzFEO0FBQ0EsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNqRSxRQUFRLElBQUksR0FBRyxHQUFHLENBQUM7QUFDbkIsT0FBTyxNQUFNO0FBQ2IsUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsNENBQTRDLENBQUMsQ0FBQztBQUN0RSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksSUFBSSxRQUFRLENBQUMsQ0FBQztBQUM3RCxHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksTUFBTSxHQUFHO0FBQ2YsSUFBSSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdEO0FBQ0EsSUFBSSxJQUFJLE1BQU0sR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFO0FBQzNCLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNqQixLQUFLLE1BQU0sSUFBSSxNQUFNLElBQUksR0FBRyxFQUFFO0FBQzlCLE1BQU0sTUFBTSxJQUFJLEdBQUcsQ0FBQztBQUNwQixLQUFLLE1BQU0sSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQzNCLE1BQU0sTUFBTSxHQUFHLENBQUMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQzFDLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNyRCxHQUFHO0FBQ0g7QUFDQSxFQUFFLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO0FBQzVDLElBQUksSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFO0FBQzVDLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtBQUN6QyxRQUFRLFNBQVMsRUFBRSxLQUFLLENBQUMsb0JBQW9CLENBQUMscUJBQXFCO0FBQ25FLE9BQU8sQ0FBQyxDQUFDO0FBQ1QsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyx3Q0FBd0MsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3pGLE1BQU0sT0FBTztBQUNiLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxNQUFNLENBQUM7QUFDakIsR0FBRztBQUNIO0FBQ0EsRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUU7QUFDNUIsSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJO0FBQ25FLE1BQU0sSUFBSSxPQUFPLFlBQVksWUFBWSxDQUFDLFVBQVUsRUFBRTtBQUN0RCxRQUFRLE9BQU8sT0FBTyxDQUFDO0FBQ3ZCLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQ2xDLFFBQVEsT0FBTyxJQUFJLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUM3RyxPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sSUFBSSxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDdEMsS0FBSyxDQUFDLENBQUM7QUFDUCxHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksT0FBTyxHQUFHO0FBQ2hCLElBQUksT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVSxHQUFHO0FBQ2hFLE1BQU0sSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDMUQsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ2QsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRTtBQUN6QyxJQUFJLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxVQUFVLENBQUMsZ0JBQWdCLENBQUM7QUFDN0QsTUFBTSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7QUFDckIsTUFBTSxPQUFPO0FBQ2IsTUFBTSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7QUFDL0IsTUFBTSxTQUFTLEVBQUUsSUFBSSxDQUFDLGVBQWU7QUFDckMsTUFBTSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7QUFDL0IsTUFBTSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO0FBQzdDLE1BQU0scUJBQXFCLEVBQUUsSUFBSSxDQUFDLHFCQUFxQjtBQUN2RCxNQUFNLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0I7QUFDN0MsTUFBTSxPQUFPLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtBQUNwQyxLQUFLLENBQUMsQ0FBQztBQUNQLElBQUksT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsV0FBVyxFQUFFO0FBQy9ELE1BQU0sTUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFDO0FBQ2pDO0FBQ0EsTUFBTSxLQUFLLE1BQU0sVUFBVSxJQUFJLFdBQVcsRUFBRTtBQUM1QyxRQUFRLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLEVBQUU7QUFDMUQsVUFBVSxTQUFTO0FBQ25CLFNBQVM7QUFDVDtBQUNBLFFBQVEsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLE1BQU0sRUFBRTtBQUNoSCxVQUFVLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSx5Q0FBeUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzRyxVQUFVLE9BQU8sSUFBSSxDQUFDO0FBQ3RCLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDWixPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUMxQyxLQUFLLENBQUMsQ0FBQztBQUNQLEdBQUc7QUFDSDtBQUNBLEVBQUUsYUFBYSxDQUFDLElBQUksRUFBRTtBQUN0QixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7QUFDaEMsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ3hFLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU07QUFDNUMsTUFBTSxNQUFNLFlBQVksR0FBRyxJQUFJLGNBQWMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVGLE1BQU0sT0FBTyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDakMsS0FBSyxDQUFDLENBQUM7QUFDUCxHQUFHO0FBQ0g7QUFDQSxFQUFFLGVBQWUsQ0FBQztBQUNsQixJQUFJLE9BQU87QUFDWCxJQUFJLElBQUk7QUFDUixJQUFJLElBQUk7QUFDUixJQUFJLE1BQU07QUFDVixJQUFJLFFBQVE7QUFDWixJQUFJLGlCQUFpQixHQUFHLElBQUk7QUFDNUIsR0FBRyxFQUFFO0FBQ0wsSUFBSSxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNoRSxJQUFJLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDcEksSUFBSSxNQUFNLGdCQUFnQixHQUFHLElBQUksVUFBVSxDQUFDLGdCQUFnQixDQUFDO0FBQzdELE1BQU0sSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO0FBQ3JCLE1BQU0sT0FBTztBQUNiLE1BQU0sU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO0FBQy9CLE1BQU0sU0FBUyxFQUFFLElBQUksQ0FBQyxlQUFlO0FBQ3JDLE1BQU0sU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO0FBQy9CLE1BQU0sZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtBQUM3QyxNQUFNLHFCQUFxQixFQUFFLElBQUksQ0FBQyxxQkFBcUI7QUFDdkQsTUFBTSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO0FBQzdDLE1BQU0sT0FBTyxFQUFFLElBQUksQ0FBQyxnQkFBZ0I7QUFDcEMsS0FBSyxDQUFDLENBQUM7QUFDUCxJQUFJLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxvQkFBb0IsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7QUFDL0UsSUFBSSxNQUFNLGVBQWUsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSztBQUNuRSxNQUFNLE1BQU0sTUFBTSxHQUFHLElBQUksY0FBYyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbkUsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFO0FBQ3RDLFFBQVEsWUFBWSxFQUFFLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztBQUMzRixRQUFRLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztBQUNqQyxRQUFRLFFBQVE7QUFDaEIsT0FBTyxDQUFDLENBQUM7QUFDVCxNQUFNLE9BQU8sZ0JBQWdCLENBQUMsZUFBZSxDQUFDO0FBQzlDLFFBQVEsTUFBTSxFQUFFLGFBQWE7QUFDN0IsUUFBUSxJQUFJO0FBQ1osUUFBUSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7QUFDakMsUUFBUSxZQUFZLEVBQUUsTUFBTTtBQUM1QixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWTtBQUMxQixRQUFRLE9BQU8sTUFBTSxDQUFDO0FBQ3RCLE9BQU8sQ0FBQyxDQUFDO0FBQ1QsS0FBSyxDQUFDLENBQUM7QUFDUCxJQUFJLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxFQUFFO0FBQzdHLE1BQU0sSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixDQUFDLG1CQUFtQixFQUFFO0FBQzlGLFFBQVEsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvQixRQUFRLE9BQU87QUFDZixVQUFVLE1BQU0sRUFBRSxVQUFVLENBQUMsV0FBVztBQUN4QyxTQUFTLENBQUM7QUFDVixPQUFPO0FBQ1A7QUFDQSxNQUFNLE1BQU0sV0FBVyxHQUFHLENBQUMsRUFBRSxNQUFNLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDO0FBQ2xGLFlBQVksU0FBUyxHQUFHLENBQUMsRUFBRSxNQUFNLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQztBQUNsRSxZQUFZLGFBQWEsR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFHLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUM7QUFDMUUsWUFBWSxXQUFXLEdBQUcsQ0FBQyxFQUFFLE1BQU0sR0FBRyxLQUFLLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdkUsTUFBTSxNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUM7QUFDaEM7QUFDQSxNQUFNLEtBQUssTUFBTSxVQUFVLElBQUksV0FBVyxFQUFFO0FBQzVDLFFBQVEsSUFBSSxTQUFTLElBQUksYUFBYSxJQUFJLFVBQVUsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsSUFBSSxXQUFXLElBQUksVUFBVSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO0FBQ3BKLFVBQVUsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLGdCQUFnQixFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsTUFBTSxFQUFFO0FBQ2pKLFlBQVksSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLG9EQUFvRCxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3hILFlBQVksT0FBTyxJQUFJLENBQUM7QUFDeEIsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUNkLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxPQUFPLEVBQUU7QUFDakUsUUFBUSxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDekQ7QUFDQSxRQUFRLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFO0FBQ3RDLFVBQVUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN2QyxTQUFTO0FBQ1Q7QUFDQSxRQUFRLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDdkQsUUFBUSxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQy9CLFFBQVEsT0FBTztBQUNmLFVBQVUsTUFBTSxFQUFFLFVBQVUsQ0FBQyxXQUFXO0FBQ3hDLFNBQVMsQ0FBQztBQUNWLE9BQU8sQ0FBQyxDQUFDO0FBQ1QsS0FBSyxDQUFDLENBQUM7QUFDUCxHQUFHO0FBQ0g7QUFDQSxFQUFFLGtCQUFrQixDQUFDO0FBQ3JCLElBQUksT0FBTztBQUNYLElBQUksSUFBSTtBQUNSLElBQUksbUJBQW1CO0FBQ3ZCLElBQUksb0JBQW9CO0FBQ3hCLElBQUksSUFBSTtBQUNSLElBQUksZ0JBQWdCO0FBQ3BCLEdBQUcsRUFBRTtBQUNMLElBQUksTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDaEUsSUFBSSxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ2hHLElBQUksTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLG9CQUFvQixFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQztBQUMvRSxJQUFJLE9BQU8sWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUs7QUFDbEQsTUFBTSxNQUFNLGdCQUFnQixHQUFHLElBQUksVUFBVSxDQUFDLGdCQUFnQixDQUFDO0FBQy9ELFFBQVEsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO0FBQ3ZCLFFBQVEsT0FBTztBQUNmLFFBQVEsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO0FBQ2pDLFFBQVEsU0FBUyxFQUFFLElBQUksQ0FBQyxlQUFlO0FBQ3ZDLFFBQVEsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO0FBQ2pDLFFBQVEsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtBQUMvQyxRQUFRLHFCQUFxQixFQUFFLElBQUksQ0FBQyxxQkFBcUI7QUFDekQsUUFBUSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO0FBQy9DLFFBQVEsT0FBTyxFQUFFLElBQUksQ0FBQyxnQkFBZ0I7QUFDdEMsT0FBTyxDQUFDLENBQUM7QUFDVCxNQUFNLE9BQU8sZ0JBQWdCLENBQUMsY0FBYyxDQUFDO0FBQzdDLFFBQVEsTUFBTSxFQUFFLGFBQWE7QUFDN0IsUUFBUSxJQUFJO0FBQ1osUUFBUSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7QUFDakMsUUFBUSxtQkFBbUI7QUFDM0IsUUFBUSxvQkFBb0I7QUFDNUIsUUFBUSxnQkFBZ0I7QUFDeEIsUUFBUSxJQUFJO0FBQ1osT0FBTyxDQUFDLENBQUM7QUFDVCxLQUFLLENBQUMsQ0FBQztBQUNQLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxhQUFhLEdBQUc7QUFDeEIsSUFBSSxNQUFNLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDakY7QUFDQSxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7QUFDekIsTUFBTSxPQUFPLElBQUksQ0FBQztBQUNsQixLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztBQUNoRyxJQUFJLE9BQU8sVUFBVSxDQUFDLFlBQVksQ0FBQztBQUNuQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLGdCQUFnQixDQUFDLGNBQWMsRUFBRTtBQUNuQyxJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksWUFBWSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2hGLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2pCLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxrQkFBa0IsQ0FBQyxNQUFNLEVBQUU7QUFDN0IsSUFBSSxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxXQUFXLEVBQUU7QUFDL0QsTUFBTSxNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUM7QUFDakM7QUFDQSxNQUFNLElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDcEMsUUFBUSxPQUFPLGVBQWUsQ0FBQztBQUMvQixPQUFPO0FBQ1A7QUFDQSxNQUFNLE1BQU0sU0FBUyxHQUFHLENBQUMsRUFBRSxNQUFNLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQztBQUNsRSxZQUFZLGFBQWEsR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFHLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUM7QUFDMUUsWUFBWSxXQUFXLEdBQUcsQ0FBQyxFQUFFLE1BQU0sR0FBRyxLQUFLLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdkU7QUFDQSxNQUFNLEtBQUssTUFBTSxVQUFVLElBQUksV0FBVyxFQUFFO0FBQzVDLFFBQVEsSUFBSSxTQUFTLElBQUksYUFBYSxJQUFJLFVBQVUsQ0FBQyxRQUFRLElBQUksV0FBVyxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUU7QUFDdEcsVUFBVSxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRCxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLGVBQWUsQ0FBQztBQUM3QixLQUFLLENBQUMsQ0FBQztBQUNQLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxXQUFXLEdBQUc7QUFDcEIsSUFBSSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDMUQ7QUFDQSxJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDdkYsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLGtCQUFrQixHQUFHO0FBQzNCLElBQUksTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU07QUFDckYsTUFBTSxNQUFNLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztBQUNwQztBQUNBLE1BQU0sS0FBSyxNQUFNLGFBQWEsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO0FBQ3BELFFBQVEsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLE1BQU0sRUFBRTtBQUNySyxVQUFVLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLHFCQUFxQixFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlELFVBQVUsT0FBTyxJQUFJLENBQUM7QUFDdEIsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUNaLE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsV0FBVyxFQUFFO0FBQ3pFLFFBQVEsT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDOUQsT0FBTyxDQUFDLENBQUM7QUFDVCxLQUFLLENBQUMsQ0FBQztBQUNQLElBQUksT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFLGlCQUFpQixDQUFDLENBQUM7QUFDNUUsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLFNBQVMsR0FBRztBQUNsQixJQUFJLE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFDekcsSUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pELEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3BCLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM1RSxNQUFNLG1CQUFtQixHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25HLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDOUUsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLENBQUM7QUFDckMsTUFBTSxpQkFBaUIsR0FBRyxrRUFBa0UsQ0FBQztBQUM3RixNQUFNLHlCQUF5QixHQUFHLGFBQWEsQ0FBQztBQUNoRDtBQUNBLFNBQVMsSUFBSSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsS0FBSyxHQUFHLElBQUksRUFBRSxTQUFTLEdBQUcsS0FBSyxFQUFFO0FBQ2xFLEVBQUUsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztBQUMzQyxFQUFFLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUMsRUFBRSxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLGVBQWUsQ0FBQztBQUN4RDtBQUNBLEVBQUUsSUFBSSxVQUFVLElBQUksQ0FBQyxFQUFFO0FBQ3ZCLElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLFNBQVMsRUFBRTtBQUNqQixJQUFJLE1BQU0sWUFBWSxHQUFHLGVBQWUsR0FBRyxDQUFDLENBQUM7QUFDN0MsSUFBSSxJQUFJLEdBQUcsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNuQztBQUNBLElBQUksT0FBTyxHQUFHLElBQUksWUFBWSxFQUFFO0FBQ2hDLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCO0FBQ0EsTUFBTSxPQUFPLENBQUMsR0FBRyxlQUFlLElBQUksU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxFQUFFO0FBQ3hGLFFBQVEsQ0FBQyxFQUFFLENBQUM7QUFDWixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksQ0FBQyxJQUFJLGVBQWUsRUFBRTtBQUNoQyxRQUFRLE1BQU0sQ0FBQyxHQUFHLElBQUksR0FBRyxHQUFHLFlBQVksQ0FBQztBQUN6QyxRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCLE9BQU87QUFDUDtBQUNBLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDWixLQUFLO0FBQ0wsR0FBRyxNQUFNO0FBQ1QsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDaEI7QUFDQSxJQUFJLE9BQU8sR0FBRyxJQUFJLFVBQVUsRUFBRTtBQUM5QixNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoQjtBQUNBLE1BQU0sT0FBTyxDQUFDLEdBQUcsZUFBZSxJQUFJLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3pFLFFBQVEsQ0FBQyxFQUFFLENBQUM7QUFDWixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksQ0FBQyxJQUFJLGVBQWUsRUFBRTtBQUNoQyxRQUFRLE1BQU0sQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDO0FBQzFCLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsT0FBTztBQUNQO0FBQ0EsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNaLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUNEO0FBQ0EsTUFBTSxXQUFXLENBQUM7QUFDbEIsRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRTtBQUMvQixJQUFJLElBQUksTUFBTSxDQUFDO0FBQ2Y7QUFDQSxJQUFJLElBQUksSUFBSSxXQUFXLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxFQUFFO0FBQ3hDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUNuQixLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDOUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZDLEtBQUssTUFBTTtBQUNYLE1BQU0sTUFBTSxJQUFJLEtBQUssQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO0FBQzVELEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtBQUM1QixNQUFNLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMscURBQXFELENBQUMsQ0FBQztBQUNqRyxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQ2pDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDekIsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDbkQsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7QUFDbkMsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUN6QixJQUFJLE1BQU0sVUFBVSxHQUFHO0FBQ3ZCLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDYixLQUFLLENBQUM7QUFDTixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNO0FBQ2xDLE1BQU0sT0FBTyxRQUFRLEdBQUc7QUFDeEIsUUFBUSxPQUFPLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxZQUFZLEdBQUc7QUFDNUIsUUFBUSxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkMsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLFdBQVcsR0FBRztBQUMzQixRQUFRLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSx1Q0FBdUMsQ0FBQyxDQUFDO0FBQ3hFLE9BQU87QUFDUDtBQUNBLE1BQU0sT0FBTyxZQUFZLEdBQUc7QUFDNUIsUUFBUSxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsd0NBQXdDLENBQUMsQ0FBQztBQUN6RSxPQUFPO0FBQ1A7QUFDQSxLQUFLLENBQUM7QUFDTixHQUFHO0FBQ0g7QUFDQSxFQUFFLEtBQUssQ0FBQyxZQUFZLEVBQUU7QUFDdEIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNsQyxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BFO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFO0FBQzlCLE1BQU0sSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztBQUMzQyxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLGFBQWEsR0FBRztBQUN0QixJQUFJLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQztBQUM3QjtBQUNBLElBQUksSUFBSTtBQUNSLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNoRSxLQUFLLENBQUMsT0FBTyxHQUFHLEVBQUU7QUFDbEIsTUFBTSxJQUFJLEdBQUcsWUFBWSxXQUFXLENBQUMsb0JBQW9CLEVBQUU7QUFDM0QsUUFBUSxNQUFNLEdBQUcsQ0FBQztBQUNsQixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMzQixLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDbkUsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLFNBQVMsR0FBRztBQUNsQixJQUFJLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDL0IsSUFBSSxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDdEI7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtBQUM1QixNQUFNLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNyQjtBQUNBLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLEVBQUU7QUFDMUMsUUFBUSxTQUFTLEdBQUcsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUNsRCxPQUFPO0FBQ1AsS0FBSyxNQUFNO0FBQ1gsTUFBTSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7QUFDeEIsTUFBTSxNQUFNLGVBQWUsR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUM7QUFDekQsTUFBTSxJQUFJLEtBQUssR0FBRyxLQUFLO0FBQ3ZCLFVBQVUsR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFDM0I7QUFDQSxNQUFNLE9BQU8sQ0FBQyxLQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRTtBQUNoQyxRQUFRLEdBQUcsSUFBSSxJQUFJLEdBQUcsZUFBZSxDQUFDO0FBQ3RDO0FBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUU7QUFDckIsVUFBVSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLFNBQVM7QUFDVDtBQUNBLFFBQVEsTUFBTSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDekIsUUFBUSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDOUQsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLEtBQUssRUFBRTtBQUNqQixRQUFRLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsUUFBUSxJQUFJLEVBQUUsQ0FBQztBQUNmO0FBQ0EsUUFBUSxHQUFHO0FBQ1gsVUFBVSxFQUFFLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ2hDLFNBQVMsUUFBUSxJQUFJLFdBQVcsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDcEQ7QUFDQSxRQUFRLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNyQjtBQUNBLFFBQVEsT0FBTyxFQUFFLElBQUksSUFBSSxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUU7QUFDekMsVUFBVSxHQUFHLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6QyxVQUFVLEVBQUUsR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDaEMsU0FBUztBQUNUO0FBQ0EsUUFBUSxTQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN0QztBQUNBLFFBQVEsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUU7QUFDOUIsVUFBVSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzNELEdBQUc7QUFDSDtBQUNBLEVBQUUsV0FBVyxHQUFHO0FBQ2hCLElBQUksTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUMvQixJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNuQjtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsb0JBQW9CLENBQUMsRUFBRTtBQUM3QyxNQUFNLE9BQU87QUFDYixLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN2QixJQUFJLE1BQU0sc0JBQXNCLEdBQUcsRUFBRSxDQUFDO0FBQ3RDLElBQUksSUFBSSxPQUFPLEdBQUcsRUFBRTtBQUNwQixRQUFRLEVBQUUsQ0FBQztBQUNYO0FBQ0EsSUFBSSxPQUFPLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxJQUFJLEVBQUU7QUFDM0MsTUFBTSxJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksc0JBQXNCLEVBQUU7QUFDcEQsUUFBUSxNQUFNO0FBQ2QsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6QyxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQ3hCLE1BQU0sSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLGNBQWMsR0FBRztBQUNuQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMzQyxHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksUUFBUSxHQUFHO0FBQ2pCLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUU7QUFDeEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7QUFDbEMsS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtBQUNoQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQzFDLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7QUFDbkMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUM7QUFDeEMsS0FBSyxNQUFNO0FBQ1gsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7QUFDbEMsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BELEdBQUc7QUFDSDtBQUNBLEVBQUUsMEJBQTBCLENBQUMsTUFBTSxFQUFFLGNBQWMsR0FBRyxDQUFDLEVBQUU7QUFDekQsSUFBSSxNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUM7QUFDL0I7QUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ2hDLE1BQU0sT0FBTyxLQUFLLENBQUM7QUFDbkIsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJO0FBQ2pDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFDO0FBQ0EsTUFBTSxJQUFJLEVBQUUsS0FBSyxZQUFZLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNoRCxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQzdCLFFBQVEsSUFBSSxFQUFFLGNBQWMsR0FBRyxlQUFlLEVBQUU7QUFDaEQsVUFBVSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsNkRBQTZELENBQUMsQ0FBQztBQUN6RixVQUFVLE9BQU8sS0FBSyxDQUFDO0FBQ3ZCLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQztBQUNsRixPQUFPO0FBQ1A7QUFDQSxNQUFNLE1BQU0sV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzFFLE1BQU0sTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMxQyxNQUFNLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzVGLE1BQU0sT0FBTyxXQUFXLElBQUksV0FBVyxDQUFDO0FBQ3hDLEtBQUssQ0FBQyxDQUFDO0FBQ1AsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLE9BQU8sR0FBRztBQUNoQixJQUFJLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO0FBQzNDO0FBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQ25CLE1BQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BDLElBQUksTUFBTSxPQUFPLEdBQUc7QUFDcEIsTUFBTSxTQUFTLEVBQUUsRUFBRTtBQUNuQixNQUFNLFFBQVEsRUFBRSxFQUFFO0FBQ2xCLE1BQU0sUUFBUSxFQUFFLEVBQUU7QUFDbEIsTUFBTSxNQUFNLEVBQUUsRUFBRTtBQUNoQixNQUFNLGFBQWEsRUFBRSxFQUFFO0FBQ3ZCLE1BQU0sU0FBUyxFQUFFLEVBQUU7QUFDbkIsTUFBTSxVQUFVLEVBQUUsRUFBRTtBQUNwQixNQUFNLFVBQVUsRUFBRSxFQUFFO0FBQ3BCLEtBQUssQ0FBQztBQUNOO0FBQ0EsSUFBSSxJQUFJLElBQUksV0FBVyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUU7QUFDeEQsTUFBTSxJQUFJO0FBQ1YsUUFBUSxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLGtCQUFrQixFQUFFLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0FBQzVFLFFBQVEsT0FBTyxPQUFPLENBQUM7QUFDdkIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQ2xCLFFBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLDZCQUE2QixDQUFDLENBQUM7QUFDdkQsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQixPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUNqRCxNQUFNLE9BQU8sSUFBSSxDQUFDO0FBQ2xCLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3JELE1BQU0sSUFBSSxJQUFJLENBQUM7QUFDZjtBQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ25CLFFBQVEsSUFBSSxHQUFHLFNBQVMsQ0FBQztBQUN6QixPQUFPLE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRTtBQUMvQixRQUFRLElBQUksR0FBRyxVQUFVLENBQUM7QUFDMUIsT0FBTyxNQUFNO0FBQ2IsUUFBUSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDekMsUUFBUSxTQUFTO0FBQ2pCLE9BQU87QUFDUDtBQUNBLE1BQU0sTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BEO0FBQ0EsTUFBTSxJQUFJLENBQUMsSUFBSSxXQUFXLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDNUQsUUFBUSxTQUFTO0FBQ2pCLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSTtBQUNWLFFBQVEsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztBQUN4RSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDbEIsUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsNkJBQTZCLENBQUMsQ0FBQztBQUN2RCxRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sT0FBTyxDQUFDO0FBQ25CLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxVQUFVLEdBQUc7QUFDbkIsSUFBSSxJQUFJLElBQUksQ0FBQztBQUNiO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUU7QUFDeEgsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUMxQixLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSSxHQUFHLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUM5RixHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksU0FBUyxHQUFHO0FBQ2xCLElBQUksT0FBTyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDO0FBQy9ELEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxVQUFVLEdBQUc7QUFDbkIsSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDL0QsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLGFBQWEsR0FBRztBQUN4QixJQUFJLE1BQU0sYUFBYSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDM0U7QUFDQSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7QUFDeEIsTUFBTSxPQUFPO0FBQ2IsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDekMsSUFBSSxNQUFNLFlBQVksR0FBRyxJQUFJLGNBQWMsQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDekYsSUFBSSxNQUFNLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM5QixJQUFJLE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7QUFDaEM7QUFDQSxJQUFJLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFO0FBQzVCLE1BQU0sTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1QztBQUNBLE1BQU0sSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRTtBQUM5QyxRQUFRLFNBQVM7QUFDakIsT0FBTztBQUNQO0FBQ0EsTUFBTSxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztBQUM1QyxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3pDLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxZQUFZLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRTtBQUNwQyxJQUFJLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDckU7QUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDbkIsTUFBTSxPQUFPO0FBQ2IsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLFNBQVMsR0FBRyxNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEQ7QUFDQSxJQUFJLElBQUksRUFBRSxTQUFTLFlBQVksV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ2xELE1BQU0sT0FBTztBQUNiLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxZQUFZLEdBQUcsSUFBSSxjQUFjLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN6RixJQUFJLE1BQU0sWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzlCLElBQUksTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMxQztBQUNBLElBQUksSUFBSSxFQUFFLE9BQU8sWUFBWSxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDaEQsTUFBTSxPQUFPO0FBQ2IsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3pGLElBQUksT0FBTyxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7QUFDbkMsSUFBSSxNQUFNLGdCQUFnQixHQUFHLElBQUksVUFBVSxDQUFDLGdCQUFnQixDQUFDO0FBQzdELE1BQU0sSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO0FBQ3JCLE1BQU0sT0FBTztBQUNiLE1BQU0sU0FBUyxFQUFFLENBQUMsQ0FBQztBQUNuQixNQUFNLFNBQVMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO0FBQ3RDLE1BQU0sU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUztBQUN2QyxNQUFNLGdCQUFnQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCO0FBQ3JELE1BQU0scUJBQXFCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUI7QUFDL0QsTUFBTSxPQUFPO0FBQ2IsS0FBSyxDQUFDLENBQUM7QUFDUCxJQUFJLE1BQU0sWUFBWSxHQUFHLElBQUksY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQzNELElBQUksTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3hCLElBQUksTUFBTSxZQUFZLEdBQUc7QUFDekIsTUFBTSxJQUFJLElBQUksR0FBRztBQUNqQixRQUFRLE9BQU8sUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDN0MsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDckIsUUFBUSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVCLE9BQU87QUFDUDtBQUNBLE1BQU0sS0FBSyxHQUFHO0FBQ2QsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQixPQUFPO0FBQ1A7QUFDQSxLQUFLLENBQUM7QUFDTixJQUFJLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7QUFDNUIsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksS0FBSztBQUN4QyxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2hDLEtBQUssQ0FBQyxDQUFDO0FBQ1AsSUFBSSxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDeEI7QUFDQSxJQUFJLEtBQUssTUFBTSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUU7QUFDMUMsTUFBTSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDcEQ7QUFDQSxNQUFNLElBQUksRUFBRSxVQUFVLFlBQVksV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3JELFFBQVEsU0FBUztBQUNqQixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksVUFBVSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDcEQsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDekQsTUFBTSxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3RELE1BQU0sTUFBTSxXQUFXLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3pELE1BQU0sTUFBTSxXQUFXLEdBQUc7QUFDMUIsUUFBUSxVQUFVO0FBQ2xCLFFBQVEsVUFBVTtBQUNsQixRQUFRLFdBQVc7QUFDbkIsT0FBTyxDQUFDO0FBQ1I7QUFDQSxNQUFNLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxlQUFlLEVBQUUsV0FBVyxDQUFDLEVBQUU7QUFDMUQsUUFBUSxTQUFTO0FBQ2pCLE9BQU87QUFDUDtBQUNBLE1BQU0sUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxNQUFNLEVBQUU7QUFDdEwsUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxlQUFlLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdEQsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQixPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ1YsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDaEMsSUFBSSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM1RDtBQUNBLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtBQUN2QixNQUFNLE9BQU87QUFDYixLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0FBQ2hDLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDeEIsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN4QixJQUFJLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUN6QztBQUNBLElBQUksS0FBSyxNQUFNLE9BQU8sSUFBSSxZQUFZLEVBQUU7QUFDeEMsTUFBTSxJQUFJLENBQUMsSUFBSSxVQUFVLENBQUMsY0FBYyxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRTtBQUNqRSxRQUFRLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN4QyxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLGtCQUFrQixDQUFDLElBQUksRUFBRTtBQUNqQyxNQUFNLFlBQVksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUMxQyxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssTUFBTSxPQUFPLElBQUksWUFBWSxFQUFFO0FBQ3hDLE1BQU0sSUFBSSxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDM0MsUUFBUSxTQUFTO0FBQ2pCLE9BQU87QUFDUDtBQUNBLE1BQU0sS0FBSyxNQUFNLFFBQVEsSUFBSSxDQUFDO0FBQzlCLFFBQVEsSUFBSSxFQUFFLFNBQVM7QUFDdkIsUUFBUSxVQUFVLEVBQUUsR0FBRztBQUN2QixRQUFRLFdBQVcsRUFBRSxDQUFDO0FBQ3RCLE9BQU8sRUFBRTtBQUNULFFBQVEsSUFBSSxFQUFFLE1BQU07QUFDcEIsUUFBUSxVQUFVLEVBQUUsR0FBRztBQUN2QixRQUFRLFdBQVcsRUFBRSxDQUFDO0FBQ3RCLE9BQU8sRUFBRTtBQUNULFFBQVEsSUFBSSxFQUFFLFFBQVE7QUFDdEIsUUFBUSxVQUFVLEVBQUUsR0FBRztBQUN2QixRQUFRLFdBQVcsRUFBRSxFQUFFO0FBQ3ZCLE9BQU8sRUFBRTtBQUNULFFBQVEsSUFBSSxFQUFFLFlBQVk7QUFDMUIsUUFBUSxVQUFVLEVBQUUsR0FBRztBQUN2QixRQUFRLFdBQVcsRUFBRSxFQUFFO0FBQ3ZCLE9BQU8sQ0FBQyxFQUFFO0FBQ1YsUUFBUSxNQUFNLElBQUksR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNuRCxRQUFRLE1BQU0sSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMxRCxRQUFRLFFBQVEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUU7QUFDL0ksVUFBVSxVQUFVLEVBQUUsT0FBTztBQUM3QixVQUFVLFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVTtBQUN6QyxVQUFVLFdBQVcsRUFBRSxRQUFRLENBQUMsV0FBVztBQUMzQyxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxNQUFNLEVBQUU7QUFDbkMsVUFBVSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxlQUFlLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDeEQsVUFBVSxPQUFPLElBQUksQ0FBQztBQUN0QixTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ1osT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2hDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUFDOUQsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLGdCQUFnQixDQUFDLGlCQUFpQixFQUFFO0FBQzVDLElBQUksT0FBTyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3JGLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxRQUFRLEdBQUc7QUFDakIsSUFBSSxNQUFNLFFBQVEsR0FBRztBQUNyQixNQUFNLFNBQVMsRUFBRSxLQUFLO0FBQ3RCLE1BQU0sV0FBVyxFQUFFLEtBQUs7QUFDeEIsTUFBTSxNQUFNLEVBQUUsS0FBSztBQUNuQixNQUFNLGFBQWEsRUFBRSxLQUFLO0FBQzFCLEtBQUssQ0FBQztBQUNOLElBQUksTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7QUFDM0M7QUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDbkIsTUFBTSxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzNELEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSTtBQUNSLE1BQU0sTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM1QyxNQUFNLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDbkUsTUFBTSxRQUFRLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztBQUNyQyxNQUFNLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEMsTUFBTSxRQUFRLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7QUFDL0csTUFBTSxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ2hELE1BQU0sTUFBTSxhQUFhLEdBQUcsQ0FBQyxFQUFFLFFBQVEsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUMvQztBQUNBLE1BQU0sTUFBTSx5QkFBeUIsR0FBRyxhQUFhLElBQUksSUFBSSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2pHO0FBQ0EsTUFBTSxRQUFRLENBQUMsV0FBVyxHQUFHLFNBQVMsSUFBSSxDQUFDLHlCQUF5QixDQUFDO0FBQ3JFLE1BQU0sUUFBUSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7QUFDN0MsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFO0FBQ2pCLE1BQU0sSUFBSSxFQUFFLFlBQVksV0FBVyxDQUFDLG9CQUFvQixFQUFFO0FBQzFELFFBQVEsTUFBTSxFQUFFLENBQUM7QUFDakIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxnQ0FBZ0MsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNqRSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDekQsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLFlBQVksR0FBRztBQUNyQixJQUFJLE1BQU0sc0JBQXNCLEdBQUc7QUFDbkMsTUFBTSxLQUFLLEVBQUUsS0FBSyxDQUFDLFFBQVE7QUFDM0IsTUFBTSxNQUFNLEVBQUUsS0FBSyxDQUFDLFFBQVE7QUFDNUIsTUFBTSxPQUFPLEVBQUUsS0FBSyxDQUFDLFFBQVE7QUFDN0IsTUFBTSxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7QUFDOUIsTUFBTSxPQUFPLEVBQUUsS0FBSyxDQUFDLFFBQVE7QUFDN0IsTUFBTSxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7QUFDOUIsTUFBTSxZQUFZLEVBQUUsS0FBSyxDQUFDLFFBQVE7QUFDbEMsTUFBTSxPQUFPLEVBQUUsS0FBSyxDQUFDLFFBQVE7QUFDN0IsTUFBTSxPQUFPLEVBQUUsV0FBVyxDQUFDLE1BQU07QUFDakMsS0FBSyxDQUFDO0FBQ04sSUFBSSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQ2hDO0FBQ0EsSUFBSSxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUNqRixNQUFNLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLG1DQUFtQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDckIsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLE9BQU8sR0FBRztBQUNwQixNQUFNLGdCQUFnQixFQUFFLE9BQU87QUFDL0IsTUFBTSxRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJO0FBQ2pDLE1BQU0saUJBQWlCLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxHQUFHLElBQUk7QUFDaEYsTUFBTSxZQUFZLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhO0FBQ3hDLE1BQU0saUJBQWlCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXO0FBQ2xELE1BQU0sWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTTtBQUN4QyxNQUFNLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVU7QUFDcEQsTUFBTSxtQkFBbUIsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWE7QUFDdEQsS0FBSyxDQUFDO0FBQ04sSUFBSSxJQUFJLFFBQVEsQ0FBQztBQUNqQjtBQUNBLElBQUksSUFBSTtBQUNSLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMvQyxLQUFLLENBQUMsT0FBTyxHQUFHLEVBQUU7QUFDbEIsTUFBTSxJQUFJLEdBQUcsWUFBWSxXQUFXLENBQUMsb0JBQW9CLEVBQUU7QUFDM0QsUUFBUSxNQUFNLEdBQUcsQ0FBQztBQUNsQixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxpREFBaUQsQ0FBQyxDQUFDO0FBQ3pFLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLEVBQUU7QUFDM0MsTUFBTSxLQUFLLE1BQU0sR0FBRyxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUUsRUFBRTtBQUM1QyxRQUFRLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEM7QUFDQSxRQUFRLElBQUksc0JBQXNCLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDekMsVUFBVSxJQUFJLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ2xELFlBQVksT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sS0FBSyxLQUFLLFFBQVEsR0FBRyxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbkcsV0FBVyxNQUFNO0FBQ2pCLFlBQVksSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsZ0NBQWdDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDeEUsV0FBVztBQUNYLFNBQVMsTUFBTSxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRTtBQUM1QyxVQUFVLElBQUksV0FBVyxDQUFDO0FBQzFCO0FBQ0EsVUFBVSxJQUFJLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRTtBQUMxQyxZQUFZLFdBQVcsR0FBRyxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM5RCxXQUFXLE1BQU0sSUFBSSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRTtBQUM1RyxZQUFZLFdBQVcsR0FBRyxLQUFLLENBQUM7QUFDaEMsV0FBVyxNQUFNO0FBQ2pCLFlBQVksSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsaURBQWlELEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDekYsWUFBWSxTQUFTO0FBQ3JCLFdBQVc7QUFDWDtBQUNBLFVBQVUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7QUFDL0IsWUFBWSxPQUFPLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakQsV0FBVztBQUNYO0FBQ0EsVUFBVSxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUM1QyxTQUFTO0FBQ1QsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUM1RCxHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksWUFBWSxHQUFHO0FBQ3JCLElBQUksU0FBUyxRQUFRLENBQUMsSUFBSSxFQUFFO0FBQzVCLE1BQU0sT0FBTyxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxLQUFLLGlCQUFpQixDQUFDO0FBQ3ZGLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxTQUFTLENBQUMsSUFBSSxFQUFFO0FBQzdCLE1BQU0sTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ3JCO0FBQ0EsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3JELFFBQVEsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6QyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN2QyxPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxQixLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRCxJQUFJLElBQUksWUFBWSxFQUFFLFlBQVksQ0FBQztBQUNuQztBQUNBLElBQUksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUN4RCxNQUFNLFlBQVksR0FBRyxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQ7QUFDQSxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDN0QsUUFBUSxZQUFZLEdBQUcsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVELE9BQU87QUFDUCxLQUFLLE1BQU07QUFDWCxNQUFNLFlBQVksR0FBRyxJQUFJLE9BQU8sQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLHVCQUF1QixDQUFDLEVBQUUsQ0FBQyxFQUFFLHVCQUF1QixDQUFDLENBQUM7QUFDakksS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxFQUFFLFlBQVksR0FBRyxTQUFTLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3SCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0scUJBQXFCLENBQUMsU0FBUyxFQUFFO0FBQ3pDLElBQUksTUFBTTtBQUNWLE1BQU0sT0FBTztBQUNiLE1BQU0sYUFBYTtBQUNuQixLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ2I7QUFDQSxJQUFJLE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN4RTtBQUNBLElBQUksSUFBSTtBQUNSLE1BQU0sTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsRDtBQUNBLE1BQU0sSUFBSSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFO0FBQzNILFFBQVEsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ3pELFVBQVUsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDakQsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLE9BQU87QUFDUDtBQUNBLE1BQU0sTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsd0VBQXdFLENBQUMsQ0FBQztBQUM1RyxLQUFLLENBQUMsT0FBTyxNQUFNLEVBQUU7QUFDckIsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDOUIsTUFBTSxPQUFPLE9BQU8sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDNUMsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFBRTtBQUNyQixJQUFJLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzVEO0FBQ0EsSUFBSSxJQUFJLGFBQWEsRUFBRTtBQUN2QixNQUFNLE9BQU8sYUFBYSxDQUFDO0FBQzNCLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTTtBQUNWLE1BQU0sT0FBTztBQUNiLE1BQU0sYUFBYTtBQUNuQixNQUFNLFVBQVU7QUFDaEIsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNiLElBQUksSUFBSSxPQUFPLENBQUM7QUFDaEI7QUFDQSxJQUFJLElBQUksVUFBVSxFQUFFO0FBQ3BCLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLEtBQUssTUFBTSxJQUFJLGFBQWEsSUFBSSxhQUFhLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRTtBQUN2RSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDdEQsS0FBSyxNQUFNO0FBQ1gsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMvQyxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEtBQUs7QUFDaEQsTUFBTSxPQUFPLElBQUksSUFBSSxDQUFDO0FBQ3RCLFFBQVEsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO0FBQ25DLFFBQVEsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO0FBQ3ZCLFFBQVEsU0FBUztBQUNqQixRQUFRLFFBQVE7QUFDaEIsUUFBUSxHQUFHO0FBQ1gsUUFBUSxlQUFlLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtBQUM5QyxRQUFRLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztBQUNwQyxRQUFRLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxnQkFBZ0I7QUFDbEQsUUFBUSxxQkFBcUIsRUFBRSxPQUFPLENBQUMscUJBQXFCO0FBQzVELFFBQVEsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLGdCQUFnQjtBQUNsRCxRQUFRLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxnQkFBZ0I7QUFDbEQsUUFBUSxVQUFVO0FBQ2xCLE9BQU8sQ0FBQyxDQUFDO0FBQ1QsS0FBSyxDQUFDLENBQUM7QUFDUDtBQUNBLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9DO0FBQ0EsSUFBSSxPQUFPLE9BQU8sQ0FBQztBQUNuQixHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sY0FBYyxDQUFDLFlBQVksR0FBRyxLQUFLLEVBQUU7QUFDN0MsSUFBSSxJQUFJLFlBQVksRUFBRTtBQUN0QixNQUFNLE9BQU87QUFDYixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUk7QUFDUixNQUFNLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QixLQUFLLENBQUMsT0FBTyxNQUFNLEVBQUU7QUFDckIsTUFBTSxJQUFJLE1BQU0sWUFBWSxXQUFXLENBQUMsa0JBQWtCLEVBQUU7QUFDNUQsUUFBUSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQztBQUNBLFFBQVEsTUFBTSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDN0IsUUFBUSxNQUFNLElBQUksV0FBVyxDQUFDLGtCQUFrQixFQUFFLENBQUM7QUFDbkQsT0FBTztBQUNQLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sYUFBYSxDQUFDLFlBQVksR0FBRyxLQUFLLEVBQUU7QUFDNUMsSUFBSSxNQUFNO0FBQ1YsTUFBTSxPQUFPO0FBQ2IsTUFBTSxVQUFVO0FBQ2hCLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDYixJQUFJLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0FBQ2hDLElBQUksSUFBSSxRQUFRLENBQUM7QUFDakI7QUFDQSxJQUFJLElBQUk7QUFDUixNQUFNLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEVBQUUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsRUFBRSxVQUFVLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzSTtBQUNBLE1BQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQzNCLFFBQVEsT0FBTztBQUNmLE9BQU8sTUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7QUFDckMsUUFBUSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUM7QUFDL0MsT0FBTyxNQUFNO0FBQ2IsUUFBUSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztBQUNwQyxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO0FBQ3ZDLFFBQVEsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsK0JBQStCLENBQUMsQ0FBQztBQUNyRSxPQUFPLE1BQU0sSUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFO0FBQ2hDLFFBQVEsT0FBTztBQUNmLE9BQU87QUFDUDtBQUNBLE1BQU0sTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN2QyxLQUFLLENBQUMsT0FBTyxNQUFNLEVBQUU7QUFDckIsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDOUM7QUFDQSxNQUFNLE1BQU0sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzNCO0FBQ0EsTUFBTSxJQUFJLE1BQU0sWUFBWSxXQUFXLENBQUMsa0JBQWtCLElBQUksQ0FBQyxZQUFZLEVBQUU7QUFDN0UsUUFBUSxNQUFNLElBQUksV0FBVyxDQUFDLGtCQUFrQixFQUFFLENBQUM7QUFDbkQsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRixNQUFNLElBQUksU0FBUyxDQUFDO0FBQ3BCO0FBQ0EsTUFBTSxJQUFJO0FBQ1YsUUFBUSxTQUFTLEdBQUcsTUFBTSxVQUFVLENBQUMsYUFBYSxDQUFDLGlCQUFpQixFQUFFLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztBQUN0RixPQUFPLENBQUMsT0FBTyxTQUFTLEVBQUU7QUFDMUIsUUFBUSxJQUFJLFNBQVMsWUFBWSxXQUFXLENBQUMsa0JBQWtCLElBQUksQ0FBQyxZQUFZLEVBQUU7QUFDbEYsVUFBVSxNQUFNLElBQUksV0FBVyxDQUFDLGtCQUFrQixFQUFFLENBQUM7QUFDckQsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckMsUUFBUSxPQUFPO0FBQ2YsT0FBTztBQUNQO0FBQ0EsTUFBTSxLQUFLLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxTQUFTLEVBQUU7QUFDNUQsUUFBUSxJQUFJLE9BQU8sQ0FBQztBQUNwQjtBQUNBLFFBQVEsSUFBSSxRQUFRLFlBQVksS0FBSyxFQUFFO0FBQ3ZDLFVBQVUsT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDN0MsVUFBVSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDbEMsU0FBUyxNQUFNO0FBQ2YsVUFBVSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQztBQUM3QyxZQUFZLFVBQVU7QUFDdEIsWUFBWSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7QUFDM0IsWUFBWSxTQUFTO0FBQ3JCLFlBQVksUUFBUTtBQUNwQixZQUFZLEdBQUc7QUFDZixZQUFZLGVBQWUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO0FBQ2xELFlBQVksU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO0FBQ3hDLFlBQVksZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLGdCQUFnQjtBQUN0RCxZQUFZLHFCQUFxQixFQUFFLE9BQU8sQ0FBQyxxQkFBcUI7QUFDaEUsWUFBWSxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsZ0JBQWdCO0FBQ3RELFlBQVksZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLGdCQUFnQjtBQUN0RCxZQUFZLFVBQVUsRUFBRSxJQUFJO0FBQzVCLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDZCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNuRCxPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEQsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUU7QUFDNUIsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNsRCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sT0FBTyxDQUFDLGlCQUFpQixHQUFHLEtBQUssRUFBRTtBQUMzQyxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLElBQUksV0FBVyxDQUFDLG9CQUFvQixHQUFHLENBQUM7QUFDNUcsR0FBRztBQUNIO0FBQ0EsRUFBRSxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtBQUNqRCxJQUFJLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2pEO0FBQ0EsSUFBSSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDeEIsTUFBTSxNQUFNLFFBQVEsR0FBRyxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDcEU7QUFDQSxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsRUFBRTtBQUN2QixRQUFRLElBQUksR0FBRyxRQUFRLENBQUM7QUFDeEIsT0FBTyxNQUFNO0FBQ2IsUUFBUSxJQUFJLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUNyQyxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUM3QixNQUFNLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLEtBQUs7QUFDTDtBQUNBLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxVQUFVLElBQUksVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsTUFBTSxFQUFFO0FBQ3pOLE1BQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsdUJBQXVCLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUQsTUFBTSxPQUFPLElBQUksQ0FBQztBQUNsQixLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ1I7QUFDQSxJQUFJLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUMzQixNQUFNLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDckM7QUFDQSxNQUFNLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFO0FBQzlCLFFBQVEsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDdkQsT0FBTztBQUNQLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksWUFBWSxHQUFHO0FBQ3JCLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFO0FBQ2xDLE1BQU0sT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDNUUsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzFDLElBQUksTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNwQztBQUNBLElBQUksS0FBSyxNQUFNLFFBQVEsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUU7QUFDaEUsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUM3RCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztBQUMzQjtBQUNBLElBQUksS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLGFBQWEsRUFBRTtBQUNsRCxNQUFNLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJO0FBQzVELFFBQVEsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNqRDtBQUNBLFFBQVEsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUMvQixVQUFVLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkMsU0FBUztBQUNULE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDVixLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ25HLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxZQUFZLEdBQUc7QUFDckIsSUFBSSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBQ3BFLElBQUksT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUM1RCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sa0JBQWtCLEdBQUc7QUFDN0IsSUFBSSxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsWUFBWSxDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hKO0FBQ0EsSUFBSSxJQUFJLGdCQUFnQixFQUFFO0FBQzFCLE1BQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLFlBQVksRUFBRTtBQUN0QixNQUFNLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNsSCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxtQkFBbUIsR0FBRztBQUM1QixJQUFJLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO0FBQzNDO0FBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUMxQyxNQUFNLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxxQkFBcUIsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNsRSxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRDtBQUNBLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQzNFLE1BQU0sT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2xFLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxHQUFHLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQ3RGO0FBQ0EsSUFBSSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQzFCLE1BQU0sT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2xFLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQy9ELEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE9BQU8sQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0FBQ2xDO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTyxDQUFDLHVCQUF1QixFQUFFLE9BQU8sRUFBRSxtQkFBbUIsS0FBSztBQUNsRTtBQUNBO0FBQ0E7QUFDQSxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxZQUFZLEdBQUc7QUFDOUMsRUFBRSxLQUFLLEVBQUUsSUFBSTtBQUNiLENBQUMsRUFBRSxDQUFDO0FBQ0osT0FBTyxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7QUFDeEMsT0FBTyxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7QUFDeEM7QUFDQSxJQUFJLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQy9DO0FBQ0EsSUFBSSxXQUFXLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekM7QUFDQSxJQUFJLGtCQUFrQixHQUFHLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2pEO0FBQ0EsSUFBSSxzQkFBc0IsR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyRDtBQUNBLElBQUksa0JBQWtCLEdBQUcsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDakQ7QUFDQSxJQUFJLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQy9DO0FBQ0EsSUFBSSxXQUFXLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekM7QUFDQSxJQUFJLFlBQVksR0FBRyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMzQztBQUNBLE1BQU0sYUFBYSxHQUFHLElBQUksV0FBVyxDQUFDLHFCQUFxQixFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQzFFLEVBQUUsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLEdBQUc7QUFDekQsSUFBSSxJQUFJLEVBQUUsd0JBQXdCO0FBQ2xDLElBQUksT0FBTyxFQUFFLGtCQUFrQixDQUFDLHVCQUF1QjtBQUN2RCxJQUFJLFVBQVUsRUFBRSxzQkFBc0IsQ0FBQywyQkFBMkI7QUFDbEUsSUFBSSxXQUFXLEVBQUUsc0JBQXNCLENBQUMsNEJBQTRCO0FBQ3BFLElBQUksT0FBTyxFQUFFLGtCQUFrQixDQUFDLHVCQUF1QjtBQUN2RCxHQUFHLENBQUM7QUFDSixFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHO0FBQ25ELElBQUksSUFBSSxFQUFFLHFCQUFxQjtBQUMvQixJQUFJLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxvQkFBb0I7QUFDcEQsSUFBSSxVQUFVLEVBQUUsc0JBQXNCLENBQUMsd0JBQXdCO0FBQy9ELElBQUksV0FBVyxFQUFFLHNCQUFzQixDQUFDLHlCQUF5QjtBQUNqRSxJQUFJLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxvQkFBb0I7QUFDcEQsR0FBRyxDQUFDO0FBQ0osRUFBRSxDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLEdBQUc7QUFDM0UsSUFBSSxJQUFJLEVBQUUsdUJBQXVCO0FBQ2pDLElBQUksT0FBTyxFQUFFLGtCQUFrQixDQUFDLHNCQUFzQjtBQUN0RCxJQUFJLFVBQVUsRUFBRSxzQkFBc0IsQ0FBQywwQkFBMEI7QUFDakUsSUFBSSxXQUFXLEVBQUUsc0JBQXNCLENBQUMsMkJBQTJCO0FBQ25FLElBQUksT0FBTyxFQUFFLGtCQUFrQixDQUFDLHNCQUFzQjtBQUN0RCxHQUFHLENBQUM7QUFDSixFQUFFLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQywyQkFBMkIsQ0FBQyxHQUFHO0FBQ3ZGLElBQUksSUFBSSxFQUFFLDJCQUEyQjtBQUNyQyxJQUFJLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQywwQkFBMEI7QUFDMUQsSUFBSSxVQUFVLEVBQUUsc0JBQXNCLENBQUMsOEJBQThCO0FBQ3JFLElBQUksV0FBVyxFQUFFLHNCQUFzQixDQUFDLCtCQUErQjtBQUN2RSxJQUFJLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQywwQkFBMEI7QUFDMUQsR0FBRyxDQUFDO0FBQ0osRUFBRSxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHO0FBQzdDLElBQUksSUFBSSxFQUFFLHdCQUF3QjtBQUNsQyxJQUFJLFVBQVUsRUFBRSxzQkFBc0IsQ0FBQywyQkFBMkI7QUFDbEUsSUFBSSxXQUFXLEVBQUUsc0JBQXNCLENBQUMsNEJBQTRCO0FBQ3BFLEdBQUcsQ0FBQztBQUNKLEVBQUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRztBQUN4QyxJQUFJLElBQUksRUFBRSxxQkFBcUI7QUFDL0IsSUFBSSxVQUFVLEVBQUUsc0JBQXNCLENBQUMsd0JBQXdCO0FBQy9ELElBQUksV0FBVyxFQUFFLHNCQUFzQixDQUFDLHlCQUF5QjtBQUNqRSxHQUFHLENBQUM7QUFDSixFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRztBQUM1QyxJQUFJLElBQUksRUFBRSx1QkFBdUI7QUFDakMsSUFBSSxVQUFVLEVBQUUsc0JBQXNCLENBQUMsMEJBQTBCO0FBQ2pFLElBQUksV0FBVyxFQUFFLHNCQUFzQixDQUFDLDJCQUEyQjtBQUNuRSxHQUFHLENBQUM7QUFDSixFQUFFLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHO0FBQ3BELElBQUksSUFBSSxFQUFFLDJCQUEyQjtBQUNyQyxJQUFJLFVBQVUsRUFBRSxzQkFBc0IsQ0FBQyw4QkFBOEI7QUFDckUsSUFBSSxXQUFXLEVBQUUsc0JBQXNCLENBQUMsK0JBQStCO0FBQ3ZFLEdBQUcsQ0FBQztBQUNKLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEdBQUc7QUFDekIsSUFBSSxJQUFJLEVBQUUsd0JBQXdCO0FBQ2xDLElBQUksT0FBTyxFQUFFLGdCQUFnQixDQUFDLHFCQUFxQjtBQUNuRCxJQUFJLFVBQVUsRUFBRSxzQkFBc0IsQ0FBQywyQkFBMkI7QUFDbEUsSUFBSSxXQUFXLEVBQUUsc0JBQXNCLENBQUMsNEJBQTRCO0FBQ3BFLElBQUksT0FBTyxFQUFFLGdCQUFnQixDQUFDLHFCQUFxQjtBQUNuRCxHQUFHLENBQUM7QUFDSixFQUFFLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRztBQUN0QixJQUFJLElBQUksRUFBRSxxQkFBcUI7QUFDL0IsSUFBSSxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsa0JBQWtCO0FBQ2hELElBQUksVUFBVSxFQUFFLHNCQUFzQixDQUFDLHdCQUF3QjtBQUMvRCxJQUFJLFdBQVcsRUFBRSxzQkFBc0IsQ0FBQyx5QkFBeUI7QUFDakUsSUFBSSxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsa0JBQWtCO0FBQ2hELEdBQUcsQ0FBQztBQUNKLEVBQUUsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUc7QUFDeEIsSUFBSSxJQUFJLEVBQUUsdUJBQXVCO0FBQ2pDLElBQUksT0FBTyxFQUFFLGdCQUFnQixDQUFDLG9CQUFvQjtBQUNsRCxJQUFJLFVBQVUsRUFBRSxzQkFBc0IsQ0FBQywwQkFBMEI7QUFDakUsSUFBSSxXQUFXLEVBQUUsc0JBQXNCLENBQUMsMkJBQTJCO0FBQ25FLElBQUksT0FBTyxFQUFFLGdCQUFnQixDQUFDLG9CQUFvQjtBQUNsRCxHQUFHLENBQUM7QUFDSixFQUFFLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHO0FBQzVCLElBQUksSUFBSSxFQUFFLDJCQUEyQjtBQUNyQyxJQUFJLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyx3QkFBd0I7QUFDdEQsSUFBSSxVQUFVLEVBQUUsc0JBQXNCLENBQUMsOEJBQThCO0FBQ3JFLElBQUksV0FBVyxFQUFFLHNCQUFzQixDQUFDLCtCQUErQjtBQUN2RSxJQUFJLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyx3QkFBd0I7QUFDdEQsR0FBRyxDQUFDO0FBQ0osRUFBRSxDQUFDLENBQUMsaUJBQWlCLENBQUMsR0FBRztBQUN6QixJQUFJLElBQUksRUFBRSx3QkFBd0I7QUFDbEMsSUFBSSxPQUFPLEVBQUUsZ0JBQWdCLENBQUMscUJBQXFCO0FBQ25ELElBQUksVUFBVSxFQUFFLHNCQUFzQixDQUFDLDJCQUEyQjtBQUNsRSxJQUFJLFdBQVcsRUFBRSxzQkFBc0IsQ0FBQyw0QkFBNEI7QUFDcEUsSUFBSSxPQUFPLEVBQUUsZ0JBQWdCLENBQUMscUJBQXFCO0FBQ25ELEdBQUcsQ0FBQztBQUNKLEVBQUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHO0FBQ3RCLElBQUksSUFBSSxFQUFFLHFCQUFxQjtBQUMvQixJQUFJLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxrQkFBa0I7QUFDaEQsSUFBSSxVQUFVLEVBQUUsc0JBQXNCLENBQUMsd0JBQXdCO0FBQy9ELElBQUksV0FBVyxFQUFFLHNCQUFzQixDQUFDLHlCQUF5QjtBQUNqRSxJQUFJLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxrQkFBa0I7QUFDaEQsR0FBRyxDQUFDO0FBQ0osRUFBRSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRztBQUN4QixJQUFJLElBQUksRUFBRSx1QkFBdUI7QUFDakMsSUFBSSxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsb0JBQW9CO0FBQ2xELElBQUksVUFBVSxFQUFFLHNCQUFzQixDQUFDLDBCQUEwQjtBQUNqRSxJQUFJLFdBQVcsRUFBRSxzQkFBc0IsQ0FBQywyQkFBMkI7QUFDbkUsSUFBSSxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsb0JBQW9CO0FBQ2xELEdBQUcsQ0FBQztBQUNKLEVBQUUsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLEdBQUc7QUFDNUIsSUFBSSxJQUFJLEVBQUUsMkJBQTJCO0FBQ3JDLElBQUksT0FBTyxFQUFFLGdCQUFnQixDQUFDLHdCQUF3QjtBQUN0RCxJQUFJLFVBQVUsRUFBRSxzQkFBc0IsQ0FBQyw4QkFBOEI7QUFDckUsSUFBSSxXQUFXLEVBQUUsc0JBQXNCLENBQUMsK0JBQStCO0FBQ3ZFLElBQUksT0FBTyxFQUFFLGdCQUFnQixDQUFDLHdCQUF3QjtBQUN0RCxHQUFHLENBQUM7QUFDSixFQUFFLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUc7QUFDekMsSUFBSSxJQUFJLEVBQUUsd0JBQXdCO0FBQ2xDLElBQUksT0FBTyxFQUFFLGtCQUFrQixDQUFDLHVCQUF1QjtBQUN2RCxJQUFJLFVBQVUsRUFBRSxzQkFBc0IsQ0FBQywyQkFBMkI7QUFDbEUsSUFBSSxXQUFXLEVBQUUsc0JBQXNCLENBQUMsNEJBQTRCO0FBQ3BFLElBQUksT0FBTyxFQUFFLGtCQUFrQixDQUFDLHVCQUF1QjtBQUN2RCxHQUFHLENBQUM7QUFDSixFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHO0FBQ3hCLElBQUksSUFBSSxFQUFFLHFCQUFxQjtBQUMvQixJQUFJLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxvQkFBb0I7QUFDcEQsSUFBSSxVQUFVLEVBQUUsc0JBQXNCLENBQUMsd0JBQXdCO0FBQy9ELElBQUksV0FBVyxFQUFFLHNCQUFzQixDQUFDLHlCQUF5QjtBQUNqRSxJQUFJLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxvQkFBb0I7QUFDcEQsR0FBRyxDQUFDO0FBQ0osRUFBRSxDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRztBQUMxQixJQUFJLElBQUksRUFBRSx1QkFBdUI7QUFDakMsSUFBSSxPQUFPLEVBQUUsa0JBQWtCLENBQUMsc0JBQXNCO0FBQ3RELElBQUksVUFBVSxFQUFFLHNCQUFzQixDQUFDLDBCQUEwQjtBQUNqRSxJQUFJLFdBQVcsRUFBRSxzQkFBc0IsQ0FBQywyQkFBMkI7QUFDbkUsSUFBSSxPQUFPLEVBQUUsa0JBQWtCLENBQUMsc0JBQXNCO0FBQ3RELEdBQUcsQ0FBQztBQUNKLEVBQUUsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLEdBQUc7QUFDOUIsSUFBSSxJQUFJLEVBQUUsMkJBQTJCO0FBQ3JDLElBQUksT0FBTyxFQUFFLGtCQUFrQixDQUFDLDBCQUEwQjtBQUMxRCxJQUFJLFVBQVUsRUFBRSxzQkFBc0IsQ0FBQyw4QkFBOEI7QUFDckUsSUFBSSxXQUFXLEVBQUUsc0JBQXNCLENBQUMsK0JBQStCO0FBQ3ZFLElBQUksT0FBTyxFQUFFLGtCQUFrQixDQUFDLDBCQUEwQjtBQUMxRCxHQUFHLENBQUM7QUFDSixDQUFDLENBQUMsQ0FBQztBQUNIO0FBQ0EsU0FBUyxjQUFjLENBQUMsSUFBSSxFQUFFO0FBQzlCLEVBQUUsTUFBTSxRQUFRLEdBQUcsSUFBSSxZQUFZLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0QsRUFBRSxNQUFNLE9BQU8sR0FBRyxhQUFhLEVBQUUsQ0FBQztBQUNsQyxFQUFFLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzNCLENBQUM7QUFDRDtBQUNBLFNBQVMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFO0FBQ2hDLEVBQUUsTUFBTSxJQUFJLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BDO0FBQ0EsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ2IsSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU07QUFDUixJQUFJLFVBQVU7QUFDZCxJQUFJLFdBQVc7QUFDZixJQUFJLE9BQU87QUFDWCxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ1gsRUFBRSxJQUFJLGtCQUFrQixDQUFDO0FBQ3pCO0FBQ0EsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFO0FBQ2hCLElBQUksa0JBQWtCLEdBQUcsVUFBVSxDQUFDO0FBQ3BDLEdBQUcsTUFBTTtBQUNULElBQUksa0JBQWtCLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xFLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdkIsRUFBRSxJQUFJLFlBQVksQ0FBQztBQUNuQixFQUFFLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUN2QjtBQUNBLEVBQUUsS0FBSyxNQUFNLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLFFBQVEsR0FBRyxRQUFRLENBQUMsRUFBRTtBQUMzSixJQUFJLElBQUksT0FBTyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQ3hCLE1BQU0sU0FBUztBQUNmLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxPQUFPLEtBQUssV0FBVyxHQUFHLENBQUMsRUFBRTtBQUNyQyxNQUFNLFlBQVksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUN4RCxNQUFNLFdBQVcsSUFBSSxDQUFDLENBQUM7QUFDdkIsS0FBSyxNQUFNO0FBQ1gsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDO0FBQzVCLE1BQU0sWUFBWSxHQUFHLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUN0RCxNQUFNLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQzVDLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFDRDtBQUNBLFNBQVMsY0FBYyxDQUFDLElBQUksRUFBRTtBQUM5QixFQUFFLE1BQU0sTUFBTSxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hDLEVBQUUsTUFBTSxJQUFJLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNuRCxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDakQsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO0FBQzVELEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztBQUMzRCxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDNUQsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN4QixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3pGLEVBQUUsTUFBTSxVQUFVLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hELEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUN6QyxFQUFFLE1BQU0sVUFBVSxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRCxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3pDLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDdEMsRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3hDLEVBQUUsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBQ0Q7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPLENBQUMsdUJBQXVCLEVBQUUsT0FBTyxLQUFLO0FBQzdDO0FBQ0E7QUFDQTtBQUNBLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFlBQVksR0FBRztBQUM5QyxFQUFFLEtBQUssRUFBRSxJQUFJO0FBQ2IsQ0FBQyxFQUFFLENBQUM7QUFDSixPQUFPLENBQUMscUJBQXFCLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsR0FBRyxPQUFPLENBQUMsb0JBQW9CLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsR0FBRyxPQUFPLENBQUMsd0JBQXdCLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ3JRLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ251SixPQUFPLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUM7QUFDaEQsTUFBTSxrQkFBa0IsR0FBRztBQUMzQixFQUFFLFVBQVUsRUFBRSxNQUFNO0FBQ3BCLEVBQUUsT0FBTyxFQUFFLE1BQU07QUFDakIsQ0FBQyxDQUFDO0FBQ0YsT0FBTyxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO0FBQ2hELE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2p4SixPQUFPLENBQUMsd0JBQXdCLEdBQUcsd0JBQXdCLENBQUM7QUFDNUQsTUFBTSx3QkFBd0IsR0FBRztBQUNqQyxFQUFFLFVBQVUsRUFBRSxNQUFNO0FBQ3BCLEVBQUUsT0FBTyxFQUFFLE1BQU07QUFDakIsQ0FBQyxDQUFDO0FBQ0YsT0FBTyxDQUFDLHdCQUF3QixHQUFHLHdCQUF3QixDQUFDO0FBQzVELE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2xzSixPQUFPLENBQUMsb0JBQW9CLEdBQUcsb0JBQW9CLENBQUM7QUFDcEQsTUFBTSxvQkFBb0IsR0FBRztBQUM3QixFQUFFLFVBQVUsRUFBRSxNQUFNO0FBQ3BCLEVBQUUsT0FBTyxFQUFFLE1BQU07QUFDakIsQ0FBQyxDQUFDO0FBQ0YsT0FBTyxDQUFDLG9CQUFvQixHQUFHLG9CQUFvQixDQUFDO0FBQ3BELE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzV2SixPQUFPLENBQUMscUJBQXFCLEdBQUcscUJBQXFCLENBQUM7QUFDdEQsTUFBTSxxQkFBcUIsR0FBRztBQUM5QixFQUFFLFVBQVUsRUFBRSxNQUFNO0FBQ3BCLEVBQUUsT0FBTyxFQUFFLE1BQU07QUFDakIsQ0FBQyxDQUFDO0FBQ0YsT0FBTyxDQUFDLHFCQUFxQixHQUFHLHFCQUFxQixDQUFDO0FBQ3REO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTyxDQUFDLHVCQUF1QixFQUFFLE9BQU8sS0FBSztBQUM3QztBQUNBO0FBQ0E7QUFDQSxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxZQUFZLEdBQUc7QUFDOUMsRUFBRSxLQUFLLEVBQUUsSUFBSTtBQUNiLENBQUMsRUFBRSxDQUFDO0FBQ0osT0FBTyxDQUFDLHVCQUF1QixHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsR0FBRyxPQUFPLENBQUMsc0JBQXNCLEdBQUcsT0FBTyxDQUFDLHNCQUFzQixHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsR0FBRyxPQUFPLENBQUMsMEJBQTBCLEdBQUcsT0FBTyxDQUFDLDBCQUEwQixHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUNyUixNQUFNLG9CQUFvQixHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN4akwsT0FBTyxDQUFDLG9CQUFvQixHQUFHLG9CQUFvQixDQUFDO0FBQ3BELE1BQU0sb0JBQW9CLEdBQUc7QUFDN0IsRUFBRSxVQUFVLEVBQUUsR0FBRztBQUNqQixFQUFFLE9BQU8sRUFBRSxHQUFHO0FBQ2QsQ0FBQyxDQUFDO0FBQ0YsT0FBTyxDQUFDLG9CQUFvQixHQUFHLG9CQUFvQixDQUFDO0FBQ3BELE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2prTCxPQUFPLENBQUMsMEJBQTBCLEdBQUcsMEJBQTBCLENBQUM7QUFDaEUsTUFBTSwwQkFBMEIsR0FBRztBQUNuQyxFQUFFLFVBQVUsRUFBRSxJQUFJO0FBQ2xCLEVBQUUsT0FBTyxFQUFFLEdBQUc7QUFDZCxDQUFDLENBQUM7QUFDRixPQUFPLENBQUMsMEJBQTBCLEdBQUcsMEJBQTBCLENBQUM7QUFDaEUsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDLzZLLE9BQU8sQ0FBQyxzQkFBc0IsR0FBRyxzQkFBc0IsQ0FBQztBQUN4RCxNQUFNLHNCQUFzQixHQUFHO0FBQy9CLEVBQUUsVUFBVSxFQUFFLElBQUk7QUFDbEIsRUFBRSxPQUFPLEVBQUUsR0FBRztBQUNkLENBQUMsQ0FBQztBQUNGLE9BQU8sQ0FBQyxzQkFBc0IsR0FBRyxzQkFBc0IsQ0FBQztBQUN4RCxNQUFNLHVCQUF1QixHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwM0ssT0FBTyxDQUFDLHVCQUF1QixHQUFHLHVCQUF1QixDQUFDO0FBQzFELE1BQU0sdUJBQXVCLEdBQUc7QUFDaEMsRUFBRSxVQUFVLEVBQUUsR0FBRztBQUNqQixFQUFFLE9BQU8sRUFBRSxHQUFHO0FBQ2QsQ0FBQyxDQUFDO0FBQ0YsT0FBTyxDQUFDLHVCQUF1QixHQUFHLHVCQUF1QixDQUFDO0FBQzFEO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTyxDQUFDLHVCQUF1QixFQUFFLE9BQU8sS0FBSztBQUM3QztBQUNBO0FBQ0E7QUFDQSxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxZQUFZLEdBQUc7QUFDOUMsRUFBRSxLQUFLLEVBQUUsSUFBSTtBQUNiLENBQUMsRUFBRSxDQUFDO0FBQ0osT0FBTyxDQUFDLDJCQUEyQixHQUFHLE9BQU8sQ0FBQyw0QkFBNEIsR0FBRyxPQUFPLENBQUMsMEJBQTBCLEdBQUcsT0FBTyxDQUFDLDJCQUEyQixHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsR0FBRyxPQUFPLENBQUMseUJBQXlCLEdBQUcsT0FBTyxDQUFDLDhCQUE4QixHQUFHLE9BQU8sQ0FBQywrQkFBK0IsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUN6VCxNQUFNLHdCQUF3QixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNsNEcsT0FBTyxDQUFDLHdCQUF3QixHQUFHLHdCQUF3QixDQUFDO0FBQzVELE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2aEgsT0FBTyxDQUFDLHlCQUF5QixHQUFHLHlCQUF5QixDQUFDO0FBQzlELE1BQU0sOEJBQThCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3Q0RyxPQUFPLENBQUMsOEJBQThCLEdBQUcsOEJBQThCLENBQUM7QUFDeEUsTUFBTSwrQkFBK0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdoSCxPQUFPLENBQUMsK0JBQStCLEdBQUcsK0JBQStCLENBQUM7QUFDMUUsTUFBTSwwQkFBMEIsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDajRHLE9BQU8sQ0FBQywwQkFBMEIsR0FBRywwQkFBMEIsQ0FBQztBQUNoRSxNQUFNLDJCQUEyQixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDemhILE9BQU8sQ0FBQywyQkFBMkIsR0FBRywyQkFBMkIsQ0FBQztBQUNsRSxNQUFNLDJCQUEyQixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNwNEcsT0FBTyxDQUFDLDJCQUEyQixHQUFHLDJCQUEyQixDQUFDO0FBQ2xFLE1BQU0sNEJBQTRCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxaEgsT0FBTyxDQUFDLDRCQUE0QixHQUFHLDRCQUE0QixDQUFDO0FBQ3BFO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTyxDQUFDLHVCQUF1QixFQUFFLE9BQU8sS0FBSztBQUM3QztBQUNBO0FBQ0E7QUFDQSxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxZQUFZLEdBQUc7QUFDOUMsRUFBRSxLQUFLLEVBQUUsSUFBSTtBQUNiLENBQUMsRUFBRSxDQUFDO0FBQ0osT0FBTyxDQUFDLHVCQUF1QixHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsR0FBRyxPQUFPLENBQUMsc0JBQXNCLEdBQUcsT0FBTyxDQUFDLHNCQUFzQixHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsR0FBRyxPQUFPLENBQUMsMEJBQTBCLEdBQUcsT0FBTyxDQUFDLDBCQUEwQixHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUNyUixNQUFNLG9CQUFvQixHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNuN0ksT0FBTyxDQUFDLG9CQUFvQixHQUFHLG9CQUFvQixDQUFDO0FBQ3BELE1BQU0sb0JBQW9CLEdBQUc7QUFDN0IsRUFBRSxVQUFVLEVBQUUsR0FBRztBQUNqQixFQUFFLE9BQU8sRUFBRSxHQUFHO0FBQ2QsQ0FBQyxDQUFDO0FBQ0YsT0FBTyxDQUFDLG9CQUFvQixHQUFHLG9CQUFvQixDQUFDO0FBQ3BELE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzk5SSxPQUFPLENBQUMsMEJBQTBCLEdBQUcsMEJBQTBCLENBQUM7QUFDaEUsTUFBTSwwQkFBMEIsR0FBRztBQUNuQyxFQUFFLFVBQVUsRUFBRSxHQUFHO0FBQ2pCLEVBQUUsT0FBTyxFQUFFLEdBQUc7QUFDZCxDQUFDLENBQUM7QUFDRixPQUFPLENBQUMsMEJBQTBCLEdBQUcsMEJBQTBCLENBQUM7QUFDaEUsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDejVJLE9BQU8sQ0FBQyxzQkFBc0IsR0FBRyxzQkFBc0IsQ0FBQztBQUN4RCxNQUFNLHNCQUFzQixHQUFHO0FBQy9CLEVBQUUsVUFBVSxFQUFFLEdBQUc7QUFDakIsRUFBRSxPQUFPLEVBQUUsR0FBRztBQUNkLENBQUMsQ0FBQztBQUNGLE9BQU8sQ0FBQyxzQkFBc0IsR0FBRyxzQkFBc0IsQ0FBQztBQUN4RCxNQUFNLHVCQUF1QixHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM1NkksT0FBTyxDQUFDLHVCQUF1QixHQUFHLHVCQUF1QixDQUFDO0FBQzFELE1BQU0sdUJBQXVCLEdBQUc7QUFDaEMsRUFBRSxVQUFVLEVBQUUsR0FBRztBQUNqQixFQUFFLE9BQU8sRUFBRSxHQUFHO0FBQ2QsQ0FBQyxDQUFDO0FBQ0YsT0FBTyxDQUFDLHVCQUF1QixHQUFHLHVCQUF1QixDQUFDO0FBQzFEO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTyxDQUFDLHVCQUF1QixFQUFFLE9BQU8sS0FBSztBQUM3QztBQUNBO0FBQ0E7QUFDQSxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxZQUFZLEdBQUc7QUFDOUMsRUFBRSxLQUFLLEVBQUUsSUFBSTtBQUNiLENBQUMsRUFBRSxDQUFDO0FBQ0osT0FBTyxDQUFDLHFCQUFxQixHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsR0FBRyxPQUFPLENBQUMsb0JBQW9CLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsR0FBRyxPQUFPLENBQUMsd0JBQXdCLEdBQUcsT0FBTyxDQUFDLHdCQUF3QixHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUNyUSxNQUFNLGtCQUFrQixHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNyc0osT0FBTyxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO0FBQ2hELE1BQU0sa0JBQWtCLEdBQUc7QUFDM0IsRUFBRSxVQUFVLEVBQUUsT0FBTztBQUNyQixFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQ1osQ0FBQyxDQUFDO0FBQ0YsT0FBTyxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO0FBQ2hELE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3J1SixPQUFPLENBQUMsd0JBQXdCLEdBQUcsd0JBQXdCLENBQUM7QUFDNUQsTUFBTSx3QkFBd0IsR0FBRztBQUNqQyxFQUFFLFVBQVUsRUFBRSxPQUFPO0FBQ3JCLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDWixDQUFDLENBQUM7QUFDRixPQUFPLENBQUMsd0JBQXdCLEdBQUcsd0JBQXdCLENBQUM7QUFDNUQsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdnZKLE9BQU8sQ0FBQyxvQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQztBQUNwRCxNQUFNLG9CQUFvQixHQUFHO0FBQzdCLEVBQUUsVUFBVSxFQUFFLE9BQU87QUFDckIsRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUMsQ0FBQztBQUNGLE9BQU8sQ0FBQyxvQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQztBQUNwRCxNQUFNLHFCQUFxQixHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxP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LEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFF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LEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUscUJBQXFCLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFFLEVBQUUsRUFBRSxvQkFBb0IsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDcnRGLE9BQU8sQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO0FBQ3hDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxvQkFBb0IsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLHFCQUFxQixFQUFFLEVBQUUsRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsRUFBRSxFQUFFLG9CQUFvQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3h0RixNQUFNLGdCQUFnQixHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMzMEUsT0FBTyxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO0FBQzVDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ254RCxPQUFPLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7QUFDNUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQy8wRSxPQUFPLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztBQUMxQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDcDhFLE9BQU8sQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztBQUM5QyxNQUFNLG9CQUFvQixHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDNXRELE9BQU8sQ0FBQyxvQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQztBQUNwRDtBQUNBLFNBQVMsV0FBVyxDQUFDLFlBQVksRUFBRTtBQUNuQyxFQUFFLFFBQVEsWUFBWTtBQUN0QixJQUFJLEtBQUssaUJBQWlCO0FBQzFCLE1BQU0sT0FBTyxlQUFlLENBQUM7QUFDN0I7QUFDQSxJQUFJLEtBQUssa0JBQWtCO0FBQzNCLE1BQU0sT0FBTyxnQkFBZ0IsQ0FBQztBQUM5QjtBQUNBLElBQUksS0FBSyxrQkFBa0I7QUFDM0IsTUFBTSxPQUFPLGdCQUFnQixDQUFDO0FBQzlCO0FBQ0EsSUFBSSxLQUFLLG1CQUFtQjtBQUM1QixNQUFNLE9BQU8saUJBQWlCLENBQUM7QUFDL0I7QUFDQSxJQUFJLEtBQUssc0JBQXNCO0FBQy9CLE1BQU0sT0FBTyxvQkFBb0IsQ0FBQztBQUNsQztBQUNBLElBQUksS0FBSyxnQkFBZ0I7QUFDekIsTUFBTSxPQUFPLGNBQWMsQ0FBQztBQUM1QjtBQUNBLElBQUksS0FBSyxtQkFBbUI7QUFDNUIsTUFBTSxPQUFPLGlCQUFpQixDQUFDO0FBQy9CO0FBQ0EsSUFBSTtBQUNKLE1BQU0sT0FBTyxJQUFJLENBQUM7QUFDbEIsR0FBRztBQUNILENBQUM7QUFDRDtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsS0FBSztBQUM5RTtBQUNBLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQzNDLHFCQUFxQixtQkFBbUIsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLEVBQUU7QUFDaEUsdUJBQXVCLDBCQUEwQixFQUFFLHFCQUFxQix3QkFBd0IsQ0FBQztBQUNqRyx1QkFBdUIsa0JBQWtCLEVBQUUscUJBQXFCLGdCQUFnQixDQUFDO0FBQ2pGLHNCQUFzQixDQUFDLENBQUM7QUFDeEIscUJBQXFCLElBQUksMkNBQTJDLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUY7QUFDQSxNQUFNLGdCQUFnQixHQUFHLElBQUcsMkNBQTJDLENBQUMsMEJBQTBCLEVBQUUsWUFBWTtBQUNoSCxDQUFDLE9BQU87QUFDUixFQUFFLEdBQUc7QUFDTCxFQUFFLE1BQU07QUFDUixFQUFFLElBQUk7QUFDTixFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLFVBQVU7QUFDWixFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLE1BQU07QUFDUixFQUFFLHFCQUFxQjtBQUN2QixFQUFFLE1BQU07QUFDUixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLE1BQU07QUFDUixFQUFFLHNCQUFzQjtBQUN4QixFQUFFLE1BQU07QUFDUixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLE1BQU07QUFDUixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLE1BQU07QUFDUixFQUFFLE9BQU87QUFDVCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLE1BQU07QUFDUixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLE9BQU87QUFDVCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLE9BQU87QUFDVCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLEdBQUc7QUFDTCxFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFF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LEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsTUFBTTtBQUNSLEVBQUUsS0FBSztBQUNQLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsS0FBSztBQUNQLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsS0FBSztBQUNQLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsS0FBSztBQUNQLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsR0FBRztBQUNMLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsT0FBTztBQUNULEVBQUUsTUFBTTtBQUNSLEVBQUUsY0FBYztBQUNoQixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLEdB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QUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVB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RUFBRSxNQUFNO0FBQ1IsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsSUFBSTtBQUNOLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsR0FBRztBQUNMLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsSUFBSTtBQUNOLEVBQUUsTUFBTTtBQUNSLEVBQUUsR0FBRztBQUNMLEVBQUUsTUFBTTtBQUNSLEVBQUUsSUFBSTtBQUNOLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsY0FBYztBQUNoQixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLElBQUk7QUFDTixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLElBQUk7QUFDTixFQUFFLE1BQU07QUFDUixFQUFFLEdBQUc7QUFDTCxFQUFFLE1BQU07QUFDUixFQUFFLElBQUk7QUFDTixFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLE1BQU07QUFDUixFQUFFLHlCQUF5QjtBQUMzQixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLE1BQU07QUFDUixFQUFFLHFCQUFxQjtBQUN2QixFQUFFLE1BQU07QUFDUixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLE1BQU07QUFDUixFQUFFLHNCQUFzQjtBQUN4QixFQUFFLE1BQU07QUFDUixFQUFFLGtCQUFrQjtBQUNwQixF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RUFBRSx3QkFBd0I7QUFDMUIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxHQUFHO0FBQ0wsRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxRQUFRO0FBQ1YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxpQkFBaUI7QUFDbkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxRQUFRO0FBQ1YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxpQkFBaUI7QUFDbkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxhQUFhO0FBQ2YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxPQUFPO0FBQ1QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxlQUFlO0FBQ2pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsdUJBQXVCO0FBQ3pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsY0FBYztBQUNoQixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLGVBQWU7QUFDakIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsT0FBTztBQUNULEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsR0FBRztBQUNMLEVBQUUsTUFBTTtBQUNSLEVBQUUsS0FBSztBQUNQLEVBQUUsTUFBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsY0FBYztBQUNoQixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLHFCQUFxQjtBQUN2QixFQUFFLE1BQU07QUFDUixFQUFFLFVBQVU7QUFDWixFQUFFLE1BQU07QUFDUixFQUFFLGVBQWU7QUFDakIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxPQUFPO0FBQ1QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxPQUFPO0FBQ1QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxPQUFPO0FBQ1QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsY0FBYztBQUNoQixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLFVBQVU7QUFDWixFQUFFLE1BQU07QUFDUixFQUFFLEdBQUc7QUFDTCxFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLE1BQU07QUFDUixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLE9BQU87QUFDVCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLGVBQWU7QUFDakIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxlQUFlO0FBQ2pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsdUJBQXVCO0FBQ3pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsNkJBQTZCO0FBQy9CLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0NBQWdDO0FBQ2xDLEVBQUUsTUFBTTtBQUNSLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsTUFBTTtBQUNSLEVBQUUsY0FBYztBQUNoQixFQUFFLE1BQU07QUFDUixFQUFFLE9BQU87QUFDVCxFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLE1BQU07QUFDUixFQUFFLHlCQUF5QjtBQUMzQixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLEdBQUc7QUFDTCxFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLE9BQU87QUFDVCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLEdBQUc7QUFDTCxFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLEdBQUc7QUFDTCxFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLElBQUk7QUFDTixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLEdBQUc7QUFDTCxFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLGNBQWM7QUFDaEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxzQkFBc0I7QUFDeEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxRQUFRO0FBQ1YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxPQUFPO0FBQ1QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsd0JBQXdCO0FBQzFCLEVBQUUsTUFBTTtBQUNSLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsTUFBTTtBQUNSLEVBQUUsMkJBQTJCO0FBQzdCLEVBQUUsTUFBTTtBQUNSLEVBQUUsR0FBRztBQUNMLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsTUFBTTtBQUNSLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsTUFBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsR0FBRztBQUNMLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsTUFBTTtBQUNSLEVBQUUsMEJBQTBCO0FBQzVCLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsT0FBTztBQUNULEVBQUUsTUFBTTtBQUNSLEVBQUUsZUFBZTtBQUNqQixFQUFFLE1BQU07QUFDUixFQUFFLFVBQVU7QUFDWixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLGNBQWM7QUFDaEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxlQUFlO0FBQ2pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsT0FBTztBQUNULEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsSUFBSTtBQUNOLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsMkJBQTJCO0FBQzdCLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsMkJBQTJCO0FBQzdCLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsMkJBQTJCO0FBQzdCLEVBQUUsTUFBTTtBQUNSLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsTUFBTTtBQUNSLEVBQUUsd0JBQXdCO0FBQzFCLEVBQUUsTUFBTTtBQUNSLEVBQUUsMEJBQTBCO0FBQzVCLEVBQUUsTUFBTTtBQUNSLEVBQUUseUJBQXlCO0FBQzNCLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsT0FBTztBQUNULEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsT0FBTztBQUNULEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsT0FBTztBQUNULEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsMEJBQTBCO0FBQzVCLEVB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YixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLGVBQWU7QUFD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QUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsS0FBSztBQUNQLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsR0FBRztBQUNMLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsSUFBSTtBQUNOLEVBQUUsTUFBTTtBQUNSLEVBQUUsS0FBSztBQUNQLEVBQUUsTUFBTTtBQUNSLEVBQUUsS0FBSztBQUNQLEVBQUUsTUFBTTtBQUNSLEVBQUUsS0FBSztBQUNQLEVBQUUsTUFBTTtBQUNSLEVBQUUsSUFBSTtBQUNOLEVBQUUsTUFBTTtBQUNSLEVBQUUsZUFBZTtBQUNqQixF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LEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsR0FBRztBQUNMLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsTUFBTTtBQUNSLEVBQUUsMEJBQTBCO0FBQzVCLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUseUJBQXlCO0FBQzNCLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0NBQWdDO0FBQ2xDLEVBQUUsTUFBTTtBQUNSLEVBQUUsMEJBQTBCO0FBQzVCLEVBQUUsTUFBTTtBQUNSLEVBQUUsdUJBQXVCO0FBQ3pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsNEJBQTRCO0FBQzlCLEVBQUUsTUFBTTtBQUNSLEVBQUUsNEJBQTRCO0FBQzlCLEVBQUUsTUFBTTtBQUNSLEVBQUUsMEJBQTBCO0FBQzVCLEVBQUUsTUFBTTtBQUNSLEVBQUUsNEJBQTRCO0FBQzlCLEVBQUUsTUFBTTtBQUNSLEVBQUUsMkJBQTJCO0FBQzdCLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsdUJBQXVCO0FBQ3pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsMEJBQTBCO0FBQzVCLEVBQUUsTUFBTTtBQUNSLEVBQUUsd0JBQXdCO0FBQzFCLEVBQUUsTUFBTTtBQUNSLEVBQUUsdUJBQXVCO0FBQ3pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsdUJBQXVCO0FBQ3pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsMkJBQTJCO0FBQzdCLEVBQUUsTUFBTTtBQUNSLEVBQUUsdUJBQXVCO0FBQ3pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsTUFBTTtBQUNSLEVBQUUsd0JBQXdCO0FBQzFCLEVBQUUsTUFBTTtBQUNSLEVBQUUsdUJBQXVCO0FBQ3pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsMkJBQTJCO0FBQzdCLEVBQUUsTUFBTTtBQUNSLEVBQUUsMEJBQTBCO0FBQzVCLEVBQUUsTUFBTTtBQUNSLEVBQUUsd0JBQXdCO0FBQzFCLEVBQUUsTUFBTTtBQUNSLEVBQUUseUJBQXlCO0FBQzNCLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUseUJBQXlCO0FBQzNCLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUseUJBQXlCO0FBQzNCLEVBQUUsTUFBTTtBQUNSLEVBQUUsdUJBQXVCO0FBQ3pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsdUJBQXVCO0FBQ3pCLEVBQUUsTUFBTTtBQUNSLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsTUFBTTtBQUNSLEVBQUUsMkJBQTJCO0FBQzdCLEVBQUUsTUFBTTtBQUNSLEVBQUUsdUJBQXVCO0FBQ3pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsTUFBTTtBQUNSLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsTUFBTTtBQUNSLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsTUFBTTtBQUNSLEVBQUUsT0FBTztBQUNULEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsTUFBTTtBQUNSLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsTUFBTTtBQUNSLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsTUFBTTtBQUNSLEVBQUUsSUFBSTtBQUNOLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsMkJBQTJCO0FBQzdCLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUs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TTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsR0FBRztBQUNMLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUseUJBQXlCO0FBQzNCLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsMEJBQTBCO0FBQzVCLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFB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RUFBRSxPQUFPO0FBQ1QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxrQkFBa0I7QUFDcEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxxQkFBcUI7QUFDdkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSx1QkFBdUI7QUFDekIsRUFBRSxNQUFNO0FBQ1IsRUFBRSx3QkFBd0I7QUFDMUIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxPQUFPO0FBQ1QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxpQkFBaUI7QUFDbkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxPQUFPO0FBQ1QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxRQUFRO0FBQ1YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSw4QkFBOEI7QUFDaEMsRUFBRSxNQUFNO0FBQ1IsRUFBRSxzQkFBc0I7QUFDeEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFN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QkFBcUI7QUFDdkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxzQkFBc0I7QUFDeEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxrQkFBa0I7QUFDcEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxzQkFBc0I7QUFDeEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSx1QkFBdUI7QUFDekIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxrQkFBa0I7QUFDcEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSx1QkFBdUI7QUFDekIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxpQkFBaUI7QUFDbkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxzQkFBc0I7QUFDeEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSx1QkFBdUI7QUFDekIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxxQkFBcUI7QUFDdkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxxQkFBcUI7QUFDdkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxxQkFBcUI7QUFDdkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxxQkFBcUI7QUFDdkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxLQUFLO0FBQ1AsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxpQkFBaUI7QUFDbkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxlQUFlO0FBQ2pC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LHlCQUF5QjtBQUMzQixFQUFFLE1BQU07QUFDUixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLE1BQU07QUFDUixFQUFFLHlCQUF5QjtBQUMzQixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLE1BQU07QUFDUixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLE1BQU07QUFDUixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLE1BQU07QUFDUixFQUFFLHFCQUFxQjtBQUN2QixFQUFFLE1BQU07QUFDUixFQUFFLG1CQUFtQjtBQUNyQixFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLE1BQU07QUFDUixFQUFFLEdBQUc7QUFDTCxFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFVBQVU7QUFDWixFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLGNBQWM7QUFDaEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsT0FBTztBQUNULEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsT0FBTztBQUNULEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsZUFBZTtBQUNqQixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLHlCQUF5QjtBQUMzQixFQUFFLE1BQU07QUFDUixFQUFFLHlCQUF5QjtBQUMzQixFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLHlCQUF5QjtBQUMzQixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLEdBQUc7QUFDTCxFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLHFCQUFxQjtBQUN2QixFQUFFLE1BQU07QUFDUixFQUFFLFVBQVU7QUFDWixFQUFFLE1BQU07QUFDUixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLE1BQU07QUFDUixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLFVBQVU7QUFDWixFQUFFLE1BQU07QUFDUixFQUFFLHdCQUF3QjtBQUMxQixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLHFCQUFxQjtBQUN2QixFQUFFLE1BQU07QUFDUixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLE1BQU07QUFDUixFQUFFLFVBQVU7QUFDWixFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFVBQVU7QUFDWixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFFBQVE7QUFDVixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLE1BQU07QUFDUixFQUFFLHdCQUF3QjtBQUMxQixFQUFFLE1BQU07QUFDUixFQUFFLGdDQUFnQztBQUNsQyxFQUFFLE1BQU07QUFDUixFQUFFLHlCQUF5QjtBQUMzQixFQUFFLE1BQU07QUFDUixFQUFFLGlDQUFpQztBQUNuQyxFQUFFLE1BQU07QUFDUixFQUFFLGNBQWM7QUFDaEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSx5Q0FBeUM7QUFDM0MsRUFBRSxNQUFNO0FBQ1IsRUFBRSxnQ0FBZ0M7QUFDbEMsRUFBRSxNQUFNO0FBQ1IsRUFBRSwyQkFBMkI7QUFDN0IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxnQ0FBZ0M7QUFDbEMsRUFBRSxNQUFNO0FBQ1IsRUFBRSwyQkFBMkI7QUFDN0IsRUFBRSxNQUFNO0FBQ1IsRUFBRSw0QkFBNEI7QUFDOUIsRUFBRSxNQUFNO0FBQ1IsRUFBRSw2QkFBNkI7QUFDL0IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxpQ0FBaUM7QUFDbkMsRUFBRSxNQUFNO0FBQ1IsRUFBRSw0QkFBNEI7QUFDOUIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxrQkFBa0I7QUFDcEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxrQkFBa0I7QUFDcEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxhQUFhO0FBQ2YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxnQkFBZ0I7QUFDbEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSwrQkFBK0I7QUFDakMsRUFBRSxNQUFNO0FBQ1IsRUFBRSxnQ0FBZ0M7QUFDbEMsRUFBRSxNQUFNO0FBQ1IsRUFBRSw4QkFBOEI7QUFDaEMsRUFBRSxNQUFNO0FBQ1IsRUFBRSx5QkFBeUI7QUFDM0IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxxQkFBcUI7QUFDdkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxLQUFLO0FBQ1AsRUFBRSxNQUFNO0FBQ1IsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsT0FBTztBQUNULEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsTUFBTTtBQUNSLEVBQUUsR0FBRztBQUNMLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsSUFBSTtBQUNOLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsR0FBRztBQUNMLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsY0FBYztBQUNoQixFQUFFLE1BQU07QUFDUixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLE1BQU07QUFDUixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLE1BQU07QUFDUixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLGFBQWE7QUFDZixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLE1BQU07QUFDUixFQUFFLHNCQUFzQjtBQUN4QixFQUFFLE1BQU07QUFDUixFQUFFLGdCQUFnQjtBQUNsQixFQUFFLE1BQU07QUFDUixFQUFFLHFCQUFxQjtBQUN2QixFQUFFLE1BQU07QUFDUixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLE1BQU07QUFDUixFQUFFLDRCQUE0QjtBQUM5QixFQUFFLE1BQU07QUFDUixFQUFFLDJCQUEyQjtBQUM3QixFQUFFLE1BQU07QUFDUixFQUFFLGtCQUFrQjtBQUNwQixFQUFFLE1BQU07QUFDUixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLE1BQU07QUFDUixFQUFFLHNCQUFzQjtBQUN4QixFQUFFLE1BQU07QUFDUixFQUFFLHVCQUF1QjtBQUN6QixFQUFFLE1BQU07QUFDUixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLE1BQU07QUFDUixFQUFFLHlCQUF5QjtBQUMzQixFQUFFLE1BQU07QUFDUixFQUFFLFVBQVU7QUFDWixFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLGNBQWM7QUFDaEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxtQkFBbUI7QUFDckIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSx3QkFBd0I7QUFDMUIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsc0JBQXNCO0FBQ3hCLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsdUJBQXVCO0FBQ3pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsT0FBTztBQUNULEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsY0FBYztBQUNoQixFQUFFLE1BQU07QUFDUixFQUFFLFlBQVk7QUFDZCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLGlCQUFpQjtBQUNuQixFQUFFLE1BQU07QUFDUixFQUFFLFdBQVc7QUFDYixFQUFFLE1BQU07QUFDUixFQUFFLGNBQWM7QUFDaEIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxtQkFBbUI7QUFDckIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxxQkFBcUI7QUFDdkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxpQkFBaUI7QUFDbkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxpQkFBaUI7QUFDbkIsRUFBRSxNQUFNO0FBQ1IsRUFBRSwwQkFBMEI7QUFDNUIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxVQUFVO0FBQ1osRUFBRSxNQUFNO0FBQ1IsRUFBRSxhQUFhO0FBQ2YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxXQUFXO0FBQ2IsRUFBRSxNQUFNO0FBQ1IsRUFBRSxZQUFZO0FBQ2QsRUFBRSxNQUFNO0FBQ1IsRUFBRSxRQUFRO0FBQ1YsRUFBRSxNQUFNO0FBQ1IsRUFBRSxlQUFlO0FBQ2pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsdUJBQXVCO0FBQ3pCLEVBQUUsTUFBTTtBQUNSLEVBQUUsSUFBSTtBQUNOLEVBQUUsTUFBTTtBQUNSLEVBQUUsT0FBTztBQUNULEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUscUJBQXFCO0FBQ3ZCLEVBQUUsTUFBTTtBQUNSLEVBQUUsVUFBVTtBQUNaLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsd0JBQXdCO0FBQzFCLEVBQUUsTUFBTTtBQUNSLEVBQUUsbUJBQW1CO0FBQ3JCLEVBQUUsTUFBTTtBQUNSLEVBQUUsMkJBQTJCO0FBQzdCLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsMEJBQTBCO0FBQzVCLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsYUFBYTtBQUNmLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsU0FBUztBQUNYLEVBQUUsTUFBTTtBQUNSLEVBQUUsR0FBRztBQUNMLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsUUFBUTtBQUNWLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsV0FBVztBQUNiLEVBQUUsTUFBTTtBQUNSLEVBQUUsZ0JBQWdCO0FBQ2xCLEVBQUUsTUFBTTtBQUNSLEVBQUUsa0JBQWtCO0FBQ3BCLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNSLEVBQUUsaUJBQWlCO0FBQ25CLEVBQUUsTUFBTTtBQUNSLEVBQUUsWUFBWTtBQUNkLEVBQUUsTUFBTTtBQUNS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QWU7QUFDakIsRUFBRSxNQUFNO0FBQ1IsRUFBRSxDQUFDO0FBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDSCxNQUFNLHdCQUF3QixHQUFHLElBQUcsMkNBQTJDLENBQUMsMEJBQTBCLEVBQUUsWUFBWTtBQUN4SCxDQUFDLE9BQU87QUFDUixFQUFFLE9BQU87QUFDVCxFQUFFLE1BQU07QUFDUixFQUFFLElBQUk7QUFDTixFQUFFLE1BQU07QUFDUixFQUFFLElBQUk7QUFDTixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLElBQUk7QUFDTixFQUFFLE1BQU07QUFDUixFQUFFLElBQUk7QUFDTixFQUFFLE1BQU07QUFDUixFQUFFLElBQUk7QUFDTixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLElBQUk7QUFDTixFQUFFLE1BQU07QUFDUixFQUFFLElBQUk7QUFDTixFQUFFLE1BQU07QUFDUixFQUFFLElBQUk7QUFDTixFQUFFLE1BQU07QUFDUixFQUFFLElBQUk7QUFDTixFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLEtBQUs7QUFDUCxFQUFFLE1BQU07QUFDUixFQUFFLFNBQVM7QUFDWCxFQUFFLE1BQU07QUFDUixFQUFFLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUNIO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPLENBQUMsdUJBQXVCLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CLEtBQUs7QUFDOUU7QUFDQSxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUMzQyxxQkFBcUIsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixFQUFFO0FBQ2hFLHVCQUF1Qix1QkFBdUIsRUFBRSxxQkFBcUIscUJBQXFCLENBQUM7QUFDM0YsdUJBQXVCLG9CQUFvQixFQUFFLHFCQUFxQixrQkFBa0IsQ0FBQztBQUNyRix1QkFBdUIsb0JBQW9CLEVBQUUscUJBQXFCLGtCQUFrQixDQUFDO0FBQ3JGLHVCQUF1Qix5QkFBeUIsRUFBRSxxQkFBcUIsdUJBQXVCLENBQUM7QUFDL0YsdUJBQXVCLGNBQWMsRUFBRSxxQkFBcUIsWUFBWSxDQUFDO0FBQ3pFLHNCQUFzQixDQUFDLENBQUM7QUFDeEIscUJBQXFCLElBQUksMkNBQTJDLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUY7QUFDQSxNQUFNLG9CQUFvQixHQUFHLElBQUcsMkNBQTJDLENBQUMscUJBQXFCLEVBQUUsVUFBVSxDQUFDLEVBQUU7QUFDaEgsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ25CLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNuQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ25CLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNuQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ25CLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNuQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ25CLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNuQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ25CLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNuQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ25CLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNuQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ25CLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNuQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ25CLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNuQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkIsQ0FBQyxDQUFDLENBQUM7QUFDSCxTQUFTLHVCQUF1QixDQUFDLElBQUksRUFBRTtBQUN2QyxDQUFDLElBQUksSUFBSSxJQUFJLE1BQU0sSUFBSSxJQUFJLElBQUksTUFBTSxFQUFFO0FBQ3ZDLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDWCxFQUFFLE1BQU0sSUFBSSxJQUFJLElBQUksTUFBTSxJQUFJLElBQUksSUFBSSxNQUFNLEVBQUU7QUFDOUMsRUFB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QUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsT0FBTztBQUNoQixFQUFFLEdBQUcsRUFBRSxPQUFPO0FBQ2QsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE9BQU87QUFDaEIsRUFBRSxHQUFHLEVBQUUsT0FBTztBQUNkLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsT0FBTztBQUNoQixFQUFFLEdBQUcsRUFBRSxPQUFPO0FBQ2QsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxPQUFPO0FBQ2hCLEVBQUUsR0FBRyxFQUFFLE9BQU87QUFDZCxFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE9BQU87QUFDaEIsRUFBRSxHQUFHLEVBQUUsT0FBTztBQUNkLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsT0FBTztBQUNoQixFQUFFLEdBQUcsRUFBRSxPQUFPO0FBQ2QsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxPQUFPO0FBQ2hCLEVBQUUsR0FBRyxFQUFFLE9BQU87QUFDZCxFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxPQUFPO0FBQ2hCLEVBQUUsR0FBRyxFQUFFLE9BQU87QUFDZCxFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsTUFBTTtBQUNmLEVBQUUsR0FBRyxFQUFFLE1BQU07QUFDYixFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE1BQU07QUFDZixFQUFFLEdBQUcsRUFBRSxNQUFNO0FBQ2IsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxNQUFNO0FBQ2YsRUFBRSxHQUFHLEVBQUUsTUFBTTtBQUNiLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsT0FBTztBQUNoQixFQUFFLEdBQUcsRUFBRSxPQUFPO0FBQ2QsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxPQUFPO0FBQ2hCLEVBQUUsR0FBRyxFQUFFLE9BQU87QUFDZCxFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE9BQU87QUFDaEIsRUFBRSxHQUFHLEVBQUUsT0FBTztBQUNkLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsT0FBTztBQUNoQixFQUFFLEdBQUcsRUFBRSxPQUFPO0FBQ2QsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxPQUFPO0FBQ2hCLEVBQUUsR0FBRyxFQUFFLE9BQU87QUFDZCxFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE9BQU87QUFDaEIsRUFBRSxHQUFHLEVBQUUsT0FBTztBQUNkLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsT0FBTztBQUNoQixFQUFFLEdBQUcsRUFBRSxPQUFPO0FBQ2QsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxPQUFPO0FBQ2hCLEVBQUUsR0FBRyxFQUFFLE9BQU87QUFDZCxFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FBSyxFQUFFLE9BQU87QUFDaEIsRUFBRSxHQUFHLEVBQUUsT0FBTztBQUNkLEVBQUU7QUFDRixDQUFDO0FBQ0QsRUFBRSxLQUFLLEVBQUUsT0FBTztBQUNoQixFQUFFLEdBQUcsRUFBRSxPQUFPO0FBQ2QsRUFBRTtBQUNGLENBQUM7QUFDRCxFQUFFLEtBQUssRUFBRSxPQUFPO0FBQ2hCLEVBQUUsR0FBRyxFQUFFLE9BQU87QUFDZCxFQUFFO0FBQ0YsQ0FBQztBQUNELEVBQUUsS0FB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UUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsMEJBQTBCO0FBQzVCLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsUUFBUTtBQUNWLEVBQUUsMEJBQTBCO0FBQzVCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDBCQUEwQjtBQUM1QixFQUFFLFFBQVE7QUFDVixFQUFFLDRDQUE0QztBQUM5QyxFQUFFLFFBQVE7QUFDVixFQUFFLHNDQUFzQztBQUN4QyxFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxvQkFBb0I7QUFDdEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsUUFBUTtBQUNWLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsUUFBUTtBQUNWLEVBQUUsb0JBQW9CO0FBQ3RCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFjO0FBQ2hCLEVBQUUsUUFBUTtBQUNWLEVBQUUsY0FBYztBQUNoQixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLG9CQUFvQjtBQUN0QixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLFFBQVE7QUFDVixFQUFFLGNBQWM7QUFDaEIsRUFBRSxRQUFRO0FBQ1YsRUFBRSxjQUFj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LEVBQUU7QUFDaEQsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdkY7QUFDQSxFQUFFLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFO0FBQ3RDLElBQUksT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUMsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3JELEVBQUUsTUFBTSxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNyRCxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQztBQUNsRixDQUFDO0FBQ0Q7QUFDQSxNQUFNLFVBQVUsQ0FBQztBQUNqQixFQUFFLFdBQVcsQ0FBQyxNQUFNLEVBQUU7QUFDdEIsSUFBSSxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO0FBQzdCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakMsSUFBSSxJQUFJLENBQUMsV0FBVyxD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R0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCO0FBQ0EsSUFBSSxJQUFJLEtBQUssRUFBRTtBQUNmLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN6QixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksV0FBVyxFQUFFO0FBQ3JCLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzlFLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxTQUFTLEVBQUU7QUFDbkIsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEUsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUMzQztBQUNBLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtBQUN0QixNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFDdEIsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsT0FBTyxFQUFFO0FBQ1QsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsT0FBTyxFQUFFO0FBQ1QsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLFNB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SSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RTtBQUNBLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDO0FBQ2pDLFFBQVEsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJO0FBQzdCLFFBQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7QUFDNUMsUUFBUSxXQUFXO0FBQ25CLFFBQVEsU0FBUztBQUNqQixRQUFRLFdBQVc7QUFDbkIsUUFBUSxTQUFTO0FBQ2pCLFFBQVEsY0FBYyxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sS0FBSztBQUM1QyxVQUFVLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzlELFVBQVUsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDOUQsVUFBVSxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUM5RCxVQUFVLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzlELFVBQVUsTUFBTSxJQUFJLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDMUMsVUFBVSxNQUFNLElBQUksR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMxQyxVQUFVLE1BQU0sT0FBTyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcscUJBQXFC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V0FBVyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsT0FBTyxDQUFDLENBQUM7QUFDVCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQzFCLE1BQU0sTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUYsTUFBTSxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwRCxNQUFNLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxJQUFJLENBQUM7QUFDckQsWUFBWSxZQUFZLEdBQUcsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUMzQyxNQUFNLE1BQU0sSUFBSSxHQUFHLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzlEO0FBQ0EsTUFBTSxLQUFLLE1BQU0sTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQy9DLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUM7QUFDN0QsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQztBQUM3RCxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDO0FBQzdELFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUM7QUFDN0QsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRTtBQUN2RCxRQUFRLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQzlCLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDO0FBQ2pDLFFBQVEsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJO0FBQzdCLFFBQVEsS0FBSyxFQUFFLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDO0FBQ2pDLFFBQVEsV0FBVztBQUNuQixRQUFRLFdBQVc7QUFDbkIsUUFBUSxjQUFjLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxLQUFLO0FBQzVDLFVBQVUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDOUM7QUFDQSxVQUFVLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDN0QsWUFBWSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEYsV0FBVztBQUNYO0FBQ0EsVUFBVSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLFVBQVUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RSxTQUFTO0FBQ1QsT0FBTyxDQUFDLENBQUM7QUFDVCxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsTUFBTSxpQkFBaUIsU0FBUyxrQkFBa0IsQ0FBQztBQUNuRCxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUU7QUFDMUIsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDdEIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQztBQUM1RCxHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxNQUFNLGVBQWUsU0FBUyxnQkFBZ0IsQ0FBQztBQUMvQyxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUU7QUFDMUIsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDdEIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQztBQUMxRCxHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxNQUFNLGFBQWEsU0FBUyxnQkFBZ0IsQ0FBQztBQUM3QyxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUU7QUFDMUIsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDdEIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQztBQUN4RCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUM1QixJQUFJLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzVEO0FBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRTtBQUNyQyxNQUFNLE9BQU87QUFDYixLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7QUFDakM7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDMUQsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEM7QUFDQSxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNsRSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNuQyxVQUFVLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQyxVQUFVLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbkQsU0FBUyxDQUFDLENBQUM7QUFDWCxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtBQUMxQixNQUFNLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzVGLE1BQU0sTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEQsTUFBTSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssSUFBSSxDQUFDO0FBQ3JELFlBQVksWUFBWSxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDM0MsTUFBTSxNQUFNLElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM5RDtBQUNBLE1BQU0sS0FBSyxNQUFNLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUNqRCxRQUFRLEtBQUssTUFBTSxNQUFNLElBQUksUUFBUSxFQUFFO0FBQ3ZDLFVBQVUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUM7QUFDL0QsVUFBVSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQztBQUMvRCxVQUFVLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDO0FBQy9ELFVBQVUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENB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SUFBSSxVQUFVLEVBQUU7QUFDcEIsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtBQUM1QixRQUFRLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlGLFFBQVEsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEQ7QUFDQSxRQUFRLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztBQUNuQyxVQUFVLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSTtBQUMvQixVQUFVLEtBQUssRUFBRSxZQUFZO0FBQzdCLFVBQVUsV0FBVztBQUNyQixVQUFVLFdBQVc7QUFDckIsVUFBVSxjQUFjLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxLQUFLO0FBQzlDLFlBQVksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FB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Q0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkUsTUFBTSxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsTUFBTSxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsTUFBTSxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsTUFBTSxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztBQUNuQyxNQUFNLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixNQUFNLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixNQUFNLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixNQUFNLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQ25DLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsTUFBTSxJQUFJLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QixNQUFNLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLE1BQU0sSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsTUFBTSxJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixNQUFNLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsTUFBTSxJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixNQUFNLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFB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QU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN0QyxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRCxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUU7QUFDdEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztBQUNuQixLQUFLLE1BQU0sSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRTtBQUM3QixNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQ25CLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRTtBQUN0QixNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQ25CLEtBQUssTUFBTSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFO0FBQzdCLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7QUFDbkIsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDO0FBQzlCLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDM0IsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUMzQixJQUFJLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsSUFBSSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDaEI7QUFDQSxJQUFJLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDbkIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO0FBQ2hELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDL0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxLQUFLLE1BQU07QUFDWCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7QUFDakQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNoRCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQzlDLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLElBQUksSUFBSSxD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LENBQUMsQ0FBQztBQUNiLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEdBQUc7QUFDSDtBQUNBLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDdEMsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO0FBQ2xDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLEdBQUc7QUFDSDtBQUNBLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUM1QixJQUFJLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDOUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcs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QUFjLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVB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UUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxJQUFJLENBQUM7QUFDbEIsUUFBUSxLQUFLLElBQUksQ0FBQztBQUNsQixRQUFRLEtBQUssSUFBSTtB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LENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdHhCO0FBQ0EsU0FBUyxVQUFVLENBQUMsRUFBRSxFQUFFO0FBQ3hCLEVBQUUsSUFBSSxFQUFFLElBQUksSUFBSSxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUU7QUFDaEMsSUFBSSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDckIsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksRUFBRSxJQUFJLElBQUksSUFBSSxFQUFF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VyxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDdkIsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBQztBQUN2QixNQUFNLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDdkIsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBQztBQUN2QixNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUNueUUsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzNYLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbDRJLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN2NEMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzV3RCxNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdoQjtBQUNBLE1BQU0sZUFBZSxDQUFDO0FBQ3RCLEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRSxPQUFPLEdBQUcsRUFBRSxFQUFFO0FBQ3BDLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFO0FBQ3RELE1BQU0sTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO0FBQ3ZFLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDekIsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQztBQUNyQixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDO0FBQzdDLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLElBQUksS0FBSyxDQUFDO0FBQ3ZELElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQztBQUMzQyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7QUFDbEMsSUFBSSxJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO0FBQ3JDO0FBQ0EsSUFBSSxJQUFJLE9BQU8sS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLFNBQVMsRUFBRTtBQUNuRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDckIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUMzQixJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUM7QUFDM0MsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEQsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDckQsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDdEMsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztBQUN2QixJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUN4QyxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDdEIsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUN4QixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzFCLElBQUksSUFBSSxLQUFLLENBQUM7QUFDZDtBQUNBLElBQUksT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUMvQyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDckIsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsRUFBRTtBQUMzQixNQUFNLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDO0FBQ0EsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFlBQVksR0FBRztBQUNqQixJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNsQixNQUFNLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDaEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ2pDLElBQUksTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUN2QyxJQUFJLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDakMsSUFBSSxJQUFJLE1BQU0sRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNyQztBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLENBQUMsRUFBRTtBQUMvQixNQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUN6QixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ3hCLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ3BCLFFBQVEsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNsQixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDO0FBQ3ZCLE1BQU0sSUFBSSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQztBQUM5QjtBQUNBLE1BQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQzNCLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDbEQsVUFBVSxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQy9CLFFBQVEsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztBQUM3QixRQUFRLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUIsUUFBUSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztBQUMzQixRQUFRLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDbkIsUUFBUSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCO0FBQ0EsUUFBUSxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsT0FBTyxFQUFFO0FBQ3JELFVBQVUsS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUN4QztBQUNBLFVBQVUsUUFBUSxLQUFLO0FBQ3ZCLFlBQVksS0FBSyxVQUFVO0FBQzNCLGNBQWMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ2hFO0FBQ0EsY0FBYyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFO0FBQ2pELGdCQUFnQixNQUFNLElBQUksQ0FBQyxDQUFDO0FBQzVCLGVBQWU7QUFDZjtBQUNBLGNBQWMsTUFBTTtBQUNwQjtBQUNBLFlBQVksS0FBSyxXQUFXO0FBQzVCLGNBQWMsS0FBSyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDaEM7QUFDQSxjQUFjLElBQUksV0FBVyxFQUFFO0FBQy9CLGdCQUFnQixHQUFHO0FBQ25CLGtCQUFrQixLQUFLLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztBQUN4RCxpQkFBaUIsUUFBUSxLQUFLLElBQUksRUFBRSxFQUFFO0FBQ3RDO0FBQ0EsZ0JBQWdCLEdBQUc7QUFDbkIsa0JBQWtCLEtBQUssSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0FBQ3hELGlCQUFpQixRQUFRLEtBQUssSUFBSSxFQUFFLEVBQUU7QUFDdEMsZUFBZSxNQUFNO0FBQ3JCLGdCQUFnQixHQUFHO0FBQ25CLGtCQUFrQixLQUFLLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztBQUN4RCxpQkFBaUIsUUFBUSxLQUFLLElBQUksRUFBRSxFQUFFO0FBQ3RDO0FBQ0EsZ0JBQWdCLEdBQUc7QUFDbkIsa0JBQWtCLEtBQUssSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0FBQ3hELGlCQUFpQixRQUFRLEtBQUssSUFBSSxFQUFFLEVBQUU7QUFDdEMsZUFBZTtBQUNmO0FBQ0EsY0FBYyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQy9FO0FBQ0EsY0FBYyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsT0FBTyxFQUFFO0FBQ3hELGdCQUFnQixJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsS0FBSyxFQUFFLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyRixlQUFlO0FBQ2Y7QUFDQSxjQUFjLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLE9BQU8sRUFBRTtBQUNqRyxnQkFBZ0IsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUM1QixlQUFlO0FBQ2Y7QUFDQSxjQUFjLE1BQU07QUFDcEI7QUFDQSxZQUFZLEtBQUssWUFBWTtBQUM3QixjQUFjLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNoRTtBQUNBLGNBQWMsV0FBVyxJQUFJLENBQUMsQ0FBQztBQUMvQjtBQUNBLGNBQWMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLE9BQU8sRUFBRTtBQUN4RCxnQkFBZ0IsRUFBRSxNQUFNLENBQUM7QUFDekI7QUFDQSxnQkFBZ0IsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsT0FBTyxFQUFFO0FBQ25HLGtCQUFrQixNQUFNLElBQUksQ0FBQyxDQUFDO0FBQzlCLGlCQUFpQjtBQUNqQixlQUFlO0FBQ2Y7QUFDQSxjQUFjLE1BQU07QUFDcEI7QUFDQSxZQUFZLEtBQUssWUFBWTtBQUM3QixjQUFjLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNoRTtBQUNBLGNBQWMsV0FBVyxJQUFJLENBQUMsQ0FBQztBQUMvQjtBQUNBLGNBQWMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLE9BQU8sRUFBRTtBQUN4RCxnQkFBZ0IsRUFBRSxNQUFNLENBQUM7QUFDekI7QUFDQSxnQkFBZ0IsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsT0FBTyxFQUFFO0FBQ25HLGtCQUFrQixNQUFNLElBQUksQ0FBQyxDQUFDO0FBQzlCLGlCQUFpQjtBQUNqQixlQUFlO0FBQ2Y7QUFDQSxjQUFjLE1BQU07QUFDcEI7QUFDQSxZQUFZLEtBQUssWUFBWTtBQUM3QixjQUFjLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNoRTtBQUNBLGNBQWMsV0FBVyxJQUFJLENBQUMsQ0FBQztBQUMvQjtBQUNBLGNBQWMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLE9BQU8sRUFBRTtBQUN4RCxnQkFBZ0IsRUFBRSxNQUFNLENBQUM7QUFDekI7QUFDQSxnQkFBZ0IsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsT0FBTyxFQUFFO0FBQ25HLGtCQUFrQixNQUFNLElBQUksQ0FBQyxDQUFDO0FBQzlCLGlCQUFpQjtBQUNqQixlQUFlO0FBQ2Y7QUFDQSxjQUFjLE1BQU07QUFDcEI7QUFDQSxZQUFZLEtBQUssV0FBVztBQUM1QixjQUFjLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQzVEO0FBQ0EsY0FBYyxXQUFXLElBQUksQ0FBQyxDQUFDO0FBQy9CO0FBQ0EsY0FBYyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsT0FBTyxFQUFFO0FBQ3hELGdCQUFnQixFQUFFLE1BQU0sQ0FBQztBQUN6QjtBQUNBLGdCQUFnQixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxPQUFPLEVBQUU7QUFDbkcsa0JBQWtCLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDOUIsaUJBQWlCO0FBQ2pCLGVBQWU7QUFDZjtBQUNBLGNBQWMsTUFBTTtBQUNwQjtBQUNBLFlBQVksS0FBSyxZQUFZO0FBQzdCLGNBQWMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ25FO0FBQ0EsY0FBYyxXQUFXLElBQUksQ0FBQyxDQUFDO0FBQy9CO0FBQ0EsY0FBYyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsT0FBTyxFQUFFO0FBQ3hELGdCQUFnQixJQUFJLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDaEMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDO0FBQzNCLGlCQUFpQixNQUFNO0FBQ3ZCLGtCQUFrQixFQUFFLE1BQU0sQ0FBQztBQUMzQixpQkFBaUI7QUFDakI7QUFDQSxnQkFBZ0IsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsT0FBTyxFQUFFO0FBQ25HLGtCQUFrQixNQUFNLElBQUksQ0FBQyxDQUFDO0FBQzlCLGlCQUFpQjtBQUNqQixlQUFlO0FBQ2Y7QUFDQSxjQUFjLE1BQU07QUFDcEI7QUFDQSxZQUFZLEtBQUssWUFBWTtBQUM3QixjQUFjLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNuRTtBQUNBLGNBQWMsV0FBVyxJQUFJLENBQUMsQ0FBQztBQUMvQjtBQUNBLGNBQWMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLE9BQU8sRUFBRTtBQUN4RCxnQkFBZ0IsSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ2hDLGtCQUFrQixFQUFFLE1BQU0sQ0FBQztBQUMzQixpQkFBaUIsTUFBTTtBQUN2QixrQkFBa0IsRUFBRSxNQUFNLENBQUM7QUFDM0IsaUJBQWlCO0FBQ2pCO0FBQ0EsZ0JBQWdCLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLE9BQU8sRUFBRTtBQUNuRyxrQkFBa0IsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUM5QixpQkFBaUI7QUFDakIsZUFBZTtBQUNmO0FBQ0EsY0FBYyxNQUFNO0FBQ3BCO0FBQ0EsWUFBWSxLQUFLLFlBQVk7QUFDN0IsY0FBYyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDbkU7QUFDQSxjQUFjLFdBQVcsSUFBSSxDQUFDLENBQUM7QUFDL0I7QUFDQSxjQUFjLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxPQUFPLEVBQUU7QUFDeEQsZ0JBQWdCLElBQUksTUFBTSxHQUFHLENBQUMsRUFBRTtBQUNoQyxrQkFBa0IsRUFBRSxNQUFNLENBQUM7QUFDM0IsaUJBQWlCLE1BQU07QUFDdkIsa0JBQWtCLEVBQUUsTUFBTSxDQUFDO0FBQzNCLGlCQUFpQjtBQUNqQjtBQUNBLGdCQUFnQixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxPQUFPLEVBQUU7QUFDbkcsa0JBQWtCLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDOUIsaUJBQWlCO0FBQ2pCLGVBQWU7QUFDZjtBQUNBLGNBQWMsTUFBTTtBQUNwQjtBQUNBLFlBQVksS0FBSyxRQUFRO0FBQ3pCLGNBQWMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUM7QUFDQSxjQUFjLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQzlCLGNBQWMsTUFBTTtBQUNwQjtBQUNBLFlBQVk7QUFDWixjQUFjLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQztBQUM3QztBQUNBLGNBQWMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUM7QUFDQSxjQUFjLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQzlCLFdBQVc7QUFDWCxTQUFTO0FBQ1QsT0FBTyxNQUFNO0FBQ2IsUUFBUSxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDM0IsUUFBUSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCO0FBQ0EsUUFBUSxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsT0FBTyxFQUFFO0FBQ3JELFVBQVUsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNwQjtBQUNBLFVBQVUsSUFBSSxXQUFXLEVBQUU7QUFDM0IsWUFBWSxHQUFHO0FBQ2YsY0FBYyxLQUFLLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztBQUNwRCxhQUFhLFFBQVEsS0FBSyxJQUFJLEVBQUUsRUFBRTtBQUNsQyxXQUFXLE1BQU07QUFDakIsWUFBWSxHQUFHO0FBQ2YsY0FBYyxLQUFLLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztBQUNwRCxhQUFhLFFBQVEsS0FBSyxJQUFJLEVBQUUsRUFBRTtBQUNsQyxXQUFXO0FBQ1g7QUFDQSxVQUFVLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDM0U7QUFDQSxVQUFVLFdBQVcsSUFBSSxDQUFDLENBQUM7QUFDM0IsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ3pCO0FBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDMUIsUUFBUSxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdCLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRTtBQUN2RCxRQUFRLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzdCLE9BQU8sTUFBTTtBQUNiLFFBQVEsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbkM7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUN6QixVQUFVLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQ3BELFlBQVksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QjtBQUNBLFlBQVksS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkMsV0FBVztBQUNYLFNBQVMsTUFBTTtBQUNmLFVBQVUsT0FBTyxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQzlCLFlBQVksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QjtBQUNBLFlBQVksS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkMsV0FBVztBQUNYLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQ3pCLFVBQVUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM1QjtBQUNBLFVBQVUsTUFBTSxHQUFHLElBQUksQ0FBQztBQUN4QixTQUFTLE1BQU0sSUFBSSxLQUFLLEtBQUssUUFBUSxFQUFFO0FBQ3ZDLFVBQVUsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDMUIsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQzVELFFBQVEsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDcEQsUUFBUSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNuQztBQUNBLFFBQVEsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQ3pCLFVBQVUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM1QjtBQUNBLFVBQVUsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsRUFBRTtBQUNqQyxZQUFZLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUI7QUFDQSxZQUFZLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsV0FBVztBQUNYO0FBQ0EsVUFBVSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxFQUFFO0FBQ2xDLFlBQVksS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDcEMsY0FBYyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6QztBQUNBLGNBQWMsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQy9CLGdCQUFnQixJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDMUQsZUFBZTtBQUNmO0FBQ0EsY0FBYyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2hDO0FBQ0EsY0FBYyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFO0FBQ3JDLGdCQUFnQixJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xDO0FBQ0EsZ0JBQWdCLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsZUFBZTtBQUNmLGFBQWE7QUFDYixXQUFXO0FBQ1g7QUFDQSxVQUFVLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQzFCLFNBQVM7QUFDVCxPQUFPLE1BQU0sSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDMUMsUUFBUSxPQUFPLElBQUksRUFBRTtBQUNyQixVQUFVLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JDO0FBQ0EsVUFBVSxJQUFJLEtBQUssS0FBSyxRQUFRLEVBQUU7QUFDbEMsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQztBQUM1QixZQUFZLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDdEIsV0FBVztBQUNYO0FBQ0EsVUFBVSxJQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ2hDLFlBQVksTUFBTTtBQUNsQixXQUFXO0FBQ1g7QUFDQSxVQUFVLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFCO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFO0FBQy9CLFVBQVUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQjtBQUNBLFVBQVUsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN6QyxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDN0IsUUFBUSxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3pELE9BQU8sTUFBTTtBQUNiLFFBQVEsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN6RCxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNqQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQ1Y7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLEVBQUU7QUFDOUIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN4QyxNQUFNLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDO0FBQzNCO0FBQ0EsTUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsT0FBTyxFQUFFO0FBQ3pFLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3pCLFFBQVEsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3RGLE9BQU87QUFDUCxLQUFLLE1BQU07QUFDWCxNQUFNLElBQUksR0FBRyxDQUFDLENBQUM7QUFDZixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDWjtBQUNBLE1BQU0sR0FBRztBQUNULFFBQVEsSUFBSSxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssUUFBUSxFQUFFO0FBQ2pELFVBQVUsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsOERBQThELENBQUMsQ0FBQztBQUN0RyxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLEVBQUU7QUFDcEMsVUFBVSxDQUFDLEtBQUssSUFBSSxDQUFDO0FBQ3JCO0FBQ0EsVUFBVSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRTtBQUNyQyxZQUFZLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNsQyxXQUFXO0FBQ1g7QUFDQSxVQUFVLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDO0FBQ2xDLFVBQVUsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNuQixTQUFTLE1BQU07QUFDZixVQUFVLENBQUMsS0FBSyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQ2hDO0FBQ0EsVUFBVSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRTtBQUNyQyxZQUFZLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDN0MsV0FBVztBQUNYO0FBQ0EsVUFBVSxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUNsQyxVQUFVLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQzlCO0FBQ0EsVUFBVSxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsT0FBTyxFQUFFO0FBQ3BELFlBQVksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQzdCLFlBQVksSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFGLFdBQVcsTUFBTSxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUU7QUFDL0IsWUFBWSxDQUFDLEtBQUssSUFBSSxDQUFDO0FBQ3ZCLFlBQVksSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNyQixXQUFXO0FBQ1gsU0FBUztBQUNULE9BQU8sUUFBUSxJQUFJLEVBQUU7QUFDckIsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDcEIsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDO0FBQ2hCLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxDQUFDLENBQUM7QUFDYixHQUFHO0FBQ0g7QUFDQSxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFO0FBQzlCLElBQUksTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUN2QyxJQUFJLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDbkM7QUFDQSxJQUFJLElBQUksRUFBRSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRTtBQUNwQyxNQUFNLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDN0IsUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUscUJBQXFCLENBQUMsQ0FBQztBQUMvQyxRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ3hCLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDMUIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLFNBQVMsR0FBRyxDQUFDLEdBQUcsV0FBVyxFQUFFO0FBQ3ZDLFFBQVEsRUFBRSxTQUFTLENBQUM7QUFDcEIsT0FBTztBQUNQO0FBQ0EsTUFBTSxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2pDLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFDL0IsR0FBRztBQUNIO0FBQ0EsRUFBRSxhQUFhLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRTtBQUNqQyxJQUFJLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDdkMsSUFBSSxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQ25DO0FBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUU7QUFDcEMsTUFBTSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFO0FBQzdCLFFBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLHFCQUFxQixDQUFDLENBQUM7QUFDL0MsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQztBQUN4QixRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQzFCLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxTQUFTLEdBQUcsQ0FBQyxHQUFHLFdBQVcsRUFBRTtBQUN2QyxRQUFRLEVBQUUsU0FBUyxDQUFDO0FBQ3BCLE9BQU87QUFDUDtBQUNBLE1BQU0sVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNqQyxLQUFLLE1BQU0sSUFBSSxFQUFFLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFO0FBQzNDLE1BQU0sSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFO0FBQ2xCLFFBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBQ3hDLFFBQVEsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDeEIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLFNBQVMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLFVBQVUsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDOUQsUUFBUSxFQUFFLFNBQVMsQ0FBQztBQUNwQixPQUFPO0FBQ1A7QUFDQSxNQUFNLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDakMsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztBQUMvQixHQUFHO0FBQ0g7QUFDQSxFQUFFLGNBQWMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7QUFDM0MsSUFBSSxNQUFNLFVBQVUsR0FBRyxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQ2xDO0FBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3ZDLE1BQU0sSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQztBQUNBLE1BQU0sSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFO0FBQzdCLFFBQVEsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDaEMsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUU7QUFDbkIsUUFBUSxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQztBQUN6QixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxJQUFJLFVBQVUsRUFBRTtBQUM3QyxRQUFRLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLENBQUM7QUFDM0M7QUFDQSxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUN4QixVQUFVLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0I7QUFDQSxVQUFVLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3BDLFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM3QixHQUFHO0FBQ0g7QUFDQSxFQUFFLGNBQWMsR0FBRztBQUNuQixJQUFJLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNqQixJQUFJLElBQUksQ0FBQyxDQUFDO0FBQ1Y7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUN0QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLE1BQU0sQ0FBQyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1QjtBQUNBLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUN6QixRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUI7QUFDQSxRQUFRLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLE9BQU87QUFDUCxLQUFLLE1BQU07QUFDWCxNQUFNLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUM1RDtBQUNBLE1BQU0sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ2xDLFFBQVEsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUFDeEMsSUFBSSxPQUFPLFFBQVEsQ0FBQztBQUNwQixHQUFHO0FBQ0g7QUFDQSxFQUFFLGFBQWEsR0FBRztBQUNsQixJQUFJLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNqQixJQUFJLElBQUksQ0FBQyxDQUFDO0FBQ1Y7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUN0QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2hDO0FBQ0EsTUFBTSxJQUFJLElBQUksS0FBSyxRQUFRLEVBQUU7QUFDN0IsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDM0IsUUFBUSxDQUFDLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlCLE9BQU8sTUFBTTtBQUNiLFFBQVEsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkMsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDcEIsUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0FBQ0EsUUFBUSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQixPQUFPO0FBQ1AsS0FBSyxNQUFNO0FBQ1gsTUFBTSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDMUQ7QUFDQSxNQUFNLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3JCLFFBQVEsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ3hEO0FBQ0EsTUFBTSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUNyQixRQUFRLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3RDO0FBQ0EsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCO0FBQ0EsSUFBSSxPQUFPLENBQUMsQ0FBQztBQUNiLEdBQUc7QUFDSDtBQUNBLEVBQUUsYUFBYSxHQUFHO0FBQ2xCLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ2hCO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDdEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNoQztBQUNBLE1BQU0sSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFO0FBQzdCLFFBQVEsT0FBTyxDQUFDLENBQUM7QUFDakIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzNCLFFBQVEsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM5QixPQUFPLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNyRCxRQUFRLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzFDLE9BQU8sTUFBTTtBQUNiLFFBQVEsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkMsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDcEIsUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0FBQ0EsUUFBUSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQixPQUFPO0FBQ1AsS0FBSyxNQUFNO0FBQ1gsTUFBTSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDMUQ7QUFDQSxNQUFNLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3JCLFFBQVEsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMzRDtBQUNBLE1BQU0sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDckIsUUFBUSxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QixPQUFPO0FBQ1A7QUFDQSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDeEQ7QUFDQSxNQUFNLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3JCLFFBQVEsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDdEM7QUFDQSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckI7QUFDQSxJQUFJLE9BQU8sQ0FBQyxDQUFDO0FBQ2IsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFO0FBQ2YsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUNWO0FBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxFQUFFO0FBQy9CLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFO0FBQzNDLFFBQVEsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLENBQUMsRUFBRTtBQUNsQyxVQUFVLE9BQU8sUUFBUSxDQUFDO0FBQzFCLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3RFLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0MsTUFBTSxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQztBQUMxQixLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxNQUFNLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNsRSxHQUFHO0FBQ0g7QUFDQSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUU7QUFDZCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDbkMsTUFBTSxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztBQUN6QixLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsT0FBTyxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7QUFDMUM7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPLENBQUMsdUJBQXVCLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixLQUFLO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFlBQVksR0FBRztBQUM5QyxFQUFFLEtBQUssRUFBRSxJQUFJO0FBQ2IsQ0FBQyxFQUFFLENBQUM7QUFDSixPQUFPLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQzdCO0FBQ0EsSUFBSSxjQUFjLEdBQUcsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0M7QUFDQSxJQUFJLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQztBQUNBLE1BQU0sY0FBYyxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxRyxNQUFNLFlBQVksR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDN1QsTUFBTSxVQUFVLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDbFQsTUFBTSxlQUFlLEdBQUcsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlpSixNQUFNLGdCQUFnQixHQUFHLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFB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O0FBQ0gsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1AsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNOLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNQLENBQUMsRUFBRTtBQUNILEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDTixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDUCxDQUFDLEVBQUU7QUFDSCxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ04sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1AsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNOLENBQUMsRUFBRTtBQUNILEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNQLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDTixDQUFDLEVBQUU7QUFDSCxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDUCxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ04sQ0FBQyxFQUFFO0FBQ0gsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1AsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNOLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDTCxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDUCxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDUCxDQUFDLEVBQUU7QUFDSCxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ04sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNOLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNQLENBQUMsRUFBRTtBQUNILEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDTixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDUCxDQUFDLEVBQUU7QUFDSCxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDUCxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDUCxDQUFDLEVBQUU7QUFDSCxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDUCxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDUCxDQUFDLEVBQUU7QUFDSCxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ04sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNOLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNQLENBQUMsRUFBRTtBQUNILEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDTixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDUCxDQUFDLEVBQUU7QUFDSCxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDUCxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ04sQ0FBQyxFQUFFO0FBQ0gsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1AsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNOLENBQUMsRUFBRTtBQUNILEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNQLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDTixDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ0wsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1AsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNOLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNQLENBQUMsRUFBRTtBQUNILEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDTixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDUCxDQUFDLEVBQUU7QUFDSCxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDUCxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDUCxDQUFDLEVBQUU7QUFDSCxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDUCxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDUCxDQUFDLEVBQUU7QUFDSCxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ04sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNOLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNQLENBQUMsRUFBRTtBQUNILEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNQLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDTixDQUFDLEVBQUU7QUFDSCxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDUCxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ04sQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNMLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNQLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNQLENBQUMsRUFBRTtBQUNILEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNQLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNQLENBQUMsRUFBRTtBQUNILEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNQLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNQLENBQUMsRUFBRTtBQUNILEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDTixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDUCxDQUFDLEVBQUU7QUFDSCxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ04sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1AsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNOLENBQUMsRUFBRTtBQUNILEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNQLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDTixDQUFDLEVBQUU7QUFDSCxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDUCxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ04sQ0FBQyxFQUFFO0FBQ0gsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1AsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNOLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDSixNQUFNLG1CQUFtQixHQUFHLENBQUM7QUFDN0IsRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUNYLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDUixJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDVCxHQUFHLEVBQUU7QUFDTCxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ1IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsR0FBRyxFQUFFO0FBQ0wsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNSLEdBQUcsQ0FBQztBQUNKLEVBQUUsU0FBUyxFQUFFLENBQUM7QUFDZCxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ1IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsR0FBRyxFQUFFO0FBQ0wsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNSLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNULEdBQUcsRUFBRTtBQUNMLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNULElBQUksQ0FBQyxFQUFFLENBQUM7QUFDUixHQUFHLEVBQUU7QUFDTCxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ1IsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNSLEdBQUcsRUFBRTtBQUNMLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDUixJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ1IsR0FBRyxFQUFFO0FBQ0wsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNSLEdBQUcsRUFBRTtBQUNMLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDUixJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ1IsR0FBRyxFQUFFO0FBQ0wsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNSLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDUixHQUFHLENBQUM7QUFDSixDQUFDLEVBQUU7QUFDSCxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQ1gsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsR0FBRyxFQUFFO0FBQ0wsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNSLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNULEdBQUcsRUFBRTtBQUNMLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDUixJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDVCxHQUFHLEVBQUU7QUFDTCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDVCxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ1IsR0FBRyxDQUFDO0FBQ0osRUFBRSxTQUFTLEVBQUUsQ0FBQztBQUNkLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDUixJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDVCxHQUFHLEVBQUU7QUFDTCxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDVCxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ1IsR0FBRyxFQUFFO0FBQ0wsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNSLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDUixHQUFHLEVBQUU7QUFDTCxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ1IsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNSLEdBQUcsRUFBRTtBQUNMLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDUixJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ1IsR0FBRyxFQUFFO0FBQ0wsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNSLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDUixHQUFHLENBQUM7QUFDSixDQUFDLENBQUMsQ0FBQztBQUNILE1BQU0sY0FBYyxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDeEQsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNsRDtBQUNBLFNBQVMscUJBQXFCLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUU7QUFDL0QsRUFBRSxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsT0FBTyxDQUFDO0FBQzFDLEVBQUUsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbEUsRUFBRSxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDcEIsRUFBRSxJQUFJLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztBQUNqRCxFQUFFLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQztBQUNoQztBQUNBLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDL0IsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVDLElBQUksSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdkMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN2QyxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdIO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDL0QsTUFBTSxZQUFZLEdBQUcsQ0FBQyxZQUFZLEdBQUcsY0FBYyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDckosS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUNEO0FBQ0EsU0FBUyxZQUFZLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRTtBQUNoRyxFQUFFLElBQUksR0FBRyxFQUFFO0FBQ1gsSUFBSSxNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9GLElBQUksT0FBTyxlQUFlLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDeEQsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLGFBQWEsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENB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QUFNLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSztBQUNsQyxVQUFVLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO0FBQ3JDLElBQUksTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVDLElBQUksTUFBTSxtQkFBbUIsR0FBRyxRQUFRLENBQUMsMkJBQTJCLEdBQUcsVUFBVSxDQUFDLG1CQUFtQixHQUFHLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQztBQUNySSxJQUFJLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDL0IsSUFBSSxNQUFNLEtBQUssR0FBRyxHQUFHLEtBQUssVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1QyxJQUFJLElBQUksT0FBTyxHQUFHLFVBQVUsQ0FBQyxDQUFDLEdBQUcsT0FBTyxJQUFJLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDL0QsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQztBQUMzQjtBQUNBLElBQUksUUFBUSxtQkFBbUI7QUFDL0IsTUFBTSxLQUFLLENBQUM7QUFDWixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3JDLFVBQVUsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUN2QixVQUFVLE1BQU0sR0FBRyxPQUFPLENBQUM7QUFDM0I7QUFDQSxVQUFVLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3RDLFlBQVksSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDOUIsY0FBYyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDO0FBQ3JDLGFBQWE7QUFDYjtBQUNBLFlBQVksSUFBSSxLQUFLLENBQUMsQ0FBQztB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LENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN4RixNQUFNLE1BQU07QUFDWjtBQUNBLElBQUksS0FBSyxDQUFDO0FBQ1YsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQy9ILE1BQU0sTUFBTTtBQUNaO0FBQ0EsSUFBSSxLQUFLLENBQUM7QUFDVixNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakwsTUFBTSxNQUFNO0FBQ1o7QUFDQSxJQUFJLEtBQUssQ0FBQztBQUNWLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwSCxNQUFNLE1BQU07QUFDWjtBQUNBLElBQUksS0FBSyxDQUFDO0FBQ1YsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3RLLE1BQU0sTUFBTTtBQUNaO0FBQ0EsSUFBSSxLQUFLLENBQUM7QUFDVixNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdFMsTUFBTSxNQUFNO0FBQ1o7QUFDQSxJQUFJLEtBQUssQ0FBQztBQUNWLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwVCxNQUFNLE1BQU07QUFDWjtBQUNBLElBQUksS0FBSyxDQUFDO0FBQ1YsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoWixNQUFNLE1BQU07QUFDWjtBQUNBLElBQUksS0FBSyxDQUFDO0FBQ1YsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDcmEsTUFBTSxNQUFNO0FBQ1o7QUFDQSxJQUFJLEtBQUssRUFBRTtBQUNYLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BaLE1BQU0sTUFBTTtBQUNaO0FBQ0EsSUFBSSxLQUFLLEVBQUU7QUFDWCxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNqUCxNQUFNLE1BQU07QUFDWjtBQUNBLElBQUksS0FBSyxFQUFFO0FBQ1gsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDalAsTUFBTSxNQUFNO0FBQ1o7QUFDQSxJQUFJLEtBQUssRUFBRTtBQUNYLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2hQLE1BQU0sTUFBTTtBQUNaO0FBQ0EsSUFBSSxLQUFLLEVBQUU7QUFDWCxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRyxNQUFNLE1BQU07QUFDWjtBQUNBLElBQUksS0FBSyxFQUFFO0FBQ1gsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUs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O0FBQ1QsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNULEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNULEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDVCxFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsVUFBVSxFQUFFLENBQUM7QUFDZixDQUFDLEVBQUU7QUFDSCxFQUFFLEVBQUUsRUFBRSxNQUFNO0FBQ1osRUFBRSxJQUFJLEVBQUUsRUFBRTtBQUNWLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLFVBQVUsRUFBRSxDQUFDO0FBQ2YsQ0FBQyxFQUFFO0FBQ0gsRUFBRSxFQUFFLEVBQUUsTUFBTTtBQUNaLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDVixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxVQUFVLEVBQUUsQ0FBQztBQUNmLENBQUMsRUFBRTtBQUNILEVBQUUsRUFBRSxFQUFFLE1BQU07QUFDWixFQUFFLElBQUksRUFBRSxFQUFFO0FBQ1YsRUFBRSxJQUFJ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RUFBRSxHQUFHLFNBQVMsQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEQsSUFBSSxFQUFFLEdBQUcsU0FBUyxDQUFDLGlCQUFpQixHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoRCxJQUFJLEVBQUUsR0FBRyxTQUFTLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2hELElBQUksRUFBRSxHQUFHLFNBQVMsQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEQsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBRTtBQUNsRCxNQUFNLENBQUMsR0FBRyxRQUFRLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxFQUFFLENBQUM7QUFDcEMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckIsTUFBTSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNyQixNQUFNLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckIsTUFBTSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNyQixNQUFNLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckIsTUFBTSxTQUFTO0FBQ2YsS0FBSztBQUNMO0FBQ0EsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0QixJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdEIsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0QixJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdEIsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0QixJQUFJLEVBQUUsR0FBRyxRQUFRLEdBQUcsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDbEMsSUFBSSxFQUFFLEdBQUcsUUFBUSxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ2xDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNaLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNaLElBQUksRUFBRSxHQUFHLFVBQVUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUMzQyxJQUFJLEVBQUUsR0FBRyxVQUFVLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDM0MsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNqQixJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2pCLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxQixJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2pCLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsRUFBRSxHQUFHLE9BQU8sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQy9DLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsRUFBRSxHQUFHLE9BQU8sR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ2hELElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNYLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxQixJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2pCLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxQixJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2pCLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxQixJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2pCLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxQixJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2pCLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsRUFBRSxHQUFHLE9BQU8sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQ2pELElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsRUFBRSxHQUFHLE9BQU8sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQ2xELElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNYLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsRUFBRSxHQUFHLE9BQU8sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQ2pELElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsRUFBRSxHQUFHLE9BQU8sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQ2xELElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNYLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDckIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDekIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDekIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDekIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDekIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDekIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDekIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDekIsR0FBRztBQUNIO0FBQ0EsRUFBRSxLQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFO0FBQ3BDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLENB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R0FBRyxPQUFPLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNqRCxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNsRCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDWCxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUIsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqQixJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUIsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqQixJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUIsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqQixJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUIsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqQixJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNqRCxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNsRCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDWCxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNqRCxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNsRCxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDWCxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2pCLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDakIsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqQixJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2pCLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDakIsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqQixJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2pCLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDakI7QUFDQSxJQUFJLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRTtBQUNqQixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDYixLQUFLLE1BQU0sSUFBSSxFQUFFLElBQUksSUFBSSxFQUFFO0FBQzNCLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUNmLEtBQUssTUFBTTtBQUNYLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNmLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO0FBQ2pCLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNiLEtBQUssTUFBTSxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUU7QUFDM0IsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ2YsS0FBSyxNQUFNO0FBQ1gsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2YsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUU7QUFDakIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsS0FBSyxNQUFNLElBQUksRUFBRSxJQUFJLElBQUksRUFBRTtBQUMzQixNQUFNLEVBQUUsR0FBRyxHQUFHLENB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Q0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2pFLFlBQVksTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQzNCLFlBQVksR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdkUsWUFBWSxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN2RSxZQUFZLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3pFLFlBQVksR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDekUsWUFBWSxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUN6RSxZQUFZLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3pFLFlBQVksR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDMUUsWUFBWSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUMxRSxZQUFZLE1BQU0s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RUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3RDLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN4QyxNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7QUFDaEIsTUFBTSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakUsTUFBTSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakUsTUFBTSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEUsTUFBTSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEUsTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUN2QyxNQUFNLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3hDLE1BQU0sSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDM0IsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUks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LEVBQUUsQ0FBQztBQUN2QixFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsY0FBYyxDQUFDO0FBQ3RDO0FBQ0EsRUFBRSxLQUFLLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoQyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2xDLE1BQU0sU0FBUyxHQUFHO0FBQ2xCLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDZCxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ2QsUUFBUSxJQUFJLEVBQUUsY0FBYyxHQUFHLENBQUM7QUFDaEMsUUFBUSxJQUFJLEVBQUUsZUFBZSxHQUFHLENBQUM7QUFDakMsUUFBUSxJQUFJLEVBQUUsY0FBYyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEMsUUFBUSxJQUFJLEVBQUUsZUFBZSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkMsT0FBTyxDQUFDO0FBQ1IsTUFBTSxTQUFTLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0QsTUFBTSxTQUFTLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0QsTUFBTSxTQUFTLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0QsTUFBTSxTQUFTLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0QsTUFBTSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxD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RSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pSLEVBQUUsTUFBTSxjQUFjLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM1EsRUFBRSxNQUFNLGNBQWMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxF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QUs7QUFDTDtBQUNBLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQzlCLElBQUksTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLElBQUksTUFBTSxTQUFTLEdBQUcsSUFBSSxZQUFZLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQztBQUNsRTtBQUNBLElBQUksSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQ3JCLE1BQU0sSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQzFCLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxFQUFFO0FBQ3hELFVBQVUsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQztBQUMxQixTQUFTO0FBQ1QsT0FBTztBQUNQLEtBQUssTUFBTTtBQUNYLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxFQUFFO0FBQ3RELFFBQVEsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDbkUsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDckQsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDckQsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLGFBQWEsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztB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LENBQUM7QUFDcEMsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLENBQUMsR0FBRyxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDaEMsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekQsUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUNkLE9BQU87QUFDUCxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxFQUFFO0FBQzVCLE1BQU0sTUFBTSxhQUFhLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN2QztBQUNBLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDMUMsUUFBUSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNuQyxRQUFRLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxhQUFhLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxhQUFhLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDcEssUUFBUSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN4QyxRQUFRLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDbkMsT0FB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SztBQUNMO0FBQ0EsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQzNDLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUNEO0FBQ0EsU0FBUyxlQUFlLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRTtBQUM1QyxFQUFFLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDOUMsRUFBRSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsRSxFQUFFLElBQUksSUFBSSxHQUFHLFVBQVUsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqSCxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ25CO0FBQ0EsRUFBRSxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQzNDLElBQUksSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxFQUFFO0FBQ2hDLE1BQU0sTUFBTTtBQUNaLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUI7QUFDQSxFQUFFLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FB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RUFBRSxFQUFFO0FBQ2pELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLE1BQU0sSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCO0FBQ0EsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNsRCxRQUFRLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQzNDLFVBQVUsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDLFVBQVUsV0FBVyxJQUFJLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzNHLFVBQVUsS0FBSyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQSxNQUFNLFdBQVcsSUFBSSxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM1RyxLQUFLO0FBQ0w7QUFDQSxJQUFJLFdBQVcsR0FB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QUFVLEdBQUcsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLGtCQUFrQixHQUFHLGtCQUFrQixHQUFHLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO0FBQzVOLENBQUM7QUFDRDtBQUNBLFNBQVMsb0JBQW9CLENBQUMsSUFBSSxFQUFFO0FBQ3BDLEVBQUUsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLDZCQUE2QixFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDdEUsQ0FBQztBQUNEO0FBQ0EsU0FBUyxlQUFlLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUN0QyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDZCxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNyQixHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksb0JBQW9CLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQztBQUM3UyxFQUFFLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztBQUM1QixFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQztBQUN4QjtBQUNBLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDaEQsSUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQyxJQUFJLE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQztBQUM3QjtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDOUMsTUFBTSxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RCxLQUFLO0FBQ0w7QUFDQSxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2hELEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxLQUFLLEdBQUcsQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDMUMsRUFBRSxNQUFNLFNBQVMsR0FBRyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM3QyxFQUFFLE1BQU0sU0FBUyxHQUFHLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzdDLEVBQUUsTUFBTSxTQUFTLEdBQUcsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDN0MsRUFBRSxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztBQUM3RCxFQUFFLElBQUksU0FBUyxHQUFHLFVBQVUsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2hHLEVBQUUsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCO0FBQ0EsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNsRCxJQUFJLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQjtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDL0MsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLE1BQU0sTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQy9ILE1BQU0sU0FBUyxJQUFJLFVBQVUsQ0FBQztBQUM5QixNQUFNLFNBQVMsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDO0FBQzlCLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUQsRUFBRSxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBQ0Q7QUFDQSxNQUFNLElBQUksQ0FBQztBQUNYLEVBQUUsV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO0FBQ3RDLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDckIsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUN2QixJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ3pCLElBQUksSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7QUFDakMsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUM7QUFDNUMsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUM7QUFDOUMsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztBQUM3QixJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQztBQUM5QyxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzQyxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzQyxJQUFJLElBQUksV0FBVyxHQUFHLENBQUMsRUFBRSxVQUFVLENBQUMsS0FBSyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUU7QUFDQSxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEVBQUU7QUFDdEQsTUFBTSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9ELFlBQVksVUFBVSxHQUFHLElBQUksZUFBZSxDQUFDLGFBQWEsR0FBRyxDQUFDO0FBQzlEO0FBQ0EsTUFBTSxLQUFLLE1BQU0sUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDbEQsUUFBUSxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUNsQyxVQUFVLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDN0IsVUFBVSxNQUFNO0FBQ2hCLFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztBQUNuQyxJQUFJLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNqRixJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNoRixJQUFJLElBQUksSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7QUFDL0IsSUFBSSxJQUFJLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDO0FBQ3JDLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDckIsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUMzQixJQUFJLElBQUksWUFBWSxHQUFHLFlBQVksQ0FBQztBQUNwQztBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO0FBQzFCLE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQztBQUNqQyxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO0FBQ2pDLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQztBQUM3QixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0FBQ3JDLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDO0FBQzlDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO0FBQ3BDLElBQUksSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDO0FBQ2hELElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDO0FBQzFDLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDO0FBQ2hDLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsU0FBUyxHQUFHLHFCQUFxQixDQUFDO0FBQ2xFLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxHQUFHLHFCQUFxQixDQUFDO0FBQzVELElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxHQUFHLHFCQUFxQixDQUFDO0FBQzlELElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDakQsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUM7QUFDNUMsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7QUFDaEMsSUFBSSxJQUFJLENBQUMsZUFBZSxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUM7QUFDdEQsSUFBSSxJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUM7QUFDMUMsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUN6QjtBQUNBLElBQUksSUFBSSxVQUFVLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTtBQUNyQyxNQUFNLEtBQUssSUFBSSxRQUFRLEdBQUcsQ0FBQyxFQUFFLFFBQVEsR0FBRyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUU7QUFDekQsUUFBUSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksVUFBVSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN2RyxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7QUFDM0MsTUFBTSxPQUFPO0FBQ2IsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO0FBQ3BELElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztBQUMxQztBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQ3ZCLE1BQU0sSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDO0FBQzFDLE1BQU0sSUFBSSxDQUFDLGVBQWUsR0FBRyxVQUFVLENBQUMsZUFBZSxDQUFDO0FBQ3hELEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO0FBQy9CLE1BQU0sSUFBSSxJQUFJLEVBQUU7QUFDaEIsUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUseUJBQXlCLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzFGLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzVDLE1BQU0sT0FBTztBQUNiLEtBQUs7QUFDTDtBQUNBLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLEdBQUcsZUFBZSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztBQUN4RDtBQUNBLElBQUksSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksSUFBSSxPQUFPLEtBQUssSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUN4RCxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxpREFBaUQsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6SSxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksSUFBSSxDQUFDO0FBQ2I7QUFDQSxJQUFJLElBQUk7QUFDUixNQUFNLFFBQVEsSUFBSTtBQUNsQixRQUFRLEtBQUssU0FBUztBQUN0QixVQUFVLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLDJCQUEyQixDQUFDLENBQUM7QUFDakY7QUFDQSxRQUFRLEtBQUssT0FBTyxDQUFDO0FBQ3JCLFFBQVEsS0FBSyxjQUFjO0FBQzNCLFVBQVUsSUFBSSxDQUFDLFFBQVEsR0FBRyxlQUFlLENBQUM7QUFDMUMsVUFBVSxNQUFNLEdBQUcsR0FBRyxPQUFPLEtBQUssUUFBUSxJQUFJLE9BQU8sS0FBSyxlQUFlLEdBQUcsSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztBQUN4SyxVQUFVLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNuQyxVQUFVLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDckQsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLFVBQVUsQ0FBQztBQUN4QixRQUFRLEtBQUssVUFBVSxDQUFDO0FBQ3hCLFFBQVEsS0FBSyxjQUFjO0FBQzNCLFVBQVUsSUFBSSxDQUFDLFFBQVEsR0FBRyxlQUFlLENBQUM7QUFDMUMsVUFBVSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzdEO0FBQ0EsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7QUFDL0IsWUFBWSxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDckMsWUFBWSxJQUFJLEdBQUcsVUFBVSxDQUFDO0FBQzlCLFdBQVc7QUFDWDtBQUNBLFVBQVUsTUFBTTtBQUNoQjtBQUNBLFFBQVE7QUFDUixVQUFVLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7QUFDdkUsT0FBTztBQUNQLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN6QixNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUM1QyxNQUFNLE9BQU87QUFDYixLQUFLO0FBQ0w7QUFDQSxJQUFJLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3ZDLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDckIsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksWUFBWSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUM1RixJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQztBQUM1QyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztBQUNwQyxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQztBQUNoRCxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQztBQUMxQyxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQztBQUN0QyxHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksUUFBUSxHQUFHO0FBQ2pCLElBQUksTUFBTSxRQUFRLEdBQUcsY0FBYyxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLHFCQUFxQixDQUFDLENBQUM7QUFDekc7QUFDQSxJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDekQsR0FBRztBQUNIO0FBQ0EsRUFBRSxVQUFVLENBQUMsZUFBZSxHQUFHLEtBQUssRUFBRTtBQUN0QyxJQUFJLE1BQU0sb0JBQW9CLEdBQUcsZUFBZSxHQUFHLENBQUMsR0FBRyxzQkFBc0IsRUFBRSxHQUFHLDRCQUE0QixDQUFDLEdBQUcsc0JBQXNCLENBQUM7QUFDekksSUFBSSxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JDLElBQUksSUFBSSxRQUFRLEVBQUUsS0FBSyxDQUFDO0FBQ3hCO0FBQ0EsSUFBSSxLQUFLLFFBQVEsSUFBSSxvQkFBb0IsRUFBRTtBQUMzQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDN0I7QUFDQSxNQUFNLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtBQUMvQixRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDL0IsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxvQkFBb0IsQ0FBQyxVQUFVLEVBQUU7QUFDbkMsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztBQUM1QixJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDM0IsSUFBSSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzNCLElBQUksTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUNqQyxJQUFJLElBQUksUUFBUSxHQUFHLElBQUksWUFBWSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdELElBQUksTUFBTSxVQUFVLEdBQUcsSUFBSSxlQUFlLENBQUMsYUFBYSxHQUFHO0FBQzNELFVBQVUsYUFBYSxHQUFHLElBQUksZUFBZSxDQUFDLGdCQUFnQixHQUFHLENBQUM7QUFDbEUsSUFBSSxNQUFNLGNBQWMsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2xELElBQUksTUFBTSxzQkFBc0IsR0FBRyxDQUFDLEVBQUUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RHLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksUUFBUSxDQUFDO0FBQzNFLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2pELElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDNUYsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDOUMsSUFBSSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ25ELElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsY0FBYyxJQUFJLFFBQVEsS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQzFGO0FBQ0EsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLHNCQUFzQixLQUFLLElBQUksS0FBSyxjQUFjLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUU7QUFDM0gsTUFBTSxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDO0FBQ2pELE1BQU0sTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLE1BQU0seUJBQXlCLENBQUMsR0FBRyxFQUFFLElBQUksZUFBZSxDQUFDLDJCQUEyQixHQUFHLENBQUMsQ0FBQztBQUN6RjtBQUNBLE1BQU0sSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3RDLFFBQVEseUJBQXlCLENBQUMsR0FBRyxFQUFFLElBQUksZUFBZSxDQUFDLG9DQUFvQyxHQUFHLENBQUMsQ0FBQztBQUNwRyxPQUFPLE1BQU0sSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3hDLFFBQVEseUJBQXlCLENBQUMsR0FBRyxFQUFFLElBQUksZUFBZSxDQUFDLGlDQUFpQyxHQUFHLENBQUMsQ0FBQztBQUNqRyxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksV0FBVyxFQUFFO0FBQ3ZCLFFBQVEsS0FBSyxNQUFNLFFBQVEsSUFBSSxHQUFHLEVBQUU7QUFDcEMsVUFBVSxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDcEM7QUFDQSxVQUFVLElBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsRUFBRTtBQUM5QyxZQUFZLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5QyxXQUFXO0FBQ1gsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLElBQUksVUFBVSxDQUFDLHVCQUF1QixJQUFJLElBQUksQ0FBQyxTQUFTLFlBQVksZUFBZSxDQUFDLG9CQUFvQixFQUFFO0FBQ2xLLFVBQVUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsVUFBVSxRQUFRLEVBQUUsZUFBZSxFQUFFO0FBQ3RFLFlBQVksTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3RDO0FBQ0EsWUFBWSxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLEVBQUU7QUFDaEQsY0FBYyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxlQUFlLENBQUM7QUFDL0MsYUFBYTtBQUNiLFdBQVcsQ0FBQyxDQUFDO0FBQ2IsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLFlBQVksZUFBZSxDQUFDLG9CQUFvQixDQUFDLEVBQUU7QUFDN0UsUUFBUSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxVQUFVLFFBQVEsRUFBRSxlQUFlLEVBQUU7QUFDcEUsVUFBVSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxlQUFlLENBQUM7QUFDM0MsU0FBUyxDQUFDLENBQUM7QUFDWCxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQzVCLE1BQU0sSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0QsS0FBSyxNQUFNLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUN6QyxNQUFNLElBQUksQ0FBQyxVQUFVLEdBQUcsZUFBZSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLFVBQVUsQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUM1SCxLQUFLLE1BQU0sSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO0FBQzNDLE1BQU0sSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ25DLFFBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLDREQUE0RCxDQUFDLENBQUM7QUFDdEYsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMsVUFBVSxHQUFHLGVBQWUsQ0FBQyxVQUFVLENBQUMsb0JBQW9CLEVBQUUsSUFBSSxVQUFVLENBQUMsd0JBQXdCLEdBQUcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDdkksS0FBSyxNQUFNLElBQUksY0FBYyxFQUFFO0FBQy9CLE1BQU0sTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxVQUFVLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDOUc7QUFDQSxNQUFNLElBQUksSUFBSSxLQUFLLGNBQWMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsWUFBWSxlQUFlLENBQUMsb0JBQW9CLENBQUMsRUFBRTtBQUNySixRQUFRLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFVBQVUsUUFBUSxFQUFFLGVBQWUsRUFBRTtBQUNwRSxVQUFVLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGVBQWUsQ0FBQztBQUMzQyxTQUFTLENBQUMsQ0FBQztBQUNYLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDNUIsS0FBSyxNQUFNO0FBQ1gsTUFBTSxNQUFNLGdCQUFnQixHQUFHLElBQUksVUFBVSxDQUFDLGdCQUFnQixHQUFHLENBQUM7QUFDbEUsTUFBTSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDckIsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxlQUFlLEtBQUs7QUFDNUQsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUM3QixVQUFVLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN6RixVQUFVLE1BQU0sT0FBTyxHQUFHLElBQUksUUFBUSxDQUFDLGtCQUFrQixFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3hGO0FBQ0EsVUFBVSxJQUFJLE9BQU8sS0FBSyxDQUFDLENBQUMsRUFBRTtBQUM5QixZQUFZLGVBQWUsR0FBRyxPQUFPLENBQUM7QUFDdEMsV0FBVztBQUNYLFNBQVM7QUFDVDtBQUNBLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsZUFBZSxDQUFDO0FBQ3pDLE9BQU8sQ0FBQyxDQUFDO0FBQ1Q7QUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxZQUFZLGVBQWUsQ0FBQyxvQkFBb0IsRUFBRTtBQUM1RixRQUFRLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNuQyxVQUFVLHlCQUF5QixDQUFDLEdBQUcsRUFBRSxJQUFJLGVBQWUsQ0FBQywyQkFBMkIsR0FBRyxDQUFDLENBQUM7QUFDN0YsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDNUIsS0FBSztBQUNMO0FBQ0EsSUFBSSxzQkFBc0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN2QyxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxZQUFZLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQzVGLEdBQUc7QUFDSDtBQUNBLEVBQUUsY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO0FBQ3pDLElBQUksTUFBTSxZQUFZLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDMUk7QUFDQSxJQUFJLFNBQVMsVUFBVSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUU7QUFDekMsTUFBTSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pDLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM1QixNQUFNLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3pCLE1BQU0sTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDekIsTUFBTSxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUN6QixNQUFNLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3pCLE1BQU0sTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDekIsTUFBTSxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUN6QixNQUFNLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3pCO0FBQ0EsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzFDLFFBQVEsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNDO0FBQ0EsUUFBUSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDL0MsVUFBVSxTQUFTO0FBQ25CLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUNoQyxVQUFVLFNBQVM7QUFDbkIsU0FBUztBQUNUO0FBQ0EsUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNsQyxPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sTUFBTSxDQUFDO0FBQ3BCLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxjQUFjLENBQUMsSUFBSSxFQUFFO0FBQ2xDLE1BQU0sTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQyxNQUFNLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDN0MsTUFBTSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzNDLE1BQU0sTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMzQyxNQUFNLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUN4QyxNQUFNLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUM3QyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDeEIsTUFBTSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3pDLE1BQU0sSUFBSSxDQUFDLEdBQUcsR0FBRyxnQkFBZ0IsQ0FBQztBQUNsQztBQUNBLE1BQU0sSUFBSSxHQUFHLEtBQUssTUFBTSxFQUFFO0FBQzFCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwRCxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDekIsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPO0FBQ2IsUUFBUSxHQUFHO0FBQ1gsUUFBUSxRQUFRO0FBQ2hCLFFBQVEsTUFBTTtBQUNkLFFBQVEsTUFBTTtBQUNkLFFBQVEsSUFBSTtBQUNaLE9BQU8sQ0FBQztBQUNSLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUU7QUFDckMsTUFBTSxPQUFPO0FBQ2IsUUFBUSxPQUFPLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDakMsUUFBUSxTQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVMsRUFBRTtBQUNsQyxRQUFRLFdBQVcsRUFBRSxHQUFHLENBQUMsU0FBUyxFQUFFO0FBQ3BDLFFBQVEsYUFBYSxFQUFFLEdBQUcsQ0FBQyxTQUFTLEVBQUU7QUFDdEMsUUFBUSxVQUFVLEVBQUUsR0FBRyxDQUFDLFNBQVMsRUFBRTtBQUNuQyxPQUFPLENBQUM7QUFDUixLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsNEJBQTRCLENBQUMsR0FBRyxFQUFFO0FBQy9DLE1BQU0sTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QyxNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLEtBQUssTUFBTSxFQUFFLHFDQUFxQyxDQUFDLENBQUM7QUFDbEYsTUFBTSxNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDM0MsTUFBTSxNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDM0MsTUFBTSxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVDLE1BQU0sTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDO0FBQzdCO0FBQ0EsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3pDLFFBQVEsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDL0MsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLE1BQU0sR0FBRztBQUNyQixRQUFRLE1BQU07QUFDZCxRQUFRLFlBQVk7QUFDcEIsUUFBUSxZQUFZO0FBQ3BCLFFBQVEsUUFBUTtBQUNoQixRQUFRLFdBQVc7QUFDbkIsT0FBTyxDQUFDO0FBQ1I7QUFDQSxNQUFNLFFBQVEsWUFBWTtBQUMxQixRQUFRLEtBQUssQ0FBQztBQUNkLFVBQVUsT0FBTyxNQUFNLENBQUM7QUFDeEI7QUFDQSxRQUFRLEtBQUssQ0FBQztBQUNkLFVBQVUsTUFBTSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2hELFVBQVUsTUFBTSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ25ELFVBQVUsTUFBTSxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ25ELFVBQVUsT0FBTyxNQUFNLENBQUM7QUFDeEIsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLDBDQUEwQyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hHLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUywwQkFBMEIsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFO0FBQ3ZELE1BQU0sTUFBTTtBQUNaLFFBQVEsUUFBUTtBQUNoQixRQUFRLFdBQVc7QUFDbkIsT0FBTyxHQUFHLDRCQUE0QixDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzVDLE1BQU0sTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoRCxNQUFNLElBQUksWUFBWSxDQUFDO0FBQ3ZCO0FBQ0EsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3pDLFFBQVEsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRCxRQUFRLE1BQU0sZUFBZSxHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hELFFBQVEsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDM0U7QUFDQSxRQUFRLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFO0FBQ25DLFVBQVUsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsdURBQXVELENBQUMsQ0FBQztBQUMvRixTQUFTO0FBQ1Q7QUFDQSxRQUFRLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUQ7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDNUQsVUFBVSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2pFLFlBQVksTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3BGO0FBQ0EsWUFBWSxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQzVCLGNBQWMsU0FBUztBQUN2QixhQUFhO0FBQ2I7QUFDQSxZQUFZLElBQUksU0FBUyxLQUFLLFFBQVEsRUFBRTtBQUN4QyxjQUFjLE9BQU87QUFDckIsZ0JBQWdCLE1BQU0sRUFBRSxlQUFlO0FBQ3ZDLGdCQUFnQixNQUFNLEVBQUUsZUFBZTtBQUN2QyxlQUFlLENBQUM7QUFDaEIsYUFBYTtBQUNiO0FBQ0EsWUFBWSxJQUFJLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQzFDLGNBQWMsU0FBUztBQUN2QixhQUFhO0FBQ2I7QUFDQSxZQUFZLEtBQUssTUFBTSxJQUFJLElBQUksYUFBYSxFQUFFO0FBQzlDLGNBQWMsSUFBSSxTQUFTLEtBQUssSUFBSSxFQUFFO0FBQ3RDLGdCQUFnQixZQUFZLEdBQUc7QUFDL0Isa0JBQWtCLElBQUksRUFBRSxJQUFJO0FBQzVCLGtCQUFrQixNQUFNLEVBQUUsZUFBZTtBQUN6QyxrQkFBa0IsTUFBTSxFQUFFLGVBQWU7QUFDekMsaUJBQWlCLENBQUM7QUFDbEIsZUFBZTtBQUNmLGFBQWE7QUFDYixXQUFXO0FBQ1gsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxZQUFZLEVBQUU7QUFDeEIsUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxzQ0FBc0MsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7QUFDOUksUUFBUSxPQUFPO0FBQ2YsVUFBVSxNQUFNLEVBQUUsWUFBWSxDQUFDLE1BQU07QUFDckMsVUFBVSxNQUFNLEVBQUUsWUFBWSxDQUFDLE1BQU07QUFDckMsU0FBUyxDQUFDO0FBQ1YsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLHNDQUFzQyxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQzlGLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFO0FBQ3BFLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRTtBQUNqQixRQUFRLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO0FBQ3BELFFBQVEsT0FBTztBQUNmLFVBQVUsVUFBVSxFQUFFLENBQUMsQ0FBQztBQUN4QixVQUFVLFVBQVUsRUFBRSxDQUFDLENBQUM7QUFDeEIsVUFBVSxRQUFRLEVBQUUsRUFBRTtBQUN0QixVQUFVLFlBQVksRUFBRSxLQUFLO0FBQzdCLFNBQVMsQ0FBQztBQUNWLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxPQUFPLENBQUM7QUFDbEIsTUFBTSxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUM5RCxNQUFNLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDO0FBQ3ZCLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQixNQUFNLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QyxNQUFNLElBQUksY0FBYyxDQUFDO0FBQ3pCLE1BQU0sSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQzNCO0FBQ0EsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzFDLFFBQVEsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQzVDLFFBQVEsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQzVDLFFBQVEsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM3QyxRQUFRLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQztBQUM3QjtBQUNBLFFBQVEsSUFBSSxjQUFjLElBQUksY0FBYyxDQUFDLFVBQVUsS0FBSyxVQUFVLElBQUksY0FBYyxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7QUFDcEgsVUFBVSxTQUFTO0FBQ25CLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxVQUFVLEtBQUssQ0FBQyxLQUFLLFVBQVUsS0FBSyxDQUFDLElBQUksVUFBVSxLQUFLLENBQUMsSUFBSSxVQUFVLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDNUYsVUFBVSxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzFCLFNBQVMsTUFBTSxJQUFJLFVBQVUsS0FBSyxDQUFDLElBQUksVUFBVSxLQUFLLENBQUMsRUFBRTtBQUN6RCxVQUFVLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDMUIsU0FBUyxNQUFNLElBQUksVUFBVSxLQUFLLENBQUMsSUFBSSxVQUFVLEtBQUssQ0FBQyxLQUFLLFdBQVcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFO0FBQzdGLFVBQVUsUUFBUSxHQUFHLElBQUksQ0FBQztBQUMxQjtBQUNBLFVBQVUsSUFBSSxDQUFDLGNBQWMsRUFBRTtBQUMvQixZQUFZLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDNUIsV0FBVztBQUNYLFNBQVMsTUFBTSxJQUFJLGNBQWMsSUFBSSxVQUFVLEtBQUssQ0FBQyxJQUFJLFVBQVUsS0FBSyxDQUFDLEVBQUU7QUFDM0UsVUFBVSxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzFCLFVBQVUsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDO0FBQ3JDO0FBQ0EsVUFBVSxJQUFJLENBQUMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxFQUFFO0FBQ2pDLFlBQVksTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDL0Msa0JBQWtCLGNBQWMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JFO0FBQ0EsWUFBWSxJQUFJLGNBQWMsR0FBRyxVQUFVLEVBQUU7QUFDN0MsY0FBYyxlQUFlLEdBQUcsS0FBSyxDQUFDO0FBQ3RDLGFBQWE7QUFDYixXQUFXO0FBQ1g7QUFDQSxVQUFVLElBQUksZUFBZSxFQUFFO0FBQy9CLFlBQVksUUFBUSxHQUFHLElBQUksQ0FBQztBQUM1QixXQUFXO0FBQ1gsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLFFBQVEsRUFBRTtBQUN0QixVQUFVLGNBQWMsR0FBRztBQUMzQixZQUFZLFVBQVU7QUFDdEIsWUFBWSxVQUFVO0FBQ3RCLFlBQVksTUFBTTtBQUNsQixXQUFXLENBQUM7QUFDWixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksUUFBUSxFQUFFO0FBQ3RCLFVBQVUsTUFBTTtBQUNoQixTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLGNBQWMsRUFBRTtBQUMxQixRQUFRLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUM7QUFDakQsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRTtBQUNyRCxRQUFRLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSx3Q0FBd0MsQ0FBQyxDQUFDO0FBQ2xFLFFBQVEsT0FBTztBQUNmLFVBQVUsVUFBVSxFQUFFLENBQUMsQ0FBQztBQUN4QixVQUFVLFVBQVUsRUFBRSxDQUFDLENBQUM7QUFDeEIsVUFBVSxRQUFRLEVBQUUsRUFBRTtBQUN0QixVQUFVLFlBQVksRUFBRSxLQUFLO0FBQzdCLFNBQVMsQ0FBQztBQUNWLE9BQU87QUFDUDtBQUNBLE1BQU0sTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3RDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdkIsTUFBTSxJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7QUFDL0IsTUFBTSxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDMUIsTUFBTSxJQUFJLENBQUMsRUFBRSxPQUFPLENBQUM7QUFDckI7QUFDQSxNQUFNLElBQUksTUFBTSxLQUFLLENBQUMsRUFBRTtBQUN4QixRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2xDLFVBQVUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3ZDO0FBQ0EsVUFBVSxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ3RCLFlBQVksU0FBUztBQUNyQixXQUFXO0FBQ1g7QUFDQSxVQUFVLFFBQVEsQ0FBQyxJQUFJLENBQUM7QUFDeEIsWUFBWSxRQUFRLEVBQUUsQ0FBQztBQUN2QixZQUFZLE9BQU8sRUFBRSxLQUFLO0FBQzFCLFdBQVcsQ0FBQyxDQUFDO0FBQ2IsU0FBUztBQUNUO0FBQ0EsUUFBUSxZQUFZLEdBQUcsSUFBSSxDQUFDO0FBQzVCLE9BQU8sTUFBTSxJQUFJLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDL0IsUUFBUSxNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7QUFDakMsUUFBUSxJQUFJLGVBQWUsR0FBRyxDQUFDLENBQUM7QUFDaEM7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdEMsVUFBVSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3JELFVBQVUsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUMzQyxVQUFVLGVBQWUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxlQUFlLENBQUMsQ0FBQztBQUNwRSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUM5QjtBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGVBQWUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNuRCxVQUFVLFVBQVUsQ0FBQyxJQUFJLENBQUM7QUFDMUIsWUFBWSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUN2QyxZQUFZLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQ3hDLFlBQVksT0FBTyxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ2hFLFlBQVksVUFBVSxFQUFFLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUNuRCxXQUFXLENBQUMsQ0FBQztBQUNiLFNBQVM7QUFDVDtBQUNBLFFBQVEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN0QyxVQUFVLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUN0QyxZQUFZLElBQUksQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hELFlBQVksT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN2QyxZQUFZLFFBQVEsQ0FBQyxJQUFJLENBQUM7QUFDMUIsY0FBYyxRQUFRLEVBQUUsQ0FBQztBQUN6QixjQUFjLE9BQU87QUFDckIsYUFBYSxDQUFDLENBQUM7QUFDZixXQUFXLE1BQU07QUFDakIsWUFBWSxNQUFNLENBQUMsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkQ7QUFDQSxZQUFZLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMvQyxjQUFjLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUMxRCxjQUFjLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlDLGNBQWMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN6QztBQUNBLGNBQWMsSUFBSSxPQUFPLEtBQUssQ0FBQyxFQUFFO0FBQ2pDLGdCQUFnQixPQUFPLEdBQUcsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUM7QUFDeEQsZUFBZTtBQUNmO0FBQ0EsY0FBYyxRQUFRLENBQUMsSUFBSSxDQUFDO0FBQzVCLGdCQUFnQixRQUFRO0FBQ3hCLGdCQUFnQixPQUFPO0FBQ3ZCLGVBQWUsQ0FBQyxDQUFDO0FBQ2pCLGFBQWE7QUFDYixXQUFXO0FBQ1gsU0FBUztBQUNULE9BQU8sTUFBTSxJQUFJLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDL0IsUUFBUSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQy9DLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQixRQUFRLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUM1QixRQUFRLElBQUksUUFBUSxDQUFDO0FBQ3JCO0FBQ0EsUUFBUSxLQUFLLFFBQVEsR0FBRyxDQUFDLEVBQUUsUUFBUSxHQUFHLFFBQVEsRUFBRSxRQUFRLEVBQUUsRUFBRTtBQUM1RCxVQUFVLFFBQVEsQ0FBQyxJQUFJLENBQUM7QUFDeEIsWUFBWSxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUNqQyxXQUFXLENBQUMsQ0FBQztBQUNiLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQjtBQUNBLFFBQVEsS0FBSyxRQUFRLEdBQUcsQ0FBQyxFQUFFLFFBQVEsR0FBRyxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQUU7QUFDNUQsVUFBVSxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN0RCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLEtBQUssUUFBUSxHQUFHLENBQUMsRUFBRSxRQUFRLEdBQUcsUUFBUSxFQUFFLFFBQVEsRUFBRSxFQUFFO0FBQzVELFVBQVUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDdEQsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLFlBQVksR0FBRyxDQUFDO0FBQzVCLFlBQVksV0FBVyxDQUFDO0FBQ3hCO0FBQ0EsUUFBUSxLQUFLLFFBQVEsR0FBRyxDQUFDLEVBQUUsUUFBUSxHQUFHLFFBQVEsRUFBRSxRQUFRLEVBQUUsRUFBRTtBQUM1RCxVQUFVLE9BQU8sR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDdkMsVUFBVSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDL0M7QUFDQSxVQUFVLElBQUksQ0FBQyxXQUFXLEVBQUU7QUFDNUIsWUFBWSxPQUFPLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLFlBQVksU0FBUztBQUNyQixXQUFXO0FBQ1g7QUFDQSxVQUFVLFdBQVcsR0FBRyxDQUFDLFdBQVcsSUFBSSxDQUFDLEtBQUssUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFDO0FBQ25FLFVBQVUsT0FBTyxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7QUFDNUMsVUFBVSxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsV0FBVyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMvRixTQUFTO0FBQ1Q7QUFDQSxRQUFRLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUMzQjtBQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDM0MsVUFBVSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLFNBQVM7QUFDVDtBQUNBLFFBQVEsS0FBSyxRQUFRLEdBQUcsQ0FBQyxFQUFFLFFBQVEsR0FBRyxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQUU7QUFDNUQsVUFBVSxPQUFPLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3ZDLFVBQVUsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFDaEMsVUFBVSxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDO0FBQ2xDLFVBQVUsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztBQUN0QyxVQUFVLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO0FBQzVDO0FBQ0EsVUFBVSxLQUFLLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6QyxZQUFZLElBQUksQ0FBQyxLQUFLLE1BQU0sRUFBRTtBQUM5QixjQUFjLFNBQVM7QUFDdkIsYUFBYTtBQUNiO0FBQ0EsWUFBWSxPQUFPLEdBQUcsV0FBVyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLFdBQVcsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDN0UsWUFBWSxPQUFPLEdBQUcsT0FBTyxHQUFHLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDL0MsWUFBWSxRQUFRLENBQUMsSUFBSSxDQUFDO0FBQzFCLGNBQWMsUUFBUSxFQUFFLENBQUM7QUFDekIsY0FBYyxPQUFPO0FBQ3JCLGFBQWEsQ0FBQyxDQUFDO0FBQ2YsV0FBVztBQUNYLFNBQVM7QUFDVCxPQUFPLE1BQU0sSUFBSSxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQy9CLFFBQVEsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQzNDLFFBQVEsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQzVDO0FBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6QyxVQUFVLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDckMsVUFBVSxNQUFNLFFBQVEsR0FBRyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQ3pDLFVBQVUsUUFBUSxDQUFDLElBQUksQ0FBQztBQUN4QixZQUFZLFFBQVE7QUFDcEIsWUFBWSxPQUFPO0FBQ25CLFdBQVcsQ0FBQyxDQUFDO0FBQ2IsU0FBUztBQUNULE9BQU8sTUFBTTtBQUNiLFFBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLHFDQUFxQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0FBQ3hFLFFBQVEsT0FBTztBQUNmLFVBQVUsVUFBVSxFQUFFLENBQUMsQ0FBQztBQUN4QixVQUFVLFVBQVUsRUFBRSxDQUFDLENBQUM7QUFDeEIsVUFBVSxRQUFRLEVBQUUsRUFBRTtBQUN0QixVQUFVLFlBQVksRUFBRSxLQUFLO0FBQzdCLFNBQVMsQ0FBQztBQUNWLE9BQU87QUFDUDtBQUNBLE1BQU0sUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDcEMsUUFBUSxPQUFPLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQztBQUN2QyxPQUFPLENBQUMsQ0FBQztBQUNUO0FBQ0EsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoRCxRQUFRLElBQUksUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtBQUMvRCxVQUFVLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFVBQVUsQ0FBQyxFQUFFLENBQUM7QUFDZCxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPO0FBQ2IsUUFBUSxVQUFVLEVBQUUsY0FBYyxDQUFDLFVBQVU7QUFDN0MsUUFBUSxVQUFVLEVBQUUsY0FBYyxDQUFDLFVBQVU7QUFDN0MsUUFBUSxRQUFRO0FBQ2hCLFFBQVEsWUFBWTtBQUNwQixPQUFPLENBQUM7QUFDUixLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFO0FBQ3pGLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNuQixRQUFRLElBQUksT0FBTyxFQUFFO0FBQ3JCLFVBQVUsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDOUIsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPO0FBQ2YsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQy9ELE1BQU0sSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDcEIsTUFBTSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNwQixNQUFNLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3BCLE1BQU0sSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDcEIsTUFBTSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNwQixNQUFNLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3BCLE1BQU0sSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDcEIsTUFBTSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNwQixNQUFNLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3BCLE1BQU0sSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDcEIsTUFBTSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDM0MsTUFBTSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNwQixNQUFNLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3BCLE1BQU0sSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQzFDO0FBQ0EsTUFBTSxJQUFJLFdBQVcsS0FBSyxDQUFDLEVBQUU7QUFDN0IsUUFBUSxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdkU7QUFDQSxRQUFRLElBQUksRUFBRSxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDN0IsVUFBVSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5QixVQUFVLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksWUFBWSxHQUFHLFNBQVMsRUFBRTtBQUNwQyxRQUFRLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLGtCQUFrQixFQUFFLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsNEJBQTRCLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUgsUUFBUSxZQUFZLEdBQUcsU0FBUyxDQUFDO0FBQ2pDLFFBQVEsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFlBQVksR0FBRyxNQUFNLEtBQUssQ0FBQyxDQUFDO0FBQ3ZELFFBQVEsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLEdBQUcsTUFBTSxDQUFDO0FBQ2hELE9BQU87QUFDUDtBQUNBLE1BQU0sTUFBTSxpQkFBaUIsR0FBRyxTQUFTLEdBQUcsWUFBWSxDQUFDO0FBQ3pELE1BQU0sTUFBTSxVQUFVLEdBQUcsaUJBQWlCLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3RGO0FBQ0EsTUFBTSxJQUFJLFVBQVUsR0FBRyxDQUFDLEVBQUU7QUFDMUIsUUFBUSxNQUFNLE9BQU8sR0FBRyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN4RSxRQUFRLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xDO0FBQ0EsUUFBUSxJQUFJLGFBQWEsRUFBRTtBQUMzQixVQUFVLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRCxVQUFVLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEQsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztBQUMvQixPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLGFBQWEsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRTtBQUN4RixNQUFNLE1BQU0sWUFBWSxHQUFHO0FBQzNCLFFBQVEsTUFBTSxFQUFFLENBQUM7QUFDakIsUUFBUSxrQkFBa0IsRUFBRSxDQUFDO0FBQzdCLE9BQU8sQ0FBQztBQUNSO0FBQ0EsTUFBTSxJQUFJLFNBQVMsR0FBRyxXQUFXLElBQUksRUFBRSxFQUFFO0FBQ3pDLFFBQVEsT0FBTyxZQUFZLENBQUM7QUFDNUIsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMzRCxNQUFNLElBQUksYUFBYSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEQ7QUFDQSxNQUFNLElBQUksYUFBYSxHQUFHLENBQUMsRUFBRTtBQUM3QixRQUFRLGFBQWEsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzQixRQUFRLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDakQsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNsQyxRQUFRLFlBQVksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUMxQyxRQUFRLE9BQU8sWUFBWSxDQUFDO0FBQzVCLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxDQUFDO0FBQ1gsVUFBVSxDQUFDLEdBQUcsRUFBRTtBQUNoQixVQUFVLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFDekI7QUFDQSxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsYUFBYSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzFDLFFBQVEsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BELFFBQVEsVUFBVSxHQUFHLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDbEMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2YsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQztBQUNsQyxNQUFNLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVELE1BQU0sWUFBWSxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO0FBQzNELE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxrQkFBa0IsQ0FBQztBQUNsQyxNQUFNLE1BQU0sZUFBZSxHQUFHLENBQUMsQ0FBQztBQUNoQyxNQUFNLElBQUksaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0FBQ2hDO0FBQ0EsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2QyxRQUFRLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQy9CO0FBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLEVBQUU7QUFDekIsVUFBVSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFDcEMsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDeEI7QUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRTtBQUN0QixVQUFVLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDdEIsU0FBUyxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsRUFBRTtBQUM5QixVQUFVLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDdEIsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDeEI7QUFDQSxRQUFRLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRTtBQUN0QixVQUFVLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDdEIsU0FBUyxNQUFNLElBQUksSUFBSSxHQUFHLEVBQUUsRUFBRTtBQUM5QixVQUFVLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDdEIsU0FBUztBQUNUO0FBQ0EsUUFBUSxNQUFNLFFBQVEsR0FBRyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQzNDLFFBQVEsaUJBQWlCLElBQUksUUFBUSxDQUFDO0FBQ3RDO0FBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxDQUFDLEVBQUU7QUFDdEIsVUFBVSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNuQyxVQUFVLENBQUMsSUFBSSxNQUFNLENBQUM7QUFDdEIsVUFBVSxpQkFBaUIsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDO0FBQ2pELFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksaUJBQWlCLEtBQUssQ0FBQyxFQUFFO0FBQ25DLFFBQVEsT0FBTyxZQUFZLENBQUM7QUFDNUIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLGVBQWUsR0FBRyxDQUFDLEdBQUcsaUJBQWlCLENBQUM7QUFDbEQ7QUFDQSxNQUFNLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDekMsUUFBUSxPQUFPLFlBQVksQ0FBQztBQUM1QixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksQ0FBQyxVQUFVLElBQUksa0JBQWtCLEdBQUcsQ0FBQyxFQUFFO0FBQ2pELFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ2pFLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxTQUFTLEdBQUcsaUJBQWlCLENBQUMsQ0FBQztBQUN4RCxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsZUFBZSxDQUFDLEVBQUUsU0FBUyxHQUFHLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3JHLFFBQVEsZUFBZSxJQUFJLGtCQUFrQixDQUFDO0FBQzlDO0FBQ0EsUUFBUSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsZUFBZSxHQUFHLENBQUMsRUFBRTtBQUMvQyxVQUFVLGVBQWUsR0FBRyxlQUFlLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3JELFNBQVM7QUFDVDtBQUNBLFFBQVEsWUFBWSxDQUFDLE1BQU0sR0FBRyxlQUFlLENBQUM7QUFDOUMsUUFBUSxPQUFPLFlBQVksQ0FBQztBQUM1QixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxlQUFlLEdBQUcsQ0FBQyxFQUFFO0FBQzdDLFFBQVEsZUFBZSxHQUFHLGVBQWUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbkQsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQy9ELFFBQVEsWUFBWSxDQUFDLE1BQU0sR0FBRyxlQUFlLENBQUM7QUFDOUMsUUFBUSxPQUFPLFlBQVksQ0FBQztBQUM1QixPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ2hDLE1BQU0sWUFBWSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3hDLE1BQU0sT0FBTyxZQUFZLENBQUM7QUFDMUIsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLFlBQVksQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRTtBQUN2RCxNQUFNLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDN0IsTUFBTSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEU7QUFDQSxNQUFNLElBQUksT0FBTyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUU7QUFDL0IsUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsbURBQW1ELEdBQUcsT0FBTyxDQUFDLENBQUM7QUFDdkYsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLE9BQU87QUFDUDtBQUNBLE1BQU0sTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3pEO0FBQ0EsTUFBTSxJQUFJLGdCQUFnQixHQUFHLENBQUMsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLEVBQUU7QUFDeEQsUUFBUSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsNERBQTRELEdBQUcsZ0JBQWdCLENBQUMsQ0FBQztBQUN6RyxRQUFRLE1BQU0sZ0JBQWdCLEdBQUcsU0FBUyxHQUFHLENBQUMsQ0FBQztBQUMvQztBQUNBLFFBQVEsSUFBSSxVQUFVLEtBQUssZ0JBQWdCLElBQUksQ0FBQyxFQUFFO0FBQ2xELFVBQVUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2QixVQUFVLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkIsU0FBUyxNQUFNLElBQUksVUFBVSxLQUFLLGdCQUFnQixJQUFJLENBQUMsRUFBRTtBQUN6RCxVQUFVLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkIsVUFBVSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLFNBQVMsTUFBTTtBQUNmLFVBQVUsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsa0NBQWtDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQztBQUM3RixTQUFTO0FBQ1QsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxvQkFBb0IsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLHFCQUFxQixFQUFFO0FBQ25JLE1BQU0sSUFBSSxRQUFRLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQztBQUMzQztBQUNBLE1BQU0sSUFBSSxvQkFBb0IsRUFBRTtBQUNoQyxRQUFRLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDckI7QUFDQSxRQUFRLFVBQVUsR0FBRyxTQUFTLGtCQUFrQixDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7QUFDL0QsVUFBVSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN4RyxTQUFTLENBQUM7QUFDVjtBQUNBLFFBQVEsVUFBVSxHQUFHLFNBQVMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7QUFDdEUsVUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDN0MsVUFBVSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2hELFVBQVUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMvQyxVQUFVLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQztBQUMxQyxTQUFTLENBQUM7QUFDVixPQUFPLE1BQU07QUFDYixRQUFRLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDckI7QUFDQSxRQUFRLFVBQVUsR0FBRyxTQUFTLGNBQWMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO0FBQzNELFVBQVUsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNELFNBQVMsQ0FBQztBQUNWO0FBQ0EsUUFBUSxVQUFVLEdBQUcsU0FBUyxjQUFjLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7QUFDbEUsVUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0MsVUFBVSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQy9DLFNBQVMsQ0FBQztBQUNWLE9BQU87QUFDUDtBQUNBLE1BQU0sTUFBTSxZQUFZLEdBQUcsYUFBYSxHQUFHLFNBQVMsR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDO0FBQ3JFLE1BQU0sTUFBTSxZQUFZLEdBQUcsUUFBUSxJQUFJLENBQUMsR0FBRyxZQUFZLENBQUMsQ0FBQztBQUN6RCxNQUFNLE1BQU0sUUFBUSxHQUFHLElBQUksVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3BELE1BQU0sUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztBQUN4RCxNQUFNLElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO0FBQzNCLE1BQU0sTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUNwQyxNQUFNLE1BQU0saUJBQWlCLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQztBQUNuRCxNQUFNLE1BQU0sV0FBVyxHQUFHLElBQUksVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDNUQsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDZixNQUFNLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztBQUM3QjtBQUNBLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLFFBQVEsRUFBRTtBQUNoRSxRQUFRLElBQUksTUFBTSxHQUFHLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0M7QUFDQSxRQUFRLElBQUksTUFBTSxHQUFHLGlCQUFpQixFQUFFO0FBQ3hDLFVBQVUsTUFBTSxHQUFHLGlCQUFpQixDQUFDO0FBQ3JDLFNBQVM7QUFDVDtBQUNBLFFBQVEsV0FBVyxDQUFDLElBQUksQ0FBQztBQUN6QixVQUFVLEtBQUssRUFBRSxDQUFDO0FBQ2xCLFVBQVUsTUFBTTtBQUNoQixVQUFVLFNBQVMsRUFBRSxDQUFDO0FBQ3RCLFNBQVMsQ0FBQyxDQUFDO0FBQ1gsT0FBTztBQUNQO0FBQ0EsTUFBTSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSztBQUNqQyxRQUFRLE9BQU8sQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ25DLE9BQU8sQ0FBQyxDQUFDO0FBQ1Q7QUFDQSxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3RDLFFBQVEsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUM3RCxPQUFPO0FBQ1A7QUFDQSxNQUFNLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLO0FBQ2pDLFFBQVEsT0FBTyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDakMsT0FBTyxDQUFDLENBQUM7QUFDVCxNQUFNLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEQsTUFBTSxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFDMUIsTUFBTSxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUMzQztBQUNBLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksUUFBUSxFQUFFO0FBQ25FLFFBQVEsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUMvSSxRQUFRLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUM7QUFDOUM7QUFDQSxRQUFRLElBQUksU0FBUyxLQUFLLENBQUMsRUFBRTtBQUM3QixVQUFVLGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLFlBQVksQ0FBQyxrQkFBa0IsR0FBRyxxQkFBcUIsRUFBRTtBQUNyRSxVQUFVLHFCQUFxQixHQUFHLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQztBQUNsRSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLFdBQVcsSUFBSSxTQUFTLENBQUM7QUFDakMsUUFBUSxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUM3QyxPQUFPO0FBQ1A7QUFDQSxNQUFNLElBQUksV0FBVyxLQUFLLENBQUMsRUFBRTtBQUM3QixRQUFRLE1BQU0sV0FBVyxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5RjtBQUNBLFFBQVEsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQyxHQUFHLFlBQVksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksUUFBUSxFQUFFO0FBQ3hFLFVBQVUsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3RELFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUM7QUFDaEMsT0FBTyxNQUFNLElBQUksYUFBYSxFQUFFO0FBQ2hDLFFBQVEsTUFBTSxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2hFO0FBQ0EsUUFBUSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsZ0JBQWdCLEdBQUcsV0FBVyxFQUFFO0FBQ2pFLFVBQVUsSUFBSSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsQ0FBQztBQUM5RSxTQUFTLE1BQU07QUFDZixVQUFVLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxVQUFVLENBQUMsZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLENBQUM7QUFDckUsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQzlELFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUM5RSxRQUFRLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxNQUFNLEdBQUcsUUFBUSxFQUFFLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQzFGLE9BQU8sTUFBTTtBQUNiLFFBQVEsSUFBSSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUN6RCxPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU87QUFDYixRQUFRLGFBQWE7QUFDckIsUUFBUSxxQkFBcUI7QUFDN0IsT0FBTyxDQUFDO0FBQ1IsS0FBSztBQUNMO0FBQ0EsSUFBSSxTQUFTLG1CQUFtQixDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFO0FBQ3JFLE1BQU0sTUFBTSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDaEUsTUFBTSxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQztBQUN2QixNQUFNLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNO0FBQ2hDLFlBQVksR0FBRyxHQUFHLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDakMsTUFBTSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDdEMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLE1BQU0sSUFBSSxVQUFVLENBQUM7QUFDckIsTUFBTSxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDdkIsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNaO0FBQ0EsTUFBTSxRQUFRLE9BQU87QUFDckIsUUFBUSxLQUFLLFVBQVU7QUFDdkIsVUFBVSxVQUFVLEdBQUcsWUFBWSxDQUFDLHdCQUF3QixDQUFDO0FBQzdELFVBQVUsTUFBTTtBQUNoQjtBQUNBLFFBQVEsS0FBSyxVQUFVO0FBQ3ZCLFVBQVUsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQzdDO0FBQ0EsVUFBVSxJQUFJLFNBQVMsS0FBSyxhQUFhLEVBQUU7QUFDM0MsWUFBWSxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQzFCLFlBQVksTUFBTTtBQUNsQixXQUFXO0FBQ1g7QUFDQSxVQUFVLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0FBQ3RDO0FBQ0EsVUFBVSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUMxQyxZQUFZLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUMzQztBQUNBLFlBQVksSUFBSSxLQUFLLElBQUksS0FBSyxFQUFFO0FBQ2hDLGNBQWMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUM1QixjQUFjLE1BQU07QUFDcEIsYUFBYTtBQUNiO0FBQ0EsWUFBWSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDekMsV0FBVztBQUNYO0FBQ0EsVUFBVSxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ3RCLFlBQVksTUFBTTtBQUNsQixXQUFXO0FBQ1g7QUFDQSxVQUFVLE1BQU0sV0FBVyxHQUFHLEVBQUU7QUFDaEMsZ0JBQWdCLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDNUI7QUFDQSxVQUFVLE9BQU8sSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUU7QUFDakMsWUFBWSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDaEQsWUFBWSxNQUFNLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQztBQUN6QztBQUNBLFlBQVksS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDL0MsY0FBYyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUM5RCxhQUFhO0FBQ2I7QUFDQSxZQUFZLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlDLFdBQVc7QUFDWDtBQUNBLFVBQVUsVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUMxQjtBQUNBLFVBQVUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDMUMsWUFBWSxNQUFNLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQztBQUNBLFlBQVksSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFO0FBQ3pCLGNBQWMsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RSxjQUFjLFNBQVM7QUFDdkIsYUFBYTtBQUNiO0FBQ0EsWUFBWSxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNsRCxXQUFXO0FBQ1g7QUFDQSxVQUFVLE1BQU07QUFDaEI7QUFDQSxRQUFRLEtBQUssVUFBVTtBQUN2QixVQUFVLE1BQU07QUFDaEI7QUFDQSxRQUFRO0FBQ1IsVUFBVSxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUseUNBQXlDLEdBQUcsT0FBTyxDQUFDLENBQUM7QUFDL0UsVUFBVSxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3hCO0FBQ0EsVUFBVSxJQUFJLGFBQWEsQ0FBQyxlQUFlLEVBQUU7QUFDN0MsWUFBWSxVQUFVLEdBQUcsYUFBYSxDQUFDLGVBQWUsQ0FBQztBQUN2RCxXQUFXO0FBQ1g7QUFDQSxVQUFVLE1BQU07QUFDaEIsT0FBTztBQUNQO0FBQ0EsTUFBTSxhQUFhLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztBQUM1QyxNQUFNLE9BQU8sS0FBSyxDQUFDO0FBQ25CLEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxhQUFhLENBQUMsU0FBUyxFQUFFO0FBQ3RDLE1BQU0sTUFBTSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUM7QUFDckUsTUFBTSxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQztBQUN2QixNQUFNLE1BQU0sS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLE1BQU0sTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU07QUFDckMsWUFBWSxHQUFHLEdBQUcsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUNqQyxNQUFNLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN0QyxNQUFNLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZDO0FBQ0EsTUFBTSxJQUFJLE1BQU0sS0FBSyxDQUFDLElBQUksTUFBTSxHQUFHLHNCQUFzQixFQUFFO0FBQzNELFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckIsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDMUMsTUFBTSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDNUMsTUFBTSxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7QUFDekIsTUFBTSxNQUFNLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztBQUNwQyxNQUFNLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUNoQjtBQUNBLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxrQkFBa0IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDL0UsUUFBUSxNQUFNLENBQUMsR0FBRztBQUNsQixVQUFVLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQ3BDLFVBQVUsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDcEMsVUFBVSxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUNwQyxVQUFVLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQ2hDLFVBQVUsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDbEMsVUFBVSxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUNsQyxTQUFTLENBQUM7QUFDVjtBQUNBLFFBQVEsSUFBSSxDQUFDLENBQUMsUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxLQUFLLEtBQUssRUFBRTtBQUN0SSxVQUFVLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDcEQsUUFBUSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEM7QUFDQSxRQUFRLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7QUFDaEMsVUFBVSxTQUFTO0FBQ25CLFNBQVM7QUFDVDtBQUNBLFFBQVEsTUFBTSxHQUFHLEdBQUcsS0FBSyxHQUFHLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ3pEO0FBQ0EsUUFBUSxJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtBQUN2QyxVQUFVLFNBQVM7QUFDbkIsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUN2QixRQUFRLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDdEM7QUFDQSxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRTtBQUM3QixVQUFVLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUN2QjtBQUNBLFVBQVUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQzlELFlBQVksR0FBRyxJQUFJLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7QUFDekQsV0FBVztBQUNYO0FBQ0EsVUFBVSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3BDLFNBQVMsTUFBTTtBQUNmLFVBQVUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzlELFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQSxNQUFNLE9BQU8sS0FBSyxDQUFDO0FBQ25CLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDempCO0FBQ0EsSUFBSSxTQUFTLGlCQUFpQixDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUU7QUFDakQsTUFBTSxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQzVCLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNmLFVBQVUsQ0FBQztBQUNYLFVBQVUsQ0FBQztBQUNYLFVBQVUsQ0FBQztBQUNYLFVBQVUsTUFBTTtBQUNoQixVQUFVLEVBQUU7QUFDWixVQUFVLFFBQVEsR0FBRyxDQUFDO0FB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LENBQUMsRUFBRTtBQUNsRSxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNsQyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNsQyxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sZUFBZSxHQUFHO0FBQzVCLE1BQU0sVUFBVSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNuRSxNQUFNLElBQUksRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0QsTUFBTSxJQUFJLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25FLE1BQU0sTUFBTSxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRSxNQUFNLE9BQU8sRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEUsTUFBTSxPQUFPLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMs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RSxXQUFXLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxjQUFj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QU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQy9CLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUIsR0FBRztBQUNIO0FBQ0EsRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRTtBQUNuQixJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUM1RCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQy9CLEdBQUc7QUFDSDtBQUNBLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRTtBQUNiLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9CLEdBQUc7QUFDSDtBQUNBLEVBQUUsSUFBSSxLQUFLLEdBQUc7QUFDZCxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDL0IsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsT0FBTyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7QUFDNUI7QUFDQSxNQUFNLE9BQU8sQ0FBQztBQUNkLEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUU7QUFDL0IsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7QUFDNUMsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7QUFDNUMsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7QUFDcEMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDOUIsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7QUFDbEMsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FB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RUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3gwQyxFQUFFLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztBQUNwQjtBQUNBLEVBQUUsTUFBTSxVQUFVLFNBQVMsT0FBTyxDQUFDO0FBQ25DLElBQUksV0FBVyxDQUFDLE9BQU8sRUFBRTtBQUN6QixNQUFNLElBQUksTUFBTSxLQUFLLElBQUksRUFBRTtBQUMzQixRQUFRLE1BQU0sR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzlDLE9BQU87QUFDUDtBQUNBLE1BQU0sS0FBSyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUM3QixNQUFNLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQzlCLEtBQUs7QUFDTDtBQUNBLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQyxFQUFFLENBQUM7QUFDSjtBQUNBLE9BQU8sQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQ2hDO0FBQ0EsTUFBTSxjQUFjLEdBQUcsU0FBUyxxQkFBcUIsR0FBRztBQUN4RCxFQUFFLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN6cEIsRUFBRSxJQUFJLE1BQU0sR0FB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LFNBQVM7QUFDVDtBQUNBLFFBQVEsTUFBTTtBQUNkO0FBQ0EsTUFBTSxLQUFLLENBQUM7QUFDWixRQUFRLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN4QixRQUFRLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUMsUUFBUSxNQUFNLE1BQU0sR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLEtBQUssR0FBRyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0U7QUFDQSxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdkQsVUFBVSxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pEO0FBQ0EsVUFBVSxJQUFJLFNBQVMsS0FBSyxNQUFNLEVBQUU7QUFDcEMsWUFBWSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDNUQsWUFBWSxNQUFNLEdBQUcsU0FBUyxDQUFDO0FBQy9CLFdBQVc7QUFDWCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE1BQU0sU0FBUyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xELFFBQVEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzFDLFFBQVEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDckMsUUFBUSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FB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LEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNyd0UsT0FBTyxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7QUFDMUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxXQUFX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Q0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNiLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2xCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNsQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2xCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNsQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2xCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbEIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQztBQUNILE9BQU8sQ0FBQywyQkFBMkIsR0FBRywyQkFBMkIsQ0FBQztBQUNsRSxNQUFNLG9DQUFvQyxHQUFHLElBQUksV0FBVyxDQUFDLHFCQUFxQixFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ2pHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNmLENBQUMsQ0FBQyxDQUFDO0FBQ0gsT0FBTyxDQUFDLG9DQUFvQyxHQUFHLG9DQUFvQyxDQUFDO0FBQ3BGLE1BQU0saUNBQWlDLEdBQUcsSUFBSSxXQUFXLENBQUMscUJBQXFCLEVBQUUsVUFBVSxDQUFDLEVBQUU7QUFDOUYsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ1osRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ1osRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2IsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2YsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2Ys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LFNBQVMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN4QyxJQUFJLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUQsSUFBSSxDQUFDLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDNUIsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ2hCO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQzNDLE1BQU0sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHO0FBQ2xCLFFBQVEsR0FBRyxFQUFFLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQy9CLE9BQU8sQ0FBQztBQUNSLEtBQUs7QUFDTDtBQUNBLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNYO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQzNDLE1BQU0sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNDLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUMzQyxNQUFNLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDM0MsTUFBTSxJQUFJLFFBQVEsR0FBRyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3hDO0FBQ0EsTUFBTSxJQUFJLFFBQVEsS0FBSyxDQUFDLEVBQUU7QUFDMUIsUUFBUSxTQUFTO0FBQ2pCLE9BQU87QUFDUDtBQUNBLE1BQU0sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDekI7QUFDQSxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDN0UsUUFBUSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDO0FBQ3pELFFBQVEsUUFBUSxJQUFJLENBQUMsQ0FBQztBQUN0QixPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLE1BQU0sQ0FBQztBQUNsQixHQUFHLE1BQU0sSUFBSSxNQUFNLEtBQUssRUFBRSxFQUFFO0FBQzVCLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLElBQUksTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLEdBQUcsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3RELElBQUksQ0FBQyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQzVCLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNoQjtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDakMsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDO0FBQ2xCLFFBQVEsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQy9CLFFBQVEsR0FBRyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQyxRQUFRLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUN4RCxPQUFPLENBQUMsQ0FBQztBQUNULE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNkLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxNQUFNLENBQUM7QUFDbEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RCxDQUFDO0FBQ0Q7QUFDQSxTQUFTLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxtQkFBbUIsRUFBRTtBQUN6RCxFQUFFLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUN4QixFQUFFLE1BQU0sTUFBTSxHQUFHLElBQUksV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLEdBQUcsS0FBSyxDQUFDLEVBQUUsVUFBVSxFQUFFLG1CQUFtQixDQUFDLENBQUM7QUFDMUgsRUFBRSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDN0IsRUFBRSxPQUFPO0FBQ1QsSUFBSSxNQUFNLEVBQUUsR0FBRyxDQUFDLFdBQVcsQ0FBQyxPQUFPO0FBQ25DLElBQUksS0FBSyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFVBQVUsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsT0FBTztBQUN0SCxJQUFJLE1BQU0sRUFBRSxHQUFHLENBQUMsZUFBZSxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUMsT0FBTztBQUM5RCxJQUFJLFlBQVksRUFBRSxHQUFHLENBQUMsU0FBUztBQUMvQixJQUFJLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUTtBQUMxQixJQUFJLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTztBQUN4QixHQUFHLENBQUM7QUFDSixDQUFDO0FBQ0Q7QUFDQSxTQUFTLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFO0FBQzFELEVBQUUsSUFBSSxRQUFRLEVBQUUsVUFBVSxDQUFDO0FBQzNCO0FBQ0EsRUFBRSxJQUFJLG9CQUFvQixFQUFFO0FBQzVCLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztBQUNqQjtBQUNBLElBQUksVUFBVSxHQUFHLFNBQVMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRTtBQUMzRCxNQUFNLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BHLEtBQUssQ0FBQztBQUNOLEdBQUcsTUFBTTtBQUNULElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztBQUNqQjtBQUNBLElBQUksVUFBVSxHQUFHLFNBQVMsY0FBYyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7QUFDdkQsTUFBTSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkQsS0FBSyxDQUFDO0FBQ04sR0FBRztBQUNIO0FBQ0EsRUFBRSxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDcEIsRUFBRSxJQUFJLFdBQVcsR0FBRyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3hDO0FBQ0EsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksUUFBUSxFQUFFO0FBQ3pELElBQUksTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUN2RCxJQUFJLFdBQVcsR0FBRyxTQUFTLENBQUM7QUFDNUIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBQ0Q7QUFDQSxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFO0FBQ3JDLEVBQUUsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QyxFQUFFLElBQUksR0FBRyxHQUFHLENBQUM7QUFDYixNQUFNLENBQUMsR0FBRyxDQUFDO0FBQ1gsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDNUI7QUFDQSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNoQixJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3QjtBQUNBLElBQUksSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRTtBQUNoQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCLEtBQUssTUFBTTtBQUNYLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNaLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUU7QUFDeEQsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEcsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPO0FBQ1QsSUFBSSxRQUFRLEVBQUUsSUFBSTtBQUNsQixJQUFJLE9BQU8sRUFBRSxHQUFHO0FBQ2hCLEdBQUcsQ0FBQztBQUNKLENBQUM7QUFDRDtBQUNBLFNBQVMsV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO0FBQ3ZDLEVBQUUsU0FBUyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN4QixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDZCxNQUFNLEdBQUcsRUFBRSxRQUFRO0FBQ25CLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQixLQUFLLENBQUMsQ0FBQztBQUNQLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN4QixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDZCxNQUFNLEdBQUcsRUFBRSxRQUFRO0FBQ25CLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQixLQUFLLENBQUMsQ0FBQztBQUNQLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDMUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ2QsTUFBTSxHQUFHLEVBQUUsa0JBQWtCO0FBQzdCLE1BQU0sSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFCLEtBQUssQ0FBQyxDQUFDO0FBQ1AsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDWixFQUFFLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUNyRSxFQUFFLElBQUksS0FBSyxDQUFDO0FBQ1osRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ1gsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ1osRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ1Y7QUFDQSxFQUFFLElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxFQUFFO0FBQzVCLElBQUksR0FBRztBQUNQLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN6QyxNQUFNLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEQsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2IsTUFBTSxJQUFJLElBQUksRUFBRSxJQUFJLENBQUM7QUFDckI7QUFDQSxNQUFNLElBQUksS0FBSyxHQUFHLElBQUksRUFBRTtBQUN4QixRQUFRLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ3pELFFBQVEsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQzdELFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNmLE9BQU8sTUFBTTtBQUNiLFFBQVEsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pCLFFBQVEsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pCLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxLQUFLLEdBQUcsSUFBSSxFQUFFO0FBQ3hCLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQixRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsT0FBTyxNQUFNO0FBQ2IsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLE1BQU0sR0FBRyxDQUFDO0FBQ3BCLFVBQVUsTUFBTSxHQUFHLENBQUM7QUFDcEIsVUFBVSxPQUFPLEdBQUcsQ0FBQztBQUNyQixVQUFVLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDdEI7QUFDQSxNQUFNLElBQUksS0FBSyxHQUFHLElBQUksRUFBRTtBQUN4QixRQUFRLE1BQU0sR0FBRyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLFVBQVUsQ0FBQztBQUMzRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDZixPQUFPLE1BQU0sSUFBSSxLQUFLLEdBQUcsSUFBSSxFQUFFO0FBQy9CLFFBQVEsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxVQUFVLENBQUM7QUFDbEUsUUFBUSxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxVQUFVLENBQUM7QUFDdEUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2YsT0FBTyxNQUFNLElBQUksS0FBSyxHQUFHLElBQUksRUFBRTtBQUMvQixRQUFRLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksVUFBVSxDQUFDO0FBQ2xFLFFBQVEsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksVUFBVSxDQUFDO0FBQ3ZFLFFBQVEsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksVUFBVSxDQUFDO0FBQ3ZFLFFBQVEsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksVUFBVSxDQUFDO0FBQ3RFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNmLE9BQU87QUFDUDtBQUNBLE1BQU0sTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMvQztBQUNBLE1BQU0sSUFBSSxRQUFRLEVBQUU7QUFDcEIsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ2xCLFVBQVUsR0FBRyxFQUFFLE1BQU07QUFDckIsU0FBUyxFQUFFO0FBQ1gsVUFBVSxHQUFHLEVBQUUsV0FBVztBQUMxQixVQUFVLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hELFNBQVMsQ0FBQyxDQUFDO0FBQ1gsUUFBUSxXQUFXLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMxQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDbEIsVUFBVSxHQUFHLEVBQUUsU0FBUztBQUN4QixTQUFTLENBQUMsQ0FBQztBQUNYLE9BQU87QUFDUCxLQUFLLFFBQVEsS0FBSyxHQUFHLElBQUksRUFBRTtBQUMzQixHQUFHLE1BQU07QUFDVCxJQUFJLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0FBQ2hDLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2Q7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDM0MsTUFBTSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEQsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2IsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN6RCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsaUJBQWlCLENBQUM7QUFDL0IsSUFBSSxNQUFNLGNBQWMsR0FBRyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdFLElBQUksTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3RCO0FBQ0EsSUFBSSxPQUFPLE1BQU0sQ0FBQyxNQUFNLEdBQUcsY0FBYyxFQUFFO0FBQzNDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLE1BQU0sSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCO0FBQ0EsTUFBTSxJQUFJLEtBQUssR0FBRyxJQUFJLEVBQUU7QUFDeEIsUUFBUSxNQUFNLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDNUIsT0FBTztBQUNQO0FBQ0EsTUFBTSxPQUFPLE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBRTtBQUMzQixRQUFRLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDcEIsVUFBVSxLQUFLO0FBQ2YsU0FBUyxDQUFDLENBQUM7QUFDWCxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGNBQWMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6QyxNQUFNLFFBQVEsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxJQUFJO0FBQ3BDLFFBQVEsS0FBSyxJQUFJO0FBQ2pCLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDekQsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pCLFVBQVUsTUFBTTtBQUNoQjtBQUNBLFFBQVEsS0FBSyxJQUFJO0FBQ2pCLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsTUFBTTtBQUNoQjtBQUNBLFFBQVEsS0FBSyxJQUFJO0FBQ2pCLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsTUFBTTtBQUNoQixPQUFPO0FBQ1A7QUFDQSxNQUFNLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxjQUFjLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDekMsTUFBTSxRQUFRLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSTtBQUNwQyxRQUFRLEtBQUssSUFBSTtBQUNqQixVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ3pELFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqQixVQUFVLE1BQU07QUFDaEI7QUFDQSxRQUFRLEtBQUssSUFBSTtBQUNqQixVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6QixVQUFVLE1BQU07QUFDaEI7QUFDQSxRQUFRLEtBQUssSUFBSTtBQUNqQixVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6QixVQUFVLE1BQU07QUFDaEIsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztBQUN2QjtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQyxNQUFNLE1BQU0sUUFBUSxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLE1BQU0sTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdEO0FBQ0EsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFO0FBQ2hDLFFBQVEsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQyxPQUFPLE1BQU0sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFO0FBQ3hELFFBQVEsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JELE9BQU8sTUFBTTtBQUNiLFFBQVEsTUFBTSxDQUFDLEdBQUc7QUFDbEIsVUFBVSxLQUFLLEVBQUUsQ0FBQztBQUNsQixVQUFVLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDL0QsVUFBVSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQy9ELFNBQVMsQ0FBQztBQUNWLFFBQVEsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixRQUFRLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekM7QUFDQSxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3BELFFBQVEsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRTtBQUNsQyxVQUFVLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxTQUFTLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUU7QUFDN0MsVUFBVSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRixVQUFVLENBQUMsRUFBRSxDQUFDO0FBQ2QsU0FBUyxNQUFNO0FBQ2YsVUFBVSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDckksU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLE1BQU0sVUFBVSxHQUFHLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDaEMsS0FBSztBQUNMLEdBQUc7QUFDSCxDQUFDO0FBQ0Q7QUFDQSxTQUFTLGlCQUFpQixDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtBQUNoRSxFQUFFLFNBQVMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDeEIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ2QsTUFBTSxHQUFHLEVBQUUsUUFBUTtBQUNuQixNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsS0FBSyxDQUFDLENBQUM7QUFDUCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDeEIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ2QsTUFBTSxHQUFHLEVBQUUsUUFBUTtBQUNuQixNQUFNLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsS0FBSyxDQUFDLENBQUM7QUFDUCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQy9DLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztBQUNkLE1BQU0sR0FBRyxFQUFFLGVBQWU7QUFDMUIsTUFBTSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQyxLQUFLLENBQUMsQ0FBQztBQUNQLEdBQUc7QUFDSDtBQUNBLEVBQUUsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ25CLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNYLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNaLEVBQUUsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCO0FBQ0EsRUFBRSxTQUFTLEtBQUssQ0FBQyxJQUFJLEVBQUU7QUFDdkIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZDtBQUNBLElBQUksT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUM1QixNQUFNLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQztBQUM3QixNQUFNLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLE1BQU0sSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQztBQUNsRDtBQUNBLE1BQU0sUUFBUSxDQUFDO0FBQ2YsUUFBUSxLQUFLLENBQUM7QUFDZCxVQUFVLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNyQyxVQUFVLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDNUIsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLENBQUM7QUFDZCxVQUFVLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNyQyxVQUFVLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDNUIsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLENBQUM7QUFDZCxVQUFVLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDM0IsVUFBVSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFVBQVUsVUFBVSxHQUFHLElBQUksQ0FBQztBQUM1QixVQUFVLE1BQU07QUFDaEI7QUFDQSxRQUFRLEtBQUssQ0FBQztBQUNkLFVBQVUsT0FBTyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUNuQyxZQUFZLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDL0IsWUFBWSxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQy9CLFlBQVksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN6QixXQUFXO0FBQ1g7QUFDQSxVQUFVLE1BQU07QUFDaEI7QUFDQSxRQUFRLEtBQUssQ0FBQztBQUNkLFVBQVUsT0FBTyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUNuQyxZQUFZLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDL0IsWUFBWSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3pCO0FBQ0EsWUFBWSxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ3BDLGNBQWMsTUFBTTtBQUNwQixhQUFhO0FBQ2I7QUFDQSxZQUFZLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDL0IsWUFBWSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLFdBQVc7QUFDWDtBQUNBLFVBQVUsTUFBTTtBQUNoQjtBQUNBLFFBQVEsS0FBSyxDQUFDO0FBQ2QsVUFBVSxPQUFPLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ25DLFlBQVksQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMvQixZQUFZLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDekI7QUFDQSxZQUFZLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDcEMsY0FBYyxNQUFNO0FBQ3BCLGFBQWE7QUFDYjtBQUNBLFlBQVksQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMvQixZQUFZLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDekIsV0FBVztBQUNYO0FBQ0EsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLENBQUM7QUFDZCxVQUFVLE9BQU8sS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDbkMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNuQyxZQUFZLEVBQUUsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ25DLFlBQVksRUFBRSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDcEMsWUFBWSxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNwQyxZQUFZLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ25DLFlBQVksQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkMsWUFBWSxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNoRCxXQUFXO0FBQ1g7QUFDQSxVQUFVLE1BQU07QUFDaEI7QUFDQSxRQUFRLEtBQUssRUFBRTtBQUNmLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMxQixVQUFVLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDMUI7QUFDQSxVQUFVLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtBQUNqQyxZQUFZLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzlEO0FBQ0EsWUFBWSxJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFO0FBQy9ELGNBQWMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNyRCxjQUFjLElBQUksS0FBSyxDQUFDO0FBQ3hCO0FBQ0EsY0FBYyxJQUFJLFFBQVEsQ0FBQyxXQUFXLElBQUksUUFBUSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUU7QUFDM0UsZ0JBQWdCLEtBQUssR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUM7QUFDaEUsZUFBZTtBQUNmO0FBQ0EsY0FBYyxJQUFJLEtBQUssRUFBRTtBQUN6QixnQkFBZ0IsQ0FBQyxJQUFJLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzlDLGdCQUFnQixRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLGVBQWU7QUFDZixhQUFhLE1BQU07QUFDbkIsY0FBYyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsbUNBQW1DLENBQUMsQ0FBQztBQUNuRSxhQUFhO0FBQ2IsV0FBVyxNQUFNO0FBQ2pCLFlBQVksUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN0RCxXQUFXO0FBQ1g7QUFDQSxVQUFVLElBQUksUUFBUSxFQUFFO0FBQ3hCLFlBQVksS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzVCLFdBQVc7QUFDWDtBQUNBLFVBQVUsTUFBTTtBQUNoQjtBQUNBLFFBQVEsS0FBSyxFQUFFO0FBQ2YsVUFBVSxPQUFPO0FBQ2pCO0FBQ0EsUUFBUSxLQUFLLEVBQUU7QUFDZixVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QjtBQUNBLFVBQVUsUUFBUSxDQUFDO0FBQ25CLFlBQVksS0FBSyxFQUFFO0FBQ25CLGNBQWMsRUFBRSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDckMsY0FBYyxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QyxjQUFjLEVBQUUsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDckMsY0FBYyxhQUFhLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNsRCxjQUFjLEVBQUUsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JDLGNBQWMsRUFBRSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEMsY0FBYyxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNyQyxjQUFjLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2pELGNBQWMsTUFBTTtBQUNwQjtBQUNBLFlBQVksS0FBSyxFQUFFO0FBQ25CLGNBQWMsRUFBRSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDckMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNyQyxjQUFjLEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RDLGNBQWMsRUFBRSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEMsY0FBYyxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNyQyxjQUFjLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JDLGNBQWMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbEQsY0FBYyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNyQyxjQUFjLEVBQUUsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JDLGNBQWMsRUFBRSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEMsY0FBYyxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QyxjQUFjLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDckMsY0FBYyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsRCxjQUFjLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMxQixjQUFjLE1BQU07QUFDcEI7QUFDQSxZQUFZLEtBQUssRUFBRTtBQUNuQixjQUFjLEVBQUUsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JDLGNBQWMsRUFBRSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDckMsY0FBYyxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QyxjQUFjLEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDckMsY0FBYyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNuRCxjQUFjLEVBQUUsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JDLGNBQWMsRUFBRSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEMsY0FBYyxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QyxjQUFjLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JDLGNBQWMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbEQsY0FBYyxNQUFNO0FBQ3BCO0FBQ0EsWUFBWSxLQUFLLEVBQUU7QUFDbkIsY0FBYyxNQUFNLEVBQUUsR0FBRyxDQUFDO0FBQzFCLG9CQUFvQixFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLGNBQWMsRUFBRSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDckMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNyQyxjQUFjLEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RDLGNBQWMsRUFBRSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEMsY0FBYyxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNyQyxjQUFjLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JDLGNBQWMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbEQsY0FBYyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNyQyxjQUFjLEVBQUUsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JDLGNBQWMsRUFBRSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEMsY0FBYyxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0Qyxj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QUNBLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDbEIsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUM3QyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckMsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JDLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckMsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLEdBQUc7QUFDSDtBQUNBLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUU7QUFDbkIsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUM7QUFDekQsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUM7QUFDekQsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsTUFBTSxPQUFPLENBQUM7QUFDZCxFQUFFLFdBQVcsQ0FBQztBQUNkLElBQUksS0FBSztBQUNULElBQUksWUFBWTtBQUNoQixJQUFJLFlBQVk7QUFDaEIsR0FBRyxFQUFFO0FBQ0wsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztBQUNyQyxJQUFJLElB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QUFDbkM7QUFDQSxTQUFTLFVBQVUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRTtBQUN2QyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztBQUNoQyxDQUFDO0FBQ0Q7QUFDQSxTQUFTLFVBQVUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRTtBQUN2QyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztBQUNsQyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDdEMsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3JDLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ2hDLENBQUM7QUFDRDtBQUNBLFNBQVMsU0FBUyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO0FBQ3ZDLEVBQUUsSUFBSSxJQUFJLFlBQVksVUFBVSxFQUFFO0FBQ2xDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDM0IsR0FBRyxNQUFNLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFO0FBQ3ZDLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNuRCxNQUFNLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxV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RSxDQUFDLEVBQUUsRUFBRTtBQUNwQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckMsTUFBTSxTQUFTLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM5QyxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRTtBQUN6QixNQUFNLElBQUksR0FBRyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDN0MsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDeEMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDeEMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDeEMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDeEMsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNuQyxJQUFJLE1BQU0sWUFBWSxHQUFHLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDNUUsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUMsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUMsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFB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RUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFO0FBQ2QsSUFBSSxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzdCLElBQUksSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztBQUN6QztBQUNBLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFO0FBQ2xCLE1BQU0sSUFBSSxZQUFZLEtBQUssQ0FBQyxFQUFFO0FBQzlCLFFBQVEsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3RJLE9BQU87QUFDUDtBQUNBLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUMvRyxNQUFNLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDN0MsTUFBTSxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsR0FBRyxDQUFDLENBQUMsSUFBSSxZQUFZLElBQUksQ0FBQyxDQUFDO0FBQ3ZELE1BQU0sT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLEdBQUcsWUFBWSxHQUFHLENBQUMsUUFBUSxHQUFHLElBQUksS0FBSyxZQUFZLE1BQU0sQ0FBQyxDQUFDO0FBQ3BGLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLFlBQVksS0FBSyxDQUFDLEVBQUU7QUFDdkMsTUFBTSxPQUFPLElBQUks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Q0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDckIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNyQixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsTUFBTTtBQUNoQjtBQUNBLFFBQVEsS0FBSyxDQUFDO0FBQ2QsVUFBVSxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixVQUFVLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsVUFBVSxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN4QixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFVBQVUsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsTUFBTTtBQUNoQjtBQUNBLFFBQVEsS0FBSyxDQUFDO0FBQ2QsVUFBVSxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsTUFBTTtBQUNoQjtBQUNBLFFBQVEsS0FBSyxDQUFDO0FBQ2QsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsTUFBTTtBQUNoQixPQUFPO0FBQ1A7QUFDQSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQzVCLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbFksTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUM1QixNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xZLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDNUIsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwWSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQzdCLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMs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Q0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMzQixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDckIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLE1BQU07QUFDaEI7QUFDQSxRQUFRLEtBQUssQ0FBQztBQUNkLFVBQVUsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixVQUFVLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsVUFBVSxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDeEIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMzQixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFVBQVUsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3JCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsTUFBTTtBQUNoQjtBQUNBLFFBQVEsS0FBSyxDQUFDO0FBQ2QsVUFBVSxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMzQixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDckIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLENBQUM7QUFDZCxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUMzQixVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDMUIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNyQixVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QixVQUFVLE1BQU07QUFDaEIsT0FBTztBQUNQO0FBQ0EsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztBQUN4QixRQUFRLElBQUksRUFBRSxPQUFPO0FBQ3JCLFFBQVEsTUFBTSxFQUFFLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQztBQUNsQyxRQUFRLE1BQU0sRUFBRSxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUM7QUFDbEMsT0FBTyxDQUFDLENBQUM7QUFDVCxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxxQkFBcUIsQ0FBQyxLQUFLLEVBQUU7QUFDL0IsSUFBSSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3ZDLElBQUksSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLDhCQUE4QixDQUFDLENBQUM7QUFDL0UsSUFBSSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTTtBQUM5QixVQUFVLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQy9CLElBQUksTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUM3QixJQUFJLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDN0IsSUFBSSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFHLElBQUksTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRyxJQUFJLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUcsSUFBSSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFHLElBQUksSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxVQUFVLElBQUksV0FBVyxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0gsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsNkJBQTZCLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsNkJBQTZCLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUNsSSxJQUFJLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsVUFBVSxJQUFJLFdBQVcsQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNILElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLDZCQUE2QixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLDZCQUE2QixFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDbEksSUFBSSxNQUFNLGNBQWMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ3hDLElBQUksTUFBTSxZQUFZLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxDQUFDO0FBQ3pFLElBQUksTUFBTSxZQUFZLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxDQUFDO0FBQ3pFLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsSUFBSSxNQUFNLEVBQUUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDaEMsVUFBVSxFQUFFLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsSUFBSSxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLFVBQVUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsVUFBVSxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QixVQUFVLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsSUFBSSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQy9CLFVBQVUsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNoQztBQUNBLElBQUksS0FBSyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLFFBQVEsRUFBRSxHQUFHLEVBQUUsRUFBRTtBQUM5QyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ3RFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDdEUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztBQUN0RSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ3RFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDdEUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztBQUN0RTtBQUNBLE1BQU0sS0FBSyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLFFBQVEsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNyRCxRQUFRLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLEdBQUcsS0FBSyxRQUFRLE1BQU0sR0FBRyxLQUFLLENBQUMsSUFBSSxHQUFHLEtBQUssUUFBUSxDQUFDLEVBQUU7QUFDaEYsVUFBVSxTQUFTO0FBQ25CLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNqQixZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEIsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEI7QUFDQSxRQUFRLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDckMsVUFBVSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzVDLFlBQVksTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRCxZQUFZLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDLFlBQVksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEMsV0FBVztBQUNYLFNBQVM7QUFDVDtBQUNBLFFBQVEsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDeEMsUUFBUSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsUUFBUSxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUN4QyxRQUFRLE1BQU0sUUFBUSxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLFFBQVEsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDOUUsUUFBUSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztBQUM5RSxRQUFRLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQzlFLFFBQVEsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM5QixPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QixJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DLElBQUksWUFBWSxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckQsSUFBSSxZQUFZLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRCxJQUFJLFlBQVksQ0FBQyxjQUFjLEdBQUcsUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNoRSxJQUFJLFlBQVksQ0FBQyxjQUFjLEdBQUcsUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDMUIsTUFBTSxJQUFJLEVBQUUsU0FBUztBQUNyQixNQUFNLE1BQU0sRUFBRSxZQUFZO0FBQzFCLE1BQU0sTUFBTSxFQUFFLFlBQVk7QUFDMUIsTUFBTSxjQUFjO0FBQ3BCLEtBQUssQ0FBQztBQUNOLEdBQUc7QUFDSDtBQUNBLEVBQUUsYUFBYSxHQUFHO0FBQ2xCLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBUSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBUSxJQUFJLEdBQUcsSUFBSTtBQUNuQixRQUFRLElBQUksR0FBRyxJQUFJLENBQUM7QUFDcEI7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzFELE1BQU0sTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakMsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pDLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqQyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakMsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDM0MsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLEdBQUc7QUFDZCxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3JCLElBQUksTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUMvQixJQUFJLE1BQU0sWUFBWSxHQUFHLElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDN0Q7QUFDQSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDeEQsTUFBTSxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsTUFBTSxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsTUFBTSxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQztBQUMvQixJQUFJLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDL0IsSUFBSSxNQUFNLFlBQVksR0FBRyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNEO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3hELE1BQU0sTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLE1BQU0sWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLE1BQU0sWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxD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RyxDQUFDLENBQUM7QUFDL0IsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzlDO0FBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDNUMsTUFBTSxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQixLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDaEQsTUFBTSxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQixLQUFLO0FBQ0w7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1QyxNQUFNLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QixNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxNQUFNLG1CQUFtQixDQUFDO0FBQzFCLEVBQUUsV0FBVyxDQUFDLFNBQVMsRUFBRTtBQUN6QixJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0FBQy9CLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxDQUFDLFlBQVksRUFBRTtBQUN4QixJQUFJLE1BQU0sS0FBSyxHQUFHLElBQUksZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3BELElBQUksSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLElBQUksTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUNyQyxJQUFJLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7QUFDcEMsSUFBSSxJQUFJLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZCO0FBQ0EsSUFBSSxPQUFPLE9BQU8sR0FBRyxNQUFNLEVBQUU7QUFDN0IsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDdEM7QUFDQSxNQUFNLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxFQUFFO0FBQ3hDLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM3QixRQUFRLFNBQVM7QUFDakIsT0FBTztBQUNQO0FBQ0EsTUFBTSxRQUFRLFFBQVE7QUFDdEIsUUFBUSxLQUFLLElBQUk7QUFDakIsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMxQjtBQUNBLFVBQVUsSUFBSSxDQUFDLENBQUMsRUFBRTtBQUNsQixZQUFZLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDeEIsV0FBVztBQUNYO0FBQ0EsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLEdBQUc7QUFDaEIsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUN0QixVQUFVLE1BQU07QUFDaEI7QUFDQSxRQUFRLEtBQUssS0FBSztBQUNsQixVQUFVLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDMUIsVUFBVSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQyxVQUFVLE1BQU07QUFDaEI7QUFDQSxRQUFRLEtBQUssS0FBSztBQUNsQixVQUFVLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDMUIsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUIsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLEtBQUs7QUFDbEIsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMxQjtBQUNBLFVBQVUsSUFBSSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFO0FBQzVELFlBQVksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDL0IsV0FBVyxNQUFNO0FBQ2pCLFlBQVksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDOUIsV0FBVztBQUNYO0FBQ0EsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLE1BQU07QUFDbkIsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLFVBQVU7QUFDdkIsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMxQjtBQUNBLFVBQVUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ3JCLFlBQVksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDL0IsV0FBVyxNQUFNO0FBQ2pCLFlBQVksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDL0IsV0FBVztBQUNYO0FBQ0EsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLFNBQVM7QUFDdEIsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLE1BQU07QUFDbkIsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixVQUFVLE1BQU07QUFDaEI7QUFDQSxRQUFRLEtBQUssS0FBSztBQUNsQixVQUFVLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDMUIsVUFBVSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQyxVQUFVLE1B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Q3BCLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMxQixVQUFVLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLElBQUk7QUFDakIsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMxQixVQUFVLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdCLFVBQVUsTUFBTTtBQUNoQjtBQUNBLFFBQVEsS0FBSyxJQUFJO0FBQ2pCLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMxQixVQUFVLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLFVBQVUsTUFBTTtBQUNoQjtBQUNBLFFBQVEsS0FBSyxLQUFLO0FBQ2xCLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMxQixVQUFVLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUMsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLElBQUk7QUFDakIsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMxQixVQUFVLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVCLFVBQVUsTUFBTTtBQUNoQjtBQUNBLFFBQVEsS0FBSyxLQUFLO0FBQ2xCLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMxQixVQUFVLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDMUIsVUFBVSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1QixVQUFVLE1BQU07QUFDaEI7QUFDQSxRQUFRLEtBQUssS0FBSztBQUNsQixVQUFVLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDMUIsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUIsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLElBQUk7QUFDakIsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMxQixVQUFVLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzlCLFVBQVUsTUFBTTtBQUNoQjtBQUNBLFFBQVEsS0FBSyxLQUFLO0FBQ2xCLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMxQixVQUFVLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QixVQUFVLE1BQU07QUFDaEI7QUFDQSxRQUFRLEtBQUssS0FBSztBQUNsQixVQUFVLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDMUI7QUFDQSxVQUFVLElBQUksSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFO0FBQ3BDLFlBQVksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLFdBQVcsTUFBTTtBQUNqQixZQUFZLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixXQUFXO0FBQ1g7QUFDQSxVQUFVLE1BQU07QUFDaEI7QUFDQSxRQUFRLEtBQUssSUFBSTtBQUNqQixVQUFVLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDMUIsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCO0FBQ0EsVUFBVSxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUU7QUFDNUQsWUFBWSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMvQixXQUFXLE1BQU07QUFDakIsWUFBWSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM5QixXQUFXO0FBQ1g7QUFDQSxVQUFVLE1BQU07QUFDaEI7QUFDQSxRQUFRLEtBQUssS0FBSztBQUNsQixVQUFVLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN0QixVQUFVLE1BQU07QUFDaEI7QUFDQSxRQUFRLEtBQUssTUFBTTtBQUNuQixVQUFVLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDMUIsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0IsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLE9BQU87QUFDcEIsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLEtBQUs7QUFDbEIsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEMsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLE1BQU07QUFDbkIsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsVUFBVSxNQUFNO0FBQ2hCO0FBQ0EsUUFBUSxLQUFLLEtBQUs7QUFDbEIsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMxQixVQUFVLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVCLFVBQVUsTUFBTTtBQUNoQjtBQUNBLFFBQVEsS0FBSyxNQUFNO0FBQ25CLFVBQVUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzQixVQUFVLE1BQU07QUFDaEI7QUFDQSxRQUFRLEtBQUssVUFBVTtBQUN2QixVQUFVLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDMUIsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkQsVUFBVSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFVBQVUsTUFBTTtBQUNoQjtBQUNBLFFBQVEsS0FBSyxLQUFLO0FBQ2xCLFVBQVUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMxQixVQUFVLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDMUI7QUFDQSxVQUFVLElBQUks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R0FBRztBQUM5QyxFQUFFLEtBQUssRUFBRSxJQUFJO0FBQ2IsQ0FBQyxFQUFFLENBQUM7QUFDSixPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNwQjtBQUNBLElBQUksS0FBSyxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DO0FBQ0EsTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNyNUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN2a0Q7QUFDQSxTQUFTLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDbEIsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMs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Q0FBQyxHQUFHLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNsQyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFBRTtBQUM1QixNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDMUIsS0FBSyxNQUFNO0FBQ1gsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFDakIsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNSO0FBQ0EsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNsQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakI7QUFDQSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtBQUNwQixNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLEtBQUssSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFDakQsS0FBSyxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFDckQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQjtBQUNBLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFO0FBQ3BCLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQixLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDdEMsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFDN0UsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO0FBQ2hILE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDOUIsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDbEMsSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFDM0IsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUN2QyxRQUFRLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtBQUMvQixVQUFVLE1BQU07QUFDaEIsU0FBUztBQUNUO0FBQ0EsUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcs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LEtBQUssR0FBRyxHQUFHLENBQUM7QUFDbEIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUNsQixJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUNsQixJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUNsQixJQUFJLENBQUMsQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDO0FBQ3BCLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFDckIsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUN2QixJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFD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RyxHQUFHLENBQUM7QUFDZixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUN2QixJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDdkIsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUN2QixJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQ3ZCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztBQUNyQixJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBQ3JCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFH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QUFDbEIsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUNsQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDbEIsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDbEIsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztBQUNwQixJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBQ3JCLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDZixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUN2QixJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2Qs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QyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ3hCLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDdEIsSUFBSSxDQUFDLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQztBQUN6QixJQUFJLENBQUMsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ3hCLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDdkIsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElB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LEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBQ3JCLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDdEIsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUN2QixJQUFJLENBQUMsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUNsQixJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDbkIsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUNsQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDbEIsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUNsQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDbEIsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxJQUFJLEdB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ZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUN4QixJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLElBQUksQ0FBQyxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUM7QUFDekIsSUFBSSxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztBQUN4QixJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQ3ZCLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDdEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUN2QixJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQ3ZCLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDdkIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBQ3JCLElBQUksQ0FBQyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFDckIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0FBQ25CLElB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QUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDdEIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLElBQUksQ0FBQyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7QUFDcEIsSUFBSSxDQUFDLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztBQUNyQixJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ2YsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDZixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ3hCLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDdEIsSUFBSSxDQUFDLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQztBQUN6QixJQUFJLENBQUMsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ3hCLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDdkIsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDdEIsSUFBSSxDQUFDLENBQUMsR0FB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RyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ3hCLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDdEIsSUFBSSxDQUFDLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQztBQUN6QixJQUFJLENBQUMsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO0FBQ3hCLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDdkIsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdB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LElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDdEIsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUN2QixJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBQ3JCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUNsQixJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0FBQ25CLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDbkIsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUNsQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDbEIsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUNsQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDbEIsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDbEIsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztBQUNwQixJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBQ3JCLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDZixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLElBQUksQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUM7QUFDeEIsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUN2QixJQUFJLENBQUMsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ3RCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDZCxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2QsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUN0QixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUM7QUFDdkIsSUFBSSxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztBQUN2QixJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0FBQ3ZCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFB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VUFBVSxDQUFDLEVBQUU7QUFDdkUsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUNsQixJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ2YsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUNmLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUNmLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDZixJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ2YsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ2YsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUNmLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDZixJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ2YsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDaEIsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUNoQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNsQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7QUFDakIsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNqQixJQUFJLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxD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VUFBVSxDQUFDLENBQUM7QUFDaEU7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDaEQsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLFVBQVUsR0FBRyxPQUFPLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMzRSxNQUFNLFVBQVUsSUFBSSxPQUFPLENBQUM7QUFDNUIsTUFBTSxNQUFNLElBQUksVUFBVSxDQUFDO0FBQzNCLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsR0FBRyxPQUFPLEVBQUUsVUFBVSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDekU7QUFDQSxJQUFJLE9BQU8sTUFBTSxJQUFJLENBQUMsRUFBRTtBQUN4QixNQUFNLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3RDLE1BQU0sSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxRCxNQUFNLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FB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QUcsSUFBSSxDQUFDLENBQUM7QUFDL0IsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2IsUUFBUSxFQUFFO0FBQ1YsUUFBUSxHQUFHLENBQUM7QUFDWjtBQUNBLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxFQUFFO0FBQ25CLE1BQU0sSUFBSSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQztBQUNuQztBQUNBLE1BQU0sS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2QyxRQUFRLFFBQVEsR0FBRyxDQUFDLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsUUFBUSxRQUFRLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUNoQztBQUNBLFFBQVEsT0FBTyxDQUFDLEdBQUcsUUFBUSxFQUFFO0FBQzdCLFVBQVUsR0FBRyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0FBQ3BDLFVBQVUsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25DLFVBQVUsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2QyxVQUFVLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkMsVUFBVSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZDLFVBQVUsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2QyxVQUFVLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkMsVUFBVSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZDLFVBQVUsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqQixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxHQUFHLFFBQVEsRUFBRTtBQUMxQixVQUFVLEdBQUcsR0FBRyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztBQUNwQyxVQUFVLElBQUksR0FBRyxHQUFHLENBQUM7QUFDckI7QUFDQSxVQUFVLE9BQU8sQ0FBQyxHQUFHLFFBQVEsRUFBRTtBQUMvQixZQUFZLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUMxQyxZQUFZLElBQUksS0FBSyxDQUFDLENBQUM7QUFDdkIsV0FBVztBQUNYLFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSyxNQUFNO0FBQ1gsTUFBTSxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7QUFDbkIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ2Q7QUFDQSxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDNUMsUUFBUSxJQUFJLENBQUMsR0FBRyxRQUFRLEtBQUssQ0FBQyxFQUFFO0FBQ2hDLFVBQVUsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNsQixVQUFVLElBQUksR0FBRyxDQUFDLENBQUM7QUFDbkIsU0FBUztBQUNUO0FBQ0EsUUFBUSxPQUFPLElBQUksR0FBRyxHQUFHLEVBQUU7QUFDM0IsVUFBVSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztBQUMvQyxVQUFVLElBQUksSUFBSSxDQUFDLENBQUM7QUFDcEIsU0FBUztBQUNUO0FBQ0EsUUFBUSxNQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLFFBQVEsSUFBSSxLQUFLLEdBQUcsR0FBRyxJQUFJLGFBQWEsQ0FBQztBQUN6QztBQUNBLFFBQVEsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO0FBQ3ZCLFVBQVUsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNwQixTQUFTLE1BQU0sSUFBSSxLQUFLLEdBQUcsR0FBRyxFQUFFO0FBQ2hDLFVBQVUsS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUN0QixTQUFTO0FBQ1Q7QUFDQSxRQUFRLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDMUIsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksYUFBYSxJQUFJLENBQUMsQ0FBQztBQUN4QyxRQUFRLElBQUksR0FBRyxhQUFhLENBQUM7QUFDN0IsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxNQUFNLENBQUM7QUFDbEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxXQUFXLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRTtBQUMzRCxJQUFJLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDN0IsSUFBSSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzNCLElBQUksSUFBSSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNuQztBQUNBLElBQUksSUFBSSxLQUFLLEVBQUU7QUFDZixNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO0FBQ3ZCLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDeEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDaEQsTUFBTSxLQUFLLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3JDO0FBQ0EsTUFBTSxJQUFJLEVBQUUsS0FBSyxLQUFLLElBQUksRUFBRSxLQUFLLE1BQU0sRUFBRTtBQUN6QyxRQUFRLFFBQVEsR0FBRyxlQUFlLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0UsT0FBTztBQUNQLEtBQUssTUFBTSxJQUFJLElBQUksRUFBRTtBQUNyQixNQUFNLElBQUksSUFBSSxZQUFZLFFBQVEsRUFBRTtBQUNwQyxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3hCLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDekIsUUFBUSxRQUFRLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDbEQsUUFBUSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUMxQixRQUFRLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDdEM7QUFDQSxRQUFRLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQy9DLFVBQVUsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUMsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLEVBQUUsS0FBSyxLQUFLLElBQUksRUFBRSxLQUFLLE1BQU0sRUFBRTtBQUMzQyxVQUFVLFFBQVEsR0FBRyxlQUFlLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDaEYsU0FBUztBQUNULE9BQU8sTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDdEMsUUFBUSxRQUFRLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFDekQsUUFBUSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQ3ZDO0FBQ0EsUUFBUSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLEtBQUssR0FBRyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUN0RCxVQUFVLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztBQUMxQixVQUFVLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0M7QUFDQSxVQUFVLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3pDLFlBQVksTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRCxZQUFZLE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckM7QUFDQSxZQUFZLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsRUFBRTtBQUMxRSxjQUFjLE9BQU8sR0FBRyxHQUFHLENBQUM7QUFDNUIsY0FBYyxNQUFNO0FBQ3BCLGFBQWE7QUFDYixXQUFXO0FBQ1g7QUFDQSxVQUFVLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDaEMsU0FBUztBQUNULE9BQU8sTUFBTTtBQUNiLFFBQVEsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsc0JBQXNCLENBQUMsQ0FBQztBQUM1RCxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLFFBQVEsRUFBRTtBQUNsQixNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxLQUFLLEdBQUcsWUFBWSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUN6RSxRQUFRLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsT0FBTztBQUNQLEtBQUssTUFBTTtBQUNYLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLEtBQUssR0FBRyxZQUFZLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3pFLFFBQVEsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6QixPQUFPO0FBQ1AsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsWUFBWSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO0FBQ3RDLElBQUksTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztBQUNqRDtBQUNBLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNoQixNQUFNLE9BQU87QUFDYixLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN0RCxJQUFJLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixJQUFJLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixJQUFJLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixJQUFJLE1BQU0sTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDO0FBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDeEMsTUFBTSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2xDO0FBQ0EsTUFBTSxJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDdkIsUUFBUSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hCLFFBQVEsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUIsUUFBUSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1QixRQUFRLFNBQVM7QUFDakIsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDO0FBQzVCLE1BQU0sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BELE1BQU0sTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUQsTUFBTSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1RCxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxlQUFlLENBQUMsU0FBUyxHQUFHLEtBQUssRUFBRTtBQUNyQyxJQUFJLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDckMsSUFBSSxNQUFNLFVBQVUsR0FBRyxJQUFJLENB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S0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7QUFDOUcsUUFBUSxRQUFRLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUUsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLFdBQVcsR0FBRztBQUMxQixRQUFRLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtBQUN2QixRQUFRLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztBQUNyQixRQUFRLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztBQUNqQyxRQUFRLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztBQUNqQyxRQUFRLEtBQUssRUFBRSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLENBQUM7QUFDbEQsUUFBUSxLQUFLLEVBQUUsUUFBUTtBQUN2QixRQUFRLEtBQUssRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssR0FBRyxTQUFTO0FBQzFELFFBQVEsSUFBSSxFQUFFLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLFFBQVEsTUFBTSxFQUFFLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLFFBQVEsS0FBSyxFQUFFLEVBQUU7QUFDakIsT0FBTyxDQUFDO0FBQ1IsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDdkMsTUFBTSxHQUFHLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN4QztBQUNBLE1BQU0sSUFBSSxJQUFJLFdBQVcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQzlELFFBQVEsS0FBSyxDQUFDLElB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SUFBSSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkMsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsT0FBTyxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7QUFDdEM7QUFDQSxNQUFNLFlBQVksR0FBRyxTQUFTLG1CQUFtQixHQUFHO0FBQ3BELEVBQUUsTUFBTSxDQUFDLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3pRLEVBQUUsTUFBTSxDQUFDLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUNyeEI7QUFDQSxFQUFFLFNBQVMsSUFBSSxDQUFDLElB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RSxDQUFDLEVBQUU7QUFDL0IsUUFBUSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUU7QUFDcEIsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCLFNBQVMsTUFBTSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUU7QUFDM0IsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzdCLFNBQVMsTUFBTSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUU7QUFDM0IsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEIsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzdCLFNBQVMsTUFBTTtBQUNmLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN6QixTQUFTO0FBQ1Q7QUFDQSxRQUFRLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDckIsY0FBYyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDakQsY0FBYyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxTQUFTLElBQUksTUFBTSxHQUFHLFNBQVMsS0FBSyxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RFLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixPQUFPO0FBQ1A7QUFDQSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sSUFBSSxVQUFVLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwUixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyxFQUFFLENBQUM7QUFDSjtBQUNBLE9BQU8sQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0FBQ3BDO0FBQ0EsTUFBTSxNQUFNLENBQUM7QUFDYixFQUFFLFdBQVcsQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFO0FBQ3ZDLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQ2hDLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLEdBQUc7QUFDSDtBQUNBLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRTtBQUNaLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzNCLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3pCLEdBQUc7QUFDSDtBQUNBLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRTtBQUNaLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzNCLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3pCLEdBQUc7QUFDSDtBQUNBLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRTtBQUNYLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzNCLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3pCLEdBQUc7QUFDSDtBQUNBLEVBQUUsVUFBVSxDQUFDLE1BQU0sRUFBRTtBQUNyQixJQUFJLElBQUksTUFBTSxJQUFJLEVBQUUsRUFBRTtBQUN0QixNQUFNLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxNQUFNLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMvQyxNQUFNLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEtBQUssTUFBTTtBQUNYLE1BQU0sSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxLQUFLLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUM7QUFDaEUsTUFBTSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxHQUFHLENBQUMsQ0FBQztBQUMzQyxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLENBQUMsTUFBTSxFQUFFO0FBQ3BCLElBQUksSUFBSSxNQUFNLElBQUksRUFBRSxFQUFFO0FBQ3RCLE1BQU0sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDMUMsTUFBTSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNuQixLQUFLLE1BQU07QUFDWCxNQUFNLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLEdBQUcsTUFBTSxDQUFDO0FBQ2pFLE1BQU0sSUFBSSxDQUFDLEdBQUcsS0FBSyxNQUFNLENBQUM7QUFDMUIsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRTtBQUN0QixJQUFJLElBQUksR0FBRyxFQUFFLElBQUksQ0FBQztBQUNsQjtBQUNBLElBQUksSUFBSSxNQUFNLEdBQUcsRUFBRSxFQUFFO0FBQ3JCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDdEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUN0QixLQUFLLE1BQU07QUFDWCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3JCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDdkIsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLElBQUksRUFBRSxDQUFDO0FBQ2pCLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDO0FBQ3BELElBQUks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QUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM3d0I7QUFDQSxFQUFFLFNBQVMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQ3RDLElBQUksSUFBSSxFQUFFLEdBQUcsVUFBVTtBQUN2QixRQUFRLEVBQUUsR0FBRyxVQUFVO0FBQ3ZCLFFBQVEsRUFBRSxHQUFHLFVBQVU7QUFDdkIsUUFBUSxFQUFFLEdBQUcsVUFBVTtBQUN2QixRQUFRLEVBQUUsR0FBRyxVQUFVO0FBQ3ZCLFFBQVEsRUFBRSxHQUFHLFVBQVU7QUFDdkIsUUFBUSxFQUFFLEdBQUcsVUFBVTtBQUN2QixRQUFRLEVBQUUsR0FBRyxVQUFVLENBQUM7QUFDeEIsSUFBSSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDM0QsSUFBSSxNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNoRCxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNiO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNqQyxNQUFNLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUNqQyxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2QixJQUFJLE1BQU0sQ0FBQyxHQUFHLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDL0I7QUFDQSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNsQixNQUFNLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3ZDLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDdEMsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztBQUN0QyxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3JDLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDckMsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQztBQUNBLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLEdBQUc7QUFDbkMsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUMvQixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUYsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2YsT0FBTztBQUNQO0FBQ0EsTUFBTSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNoQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlGLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNoQixVQUFVLENBQUMsR0FBRyxFQUFFO0FBQ2hCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7QUFDaEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtBQUNoQixVQUFVLENBQUMsR0FBRyxFQUFFO0FBQ2hCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7QUFDaEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtBQUNoQixVQUFVLENBQUMsR0FBRyxFQUFFO0FBQ2hCLFVBQVUsRUFBRTtBQUNaLFVBQVUsRUFBRSxDQUFDO0FBQ2I7QUFDQSxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQy9CLFFBQVEsRUFBRSxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRCxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDckMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdkIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDeEIsT0FBTztBQUNQO0FBQ0EsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEIsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwZ0IsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsRUFBRSxDQUFDO0FBQ0o7QUFDQSxPQUFPLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztBQUMxQztBQUNBLE1BQU0sZUFBZSxHQUFHLFNBQVMsc0JBQXNCLEdBQUc7QUFDMUQsRUFBRSxTQUFTLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0FBQ3BDLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQixJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLElBQUksR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2QsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2YsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtBQUNyQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckIsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDZixJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0FBQ2pDLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQixJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDM0IsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtBQUN0QyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckIsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzNCLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLEdBQUc7QUFDSDtBQUNBLEVBQUUsU0FBUyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7QUFDdkMsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixHQUFHO0FBQ0g7QUFDQSxFQUFFLFNBQVMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7QUFDNUMsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMzQixJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixHQUFHO0FBQ0g7QUFDQSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQzcwRjtBQUNBLEVBQUUsU0FBUyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxHQUFHLEtBQUssRUFBRTtBQUN2RCxJQUFJLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUN2QztBQUNBLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUNsQixNQUFNLEVBQUUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDOUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzlDLE1BQU0sRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM5QyxNQUFNLEVBQUUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDOUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzlDLE1BQU0sRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM5QyxNQUFNLEVBQUUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDOUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzlDLEtBQUssTUFBTTtBQUNYLE1BQU0sRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM5QyxNQUFNLEVBQUUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDOUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzlDLE1BQU0sRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM5QyxNQUFNLEVBQUUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDOUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzlDLE1BQU0sRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM5QyxNQUFNLEVBQUUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDOUMsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUQsSUFBSSxNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNoRCxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNiO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNqQyxNQUFNLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUNqQyxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2QixJQUFJLE1BQU0sQ0FBQyxHQUFHLFlBQVksR0FBRyxFQUFFLENBQUM7QUFDaEM7QUFDQSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNsQixNQUFNLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0QixLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3ZDLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDdEMsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztBQUN0QyxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3JDLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDckMsSUFBSSxNQUFNLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM1QjtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDN0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlCLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM1QixRQUFRLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzVCLFFBQVEsQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QixJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDNUIsUUFBUSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM1QixRQUFRLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0IsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzVCLFFBQVEsQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QixJQUFJLE1BQU0sRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDL0IsVUFBVSxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLElBQUksTUFBTSxJQUFJLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNqQyxVQUFVLElBQUksR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbEMsSUFBSSxJQUFJLElBQUksQ0FBQztBQUNiO0FBQ0EsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksR0FBRztBQUNuQyxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQy9CLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0YsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbEcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2YsT0FBTztBQUNQO0FBQ0EsTUFBTSxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNoQyxRQUFRLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEIsUUFBUSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMvQyxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLFFBQVEsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzNDLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2QixRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzVCLE9BQU87QUFDUDtBQUNBLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNuQixNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbkIsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25CLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNuQixNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbkIsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25CLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNuQixNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbkI7QUFDQSxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQy9CLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQixRQUFRLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2xDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyQixRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDaEMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JCLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQixRQUFRLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckIsUUFBUSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMzQixRQUFRLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDakMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JCLFFBQVEsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNqQixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyQixRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakIsT0FBTztBQUNQO0FBQ0EsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEIsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQixLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksTUFBTSxDQUFDO0FBQ2Y7QUFDQSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDbEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzQixNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDNUIsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1QixNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVCLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDNUIsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1QixNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVCLEtBQUssTUFBTTtBQUNYLE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0IsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzQixNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVCLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDNUIsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1QixNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVCLEtBQUs7QUFDTDtBQUNBLElBQUksT0FBTyxNQUFNLENBQUM7QUFDbEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsRUFBRSxDQUFDO0FBQ0o7QUFDQSxPQUFPLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztBQUMxQztBQUNBLFNBQVMsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQy9DLEVBQUUsT0FBTyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDckQsQ0FBQztBQUNEO0FBQ0EsTUFBTSxVQUFVLENBQUM7QUFDakIsRUFBRSxZQUFZLENBQUMsSUFBSSxFQUFFO0FBQ3JCLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFFO0FBQ2hCLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsTUFBTSxhQUFhLENBQUM7QUFDcEIsRUFBRSxXQUFXLEdBQUc7QUFDaEIsSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssYUFBYSxFQUFFO0FBQzVDLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLGtDQUFrQyxDQUFDLENBQUM7QUFDakUsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMvaEQsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNuaUQsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksV0FBVyxDQUFDLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUNsaUcsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZDO0FBQ0EsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2xDLE1BQU0sSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFO0FBQ25CLFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDLE9BQU8sTUFBTTtBQUNiLFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN4QyxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JDLElBQUksSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7QUFDNUIsR0FBRztBQUNIO0FBQ0EsRUFBRSxVQUFVLENBQUMsU0FBUyxFQUFFO0FBQ3hCLElBQUksSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLDRDQUE0QyxDQUFDLENBQUM7QUFDekUsR0FBRztBQUNIO0FBQ0EsRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRTtBQUN2QixJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDaEIsSUFBSSxNQUFNLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyQyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDckI7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDekQsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDNUQsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQixNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEIsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQixNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEIsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQixNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQixNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkI7QUFDQSxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDbkMsUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QyxPQUFPO0FBQ1A7QUFDQSxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDcEQsUUFBUSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLE9BQU87QUFDUDtBQUNBLE1BQU0sS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3RDLFFBQVEsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QyxRQUFRLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLFFBQVEsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0MsUUFBUSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQyxRQUFRLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFH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QUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25CLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQixNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEIsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQixNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCO0FBQ0EsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDdEMsUUFBUSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQVEsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFRLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBUSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUM5QixRQUFRLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2xELFFBQVEsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDbEQsUUFBUSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNsRCxRQUFRLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2xELE9BQU87QUFDUDtBQUNBLE1BQU0sS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNwRCxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNqQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsS0FBSztBQUNMO0FBQ0EsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pCLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQixJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6QixJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekIsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQixJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQixJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekIsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQixJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEI7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDekQsTUFBTSxLQUFL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LEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNsaUQsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckMsR0FBRztBQUNIO0FBQ0EsRUFBRSxVQUFVLENBQUMsU0FBUyxFQUFFO0FBQ3hCLElBQUksTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLElBQUksTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUN0QixJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDNUIsSUFBSSxNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDMUI7QUFDQSxJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUN4QyxNQUFNLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDN0IsTUFBTSxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FB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Q25CLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNuQixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbkIsT0FBTyxNQUFNLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUU7QUFDL0IsUUFBUSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzQixRQUFRLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNCLFFBQVEsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDM0IsUUFBUSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzQixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbkIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25CLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNuQixRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbkIsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2hCO0FBQ0EsUUFBUSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUU7QUFDOUIsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQztBQUNoQyxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0EsTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ2xDLFFBQVEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLFFBQVEsQ0FBQyxFQUFFLENBQUM7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SSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksRUFBRSxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksRUFBRSxXQUFXLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLE9BQU8sS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLElBQUksRUFBRSxPQUFPLEtBQUssSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLE9BQU8sS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksRUFBRSxPQUFPLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxFQUFFLE9BQU8sS0FBSyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxPQUFPLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLE9BQU8sS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxPQUFPLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3cUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUMvQixNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7QUFDekQ7QUFDQSxTQUFTLFVBQVUsQ0FBQyxLQUFLLEVBQUU7QUFDM0IsRUFBRSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3ZCO0FBQ0EsRUFBRSxJQUFJLEtBQUssS0FBSyxHQUFHLEVBQUU7QUFDckIsSUFBSSxPQUFPLFFBQVEsQ0FBQztBQUNwQixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbEMsQ0FBQztBQUNEO0FBQ0EsU0FBUyxlQUFlLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxNQUFNLEdBQUcsSUFBSSxFQUFFO0FBQzdELEVBQUUsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUN0QztBQUNBLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNkLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsR0FBRztBQUNIO0FBQ0EsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ3JCLEVBQUUsTUFBTSxNQUFNLEdBQUcsQ0FBQztBQUNsQixJQUFJLElBQUk7QUFDUixJQUFJLFNBQVMsRUFBRSxHQUFHLEdBQUcsSUFBSTtBQUN6QixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxFQUFFLEVBQUUsSUFBSTtBQUNaLElBQUksUUFBUSxFQUFFLElBQUk7QUFDbEIsSUFBSSxRQUFRLEVBQUUsU0FBUyxDQUFDLEdBQUc7QUFDM0IsR0FBRyxDQUFDLENBQUM7QUFDTCxFQUFFLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDeEI7QUFDQSxFQUFFLE9BQU8sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDNUIsSUFBSSxNQUFNLElBQUksR0FBRyxHQUFHLENBQUM7QUFDckIsSUFBSSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDcEM7QUFDQSxJQUFJLElBQUksSUFBSSxLQUFLLEdBQUcsRUFBRTtBQUN0QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNsRDtBQUNBLE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNsQixRQUFRLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSx1Q0FBdUMsQ0FBQyxDQUFDO0FBQ2pFLFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsT0FBTztBQUNQO0FBQ0EsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdELE1BQU0sR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDLE1BQU0sU0FBUztBQUNmLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxRQUFRLENBQUM7QUFDakI7QUFDQSxJQUFJLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFDNUIsTUFBTSxLQUFLLEdBQUc7QUFDZCxRQUFRLElBQUksQ0FBQyxhQUFhLEVBQUU7QUFDNUIsVUFBVSxPQUFPLElBQUksQ0FBQztBQUN0QixTQUFTO0FBQ1Q7QUFDQSxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ2QsUUFBUSxRQUFRLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztBQUNwQyxRQUFRLE1BQU07QUFDZDtBQUNBLE1BQU0sS0FBSyxHQUFHO0FBQ2QsUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUNkLFFBQVEsUUFBUSxHQUFHLFNBQVMsQ0FBQyxP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Q0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMvQztBQUNBLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUM1QixRQUFRLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BFO0FBQ0EsUUFBUSxLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMvQyxVQUFVLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDbEMsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBLE1BQU0sTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3ZELE1BQU0sTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsQztBQUNBLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ3ZCLFFBQVEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO0FBQ3pDLFFBQVEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO0FBQzNDLFFBQVEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO0FBQzVDLFFBQVEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO0FBQzFDLE9BQU87QUFDUDtBQUNBLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsR0FBRztBQUNqQyxRQUFRLE1BQU07QUFDZCxRQUFRLE1BQU07QUFDZCxRQUFRLEtB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QUksRUFBRSxDQUFDO0FBQzVDLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE1BQU0sU0FBUyxTQUFTLFdBQVcsQ0FBQyxTQUFTLENBQUM7QUFDOUMsRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFO0FBQzFCLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0MsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ2xDLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLE1BQU0sQ0FBQyxlQUFlLEVBQUUsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ3ZGLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQztBQUNwQyxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7QUFDNUMsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3JELEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE1BQU0sT0FBTyxTQUFTLFdBQVcsQ0FBQyxTQUFTLENBQUM7QUFDNUMsRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFO0FBQzFCLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDM0MsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ2xDLElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQztBQUNwQyxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7QUFDNUMsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLElB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QUssQ0FBQyxJQUFJLEVBQUU7QUFDcEMsVUFBVSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7QUFDM0QsU0FBUyxNQUFNO0FBQ2YsVUFBVSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQztBQUNuRTtBQUNBLFVBQVUsSUFBSSxTQUFTLEtBQUssSUFBSSxFQUFFO0FBQ2xDLFlBQVksS0FBSyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ2hELFdBQVc7QUFDWCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQzdFLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUN6RSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksS0FBSyxFQUFFO0FBQ25CLFVBQVUsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRTtBQUNuQyxZQUFZLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEMsWUFBWSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDekQsV0FBVztBQUNYO0FBQ0EsVUFBVSxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRTtBQUNsRCxZQUFZLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMs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QVEsR0FBRyxVQUFVLENBQUM7QUFDL0MsSUFBSSxPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFDLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE1BQU0sTUFBTSxTQUFTLFdBQVcsQ0FBQyxTQUFTLENBQUM7QUFDM0MsRUFBRSxXQUFXLENBQUMsVUFBVSxFQUFFO0FBQzFCLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDMUMsSUFBSSxJQUFJLENBQUMsRUFBRSxHQUFHLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ2xDLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLE1BQU0sQ0FBQyxlQUFlLEVBQUUsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDekcsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDO0FBQ3BDLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztBQUM1QyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDdkIsR0FBRztBQUNIO0FBQ0EsRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxVQUFVLEVBQUU7QUFDckMsSUFBSSxVQUFVLEdBQUcsVUFBVSxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxTQUFTLENBQUM7QUFDN0UsSUFBSSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDdEUsSUFBSSxNQUFNLFFBQVEsR0FB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LENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM1RyxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLFdBQVcsR0FBRyxJQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUUsVUFBVSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0csSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRTtBQUMxQyxNQUFNLElBQUksRUFBRSxVQUFVLENBQUMsT0FBTztBQUM5QixNQUFNLFlBQVksRUFBRSxDQUFDO0FBQ3JCLE1BQU0sUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztBQUMzQixLQUFLLENBQUMsQ0FBQztBQUNQLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztBQUM5QyxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLFdBQVcsR0FBRyxJQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUUsVUFBVSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0csSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxVQUFVLEdBQUcsSUFBSSxNQUFNLENBQUMsY0FBYyxFQUFFLFVBQVUsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzVHLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxHQUFHLElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM1RyxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLFVBQVUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvRixJQUFJLElBQUksQ0FB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LE1BQU0sQ0FBQyxlQUFlLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDckgsSUFBSSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDakUsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksTUFBTSxDQUFDLGVBQWUsRUFBRSxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDakcsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLGVBQWUsRUFBRSxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDakYsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDO0FBQ3BDLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztBQUM1QyxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMxRSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsY0FBYyxFQUFFLFVBQVUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDN0QsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRSxVQUFVLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzdELElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDdkIsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNy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QUFVLENBQUMsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDdkYsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDO0FBQ3BDLElBQUksSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQztBQUM1QyxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDdEQsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsTUFBTSxNQUFNLFNBQVMsV0FBVyxDQUFDLFNBQVMsQ0FBQztBQUMzQyxFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUU7QUFDMUIsSUFBSSxLQUFLLENBQUMsY0FBYyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMxQyxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFO0FBQzNDLE1BQU0sSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRO0FBQy9CLE1BQU0sWUFBWSxFQUFFLENBQUM7QUFDckIsTUFBTSxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzVCLEtBQUssQ0FBQyxDQUFDO0FBQ1AsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLGVBQWUsRUFBRSxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3pILElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNsQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDMUMsSUFBSSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksTUFBTSxDQUFDLFVB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QyxVQUFVLEVBQUU7QUFDMUIsSUFBSSxLQUFLLENBQUMsY0FBYyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM1QyxJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFO0FBQ2hELE1BQU0sSUFBSSxFQUFFLFVBQVUsQ0FBQyxhQUFhO0FBQ3BDLE1BQU0sWUFBWSxFQUFFLENBQUM7QUFDckIsTUFBTSxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzVCLEtBQUssQ0FBQyxDQUFDO0FBQ1AsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksTUFBTSxDQUFDLGVBQWUsRUFBRSxVQUFVLENBQUMsYUFBYSxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3RHLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNsQyxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFO0FBQzVDLE1BQU0sSUFBSSxFQUFFLFVBQVUsQ0FBQyxTQUFTO0FBQ2hDLE1BQU0sWUFBWSxFQUFFLEVBQUU7QUFDdEIsTUFBTSxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDdkMsS0FBSyxDQUFDLENBQUM7QUFDUCxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUM7QUFDcEMsSUFBSSxJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO0FBQzVDLElBQUksSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxlQUFlLEVBQUUsVUFBVSxDQUFDLGFBQWEsRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN0RyxJQUFJLElBQUksQ0FB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QUN0QixJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDckIsSUFBSSxPQUFPLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxNQUFNLENBQUMsS0FBSyxFQUFFO0FBQ3ZCLElBQUksT0FBTyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM3QixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sS0FBSyxDQUFDLEtBQUssRUFBRTtBQUN0QixJQUFJLE9BQU8sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDckIsSUFBSSxPQUFPLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNCLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxNQUFNLENBQUMsS0FBSyxFQUFFO0FBQ3ZCLElBQUksT0FBTyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM3QixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sT0FBTyxDQUFDLEtBQUssRUFBRTtBQUN4QixJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUIsR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLFdBQVcsQ0FBQyxLQUFLLEVBQUU7QUFDNUIsSUFBSSxPQUFPLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2xDLEdBQUc7QUFDSDtBQUNBLEVBQUUsT0FBTyxLQUFLLENBQUMsS0FBSyxFQUFFO0FBQ3RCLElBQUksT0FBTyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1QixHQUFHO0FBQ0g7QUFDQSxFQUFFLE9BQU8sU0FBUyxDQUFDLEtBQUssRUFBRTtBQUMxQixJQUFJLE9BQU8sSUFBSSxTQUFTLENB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T0FBTyxDQUFDLENBQUM7QUFDcEMsTUFBTSxNQUFNO0FBQ1o7QUFDQSxJQUFJLEtBQUssRUFBRTtBQUNYLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNuQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsTUFBTSxNQUFNO0FBQ1o7QUFDQSxJQUFJLEtBQUssR0FBRztBQUNaLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDbEMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsTUFBTSxNQUFNO0FBQ1o7QUFDQSxJQUFJLEtBQUssR0FBRztBQUNaLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNuQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdkIsTUFBTSxNQUFNO0FBQ1osR0FBRztBQUNIO0FBQ0EsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUYsQ0FBQztBQUNEO0FBQ0EsU0FBUyxlQUFlLENB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QUFHLENBQUMsQ0FBQztBQUNwQixJQUFJLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNwQjtBQUNBLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ3JCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO0FBQy9ELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO0FBQy9ELEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQzFCLElBQUksSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3RCO0FBQ0EsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDbkIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQzdFLE1BQU0sTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQzFFLE1BQU0sTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQzdFLE1BQU0sTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQzNFLE1BQU0sTUFBTSxDQUFDLEtBQUssR0FB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RSxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFO0FBQzFELE1BQU0sSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDdEUsUUFBUSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzVCLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDNUIsTUFBTSxLQUFLLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFO0FBQ3RELFFBQVEsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUM5RyxVQUFVLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDOUIsU0FBUztBQUNULE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDNUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDM0M7QUFDQSxNQUFNLEtBQUssTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFO0FBQzVELFFBQVEsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDeEUsVUFBVSxLQUFLLENB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QUFDLE9BQU8sQ0FBQztBQUNyQyxNQUFNLElBQUksRUFBRSxLQUFLO0FBQ2pCLE1BQU0sVUFBVSxFQUFFO0FBQ2xCLFFBQVEsS0FBSyxFQUFFLENBQUMsU0FBUyxDQUFDO0FBQzFCLFFBQVEsS0FBSyxFQUFFLEVBQUU7QUFDakIsT0FBTztBQUNQLE1BQU0sUUFBUTtBQUNkLEtBQUssQ0FBQyxDQUFDO0FBQ1AsR0FBRztBQUNIO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsTUFBTSxDQUFDLFNBQVMsV0FBVyxDQUFDO0FBQzVCLEVBQUUsV0FBVyxDQUFDLFVBQVUsRUFBRTtBQUMxQixJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDM0IsR0FBRztBQUNIO0FBQ0EsRUFBRSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLEVBQUU7QUFDckMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDO0FBQ3JCLE1BQU0sT0FBTyxFQUFFLFFBQVE7QUFDdkIsS0FBSyxDQUFDLENBQUM7QUFDUDtBQUNBLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM1QztBQUNBLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3RCLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE1BQU0sRUFBRSxTQUFTLFdBQVcsQ0FBQztBQUM3QixFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUU7QUFDMUIsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzVCLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE1BQU0sRUFBRSxTQUFTLFdBQVcsQ0FBQztBQUM3QixFQUFFLFdBQVcsQ0FBQyxVQUFVLEVBQUU7QUFDMUIsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzVCLEdBQUc7QUFDSDtBQUNBLENBQUM7QUFDRDtBQUNBLE1BQU0sQ0FBQyxTQUFTLFdBQVcsQ0FBQztBQUM1QixF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